2026-02-11T09:00:02.277 [DEBUG] [Thread-126186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:00:02.277 [DEBUG] [Thread-126186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:00:02.277 [DEBUG] [Thread-126186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:00:02.318 [DEBUG] [Thread-126186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:00:02.318 [DEBUG] [Thread-126186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:00:02.319 [DEBUG] [Thread-126186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:00:02.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:00:02.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:00:02.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:00:02.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:00:02.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:00:02.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:00:02.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:00:02.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.291112 -999.00  +20.10  12.18     52  +10.20 1 2 1 1 1   888    0 12.23 129.98 ----- 8.7 12.2 279.0 14.7 26.7 -22.1 25.9 -21.3 23.8 -20.4 24.4 -21.2
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.291112
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:00:02.338 [DEBUG] [Thread-126186] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:00:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T08:59:33', tmtdew=11.65, humidity=47.19, cloud=0.0, wind=14.61, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T06:59:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:00:02.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:00:02.426 [DEBUG] [Thread-126189] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ab0
2026-02-11T09:00:02.426 [DEBUG] [Thread-126189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:00:02.442 [DEBUG] [Thread-126189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:00:02.442 [INFO] [Thread-126189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] client lang: <none>
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] server lang: <none>
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] kex follows: False
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] Compression: none
2026-02-11T09:00:02.453 [DEBUG] [Thread-126189] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:00:02.506 [DEBUG] [Thread-126189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:00:02.506 [DEBUG] [Thread-126189] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:00:02.506 [DEBUG] [Thread-126189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:00:02.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:00:02.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:00:02.568 [DEBUG] [Thread-126189] [transport.py] [_log()] userauth is OK
2026-02-11T09:00:02.568 [DEBUG] [Thread-126189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:00:02.568 [DEBUG] [Thread-126189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:00:02.568 [DEBUG] [Thread-126189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:00:02.568 [DEBUG] [Thread-126189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:00:02.583 [INFO] [Thread-126189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:00:02.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:00:02.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:00:03.414 [DEBUG] [Thread-126189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:00:03.414 [DEBUG] [Thread-126189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:00:03.462 [DEBUG] [Thread-126189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:00:03.462 [DEBUG] [Thread-126189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:00:03.471 [DEBUG] [Thread-126189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:00:03.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:00:03.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')
2026-02-11T09:00:03.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:00:03.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:00:03.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:00:03.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:00:03.505 [DEBUG] [Thread-126189] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:00:04.583 [DEBUG] [Thread-126191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:00:04.813 [DEBUG] [Thread-126192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:00:19.858 [DEBUG] [Thread-126193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:00:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:00:33.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:00:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:00:34.894 [DEBUG] [Thread-126194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:00:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 0, 8), 11.62, 46.96, 0.0, 11.91, 20.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:00:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:00:08
2026-02-11T09:00:35.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:00:36.017 [DEBUG] [Thread-126195] [transport.py] [_log()] starting thread (client mode): 0xa57c1b10
2026-02-11T09:00:36.017 [DEBUG] [Thread-126195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:00:36.037 [DEBUG] [Thread-126195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:00:36.037 [INFO] [Thread-126195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] client lang: <none>
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] server lang: <none>
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] kex follows: False
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] Compression: none
2026-02-11T09:00:36.040 [DEBUG] [Thread-126195] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:00:36.057 [DEBUG] [Thread-126195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:00:36.058 [DEBUG] [Thread-126195] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:00:36.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:00:36.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:00:36.059 [DEBUG] [Thread-126195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:00:36.060 [DEBUG] [Thread-126195] [transport.py] [_log()] userauth is OK
2026-02-11T09:00:36.060 [DEBUG] [Thread-126195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:00:36.060 [DEBUG] [Thread-126195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:00:36.060 [DEBUG] [Thread-126195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:00:36.060 [DEBUG] [Thread-126195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:00:36.079 [INFO] [Thread-126195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:00:36.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:00:36.714 [DEBUG] [Thread-126195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:00:36.715 [DEBUG] [Thread-126195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:00:36.715 [DEBUG] [Thread-126195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:00:36.756 [DEBUG] [Thread-126195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:00:36.756 [DEBUG] [Thread-126195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:00:36.759 [DEBUG] [Thread-126195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:00:36.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:00:36.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:00:36.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:00:36.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:00:36.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:00:36.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:00:36.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:00:36.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:00:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:00:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.291459 -999.00  +20.20   9.42     52  +10.10 1 2 1 1 1   888    0 12.06 121.45 ----- 6.0 9.4 284.0 15.9 26.7 -23.0 25.9 -21.0 23.8 -20.7 24.5 -21.4
2026-02-11T09:00:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:00:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:00:36.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.291459
2026-02-11T09:00:36.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:00:36.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:00:36.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:00:36.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:00:36.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:00:36.786 [DEBUG] [Thread-126195] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:00:36.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:00:08', tmtdew=11.62, humidity=46.96, cloud=0.0, wind=11.91, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T06:59:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:00:36.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:00:36.885 [DEBUG] [Thread-126198] [transport.py] [_log()] starting thread (client mode): 0xa57e08b0
2026-02-11T09:00:36.885 [DEBUG] [Thread-126198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:00:36.899 [DEBUG] [Thread-126198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:00:36.899 [INFO] [Thread-126198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:00:36.907 [DEBUG] [Thread-126198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:00:36.907 [DEBUG] [Thread-126198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] client lang: <none>
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] server lang: <none>
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] kex follows: False
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] Compression: none
2026-02-11T09:00:36.908 [DEBUG] [Thread-126198] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:00:36.969 [DEBUG] [Thread-126198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:00:36.969 [DEBUG] [Thread-126198] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:00:36.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:00:36.971 [DEBUG] [Thread-126198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:00:36.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:00:37.028 [DEBUG] [Thread-126198] [transport.py] [_log()] userauth is OK
2026-02-11T09:00:37.029 [DEBUG] [Thread-126198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:00:37.029 [DEBUG] [Thread-126198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:00:37.029 [DEBUG] [Thread-126198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:00:37.029 [DEBUG] [Thread-126198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:00:37.054 [INFO] [Thread-126198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:00:37.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:00:37.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:00:37.899 [DEBUG] [Thread-126198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:00:37.899 [DEBUG] [Thread-126198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:00:37.948 [DEBUG] [Thread-126198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:00:37.948 [DEBUG] [Thread-126198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:00:37.957 [DEBUG] [Thread-126198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:00:37.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:00:37.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:00:37.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:00:37.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:00:37.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:00:37.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:00:37.995 [DEBUG] [Thread-126198] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:00:38.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:00:38.239 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:00:49.931 [DEBUG] [Thread-126200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:01:04.617 [DEBUG] [Thread-126201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:01:04.979 [DEBUG] [Thread-126202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:01:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:01:08.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:01:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:01:09.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 0, 44), 11.36, 48.11, 0.0, 13.32, 20.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:01:09.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:00:44
2026-02-11T09:01:10.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:01:10.463 [DEBUG] [Thread-126203] [transport.py] [_log()] starting thread (client mode): 0xa57c3430
2026-02-11T09:01:10.463 [DEBUG] [Thread-126203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:01:10.478 [DEBUG] [Thread-126203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:01:10.478 [INFO] [Thread-126203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:01:10.481 [DEBUG] [Thread-126203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] client lang: <none>
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] server lang: <none>
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] kex follows: False
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] Compression: none
2026-02-11T09:01:10.482 [DEBUG] [Thread-126203] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:01:10.500 [DEBUG] [Thread-126203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:01:10.500 [DEBUG] [Thread-126203] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:01:10.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:01:10.501 [DEBUG] [Thread-126203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:01:10.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:01:10.504 [DEBUG] [Thread-126203] [transport.py] [_log()] userauth is OK
2026-02-11T09:01:10.504 [DEBUG] [Thread-126203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:01:10.504 [DEBUG] [Thread-126203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:01:10.504 [DEBUG] [Thread-126203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:01:10.504 [DEBUG] [Thread-126203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:01:10.529 [INFO] [Thread-126203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:01:10.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:01:11.276 [DEBUG] [Thread-126203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:01:11.277 [DEBUG] [Thread-126203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:01:11.277 [DEBUG] [Thread-126203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:01:11.317 [DEBUG] [Thread-126203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:01:11.318 [DEBUG] [Thread-126203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:01:11.321 [DEBUG] [Thread-126203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:01:11.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:01:11.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:01:11.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:01:11.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:01:11.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:01:11.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:01:11.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:01:11.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:01:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:01:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.291806 -999.00  +20.10  12.18     52  +10.20 1 2 1 1 1   888    0 12.40 130.06 ----- 14.1 12.2 300.9 13.6 26.7 -23.3 -999.0 -999.0 23.9 -20.5 24.6 -21.0
2026-02-11T09:01:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:01:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:01:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.291806
2026-02-11T09:01:11.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:01:11.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:01:11.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:01:11.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:01:11.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:01:11.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:00:44', tmtdew=11.36, humidity=48.11, cloud=0.0, wind=13.32, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:00:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:01:11.347 [DEBUG] [Thread-126203] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:01:11.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:01:11.442 [DEBUG] [Thread-126206] [transport.py] [_log()] starting thread (client mode): 0xa2d92590
2026-02-11T09:01:11.442 [DEBUG] [Thread-126206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:01:11.457 [DEBUG] [Thread-126206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:01:11.458 [INFO] [Thread-126206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:01:11.465 [DEBUG] [Thread-126206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:01:11.465 [DEBUG] [Thread-126206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] client lang: <none>
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] server lang: <none>
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] kex follows: False
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] Compression: none
2026-02-11T09:01:11.466 [DEBUG] [Thread-126206] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:01:11.524 [DEBUG] [Thread-126206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:01:11.525 [DEBUG] [Thread-126206] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:01:11.525 [DEBUG] [Thread-126206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:01:11.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:01:11.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:01:11.579 [DEBUG] [Thread-126206] [transport.py] [_log()] userauth is OK
2026-02-11T09:01:11.580 [DEBUG] [Thread-126206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:01:11.580 [DEBUG] [Thread-126206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:01:11.580 [DEBUG] [Thread-126206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:01:11.580 [DEBUG] [Thread-126206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:01:11.604 [INFO] [Thread-126206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:01:11.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:01:11.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:01:12.440 [DEBUG] [Thread-126206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:01:12.441 [DEBUG] [Thread-126206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:01:12.488 [DEBUG] [Thread-126206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:01:12.489 [DEBUG] [Thread-126206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:01:12.498 [DEBUG] [Thread-126206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:01:12.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:01:12.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:01:12.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:01:12.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:01:12.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:01:12.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:01:12.535 [DEBUG] [Thread-126206] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:01:20.016 [DEBUG] [Thread-126208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:01:35.065 [DEBUG] [Thread-126209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:01:38.391 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:01:38.392 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:01:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:01:42.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:01: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
2026-02-11T09:01:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 1, 20), 11.72, 47.0, 0.0, 13.55, 20.31, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:01:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:01:20
2026-02-11T09:01:45.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:01:45.413 [DEBUG] [Thread-126210] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae90
2026-02-11T09:01:45.413 [DEBUG] [Thread-126210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:01:45.434 [DEBUG] [Thread-126210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:01:45.434 [INFO] [Thread-126210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] client lang: <none>
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] server lang: <none>
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] kex follows: False
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:01:45.437 [DEBUG] [Thread-126210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:01:45.438 [DEBUG] [Thread-126210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:01:45.438 [DEBUG] [Thread-126210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:01:45.438 [DEBUG] [Thread-126210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:01:45.438 [DEBUG] [Thread-126210] [transport.py] [_log()] Compression: none
2026-02-11T09:01:45.438 [DEBUG] [Thread-126210] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:01:45.454 [DEBUG] [Thread-126210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:01:45.454 [DEBUG] [Thread-126210] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:01:45.455 [DEBUG] [Thread-126210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:01:45.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:01:45.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:01:45.458 [DEBUG] [Thread-126210] [transport.py] [_log()] userauth is OK
2026-02-11T09:01:45.458 [DEBUG] [Thread-126210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:01:45.458 [DEBUG] [Thread-126210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:01:45.458 [DEBUG] [Thread-126210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:01:45.458 [DEBUG] [Thread-126210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:01:45.480 [INFO] [Thread-126210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:01:45.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:01:46.048 [DEBUG] [Thread-126210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:01:46.048 [DEBUG] [Thread-126210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:01:46.049 [DEBUG] [Thread-126210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:01:46.089 [DEBUG] [Thread-126210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:01:46.090 [DEBUG] [Thread-126210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:01:46.093 [DEBUG] [Thread-126210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:01:46.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:01:46.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:01:46.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:01:46.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:01:46.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:01:46.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:01:46.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:01:46.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:01:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:01:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.292848 -999.00  +20.00  10.96     53  +10.30 1 2 1 1 1   888    0 13.34 159.26 ----- 10.6 11.0 303.2 20.7 26.8 -21.9 26.1 -21.0 23.9 -22.0 24.6 -21.7
2026-02-11T09:01:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:01:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:01:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.292848
2026-02-11T09:01:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:01:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:01:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:01:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:01:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:01:46.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:01:20', tmtdew=11.72, humidity=47.0, cloud=0.0, wind=13.55, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:01:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:01:46.117 [DEBUG] [Thread-126210] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:01:46.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:01:46.213 [DEBUG] [Thread-126213] [transport.py] [_log()] starting thread (client mode): 0xa2d78070
2026-02-11T09:01:46.214 [DEBUG] [Thread-126213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:01:46.229 [DEBUG] [Thread-126213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:01:46.229 [INFO] [Thread-126213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:01:46.236 [DEBUG] [Thread-126213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] client lang: <none>
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] server lang: <none>
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] kex follows: False
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:01:46.237 [DEBUG] [Thread-126213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:01:46.238 [DEBUG] [Thread-126213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:01:46.238 [DEBUG] [Thread-126213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:01:46.238 [DEBUG] [Thread-126213] [transport.py] [_log()] Compression: none
2026-02-11T09:01:46.238 [DEBUG] [Thread-126213] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:01:46.295 [DEBUG] [Thread-126213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:01:46.296 [DEBUG] [Thread-126213] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:01:46.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:01:46.297 [DEBUG] [Thread-126213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:01:46.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:01:46.352 [DEBUG] [Thread-126213] [transport.py] [_log()] userauth is OK
2026-02-11T09:01:46.352 [DEBUG] [Thread-126213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:01:46.352 [DEBUG] [Thread-126213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:01:46.352 [DEBUG] [Thread-126213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:01:46.352 [DEBUG] [Thread-126213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:01:46.371 [INFO] [Thread-126213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:01:46.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:01:46.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:01:47.236 [DEBUG] [Thread-126213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:01:47.236 [DEBUG] [Thread-126213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:01:47.285 [DEBUG] [Thread-126213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:01:47.285 [DEBUG] [Thread-126213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:01:47.294 [DEBUG] [Thread-126213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:01:47.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:01:47.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:01:47.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:01:47.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:01:47.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:01:47.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:01:47.328 [DEBUG] [Thread-126213] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:01:50.100 [DEBUG] [Thread-126215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:04.665 [DEBUG] [Thread-126216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:05.151 [DEBUG] [Thread-126217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:02:17.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:02:17.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:02:19.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 1, 56), 11.78, 46.78, 0.0, 12.49, 20.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:02:19.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:01:56
2026-02-11T09:02:19.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:02:19.773 [DEBUG] [Thread-126218] [transport.py] [_log()] starting thread (client mode): 0xa2d1b0a0
2026-02-11T09:02:19.774 [DEBUG] [Thread-126218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:02:19.796 [DEBUG] [Thread-126218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:02:19.796 [INFO] [Thread-126218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:02:19.797 [DEBUG] [Thread-126218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] client lang: <none>
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] server lang: <none>
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] kex follows: False
2026-02-11T09:02:19.798 [DEBUG] [Thread-126218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:02:19.799 [DEBUG] [Thread-126218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:02:19.799 [DEBUG] [Thread-126218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:02:19.799 [DEBUG] [Thread-126218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:02:19.799 [DEBUG] [Thread-126218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:02:19.799 [DEBUG] [Thread-126218] [transport.py] [_log()] Compression: none
2026-02-11T09:02:19.799 [DEBUG] [Thread-126218] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:02:19.812 [DEBUG] [Thread-126218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:02:19.812 [DEBUG] [Thread-126218] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:02:19.813 [DEBUG] [Thread-126218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:02:19.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:02:19.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:02:19.815 [DEBUG] [Thread-126218] [transport.py] [_log()] userauth is OK
2026-02-11T09:02:19.815 [DEBUG] [Thread-126218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:02:19.815 [DEBUG] [Thread-126218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:02:19.815 [DEBUG] [Thread-126218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:02:19.815 [DEBUG] [Thread-126218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:02:19.840 [INFO] [Thread-126218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:02:19.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:02:20.185 [DEBUG] [Thread-126220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:20.446 [DEBUG] [Thread-126218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:02:20.446 [DEBUG] [Thread-126218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:02:20.446 [DEBUG] [Thread-126218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:02:20.487 [DEBUG] [Thread-126218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:02:20.487 [DEBUG] [Thread-126218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:02:20.490 [DEBUG] [Thread-126218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:02:20.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:02:20.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:02:20.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:02:20.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:02:20.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:02:20.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:02:20.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:02:20.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:02:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:02:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.293195 -999.00  +20.40   9.09     53  +10.60 1 2 1 1 1   888    0 13.07 149.57 ----- 11.4 9.1 303.0 13.7 27.0 -21.6 26.2 -20.3 24.1 -19.8 24.6 -21.0
2026-02-11T09:02:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:02:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:02:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.293195
2026-02-11T09:02:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:02:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:02:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:02:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:02:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:02:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:01:56', tmtdew=11.78, humidity=46.78, cloud=0.0, wind=12.49, temperature=20.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:02:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:02:20.509 [DEBUG] [Thread-126218] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:02:20.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:02:20.605 [DEBUG] [Thread-126222] [transport.py] [_log()] starting thread (client mode): 0xa57e15a0
2026-02-11T09:02:20.605 [DEBUG] [Thread-126222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:02:20.629 [DEBUG] [Thread-126222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:02:20.629 [INFO] [Thread-126222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:02:20.638 [DEBUG] [Thread-126222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:02:20.638 [DEBUG] [Thread-126222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:02:20.638 [DEBUG] [Thread-126222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:02:20.638 [DEBUG] [Thread-126222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:20.638 [DEBUG] [Thread-126222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] client lang: <none>
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] server lang: <none>
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] kex follows: False
2026-02-11T09:02:20.639 [DEBUG] [Thread-126222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:02:20.640 [DEBUG] [Thread-126222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:02:20.640 [DEBUG] [Thread-126222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:02:20.640 [DEBUG] [Thread-126222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:02:20.640 [DEBUG] [Thread-126222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:02:20.640 [DEBUG] [Thread-126222] [transport.py] [_log()] Compression: none
2026-02-11T09:02:20.640 [DEBUG] [Thread-126222] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:02:20.700 [DEBUG] [Thread-126222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:02:20.700 [DEBUG] [Thread-126222] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:02:20.701 [DEBUG] [Thread-126222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:02:20.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:02:20.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:02:20.755 [DEBUG] [Thread-126222] [transport.py] [_log()] userauth is OK
2026-02-11T09:02:20.756 [DEBUG] [Thread-126222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:02:20.756 [DEBUG] [Thread-126222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:02:20.756 [DEBUG] [Thread-126222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:02:20.756 [DEBUG] [Thread-126222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:02:20.775 [INFO] [Thread-126222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:02:20.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:02:20.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:02:21.631 [DEBUG] [Thread-126222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:02:21.632 [DEBUG] [Thread-126222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:02:21.679 [DEBUG] [Thread-126222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:02:21.680 [DEBUG] [Thread-126222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:02:21.689 [DEBUG] [Thread-126222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:02:21.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:02:21.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:02:21.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:02:21.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:02:21.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:02:21.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:02:21.726 [DEBUG] [Thread-126222] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:02:35.220 [DEBUG] [Thread-126224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:38.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:38.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:50.275 [DEBUG] [Thread-126225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:02:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:02:51.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:02:51.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
2026-02-11T09:02:53.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 2, 31), 11.82, 46.63, 0.0, 15.17, 20.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:02:53.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:02:31
2026-02-11T09:02:53.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:02:54.150 [DEBUG] [Thread-126226] [transport.py] [_log()] starting thread (client mode): 0xa2d91030
2026-02-11T09:02:54.150 [DEBUG] [Thread-126226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:02:54.170 [DEBUG] [Thread-126226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:02:54.171 [INFO] [Thread-126226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:02:54.173 [DEBUG] [Thread-126226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:02:54.173 [DEBUG] [Thread-126226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:02:54.173 [DEBUG] [Thread-126226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] client lang: <none>
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] server lang: <none>
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] kex follows: False
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:02:54.174 [DEBUG] [Thread-126226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:02:54.175 [DEBUG] [Thread-126226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:02:54.175 [DEBUG] [Thread-126226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:02:54.175 [DEBUG] [Thread-126226] [transport.py] [_log()] Compression: none
2026-02-11T09:02:54.175 [DEBUG] [Thread-126226] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:02:54.192 [DEBUG] [Thread-126226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:02:54.193 [DEBUG] [Thread-126226] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:02:54.194 [DEBUG] [Thread-126226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:02:54.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:02:54.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:02:54.197 [DEBUG] [Thread-126226] [transport.py] [_log()] userauth is OK
2026-02-11T09:02:54.198 [DEBUG] [Thread-126226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:02:54.198 [DEBUG] [Thread-126226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:02:54.198 [DEBUG] [Thread-126226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:02:54.198 [DEBUG] [Thread-126226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:02:54.227 [INFO] [Thread-126226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:02:54.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:02:54.788 [DEBUG] [Thread-126226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:02:54.789 [DEBUG] [Thread-126226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:02:54.789 [DEBUG] [Thread-126226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:02:54.829 [DEBUG] [Thread-126226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:02:54.829 [DEBUG] [Thread-126226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:02:54.832 [DEBUG] [Thread-126226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:02:54.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:02:54.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:02:54.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:02:54.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:02:54.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:02:54.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:02:54.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:02:54.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:02:54.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:02:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.293542 -999.00  +20.30  16.55     51  +10.10 1 2 1 1 1   888    0 13.15 148.14 ----- 16.3 16.6 315.2 19.7 27.0 -22.5 26.2 -20.7 24.2 -21.0 24.8 -21.5
2026-02-11T09:02:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:02:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:02:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.293542
2026-02-11T09:02:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:02:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:02:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:02:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:02:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:02:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:02:31', tmtdew=11.82, humidity=46.63, cloud=0.0, wind=15.17, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:02:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:02:54.851 [DEBUG] [Thread-126226] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:02:54.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:02:54.946 [DEBUG] [Thread-126229] [transport.py] [_log()] starting thread (client mode): 0xa57586d0
2026-02-11T09:02:54.946 [DEBUG] [Thread-126229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:02:54.961 [DEBUG] [Thread-126229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:02:54.961 [INFO] [Thread-126229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:02:54.969 [DEBUG] [Thread-126229] [transport.py] [_log()] client lang: <none>
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] server lang: <none>
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] kex follows: False
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] Compression: none
2026-02-11T09:02:54.970 [DEBUG] [Thread-126229] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:02:55.032 [DEBUG] [Thread-126229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:02:55.032 [DEBUG] [Thread-126229] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:02:55.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:02:55.033 [DEBUG] [Thread-126229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:02:55.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:02:55.087 [DEBUG] [Thread-126229] [transport.py] [_log()] userauth is OK
2026-02-11T09:02:55.088 [DEBUG] [Thread-126229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:02:55.088 [DEBUG] [Thread-126229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:02:55.088 [DEBUG] [Thread-126229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:02:55.088 [DEBUG] [Thread-126229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:02:55.111 [INFO] [Thread-126229] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:02:55.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:02:55.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:02:55.924 [DEBUG] [Thread-126229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:02:55.924 [DEBUG] [Thread-126229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:02:55.973 [DEBUG] [Thread-126229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:02:55.974 [DEBUG] [Thread-126229] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:02:55.983 [DEBUG] [Thread-126229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:02:55.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:02:55.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:02:56.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:02:56.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:02:56.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:02:56.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:02:56.022 [DEBUG] [Thread-126229] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:03:04.716 [DEBUG] [Thread-126231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:03:05.307 [DEBUG] [Thread-126232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:03:20.358 [DEBUG] [Thread-126233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:03:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:03:26.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:03:26.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:03:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 3, 7), 11.95, 46.25, 0.0, 13.41, 20.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:03:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:03:07
2026-02-11T09:03:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:03:28.517 [DEBUG] [Thread-126234] [transport.py] [_log()] starting thread (client mode): 0xa2d782b0
2026-02-11T09:03:28.517 [DEBUG] [Thread-126234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:03:28.536 [DEBUG] [Thread-126234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:03:28.537 [INFO] [Thread-126234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] client lang: <none>
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] server lang: <none>
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] kex follows: False
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] Compression: none
2026-02-11T09:03:28.538 [DEBUG] [Thread-126234] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:03:28.546 [DEBUG] [Thread-126234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:03:28.547 [DEBUG] [Thread-126234] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:03:28.547 [DEBUG] [Thread-126234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:03:28.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:03:28.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:03:28.549 [DEBUG] [Thread-126234] [transport.py] [_log()] userauth is OK
2026-02-11T09:03:28.549 [DEBUG] [Thread-126234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:03:28.549 [DEBUG] [Thread-126234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:03:28.549 [DEBUG] [Thread-126234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:03:28.549 [DEBUG] [Thread-126234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:03:28.567 [INFO] [Thread-126234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:03:28.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:03:29.182 [DEBUG] [Thread-126234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:03:29.182 [DEBUG] [Thread-126234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:03:29.182 [DEBUG] [Thread-126234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:03:29.223 [DEBUG] [Thread-126234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:03:29.224 [DEBUG] [Thread-126234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:03:29.226 [DEBUG] [Thread-126234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:03:29.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:03:29.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:03:29.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:03:29.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:03:29.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:03:29.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:03:29.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:03:29.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:03:29.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:03:29.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.293890 -999.00  +20.00  13.06     53  +10.20 1 2 1 1 1   888    0 13.08 146.52 ----- 12.6 13.1 303.6 18.2 27.0 -22.0 26.2 -21.1 24.3 -20.4 24.8 -21.2
2026-02-11T09:03:29.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:03:29.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:03:29.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.293890
2026-02-11T09:03:29.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:03:29.250 [DEBUG] [Thread-126234] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:03:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:03:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:03:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:03:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:03:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:03:07', tmtdew=11.95, humidity=46.25, cloud=0.0, wind=13.41, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:03:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:03:29.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:03:29.348 [DEBUG] [Thread-126237] [transport.py] [_log()] starting thread (client mode): 0xa57e15a0
2026-02-11T09:03:29.349 [DEBUG] [Thread-126237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:03:29.363 [DEBUG] [Thread-126237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:03:29.363 [INFO] [Thread-126237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] client lang: <none>
2026-02-11T09:03:29.371 [DEBUG] [Thread-126237] [transport.py] [_log()] server lang: <none>
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] kex follows: False
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] Compression: none
2026-02-11T09:03:29.372 [DEBUG] [Thread-126237] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:03:29.432 [DEBUG] [Thread-126237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:03:29.433 [DEBUG] [Thread-126237] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:03:29.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:03:29.434 [DEBUG] [Thread-126237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:03:29.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:03:29.496 [DEBUG] [Thread-126237] [transport.py] [_log()] userauth is OK
2026-02-11T09:03:29.496 [DEBUG] [Thread-126237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:03:29.496 [DEBUG] [Thread-126237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:03:29.496 [DEBUG] [Thread-126237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:03:29.496 [DEBUG] [Thread-126237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:03:29.515 [INFO] [Thread-126237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:03:29.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:03:29.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:03:30.349 [DEBUG] [Thread-126237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:03:30.349 [DEBUG] [Thread-126237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:03:30.399 [DEBUG] [Thread-126237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:03:30.399 [DEBUG] [Thread-126237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:03:30.411 [DEBUG] [Thread-126237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:03:30.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:03:30.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:03:30.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:03:30.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:03:30.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:03:30.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:03:30.456 [DEBUG] [Thread-126237] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:03:35.395 [DEBUG] [Thread-126239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:03:38.677 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:03:38.679 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:03:50.448 [DEBUG] [Thread-126240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:04:00.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:04:00.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:04:00.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:04:02.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 3, 43), 12.29, 45.13, 0.0, 14.31, 20.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:04:02.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:03:43
2026-02-11T09:04:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:04:03.064 [DEBUG] [Thread-126241] [transport.py] [_log()] starting thread (client mode): 0xa2d797b0
2026-02-11T09:04:03.064 [DEBUG] [Thread-126241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:04:03.082 [DEBUG] [Thread-126241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:04:03.082 [INFO] [Thread-126241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] client lang: <none>
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] server lang: <none>
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] kex follows: False
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] Compression: none
2026-02-11T09:04:03.084 [DEBUG] [Thread-126241] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:04:03.091 [DEBUG] [Thread-126241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:04:03.091 [DEBUG] [Thread-126241] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:04:03.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:04:03.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:04:03.092 [DEBUG] [Thread-126241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:04:03.092 [DEBUG] [Thread-126241] [transport.py] [_log()] userauth is OK
2026-02-11T09:04:03.092 [DEBUG] [Thread-126241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:04:03.092 [DEBUG] [Thread-126241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:04:03.092 [DEBUG] [Thread-126241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:04:03.092 [DEBUG] [Thread-126241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:04:03.103 [INFO] [Thread-126241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:04:03.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:04:03.708 [DEBUG] [Thread-126241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:04:03.708 [DEBUG] [Thread-126241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:04:03.709 [DEBUG] [Thread-126241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:04:03.750 [DEBUG] [Thread-126241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:04:03.750 [DEBUG] [Thread-126241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:04:03.753 [DEBUG] [Thread-126241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:04:03.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:04:03.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:04:03.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:04:03.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:04:03.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:04:03.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:04:03.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:04:03.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:04:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:04:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.294237 -999.00  +20.30   9.37     52  +10.40 1 2 1 1 1   888    0 13.18 147.98 ----- 9.5 9.4 303.3 14.5 27.2 -22.0 26.3 -20.8 24.3 -20.2 24.8 -21.3
2026-02-11T09:04:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:04:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:04:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.294237
2026-02-11T09:04:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:04:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:04:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:04:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:04:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:04:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:03:43', tmtdew=12.29, humidity=45.13, cloud=0.0, wind=14.31, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:03:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:04:03.772 [DEBUG] [Thread-126241] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:04:03.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:04:03.866 [DEBUG] [Thread-126244] [transport.py] [_log()] starting thread (client mode): 0xa2d79600
2026-02-11T09:04:03.866 [DEBUG] [Thread-126244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:04:03.880 [DEBUG] [Thread-126244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:04:03.880 [INFO] [Thread-126244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:04:03.888 [DEBUG] [Thread-126244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] client lang: <none>
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] server lang: <none>
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] kex follows: False
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:04:03.889 [DEBUG] [Thread-126244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:04:03.890 [DEBUG] [Thread-126244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:04:03.890 [DEBUG] [Thread-126244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:04:03.890 [DEBUG] [Thread-126244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:04:03.890 [DEBUG] [Thread-126244] [transport.py] [_log()] Compression: none
2026-02-11T09:04:03.890 [DEBUG] [Thread-126244] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:04:03.952 [DEBUG] [Thread-126244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:04:03.952 [DEBUG] [Thread-126244] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:04:03.953 [DEBUG] [Thread-126244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:04:03.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:04:03.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:04:04.012 [DEBUG] [Thread-126244] [transport.py] [_log()] userauth is OK
2026-02-11T09:04:04.012 [DEBUG] [Thread-126244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:04:04.012 [DEBUG] [Thread-126244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:04:04.012 [DEBUG] [Thread-126244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:04:04.013 [DEBUG] [Thread-126244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:04:04.031 [INFO] [Thread-126244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:04:04.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:04:04.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:04:04.766 [DEBUG] [Thread-126246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:04:04.878 [DEBUG] [Thread-126244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:04:04.878 [DEBUG] [Thread-126244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:04:04.925 [DEBUG] [Thread-126244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:04:04.925 [DEBUG] [Thread-126244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:04:04.935 [DEBUG] [Thread-126244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:04:04.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:04:04.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:04:04.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:04:04.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:04:04.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:04:04.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:04:04.990 [DEBUG] [Thread-126244] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:04:05.486 [DEBUG] [Thread-126247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:04:20.539 [DEBUG] [Thread-126248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:04:34.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:04:35.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:04:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:04:35.574 [DEBUG] [Thread-126249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:04:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 4, 18), 12.29, 45.12, 0.0, 12.97, 20.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:04:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:04:18
2026-02-11T09:04:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:04:37.463 [DEBUG] [Thread-126250] [transport.py] [_log()] starting thread (client mode): 0xa2db6da0
2026-02-11T09:04:37.463 [DEBUG] [Thread-126250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:04:37.483 [DEBUG] [Thread-126250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:04:37.483 [INFO] [Thread-126250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:37.484 [DEBUG] [Thread-126250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] client lang: <none>
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] server lang: <none>
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] kex follows: False
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] Compression: none
2026-02-11T09:04:37.485 [DEBUG] [Thread-126250] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:04:37.497 [DEBUG] [Thread-126250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:04:37.497 [DEBUG] [Thread-126250] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:04:37.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:04:37.498 [DEBUG] [Thread-126250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:04:37.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:04:37.500 [DEBUG] [Thread-126250] [transport.py] [_log()] userauth is OK
2026-02-11T09:04:37.500 [DEBUG] [Thread-126250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:04:37.500 [DEBUG] [Thread-126250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:04:37.500 [DEBUG] [Thread-126250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:04:37.500 [DEBUG] [Thread-126250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:04:37.520 [INFO] [Thread-126250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:04:37.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:04:38.149 [DEBUG] [Thread-126250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:04:38.150 [DEBUG] [Thread-126250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:04:38.150 [DEBUG] [Thread-126250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:04:38.191 [DEBUG] [Thread-126250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:04:38.191 [DEBUG] [Thread-126250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:04:38.195 [DEBUG] [Thread-126250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:04:38.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:04:38.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:04:38.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:04:38.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:04:38.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:04:38.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:04:38.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:04:38.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:04:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:04:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.294584 -999.00  +20.40  11.94     52  +10.40 1 2 1 1 1   888    0 13.49 154.85 ----- 15.9 11.9 298.5 16.7 27.2 -23.1 26.4 -21.3 24.4 -20.0 24.9 -21.0
2026-02-11T09:04:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:04:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:04:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.294584
2026-02-11T09:04:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:04:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:04:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:04:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:04:38.223 [DEBUG] [Thread-126250] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:04:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:04:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:04:18', tmtdew=12.29, humidity=45.12, cloud=0.0, wind=12.97, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:04:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:04:38.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:04:38.331 [DEBUG] [Thread-126253] [transport.py] [_log()] starting thread (client mode): 0xa2d01630
2026-02-11T09:04:38.331 [DEBUG] [Thread-126253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:04:38.345 [DEBUG] [Thread-126253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:04:38.346 [INFO] [Thread-126253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:04:38.353 [DEBUG] [Thread-126253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] client lang: <none>
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] server lang: <none>
2026-02-11T09:04:38.354 [DEBUG] [Thread-126253] [transport.py] [_log()] kex follows: False
2026-02-11T09:04:38.355 [DEBUG] [Thread-126253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:04:38.355 [DEBUG] [Thread-126253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:04:38.355 [DEBUG] [Thread-126253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:04:38.355 [DEBUG] [Thread-126253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:04:38.355 [DEBUG] [Thread-126253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:04:38.355 [DEBUG] [Thread-126253] [transport.py] [_log()] Compression: none
2026-02-11T09:04:38.355 [DEBUG] [Thread-126253] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:04:38.412 [DEBUG] [Thread-126253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:04:38.413 [DEBUG] [Thread-126253] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:04:38.413 [DEBUG] [Thread-126253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:04:38.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:04:38.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:04:38.472 [DEBUG] [Thread-126253] [transport.py] [_log()] userauth is OK
2026-02-11T09:04:38.472 [DEBUG] [Thread-126253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:04:38.472 [DEBUG] [Thread-126253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:04:38.472 [DEBUG] [Thread-126253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:04:38.472 [DEBUG] [Thread-126253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:04:38.491 [INFO] [Thread-126253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:04:38.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:04:38.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:04:38.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:04:38.820 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:04:39.343 [DEBUG] [Thread-126253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:04:39.343 [DEBUG] [Thread-126253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:04:39.391 [DEBUG] [Thread-126253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:04:39.392 [DEBUG] [Thread-126253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:04:39.401 [DEBUG] [Thread-126253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:04:39.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:04:39.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:04:39.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:04:39.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:04:39.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:04:39.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:04:39.439 [DEBUG] [Thread-126253] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:04:50.612 [DEBUG] [Thread-126255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:05:04.803 [DEBUG] [Thread-126256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:05:05.665 [DEBUG] [Thread-126257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:05:09.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:05:09.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:05:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:05:11.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 4, 53), 11.93, 46.17, 0.0, 13.43, 20.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:05:11.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:04:53
2026-02-11T09:05:11.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:05:11.957 [DEBUG] [Thread-126258] [transport.py] [_log()] starting thread (client mode): 0xa2d93550
2026-02-11T09:05:11.957 [DEBUG] [Thread-126258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:05:11.977 [DEBUG] [Thread-126258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:05:11.977 [INFO] [Thread-126258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] client lang: <none>
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] server lang: <none>
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] kex follows: False
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] Compression: none
2026-02-11T09:05:11.979 [DEBUG] [Thread-126258] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:05:11.995 [DEBUG] [Thread-126258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:05:11.996 [DEBUG] [Thread-126258] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:05:11.996 [DEBUG] [Thread-126258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:05:11.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:05:11.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:05:11.997 [DEBUG] [Thread-126258] [transport.py] [_log()] userauth is OK
2026-02-11T09:05:11.997 [DEBUG] [Thread-126258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:05:11.998 [DEBUG] [Thread-126258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:05:11.998 [DEBUG] [Thread-126258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:05:11.998 [DEBUG] [Thread-126258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:05:12.011 [INFO] [Thread-126258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:05:12.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:05:12.651 [DEBUG] [Thread-126258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:05:12.652 [DEBUG] [Thread-126258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:05:12.652 [DEBUG] [Thread-126258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:05:12.692 [DEBUG] [Thread-126258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:05:12.692 [DEBUG] [Thread-126258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:05:12.695 [DEBUG] [Thread-126258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:05:12.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:05:12.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:05:12.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:05:12.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:05:12.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:05:12.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:05:12.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:05:12.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:05:12.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:05:12.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.294931 -999.00  +20.20  11.31     52  +10.20 1 2 1 1 1   888    0 13.55 162.18 ----- 11.6 11.3 295.6 17.0 27.2 -22.5 26.4 -21.2 24.4 -21.0 24.9 -21.5
2026-02-11T09:05:12.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:05:12.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:05:12.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.294931
2026-02-11T09:05:12.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:05:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:05:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:05:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:05:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:05:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:04:53', tmtdew=11.93, humidity=46.17, cloud=0.0, wind=13.43, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:04:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:05:12.720 [DEBUG] [Thread-126258] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:05:12.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:05:12.819 [DEBUG] [Thread-126261] [transport.py] [_log()] starting thread (client mode): 0xa2d90940
2026-02-11T09:05:12.819 [DEBUG] [Thread-126261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:05:12.838 [DEBUG] [Thread-126261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:05:12.838 [INFO] [Thread-126261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:05:12.846 [DEBUG] [Thread-126261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:05:12.846 [DEBUG] [Thread-126261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] client lang: <none>
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] server lang: <none>
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] kex follows: False
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] Compression: none
2026-02-11T09:05:12.847 [DEBUG] [Thread-126261] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:05:12.905 [DEBUG] [Thread-126261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:05:12.905 [DEBUG] [Thread-126261] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:05:12.906 [DEBUG] [Thread-126261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:05:12.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:05:12.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:05:12.969 [DEBUG] [Thread-126261] [transport.py] [_log()] userauth is OK
2026-02-11T09:05:12.969 [DEBUG] [Thread-126261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:05:12.970 [DEBUG] [Thread-126261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:05:12.970 [DEBUG] [Thread-126261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:05:12.970 [DEBUG] [Thread-126261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:05:12.995 [INFO] [Thread-126261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:05:12.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:05:12.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:05:13.806 [DEBUG] [Thread-126261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:05:13.807 [DEBUG] [Thread-126261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:05:13.854 [DEBUG] [Thread-126261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:05:13.854 [DEBUG] [Thread-126261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:05:13.864 [DEBUG] [Thread-126261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:05:13.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:05:13.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')
2026-02-11T09:05:13.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:05:13.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:05:13.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:05:13.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:05:13.903 [DEBUG] [Thread-126261] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:05:20.700 [DEBUG] [Thread-126263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:05:35.753 [DEBUG] [Thread-126264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:05:38.964 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:05:38.965 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:05:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:05:43.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:05:43.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:05:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 5, 29), 11.88, 46.33, 0.0, 14.24, 20.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:05:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:05:29
2026-02-11T09:05:46.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:05:46.931 [DEBUG] [Thread-126265] [transport.py] [_log()] starting thread (client mode): 0xa2d91240
2026-02-11T09:05:46.931 [DEBUG] [Thread-126265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:05:46.952 [DEBUG] [Thread-126265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:05:46.952 [INFO] [Thread-126265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] client lang: <none>
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] server lang: <none>
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] kex follows: False
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] Compression: none
2026-02-11T09:05:46.955 [DEBUG] [Thread-126265] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:05:46.972 [DEBUG] [Thread-126265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:05:46.973 [DEBUG] [Thread-126265] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:05:46.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:05:46.974 [DEBUG] [Thread-126265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:05:46.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:05:47.017 [DEBUG] [Thread-126265] [transport.py] [_log()] userauth is OK
2026-02-11T09:05:47.017 [DEBUG] [Thread-126265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:05:47.017 [DEBUG] [Thread-126265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:05:47.017 [DEBUG] [Thread-126265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:05:47.017 [DEBUG] [Thread-126265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:05:47.049 [INFO] [Thread-126265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:05:47.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:05:47.686 [DEBUG] [Thread-126265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:05:47.687 [DEBUG] [Thread-126265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:05:47.687 [DEBUG] [Thread-126265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:05:47.727 [DEBUG] [Thread-126265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:05:47.728 [DEBUG] [Thread-126265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:05:47.731 [DEBUG] [Thread-126265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:05:47.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:05:47.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:05:47.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:05:47.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:05:47.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:05:47.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:05:47.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:05:47.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:05:47.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:05:47.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.295278 -999.00  +20.30  11.36     51  +10.00 1 2 1 1 1   888    0 13.61 161.74 ----- 11.8 11.4 289.8 14.3 27.2 -23.1 26.5 -21.4 24.4 -20.8 25.0 -21.6
2026-02-11T09:05:47.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:05:47.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:05:47.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.295278
2026-02-11T09:05:47.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:05:47.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:05:47.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:05:47.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:05:47.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:05:47.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:05:29', tmtdew=11.88, humidity=46.33, cloud=0.0, wind=14.24, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:05:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:05:47.758 [DEBUG] [Thread-126265] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:05:47.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:05:47.859 [DEBUG] [Thread-126268] [transport.py] [_log()] starting thread (client mode): 0xa2d7afb0
2026-02-11T09:05:47.859 [DEBUG] [Thread-126268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:05:47.875 [DEBUG] [Thread-126268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:05:47.875 [INFO] [Thread-126268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:05:47.883 [DEBUG] [Thread-126268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] client lang: <none>
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] server lang: <none>
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] kex follows: False
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] Compression: none
2026-02-11T09:05:47.884 [DEBUG] [Thread-126268] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:05:47.944 [DEBUG] [Thread-126268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:05:47.944 [DEBUG] [Thread-126268] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:05:47.945 [DEBUG] [Thread-126268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:05:47.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:05:47.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:05:48.002 [DEBUG] [Thread-126268] [transport.py] [_log()] userauth is OK
2026-02-11T09:05:48.003 [DEBUG] [Thread-126268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:05:48.003 [DEBUG] [Thread-126268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:05:48.003 [DEBUG] [Thread-126268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:05:48.003 [DEBUG] [Thread-126268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:05:48.024 [INFO] [Thread-126268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:05:48.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:05:48.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:05:48.900 [DEBUG] [Thread-126268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:05:48.900 [DEBUG] [Thread-126268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:05:48.950 [DEBUG] [Thread-126268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:05:48.951 [DEBUG] [Thread-126268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:05:48.962 [DEBUG] [Thread-126268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:05:48.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:05:48.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:05:48.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:05:48.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:05:48.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:05:48.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:05:48.999 [DEBUG] [Thread-126268] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:05:50.791 [DEBUG] [Thread-126270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:04.848 [DEBUG] [Thread-126271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:05.842 [DEBUG] [Thread-126272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:06:18.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:06:19.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:06:20.877 [DEBUG] [Thread-126273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 6, 4), 11.96, 46.07, 0.0, 14.59, 20.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:06:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:06:04
2026-02-11T09:06:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:06:21.388 [DEBUG] [Thread-126274] [transport.py] [_log()] starting thread (client mode): 0xa2d7b700
2026-02-11T09:06:21.388 [DEBUG] [Thread-126274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:06:21.407 [DEBUG] [Thread-126274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:06:21.408 [INFO] [Thread-126274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] client lang: <none>
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] server lang: <none>
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] kex follows: False
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] Compression: none
2026-02-11T09:06:21.411 [DEBUG] [Thread-126274] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:06:21.426 [DEBUG] [Thread-126274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:06:21.426 [DEBUG] [Thread-126274] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:06:21.427 [DEBUG] [Thread-126274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:06:21.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:06:21.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:06:21.428 [DEBUG] [Thread-126274] [transport.py] [_log()] userauth is OK
2026-02-11T09:06:21.429 [DEBUG] [Thread-126274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:06:21.429 [DEBUG] [Thread-126274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:06:21.429 [DEBUG] [Thread-126274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:06:21.429 [DEBUG] [Thread-126274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:06:21.448 [INFO] [Thread-126274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:06:21.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:06:22.074 [DEBUG] [Thread-126274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:06:22.075 [DEBUG] [Thread-126274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:06:22.075 [DEBUG] [Thread-126274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:06:22.115 [DEBUG] [Thread-126274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:06:22.115 [DEBUG] [Thread-126274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:06:22.118 [DEBUG] [Thread-126274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:06:22.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:06:22.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:06:22.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:06:22.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:06:22.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:06:22.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:06:22.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:06:22.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:06:22.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:06:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.295973 -999.00  +20.20  14.93     50   +9.70 1 2 1 1 1   888    0 14.41 184.57 ----- 13.4 14.9 267.0 17.1 27.2 -23.6 26.4 -21.6 24.1 -21.2 24.9 -21.6
2026-02-11T09:06:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:06:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:06:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.295973
2026-02-11T09:06:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:06:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:06:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:06:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:06:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:06:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:06:04', tmtdew=11.96, humidity=46.07, cloud=0.0, wind=14.59, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:06:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:06:22.151 [DEBUG] [Thread-126274] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:06:22.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:06:22.256 [DEBUG] [Thread-126277] [transport.py] [_log()] starting thread (client mode): 0xa57e2170
2026-02-11T09:06:22.257 [DEBUG] [Thread-126277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:06:22.271 [DEBUG] [Thread-126277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:06:22.271 [INFO] [Thread-126277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:06:22.278 [DEBUG] [Thread-126277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] client lang: <none>
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] server lang: <none>
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] kex follows: False
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] Compression: none
2026-02-11T09:06:22.279 [DEBUG] [Thread-126277] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:06:22.335 [DEBUG] [Thread-126277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:06:22.336 [DEBUG] [Thread-126277] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:06:22.336 [DEBUG] [Thread-126277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:06:22.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:06:22.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:06:22.392 [DEBUG] [Thread-126277] [transport.py] [_log()] userauth is OK
2026-02-11T09:06:22.392 [DEBUG] [Thread-126277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:06:22.393 [DEBUG] [Thread-126277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:06:22.393 [DEBUG] [Thread-126277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:06:22.393 [DEBUG] [Thread-126277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:06:22.412 [INFO] [Thread-126277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:06:22.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:06:22.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:06:23.296 [DEBUG] [Thread-126277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:06:23.297 [DEBUG] [Thread-126277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:06:23.344 [DEBUG] [Thread-126277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:06:23.344 [DEBUG] [Thread-126277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:06:23.353 [DEBUG] [Thread-126277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:06:23.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:06:23.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:06:23.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:06:23.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:06:23.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:06:23.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:06:23.396 [DEBUG] [Thread-126277] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:06:35.913 [DEBUG] [Thread-126279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:39.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:39.105 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:50.968 [DEBUG] [Thread-126280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:06:53.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:06:53.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:06:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:06:55.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 6, 40), 12.73, 43.91, 0.0, 14.61, 21.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:06:55.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:06:40
2026-02-11T09:06:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:06:55.815 [DEBUG] [Thread-126281] [transport.py] [_log()] starting thread (client mode): 0xa57b3fd0
2026-02-11T09:06:55.815 [DEBUG] [Thread-126281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:06:55.835 [DEBUG] [Thread-126281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:06:55.835 [INFO] [Thread-126281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:06:55.838 [DEBUG] [Thread-126281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:06:55.838 [DEBUG] [Thread-126281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] client lang: <none>
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] server lang: <none>
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] kex follows: False
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:06:55.839 [DEBUG] [Thread-126281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:06:55.840 [DEBUG] [Thread-126281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:06:55.840 [DEBUG] [Thread-126281] [transport.py] [_log()] Compression: none
2026-02-11T09:06:55.840 [DEBUG] [Thread-126281] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:06:55.858 [DEBUG] [Thread-126281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:06:55.859 [DEBUG] [Thread-126281] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:06:55.859 [DEBUG] [Thread-126281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:06:55.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:06:55.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:06:55.901 [DEBUG] [Thread-126281] [transport.py] [_log()] userauth is OK
2026-02-11T09:06:55.901 [DEBUG] [Thread-126281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:06:55.901 [DEBUG] [Thread-126281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:06:55.901 [DEBUG] [Thread-126281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:06:55.901 [DEBUG] [Thread-126281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:06:55.936 [INFO] [Thread-126281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:06:55.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:06:56.579 [DEBUG] [Thread-126281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:06:56.580 [DEBUG] [Thread-126281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:06:56.580 [DEBUG] [Thread-126281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:06:56.621 [DEBUG] [Thread-126281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:06:56.621 [DEBUG] [Thread-126281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:06:56.624 [DEBUG] [Thread-126281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:06:56.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:06:56.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:06:56.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:06:56.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:06:56.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:06:56.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:06:56.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:06:56.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:06:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:06:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.296320 -999.00  +20.10  16.15     51   +9.70 1 2 1 1 1   888    0 14.61 189.12 ----- 13.1 16.1 272.6 18.6 26.9 -25.0 26.4 -21.6 24.3 -20.2 24.9 -21.4
2026-02-11T09:06:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:06:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:06:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.296320
2026-02-11T09:06:56.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:06:56.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:06:56.653 [DEBUG] [Thread-126281] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:06:56.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:06:56.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:06:56.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:06:56.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:06:40', tmtdew=12.73, humidity=43.91, cloud=0.0, wind=14.61, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:06:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:06:56.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:06:56.746 [DEBUG] [Thread-126284] [transport.py] [_log()] starting thread (client mode): 0xa2df9690
2026-02-11T09:06:56.746 [DEBUG] [Thread-126284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:06:56.761 [DEBUG] [Thread-126284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:06:56.761 [INFO] [Thread-126284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] client lang: <none>
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] server lang: <none>
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] kex follows: False
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:06:56.770 [DEBUG] [Thread-126284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:06:56.771 [DEBUG] [Thread-126284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:06:56.771 [DEBUG] [Thread-126284] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:06:56.771 [DEBUG] [Thread-126284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:06:56.771 [DEBUG] [Thread-126284] [transport.py] [_log()] Compression: none
2026-02-11T09:06:56.771 [DEBUG] [Thread-126284] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:06:56.827 [DEBUG] [Thread-126284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:06:56.828 [DEBUG] [Thread-126284] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:06:56.828 [DEBUG] [Thread-126284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:06:56.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:06:56.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:06:56.888 [DEBUG] [Thread-126284] [transport.py] [_log()] userauth is OK
2026-02-11T09:06:56.888 [DEBUG] [Thread-126284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:06:56.888 [DEBUG] [Thread-126284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:06:56.888 [DEBUG] [Thread-126284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:06:56.888 [DEBUG] [Thread-126284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:06:56.909 [INFO] [Thread-126284] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:06:56.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:06:56.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:06:57.777 [DEBUG] [Thread-126284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:06:57.777 [DEBUG] [Thread-126284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:06:57.825 [DEBUG] [Thread-126284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:06:57.826 [DEBUG] [Thread-126284] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:06:57.835 [DEBUG] [Thread-126284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:06:57.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:06:57.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:06:57.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
2026-02-11T09:06:57.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:06:57.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:06:57.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:06:57.872 [DEBUG] [Thread-126284] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:07:04.894 [DEBUG] [Thread-126286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:07:06.006 [DEBUG] [Thread-126287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:07:21.055 [DEBUG] [Thread-126288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:07:27.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:07:27.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:07:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:07:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 7, 15), 12.62, 44.02, 0.0, 12.67, 20.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:07:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:07:15
2026-02-11T09:07:30.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:07:30.526 [DEBUG] [Thread-126289] [transport.py] [_log()] starting thread (client mode): 0xa57b1150
2026-02-11T09:07:30.526 [DEBUG] [Thread-126289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:07:30.546 [DEBUG] [Thread-126289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:07:30.546 [INFO] [Thread-126289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] client lang: <none>
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] server lang: <none>
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] kex follows: False
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:07:30.549 [DEBUG] [Thread-126289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:07:30.550 [DEBUG] [Thread-126289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:07:30.550 [DEBUG] [Thread-126289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:07:30.550 [DEBUG] [Thread-126289] [transport.py] [_log()] Compression: none
2026-02-11T09:07:30.550 [DEBUG] [Thread-126289] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:07:30.566 [DEBUG] [Thread-126289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:07:30.566 [DEBUG] [Thread-126289] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:07:30.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:07:30.567 [DEBUG] [Thread-126289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:07:30.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:07:30.569 [DEBUG] [Thread-126289] [transport.py] [_log()] userauth is OK
2026-02-11T09:07:30.569 [DEBUG] [Thread-126289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:07:30.569 [DEBUG] [Thread-126289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:07:30.569 [DEBUG] [Thread-126289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:07:30.569 [DEBUG] [Thread-126289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:07:30.590 [INFO] [Thread-126289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:07:30.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:07:31.222 [DEBUG] [Thread-126289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:07:31.222 [DEBUG] [Thread-126289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:07:31.222 [DEBUG] [Thread-126289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:07:31.262 [DEBUG] [Thread-126289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:07:31.263 [DEBUG] [Thread-126289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:07:31.266 [DEBUG] [Thread-126289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:07:31.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:07:31.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:07:31.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:07:31.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:07:31.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:07:31.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:07:31.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:07:31.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:07:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:07:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.296667 -999.00  +20.10  12.46     51   +9.90 1 2 1 1 1   888    0 14.46 175.41 ----- 8.1 12.5 274.2 15.2 27.2 -22.2 26.4 -20.9 24.0 -23.4 24.8 -22.3
2026-02-11T09:07:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:07:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:07:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.296667
2026-02-11T09:07:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:07:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:07:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:07:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:07:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:07:31.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:07:15', tmtdew=12.62, humidity=44.02, cloud=0.0, wind=12.67, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:07:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:07:31.293 [DEBUG] [Thread-126289] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:07:31.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:07:31.388 [DEBUG] [Thread-126292] [transport.py] [_log()] starting thread (client mode): 0xa57b26b0
2026-02-11T09:07:31.389 [DEBUG] [Thread-126292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:07:31.403 [DEBUG] [Thread-126292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:07:31.403 [INFO] [Thread-126292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] client lang: <none>
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] server lang: <none>
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] kex follows: False
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:07:31.411 [DEBUG] [Thread-126292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:07:31.412 [DEBUG] [Thread-126292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:07:31.412 [DEBUG] [Thread-126292] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:07:31.412 [DEBUG] [Thread-126292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:07:31.412 [DEBUG] [Thread-126292] [transport.py] [_log()] Compression: none
2026-02-11T09:07:31.412 [DEBUG] [Thread-126292] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:07:31.472 [DEBUG] [Thread-126292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:07:31.473 [DEBUG] [Thread-126292] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:07:31.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:07:31.474 [DEBUG] [Thread-126292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:07:31.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:07:31.532 [DEBUG] [Thread-126292] [transport.py] [_log()] userauth is OK
2026-02-11T09:07:31.532 [DEBUG] [Thread-126292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:07:31.533 [DEBUG] [Thread-126292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:07:31.533 [DEBUG] [Thread-126292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:07:31.533 [DEBUG] [Thread-126292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:07:31.551 [INFO] [Thread-126292] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:07:31.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:07:31.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:07:32.357 [DEBUG] [Thread-126292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:07:32.357 [DEBUG] [Thread-126292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:07:32.405 [DEBUG] [Thread-126292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:07:32.406 [DEBUG] [Thread-126292] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:07:32.415 [DEBUG] [Thread-126292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:07:32.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:07:32.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:07:32.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:07:32.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:07:32.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:07:32.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:07:32.456 [DEBUG] [Thread-126292] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:07:36.090 [DEBUG] [Thread-126294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:07:39.245 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:07:39.246 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:07:51.152 [DEBUG] [Thread-126295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:08:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:08:02.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:08: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
2026-02-11T09:08:04.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 7, 50), 12.26, 45.0, 0.0, 12.16, 20.44, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:08:04.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:07:50
2026-02-11T09:08:04.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:08:04.824 [DEBUG] [Thread-126296] [transport.py] [_log()] starting thread (client mode): 0xa57b1cc0
2026-02-11T09:08:04.824 [DEBUG] [Thread-126296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:08:04.845 [DEBUG] [Thread-126296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:08:04.845 [INFO] [Thread-126296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:08:04.848 [DEBUG] [Thread-126296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:08:04.848 [DEBUG] [Thread-126296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:08:04.848 [DEBUG] [Thread-126296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:08:04.848 [DEBUG] [Thread-126296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] client lang: <none>
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] server lang: <none>
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] kex follows: False
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] Compression: none
2026-02-11T09:08:04.849 [DEBUG] [Thread-126296] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:08:04.866 [DEBUG] [Thread-126296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:08:04.866 [DEBUG] [Thread-126296] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:08:04.867 [DEBUG] [Thread-126296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:08:04.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:08:04.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:08:04.869 [DEBUG] [Thread-126296] [transport.py] [_log()] userauth is OK
2026-02-11T09:08:04.869 [DEBUG] [Thread-126296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:08:04.869 [DEBUG] [Thread-126296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:08:04.869 [DEBUG] [Thread-126296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:08:04.869 [DEBUG] [Thread-126296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:08:04.891 [INFO] [Thread-126296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:08:04.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:08:04.937 [DEBUG] [Thread-126298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:08:05.441 [DEBUG] [Thread-126296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:08:05.442 [DEBUG] [Thread-126296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:08:05.442 [DEBUG] [Thread-126296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:08:05.482 [DEBUG] [Thread-126296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:08:05.483 [DEBUG] [Thread-126296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:08:05.486 [DEBUG] [Thread-126296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:08:05.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:08:05.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:08:05.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:08:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:08:05.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:08:05.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:08:05.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:08:05.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:08:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:08:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.297015 -999.00  +20.20  12.52     51   +9.90 1 2 1 1 1   888    0 14.98 195.62 ----- 9.4 12.5 274.6 14.8 27.3 -23.4 26.4 -21.3 24.3 -20.4 24.9 -20.8
2026-02-11T09:08:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:08:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:08:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.297015
2026-02-11T09:08:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:08:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:08:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:08:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:08:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:08:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:07:50', tmtdew=12.26, humidity=45.0, cloud=0.0, wind=12.16, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:07:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:08:05.511 [DEBUG] [Thread-126296] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:08:05.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:08:05.607 [DEBUG] [Thread-126300] [transport.py] [_log()] starting thread (client mode): 0xa2df9d80
2026-02-11T09:08:05.607 [DEBUG] [Thread-126300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:08:05.622 [DEBUG] [Thread-126300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:08:05.622 [INFO] [Thread-126300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] client lang: <none>
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] server lang: <none>
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] kex follows: False
2026-02-11T09:08:05.632 [DEBUG] [Thread-126300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:08:05.633 [DEBUG] [Thread-126300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:08:05.633 [DEBUG] [Thread-126300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:08:05.633 [DEBUG] [Thread-126300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:08:05.633 [DEBUG] [Thread-126300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:08:05.633 [DEBUG] [Thread-126300] [transport.py] [_log()] Compression: none
2026-02-11T09:08:05.633 [DEBUG] [Thread-126300] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:08:05.696 [DEBUG] [Thread-126300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:08:05.696 [DEBUG] [Thread-126300] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:08:05.697 [DEBUG] [Thread-126300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:08:05.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:08:05.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:08:05.756 [DEBUG] [Thread-126300] [transport.py] [_log()] userauth is OK
2026-02-11T09:08:05.756 [DEBUG] [Thread-126300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:08:05.757 [DEBUG] [Thread-126300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:08:05.757 [DEBUG] [Thread-126300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:08:05.757 [DEBUG] [Thread-126300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:08:05.777 [INFO] [Thread-126300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:08:05.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:08:05.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:08:06.188 [DEBUG] [Thread-126302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:08:06.634 [DEBUG] [Thread-126300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:08:06.634 [DEBUG] [Thread-126300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:08:06.682 [DEBUG] [Thread-126300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:08:06.682 [DEBUG] [Thread-126300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:08:06.694 [DEBUG] [Thread-126300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:08:06.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:08:06.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:08:06.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:08:06.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:08:06.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:08:06.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:08:06.731 [DEBUG] [Thread-126300] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:08:21.239 [DEBUG] [Thread-126303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:08:36.272 [DEBUG] [Thread-126304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:08:36.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:08:36.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:08: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
2026-02-11T09:08:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 8, 26), 12.17, 45.29, 0.0, 14.08, 20.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:08:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:08:26
2026-02-11T09:08:39.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:08:39.178 [DEBUG] [Thread-126305] [transport.py] [_log()] starting thread (client mode): 0xa2d039a0
2026-02-11T09:08:39.179 [DEBUG] [Thread-126305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:08:39.198 [DEBUG] [Thread-126305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:08:39.198 [INFO] [Thread-126305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] client lang: <none>
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] server lang: <none>
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] kex follows: False
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:08:39.201 [DEBUG] [Thread-126305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:08:39.202 [DEBUG] [Thread-126305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:08:39.202 [DEBUG] [Thread-126305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:08:39.202 [DEBUG] [Thread-126305] [transport.py] [_log()] Compression: none
2026-02-11T09:08:39.202 [DEBUG] [Thread-126305] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:08:39.221 [DEBUG] [Thread-126305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:08:39.222 [DEBUG] [Thread-126305] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:08:39.223 [DEBUG] [Thread-126305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:08:39.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:08:39.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:08:39.225 [DEBUG] [Thread-126305] [transport.py] [_log()] userauth is OK
2026-02-11T09:08:39.225 [DEBUG] [Thread-126305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:08:39.225 [DEBUG] [Thread-126305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:08:39.225 [DEBUG] [Thread-126305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:08:39.225 [DEBUG] [Thread-126305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:08:39.250 [INFO] [Thread-126305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:08:39.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:08:39.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:08:39.390 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:08:39.885 [DEBUG] [Thread-126305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:08:39.885 [DEBUG] [Thread-126305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:08:39.885 [DEBUG] [Thread-126305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:08:39.925 [DEBUG] [Thread-126305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:08:39.926 [DEBUG] [Thread-126305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:08:39.929 [DEBUG] [Thread-126305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:08:39.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:08:39.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:08:39.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:08:39.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:08:39.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:08:39.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:08:39.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:08:39.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:08:39.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:08:39.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.297362 -999.00  +20.30  15.91     51   +9.80 1 2 1 1 1   888    0 14.62 179.85 ----- 16.5 15.9 266.6 18.9 27.2 -24.3 26.4 -22.1 24.2 -21.4 25.0 -21.4
2026-02-11T09:08:39.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:08:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:08:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.297362
2026-02-11T09:08:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:08:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:08:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:08:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:08:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:08:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:08:26', tmtdew=12.17, humidity=45.29, cloud=0.0, wind=14.08, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:08:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:08:39.957 [DEBUG] [Thread-126305] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:08:40.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:08:40.056 [DEBUG] [Thread-126308] [transport.py] [_log()] starting thread (client mode): 0xa2d930a0
2026-02-11T09:08:40.056 [DEBUG] [Thread-126308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:08:40.074 [DEBUG] [Thread-126308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:08:40.074 [INFO] [Thread-126308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] client lang: <none>
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] server lang: <none>
2026-02-11T09:08:40.082 [DEBUG] [Thread-126308] [transport.py] [_log()] kex follows: False
2026-02-11T09:08:40.083 [DEBUG] [Thread-126308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:08:40.083 [DEBUG] [Thread-126308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:08:40.083 [DEBUG] [Thread-126308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:08:40.083 [DEBUG] [Thread-126308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:08:40.083 [DEBUG] [Thread-126308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:08:40.083 [DEBUG] [Thread-126308] [transport.py] [_log()] Compression: none
2026-02-11T09:08:40.083 [DEBUG] [Thread-126308] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:08:40.144 [DEBUG] [Thread-126308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:08:40.145 [DEBUG] [Thread-126308] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:08:40.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:08:40.146 [DEBUG] [Thread-126308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:08:40.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:08:40.203 [DEBUG] [Thread-126308] [transport.py] [_log()] userauth is OK
2026-02-11T09:08:40.204 [DEBUG] [Thread-126308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:08:40.204 [DEBUG] [Thread-126308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:08:40.204 [DEBUG] [Thread-126308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:08:40.204 [DEBUG] [Thread-126308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:08:40.229 [INFO] [Thread-126308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:08:40.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:08:40.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:08:41.056 [DEBUG] [Thread-126308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:08:41.057 [DEBUG] [Thread-126308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:08:41.109 [DEBUG] [Thread-126308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:08:41.109 [DEBUG] [Thread-126308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:08:41.123 [DEBUG] [Thread-126308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:08:41.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:08:41.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:08:41.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:08:41.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:08:41.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:08:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:08:41.160 [DEBUG] [Thread-126308] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:08:51.309 [DEBUG] [Thread-126310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:09:04.984 [DEBUG] [Thread-126311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:09:06.362 [DEBUG] [Thread-126312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:09:11.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:09:11.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:09:11.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:09:12.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 9, 1), 12.34, 45.07, 0.0, 12.03, 20.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:09:12.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:09:01
2026-02-11T09:09:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:09:13.495 [DEBUG] [Thread-126313] [transport.py] [_log()] starting thread (client mode): 0xa2d022f0
2026-02-11T09:09:13.495 [DEBUG] [Thread-126313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:09:13.515 [DEBUG] [Thread-126313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:09:13.515 [INFO] [Thread-126313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] client lang: <none>
2026-02-11T09:09:13.518 [DEBUG] [Thread-126313] [transport.py] [_log()] server lang: <none>
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] kex follows: False
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] Compression: none
2026-02-11T09:09:13.519 [DEBUG] [Thread-126313] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:09:13.538 [DEBUG] [Thread-126313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:09:13.539 [DEBUG] [Thread-126313] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:09:13.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:09:13.540 [DEBUG] [Thread-126313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:09:13.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:09:13.581 [DEBUG] [Thread-126313] [transport.py] [_log()] userauth is OK
2026-02-11T09:09:13.581 [DEBUG] [Thread-126313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:09:13.582 [DEBUG] [Thread-126313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:09:13.582 [DEBUG] [Thread-126313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:09:13.582 [DEBUG] [Thread-126313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:09:13.621 [INFO] [Thread-126313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:09:13.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:09:14.227 [DEBUG] [Thread-126313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:09:14.228 [DEBUG] [Thread-126313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:09:14.228 [DEBUG] [Thread-126313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:09:14.268 [DEBUG] [Thread-126313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:09:14.269 [DEBUG] [Thread-126313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:09:14.272 [DEBUG] [Thread-126313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:09:14.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:09:14.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:09:14.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:09:14.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:09:14.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:09:14.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:09:14.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:09:14.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:09:14.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:09:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.297709 -999.00  +20.10  14.32     51   +9.80 1 2 1 1 1   888    0 14.21 170.31 ----- 12.9 14.3 271.6 20.7 27.1 -24.0 26.4 -21.4 24.1 -21.1 24.8 -22.3
2026-02-11T09:09:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:09:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:09:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.297709
2026-02-11T09:09:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:09:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:09:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:09:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:09:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:09:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:09:01', tmtdew=12.34, humidity=45.07, cloud=0.0, wind=12.03, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:08:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:09:14.298 [DEBUG] [Thread-126313] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:09:14.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:09:14.392 [DEBUG] [Thread-126316] [transport.py] [_log()] starting thread (client mode): 0xa2d00a60
2026-02-11T09:09:14.392 [DEBUG] [Thread-126316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:09:14.408 [DEBUG] [Thread-126316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:09:14.408 [INFO] [Thread-126316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:14.416 [DEBUG] [Thread-126316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] client lang: <none>
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] server lang: <none>
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] kex follows: False
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] Compression: none
2026-02-11T09:09:14.417 [DEBUG] [Thread-126316] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:09:14.475 [DEBUG] [Thread-126316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:09:14.476 [DEBUG] [Thread-126316] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:09:14.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:09:14.477 [DEBUG] [Thread-126316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:09:14.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:09:14.532 [DEBUG] [Thread-126316] [transport.py] [_log()] userauth is OK
2026-02-11T09:09:14.532 [DEBUG] [Thread-126316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:09:14.532 [DEBUG] [Thread-126316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:09:14.533 [DEBUG] [Thread-126316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:09:14.533 [DEBUG] [Thread-126316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:09:14.553 [INFO] [Thread-126316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:09:14.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:09:14.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:09:15.416 [DEBUG] [Thread-126316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:09:15.416 [DEBUG] [Thread-126316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:09:15.464 [DEBUG] [Thread-126316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:09:15.464 [DEBUG] [Thread-126316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:09:15.474 [DEBUG] [Thread-126316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:09:15.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:09:15.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')
2026-02-11T09:09:15.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:09:15.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:09:15.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:09:15.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:09:15.511 [DEBUG] [Thread-126316] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:09:21.397 [DEBUG] [Thread-126318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:09:36.443 [DEBUG] [Thread-126319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:09:39.531 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:09:39.532 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:09:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:09:45.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:09:45.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:09:47.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 9, 37), 12.46, 44.84, 0.0, 12.95, 21.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:09:47.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:09:37
2026-02-11T09:09:47.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:09:48.149 [DEBUG] [Thread-126320] [transport.py] [_log()] starting thread (client mode): 0xa2d02bf0
2026-02-11T09:09:48.149 [DEBUG] [Thread-126320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:09:48.170 [DEBUG] [Thread-126320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:09:48.170 [INFO] [Thread-126320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] client lang: <none>
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] server lang: <none>
2026-02-11T09:09:48.171 [DEBUG] [Thread-126320] [transport.py] [_log()] kex follows: False
2026-02-11T09:09:48.172 [DEBUG] [Thread-126320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:09:48.172 [DEBUG] [Thread-126320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:09:48.172 [DEBUG] [Thread-126320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:09:48.172 [DEBUG] [Thread-126320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:09:48.172 [DEBUG] [Thread-126320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:09:48.172 [DEBUG] [Thread-126320] [transport.py] [_log()] Compression: none
2026-02-11T09:09:48.172 [DEBUG] [Thread-126320] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:09:48.180 [DEBUG] [Thread-126320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:09:48.180 [DEBUG] [Thread-126320] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:09:48.181 [DEBUG] [Thread-126320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:09:48.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:09:48.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:09:48.182 [DEBUG] [Thread-126320] [transport.py] [_log()] userauth is OK
2026-02-11T09:09:48.182 [DEBUG] [Thread-126320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:09:48.182 [DEBUG] [Thread-126320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:09:48.182 [DEBUG] [Thread-126320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:09:48.182 [DEBUG] [Thread-126320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:09:48.200 [INFO] [Thread-126320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:09:48.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:09:48.842 [DEBUG] [Thread-126320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:09:48.842 [DEBUG] [Thread-126320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:09:48.842 [DEBUG] [Thread-126320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:09:48.883 [DEBUG] [Thread-126320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:09:48.883 [DEBUG] [Thread-126320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:09:48.886 [DEBUG] [Thread-126320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:09:48.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:09:48.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:09:48.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:09:48.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:09:48.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:09:48.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:09:48.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:09:48.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:09:48.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:09:48.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.298056 -999.00  +20.10   9.84     51   +9.90 1 2 1 1 1   888    0 14.90 183.84 ----- 11.7 9.8 274.2 14.1 27.1 -23.7 26.4 -20.9 24.1 -21.6 24.8 -22.3
2026-02-11T09:09:48.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:09:48.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:09:48.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.298056
2026-02-11T09:09:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:09:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:09:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:09:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:09:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:09:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:09:37', tmtdew=12.46, humidity=44.84, cloud=0.0, wind=12.95, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:09:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:09:48.911 [DEBUG] [Thread-126320] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:09:48.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:09:49.003 [DEBUG] [Thread-126323] [transport.py] [_log()] starting thread (client mode): 0xa2d01060
2026-02-11T09:09:49.003 [DEBUG] [Thread-126323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:09:49.017 [DEBUG] [Thread-126323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:09:49.018 [INFO] [Thread-126323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:09:49.029 [DEBUG] [Thread-126323] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:09:49.030 [DEBUG] [Thread-126323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:09:49.030 [DEBUG] [Thread-126323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:09:49.030 [DEBUG] [Thread-126323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:49.030 [DEBUG] [Thread-126323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:09:49.030 [DEBUG] [Thread-126323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:49.030 [DEBUG] [Thread-126323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:09:49.031 [DEBUG] [Thread-126323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:09:49.031 [DEBUG] [Thread-126323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:09:49.031 [DEBUG] [Thread-126323] [transport.py] [_log()] client lang: <none>
2026-02-11T09:09:49.031 [DEBUG] [Thread-126323] [transport.py] [_log()] server lang: <none>
2026-02-11T09:09:49.031 [DEBUG] [Thread-126323] [transport.py] [_log()] kex follows: False
2026-02-11T09:09:49.031 [DEBUG] [Thread-126323] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:09:49.032 [DEBUG] [Thread-126323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:09:49.032 [DEBUG] [Thread-126323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:09:49.032 [DEBUG] [Thread-126323] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:09:49.032 [DEBUG] [Thread-126323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:09:49.032 [DEBUG] [Thread-126323] [transport.py] [_log()] Compression: none
2026-02-11T09:09:49.032 [DEBUG] [Thread-126323] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:09:49.084 [DEBUG] [Thread-126323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:09:49.085 [DEBUG] [Thread-126323] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:09:49.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:09:49.086 [DEBUG] [Thread-126323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:09:49.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:09:49.145 [DEBUG] [Thread-126323] [transport.py] [_log()] userauth is OK
2026-02-11T09:09:49.145 [DEBUG] [Thread-126323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:09:49.146 [DEBUG] [Thread-126323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:09:49.146 [DEBUG] [Thread-126323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:09:49.146 [DEBUG] [Thread-126323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:09:49.166 [INFO] [Thread-126323] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:09:49.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:09:49.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:09:50.000 [DEBUG] [Thread-126323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:09:50.000 [DEBUG] [Thread-126323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:09:50.048 [DEBUG] [Thread-126323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:09:50.049 [DEBUG] [Thread-126323] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:09:50.058 [DEBUG] [Thread-126323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:09:50.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:09:50.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:09:50.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:09:50.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:09:50.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:09:50.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:09:50.092 [DEBUG] [Thread-126323] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:09:51.477 [DEBUG] [Thread-126325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:05.019 [DEBUG] [Thread-126326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:06.530 [DEBUG] [Thread-126327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:20.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:10:20.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:10:20.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:10:21.568 [DEBUG] [Thread-126328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:21.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 10, 12), 12.1, 45.52, 0.0, 14.15, 20.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:10:21.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:10:12
2026-02-11T09:10:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:10:22.419 [DEBUG] [Thread-126329] [transport.py] [_log()] starting thread (client mode): 0xa2dfa9b0
2026-02-11T09:10:22.419 [DEBUG] [Thread-126329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:10:22.429 [DEBUG] [Thread-126329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:10:22.429 [INFO] [Thread-126329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] client lang: <none>
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] server lang: <none>
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] kex follows: False
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] Compression: none
2026-02-11T09:10:22.432 [DEBUG] [Thread-126329] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:10:22.446 [DEBUG] [Thread-126329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:10:22.446 [DEBUG] [Thread-126329] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:10:22.447 [DEBUG] [Thread-126329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:10:22.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:10:22.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:10:22.448 [DEBUG] [Thread-126329] [transport.py] [_log()] userauth is OK
2026-02-11T09:10:22.448 [DEBUG] [Thread-126329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:10:22.448 [DEBUG] [Thread-126329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:10:22.448 [DEBUG] [Thread-126329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:10:22.448 [DEBUG] [Thread-126329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:10:22.464 [INFO] [Thread-126329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:10:22.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:10:23.109 [DEBUG] [Thread-126329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:10:23.109 [DEBUG] [Thread-126329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:10:23.110 [DEBUG] [Thread-126329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:10:23.150 [DEBUG] [Thread-126329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:10:23.150 [DEBUG] [Thread-126329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:10:23.152 [DEBUG] [Thread-126329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:10:23.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:10:23.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:10:23.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:10:23.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:10:23.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:10:23.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:10:23.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:10:23.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:10:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:10:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.298751 -999.00  +20.50  14.18     51  +10.10 1 2 1 1 1   888    0 14.73 176.58 ----- 14.6 14.2 273.2 17.8 27.4 -23.1 26.5 -21.7 24.4 -22.2 24.9 -21.5
2026-02-11T09:10:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:10:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:10:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.298751
2026-02-11T09:10:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:10:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:10:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:10:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:10:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:10:23.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:10:12', tmtdew=12.1, humidity=45.52, cloud=0.0, wind=14.15, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:10:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:10:23.174 [DEBUG] [Thread-126329] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:10:23.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:10:23.276 [DEBUG] [Thread-126332] [transport.py] [_log()] starting thread (client mode): 0xa57b1120
2026-02-11T09:10:23.276 [DEBUG] [Thread-126332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:10:23.290 [DEBUG] [Thread-126332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:10:23.291 [INFO] [Thread-126332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:10:23.298 [DEBUG] [Thread-126332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] client lang: <none>
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] server lang: <none>
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] kex follows: False
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:10:23.299 [DEBUG] [Thread-126332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:10:23.300 [DEBUG] [Thread-126332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:10:23.300 [DEBUG] [Thread-126332] [transport.py] [_log()] Compression: none
2026-02-11T09:10:23.300 [DEBUG] [Thread-126332] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:10:23.361 [DEBUG] [Thread-126332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:10:23.362 [DEBUG] [Thread-126332] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:10:23.362 [DEBUG] [Thread-126332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:10:23.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:10:23.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:10:23.420 [DEBUG] [Thread-126332] [transport.py] [_log()] userauth is OK
2026-02-11T09:10:23.420 [DEBUG] [Thread-126332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:10:23.420 [DEBUG] [Thread-126332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:10:23.420 [DEBUG] [Thread-126332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:10:23.420 [DEBUG] [Thread-126332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:10:23.441 [INFO] [Thread-126332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:10:23.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:10:23.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:10:24.256 [DEBUG] [Thread-126332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:10:24.256 [DEBUG] [Thread-126332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:10:24.305 [DEBUG] [Thread-126332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:10:24.305 [DEBUG] [Thread-126332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:10:24.315 [DEBUG] [Thread-126332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:10:24.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:10:24.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')
2026-02-11T09:10:24.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:10:24.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:10:24.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:10:24.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:10:24.357 [DEBUG] [Thread-126332] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:10:36.605 [DEBUG] [Thread-126334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:39.672 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:39.673 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:51.658 [DEBUG] [Thread-126335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:10:54.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:10:54.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:10:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:10:56.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 10, 47), 12.17, 45.3, 0.0, 12.95, 20.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:10:56.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:10:47
2026-02-11T09:10:56.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:10:56.885 [DEBUG] [Thread-126336] [transport.py] [_log()] starting thread (client mode): 0xa2d900d0
2026-02-11T09:10:56.886 [DEBUG] [Thread-126336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:10:56.898 [DEBUG] [Thread-126336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:10:56.898 [INFO] [Thread-126336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:10:56.899 [DEBUG] [Thread-126336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] client lang: <none>
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] server lang: <none>
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] kex follows: False
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] Compression: none
2026-02-11T09:10:56.900 [DEBUG] [Thread-126336] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:10:56.910 [DEBUG] [Thread-126336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:10:56.911 [DEBUG] [Thread-126336] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:10:56.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:10:56.912 [DEBUG] [Thread-126336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:10:56.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:10:56.914 [DEBUG] [Thread-126336] [transport.py] [_log()] userauth is OK
2026-02-11T09:10:56.914 [DEBUG] [Thread-126336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:10:56.914 [DEBUG] [Thread-126336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:10:56.914 [DEBUG] [Thread-126336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:10:56.914 [DEBUG] [Thread-126336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:10:56.933 [INFO] [Thread-126336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:10:56.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:10:57.550 [DEBUG] [Thread-126336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:10:57.550 [DEBUG] [Thread-126336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:10:57.551 [DEBUG] [Thread-126336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:10:57.591 [DEBUG] [Thread-126336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:10:57.591 [DEBUG] [Thread-126336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:10:57.594 [DEBUG] [Thread-126336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:10:57.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:10:57.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:10:57.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:10:57.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:10:57.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:10:57.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:10:57.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:10:57.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:10:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:10:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.299098 -999.00  +20.20  11.14     51   +9.90 1 2 1 1 1   888    0 14.89 183.00 ----- 11.0 11.1 274.5 19.1 27.2 -23.6 26.5 -21.1 24.3 -22.2 25.0 -22.4
2026-02-11T09:10:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:10:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:10:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.299098
2026-02-11T09:10:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:10:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:10:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:10:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:10:57.618 [DEBUG] [Thread-126336] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:10:57.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:10:57.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:10:47', tmtdew=12.17, humidity=45.3, cloud=0.0, wind=12.95, temperature=20.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:10:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:10:57.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:10:57.715 [DEBUG] [Thread-126339] [transport.py] [_log()] starting thread (client mode): 0xa2d93490
2026-02-11T09:10:57.715 [DEBUG] [Thread-126339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:10:57.729 [DEBUG] [Thread-126339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:10:57.729 [INFO] [Thread-126339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:10:57.737 [DEBUG] [Thread-126339] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] client lang: <none>
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] server lang: <none>
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] kex follows: False
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:10:57.738 [DEBUG] [Thread-126339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:10:57.739 [DEBUG] [Thread-126339] [transport.py] [_log()] Compression: none
2026-02-11T09:10:57.739 [DEBUG] [Thread-126339] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:10:57.795 [DEBUG] [Thread-126339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:10:57.796 [DEBUG] [Thread-126339] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:10:57.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:10:57.797 [DEBUG] [Thread-126339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:10:57.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:10:57.857 [DEBUG] [Thread-126339] [transport.py] [_log()] userauth is OK
2026-02-11T09:10:57.857 [DEBUG] [Thread-126339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:10:57.857 [DEBUG] [Thread-126339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:10:57.857 [DEBUG] [Thread-126339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:10:57.858 [DEBUG] [Thread-126339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:10:57.877 [INFO] [Thread-126339] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:10:57.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:10:57.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:10:58.721 [DEBUG] [Thread-126339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:10:58.722 [DEBUG] [Thread-126339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:10:58.770 [DEBUG] [Thread-126339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:10:58.770 [DEBUG] [Thread-126339] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:10:58.779 [DEBUG] [Thread-126339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:10:58.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:10:58.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')
2026-02-11T09:10:58.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:10:58.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:10:58.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:10:58.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:10:58.815 [DEBUG] [Thread-126339] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:11:05.072 [DEBUG] [Thread-126341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:11:06.696 [DEBUG] [Thread-126342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:11:21.747 [DEBUG] [Thread-126343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:11:28.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:11:28.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:11:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:11:30.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 11, 22), 12.17, 45.27, 0.0, 10.45, 20.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:11:30.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:11:22
2026-02-11T09:11:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:11:31.410 [DEBUG] [Thread-126344] [transport.py] [_log()] starting thread (client mode): 0xa2df94b0
2026-02-11T09:11:31.410 [DEBUG] [Thread-126344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:11:31.430 [DEBUG] [Thread-126344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:11:31.431 [INFO] [Thread-126344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] client lang: <none>
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] server lang: <none>
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] kex follows: False
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] Compression: none
2026-02-11T09:11:31.434 [DEBUG] [Thread-126344] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:11:31.452 [DEBUG] [Thread-126344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:11:31.453 [DEBUG] [Thread-126344] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:11:31.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:11:31.454 [DEBUG] [Thread-126344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:11:31.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:11:31.456 [DEBUG] [Thread-126344] [transport.py] [_log()] userauth is OK
2026-02-11T09:11:31.457 [DEBUG] [Thread-126344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:11:31.457 [DEBUG] [Thread-126344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:11:31.457 [DEBUG] [Thread-126344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:11:31.457 [DEBUG] [Thread-126344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:11:31.475 [INFO] [Thread-126344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:11:31.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:11:32.086 [DEBUG] [Thread-126344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:11:32.086 [DEBUG] [Thread-126344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:11:32.086 [DEBUG] [Thread-126344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:11:32.126 [DEBUG] [Thread-126344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:11:32.127 [DEBUG] [Thread-126344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:11:32.130 [DEBUG] [Thread-126344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:11:32.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:11:32.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:11:32.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:11:32.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:11:32.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:11:32.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:11:32.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:11:32.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:11:32.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:11:32.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.299445 -999.00  +20.10   8.84     52  +10.00 1 2 1 1 1   888    0 14.72 176.56 ----- 8.8 8.8 298.0 11.8 27.3 -22.3 26.5 -21.1 24.1 -22.4 25.0 -22.1
2026-02-11T09:11:32.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:11:32.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:11:32.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.299445
2026-02-11T09:11:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:11:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:11:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:11:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:11:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:11:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:11:22', tmtdew=12.17, humidity=45.27, cloud=0.0, wind=10.45, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:11:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:11:32.157 [DEBUG] [Thread-126344] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:11:32.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:11:32.246 [DEBUG] [Thread-126347] [transport.py] [_log()] starting thread (client mode): 0xa2d559f0
2026-02-11T09:11:32.247 [DEBUG] [Thread-126347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:11:32.261 [DEBUG] [Thread-126347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:11:32.261 [INFO] [Thread-126347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:11:32.268 [DEBUG] [Thread-126347] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:11:32.268 [DEBUG] [Thread-126347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:11:32.268 [DEBUG] [Thread-126347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:11:32.268 [DEBUG] [Thread-126347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] client lang: <none>
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] server lang: <none>
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] kex follows: False
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] Compression: none
2026-02-11T09:11:32.269 [DEBUG] [Thread-126347] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:11:32.332 [DEBUG] [Thread-126347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:11:32.333 [DEBUG] [Thread-126347] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:11:32.333 [DEBUG] [Thread-126347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:11:32.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:11:32.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:11:32.392 [DEBUG] [Thread-126347] [transport.py] [_log()] userauth is OK
2026-02-11T09:11:32.392 [DEBUG] [Thread-126347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:11:32.392 [DEBUG] [Thread-126347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:11:32.392 [DEBUG] [Thread-126347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:11:32.392 [DEBUG] [Thread-126347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:11:32.411 [INFO] [Thread-126347] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:11:32.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:11:32.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:11:33.243 [DEBUG] [Thread-126347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:11:33.244 [DEBUG] [Thread-126347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:11:33.291 [DEBUG] [Thread-126347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:11:33.291 [DEBUG] [Thread-126347] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:11:33.300 [DEBUG] [Thread-126347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:11:33.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:11:33.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:11:33.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:11:33.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:11:33.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:11:33.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:11:33.334 [DEBUG] [Thread-126347] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:11:36.782 [DEBUG] [Thread-126349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:11:39.814 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:11:39.815 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:11:51.838 [DEBUG] [Thread-126350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:12:03.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:12:03.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:12:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:12:05.138 [DEBUG] [Thread-126351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:12:05.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 11, 22), 12.17, 45.27, 0.0, 10.45, 20.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:12:05.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:11:22
2026-02-11T09:12:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:12:05.750 [DEBUG] [Thread-126352] [transport.py] [_log()] starting thread (client mode): 0xa57b2ef0
2026-02-11T09:12:05.750 [DEBUG] [Thread-126352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:12:05.771 [DEBUG] [Thread-126352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:12:05.771 [INFO] [Thread-126352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:12:05.772 [DEBUG] [Thread-126352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] client lang: <none>
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] server lang: <none>
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] kex follows: False
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] Compression: none
2026-02-11T09:12:05.773 [DEBUG] [Thread-126352] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:12:05.785 [DEBUG] [Thread-126352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:12:05.786 [DEBUG] [Thread-126352] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:12:05.786 [DEBUG] [Thread-126352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:12:05.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:12:05.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:12:05.788 [DEBUG] [Thread-126352] [transport.py] [_log()] userauth is OK
2026-02-11T09:12:05.788 [DEBUG] [Thread-126352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:12:05.788 [DEBUG] [Thread-126352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:12:05.788 [DEBUG] [Thread-126352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:12:05.788 [DEBUG] [Thread-126352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:12:05.800 [INFO] [Thread-126352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:12:05.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:12:06.386 [DEBUG] [Thread-126352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:12:06.386 [DEBUG] [Thread-126352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:12:06.387 [DEBUG] [Thread-126352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:12:06.427 [DEBUG] [Thread-126352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:12:06.427 [DEBUG] [Thread-126352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:12:06.430 [DEBUG] [Thread-126352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:12:06.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:12:06.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:12:06.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:12:06.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:12:06.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:12:06.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:12:06.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:12:06.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:12:06.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:12:06.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.299792 -999.00  +20.40  16.20     52  +10.40 1 2 1 1 1   888    0 14.14 155.00 ----- 11.3 16.2 307.2 18.1 27.4 -23.8 26.6 -21.7 24.3 -19.9 25.1 -21.0
2026-02-11T09:12:06.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:12:06.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:12:06.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.299792
2026-02-11T09:12:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:12:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:12:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:12:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:12:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:12:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:11:22', tmtdew=12.17, humidity=45.27, cloud=0.0, wind=10.45, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:11:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:12:06.457 [DEBUG] [Thread-126352] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:12:06.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:12:06.553 [DEBUG] [Thread-126355] [transport.py] [_log()] starting thread (client mode): 0xa2dc3970
2026-02-11T09:12:06.554 [DEBUG] [Thread-126355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:12:06.571 [DEBUG] [Thread-126355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:12:06.571 [INFO] [Thread-126355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:12:06.579 [DEBUG] [Thread-126355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] client lang: <none>
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] server lang: <none>
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] kex follows: False
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:12:06.580 [DEBUG] [Thread-126355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:12:06.581 [DEBUG] [Thread-126355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:12:06.581 [DEBUG] [Thread-126355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:12:06.581 [DEBUG] [Thread-126355] [transport.py] [_log()] Compression: none
2026-02-11T09:12:06.581 [DEBUG] [Thread-126355] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:12:06.639 [DEBUG] [Thread-126355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:12:06.640 [DEBUG] [Thread-126355] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:12:06.640 [DEBUG] [Thread-126355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:12:06.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:12:06.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:12:06.703 [DEBUG] [Thread-126355] [transport.py] [_log()] userauth is OK
2026-02-11T09:12:06.703 [DEBUG] [Thread-126355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:12:06.703 [DEBUG] [Thread-126355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:12:06.703 [DEBUG] [Thread-126355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:12:06.703 [DEBUG] [Thread-126355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:12:06.734 [INFO] [Thread-126355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:12:06.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:12:06.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:12:06.877 [DEBUG] [Thread-126357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:12:07.571 [DEBUG] [Thread-126355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:12:07.572 [DEBUG] [Thread-126355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:12:07.624 [DEBUG] [Thread-126355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:12:07.624 [DEBUG] [Thread-126355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:12:07.633 [DEBUG] [Thread-126355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:12:07.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:12:07.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:12:07.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:12:07.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:12:07.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:12:07.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:12:07.671 [DEBUG] [Thread-126355] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:12:21.934 [DEBUG] [Thread-126358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:12:36.970 [DEBUG] [Thread-126359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:12:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:12:37.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:12:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:12:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 11, 58), 11.98, 46.33, 0.0, 12.97, 20.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:12:39.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:11:58
2026-02-11T09:12:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:12:39.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:12:39.960 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:12:40.056 [DEBUG] [Thread-126360] [transport.py] [_log()] starting thread (client mode): 0xa2dc13f0
2026-02-11T09:12:40.056 [DEBUG] [Thread-126360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:12:40.076 [DEBUG] [Thread-126360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:12:40.076 [INFO] [Thread-126360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:12:40.079 [DEBUG] [Thread-126360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:12:40.079 [DEBUG] [Thread-126360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:12:40.079 [DEBUG] [Thread-126360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:12:40.079 [DEBUG] [Thread-126360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:40.079 [DEBUG] [Thread-126360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:40.079 [DEBUG] [Thread-126360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] client lang: <none>
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] server lang: <none>
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] kex follows: False
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] Compression: none
2026-02-11T09:12:40.080 [DEBUG] [Thread-126360] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:12:40.102 [DEBUG] [Thread-126360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:12:40.102 [DEBUG] [Thread-126360] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:12:40.103 [DEBUG] [Thread-126360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:12:40.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:12:40.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:12:40.105 [DEBUG] [Thread-126360] [transport.py] [_log()] userauth is OK
2026-02-11T09:12:40.105 [DEBUG] [Thread-126360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:12:40.105 [DEBUG] [Thread-126360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:12:40.105 [DEBUG] [Thread-126360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:12:40.105 [DEBUG] [Thread-126360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:12:40.122 [INFO] [Thread-126360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:12:40.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:12:40.744 [DEBUG] [Thread-126360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:12:40.744 [DEBUG] [Thread-126360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:12:40.745 [DEBUG] [Thread-126360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:12:40.785 [DEBUG] [Thread-126360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:12:40.785 [DEBUG] [Thread-126360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:12:40.789 [DEBUG] [Thread-126360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:12:40.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:12:40.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:12:40.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:12:40.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:12:40.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:12:40.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:12:40.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:12:40.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:12:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:12:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.300139 -999.00  +20.20  13.74     53  +10.40 1 2 1 1 1   888    0 14.25 157.56 ----- 12.9 13.7 294.0 16.8 27.4 -22.6 26.6 -21.3 24.4 -21.7 25.1 -21.3
2026-02-11T09:12:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:12:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:12:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.300139
2026-02-11T09:12:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:12:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:12:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:12:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:12:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:12:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:11:58', tmtdew=11.98, humidity=46.33, cloud=0.0, wind=12.97, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:12:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:12:40.817 [DEBUG] [Thread-126360] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:12:40.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:12:40.913 [DEBUG] [Thread-126363] [transport.py] [_log()] starting thread (client mode): 0xa2d93430
2026-02-11T09:12:40.913 [DEBUG] [Thread-126363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:12:40.932 [DEBUG] [Thread-126363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:12:40.932 [INFO] [Thread-126363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] client lang: <none>
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] server lang: <none>
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] kex follows: False
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] Compression: none
2026-02-11T09:12:40.943 [DEBUG] [Thread-126363] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:12:40.997 [DEBUG] [Thread-126363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:12:40.997 [DEBUG] [Thread-126363] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:12:40.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:12:40.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:12:40.998 [DEBUG] [Thread-126363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:12:41.059 [DEBUG] [Thread-126363] [transport.py] [_log()] userauth is OK
2026-02-11T09:12:41.059 [DEBUG] [Thread-126363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:12:41.059 [DEBUG] [Thread-126363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:12:41.059 [DEBUG] [Thread-126363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:12:41.059 [DEBUG] [Thread-126363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:12:41.089 [INFO] [Thread-126363] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:12:41.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:12:41.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:12:41.972 [DEBUG] [Thread-126363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:12:41.973 [DEBUG] [Thread-126363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:12:42.022 [DEBUG] [Thread-126363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:12:42.022 [DEBUG] [Thread-126363] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:12:42.031 [DEBUG] [Thread-126363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:12:42.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:12:42.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:12:42.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:12:42.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:12:42.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:12:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:12:42.075 [DEBUG] [Thread-126363] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:12:52.009 [DEBUG] [Thread-126365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:13:05.197 [DEBUG] [Thread-126366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:13:07.062 [DEBUG] [Thread-126367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:13:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:13:12.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:13:12.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:13:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 12, 33), 11.89, 46.63, 0.0, 11.95, 20.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:13:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:12:33
2026-02-11T09:13:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:13:14.493 [DEBUG] [Thread-126368] [transport.py] [_log()] starting thread (client mode): 0xa2df9720
2026-02-11T09:13:14.493 [DEBUG] [Thread-126368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:13:14.513 [DEBUG] [Thread-126368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:13:14.513 [INFO] [Thread-126368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:13:14.516 [DEBUG] [Thread-126368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:13:14.516 [DEBUG] [Thread-126368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:13:14.516 [DEBUG] [Thread-126368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:13:14.516 [DEBUG] [Thread-126368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] client lang: <none>
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] server lang: <none>
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] kex follows: False
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] Compression: none
2026-02-11T09:13:14.517 [DEBUG] [Thread-126368] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:13:14.532 [DEBUG] [Thread-126368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:13:14.532 [DEBUG] [Thread-126368] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:13:14.533 [DEBUG] [Thread-126368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:13:14.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:13:14.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:13:14.535 [DEBUG] [Thread-126368] [transport.py] [_log()] userauth is OK
2026-02-11T09:13:14.535 [DEBUG] [Thread-126368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:13:14.535 [DEBUG] [Thread-126368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:13:14.535 [DEBUG] [Thread-126368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:13:14.535 [DEBUG] [Thread-126368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:13:14.549 [INFO] [Thread-126368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:13:14.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:13:15.118 [DEBUG] [Thread-126368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:13:15.118 [DEBUG] [Thread-126368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:13:15.118 [DEBUG] [Thread-126368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:13:15.159 [DEBUG] [Thread-126368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:13:15.159 [DEBUG] [Thread-126368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:13:15.163 [DEBUG] [Thread-126368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:13:15.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:13:15.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:13:15.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:13:15.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:13:15.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:13:15.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:13:15.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:13:15.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:13:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:13:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.300487 -999.00  +20.20  17.83     52  +10.30 1 2 1 1 1   888    0 13.72 148.83 ----- 16.8 17.8 278.8 22.9 27.2 -24.6 26.5 -21.9 24.4 -21.4 25.1 -22.2
2026-02-11T09:13:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:13:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:13:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.300487
2026-02-11T09:13:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:13:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:13:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:13:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:13:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:13:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:12:33', tmtdew=11.89, humidity=46.63, cloud=0.0, wind=11.95, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:12:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:13:15.187 [DEBUG] [Thread-126368] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:13:15.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:13:15.282 [DEBUG] [Thread-126371] [transport.py] [_log()] starting thread (client mode): 0xa2d02d70
2026-02-11T09:13:15.283 [DEBUG] [Thread-126371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:13:15.297 [DEBUG] [Thread-126371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:13:15.298 [INFO] [Thread-126371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:13:15.305 [DEBUG] [Thread-126371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:13:15.306 [DEBUG] [Thread-126371] [transport.py] [_log()] client lang: <none>
2026-02-11T09:13:15.307 [DEBUG] [Thread-126371] [transport.py] [_log()] server lang: <none>
2026-02-11T09:13:15.307 [DEBUG] [Thread-126371] [transport.py] [_log()] kex follows: False
2026-02-11T09:13:15.307 [DEBUG] [Thread-126371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:13:15.307 [DEBUG] [Thread-126371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:13:15.307 [DEBUG] [Thread-126371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:13:15.307 [DEBUG] [Thread-126371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:13:15.307 [DEBUG] [Thread-126371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:13:15.308 [DEBUG] [Thread-126371] [transport.py] [_log()] Compression: none
2026-02-11T09:13:15.308 [DEBUG] [Thread-126371] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:13:15.364 [DEBUG] [Thread-126371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:13:15.365 [DEBUG] [Thread-126371] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:13:15.365 [DEBUG] [Thread-126371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:13:15.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:13:15.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:13:15.423 [DEBUG] [Thread-126371] [transport.py] [_log()] userauth is OK
2026-02-11T09:13:15.424 [DEBUG] [Thread-126371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:13:15.424 [DEBUG] [Thread-126371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:13:15.424 [DEBUG] [Thread-126371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:13:15.424 [DEBUG] [Thread-126371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:13:15.449 [INFO] [Thread-126371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:13:15.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:13:15.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:13:16.288 [DEBUG] [Thread-126371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:13:16.289 [DEBUG] [Thread-126371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:13:16.336 [DEBUG] [Thread-126371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:13:16.336 [DEBUG] [Thread-126371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:13:16.353 [DEBUG] [Thread-126371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:13:16.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:13:16.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:13:16.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:13:16.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:13:16.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:13:16.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:13:16.389 [DEBUG] [Thread-126371] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:13:22.100 [DEBUG] [Thread-126373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:13:37.153 [DEBUG] [Thread-126374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:13:40.099 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:13:40.101 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:13:46.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:13:46.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:13:46.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:13:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 13, 8), 11.99, 46.35, 0.0, 11.77, 20.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:13:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:13:08
2026-02-11T09:13:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:13:49.223 [DEBUG] [Thread-126375] [transport.py] [_log()] starting thread (client mode): 0xa2d02e30
2026-02-11T09:13:49.223 [DEBUG] [Thread-126375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:13:49.244 [DEBUG] [Thread-126375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:13:49.244 [INFO] [Thread-126375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] client lang: <none>
2026-02-11T09:13:49.247 [DEBUG] [Thread-126375] [transport.py] [_log()] server lang: <none>
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] kex follows: False
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] Compression: none
2026-02-11T09:13:49.248 [DEBUG] [Thread-126375] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:13:49.264 [DEBUG] [Thread-126375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:13:49.264 [DEBUG] [Thread-126375] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:13:49.265 [DEBUG] [Thread-126375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:13:49.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:13:49.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:13:49.309 [DEBUG] [Thread-126375] [transport.py] [_log()] userauth is OK
2026-02-11T09:13:49.309 [DEBUG] [Thread-126375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:13:49.310 [DEBUG] [Thread-126375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:13:49.310 [DEBUG] [Thread-126375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:13:49.310 [DEBUG] [Thread-126375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:13:49.333 [INFO] [Thread-126375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:13:49.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:13:49.960 [DEBUG] [Thread-126375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:13:49.960 [DEBUG] [Thread-126375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:13:49.960 [DEBUG] [Thread-126375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:13:50.000 [DEBUG] [Thread-126375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:13:50.001 [DEBUG] [Thread-126375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:13:50.004 [DEBUG] [Thread-126375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:13:50.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:13:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:13:50.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:13:50.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:13:50.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:13:50.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:13:50.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:13:50.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:13:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:13:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.300834 -999.00  +20.20  11.71     53  +10.40 1 2 1 1 1   888    0 13.45 130.14 ----- 9.7 11.7 269.6 15.7 27.2 -24.1 26.6 -21.7 24.3 -20.2 25.1 -21.3
2026-02-11T09:13:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:13:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:13:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.300834
2026-02-11T09:13:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:13:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:13:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:13:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:13:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:13:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:13:08', tmtdew=11.99, humidity=46.35, cloud=0.0, wind=11.77, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:13:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:13:50.028 [DEBUG] [Thread-126375] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:13:50.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:13:50.128 [DEBUG] [Thread-126378] [transport.py] [_log()] starting thread (client mode): 0xa2dfb310
2026-02-11T09:13:50.129 [DEBUG] [Thread-126378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:13:50.143 [DEBUG] [Thread-126378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:13:50.143 [INFO] [Thread-126378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:13:50.150 [DEBUG] [Thread-126378] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:13:50.150 [DEBUG] [Thread-126378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] client lang: <none>
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] server lang: <none>
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] kex follows: False
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] Compression: none
2026-02-11T09:13:50.151 [DEBUG] [Thread-126378] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:13:50.211 [DEBUG] [Thread-126378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:13:50.211 [DEBUG] [Thread-126378] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:13:50.212 [DEBUG] [Thread-126378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:13:50.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:13:50.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:13:50.267 [DEBUG] [Thread-126378] [transport.py] [_log()] userauth is OK
2026-02-11T09:13:50.268 [DEBUG] [Thread-126378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:13:50.268 [DEBUG] [Thread-126378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:13:50.268 [DEBUG] [Thread-126378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:13:50.268 [DEBUG] [Thread-126378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:13:50.291 [INFO] [Thread-126378] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:13:50.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:13:50.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:13:51.111 [DEBUG] [Thread-126378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:13:51.112 [DEBUG] [Thread-126378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:13:51.161 [DEBUG] [Thread-126378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:13:51.161 [DEBUG] [Thread-126378] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:13:51.170 [DEBUG] [Thread-126378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:13:51.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:13:51.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:13: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') -> 00000000
2026-02-11T09:13:51.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:13:51.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:13:51.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:13:51.203 [DEBUG] [Thread-126378] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:13:52.190 [DEBUG] [Thread-126380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:05.248 [DEBUG] [Thread-126381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:07.254 [DEBUG] [Thread-126382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:14:21.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:14:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:14:22.296 [DEBUG] [Thread-126383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 13, 43), 11.84, 46.68, 0.0, 11.33, 20.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:14:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:13:43
2026-02-11T09:14:23.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:14:23.957 [DEBUG] [Thread-126384] [transport.py] [_log()] starting thread (client mode): 0xa2dfb970
2026-02-11T09:14:23.958 [DEBUG] [Thread-126384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:14:23.978 [DEBUG] [Thread-126384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:14:23.978 [INFO] [Thread-126384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] client lang: <none>
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] server lang: <none>
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] kex follows: False
2026-02-11T09:14:23.981 [DEBUG] [Thread-126384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:14:23.982 [DEBUG] [Thread-126384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:14:23.982 [DEBUG] [Thread-126384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:14:23.982 [DEBUG] [Thread-126384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:14:23.982 [DEBUG] [Thread-126384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:14:23.982 [DEBUG] [Thread-126384] [transport.py] [_log()] Compression: none
2026-02-11T09:14:23.982 [DEBUG] [Thread-126384] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:14:24.000 [DEBUG] [Thread-126384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:14:24.001 [DEBUG] [Thread-126384] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:14:24.002 [DEBUG] [Thread-126384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:14:24.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:14:24.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:14:24.004 [DEBUG] [Thread-126384] [transport.py] [_log()] userauth is OK
2026-02-11T09:14:24.004 [DEBUG] [Thread-126384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:14:24.004 [DEBUG] [Thread-126384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:14:24.004 [DEBUG] [Thread-126384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:14:24.004 [DEBUG] [Thread-126384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:14:24.028 [INFO] [Thread-126384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:14:24.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:14:24.657 [DEBUG] [Thread-126384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:14:24.658 [DEBUG] [Thread-126384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:14:24.658 [DEBUG] [Thread-126384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:14:24.698 [DEBUG] [Thread-126384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:14:24.699 [DEBUG] [Thread-126384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:14:24.702 [DEBUG] [Thread-126384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:14:24.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:14:24.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:14:24.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:14:24.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:14:24.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:14:24.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:14:24.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:14:24.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:14:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:14:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.301528 -999.00  +20.10   9.09     52  +10.10 1 2 1 1 1   888    0 13.17 118.30 ----- 9.7 9.1 289.4 16.1 27.3 -23.4 26.6 -21.0 24.3 -21.8 25.1 -21.7
2026-02-11T09:14:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:14:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:14:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.301528
2026-02-11T09:14:24.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:14:24.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:14:24.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:14:24.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:14:24.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:14:24.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:13:43', tmtdew=11.84, humidity=46.68, cloud=0.0, wind=11.33, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:14:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:14:24.729 [DEBUG] [Thread-126384] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:14:24.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:14:24.829 [DEBUG] [Thread-126387] [transport.py] [_log()] starting thread (client mode): 0xa81d5db0
2026-02-11T09:14:24.829 [DEBUG] [Thread-126387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:14:24.843 [DEBUG] [Thread-126387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:14:24.843 [INFO] [Thread-126387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:14:24.851 [DEBUG] [Thread-126387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:14:24.851 [DEBUG] [Thread-126387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:14:24.851 [DEBUG] [Thread-126387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:14:24.851 [DEBUG] [Thread-126387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:24.851 [DEBUG] [Thread-126387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] client lang: <none>
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] server lang: <none>
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] kex follows: False
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] Compression: none
2026-02-11T09:14:24.852 [DEBUG] [Thread-126387] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:14:24.912 [DEBUG] [Thread-126387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:14:24.912 [DEBUG] [Thread-126387] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:14:24.913 [DEBUG] [Thread-126387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:14:24.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:14:24.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:14:24.970 [DEBUG] [Thread-126387] [transport.py] [_log()] userauth is OK
2026-02-11T09:14:24.970 [DEBUG] [Thread-126387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:14:24.971 [DEBUG] [Thread-126387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:14:24.971 [DEBUG] [Thread-126387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:14:24.971 [DEBUG] [Thread-126387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:14:24.992 [INFO] [Thread-126387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:14:24.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:14:24.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:14:25.810 [DEBUG] [Thread-126387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:14:25.810 [DEBUG] [Thread-126387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:14:25.859 [DEBUG] [Thread-126387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:14:25.860 [DEBUG] [Thread-126387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:14:25.868 [DEBUG] [Thread-126387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:14:25.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:14:25.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:14:25.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
2026-02-11T09:14:25.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:14:25.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:14:25.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:14:25.903 [DEBUG] [Thread-126387] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:14:37.332 [DEBUG] [Thread-126389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:40.241 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:40.243 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:52.392 [DEBUG] [Thread-126390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:14:55.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:14:55.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:14:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:14:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 14, 19), 11.83, 46.67, 0.0, 11.03, 20.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:14:58.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:14:19
2026-02-11T09:14:58.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:14:58.853 [DEBUG] [Thread-126391] [transport.py] [_log()] starting thread (client mode): 0xa2d55b40
2026-02-11T09:14:58.854 [DEBUG] [Thread-126391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:14:58.873 [DEBUG] [Thread-126391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:14:58.874 [INFO] [Thread-126391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:58.877 [DEBUG] [Thread-126391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] client lang: <none>
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] server lang: <none>
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] kex follows: False
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] Compression: none
2026-02-11T09:14:58.878 [DEBUG] [Thread-126391] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:14:58.895 [DEBUG] [Thread-126391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:14:58.895 [DEBUG] [Thread-126391] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:14:58.896 [DEBUG] [Thread-126391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:14:58.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:14:58.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:14:58.898 [DEBUG] [Thread-126391] [transport.py] [_log()] userauth is OK
2026-02-11T09:14:58.898 [DEBUG] [Thread-126391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:14:58.898 [DEBUG] [Thread-126391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:14:58.898 [DEBUG] [Thread-126391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:14:58.899 [DEBUG] [Thread-126391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:14:58.924 [INFO] [Thread-126391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:14:58.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:14:59.569 [DEBUG] [Thread-126391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:14:59.569 [DEBUG] [Thread-126391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:14:59.569 [DEBUG] [Thread-126391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:14:59.609 [DEBUG] [Thread-126391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:14:59.610 [DEBUG] [Thread-126391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:14:59.613 [DEBUG] [Thread-126391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:14:59.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:14:59.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:14:59.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:14:59.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:14:59.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:14:59.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:14:59.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:14:59.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:14:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:14:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.301876 -999.00  +20.10  13.90     52  +10.20 1 2 1 1 1   888    0 12.75 103.04 ----- 9.5 13.9 270.4 16.9 27.3 -24.0 26.6 -21.9 24.4 -21.1 25.1 -21.4
2026-02-11T09:14:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:14:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:14:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.301876
2026-02-11T09:14:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:14:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:14:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:14:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:14:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:14:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:14:19', tmtdew=11.83, humidity=46.67, cloud=0.0, wind=11.03, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:14:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:14:59.640 [DEBUG] [Thread-126391] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:14:59.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:14:59.734 [DEBUG] [Thread-126394] [transport.py] [_log()] starting thread (client mode): 0xa2dfb040
2026-02-11T09:14:59.734 [DEBUG] [Thread-126394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:14:59.749 [DEBUG] [Thread-126394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:14:59.749 [INFO] [Thread-126394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] client lang: <none>
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] server lang: <none>
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] kex follows: False
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:14:59.757 [DEBUG] [Thread-126394] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:14:59.758 [DEBUG] [Thread-126394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:14:59.758 [DEBUG] [Thread-126394] [transport.py] [_log()] Compression: none
2026-02-11T09:14:59.758 [DEBUG] [Thread-126394] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:14:59.819 [DEBUG] [Thread-126394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:14:59.819 [DEBUG] [Thread-126394] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:14:59.820 [DEBUG] [Thread-126394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:14:59.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:14:59.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:14:59.877 [DEBUG] [Thread-126394] [transport.py] [_log()] userauth is OK
2026-02-11T09:14:59.877 [DEBUG] [Thread-126394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:14:59.877 [DEBUG] [Thread-126394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:14:59.877 [DEBUG] [Thread-126394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:14:59.877 [DEBUG] [Thread-126394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:14:59.896 [INFO] [Thread-126394] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:14:59.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:14:59.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:15:00.755 [DEBUG] [Thread-126394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:15:00.755 [DEBUG] [Thread-126394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:15:00.803 [DEBUG] [Thread-126394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:15:00.804 [DEBUG] [Thread-126394] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:15:00.813 [DEBUG] [Thread-126394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:15:00.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:15:00.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')
2026-02-11T09:15:00.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:15:00.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:15:00.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:15:00.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:15:00.850 [DEBUG] [Thread-126394] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:15:05.310 [DEBUG] [Thread-126396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:15:07.429 [DEBUG] [Thread-126397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:15:22.491 [DEBUG] [Thread-126398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:15:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:15:30.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:15:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:15:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 14, 55), 11.89, 46.46, 0.0, 11.89, 20.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:15:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:14:55
2026-02-11T09:15:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:15:33.244 [DEBUG] [Thread-126399] [transport.py] [_log()] starting thread (client mode): 0xa2d55930
2026-02-11T09:15:33.244 [DEBUG] [Thread-126399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:15:33.264 [DEBUG] [Thread-126399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:15:33.264 [INFO] [Thread-126399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] client lang: <none>
2026-02-11T09:15:33.265 [DEBUG] [Thread-126399] [transport.py] [_log()] server lang: <none>
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] kex follows: False
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] Compression: none
2026-02-11T09:15:33.266 [DEBUG] [Thread-126399] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:15:33.274 [DEBUG] [Thread-126399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:15:33.274 [DEBUG] [Thread-126399] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:15:33.274 [DEBUG] [Thread-126399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:15:33.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:15:33.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:15:33.276 [DEBUG] [Thread-126399] [transport.py] [_log()] userauth is OK
2026-02-11T09:15:33.276 [DEBUG] [Thread-126399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:15:33.276 [DEBUG] [Thread-126399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:15:33.276 [DEBUG] [Thread-126399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:15:33.276 [DEBUG] [Thread-126399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:15:33.293 [INFO] [Thread-126399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:15:33.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:15:33.893 [DEBUG] [Thread-126399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:15:33.893 [DEBUG] [Thread-126399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:15:33.894 [DEBUG] [Thread-126399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:15:33.934 [DEBUG] [Thread-126399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:15:33.934 [DEBUG] [Thread-126399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:15:33.938 [DEBUG] [Thread-126399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:15:33.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:15:33.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:15:33.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:15:33.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:15:33.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:15:33.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:15:33.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:15:33.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:15:33.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:15:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.302223 -999.00  +20.20  11.35     52  +10.20 1 2 1 1 1   888    0 12.47 95.58 ----- 11.4 11.3 286.8 12.3 27.5 -22.9 26.6 -20.8 24.4 -20.9 25.1 -21.4
2026-02-11T09:15:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:15:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:15:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.302223
2026-02-11T09:15:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:15:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:15:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:15:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:15:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:15:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:14:55', tmtdew=11.89, humidity=46.46, cloud=0.0, wind=11.89, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:15:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:15:33.965 [DEBUG] [Thread-126399] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:15:34.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:15:34.066 [DEBUG] [Thread-126402] [transport.py] [_log()] starting thread (client mode): 0xa2dfa050
2026-02-11T09:15:34.066 [DEBUG] [Thread-126402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:15:34.081 [DEBUG] [Thread-126402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:15:34.081 [INFO] [Thread-126402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:15:34.091 [DEBUG] [Thread-126402] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:15:34.091 [DEBUG] [Thread-126402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:15:34.091 [DEBUG] [Thread-126402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:15:34.091 [DEBUG] [Thread-126402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:15:34.091 [DEBUG] [Thread-126402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:15:34.091 [DEBUG] [Thread-126402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] client lang: <none>
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] server lang: <none>
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] kex follows: False
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] Compression: none
2026-02-11T09:15:34.092 [DEBUG] [Thread-126402] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:15:34.154 [DEBUG] [Thread-126402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:15:34.154 [DEBUG] [Thread-126402] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:15:34.155 [DEBUG] [Thread-126402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:15:34.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:15:34.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:15:34.214 [DEBUG] [Thread-126402] [transport.py] [_log()] userauth is OK
2026-02-11T09:15:34.214 [DEBUG] [Thread-126402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:15:34.214 [DEBUG] [Thread-126402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:15:34.214 [DEBUG] [Thread-126402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:15:34.215 [DEBUG] [Thread-126402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:15:34.234 [INFO] [Thread-126402] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:15:34.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:15:34.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:15:35.047 [DEBUG] [Thread-126402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:15:35.047 [DEBUG] [Thread-126402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:15:35.096 [DEBUG] [Thread-126402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:15:35.096 [DEBUG] [Thread-126402] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:15:35.106 [DEBUG] [Thread-126402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:15:35.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:15:35.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:15:35.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:15:35.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:15:35.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:15:35.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:15:35.143 [DEBUG] [Thread-126402] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:15:37.527 [DEBUG] [Thread-126404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:15:40.384 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:15:40.385 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:15:52.578 [DEBUG] [Thread-126405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:16:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:16:05.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:16:05.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:16:05.358 [DEBUG] [Thread-126406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:16:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 15, 31), 12.07, 45.97, 0.0, 12.97, 20.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:16:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:15:31
2026-02-11T09:16:07.615 [DEBUG] [Thread-126407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:16:07.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:16:07.792 [DEBUG] [Thread-126408] [transport.py] [_log()] starting thread (client mode): 0xa57c23e0
2026-02-11T09:16:07.792 [DEBUG] [Thread-126408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:16:07.813 [DEBUG] [Thread-126408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:16:07.813 [INFO] [Thread-126408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:16:07.815 [DEBUG] [Thread-126408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] client lang: <none>
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] server lang: <none>
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] kex follows: False
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] Compression: none
2026-02-11T09:16:07.816 [DEBUG] [Thread-126408] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:16:07.834 [DEBUG] [Thread-126408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:16:07.835 [DEBUG] [Thread-126408] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:16:07.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:16:07.836 [DEBUG] [Thread-126408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:16:07.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:16:07.838 [DEBUG] [Thread-126408] [transport.py] [_log()] userauth is OK
2026-02-11T09:16:07.838 [DEBUG] [Thread-126408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:16:07.838 [DEBUG] [Thread-126408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:16:07.838 [DEBUG] [Thread-126408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:16:07.838 [DEBUG] [Thread-126408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:16:07.849 [INFO] [Thread-126408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:16:07.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:16:08.456 [DEBUG] [Thread-126408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:16:08.456 [DEBUG] [Thread-126408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:16:08.457 [DEBUG] [Thread-126408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:16:08.498 [DEBUG] [Thread-126408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:16:08.498 [DEBUG] [Thread-126408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:16:08.501 [DEBUG] [Thread-126408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:16:08.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:16:08.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:16:08.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:16:08.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:16:08.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:16:08.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:16:08.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:16:08.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:16:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:16:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.302570 -999.00  +20.40  13.93     52  +10.40 1 2 1 1 1   888    0 12.31 91.14 ----- 14.4 13.9 286.2 16.1 27.6 -23.9 26.7 -22.1 24.5 -19.9 25.2 -21.1
2026-02-11T09:16:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:16:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:16:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.302570
2026-02-11T09:16:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:16:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:16:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:16:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:16:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:16:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:15:31', tmtdew=12.07, humidity=45.97, cloud=0.0, wind=12.97, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:15:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:16:08.526 [DEBUG] [Thread-126408] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:16:08.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:16:08.617 [DEBUG] [Thread-126411] [transport.py] [_log()] starting thread (client mode): 0xa57e0b50
2026-02-11T09:16:08.617 [DEBUG] [Thread-126411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:16:08.631 [DEBUG] [Thread-126411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:16:08.631 [INFO] [Thread-126411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] client lang: <none>
2026-02-11T09:16:08.639 [DEBUG] [Thread-126411] [transport.py] [_log()] server lang: <none>
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] kex follows: False
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] Compression: none
2026-02-11T09:16:08.640 [DEBUG] [Thread-126411] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:16:08.695 [DEBUG] [Thread-126411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:16:08.696 [DEBUG] [Thread-126411] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:16:08.696 [DEBUG] [Thread-126411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:16:08.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:16:08.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:16:08.752 [DEBUG] [Thread-126411] [transport.py] [_log()] userauth is OK
2026-02-11T09:16:08.752 [DEBUG] [Thread-126411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:16:08.752 [DEBUG] [Thread-126411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:16:08.752 [DEBUG] [Thread-126411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:16:08.752 [DEBUG] [Thread-126411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:16:08.770 [INFO] [Thread-126411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:16:08.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:16:08.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:16:09.578 [DEBUG] [Thread-126411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:16:09.579 [DEBUG] [Thread-126411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:16:09.626 [DEBUG] [Thread-126411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:16:09.627 [DEBUG] [Thread-126411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:16:09.636 [DEBUG] [Thread-126411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:16:09.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:16:09.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:16:09.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:16:09.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:16:09.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:16:09.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:16:09.673 [DEBUG] [Thread-126411] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:16:22.658 [DEBUG] [Thread-126413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:16:37.714 [DEBUG] [Thread-126414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:16:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:16:39.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:16:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:16:40.526 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:16:40.527 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:16:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 16, 6), 12.21, 45.54, 0.0, 9.51, 20.67, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:16:41.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:16:06
2026-02-11T09:16:41.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:16:42.047 [DEBUG] [Thread-126415] [transport.py] [_log()] starting thread (client mode): 0xa2dfa050
2026-02-11T09:16:42.048 [DEBUG] [Thread-126415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:16:42.067 [DEBUG] [Thread-126415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:16:42.067 [INFO] [Thread-126415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:16:42.070 [DEBUG] [Thread-126415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:16:42.070 [DEBUG] [Thread-126415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:16:42.070 [DEBUG] [Thread-126415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:16:42.070 [DEBUG] [Thread-126415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:42.070 [DEBUG] [Thread-126415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:42.070 [DEBUG] [Thread-126415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:42.070 [DEBUG] [Thread-126415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] client lang: <none>
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] server lang: <none>
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] kex follows: False
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] Compression: none
2026-02-11T09:16:42.071 [DEBUG] [Thread-126415] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:16:42.088 [DEBUG] [Thread-126415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:16:42.089 [DEBUG] [Thread-126415] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:16:42.089 [DEBUG] [Thread-126415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:16:42.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:16:42.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:16:42.091 [DEBUG] [Thread-126415] [transport.py] [_log()] userauth is OK
2026-02-11T09:16:42.091 [DEBUG] [Thread-126415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:16:42.091 [DEBUG] [Thread-126415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:16:42.092 [DEBUG] [Thread-126415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:16:42.092 [DEBUG] [Thread-126415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:16:42.112 [INFO] [Thread-126415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:16:42.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:16:42.709 [DEBUG] [Thread-126415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:16:42.709 [DEBUG] [Thread-126415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:16:42.710 [DEBUG] [Thread-126415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:16:42.750 [DEBUG] [Thread-126415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:16:42.751 [DEBUG] [Thread-126415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:16:42.753 [DEBUG] [Thread-126415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:16:42.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:16:42.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:16:42.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:16:42.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:16:42.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:16:42.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:16:42.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:16:42.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:16:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:16:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.302917 -999.00  +20.40  11.61     52  +10.30 1 2 1 1 1   888    0 12.75 90.86 ----- 12.7 11.6 281.6 16.8 27.5 -23.3 26.7 -21.1 24.6 -20.9 25.2 -21.4
2026-02-11T09:16:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:16:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:16:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.302917
2026-02-11T09:16:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:16:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:16:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:16:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:16:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:16:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:16:06', tmtdew=12.21, humidity=45.54, cloud=0.0, wind=9.51, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:16:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:16:42.780 [DEBUG] [Thread-126415] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:16:42.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:16:42.873 [DEBUG] [Thread-126418] [transport.py] [_log()] starting thread (client mode): 0xa57e2b30
2026-02-11T09:16:42.873 [DEBUG] [Thread-126418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:16:42.889 [DEBUG] [Thread-126418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:16:42.889 [INFO] [Thread-126418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] client lang: <none>
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] server lang: <none>
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] kex follows: False
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] Compression: none
2026-02-11T09:16:42.896 [DEBUG] [Thread-126418] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:16:42.955 [DEBUG] [Thread-126418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:16:42.955 [DEBUG] [Thread-126418] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:16:42.956 [DEBUG] [Thread-126418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:16:42.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:16:42.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:16:43.011 [DEBUG] [Thread-126418] [transport.py] [_log()] userauth is OK
2026-02-11T09:16:43.011 [DEBUG] [Thread-126418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:16:43.012 [DEBUG] [Thread-126418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:16:43.012 [DEBUG] [Thread-126418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:16:43.012 [DEBUG] [Thread-126418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:16:43.035 [INFO] [Thread-126418] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:16:43.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:16:43.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:16:43.874 [DEBUG] [Thread-126418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:16:43.875 [DEBUG] [Thread-126418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:16:43.922 [DEBUG] [Thread-126418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:16:43.922 [DEBUG] [Thread-126418] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:16:43.931 [DEBUG] [Thread-126418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:16:43.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:16:43.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:16:43.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:16:43.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:16:43.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:16:43.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:16:43.966 [DEBUG] [Thread-126418] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:16:52.749 [DEBUG] [Thread-126420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:05.413 [DEBUG] [Thread-126421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:07.812 [DEBUG] [Thread-126422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:17:13.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:17:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:17:15.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 16, 42), 12.49, 44.77, 0.0, 9.88, 21.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:17:15.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:16:42
2026-02-11T09:17:16.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:17:16.504 [DEBUG] [Thread-126423] [transport.py] [_log()] starting thread (client mode): 0xa57e0340
2026-02-11T09:17:16.504 [DEBUG] [Thread-126423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:17:16.524 [DEBUG] [Thread-126423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:17:16.524 [INFO] [Thread-126423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] client lang: <none>
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] server lang: <none>
2026-02-11T09:17:16.527 [DEBUG] [Thread-126423] [transport.py] [_log()] kex follows: False
2026-02-11T09:17:16.528 [DEBUG] [Thread-126423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:17:16.528 [DEBUG] [Thread-126423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:17:16.528 [DEBUG] [Thread-126423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:17:16.528 [DEBUG] [Thread-126423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:17:16.528 [DEBUG] [Thread-126423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:17:16.528 [DEBUG] [Thread-126423] [transport.py] [_log()] Compression: none
2026-02-11T09:17:16.528 [DEBUG] [Thread-126423] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:17:16.544 [DEBUG] [Thread-126423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:17:16.545 [DEBUG] [Thread-126423] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:17:16.545 [DEBUG] [Thread-126423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:17:16.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:17:16.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:17:16.548 [DEBUG] [Thread-126423] [transport.py] [_log()] userauth is OK
2026-02-11T09:17:16.548 [DEBUG] [Thread-126423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:17:16.548 [DEBUG] [Thread-126423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:17:16.548 [DEBUG] [Thread-126423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:17:16.548 [DEBUG] [Thread-126423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:17:16.573 [INFO] [Thread-126423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:17:16.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:17:17.206 [DEBUG] [Thread-126423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:17:17.206 [DEBUG] [Thread-126423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:17:17.207 [DEBUG] [Thread-126423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:17:17.247 [DEBUG] [Thread-126423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:17:17.248 [DEBUG] [Thread-126423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:17:17.251 [DEBUG] [Thread-126423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:17:17.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:17:17.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:17:17.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:17:17.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:17:17.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:17:17.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:17:17.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:17:17.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:17:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:17:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.303264 -999.00  +20.30  11.99     52  +10.10 1 2 1 1 1   888    0 12.27 86.10 ----- 11.9 12.0 276.8 16.8 27.4 -24.3 26.7 -21.4 24.6 -21.7 25.3 -22.7
2026-02-11T09:17:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:17:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:17:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.303264
2026-02-11T09:17:17.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:17:17.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:17:17.277 [DEBUG] [Thread-126423] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:17:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:17:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:17:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:17:17.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:16:42', tmtdew=12.49, humidity=44.77, cloud=0.0, wind=9.88, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:16:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:17:17.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:17:17.371 [DEBUG] [Thread-126426] [transport.py] [_log()] starting thread (client mode): 0xa2d57d60
2026-02-11T09:17:17.371 [DEBUG] [Thread-126426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:17:17.386 [DEBUG] [Thread-126426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:17:17.386 [INFO] [Thread-126426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] client lang: <none>
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] server lang: <none>
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] kex follows: False
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:17:17.394 [DEBUG] [Thread-126426] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:17:17.395 [DEBUG] [Thread-126426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:17:17.395 [DEBUG] [Thread-126426] [transport.py] [_log()] Compression: none
2026-02-11T09:17:17.395 [DEBUG] [Thread-126426] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:17:17.454 [DEBUG] [Thread-126426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:17:17.455 [DEBUG] [Thread-126426] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:17:17.455 [DEBUG] [Thread-126426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:17:17.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:17:17.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:17:17.512 [DEBUG] [Thread-126426] [transport.py] [_log()] userauth is OK
2026-02-11T09:17:17.512 [DEBUG] [Thread-126426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:17:17.512 [DEBUG] [Thread-126426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:17:17.512 [DEBUG] [Thread-126426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:17:17.513 [DEBUG] [Thread-126426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:17:17.531 [INFO] [Thread-126426] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:17:17.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:17:17.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:17:18.337 [DEBUG] [Thread-126426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:17:18.337 [DEBUG] [Thread-126426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:17:18.388 [DEBUG] [Thread-126426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:17:18.388 [DEBUG] [Thread-126426] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:17:18.398 [DEBUG] [Thread-126426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:17:18.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:17:18.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:17:18.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:17:18.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:17:18.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:17:18.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:17:18.447 [DEBUG] [Thread-126426] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:17:22.851 [DEBUG] [Thread-126428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:37.908 [DEBUG] [Thread-126429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:40.668 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:40.670 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:17:48.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:17:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:17:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 17, 18), 12.1, 45.73, 0.0, 11.89, 20.67, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:17:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:17:18
2026-02-11T09:17:51.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:17:51.281 [DEBUG] [Thread-126430] [transport.py] [_log()] starting thread (client mode): 0xa2d574f0
2026-02-11T09:17:51.281 [DEBUG] [Thread-126430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:17:51.301 [DEBUG] [Thread-126430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:17:51.301 [INFO] [Thread-126430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:17:51.303 [DEBUG] [Thread-126430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] client lang: <none>
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] server lang: <none>
2026-02-11T09:17:51.304 [DEBUG] [Thread-126430] [transport.py] [_log()] kex follows: False
2026-02-11T09:17:51.305 [DEBUG] [Thread-126430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:17:51.305 [DEBUG] [Thread-126430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:17:51.305 [DEBUG] [Thread-126430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:17:51.305 [DEBUG] [Thread-126430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:17:51.305 [DEBUG] [Thread-126430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:17:51.305 [DEBUG] [Thread-126430] [transport.py] [_log()] Compression: none
2026-02-11T09:17:51.305 [DEBUG] [Thread-126430] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:17:51.315 [DEBUG] [Thread-126430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:17:51.316 [DEBUG] [Thread-126430] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:17:51.317 [DEBUG] [Thread-126430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:17:51.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:17:51.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:17:51.319 [DEBUG] [Thread-126430] [transport.py] [_log()] userauth is OK
2026-02-11T09:17:51.320 [DEBUG] [Thread-126430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:17:51.320 [DEBUG] [Thread-126430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:17:51.320 [DEBUG] [Thread-126430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:17:51.320 [DEBUG] [Thread-126430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:17:51.346 [INFO] [Thread-126430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:17:51.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:17:52.112 [DEBUG] [Thread-126430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:17:52.112 [DEBUG] [Thread-126430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:17:52.112 [DEBUG] [Thread-126430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:17:52.154 [DEBUG] [Thread-126430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:17:52.154 [DEBUG] [Thread-126430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:17:52.157 [DEBUG] [Thread-126430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:17:52.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:17:52.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:17:52.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:17:52.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:17:52.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:17:52.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:17:52.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:17:52.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:17:52.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:17:52.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.303612 -999.00  +20.10  12.63     52  +10.10 1 2 1 1 1   888    0 12.16 77.04 ----- 12.5 12.6 277.6 16.7 27.4 -23.5 26.7 -21.1 24.4 -20.3 25.2 -21.8
2026-02-11T09:17:52.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:17:52.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:17:52.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.303612
2026-02-11T09:17:52.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:17:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:17:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:17:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:17:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:17:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:17:18', tmtdew=12.1, humidity=45.73, cloud=0.0, wind=11.89, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:17:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:17:52.183 [DEBUG] [Thread-126430] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:17:52.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:17:52.285 [DEBUG] [Thread-126433] [transport.py] [_log()] starting thread (client mode): 0xa2d7a980
2026-02-11T09:17:52.285 [DEBUG] [Thread-126433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:17:52.299 [DEBUG] [Thread-126433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:17:52.300 [INFO] [Thread-126433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:17:52.307 [DEBUG] [Thread-126433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:17:52.307 [DEBUG] [Thread-126433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:17:52.307 [DEBUG] [Thread-126433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:17:52.307 [DEBUG] [Thread-126433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:52.307 [DEBUG] [Thread-126433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:17:52.307 [DEBUG] [Thread-126433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] client lang: <none>
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] server lang: <none>
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] kex follows: False
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] Compression: none
2026-02-11T09:17:52.308 [DEBUG] [Thread-126433] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:17:52.367 [DEBUG] [Thread-126433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:17:52.368 [DEBUG] [Thread-126433] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:17:52.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:17:52.369 [DEBUG] [Thread-126433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:17:52.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:17:52.436 [DEBUG] [Thread-126433] [transport.py] [_log()] userauth is OK
2026-02-11T09:17:52.436 [DEBUG] [Thread-126433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:17:52.436 [DEBUG] [Thread-126433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:17:52.436 [DEBUG] [Thread-126433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:17:52.436 [DEBUG] [Thread-126433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:17:52.455 [INFO] [Thread-126433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:17:52.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:17:52.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:17:52.950 [DEBUG] [Thread-126435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:17:53.301 [DEBUG] [Thread-126433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:17:53.301 [DEBUG] [Thread-126433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:17:53.349 [DEBUG] [Thread-126433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:17:53.350 [DEBUG] [Thread-126433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:17:53.359 [DEBUG] [Thread-126433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:17:53.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:17:53.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:17:53.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:17:53.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:17:53.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:17:53.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:17:53.395 [DEBUG] [Thread-126433] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:18:05.464 [DEBUG] [Thread-126436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:18:07.992 [DEBUG] [Thread-126437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:18:23.031 [DEBUG] [Thread-126438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:18:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:18:23.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:18:23.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:18:25.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 17, 53), 12.22, 45.39, 0.0, 12.14, 20.67, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:18:25.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:17:53
2026-02-11T09:18:25.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:18:25.802 [DEBUG] [Thread-126439] [transport.py] [_log()] starting thread (client mode): 0xa81d6710
2026-02-11T09:18:25.803 [DEBUG] [Thread-126439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:18:25.813 [DEBUG] [Thread-126439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:18:25.813 [INFO] [Thread-126439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:18:25.816 [DEBUG] [Thread-126439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:18:25.816 [DEBUG] [Thread-126439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:18:25.816 [DEBUG] [Thread-126439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] client lang: <none>
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] server lang: <none>
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] kex follows: False
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:18:25.817 [DEBUG] [Thread-126439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:18:25.818 [DEBUG] [Thread-126439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:18:25.818 [DEBUG] [Thread-126439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:18:25.818 [DEBUG] [Thread-126439] [transport.py] [_log()] Compression: none
2026-02-11T09:18:25.818 [DEBUG] [Thread-126439] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:18:25.836 [DEBUG] [Thread-126439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:18:25.836 [DEBUG] [Thread-126439] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:18:25.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:18:25.838 [DEBUG] [Thread-126439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:18:25.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:18:25.840 [DEBUG] [Thread-126439] [transport.py] [_log()] userauth is OK
2026-02-11T09:18:25.840 [DEBUG] [Thread-126439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:18:25.840 [DEBUG] [Thread-126439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:18:25.840 [DEBUG] [Thread-126439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:18:25.840 [DEBUG] [Thread-126439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:18:25.860 [INFO] [Thread-126439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:18:25.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:18:26.481 [DEBUG] [Thread-126439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:18:26.482 [DEBUG] [Thread-126439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:18:26.482 [DEBUG] [Thread-126439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:18:26.523 [DEBUG] [Thread-126439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:18:26.524 [DEBUG] [Thread-126439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:18:26.527 [DEBUG] [Thread-126439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:18:26.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:18:26.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:18:26.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:18:26.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:18:26.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:18:26.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:18:26.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:18:26.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:18:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:18:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.303959 -999.00  +20.10  10.48     52  +10.20 1 2 1 1 1   888    0 12.09 76.33 ----- 8.5 10.5 275.2 15.1 27.4 -22.6 26.7 -21.3 24.4 -20.6 25.2 -22.1
2026-02-11T09:18:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:18:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:18:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.303959
2026-02-11T09:18:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:18:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:18:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:18:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:18:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:18:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:17:53', tmtdew=12.22, humidity=45.39, cloud=0.0, wind=12.14, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:17:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:18:26.555 [DEBUG] [Thread-126439] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:18:26.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:18:26.661 [DEBUG] [Thread-126442] [transport.py] [_log()] starting thread (client mode): 0xa2d79ff0
2026-02-11T09:18:26.661 [DEBUG] [Thread-126442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:18:26.675 [DEBUG] [Thread-126442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:18:26.675 [INFO] [Thread-126442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:18:26.683 [DEBUG] [Thread-126442] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:18:26.683 [DEBUG] [Thread-126442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:18:26.683 [DEBUG] [Thread-126442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:18:26.683 [DEBUG] [Thread-126442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:18:26.683 [DEBUG] [Thread-126442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:18:26.683 [DEBUG] [Thread-126442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:18:26.683 [DEBUG] [Thread-126442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] client lang: <none>
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] server lang: <none>
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] kex follows: False
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] Compression: none
2026-02-11T09:18:26.684 [DEBUG] [Thread-126442] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:18:26.744 [DEBUG] [Thread-126442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:18:26.745 [DEBUG] [Thread-126442] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:18:26.745 [DEBUG] [Thread-126442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:18:26.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:18:26.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:18:26.800 [DEBUG] [Thread-126442] [transport.py] [_log()] userauth is OK
2026-02-11T09:18:26.800 [DEBUG] [Thread-126442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:18:26.801 [DEBUG] [Thread-126442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:18:26.801 [DEBUG] [Thread-126442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:18:26.801 [DEBUG] [Thread-126442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:18:26.818 [INFO] [Thread-126442] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:18:26.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:18:26.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:18:27.654 [DEBUG] [Thread-126442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:18:27.654 [DEBUG] [Thread-126442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:18:27.702 [DEBUG] [Thread-126442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:18:27.703 [DEBUG] [Thread-126442] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:18:27.712 [DEBUG] [Thread-126442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:18:27.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:18: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')
2026-02-11T09:18:27.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:18:27.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:18:27.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:18:27.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:18:27.749 [DEBUG] [Thread-126442] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:18:38.068 [DEBUG] [Thread-126444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:18:40.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:18:40.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:18:53.127 [DEBUG] [Thread-126445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:18:57.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:18:57.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:18:57.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:18:59.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 18, 29), 12.23, 45.37, 0.0, 11.51, 20.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:18:59.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:18:29
2026-02-11T09:18:59.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:19:00.044 [DEBUG] [Thread-126446] [transport.py] [_log()] starting thread (client mode): 0xa2d79450
2026-02-11T09:19:00.044 [DEBUG] [Thread-126446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:19:00.055 [DEBUG] [Thread-126446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:19:00.055 [INFO] [Thread-126446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] client lang: <none>
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] server lang: <none>
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] kex follows: False
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] Compression: none
2026-02-11T09:19:00.058 [DEBUG] [Thread-126446] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:19:00.072 [DEBUG] [Thread-126446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:19:00.073 [DEBUG] [Thread-126446] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:19:00.073 [DEBUG] [Thread-126446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:19:00.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:19:00.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:19:00.074 [DEBUG] [Thread-126446] [transport.py] [_log()] userauth is OK
2026-02-11T09:19:00.075 [DEBUG] [Thread-126446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:19:00.075 [DEBUG] [Thread-126446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:19:00.075 [DEBUG] [Thread-126446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:19:00.075 [DEBUG] [Thread-126446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:19:00.095 [INFO] [Thread-126446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:19:00.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:19:00.735 [DEBUG] [Thread-126446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:19:00.735 [DEBUG] [Thread-126446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:19:00.736 [DEBUG] [Thread-126446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:19:00.776 [DEBUG] [Thread-126446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:19:00.777 [DEBUG] [Thread-126446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:19:00.780 [DEBUG] [Thread-126446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:19:00.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:19:00.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:19:00.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:19:00.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:19:00.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:19:00.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:19:00.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:19:00.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:19:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:19:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.304653 -999.00  +20.30   9.18     52  +10.20 1 2 1 1 1   888    0 11.97 68.33 ----- 11.6 9.2 279.6 14.3 27.6 -23.5 26.8 -21.3 24.6 -20.5 25.4 -21.5
2026-02-11T09:19:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:19:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:19:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.304653
2026-02-11T09:19:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:19:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:19:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:19:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:19:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:19:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:18:29', tmtdew=12.23, humidity=45.37, cloud=0.0, wind=11.51, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:18:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:19:00.807 [DEBUG] [Thread-126446] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:19:00.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:19:00.906 [DEBUG] [Thread-126449] [transport.py] [_log()] starting thread (client mode): 0xa2d79e40
2026-02-11T09:19:00.906 [DEBUG] [Thread-126449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:19:00.920 [DEBUG] [Thread-126449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:19:00.920 [INFO] [Thread-126449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:19:00.928 [DEBUG] [Thread-126449] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:19:00.928 [DEBUG] [Thread-126449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:19:00.928 [DEBUG] [Thread-126449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:19:00.928 [DEBUG] [Thread-126449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:00.928 [DEBUG] [Thread-126449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] client lang: <none>
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] server lang: <none>
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] kex follows: False
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] Compression: none
2026-02-11T09:19:00.929 [DEBUG] [Thread-126449] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:19:00.992 [DEBUG] [Thread-126449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:19:00.992 [DEBUG] [Thread-126449] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:19:00.993 [DEBUG] [Thread-126449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:19:00.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:19:00.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:19:01.048 [DEBUG] [Thread-126449] [transport.py] [_log()] userauth is OK
2026-02-11T09:19:01.049 [DEBUG] [Thread-126449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:19:01.049 [DEBUG] [Thread-126449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:19:01.049 [DEBUG] [Thread-126449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:19:01.049 [DEBUG] [Thread-126449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:19:01.071 [INFO] [Thread-126449] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:19:01.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:19:01.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:19:01.906 [DEBUG] [Thread-126449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:19:01.906 [DEBUG] [Thread-126449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:19:01.954 [DEBUG] [Thread-126449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:19:01.955 [DEBUG] [Thread-126449] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:19:01.964 [DEBUG] [Thread-126449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:19:01.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:19:01.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:19:01.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:19:01.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:19:01.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:19:01.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:19:01.998 [DEBUG] [Thread-126449] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:19:05.509 [DEBUG] [Thread-126451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:19:08.164 [DEBUG] [Thread-126452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:19:23.216 [DEBUG] [Thread-126453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:19:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:19:32.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:19:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:19:33.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 19, 5), 12.19, 45.47, 0.0, 11.65, 20.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:19:33.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:19:05
2026-02-11T09:19:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:19:34.442 [DEBUG] [Thread-126454] [transport.py] [_log()] starting thread (client mode): 0xa81d7a90
2026-02-11T09:19:34.442 [DEBUG] [Thread-126454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:19:34.463 [DEBUG] [Thread-126454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:19:34.463 [INFO] [Thread-126454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:19:34.466 [DEBUG] [Thread-126454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:19:34.466 [DEBUG] [Thread-126454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:19:34.466 [DEBUG] [Thread-126454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:19:34.466 [DEBUG] [Thread-126454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:34.466 [DEBUG] [Thread-126454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] client lang: <none>
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] server lang: <none>
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] kex follows: False
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] Compression: none
2026-02-11T09:19:34.467 [DEBUG] [Thread-126454] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:19:34.484 [DEBUG] [Thread-126454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:19:34.484 [DEBUG] [Thread-126454] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:19:34.484 [DEBUG] [Thread-126454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:19:34.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:19:34.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:19:34.486 [DEBUG] [Thread-126454] [transport.py] [_log()] userauth is OK
2026-02-11T09:19:34.486 [DEBUG] [Thread-126454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:19:34.486 [DEBUG] [Thread-126454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:19:34.486 [DEBUG] [Thread-126454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:19:34.486 [DEBUG] [Thread-126454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:19:34.498 [INFO] [Thread-126454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:19:34.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:19:35.139 [DEBUG] [Thread-126454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:19:35.139 [DEBUG] [Thread-126454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:19:35.140 [DEBUG] [Thread-126454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:19:35.180 [DEBUG] [Thread-126454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:19:35.181 [DEBUG] [Thread-126454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:19:35.184 [DEBUG] [Thread-126454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:19:35.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:19:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:19:35.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:19:35.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:19:35.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:19:35.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:19:35.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:19:35.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:19:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:19:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.305001 -999.00  +20.40  13.50     52  +10.30 1 2 1 1 1   888    0 11.88 61.26 ----- 13.3 13.5 271.2 15.7 27.6 -24.1 26.8 -21.7 24.6 -20.7 25.4 -21.4
2026-02-11T09:19:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:19:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:19:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.305001
2026-02-11T09:19:35.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:19:35.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:19:35.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:19:35.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:19:35.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:19:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:19:05', tmtdew=12.19, humidity=45.47, cloud=0.0, wind=11.65, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:19:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:19:35.212 [DEBUG] [Thread-126454] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:19:35.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:19:35.310 [DEBUG] [Thread-126457] [transport.py] [_log()] starting thread (client mode): 0xa57e3160
2026-02-11T09:19:35.310 [DEBUG] [Thread-126457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:19:35.325 [DEBUG] [Thread-126457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:19:35.325 [INFO] [Thread-126457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:19:35.332 [DEBUG] [Thread-126457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] client lang: <none>
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] server lang: <none>
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] kex follows: False
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:19:35.333 [DEBUG] [Thread-126457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:19:35.334 [DEBUG] [Thread-126457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:19:35.334 [DEBUG] [Thread-126457] [transport.py] [_log()] Compression: none
2026-02-11T09:19:35.334 [DEBUG] [Thread-126457] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:19:35.396 [DEBUG] [Thread-126457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:19:35.397 [DEBUG] [Thread-126457] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:19:35.398 [DEBUG] [Thread-126457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:19:35.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:19:35.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:19:35.456 [DEBUG] [Thread-126457] [transport.py] [_log()] userauth is OK
2026-02-11T09:19:35.457 [DEBUG] [Thread-126457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:19:35.457 [DEBUG] [Thread-126457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:19:35.457 [DEBUG] [Thread-126457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:19:35.457 [DEBUG] [Thread-126457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:19:35.476 [INFO] [Thread-126457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:19:35.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:19:35.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:19:36.299 [DEBUG] [Thread-126457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:19:36.299 [DEBUG] [Thread-126457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:19:36.346 [DEBUG] [Thread-126457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:19:36.347 [DEBUG] [Thread-126457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:19:36.356 [DEBUG] [Thread-126457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:19:36.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:19:36.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:19:36.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:19:36.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:19:36.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:19:36.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:19:36.393 [DEBUG] [Thread-126457] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:19:38.252 [DEBUG] [Thread-126459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:19:40.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:19:40.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:19:53.305 [DEBUG] [Thread-126460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:20:05.563 [DEBUG] [Thread-126461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:20:06.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:20:06.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:20:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:20:08.338 [DEBUG] [Thread-126462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:20:08.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 19, 41), 12.61, 44.44, 0.0, 10.06, 21.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:20:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:19:41
2026-02-11T09:20:08.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:20:09.130 [DEBUG] [Thread-126463] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-11T09:20:09.130 [DEBUG] [Thread-126463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:20:09.146 [DEBUG] [Thread-126463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:20:09.146 [INFO] [Thread-126463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:20:09.149 [DEBUG] [Thread-126463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] client lang: <none>
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] server lang: <none>
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] kex follows: False
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] Compression: none
2026-02-11T09:20:09.150 [DEBUG] [Thread-126463] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:20:09.165 [DEBUG] [Thread-126463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:20:09.166 [DEBUG] [Thread-126463] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:20:09.166 [DEBUG] [Thread-126463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:20:09.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:20:09.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:20:09.166 [DEBUG] [Thread-126463] [transport.py] [_log()] userauth is OK
2026-02-11T09:20:09.166 [DEBUG] [Thread-126463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:20:09.166 [DEBUG] [Thread-126463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:20:09.166 [DEBUG] [Thread-126463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:20:09.166 [DEBUG] [Thread-126463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:20:09.184 [INFO] [Thread-126463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:20:09.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:20:10.011 [DEBUG] [Thread-126463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:20:10.012 [DEBUG] [Thread-126463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:20:10.012 [DEBUG] [Thread-126463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:20:10.053 [DEBUG] [Thread-126463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:20:10.053 [DEBUG] [Thread-126463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:20:10.055 [DEBUG] [Thread-126463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:20:10.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:20:10.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:20:10.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:20:10.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:20:10.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:20:10.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:20:10.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:20:10.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.305348 -999.00  +20.40  11.35     52  +10.20 1 2 1 1 1   888    0 11.49 58.80 ----- 10.2 11.3 274.8 17.9 27.6 -22.4 26.8 -21.4 24.7 -20.6 25.4 -22.1
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.305348
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:20:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:20:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:20:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:19:41', tmtdew=12.61, humidity=44.44, cloud=0.0, wind=10.06, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:19:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:20:10.073 [DEBUG] [Thread-126463] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:20:10.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:20:10.171 [DEBUG] [Thread-126466] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-11T09:20:10.171 [DEBUG] [Thread-126466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:20:10.186 [DEBUG] [Thread-126466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:20:10.186 [INFO] [Thread-126466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:20:10.194 [DEBUG] [Thread-126466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:20:10.194 [DEBUG] [Thread-126466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:20:10.194 [DEBUG] [Thread-126466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:20:10.194 [DEBUG] [Thread-126466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] client lang: <none>
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] server lang: <none>
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] kex follows: False
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] Compression: none
2026-02-11T09:20:10.195 [DEBUG] [Thread-126466] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:20:10.251 [DEBUG] [Thread-126466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:20:10.252 [DEBUG] [Thread-126466] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:20:10.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:20:10.252 [DEBUG] [Thread-126466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:20:10.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:20:10.307 [DEBUG] [Thread-126466] [transport.py] [_log()] userauth is OK
2026-02-11T09:20:10.308 [DEBUG] [Thread-126466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:20:10.308 [DEBUG] [Thread-126466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:20:10.308 [DEBUG] [Thread-126466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:20:10.308 [DEBUG] [Thread-126466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:20:10.326 [INFO] [Thread-126466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:20:10.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:20:10.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:20:11.158 [DEBUG] [Thread-126466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:20:11.158 [DEBUG] [Thread-126466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:20:11.206 [DEBUG] [Thread-126466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:20:11.206 [DEBUG] [Thread-126466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:20:11.215 [DEBUG] [Thread-126466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:20:11.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:20:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:20:11.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:20:11.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:20:11.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:20:11.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:20:11.250 [DEBUG] [Thread-126466] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:20:23.372 [DEBUG] [Thread-126468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:20:38.427 [DEBUG] [Thread-126469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:20:41.094 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:20:41.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:20:41.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:20:41.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:20:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:20:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 20, 17), 12.29, 45.27, 0.0, 9.63, 20.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:20:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:20:17
2026-02-11T09:20:43.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:20:43.638 [DEBUG] [Thread-126470] [transport.py] [_log()] starting thread (client mode): 0xa57e08e0
2026-02-11T09:20:43.638 [DEBUG] [Thread-126470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:20:43.661 [DEBUG] [Thread-126470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:20:43.661 [INFO] [Thread-126470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:20:43.662 [DEBUG] [Thread-126470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:20:43.662 [DEBUG] [Thread-126470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] client lang: <none>
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] server lang: <none>
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] kex follows: False
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] Compression: none
2026-02-11T09:20:43.663 [DEBUG] [Thread-126470] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:20:43.676 [DEBUG] [Thread-126470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:20:43.677 [DEBUG] [Thread-126470] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:20:43.677 [DEBUG] [Thread-126470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:20:43.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:20:43.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:20:43.679 [DEBUG] [Thread-126470] [transport.py] [_log()] userauth is OK
2026-02-11T09:20:43.679 [DEBUG] [Thread-126470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:20:43.680 [DEBUG] [Thread-126470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:20:43.680 [DEBUG] [Thread-126470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:20:43.680 [DEBUG] [Thread-126470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:20:43.698 [INFO] [Thread-126470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:20:43.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:20:44.544 [DEBUG] [Thread-126470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:20:44.544 [DEBUG] [Thread-126470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:20:44.545 [DEBUG] [Thread-126470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:20:44.585 [DEBUG] [Thread-126470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:20:44.586 [DEBUG] [Thread-126470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:20:44.589 [DEBUG] [Thread-126470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:20:44.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:20:44.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:20:44.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:20:44.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:20:44.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:20:44.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:20:44.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:20:44.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:20:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:20:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.305695 -999.00  +20.60  12.41     52  +10.40 1 2 1 1 1   888    0 11.55 54.61 ----- 15.7 12.4 298.2 14.8 27.9 -23.3 26.9 -21.4 24.7 -20.0 25.4 -21.0
2026-02-11T09:20:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:20:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:20:44.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.305695
2026-02-11T09:20:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:20:44.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:20:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:20:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:20:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:20:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:20:17', tmtdew=12.29, humidity=45.27, cloud=0.0, wind=9.63, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:20:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:20:44.615 [DEBUG] [Thread-126470] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:20:44.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:20:44.712 [DEBUG] [Thread-126473] [transport.py] [_log()] starting thread (client mode): 0xa57e3160
2026-02-11T09:20:44.712 [DEBUG] [Thread-126473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:20:44.728 [DEBUG] [Thread-126473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:20:44.728 [INFO] [Thread-126473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:20:44.736 [DEBUG] [Thread-126473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:20:44.736 [DEBUG] [Thread-126473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:20:44.736 [DEBUG] [Thread-126473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:20:44.736 [DEBUG] [Thread-126473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:44.736 [DEBUG] [Thread-126473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] client lang: <none>
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] server lang: <none>
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] kex follows: False
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] Compression: none
2026-02-11T09:20:44.737 [DEBUG] [Thread-126473] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:20:44.800 [DEBUG] [Thread-126473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:20:44.800 [DEBUG] [Thread-126473] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:20:44.801 [DEBUG] [Thread-126473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:20:44.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:20:44.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:20:44.866 [DEBUG] [Thread-126473] [transport.py] [_log()] userauth is OK
2026-02-11T09:20:44.867 [DEBUG] [Thread-126473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:20:44.867 [DEBUG] [Thread-126473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:20:44.867 [DEBUG] [Thread-126473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:20:44.867 [DEBUG] [Thread-126473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:20:44.887 [INFO] [Thread-126473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:20:44.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:20:44.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:20:45.723 [DEBUG] [Thread-126473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:20:45.723 [DEBUG] [Thread-126473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:20:45.771 [DEBUG] [Thread-126473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:20:45.772 [DEBUG] [Thread-126473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:20:45.781 [DEBUG] [Thread-126473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:20:45.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:20:45.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:20:45.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:20:45.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:20:45.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:20:45.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:20:45.818 [DEBUG] [Thread-126473] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:20:53.465 [DEBUG] [Thread-126475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:05.608 [DEBUG] [Thread-126476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:08.519 [DEBUG] [Thread-126477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:21:15.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:21:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:21:17.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 20, 52), 12.35, 45.3, 0.0, 12.72, 20.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:21:17.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:20:52
2026-02-11T09:21:17.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:21:18.120 [DEBUG] [Thread-126478] [transport.py] [_log()] starting thread (client mode): 0xa57e1b10
2026-02-11T09:21:18.120 [DEBUG] [Thread-126478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:21:18.140 [DEBUG] [Thread-126478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:21:18.140 [INFO] [Thread-126478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:21:18.143 [DEBUG] [Thread-126478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:21:18.143 [DEBUG] [Thread-126478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:21:18.143 [DEBUG] [Thread-126478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] client lang: <none>
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] server lang: <none>
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] kex follows: False
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] Compression: none
2026-02-11T09:21:18.144 [DEBUG] [Thread-126478] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:21:18.161 [DEBUG] [Thread-126478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:21:18.161 [DEBUG] [Thread-126478] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:21:18.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:21:18.162 [DEBUG] [Thread-126478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:21:18.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:21:18.165 [DEBUG] [Thread-126478] [transport.py] [_log()] userauth is OK
2026-02-11T09:21:18.165 [DEBUG] [Thread-126478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:21:18.165 [DEBUG] [Thread-126478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:21:18.165 [DEBUG] [Thread-126478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:21:18.165 [DEBUG] [Thread-126478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:21:18.189 [INFO] [Thread-126478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:21:18.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:21:18.834 [DEBUG] [Thread-126478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:21:18.834 [DEBUG] [Thread-126478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:21:18.834 [DEBUG] [Thread-126478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:21:18.875 [DEBUG] [Thread-126478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:21:18.876 [DEBUG] [Thread-126478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:21:18.879 [DEBUG] [Thread-126478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:21:18.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:21:18.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:21:18.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:21:18.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:21:18.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:21:18.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:21:18.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:21:18.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:21:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:21:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.306042 -999.00  +20.60  15.79     51  +10.30 1 2 1 1 1   888    0 11.33 49.74 ----- 13.8 15.8 282.8 19.7 27.7 -23.4 26.9 -22.5 24.8 -20.5 25.5 -20.9
2026-02-11T09:21:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:21:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:21:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.306042
2026-02-11T09:21:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:21:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:21:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:21:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:21:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:21:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:20:52', tmtdew=12.35, humidity=45.3, cloud=0.0, wind=12.72, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:20:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:21:18.909 [DEBUG] [Thread-126478] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:21:18.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:21:19.003 [DEBUG] [Thread-126481] [transport.py] [_log()] starting thread (client mode): 0xa2d55b70
2026-02-11T09:21:19.003 [DEBUG] [Thread-126481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:21:19.017 [DEBUG] [Thread-126481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:21:19.017 [INFO] [Thread-126481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:21:19.025 [DEBUG] [Thread-126481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:21:19.025 [DEBUG] [Thread-126481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:21:19.025 [DEBUG] [Thread-126481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:21:19.025 [DEBUG] [Thread-126481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] client lang: <none>
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] server lang: <none>
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] kex follows: False
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:21:19.026 [DEBUG] [Thread-126481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:21:19.027 [DEBUG] [Thread-126481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:21:19.027 [DEBUG] [Thread-126481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:21:19.027 [DEBUG] [Thread-126481] [transport.py] [_log()] Compression: none
2026-02-11T09:21:19.027 [DEBUG] [Thread-126481] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:21:19.084 [DEBUG] [Thread-126481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:21:19.085 [DEBUG] [Thread-126481] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:21:19.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:21:19.086 [DEBUG] [Thread-126481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:21:19.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:21:19.139 [DEBUG] [Thread-126481] [transport.py] [_log()] userauth is OK
2026-02-11T09:21:19.140 [DEBUG] [Thread-126481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:21:19.140 [DEBUG] [Thread-126481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:21:19.140 [DEBUG] [Thread-126481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:21:19.140 [DEBUG] [Thread-126481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:21:19.159 [INFO] [Thread-126481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:21:19.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:21:19.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:21:19.984 [DEBUG] [Thread-126481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:21:19.984 [DEBUG] [Thread-126481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:21:20.032 [DEBUG] [Thread-126481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:21:20.033 [DEBUG] [Thread-126481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:21:20.042 [DEBUG] [Thread-126481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:21:20.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:21:20.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:21:20.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:21:20.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:21:20.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:21:20.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:21:20.093 [DEBUG] [Thread-126481] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:21:23.557 [DEBUG] [Thread-126483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:38.607 [DEBUG] [Thread-126484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:41.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:41.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:50.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:21:50.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:21:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:21:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 21, 28), 12.29, 45.49, 0.0, 10.09, 20.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:21:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:21:28
2026-02-11T09:21:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:21:52.467 [DEBUG] [Thread-126485] [transport.py] [_log()] starting thread (client mode): 0xa2d7b910
2026-02-11T09:21:52.467 [DEBUG] [Thread-126485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:21:52.487 [DEBUG] [Thread-126485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:21:52.487 [INFO] [Thread-126485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:52.491 [DEBUG] [Thread-126485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] client lang: <none>
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] server lang: <none>
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] kex follows: False
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] Compression: none
2026-02-11T09:21:52.492 [DEBUG] [Thread-126485] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:21:52.502 [DEBUG] [Thread-126485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:21:52.503 [DEBUG] [Thread-126485] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:21:52.503 [DEBUG] [Thread-126485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:21:52.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:21:52.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:21:52.545 [DEBUG] [Thread-126485] [transport.py] [_log()] userauth is OK
2026-02-11T09:21:52.545 [DEBUG] [Thread-126485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:21:52.545 [DEBUG] [Thread-126485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:21:52.545 [DEBUG] [Thread-126485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:21:52.545 [DEBUG] [Thread-126485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:21:52.566 [INFO] [Thread-126485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:21:52.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:21:53.220 [DEBUG] [Thread-126485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:21:53.220 [DEBUG] [Thread-126485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:21:53.221 [DEBUG] [Thread-126485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:21:53.261 [DEBUG] [Thread-126485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:21:53.261 [DEBUG] [Thread-126485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:21:53.264 [DEBUG] [Thread-126485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:21:53.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:21:53.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:21:53.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:21:53.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:21:53.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:21:53.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:21:53.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:21:53.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:21:53.294 [DEBUG] [Thread-126485] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:21:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:21:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.306389 -999.00  +20.50   8.57     52  +10.40 1 2 1 1 1   888    0 11.22 46.23 ----- 7.3 8.6 289.8 14.9 27.8 -22.5 27.0 -21.1 24.8 -20.7 25.5 -21.2
2026-02-11T09:21:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:21:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:21:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.306389
2026-02-11T09:21:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:21:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:21:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:21:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:21:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:21:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:21:28', tmtdew=12.29, humidity=45.49, cloud=0.0, wind=10.09, temperature=20.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:21:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:21:53.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:21:53.396 [DEBUG] [Thread-126488] [transport.py] [_log()] starting thread (client mode): 0xa81d7430
2026-02-11T09:21:53.396 [DEBUG] [Thread-126488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:21:53.410 [DEBUG] [Thread-126488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:21:53.411 [INFO] [Thread-126488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] client lang: <none>
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] server lang: <none>
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] kex follows: False
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:21:53.419 [DEBUG] [Thread-126488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:21:53.420 [DEBUG] [Thread-126488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:21:53.420 [DEBUG] [Thread-126488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:21:53.420 [DEBUG] [Thread-126488] [transport.py] [_log()] Compression: none
2026-02-11T09:21:53.420 [DEBUG] [Thread-126488] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:21:53.480 [DEBUG] [Thread-126488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:21:53.481 [DEBUG] [Thread-126488] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:21:53.481 [DEBUG] [Thread-126488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:21:53.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:21:53.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:21:53.536 [DEBUG] [Thread-126488] [transport.py] [_log()] userauth is OK
2026-02-11T09:21:53.536 [DEBUG] [Thread-126488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:21:53.536 [DEBUG] [Thread-126488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:21:53.537 [DEBUG] [Thread-126488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:21:53.537 [DEBUG] [Thread-126488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:21:53.560 [INFO] [Thread-126488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:21:53.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:21:53.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:21:53.646 [DEBUG] [Thread-126490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:21:54.390 [DEBUG] [Thread-126488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:21:54.390 [DEBUG] [Thread-126488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:21:54.438 [DEBUG] [Thread-126488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:21:54.438 [DEBUG] [Thread-126488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:21:54.448 [DEBUG] [Thread-126488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:21:54.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:21:54.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:21:54.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:21:54.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:21:54.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:21:54.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:21:54.485 [DEBUG] [Thread-126488] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:22:05.650 [DEBUG] [Thread-126491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:22:08.699 [DEBUG] [Thread-126492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:22:23.735 [DEBUG] [Thread-126493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:22:24.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:22:24.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:22:24.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:22:26.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 22, 4), 12.35, 45.32, 0.0, 10.36, 21.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:22:26.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:22:04
2026-02-11T09:22:26.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:22:26.876 [DEBUG] [Thread-126494] [transport.py] [_log()] starting thread (client mode): 0xa57e2350
2026-02-11T09:22:26.876 [DEBUG] [Thread-126494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:22:26.896 [DEBUG] [Thread-126494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:22:26.896 [INFO] [Thread-126494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:22:26.899 [DEBUG] [Thread-126494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:22:26.899 [DEBUG] [Thread-126494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:22:26.899 [DEBUG] [Thread-126494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:22:26.899 [DEBUG] [Thread-126494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] client lang: <none>
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] server lang: <none>
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] kex follows: False
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] Compression: none
2026-02-11T09:22:26.900 [DEBUG] [Thread-126494] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:22:26.917 [DEBUG] [Thread-126494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:22:26.917 [DEBUG] [Thread-126494] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:22:26.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:22:26.919 [DEBUG] [Thread-126494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:22:26.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:22:26.920 [DEBUG] [Thread-126494] [transport.py] [_log()] userauth is OK
2026-02-11T09:22:26.921 [DEBUG] [Thread-126494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:22:26.921 [DEBUG] [Thread-126494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:22:26.921 [DEBUG] [Thread-126494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:22:26.921 [DEBUG] [Thread-126494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:22:26.944 [INFO] [Thread-126494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:22:26.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:22:27.596 [DEBUG] [Thread-126494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:22:27.596 [DEBUG] [Thread-126494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:22:27.596 [DEBUG] [Thread-126494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:22:27.636 [DEBUG] [Thread-126494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:22:27.636 [DEBUG] [Thread-126494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:22:27.640 [DEBUG] [Thread-126494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:22:27.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:22:27.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:22:27.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:22:27.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:22:27.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:22:27.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:22:27.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:22:27.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:22:27.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:22:27.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.306737 -999.00  +20.70  11.66     52  +10.50 1 2 1 1 1   888    0 11.23 40.04 ----- 11.2 11.7 270.6 12.8 27.8 -23.6 27.0 -21.4 25.0 -20.7 25.6 -21.1
2026-02-11T09:22:27.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:22:27.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:22:27.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.306737
2026-02-11T09:22:27.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:22:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:22:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:22:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:22:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:22:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:22:04', tmtdew=12.35, humidity=45.32, cloud=0.0, wind=10.36, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:21:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:22:27.665 [DEBUG] [Thread-126494] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:22:27.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:22:27.763 [DEBUG] [Thread-126497] [transport.py] [_log()] starting thread (client mode): 0xa57c1b10
2026-02-11T09:22:27.764 [DEBUG] [Thread-126497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:22:27.778 [DEBUG] [Thread-126497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:22:27.778 [INFO] [Thread-126497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:22:27.785 [DEBUG] [Thread-126497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:22:27.785 [DEBUG] [Thread-126497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:22:27.785 [DEBUG] [Thread-126497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] client lang: <none>
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] server lang: <none>
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] kex follows: False
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] Compression: none
2026-02-11T09:22:27.786 [DEBUG] [Thread-126497] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:22:27.848 [DEBUG] [Thread-126497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:22:27.849 [DEBUG] [Thread-126497] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:22:27.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:22:27.850 [DEBUG] [Thread-126497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:22:27.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:22:27.904 [DEBUG] [Thread-126497] [transport.py] [_log()] userauth is OK
2026-02-11T09:22:27.904 [DEBUG] [Thread-126497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:22:27.905 [DEBUG] [Thread-126497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:22:27.905 [DEBUG] [Thread-126497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:22:27.905 [DEBUG] [Thread-126497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:22:27.925 [INFO] [Thread-126497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:22:27.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:22:27.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:22:28.768 [DEBUG] [Thread-126497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:22:28.769 [DEBUG] [Thread-126497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:22:28.816 [DEBUG] [Thread-126497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:22:28.816 [DEBUG] [Thread-126497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:22:28.825 [DEBUG] [Thread-126497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:22:28.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:22:28.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:22:28.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:22:28.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:22:28.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:22:28.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:22:28.864 [DEBUG] [Thread-126497] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:22:38.774 [DEBUG] [Thread-126499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:22:41.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:22:41.378 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:22:53.826 [DEBUG] [Thread-126500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:22:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:22:58.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:22:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:23:00.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 22, 40), 12.76, 44.04, 0.0, 8.36, 21.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:23:00.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:22:40
2026-02-11T09:23:01.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:23:01.256 [DEBUG] [Thread-126501] [transport.py] [_log()] starting thread (client mode): 0xa57c1cf0
2026-02-11T09:23:01.256 [DEBUG] [Thread-126501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:23:01.277 [DEBUG] [Thread-126501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:23:01.278 [INFO] [Thread-126501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:23:01.280 [DEBUG] [Thread-126501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:23:01.280 [DEBUG] [Thread-126501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:23:01.280 [DEBUG] [Thread-126501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:23:01.280 [DEBUG] [Thread-126501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:01.280 [DEBUG] [Thread-126501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:01.280 [DEBUG] [Thread-126501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:01.280 [DEBUG] [Thread-126501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] client lang: <none>
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] server lang: <none>
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] kex follows: False
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] Compression: none
2026-02-11T09:23:01.281 [DEBUG] [Thread-126501] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:23:01.298 [DEBUG] [Thread-126501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:23:01.298 [DEBUG] [Thread-126501] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:23:01.298 [DEBUG] [Thread-126501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:23:01.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:23:01.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:23:01.299 [DEBUG] [Thread-126501] [transport.py] [_log()] userauth is OK
2026-02-11T09:23:01.299 [DEBUG] [Thread-126501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:23:01.299 [DEBUG] [Thread-126501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:23:01.299 [DEBUG] [Thread-126501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:23:01.299 [DEBUG] [Thread-126501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:23:01.308 [INFO] [Thread-126501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:23:01.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:23:01.905 [DEBUG] [Thread-126501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:23:01.905 [DEBUG] [Thread-126501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:23:01.906 [DEBUG] [Thread-126501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:23:01.946 [DEBUG] [Thread-126501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:23:01.946 [DEBUG] [Thread-126501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:23:01.950 [DEBUG] [Thread-126501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:23:01.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:23:01.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:23:01.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:23:01.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:23:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:23:01.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:23:01.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:23:01.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:23:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:23:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.307084 -999.00  +20.50   9.95     52  +10.30 1 2 1 1 1   888    0 10.90 34.46 ----- 7.7 9.9 262.8 16.1 27.9 -23.8 27.1 -21.5 25.0 -20.6 25.5 -22.7
2026-02-11T09:23:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:23:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:23:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.307084
2026-02-11T09:23:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:23:01.976 [DEBUG] [Thread-126501] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:23:01.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:23:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:23:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:23:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:23:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:22:40', tmtdew=12.76, humidity=44.04, cloud=0.0, wind=8.36, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:22:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:23:02.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:23:02.073 [DEBUG] [Thread-126504] [transport.py] [_log()] starting thread (client mode): 0xa2d03460
2026-02-11T09:23:02.073 [DEBUG] [Thread-126504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:23:02.089 [DEBUG] [Thread-126504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:23:02.089 [INFO] [Thread-126504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:23:02.096 [DEBUG] [Thread-126504] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:23:02.097 [DEBUG] [Thread-126504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:23:02.097 [DEBUG] [Thread-126504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:23:02.097 [DEBUG] [Thread-126504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:02.097 [DEBUG] [Thread-126504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:02.097 [DEBUG] [Thread-126504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:02.097 [DEBUG] [Thread-126504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:02.097 [DEBUG] [Thread-126504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] client lang: <none>
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] server lang: <none>
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] kex follows: False
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] Compression: none
2026-02-11T09:23:02.098 [DEBUG] [Thread-126504] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:23:02.160 [DEBUG] [Thread-126504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:23:02.161 [DEBUG] [Thread-126504] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:23:02.161 [DEBUG] [Thread-126504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:23:02.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:23:02.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:23:02.216 [DEBUG] [Thread-126504] [transport.py] [_log()] userauth is OK
2026-02-11T09:23:02.216 [DEBUG] [Thread-126504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:23:02.217 [DEBUG] [Thread-126504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:23:02.217 [DEBUG] [Thread-126504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:23:02.217 [DEBUG] [Thread-126504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:23:02.235 [INFO] [Thread-126504] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:23:02.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:23:02.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:23:03.078 [DEBUG] [Thread-126504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:23:03.078 [DEBUG] [Thread-126504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:23:03.126 [DEBUG] [Thread-126504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:23:03.126 [DEBUG] [Thread-126504] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:23:03.135 [DEBUG] [Thread-126504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:23:03.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:23:03.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:23:03.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:23:03.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:23:03.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:23:03.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:23:03.168 [DEBUG] [Thread-126504] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:23:05.695 [DEBUG] [Thread-126506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:23:08.862 [DEBUG] [Thread-126507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:23:23.912 [DEBUG] [Thread-126508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:23:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:23:33.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:23:33.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
2026-02-11T09:23:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 23, 16), 12.06, 45.97, 0.0, 7.27, 20.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:23:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:23:16
2026-02-11T09:23:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:23:35.650 [DEBUG] [Thread-126509] [transport.py] [_log()] starting thread (client mode): 0xa81d5c60
2026-02-11T09:23:35.650 [DEBUG] [Thread-126509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:23:35.661 [DEBUG] [Thread-126509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:23:35.662 [INFO] [Thread-126509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] client lang: <none>
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] server lang: <none>
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] kex follows: False
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] Compression: none
2026-02-11T09:23:35.663 [DEBUG] [Thread-126509] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:23:35.671 [DEBUG] [Thread-126509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:23:35.671 [DEBUG] [Thread-126509] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:23:35.671 [DEBUG] [Thread-126509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:23:35.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:23:35.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:23:35.672 [DEBUG] [Thread-126509] [transport.py] [_log()] userauth is OK
2026-02-11T09:23:35.672 [DEBUG] [Thread-126509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:23:35.672 [DEBUG] [Thread-126509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:23:35.672 [DEBUG] [Thread-126509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:23:35.672 [DEBUG] [Thread-126509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:23:35.684 [INFO] [Thread-126509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:23:35.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:23:36.473 [DEBUG] [Thread-126509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:23:36.473 [DEBUG] [Thread-126509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:23:36.473 [DEBUG] [Thread-126509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:23:36.514 [DEBUG] [Thread-126509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:23:36.514 [DEBUG] [Thread-126509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:23:36.517 [DEBUG] [Thread-126509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:23:36.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:23:36.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:23:36.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:23:36.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:23:36.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:23:36.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:23:36.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:23:36.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:23:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:23:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.307778 -999.00  +20.60  12.75     52  +10.50 1 2 1 1 1   888    0 10.99 31.99 ----- 14.7 12.8 301.2 19.7 28.1 -23.5 27.2 -21.4 25.1 -19.8 25.7 -21.2
2026-02-11T09:23:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:23:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:23:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.307778
2026-02-11T09:23:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:23:36.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:23:36.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:23:36.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:23:36.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:23:36.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:23:16', tmtdew=12.06, humidity=45.97, cloud=0.0, wind=7.27, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:23:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:23:36.535 [DEBUG] [Thread-126509] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:23:36.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:23:36.631 [DEBUG] [Thread-126512] [transport.py] [_log()] starting thread (client mode): 0xa57c1930
2026-02-11T09:23:36.631 [DEBUG] [Thread-126512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:23:36.647 [DEBUG] [Thread-126512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:23:36.647 [INFO] [Thread-126512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:23:36.655 [DEBUG] [Thread-126512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:23:36.655 [DEBUG] [Thread-126512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] client lang: <none>
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] server lang: <none>
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] kex follows: False
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] Compression: none
2026-02-11T09:23:36.656 [DEBUG] [Thread-126512] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:23:36.711 [DEBUG] [Thread-126512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:23:36.712 [DEBUG] [Thread-126512] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:23:36.712 [DEBUG] [Thread-126512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:23:36.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:23:36.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:23:36.768 [DEBUG] [Thread-126512] [transport.py] [_log()] userauth is OK
2026-02-11T09:23:36.768 [DEBUG] [Thread-126512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:23:36.769 [DEBUG] [Thread-126512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:23:36.769 [DEBUG] [Thread-126512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:23:36.769 [DEBUG] [Thread-126512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:23:36.789 [INFO] [Thread-126512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:23:36.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:23:36.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:23:37.627 [DEBUG] [Thread-126512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:23:37.628 [DEBUG] [Thread-126512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:23:37.675 [DEBUG] [Thread-126512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:23:37.676 [DEBUG] [Thread-126512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:23:37.685 [DEBUG] [Thread-126512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:23:37.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:23:37.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:23:37.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:23:37.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:23:37.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:23:37.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:23:37.721 [DEBUG] [Thread-126512] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:23:38.950 [DEBUG] [Thread-126514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:23:41.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:23:41.546 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:23:54.002 [DEBUG] [Thread-126515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:24:05.729 [DEBUG] [Thread-126516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:24:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:24:07.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:24:07.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:24:09.040 [DEBUG] [Thread-126517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:24:09.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 23, 52), 12.22, 45.45, 0.0, 15.16, 21.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:24:09.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:23:52
2026-02-11T09:24:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:24:10.131 [DEBUG] [Thread-126518] [transport.py] [_log()] starting thread (client mode): 0xa57e1de0
2026-02-11T09:24:10.131 [DEBUG] [Thread-126518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:24:10.151 [DEBUG] [Thread-126518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:24:10.151 [INFO] [Thread-126518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:24:10.154 [DEBUG] [Thread-126518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:24:10.154 [DEBUG] [Thread-126518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:24:10.154 [DEBUG] [Thread-126518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:24:10.154 [DEBUG] [Thread-126518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:10.154 [DEBUG] [Thread-126518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:10.154 [DEBUG] [Thread-126518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] client lang: <none>
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] server lang: <none>
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] kex follows: False
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] Compression: none
2026-02-11T09:24:10.155 [DEBUG] [Thread-126518] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:24:10.174 [DEBUG] [Thread-126518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:24:10.174 [DEBUG] [Thread-126518] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:24:10.175 [DEBUG] [Thread-126518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:24:10.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:24:10.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:24:10.177 [DEBUG] [Thread-126518] [transport.py] [_log()] userauth is OK
2026-02-11T09:24:10.178 [DEBUG] [Thread-126518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:24:10.178 [DEBUG] [Thread-126518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:24:10.178 [DEBUG] [Thread-126518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:24:10.178 [DEBUG] [Thread-126518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:24:10.202 [INFO] [Thread-126518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:24:10.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:24:10.859 [DEBUG] [Thread-126518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:24:10.859 [DEBUG] [Thread-126518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:24:10.860 [DEBUG] [Thread-126518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:24:10.900 [DEBUG] [Thread-126518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:24:10.901 [DEBUG] [Thread-126518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:24:10.904 [DEBUG] [Thread-126518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:24:10.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:24:10.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:24:10.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:24:10.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:24:10.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:24:10.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:24:10.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:24:10.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:24:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:24:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.308126 -999.00  +20.70  17.78     52  +10.50 1 2 1 1 1   888    0 10.87 27.98 ----- 16.8 17.8 286.4 19.0 28.1 -22.9 27.2 -21.3 25.0 -22.3 25.8 -21.5
2026-02-11T09:24:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:24:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:24:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.308126
2026-02-11T09:24:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:24:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:24:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:24:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:24:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:24:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:23:52', tmtdew=12.22, humidity=45.45, cloud=0.0, wind=15.16, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:23:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:24:10.930 [DEBUG] [Thread-126518] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:24:11.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:24:11.030 [DEBUG] [Thread-126521] [transport.py] [_log()] starting thread (client mode): 0xa57c03a0
2026-02-11T09:24:11.030 [DEBUG] [Thread-126521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:24:11.047 [DEBUG] [Thread-126521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:24:11.047 [INFO] [Thread-126521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:24:11.054 [DEBUG] [Thread-126521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:24:11.054 [DEBUG] [Thread-126521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:24:11.054 [DEBUG] [Thread-126521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] client lang: <none>
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] server lang: <none>
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] kex follows: False
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] Compression: none
2026-02-11T09:24:11.055 [DEBUG] [Thread-126521] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:24:11.111 [DEBUG] [Thread-126521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:24:11.112 [DEBUG] [Thread-126521] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:24:11.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:24:11.113 [DEBUG] [Thread-126521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:24:11.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:24:11.169 [DEBUG] [Thread-126521] [transport.py] [_log()] userauth is OK
2026-02-11T09:24:11.169 [DEBUG] [Thread-126521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:24:11.169 [DEBUG] [Thread-126521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:24:11.169 [DEBUG] [Thread-126521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:24:11.169 [DEBUG] [Thread-126521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:24:11.188 [INFO] [Thread-126521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:24:11.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:24:11.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:24:12.059 [DEBUG] [Thread-126521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:24:12.060 [DEBUG] [Thread-126521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:24:12.107 [DEBUG] [Thread-126521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:24:12.108 [DEBUG] [Thread-126521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:24:12.117 [DEBUG] [Thread-126521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:24:12.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:24:12.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:24:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:24:12.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:24:12.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:24:12.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:24:12.152 [DEBUG] [Thread-126521] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:24:24.073 [DEBUG] [Thread-126523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:24:39.121 [DEBUG] [Thread-126524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:24:41.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:24:41.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:24:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:24:42.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:24:42.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:24:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 24, 27), 12.31, 45.17, 0.0, 15.14, 21.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:24:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:24:27
2026-02-11T09:24:44.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:24:44.564 [DEBUG] [Thread-126525] [transport.py] [_log()] starting thread (client mode): 0xa2df90c0
2026-02-11T09:24:44.564 [DEBUG] [Thread-126525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:24:44.582 [DEBUG] [Thread-126525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:24:44.582 [INFO] [Thread-126525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:24:44.585 [DEBUG] [Thread-126525] [transport.py] [_log()] client lang: <none>
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] server lang: <none>
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] kex follows: False
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] Compression: none
2026-02-11T09:24:44.586 [DEBUG] [Thread-126525] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:24:44.595 [DEBUG] [Thread-126525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:24:44.596 [DEBUG] [Thread-126525] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:24:44.596 [DEBUG] [Thread-126525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:24:44.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:24:44.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:24:44.597 [DEBUG] [Thread-126525] [transport.py] [_log()] userauth is OK
2026-02-11T09:24:44.597 [DEBUG] [Thread-126525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:24:44.598 [DEBUG] [Thread-126525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:24:44.598 [DEBUG] [Thread-126525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:24:44.598 [DEBUG] [Thread-126525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:24:44.615 [INFO] [Thread-126525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:24:44.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:24:45.260 [DEBUG] [Thread-126525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:24:45.261 [DEBUG] [Thread-126525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:24:45.261 [DEBUG] [Thread-126525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:24:45.301 [DEBUG] [Thread-126525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:24:45.302 [DEBUG] [Thread-126525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:24:45.305 [DEBUG] [Thread-126525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:24:45.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:24:45.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:24:45.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:24:45.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:24:45.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:24:45.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:24:45.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:24:45.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:24:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:24:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.308473 -999.00  +20.70  14.14     52  +10.50 1 2 1 1 1   888    0 10.66 23.44 ----- 11.9 14.1 290.8 18.7 28.1 -22.8 27.2 -21.3 25.1 -20.5 25.8 -21.3
2026-02-11T09:24:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:24:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:24:45.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.308473
2026-02-11T09:24:45.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:24:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:24:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:24:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:24:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:24:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:24:27', tmtdew=12.31, humidity=45.17, cloud=0.0, wind=15.14, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:24:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:24:45.332 [DEBUG] [Thread-126525] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:24:45.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:24:45.436 [DEBUG] [Thread-126528] [transport.py] [_log()] starting thread (client mode): 0xa2df80a0
2026-02-11T09:24:45.436 [DEBUG] [Thread-126528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:24:45.451 [DEBUG] [Thread-126528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:24:45.451 [INFO] [Thread-126528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] client lang: <none>
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] server lang: <none>
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] kex follows: False
2026-02-11T09:24:45.459 [DEBUG] [Thread-126528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:24:45.460 [DEBUG] [Thread-126528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:24:45.460 [DEBUG] [Thread-126528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:24:45.460 [DEBUG] [Thread-126528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:24:45.460 [DEBUG] [Thread-126528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:24:45.460 [DEBUG] [Thread-126528] [transport.py] [_log()] Compression: none
2026-02-11T09:24:45.460 [DEBUG] [Thread-126528] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:24:45.517 [DEBUG] [Thread-126528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:24:45.518 [DEBUG] [Thread-126528] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:24:45.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:24:45.519 [DEBUG] [Thread-126528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:24:45.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:24:45.576 [DEBUG] [Thread-126528] [transport.py] [_log()] userauth is OK
2026-02-11T09:24:45.577 [DEBUG] [Thread-126528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:24:45.577 [DEBUG] [Thread-126528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:24:45.577 [DEBUG] [Thread-126528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:24:45.577 [DEBUG] [Thread-126528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:24:45.596 [INFO] [Thread-126528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:24:45.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:24:45.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:24:46.500 [DEBUG] [Thread-126528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:24:46.500 [DEBUG] [Thread-126528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:24:46.548 [DEBUG] [Thread-126528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:24:46.548 [DEBUG] [Thread-126528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:24:46.556 [DEBUG] [Thread-126528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:24:46.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:24:46.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:24:46.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:24:46.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:24:46.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:24:46.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:24:46.588 [DEBUG] [Thread-126528] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:24:54.157 [DEBUG] [Thread-126530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:05.762 [DEBUG] [Thread-126531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:09.206 [DEBUG] [Thread-126532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:16.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:25:16.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:25:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:25:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 25, 2), 12.3, 45.17, 0.0, 14.77, 21.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:25:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:25:02
2026-02-11T09:25:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:25:19.016 [DEBUG] [Thread-126533] [transport.py] [_log()] starting thread (client mode): 0xa2dfa650
2026-02-11T09:25:19.016 [DEBUG] [Thread-126533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:25:19.037 [DEBUG] [Thread-126533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:25:19.037 [INFO] [Thread-126533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] client lang: <none>
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] server lang: <none>
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] kex follows: False
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] Compression: none
2026-02-11T09:25:19.040 [DEBUG] [Thread-126533] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:25:19.058 [DEBUG] [Thread-126533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:25:19.059 [DEBUG] [Thread-126533] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:25:19.059 [DEBUG] [Thread-126533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:25:19.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:25:19.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:25:19.060 [DEBUG] [Thread-126533] [transport.py] [_log()] userauth is OK
2026-02-11T09:25:19.060 [DEBUG] [Thread-126533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:25:19.060 [DEBUG] [Thread-126533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:25:19.060 [DEBUG] [Thread-126533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:25:19.060 [DEBUG] [Thread-126533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:25:19.079 [INFO] [Thread-126533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:25:19.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:25:19.715 [DEBUG] [Thread-126533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:25:19.716 [DEBUG] [Thread-126533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:25:19.716 [DEBUG] [Thread-126533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:25:19.756 [DEBUG] [Thread-126533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:25:19.756 [DEBUG] [Thread-126533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:25:19.759 [DEBUG] [Thread-126533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:25:19.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:25:19.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:25:19.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:25:19.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:25:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:25:19.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:25:19.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:25:19.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:25:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:25:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.308820 -999.00  +20.70  17.03     51  +10.40 1 2 1 1 1   888    0 10.51 18.66 ----- 15.3 17.0 275.0 18.4 28.0 -24.5 27.3 -21.7 25.2 -20.1 25.8 -21.2
2026-02-11T09:25:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:25:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:25:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.308820
2026-02-11T09:25:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:25:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:25:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:25:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:25:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:25:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:25:02', tmtdew=12.3, humidity=45.17, cloud=0.0, wind=14.77, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:24:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:25:19.786 [DEBUG] [Thread-126533] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:25:19.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:25:19.887 [DEBUG] [Thread-126536] [transport.py] [_log()] starting thread (client mode): 0xa2dfa7d0
2026-02-11T09:25:19.888 [DEBUG] [Thread-126536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:25:19.901 [DEBUG] [Thread-126536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:25:19.901 [INFO] [Thread-126536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:25:19.908 [DEBUG] [Thread-126536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:25:19.908 [DEBUG] [Thread-126536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:25:19.908 [DEBUG] [Thread-126536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] client lang: <none>
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] server lang: <none>
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] kex follows: False
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] Compression: none
2026-02-11T09:25:19.909 [DEBUG] [Thread-126536] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:25:19.972 [DEBUG] [Thread-126536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:25:19.973 [DEBUG] [Thread-126536] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:25:19.973 [DEBUG] [Thread-126536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:25:19.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:25:19.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:25:20.028 [DEBUG] [Thread-126536] [transport.py] [_log()] userauth is OK
2026-02-11T09:25:20.029 [DEBUG] [Thread-126536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:25:20.029 [DEBUG] [Thread-126536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:25:20.029 [DEBUG] [Thread-126536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:25:20.029 [DEBUG] [Thread-126536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:25:20.047 [INFO] [Thread-126536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:25:20.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:25:20.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:25:20.827 [DEBUG] [Thread-126536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:25:20.827 [DEBUG] [Thread-126536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:25:20.882 [DEBUG] [Thread-126536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:25:20.882 [DEBUG] [Thread-126536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:25:20.899 [DEBUG] [Thread-126536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:25:20.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:25:20.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:25:20.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
2026-02-11T09:25:20.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:25:20.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:25:20.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:25:20.961 [DEBUG] [Thread-126536] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:25:24.243 [DEBUG] [Thread-126538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:39.295 [DEBUG] [Thread-126539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:41.849 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:41.850 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:50.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:25:50.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:25:50.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:25:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 25, 38), 12.86, 43.77, 0.0, 14.79, 21.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:25:53.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:25:38
2026-02-11T09:25:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:25:53.693 [DEBUG] [Thread-126540] [transport.py] [_log()] starting thread (client mode): 0xa57c0e20
2026-02-11T09:25:53.693 [DEBUG] [Thread-126540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:25:53.713 [DEBUG] [Thread-126540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:25:53.713 [INFO] [Thread-126540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] client lang: <none>
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] server lang: <none>
2026-02-11T09:25:53.717 [DEBUG] [Thread-126540] [transport.py] [_log()] kex follows: False
2026-02-11T09:25:53.718 [DEBUG] [Thread-126540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:25:53.718 [DEBUG] [Thread-126540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:25:53.718 [DEBUG] [Thread-126540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:25:53.718 [DEBUG] [Thread-126540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:25:53.718 [DEBUG] [Thread-126540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:25:53.718 [DEBUG] [Thread-126540] [transport.py] [_log()] Compression: none
2026-02-11T09:25:53.718 [DEBUG] [Thread-126540] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:25:53.736 [DEBUG] [Thread-126540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:25:53.737 [DEBUG] [Thread-126540] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:25:53.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:25:53.738 [DEBUG] [Thread-126540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:25:53.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:25:53.741 [DEBUG] [Thread-126540] [transport.py] [_log()] userauth is OK
2026-02-11T09:25:53.741 [DEBUG] [Thread-126540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:25:53.741 [DEBUG] [Thread-126540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:25:53.741 [DEBUG] [Thread-126540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:25:53.742 [DEBUG] [Thread-126540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:25:53.765 [INFO] [Thread-126540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:25:53.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:25:54.331 [DEBUG] [Thread-126542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:25:54.409 [DEBUG] [Thread-126540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:25:54.410 [DEBUG] [Thread-126540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:25:54.410 [DEBUG] [Thread-126540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:25:54.451 [DEBUG] [Thread-126540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:25:54.451 [DEBUG] [Thread-126540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:25:54.455 [DEBUG] [Thread-126540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:25:54.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:25:54.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:25:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:25:54.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:25:54.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:25:54.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:25:54.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:25:54.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:25:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:25:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.309167 -999.00  +20.60  10.29     52  +10.50 1 2 1 1 1   888    0 10.25 15.64 ----- 10.2 10.3 294.0 18.1 28.1 -22.2 27.3 -21.5 25.1 -20.8 25.8 -21.6
2026-02-11T09:25:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:25:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:25:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.309167
2026-02-11T09:25:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:25:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:25:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:25:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:25:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:25:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:25:38', tmtdew=12.86, humidity=43.77, cloud=0.0, wind=14.79, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:25:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:25:54.483 [DEBUG] [Thread-126540] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:25:54.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:25:54.578 [DEBUG] [Thread-126544] [transport.py] [_log()] starting thread (client mode): 0xa5758d00
2026-02-11T09:25:54.579 [DEBUG] [Thread-126544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:25:54.593 [DEBUG] [Thread-126544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:25:54.594 [INFO] [Thread-126544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] client lang: <none>
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] server lang: <none>
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] kex follows: False
2026-02-11T09:25:54.601 [DEBUG] [Thread-126544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:25:54.602 [DEBUG] [Thread-126544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:25:54.602 [DEBUG] [Thread-126544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:25:54.602 [DEBUG] [Thread-126544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:25:54.602 [DEBUG] [Thread-126544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:25:54.602 [DEBUG] [Thread-126544] [transport.py] [_log()] Compression: none
2026-02-11T09:25:54.602 [DEBUG] [Thread-126544] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:25:54.664 [DEBUG] [Thread-126544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:25:54.665 [DEBUG] [Thread-126544] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:25:54.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:25:54.666 [DEBUG] [Thread-126544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:25:54.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:25:54.720 [DEBUG] [Thread-126544] [transport.py] [_log()] userauth is OK
2026-02-11T09:25:54.721 [DEBUG] [Thread-126544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:25:54.721 [DEBUG] [Thread-126544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:25:54.721 [DEBUG] [Thread-126544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:25:54.721 [DEBUG] [Thread-126544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:25:54.743 [INFO] [Thread-126544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:25:54.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:25:54.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:25:55.560 [DEBUG] [Thread-126544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:25:55.561 [DEBUG] [Thread-126544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:25:55.608 [DEBUG] [Thread-126544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:25:55.608 [DEBUG] [Thread-126544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:25:55.617 [DEBUG] [Thread-126544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:25:55.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:25:55.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:25:55.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:25:55.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:25:55.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:25:55.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:25:55.652 [DEBUG] [Thread-126544] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:26:05.795 [DEBUG] [Thread-126546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:26:09.369 [DEBUG] [Thread-126547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:26:24.417 [DEBUG] [Thread-126548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:26:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:26:25.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:26: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
2026-02-11T09:26:27.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 26, 14), 12.14, 45.85, 0.0, 10.13, 20.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:26:27.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:26:14
2026-02-11T09:26:27.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:26:28.050 [DEBUG] [Thread-126549] [transport.py] [_log()] starting thread (client mode): 0xa2d54190
2026-02-11T09:26:28.051 [DEBUG] [Thread-126549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:26:28.071 [DEBUG] [Thread-126549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:26:28.072 [INFO] [Thread-126549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:26:28.075 [DEBUG] [Thread-126549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] client lang: <none>
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] server lang: <none>
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] kex follows: False
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] Compression: none
2026-02-11T09:26:28.076 [DEBUG] [Thread-126549] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:26:28.096 [DEBUG] [Thread-126549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:26:28.097 [DEBUG] [Thread-126549] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:26:28.097 [DEBUG] [Thread-126549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:26:28.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:26:28.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:26:28.099 [DEBUG] [Thread-126549] [transport.py] [_log()] userauth is OK
2026-02-11T09:26:28.099 [DEBUG] [Thread-126549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:26:28.099 [DEBUG] [Thread-126549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:26:28.099 [DEBUG] [Thread-126549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:26:28.099 [DEBUG] [Thread-126549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:26:28.124 [INFO] [Thread-126549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:26:28.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:26:28.911 [DEBUG] [Thread-126549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:26:28.911 [DEBUG] [Thread-126549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:26:28.911 [DEBUG] [Thread-126549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:26:28.952 [DEBUG] [Thread-126549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:26:28.952 [DEBUG] [Thread-126549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:26:28.955 [DEBUG] [Thread-126549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:26:28.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:26:28.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:26:28.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:26:28.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:26:28.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:26:28.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:26:28.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:26:28.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:26:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:26:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.309514 -999.00  +20.70   7.39     52  +10.50 1 2 1 1 1   888    0 10.44 11.71 ----- 9.1 7.4 281.3 15.0 28.1 -24.2 27.3 -21.6 25.2 -20.9 25.9 -21.3
2026-02-11T09:26:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:26:28.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:26:28.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.309514
2026-02-11T09:26:28.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:26:28.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:26:28.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:26:28.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:26:28.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:26:28.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:26:14', tmtdew=12.14, humidity=45.85, cloud=0.0, wind=10.13, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:25:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:26:28.978 [DEBUG] [Thread-126549] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:26:29.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:26:29.073 [DEBUG] [Thread-126552] [transport.py] [_log()] starting thread (client mode): 0xa57c27a0
2026-02-11T09:26:29.073 [DEBUG] [Thread-126552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:26:29.088 [DEBUG] [Thread-126552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:26:29.088 [INFO] [Thread-126552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:26:29.095 [DEBUG] [Thread-126552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:26:29.095 [DEBUG] [Thread-126552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:26:29.096 [DEBUG] [Thread-126552] [transport.py] [_log()] client lang: <none>
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] server lang: <none>
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] kex follows: False
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] Compression: none
2026-02-11T09:26:29.097 [DEBUG] [Thread-126552] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:26:29.152 [DEBUG] [Thread-126552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:26:29.152 [DEBUG] [Thread-126552] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:26:29.153 [DEBUG] [Thread-126552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:26:29.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:26:29.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:26:29.212 [DEBUG] [Thread-126552] [transport.py] [_log()] userauth is OK
2026-02-11T09:26:29.212 [DEBUG] [Thread-126552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:26:29.212 [DEBUG] [Thread-126552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:26:29.213 [DEBUG] [Thread-126552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:26:29.213 [DEBUG] [Thread-126552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:26:29.235 [INFO] [Thread-126552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:26:29.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:26:29.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:26:30.081 [DEBUG] [Thread-126552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:26:30.081 [DEBUG] [Thread-126552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:26:30.129 [DEBUG] [Thread-126552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:26:30.129 [DEBUG] [Thread-126552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:26:30.138 [DEBUG] [Thread-126552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:26:30.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:26:30.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:26:30.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:26:30.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:26:30.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:26:30.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:26:30.172 [DEBUG] [Thread-126552] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:26:39.448 [DEBUG] [Thread-126554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:26:41.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:26:41.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:26:54.510 [DEBUG] [Thread-126555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:27:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:27:00.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09: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
2026-02-11T09:27:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 26, 49), 12.21, 45.29, 0.0, 8.15, 20.95, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:27:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:26:49
2026-02-11T09:27:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:27:02.573 [DEBUG] [Thread-126556] [transport.py] [_log()] starting thread (client mode): 0xa2dc2140
2026-02-11T09:27:02.573 [DEBUG] [Thread-126556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:27:02.593 [DEBUG] [Thread-126556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:27:02.593 [INFO] [Thread-126556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:27:02.596 [DEBUG] [Thread-126556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:27:02.596 [DEBUG] [Thread-126556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:27:02.596 [DEBUG] [Thread-126556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:27:02.596 [DEBUG] [Thread-126556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:02.596 [DEBUG] [Thread-126556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:02.596 [DEBUG] [Thread-126556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:02.596 [DEBUG] [Thread-126556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] client lang: <none>
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] server lang: <none>
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] kex follows: False
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] Compression: none
2026-02-11T09:27:02.597 [DEBUG] [Thread-126556] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:27:02.615 [DEBUG] [Thread-126556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:27:02.616 [DEBUG] [Thread-126556] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:27:02.616 [DEBUG] [Thread-126556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:27:02.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:27:02.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:27:02.618 [DEBUG] [Thread-126556] [transport.py] [_log()] userauth is OK
2026-02-11T09:27:02.618 [DEBUG] [Thread-126556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:27:02.619 [DEBUG] [Thread-126556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:27:02.619 [DEBUG] [Thread-126556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:27:02.619 [DEBUG] [Thread-126556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:27:02.637 [INFO] [Thread-126556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:27:02.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:27:03.271 [DEBUG] [Thread-126556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:27:03.271 [DEBUG] [Thread-126556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:27:03.271 [DEBUG] [Thread-126556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:27:03.312 [DEBUG] [Thread-126556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:27:03.312 [DEBUG] [Thread-126556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:27:03.315 [DEBUG] [Thread-126556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:27:03.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:27:03.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:27:03.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:27:03.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:27:03.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:27:03.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:27:03.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:27:03.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:27:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:27:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.309861 -999.00  +20.70   7.26     52  +10.50 1 2 1 1 1   888    0 10.40 8.78 ----- 7.9 7.3 304.2 11.2 28.3 -22.4 27.3 -21.3 25.1 -20.3 25.9 -21.1
2026-02-11T09:27:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:27:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:27:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.309861
2026-02-11T09:27:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:27:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:27:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:27:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:27:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:27:03.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:26:49', tmtdew=12.21, humidity=45.29, cloud=0.0, wind=8.15, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:26:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:27:03.339 [DEBUG] [Thread-126556] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:27:03.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:27:03.437 [DEBUG] [Thread-126559] [transport.py] [_log()] starting thread (client mode): 0xa2dc3df0
2026-02-11T09:27:03.437 [DEBUG] [Thread-126559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:27:03.453 [DEBUG] [Thread-126559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:27:03.453 [INFO] [Thread-126559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:27:03.461 [DEBUG] [Thread-126559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:27:03.461 [DEBUG] [Thread-126559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:27:03.461 [DEBUG] [Thread-126559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] client lang: <none>
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] server lang: <none>
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] kex follows: False
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] Compression: none
2026-02-11T09:27:03.462 [DEBUG] [Thread-126559] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:27:03.521 [DEBUG] [Thread-126559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:27:03.521 [DEBUG] [Thread-126559] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:27:03.522 [DEBUG] [Thread-126559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:27:03.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:27:03.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:27:03.576 [DEBUG] [Thread-126559] [transport.py] [_log()] userauth is OK
2026-02-11T09:27:03.577 [DEBUG] [Thread-126559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:27:03.577 [DEBUG] [Thread-126559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:27:03.577 [DEBUG] [Thread-126559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:27:03.577 [DEBUG] [Thread-126559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:27:03.596 [INFO] [Thread-126559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:27:03.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:27:03.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:27:04.411 [DEBUG] [Thread-126559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:27:04.412 [DEBUG] [Thread-126559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:27:04.459 [DEBUG] [Thread-126559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:27:04.460 [DEBUG] [Thread-126559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:27:04.469 [DEBUG] [Thread-126559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:27:04.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:27:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:27:04.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:27:04.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:27:04.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:27:04.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:27:04.505 [DEBUG] [Thread-126559] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:27:05.830 [DEBUG] [Thread-126561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:27:09.548 [DEBUG] [Thread-126562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:27:24.601 [DEBUG] [Thread-126563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:27:34.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:27:34.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:27:34.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
2026-02-11T09:27:36.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 27, 24), 12.16, 45.42, 0.0, 7.36, 20.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:27:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:27:24
2026-02-11T09:27:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:27:36.930 [DEBUG] [Thread-126564] [transport.py] [_log()] starting thread (client mode): 0xa2dfa020
2026-02-11T09:27:36.930 [DEBUG] [Thread-126564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:27:36.945 [DEBUG] [Thread-126564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:27:36.945 [INFO] [Thread-126564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:27:36.947 [DEBUG] [Thread-126564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:27:36.947 [DEBUG] [Thread-126564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:27:36.947 [DEBUG] [Thread-126564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:27:36.947 [DEBUG] [Thread-126564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:36.947 [DEBUG] [Thread-126564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:36.947 [DEBUG] [Thread-126564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:36.947 [DEBUG] [Thread-126564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] client lang: <none>
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] server lang: <none>
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] kex follows: False
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] Compression: none
2026-02-11T09:27:36.948 [DEBUG] [Thread-126564] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:27:36.961 [DEBUG] [Thread-126564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:27:36.961 [DEBUG] [Thread-126564] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:27:36.961 [DEBUG] [Thread-126564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:27:36.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:27:36.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:27:36.963 [DEBUG] [Thread-126564] [transport.py] [_log()] userauth is OK
2026-02-11T09:27:36.963 [DEBUG] [Thread-126564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:27:36.963 [DEBUG] [Thread-126564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:27:36.963 [DEBUG] [Thread-126564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:27:36.963 [DEBUG] [Thread-126564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:27:36.979 [INFO] [Thread-126564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:27:36.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:27:37.675 [DEBUG] [Thread-126564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:27:37.675 [DEBUG] [Thread-126564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:27:37.675 [DEBUG] [Thread-126564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:27:37.716 [DEBUG] [Thread-126564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:27:37.716 [DEBUG] [Thread-126564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:27:37.719 [DEBUG] [Thread-126564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:27:37.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:27:37.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:27:37.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:27:37.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:27:37.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:27:37.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:27:37.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:27:37.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:27:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:27:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.310556 -999.00  +20.70   8.93     52  +10.50 1 2 1 1 1   888    0 10.41 6.55 ----- 7.4 8.9 315.2 10.2 28.6 -22.3 27.6 -21.2 25.5 -19.9 26.2 -21.0
2026-02-11T09:27:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:27:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:27:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.310556
2026-02-11T09:27:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:27:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:27:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:27:37.745 [DEBUG] [Thread-126564] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:27:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:27:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:27:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:27:24', tmtdew=12.16, humidity=45.42, cloud=0.0, wind=7.36, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:27:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:27:37.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:27:37.838 [DEBUG] [Thread-126567] [transport.py] [_log()] starting thread (client mode): 0xa2d92230
2026-02-11T09:27:37.838 [DEBUG] [Thread-126567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:27:37.853 [DEBUG] [Thread-126567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:27:37.854 [INFO] [Thread-126567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:27:37.861 [DEBUG] [Thread-126567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:27:37.861 [DEBUG] [Thread-126567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:27:37.861 [DEBUG] [Thread-126567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:27:37.861 [DEBUG] [Thread-126567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] client lang: <none>
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] server lang: <none>
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] kex follows: False
2026-02-11T09:27:37.862 [DEBUG] [Thread-126567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:27:37.863 [DEBUG] [Thread-126567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:27:37.863 [DEBUG] [Thread-126567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:27:37.863 [DEBUG] [Thread-126567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:27:37.863 [DEBUG] [Thread-126567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:27:37.863 [DEBUG] [Thread-126567] [transport.py] [_log()] Compression: none
2026-02-11T09:27:37.864 [DEBUG] [Thread-126567] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:27:37.920 [DEBUG] [Thread-126567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:27:37.921 [DEBUG] [Thread-126567] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:27:37.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:27:37.922 [DEBUG] [Thread-126567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:27:37.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:27:37.979 [DEBUG] [Thread-126567] [transport.py] [_log()] userauth is OK
2026-02-11T09:27:37.979 [DEBUG] [Thread-126567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:27:37.979 [DEBUG] [Thread-126567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:27:37.979 [DEBUG] [Thread-126567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:27:37.980 [DEBUG] [Thread-126567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:27:37.998 [INFO] [Thread-126567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:27:37.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:27:37.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:27:38.854 [DEBUG] [Thread-126567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:27:38.854 [DEBUG] [Thread-126567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:27:38.901 [DEBUG] [Thread-126567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:27:38.902 [DEBUG] [Thread-126567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:27:38.911 [DEBUG] [Thread-126567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:27:38.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:27:38.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:27:38.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:27:38.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:27:38.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:27:38.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:27:38.947 [DEBUG] [Thread-126567] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:27:39.637 [DEBUG] [Thread-126569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:27:42.135 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:27:42.136 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:27:54.692 [DEBUG] [Thread-126570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:28:05.898 [DEBUG] [Thread-126571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:28:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:28:08.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:28:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:28:09.728 [DEBUG] [Thread-126572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:28:11.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 27, 24), 12.21, 45.42, 0.0, 10.96, 20.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:28:11.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:27:24
2026-02-11T09:28:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:28:11.945 [DEBUG] [Thread-126573] [transport.py] [_log()] starting thread (client mode): 0xa2d56d10
2026-02-11T09:28:11.945 [DEBUG] [Thread-126573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:28:11.965 [DEBUG] [Thread-126573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:28:11.965 [INFO] [Thread-126573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:28:11.968 [DEBUG] [Thread-126573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] client lang: <none>
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] server lang: <none>
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] kex follows: False
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] Compression: none
2026-02-11T09:28:11.969 [DEBUG] [Thread-126573] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:28:11.985 [DEBUG] [Thread-126573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:28:11.986 [DEBUG] [Thread-126573] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:28:11.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:28:11.987 [DEBUG] [Thread-126573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:28:11.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:28:11.989 [DEBUG] [Thread-126573] [transport.py] [_log()] userauth is OK
2026-02-11T09:28:11.989 [DEBUG] [Thread-126573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:28:11.989 [DEBUG] [Thread-126573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:28:11.990 [DEBUG] [Thread-126573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:28:11.990 [DEBUG] [Thread-126573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:28:12.008 [INFO] [Thread-126573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:28:12.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:28:12.641 [DEBUG] [Thread-126573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:28:12.642 [DEBUG] [Thread-126573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:28:12.642 [DEBUG] [Thread-126573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:28:12.682 [DEBUG] [Thread-126573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:28:12.682 [DEBUG] [Thread-126573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:28:12.685 [DEBUG] [Thread-126573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:28:12.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:28:12.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:28:12.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:28:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:28:12.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:28:12.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:28:12.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:28:12.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:28:12.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:28:12.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.310903 -999.00  +20.70   9.06     52  +10.50 1 2 1 1 1   888    0 10.08 4.54 ----- 9.8 9.1 282.2 9.9 28.6 -23.2 27.7 -20.8 25.6 -19.9 26.3 -20.9
2026-02-11T09:28:12.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:28:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:28:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.310903
2026-02-11T09:28:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:28:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:28:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:28:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:28:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:28:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:27:24', tmtdew=12.21, humidity=45.42, cloud=0.0, wind=10.96, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:27:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:28:12.711 [DEBUG] [Thread-126573] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:28:12.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:28:12.807 [DEBUG] [Thread-126576] [transport.py] [_log()] starting thread (client mode): 0xa2dfb730
2026-02-11T09:28:12.807 [DEBUG] [Thread-126576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:28:12.822 [DEBUG] [Thread-126576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:28:12.822 [INFO] [Thread-126576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] client lang: <none>
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] server lang: <none>
2026-02-11T09:28:12.830 [DEBUG] [Thread-126576] [transport.py] [_log()] kex follows: False
2026-02-11T09:28:12.831 [DEBUG] [Thread-126576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:28:12.831 [DEBUG] [Thread-126576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:28:12.831 [DEBUG] [Thread-126576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:28:12.831 [DEBUG] [Thread-126576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:28:12.831 [DEBUG] [Thread-126576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:28:12.831 [DEBUG] [Thread-126576] [transport.py] [_log()] Compression: none
2026-02-11T09:28:12.831 [DEBUG] [Thread-126576] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:28:12.889 [DEBUG] [Thread-126576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:28:12.890 [DEBUG] [Thread-126576] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:28:12.891 [DEBUG] [Thread-126576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:28:12.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:28:12.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:28:12.948 [DEBUG] [Thread-126576] [transport.py] [_log()] userauth is OK
2026-02-11T09:28:12.948 [DEBUG] [Thread-126576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:28:12.948 [DEBUG] [Thread-126576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:28:12.948 [DEBUG] [Thread-126576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:28:12.948 [DEBUG] [Thread-126576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:28:12.970 [INFO] [Thread-126576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:28:12.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:28:12.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:28:13.777 [DEBUG] [Thread-126576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:28:13.778 [DEBUG] [Thread-126576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:28:13.825 [DEBUG] [Thread-126576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:28:13.826 [DEBUG] [Thread-126576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:28:13.836 [DEBUG] [Thread-126576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:28:13.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:28:13.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')
2026-02-11T09:28:13.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:28:13.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:28:13.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:28:13.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:28:13.872 [DEBUG] [Thread-126576] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:28:24.767 [DEBUG] [Thread-126578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:28:39.818 [DEBUG] [Thread-126579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:28:42.278 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:28:42.279 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:28:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:28:43.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:28:43.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:28:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 28, 35), 12.37, 45.06, 0.0, 6.35, 21.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:28:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:28:35
2026-02-11T09:28:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:28:46.334 [DEBUG] [Thread-126580] [transport.py] [_log()] starting thread (client mode): 0xa57b38e0
2026-02-11T09:28:46.334 [DEBUG] [Thread-126580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:28:46.354 [DEBUG] [Thread-126580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:28:46.354 [INFO] [Thread-126580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:28:46.357 [DEBUG] [Thread-126580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:28:46.358 [DEBUG] [Thread-126580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] client lang: <none>
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] server lang: <none>
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] kex follows: False
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] Compression: none
2026-02-11T09:28:46.359 [DEBUG] [Thread-126580] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:28:46.376 [DEBUG] [Thread-126580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:28:46.377 [DEBUG] [Thread-126580] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:28:46.377 [DEBUG] [Thread-126580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:28:46.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:28:46.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:28:46.379 [DEBUG] [Thread-126580] [transport.py] [_log()] userauth is OK
2026-02-11T09:28:46.380 [DEBUG] [Thread-126580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:28:46.380 [DEBUG] [Thread-126580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:28:46.380 [DEBUG] [Thread-126580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:28:46.380 [DEBUG] [Thread-126580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:28:46.405 [INFO] [Thread-126580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:28:46.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:28:47.055 [DEBUG] [Thread-126580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:28:47.055 [DEBUG] [Thread-126580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:28:47.055 [DEBUG] [Thread-126580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:28:47.096 [DEBUG] [Thread-126580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:28:47.096 [DEBUG] [Thread-126580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:28:47.099 [DEBUG] [Thread-126580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:28:47.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:28:47.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:28:47.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:28:47.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:28:47.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:28:47.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:28:47.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:28:47.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:28:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:28:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.311250 -999.00  +20.80  12.00     51  +10.50 1 2 1 1 1   888    0 10.11 4.20 ----- 10.3 12.0 279.0 16.1 28.7 -23.7 27.8 -21.0 25.6 -21.9 26.4 -21.5
2026-02-11T09:28:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:28:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:28:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.311250
2026-02-11T09:28:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:28:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:28:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:28:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:28:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:28:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:28:35', tmtdew=12.37, humidity=45.06, cloud=0.0, wind=6.35, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:28:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:28:47.127 [DEBUG] [Thread-126580] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:28:47.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:28:47.231 [DEBUG] [Thread-126583] [transport.py] [_log()] starting thread (client mode): 0xa81d7d90
2026-02-11T09:28:47.231 [DEBUG] [Thread-126583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:28:47.245 [DEBUG] [Thread-126583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:28:47.245 [INFO] [Thread-126583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] client lang: <none>
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] server lang: <none>
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] kex follows: False
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] Compression: none
2026-02-11T09:28:47.253 [DEBUG] [Thread-126583] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:28:47.313 [DEBUG] [Thread-126583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:28:47.313 [DEBUG] [Thread-126583] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:28:47.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:28:47.313 [DEBUG] [Thread-126583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:28:47.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:28:47.376 [DEBUG] [Thread-126583] [transport.py] [_log()] userauth is OK
2026-02-11T09:28:47.376 [DEBUG] [Thread-126583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:28:47.376 [DEBUG] [Thread-126583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:28:47.377 [DEBUG] [Thread-126583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:28:47.377 [DEBUG] [Thread-126583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:28:47.395 [INFO] [Thread-126583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:28:47.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:28:47.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:28:48.227 [DEBUG] [Thread-126583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:28:48.227 [DEBUG] [Thread-126583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:28:48.276 [DEBUG] [Thread-126583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:28:48.276 [DEBUG] [Thread-126583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:28:48.285 [DEBUG] [Thread-126583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:28:48.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:28:48.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:28:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:28:48.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:28:48.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:28:48.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:28:48.322 [DEBUG] [Thread-126583] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:28:54.853 [DEBUG] [Thread-126585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:05.951 [DEBUG] [Thread-126586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:09.909 [DEBUG] [Thread-126587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:29:18.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:29:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:29:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 29, 11), 12.04, 46.18, 0.0, 13.82, 20.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:29:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:29:11
2026-02-11T09:29:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:29:20.826 [DEBUG] [Thread-126588] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-11T09:29:20.827 [DEBUG] [Thread-126588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:29:20.846 [DEBUG] [Thread-126588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:29:20.847 [INFO] [Thread-126588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:29:20.848 [DEBUG] [Thread-126588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] client lang: <none>
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] server lang: <none>
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] kex follows: False
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] Compression: none
2026-02-11T09:29:20.849 [DEBUG] [Thread-126588] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:29:20.860 [DEBUG] [Thread-126588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:29:20.861 [DEBUG] [Thread-126588] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:29:20.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:29:20.862 [DEBUG] [Thread-126588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:29:20.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:29:20.864 [DEBUG] [Thread-126588] [transport.py] [_log()] userauth is OK
2026-02-11T09:29:20.864 [DEBUG] [Thread-126588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:29:20.864 [DEBUG] [Thread-126588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:29:20.864 [DEBUG] [Thread-126588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:29:20.864 [DEBUG] [Thread-126588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:29:20.882 [INFO] [Thread-126588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:29:20.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:29:21.615 [DEBUG] [Thread-126588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:29:21.615 [DEBUG] [Thread-126588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:29:21.616 [DEBUG] [Thread-126588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:29:21.656 [DEBUG] [Thread-126588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:29:21.656 [DEBUG] [Thread-126588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:29:21.659 [DEBUG] [Thread-126588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:29:21.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:29:21.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:29:21.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:29:21.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:29:21.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:29:21.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:29:21.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:29:21.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:29:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:29:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.311598 -999.00  +20.90  11.83     52  +10.60 1 2 1 1 1   888    0 10.18 5.80 ----- 15.7 11.8 265.0 20.7 28.5 -24.3 27.7 -22.1 25.5 -23.1 26.3 -22.1
2026-02-11T09:29:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:29:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:29:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.311598
2026-02-11T09:29:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:29:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:29:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:29:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:29:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:29:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:29:11', tmtdew=12.04, humidity=46.18, cloud=0.0, wind=13.82, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:28:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:29:21.684 [DEBUG] [Thread-126588] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:29:21.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:29:21.783 [DEBUG] [Thread-126591] [transport.py] [_log()] starting thread (client mode): 0xa57b3070
2026-02-11T09:29:21.784 [DEBUG] [Thread-126591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:29:21.799 [DEBUG] [Thread-126591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:29:21.799 [INFO] [Thread-126591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:29:21.808 [DEBUG] [Thread-126591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] client lang: <none>
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] server lang: <none>
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] kex follows: False
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:29:21.809 [DEBUG] [Thread-126591] [transport.py] [_log()] Compression: none
2026-02-11T09:29:21.810 [DEBUG] [Thread-126591] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:29:21.864 [DEBUG] [Thread-126591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:29:21.865 [DEBUG] [Thread-126591] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:29:21.865 [DEBUG] [Thread-126591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:29:21.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:29:21.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:29:21.921 [DEBUG] [Thread-126591] [transport.py] [_log()] userauth is OK
2026-02-11T09:29:21.921 [DEBUG] [Thread-126591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:29:21.921 [DEBUG] [Thread-126591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:29:21.922 [DEBUG] [Thread-126591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:29:21.922 [DEBUG] [Thread-126591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:29:21.941 [INFO] [Thread-126591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:29:21.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:29:21.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:29:22.795 [DEBUG] [Thread-126591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:29:22.795 [DEBUG] [Thread-126591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:29:22.833 [DEBUG] [Thread-126591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:29:22.834 [DEBUG] [Thread-126591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:29:22.843 [DEBUG] [Thread-126591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:29:22.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:29:22.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:29:22.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:29:22.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:29:22.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:29:22.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:29:22.877 [DEBUG] [Thread-126591] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:29:24.949 [DEBUG] [Thread-126593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:40.002 [DEBUG] [Thread-126594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:42.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:42.420 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:52.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:29:52.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:29:52.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:29:55.039 [DEBUG] [Thread-126595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:29:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 29, 11), 12.04, 46.18, 0.0, 13.82, 20.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:29:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:29:11
2026-02-11T09:29:55.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:29:55.768 [DEBUG] [Thread-126596] [transport.py] [_log()] starting thread (client mode): 0xa5759450
2026-02-11T09:29:55.768 [DEBUG] [Thread-126596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:29:55.787 [DEBUG] [Thread-126596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:29:55.787 [INFO] [Thread-126596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] client lang: <none>
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] server lang: <none>
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] kex follows: False
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] Compression: none
2026-02-11T09:29:55.791 [DEBUG] [Thread-126596] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:29:55.808 [DEBUG] [Thread-126596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:29:55.809 [DEBUG] [Thread-126596] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:29:55.809 [DEBUG] [Thread-126596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:29:55.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:29:55.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:29:55.811 [DEBUG] [Thread-126596] [transport.py] [_log()] userauth is OK
2026-02-11T09:29:55.811 [DEBUG] [Thread-126596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:29:55.812 [DEBUG] [Thread-126596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:29:55.812 [DEBUG] [Thread-126596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:29:55.812 [DEBUG] [Thread-126596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:29:55.836 [INFO] [Thread-126596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:29:55.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:29:56.489 [DEBUG] [Thread-126596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:29:56.489 [DEBUG] [Thread-126596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:29:56.489 [DEBUG] [Thread-126596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:29:56.529 [DEBUG] [Thread-126596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:29:56.530 [DEBUG] [Thread-126596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:29:56.533 [DEBUG] [Thread-126596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:29:56.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:29:56.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:29:56.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:29:56.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:29:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:29:56.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:29:56.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:29:56.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:29:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:29:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.311945 -999.00  +21.00  16.44     51  +10.60 1 2 1 1 1   888    0 10.37 5.96 ----- 15.6 16.4 273.4 19.3 28.4 -24.2 27.7 -21.8 25.5 -21.9 26.3 -21.7
2026-02-11T09:29:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:29:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:29:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.311945
2026-02-11T09:29:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:29:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:29:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:29:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:29:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:29:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:29:11', tmtdew=12.04, humidity=46.18, cloud=0.0, wind=13.82, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:29:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:29:56.561 [DEBUG] [Thread-126596] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:29:56.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:29:56.668 [DEBUG] [Thread-126599] [transport.py] [_log()] starting thread (client mode): 0xa57b3d90
2026-02-11T09:29:56.669 [DEBUG] [Thread-126599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:29:56.683 [DEBUG] [Thread-126599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:29:56.683 [INFO] [Thread-126599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:29:56.691 [DEBUG] [Thread-126599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] client lang: <none>
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] server lang: <none>
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] kex follows: False
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] Compression: none
2026-02-11T09:29:56.692 [DEBUG] [Thread-126599] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:29:56.748 [DEBUG] [Thread-126599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:29:56.749 [DEBUG] [Thread-126599] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:29:56.749 [DEBUG] [Thread-126599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:29:56.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:29:56.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:29:56.808 [DEBUG] [Thread-126599] [transport.py] [_log()] userauth is OK
2026-02-11T09:29:56.808 [DEBUG] [Thread-126599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:29:56.809 [DEBUG] [Thread-126599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:29:56.809 [DEBUG] [Thread-126599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:29:56.809 [DEBUG] [Thread-126599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:29:56.828 [INFO] [Thread-126599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:29:56.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:29:56.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:29:57.650 [DEBUG] [Thread-126599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:29:57.650 [DEBUG] [Thread-126599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:29:57.698 [DEBUG] [Thread-126599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:29:57.698 [DEBUG] [Thread-126599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:29:57.708 [DEBUG] [Thread-126599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:29:57.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:29: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')
2026-02-11T09:29:57.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
2026-02-11T09:29:57.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:29:57.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:29:57.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:29:57.741 [DEBUG] [Thread-126599] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:30:05.984 [DEBUG] [Thread-126601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:30:10.073 [DEBUG] [Thread-126602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:30:25.130 [DEBUG] [Thread-126603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:30:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:30:27.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:30: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
2026-02-11T09:30:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 29, 46), 12.17, 45.82, 0.0, 12.76, 20.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:30:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:29:46
2026-02-11T09:30:30.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:30:30.594 [DEBUG] [Thread-126604] [transport.py] [_log()] starting thread (client mode): 0xa2d90eb0
2026-02-11T09:30:30.595 [DEBUG] [Thread-126604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:30:30.614 [DEBUG] [Thread-126604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:30:30.614 [INFO] [Thread-126604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:30:30.615 [DEBUG] [Thread-126604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] client lang: <none>
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] server lang: <none>
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] kex follows: False
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:30:30.616 [DEBUG] [Thread-126604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:30:30.617 [DEBUG] [Thread-126604] [transport.py] [_log()] Compression: none
2026-02-11T09:30:30.617 [DEBUG] [Thread-126604] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:30:30.630 [DEBUG] [Thread-126604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:30:30.630 [DEBUG] [Thread-126604] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:30:30.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:30:30.631 [DEBUG] [Thread-126604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:30:30.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:30:30.633 [DEBUG] [Thread-126604] [transport.py] [_log()] userauth is OK
2026-02-11T09:30:30.633 [DEBUG] [Thread-126604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:30:30.633 [DEBUG] [Thread-126604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:30:30.634 [DEBUG] [Thread-126604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:30:30.634 [DEBUG] [Thread-126604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:30:30.659 [INFO] [Thread-126604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:30:30.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:30:31.312 [DEBUG] [Thread-126604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:30:31.312 [DEBUG] [Thread-126604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:30:31.312 [DEBUG] [Thread-126604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:30:31.353 [DEBUG] [Thread-126604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:30:31.354 [DEBUG] [Thread-126604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:30:31.357 [DEBUG] [Thread-126604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:30:31.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:30:31.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:30:31.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:30:31.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:30:31.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:30:31.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:30:31.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:30:31.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:30:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:30:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.312292 -999.00  +20.90   8.74     51  +10.60 1 2 1 1 1   888    0 10.41 5.76 ----- 12.0 8.7 274.8 19.1 28.6 -23.5 27.7 -21.8 25.4 -20.3 26.2 -22.8
2026-02-11T09:30:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:30:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:30:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.312292
2026-02-11T09:30:31.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:30:31.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:30:31.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:30:31.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:30:31.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:30:31.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:29:46', tmtdew=12.17, humidity=45.82, cloud=0.0, wind=12.76, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:29:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:30:31.386 [DEBUG] [Thread-126604] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:30:31.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:30:31.491 [DEBUG] [Thread-126607] [transport.py] [_log()] starting thread (client mode): 0xa2d92380
2026-02-11T09:30:31.491 [DEBUG] [Thread-126607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:30:31.506 [DEBUG] [Thread-126607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:30:31.506 [INFO] [Thread-126607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:30:31.513 [DEBUG] [Thread-126607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:30:31.514 [DEBUG] [Thread-126607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:30:31.514 [DEBUG] [Thread-126607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:30:31.514 [DEBUG] [Thread-126607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:30:31.514 [DEBUG] [Thread-126607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:30:31.514 [DEBUG] [Thread-126607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] client lang: <none>
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] server lang: <none>
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] kex follows: False
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:30:31.515 [DEBUG] [Thread-126607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:30:31.516 [DEBUG] [Thread-126607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:30:31.516 [DEBUG] [Thread-126607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:30:31.516 [DEBUG] [Thread-126607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:30:31.516 [DEBUG] [Thread-126607] [transport.py] [_log()] Compression: none
2026-02-11T09:30:31.516 [DEBUG] [Thread-126607] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:30:31.576 [DEBUG] [Thread-126607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:30:31.577 [DEBUG] [Thread-126607] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:30:31.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:30:31.578 [DEBUG] [Thread-126607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:30:31.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:30:31.632 [DEBUG] [Thread-126607] [transport.py] [_log()] userauth is OK
2026-02-11T09:30:31.632 [DEBUG] [Thread-126607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:30:31.633 [DEBUG] [Thread-126607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:30:31.633 [DEBUG] [Thread-126607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:30:31.633 [DEBUG] [Thread-126607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:30:31.654 [INFO] [Thread-126607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:30:31.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:30:31.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:30:32.491 [DEBUG] [Thread-126607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:30:32.491 [DEBUG] [Thread-126607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:30:32.542 [DEBUG] [Thread-126607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:30:32.542 [DEBUG] [Thread-126607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:30:32.552 [DEBUG] [Thread-126607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:30:32.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:30:32.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:30:32.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:30:32.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:30:32.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:30:32.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:30:32.589 [DEBUG] [Thread-126607] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:30:40.167 [DEBUG] [Thread-126609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:30:42.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:30:42.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:30:55.217 [DEBUG] [Thread-126610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:31:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:31:02.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:31:02.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 30, 23), 12.32, 45.38, 0.0, 12.63, 21.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:30:23
2026-02-11T09:31:05.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:31:05.814 [DEBUG] [Thread-126611] [transport.py] [_log()] starting thread (client mode): 0xa57584c0
2026-02-11T09:31:05.814 [DEBUG] [Thread-126611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:31:05.833 [DEBUG] [Thread-126611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:31:05.833 [INFO] [Thread-126611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:31:05.836 [DEBUG] [Thread-126611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] client lang: <none>
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] server lang: <none>
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] kex follows: False
2026-02-11T09:31:05.837 [DEBUG] [Thread-126611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:31:05.838 [DEBUG] [Thread-126611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:31:05.838 [DEBUG] [Thread-126611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:31:05.838 [DEBUG] [Thread-126611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:31:05.838 [DEBUG] [Thread-126611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:31:05.838 [DEBUG] [Thread-126611] [transport.py] [_log()] Compression: none
2026-02-11T09:31:05.838 [DEBUG] [Thread-126611] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:31:05.854 [DEBUG] [Thread-126611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:31:05.855 [DEBUG] [Thread-126611] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:31:05.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:31:05.856 [DEBUG] [Thread-126611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:31:05.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:31:05.858 [DEBUG] [Thread-126611] [transport.py] [_log()] userauth is OK
2026-02-11T09:31:05.858 [DEBUG] [Thread-126611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:31:05.858 [DEBUG] [Thread-126611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:31:05.858 [DEBUG] [Thread-126611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:31:05.858 [DEBUG] [Thread-126611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:31:05.883 [INFO] [Thread-126611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:31:05.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:31:06.016 [DEBUG] [Thread-126613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:31:06.498 [DEBUG] [Thread-126611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:31:06.498 [DEBUG] [Thread-126611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:31:06.499 [DEBUG] [Thread-126611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:31:06.540 [DEBUG] [Thread-126611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:31:06.540 [DEBUG] [Thread-126611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:31:06.544 [DEBUG] [Thread-126611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:31:06.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:31:06.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:31:06.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:31:06.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:31:06.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:31:06.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:31:06.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:31:06.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:31:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:31:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.312639 -999.00  +21.00   7.93     51  +10.70 1 2 1 1 1   888    0 10.23 5.13 ----- 6.0 7.9 282.4 11.4 28.6 -22.5 27.8 -20.7 25.5 -21.5 26.2 -21.8
2026-02-11T09:31:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:31:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:31:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.312639
2026-02-11T09:31:06.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:31:06.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:31:06.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:31:06.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:31:06.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:31:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:30:23', tmtdew=12.32, humidity=45.38, cloud=0.0, wind=12.63, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:30:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:31:06.574 [DEBUG] [Thread-126611] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:31:06.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:31:06.665 [DEBUG] [Thread-126615] [transport.py] [_log()] starting thread (client mode): 0xa57599c0
2026-02-11T09:31:06.665 [DEBUG] [Thread-126615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:31:06.680 [DEBUG] [Thread-126615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:31:06.680 [INFO] [Thread-126615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] client lang: <none>
2026-02-11T09:31:06.687 [DEBUG] [Thread-126615] [transport.py] [_log()] server lang: <none>
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] kex follows: False
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] Compression: none
2026-02-11T09:31:06.688 [DEBUG] [Thread-126615] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:31:06.744 [DEBUG] [Thread-126615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:31:06.745 [DEBUG] [Thread-126615] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:31:06.745 [DEBUG] [Thread-126615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:31:06.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:31:06.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:31:06.800 [DEBUG] [Thread-126615] [transport.py] [_log()] userauth is OK
2026-02-11T09:31:06.801 [DEBUG] [Thread-126615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:31:06.801 [DEBUG] [Thread-126615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:31:06.801 [DEBUG] [Thread-126615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:31:06.801 [DEBUG] [Thread-126615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:31:06.819 [INFO] [Thread-126615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:31:06.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:31:06.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:31:07.667 [DEBUG] [Thread-126615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:31:07.667 [DEBUG] [Thread-126615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:31:07.716 [DEBUG] [Thread-126615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:31:07.716 [DEBUG] [Thread-126615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:31:07.729 [DEBUG] [Thread-126615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:31:07.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:31:07.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:31:07.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:31:07.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:31:07.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:31:07.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:31:07.778 [DEBUG] [Thread-126615] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:31:10.255 [DEBUG] [Thread-126617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:31:25.321 [DEBUG] [Thread-126618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:31:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:31:37.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:31:37.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:31:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 30, 58), 12.21, 45.68, 0.0, 12.39, 20.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:31:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:30:58
2026-02-11T09:31:40.356 [DEBUG] [Thread-126619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:31:40.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:31:40.804 [DEBUG] [Thread-126620] [transport.py] [_log()] starting thread (client mode): 0xa2d91780
2026-02-11T09:31:40.804 [DEBUG] [Thread-126620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:31:40.824 [DEBUG] [Thread-126620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:31:40.824 [INFO] [Thread-126620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:40.827 [DEBUG] [Thread-126620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] client lang: <none>
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] server lang: <none>
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] kex follows: False
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] Compression: none
2026-02-11T09:31:40.828 [DEBUG] [Thread-126620] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:31:40.844 [DEBUG] [Thread-126620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:31:40.845 [DEBUG] [Thread-126620] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:31:40.845 [DEBUG] [Thread-126620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:31:40.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:31:40.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:31:40.848 [DEBUG] [Thread-126620] [transport.py] [_log()] userauth is OK
2026-02-11T09:31:40.848 [DEBUG] [Thread-126620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:31:40.848 [DEBUG] [Thread-126620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:31:40.848 [DEBUG] [Thread-126620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:31:40.848 [DEBUG] [Thread-126620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:31:40.884 [INFO] [Thread-126620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:31:40.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:31:41.496 [DEBUG] [Thread-126620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:31:41.497 [DEBUG] [Thread-126620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:31:41.497 [DEBUG] [Thread-126620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:31:41.537 [DEBUG] [Thread-126620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:31:41.538 [DEBUG] [Thread-126620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:31:41.541 [DEBUG] [Thread-126620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:31:41.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:31:41.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:31:41.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:31:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:31:41.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:31:41.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:31:41.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:31:41.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:31:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:31:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.312987 -999.00  +20.90  11.27     51  +10.60 1 2 1 1 1   888    0 10.37 5.64 ----- 13.3 11.3 262.0 13.2 28.6 -24.3 27.8 -21.4 25.6 -20.3 26.3 -22.2
2026-02-11T09:31:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:31:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:31:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.312987
2026-02-11T09:31:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:31:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:31:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:31:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:31:41.566 [DEBUG] [Thread-126620] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:31:41.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:31:41.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:30:58', tmtdew=12.21, humidity=45.68, cloud=0.0, wind=12.39, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:30:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:31:41.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:31:41.666 [DEBUG] [Thread-126623] [transport.py] [_log()] starting thread (client mode): 0xa2d92590
2026-02-11T09:31:41.666 [DEBUG] [Thread-126623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:31:41.683 [DEBUG] [Thread-126623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:31:41.683 [INFO] [Thread-126623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:31:41.690 [DEBUG] [Thread-126623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] client lang: <none>
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] server lang: <none>
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] kex follows: False
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:31:41.691 [DEBUG] [Thread-126623] [transport.py] [_log()] Compression: none
2026-02-11T09:31:41.692 [DEBUG] [Thread-126623] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:31:41.749 [DEBUG] [Thread-126623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:31:41.750 [DEBUG] [Thread-126623] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:31:41.750 [DEBUG] [Thread-126623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:31:41.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:31:41.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:31:41.808 [DEBUG] [Thread-126623] [transport.py] [_log()] userauth is OK
2026-02-11T09:31:41.809 [DEBUG] [Thread-126623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:31:41.809 [DEBUG] [Thread-126623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:31:41.809 [DEBUG] [Thread-126623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:31:41.809 [DEBUG] [Thread-126623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:31:41.835 [INFO] [Thread-126623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:31:41.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:31:41.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:31:42.659 [DEBUG] [Thread-126623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:31:42.659 [DEBUG] [Thread-126623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:31:42.705 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:31:42.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:31:42.706 [DEBUG] [Thread-126623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:31:42.706 [DEBUG] [Thread-126623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:31:42.715 [DEBUG] [Thread-126623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:31:42.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:31:42.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:31:42.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:31:42.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:31:42.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:31:42.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:31:42.749 [DEBUG] [Thread-126623] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:31:55.392 [DEBUG] [Thread-126625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:32:06.051 [DEBUG] [Thread-126626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:32:10.445 [DEBUG] [Thread-126627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:32:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:32:12.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:32:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:32:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 31, 35), 12.5, 44.7, 0.0, 13.09, 21.37, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:32:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:31:35
2026-02-11T09:32:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:32:15.374 [DEBUG] [Thread-126628] [transport.py] [_log()] starting thread (client mode): 0xa57b35b0
2026-02-11T09:32:15.375 [DEBUG] [Thread-126628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:32:15.394 [DEBUG] [Thread-126628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:32:15.394 [INFO] [Thread-126628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:32:15.397 [DEBUG] [Thread-126628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:32:15.397 [DEBUG] [Thread-126628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:32:15.397 [DEBUG] [Thread-126628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:32:15.397 [DEBUG] [Thread-126628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:15.397 [DEBUG] [Thread-126628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] client lang: <none>
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] server lang: <none>
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] kex follows: False
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] Compression: none
2026-02-11T09:32:15.398 [DEBUG] [Thread-126628] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:32:15.420 [DEBUG] [Thread-126628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:32:15.421 [DEBUG] [Thread-126628] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:32:15.422 [DEBUG] [Thread-126628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:32:15.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:32:15.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:32:15.424 [DEBUG] [Thread-126628] [transport.py] [_log()] userauth is OK
2026-02-11T09:32:15.425 [DEBUG] [Thread-126628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:32:15.425 [DEBUG] [Thread-126628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:32:15.425 [DEBUG] [Thread-126628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:32:15.425 [DEBUG] [Thread-126628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:32:15.448 [INFO] [Thread-126628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:32:15.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:32:16.275 [DEBUG] [Thread-126628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:32:16.275 [DEBUG] [Thread-126628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:32:16.276 [DEBUG] [Thread-126628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:32:16.316 [DEBUG] [Thread-126628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:32:16.317 [DEBUG] [Thread-126628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:32:16.320 [DEBUG] [Thread-126628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:32:16.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:32:16.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:32:16.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:32:16.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:32:16.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:32:16.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:32:16.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:32:16.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:32:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:32:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.313681 -999.00  +20.80   7.93     52  +10.80 1 2 1 1 1   888    0 10.22 4.24 ----- 8.1 7.9 262.6 11.2 28.6 -24.0 27.8 -20.9 25.6 -20.0 26.3 -21.4
2026-02-11T09:32:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:32:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:32:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.313681
2026-02-11T09:32:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:32:16.346 [DEBUG] [Thread-126628] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:32:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:32:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:32:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:32:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:32:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:31:35', tmtdew=12.5, humidity=44.7, cloud=0.0, wind=13.09, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:31:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:32:16.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:32:16.444 [DEBUG] [Thread-126631] [transport.py] [_log()] starting thread (client mode): 0xa57b2dd0
2026-02-11T09:32:16.445 [DEBUG] [Thread-126631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:32:16.459 [DEBUG] [Thread-126631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:32:16.459 [INFO] [Thread-126631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:32:16.467 [DEBUG] [Thread-126631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] client lang: <none>
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] server lang: <none>
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] kex follows: False
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] Compression: none
2026-02-11T09:32:16.468 [DEBUG] [Thread-126631] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:32:16.525 [DEBUG] [Thread-126631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:32:16.525 [DEBUG] [Thread-126631] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:32:16.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:32:16.526 [DEBUG] [Thread-126631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:32:16.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:32:16.581 [DEBUG] [Thread-126631] [transport.py] [_log()] userauth is OK
2026-02-11T09:32:16.581 [DEBUG] [Thread-126631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:32:16.581 [DEBUG] [Thread-126631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:32:16.581 [DEBUG] [Thread-126631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:32:16.581 [DEBUG] [Thread-126631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:32:16.600 [INFO] [Thread-126631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:32:16.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:32:16.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:32:17.438 [DEBUG] [Thread-126631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:32:17.438 [DEBUG] [Thread-126631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:32:17.486 [DEBUG] [Thread-126631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:32:17.487 [DEBUG] [Thread-126631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:32:17.496 [DEBUG] [Thread-126631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:32:17.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:32:17.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:32:17.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:32:17.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:32:17.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:32:17.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:32:17.534 [DEBUG] [Thread-126631] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:32:25.482 [DEBUG] [Thread-126633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:32:40.537 [DEBUG] [Thread-126634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:32:42.844 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:32:42.845 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:32:47.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:32:47.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:32:47.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:32:49.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 32, 11), 11.9, 46.68, 0.0, 9.97, 20.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:32:49.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:32:11
2026-02-11T09:32:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:32:50.183 [DEBUG] [Thread-126635] [transport.py] [_log()] starting thread (client mode): 0xa2d03e20
2026-02-11T09:32:50.183 [DEBUG] [Thread-126635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:32:50.202 [DEBUG] [Thread-126635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:32:50.203 [INFO] [Thread-126635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] client lang: <none>
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] server lang: <none>
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] kex follows: False
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] Compression: none
2026-02-11T09:32:50.206 [DEBUG] [Thread-126635] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:32:50.224 [DEBUG] [Thread-126635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:32:50.224 [DEBUG] [Thread-126635] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:32:50.225 [DEBUG] [Thread-126635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:32:50.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:32:50.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:32:50.227 [DEBUG] [Thread-126635] [transport.py] [_log()] userauth is OK
2026-02-11T09:32:50.227 [DEBUG] [Thread-126635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:32:50.227 [DEBUG] [Thread-126635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:32:50.227 [DEBUG] [Thread-126635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:32:50.227 [DEBUG] [Thread-126635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:32:50.251 [INFO] [Thread-126635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:32:50.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:32:50.808 [DEBUG] [Thread-126635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:32:50.808 [DEBUG] [Thread-126635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:32:50.808 [DEBUG] [Thread-126635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:32:50.849 [DEBUG] [Thread-126635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:32:50.849 [DEBUG] [Thread-126635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:32:50.852 [DEBUG] [Thread-126635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:32:50.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:32:50.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:32:50.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:32:50.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:32:50.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:32:50.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:32:50.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:32:50.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:32:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:32:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.314028 -999.00  +20.90  12.54     52  +10.80 1 2 1 1 1   888    0 10.22 2.02 ----- 13.8 12.5 276.8 13.4 28.8 -23.9 27.9 -21.7 25.7 -20.4 26.4 -22.3
2026-02-11T09:32:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:32:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:32:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.314028
2026-02-11T09:32:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:32:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:32:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:32:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:32:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:32:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:32:11', tmtdew=11.9, humidity=46.68, cloud=0.0, wind=9.97, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:32:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:32:50.880 [DEBUG] [Thread-126635] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:32:50.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:32:50.976 [DEBUG] [Thread-126638] [transport.py] [_log()] starting thread (client mode): 0xa2d03430
2026-02-11T09:32:50.976 [DEBUG] [Thread-126638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:32:50.990 [DEBUG] [Thread-126638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:32:50.991 [INFO] [Thread-126638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:32:50.998 [DEBUG] [Thread-126638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:32:50.998 [DEBUG] [Thread-126638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:32:50.998 [DEBUG] [Thread-126638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:32:50.998 [DEBUG] [Thread-126638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] client lang: <none>
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] server lang: <none>
2026-02-11T09:32:50.999 [DEBUG] [Thread-126638] [transport.py] [_log()] kex follows: False
2026-02-11T09:32:51.000 [DEBUG] [Thread-126638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:32:51.000 [DEBUG] [Thread-126638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:32:51.000 [DEBUG] [Thread-126638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:32:51.000 [DEBUG] [Thread-126638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:32:51.000 [DEBUG] [Thread-126638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:32:51.000 [DEBUG] [Thread-126638] [transport.py] [_log()] Compression: none
2026-02-11T09:32:51.001 [DEBUG] [Thread-126638] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:32:51.061 [DEBUG] [Thread-126638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:32:51.062 [DEBUG] [Thread-126638] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:32:51.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:32:51.063 [DEBUG] [Thread-126638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:32:51.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:32:51.120 [DEBUG] [Thread-126638] [transport.py] [_log()] userauth is OK
2026-02-11T09:32:51.120 [DEBUG] [Thread-126638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:32:51.120 [DEBUG] [Thread-126638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:32:51.121 [DEBUG] [Thread-126638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:32:51.121 [DEBUG] [Thread-126638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:32:51.141 [INFO] [Thread-126638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:32:51.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:32:51.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:32:52.003 [DEBUG] [Thread-126638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:32:52.003 [DEBUG] [Thread-126638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:32:52.051 [DEBUG] [Thread-126638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:32:52.051 [DEBUG] [Thread-126638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:32:52.062 [DEBUG] [Thread-126638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:32:52.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:32:52.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:32:52.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:32:52.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:32:52.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:32:52.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:32:52.098 [DEBUG] [Thread-126638] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:32:55.570 [DEBUG] [Thread-126640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:06.105 [DEBUG] [Thread-126641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:10.623 [DEBUG] [Thread-126642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:22.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:33:22.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:33:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:33:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 32, 46), 11.89, 46.58, 0.0, 11.19, 21.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:33:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:32:46
2026-02-11T09:33:24.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:33:24.594 [DEBUG] [Thread-126643] [transport.py] [_log()] starting thread (client mode): 0xa57b0bb0
2026-02-11T09:33:24.595 [DEBUG] [Thread-126643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:33:24.614 [DEBUG] [Thread-126643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:33:24.614 [INFO] [Thread-126643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:33:24.617 [DEBUG] [Thread-126643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:33:24.617 [DEBUG] [Thread-126643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:33:24.617 [DEBUG] [Thread-126643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:33:24.617 [DEBUG] [Thread-126643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:24.617 [DEBUG] [Thread-126643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:24.617 [DEBUG] [Thread-126643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] client lang: <none>
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] server lang: <none>
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] kex follows: False
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] Compression: none
2026-02-11T09:33:24.618 [DEBUG] [Thread-126643] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:33:24.635 [DEBUG] [Thread-126643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:33:24.635 [DEBUG] [Thread-126643] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:33:24.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:33:24.636 [DEBUG] [Thread-126643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:33:24.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:33:24.639 [DEBUG] [Thread-126643] [transport.py] [_log()] userauth is OK
2026-02-11T09:33:24.639 [DEBUG] [Thread-126643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:33:24.639 [DEBUG] [Thread-126643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:33:24.639 [DEBUG] [Thread-126643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:33:24.639 [DEBUG] [Thread-126643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:33:24.658 [INFO] [Thread-126643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:33:24.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:33:25.226 [DEBUG] [Thread-126643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:33:25.227 [DEBUG] [Thread-126643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:33:25.227 [DEBUG] [Thread-126643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:33:25.267 [DEBUG] [Thread-126643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:33:25.268 [DEBUG] [Thread-126643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:33:25.271 [DEBUG] [Thread-126643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:33:25.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:33:25.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:33:25.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:33:25.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:33:25.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:33:25.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:33:25.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:33:25.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:33:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:33:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.314375 -999.00  +20.80   8.61     52  +10.60 1 2 1 1 1   888    0 10.34 1.77 ----- 9.9 8.6 302.6 13.6 28.8 -24.2 27.9 -20.9 25.5 -22.2 26.4 -21.5
2026-02-11T09:33:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:33:25.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:33:25.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.314375
2026-02-11T09:33:25.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:33:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:33:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:33:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:33:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:33:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:32:46', tmtdew=11.89, humidity=46.58, cloud=0.0, wind=11.19, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:32:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:33:25.298 [DEBUG] [Thread-126643] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:33:25.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:33:25.395 [DEBUG] [Thread-126646] [transport.py] [_log()] starting thread (client mode): 0xa57b3070
2026-02-11T09:33:25.395 [DEBUG] [Thread-126646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:33:25.412 [DEBUG] [Thread-126646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:33:25.412 [INFO] [Thread-126646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:33:25.419 [DEBUG] [Thread-126646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] client lang: <none>
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] server lang: <none>
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] kex follows: False
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:33:25.420 [DEBUG] [Thread-126646] [transport.py] [_log()] Compression: none
2026-02-11T09:33:25.421 [DEBUG] [Thread-126646] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:33:25.477 [DEBUG] [Thread-126646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:33:25.477 [DEBUG] [Thread-126646] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:33:25.478 [DEBUG] [Thread-126646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:33:25.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:33:25.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:33:25.532 [DEBUG] [Thread-126646] [transport.py] [_log()] userauth is OK
2026-02-11T09:33:25.533 [DEBUG] [Thread-126646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:33:25.533 [DEBUG] [Thread-126646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:33:25.533 [DEBUG] [Thread-126646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:33:25.533 [DEBUG] [Thread-126646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:33:25.552 [INFO] [Thread-126646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:33:25.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:33:25.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:33:25.656 [DEBUG] [Thread-126648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:26.405 [DEBUG] [Thread-126646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:33:26.406 [DEBUG] [Thread-126646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:33:26.453 [DEBUG] [Thread-126646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:33:26.454 [DEBUG] [Thread-126646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:33:26.463 [DEBUG] [Thread-126646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:33:26.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:33:26.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:33:26.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:33:26.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:33:26.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:33:26.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:33:26.505 [DEBUG] [Thread-126646] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:33:40.710 [DEBUG] [Thread-126649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:42.989 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:42.990 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:55.746 [DEBUG] [Thread-126650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:33:56.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:33:56.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:33:56.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:33:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 33, 22), 11.93, 46.46, 0.0, 10.46, 21.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:33:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:33:22
2026-02-11T09:33:58.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:33:58.874 [DEBUG] [Thread-126651] [transport.py] [_log()] starting thread (client mode): 0xa2dc2e90
2026-02-11T09:33:58.875 [DEBUG] [Thread-126651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:33:58.895 [DEBUG] [Thread-126651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:33:58.895 [INFO] [Thread-126651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:33:58.898 [DEBUG] [Thread-126651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:33:58.898 [DEBUG] [Thread-126651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:33:58.898 [DEBUG] [Thread-126651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:33:58.898 [DEBUG] [Thread-126651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] client lang: <none>
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] server lang: <none>
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] kex follows: False
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:33:58.899 [DEBUG] [Thread-126651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:33:58.900 [DEBUG] [Thread-126651] [transport.py] [_log()] Compression: none
2026-02-11T09:33:58.900 [DEBUG] [Thread-126651] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:33:58.919 [DEBUG] [Thread-126651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:33:58.920 [DEBUG] [Thread-126651] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:33:58.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:33:58.921 [DEBUG] [Thread-126651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:33:58.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:33:58.923 [DEBUG] [Thread-126651] [transport.py] [_log()] userauth is OK
2026-02-11T09:33:58.923 [DEBUG] [Thread-126651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:33:58.923 [DEBUG] [Thread-126651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:33:58.923 [DEBUG] [Thread-126651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:33:58.923 [DEBUG] [Thread-126651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:33:58.948 [INFO] [Thread-126651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:33:58.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:33:59.588 [DEBUG] [Thread-126651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:33:59.588 [DEBUG] [Thread-126651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:33:59.588 [DEBUG] [Thread-126651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:33:59.630 [DEBUG] [Thread-126651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:33:59.630 [DEBUG] [Thread-126651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:33:59.633 [DEBUG] [Thread-126651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:33:59.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:33:59.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:33:59.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:33:59.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:33:59.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:33:59.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:33:59.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:33:59.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:33:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:33:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.314723 -999.00  +21.00  13.95     51  +10.70 1 2 1 1 1   888    0 10.09 1.30 ----- 15.2 13.9 283.9 17.9 28.6 -23.8 27.8 -21.4 25.4 -24.0 26.4 -22.7
2026-02-11T09:33:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:33:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:33:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.314723
2026-02-11T09:33:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:33:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:33:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:33:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:33:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:33:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:33:22', tmtdew=11.93, humidity=46.46, cloud=0.0, wind=10.46, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:33:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:33:59.657 [DEBUG] [Thread-126651] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:33:59.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:33:59.753 [DEBUG] [Thread-126654] [transport.py] [_log()] starting thread (client mode): 0xa2d90b80
2026-02-11T09:33:59.753 [DEBUG] [Thread-126654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:33:59.769 [DEBUG] [Thread-126654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:33:59.769 [INFO] [Thread-126654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] client lang: <none>
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] server lang: <none>
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] kex follows: False
2026-02-11T09:33:59.778 [DEBUG] [Thread-126654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:33:59.779 [DEBUG] [Thread-126654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:33:59.779 [DEBUG] [Thread-126654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:33:59.779 [DEBUG] [Thread-126654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:33:59.779 [DEBUG] [Thread-126654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:33:59.779 [DEBUG] [Thread-126654] [transport.py] [_log()] Compression: none
2026-02-11T09:33:59.779 [DEBUG] [Thread-126654] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:33:59.837 [DEBUG] [Thread-126654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:33:59.838 [DEBUG] [Thread-126654] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:33:59.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:33:59.840 [DEBUG] [Thread-126654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:33:59.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:33:59.897 [DEBUG] [Thread-126654] [transport.py] [_log()] userauth is OK
2026-02-11T09:33:59.897 [DEBUG] [Thread-126654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:33:59.897 [DEBUG] [Thread-126654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:33:59.897 [DEBUG] [Thread-126654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:33:59.897 [DEBUG] [Thread-126654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:33:59.916 [INFO] [Thread-126654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:33:59.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:33:59.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:34:00.721 [DEBUG] [Thread-126654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:34:00.722 [DEBUG] [Thread-126654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:34:00.770 [DEBUG] [Thread-126654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:34:00.770 [DEBUG] [Thread-126654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:34:00.779 [DEBUG] [Thread-126654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:34:00.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:34: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')
2026-02-11T09:34:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:34:00.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:34:00.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:34:00.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:34:00.821 [DEBUG] [Thread-126654] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:34:06.148 [DEBUG] [Thread-126656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:34:10.779 [DEBUG] [Thread-126657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:34:25.829 [DEBUG] [Thread-126658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:34:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:34:30.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:34: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
2026-02-11T09:34:32.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 33, 57), 12.12, 45.65, 0.0, 12.65, 21.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:34:32.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:33:57
2026-02-11T09:34:32.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:34:33.162 [DEBUG] [Thread-126659] [transport.py] [_log()] starting thread (client mode): 0xa57e2a40
2026-02-11T09:34:33.163 [DEBUG] [Thread-126659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:34:33.183 [DEBUG] [Thread-126659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:34:33.183 [INFO] [Thread-126659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] client lang: <none>
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] server lang: <none>
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] kex follows: False
2026-02-11T09:34:33.185 [DEBUG] [Thread-126659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:34:33.186 [DEBUG] [Thread-126659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:34:33.186 [DEBUG] [Thread-126659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:34:33.186 [DEBUG] [Thread-126659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:34:33.186 [DEBUG] [Thread-126659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:34:33.186 [DEBUG] [Thread-126659] [transport.py] [_log()] Compression: none
2026-02-11T09:34:33.186 [DEBUG] [Thread-126659] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:34:33.199 [DEBUG] [Thread-126659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:34:33.199 [DEBUG] [Thread-126659] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:34:33.200 [DEBUG] [Thread-126659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:34:33.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:34:33.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:34:33.202 [DEBUG] [Thread-126659] [transport.py] [_log()] userauth is OK
2026-02-11T09:34:33.202 [DEBUG] [Thread-126659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:34:33.202 [DEBUG] [Thread-126659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:34:33.202 [DEBUG] [Thread-126659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:34:33.202 [DEBUG] [Thread-126659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:34:33.226 [INFO] [Thread-126659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:34:33.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:34:33.824 [DEBUG] [Thread-126659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:34:33.824 [DEBUG] [Thread-126659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:34:33.825 [DEBUG] [Thread-126659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:34:33.865 [DEBUG] [Thread-126659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:34:33.865 [DEBUG] [Thread-126659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:34:33.867 [DEBUG] [Thread-126659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:34:33.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:34:33.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:34:33.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:34:33.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:34:33.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:34:33.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:34:33.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:34:33.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:34:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:34:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.315070 -999.00  +20.80  15.26     51  +10.50 1 2 1 1 1   888    0 10.17 0.84 ----- 14.7 15.3 269.0 20.7 28.6 -23.8 27.8 -21.4 25.3 -22.9 26.2 -23.5
2026-02-11T09:34:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:34:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:34:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.315070
2026-02-11T09:34:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:34:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:34:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:34:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:34:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:34:33.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:33:57', tmtdew=12.12, humidity=45.65, cloud=0.0, wind=12.65, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:33:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:34:33.891 [DEBUG] [Thread-126659] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:34:33.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:34:33.993 [DEBUG] [Thread-126662] [transport.py] [_log()] starting thread (client mode): 0xa2dfa650
2026-02-11T09:34:33.993 [DEBUG] [Thread-126662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:34:34.012 [DEBUG] [Thread-126662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:34:34.012 [INFO] [Thread-126662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:34:34.019 [DEBUG] [Thread-126662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] client lang: <none>
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] server lang: <none>
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] kex follows: False
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:34:34.020 [DEBUG] [Thread-126662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:34:34.021 [DEBUG] [Thread-126662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:34:34.021 [DEBUG] [Thread-126662] [transport.py] [_log()] Compression: none
2026-02-11T09:34:34.021 [DEBUG] [Thread-126662] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:34:34.081 [DEBUG] [Thread-126662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:34:34.081 [DEBUG] [Thread-126662] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:34:34.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:34:34.082 [DEBUG] [Thread-126662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:34:34.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:34:34.137 [DEBUG] [Thread-126662] [transport.py] [_log()] userauth is OK
2026-02-11T09:34:34.137 [DEBUG] [Thread-126662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:34:34.137 [DEBUG] [Thread-126662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:34:34.137 [DEBUG] [Thread-126662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:34:34.138 [DEBUG] [Thread-126662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:34:34.156 [INFO] [Thread-126662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:34:34.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:34:34.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:34:34.998 [DEBUG] [Thread-126662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:34:34.999 [DEBUG] [Thread-126662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:34:35.047 [DEBUG] [Thread-126662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:34:35.048 [DEBUG] [Thread-126662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:34:35.057 [DEBUG] [Thread-126662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:34:35.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:34:35.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:34:35.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:34:35.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:34:35.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:34:35.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:34:35.093 [DEBUG] [Thread-126662] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:34:40.864 [DEBUG] [Thread-126664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:34:43.128 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:34:43.129 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:34:55.916 [DEBUG] [Thread-126665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:35:05.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:35:05.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:35:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:35:06.181 [DEBUG] [Thread-126666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:35:06.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 34, 32), 12.49, 44.93, 0.0, 18.03, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:35:06.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:34:32
2026-02-11T09:35:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:35:07.359 [DEBUG] [Thread-126667] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ef0
2026-02-11T09:35:07.360 [DEBUG] [Thread-126667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:35:07.377 [DEBUG] [Thread-126667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:35:07.377 [INFO] [Thread-126667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] client lang: <none>
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] server lang: <none>
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] kex follows: False
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:35:07.379 [DEBUG] [Thread-126667] [transport.py] [_log()] Compression: none
2026-02-11T09:35:07.380 [DEBUG] [Thread-126667] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:35:07.390 [DEBUG] [Thread-126667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:35:07.391 [DEBUG] [Thread-126667] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:35:07.392 [DEBUG] [Thread-126667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:35:07.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:35:07.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:35:07.394 [DEBUG] [Thread-126667] [transport.py] [_log()] userauth is OK
2026-02-11T09:35:07.394 [DEBUG] [Thread-126667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:35:07.394 [DEBUG] [Thread-126667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:35:07.394 [DEBUG] [Thread-126667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:35:07.394 [DEBUG] [Thread-126667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:35:07.409 [INFO] [Thread-126667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:35:07.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:35:08.304 [DEBUG] [Thread-126667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:35:08.304 [DEBUG] [Thread-126667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:35:08.304 [DEBUG] [Thread-126667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:35:08.345 [DEBUG] [Thread-126667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:35:08.345 [DEBUG] [Thread-126667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:35:08.348 [DEBUG] [Thread-126667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:35:08.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:35:08.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:35:08.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:35:08.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:35:08.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:35:08.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:35:08.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:35:08.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:35:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:35:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.315764 -999.00  +20.50   5.07     52  +10.50 1 2 1 1 1   888    0 10.10 -1.33 ----- 5.6 5.1 312.2 17.9 28.4 -24.0 27.7 -20.8 25.3 -21.0 26.2 -21.1
2026-02-11T09:35:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:35:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:35:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.315764
2026-02-11T09:35:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:35:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:35:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:35:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:35:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:35:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:34:32', tmtdew=12.49, humidity=44.93, cloud=0.0, wind=18.03, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:34:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:35:08.376 [DEBUG] [Thread-126667] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:35:08.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:35:08.472 [DEBUG] [Thread-126670] [transport.py] [_log()] starting thread (client mode): 0xa2dc0850
2026-02-11T09:35:08.472 [DEBUG] [Thread-126670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:35:08.488 [DEBUG] [Thread-126670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:35:08.488 [INFO] [Thread-126670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:35:08.495 [DEBUG] [Thread-126670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] client lang: <none>
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] server lang: <none>
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] kex follows: False
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] Compression: none
2026-02-11T09:35:08.496 [DEBUG] [Thread-126670] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:35:08.557 [DEBUG] [Thread-126670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:35:08.557 [DEBUG] [Thread-126670] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:35:08.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:35:08.558 [DEBUG] [Thread-126670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:35:08.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:35:08.613 [DEBUG] [Thread-126670] [transport.py] [_log()] userauth is OK
2026-02-11T09:35:08.613 [DEBUG] [Thread-126670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:35:08.613 [DEBUG] [Thread-126670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:35:08.613 [DEBUG] [Thread-126670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:35:08.614 [DEBUG] [Thread-126670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:35:08.638 [INFO] [Thread-126670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:35:08.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:35:08.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:35:09.512 [DEBUG] [Thread-126670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:35:09.513 [DEBUG] [Thread-126670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:35:09.560 [DEBUG] [Thread-126670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:35:09.560 [DEBUG] [Thread-126670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:35:09.570 [DEBUG] [Thread-126670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:35:09.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:35:09.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:35:09.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:35:09.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:35:09.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:35:09.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:35:09.615 [DEBUG] [Thread-126670] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:35:10.950 [DEBUG] [Thread-126672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:35:26.011 [DEBUG] [Thread-126673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:35:39.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:35:39.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:35:39.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:35:41.048 [DEBUG] [Thread-126674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:35:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 35, 8), 12.31, 45.35, 0.0, 12.62, 21.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:35:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:35:08
2026-02-11T09:35:41.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:35:41.906 [DEBUG] [Thread-126675] [transport.py] [_log()] starting thread (client mode): 0xa2dc1bd0
2026-02-11T09:35:41.906 [DEBUG] [Thread-126675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:35:41.926 [DEBUG] [Thread-126675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:35:41.927 [INFO] [Thread-126675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] client lang: <none>
2026-02-11T09:35:41.930 [DEBUG] [Thread-126675] [transport.py] [_log()] server lang: <none>
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] kex follows: False
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] Compression: none
2026-02-11T09:35:41.931 [DEBUG] [Thread-126675] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:35:41.947 [DEBUG] [Thread-126675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:35:41.947 [DEBUG] [Thread-126675] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:35:41.948 [DEBUG] [Thread-126675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:35:41.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:35:41.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:35:41.948 [DEBUG] [Thread-126675] [transport.py] [_log()] userauth is OK
2026-02-11T09:35:41.948 [DEBUG] [Thread-126675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:35:41.948 [DEBUG] [Thread-126675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:35:41.949 [DEBUG] [Thread-126675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:35:41.949 [DEBUG] [Thread-126675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:35:41.961 [INFO] [Thread-126675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:35:41.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:35:42.554 [DEBUG] [Thread-126675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:35:42.555 [DEBUG] [Thread-126675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:35:42.555 [DEBUG] [Thread-126675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:35:42.595 [DEBUG] [Thread-126675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:35:42.595 [DEBUG] [Thread-126675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:35:42.598 [DEBUG] [Thread-126675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:35:42.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:35:42.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:35:42.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:35:42.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:35:42.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:35:42.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:35:42.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:35:42.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:35:42.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:35:42.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.316112 -999.00  +20.60   9.71     52  +10.70 1 2 1 1 1   888    0 10.00 -2.48 ----- 7.2 9.7 273.0 11.1 28.6 -21.9 27.8 -21.0 25.6 -20.4 26.2 -21.9
2026-02-11T09:35:42.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:35:42.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:35:42.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.316112
2026-02-11T09:35:42.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:35:42.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:35:42.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:35:42.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:35:42.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:35:42.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:35:08', tmtdew=12.31, humidity=45.35, cloud=0.0, wind=12.62, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:35:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:35:42.626 [DEBUG] [Thread-126675] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:35:42.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:35:42.720 [DEBUG] [Thread-126678] [transport.py] [_log()] starting thread (client mode): 0xa2d57eb0
2026-02-11T09:35:42.721 [DEBUG] [Thread-126678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:35:42.736 [DEBUG] [Thread-126678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:35:42.736 [INFO] [Thread-126678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] client lang: <none>
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] server lang: <none>
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] kex follows: False
2026-02-11T09:35:42.744 [DEBUG] [Thread-126678] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:35:42.745 [DEBUG] [Thread-126678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:35:42.745 [DEBUG] [Thread-126678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:35:42.745 [DEBUG] [Thread-126678] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:35:42.745 [DEBUG] [Thread-126678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:35:42.745 [DEBUG] [Thread-126678] [transport.py] [_log()] Compression: none
2026-02-11T09:35:42.745 [DEBUG] [Thread-126678] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:35:42.804 [DEBUG] [Thread-126678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:35:42.805 [DEBUG] [Thread-126678] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:35:42.805 [DEBUG] [Thread-126678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:35:42.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:35:42.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:35:42.863 [DEBUG] [Thread-126678] [transport.py] [_log()] userauth is OK
2026-02-11T09:35:42.864 [DEBUG] [Thread-126678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:35:42.864 [DEBUG] [Thread-126678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:35:42.864 [DEBUG] [Thread-126678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:35:42.864 [DEBUG] [Thread-126678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:35:42.888 [INFO] [Thread-126678] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:35:42.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:35:42.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:35:43.269 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:35:43.270 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:35:43.708 [DEBUG] [Thread-126678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:35:43.708 [DEBUG] [Thread-126678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:35:43.757 [DEBUG] [Thread-126678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:35:43.757 [DEBUG] [Thread-126678] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:35:43.766 [DEBUG] [Thread-126678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:35:43.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:35:43.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:35:43.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:35:43.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:35:43.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:35:43.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:35:43.803 [DEBUG] [Thread-126678] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:35:56.085 [DEBUG] [Thread-126680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:36:06.214 [DEBUG] [Thread-126681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:36:11.139 [DEBUG] [Thread-126682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:36:13.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:36:13.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:36:13.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:36:15.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 35, 44), 12.23, 45.45, 0.0, 12.6, 21.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:36:15.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:35:44
2026-02-11T09:36:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:36:16.500 [DEBUG] [Thread-126683] [transport.py] [_log()] starting thread (client mode): 0xa5759540
2026-02-11T09:36:16.500 [DEBUG] [Thread-126683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:36:16.517 [DEBUG] [Thread-126683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:36:16.517 [INFO] [Thread-126683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] client lang: <none>
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] server lang: <none>
2026-02-11T09:36:16.520 [DEBUG] [Thread-126683] [transport.py] [_log()] kex follows: False
2026-02-11T09:36:16.521 [DEBUG] [Thread-126683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:36:16.521 [DEBUG] [Thread-126683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:36:16.521 [DEBUG] [Thread-126683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:36:16.521 [DEBUG] [Thread-126683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:36:16.521 [DEBUG] [Thread-126683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:36:16.521 [DEBUG] [Thread-126683] [transport.py] [_log()] Compression: none
2026-02-11T09:36:16.521 [DEBUG] [Thread-126683] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:36:16.537 [DEBUG] [Thread-126683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:36:16.538 [DEBUG] [Thread-126683] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:36:16.538 [DEBUG] [Thread-126683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:36:16.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:36:16.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:36:16.540 [DEBUG] [Thread-126683] [transport.py] [_log()] userauth is OK
2026-02-11T09:36:16.540 [DEBUG] [Thread-126683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:36:16.540 [DEBUG] [Thread-126683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:36:16.540 [DEBUG] [Thread-126683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:36:16.540 [DEBUG] [Thread-126683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:36:16.564 [INFO] [Thread-126683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:36:16.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:36:17.151 [DEBUG] [Thread-126683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:36:17.151 [DEBUG] [Thread-126683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:36:17.152 [DEBUG] [Thread-126683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:36:17.192 [DEBUG] [Thread-126683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:36:17.193 [DEBUG] [Thread-126683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:36:17.196 [DEBUG] [Thread-126683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:36:17.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:36:17.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:36:17.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:36:17.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:36:17.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:36:17.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:36:17.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:36:17.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:36:17.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:36:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.316806 -999.00  +21.20  13.28     52  +10.90 1 2 1 1 1   888    0 10.23 0.51 ----- 15.6 13.3 290.6 15.5 28.9 -21.9 27.9 -21.1 25.8 -19.4 26.5 -20.8
2026-02-11T09:36:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:36:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:36:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.316806
2026-02-11T09:36:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:36:17.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:36:17.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:36:17.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:36:17.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:36:17.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:35:44', tmtdew=12.23, humidity=45.45, cloud=0.0, wind=12.6, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:36:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:36:17.227 [DEBUG] [Thread-126683] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:36:17.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:36:17.326 [DEBUG] [Thread-126686] [transport.py] [_log()] starting thread (client mode): 0xa57b01f0
2026-02-11T09:36:17.326 [DEBUG] [Thread-126686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:36:17.340 [DEBUG] [Thread-126686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:36:17.341 [INFO] [Thread-126686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:36:17.348 [DEBUG] [Thread-126686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:36:17.348 [DEBUG] [Thread-126686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:36:17.349 [DEBUG] [Thread-126686] [transport.py] [_log()] client lang: <none>
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] server lang: <none>
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] kex follows: False
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:36:17.350 [DEBUG] [Thread-126686] [transport.py] [_log()] Compression: none
2026-02-11T09:36:17.351 [DEBUG] [Thread-126686] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:36:17.411 [DEBUG] [Thread-126686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:36:17.411 [DEBUG] [Thread-126686] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:36:17.412 [DEBUG] [Thread-126686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:36:17.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:36:17.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:36:17.468 [DEBUG] [Thread-126686] [transport.py] [_log()] userauth is OK
2026-02-11T09:36:17.469 [DEBUG] [Thread-126686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:36:17.469 [DEBUG] [Thread-126686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:36:17.469 [DEBUG] [Thread-126686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:36:17.469 [DEBUG] [Thread-126686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:36:17.488 [INFO] [Thread-126686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:36:17.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:36:17.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:36:18.304 [DEBUG] [Thread-126686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:36:18.304 [DEBUG] [Thread-126686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:36:18.351 [DEBUG] [Thread-126686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:36:18.351 [DEBUG] [Thread-126686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:36:18.360 [DEBUG] [Thread-126686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:36:18.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:36:18.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:36:18.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:36:18.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:36:18.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:36:18.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:36:18.396 [DEBUG] [Thread-126686] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:36:26.173 [DEBUG] [Thread-126688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:36:41.225 [DEBUG] [Thread-126689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:36:43.409 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:36:43.411 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:36:48.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:36:48.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:36:48.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:36:50.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 36, 20), 12.2, 45.55, 0.0, 9.83, 21.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:36:50.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:36:20
2026-02-11T09:36:50.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:36:50.740 [DEBUG] [Thread-126690] [transport.py] [_log()] starting thread (client mode): 0xa57b1e70
2026-02-11T09:36:50.740 [DEBUG] [Thread-126690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:36:50.759 [DEBUG] [Thread-126690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:36:50.759 [INFO] [Thread-126690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] client lang: <none>
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] server lang: <none>
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] kex follows: False
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] Compression: none
2026-02-11T09:36:50.762 [DEBUG] [Thread-126690] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:36:50.771 [DEBUG] [Thread-126690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:36:50.771 [DEBUG] [Thread-126690] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:36:50.772 [DEBUG] [Thread-126690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:36:50.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:36:50.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:36:50.773 [DEBUG] [Thread-126690] [transport.py] [_log()] userauth is OK
2026-02-11T09:36:50.774 [DEBUG] [Thread-126690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:36:50.774 [DEBUG] [Thread-126690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:36:50.774 [DEBUG] [Thread-126690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:36:50.774 [DEBUG] [Thread-126690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:36:50.792 [INFO] [Thread-126690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:36:50.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:36:51.441 [DEBUG] [Thread-126690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:36:51.441 [DEBUG] [Thread-126690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:36:51.441 [DEBUG] [Thread-126690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:36:51.482 [DEBUG] [Thread-126690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:36:51.483 [DEBUG] [Thread-126690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:36:51.487 [DEBUG] [Thread-126690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:36:51.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:36:51.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:36:51.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:36:51.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:36:51.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:36:51.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:36:51.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:36:51.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:36:51.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:36:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.317153 -999.00  +21.00  20.08     52  +10.90 1 2 1 1 1   888    0 10.27 2.47 ----- 19.9 20.1 299.8 22.6 28.9 -22.8 27.9 -21.9 25.7 -21.2 26.5 -21.5
2026-02-11T09:36:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:36:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:36:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.317153
2026-02-11T09:36:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:36:51.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:36:51.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:36:51.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:36:51.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:36:51.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:36:20', tmtdew=12.2, humidity=45.55, cloud=0.0, wind=9.83, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:36:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:36:51.513 [DEBUG] [Thread-126690] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:36:51.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:36:51.602 [DEBUG] [Thread-126693] [transport.py] [_log()] starting thread (client mode): 0xa2df8d30
2026-02-11T09:36:51.602 [DEBUG] [Thread-126693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:36:51.617 [DEBUG] [Thread-126693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:36:51.617 [INFO] [Thread-126693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:36:51.625 [DEBUG] [Thread-126693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:36:51.625 [DEBUG] [Thread-126693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:36:51.626 [DEBUG] [Thread-126693] [transport.py] [_log()] client lang: <none>
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] server lang: <none>
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] kex follows: False
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] Compression: none
2026-02-11T09:36:51.627 [DEBUG] [Thread-126693] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:36:51.686 [DEBUG] [Thread-126693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:36:51.686 [DEBUG] [Thread-126693] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:36:51.687 [DEBUG] [Thread-126693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:36:51.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:36:51.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:36:51.744 [DEBUG] [Thread-126693] [transport.py] [_log()] userauth is OK
2026-02-11T09:36:51.744 [DEBUG] [Thread-126693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:36:51.744 [DEBUG] [Thread-126693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:36:51.744 [DEBUG] [Thread-126693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:36:51.744 [DEBUG] [Thread-126693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:36:51.768 [INFO] [Thread-126693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:36:51.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:36:51.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:36:52.614 [DEBUG] [Thread-126693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:36:52.614 [DEBUG] [Thread-126693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:36:52.661 [DEBUG] [Thread-126693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:36:52.662 [DEBUG] [Thread-126693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:36:52.672 [DEBUG] [Thread-126693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:36:52.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:36:52.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:36:52.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:36:52.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:36:52.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:36:52.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:36:52.708 [DEBUG] [Thread-126693] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:36:56.260 [DEBUG] [Thread-126695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:06.249 [DEBUG] [Thread-126696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:11.303 [DEBUG] [Thread-126697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:37:22.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:37:22.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:37:24.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 36, 56), 12.2, 45.71, 0.0, 14.03, 21.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:37:24.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:36:56
2026-02-11T09:37:24.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:37:24.996 [DEBUG] [Thread-126698] [transport.py] [_log()] starting thread (client mode): 0xa57b23e0
2026-02-11T09:37:24.996 [DEBUG] [Thread-126698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:37:25.015 [DEBUG] [Thread-126698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:37:25.015 [INFO] [Thread-126698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:37:25.016 [DEBUG] [Thread-126698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] client lang: <none>
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] server lang: <none>
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] kex follows: False
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:37:25.017 [DEBUG] [Thread-126698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:37:25.018 [DEBUG] [Thread-126698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:37:25.018 [DEBUG] [Thread-126698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:37:25.018 [DEBUG] [Thread-126698] [transport.py] [_log()] Compression: none
2026-02-11T09:37:25.018 [DEBUG] [Thread-126698] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:37:25.030 [DEBUG] [Thread-126698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:37:25.031 [DEBUG] [Thread-126698] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:37:25.032 [DEBUG] [Thread-126698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:37:25.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:37:25.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:37:25.034 [DEBUG] [Thread-126698] [transport.py] [_log()] userauth is OK
2026-02-11T09:37:25.034 [DEBUG] [Thread-126698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:37:25.034 [DEBUG] [Thread-126698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:37:25.034 [DEBUG] [Thread-126698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:37:25.034 [DEBUG] [Thread-126698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:37:25.049 [INFO] [Thread-126698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:37:25.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:37:25.668 [DEBUG] [Thread-126698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:37:25.669 [DEBUG] [Thread-126698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:37:25.669 [DEBUG] [Thread-126698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:37:25.710 [DEBUG] [Thread-126698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:37:25.710 [DEBUG] [Thread-126698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:37:25.714 [DEBUG] [Thread-126698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:37:25.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:37:25.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:37:25.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:37:25.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:37:25.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:37:25.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:37:25.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:37:25.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:37:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:37:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.317500 -999.00  +20.90  18.32     53  +11.10 1 2 1 1 1   888    0 10.33 2.21 ----- 19.1 18.3 290.9 21.5 28.8 -23.3 27.8 -21.7 25.7 -20.7 26.5 -21.0
2026-02-11T09:37:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:37:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:37:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.317500
2026-02-11T09:37:25.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:37:25.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:37:25.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:37:25.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:37:25.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:37:25.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:36:56', tmtdew=12.2, humidity=45.71, cloud=0.0, wind=14.03, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:37:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:37:25.742 [DEBUG] [Thread-126698] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:37:25.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:37:25.837 [DEBUG] [Thread-126701] [transport.py] [_log()] starting thread (client mode): 0xa57c17b0
2026-02-11T09:37:25.837 [DEBUG] [Thread-126701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:37:25.852 [DEBUG] [Thread-126701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:37:25.853 [INFO] [Thread-126701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:37:25.861 [DEBUG] [Thread-126701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:37:25.861 [DEBUG] [Thread-126701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:37:25.861 [DEBUG] [Thread-126701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] client lang: <none>
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] server lang: <none>
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] kex follows: False
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:37:25.862 [DEBUG] [Thread-126701] [transport.py] [_log()] Compression: none
2026-02-11T09:37:25.863 [DEBUG] [Thread-126701] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:37:25.920 [DEBUG] [Thread-126701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:37:25.921 [DEBUG] [Thread-126701] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:37:25.922 [DEBUG] [Thread-126701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:37:25.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:37:25.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:37:25.976 [DEBUG] [Thread-126701] [transport.py] [_log()] userauth is OK
2026-02-11T09:37:25.977 [DEBUG] [Thread-126701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:37:25.977 [DEBUG] [Thread-126701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:37:25.977 [DEBUG] [Thread-126701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:37:25.977 [DEBUG] [Thread-126701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:37:25.999 [INFO] [Thread-126701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:37:26.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:37:26.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:37:26.340 [DEBUG] [Thread-126703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:26.823 [DEBUG] [Thread-126701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:37:26.823 [DEBUG] [Thread-126701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:37:26.871 [DEBUG] [Thread-126701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:37:26.872 [DEBUG] [Thread-126701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:37:26.881 [DEBUG] [Thread-126701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:37:26.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:37:26.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')
2026-02-11T09:37:26.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:37:26.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:37:26.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:37:26.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:37:26.918 [DEBUG] [Thread-126701] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:37:41.395 [DEBUG] [Thread-126704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:43.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:43.554 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:56.434 [DEBUG] [Thread-126705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:37:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:37:56.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:37:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:37:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 37, 31), 12.6, 44.57, 0.0, 15.33, 21.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:37:58.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:37:31
2026-02-11T09:37:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:37:59.240 [DEBUG] [Thread-126706] [transport.py] [_log()] starting thread (client mode): 0xa57e0220
2026-02-11T09:37:59.240 [DEBUG] [Thread-126706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:37:59.260 [DEBUG] [Thread-126706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:37:59.261 [INFO] [Thread-126706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:37:59.263 [DEBUG] [Thread-126706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] client lang: <none>
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] server lang: <none>
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] kex follows: False
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] Compression: none
2026-02-11T09:37:59.264 [DEBUG] [Thread-126706] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:37:59.284 [DEBUG] [Thread-126706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:37:59.285 [DEBUG] [Thread-126706] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:37:59.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:37:59.286 [DEBUG] [Thread-126706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:37:59.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:37:59.288 [DEBUG] [Thread-126706] [transport.py] [_log()] userauth is OK
2026-02-11T09:37:59.288 [DEBUG] [Thread-126706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:37:59.289 [DEBUG] [Thread-126706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:37:59.289 [DEBUG] [Thread-126706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:37:59.289 [DEBUG] [Thread-126706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:37:59.324 [INFO] [Thread-126706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:37:59.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:37:59.896 [DEBUG] [Thread-126706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:37:59.896 [DEBUG] [Thread-126706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:37:59.896 [DEBUG] [Thread-126706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:37:59.936 [DEBUG] [Thread-126706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:37:59.937 [DEBUG] [Thread-126706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:37:59.940 [DEBUG] [Thread-126706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:37:59.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:37:59.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:37:59.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:37:59.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:37:59.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:37:59.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:37:59.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:37:59.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:37:59.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:37:59.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.317848 -999.00  +20.80  15.26     53  +11.00 1 2 1 1 1   888    0 10.05 0.98 ----- 14.9 15.3 285.6 21.0 28.7 -22.9 27.8 -20.9 25.6 -22.1 26.4 -21.3
2026-02-11T09:37:59.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:37:59.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:37:59.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.317848
2026-02-11T09:37:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:37:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:37:59.972 [DEBUG] [Thread-126706] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:37:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:37:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:37:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:37:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:37:31', tmtdew=12.6, humidity=44.57, cloud=0.0, wind=15.33, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:37:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:38:00.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:38:00.068 [DEBUG] [Thread-126709] [transport.py] [_log()] starting thread (client mode): 0xa2dc0220
2026-02-11T09:38:00.068 [DEBUG] [Thread-126709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:38:00.083 [DEBUG] [Thread-126709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:38:00.083 [INFO] [Thread-126709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:38:00.090 [DEBUG] [Thread-126709] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:38:00.090 [DEBUG] [Thread-126709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] client lang: <none>
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] server lang: <none>
2026-02-11T09:38:00.091 [DEBUG] [Thread-126709] [transport.py] [_log()] kex follows: False
2026-02-11T09:38:00.092 [DEBUG] [Thread-126709] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:38:00.092 [DEBUG] [Thread-126709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:38:00.092 [DEBUG] [Thread-126709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:38:00.092 [DEBUG] [Thread-126709] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:38:00.092 [DEBUG] [Thread-126709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:38:00.092 [DEBUG] [Thread-126709] [transport.py] [_log()] Compression: none
2026-02-11T09:38:00.092 [DEBUG] [Thread-126709] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:38:00.148 [DEBUG] [Thread-126709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:38:00.149 [DEBUG] [Thread-126709] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:38:00.149 [DEBUG] [Thread-126709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:38:00.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:38:00.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:38:00.205 [DEBUG] [Thread-126709] [transport.py] [_log()] userauth is OK
2026-02-11T09:38:00.205 [DEBUG] [Thread-126709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:38:00.205 [DEBUG] [Thread-126709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:38:00.205 [DEBUG] [Thread-126709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:38:00.205 [DEBUG] [Thread-126709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:38:00.224 [INFO] [Thread-126709] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:38:00.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:38:00.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:38:01.038 [DEBUG] [Thread-126709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:38:01.038 [DEBUG] [Thread-126709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:38:01.087 [DEBUG] [Thread-126709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:38:01.087 [DEBUG] [Thread-126709] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:38:01.096 [DEBUG] [Thread-126709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:38:01.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:38:01.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:38:01.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:38:01.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:38:01.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:38:01.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:38:01.133 [DEBUG] [Thread-126709] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:38:06.287 [DEBUG] [Thread-126711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:38:11.470 [DEBUG] [Thread-126712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:38:26.525 [DEBUG] [Thread-126713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:38:31.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:38:31.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:38:31.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:38:33.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 38, 6), 12.31, 45.32, 0.0, 14.8, 21.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:38:33.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:38:06
2026-02-11T09:38:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:38:33.634 [DEBUG] [Thread-126714] [transport.py] [_log()] starting thread (client mode): 0xa2dfa9b0
2026-02-11T09:38:33.635 [DEBUG] [Thread-126714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:38:33.655 [DEBUG] [Thread-126714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:38:33.655 [INFO] [Thread-126714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:38:33.658 [DEBUG] [Thread-126714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:38:33.658 [DEBUG] [Thread-126714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:38:33.658 [DEBUG] [Thread-126714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:38:33.658 [DEBUG] [Thread-126714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:38:33.658 [DEBUG] [Thread-126714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:38:33.658 [DEBUG] [Thread-126714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] client lang: <none>
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] server lang: <none>
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] kex follows: False
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] Compression: none
2026-02-11T09:38:33.659 [DEBUG] [Thread-126714] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:38:33.678 [DEBUG] [Thread-126714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:38:33.678 [DEBUG] [Thread-126714] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:38:33.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:38:33.680 [DEBUG] [Thread-126714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:38:33.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:38:33.682 [DEBUG] [Thread-126714] [transport.py] [_log()] userauth is OK
2026-02-11T09:38:33.682 [DEBUG] [Thread-126714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:38:33.682 [DEBUG] [Thread-126714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:38:33.682 [DEBUG] [Thread-126714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:38:33.682 [DEBUG] [Thread-126714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:38:33.701 [INFO] [Thread-126714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:38:33.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:38:34.288 [DEBUG] [Thread-126714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:38:34.289 [DEBUG] [Thread-126714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:38:34.289 [DEBUG] [Thread-126714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:38:34.329 [DEBUG] [Thread-126714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:38:34.330 [DEBUG] [Thread-126714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:38:34.332 [DEBUG] [Thread-126714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:38:34.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:38:34.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:38:34.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:38:34.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:38:34.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:38:34.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:38:34.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:38:34.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:38:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:38:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.318195 -999.00  +21.10  10.79     53  +11.20 1 2 1 1 1   888    0 10.19 0.50 ----- 8.5 10.8 284.6 19.1 28.7 -23.0 27.9 -20.4 25.6 -20.3 26.4 -21.2
2026-02-11T09:38:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:38:34.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:38:34.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.318195
2026-02-11T09:38:34.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:38:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:38:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:38:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:38:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:38:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:38:06', tmtdew=12.31, humidity=45.32, cloud=0.0, wind=14.8, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:38:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:38:34.358 [DEBUG] [Thread-126714] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:38:34.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:38:34.454 [DEBUG] [Thread-126717] [transport.py] [_log()] starting thread (client mode): 0xa57e2f50
2026-02-11T09:38:34.454 [DEBUG] [Thread-126717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:38:34.468 [DEBUG] [Thread-126717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:38:34.469 [INFO] [Thread-126717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:38:34.476 [DEBUG] [Thread-126717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] client lang: <none>
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] server lang: <none>
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] kex follows: False
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:38:34.477 [DEBUG] [Thread-126717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:38:34.478 [DEBUG] [Thread-126717] [transport.py] [_log()] Compression: none
2026-02-11T09:38:34.478 [DEBUG] [Thread-126717] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:38:34.536 [DEBUG] [Thread-126717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:38:34.537 [DEBUG] [Thread-126717] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:38:34.538 [DEBUG] [Thread-126717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:38:34.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:38:34.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:38:34.598 [DEBUG] [Thread-126717] [transport.py] [_log()] userauth is OK
2026-02-11T09:38:34.598 [DEBUG] [Thread-126717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:38:34.598 [DEBUG] [Thread-126717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:38:34.599 [DEBUG] [Thread-126717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:38:34.599 [DEBUG] [Thread-126717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:38:34.618 [INFO] [Thread-126717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:38:34.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:38:34.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:38:35.440 [DEBUG] [Thread-126717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:38:35.441 [DEBUG] [Thread-126717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:38:35.490 [DEBUG] [Thread-126717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:38:35.490 [DEBUG] [Thread-126717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:38:35.502 [DEBUG] [Thread-126717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:38:35.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:38:35.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:38:35.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
2026-02-11T09:38:35.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:38:35.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:38:35.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:38:35.545 [DEBUG] [Thread-126717] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:38:41.564 [DEBUG] [Thread-126719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:38:43.694 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:38:43.696 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:38:56.626 [DEBUG] [Thread-126720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:39:05.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:39:05.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:39:05.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
2026-02-11T09:39:06.320 [DEBUG] [Thread-126721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:39:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 38, 42), 12.34, 45.28, 0.0, 16.5, 21.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:39:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:38:42
2026-02-11T09:39:07.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:39:07.859 [DEBUG] [Thread-126722] [transport.py] [_log()] starting thread (client mode): 0xa2d92590
2026-02-11T09:39:07.859 [DEBUG] [Thread-126722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:39:07.878 [DEBUG] [Thread-126722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:39:07.878 [INFO] [Thread-126722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:39:07.879 [DEBUG] [Thread-126722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:39:07.879 [DEBUG] [Thread-126722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:39:07.879 [DEBUG] [Thread-126722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:39:07.879 [DEBUG] [Thread-126722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:07.879 [DEBUG] [Thread-126722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:07.879 [DEBUG] [Thread-126722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:07.879 [DEBUG] [Thread-126722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] client lang: <none>
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] server lang: <none>
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] kex follows: False
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] Compression: none
2026-02-11T09:39:07.880 [DEBUG] [Thread-126722] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:39:07.888 [DEBUG] [Thread-126722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:39:07.888 [DEBUG] [Thread-126722] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:39:07.888 [DEBUG] [Thread-126722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:39:07.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:39:07.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:39:07.890 [DEBUG] [Thread-126722] [transport.py] [_log()] userauth is OK
2026-02-11T09:39:07.890 [DEBUG] [Thread-126722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:39:07.890 [DEBUG] [Thread-126722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:39:07.890 [DEBUG] [Thread-126722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:39:07.890 [DEBUG] [Thread-126722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:39:07.912 [INFO] [Thread-126722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:39:07.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:39:08.583 [DEBUG] [Thread-126722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:39:08.583 [DEBUG] [Thread-126722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:39:08.583 [DEBUG] [Thread-126722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:39:08.624 [DEBUG] [Thread-126722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:39:08.624 [DEBUG] [Thread-126722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:39:08.627 [DEBUG] [Thread-126722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:39:08.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:39:08.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:39:08.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:39:08.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:39:08.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:39:08.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:39:08.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:39:08.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:39:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:39:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.318542 -999.00  +21.30  12.00     52  +11.20 1 2 1 1 1   888    0 10.11 1.00 ----- 12.3 12.0 278.8 20.4 28.7 -22.9 27.9 -20.9 25.7 -22.6 26.4 -22.4
2026-02-11T09:39:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:39:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:39:08.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.318542
2026-02-11T09:39:08.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:39:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:39:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:39:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:39:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:39:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:38:42', tmtdew=12.34, humidity=45.28, cloud=0.0, wind=16.5, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:38:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:39:08.651 [DEBUG] [Thread-126722] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:39:08.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:39:08.751 [DEBUG] [Thread-126725] [transport.py] [_log()] starting thread (client mode): 0xa57d66e0
2026-02-11T09:39:08.751 [DEBUG] [Thread-126725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:39:08.765 [DEBUG] [Thread-126725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:39:08.765 [INFO] [Thread-126725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:39:08.773 [DEBUG] [Thread-126725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:39:08.773 [DEBUG] [Thread-126725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] client lang: <none>
2026-02-11T09:39:08.774 [DEBUG] [Thread-126725] [transport.py] [_log()] server lang: <none>
2026-02-11T09:39:08.775 [DEBUG] [Thread-126725] [transport.py] [_log()] kex follows: False
2026-02-11T09:39:08.775 [DEBUG] [Thread-126725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:39:08.775 [DEBUG] [Thread-126725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:39:08.775 [DEBUG] [Thread-126725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:39:08.775 [DEBUG] [Thread-126725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:39:08.775 [DEBUG] [Thread-126725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:39:08.775 [DEBUG] [Thread-126725] [transport.py] [_log()] Compression: none
2026-02-11T09:39:08.776 [DEBUG] [Thread-126725] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:39:08.834 [DEBUG] [Thread-126725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:39:08.834 [DEBUG] [Thread-126725] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:39:08.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:39:08.835 [DEBUG] [Thread-126725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:39:08.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:39:08.896 [DEBUG] [Thread-126725] [transport.py] [_log()] userauth is OK
2026-02-11T09:39:08.897 [DEBUG] [Thread-126725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:39:08.897 [DEBUG] [Thread-126725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:39:08.897 [DEBUG] [Thread-126725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:39:08.897 [DEBUG] [Thread-126725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:39:08.916 [INFO] [Thread-126725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:39:08.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:39:08.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:39:09.721 [DEBUG] [Thread-126725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:39:09.722 [DEBUG] [Thread-126725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:39:09.768 [DEBUG] [Thread-126725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:39:09.768 [DEBUG] [Thread-126725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:39:09.778 [DEBUG] [Thread-126725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:39:09.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:39:09.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')
2026-02-11T09:39:09.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:39:09.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:39:09.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:39:09.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:39:09.815 [DEBUG] [Thread-126725] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:39:11.661 [DEBUG] [Thread-126727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:39:26.718 [DEBUG] [Thread-126728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:39:39.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:39:39.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:39:39.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:39:41.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 39, 18), 12.27, 45.56, 0.0, 18.65, 21.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:39:41.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:39:18
2026-02-11T09:39:41.755 [DEBUG] [Thread-126729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:39:41.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:39:42.127 [DEBUG] [Thread-126730] [transport.py] [_log()] starting thread (client mode): 0xa2dc1420
2026-02-11T09:39:42.127 [DEBUG] [Thread-126730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:39:42.148 [DEBUG] [Thread-126730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:39:42.148 [INFO] [Thread-126730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:39:42.151 [DEBUG] [Thread-126730] [transport.py] [_log()] client lang: <none>
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] server lang: <none>
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] kex follows: False
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] Compression: none
2026-02-11T09:39:42.152 [DEBUG] [Thread-126730] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:39:42.170 [DEBUG] [Thread-126730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:39:42.170 [DEBUG] [Thread-126730] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:39:42.171 [DEBUG] [Thread-126730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:39:42.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:39:42.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:39:42.174 [DEBUG] [Thread-126730] [transport.py] [_log()] userauth is OK
2026-02-11T09:39:42.174 [DEBUG] [Thread-126730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:39:42.174 [DEBUG] [Thread-126730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:39:42.174 [DEBUG] [Thread-126730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:39:42.175 [DEBUG] [Thread-126730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:39:42.198 [INFO] [Thread-126730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:39:42.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:39:42.846 [DEBUG] [Thread-126730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:39:42.846 [DEBUG] [Thread-126730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:39:42.847 [DEBUG] [Thread-126730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:39:42.887 [DEBUG] [Thread-126730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:39:42.887 [DEBUG] [Thread-126730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:39:42.890 [DEBUG] [Thread-126730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:39:42.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:39:42.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:39:42.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:39:42.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:39:42.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:39:42.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:39:42.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:39:42.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.318889 -999.00  +21.40  14.40     52  +11.30 1 2 1 1 1   888    0 10.15 1.37 ----- 10.2 14.4 301.4 20.5 28.6 -23.6 27.9 -20.6 25.7 -21.9 26.5 -21.2
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.318889
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:39:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:39:18', tmtdew=12.27, humidity=45.56, cloud=0.0, wind=18.65, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:39:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:39:42.912 [DEBUG] [Thread-126730] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:39:42.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:39:42.999 [DEBUG] [Thread-126733] [transport.py] [_log()] starting thread (client mode): 0xa2dfb3d0
2026-02-11T09:39:42.999 [DEBUG] [Thread-126733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:39:43.014 [DEBUG] [Thread-126733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:39:43.014 [INFO] [Thread-126733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:39:43.022 [DEBUG] [Thread-126733] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:39:43.022 [DEBUG] [Thread-126733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:39:43.022 [DEBUG] [Thread-126733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:39:43.022 [DEBUG] [Thread-126733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:43.022 [DEBUG] [Thread-126733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] client lang: <none>
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] server lang: <none>
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] kex follows: False
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:39:43.023 [DEBUG] [Thread-126733] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:39:43.024 [DEBUG] [Thread-126733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:39:43.024 [DEBUG] [Thread-126733] [transport.py] [_log()] Compression: none
2026-02-11T09:39:43.024 [DEBUG] [Thread-126733] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:39:43.085 [DEBUG] [Thread-126733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:39:43.085 [DEBUG] [Thread-126733] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:39:43.086 [DEBUG] [Thread-126733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:39:43.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:39:43.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:39:43.140 [DEBUG] [Thread-126733] [transport.py] [_log()] userauth is OK
2026-02-11T09:39:43.140 [DEBUG] [Thread-126733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:39:43.140 [DEBUG] [Thread-126733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:39:43.140 [DEBUG] [Thread-126733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:39:43.140 [DEBUG] [Thread-126733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:39:43.162 [INFO] [Thread-126733] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:39:43.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:39:43.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:39:43.836 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:39:43.838 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:39:43.966 [DEBUG] [Thread-126733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:39:43.967 [DEBUG] [Thread-126733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:39:44.016 [DEBUG] [Thread-126733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:39:44.016 [DEBUG] [Thread-126733] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:39:44.026 [DEBUG] [Thread-126733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:39:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:39:44.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:39:44.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
2026-02-11T09:39:44.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:39:44.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:39:44.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:39:44.063 [DEBUG] [Thread-126733] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:39:56.792 [DEBUG] [Thread-126735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:40:06.365 [DEBUG] [Thread-126736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:40:11.843 [DEBUG] [Thread-126737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:40:14.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:40:14.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:40:14.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:40:15.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 39, 53), 12.15, 45.83, 0.0, 16.29, 21.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:40:15.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:39:53
2026-02-11T09:40:16.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:40:16.471 [DEBUG] [Thread-126738] [transport.py] [_log()] starting thread (client mode): 0xa2d7b6a0
2026-02-11T09:40:16.472 [DEBUG] [Thread-126738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:40:16.486 [DEBUG] [Thread-126738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:40:16.486 [INFO] [Thread-126738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] client lang: <none>
2026-02-11T09:40:16.487 [DEBUG] [Thread-126738] [transport.py] [_log()] server lang: <none>
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] kex follows: False
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] Compression: none
2026-02-11T09:40:16.488 [DEBUG] [Thread-126738] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:40:16.496 [DEBUG] [Thread-126738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:40:16.496 [DEBUG] [Thread-126738] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:40:16.497 [DEBUG] [Thread-126738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:40:16.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:40:16.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:40:16.498 [DEBUG] [Thread-126738] [transport.py] [_log()] userauth is OK
2026-02-11T09:40:16.499 [DEBUG] [Thread-126738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:40:16.499 [DEBUG] [Thread-126738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:40:16.499 [DEBUG] [Thread-126738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:40:16.499 [DEBUG] [Thread-126738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:40:16.528 [INFO] [Thread-126738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:40:16.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:40:17.174 [DEBUG] [Thread-126738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:40:17.175 [DEBUG] [Thread-126738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:40:17.175 [DEBUG] [Thread-126738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:40:17.216 [DEBUG] [Thread-126738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:40:17.216 [DEBUG] [Thread-126738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:40:17.220 [DEBUG] [Thread-126738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:40:17.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:40:17.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:40:17.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:40:17.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:40:17.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:40:17.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:40:17.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:40:17.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:40:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:40:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.319237 -999.00  +21.50  16.98     52  +11.30 1 2 1 1 1   888    0 10.13 2.43 ----- 14.8 17.0 300.8 23.6 28.9 -22.1 27.9 -21.0 25.8 -22.7 26.6 -21.0
2026-02-11T09:40:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:40:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:40:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.319237
2026-02-11T09:40:17.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:40:17.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:40:17.246 [DEBUG] [Thread-126738] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:40:17.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:40:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:40:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:40:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:39:53', tmtdew=12.15, humidity=45.83, cloud=0.0, wind=16.29, temperature=21.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:39:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:40:17.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:40:17.343 [DEBUG] [Thread-126741] [transport.py] [_log()] starting thread (client mode): 0xa81d75b0
2026-02-11T09:40:17.344 [DEBUG] [Thread-126741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:40:17.358 [DEBUG] [Thread-126741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:40:17.358 [INFO] [Thread-126741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:40:17.366 [DEBUG] [Thread-126741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:40:17.366 [DEBUG] [Thread-126741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:40:17.366 [DEBUG] [Thread-126741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] client lang: <none>
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] server lang: <none>
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] kex follows: False
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] Compression: none
2026-02-11T09:40:17.367 [DEBUG] [Thread-126741] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:40:17.425 [DEBUG] [Thread-126741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:40:17.425 [DEBUG] [Thread-126741] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:40:17.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:40:17.427 [DEBUG] [Thread-126741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:40:17.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:40:17.484 [DEBUG] [Thread-126741] [transport.py] [_log()] userauth is OK
2026-02-11T09:40:17.484 [DEBUG] [Thread-126741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:40:17.485 [DEBUG] [Thread-126741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:40:17.485 [DEBUG] [Thread-126741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:40:17.485 [DEBUG] [Thread-126741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:40:17.503 [INFO] [Thread-126741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:40:17.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:40:17.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:40:18.303 [DEBUG] [Thread-126741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:40:18.303 [DEBUG] [Thread-126741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:40:18.351 [DEBUG] [Thread-126741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:40:18.351 [DEBUG] [Thread-126741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:40:18.361 [DEBUG] [Thread-126741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:40:18.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:40:18.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')
2026-02-11T09:40:18.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:40:18.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:40:18.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:40:18.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:40:18.403 [DEBUG] [Thread-126741] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:40:26.881 [DEBUG] [Thread-126743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:40:41.946 [DEBUG] [Thread-126744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:40:43.979 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:40:43.980 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:40:48.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:40:48.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:40:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:40:50.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 40, 28), 12.0, 46.26, 0.0, 17.5, 21.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:40:50.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:40:28
2026-02-11T09:40:50.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:40:50.781 [DEBUG] [Thread-126745] [transport.py] [_log()] starting thread (client mode): 0xa2df92a0
2026-02-11T09:40:50.781 [DEBUG] [Thread-126745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:40:50.802 [DEBUG] [Thread-126745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:40:50.802 [INFO] [Thread-126745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:40:50.805 [DEBUG] [Thread-126745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] client lang: <none>
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] server lang: <none>
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] kex follows: False
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] Compression: none
2026-02-11T09:40:50.806 [DEBUG] [Thread-126745] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:40:50.817 [DEBUG] [Thread-126745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:40:50.818 [DEBUG] [Thread-126745] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:40:50.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:40:50.819 [DEBUG] [Thread-126745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:40:50.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:40:50.822 [DEBUG] [Thread-126745] [transport.py] [_log()] userauth is OK
2026-02-11T09:40:50.822 [DEBUG] [Thread-126745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:40:50.822 [DEBUG] [Thread-126745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:40:50.822 [DEBUG] [Thread-126745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:40:50.822 [DEBUG] [Thread-126745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:40:50.857 [INFO] [Thread-126745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:40:50.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:40:51.505 [DEBUG] [Thread-126745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:40:51.505 [DEBUG] [Thread-126745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:40:51.505 [DEBUG] [Thread-126745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:40:51.546 [DEBUG] [Thread-126745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:40:51.546 [DEBUG] [Thread-126745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:40:51.549 [DEBUG] [Thread-126745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:40:51.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:40:51.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:40:51.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:40:51.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:40:51.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:40:51.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:40:51.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:40:51.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:40:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:40:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.319931 -999.00  +20.90  17.04     53  +11.00 1 2 1 1 1   888    0 10.04 4.95 ----- 15.7 17.0 291.2 19.2 28.6 -23.4 27.8 -21.5 25.8 -20.7 26.5 -21.3
2026-02-11T09:40:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:40:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:40:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.319931
2026-02-11T09:40:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:40:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:40:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:40:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:40:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:40:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:40:28', tmtdew=12.0, humidity=46.26, cloud=0.0, wind=17.5, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:40:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:40:51.578 [DEBUG] [Thread-126745] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:40:51.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:40:56.982 [DEBUG] [Thread-126748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:41:06.419 [DEBUG] [Thread-126749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:41:12.036 [DEBUG] [Thread-126750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:41:27.071 [DEBUG] [Thread-126751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:41:42.108 [DEBUG] [Thread-126752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:41:44.123 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:41:44.124 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:41:57.146 [DEBUG] [Thread-126753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:42:06.480 [DEBUG] [Thread-126754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:42:12.183 [DEBUG] [Thread-126755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:42:27.220 [DEBUG] [Thread-126756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:42:42.259 [DEBUG] [Thread-126757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:42:44.269 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:42:44.270 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:42:57.295 [DEBUG] [Thread-126758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:43:04.248 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T09:43:06.528 [DEBUG] [Thread-126759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:43:12.333 [DEBUG] [Thread-126760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:43:27.371 [DEBUG] [Thread-126761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:43:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:43:34.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:43:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:43:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 43, 24), 11.96, 46.74, 0.0, 10.15, 21.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:43:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:43:24
2026-02-11T09:43:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:43:37.297 [DEBUG] [Thread-126762] [transport.py] [_log()] starting thread (client mode): 0xa5758b80
2026-02-11T09:43:37.297 [DEBUG] [Thread-126762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:43:37.318 [DEBUG] [Thread-126762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:43:37.318 [INFO] [Thread-126762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] client lang: <none>
2026-02-11T09:43:37.322 [DEBUG] [Thread-126762] [transport.py] [_log()] server lang: <none>
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] kex follows: False
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] Compression: none
2026-02-11T09:43:37.323 [DEBUG] [Thread-126762] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:43:37.339 [DEBUG] [Thread-126762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:43:37.340 [DEBUG] [Thread-126762] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:43:37.340 [DEBUG] [Thread-126762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:43:37.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:43:37.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:43:37.342 [DEBUG] [Thread-126762] [transport.py] [_log()] userauth is OK
2026-02-11T09:43:37.342 [DEBUG] [Thread-126762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:43:37.342 [DEBUG] [Thread-126762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:43:37.342 [DEBUG] [Thread-126762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:43:37.342 [DEBUG] [Thread-126762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:43:37.360 [INFO] [Thread-126762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:43:37.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:43:37.966 [DEBUG] [Thread-126762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:43:37.966 [DEBUG] [Thread-126762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:43:37.967 [DEBUG] [Thread-126762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:43:38.007 [DEBUG] [Thread-126762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:43:38.007 [DEBUG] [Thread-126762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:43:38.010 [DEBUG] [Thread-126762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:43:38.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:43:38.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:43:38.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:43:38.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:43:38.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:43:38.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:43:38.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:43:38.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:43:38.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:43:38.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.321667 -999.00  +20.70   7.50     54  +11.20 1 2 1 1 1   888    0 9.78 -6.08 ----- 8.0 7.5 287.7 13.9 28.8 -22.6 28.0 -20.9 25.8 -21.4 26.6 -21.1
2026-02-11T09:43:38.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:43:38.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:43:38.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.321667
2026-02-11T09:43:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:43:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:43:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:43:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:43:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:43:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:43:24', tmtdew=11.96, humidity=46.74, cloud=0.0, wind=10.15, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:43:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:43:38.036 [DEBUG] [Thread-126762] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:43:38.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:43:38.146 [DEBUG] [Thread-126765] [transport.py] [_log()] starting thread (client mode): 0xa81d6200
2026-02-11T09:43:38.146 [DEBUG] [Thread-126765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:43:38.160 [DEBUG] [Thread-126765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:43:38.160 [INFO] [Thread-126765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:43:38.168 [DEBUG] [Thread-126765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] client lang: <none>
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] server lang: <none>
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] kex follows: False
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] Compression: none
2026-02-11T09:43:38.169 [DEBUG] [Thread-126765] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:43:38.228 [DEBUG] [Thread-126765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:43:38.229 [DEBUG] [Thread-126765] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:43:38.230 [DEBUG] [Thread-126765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:43:38.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:43:38.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:43:38.287 [DEBUG] [Thread-126765] [transport.py] [_log()] userauth is OK
2026-02-11T09:43:38.287 [DEBUG] [Thread-126765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:43:38.288 [DEBUG] [Thread-126765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:43:38.288 [DEBUG] [Thread-126765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:43:38.288 [DEBUG] [Thread-126765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:43:38.306 [INFO] [Thread-126765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:43:38.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:43:38.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:43:39.146 [DEBUG] [Thread-126765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:43:39.147 [DEBUG] [Thread-126765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:43:39.194 [DEBUG] [Thread-126765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:43:39.194 [DEBUG] [Thread-126765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:43:39.204 [DEBUG] [Thread-126765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:43:39.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:43:39.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:43:39.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:43:39.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:43:39.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:43:39.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:43:39.239 [DEBUG] [Thread-126765] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:43:42.404 [DEBUG] [Thread-126767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:43:44.410 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:43:44.411 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:43:57.455 [DEBUG] [Thread-126768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:44:06.581 [DEBUG] [Thread-126769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:44:09.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:44:09.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:44:09.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:44:11.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 44, 1), 11.72, 47.29, 0.0, 9.71, 21.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:44:11.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:44:01
2026-02-11T09:44:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:44:11.772 [DEBUG] [Thread-126770] [transport.py] [_log()] starting thread (client mode): 0xa2d7b280
2026-02-11T09:44:11.772 [DEBUG] [Thread-126770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:44:11.784 [DEBUG] [Thread-126770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:44:11.784 [INFO] [Thread-126770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] client lang: <none>
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] server lang: <none>
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] kex follows: False
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:44:11.785 [DEBUG] [Thread-126770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:44:11.786 [DEBUG] [Thread-126770] [transport.py] [_log()] Compression: none
2026-02-11T09:44:11.786 [DEBUG] [Thread-126770] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:44:11.796 [DEBUG] [Thread-126770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:44:11.796 [DEBUG] [Thread-126770] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:44:11.796 [DEBUG] [Thread-126770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:44:11.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:44:11.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:44:11.797 [DEBUG] [Thread-126770] [transport.py] [_log()] userauth is OK
2026-02-11T09:44:11.797 [DEBUG] [Thread-126770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:44:11.798 [DEBUG] [Thread-126770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:44:11.798 [DEBUG] [Thread-126770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:44:11.798 [DEBUG] [Thread-126770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:44:11.809 [INFO] [Thread-126770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:44:11.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:44:12.396 [DEBUG] [Thread-126770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:44:12.396 [DEBUG] [Thread-126770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:44:12.396 [DEBUG] [Thread-126770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:44:12.437 [DEBUG] [Thread-126770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:44:12.437 [DEBUG] [Thread-126770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:44:12.440 [DEBUG] [Thread-126770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:44:12.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:44:12.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:44:12.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:44:12.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:44:12.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:44:12.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:44:12.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:44:12.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:44:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:44:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.322014 -999.00  +20.80   6.00     54  +11.10 1 2 1 1 1   888    0 9.98 -9.89 ----- 6.7 6.0 272.4 10.7 28.8 -22.9 28.0 -20.6 25.8 -20.7 26.6 -21.7
2026-02-11T09:44:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:44:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:44:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.322014
2026-02-11T09:44:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:44:12.470 [DEBUG] [Thread-126770] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:44:12.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:44:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:44:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:44:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:44:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:44:01', tmtdew=11.72, humidity=47.29, cloud=0.0, wind=9.71, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:43:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:44:12.493 [DEBUG] [Thread-126773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:44:12.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:44:12.568 [DEBUG] [Thread-126774] [transport.py] [_log()] starting thread (client mode): 0xa81d5000
2026-02-11T09:44:12.568 [DEBUG] [Thread-126774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:44:12.583 [DEBUG] [Thread-126774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:44:12.583 [INFO] [Thread-126774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] client lang: <none>
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] server lang: <none>
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] kex follows: False
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:44:12.591 [DEBUG] [Thread-126774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:44:12.592 [DEBUG] [Thread-126774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:44:12.592 [DEBUG] [Thread-126774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:44:12.592 [DEBUG] [Thread-126774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:44:12.592 [DEBUG] [Thread-126774] [transport.py] [_log()] Compression: none
2026-02-11T09:44:12.592 [DEBUG] [Thread-126774] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:44:12.648 [DEBUG] [Thread-126774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:44:12.649 [DEBUG] [Thread-126774] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:44:12.649 [DEBUG] [Thread-126774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:44:12.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:44:12.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:44:12.704 [DEBUG] [Thread-126774] [transport.py] [_log()] userauth is OK
2026-02-11T09:44:12.705 [DEBUG] [Thread-126774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:44:12.705 [DEBUG] [Thread-126774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:44:12.705 [DEBUG] [Thread-126774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:44:12.705 [DEBUG] [Thread-126774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:44:12.724 [INFO] [Thread-126774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:44:12.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:44:12.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:44:13.541 [DEBUG] [Thread-126774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:44:13.541 [DEBUG] [Thread-126774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:44:13.588 [DEBUG] [Thread-126774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:44:13.588 [DEBUG] [Thread-126774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:44:13.597 [DEBUG] [Thread-126774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:44:13.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:44:13.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:44:13.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:44:13.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:44:13.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:44:13.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:44:13.635 [DEBUG] [Thread-126774] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:44:27.535 [DEBUG] [Thread-126776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:44:42.572 [DEBUG] [Thread-126777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:44:43.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:44:43.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:44:43.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:44:44.551 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:44:44.552 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:44:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 44, 36), 11.96, 46.45, 0.0, 9.67, 21.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:44:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:44:36
2026-02-11T09:44:45.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:44:46.025 [DEBUG] [Thread-126778] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfa0
2026-02-11T09:44:46.026 [DEBUG] [Thread-126778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:44:46.045 [DEBUG] [Thread-126778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:44:46.045 [INFO] [Thread-126778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] client lang: <none>
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] server lang: <none>
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] kex follows: False
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:44:46.048 [DEBUG] [Thread-126778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:44:46.049 [DEBUG] [Thread-126778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:44:46.049 [DEBUG] [Thread-126778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:44:46.049 [DEBUG] [Thread-126778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:44:46.049 [DEBUG] [Thread-126778] [transport.py] [_log()] Compression: none
2026-02-11T09:44:46.049 [DEBUG] [Thread-126778] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:44:46.059 [DEBUG] [Thread-126778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:44:46.059 [DEBUG] [Thread-126778] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:44:46.060 [DEBUG] [Thread-126778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:44:46.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:44:46.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:44:46.061 [DEBUG] [Thread-126778] [transport.py] [_log()] userauth is OK
2026-02-11T09:44:46.061 [DEBUG] [Thread-126778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:44:46.061 [DEBUG] [Thread-126778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:44:46.062 [DEBUG] [Thread-126778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:44:46.062 [DEBUG] [Thread-126778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:44:46.079 [INFO] [Thread-126778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:44:46.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:44:46.656 [DEBUG] [Thread-126778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:44:46.657 [DEBUG] [Thread-126778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:44:46.657 [DEBUG] [Thread-126778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:44:46.698 [DEBUG] [Thread-126778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:44:46.698 [DEBUG] [Thread-126778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:44:46.700 [DEBUG] [Thread-126778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:44:46.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:44:46.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:44:46.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:44:46.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:44:46.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:44:46.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:44:46.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:44:46.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:44:46.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:44:46.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.322709 -999.00  +20.90  10.13     53  +11.20 1 2 1 1 1   888    0 9.47 -16.40 ----- 9.1 10.1 269.0 11.1 28.9 -23.2 28.1 -20.9 25.9 -19.7 26.6 -21.5
2026-02-11T09:44:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:44:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:44:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.322709
2026-02-11T09:44:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:44:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:44:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:44:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:44:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:44:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:44:36', tmtdew=11.96, humidity=46.45, cloud=0.0, wind=9.67, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:44:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:44:46.724 [DEBUG] [Thread-126778] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:44:46.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:44:46.821 [DEBUG] [Thread-126781] [transport.py] [_log()] starting thread (client mode): 0xa57c14b0
2026-02-11T09:44:46.822 [DEBUG] [Thread-126781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:44:46.836 [DEBUG] [Thread-126781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:44:46.836 [INFO] [Thread-126781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:44:46.844 [DEBUG] [Thread-126781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] client lang: <none>
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] server lang: <none>
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] kex follows: False
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] Compression: none
2026-02-11T09:44:46.845 [DEBUG] [Thread-126781] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:44:46.903 [DEBUG] [Thread-126781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:44:46.903 [DEBUG] [Thread-126781] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:44:46.904 [DEBUG] [Thread-126781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:44:46.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:44:46.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:44:46.960 [DEBUG] [Thread-126781] [transport.py] [_log()] userauth is OK
2026-02-11T09:44:46.960 [DEBUG] [Thread-126781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:44:46.960 [DEBUG] [Thread-126781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:44:46.960 [DEBUG] [Thread-126781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:44:46.960 [DEBUG] [Thread-126781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:44:46.979 [INFO] [Thread-126781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:44:46.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:44:46.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:44:47.816 [DEBUG] [Thread-126781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:44:47.816 [DEBUG] [Thread-126781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:44:47.864 [DEBUG] [Thread-126781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:44:47.864 [DEBUG] [Thread-126781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:44:47.873 [DEBUG] [Thread-126781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:44:47.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:44:47.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:44:47.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:44:47.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:44:47.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:44:47.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:44:47.910 [DEBUG] [Thread-126781] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:44:57.611 [DEBUG] [Thread-126783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:06.645 [DEBUG] [Thread-126784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:12.663 [DEBUG] [Thread-126785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:17.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:45:17.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:45:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:45:20.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 44, 36), 11.96, 46.45, 0.0, 9.67, 21.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:45:20.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:44:36
2026-02-11T09:45:20.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:45:20.598 [DEBUG] [Thread-126786] [transport.py] [_log()] starting thread (client mode): 0xa2d7b430
2026-02-11T09:45:20.598 [DEBUG] [Thread-126786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:45:20.617 [DEBUG] [Thread-126786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:45:20.618 [INFO] [Thread-126786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:45:20.620 [DEBUG] [Thread-126786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:45:20.620 [DEBUG] [Thread-126786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] client lang: <none>
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] server lang: <none>
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] kex follows: False
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] Compression: none
2026-02-11T09:45:20.621 [DEBUG] [Thread-126786] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:45:20.636 [DEBUG] [Thread-126786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:45:20.637 [DEBUG] [Thread-126786] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:45:20.637 [DEBUG] [Thread-126786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:45:20.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:45:20.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:45:20.639 [DEBUG] [Thread-126786] [transport.py] [_log()] userauth is OK
2026-02-11T09:45:20.639 [DEBUG] [Thread-126786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:45:20.640 [DEBUG] [Thread-126786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:45:20.640 [DEBUG] [Thread-126786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:45:20.640 [DEBUG] [Thread-126786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:45:20.658 [INFO] [Thread-126786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:45:20.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:45:21.270 [DEBUG] [Thread-126786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:45:21.270 [DEBUG] [Thread-126786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:45:21.271 [DEBUG] [Thread-126786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:45:21.312 [DEBUG] [Thread-126786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:45:21.312 [DEBUG] [Thread-126786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:45:21.315 [DEBUG] [Thread-126786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:45:21.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:45:21.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:45:21.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:45:21.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:45:21.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:45:21.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:45:21.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:45:21.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:45:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:45:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.323056 -999.00  +21.00   6.05     54  +11.40 1 2 1 1 1   888    0 9.40 -18.96 ----- 9.2 6.0 289.0 8.0 28.9 -23.0 28.2 -20.7 26.0 -19.7 26.7 -21.2
2026-02-11T09:45:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:45:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:45:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.323056
2026-02-11T09:45:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:45:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:45:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:45:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:45:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:45:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:44:36', tmtdew=11.96, humidity=46.45, cloud=0.0, wind=9.67, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:45:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:45:21.342 [DEBUG] [Thread-126786] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:45:21.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:45:21.442 [DEBUG] [Thread-126789] [transport.py] [_log()] starting thread (client mode): 0xa2d7b610
2026-02-11T09:45:21.443 [DEBUG] [Thread-126789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:45:21.466 [DEBUG] [Thread-126789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:45:21.467 [INFO] [Thread-126789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:45:21.483 [DEBUG] [Thread-126789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:45:21.483 [DEBUG] [Thread-126789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:45:21.484 [DEBUG] [Thread-126789] [transport.py] [_log()] client lang: <none>
2026-02-11T09:45:21.485 [DEBUG] [Thread-126789] [transport.py] [_log()] server lang: <none>
2026-02-11T09:45:21.485 [DEBUG] [Thread-126789] [transport.py] [_log()] kex follows: False
2026-02-11T09:45:21.485 [DEBUG] [Thread-126789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:45:21.485 [DEBUG] [Thread-126789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:45:21.485 [DEBUG] [Thread-126789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:45:21.485 [DEBUG] [Thread-126789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:45:21.485 [DEBUG] [Thread-126789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:45:21.486 [DEBUG] [Thread-126789] [transport.py] [_log()] Compression: none
2026-02-11T09:45:21.486 [DEBUG] [Thread-126789] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:45:21.551 [DEBUG] [Thread-126789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:45:21.552 [DEBUG] [Thread-126789] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:45:21.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:45:21.553 [DEBUG] [Thread-126789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:45:21.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:45:21.624 [DEBUG] [Thread-126789] [transport.py] [_log()] userauth is OK
2026-02-11T09:45:21.625 [DEBUG] [Thread-126789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:45:21.625 [DEBUG] [Thread-126789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:45:21.625 [DEBUG] [Thread-126789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:45:21.625 [DEBUG] [Thread-126789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:45:21.652 [INFO] [Thread-126789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:45:21.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:45:21.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:45:22.473 [DEBUG] [Thread-126789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:45:22.474 [DEBUG] [Thread-126789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:45:22.522 [DEBUG] [Thread-126789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:45:22.523 [DEBUG] [Thread-126789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:45:22.533 [DEBUG] [Thread-126789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:45:22.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:45:22.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')
2026-02-11T09:45:22.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:45:22.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:45:22.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:45:22.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:45:22.570 [DEBUG] [Thread-126789] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:45:27.701 [DEBUG] [Thread-126791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:42.752 [DEBUG] [Thread-126792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:44.704 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:44.705 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:45:52.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:45:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:45:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 45, 12), 11.66, 47.06, 0.0, 7.62, 21.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:45:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:45:12
2026-02-11T09:45:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:45:55.815 [DEBUG] [Thread-126793] [transport.py] [_log()] starting thread (client mode): 0xa81d75b0
2026-02-11T09:45:55.815 [DEBUG] [Thread-126793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:45:55.835 [DEBUG] [Thread-126793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:45:55.836 [INFO] [Thread-126793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] client lang: <none>
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] server lang: <none>
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] kex follows: False
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:45:55.839 [DEBUG] [Thread-126793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:45:55.840 [DEBUG] [Thread-126793] [transport.py] [_log()] Compression: none
2026-02-11T09:45:55.840 [DEBUG] [Thread-126793] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:45:55.848 [DEBUG] [Thread-126793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:45:55.848 [DEBUG] [Thread-126793] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:45:55.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:45:55.849 [DEBUG] [Thread-126793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:45:55.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:45:55.893 [DEBUG] [Thread-126793] [transport.py] [_log()] userauth is OK
2026-02-11T09:45:55.893 [DEBUG] [Thread-126793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:45:55.893 [DEBUG] [Thread-126793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:45:55.894 [DEBUG] [Thread-126793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:45:55.894 [DEBUG] [Thread-126793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:45:55.925 [INFO] [Thread-126793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:45:55.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:45:56.571 [DEBUG] [Thread-126793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:45:56.571 [DEBUG] [Thread-126793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:45:56.571 [DEBUG] [Thread-126793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:45:56.612 [DEBUG] [Thread-126793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:45:56.613 [DEBUG] [Thread-126793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:45:56.616 [DEBUG] [Thread-126793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:45:56.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:45:56.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:45:56.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:45:56.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:45:56.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:45:56.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:45:56.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:45:56.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:45:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:45:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.323403 -999.00  +21.00   8.97     53  +11.20 1 2 1 1 1   888    0 9.53 -18.91 ----- 9.3 9.0 290.2 11.8 29.1 -23.4 28.2 -20.7 25.8 -24.5 26.8 -21.5
2026-02-11T09:45:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:45:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:45:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.323403
2026-02-11T09:45:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:45:56.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:45:56.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:45:56.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:45:56.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:45:56.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:45:12', tmtdew=11.66, humidity=47.06, cloud=0.0, wind=7.62, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:45:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:45:56.645 [DEBUG] [Thread-126793] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:45:56.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:45:56.741 [DEBUG] [Thread-126796] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9e0
2026-02-11T09:45:56.741 [DEBUG] [Thread-126796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:45:56.756 [DEBUG] [Thread-126796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:45:56.756 [INFO] [Thread-126796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:45:56.763 [DEBUG] [Thread-126796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:45:56.764 [DEBUG] [Thread-126796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:45:56.764 [DEBUG] [Thread-126796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:45:56.764 [DEBUG] [Thread-126796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:56.764 [DEBUG] [Thread-126796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:45:56.764 [DEBUG] [Thread-126796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:56.764 [DEBUG] [Thread-126796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] client lang: <none>
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] server lang: <none>
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] kex follows: False
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:45:56.765 [DEBUG] [Thread-126796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:45:56.766 [DEBUG] [Thread-126796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:45:56.766 [DEBUG] [Thread-126796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:45:56.766 [DEBUG] [Thread-126796] [transport.py] [_log()] Compression: none
2026-02-11T09:45:56.766 [DEBUG] [Thread-126796] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:45:56.825 [DEBUG] [Thread-126796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:45:56.826 [DEBUG] [Thread-126796] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:45:56.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:45:56.827 [DEBUG] [Thread-126796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:45:56.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:45:56.888 [DEBUG] [Thread-126796] [transport.py] [_log()] userauth is OK
2026-02-11T09:45:56.889 [DEBUG] [Thread-126796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:45:56.889 [DEBUG] [Thread-126796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:45:56.889 [DEBUG] [Thread-126796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:45:56.889 [DEBUG] [Thread-126796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:45:56.907 [INFO] [Thread-126796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:45:56.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:45:56.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:45:57.730 [DEBUG] [Thread-126796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:45:57.731 [DEBUG] [Thread-126796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:45:57.778 [DEBUG] [Thread-126796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:45:57.779 [DEBUG] [Thread-126796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:45:57.787 [DEBUG] [Thread-126796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:45:57.789 [DEBUG] [Thread-126798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:45:57.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:45:57.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:45:57.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:45:57.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:45:57.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:45:57.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:45:57.823 [DEBUG] [Thread-126796] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:46:06.698 [DEBUG] [Thread-126799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:46:12.844 [DEBUG] [Thread-126800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:46:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:46:27.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:46:27.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:46:27.880 [DEBUG] [Thread-126801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:46:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 45, 47), 11.58, 47.34, 0.0, 7.84, 21.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:46:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:45:47
2026-02-11T09:46:30.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:46:30.985 [DEBUG] [Thread-126802] [transport.py] [_log()] starting thread (client mode): 0xa81d7820
2026-02-11T09:46:30.985 [DEBUG] [Thread-126802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:46:31.006 [DEBUG] [Thread-126802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:46:31.006 [INFO] [Thread-126802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] client lang: <none>
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] server lang: <none>
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] kex follows: False
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] Compression: none
2026-02-11T09:46:31.010 [DEBUG] [Thread-126802] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:46:31.028 [DEBUG] [Thread-126802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:46:31.028 [DEBUG] [Thread-126802] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:46:31.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:46:31.029 [DEBUG] [Thread-126802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:46:31.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:46:31.032 [DEBUG] [Thread-126802] [transport.py] [_log()] userauth is OK
2026-02-11T09:46:31.032 [DEBUG] [Thread-126802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:46:31.032 [DEBUG] [Thread-126802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:46:31.032 [DEBUG] [Thread-126802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:46:31.032 [DEBUG] [Thread-126802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:46:31.056 [INFO] [Thread-126802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:46:31.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:46:31.714 [DEBUG] [Thread-126802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:46:31.714 [DEBUG] [Thread-126802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:46:31.714 [DEBUG] [Thread-126802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:46:31.755 [DEBUG] [Thread-126802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:46:31.755 [DEBUG] [Thread-126802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:46:31.758 [DEBUG] [Thread-126802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:46:31.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:46:31.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:46:31.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:46:31.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:46:31.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:46:31.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:46:31.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:46:31.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:46:31.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:46:31.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.323750 -999.00  +21.10  11.07     53  +11.10 1 2 1 1 1   888    0 9.55 -19.29 ----- 12.3 11.1 317.7 15.3 29.2 -21.9 28.3 -20.6 26.1 -21.2 26.9 -21.2
2026-02-11T09:46:31.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:46:31.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:46:31.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.323750
2026-02-11T09:46:31.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:46:31.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:46:31.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:46:31.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:46:31.783 [DEBUG] [Thread-126802] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:46:31.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:46:31.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:45:47', tmtdew=11.58, humidity=47.34, cloud=0.0, wind=7.84, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:46:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:46:31.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:46:31.878 [DEBUG] [Thread-126805] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-11T09:46:31.879 [DEBUG] [Thread-126805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:46:31.894 [DEBUG] [Thread-126805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:46:31.894 [INFO] [Thread-126805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:46:31.902 [DEBUG] [Thread-126805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] client lang: <none>
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] server lang: <none>
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] kex follows: False
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] Compression: none
2026-02-11T09:46:31.903 [DEBUG] [Thread-126805] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:46:31.964 [DEBUG] [Thread-126805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:46:31.965 [DEBUG] [Thread-126805] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:46:31.966 [DEBUG] [Thread-126805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:46:31.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:46:31.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:46:32.023 [DEBUG] [Thread-126805] [transport.py] [_log()] userauth is OK
2026-02-11T09:46:32.023 [DEBUG] [Thread-126805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:46:32.023 [DEBUG] [Thread-126805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:46:32.023 [DEBUG] [Thread-126805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:46:32.024 [DEBUG] [Thread-126805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:46:32.048 [INFO] [Thread-126805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:46:32.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:46:32.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:46:32.889 [DEBUG] [Thread-126805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:46:32.889 [DEBUG] [Thread-126805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:46:32.940 [DEBUG] [Thread-126805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:46:32.940 [DEBUG] [Thread-126805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:46:32.949 [DEBUG] [Thread-126805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:46:32.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:46:32.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:46:32.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
2026-02-11T09:46:32.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:46:32.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:46:32.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:46:32.982 [DEBUG] [Thread-126805] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:46:42.913 [DEBUG] [Thread-126807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:46:44.847 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:46:44.848 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:46:57.958 [DEBUG] [Thread-126808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:47:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:47:03.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:47:03.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:47:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 46, 24), 11.58, 47.34, 0.0, 7.8, 21.35, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:47:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:46:24
2026-02-11T09:47:05.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:47:05.947 [DEBUG] [Thread-126809] [transport.py] [_log()] starting thread (client mode): 0xa2d56740
2026-02-11T09:47:05.947 [DEBUG] [Thread-126809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:47:05.967 [DEBUG] [Thread-126809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:47:05.968 [INFO] [Thread-126809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] client lang: <none>
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] server lang: <none>
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] kex follows: False
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] Compression: none
2026-02-11T09:47:05.971 [DEBUG] [Thread-126809] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:47:05.989 [DEBUG] [Thread-126809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:47:05.990 [DEBUG] [Thread-126809] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:47:05.990 [DEBUG] [Thread-126809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:47:05.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:47:05.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:47:06.032 [DEBUG] [Thread-126809] [transport.py] [_log()] userauth is OK
2026-02-11T09:47:06.032 [DEBUG] [Thread-126809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:47:06.033 [DEBUG] [Thread-126809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:47:06.033 [DEBUG] [Thread-126809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:47:06.033 [DEBUG] [Thread-126809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:47:06.053 [INFO] [Thread-126809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:47:06.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:47:06.672 [DEBUG] [Thread-126809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:47:06.673 [DEBUG] [Thread-126809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:47:06.673 [DEBUG] [Thread-126809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:47:06.713 [DEBUG] [Thread-126809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:47:06.714 [DEBUG] [Thread-126809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:47:06.717 [DEBUG] [Thread-126809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:47:06.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:47:06.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:47:06.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:47:06.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:47:06.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:47:06.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:47:06.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.324098 -999.00  +21.20   7.66     53  +11.30 1 2 1 1 1   888    0 9.27 -18.52 ----- 9.0 7.7 292.2 11.5 29.4 -22.0 28.4 -20.4 26.3 -19.3 27.0 -20.3
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.324098
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:47:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:46:24', tmtdew=11.58, humidity=47.34, cloud=0.0, wind=7.8, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:46:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:47:06.735 [DEBUG] [Thread-126809] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:47:06.751 [DEBUG] [Thread-126812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:47:06.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:47:06.817 [DEBUG] [Thread-126813] [transport.py] [_log()] starting thread (client mode): 0xa57c1930
2026-02-11T09:47:06.817 [DEBUG] [Thread-126813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:47:06.831 [DEBUG] [Thread-126813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:47:06.832 [INFO] [Thread-126813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] client lang: <none>
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] server lang: <none>
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] kex follows: False
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:47:06.839 [DEBUG] [Thread-126813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:47:06.840 [DEBUG] [Thread-126813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:47:06.840 [DEBUG] [Thread-126813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:47:06.840 [DEBUG] [Thread-126813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:47:06.840 [DEBUG] [Thread-126813] [transport.py] [_log()] Compression: none
2026-02-11T09:47:06.840 [DEBUG] [Thread-126813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:47:06.900 [DEBUG] [Thread-126813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:47:06.900 [DEBUG] [Thread-126813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:47:06.901 [DEBUG] [Thread-126813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:47:06.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:47:06.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:47:06.964 [DEBUG] [Thread-126813] [transport.py] [_log()] userauth is OK
2026-02-11T09:47:06.964 [DEBUG] [Thread-126813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:47:06.965 [DEBUG] [Thread-126813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:47:06.965 [DEBUG] [Thread-126813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:47:06.965 [DEBUG] [Thread-126813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:47:06.984 [INFO] [Thread-126813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:47:06.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:47:06.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:47:07.803 [DEBUG] [Thread-126813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:47:07.804 [DEBUG] [Thread-126813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:47:07.851 [DEBUG] [Thread-126813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:47:07.851 [DEBUG] [Thread-126813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:47:07.860 [DEBUG] [Thread-126813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:47:07.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:47:07.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:47:07.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:47:07.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:47:07.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:47:07.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:47:07.896 [DEBUG] [Thread-126813] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:47:12.997 [DEBUG] [Thread-126815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:47:28.058 [DEBUG] [Thread-126816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:47:37.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:47:37.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:47:37.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
2026-02-11T09:47:39.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 46, 24), 11.58, 47.34, 0.0, 7.8, 21.35, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:47:39.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:46:24
2026-02-11T09:47:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:47:40.499 [DEBUG] [Thread-126817] [transport.py] [_log()] starting thread (client mode): 0xa57581c0
2026-02-11T09:47:40.499 [DEBUG] [Thread-126817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:47:40.519 [DEBUG] [Thread-126817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:47:40.519 [INFO] [Thread-126817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:47:40.522 [DEBUG] [Thread-126817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] client lang: <none>
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] server lang: <none>
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] kex follows: False
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] Compression: none
2026-02-11T09:47:40.523 [DEBUG] [Thread-126817] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:47:40.543 [DEBUG] [Thread-126817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:47:40.543 [DEBUG] [Thread-126817] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:47:40.544 [DEBUG] [Thread-126817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:47:40.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:47:40.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:47:40.585 [DEBUG] [Thread-126817] [transport.py] [_log()] userauth is OK
2026-02-11T09:47:40.585 [DEBUG] [Thread-126817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:47:40.585 [DEBUG] [Thread-126817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:47:40.585 [DEBUG] [Thread-126817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:47:40.585 [DEBUG] [Thread-126817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:47:40.605 [INFO] [Thread-126817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:47:40.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:47:41.222 [DEBUG] [Thread-126817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:47:41.223 [DEBUG] [Thread-126817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:47:41.223 [DEBUG] [Thread-126817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:47:41.263 [DEBUG] [Thread-126817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:47:41.263 [DEBUG] [Thread-126817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:47:41.265 [DEBUG] [Thread-126817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:47:41.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:47:41.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:47:41.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:47:41.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:47:41.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:47:41.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:47:41.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.324445 -999.00  +21.40  10.87     52  +11.30 1 2 1 1 1   888    0 9.55 -20.43 ----- 9.3 10.9 312.2 12.5 29.5 -21.5 28.5 -20.6 26.4 -19.4 27.2 -20.6
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.324445
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:47:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:47:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:47:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:47:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:47:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:46:24', tmtdew=11.58, humidity=47.34, cloud=0.0, wind=7.8, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:47:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:47:41.284 [DEBUG] [Thread-126817] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:47:41.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:47:41.370 [DEBUG] [Thread-126820] [transport.py] [_log()] starting thread (client mode): 0xa57c24a0
2026-02-11T09:47:41.371 [DEBUG] [Thread-126820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:47:41.385 [DEBUG] [Thread-126820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:47:41.385 [INFO] [Thread-126820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] client lang: <none>
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] server lang: <none>
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] kex follows: False
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] Compression: none
2026-02-11T09:47:41.393 [DEBUG] [Thread-126820] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:47:41.448 [DEBUG] [Thread-126820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:47:41.448 [DEBUG] [Thread-126820] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:47:41.449 [DEBUG] [Thread-126820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:47:41.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:47:41.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:47:41.505 [DEBUG] [Thread-126820] [transport.py] [_log()] userauth is OK
2026-02-11T09:47:41.505 [DEBUG] [Thread-126820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:47:41.505 [DEBUG] [Thread-126820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:47:41.505 [DEBUG] [Thread-126820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:47:41.505 [DEBUG] [Thread-126820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:47:41.523 [INFO] [Thread-126820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:47:41.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:47:41.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:47:42.323 [DEBUG] [Thread-126820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:47:42.323 [DEBUG] [Thread-126820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:47:42.371 [DEBUG] [Thread-126820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:47:42.371 [DEBUG] [Thread-126820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:47:42.381 [DEBUG] [Thread-126820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:47:42.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:47:42.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:47:42.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
2026-02-11T09:47:42.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:47:42.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:47:42.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:47:42.416 [DEBUG] [Thread-126820] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:47:43.098 [DEBUG] [Thread-126822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:47:44.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:47:44.992 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:47:58.146 [DEBUG] [Thread-126823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:48:06.815 [DEBUG] [Thread-126824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:48:12.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:48:12.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:48:12.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:48:13.184 [DEBUG] [Thread-126825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:48:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 47, 36), 12.49, 44.89, 0.0, 11.68, 21.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:48:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:47:36
2026-02-11T09:48:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:48:15.154 [DEBUG] [Thread-126826] [transport.py] [_log()] starting thread (client mode): 0xa2d790c0
2026-02-11T09:48:15.155 [DEBUG] [Thread-126826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:48:15.169 [DEBUG] [Thread-126826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:48:15.169 [INFO] [Thread-126826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:48:15.172 [DEBUG] [Thread-126826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] client lang: <none>
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] server lang: <none>
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] kex follows: False
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] Compression: none
2026-02-11T09:48:15.173 [DEBUG] [Thread-126826] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:48:15.191 [DEBUG] [Thread-126826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:48:15.192 [DEBUG] [Thread-126826] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:48:15.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:48:15.193 [DEBUG] [Thread-126826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:48:15.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:48:15.196 [DEBUG] [Thread-126826] [transport.py] [_log()] userauth is OK
2026-02-11T09:48:15.196 [DEBUG] [Thread-126826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:48:15.197 [DEBUG] [Thread-126826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:48:15.197 [DEBUG] [Thread-126826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:48:15.197 [DEBUG] [Thread-126826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:48:15.212 [INFO] [Thread-126826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:48:15.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:48:15.846 [DEBUG] [Thread-126826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:48:15.846 [DEBUG] [Thread-126826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:48:15.847 [DEBUG] [Thread-126826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:48:15.887 [DEBUG] [Thread-126826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:48:15.888 [DEBUG] [Thread-126826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:48:15.891 [DEBUG] [Thread-126826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:48:15.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:48:15.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:48:15.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:48:15.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:48:15.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:48:15.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:48:15.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:48:15.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.324792 -999.00  +21.50  15.70     51  +11.20 1 2 1 1 1   888    0 9.45 -19.45 ----- 18.0 15.7 294.6 18.7 29.6 -22.5 28.5 -20.9 26.4 -19.6 27.2 -20.4
2026-02-11T09:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.324792
2026-02-11T09:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:48:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:47:36', tmtdew=12.49, humidity=44.89, cloud=0.0, wind=11.68, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:47:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:48:15.920 [DEBUG] [Thread-126826] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:48:16.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:48:16.019 [DEBUG] [Thread-126829] [transport.py] [_log()] starting thread (client mode): 0xa57c39a0
2026-02-11T09:48:16.019 [DEBUG] [Thread-126829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:48:16.033 [DEBUG] [Thread-126829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:48:16.033 [INFO] [Thread-126829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:16.041 [DEBUG] [Thread-126829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] client lang: <none>
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] server lang: <none>
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] kex follows: False
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] Compression: none
2026-02-11T09:48:16.042 [DEBUG] [Thread-126829] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:48:16.106 [DEBUG] [Thread-126829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:48:16.107 [DEBUG] [Thread-126829] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:48:16.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:48:16.108 [DEBUG] [Thread-126829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:48:16.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:48:16.164 [DEBUG] [Thread-126829] [transport.py] [_log()] userauth is OK
2026-02-11T09:48:16.164 [DEBUG] [Thread-126829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:48:16.164 [DEBUG] [Thread-126829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:48:16.164 [DEBUG] [Thread-126829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:48:16.165 [DEBUG] [Thread-126829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:48:16.183 [INFO] [Thread-126829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:48:16.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:48:16.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:48:17.031 [DEBUG] [Thread-126829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:48:17.032 [DEBUG] [Thread-126829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:48:17.079 [DEBUG] [Thread-126829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:48:17.079 [DEBUG] [Thread-126829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:48:17.088 [DEBUG] [Thread-126829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:48:17.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:48:17.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:48:17.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:48:17.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:48:17.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:48:17.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:48:17.126 [DEBUG] [Thread-126829] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:48:28.217 [DEBUG] [Thread-126831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:48:43.281 [DEBUG] [Thread-126832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:48:45.131 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:48:45.132 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:48:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:48:47.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:48: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
2026-02-11T09:48:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 48, 12), 11.94, 46.39, 0.0, 11.1, 21.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:48:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:48:12
2026-02-11T09:48:49.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:48:49.582 [DEBUG] [Thread-126833] [transport.py] [_log()] starting thread (client mode): 0xa2dfbc40
2026-02-11T09:48:49.582 [DEBUG] [Thread-126833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:48:49.602 [DEBUG] [Thread-126833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:48:49.603 [INFO] [Thread-126833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:48:49.606 [DEBUG] [Thread-126833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:48:49.606 [DEBUG] [Thread-126833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:48:49.606 [DEBUG] [Thread-126833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:48:49.606 [DEBUG] [Thread-126833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:49.606 [DEBUG] [Thread-126833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:49.606 [DEBUG] [Thread-126833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:49.606 [DEBUG] [Thread-126833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] client lang: <none>
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] server lang: <none>
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] kex follows: False
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] Compression: none
2026-02-11T09:48:49.607 [DEBUG] [Thread-126833] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:48:49.626 [DEBUG] [Thread-126833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:48:49.627 [DEBUG] [Thread-126833] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:48:49.628 [DEBUG] [Thread-126833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:48:49.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:48:49.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:48:49.631 [DEBUG] [Thread-126833] [transport.py] [_log()] userauth is OK
2026-02-11T09:48:49.631 [DEBUG] [Thread-126833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:48:49.631 [DEBUG] [Thread-126833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:48:49.631 [DEBUG] [Thread-126833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:48:49.632 [DEBUG] [Thread-126833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:48:49.646 [INFO] [Thread-126833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:48:49.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:48:50.246 [DEBUG] [Thread-126833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:48:50.247 [DEBUG] [Thread-126833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:48:50.247 [DEBUG] [Thread-126833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:48:50.287 [DEBUG] [Thread-126833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:48:50.288 [DEBUG] [Thread-126833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:48:50.291 [DEBUG] [Thread-126833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:48:50.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:48:50.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:48:50.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:48:50.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:48:50.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:48:50.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:48:50.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:48:50.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:48:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:48:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.325139 -999.00  +21.80  17.48     50  +11.20 1 2 1 1 1   888    0 9.70 -17.48 ----- 17.9 17.5 272.4 20.3 29.5 -23.1 28.6 -20.9 26.5 -20.8 27.2 -20.7
2026-02-11T09:48:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:48:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:48:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.325139
2026-02-11T09:48:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:48:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:48:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:48:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:48:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:48:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:48:12', tmtdew=11.94, humidity=46.39, cloud=0.0, wind=11.1, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:48:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:48:50.320 [DEBUG] [Thread-126833] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:48:50.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:48:50.416 [DEBUG] [Thread-126836] [transport.py] [_log()] starting thread (client mode): 0xa2d57eb0
2026-02-11T09:48:50.417 [DEBUG] [Thread-126836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:48:50.431 [DEBUG] [Thread-126836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:48:50.431 [INFO] [Thread-126836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] client lang: <none>
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] server lang: <none>
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] kex follows: False
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:48:50.439 [DEBUG] [Thread-126836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:48:50.440 [DEBUG] [Thread-126836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:48:50.440 [DEBUG] [Thread-126836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:48:50.440 [DEBUG] [Thread-126836] [transport.py] [_log()] Compression: none
2026-02-11T09:48:50.440 [DEBUG] [Thread-126836] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:48:50.497 [DEBUG] [Thread-126836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:48:50.498 [DEBUG] [Thread-126836] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:48:50.498 [DEBUG] [Thread-126836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:48:50.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:48:50.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:48:50.557 [DEBUG] [Thread-126836] [transport.py] [_log()] userauth is OK
2026-02-11T09:48:50.558 [DEBUG] [Thread-126836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:48:50.558 [DEBUG] [Thread-126836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:48:50.558 [DEBUG] [Thread-126836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:48:50.558 [DEBUG] [Thread-126836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:48:50.577 [INFO] [Thread-126836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:48:50.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:48:50.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:48:51.518 [DEBUG] [Thread-126836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:48:51.518 [DEBUG] [Thread-126836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:48:51.566 [DEBUG] [Thread-126836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:48:51.566 [DEBUG] [Thread-126836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:48:51.575 [DEBUG] [Thread-126836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:48:51.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:48:51.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')
2026-02-11T09:48:51.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:48:51.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:48:51.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:48:51.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:48:51.612 [DEBUG] [Thread-126836] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:48:58.317 [DEBUG] [Thread-126838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:06.869 [DEBUG] [Thread-126839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:13.368 [DEBUG] [Thread-126840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:21.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:49:21.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:49:21.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:49:23.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 48, 48), 12.74, 44.28, 0.0, 15.18, 22.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:49:23.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:48:48
2026-02-11T09:49:23.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:49:23.928 [DEBUG] [Thread-126841] [transport.py] [_log()] starting thread (client mode): 0xa57e1ff0
2026-02-11T09:49:23.928 [DEBUG] [Thread-126841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:49:23.950 [DEBUG] [Thread-126841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:49:23.950 [INFO] [Thread-126841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:49:23.953 [DEBUG] [Thread-126841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:49:23.953 [DEBUG] [Thread-126841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:49:23.953 [DEBUG] [Thread-126841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:49:23.953 [DEBUG] [Thread-126841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:23.953 [DEBUG] [Thread-126841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:23.953 [DEBUG] [Thread-126841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:23.953 [DEBUG] [Thread-126841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] client lang: <none>
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] server lang: <none>
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] kex follows: False
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] Compression: none
2026-02-11T09:49:23.954 [DEBUG] [Thread-126841] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:49:23.973 [DEBUG] [Thread-126841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:49:23.973 [DEBUG] [Thread-126841] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:49:23.974 [DEBUG] [Thread-126841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:49:23.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:49:23.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:49:23.976 [DEBUG] [Thread-126841] [transport.py] [_log()] userauth is OK
2026-02-11T09:49:23.976 [DEBUG] [Thread-126841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:49:23.976 [DEBUG] [Thread-126841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:49:23.976 [DEBUG] [Thread-126841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:49:23.977 [DEBUG] [Thread-126841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:49:23.996 [INFO] [Thread-126841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:49:23.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:49:24.607 [DEBUG] [Thread-126841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:49:24.607 [DEBUG] [Thread-126841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:49:24.608 [DEBUG] [Thread-126841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:49:24.648 [DEBUG] [Thread-126841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:49:24.649 [DEBUG] [Thread-126841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:49:24.652 [DEBUG] [Thread-126841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:49:24.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:49:24.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:49:24.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:49:24.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:49:24.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:49:24.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:49:24.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:49:24.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:49:24.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:49:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.325834 -999.00  +21.70  11.62     50  +11.10 1 2 1 1 1   888    0 9.56 -11.60 ----- 11.4 11.6 281.2 20.1 29.3 -21.5 28.5 -20.3 26.2 -24.6 27.2 -20.9
2026-02-11T09:49:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:49:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:49:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.325834
2026-02-11T09:49:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:49:24.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:49:24.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:49:24.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:49:24.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:49:24.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:48:48', tmtdew=12.74, humidity=44.28, cloud=0.0, wind=15.18, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:49:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:49:24.679 [DEBUG] [Thread-126841] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:49:24.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:49:24.773 [DEBUG] [Thread-126844] [transport.py] [_log()] starting thread (client mode): 0xa2d01e10
2026-02-11T09:49:24.773 [DEBUG] [Thread-126844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:49:24.787 [DEBUG] [Thread-126844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:49:24.788 [INFO] [Thread-126844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:49:24.795 [DEBUG] [Thread-126844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:49:24.795 [DEBUG] [Thread-126844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:49:24.795 [DEBUG] [Thread-126844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] client lang: <none>
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] server lang: <none>
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] kex follows: False
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] Compression: none
2026-02-11T09:49:24.796 [DEBUG] [Thread-126844] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:49:24.856 [DEBUG] [Thread-126844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:49:24.856 [DEBUG] [Thread-126844] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:49:24.857 [DEBUG] [Thread-126844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:49:24.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:49:24.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:49:24.915 [DEBUG] [Thread-126844] [transport.py] [_log()] userauth is OK
2026-02-11T09:49:24.916 [DEBUG] [Thread-126844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:49:24.916 [DEBUG] [Thread-126844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:49:24.916 [DEBUG] [Thread-126844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:49:24.916 [DEBUG] [Thread-126844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:49:24.935 [INFO] [Thread-126844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:49:24.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:49:24.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:49:25.798 [DEBUG] [Thread-126844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:49:25.798 [DEBUG] [Thread-126844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:49:25.846 [DEBUG] [Thread-126844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:49:25.847 [DEBUG] [Thread-126844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:49:25.856 [DEBUG] [Thread-126844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:49:25.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:49:25.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')
2026-02-11T09:49:25.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:49:25.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:49:25.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:49:25.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:49:25.893 [DEBUG] [Thread-126844] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:49:28.406 [DEBUG] [Thread-126846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:43.459 [DEBUG] [Thread-126847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:45.275 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:45.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:55.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:49:55.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:49:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:49:57.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 49, 24), 12.73, 44.31, 0.0, 13.78, 22.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:49:57.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:49:24
2026-02-11T09:49:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:49:58.359 [DEBUG] [Thread-126848] [transport.py] [_log()] starting thread (client mode): 0xa2dfa9e0
2026-02-11T09:49:58.359 [DEBUG] [Thread-126848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:49:58.379 [DEBUG] [Thread-126848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:49:58.380 [INFO] [Thread-126848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:49:58.383 [DEBUG] [Thread-126848] [transport.py] [_log()] client lang: <none>
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] server lang: <none>
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] kex follows: False
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] Compression: none
2026-02-11T09:49:58.384 [DEBUG] [Thread-126848] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:49:58.402 [DEBUG] [Thread-126848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:49:58.403 [DEBUG] [Thread-126848] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:49:58.403 [DEBUG] [Thread-126848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:49:58.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:49:58.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:49:58.444 [DEBUG] [Thread-126848] [transport.py] [_log()] userauth is OK
2026-02-11T09:49:58.444 [DEBUG] [Thread-126848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:49:58.444 [DEBUG] [Thread-126848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:49:58.445 [DEBUG] [Thread-126848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:49:58.445 [DEBUG] [Thread-126848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:49:58.476 [INFO] [Thread-126848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:49:58.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:49:58.497 [DEBUG] [Thread-126850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:49:59.138 [DEBUG] [Thread-126848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:49:59.138 [DEBUG] [Thread-126848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:49:59.138 [DEBUG] [Thread-126848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:49:59.179 [DEBUG] [Thread-126848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:49:59.179 [DEBUG] [Thread-126848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:49:59.182 [DEBUG] [Thread-126848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:49:59.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:49:59.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:49:59.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:49:59.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:49:59.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:49:59.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:49:59.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:49:59.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:49:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:49:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.326181 -999.00  +21.70  21.18     50  +11.00 1 2 1 1 1   888    0 10.04 -9.13 ----- 21.6 21.2 281.0 22.6 29.5 -21.6 28.4 -20.9 26.3 -23.0 27.2 -21.1
2026-02-11T09:49:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:49:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:49:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.326181
2026-02-11T09:49:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:49:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:49:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:49:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:49:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:49:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:49:24', tmtdew=12.73, humidity=44.31, cloud=0.0, wind=13.78, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:49:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:49:59.204 [DEBUG] [Thread-126848] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:49:59.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:49:59.300 [DEBUG] [Thread-126852] [transport.py] [_log()] starting thread (client mode): 0xa2dfac20
2026-02-11T09:49:59.300 [DEBUG] [Thread-126852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:49:59.315 [DEBUG] [Thread-126852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:49:59.315 [INFO] [Thread-126852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:49:59.323 [DEBUG] [Thread-126852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:49:59.323 [DEBUG] [Thread-126852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:49:59.323 [DEBUG] [Thread-126852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:49:59.323 [DEBUG] [Thread-126852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:59.323 [DEBUG] [Thread-126852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] client lang: <none>
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] server lang: <none>
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] kex follows: False
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] Compression: none
2026-02-11T09:49:59.324 [DEBUG] [Thread-126852] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:49:59.380 [DEBUG] [Thread-126852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:49:59.380 [DEBUG] [Thread-126852] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:49:59.381 [DEBUG] [Thread-126852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:49:59.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:49:59.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:49:59.436 [DEBUG] [Thread-126852] [transport.py] [_log()] userauth is OK
2026-02-11T09:49:59.436 [DEBUG] [Thread-126852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:49:59.437 [DEBUG] [Thread-126852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:49:59.437 [DEBUG] [Thread-126852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:49:59.437 [DEBUG] [Thread-126852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:49:59.460 [INFO] [Thread-126852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:49:59.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:49:59.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:50:00.286 [DEBUG] [Thread-126852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:50:00.287 [DEBUG] [Thread-126852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:50:00.334 [DEBUG] [Thread-126852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:50:00.334 [DEBUG] [Thread-126852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:50:00.343 [DEBUG] [Thread-126852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:50:00.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:50:00.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:50:00.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:50:00.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:50:00.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:50:00.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:50:00.377 [DEBUG] [Thread-126852] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:50:06.919 [DEBUG] [Thread-126854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:50:13.531 [DEBUG] [Thread-126855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:50:28.585 [DEBUG] [Thread-126856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:50:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:50:30.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:50:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:50:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 49, 59), 12.56, 44.73, 0.0, 15.05, 21.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:50:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:49:59
2026-02-11T09:50:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:50:32.764 [DEBUG] [Thread-126857] [transport.py] [_log()] starting thread (client mode): 0xa57b1570
2026-02-11T09:50:32.764 [DEBUG] [Thread-126857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:50:32.783 [DEBUG] [Thread-126857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:50:32.783 [INFO] [Thread-126857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:50:32.786 [DEBUG] [Thread-126857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] client lang: <none>
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] server lang: <none>
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] kex follows: False
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] Compression: none
2026-02-11T09:50:32.787 [DEBUG] [Thread-126857] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:50:32.805 [DEBUG] [Thread-126857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:50:32.806 [DEBUG] [Thread-126857] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:50:32.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:50:32.807 [DEBUG] [Thread-126857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:50:32.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:50:32.809 [DEBUG] [Thread-126857] [transport.py] [_log()] userauth is OK
2026-02-11T09:50:32.809 [DEBUG] [Thread-126857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:50:32.810 [DEBUG] [Thread-126857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:50:32.810 [DEBUG] [Thread-126857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:50:32.810 [DEBUG] [Thread-126857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:50:32.824 [INFO] [Thread-126857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:50:32.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:50:33.462 [DEBUG] [Thread-126857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:50:33.462 [DEBUG] [Thread-126857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:50:33.462 [DEBUG] [Thread-126857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:50:33.504 [DEBUG] [Thread-126857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:50:33.504 [DEBUG] [Thread-126857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:50:33.507 [DEBUG] [Thread-126857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:50:33.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:50:33.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:50:33.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:50:33.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:50:33.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:50:33.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:50:33.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:50:33.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:50:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:50:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.326528 -999.00  +21.40  14.15     51  +10.90 1 2 1 1 1   888    0 9.72 -6.89 ----- 12.3 14.2 298.6 22.6 29.3 -22.4 28.4 -20.5 26.3 -20.4 27.2 -21.0
2026-02-11T09:50:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:50:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:50:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.326528
2026-02-11T09:50:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:50:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:50:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:50:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:50:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:50:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:49:59', tmtdew=12.56, humidity=44.73, cloud=0.0, wind=15.05, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:50:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:50:33.536 [DEBUG] [Thread-126857] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:50:33.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:50:33.634 [DEBUG] [Thread-126860] [transport.py] [_log()] starting thread (client mode): 0xa81d7250
2026-02-11T09:50:33.634 [DEBUG] [Thread-126860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:50:33.652 [DEBUG] [Thread-126860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:50:33.652 [INFO] [Thread-126860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:50:33.663 [DEBUG] [Thread-126860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] client lang: <none>
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] server lang: <none>
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] kex follows: False
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] Compression: none
2026-02-11T09:50:33.664 [DEBUG] [Thread-126860] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:50:33.719 [DEBUG] [Thread-126860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:50:33.719 [DEBUG] [Thread-126860] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:50:33.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:50:33.721 [DEBUG] [Thread-126860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:50:33.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:50:33.775 [DEBUG] [Thread-126860] [transport.py] [_log()] userauth is OK
2026-02-11T09:50:33.775 [DEBUG] [Thread-126860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:50:33.776 [DEBUG] [Thread-126860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:50:33.776 [DEBUG] [Thread-126860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:50:33.776 [DEBUG] [Thread-126860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:50:33.795 [INFO] [Thread-126860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:50:33.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:50:33.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:50:34.607 [DEBUG] [Thread-126860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:50:34.607 [DEBUG] [Thread-126860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:50:34.656 [DEBUG] [Thread-126860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:50:34.657 [DEBUG] [Thread-126860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:50:34.668 [DEBUG] [Thread-126860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:50:34.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:50:34.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:50:34.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:50:34.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:50:34.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:50:34.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:50:34.717 [DEBUG] [Thread-126860] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:50:43.621 [DEBUG] [Thread-126862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:50:45.416 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:50:45.417 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:50:58.663 [DEBUG] [Thread-126863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:51:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:51:04.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:51:04.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:51:06.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 50, 35), 12.43, 45.15, 0.0, 19.09, 22.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:51:06.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:50:35
2026-02-11T09:51:06.978 [DEBUG] [Thread-126864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:51:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:51:07.141 [DEBUG] [Thread-126865] [transport.py] [_log()] starting thread (client mode): 0xa575a0b0
2026-02-11T09:51:07.141 [DEBUG] [Thread-126865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:51:07.162 [DEBUG] [Thread-126865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:51:07.162 [INFO] [Thread-126865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:51:07.165 [DEBUG] [Thread-126865] [transport.py] [_log()] client lang: <none>
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] server lang: <none>
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] kex follows: False
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] Compression: none
2026-02-11T09:51:07.166 [DEBUG] [Thread-126865] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:51:07.185 [DEBUG] [Thread-126865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:51:07.186 [DEBUG] [Thread-126865] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:51:07.186 [DEBUG] [Thread-126865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:51:07.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:51:07.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:51:07.188 [DEBUG] [Thread-126865] [transport.py] [_log()] userauth is OK
2026-02-11T09:51:07.189 [DEBUG] [Thread-126865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:51:07.189 [DEBUG] [Thread-126865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:51:07.189 [DEBUG] [Thread-126865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:51:07.189 [DEBUG] [Thread-126865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:51:07.203 [INFO] [Thread-126865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:51:07.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:51:07.814 [DEBUG] [Thread-126865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:51:07.814 [DEBUG] [Thread-126865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:51:07.815 [DEBUG] [Thread-126865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:51:07.855 [DEBUG] [Thread-126865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:51:07.856 [DEBUG] [Thread-126865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:51:07.859 [DEBUG] [Thread-126865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:51:07.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:51:07.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:51:07.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:51:07.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:51:07.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:51:07.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:51:07.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:51:07.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:51:07.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:51:07.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.326875 -999.00  +21.30  22.57     51  +10.90 1 2 1 1 1   888    0 9.92 -5.09 ----- 17.3 22.6 296.6 26.5 29.3 -22.0 28.4 -21.0 26.3 -20.5 27.2 -20.8
2026-02-11T09:51:07.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:51:07.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:51:07.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.326875
2026-02-11T09:51:07.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:51:07.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:51:07.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:51:07.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:51:07.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:51:07.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:50:35', tmtdew=12.43, humidity=45.15, cloud=0.0, wind=19.09, temperature=22.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:50:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:51:07.884 [DEBUG] [Thread-126865] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:51:07.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:51:07.978 [DEBUG] [Thread-126868] [transport.py] [_log()] starting thread (client mode): 0xa2d7a290
2026-02-11T09:51:07.978 [DEBUG] [Thread-126868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:51:07.993 [DEBUG] [Thread-126868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:51:07.993 [INFO] [Thread-126868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:51:08.001 [DEBUG] [Thread-126868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:51:08.001 [DEBUG] [Thread-126868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] client lang: <none>
2026-02-11T09:51:08.002 [DEBUG] [Thread-126868] [transport.py] [_log()] server lang: <none>
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] kex follows: False
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] Compression: none
2026-02-11T09:51:08.003 [DEBUG] [Thread-126868] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:51:08.062 [DEBUG] [Thread-126868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:51:08.062 [DEBUG] [Thread-126868] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:51:08.062 [DEBUG] [Thread-126868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:51:08.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:51:08.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:51:08.128 [DEBUG] [Thread-126868] [transport.py] [_log()] userauth is OK
2026-02-11T09:51:08.129 [DEBUG] [Thread-126868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:51:08.129 [DEBUG] [Thread-126868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:51:08.129 [DEBUG] [Thread-126868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:51:08.129 [DEBUG] [Thread-126868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:51:08.155 [INFO] [Thread-126868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:51:08.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:51:08.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:51:08.984 [DEBUG] [Thread-126868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:51:08.985 [DEBUG] [Thread-126868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:51:09.033 [DEBUG] [Thread-126868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:51:09.034 [DEBUG] [Thread-126868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:51:09.043 [DEBUG] [Thread-126868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:51:09.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:51:09.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:51:09.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:51:09.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:51:09.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:51:09.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:51:09.090 [DEBUG] [Thread-126868] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:51:13.702 [DEBUG] [Thread-126870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:51:28.758 [DEBUG] [Thread-126871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:51:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:51:39.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:51:39.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
2026-02-11T09:51:41.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 51, 11), 12.57, 44.43, 0.0, 14.61, 21.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:51:41.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:51:11
2026-02-11T09:51:41.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:51:41.667 [DEBUG] [Thread-126872] [transport.py] [_log()] starting thread (client mode): 0xa2d7bca0
2026-02-11T09:51:41.667 [DEBUG] [Thread-126872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:51:41.687 [DEBUG] [Thread-126872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:51:41.687 [INFO] [Thread-126872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:51:41.690 [DEBUG] [Thread-126872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:51:41.690 [DEBUG] [Thread-126872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] client lang: <none>
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] server lang: <none>
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] kex follows: False
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:51:41.691 [DEBUG] [Thread-126872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:51:41.692 [DEBUG] [Thread-126872] [transport.py] [_log()] Compression: none
2026-02-11T09:51:41.692 [DEBUG] [Thread-126872] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:51:41.708 [DEBUG] [Thread-126872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:51:41.709 [DEBUG] [Thread-126872] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:51:41.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:51:41.710 [DEBUG] [Thread-126872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:51:41.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:51:41.712 [DEBUG] [Thread-126872] [transport.py] [_log()] userauth is OK
2026-02-11T09:51:41.712 [DEBUG] [Thread-126872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:51:41.712 [DEBUG] [Thread-126872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:51:41.712 [DEBUG] [Thread-126872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:51:41.712 [DEBUG] [Thread-126872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:51:41.736 [INFO] [Thread-126872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:51:41.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:51:42.381 [DEBUG] [Thread-126872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:51:42.382 [DEBUG] [Thread-126872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:51:42.382 [DEBUG] [Thread-126872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:51:42.423 [DEBUG] [Thread-126872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:51:42.423 [DEBUG] [Thread-126872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:51:42.425 [DEBUG] [Thread-126872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:51:42.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:51:42.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:51:42.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:51:42.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:51:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:51:42.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:51:42.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:51:42.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:51:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:51:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.327222 -999.00  +21.00  16.23     52  +10.80 1 2 1 1 1   888    0 9.97 -3.72 ----- 14.2 16.2 320.2 23.6 29.2 -24.4 28.1 -23.8 26.3 -20.1 27.0 -20.8
2026-02-11T09:51:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:51:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:51:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.327222
2026-02-11T09:51:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:51:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:51:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:51:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:51:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:51:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:51:11', tmtdew=12.57, humidity=44.43, cloud=0.0, wind=14.61, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:51:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:51:42.447 [DEBUG] [Thread-126872] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:51:42.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:51:42.533 [DEBUG] [Thread-126875] [transport.py] [_log()] starting thread (client mode): 0xa2d56b60
2026-02-11T09:51:42.533 [DEBUG] [Thread-126875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:51:42.548 [DEBUG] [Thread-126875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:51:42.548 [INFO] [Thread-126875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:51:42.555 [DEBUG] [Thread-126875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:51:42.556 [DEBUG] [Thread-126875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:51:42.556 [DEBUG] [Thread-126875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:51:42.556 [DEBUG] [Thread-126875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:42.556 [DEBUG] [Thread-126875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:51:42.556 [DEBUG] [Thread-126875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:42.556 [DEBUG] [Thread-126875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] client lang: <none>
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] server lang: <none>
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] kex follows: False
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:51:42.557 [DEBUG] [Thread-126875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:51:42.558 [DEBUG] [Thread-126875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:51:42.558 [DEBUG] [Thread-126875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:51:42.558 [DEBUG] [Thread-126875] [transport.py] [_log()] Compression: none
2026-02-11T09:51:42.558 [DEBUG] [Thread-126875] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:51:42.618 [DEBUG] [Thread-126875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:51:42.619 [DEBUG] [Thread-126875] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:51:42.619 [DEBUG] [Thread-126875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:51:42.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:51:42.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:51:42.681 [DEBUG] [Thread-126875] [transport.py] [_log()] userauth is OK
2026-02-11T09:51:42.682 [DEBUG] [Thread-126875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:51:42.682 [DEBUG] [Thread-126875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:51:42.682 [DEBUG] [Thread-126875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:51:42.682 [DEBUG] [Thread-126875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:51:42.701 [INFO] [Thread-126875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:51:42.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:51:42.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:51:43.558 [DEBUG] [Thread-126875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:51:43.559 [DEBUG] [Thread-126875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:51:43.606 [DEBUG] [Thread-126875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:51:43.606 [DEBUG] [Thread-126875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:51:43.615 [DEBUG] [Thread-126875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:51:43.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:51:43.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:51:43.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:51:43.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:51:43.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:51:43.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:51:43.653 [DEBUG] [Thread-126875] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:51:43.795 [DEBUG] [Thread-126877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:51:45.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:51:45.559 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:51:58.859 [DEBUG] [Thread-126878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:52:07.036 [DEBUG] [Thread-126879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:52:13.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:52:13.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:52:13.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:52:13.890 [DEBUG] [Thread-126880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:52:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 51, 46), 12.68, 44.65, 0.0, 17.66, 22.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:52:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:51:46
2026-02-11T09:52:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:52:16.267 [DEBUG] [Thread-126881] [transport.py] [_log()] starting thread (client mode): 0xa2d037c0
2026-02-11T09:52:16.267 [DEBUG] [Thread-126881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:52:16.287 [DEBUG] [Thread-126881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:52:16.287 [INFO] [Thread-126881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] client lang: <none>
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] server lang: <none>
2026-02-11T09:52:16.290 [DEBUG] [Thread-126881] [transport.py] [_log()] kex follows: False
2026-02-11T09:52:16.291 [DEBUG] [Thread-126881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:52:16.291 [DEBUG] [Thread-126881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:52:16.291 [DEBUG] [Thread-126881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:52:16.291 [DEBUG] [Thread-126881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:52:16.291 [DEBUG] [Thread-126881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:52:16.291 [DEBUG] [Thread-126881] [transport.py] [_log()] Compression: none
2026-02-11T09:52:16.291 [DEBUG] [Thread-126881] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:52:16.309 [DEBUG] [Thread-126881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:52:16.309 [DEBUG] [Thread-126881] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:52:16.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:52:16.310 [DEBUG] [Thread-126881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:52:16.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:52:16.353 [DEBUG] [Thread-126881] [transport.py] [_log()] userauth is OK
2026-02-11T09:52:16.353 [DEBUG] [Thread-126881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:52:16.353 [DEBUG] [Thread-126881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:52:16.353 [DEBUG] [Thread-126881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:52:16.354 [DEBUG] [Thread-126881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:52:16.373 [INFO] [Thread-126881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:52:16.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:52:17.022 [DEBUG] [Thread-126881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:52:17.023 [DEBUG] [Thread-126881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:52:17.023 [DEBUG] [Thread-126881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:52:17.063 [DEBUG] [Thread-126881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:52:17.064 [DEBUG] [Thread-126881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:52:17.067 [DEBUG] [Thread-126881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:52:17.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:52:17.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:52:17.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:52:17.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:52:17.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:52:17.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:52:17.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:52:17.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:52:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:52:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.327570 -999.00  +20.90  12.46     52  +10.80 1 1 1 1 1   888    0 10.08 -3.94 ----- 13.3 12.5 276.0 15.5 28.9 -26.8 27.6 -24.8 25.9 -24.1 26.6 -24.8
2026-02-11T09:52:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:52:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:52:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.327570
2026-02-11T09:52:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:52:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:52:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:52:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:52:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T09:52:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:51:46', tmtdew=12.68, humidity=44.65, cloud=0.0, wind=17.66, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:51:42.048', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:52:17.092 [DEBUG] [Thread-126881] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:52:17.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:52:17.188 [DEBUG] [Thread-126884] [transport.py] [_log()] starting thread (client mode): 0xa2d547f0
2026-02-11T09:52:17.188 [DEBUG] [Thread-126884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:52:17.203 [DEBUG] [Thread-126884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:52:17.203 [INFO] [Thread-126884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] client lang: <none>
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] server lang: <none>
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] kex follows: False
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:52:17.211 [DEBUG] [Thread-126884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:52:17.212 [DEBUG] [Thread-126884] [transport.py] [_log()] Compression: none
2026-02-11T09:52:17.212 [DEBUG] [Thread-126884] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:52:17.275 [DEBUG] [Thread-126884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:52:17.275 [DEBUG] [Thread-126884] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:52:17.276 [DEBUG] [Thread-126884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:52:17.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:52:17.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:52:17.339 [DEBUG] [Thread-126884] [transport.py] [_log()] userauth is OK
2026-02-11T09:52:17.339 [DEBUG] [Thread-126884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:52:17.339 [DEBUG] [Thread-126884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:52:17.340 [DEBUG] [Thread-126884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:52:17.340 [DEBUG] [Thread-126884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:52:17.365 [INFO] [Thread-126884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:52:17.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:52:17.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:52:18.193 [DEBUG] [Thread-126884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:52:18.193 [DEBUG] [Thread-126884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:52:18.241 [DEBUG] [Thread-126884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:52:18.241 [DEBUG] [Thread-126884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:52:18.251 [DEBUG] [Thread-126884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:52:18.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:52:18.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:52:18.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:52:18.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:52:18.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:52:18.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:52:18.286 [DEBUG] [Thread-126884] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:52:28.927 [DEBUG] [Thread-126886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:52:43.982 [DEBUG] [Thread-126887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:52:45.702 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:52:45.703 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:52:48.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:52:48.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:52:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:52:50.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 52, 21), 12.9, 44.02, 0.0, 17.64, 22.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:52:50.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:52:21
2026-02-11T09:52:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:52:50.761 [DEBUG] [Thread-126888] [transport.py] [_log()] starting thread (client mode): 0xa575aa70
2026-02-11T09:52:50.761 [DEBUG] [Thread-126888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:52:50.781 [DEBUG] [Thread-126888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:52:50.781 [INFO] [Thread-126888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:52:50.784 [DEBUG] [Thread-126888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] client lang: <none>
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] server lang: <none>
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] kex follows: False
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:52:50.785 [DEBUG] [Thread-126888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:52:50.786 [DEBUG] [Thread-126888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:52:50.786 [DEBUG] [Thread-126888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:52:50.786 [DEBUG] [Thread-126888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:52:50.786 [DEBUG] [Thread-126888] [transport.py] [_log()] Compression: none
2026-02-11T09:52:50.786 [DEBUG] [Thread-126888] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:52:50.805 [DEBUG] [Thread-126888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:52:50.806 [DEBUG] [Thread-126888] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:52:50.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:52:50.807 [DEBUG] [Thread-126888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:52:50.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:52:50.809 [DEBUG] [Thread-126888] [transport.py] [_log()] userauth is OK
2026-02-11T09:52:50.809 [DEBUG] [Thread-126888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:52:50.809 [DEBUG] [Thread-126888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:52:50.809 [DEBUG] [Thread-126888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:52:50.810 [DEBUG] [Thread-126888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:52:50.843 [INFO] [Thread-126888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:52:50.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:52:51.473 [DEBUG] [Thread-126888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:52:51.473 [DEBUG] [Thread-126888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:52:51.474 [DEBUG] [Thread-126888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:52:51.514 [DEBUG] [Thread-126888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:52:51.515 [DEBUG] [Thread-126888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:52:51.518 [DEBUG] [Thread-126888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:52:51.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:52:51.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:52:51.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:52:51.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:52:51.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:52:51.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:52:51.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:52:51.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:52:51.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:52:51.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.327917 -999.00  +21.20   8.76     52  +11.00 1 2 1 1 1   888    0 9.85 -3.34 ----- 8.0 8.8 277.4 16.0 28.2 -28.5 27.4 -22.4 25.4 -23.4 26.3 -24.1
2026-02-11T09:52:51.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:52:51.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:52:51.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.327917
2026-02-11T09:52:51.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:52:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:52:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:52:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:52:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:52:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:52:21', tmtdew=12.9, humidity=44.02, cloud=0.0, wind=17.64, temperature=22.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:52:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:52:51.545 [DEBUG] [Thread-126888] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:52:51.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:52:51.641 [DEBUG] [Thread-126891] [transport.py] [_log()] starting thread (client mode): 0xa2dc1f30
2026-02-11T09:52:51.641 [DEBUG] [Thread-126891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:52:51.655 [DEBUG] [Thread-126891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:52:51.655 [INFO] [Thread-126891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:52:51.662 [DEBUG] [Thread-126891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] client lang: <none>
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] server lang: <none>
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] kex follows: False
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] Compression: none
2026-02-11T09:52:51.663 [DEBUG] [Thread-126891] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:52:51.719 [DEBUG] [Thread-126891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:52:51.720 [DEBUG] [Thread-126891] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:52:51.720 [DEBUG] [Thread-126891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:52:51.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:52:51.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:52:51.776 [DEBUG] [Thread-126891] [transport.py] [_log()] userauth is OK
2026-02-11T09:52:51.777 [DEBUG] [Thread-126891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:52:51.777 [DEBUG] [Thread-126891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:52:51.777 [DEBUG] [Thread-126891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:52:51.777 [DEBUG] [Thread-126891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:52:51.801 [INFO] [Thread-126891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:52:51.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:52:51.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:52:52.623 [DEBUG] [Thread-126891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:52:52.623 [DEBUG] [Thread-126891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:52:52.671 [DEBUG] [Thread-126891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:52:52.671 [DEBUG] [Thread-126891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:52:52.680 [DEBUG] [Thread-126891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:52:52.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:52:52.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:52:52.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:52:52.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:52:52.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:52:52.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:52:52.718 [DEBUG] [Thread-126891] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:52:59.020 [DEBUG] [Thread-126893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:07.090 [DEBUG] [Thread-126894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:14.083 [DEBUG] [Thread-126895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:22.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:53:22.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:53:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:53:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 52, 58), 12.9, 43.62, 0.0, 17.66, 21.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:53:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:52:58
2026-02-11T09:53:25.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:53:25.178 [DEBUG] [Thread-126896] [transport.py] [_log()] starting thread (client mode): 0xa2d91d50
2026-02-11T09:53:25.179 [DEBUG] [Thread-126896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:53:25.199 [DEBUG] [Thread-126896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:53:25.199 [INFO] [Thread-126896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] client lang: <none>
2026-02-11T09:53:25.202 [DEBUG] [Thread-126896] [transport.py] [_log()] server lang: <none>
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] kex follows: False
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] Compression: none
2026-02-11T09:53:25.203 [DEBUG] [Thread-126896] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:53:25.220 [DEBUG] [Thread-126896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:53:25.221 [DEBUG] [Thread-126896] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:53:25.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:53:25.222 [DEBUG] [Thread-126896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:53:25.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:53:25.224 [DEBUG] [Thread-126896] [transport.py] [_log()] userauth is OK
2026-02-11T09:53:25.224 [DEBUG] [Thread-126896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:53:25.224 [DEBUG] [Thread-126896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:53:25.225 [DEBUG] [Thread-126896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:53:25.225 [DEBUG] [Thread-126896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:53:25.247 [INFO] [Thread-126896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:53:25.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:53:25.894 [DEBUG] [Thread-126896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:53:25.895 [DEBUG] [Thread-126896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:53:25.895 [DEBUG] [Thread-126896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:53:25.935 [DEBUG] [Thread-126896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:53:25.936 [DEBUG] [Thread-126896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:53:25.939 [DEBUG] [Thread-126896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:53:25.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:53:25.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:53:25.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:53:25.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:53:25.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:53:25.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:53:25.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:53:25.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:53:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:53:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.328264 -999.00  +21.50  21.04     50  +10.90 1 2 1 1 1   888    0 9.89 -1.65 ----- 26.0 21.0 260.2 24.4 28.2 -23.1 27.6 -21.8 25.9 -19.3 26.6 -21.1
2026-02-11T09:53:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:53:25.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:53:25.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.328264
2026-02-11T09:53:25.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:53:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:53:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:53:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:53:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:53:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:52:58', tmtdew=12.9, humidity=43.62, cloud=0.0, wind=17.66, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:52:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:53:25.963 [DEBUG] [Thread-126896] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:53:26.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:53:26.059 [DEBUG] [Thread-126899] [transport.py] [_log()] starting thread (client mode): 0xa57585e0
2026-02-11T09:53:26.059 [DEBUG] [Thread-126899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:53:26.075 [DEBUG] [Thread-126899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:53:26.075 [INFO] [Thread-126899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:53:26.084 [DEBUG] [Thread-126899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:53:26.085 [DEBUG] [Thread-126899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:53:26.085 [DEBUG] [Thread-126899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:53:26.085 [DEBUG] [Thread-126899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] client lang: <none>
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] server lang: <none>
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] kex follows: False
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:53:26.086 [DEBUG] [Thread-126899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:53:26.087 [DEBUG] [Thread-126899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:53:26.087 [DEBUG] [Thread-126899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:53:26.087 [DEBUG] [Thread-126899] [transport.py] [_log()] Compression: none
2026-02-11T09:53:26.087 [DEBUG] [Thread-126899] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:53:26.147 [DEBUG] [Thread-126899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:53:26.147 [DEBUG] [Thread-126899] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:53:26.148 [DEBUG] [Thread-126899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:53:26.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:53:26.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:53:26.211 [DEBUG] [Thread-126899] [transport.py] [_log()] userauth is OK
2026-02-11T09:53:26.211 [DEBUG] [Thread-126899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:53:26.211 [DEBUG] [Thread-126899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:53:26.211 [DEBUG] [Thread-126899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:53:26.211 [DEBUG] [Thread-126899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:53:26.240 [INFO] [Thread-126899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:53:26.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:53:26.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:53:27.133 [DEBUG] [Thread-126899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:53:27.133 [DEBUG] [Thread-126899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:53:27.183 [DEBUG] [Thread-126899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:53:27.184 [DEBUG] [Thread-126899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:53:27.198 [DEBUG] [Thread-126899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:53:27.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:53:27.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:53:27.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:53:27.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:53:27.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:53:27.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:53:27.236 [DEBUG] [Thread-126899] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:53:29.120 [DEBUG] [Thread-126901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:44.171 [DEBUG] [Thread-126902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:45.843 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:45.844 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:53:57.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:53:57.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
2026-02-11T09:53:59.207 [DEBUG] [Thread-126903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:53:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 53, 33), 13.11, 43.3, 0.0, 15.88, 22.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:53:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:53:33
2026-02-11T09:54:00.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:54:00.219 [DEBUG] [Thread-126904] [transport.py] [_log()] starting thread (client mode): 0xa2d02200
2026-02-11T09:54:00.219 [DEBUG] [Thread-126904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:54:00.235 [DEBUG] [Thread-126904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:54:00.236 [INFO] [Thread-126904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:54:00.238 [DEBUG] [Thread-126904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] client lang: <none>
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] server lang: <none>
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] kex follows: False
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:54:00.239 [DEBUG] [Thread-126904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:54:00.240 [DEBUG] [Thread-126904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:54:00.240 [DEBUG] [Thread-126904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:54:00.240 [DEBUG] [Thread-126904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:54:00.240 [DEBUG] [Thread-126904] [transport.py] [_log()] Compression: none
2026-02-11T09:54:00.240 [DEBUG] [Thread-126904] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:54:00.257 [DEBUG] [Thread-126904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:54:00.257 [DEBUG] [Thread-126904] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:54:00.258 [DEBUG] [Thread-126904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:54:00.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:54:00.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:54:00.259 [DEBUG] [Thread-126904] [transport.py] [_log()] userauth is OK
2026-02-11T09:54:00.260 [DEBUG] [Thread-126904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:54:00.260 [DEBUG] [Thread-126904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:54:00.260 [DEBUG] [Thread-126904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:54:00.260 [DEBUG] [Thread-126904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:54:00.284 [INFO] [Thread-126904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:54:00.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:54:00.860 [DEBUG] [Thread-126904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:54:00.860 [DEBUG] [Thread-126904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:54:00.861 [DEBUG] [Thread-126904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:54:00.901 [DEBUG] [Thread-126904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:54:00.902 [DEBUG] [Thread-126904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:54:00.905 [DEBUG] [Thread-126904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:54:00.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:54:00.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:54:00.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:54:00.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:54:00.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:54:00.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:54:00.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:54:00.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:54:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:54:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.328959 -999.00  +21.20  17.63     51  +10.90 1 2 1 1 1   888    0 10.20 1.83 ----- 21.2 17.6 281.8 26.7 28.2 -22.4 27.6 -20.5 25.7 -19.2 26.5 -21.2
2026-02-11T09:54:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:54:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:54:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.328959
2026-02-11T09:54:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:54:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:54:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:54:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:54:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:54:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:53:33', tmtdew=13.11, humidity=43.3, cloud=0.0, wind=15.88, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:53:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:54:00.932 [DEBUG] [Thread-126904] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:54:01.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:54:01.026 [DEBUG] [Thread-126907] [transport.py] [_log()] starting thread (client mode): 0xa57b0340
2026-02-11T09:54:01.026 [DEBUG] [Thread-126907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:54:01.046 [DEBUG] [Thread-126907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:54:01.046 [INFO] [Thread-126907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] client lang: <none>
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] server lang: <none>
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] kex follows: False
2026-02-11T09:54:01.054 [DEBUG] [Thread-126907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:54:01.055 [DEBUG] [Thread-126907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:54:01.055 [DEBUG] [Thread-126907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:54:01.055 [DEBUG] [Thread-126907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:54:01.055 [DEBUG] [Thread-126907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:54:01.055 [DEBUG] [Thread-126907] [transport.py] [_log()] Compression: none
2026-02-11T09:54:01.055 [DEBUG] [Thread-126907] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:54:01.114 [DEBUG] [Thread-126907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:54:01.115 [DEBUG] [Thread-126907] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:54:01.115 [DEBUG] [Thread-126907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:54:01.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:54:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:54:01.174 [DEBUG] [Thread-126907] [transport.py] [_log()] userauth is OK
2026-02-11T09:54:01.175 [DEBUG] [Thread-126907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:54:01.175 [DEBUG] [Thread-126907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:54:01.175 [DEBUG] [Thread-126907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:54:01.175 [DEBUG] [Thread-126907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:54:01.195 [INFO] [Thread-126907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:54:01.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:54:01.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:54:02.035 [DEBUG] [Thread-126907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:54:02.036 [DEBUG] [Thread-126907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:54:02.085 [DEBUG] [Thread-126907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:54:02.086 [DEBUG] [Thread-126907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:54:02.096 [DEBUG] [Thread-126907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:54:02.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:54:02.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')
2026-02-11T09:54:02.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:54:02.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:54:02.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:54:02.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:54:02.137 [DEBUG] [Thread-126907] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:54:07.133 [DEBUG] [Thread-126909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:54:14.241 [DEBUG] [Thread-126910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:54:29.291 [DEBUG] [Thread-126911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:54:32.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:54:32.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:54:32.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:54:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 54, 8), 12.86, 43.72, 0.0, 18.33, 22.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:54:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:54:08
2026-02-11T09:54:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:54:34.590 [DEBUG] [Thread-126912] [transport.py] [_log()] starting thread (client mode): 0xa57e2350
2026-02-11T09:54:34.591 [DEBUG] [Thread-126912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:54:34.611 [DEBUG] [Thread-126912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:54:34.611 [INFO] [Thread-126912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] client lang: <none>
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] server lang: <none>
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] kex follows: False
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:54:34.614 [DEBUG] [Thread-126912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:54:34.615 [DEBUG] [Thread-126912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:54:34.615 [DEBUG] [Thread-126912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:54:34.615 [DEBUG] [Thread-126912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:54:34.615 [DEBUG] [Thread-126912] [transport.py] [_log()] Compression: none
2026-02-11T09:54:34.615 [DEBUG] [Thread-126912] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:54:34.632 [DEBUG] [Thread-126912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:54:34.632 [DEBUG] [Thread-126912] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:54:34.633 [DEBUG] [Thread-126912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:54:34.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:54:34.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:54:34.635 [DEBUG] [Thread-126912] [transport.py] [_log()] userauth is OK
2026-02-11T09:54:34.635 [DEBUG] [Thread-126912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:54:34.635 [DEBUG] [Thread-126912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:54:34.635 [DEBUG] [Thread-126912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:54:34.635 [DEBUG] [Thread-126912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:54:34.657 [INFO] [Thread-126912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:54:34.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:54:35.249 [DEBUG] [Thread-126912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:54:35.249 [DEBUG] [Thread-126912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:54:35.249 [DEBUG] [Thread-126912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:54:35.290 [DEBUG] [Thread-126912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:54:35.290 [DEBUG] [Thread-126912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:54:35.293 [DEBUG] [Thread-126912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:54:35.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:54:35.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:54:35.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:54:35.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:54:35.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:54:35.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:54:35.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:54:35.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:54:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:54:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.329306 -999.00  +21.20  22.56     51  +10.70 1 2 1 1 1   888    0 10.42 4.02 ----- 19.0 22.6 266.8 24.7 28.4 -22.8 27.6 -21.8 25.6 -20.0 26.5 -20.7
2026-02-11T09:54:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:54:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:54:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.329306
2026-02-11T09:54:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:54:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:54:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:54:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:54:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:54:35.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:54:08', tmtdew=12.86, humidity=43.72, cloud=0.0, wind=18.33, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:54:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:54:35.319 [DEBUG] [Thread-126912] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:54:35.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:54:35.414 [DEBUG] [Thread-126915] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-11T09:54:35.414 [DEBUG] [Thread-126915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:54:35.429 [DEBUG] [Thread-126915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:54:35.429 [INFO] [Thread-126915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:54:35.436 [DEBUG] [Thread-126915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:54:35.436 [DEBUG] [Thread-126915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:54:35.436 [DEBUG] [Thread-126915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:54:35.436 [DEBUG] [Thread-126915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:35.436 [DEBUG] [Thread-126915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] client lang: <none>
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] server lang: <none>
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] kex follows: False
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] Compression: none
2026-02-11T09:54:35.437 [DEBUG] [Thread-126915] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:54:35.495 [DEBUG] [Thread-126915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:54:35.496 [DEBUG] [Thread-126915] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:54:35.497 [DEBUG] [Thread-126915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:54:35.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:54:35.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:54:35.552 [DEBUG] [Thread-126915] [transport.py] [_log()] userauth is OK
2026-02-11T09:54:35.552 [DEBUG] [Thread-126915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:54:35.553 [DEBUG] [Thread-126915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:54:35.553 [DEBUG] [Thread-126915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:54:35.553 [DEBUG] [Thread-126915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:54:35.572 [INFO] [Thread-126915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:54:35.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:54:35.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:54:36.389 [DEBUG] [Thread-126915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:54:36.389 [DEBUG] [Thread-126915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:54:36.437 [DEBUG] [Thread-126915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:54:36.438 [DEBUG] [Thread-126915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:54:36.447 [DEBUG] [Thread-126915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:54:36.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:54:36.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:54:36.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:54:36.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:54:36.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:54:36.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:54:36.484 [DEBUG] [Thread-126915] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:54:44.329 [DEBUG] [Thread-126917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:54:45.984 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:54:45.985 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:54:59.381 [DEBUG] [Thread-126918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:55:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:55:06.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:55:06.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:55:07.188 [DEBUG] [Thread-126919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:55:08.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 54, 44), 12.64, 44.25, 0.0, 16.8, 21.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:55:08.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:54:44
2026-02-11T09:55:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:55:08.922 [DEBUG] [Thread-126920] [transport.py] [_log()] starting thread (client mode): 0xa2dc1750
2026-02-11T09:55:08.923 [DEBUG] [Thread-126920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:55:08.943 [DEBUG] [Thread-126920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:55:08.943 [INFO] [Thread-126920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] client lang: <none>
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] server lang: <none>
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] kex follows: False
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:55:08.947 [DEBUG] [Thread-126920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:55:08.948 [DEBUG] [Thread-126920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:55:08.948 [DEBUG] [Thread-126920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:55:08.948 [DEBUG] [Thread-126920] [transport.py] [_log()] Compression: none
2026-02-11T09:55:08.948 [DEBUG] [Thread-126920] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:55:08.965 [DEBUG] [Thread-126920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:55:08.966 [DEBUG] [Thread-126920] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:55:08.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:55:08.967 [DEBUG] [Thread-126920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:55:08.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:55:08.969 [DEBUG] [Thread-126920] [transport.py] [_log()] userauth is OK
2026-02-11T09:55:08.970 [DEBUG] [Thread-126920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:55:08.970 [DEBUG] [Thread-126920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:55:08.970 [DEBUG] [Thread-126920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:55:08.970 [DEBUG] [Thread-126920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:55:08.985 [INFO] [Thread-126920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:55:08.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:55:09.736 [DEBUG] [Thread-126920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:55:09.737 [DEBUG] [Thread-126920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:55:09.737 [DEBUG] [Thread-126920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:55:09.777 [DEBUG] [Thread-126920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:55:09.778 [DEBUG] [Thread-126920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:55:09.781 [DEBUG] [Thread-126920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:55:09.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:55:09.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:55:09.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:55:09.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:55:09.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:55:09.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:55:09.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:55:09.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:55:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:55:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.329653 -999.00  +21.00  10.40     52  +10.80 1 2 1 1 1   888    0 10.43 5.46 ----- 9.2 10.4 275.6 18.2 28.2 -22.1 27.7 -20.3 25.7 -19.1 26.4 -21.4
2026-02-11T09:55:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:55:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:55:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.329653
2026-02-11T09:55:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:55:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:55:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:55:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:55:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:55:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:54:44', tmtdew=12.64, humidity=44.25, cloud=0.0, wind=16.8, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:54:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:55:09.809 [DEBUG] [Thread-126920] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:55:09.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:55:09.906 [DEBUG] [Thread-126923] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-11T09:55:09.906 [DEBUG] [Thread-126923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:55:09.920 [DEBUG] [Thread-126923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:55:09.920 [INFO] [Thread-126923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:55:09.927 [DEBUG] [Thread-126923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] client lang: <none>
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] server lang: <none>
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] kex follows: False
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:55:09.928 [DEBUG] [Thread-126923] [transport.py] [_log()] Compression: none
2026-02-11T09:55:09.929 [DEBUG] [Thread-126923] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:55:09.985 [DEBUG] [Thread-126923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:55:09.985 [DEBUG] [Thread-126923] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:55:09.986 [DEBUG] [Thread-126923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:55:09.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:55:09.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:55:10.041 [DEBUG] [Thread-126923] [transport.py] [_log()] userauth is OK
2026-02-11T09:55:10.041 [DEBUG] [Thread-126923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:55:10.041 [DEBUG] [Thread-126923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:55:10.041 [DEBUG] [Thread-126923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:55:10.041 [DEBUG] [Thread-126923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:55:10.060 [INFO] [Thread-126923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:55:10.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:55:10.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:55:10.856 [DEBUG] [Thread-126923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:55:10.857 [DEBUG] [Thread-126923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:55:10.905 [DEBUG] [Thread-126923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:55:10.905 [DEBUG] [Thread-126923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:55:10.914 [DEBUG] [Thread-126923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:55:10.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:55:10.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:55: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
2026-02-11T09:55:10.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:55:10.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:55:10.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:55:10.952 [DEBUG] [Thread-126923] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:55:14.417 [DEBUG] [Thread-126925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:55:29.471 [DEBUG] [Thread-126926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:55:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:55:40.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:55:40.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:55:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 55, 19), 12.64, 44.25, 0.0, 15.42, 21.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:55:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:55:19
2026-02-11T09:55:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:55:43.654 [DEBUG] [Thread-126927] [transport.py] [_log()] starting thread (client mode): 0xa2dc6c80
2026-02-11T09:55:43.654 [DEBUG] [Thread-126927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:55:43.677 [DEBUG] [Thread-126927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:55:43.677 [INFO] [Thread-126927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:55:43.680 [DEBUG] [Thread-126927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:55:43.680 [DEBUG] [Thread-126927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:55:43.680 [DEBUG] [Thread-126927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:55:43.680 [DEBUG] [Thread-126927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:43.680 [DEBUG] [Thread-126927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] client lang: <none>
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] server lang: <none>
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] kex follows: False
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:55:43.681 [DEBUG] [Thread-126927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:55:43.682 [DEBUG] [Thread-126927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:55:43.682 [DEBUG] [Thread-126927] [transport.py] [_log()] Compression: none
2026-02-11T09:55:43.682 [DEBUG] [Thread-126927] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:55:43.700 [DEBUG] [Thread-126927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:55:43.701 [DEBUG] [Thread-126927] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:55:43.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:55:43.703 [DEBUG] [Thread-126927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:55:43.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:55:43.704 [DEBUG] [Thread-126927] [transport.py] [_log()] userauth is OK
2026-02-11T09:55:43.705 [DEBUG] [Thread-126927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:55:43.705 [DEBUG] [Thread-126927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:55:43.705 [DEBUG] [Thread-126927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:55:43.705 [DEBUG] [Thread-126927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:55:43.741 [INFO] [Thread-126927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:55:43.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:55:44.385 [DEBUG] [Thread-126927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:55:44.385 [DEBUG] [Thread-126927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:55:44.385 [DEBUG] [Thread-126927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:55:44.426 [DEBUG] [Thread-126927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:55:44.426 [DEBUG] [Thread-126927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:55:44.428 [DEBUG] [Thread-126927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:55:44.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:55:44.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:55:44.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:55:44.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:55:44.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:55:44.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:55:44.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:55:44.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:55:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:55:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.330000 -999.00  +21.30  13.45     51  +10.90 1 2 1 1 1   888    0 10.52 8.06 ----- 14.0 13.4 284.4 15.9 28.5 -21.6 27.9 -20.3 25.9 -19.2 26.5 -20.9
2026-02-11T09:55:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:55:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:55:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.330000
2026-02-11T09:55:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:55:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:55:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:55:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:55:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:55:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:55:19', tmtdew=12.64, humidity=44.25, cloud=0.0, wind=15.42, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:55:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:55:44.446 [DEBUG] [Thread-126927] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:55:44.507 [DEBUG] [Thread-126930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:55:44.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:55:44.531 [DEBUG] [Thread-126931] [transport.py] [_log()] starting thread (client mode): 0xa2dc55d0
2026-02-11T09:55:44.531 [DEBUG] [Thread-126931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:55:44.545 [DEBUG] [Thread-126931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:55:44.546 [INFO] [Thread-126931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:55:44.553 [DEBUG] [Thread-126931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:55:44.553 [DEBUG] [Thread-126931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:55:44.553 [DEBUG] [Thread-126931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:55:44.553 [DEBUG] [Thread-126931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:44.553 [DEBUG] [Thread-126931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:55:44.553 [DEBUG] [Thread-126931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:44.553 [DEBUG] [Thread-126931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] client lang: <none>
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] server lang: <none>
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] kex follows: False
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] Compression: none
2026-02-11T09:55:44.554 [DEBUG] [Thread-126931] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:55:44.618 [DEBUG] [Thread-126931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:55:44.618 [DEBUG] [Thread-126931] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:55:44.619 [DEBUG] [Thread-126931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:55:44.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:55:44.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:55:44.674 [DEBUG] [Thread-126931] [transport.py] [_log()] userauth is OK
2026-02-11T09:55:44.674 [DEBUG] [Thread-126931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:55:44.674 [DEBUG] [Thread-126931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:55:44.675 [DEBUG] [Thread-126931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:55:44.675 [DEBUG] [Thread-126931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:55:44.694 [INFO] [Thread-126931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:55:44.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:55:44.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:55:45.518 [DEBUG] [Thread-126931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:55:45.518 [DEBUG] [Thread-126931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:55:45.565 [DEBUG] [Thread-126931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:55:45.566 [DEBUG] [Thread-126931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:55:45.575 [DEBUG] [Thread-126931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:55:45.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:55:45.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')
2026-02-11T09:55:45.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:55:45.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:55:45.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:55:45.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:55:45.613 [DEBUG] [Thread-126931] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:55:46.125 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:55:46.127 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:55:59.549 [DEBUG] [Thread-126933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:56:07.260 [DEBUG] [Thread-126934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:56:14.586 [DEBUG] [Thread-126935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:56:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:56:15.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:56:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:56:17.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 55, 54), 12.94, 43.49, 0.0, 17.4, 21.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:56:17.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:55:54
2026-02-11T09:56:17.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:56:18.071 [DEBUG] [Thread-126936] [transport.py] [_log()] starting thread (client mode): 0xa57590f0
2026-02-11T09:56:18.071 [DEBUG] [Thread-126936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:56:18.090 [DEBUG] [Thread-126936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:56:18.090 [INFO] [Thread-126936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] client lang: <none>
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] server lang: <none>
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] kex follows: False
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:56:18.094 [DEBUG] [Thread-126936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:56:18.095 [DEBUG] [Thread-126936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:56:18.095 [DEBUG] [Thread-126936] [transport.py] [_log()] Compression: none
2026-02-11T09:56:18.095 [DEBUG] [Thread-126936] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:56:18.112 [DEBUG] [Thread-126936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:56:18.112 [DEBUG] [Thread-126936] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:56:18.113 [DEBUG] [Thread-126936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:56:18.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:56:18.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:56:18.115 [DEBUG] [Thread-126936] [transport.py] [_log()] userauth is OK
2026-02-11T09:56:18.115 [DEBUG] [Thread-126936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:56:18.115 [DEBUG] [Thread-126936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:56:18.115 [DEBUG] [Thread-126936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:56:18.115 [DEBUG] [Thread-126936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:56:18.139 [INFO] [Thread-126936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:56:18.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:56:18.753 [DEBUG] [Thread-126936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:56:18.753 [DEBUG] [Thread-126936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:56:18.753 [DEBUG] [Thread-126936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:56:18.795 [DEBUG] [Thread-126936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:56:18.795 [DEBUG] [Thread-126936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:56:18.798 [DEBUG] [Thread-126936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:56:18.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:56:18.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:56:18.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:56:18.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:56:18.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:56:18.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:56:18.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:56:18.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:56:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:56:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.330353 -999.00  +21.30  15.92     50  +10.60 1 2 1 1 1   888    0 10.41 11.22 ----- 22.3 15.9 277.6 23.0 28.6 -23.0 27.8 -21.5 25.8 -19.2 26.6 -20.2
2026-02-11T09:56:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:56:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:56:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.330353
2026-02-11T09:56:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:56:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:56:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:56:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:56:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:56:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:55:54', tmtdew=12.94, humidity=43.49, cloud=0.0, wind=17.4, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:55:42.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:56:18.821 [DEBUG] [Thread-126936] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:56:18.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:56:18.916 [DEBUG] [Thread-126939] [transport.py] [_log()] starting thread (client mode): 0xa57599c0
2026-02-11T09:56:18.917 [DEBUG] [Thread-126939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:56:18.931 [DEBUG] [Thread-126939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:56:18.931 [INFO] [Thread-126939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:56:18.942 [DEBUG] [Thread-126939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:56:18.942 [DEBUG] [Thread-126939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:56:18.942 [DEBUG] [Thread-126939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:56:18.942 [DEBUG] [Thread-126939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] client lang: <none>
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] server lang: <none>
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] kex follows: False
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:56:18.943 [DEBUG] [Thread-126939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:56:18.944 [DEBUG] [Thread-126939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:56:18.944 [DEBUG] [Thread-126939] [transport.py] [_log()] Compression: none
2026-02-11T09:56:18.944 [DEBUG] [Thread-126939] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:56:18.998 [DEBUG] [Thread-126939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:56:18.999 [DEBUG] [Thread-126939] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:56:18.999 [DEBUG] [Thread-126939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:56:19.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:56:19.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:56:19.057 [DEBUG] [Thread-126939] [transport.py] [_log()] userauth is OK
2026-02-11T09:56:19.057 [DEBUG] [Thread-126939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:56:19.057 [DEBUG] [Thread-126939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:56:19.057 [DEBUG] [Thread-126939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:56:19.057 [DEBUG] [Thread-126939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:56:19.081 [INFO] [Thread-126939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:56:19.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:56:19.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:56:19.900 [DEBUG] [Thread-126939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:56:19.900 [DEBUG] [Thread-126939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:56:19.948 [DEBUG] [Thread-126939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:56:19.948 [DEBUG] [Thread-126939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:56:19.956 [DEBUG] [Thread-126939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:56:19.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:56: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')
2026-02-11T09:56:19.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:56:19.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:56:19.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:56:19.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:56:19.991 [DEBUG] [Thread-126939] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:56:29.621 [DEBUG] [Thread-126941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:56:44.671 [DEBUG] [Thread-126942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:56:46.268 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:56:46.269 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:56:49.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:56:49.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:56:50.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:56:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 56, 29), 12.92, 43.54, 0.0, 16.04, 21.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:56:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:56:29
2026-02-11T09:56:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:56:52.361 [DEBUG] [Thread-126943] [transport.py] [_log()] starting thread (client mode): 0xa2d90a30
2026-02-11T09:56:52.361 [DEBUG] [Thread-126943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:56:52.378 [DEBUG] [Thread-126943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:56:52.379 [INFO] [Thread-126943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:56:52.379 [DEBUG] [Thread-126943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] client lang: <none>
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] server lang: <none>
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] kex follows: False
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] Compression: none
2026-02-11T09:56:52.380 [DEBUG] [Thread-126943] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:56:52.387 [DEBUG] [Thread-126943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:56:52.387 [DEBUG] [Thread-126943] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:56:52.388 [DEBUG] [Thread-126943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:56:52.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:56:52.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:56:52.389 [DEBUG] [Thread-126943] [transport.py] [_log()] userauth is OK
2026-02-11T09:56:52.389 [DEBUG] [Thread-126943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:56:52.389 [DEBUG] [Thread-126943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:56:52.389 [DEBUG] [Thread-126943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:56:52.389 [DEBUG] [Thread-126943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:56:52.404 [INFO] [Thread-126943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:56:52.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:56:53.044 [DEBUG] [Thread-126943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:56:53.044 [DEBUG] [Thread-126943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:56:53.044 [DEBUG] [Thread-126943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:56:53.085 [DEBUG] [Thread-126943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:56:53.087 [DEBUG] [Thread-126943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:56:53.090 [DEBUG] [Thread-126943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:56:53.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:56:53.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:56:53.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:56:53.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:56:53.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:56:53.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:56:53.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:56:53.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:56:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:56:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.330695 -999.00  +21.00  16.12     50  +10.50 1 2 1 1 1   888    0 10.96 15.04 ----- 13.1 16.1 273.2 20.8 28.4 -23.6 27.8 -20.5 25.6 -22.8 26.5 -20.9
2026-02-11T09:56:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:56:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:56:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.330695
2026-02-11T09:56:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:56:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:56:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:56:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:56:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:56:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:56:29', tmtdew=12.92, humidity=43.54, cloud=0.0, wind=16.04, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:56:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:56:53.112 [DEBUG] [Thread-126943] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:56:53.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:56:53.212 [DEBUG] [Thread-126946] [transport.py] [_log()] starting thread (client mode): 0xa2dc6dd0
2026-02-11T09:56:53.212 [DEBUG] [Thread-126946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:56:53.228 [DEBUG] [Thread-126946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:56:53.228 [INFO] [Thread-126946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:56:53.239 [DEBUG] [Thread-126946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:56:53.239 [DEBUG] [Thread-126946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:56:53.239 [DEBUG] [Thread-126946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:56:53.239 [DEBUG] [Thread-126946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] client lang: <none>
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] server lang: <none>
2026-02-11T09:56:53.240 [DEBUG] [Thread-126946] [transport.py] [_log()] kex follows: False
2026-02-11T09:56:53.241 [DEBUG] [Thread-126946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:56:53.241 [DEBUG] [Thread-126946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:56:53.241 [DEBUG] [Thread-126946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:56:53.241 [DEBUG] [Thread-126946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:56:53.241 [DEBUG] [Thread-126946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:56:53.241 [DEBUG] [Thread-126946] [transport.py] [_log()] Compression: none
2026-02-11T09:56:53.241 [DEBUG] [Thread-126946] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:56:53.299 [DEBUG] [Thread-126946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:56:53.300 [DEBUG] [Thread-126946] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:56:53.300 [DEBUG] [Thread-126946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:56:53.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:56:53.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:56:53.356 [DEBUG] [Thread-126946] [transport.py] [_log()] userauth is OK
2026-02-11T09:56:53.356 [DEBUG] [Thread-126946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:56:53.356 [DEBUG] [Thread-126946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:56:53.356 [DEBUG] [Thread-126946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:56:53.356 [DEBUG] [Thread-126946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:56:53.375 [INFO] [Thread-126946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:56:53.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:56:53.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:56:54.212 [DEBUG] [Thread-126946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:56:54.213 [DEBUG] [Thread-126946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:56:54.260 [DEBUG] [Thread-126946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:56:54.260 [DEBUG] [Thread-126946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:56:54.269 [DEBUG] [Thread-126946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:56:54.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:56:54.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:56:54.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:56:54.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:56:54.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:56:54.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:56:54.303 [DEBUG] [Thread-126946] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:56:59.708 [DEBUG] [Thread-126948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:57:07.293 [DEBUG] [Thread-126949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:57:14.758 [DEBUG] [Thread-126950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:57:24.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:57:24.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:57:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:57:26.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 57, 5), 12.98, 43.39, 0.0, 17.95, 21.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:57:26.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:57:05
2026-02-11T09:57:26.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:57:26.648 [DEBUG] [Thread-126951] [transport.py] [_log()] starting thread (client mode): 0xa81d7d90
2026-02-11T09:57:26.648 [DEBUG] [Thread-126951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:57:26.666 [DEBUG] [Thread-126951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:57:26.666 [INFO] [Thread-126951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:57:26.669 [DEBUG] [Thread-126951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] client lang: <none>
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] server lang: <none>
2026-02-11T09:57:26.670 [DEBUG] [Thread-126951] [transport.py] [_log()] kex follows: False
2026-02-11T09:57:26.671 [DEBUG] [Thread-126951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:57:26.671 [DEBUG] [Thread-126951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:57:26.671 [DEBUG] [Thread-126951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:57:26.671 [DEBUG] [Thread-126951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:57:26.671 [DEBUG] [Thread-126951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:57:26.671 [DEBUG] [Thread-126951] [transport.py] [_log()] Compression: none
2026-02-11T09:57:26.671 [DEBUG] [Thread-126951] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:57:26.688 [DEBUG] [Thread-126951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:57:26.689 [DEBUG] [Thread-126951] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:57:26.689 [DEBUG] [Thread-126951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:57:26.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:57:26.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:57:26.692 [DEBUG] [Thread-126951] [transport.py] [_log()] userauth is OK
2026-02-11T09:57:26.692 [DEBUG] [Thread-126951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:57:26.692 [DEBUG] [Thread-126951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:57:26.692 [DEBUG] [Thread-126951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:57:26.692 [DEBUG] [Thread-126951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:57:26.710 [INFO] [Thread-126951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:57:26.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:57:27.352 [DEBUG] [Thread-126951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:57:27.352 [DEBUG] [Thread-126951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:57:27.353 [DEBUG] [Thread-126951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:57:27.394 [DEBUG] [Thread-126951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:57:27.394 [DEBUG] [Thread-126951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:57:27.397 [DEBUG] [Thread-126951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:57:27.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:57:27.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:57:27.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:57:27.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:57:27.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:57:27.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:57:27.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:57:27.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:57:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:57:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.331042 -999.00  +21.20  11.22     50  +10.70 1 2 1 1 1   888    0 10.59 16.80 ----- 10.3 11.2 299.2 17.1 28.5 -22.5 27.9 -20.4 25.8 -19.3 26.6 -19.9
2026-02-11T09:57:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:57:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:57:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.331042
2026-02-11T09:57:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:57:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:57:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:57:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:57:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:57:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:57:05', tmtdew=12.98, humidity=43.39, cloud=0.0, wind=17.95, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:56:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:57:27.424 [DEBUG] [Thread-126951] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:57:27.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:57:27.519 [DEBUG] [Thread-126954] [transport.py] [_log()] starting thread (client mode): 0xa2dc4610
2026-02-11T09:57:27.519 [DEBUG] [Thread-126954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:57:27.534 [DEBUG] [Thread-126954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:57:27.534 [INFO] [Thread-126954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:57:27.542 [DEBUG] [Thread-126954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] client lang: <none>
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] server lang: <none>
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] kex follows: False
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] Compression: none
2026-02-11T09:57:27.543 [DEBUG] [Thread-126954] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:57:27.605 [DEBUG] [Thread-126954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:57:27.605 [DEBUG] [Thread-126954] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:57:27.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:57:27.606 [DEBUG] [Thread-126954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:57:27.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:57:27.665 [DEBUG] [Thread-126954] [transport.py] [_log()] userauth is OK
2026-02-11T09:57:27.665 [DEBUG] [Thread-126954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:57:27.665 [DEBUG] [Thread-126954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:57:27.665 [DEBUG] [Thread-126954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:57:27.665 [DEBUG] [Thread-126954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:57:27.684 [INFO] [Thread-126954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:57:27.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:57:27.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:57:28.568 [DEBUG] [Thread-126954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:57:28.569 [DEBUG] [Thread-126954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:57:28.618 [DEBUG] [Thread-126954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:57:28.618 [DEBUG] [Thread-126954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:57:28.627 [DEBUG] [Thread-126954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:57:28.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:57:28.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:57:28.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:57:28.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:57:28.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:57:28.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:57:28.668 [DEBUG] [Thread-126954] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:57:29.794 [DEBUG] [Thread-126956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:57:44.853 [DEBUG] [Thread-126957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:57:46.408 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:57:46.409 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:57:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:57:58.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:57:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:57:59.890 [DEBUG] [Thread-126958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:58:00.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 57, 40), 13.81, 41.38, 0.0, 23.25, 23.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:58:00.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:57:40
2026-02-11T09:58:01.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:58:01.307 [DEBUG] [Thread-126959] [transport.py] [_log()] starting thread (client mode): 0xa81d54b0
2026-02-11T09:58:01.307 [DEBUG] [Thread-126959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:58:01.327 [DEBUG] [Thread-126959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:58:01.328 [INFO] [Thread-126959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] client lang: <none>
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] server lang: <none>
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] kex follows: False
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] Compression: none
2026-02-11T09:58:01.331 [DEBUG] [Thread-126959] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:58:01.348 [DEBUG] [Thread-126959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:58:01.349 [DEBUG] [Thread-126959] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:58:01.349 [DEBUG] [Thread-126959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:58:01.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:58:01.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:58:01.351 [DEBUG] [Thread-126959] [transport.py] [_log()] userauth is OK
2026-02-11T09:58:01.352 [DEBUG] [Thread-126959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:58:01.352 [DEBUG] [Thread-126959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:58:01.352 [DEBUG] [Thread-126959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:58:01.352 [DEBUG] [Thread-126959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:58:01.376 [INFO] [Thread-126959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:58:01.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:58:02.015 [DEBUG] [Thread-126959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:58:02.016 [DEBUG] [Thread-126959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:58:02.016 [DEBUG] [Thread-126959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:58:02.056 [DEBUG] [Thread-126959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:58:02.057 [DEBUG] [Thread-126959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:58:02.059 [DEBUG] [Thread-126959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:58:02.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:58:02.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:58:02.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:58:02.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:58:02.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:58:02.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:58:02.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:58:02.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:58:02.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:58:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.331736 -999.00  +21.40  14.49     50  +10.70 1 2 1 1 1   888    0 10.89 23.50 ----- 14.7 14.5 276.4 18.2 28.8 -22.1 27.9 -21.0 25.9 -20.6 26.7 -21.3
2026-02-11T09:58:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:58:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:58:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.331736
2026-02-11T09:58:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:58:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:58:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:58:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:58:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:58:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:57:40', tmtdew=13.81, humidity=41.38, cloud=0.0, wind=23.25, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:57:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:58:02.086 [DEBUG] [Thread-126959] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:58:02.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:58:02.181 [DEBUG] [Thread-126962] [transport.py] [_log()] starting thread (client mode): 0xa57b29e0
2026-02-11T09:58:02.181 [DEBUG] [Thread-126962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:58:02.196 [DEBUG] [Thread-126962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:58:02.197 [INFO] [Thread-126962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:58:02.204 [DEBUG] [Thread-126962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] client lang: <none>
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] server lang: <none>
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] kex follows: False
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] Compression: none
2026-02-11T09:58:02.205 [DEBUG] [Thread-126962] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:58:02.264 [DEBUG] [Thread-126962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:58:02.264 [DEBUG] [Thread-126962] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:58:02.264 [DEBUG] [Thread-126962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:58:02.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:58:02.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:58:02.321 [DEBUG] [Thread-126962] [transport.py] [_log()] userauth is OK
2026-02-11T09:58:02.321 [DEBUG] [Thread-126962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:58:02.321 [DEBUG] [Thread-126962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:58:02.322 [DEBUG] [Thread-126962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:58:02.322 [DEBUG] [Thread-126962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:58:02.341 [INFO] [Thread-126962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:58:02.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:58:02.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:58:03.197 [DEBUG] [Thread-126962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:58:03.197 [DEBUG] [Thread-126962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:58:03.249 [DEBUG] [Thread-126962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:58:03.249 [DEBUG] [Thread-126962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:58:03.259 [DEBUG] [Thread-126962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:58:03.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:58:03.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:58:03.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:58:03.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:58:03.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:58:03.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:58:03.298 [DEBUG] [Thread-126962] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:58:07.347 [DEBUG] [Thread-126964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:58:14.931 [DEBUG] [Thread-126965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:58:29.980 [DEBUG] [Thread-126966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:58:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:58:33.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:58:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:58:35.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 58, 15), 13.21, 42.76, 0.0, 19.48, 22.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:58:35.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:58:15
2026-02-11T09:58:35.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:58:35.787 [DEBUG] [Thread-126967] [transport.py] [_log()] starting thread (client mode): 0xa81d5db0
2026-02-11T09:58:35.787 [DEBUG] [Thread-126967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:58:35.802 [DEBUG] [Thread-126967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:58:35.803 [INFO] [Thread-126967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] client lang: <none>
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] server lang: <none>
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] kex follows: False
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:58:35.806 [DEBUG] [Thread-126967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:58:35.807 [DEBUG] [Thread-126967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:58:35.807 [DEBUG] [Thread-126967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:58:35.807 [DEBUG] [Thread-126967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:58:35.807 [DEBUG] [Thread-126967] [transport.py] [_log()] Compression: none
2026-02-11T09:58:35.807 [DEBUG] [Thread-126967] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:58:35.825 [DEBUG] [Thread-126967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:58:35.825 [DEBUG] [Thread-126967] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:58:35.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:58:35.826 [DEBUG] [Thread-126967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:58:35.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:58:35.869 [DEBUG] [Thread-126967] [transport.py] [_log()] userauth is OK
2026-02-11T09:58:35.869 [DEBUG] [Thread-126967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:58:35.869 [DEBUG] [Thread-126967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:58:35.870 [DEBUG] [Thread-126967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:58:35.870 [DEBUG] [Thread-126967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:58:35.890 [INFO] [Thread-126967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:58:35.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:58:36.508 [DEBUG] [Thread-126967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:58:36.508 [DEBUG] [Thread-126967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:58:36.509 [DEBUG] [Thread-126967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:58:36.549 [DEBUG] [Thread-126967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:58:36.550 [DEBUG] [Thread-126967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:58:36.553 [DEBUG] [Thread-126967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:58:36.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:58:36.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:58:36.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:58:36.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:58:36.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:58:36.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:58:36.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:58:36.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:58:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:58:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.332084 -999.00  +21.70  17.09     49  +10.70 1 2 1 1 1   888    0 11.26 29.94 ----- 19.7 17.1 296.7 21.2 28.7 -22.8 28.0 -20.4 25.9 -18.8 26.7 -19.8
2026-02-11T09:58:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:58:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:58:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.332084
2026-02-11T09:58:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:58:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:58:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:58:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:58:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:58:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:58:15', tmtdew=13.21, humidity=42.76, cloud=0.0, wind=19.48, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:58:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:58:36.581 [DEBUG] [Thread-126967] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:58:36.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:58:36.677 [DEBUG] [Thread-126970] [transport.py] [_log()] starting thread (client mode): 0xa5758940
2026-02-11T09:58:36.677 [DEBUG] [Thread-126970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:58:36.693 [DEBUG] [Thread-126970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:58:36.693 [INFO] [Thread-126970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:58:36.701 [DEBUG] [Thread-126970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:58:36.701 [DEBUG] [Thread-126970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:58:36.701 [DEBUG] [Thread-126970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] client lang: <none>
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] server lang: <none>
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] kex follows: False
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:58:36.702 [DEBUG] [Thread-126970] [transport.py] [_log()] Compression: none
2026-02-11T09:58:36.703 [DEBUG] [Thread-126970] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:58:36.758 [DEBUG] [Thread-126970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:58:36.759 [DEBUG] [Thread-126970] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:58:36.759 [DEBUG] [Thread-126970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:58:36.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:58:36.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:58:36.814 [DEBUG] [Thread-126970] [transport.py] [_log()] userauth is OK
2026-02-11T09:58:36.814 [DEBUG] [Thread-126970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:58:36.814 [DEBUG] [Thread-126970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:58:36.814 [DEBUG] [Thread-126970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:58:36.814 [DEBUG] [Thread-126970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:58:36.838 [INFO] [Thread-126970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:58:36.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:58:36.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:58:37.665 [DEBUG] [Thread-126970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:58:37.666 [DEBUG] [Thread-126970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:58:37.714 [DEBUG] [Thread-126970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:58:37.714 [DEBUG] [Thread-126970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:58:37.723 [DEBUG] [Thread-126970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:58:37.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:58:37.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:58:37.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:58:37.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:58:37.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:58:37.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:58:37.761 [DEBUG] [Thread-126970] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:58:45.016 [DEBUG] [Thread-126972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:58:46.551 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:58:46.551 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:59:00.071 [DEBUG] [Thread-126973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:59:07.426 [DEBUG] [Thread-126974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:59:07.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:59:07.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:59:07.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:59:09.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 58, 51), 13.53, 42.07, 0.0, 17.04, 22.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:59:09.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:58:51
2026-02-11T09:59:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:59:10.205 [DEBUG] [Thread-126975] [transport.py] [_log()] starting thread (client mode): 0xa575ad70
2026-02-11T09:59:10.205 [DEBUG] [Thread-126975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:59:10.226 [DEBUG] [Thread-126975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:59:10.226 [INFO] [Thread-126975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:10.229 [DEBUG] [Thread-126975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] client lang: <none>
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] server lang: <none>
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] kex follows: False
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] Compression: none
2026-02-11T09:59:10.230 [DEBUG] [Thread-126975] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:59:10.248 [DEBUG] [Thread-126975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:59:10.249 [DEBUG] [Thread-126975] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:59:10.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:59:10.250 [DEBUG] [Thread-126975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:59:10.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:59:10.252 [DEBUG] [Thread-126975] [transport.py] [_log()] userauth is OK
2026-02-11T09:59:10.252 [DEBUG] [Thread-126975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:59:10.252 [DEBUG] [Thread-126975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:59:10.252 [DEBUG] [Thread-126975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:59:10.253 [DEBUG] [Thread-126975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:59:10.271 [INFO] [Thread-126975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:59:10.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:59:10.882 [DEBUG] [Thread-126975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:59:10.882 [DEBUG] [Thread-126975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:59:10.882 [DEBUG] [Thread-126975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:59:10.924 [DEBUG] [Thread-126975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:59:10.924 [DEBUG] [Thread-126975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:59:10.927 [DEBUG] [Thread-126975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:59:10.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:59:10.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:59:10.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:59:10.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:59:10.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:59:10.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:59:10.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:59:10.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:59:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:59:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.332431 -999.00  +21.60  16.32     49  +10.60 1 2 1 1 1   888    0 11.34 35.18 ----- 21.0 16.3 296.2 20.9 28.9 -22.4 28.0 -21.5 26.0 -19.8 26.8 -20.4
2026-02-11T09:59:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:59:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:59:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.332431
2026-02-11T09:59:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:59:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:59:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:59:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:59:10.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:59:10.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:58:51', tmtdew=13.53, humidity=42.07, cloud=0.0, wind=17.04, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:58:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:59:10.951 [DEBUG] [Thread-126975] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:59:11.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:59:11.049 [DEBUG] [Thread-126978] [transport.py] [_log()] starting thread (client mode): 0xa2dc6f50
2026-02-11T09:59:11.050 [DEBUG] [Thread-126978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:59:11.066 [DEBUG] [Thread-126978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:59:11.067 [INFO] [Thread-126978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] client lang: <none>
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] server lang: <none>
2026-02-11T09:59:11.078 [DEBUG] [Thread-126978] [transport.py] [_log()] kex follows: False
2026-02-11T09:59:11.079 [DEBUG] [Thread-126978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:59:11.079 [DEBUG] [Thread-126978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:59:11.079 [DEBUG] [Thread-126978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:59:11.079 [DEBUG] [Thread-126978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:59:11.079 [DEBUG] [Thread-126978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:59:11.079 [DEBUG] [Thread-126978] [transport.py] [_log()] Compression: none
2026-02-11T09:59:11.079 [DEBUG] [Thread-126978] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:59:11.139 [DEBUG] [Thread-126978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:59:11.140 [DEBUG] [Thread-126978] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:59:11.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:59:11.141 [DEBUG] [Thread-126978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:59:11.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:59:11.201 [DEBUG] [Thread-126978] [transport.py] [_log()] userauth is OK
2026-02-11T09:59:11.202 [DEBUG] [Thread-126978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:59:11.202 [DEBUG] [Thread-126978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:59:11.202 [DEBUG] [Thread-126978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:59:11.202 [DEBUG] [Thread-126978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:59:11.226 [INFO] [Thread-126978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:59:11.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:59:11.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:59:12.051 [DEBUG] [Thread-126978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:59:12.052 [DEBUG] [Thread-126978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:59:12.099 [DEBUG] [Thread-126978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:59:12.100 [DEBUG] [Thread-126978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:59:12.109 [DEBUG] [Thread-126978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:59:12.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:59:12.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T09:59:12.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:59:12.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:59:12.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:59:12.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:59:12.146 [DEBUG] [Thread-126978] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:59:15.108 [DEBUG] [Thread-126980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:59:30.161 [DEBUG] [Thread-126981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:59:42.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T09:59:42.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T09:59:42.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T09:59:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 9, 59, 26), 13.3, 42.68, 0.0, 15.72, 22.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T09:59:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 09:59:26
2026-02-11T09:59:44.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T09:59:44.703 [DEBUG] [Thread-126982] [transport.py] [_log()] starting thread (client mode): 0xa2dc2e90
2026-02-11T09:59:44.703 [DEBUG] [Thread-126982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:59:44.718 [DEBUG] [Thread-126982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T09:59:44.718 [INFO] [Thread-126982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] client lang: <none>
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] server lang: <none>
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] kex follows: False
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] Compression: none
2026-02-11T09:59:44.721 [DEBUG] [Thread-126982] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:59:44.737 [DEBUG] [Thread-126982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:59:44.737 [DEBUG] [Thread-126982] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:59:44.738 [DEBUG] [Thread-126982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T09:59:44.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T09:59:44.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:59:44.740 [DEBUG] [Thread-126982] [transport.py] [_log()] userauth is OK
2026-02-11T09:59:44.740 [DEBUG] [Thread-126982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:59:44.740 [DEBUG] [Thread-126982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:59:44.740 [DEBUG] [Thread-126982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T09:59:44.740 [DEBUG] [Thread-126982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:59:44.764 [INFO] [Thread-126982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:59:44.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:59:45.198 [DEBUG] [Thread-126984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:59:45.357 [DEBUG] [Thread-126982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:59:45.357 [DEBUG] [Thread-126982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:59:45.358 [DEBUG] [Thread-126982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T09:59:45.398 [DEBUG] [Thread-126982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:59:45.398 [DEBUG] [Thread-126982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:59:45.401 [DEBUG] [Thread-126982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:59:45.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:59:45.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T09:59:45.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T09:59:45.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T09:59:45.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:59:45.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T09:59:45.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:59:45.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:59:45.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T09:59:45.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.332778 -999.00  +21.40  18.44     50  +10.60 1 2 1 1 1   888    0 11.42 40.35 ----- 17.9 18.4 306.0 22.4 28.9 -22.0 28.0 -21.2 26.0 -19.3 26.8 -20.2
2026-02-11T09:59:45.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T09:59:45.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T09:59:45.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.332778
2026-02-11T09:59:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T09:59:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T09:59:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T09:59:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T09:59:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T09:59:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T09:59:26', tmtdew=13.3, humidity=42.68, cloud=0.0, wind=15.72, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:59:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T09:59:45.424 [DEBUG] [Thread-126982] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:59:45.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T09:59:45.523 [DEBUG] [Thread-126986] [transport.py] [_log()] starting thread (client mode): 0xa2dc0220
2026-02-11T09:59:45.524 [DEBUG] [Thread-126986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T09:59:45.538 [DEBUG] [Thread-126986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T09:59:45.538 [INFO] [Thread-126986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T09:59:45.550 [DEBUG] [Thread-126986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T09:59:45.550 [DEBUG] [Thread-126986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T09:59:45.550 [DEBUG] [Thread-126986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T09:59:45.550 [DEBUG] [Thread-126986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] client lang: <none>
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] server lang: <none>
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] kex follows: False
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] Compression: none
2026-02-11T09:59:45.551 [DEBUG] [Thread-126986] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T09:59:45.602 [DEBUG] [Thread-126986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T09:59:45.602 [DEBUG] [Thread-126986] [transport.py] [_log()] Switch to new keys ...
2026-02-11T09:59:45.602 [DEBUG] [Thread-126986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T09:59:45.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T09:59:45.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T09:59:45.659 [DEBUG] [Thread-126986] [transport.py] [_log()] userauth is OK
2026-02-11T09:59:45.659 [DEBUG] [Thread-126986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T09:59:45.659 [DEBUG] [Thread-126986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T09:59:45.659 [DEBUG] [Thread-126986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T09:59:45.659 [DEBUG] [Thread-126986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T09:59:45.672 [INFO] [Thread-126986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T09:59:45.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T09:59:45.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T09:59:46.544 [DEBUG] [Thread-126986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T09:59:46.545 [DEBUG] [Thread-126986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T09:59:46.596 [DEBUG] [Thread-126986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T09:59:46.596 [DEBUG] [Thread-126986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T09:59:46.609 [DEBUG] [Thread-126986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T09:59:46.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T09:59:46.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')
2026-02-11T09:59:46.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T09:59:46.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T09:59:46.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T09:59:46.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T09:59:46.656 [DEBUG] [Thread-126986] [transport.py] [_log()] EOF in transport thread
2026-02-11T09:59:46.692 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T09:59:46.693 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:00.233 [DEBUG] [Thread-126988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:07.460 [DEBUG] [Thread-126989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:15.295 [DEBUG] [Thread-126990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:16.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:00:16.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:00:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:00:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 0, 2), 13.36, 42.54, 0.0, 17.5, 22.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:00:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:00:02
2026-02-11T10:00:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:00:19.157 [DEBUG] [Thread-126991] [transport.py] [_log()] starting thread (client mode): 0xa57b13c0
2026-02-11T10:00:19.157 [DEBUG] [Thread-126991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:00:19.178 [DEBUG] [Thread-126991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:00:19.179 [INFO] [Thread-126991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:00:19.182 [DEBUG] [Thread-126991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] client lang: <none>
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] server lang: <none>
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] kex follows: False
2026-02-11T10:00:19.183 [DEBUG] [Thread-126991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:00:19.184 [DEBUG] [Thread-126991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:00:19.184 [DEBUG] [Thread-126991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:00:19.184 [DEBUG] [Thread-126991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:00:19.184 [DEBUG] [Thread-126991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:00:19.184 [DEBUG] [Thread-126991] [transport.py] [_log()] Compression: none
2026-02-11T10:00:19.184 [DEBUG] [Thread-126991] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:00:19.202 [DEBUG] [Thread-126991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:00:19.203 [DEBUG] [Thread-126991] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:00:19.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:00:19.204 [DEBUG] [Thread-126991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:00:19.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:00:19.206 [DEBUG] [Thread-126991] [transport.py] [_log()] userauth is OK
2026-02-11T10:00:19.207 [DEBUG] [Thread-126991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:00:19.207 [DEBUG] [Thread-126991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:00:19.207 [DEBUG] [Thread-126991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:00:19.207 [DEBUG] [Thread-126991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:00:19.230 [INFO] [Thread-126991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:00:19.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:00:19.877 [DEBUG] [Thread-126991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:00:19.878 [DEBUG] [Thread-126991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:00:19.878 [DEBUG] [Thread-126991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:00:19.918 [DEBUG] [Thread-126991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:00:19.919 [DEBUG] [Thread-126991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:00:19.922 [DEBUG] [Thread-126991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:00:19.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:00:19.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:00:19.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:00:19.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:00:19.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:00:19.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:00:19.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:00:19.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:00:19.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:00:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.333125 -999.00  +21.40  12.28     50  +10.80 1 2 1 1 1   888    0 11.36 42.79 ----- 11.5 12.3 301.2 22.2 28.9 -21.8 28.1 -19.9 26.0 -19.8 26.9 -20.2
2026-02-11T10:00:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:00:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:00:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.333125
2026-02-11T10:00:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:00:19.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:00:19.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:00:19.947 [DEBUG] [Thread-126991] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:00:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:00:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:00:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:00:02', tmtdew=13.36, humidity=42.54, cloud=0.0, wind=17.5, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T07:59:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:00:20.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:00:20.048 [DEBUG] [Thread-126994] [transport.py] [_log()] starting thread (client mode): 0xa2d91810
2026-02-11T10:00:20.048 [DEBUG] [Thread-126994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:00:20.062 [DEBUG] [Thread-126994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:00:20.062 [INFO] [Thread-126994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:00:20.069 [DEBUG] [Thread-126994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:00:20.070 [DEBUG] [Thread-126994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:00:20.070 [DEBUG] [Thread-126994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:00:20.070 [DEBUG] [Thread-126994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:20.070 [DEBUG] [Thread-126994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] client lang: <none>
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] server lang: <none>
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] kex follows: False
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] Compression: none
2026-02-11T10:00:20.071 [DEBUG] [Thread-126994] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:00:20.127 [DEBUG] [Thread-126994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:00:20.128 [DEBUG] [Thread-126994] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:00:20.128 [DEBUG] [Thread-126994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:00:20.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:00:20.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:00:20.184 [DEBUG] [Thread-126994] [transport.py] [_log()] userauth is OK
2026-02-11T10:00:20.184 [DEBUG] [Thread-126994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:00:20.184 [DEBUG] [Thread-126994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:00:20.184 [DEBUG] [Thread-126994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:00:20.184 [DEBUG] [Thread-126994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:00:20.197 [INFO] [Thread-126994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:00:20.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:00:20.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:00:21.006 [DEBUG] [Thread-126994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:00:21.006 [DEBUG] [Thread-126994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:00:21.057 [DEBUG] [Thread-126994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:00:21.057 [DEBUG] [Thread-126994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:00:21.070 [DEBUG] [Thread-126994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:00:21.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:00:21.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:00:21.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:00:21.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:00:21.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:00:21.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:00:21.121 [DEBUG] [Thread-126994] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:00:30.334 [DEBUG] [Thread-126996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:45.382 [DEBUG] [Thread-126997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:46.833 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:46.835 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:00:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:00:51.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:00:51.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
2026-02-11T10:00:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 0, 37), 13.65, 41.81, 0.0, 15.53, 22.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:00:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:00:37
2026-02-11T10:00:53.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:00:53.556 [DEBUG] [Thread-126998] [transport.py] [_log()] starting thread (client mode): 0xa2d014b0
2026-02-11T10:00:53.556 [DEBUG] [Thread-126998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:00:53.576 [DEBUG] [Thread-126998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:00:53.576 [INFO] [Thread-126998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:00:53.579 [DEBUG] [Thread-126998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:00:53.579 [DEBUG] [Thread-126998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:00:53.579 [DEBUG] [Thread-126998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] client lang: <none>
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] server lang: <none>
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] kex follows: False
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] Compression: none
2026-02-11T10:00:53.580 [DEBUG] [Thread-126998] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:00:53.596 [DEBUG] [Thread-126998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:00:53.597 [DEBUG] [Thread-126998] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:00:53.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:00:53.598 [DEBUG] [Thread-126998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:00:53.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:00:53.600 [DEBUG] [Thread-126998] [transport.py] [_log()] userauth is OK
2026-02-11T10:00:53.600 [DEBUG] [Thread-126998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:00:53.600 [DEBUG] [Thread-126998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:00:53.601 [DEBUG] [Thread-126998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:00:53.601 [DEBUG] [Thread-126998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:00:53.619 [INFO] [Thread-126998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:00:53.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:00:54.268 [DEBUG] [Thread-126998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:00:54.268 [DEBUG] [Thread-126998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:00:54.268 [DEBUG] [Thread-126998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:00:54.308 [DEBUG] [Thread-126998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:00:54.308 [DEBUG] [Thread-126998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:00:54.312 [DEBUG] [Thread-126998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:00:54.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:00:54.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:00:54.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:00:54.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:00:54.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:00:54.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:00:54.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:00:54.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:00:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:00:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.333473 -999.00  +21.70  15.03     49  +10.80 1 2 1 1 1   888    0 11.28 38.79 ----- 13.3 15.0 275.3 16.8 29.1 -21.8 28.2 -20.4 26.1 -20.4 26.9 -20.5
2026-02-11T10:00:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:00:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:00:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.333473
2026-02-11T10:00:54.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:00:54.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:00:54.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:00:54.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:00:54.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:00:54.338 [DEBUG] [Thread-126998] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:00:54.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:00:37', tmtdew=13.65, humidity=41.81, cloud=0.0, wind=15.53, temperature=22.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:00:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:00:54.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:00:54.434 [DEBUG] [Thread-127001] [transport.py] [_log()] starting thread (client mode): 0xa57e0ee0
2026-02-11T10:00:54.435 [DEBUG] [Thread-127001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:00:54.450 [DEBUG] [Thread-127001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:00:54.450 [INFO] [Thread-127001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] client lang: <none>
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] server lang: <none>
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] kex follows: False
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:00:54.458 [DEBUG] [Thread-127001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:00:54.459 [DEBUG] [Thread-127001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:00:54.459 [DEBUG] [Thread-127001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:00:54.459 [DEBUG] [Thread-127001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:00:54.459 [DEBUG] [Thread-127001] [transport.py] [_log()] Compression: none
2026-02-11T10:00:54.459 [DEBUG] [Thread-127001] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:00:54.517 [DEBUG] [Thread-127001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:00:54.518 [DEBUG] [Thread-127001] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:00:54.518 [DEBUG] [Thread-127001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:00:54.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:00:54.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:00:54.573 [DEBUG] [Thread-127001] [transport.py] [_log()] userauth is OK
2026-02-11T10:00:54.574 [DEBUG] [Thread-127001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:00:54.574 [DEBUG] [Thread-127001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:00:54.574 [DEBUG] [Thread-127001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:00:54.574 [DEBUG] [Thread-127001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:00:54.593 [INFO] [Thread-127001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:00:54.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:00:54.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:00:55.423 [DEBUG] [Thread-127001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:00:55.423 [DEBUG] [Thread-127001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:00:55.472 [DEBUG] [Thread-127001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:00:55.472 [DEBUG] [Thread-127001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:00:55.481 [DEBUG] [Thread-127001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:00:55.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:00:55.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:00:55.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:00:55.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:00:55.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:00:55.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:00:55.514 [DEBUG] [Thread-127001] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:01:00.420 [DEBUG] [Thread-127003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:01:07.493 [DEBUG] [Thread-127004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:01:15.477 [DEBUG] [Thread-127005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:01:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:01:25.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:01:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:01:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 1, 12), 13.06, 43.07, 0.0, 19.32, 22.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:01:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:01:12
2026-02-11T10:01:27.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:01:27.851 [DEBUG] [Thread-127006] [transport.py] [_log()] starting thread (client mode): 0xa57b15d0
2026-02-11T10:01:27.852 [DEBUG] [Thread-127006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:01:27.873 [DEBUG] [Thread-127006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:01:27.873 [INFO] [Thread-127006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:01:27.874 [DEBUG] [Thread-127006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:01:27.874 [DEBUG] [Thread-127006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:01:27.874 [DEBUG] [Thread-127006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:01:27.874 [DEBUG] [Thread-127006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] client lang: <none>
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] server lang: <none>
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] kex follows: False
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:01:27.875 [DEBUG] [Thread-127006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:01:27.876 [DEBUG] [Thread-127006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:01:27.876 [DEBUG] [Thread-127006] [transport.py] [_log()] Compression: none
2026-02-11T10:01:27.876 [DEBUG] [Thread-127006] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:01:27.886 [DEBUG] [Thread-127006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:01:27.887 [DEBUG] [Thread-127006] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:01:27.888 [DEBUG] [Thread-127006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:01:27.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:01:27.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:01:27.890 [DEBUG] [Thread-127006] [transport.py] [_log()] userauth is OK
2026-02-11T10:01:27.891 [DEBUG] [Thread-127006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:01:27.891 [DEBUG] [Thread-127006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:01:27.891 [DEBUG] [Thread-127006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:01:27.891 [DEBUG] [Thread-127006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:01:27.910 [INFO] [Thread-127006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:01:27.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:01:28.556 [DEBUG] [Thread-127006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:01:28.556 [DEBUG] [Thread-127006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:01:28.557 [DEBUG] [Thread-127006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:01:28.598 [DEBUG] [Thread-127006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:01:28.598 [DEBUG] [Thread-127006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:01:28.601 [DEBUG] [Thread-127006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:01:28.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:01:28.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:01:28.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:01:28.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:01:28.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:01:28.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:01:28.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:01:28.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:01:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:01:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.333820 -999.00  +22.00  14.39     49  +10.90 1 2 1 1 1   888    0 11.48 42.62 ----- 17.6 14.4 260.8 19.1 29.0 -21.4 28.2 -20.5 26.2 -20.8 27.0 -19.7
2026-02-11T10:01:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:01:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:01:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.333820
2026-02-11T10:01:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:01:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:01:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:01:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:01:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:01:28.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:01:12', tmtdew=13.06, humidity=43.07, cloud=0.0, wind=19.32, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:00:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:01:28.626 [DEBUG] [Thread-127006] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:01:28.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:01:28.733 [DEBUG] [Thread-127009] [transport.py] [_log()] starting thread (client mode): 0xa57b24d0
2026-02-11T10:01:28.733 [DEBUG] [Thread-127009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:01:28.751 [DEBUG] [Thread-127009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:01:28.752 [INFO] [Thread-127009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:01:28.762 [DEBUG] [Thread-127009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] client lang: <none>
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] server lang: <none>
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] kex follows: False
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:01:28.763 [DEBUG] [Thread-127009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:01:28.764 [DEBUG] [Thread-127009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:01:28.764 [DEBUG] [Thread-127009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:01:28.764 [DEBUG] [Thread-127009] [transport.py] [_log()] Compression: none
2026-02-11T10:01:28.764 [DEBUG] [Thread-127009] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:01:28.822 [DEBUG] [Thread-127009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:01:28.822 [DEBUG] [Thread-127009] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:01:28.823 [DEBUG] [Thread-127009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:01:28.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:01:28.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:01:28.882 [DEBUG] [Thread-127009] [transport.py] [_log()] userauth is OK
2026-02-11T10:01:28.882 [DEBUG] [Thread-127009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:01:28.883 [DEBUG] [Thread-127009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:01:28.883 [DEBUG] [Thread-127009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:01:28.883 [DEBUG] [Thread-127009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:01:28.902 [INFO] [Thread-127009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:01:28.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:01:28.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:01:29.744 [DEBUG] [Thread-127009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:01:29.745 [DEBUG] [Thread-127009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:01:29.792 [DEBUG] [Thread-127009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:01:29.793 [DEBUG] [Thread-127009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:01:29.802 [DEBUG] [Thread-127009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:01:29.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:01: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')
2026-02-11T10:01:29.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:01:29.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:01:29.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:01:29.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:01:29.838 [DEBUG] [Thread-127009] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:01:30.515 [DEBUG] [Thread-127011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:01:45.575 [DEBUG] [Thread-127012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:01:46.975 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:01:46.976 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:01:59.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:01:59.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:01:59.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:02:00.613 [DEBUG] [Thread-127013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:02:01.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 1, 48), 13.09, 42.82, 0.0, 16.55, 21.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:02:01.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:01:48
2026-02-11T10:02:02.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:02:02.272 [DEBUG] [Thread-127014] [transport.py] [_log()] starting thread (client mode): 0xa57e36d0
2026-02-11T10:02:02.272 [DEBUG] [Thread-127014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:02:02.292 [DEBUG] [Thread-127014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:02:02.292 [INFO] [Thread-127014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] client lang: <none>
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] server lang: <none>
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] kex follows: False
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:02:02.294 [DEBUG] [Thread-127014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:02:02.295 [DEBUG] [Thread-127014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:02:02.295 [DEBUG] [Thread-127014] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:02:02.295 [DEBUG] [Thread-127014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:02:02.295 [DEBUG] [Thread-127014] [transport.py] [_log()] Compression: none
2026-02-11T10:02:02.295 [DEBUG] [Thread-127014] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:02:02.313 [DEBUG] [Thread-127014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:02:02.314 [DEBUG] [Thread-127014] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:02:02.314 [DEBUG] [Thread-127014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:02:02.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:02:02.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:02:02.317 [DEBUG] [Thread-127014] [transport.py] [_log()] userauth is OK
2026-02-11T10:02:02.317 [DEBUG] [Thread-127014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:02:02.317 [DEBUG] [Thread-127014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:02:02.317 [DEBUG] [Thread-127014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:02:02.317 [DEBUG] [Thread-127014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:02:02.336 [INFO] [Thread-127014] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:02:02.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:02:02.933 [DEBUG] [Thread-127014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:02:02.933 [DEBUG] [Thread-127014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:02:02.933 [DEBUG] [Thread-127014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:02:02.975 [DEBUG] [Thread-127014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:02:02.975 [DEBUG] [Thread-127014] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:02:02.978 [DEBUG] [Thread-127014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:02:02.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:02:02.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:02:02.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:02:02.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:02:02.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:02:02.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:02:02.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:02:02.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:02:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:02:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.334167 -999.00  +21.80  13.11     49  +10.80 1 2 1 1 1   888    0 12.04 49.21 ----- 12.7 13.1 266.4 18.6 29.1 -22.4 28.2 -19.6 26.2 -20.7 26.9 -21.1
2026-02-11T10:02:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:02:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:02:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.334167
2026-02-11T10:02:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:02:03.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:02:03.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:02:03.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:02:03.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:02:03.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:01:48', tmtdew=13.09, humidity=42.82, cloud=0.0, wind=16.55, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:01:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:02:03.000 [DEBUG] [Thread-127014] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:02:03.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:02:03.093 [DEBUG] [Thread-127017] [transport.py] [_log()] starting thread (client mode): 0xa57b3640
2026-02-11T10:02:03.094 [DEBUG] [Thread-127017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:02:03.108 [DEBUG] [Thread-127017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:02:03.108 [INFO] [Thread-127017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:02:03.115 [DEBUG] [Thread-127017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:02:03.115 [DEBUG] [Thread-127017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] client lang: <none>
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] server lang: <none>
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] kex follows: False
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] Compression: none
2026-02-11T10:02:03.116 [DEBUG] [Thread-127017] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:02:03.179 [DEBUG] [Thread-127017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:02:03.180 [DEBUG] [Thread-127017] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:02:03.180 [DEBUG] [Thread-127017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:02:03.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:02:03.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:02:03.240 [DEBUG] [Thread-127017] [transport.py] [_log()] userauth is OK
2026-02-11T10:02:03.240 [DEBUG] [Thread-127017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:02:03.240 [DEBUG] [Thread-127017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:02:03.240 [DEBUG] [Thread-127017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:02:03.240 [DEBUG] [Thread-127017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:02:03.259 [INFO] [Thread-127017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:02:03.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:02:03.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:02:04.082 [DEBUG] [Thread-127017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:02:04.082 [DEBUG] [Thread-127017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:02:04.131 [DEBUG] [Thread-127017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:02:04.131 [DEBUG] [Thread-127017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:02:04.140 [DEBUG] [Thread-127017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:02:04.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:02:04.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:02:04.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:02:04.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:02:04.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:02:04.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:02:04.178 [DEBUG] [Thread-127017] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:02:07.537 [DEBUG] [Thread-127019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:02:15.650 [DEBUG] [Thread-127020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:02:30.704 [DEBUG] [Thread-127021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:02:34.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:02:34.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:02:34.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:02:36.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 2, 23), 13.07, 42.9, 0.0, 14.88, 21.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:02:36.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:02:23
2026-02-11T10:02:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:02:36.618 [DEBUG] [Thread-127022] [transport.py] [_log()] starting thread (client mode): 0xa2d01960
2026-02-11T10:02:36.618 [DEBUG] [Thread-127022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:02:36.637 [DEBUG] [Thread-127022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:02:36.638 [INFO] [Thread-127022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] client lang: <none>
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] server lang: <none>
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] kex follows: False
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] Compression: none
2026-02-11T10:02:36.641 [DEBUG] [Thread-127022] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:02:36.656 [DEBUG] [Thread-127022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:02:36.657 [DEBUG] [Thread-127022] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:02:36.658 [DEBUG] [Thread-127022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:02:36.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:02:36.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:02:36.660 [DEBUG] [Thread-127022] [transport.py] [_log()] userauth is OK
2026-02-11T10:02:36.660 [DEBUG] [Thread-127022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:02:36.660 [DEBUG] [Thread-127022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:02:36.660 [DEBUG] [Thread-127022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:02:36.660 [DEBUG] [Thread-127022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:02:36.681 [INFO] [Thread-127022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:02:36.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:02:37.487 [DEBUG] [Thread-127022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:02:37.487 [DEBUG] [Thread-127022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:02:37.488 [DEBUG] [Thread-127022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:02:37.528 [DEBUG] [Thread-127022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:02:37.529 [DEBUG] [Thread-127022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:02:37.532 [DEBUG] [Thread-127022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:02:37.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:02:37.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:02:37.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:02:37.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:02:37.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:02:37.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:02:37.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:02:37.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:02:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:02:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.334861 -999.00  +21.80  12.75     49  +10.80 1 2 1 1 1   888    0 11.82 52.96 ----- 10.3 12.8 265.0 18.1 29.1 -23.4 28.4 -19.5 26.3 -18.1 26.9 -20.2
2026-02-11T10:02:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:02:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:02:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.334861
2026-02-11T10:02:37.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:02:37.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:02:37.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:02:37.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:02:37.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:02:37.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:02:23', tmtdew=13.07, humidity=42.9, cloud=0.0, wind=14.88, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:02:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:02:37.559 [DEBUG] [Thread-127022] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:02:37.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:02:37.654 [DEBUG] [Thread-127025] [transport.py] [_log()] starting thread (client mode): 0xa2d91780
2026-02-11T10:02:37.655 [DEBUG] [Thread-127025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:02:37.669 [DEBUG] [Thread-127025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:02:37.669 [INFO] [Thread-127025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:02:37.677 [DEBUG] [Thread-127025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] client lang: <none>
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] server lang: <none>
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] kex follows: False
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:02:37.678 [DEBUG] [Thread-127025] [transport.py] [_log()] Compression: none
2026-02-11T10:02:37.679 [DEBUG] [Thread-127025] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:02:37.735 [DEBUG] [Thread-127025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:02:37.735 [DEBUG] [Thread-127025] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:02:37.736 [DEBUG] [Thread-127025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:02:37.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:02:37.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:02:37.792 [DEBUG] [Thread-127025] [transport.py] [_log()] userauth is OK
2026-02-11T10:02:37.792 [DEBUG] [Thread-127025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:02:37.792 [DEBUG] [Thread-127025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:02:37.792 [DEBUG] [Thread-127025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:02:37.792 [DEBUG] [Thread-127025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:02:37.813 [INFO] [Thread-127025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:02:37.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:02:37.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:02:38.628 [DEBUG] [Thread-127025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:02:38.628 [DEBUG] [Thread-127025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:02:38.677 [DEBUG] [Thread-127025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:02:38.677 [DEBUG] [Thread-127025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:02:38.686 [DEBUG] [Thread-127025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:02:38.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:02: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')
2026-02-11T10:02: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
2026-02-11T10:02:38.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:02:38.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:02:38.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:02:38.724 [DEBUG] [Thread-127025] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:02:45.739 [DEBUG] [Thread-127027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:02:47.122 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:02:47.123 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:00.791 [DEBUG] [Thread-127028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:07.571 [DEBUG] [Thread-127029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:03:08.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:03:08.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:03:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 2, 58), 13.07, 43.52, 0.0, 10.15, 22.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:03:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:02:58
2026-02-11T10:03:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:03:11.162 [DEBUG] [Thread-127030] [transport.py] [_log()] starting thread (client mode): 0xa2df8dc0
2026-02-11T10:03:11.162 [DEBUG] [Thread-127030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:03:11.183 [DEBUG] [Thread-127030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:03:11.183 [INFO] [Thread-127030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:03:11.186 [DEBUG] [Thread-127030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:03:11.186 [DEBUG] [Thread-127030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:03:11.186 [DEBUG] [Thread-127030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:03:11.186 [DEBUG] [Thread-127030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:11.186 [DEBUG] [Thread-127030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] client lang: <none>
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] server lang: <none>
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] kex follows: False
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] Compression: none
2026-02-11T10:03:11.187 [DEBUG] [Thread-127030] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:03:11.204 [DEBUG] [Thread-127030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:03:11.204 [DEBUG] [Thread-127030] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:03:11.205 [DEBUG] [Thread-127030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:03:11.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:03:11.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:03:11.207 [DEBUG] [Thread-127030] [transport.py] [_log()] userauth is OK
2026-02-11T10:03:11.207 [DEBUG] [Thread-127030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:03:11.207 [DEBUG] [Thread-127030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:03:11.208 [DEBUG] [Thread-127030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:03:11.208 [DEBUG] [Thread-127030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:03:11.231 [INFO] [Thread-127030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:03:11.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:03:11.866 [DEBUG] [Thread-127030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:03:11.866 [DEBUG] [Thread-127030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:03:11.867 [DEBUG] [Thread-127030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:03:11.907 [DEBUG] [Thread-127030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:03:11.908 [DEBUG] [Thread-127030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:03:11.911 [DEBUG] [Thread-127030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:03:11.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:03:11.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:03:11.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:03:11.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:03:11.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:03:11.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:03:11.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:03:11.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:03:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:03:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.335209 -999.00  +21.80  10.28     49  +10.90 1 2 1 1 1   888    0 11.97 52.31 ----- 8.8 10.3 253.0 13.3 29.3 -21.3 28.5 -19.4 26.4 -18.0 27.1 -20.3
2026-02-11T10:03:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:03:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:03:11.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.335209
2026-02-11T10:03:11.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:03:11.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:03:11.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:03:11.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:03:11.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:03:11.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:02:58', tmtdew=13.07, humidity=43.52, cloud=0.0, wind=10.15, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:02:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:03:11.938 [DEBUG] [Thread-127030] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:03:12.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:03:12.032 [DEBUG] [Thread-127033] [transport.py] [_log()] starting thread (client mode): 0xa57e1750
2026-02-11T10:03:12.033 [DEBUG] [Thread-127033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:03:12.047 [DEBUG] [Thread-127033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:03:12.047 [INFO] [Thread-127033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:03:12.055 [DEBUG] [Thread-127033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:03:12.055 [DEBUG] [Thread-127033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] client lang: <none>
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] server lang: <none>
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] kex follows: False
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] Compression: none
2026-02-11T10:03:12.056 [DEBUG] [Thread-127033] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:03:12.114 [DEBUG] [Thread-127033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:03:12.114 [DEBUG] [Thread-127033] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:03:12.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:03:12.115 [DEBUG] [Thread-127033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:03:12.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:03:12.171 [DEBUG] [Thread-127033] [transport.py] [_log()] userauth is OK
2026-02-11T10:03:12.171 [DEBUG] [Thread-127033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:03:12.171 [DEBUG] [Thread-127033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:03:12.171 [DEBUG] [Thread-127033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:03:12.171 [DEBUG] [Thread-127033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:03:12.190 [INFO] [Thread-127033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:03:12.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:03:12.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:03:13.000 [DEBUG] [Thread-127033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:03:13.000 [DEBUG] [Thread-127033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:03:13.049 [DEBUG] [Thread-127033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:03:13.049 [DEBUG] [Thread-127033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:03:13.057 [DEBUG] [Thread-127033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:03:13.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:03:13.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:03: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') -> 00000000
2026-02-11T10:03:13.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:03:13.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:03:13.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:03:13.089 [DEBUG] [Thread-127033] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:03:15.826 [DEBUG] [Thread-127035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:30.876 [DEBUG] [Thread-127036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:43.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:03:43.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:03:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:03:45.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 3, 33), 13.48, 42.17, 0.0, 9.64, 22.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:03:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:03:33
2026-02-11T10:03:45.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:03:45.783 [DEBUG] [Thread-127037] [transport.py] [_log()] starting thread (client mode): 0xa2d008b0
2026-02-11T10:03:45.783 [DEBUG] [Thread-127037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:03:45.804 [DEBUG] [Thread-127037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:03:45.804 [INFO] [Thread-127037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:03:45.807 [DEBUG] [Thread-127037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] client lang: <none>
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] server lang: <none>
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] kex follows: False
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] Compression: none
2026-02-11T10:03:45.808 [DEBUG] [Thread-127037] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:03:45.825 [DEBUG] [Thread-127037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:03:45.826 [DEBUG] [Thread-127037] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:03:45.827 [DEBUG] [Thread-127037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:03:45.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:03:45.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:03:45.829 [DEBUG] [Thread-127037] [transport.py] [_log()] userauth is OK
2026-02-11T10:03:45.829 [DEBUG] [Thread-127037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:03:45.829 [DEBUG] [Thread-127037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:03:45.830 [DEBUG] [Thread-127037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:03:45.830 [DEBUG] [Thread-127037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:03:45.861 [INFO] [Thread-127037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:03:45.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:03:45.916 [DEBUG] [Thread-127039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:46.499 [DEBUG] [Thread-127037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:03:46.499 [DEBUG] [Thread-127037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:03:46.499 [DEBUG] [Thread-127037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:03:46.540 [DEBUG] [Thread-127037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:03:46.540 [DEBUG] [Thread-127037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:03:46.542 [DEBUG] [Thread-127037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:03:46.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:03:46.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:03:46.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:03:46.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:03:46.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:03:46.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:03:46.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:03:46.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:03:46.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:03:46.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.335556 -999.00  +21.70   7.54     50  +10.90 1 2 1 1 1   888    0 12.14 55.94 ----- 6.6 7.5 264.0 10.6 29.4 -20.4 28.6 -18.5 26.6 -17.9 27.2 -19.6
2026-02-11T10:03:46.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:03:46.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:03:46.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.335556
2026-02-11T10:03:46.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:03:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:03:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:03:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:03:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:03:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:03:33', tmtdew=13.48, humidity=42.17, cloud=0.0, wind=9.64, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:03:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:03:46.559 [DEBUG] [Thread-127037] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:03:46.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:03:46.643 [DEBUG] [Thread-127041] [transport.py] [_log()] starting thread (client mode): 0xa2d93610
2026-02-11T10:03:46.643 [DEBUG] [Thread-127041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:03:46.660 [DEBUG] [Thread-127041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:03:46.660 [INFO] [Thread-127041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:03:46.667 [DEBUG] [Thread-127041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] client lang: <none>
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] server lang: <none>
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] kex follows: False
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:03:46.668 [DEBUG] [Thread-127041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:03:46.669 [DEBUG] [Thread-127041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:03:46.669 [DEBUG] [Thread-127041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:03:46.669 [DEBUG] [Thread-127041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:03:46.669 [DEBUG] [Thread-127041] [transport.py] [_log()] Compression: none
2026-02-11T10:03:46.669 [DEBUG] [Thread-127041] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:03:46.731 [DEBUG] [Thread-127041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:03:46.732 [DEBUG] [Thread-127041] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:03:46.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:03:46.733 [DEBUG] [Thread-127041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:03:46.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:03:46.788 [DEBUG] [Thread-127041] [transport.py] [_log()] userauth is OK
2026-02-11T10:03:46.788 [DEBUG] [Thread-127041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:03:46.788 [DEBUG] [Thread-127041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:03:46.788 [DEBUG] [Thread-127041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:03:46.788 [DEBUG] [Thread-127041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:03:46.808 [INFO] [Thread-127041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:03:46.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:03:46.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:03:47.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:47.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:03:47.664 [DEBUG] [Thread-127041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:03:47.664 [DEBUG] [Thread-127041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:03:47.712 [DEBUG] [Thread-127041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:03:47.712 [DEBUG] [Thread-127041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:03:47.720 [DEBUG] [Thread-127041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:03:47.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:03:47.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:03:47.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:03:47.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:03:47.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:03:47.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:03:47.752 [DEBUG] [Thread-127041] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:04:00.952 [DEBUG] [Thread-127043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:04:07.610 [DEBUG] [Thread-127044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:04:16.015 [DEBUG] [Thread-127045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:04:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:04:17.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:04:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:04:19.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 4, 10), 12.9, 43.68, 0.0, 12.72, 21.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:04:19.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:04:10
2026-02-11T10:04:20.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:04:20.244 [DEBUG] [Thread-127046] [transport.py] [_log()] starting thread (client mode): 0xa81d6f20
2026-02-11T10:04:20.244 [DEBUG] [Thread-127046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:04:20.263 [DEBUG] [Thread-127046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:04:20.263 [INFO] [Thread-127046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] client lang: <none>
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] server lang: <none>
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] kex follows: False
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:04:20.266 [DEBUG] [Thread-127046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:04:20.267 [DEBUG] [Thread-127046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:04:20.267 [DEBUG] [Thread-127046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:04:20.267 [DEBUG] [Thread-127046] [transport.py] [_log()] Compression: none
2026-02-11T10:04:20.267 [DEBUG] [Thread-127046] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:04:20.282 [DEBUG] [Thread-127046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:04:20.283 [DEBUG] [Thread-127046] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:04:20.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:04:20.284 [DEBUG] [Thread-127046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:04:20.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:04:20.286 [DEBUG] [Thread-127046] [transport.py] [_log()] userauth is OK
2026-02-11T10:04:20.286 [DEBUG] [Thread-127046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:04:20.286 [DEBUG] [Thread-127046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:04:20.286 [DEBUG] [Thread-127046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:04:20.286 [DEBUG] [Thread-127046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:04:20.304 [INFO] [Thread-127046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:04:20.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:04:20.961 [DEBUG] [Thread-127046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:04:20.962 [DEBUG] [Thread-127046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:04:20.962 [DEBUG] [Thread-127046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:04:21.003 [DEBUG] [Thread-127046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:04:21.003 [DEBUG] [Thread-127046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:04:21.007 [DEBUG] [Thread-127046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:04:21.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:04:21.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:04:21.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:04:21.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:04:21.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:04:21.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:04:21.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:04:21.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:04:21.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:04:21.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.335903 -999.00  +21.90  14.44     50  +11.10 1 2 1 1 1   888    0 12.15 55.41 ----- 13.1 14.4 289.9 16.9 29.5 -21.3 28.6 -19.4 26.5 -20.2 27.4 -19.4
2026-02-11T10:04:21.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:04:21.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:04:21.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.335903
2026-02-11T10:04:21.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:04:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:04:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:04:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:04:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:04:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:04:10', tmtdew=12.9, humidity=43.68, cloud=0.0, wind=12.72, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:03:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:04:21.032 [DEBUG] [Thread-127046] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:04:21.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:04:21.117 [DEBUG] [Thread-127049] [transport.py] [_log()] starting thread (client mode): 0xa2d7a050
2026-02-11T10:04:21.117 [DEBUG] [Thread-127049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:04:21.132 [DEBUG] [Thread-127049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:04:21.132 [INFO] [Thread-127049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:04:21.140 [DEBUG] [Thread-127049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:04:21.140 [DEBUG] [Thread-127049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:04:21.140 [DEBUG] [Thread-127049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:04:21.140 [DEBUG] [Thread-127049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:21.140 [DEBUG] [Thread-127049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] client lang: <none>
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] server lang: <none>
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] kex follows: False
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] Compression: none
2026-02-11T10:04:21.141 [DEBUG] [Thread-127049] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:04:21.200 [DEBUG] [Thread-127049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:04:21.201 [DEBUG] [Thread-127049] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:04:21.201 [DEBUG] [Thread-127049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:04:21.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:04:21.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:04:21.256 [DEBUG] [Thread-127049] [transport.py] [_log()] userauth is OK
2026-02-11T10:04:21.256 [DEBUG] [Thread-127049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:04:21.256 [DEBUG] [Thread-127049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:04:21.257 [DEBUG] [Thread-127049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:04:21.257 [DEBUG] [Thread-127049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:04:21.281 [INFO] [Thread-127049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:04:21.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:04:21.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:04:22.115 [DEBUG] [Thread-127049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:04:22.115 [DEBUG] [Thread-127049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:04:22.163 [DEBUG] [Thread-127049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:04:22.163 [DEBUG] [Thread-127049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:04:22.173 [DEBUG] [Thread-127049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:04:22.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:04:22.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:04:22.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
2026-02-11T10:04:22.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:04:22.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:04:22.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:04:22.210 [DEBUG] [Thread-127049] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:04:31.054 [DEBUG] [Thread-127051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:04:46.108 [DEBUG] [Thread-127052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:04:47.407 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:04:47.409 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:04:52.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:04:52.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:04:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:04:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 4, 45), 12.85, 43.68, 0.0, 12.28, 21.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:04:54.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:04:45
2026-02-11T10:04:54.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:04:54.697 [DEBUG] [Thread-127053] [transport.py] [_log()] starting thread (client mode): 0xa2d79930
2026-02-11T10:04:54.697 [DEBUG] [Thread-127053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:04:54.717 [DEBUG] [Thread-127053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:04:54.717 [INFO] [Thread-127053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:04:54.720 [DEBUG] [Thread-127053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] client lang: <none>
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] server lang: <none>
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] kex follows: False
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] Compression: none
2026-02-11T10:04:54.721 [DEBUG] [Thread-127053] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:04:54.739 [DEBUG] [Thread-127053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:04:54.739 [DEBUG] [Thread-127053] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:04:54.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:04:54.740 [DEBUG] [Thread-127053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:04:54.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:04:54.743 [DEBUG] [Thread-127053] [transport.py] [_log()] userauth is OK
2026-02-11T10:04:54.743 [DEBUG] [Thread-127053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:04:54.743 [DEBUG] [Thread-127053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:04:54.743 [DEBUG] [Thread-127053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:04:54.744 [DEBUG] [Thread-127053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:04:54.766 [INFO] [Thread-127053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:04:54.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:04:55.400 [DEBUG] [Thread-127053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:04:55.401 [DEBUG] [Thread-127053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:04:55.401 [DEBUG] [Thread-127053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:04:55.441 [DEBUG] [Thread-127053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:04:55.441 [DEBUG] [Thread-127053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:04:55.444 [DEBUG] [Thread-127053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:04:55.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:04:55.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:04:55.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:04:55.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:04:55.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:04:55.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:04:55.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:04:55.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:04:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:04:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.336250 -999.00  +21.90  10.18     50  +11.00 1 2 1 1 1   888    0 12.19 63.26 ----- 12.9 10.2 266.2 18.3 29.5 -22.1 28.7 -19.2 26.6 -18.5 27.3 -20.4
2026-02-11T10:04:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:04:55.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:04:55.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.336250
2026-02-11T10:04:55.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:04:55.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:04:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:04:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:04:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:04:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:04:45', tmtdew=12.85, humidity=43.68, cloud=0.0, wind=12.28, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:04:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:04:55.465 [DEBUG] [Thread-127053] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:04:55.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:04:55.561 [DEBUG] [Thread-127056] [transport.py] [_log()] starting thread (client mode): 0xa57c26e0
2026-02-11T10:04:55.561 [DEBUG] [Thread-127056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:04:55.577 [DEBUG] [Thread-127056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:04:55.577 [INFO] [Thread-127056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:04:55.590 [DEBUG] [Thread-127056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:04:55.590 [DEBUG] [Thread-127056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:04:55.590 [DEBUG] [Thread-127056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] client lang: <none>
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] server lang: <none>
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] kex follows: False
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] Compression: none
2026-02-11T10:04:55.591 [DEBUG] [Thread-127056] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:04:55.643 [DEBUG] [Thread-127056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:04:55.644 [DEBUG] [Thread-127056] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:04:55.644 [DEBUG] [Thread-127056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:04:55.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:04:55.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:04:55.700 [DEBUG] [Thread-127056] [transport.py] [_log()] userauth is OK
2026-02-11T10:04:55.700 [DEBUG] [Thread-127056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:04:55.700 [DEBUG] [Thread-127056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:04:55.700 [DEBUG] [Thread-127056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:04:55.701 [DEBUG] [Thread-127056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:04:55.720 [INFO] [Thread-127056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:04:55.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:04:55.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:04:56.569 [DEBUG] [Thread-127056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:04:56.570 [DEBUG] [Thread-127056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:04:56.617 [DEBUG] [Thread-127056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:04:56.617 [DEBUG] [Thread-127056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:04:56.628 [DEBUG] [Thread-127056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:04:56.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:04:56.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:04:56.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:04:56.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:04:56.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:04:56.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:04:56.668 [DEBUG] [Thread-127056] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:05:01.148 [DEBUG] [Thread-127058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:05:07.646 [DEBUG] [Thread-127059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:05:16.208 [DEBUG] [Thread-127060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:05:26.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:05:26.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:05:26.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
2026-02-11T10:05:28.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 5, 20), 12.7, 44.16, 0.0, 13.15, 22.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:05:28.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:05:20
2026-02-11T10:05:28.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:05:29.036 [DEBUG] [Thread-127061] [transport.py] [_log()] starting thread (client mode): 0xa2d782e0
2026-02-11T10:05:29.036 [DEBUG] [Thread-127061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:05:29.056 [DEBUG] [Thread-127061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:05:29.056 [INFO] [Thread-127061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:05:29.059 [DEBUG] [Thread-127061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:05:29.059 [DEBUG] [Thread-127061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:05:29.059 [DEBUG] [Thread-127061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:05:29.059 [DEBUG] [Thread-127061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:05:29.059 [DEBUG] [Thread-127061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:05:29.059 [DEBUG] [Thread-127061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] client lang: <none>
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] server lang: <none>
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] kex follows: False
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] Compression: none
2026-02-11T10:05:29.060 [DEBUG] [Thread-127061] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:05:29.075 [DEBUG] [Thread-127061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:05:29.076 [DEBUG] [Thread-127061] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:05:29.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:05:29.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:05:29.077 [DEBUG] [Thread-127061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:05:29.078 [DEBUG] [Thread-127061] [transport.py] [_log()] userauth is OK
2026-02-11T10:05:29.078 [DEBUG] [Thread-127061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:05:29.079 [DEBUG] [Thread-127061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:05:29.079 [DEBUG] [Thread-127061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:05:29.079 [DEBUG] [Thread-127061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:05:29.099 [INFO] [Thread-127061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:05:29.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:05:29.941 [DEBUG] [Thread-127061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:05:29.941 [DEBUG] [Thread-127061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:05:29.942 [DEBUG] [Thread-127061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:05:29.982 [DEBUG] [Thread-127061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:05:29.982 [DEBUG] [Thread-127061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:05:29.985 [DEBUG] [Thread-127061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:05:29.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:05:29.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:05:29.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:05:29.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:05:30.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:05:30.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:05:30.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.336598 -999.00  +21.80   9.71     50  +11.20 1 2 1 1 1   888    0 12.19 59.24 ----- 8.0 9.7 271.2 15.0 29.6 -22.8 28.7 -19.3 26.6 -20.7 27.3 -20.0
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.336598
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:05:30.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:05:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:05:20', tmtdew=12.7, humidity=44.16, cloud=0.0, wind=13.15, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:04:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:05:30.002 [DEBUG] [Thread-127061] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:05:30.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:05:30.086 [DEBUG] [Thread-127064] [transport.py] [_log()] starting thread (client mode): 0xa57e37c0
2026-02-11T10:05:30.086 [DEBUG] [Thread-127064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:05:30.100 [DEBUG] [Thread-127064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:05:30.100 [INFO] [Thread-127064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] client lang: <none>
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] server lang: <none>
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] kex follows: False
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:05:30.108 [DEBUG] [Thread-127064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:05:30.109 [DEBUG] [Thread-127064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:05:30.109 [DEBUG] [Thread-127064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:05:30.109 [DEBUG] [Thread-127064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:05:30.109 [DEBUG] [Thread-127064] [transport.py] [_log()] Compression: none
2026-02-11T10:05:30.109 [DEBUG] [Thread-127064] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:05:30.168 [DEBUG] [Thread-127064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:05:30.169 [DEBUG] [Thread-127064] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:05:30.169 [DEBUG] [Thread-127064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:05:30.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:05:30.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:05:30.229 [DEBUG] [Thread-127064] [transport.py] [_log()] userauth is OK
2026-02-11T10:05:30.229 [DEBUG] [Thread-127064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:05:30.230 [DEBUG] [Thread-127064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:05:30.230 [DEBUG] [Thread-127064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:05:30.230 [DEBUG] [Thread-127064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:05:30.250 [INFO] [Thread-127064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:05:30.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:05:30.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:05:31.078 [DEBUG] [Thread-127064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:05:31.078 [DEBUG] [Thread-127064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:05:31.126 [DEBUG] [Thread-127064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:05:31.127 [DEBUG] [Thread-127064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:05:31.136 [DEBUG] [Thread-127064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:05:31.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:05:31.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:05:31.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:05:31.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:05:31.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:05:31.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:05:31.173 [DEBUG] [Thread-127064] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:05:31.245 [DEBUG] [Thread-127066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:05:46.300 [DEBUG] [Thread-127067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:05:47.550 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:05:47.551 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:06:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:06:01.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:06:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:06:01.336 [DEBUG] [Thread-127068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:06:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 5, 20), 12.7, 44.16, 0.0, 13.15, 22.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:06:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:05:20
2026-02-11T10:06:03.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:06:04.159 [DEBUG] [Thread-127069] [transport.py] [_log()] starting thread (client mode): 0xa2dc1f00
2026-02-11T10:06:04.159 [DEBUG] [Thread-127069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:06:04.180 [DEBUG] [Thread-127069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:06:04.180 [INFO] [Thread-127069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:06:04.182 [DEBUG] [Thread-127069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] client lang: <none>
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] server lang: <none>
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] kex follows: False
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] Compression: none
2026-02-11T10:06:04.183 [DEBUG] [Thread-127069] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:06:04.203 [DEBUG] [Thread-127069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:06:04.203 [DEBUG] [Thread-127069] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:06:04.204 [DEBUG] [Thread-127069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:06:04.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:06:04.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:06:04.206 [DEBUG] [Thread-127069] [transport.py] [_log()] userauth is OK
2026-02-11T10:06:04.206 [DEBUG] [Thread-127069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:06:04.206 [DEBUG] [Thread-127069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:06:04.206 [DEBUG] [Thread-127069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:06:04.206 [DEBUG] [Thread-127069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:06:04.231 [INFO] [Thread-127069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:06:04.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:06:04.879 [DEBUG] [Thread-127069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:06:04.879 [DEBUG] [Thread-127069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:06:04.880 [DEBUG] [Thread-127069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:06:04.920 [DEBUG] [Thread-127069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:06:04.921 [DEBUG] [Thread-127069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:06:04.924 [DEBUG] [Thread-127069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:06:04.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:06:04.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:06:04.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:06:04.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:06:04.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:06:04.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:06:04.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:06:04.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:06:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:06:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.336945 -999.00  +21.90   9.73     50  +11.00 1 2 1 1 1   888    0 12.12 55.58 ----- 11.2 9.7 247.4 19.5 29.6 -24.3 28.7 -20.2 26.7 -18.7 27.3 -20.9
2026-02-11T10:06:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:06:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:06:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.336945
2026-02-11T10:06:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:06:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:06:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:06:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:06:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:06:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:05:20', tmtdew=12.7, humidity=44.16, cloud=0.0, wind=13.15, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:05:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:06:04.951 [DEBUG] [Thread-127069] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:06:05.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:06:05.048 [DEBUG] [Thread-127072] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ef0
2026-02-11T10:06:05.048 [DEBUG] [Thread-127072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:06:05.064 [DEBUG] [Thread-127072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:06:05.064 [INFO] [Thread-127072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:06:05.071 [DEBUG] [Thread-127072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] client lang: <none>
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] server lang: <none>
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] kex follows: False
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] Compression: none
2026-02-11T10:06:05.072 [DEBUG] [Thread-127072] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:06:05.130 [DEBUG] [Thread-127072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:06:05.130 [DEBUG] [Thread-127072] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:06:05.131 [DEBUG] [Thread-127072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:06:05.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:06:05.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:06:05.187 [DEBUG] [Thread-127072] [transport.py] [_log()] userauth is OK
2026-02-11T10:06:05.187 [DEBUG] [Thread-127072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:06:05.187 [DEBUG] [Thread-127072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:06:05.188 [DEBUG] [Thread-127072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:06:05.188 [DEBUG] [Thread-127072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:06:05.207 [INFO] [Thread-127072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:06:05.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:06:05.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:06:06.083 [DEBUG] [Thread-127072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:06:06.083 [DEBUG] [Thread-127072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:06:06.131 [DEBUG] [Thread-127072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:06:06.132 [DEBUG] [Thread-127072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:06:06.141 [DEBUG] [Thread-127072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:06:06.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:06:06.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:06:06.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:06:06.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:06:06.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:06:06.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:06:06.178 [DEBUG] [Thread-127072] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:06:07.685 [DEBUG] [Thread-127074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:06:16.373 [DEBUG] [Thread-127075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:06:31.424 [DEBUG] [Thread-127076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:06:36.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:06:36.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:06:36.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:06:38.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 5, 55), 12.93, 43.65, 0.0, 16.71, 22.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:06:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:05:55
2026-02-11T10:06:38.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:06:39.124 [DEBUG] [Thread-127077] [transport.py] [_log()] starting thread (client mode): 0xa2dc1e40
2026-02-11T10:06:39.124 [DEBUG] [Thread-127077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:06:39.143 [DEBUG] [Thread-127077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:06:39.143 [INFO] [Thread-127077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:06:39.156 [DEBUG] [Thread-127077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:06:39.156 [DEBUG] [Thread-127077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:06:39.156 [DEBUG] [Thread-127077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] client lang: <none>
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] server lang: <none>
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] kex follows: False
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] Compression: none
2026-02-11T10:06:39.157 [DEBUG] [Thread-127077] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:06:39.175 [DEBUG] [Thread-127077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:06:39.176 [DEBUG] [Thread-127077] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:06:39.176 [DEBUG] [Thread-127077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:06:39.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:06:39.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:06:39.178 [DEBUG] [Thread-127077] [transport.py] [_log()] userauth is OK
2026-02-11T10:06:39.179 [DEBUG] [Thread-127077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:06:39.179 [DEBUG] [Thread-127077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:06:39.179 [DEBUG] [Thread-127077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:06:39.179 [DEBUG] [Thread-127077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:06:39.203 [INFO] [Thread-127077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:06:39.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:06:39.842 [DEBUG] [Thread-127077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:06:39.842 [DEBUG] [Thread-127077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:06:39.843 [DEBUG] [Thread-127077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:06:39.883 [DEBUG] [Thread-127077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:06:39.883 [DEBUG] [Thread-127077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:06:39.886 [DEBUG] [Thread-127077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:06:39.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:06:39.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:06:39.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:06:39.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:06:39.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:06:39.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:06:39.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:06:39.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:06:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:06:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.337292 -999.00  +22.10  10.88     49  +11.10 1 2 1 1 1   888    0 12.20 59.55 ----- 9.2 10.9 260.3 14.5 29.6 -21.6 28.8 -19.0 26.6 -18.6 27.5 -19.1
2026-02-11T10:06:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:06:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:06:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.337292
2026-02-11T10:06:39.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:06:39.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:06:39.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:06:39.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:06:39.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:06:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:05:55', tmtdew=12.93, humidity=43.65, cloud=0.0, wind=16.71, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:05:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:06:39.914 [DEBUG] [Thread-127077] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:06:39.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:06:40.015 [DEBUG] [Thread-127080] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-11T10:06:40.015 [DEBUG] [Thread-127080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:06:40.032 [DEBUG] [Thread-127080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:06:40.033 [INFO] [Thread-127080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:06:40.040 [DEBUG] [Thread-127080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] client lang: <none>
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] server lang: <none>
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] kex follows: False
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:06:40.041 [DEBUG] [Thread-127080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:06:40.042 [DEBUG] [Thread-127080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:06:40.042 [DEBUG] [Thread-127080] [transport.py] [_log()] Compression: none
2026-02-11T10:06:40.042 [DEBUG] [Thread-127080] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:06:40.097 [DEBUG] [Thread-127080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:06:40.097 [DEBUG] [Thread-127080] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:06:40.097 [DEBUG] [Thread-127080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:06:40.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:06:40.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:06:40.155 [DEBUG] [Thread-127080] [transport.py] [_log()] userauth is OK
2026-02-11T10:06:40.155 [DEBUG] [Thread-127080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:06:40.155 [DEBUG] [Thread-127080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:06:40.156 [DEBUG] [Thread-127080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:06:40.156 [DEBUG] [Thread-127080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:06:40.181 [INFO] [Thread-127080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:06:40.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:06:40.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:06:41.002 [DEBUG] [Thread-127080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:06:41.002 [DEBUG] [Thread-127080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:06:41.051 [DEBUG] [Thread-127080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:06:41.051 [DEBUG] [Thread-127080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:06:41.061 [DEBUG] [Thread-127080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:06:41.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:06:41.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')
2026-02-11T10:06:41.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:06:41.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:06:41.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:06:41.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:06:41.098 [DEBUG] [Thread-127080] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:06:46.459 [DEBUG] [Thread-127082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:06:47.692 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:06:47.693 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:01.496 [DEBUG] [Thread-127083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:07.729 [DEBUG] [Thread-127084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:07:11.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:07:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:07:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 6, 32), 13.01, 43.47, 0.0, 15.95, 22.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:07:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:06:32
2026-02-11T10:07:13.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:07:13.577 [DEBUG] [Thread-127085] [transport.py] [_log()] starting thread (client mode): 0xa2d56bc0
2026-02-11T10:07:13.577 [DEBUG] [Thread-127085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:07:13.597 [DEBUG] [Thread-127085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:07:13.597 [INFO] [Thread-127085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:13.599 [DEBUG] [Thread-127085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] client lang: <none>
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] server lang: <none>
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] kex follows: False
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:07:13.600 [DEBUG] [Thread-127085] [transport.py] [_log()] Compression: none
2026-02-11T10:07:13.601 [DEBUG] [Thread-127085] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:07:13.610 [DEBUG] [Thread-127085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:07:13.610 [DEBUG] [Thread-127085] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:07:13.610 [DEBUG] [Thread-127085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:07:13.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:07:13.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:07:13.612 [DEBUG] [Thread-127085] [transport.py] [_log()] userauth is OK
2026-02-11T10:07:13.612 [DEBUG] [Thread-127085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:07:13.612 [DEBUG] [Thread-127085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:07:13.613 [DEBUG] [Thread-127085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:07:13.613 [DEBUG] [Thread-127085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:07:13.632 [INFO] [Thread-127085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:07:13.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:07:14.249 [DEBUG] [Thread-127085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:07:14.249 [DEBUG] [Thread-127085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:07:14.249 [DEBUG] [Thread-127085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:07:14.290 [DEBUG] [Thread-127085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:07:14.291 [DEBUG] [Thread-127085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:07:14.294 [DEBUG] [Thread-127085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:07:14.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:07:14.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:07:14.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:07:14.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:07:14.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:07:14.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:07:14.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:07:14.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:07:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:07:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.337986 -999.00  +22.30  21.72     48  +10.90 1 2 1 1 1   888    0 12.62 67.07 ----- 21.8 21.7 294.6 25.1 29.7 -20.9 28.8 -20.5 26.7 -20.4 27.6 -20.2
2026-02-11T10:07:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:07:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:07:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.337986
2026-02-11T10:07:14.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:07:14.318 [DEBUG] [Thread-127085] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:07:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:07:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:06:32', tmtdew=13.01, humidity=43.47, cloud=0.0, wind=15.95, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:06:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10: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
2026-02-11T10:07:14.416 [DEBUG] [Thread-127088] [transport.py] [_log()] starting thread (client mode): 0xa2d55a80
2026-02-11T10:07:14.417 [DEBUG] [Thread-127088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:07:14.432 [DEBUG] [Thread-127088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:07:14.432 [INFO] [Thread-127088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:07:14.439 [DEBUG] [Thread-127088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:07:14.439 [DEBUG] [Thread-127088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:07:14.439 [DEBUG] [Thread-127088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:07:14.439 [DEBUG] [Thread-127088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] client lang: <none>
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] server lang: <none>
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] kex follows: False
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] Compression: none
2026-02-11T10:07:14.440 [DEBUG] [Thread-127088] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:07:14.499 [DEBUG] [Thread-127088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:07:14.500 [DEBUG] [Thread-127088] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:07:14.500 [DEBUG] [Thread-127088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:07:14.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:07:14.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:07:14.554 [DEBUG] [Thread-127088] [transport.py] [_log()] userauth is OK
2026-02-11T10:07:14.555 [DEBUG] [Thread-127088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:07:14.555 [DEBUG] [Thread-127088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:07:14.555 [DEBUG] [Thread-127088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:07:14.555 [DEBUG] [Thread-127088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:07:14.577 [INFO] [Thread-127088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:07:14.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:07:14.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:07:15.418 [DEBUG] [Thread-127088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:07:15.418 [DEBUG] [Thread-127088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:07:15.466 [DEBUG] [Thread-127088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:07:15.467 [DEBUG] [Thread-127088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:07:15.476 [DEBUG] [Thread-127088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:07:15.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:07:15.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:07:15.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:07:15.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:07:15.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:07:15.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:07:15.513 [DEBUG] [Thread-127088] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:07:16.530 [DEBUG] [Thread-127090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:31.588 [DEBUG] [Thread-127091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:07:45.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:07:45.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:07:46.623 [DEBUG] [Thread-127092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:47.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:47.842 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:07:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 7, 8), 13.0, 43.48, 0.0, 17.68, 22.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:07:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:07:08
2026-02-11T10:07:48.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:07:48.835 [DEBUG] [Thread-127093] [transport.py] [_log()] starting thread (client mode): 0xa2d564a0
2026-02-11T10:07:48.835 [DEBUG] [Thread-127093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:07:48.855 [DEBUG] [Thread-127093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:07:48.855 [INFO] [Thread-127093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:07:48.858 [DEBUG] [Thread-127093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:07:48.858 [DEBUG] [Thread-127093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:07:48.858 [DEBUG] [Thread-127093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:07:48.858 [DEBUG] [Thread-127093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] client lang: <none>
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] server lang: <none>
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] kex follows: False
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] Compression: none
2026-02-11T10:07:48.859 [DEBUG] [Thread-127093] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:07:48.876 [DEBUG] [Thread-127093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:07:48.877 [DEBUG] [Thread-127093] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:07:48.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:07:48.878 [DEBUG] [Thread-127093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:07:48.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:07:48.921 [DEBUG] [Thread-127093] [transport.py] [_log()] userauth is OK
2026-02-11T10:07:48.921 [DEBUG] [Thread-127093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:07:48.921 [DEBUG] [Thread-127093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:07:48.921 [DEBUG] [Thread-127093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:07:48.921 [DEBUG] [Thread-127093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:07:48.959 [INFO] [Thread-127093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:07:48.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:07:49.619 [DEBUG] [Thread-127093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:07:49.619 [DEBUG] [Thread-127093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:07:49.620 [DEBUG] [Thread-127093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:07:49.660 [DEBUG] [Thread-127093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:07:49.661 [DEBUG] [Thread-127093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:07:49.664 [DEBUG] [Thread-127093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:07:49.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:07:49.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:07:49.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:07:49.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:07:49.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:07:49.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:07:49.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:07:49.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:07:49.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:07:49.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.338334 -999.00  +21.80  20.36     49  +10.70 1 1 1 1 1   888    0 12.78 74.64 ----- 20.8 20.4 294.0 28.4 29.6 -21.5 28.4 -25.0 26.7 -21.4 27.6 -19.9
2026-02-11T10:07:49.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:07:49.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:07:49.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.338334
2026-02-11T10:07:49.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:07:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:07:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:07:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:07:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T10:07:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:07:08', tmtdew=13.0, humidity=43.48, cloud=0.0, wind=17.68, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:07:12.058', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:07:49.690 [DEBUG] [Thread-127093] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:07:49.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:07:49.787 [DEBUG] [Thread-127096] [transport.py] [_log()] starting thread (client mode): 0xa57c0b20
2026-02-11T10:07:49.787 [DEBUG] [Thread-127096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:07:49.802 [DEBUG] [Thread-127096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:07:49.802 [INFO] [Thread-127096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:07:49.809 [DEBUG] [Thread-127096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] client lang: <none>
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] server lang: <none>
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] kex follows: False
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] Compression: none
2026-02-11T10:07:49.810 [DEBUG] [Thread-127096] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:07:49.865 [DEBUG] [Thread-127096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:07:49.865 [DEBUG] [Thread-127096] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:07:49.866 [DEBUG] [Thread-127096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:07:49.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:07:49.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:07:49.923 [DEBUG] [Thread-127096] [transport.py] [_log()] userauth is OK
2026-02-11T10:07:49.923 [DEBUG] [Thread-127096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:07:49.923 [DEBUG] [Thread-127096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:07:49.923 [DEBUG] [Thread-127096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:07:49.923 [DEBUG] [Thread-127096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:07:49.942 [INFO] [Thread-127096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:07:49.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:07:49.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:07:50.875 [DEBUG] [Thread-127096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:07:50.875 [DEBUG] [Thread-127096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:07:50.923 [DEBUG] [Thread-127096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:07:50.924 [DEBUG] [Thread-127096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:07:50.933 [DEBUG] [Thread-127096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:07:50.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:07:50.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')
2026-02-11T10:07:50.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:07:50.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:07:50.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:07:50.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:07:50.969 [DEBUG] [Thread-127096] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:08:01.658 [DEBUG] [Thread-127098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:08:07.762 [DEBUG] [Thread-127099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:08:16.713 [DEBUG] [Thread-127100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:08:20.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:08:20.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:08:21.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:08:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 7, 44), 12.94, 43.52, 0.0, 15.23, 22.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:08:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:07:44
2026-02-11T10:08:23.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:08:23.914 [DEBUG] [Thread-127101] [transport.py] [_log()] starting thread (client mode): 0xa2d565c0
2026-02-11T10:08:23.915 [DEBUG] [Thread-127101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:08:23.926 [DEBUG] [Thread-127101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:08:23.926 [INFO] [Thread-127101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:08:23.927 [DEBUG] [Thread-127101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:08:23.927 [DEBUG] [Thread-127101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:08:23.927 [DEBUG] [Thread-127101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] client lang: <none>
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] server lang: <none>
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] kex follows: False
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] Compression: none
2026-02-11T10:08:23.928 [DEBUG] [Thread-127101] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:08:23.935 [DEBUG] [Thread-127101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:08:23.936 [DEBUG] [Thread-127101] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:08:23.936 [DEBUG] [Thread-127101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:08:23.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:08:23.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:08:23.937 [DEBUG] [Thread-127101] [transport.py] [_log()] userauth is OK
2026-02-11T10:08:23.937 [DEBUG] [Thread-127101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:08:23.937 [DEBUG] [Thread-127101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:08:23.937 [DEBUG] [Thread-127101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:08:23.937 [DEBUG] [Thread-127101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:08:23.954 [INFO] [Thread-127101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:08:23.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:08:24.555 [DEBUG] [Thread-127101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:08:24.555 [DEBUG] [Thread-127101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:08:24.555 [DEBUG] [Thread-127101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:08:24.596 [DEBUG] [Thread-127101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:08:24.596 [DEBUG] [Thread-127101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:08:24.598 [DEBUG] [Thread-127101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:08:24.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:08:24.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:08:24.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:08:24.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:08:24.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:08:24.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:08:24.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:08:24.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:08:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:08:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.338681 -999.00  +21.60  20.64     50  +10.70 1 1 1 1 1   888    0 12.86 78.69 ----- 19.7 20.6 297.2 24.7 29.1 -25.9 28.1 -24.1 26.3 -22.0 27.1 -23.1
2026-02-11T10:08:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:08:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:08:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.338681
2026-02-11T10:08:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:08:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:08:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:08:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:08:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T10:08:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:07:44', tmtdew=12.94, humidity=43.52, cloud=0.0, wind=15.23, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:07:42.038', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:08:24.621 [DEBUG] [Thread-127101] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:08:24.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:08:24.716 [DEBUG] [Thread-127104] [transport.py] [_log()] starting thread (client mode): 0xa575add0
2026-02-11T10:08:24.716 [DEBUG] [Thread-127104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:08:24.732 [DEBUG] [Thread-127104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:08:24.732 [INFO] [Thread-127104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:08:24.740 [DEBUG] [Thread-127104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:08:24.740 [DEBUG] [Thread-127104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] client lang: <none>
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] server lang: <none>
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] kex follows: False
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] Compression: none
2026-02-11T10:08:24.741 [DEBUG] [Thread-127104] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:08:24.800 [DEBUG] [Thread-127104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:08:24.800 [DEBUG] [Thread-127104] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:08:24.801 [DEBUG] [Thread-127104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:08:24.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:08:24.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:08:24.855 [DEBUG] [Thread-127104] [transport.py] [_log()] userauth is OK
2026-02-11T10:08:24.856 [DEBUG] [Thread-127104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:08:24.856 [DEBUG] [Thread-127104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:08:24.856 [DEBUG] [Thread-127104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:08:24.856 [DEBUG] [Thread-127104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:08:24.883 [INFO] [Thread-127104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:08:24.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:08:24.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:08:25.732 [DEBUG] [Thread-127104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:08:25.733 [DEBUG] [Thread-127104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:08:25.780 [DEBUG] [Thread-127104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:08:25.781 [DEBUG] [Thread-127104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:08:25.790 [DEBUG] [Thread-127104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:08:25.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:08:25.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:08:25.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
2026-02-11T10:08:25.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:08:25.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:08:25.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:08:25.827 [DEBUG] [Thread-127104] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:08:31.749 [DEBUG] [Thread-127106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:08:46.800 [DEBUG] [Thread-127107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:08:47.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:08:47.984 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:08:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:08:55.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:08:55.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
2026-02-11T10:08:57.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 8, 20), 13.42, 42.28, 0.0, 18.95, 22.42, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:08:57.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:08:20
2026-02-11T10:08:58.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:08:58.274 [DEBUG] [Thread-127108] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-11T10:08:58.274 [DEBUG] [Thread-127108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:08:58.294 [DEBUG] [Thread-127108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:08:58.295 [INFO] [Thread-127108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:58.298 [DEBUG] [Thread-127108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] client lang: <none>
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] server lang: <none>
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] kex follows: False
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] Compression: none
2026-02-11T10:08:58.299 [DEBUG] [Thread-127108] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:08:58.320 [DEBUG] [Thread-127108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:08:58.320 [DEBUG] [Thread-127108] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:08:58.321 [DEBUG] [Thread-127108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:08:58.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:08:58.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:08:58.324 [DEBUG] [Thread-127108] [transport.py] [_log()] userauth is OK
2026-02-11T10:08:58.324 [DEBUG] [Thread-127108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:08:58.324 [DEBUG] [Thread-127108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:08:58.324 [DEBUG] [Thread-127108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:08:58.324 [DEBUG] [Thread-127108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:08:58.347 [INFO] [Thread-127108] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:08:58.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:08:58.995 [DEBUG] [Thread-127108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:08:58.996 [DEBUG] [Thread-127108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:08:58.996 [DEBUG] [Thread-127108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:08:59.037 [DEBUG] [Thread-127108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:08:59.037 [DEBUG] [Thread-127108] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:08:59.040 [DEBUG] [Thread-127108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:08:59.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:08:59.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:08:59.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:08:59.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:08:59.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:08:59.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:08:59.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:08:59.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:08:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:08:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.339028 -999.00  +21.20  14.39     51  +10.70 1 1 1 1 1   888    0 12.70 68.28 ----- 13.5 14.4 302.8 26.0 28.6 -27.0 27.6 -24.4 25.9 -23.8 26.7 -24.2
2026-02-11T10:08:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:08:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:08:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.339028
2026-02-11T10:08:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:08:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:08:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:08:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:08:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T10:08:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:08:20', tmtdew=13.42, humidity=42.28, cloud=0.0, wind=18.95, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:08:12.019', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:08:59.064 [DEBUG] [Thread-127108] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:08:59.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:08:59.160 [DEBUG] [Thread-127111] [transport.py] [_log()] starting thread (client mode): 0xa57597e0
2026-02-11T10:08:59.160 [DEBUG] [Thread-127111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:08:59.174 [DEBUG] [Thread-127111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:08:59.174 [INFO] [Thread-127111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:08:59.182 [DEBUG] [Thread-127111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:08:59.183 [DEBUG] [Thread-127111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:08:59.183 [DEBUG] [Thread-127111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:08:59.183 [DEBUG] [Thread-127111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:59.183 [DEBUG] [Thread-127111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:08:59.183 [DEBUG] [Thread-127111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:59.183 [DEBUG] [Thread-127111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:08:59.183 [DEBUG] [Thread-127111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] client lang: <none>
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] server lang: <none>
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] kex follows: False
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:08:59.184 [DEBUG] [Thread-127111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:08:59.185 [DEBUG] [Thread-127111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:08:59.185 [DEBUG] [Thread-127111] [transport.py] [_log()] Compression: none
2026-02-11T10:08:59.185 [DEBUG] [Thread-127111] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:08:59.240 [DEBUG] [Thread-127111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:08:59.241 [DEBUG] [Thread-127111] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:08:59.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:08:59.242 [DEBUG] [Thread-127111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:08:59.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:08:59.296 [DEBUG] [Thread-127111] [transport.py] [_log()] userauth is OK
2026-02-11T10:08:59.296 [DEBUG] [Thread-127111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:08:59.296 [DEBUG] [Thread-127111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:08:59.296 [DEBUG] [Thread-127111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:08:59.296 [DEBUG] [Thread-127111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:08:59.315 [INFO] [Thread-127111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:08:59.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:08:59.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:09:00.163 [DEBUG] [Thread-127111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:09:00.163 [DEBUG] [Thread-127111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:09:00.211 [DEBUG] [Thread-127111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:09:00.212 [DEBUG] [Thread-127111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:09:00.221 [DEBUG] [Thread-127111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:09:00.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:09:00.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:09:00.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:09:00.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:09:00.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:09:00.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:09:00.256 [DEBUG] [Thread-127111] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:09:01.838 [DEBUG] [Thread-127113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:09:07.799 [DEBUG] [Thread-127114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:09:16.888 [DEBUG] [Thread-127115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:09:30.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:09:30.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:09:30.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:09:31.924 [DEBUG] [Thread-127116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:09:32.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 8, 57), 13.16, 43.02, 0.0, 15.4, 22.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:09:32.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:08:57
2026-02-11T10:09:32.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:09:32.678 [DEBUG] [Thread-127117] [transport.py] [_log()] starting thread (client mode): 0xa5758a00
2026-02-11T10:09:32.678 [DEBUG] [Thread-127117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:09:32.699 [DEBUG] [Thread-127117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:09:32.699 [INFO] [Thread-127117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] client lang: <none>
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] server lang: <none>
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] kex follows: False
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] Compression: none
2026-02-11T10:09:32.703 [DEBUG] [Thread-127117] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:09:32.721 [DEBUG] [Thread-127117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:09:32.721 [DEBUG] [Thread-127117] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:09:32.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:09:32.723 [DEBUG] [Thread-127117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:09:32.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:09:32.725 [DEBUG] [Thread-127117] [transport.py] [_log()] userauth is OK
2026-02-11T10:09:32.725 [DEBUG] [Thread-127117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:09:32.725 [DEBUG] [Thread-127117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:09:32.725 [DEBUG] [Thread-127117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:09:32.725 [DEBUG] [Thread-127117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:09:32.750 [INFO] [Thread-127117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:09:32.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:09:33.412 [DEBUG] [Thread-127117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:09:33.412 [DEBUG] [Thread-127117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:09:33.412 [DEBUG] [Thread-127117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:09:33.453 [DEBUG] [Thread-127117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:09:33.454 [DEBUG] [Thread-127117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:09:33.457 [DEBUG] [Thread-127117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:09:33.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:09:33.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:09:33.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:09:33.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:09:33.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:09:33.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:09:33.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:09:33.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:09:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:09:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.339375 -999.00  +21.20  16.28     51  +10.70 1 1 1 1 1   888    0 12.53 66.76 ----- 16.1 16.3 310.8 17.8 28.1 -26.1 27.3 -24.5 25.9 -22.8 26.5 -23.7
2026-02-11T10:09:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:09:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:09:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.339375
2026-02-11T10:09:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:09:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:09:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:09:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:09:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T10:09:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:08:57', tmtdew=13.16, humidity=43.02, cloud=0.0, wind=15.4, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:08:42.000', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:09:33.486 [DEBUG] [Thread-127117] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:09:33.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:09:33.581 [DEBUG] [Thread-127120] [transport.py] [_log()] starting thread (client mode): 0xa5759450
2026-02-11T10:09:33.581 [DEBUG] [Thread-127120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:09:33.597 [DEBUG] [Thread-127120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:09:33.598 [INFO] [Thread-127120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] client lang: <none>
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] server lang: <none>
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] kex follows: False
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] Compression: none
2026-02-11T10:09:33.605 [DEBUG] [Thread-127120] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:09:33.674 [DEBUG] [Thread-127120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:09:33.674 [DEBUG] [Thread-127120] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:09:33.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:09:33.675 [DEBUG] [Thread-127120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:09:33.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:09:33.738 [DEBUG] [Thread-127120] [transport.py] [_log()] userauth is OK
2026-02-11T10:09:33.738 [DEBUG] [Thread-127120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:09:33.738 [DEBUG] [Thread-127120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:09:33.738 [DEBUG] [Thread-127120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:09:33.738 [DEBUG] [Thread-127120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:09:33.761 [INFO] [Thread-127120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:09:33.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:09:33.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:09:34.625 [DEBUG] [Thread-127120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:09:34.626 [DEBUG] [Thread-127120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:09:34.673 [DEBUG] [Thread-127120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:09:34.674 [DEBUG] [Thread-127120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:09:34.683 [DEBUG] [Thread-127120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:09:34.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:09:34.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:09:34.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:09:34.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:09:34.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:09:34.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:09:34.719 [DEBUG] [Thread-127120] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:09:46.961 [DEBUG] [Thread-127122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:09:48.124 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:09:48.125 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:10:02.017 [DEBUG] [Thread-127123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:10:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:10:04.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:10:04.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:10:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 9, 32), 12.82, 43.87, 0.0, 13.36, 21.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:10:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:09:32
2026-02-11T10:10:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:10:07.028 [DEBUG] [Thread-127124] [transport.py] [_log()] starting thread (client mode): 0xa5759f30
2026-02-11T10:10:07.028 [DEBUG] [Thread-127124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:10:07.043 [DEBUG] [Thread-127124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:10:07.043 [INFO] [Thread-127124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] client lang: <none>
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] server lang: <none>
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] kex follows: False
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:10:07.046 [DEBUG] [Thread-127124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:10:07.047 [DEBUG] [Thread-127124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:10:07.047 [DEBUG] [Thread-127124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:10:07.047 [DEBUG] [Thread-127124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:10:07.047 [DEBUG] [Thread-127124] [transport.py] [_log()] Compression: none
2026-02-11T10:10:07.047 [DEBUG] [Thread-127124] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:10:07.062 [DEBUG] [Thread-127124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:10:07.063 [DEBUG] [Thread-127124] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:10:07.064 [DEBUG] [Thread-127124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:10:07.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:10:07.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:10:07.066 [DEBUG] [Thread-127124] [transport.py] [_log()] userauth is OK
2026-02-11T10:10:07.066 [DEBUG] [Thread-127124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:10:07.067 [DEBUG] [Thread-127124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:10:07.067 [DEBUG] [Thread-127124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:10:07.067 [DEBUG] [Thread-127124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:10:07.092 [INFO] [Thread-127124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:10:07.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:10:07.828 [DEBUG] [Thread-127126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:10:08.087 [DEBUG] [Thread-127124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:10:08.087 [DEBUG] [Thread-127124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:10:08.088 [DEBUG] [Thread-127124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:10:08.129 [DEBUG] [Thread-127124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:10:08.129 [DEBUG] [Thread-127124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:10:08.131 [DEBUG] [Thread-127124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:10:08.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:10:08.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:10:08.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:10:08.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:10:08.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:10:08.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:10:08.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:10:08.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.339722 -999.00  +21.00  11.81     51  +10.60 1 1 1 1 1   888    0 12.57 67.58 ----- 12.6 11.8 314.0 16.6 27.8 -26.0 26.9 -23.9 25.7 -22.7 26.2 -23.6
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.339722
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T10:10:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:09:32', tmtdew=12.82, humidity=43.87, cloud=0.0, wind=13.36, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:09:11.981', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:10:08.158 [DEBUG] [Thread-127124] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:10:08.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:10:08.251 [DEBUG] [Thread-127128] [transport.py] [_log()] starting thread (client mode): 0xa57586d0
2026-02-11T10:10:08.251 [DEBUG] [Thread-127128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:10:08.265 [DEBUG] [Thread-127128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:10:08.265 [INFO] [Thread-127128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] client lang: <none>
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] server lang: <none>
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] kex follows: False
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] Compression: none
2026-02-11T10:10:08.273 [DEBUG] [Thread-127128] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:10:08.335 [DEBUG] [Thread-127128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:10:08.335 [DEBUG] [Thread-127128] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:10:08.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:10:08.335 [DEBUG] [Thread-127128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:10:08.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:10:08.394 [DEBUG] [Thread-127128] [transport.py] [_log()] userauth is OK
2026-02-11T10:10:08.395 [DEBUG] [Thread-127128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:10:08.395 [DEBUG] [Thread-127128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:10:08.395 [DEBUG] [Thread-127128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:10:08.395 [DEBUG] [Thread-127128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:10:08.409 [INFO] [Thread-127128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:10:08.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:10:08.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:10:09.259 [DEBUG] [Thread-127128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:10:09.259 [DEBUG] [Thread-127128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:10:09.306 [DEBUG] [Thread-127128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:10:09.306 [DEBUG] [Thread-127128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:10:09.314 [DEBUG] [Thread-127128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:10:09.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:10:09.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:10:09.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:10:09.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:10:09.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:10:09.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:10:09.347 [DEBUG] [Thread-127128] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:10:17.043 [DEBUG] [Thread-127130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:10:32.077 [DEBUG] [Thread-127131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:10:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:10:39.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:10:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:10:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 10, 7), 12.65, 44.35, 0.0, 13.18, 21.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:10:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:10:07
2026-02-11T10:10:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:10:41.680 [DEBUG] [Thread-127132] [transport.py] [_log()] starting thread (client mode): 0xa2dfb5e0
2026-02-11T10:10:41.681 [DEBUG] [Thread-127132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:10:41.701 [DEBUG] [Thread-127132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:10:41.701 [INFO] [Thread-127132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] client lang: <none>
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] server lang: <none>
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] kex follows: False
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] Compression: none
2026-02-11T10:10:41.704 [DEBUG] [Thread-127132] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:10:41.720 [DEBUG] [Thread-127132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:10:41.720 [DEBUG] [Thread-127132] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:10:41.720 [DEBUG] [Thread-127132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:10:41.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:10:41.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:10:41.721 [DEBUG] [Thread-127132] [transport.py] [_log()] userauth is OK
2026-02-11T10:10:41.721 [DEBUG] [Thread-127132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:10:41.721 [DEBUG] [Thread-127132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:10:41.721 [DEBUG] [Thread-127132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:10:41.722 [DEBUG] [Thread-127132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:10:41.748 [INFO] [Thread-127132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:10:41.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:10:42.394 [DEBUG] [Thread-127132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:10:42.394 [DEBUG] [Thread-127132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:10:42.394 [DEBUG] [Thread-127132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:10:42.435 [DEBUG] [Thread-127132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:10:42.435 [DEBUG] [Thread-127132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:10:42.437 [DEBUG] [Thread-127132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:10:42.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:10:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:10:42.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:10:42.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:10:42.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:10:42.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:10:42.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:10:42.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:10:42.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:10:42.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.340070 -999.00  +20.90   9.48     51  +10.40 1 2 1 1 1   888    0 12.73 71.45 ----- 8.4 9.5 287.2 16.4 27.5 -25.6 26.7 -23.4 25.5 -21.9 26.0 -23.2
2026-02-11T10:10:42.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:10:42.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:10:42.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.340070
2026-02-11T10:10:42.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:10:42.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:10:42.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:10:42.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:10:42.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:10:42.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:10:07', tmtdew=12.65, humidity=44.35, cloud=0.0, wind=13.18, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:09:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:10:42.459 [DEBUG] [Thread-127132] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:10:42.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:10:42.542 [DEBUG] [Thread-127135] [transport.py] [_log()] starting thread (client mode): 0xa57e1900
2026-02-11T10:10:42.542 [DEBUG] [Thread-127135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:10:42.555 [DEBUG] [Thread-127135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:10:42.555 [INFO] [Thread-127135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:10:42.562 [DEBUG] [Thread-127135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] client lang: <none>
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] server lang: <none>
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] kex follows: False
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] Compression: none
2026-02-11T10:10:42.563 [DEBUG] [Thread-127135] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:10:42.619 [DEBUG] [Thread-127135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:10:42.620 [DEBUG] [Thread-127135] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:10:42.620 [DEBUG] [Thread-127135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:10:42.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:10:42.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:10:42.676 [DEBUG] [Thread-127135] [transport.py] [_log()] userauth is OK
2026-02-11T10:10:42.676 [DEBUG] [Thread-127135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:10:42.676 [DEBUG] [Thread-127135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:10:42.676 [DEBUG] [Thread-127135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:10:42.676 [DEBUG] [Thread-127135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:10:42.690 [INFO] [Thread-127135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:10:42.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:10:42.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:10:43.521 [DEBUG] [Thread-127135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:10:43.521 [DEBUG] [Thread-127135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:10:43.569 [DEBUG] [Thread-127135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:10:43.569 [DEBUG] [Thread-127135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:10:43.577 [DEBUG] [Thread-127135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:10:43.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:10:43.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')
2026-02-11T10:10:43.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:10:43.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:10:43.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:10:43.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:10:43.609 [DEBUG] [Thread-127135] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:10:47.101 [DEBUG] [Thread-127137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:10:48.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:10:48.267 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:02.139 [DEBUG] [Thread-127138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:07.873 [DEBUG] [Thread-127139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:11:13.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:11:13.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:11:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 10, 43), 12.47, 44.93, 0.0, 14.31, 21.42, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:11:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:10:43
2026-02-11T10:11:15.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:11:15.972 [DEBUG] [Thread-127140] [transport.py] [_log()] starting thread (client mode): 0xa2d79e10
2026-02-11T10:11:15.972 [DEBUG] [Thread-127140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:11:15.994 [DEBUG] [Thread-127140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:11:15.994 [INFO] [Thread-127140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] client lang: <none>
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] server lang: <none>
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] kex follows: False
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] Compression: none
2026-02-11T10:11:15.997 [DEBUG] [Thread-127140] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:11:16.013 [DEBUG] [Thread-127140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:11:16.013 [DEBUG] [Thread-127140] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:11:16.013 [DEBUG] [Thread-127140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:11:16.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:11:16.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:11:16.014 [DEBUG] [Thread-127140] [transport.py] [_log()] userauth is OK
2026-02-11T10:11:16.014 [DEBUG] [Thread-127140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:11:16.014 [DEBUG] [Thread-127140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:11:16.014 [DEBUG] [Thread-127140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:11:16.014 [DEBUG] [Thread-127140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:11:16.034 [INFO] [Thread-127140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:11:16.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:11:16.790 [DEBUG] [Thread-127140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:11:16.790 [DEBUG] [Thread-127140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:11:16.790 [DEBUG] [Thread-127140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:11:16.831 [DEBUG] [Thread-127140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:11:16.831 [DEBUG] [Thread-127140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:11:16.836 [DEBUG] [Thread-127140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:11:16.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:11:16.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:11:16.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:11:16.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:11:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:11:16.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:11:16.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:11:16.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.340764 -999.00  +21.10  13.04     52  +10.90 1 2 1 1 1   888    0 12.56 73.15 ----- 15.8 13.0 297.2 19.1 27.0 -21.1 26.9 -19.1 25.7 -17.5 26.2 -18.0
2026-02-11T10:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.340764
2026-02-11T10:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:11:16.858 [DEBUG] [Thread-127140] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:11:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:11:16.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:11:16.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:11:16.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:11:16.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:10:43', tmtdew=12.47, humidity=44.93, cloud=0.0, wind=14.31, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:10:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:11:16.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:11:16.956 [DEBUG] [Thread-127143] [transport.py] [_log()] starting thread (client mode): 0xa2d57ca0
2026-02-11T10:11:16.956 [DEBUG] [Thread-127143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:11:16.975 [DEBUG] [Thread-127143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:11:16.975 [INFO] [Thread-127143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] client lang: <none>
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] server lang: <none>
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] kex follows: False
2026-02-11T10:11:16.984 [DEBUG] [Thread-127143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:11:16.985 [DEBUG] [Thread-127143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:11:16.985 [DEBUG] [Thread-127143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:11:16.985 [DEBUG] [Thread-127143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:11:16.985 [DEBUG] [Thread-127143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:11:16.985 [DEBUG] [Thread-127143] [transport.py] [_log()] Compression: none
2026-02-11T10:11:16.985 [DEBUG] [Thread-127143] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:11:17.041 [DEBUG] [Thread-127143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:11:17.041 [DEBUG] [Thread-127143] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:11:17.042 [DEBUG] [Thread-127143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:11:17.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:11:17.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:11:17.097 [DEBUG] [Thread-127143] [transport.py] [_log()] userauth is OK
2026-02-11T10:11:17.097 [DEBUG] [Thread-127143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:11:17.097 [DEBUG] [Thread-127143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:11:17.097 [DEBUG] [Thread-127143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:11:17.097 [DEBUG] [Thread-127143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:11:17.119 [INFO] [Thread-127143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:11:17.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:11:17.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:11:17.173 [DEBUG] [Thread-127145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:17.933 [DEBUG] [Thread-127143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:11:17.934 [DEBUG] [Thread-127143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:11:17.981 [DEBUG] [Thread-127143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:11:17.981 [DEBUG] [Thread-127143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:11:17.990 [DEBUG] [Thread-127143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:11:17.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:11:17.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:11:18.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:11:18.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:11:18.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:11:18.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:11:18.024 [DEBUG] [Thread-127143] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:11:32.227 [DEBUG] [Thread-127146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:47.262 [DEBUG] [Thread-127147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:48.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:11:48.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:11:48.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:11:48.408 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:48.409 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:11:49.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 11, 19), 12.35, 45.28, 0.0, 13.87, 21.37, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:11:49.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:11:19
2026-02-11T10:11:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:11:50.396 [DEBUG] [Thread-127148] [transport.py] [_log()] starting thread (client mode): 0xa2df89a0
2026-02-11T10:11:50.396 [DEBUG] [Thread-127148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:11:50.415 [DEBUG] [Thread-127148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:11:50.415 [INFO] [Thread-127148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:11:50.418 [DEBUG] [Thread-127148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] client lang: <none>
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] server lang: <none>
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] kex follows: False
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] Compression: none
2026-02-11T10:11:50.419 [DEBUG] [Thread-127148] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:11:50.436 [DEBUG] [Thread-127148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:11:50.437 [DEBUG] [Thread-127148] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:11:50.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:11:50.438 [DEBUG] [Thread-127148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:11:50.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:11:50.440 [DEBUG] [Thread-127148] [transport.py] [_log()] userauth is OK
2026-02-11T10:11:50.441 [DEBUG] [Thread-127148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:11:50.441 [DEBUG] [Thread-127148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:11:50.441 [DEBUG] [Thread-127148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:11:50.441 [DEBUG] [Thread-127148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:11:50.460 [INFO] [Thread-127148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:11:50.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:11:51.088 [DEBUG] [Thread-127148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:11:51.089 [DEBUG] [Thread-127148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:11:51.089 [DEBUG] [Thread-127148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:11:51.129 [DEBUG] [Thread-127148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:11:51.130 [DEBUG] [Thread-127148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:11:51.133 [DEBUG] [Thread-127148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:11:51.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:11:51.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:11:51.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:11:51.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:11:51.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:11:51.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:11:51.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:11:51.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:11:51.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:11:51.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.341111 -999.00  +21.40  14.56     51  +11.00 1 2 1 1 1   888    0 12.33 64.95 ----- 15.9 14.6 294.0 22.2 27.5 -18.4 27.1 -18.3 25.9 -17.1 26.4 -17.5
2026-02-11T10:11:51.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:11:51.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:11:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.341111
2026-02-11T10:11:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:11:51.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:11:51.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:11:51.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:11:51.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:11:51.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:11:19', tmtdew=12.35, humidity=45.28, cloud=0.0, wind=13.87, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:11:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:11:51.162 [DEBUG] [Thread-127148] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:11:51.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:11:51.261 [DEBUG] [Thread-127151] [transport.py] [_log()] starting thread (client mode): 0xa2d54d00
2026-02-11T10:11:51.261 [DEBUG] [Thread-127151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:11:51.278 [DEBUG] [Thread-127151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:11:51.279 [INFO] [Thread-127151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:11:51.286 [DEBUG] [Thread-127151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:11:51.287 [DEBUG] [Thread-127151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:11:51.287 [DEBUG] [Thread-127151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:11:51.287 [DEBUG] [Thread-127151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:51.287 [DEBUG] [Thread-127151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:11:51.287 [DEBUG] [Thread-127151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:51.288 [DEBUG] [Thread-127151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:11:51.288 [DEBUG] [Thread-127151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:11:51.288 [DEBUG] [Thread-127151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:11:51.288 [DEBUG] [Thread-127151] [transport.py] [_log()] client lang: <none>
2026-02-11T10:11:51.288 [DEBUG] [Thread-127151] [transport.py] [_log()] server lang: <none>
2026-02-11T10:11:51.288 [DEBUG] [Thread-127151] [transport.py] [_log()] kex follows: False
2026-02-11T10:11:51.288 [DEBUG] [Thread-127151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:11:51.289 [DEBUG] [Thread-127151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:11:51.289 [DEBUG] [Thread-127151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:11:51.289 [DEBUG] [Thread-127151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:11:51.289 [DEBUG] [Thread-127151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:11:51.289 [DEBUG] [Thread-127151] [transport.py] [_log()] Compression: none
2026-02-11T10:11:51.289 [DEBUG] [Thread-127151] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:11:51.350 [DEBUG] [Thread-127151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:11:51.352 [DEBUG] [Thread-127151] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:11:51.353 [DEBUG] [Thread-127151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:11:51.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:11:51.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:11:51.410 [DEBUG] [Thread-127151] [transport.py] [_log()] userauth is OK
2026-02-11T10:11:51.410 [DEBUG] [Thread-127151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:11:51.410 [DEBUG] [Thread-127151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:11:51.410 [DEBUG] [Thread-127151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:11:51.410 [DEBUG] [Thread-127151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:11:51.429 [INFO] [Thread-127151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:11:51.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:11:51.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:11:52.332 [DEBUG] [Thread-127151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:11:52.332 [DEBUG] [Thread-127151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:11:52.380 [DEBUG] [Thread-127151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:11:52.381 [DEBUG] [Thread-127151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:11:52.389 [DEBUG] [Thread-127151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:11:52.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:11:52.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:11:52.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
2026-02-11T10:11:52.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:11:52.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:11:52.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:11:52.428 [DEBUG] [Thread-127151] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:12:02.298 [DEBUG] [Thread-127153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:12:07.915 [DEBUG] [Thread-127154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:12:17.355 [DEBUG] [Thread-127155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:12:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:12:22.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:12:22.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:12:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 11, 54), 12.31, 45.39, 0.0, 9.85, 21.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:12:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:11:54
2026-02-11T10:12:24.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:12:24.936 [DEBUG] [Thread-127156] [transport.py] [_log()] starting thread (client mode): 0xa81d75b0
2026-02-11T10:12:24.936 [DEBUG] [Thread-127156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:12:24.957 [DEBUG] [Thread-127156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:12:24.957 [INFO] [Thread-127156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:12:24.960 [DEBUG] [Thread-127156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:12:24.960 [DEBUG] [Thread-127156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:12:24.960 [DEBUG] [Thread-127156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] client lang: <none>
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] server lang: <none>
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] kex follows: False
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:12:24.961 [DEBUG] [Thread-127156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:12:24.962 [DEBUG] [Thread-127156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:12:24.962 [DEBUG] [Thread-127156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:12:24.962 [DEBUG] [Thread-127156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:12:24.962 [DEBUG] [Thread-127156] [transport.py] [_log()] Compression: none
2026-02-11T10:12:24.962 [DEBUG] [Thread-127156] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:12:24.982 [DEBUG] [Thread-127156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:12:24.983 [DEBUG] [Thread-127156] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:12:24.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:12:24.984 [DEBUG] [Thread-127156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:12:24.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:12:24.986 [DEBUG] [Thread-127156] [transport.py] [_log()] userauth is OK
2026-02-11T10:12:24.986 [DEBUG] [Thread-127156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:12:24.986 [DEBUG] [Thread-127156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:12:24.986 [DEBUG] [Thread-127156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:12:24.986 [DEBUG] [Thread-127156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:12:25.023 [INFO] [Thread-127156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:12:25.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:12:25.607 [DEBUG] [Thread-127156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:12:25.608 [DEBUG] [Thread-127156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:12:25.608 [DEBUG] [Thread-127156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:12:25.648 [DEBUG] [Thread-127156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:12:25.648 [DEBUG] [Thread-127156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:12:25.652 [DEBUG] [Thread-127156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:12:25.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:12:25.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:12:25.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:12:25.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:12:25.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:12:25.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:12:25.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:12:25.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:12:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:12:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.341806 -999.00  +21.50  15.93     51  +11.00 1 2 1 1 1   888    0 12.08 53.64 ----- 15.8 15.9 295.4 18.1 28.1 -19.2 27.5 -17.9 26.0 -17.5 26.7 -16.9
2026-02-11T10:12:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:12:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:12:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.341806
2026-02-11T10:12:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:12:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:12:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:12:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:12:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:12:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:11:54', tmtdew=12.31, humidity=45.39, cloud=0.0, wind=9.85, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:12:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:12:25.681 [DEBUG] [Thread-127156] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:12:25.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:12:25.779 [DEBUG] [Thread-127159] [transport.py] [_log()] starting thread (client mode): 0xa2d02bf0
2026-02-11T10:12:25.779 [DEBUG] [Thread-127159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:12:25.795 [DEBUG] [Thread-127159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:12:25.795 [INFO] [Thread-127159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:12:25.802 [DEBUG] [Thread-127159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:12:25.802 [DEBUG] [Thread-127159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:12:25.802 [DEBUG] [Thread-127159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:12:25.802 [DEBUG] [Thread-127159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:12:25.802 [DEBUG] [Thread-127159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] client lang: <none>
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] server lang: <none>
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] kex follows: False
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] Compression: none
2026-02-11T10:12:25.803 [DEBUG] [Thread-127159] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:12:25.862 [DEBUG] [Thread-127159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:12:25.862 [DEBUG] [Thread-127159] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:12:25.863 [DEBUG] [Thread-127159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:12:25.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:12:25.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:12:25.922 [DEBUG] [Thread-127159] [transport.py] [_log()] userauth is OK
2026-02-11T10:12:25.922 [DEBUG] [Thread-127159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:12:25.922 [DEBUG] [Thread-127159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:12:25.922 [DEBUG] [Thread-127159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:12:25.922 [DEBUG] [Thread-127159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:12:25.941 [INFO] [Thread-127159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:12:25.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:12:25.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:12:26.790 [DEBUG] [Thread-127159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:12:26.790 [DEBUG] [Thread-127159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:12:26.838 [DEBUG] [Thread-127159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:12:26.838 [DEBUG] [Thread-127159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:12:26.849 [DEBUG] [Thread-127159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:12:26.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:12:26.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:12:26.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:12:26.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:12:26.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:12:26.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:12:26.888 [DEBUG] [Thread-127159] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:12:32.393 [DEBUG] [Thread-127161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:12:47.443 [DEBUG] [Thread-127162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:12:48.548 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:12:48.549 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:12:56.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:12:56.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:12:56.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:12:58.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 12, 29), 12.35, 45.29, 0.0, 7.92, 21.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:12:58.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:12:29
2026-02-11T10:12:59.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:12:59.235 [DEBUG] [Thread-127163] [transport.py] [_log()] starting thread (client mode): 0xa2df8c40
2026-02-11T10:12:59.235 [DEBUG] [Thread-127163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:12:59.251 [DEBUG] [Thread-127163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:12:59.251 [INFO] [Thread-127163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:12:59.251 [DEBUG] [Thread-127163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] client lang: <none>
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] server lang: <none>
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] kex follows: False
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:12:59.252 [DEBUG] [Thread-127163] [transport.py] [_log()] Compression: none
2026-02-11T10:12:59.253 [DEBUG] [Thread-127163] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:12:59.261 [DEBUG] [Thread-127163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:12:59.262 [DEBUG] [Thread-127163] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:12:59.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:12:59.263 [DEBUG] [Thread-127163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:12:59.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:12:59.264 [DEBUG] [Thread-127163] [transport.py] [_log()] userauth is OK
2026-02-11T10:12:59.264 [DEBUG] [Thread-127163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:12:59.264 [DEBUG] [Thread-127163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:12:59.265 [DEBUG] [Thread-127163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:12:59.265 [DEBUG] [Thread-127163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:12:59.293 [INFO] [Thread-127163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:12:59.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:12:59.912 [DEBUG] [Thread-127163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:12:59.912 [DEBUG] [Thread-127163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:12:59.913 [DEBUG] [Thread-127163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:12:59.953 [DEBUG] [Thread-127163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:12:59.954 [DEBUG] [Thread-127163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:12:59.956 [DEBUG] [Thread-127163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:12:59.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:12:59.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:12:59.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:12:59.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:12:59.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:12:59.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:12:59.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:12:59.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:12:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:12:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.342153 -999.00  +21.40  20.20     51  +10.90 1 2 1 1 1   888    0 12.22 53.97 ----- 17.0 20.2 269.0 25.0 28.1 -19.2 27.6 -18.0 25.8 -18.1 26.6 -17.9
2026-02-11T10:12:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:12:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:12:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.342153
2026-02-11T10:12:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:12:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:12:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:12:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:12:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:12:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:12:29', tmtdew=12.35, humidity=45.29, cloud=0.0, wind=7.92, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:12:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:12:59.974 [DEBUG] [Thread-127163] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:13:00.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:13:00.074 [DEBUG] [Thread-127166] [transport.py] [_log()] starting thread (client mode): 0xa2d7b940
2026-02-11T10:13:00.074 [DEBUG] [Thread-127166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:13:00.090 [DEBUG] [Thread-127166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:13:00.090 [INFO] [Thread-127166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:13:00.100 [DEBUG] [Thread-127166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] client lang: <none>
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] server lang: <none>
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] kex follows: False
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:13:00.101 [DEBUG] [Thread-127166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:13:00.102 [DEBUG] [Thread-127166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:13:00.102 [DEBUG] [Thread-127166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:13:00.102 [DEBUG] [Thread-127166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:13:00.102 [DEBUG] [Thread-127166] [transport.py] [_log()] Compression: none
2026-02-11T10:13:00.102 [DEBUG] [Thread-127166] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:13:00.164 [DEBUG] [Thread-127166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:13:00.165 [DEBUG] [Thread-127166] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:13:00.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:13:00.166 [DEBUG] [Thread-127166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:13:00.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:13:00.228 [DEBUG] [Thread-127166] [transport.py] [_log()] userauth is OK
2026-02-11T10:13:00.228 [DEBUG] [Thread-127166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:13:00.229 [DEBUG] [Thread-127166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:13:00.229 [DEBUG] [Thread-127166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:13:00.229 [DEBUG] [Thread-127166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:13:00.249 [INFO] [Thread-127166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:13:00.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:13:00.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:13:01.091 [DEBUG] [Thread-127166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:13:01.091 [DEBUG] [Thread-127166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:13:01.142 [DEBUG] [Thread-127166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:13:01.142 [DEBUG] [Thread-127166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:13:01.152 [DEBUG] [Thread-127166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:13:01.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:13:01.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')
2026-02-11T10:13:01.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:13:01.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:13:01.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:13:01.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:13:01.195 [DEBUG] [Thread-127166] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:13:02.476 [DEBUG] [Thread-127168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:13:07.964 [DEBUG] [Thread-127169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:13:17.530 [DEBUG] [Thread-127170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:13:31.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:13:31.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:13:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:13:32.563 [DEBUG] [Thread-127171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:13:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 13, 5), 12.3, 45.43, 0.0, 8.75, 21.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:13:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:13:05
2026-02-11T10:13:33.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:13:33.548 [DEBUG] [Thread-127172] [transport.py] [_log()] starting thread (client mode): 0xa81d7a90
2026-02-11T10:13:33.548 [DEBUG] [Thread-127172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:13:33.567 [DEBUG] [Thread-127172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:13:33.567 [INFO] [Thread-127172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:13:33.570 [DEBUG] [Thread-127172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:13:33.570 [DEBUG] [Thread-127172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:13:33.570 [DEBUG] [Thread-127172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] client lang: <none>
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] server lang: <none>
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] kex follows: False
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:13:33.571 [DEBUG] [Thread-127172] [transport.py] [_log()] Compression: none
2026-02-11T10:13:33.572 [DEBUG] [Thread-127172] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:13:33.590 [DEBUG] [Thread-127172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:13:33.591 [DEBUG] [Thread-127172] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:13:33.592 [DEBUG] [Thread-127172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:13:33.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:13:33.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:13:33.595 [DEBUG] [Thread-127172] [transport.py] [_log()] userauth is OK
2026-02-11T10:13:33.595 [DEBUG] [Thread-127172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:13:33.596 [DEBUG] [Thread-127172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:13:33.596 [DEBUG] [Thread-127172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:13:33.596 [DEBUG] [Thread-127172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:13:33.619 [INFO] [Thread-127172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:13:33.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:13:34.224 [DEBUG] [Thread-127172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:13:34.225 [DEBUG] [Thread-127172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:13:34.225 [DEBUG] [Thread-127172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:13:34.265 [DEBUG] [Thread-127172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:13:34.266 [DEBUG] [Thread-127172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:13:34.269 [DEBUG] [Thread-127172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:13:34.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:13:34.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:13:34.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:13:34.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:13:34.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:13:34.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:13:34.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:13:34.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:13:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:13:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.342500 -999.00  +21.50  15.34     51  +11.10 1 2 1 1 1   888    0 11.79 43.69 ----- 13.7 15.3 270.6 19.9 28.3 -19.3 27.7 -17.4 25.9 -18.2 26.7 -16.8
2026-02-11T10:13:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:13:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:13:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.342500
2026-02-11T10:13:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:13:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:13:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:13:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:13:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:13:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:13:05', tmtdew=12.3, humidity=45.43, cloud=0.0, wind=8.75, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:13:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:13:34.294 [DEBUG] [Thread-127172] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:13:34.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:13:34.391 [DEBUG] [Thread-127175] [transport.py] [_log()] starting thread (client mode): 0xa57b1ff0
2026-02-11T10:13:34.392 [DEBUG] [Thread-127175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:13:34.409 [DEBUG] [Thread-127175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:13:34.409 [INFO] [Thread-127175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] client lang: <none>
2026-02-11T10:13:34.417 [DEBUG] [Thread-127175] [transport.py] [_log()] server lang: <none>
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] kex follows: False
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] Compression: none
2026-02-11T10:13:34.418 [DEBUG] [Thread-127175] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:13:34.478 [DEBUG] [Thread-127175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:13:34.479 [DEBUG] [Thread-127175] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:13:34.488 [DEBUG] [Thread-127175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:13:34.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:13:34.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:13:34.535 [DEBUG] [Thread-127175] [transport.py] [_log()] userauth is OK
2026-02-11T10:13:34.535 [DEBUG] [Thread-127175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:13:34.535 [DEBUG] [Thread-127175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:13:34.535 [DEBUG] [Thread-127175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:13:34.535 [DEBUG] [Thread-127175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:13:34.554 [INFO] [Thread-127175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:13:34.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:13:34.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:13:35.404 [DEBUG] [Thread-127175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:13:35.404 [DEBUG] [Thread-127175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:13:35.456 [DEBUG] [Thread-127175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:13:35.456 [DEBUG] [Thread-127175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:13:35.469 [DEBUG] [Thread-127175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:13:35.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:13:35.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:13:35.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:13:35.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:13:35.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:13:35.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:13:35.506 [DEBUG] [Thread-127175] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:13:47.600 [DEBUG] [Thread-127177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:13:48.689 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:13:48.690 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:14:02.653 [DEBUG] [Thread-127178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:14:05.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:14:05.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:14:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:14:07.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 13, 40), 12.67, 44.49, 0.0, 12.46, 22.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:14:07.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:13:40
2026-02-11T10:14:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:14:07.948 [DEBUG] [Thread-127179] [transport.py] [_log()] starting thread (client mode): 0xa2d57eb0
2026-02-11T10:14:07.948 [DEBUG] [Thread-127179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:14:07.963 [DEBUG] [Thread-127179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:14:07.964 [INFO] [Thread-127179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] client lang: <none>
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] server lang: <none>
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] kex follows: False
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] Compression: none
2026-02-11T10:14:07.967 [DEBUG] [Thread-127179] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:14:07.981 [DEBUG] [Thread-127179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:14:07.981 [DEBUG] [Thread-127179] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:14:07.981 [DEBUG] [Thread-127179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:14:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:14:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:14:07.982 [DEBUG] [Thread-127179] [transport.py] [_log()] userauth is OK
2026-02-11T10:14:07.982 [DEBUG] [Thread-127179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:14:07.982 [DEBUG] [Thread-127179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:14:07.982 [DEBUG] [Thread-127179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:14:07.982 [DEBUG] [Thread-127179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:14:07.991 [DEBUG] [Thread-127181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:14:07.997 [INFO] [Thread-127179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:14:07.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:14:08.608 [DEBUG] [Thread-127179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:14:08.609 [DEBUG] [Thread-127179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:14:08.609 [DEBUG] [Thread-127179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:14:08.649 [DEBUG] [Thread-127179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:14:08.649 [DEBUG] [Thread-127179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:14:08.652 [DEBUG] [Thread-127179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:14:08.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:14:08.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:14:08.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:14:08.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:14:08.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:14:08.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:14:08.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:14:08.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:14:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:14:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.342847 -999.00  +21.80  12.18     50  +11.10 1 2 1 1 1   888    0 11.72 39.39 ----- 15.6 12.2 272.4 19.8 28.6 -17.7 27.9 -17.5 26.2 -17.0 26.9 -16.2
2026-02-11T10:14:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:14:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:14:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.342847
2026-02-11T10:14:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:14:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:14:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:14:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:14:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:14:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:13:40', tmtdew=12.67, humidity=44.49, cloud=0.0, wind=12.46, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:13:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:14:08.676 [DEBUG] [Thread-127179] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:14:08.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:14:08.771 [DEBUG] [Thread-127183] [transport.py] [_log()] starting thread (client mode): 0xa2d559f0
2026-02-11T10:14:08.771 [DEBUG] [Thread-127183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:14:08.785 [DEBUG] [Thread-127183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:14:08.785 [INFO] [Thread-127183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:14:08.793 [DEBUG] [Thread-127183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] client lang: <none>
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] server lang: <none>
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] kex follows: False
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] Compression: none
2026-02-11T10:14:08.794 [DEBUG] [Thread-127183] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:14:08.851 [DEBUG] [Thread-127183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:14:08.852 [DEBUG] [Thread-127183] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:14:08.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:14:08.853 [DEBUG] [Thread-127183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:14:08.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:14:08.911 [DEBUG] [Thread-127183] [transport.py] [_log()] userauth is OK
2026-02-11T10:14:08.911 [DEBUG] [Thread-127183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:14:08.912 [DEBUG] [Thread-127183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:14:08.912 [DEBUG] [Thread-127183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:14:08.912 [DEBUG] [Thread-127183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:14:08.930 [INFO] [Thread-127183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:14:08.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:14:08.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:14:09.749 [DEBUG] [Thread-127183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:14:09.750 [DEBUG] [Thread-127183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:14:09.797 [DEBUG] [Thread-127183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:14:09.798 [DEBUG] [Thread-127183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:14:09.807 [DEBUG] [Thread-127183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:14:09.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:14:09.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:14:09.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:14:09.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:14:09.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:14:09.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:14:09.843 [DEBUG] [Thread-127183] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:14:17.693 [DEBUG] [Thread-127185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:14:32.752 [DEBUG] [Thread-127186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:14:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:14:39.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:14:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:14:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 14, 15), 12.64, 44.7, 0.0, 16.53, 21.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:14:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:14:15
2026-02-11T10:14:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:14:42.281 [DEBUG] [Thread-127187] [transport.py] [_log()] starting thread (client mode): 0xa2d01c30
2026-02-11T10:14:42.281 [DEBUG] [Thread-127187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:14:42.294 [DEBUG] [Thread-127187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:14:42.294 [INFO] [Thread-127187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:14:42.296 [DEBUG] [Thread-127187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:14:42.296 [DEBUG] [Thread-127187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] client lang: <none>
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] server lang: <none>
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] kex follows: False
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] Compression: none
2026-02-11T10:14:42.297 [DEBUG] [Thread-127187] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:14:42.316 [DEBUG] [Thread-127187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:14:42.317 [DEBUG] [Thread-127187] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:14:42.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:14:42.318 [DEBUG] [Thread-127187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:14:42.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:14:42.320 [DEBUG] [Thread-127187] [transport.py] [_log()] userauth is OK
2026-02-11T10:14:42.320 [DEBUG] [Thread-127187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:14:42.320 [DEBUG] [Thread-127187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:14:42.321 [DEBUG] [Thread-127187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:14:42.321 [DEBUG] [Thread-127187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:14:42.346 [INFO] [Thread-127187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:14:42.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:14:42.936 [DEBUG] [Thread-127187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:14:42.936 [DEBUG] [Thread-127187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:14:42.936 [DEBUG] [Thread-127187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:14:42.977 [DEBUG] [Thread-127187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:14:42.977 [DEBUG] [Thread-127187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:14:42.980 [DEBUG] [Thread-127187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:14:42.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:14:42.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:14:42.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:14:42.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:14:42.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:14:42.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:14:42.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:14:42.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:14:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:14:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.343195 -999.00  +21.60  25.98     50  +10.90 1 2 1 1 1   888    0 11.90 36.09 ----- 24.8 26.0 273.6 33.2 28.5 -20.3 27.8 -17.5 25.7 -22.4 26.8 -18.8
2026-02-11T10:14:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:14:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:14:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.343195
2026-02-11T10:14:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:14:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:14:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:14:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:14:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:14:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:14:15', tmtdew=12.64, humidity=44.7, cloud=0.0, wind=16.53, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:14:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:14:42.998 [DEBUG] [Thread-127187] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:14:43.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:14:43.098 [DEBUG] [Thread-127190] [transport.py] [_log()] starting thread (client mode): 0xa2dfa3e0
2026-02-11T10:14:43.098 [DEBUG] [Thread-127190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:14:43.113 [DEBUG] [Thread-127190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:14:43.113 [INFO] [Thread-127190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] client lang: <none>
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] server lang: <none>
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] kex follows: False
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:14:43.120 [DEBUG] [Thread-127190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:14:43.121 [DEBUG] [Thread-127190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:14:43.121 [DEBUG] [Thread-127190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:14:43.121 [DEBUG] [Thread-127190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:14:43.121 [DEBUG] [Thread-127190] [transport.py] [_log()] Compression: none
2026-02-11T10:14:43.121 [DEBUG] [Thread-127190] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:14:43.182 [DEBUG] [Thread-127190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:14:43.183 [DEBUG] [Thread-127190] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:14:43.183 [DEBUG] [Thread-127190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:14:43.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:14:43.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:14:43.239 [DEBUG] [Thread-127190] [transport.py] [_log()] userauth is OK
2026-02-11T10:14:43.240 [DEBUG] [Thread-127190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:14:43.240 [DEBUG] [Thread-127190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:14:43.240 [DEBUG] [Thread-127190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:14:43.240 [DEBUG] [Thread-127190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:14:43.258 [INFO] [Thread-127190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:14:43.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:14:43.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:14:44.085 [DEBUG] [Thread-127190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:14:44.085 [DEBUG] [Thread-127190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:14:44.133 [DEBUG] [Thread-127190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:14:44.134 [DEBUG] [Thread-127190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:14:44.142 [DEBUG] [Thread-127190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:14:44.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:14:44.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')
2026-02-11T10:14:44.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
2026-02-11T10:14:44.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:14:44.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:14:44.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:14:44.177 [DEBUG] [Thread-127190] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:14:47.789 [DEBUG] [Thread-127192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:14:48.831 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:14:48.832 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:02.838 [DEBUG] [Thread-127193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:08.026 [DEBUG] [Thread-127194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:14.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:15:14.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:15:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:15:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 14, 50), 12.89, 43.68, 0.0, 22.69, 22.12, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:15:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:14:50
2026-02-11T10:15:16.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:15:16.562 [DEBUG] [Thread-127195] [transport.py] [_log()] starting thread (client mode): 0xa57b0040
2026-02-11T10:15:16.562 [DEBUG] [Thread-127195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:15:16.572 [DEBUG] [Thread-127195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:15:16.572 [INFO] [Thread-127195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] client lang: <none>
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] server lang: <none>
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] kex follows: False
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] Compression: none
2026-02-11T10:15:16.573 [DEBUG] [Thread-127195] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:15:16.581 [DEBUG] [Thread-127195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:15:16.581 [DEBUG] [Thread-127195] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:15:16.581 [DEBUG] [Thread-127195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:15:16.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:15:16.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:15:16.582 [DEBUG] [Thread-127195] [transport.py] [_log()] userauth is OK
2026-02-11T10:15:16.582 [DEBUG] [Thread-127195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:15:16.582 [DEBUG] [Thread-127195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:15:16.582 [DEBUG] [Thread-127195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:15:16.582 [DEBUG] [Thread-127195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:15:16.594 [INFO] [Thread-127195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:15:16.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:15:17.183 [DEBUG] [Thread-127195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:15:17.183 [DEBUG] [Thread-127195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:15:17.183 [DEBUG] [Thread-127195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:15:17.224 [DEBUG] [Thread-127195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:15:17.225 [DEBUG] [Thread-127195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:15:17.227 [DEBUG] [Thread-127195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:15:17.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:15:17.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:15:17.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:15:17.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:15:17.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:15:17.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:15:17.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:15:17.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:15:17.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:15:17.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.343889 -999.00  +21.30  17.33     51  +10.80 1 2 1 1 1   888    0 11.30 24.63 ----- 21.2 17.3 282.2 26.0 28.4 -23.4 27.7 -17.9 25.4 -21.3 26.3 -21.3
2026-02-11T10:15:17.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:15:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:15:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.343889
2026-02-11T10:15:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:15:17.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:15:17.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:15:17.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:15:17.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:15:17.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:14:50', tmtdew=12.89, humidity=43.68, cloud=0.0, wind=22.69, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:15:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:15:17.248 [DEBUG] [Thread-127195] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:15:17.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:15:17.342 [DEBUG] [Thread-127198] [transport.py] [_log()] starting thread (client mode): 0xa2dc5690
2026-02-11T10:15:17.342 [DEBUG] [Thread-127198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:15:17.356 [DEBUG] [Thread-127198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:15:17.357 [INFO] [Thread-127198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:15:17.364 [DEBUG] [Thread-127198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] client lang: <none>
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] server lang: <none>
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] kex follows: False
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] Compression: none
2026-02-11T10:15:17.365 [DEBUG] [Thread-127198] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:15:17.427 [DEBUG] [Thread-127198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:15:17.428 [DEBUG] [Thread-127198] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:15:17.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:15:17.429 [DEBUG] [Thread-127198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:15:17.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:15:17.488 [DEBUG] [Thread-127198] [transport.py] [_log()] userauth is OK
2026-02-11T10:15:17.488 [DEBUG] [Thread-127198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:15:17.488 [DEBUG] [Thread-127198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:15:17.488 [DEBUG] [Thread-127198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:15:17.488 [DEBUG] [Thread-127198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:15:17.507 [INFO] [Thread-127198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:15:17.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:15:17.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:15:17.876 [DEBUG] [Thread-127200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:18.382 [DEBUG] [Thread-127198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:15:18.383 [DEBUG] [Thread-127198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:15:18.430 [DEBUG] [Thread-127198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:15:18.430 [DEBUG] [Thread-127198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:15:18.440 [DEBUG] [Thread-127198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:15:18.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:15:18.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:15:18.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:15:18.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:15:18.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:15:18.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:15:18.477 [DEBUG] [Thread-127198] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:15:32.926 [DEBUG] [Thread-127201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:47.960 [DEBUG] [Thread-127202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:15:48.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:15:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:15:48.970 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:48.971 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:15:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 15, 26), 13.11, 43.1, 0.0, 23.01, 22.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:15:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:15:26
2026-02-11T10:15:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:15:50.924 [DEBUG] [Thread-127203] [transport.py] [_log()] starting thread (client mode): 0xa2dfb340
2026-02-11T10:15:50.924 [DEBUG] [Thread-127203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:15:50.944 [DEBUG] [Thread-127203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:15:50.944 [INFO] [Thread-127203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:15:50.945 [DEBUG] [Thread-127203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:15:50.945 [DEBUG] [Thread-127203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:15:50.945 [DEBUG] [Thread-127203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:15:50.945 [DEBUG] [Thread-127203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] client lang: <none>
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] server lang: <none>
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] kex follows: False
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] Compression: none
2026-02-11T10:15:50.946 [DEBUG] [Thread-127203] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:15:50.956 [DEBUG] [Thread-127203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:15:50.957 [DEBUG] [Thread-127203] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:15:50.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:15:50.958 [DEBUG] [Thread-127203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:15:50.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:15:50.960 [DEBUG] [Thread-127203] [transport.py] [_log()] userauth is OK
2026-02-11T10:15:50.961 [DEBUG] [Thread-127203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:15:50.961 [DEBUG] [Thread-127203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:15:50.961 [DEBUG] [Thread-127203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:15:50.961 [DEBUG] [Thread-127203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:15:50.980 [INFO] [Thread-127203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:15:50.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:15:51.550 [DEBUG] [Thread-127203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:15:51.550 [DEBUG] [Thread-127203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:15:51.551 [DEBUG] [Thread-127203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:15:51.591 [DEBUG] [Thread-127203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:15:51.591 [DEBUG] [Thread-127203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:15:51.596 [DEBUG] [Thread-127203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:15:51.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:15:51.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:15:51.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:15:51.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:15:51.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:15:51.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:15:51.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:15:51.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:15:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:15:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.344236 -999.00  +21.20  17.18     50  +10.70 1 2 1 1 1   888    0 11.00 18.85 ----- 17.9 17.2 267.5 24.4 27.7 -26.0 27.2 -22.7 25.0 -22.9 25.9 -22.5
2026-02-11T10:15:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:15:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:15:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.344236
2026-02-11T10:15:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:15:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:15:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:15:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:15:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:15:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:15:26', tmtdew=13.11, humidity=43.1, cloud=0.0, wind=23.01, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:15:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:15:51.622 [DEBUG] [Thread-127203] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:15:51.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:15:51.729 [DEBUG] [Thread-127206] [transport.py] [_log()] starting thread (client mode): 0xa2d56e90
2026-02-11T10:15:51.730 [DEBUG] [Thread-127206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:15:51.744 [DEBUG] [Thread-127206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:15:51.744 [INFO] [Thread-127206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:15:51.752 [DEBUG] [Thread-127206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:15:51.752 [DEBUG] [Thread-127206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:15:51.752 [DEBUG] [Thread-127206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:15:51.752 [DEBUG] [Thread-127206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:51.752 [DEBUG] [Thread-127206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:15:51.752 [DEBUG] [Thread-127206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] client lang: <none>
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] server lang: <none>
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] kex follows: False
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:15:51.753 [DEBUG] [Thread-127206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:15:51.754 [DEBUG] [Thread-127206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:15:51.754 [DEBUG] [Thread-127206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:15:51.754 [DEBUG] [Thread-127206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:15:51.754 [DEBUG] [Thread-127206] [transport.py] [_log()] Compression: none
2026-02-11T10:15:51.754 [DEBUG] [Thread-127206] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:15:51.813 [DEBUG] [Thread-127206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:15:51.814 [DEBUG] [Thread-127206] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:15:51.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:15:51.815 [DEBUG] [Thread-127206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:15:51.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:15:51.872 [DEBUG] [Thread-127206] [transport.py] [_log()] userauth is OK
2026-02-11T10:15:51.872 [DEBUG] [Thread-127206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:15:51.872 [DEBUG] [Thread-127206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:15:51.872 [DEBUG] [Thread-127206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:15:51.872 [DEBUG] [Thread-127206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:15:51.891 [INFO] [Thread-127206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:15:51.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:15:51.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:15:52.763 [DEBUG] [Thread-127206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:15:52.763 [DEBUG] [Thread-127206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:15:52.810 [DEBUG] [Thread-127206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:15:52.810 [DEBUG] [Thread-127206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:15:52.821 [DEBUG] [Thread-127206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:15:52.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:15:52.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:15:52.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:15:52.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:15:52.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:15:52.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:15:52.856 [DEBUG] [Thread-127206] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:16:02.993 [DEBUG] [Thread-127208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:16:08.078 [DEBUG] [Thread-127209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:16:18.043 [DEBUG] [Thread-127210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:16:22.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:16:22.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:16:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:16:25.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 16, 1), 13.13, 43.02, 0.0, 22.59, 22.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:16:25.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:16:01
2026-02-11T10:16:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:16:25.729 [DEBUG] [Thread-127211] [transport.py] [_log()] starting thread (client mode): 0xa2df9ff0
2026-02-11T10:16:25.729 [DEBUG] [Thread-127211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:16:25.741 [DEBUG] [Thread-127211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:16:25.741 [INFO] [Thread-127211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] client lang: <none>
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] server lang: <none>
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] kex follows: False
2026-02-11T10:16:25.744 [DEBUG] [Thread-127211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:16:25.745 [DEBUG] [Thread-127211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:16:25.745 [DEBUG] [Thread-127211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:16:25.745 [DEBUG] [Thread-127211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:16:25.745 [DEBUG] [Thread-127211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:16:25.745 [DEBUG] [Thread-127211] [transport.py] [_log()] Compression: none
2026-02-11T10:16:25.745 [DEBUG] [Thread-127211] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:16:25.762 [DEBUG] [Thread-127211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:16:25.762 [DEBUG] [Thread-127211] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:16:25.763 [DEBUG] [Thread-127211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:16:25.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:16:25.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:16:25.764 [DEBUG] [Thread-127211] [transport.py] [_log()] userauth is OK
2026-02-11T10:16:25.765 [DEBUG] [Thread-127211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:16:25.765 [DEBUG] [Thread-127211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:16:25.765 [DEBUG] [Thread-127211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:16:25.765 [DEBUG] [Thread-127211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:16:25.779 [INFO] [Thread-127211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:16:25.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:16:26.413 [DEBUG] [Thread-127211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:16:26.413 [DEBUG] [Thread-127211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:16:26.413 [DEBUG] [Thread-127211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:16:26.454 [DEBUG] [Thread-127211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:16:26.455 [DEBUG] [Thread-127211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:16:26.458 [DEBUG] [Thread-127211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:16:26.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:16:26.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:16:26.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:16:26.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:16:26.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:16:26.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:16:26.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:16:26.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:16:26.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:16:26.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.344583 -999.00  +21.50  12.40     50  +10.70 1 2 1 1 1   888    0 11.31 15.01 ----- 16.6 12.4 277.2 20.1 27.3 -24.7 26.8 -22.9 25.0 -21.1 25.7 -21.6
2026-02-11T10:16:26.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:16:26.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:16:26.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.344583
2026-02-11T10:16:26.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:16:26.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:16:26.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:16:26.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:16:26.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:16:26.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:16:01', tmtdew=13.13, humidity=43.02, cloud=0.0, wind=22.59, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:16:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:16:26.478 [DEBUG] [Thread-127211] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:16:26.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:16:26.574 [DEBUG] [Thread-127214] [transport.py] [_log()] starting thread (client mode): 0xa2d91c90
2026-02-11T10:16:26.574 [DEBUG] [Thread-127214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:16:26.589 [DEBUG] [Thread-127214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:16:26.589 [INFO] [Thread-127214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:16:26.596 [DEBUG] [Thread-127214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:16:26.597 [DEBUG] [Thread-127214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:16:26.597 [DEBUG] [Thread-127214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:16:26.597 [DEBUG] [Thread-127214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:16:26.597 [DEBUG] [Thread-127214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:16:26.597 [DEBUG] [Thread-127214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:16:26.597 [DEBUG] [Thread-127214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:16:26.597 [DEBUG] [Thread-127214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] client lang: <none>
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] server lang: <none>
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] kex follows: False
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:16:26.598 [DEBUG] [Thread-127214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:16:26.599 [DEBUG] [Thread-127214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:16:26.599 [DEBUG] [Thread-127214] [transport.py] [_log()] Compression: none
2026-02-11T10:16:26.599 [DEBUG] [Thread-127214] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:16:26.658 [DEBUG] [Thread-127214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:16:26.659 [DEBUG] [Thread-127214] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:16:26.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:16:26.660 [DEBUG] [Thread-127214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:16:26.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:16:26.720 [DEBUG] [Thread-127214] [transport.py] [_log()] userauth is OK
2026-02-11T10:16:26.721 [DEBUG] [Thread-127214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:16:26.721 [DEBUG] [Thread-127214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:16:26.721 [DEBUG] [Thread-127214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:16:26.721 [DEBUG] [Thread-127214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:16:26.741 [INFO] [Thread-127214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:16:26.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:16:26.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:16:27.640 [DEBUG] [Thread-127214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:16:27.641 [DEBUG] [Thread-127214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:16:27.688 [DEBUG] [Thread-127214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:16:27.689 [DEBUG] [Thread-127214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:16:27.698 [DEBUG] [Thread-127214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:16:27.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:16:27.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:16:27.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:16:27.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:16:27.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:16:27.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:16:27.734 [DEBUG] [Thread-127214] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:16:33.083 [DEBUG] [Thread-127216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:16:48.141 [DEBUG] [Thread-127217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:16:49.115 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:16:49.116 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:16:57.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:16:57.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:16:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:16:59.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 16, 37), 13.97, 40.97, 0.0, 23.96, 23.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:16:59.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:16:37
2026-02-11T10:17:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:17:00.171 [DEBUG] [Thread-127218] [transport.py] [_log()] starting thread (client mode): 0xa2dfb340
2026-02-11T10:17:00.171 [DEBUG] [Thread-127218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:17:00.191 [DEBUG] [Thread-127218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:17:00.191 [INFO] [Thread-127218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:17:00.194 [DEBUG] [Thread-127218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] client lang: <none>
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] server lang: <none>
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] kex follows: False
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] Compression: none
2026-02-11T10:17:00.195 [DEBUG] [Thread-127218] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:17:00.215 [DEBUG] [Thread-127218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:17:00.215 [DEBUG] [Thread-127218] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:17:00.216 [DEBUG] [Thread-127218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:17:00.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:17:00.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:17:00.256 [DEBUG] [Thread-127218] [transport.py] [_log()] userauth is OK
2026-02-11T10:17:00.257 [DEBUG] [Thread-127218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:17:00.257 [DEBUG] [Thread-127218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:17:00.257 [DEBUG] [Thread-127218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:17:00.257 [DEBUG] [Thread-127218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:17:00.277 [INFO] [Thread-127218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:17:00.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:17:00.961 [DEBUG] [Thread-127218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:17:00.962 [DEBUG] [Thread-127218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:17:00.962 [DEBUG] [Thread-127218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:17:01.002 [DEBUG] [Thread-127218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:17:01.003 [DEBUG] [Thread-127218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:17:01.006 [DEBUG] [Thread-127218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:17:01.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:17:01.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:17:01.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:17:01.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:17:01.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:17:01.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:17:01.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:17:01.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:17:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:17:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.344931 -999.00  +21.50  11.30     49  +10.60 1 2 1 1 1   888    0 10.92 12.77 ----- 16.8 11.3 267.8 23.8 26.9 -23.4 26.6 -23.4 25.0 -21.3 25.6 -22.4
2026-02-11T10:17:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:17:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:17:01.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.344931
2026-02-11T10:17:01.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:17:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:17:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:17:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:17:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:17:01.033 [DEBUG] [Thread-127218] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:17:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:16:37', tmtdew=13.97, humidity=40.97, cloud=0.0, wind=23.96, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:16:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:17:01.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:17:01.123 [DEBUG] [Thread-127221] [transport.py] [_log()] starting thread (client mode): 0xa57b1a80
2026-02-11T10:17:01.123 [DEBUG] [Thread-127221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:17:01.138 [DEBUG] [Thread-127221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:17:01.138 [INFO] [Thread-127221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:17:01.146 [DEBUG] [Thread-127221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:17:01.146 [DEBUG] [Thread-127221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:17:01.146 [DEBUG] [Thread-127221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:17:01.146 [DEBUG] [Thread-127221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:01.146 [DEBUG] [Thread-127221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] client lang: <none>
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] server lang: <none>
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] kex follows: False
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] Compression: none
2026-02-11T10:17:01.147 [DEBUG] [Thread-127221] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:17:01.205 [DEBUG] [Thread-127221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:17:01.206 [DEBUG] [Thread-127221] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:17:01.206 [DEBUG] [Thread-127221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:17:01.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:17:01.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:17:01.265 [DEBUG] [Thread-127221] [transport.py] [_log()] userauth is OK
2026-02-11T10:17:01.265 [DEBUG] [Thread-127221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:17:01.265 [DEBUG] [Thread-127221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:17:01.265 [DEBUG] [Thread-127221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:17:01.265 [DEBUG] [Thread-127221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:17:01.284 [INFO] [Thread-127221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:17:01.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:17:01.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:17:02.101 [DEBUG] [Thread-127221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:17:02.101 [DEBUG] [Thread-127221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:17:02.151 [DEBUG] [Thread-127221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:17:02.152 [DEBUG] [Thread-127221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:17:02.162 [DEBUG] [Thread-127221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:17:02.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:17:02.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')
2026-02-11T10:17:02.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:17:02.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:17:02.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:17:02.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:17:02.200 [DEBUG] [Thread-127221] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:17:03.178 [DEBUG] [Thread-127223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:17:08.119 [DEBUG] [Thread-127224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:17:18.230 [DEBUG] [Thread-127225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:17:32.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:17:32.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:17:32.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
2026-02-11T10:17:33.264 [DEBUG] [Thread-127226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:17:34.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 17, 12), 13.13, 43.25, 0.0, 21.86, 21.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:17:34.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:17:12
2026-02-11T10:17:34.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:17:34.587 [DEBUG] [Thread-127227] [transport.py] [_log()] starting thread (client mode): 0xa2d55cc0
2026-02-11T10:17:34.587 [DEBUG] [Thread-127227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:17:34.608 [DEBUG] [Thread-127227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:17:34.608 [INFO] [Thread-127227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:17:34.611 [DEBUG] [Thread-127227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] client lang: <none>
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] server lang: <none>
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] kex follows: False
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:17:34.612 [DEBUG] [Thread-127227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:17:34.613 [DEBUG] [Thread-127227] [transport.py] [_log()] Compression: none
2026-02-11T10:17:34.613 [DEBUG] [Thread-127227] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:17:34.631 [DEBUG] [Thread-127227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:17:34.631 [DEBUG] [Thread-127227] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:17:34.632 [DEBUG] [Thread-127227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:17:34.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:17:34.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:17:34.634 [DEBUG] [Thread-127227] [transport.py] [_log()] userauth is OK
2026-02-11T10:17:34.634 [DEBUG] [Thread-127227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:17:34.634 [DEBUG] [Thread-127227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:17:34.634 [DEBUG] [Thread-127227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:17:34.634 [DEBUG] [Thread-127227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:17:34.653 [INFO] [Thread-127227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:17:34.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:17:35.262 [DEBUG] [Thread-127227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:17:35.263 [DEBUG] [Thread-127227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:17:35.263 [DEBUG] [Thread-127227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:17:35.303 [DEBUG] [Thread-127227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:17:35.304 [DEBUG] [Thread-127227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:17:35.307 [DEBUG] [Thread-127227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:17:35.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:17:35.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:17:35.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:17:35.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:17:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:17:35.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:17:35.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:17:35.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:17:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:17:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.345278 -999.00  +21.50  15.40     49  +10.60 1 2 1 1 1   888    0 10.77 10.87 ----- 10.2 15.4 275.6 20.1 26.6 -23.7 26.3 -22.8 24.9 -20.7 25.4 -21.4
2026-02-11T10:17:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:17:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:17:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.345278
2026-02-11T10:17:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:17:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:17:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:17:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:17:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:17:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:17:12', tmtdew=13.13, humidity=43.25, cloud=0.0, wind=21.86, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:17:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:17:35.333 [DEBUG] [Thread-127227] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:17:35.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:17:35.429 [DEBUG] [Thread-127230] [transport.py] [_log()] starting thread (client mode): 0xa2dc7190
2026-02-11T10:17:35.429 [DEBUG] [Thread-127230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:17:35.444 [DEBUG] [Thread-127230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:17:35.444 [INFO] [Thread-127230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:17:35.451 [DEBUG] [Thread-127230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] client lang: <none>
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] server lang: <none>
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] kex follows: False
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:17:35.452 [DEBUG] [Thread-127230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:17:35.453 [DEBUG] [Thread-127230] [transport.py] [_log()] Compression: none
2026-02-11T10:17:35.453 [DEBUG] [Thread-127230] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:17:35.509 [DEBUG] [Thread-127230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:17:35.509 [DEBUG] [Thread-127230] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:17:35.510 [DEBUG] [Thread-127230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:17:35.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:17:35.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:17:35.569 [DEBUG] [Thread-127230] [transport.py] [_log()] userauth is OK
2026-02-11T10:17:35.569 [DEBUG] [Thread-127230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:17:35.569 [DEBUG] [Thread-127230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:17:35.569 [DEBUG] [Thread-127230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:17:35.569 [DEBUG] [Thread-127230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:17:35.595 [INFO] [Thread-127230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:17:35.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:17:35.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:17:36.413 [DEBUG] [Thread-127230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:17:36.413 [DEBUG] [Thread-127230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:17:36.461 [DEBUG] [Thread-127230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:17:36.461 [DEBUG] [Thread-127230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:17:36.470 [DEBUG] [Thread-127230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:17:36.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:17: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')
2026-02-11T10:17: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
2026-02-11T10:17:36.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:17:36.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:17:36.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:17:36.506 [DEBUG] [Thread-127230] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:17:48.294 [DEBUG] [Thread-127232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:17:49.257 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:17:49.258 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:18:03.342 [DEBUG] [Thread-127233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:18:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:18:06.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:18:06.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
2026-02-11T10:18:08.155 [DEBUG] [Thread-127234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:18:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 17, 47), 12.8, 43.8, 0.0, 17.19, 21.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:18:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:17:47
2026-02-11T10:18:08.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:18:08.970 [DEBUG] [Thread-127235] [transport.py] [_log()] starting thread (client mode): 0xa2dc15a0
2026-02-11T10:18:08.970 [DEBUG] [Thread-127235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:18:08.991 [DEBUG] [Thread-127235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:18:08.991 [INFO] [Thread-127235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:18:09.003 [DEBUG] [Thread-127235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:18:09.003 [DEBUG] [Thread-127235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:18:09.003 [DEBUG] [Thread-127235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:18:09.003 [DEBUG] [Thread-127235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] client lang: <none>
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] server lang: <none>
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] kex follows: False
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:18:09.004 [DEBUG] [Thread-127235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:18:09.005 [DEBUG] [Thread-127235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:18:09.005 [DEBUG] [Thread-127235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:18:09.005 [DEBUG] [Thread-127235] [transport.py] [_log()] Compression: none
2026-02-11T10:18:09.005 [DEBUG] [Thread-127235] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:18:09.025 [DEBUG] [Thread-127235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:18:09.026 [DEBUG] [Thread-127235] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:18:09.026 [DEBUG] [Thread-127235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:18:09.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:18:09.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:18:09.029 [DEBUG] [Thread-127235] [transport.py] [_log()] userauth is OK
2026-02-11T10:18:09.029 [DEBUG] [Thread-127235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:18:09.029 [DEBUG] [Thread-127235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:18:09.029 [DEBUG] [Thread-127235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:18:09.029 [DEBUG] [Thread-127235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:18:09.054 [INFO] [Thread-127235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:18:09.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:18:09.637 [DEBUG] [Thread-127235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:18:09.637 [DEBUG] [Thread-127235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:18:09.638 [DEBUG] [Thread-127235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:18:09.678 [DEBUG] [Thread-127235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:18:09.678 [DEBUG] [Thread-127235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:18:09.682 [DEBUG] [Thread-127235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:18:09.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:18:09.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:18:09.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:18:09.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:18:09.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:18:09.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:18:09.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:18:09.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:18:09.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:18:09.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.345625 -999.00  +21.50  12.50     49  +10.60 1 2 1 1 1   888    0 11.06 10.13 ----- 18.6 12.5 270.7 17.2 26.5 -23.1 26.1 -22.2 24.9 -22.9 25.3 -21.6
2026-02-11T10:18:09.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:18:09.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:18:09.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.345625
2026-02-11T10:18:09.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:18:09.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:18:09.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:18:09.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:18:09.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:18:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:17:47', tmtdew=12.8, humidity=43.8, cloud=0.0, wind=17.19, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:17:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:18:09.702 [DEBUG] [Thread-127235] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:18:09.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:18:09.797 [DEBUG] [Thread-127238] [transport.py] [_log()] starting thread (client mode): 0xa81d7d90
2026-02-11T10:18:09.797 [DEBUG] [Thread-127238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:18:09.811 [DEBUG] [Thread-127238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:18:09.811 [INFO] [Thread-127238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] client lang: <none>
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] server lang: <none>
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] kex follows: False
2026-02-11T10:18:09.819 [DEBUG] [Thread-127238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:18:09.820 [DEBUG] [Thread-127238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:18:09.820 [DEBUG] [Thread-127238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:18:09.820 [DEBUG] [Thread-127238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:18:09.820 [DEBUG] [Thread-127238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:18:09.820 [DEBUG] [Thread-127238] [transport.py] [_log()] Compression: none
2026-02-11T10:18:09.820 [DEBUG] [Thread-127238] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:18:09.878 [DEBUG] [Thread-127238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:18:09.879 [DEBUG] [Thread-127238] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:18:09.879 [DEBUG] [Thread-127238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:18:09.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:18:09.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:18:09.937 [DEBUG] [Thread-127238] [transport.py] [_log()] userauth is OK
2026-02-11T10:18:09.937 [DEBUG] [Thread-127238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:18:09.937 [DEBUG] [Thread-127238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:18:09.937 [DEBUG] [Thread-127238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:18:09.938 [DEBUG] [Thread-127238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:18:09.957 [INFO] [Thread-127238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:18:09.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:18:09.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:18:10.759 [DEBUG] [Thread-127238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:18:10.759 [DEBUG] [Thread-127238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:18:10.806 [DEBUG] [Thread-127238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:18:10.807 [DEBUG] [Thread-127238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:18:10.816 [DEBUG] [Thread-127238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:18:10.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:18:10.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:18:10.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:18:10.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:18:10.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:18:10.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:18:10.853 [DEBUG] [Thread-127238] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:18:18.377 [DEBUG] [Thread-127240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:18:33.428 [DEBUG] [Thread-127241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:18:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:18:40.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:18:40.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:18:42.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 18, 22), 12.78, 43.83, 0.0, 17.63, 21.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:18:42.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:18:22
2026-02-11T10:18:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:18:43.207 [DEBUG] [Thread-127242] [transport.py] [_log()] starting thread (client mode): 0xa2dc24d0
2026-02-11T10:18:43.207 [DEBUG] [Thread-127242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:18:43.227 [DEBUG] [Thread-127242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:18:43.227 [INFO] [Thread-127242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:18:43.230 [DEBUG] [Thread-127242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:18:43.230 [DEBUG] [Thread-127242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:18:43.230 [DEBUG] [Thread-127242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:18:43.230 [DEBUG] [Thread-127242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:43.230 [DEBUG] [Thread-127242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:43.230 [DEBUG] [Thread-127242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:43.230 [DEBUG] [Thread-127242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] client lang: <none>
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] server lang: <none>
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] kex follows: False
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] Compression: none
2026-02-11T10:18:43.231 [DEBUG] [Thread-127242] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:18:43.247 [DEBUG] [Thread-127242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:18:43.248 [DEBUG] [Thread-127242] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:18:43.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:18:43.249 [DEBUG] [Thread-127242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:18:43.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:18:43.293 [DEBUG] [Thread-127242] [transport.py] [_log()] userauth is OK
2026-02-11T10:18:43.293 [DEBUG] [Thread-127242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:18:43.293 [DEBUG] [Thread-127242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:18:43.293 [DEBUG] [Thread-127242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:18:43.293 [DEBUG] [Thread-127242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:18:43.331 [INFO] [Thread-127242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:18:43.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:18:43.971 [DEBUG] [Thread-127242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:18:43.971 [DEBUG] [Thread-127242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:18:43.972 [DEBUG] [Thread-127242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:18:44.012 [DEBUG] [Thread-127242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:18:44.013 [DEBUG] [Thread-127242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:18:44.017 [DEBUG] [Thread-127242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:18:44.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:18:44.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:18:44.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:18:44.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:18:44.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:18:44.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:18:44.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:18:44.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:18:44.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:18:44.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.345972 -999.00  +21.30  14.05     50  +10.50 1 2 1 1 1   888    0 10.91 8.42 ----- 17.8 14.1 297.0 18.3 26.2 -23.4 25.9 -22.1 24.6 -20.5 25.2 -20.6
2026-02-11T10:18:44.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:18:44.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:18:44.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.345972
2026-02-11T10:18:44.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:18:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:18:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:18:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:18:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:18:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:18:22', tmtdew=12.78, humidity=43.83, cloud=0.0, wind=17.63, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:18:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:18:44.044 [DEBUG] [Thread-127242] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:18:44.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:18:44.138 [DEBUG] [Thread-127245] [transport.py] [_log()] starting thread (client mode): 0xa2d90bb0
2026-02-11T10:18:44.139 [DEBUG] [Thread-127245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:18:44.154 [DEBUG] [Thread-127245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:18:44.154 [INFO] [Thread-127245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:18:44.162 [DEBUG] [Thread-127245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:18:44.162 [DEBUG] [Thread-127245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:18:44.162 [DEBUG] [Thread-127245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:18:44.162 [DEBUG] [Thread-127245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] client lang: <none>
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] server lang: <none>
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] kex follows: False
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:18:44.163 [DEBUG] [Thread-127245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:18:44.164 [DEBUG] [Thread-127245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:18:44.164 [DEBUG] [Thread-127245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:18:44.164 [DEBUG] [Thread-127245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:18:44.164 [DEBUG] [Thread-127245] [transport.py] [_log()] Compression: none
2026-02-11T10:18:44.164 [DEBUG] [Thread-127245] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:18:44.235 [DEBUG] [Thread-127245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:18:44.236 [DEBUG] [Thread-127245] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:18:44.236 [DEBUG] [Thread-127245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:18:44.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:18:44.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:18:44.293 [DEBUG] [Thread-127245] [transport.py] [_log()] userauth is OK
2026-02-11T10:18:44.294 [DEBUG] [Thread-127245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:18:44.294 [DEBUG] [Thread-127245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:18:44.294 [DEBUG] [Thread-127245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:18:44.294 [DEBUG] [Thread-127245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:18:44.317 [INFO] [Thread-127245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:18:44.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:18:44.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:18:45.157 [DEBUG] [Thread-127245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:18:45.157 [DEBUG] [Thread-127245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:18:45.205 [DEBUG] [Thread-127245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:18:45.205 [DEBUG] [Thread-127245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:18:45.215 [DEBUG] [Thread-127245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:18:45.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:18:45.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:18:45.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:18:45.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:18:45.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:18:45.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:18:45.252 [DEBUG] [Thread-127245] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:18:48.464 [DEBUG] [Thread-127247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:18:49.399 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:18:49.400 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:03.524 [DEBUG] [Thread-127248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:08.188 [DEBUG] [Thread-127249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:19:15.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:19:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:19:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 18, 58), 13.11, 43.22, 0.0, 17.06, 21.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:19:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:18:58
2026-02-11T10:19:17.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:19:17.608 [DEBUG] [Thread-127250] [transport.py] [_log()] starting thread (client mode): 0xa81d7820
2026-02-11T10:19:17.608 [DEBUG] [Thread-127250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:19:17.629 [DEBUG] [Thread-127250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:19:17.629 [INFO] [Thread-127250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:19:17.632 [DEBUG] [Thread-127250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] client lang: <none>
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] server lang: <none>
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] kex follows: False
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] Compression: none
2026-02-11T10:19:17.633 [DEBUG] [Thread-127250] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:19:17.649 [DEBUG] [Thread-127250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:19:17.650 [DEBUG] [Thread-127250] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:19:17.650 [DEBUG] [Thread-127250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:19:17.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:19:17.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:19:17.652 [DEBUG] [Thread-127250] [transport.py] [_log()] userauth is OK
2026-02-11T10:19:17.652 [DEBUG] [Thread-127250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:19:17.652 [DEBUG] [Thread-127250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:19:17.652 [DEBUG] [Thread-127250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:19:17.652 [DEBUG] [Thread-127250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:19:17.685 [INFO] [Thread-127250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:19:17.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:19:18.325 [DEBUG] [Thread-127250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:19:18.326 [DEBUG] [Thread-127250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:19:18.326 [DEBUG] [Thread-127250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:19:18.366 [DEBUG] [Thread-127250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:19:18.367 [DEBUG] [Thread-127250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:19:18.370 [DEBUG] [Thread-127250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:19:18.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:19:18.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:19:18.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:19:18.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:19:18.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:19:18.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:19:18.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:19:18.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:19:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:19:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.346320 -999.00  +21.30  16.11     50  +10.50 1 2 1 1 1   888    0 10.75 9.39 ----- 13.5 16.1 285.2 20.8 26.0 -22.6 25.8 -21.3 24.6 -21.0 25.1 -20.5
2026-02-11T10:19:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:19:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:19:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.346320
2026-02-11T10:19:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:19:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:19:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:19:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:19:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:19:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:18:58', tmtdew=13.11, humidity=43.22, cloud=0.0, wind=17.06, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:18:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:19:18.399 [DEBUG] [Thread-127250] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:19:18.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:19:18.496 [DEBUG] [Thread-127253] [transport.py] [_log()] starting thread (client mode): 0xa2dc6200
2026-02-11T10:19:18.496 [DEBUG] [Thread-127253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:19:18.512 [DEBUG] [Thread-127253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:19:18.512 [INFO] [Thread-127253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] client lang: <none>
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] server lang: <none>
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] kex follows: False
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:19:18.520 [DEBUG] [Thread-127253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:19:18.521 [DEBUG] [Thread-127253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:19:18.521 [DEBUG] [Thread-127253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:19:18.521 [DEBUG] [Thread-127253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:19:18.521 [DEBUG] [Thread-127253] [transport.py] [_log()] Compression: none
2026-02-11T10:19:18.521 [DEBUG] [Thread-127253] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:19:18.575 [DEBUG] [Thread-127255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:18.578 [DEBUG] [Thread-127253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:19:18.579 [DEBUG] [Thread-127253] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:19:18.579 [DEBUG] [Thread-127253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:19:18.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:19:18.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:19:18.634 [DEBUG] [Thread-127253] [transport.py] [_log()] userauth is OK
2026-02-11T10:19:18.634 [DEBUG] [Thread-127253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:19:18.634 [DEBUG] [Thread-127253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:19:18.634 [DEBUG] [Thread-127253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:19:18.634 [DEBUG] [Thread-127253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:19:18.653 [INFO] [Thread-127253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:19:18.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:19:18.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:19:19.470 [DEBUG] [Thread-127253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:19:19.470 [DEBUG] [Thread-127253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:19:19.518 [DEBUG] [Thread-127253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:19:19.518 [DEBUG] [Thread-127253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:19:19.527 [DEBUG] [Thread-127253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:19:19.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:19:19.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:19:19.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:19:19.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:19:19.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:19:19.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:19:19.561 [DEBUG] [Thread-127253] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:19:33.625 [DEBUG] [Thread-127256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:48.658 [DEBUG] [Thread-127257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:49.548 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:49.549 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:19:49.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:19:49.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:19:49.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:19:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 19, 33), 13.15, 42.99, 0.0, 18.28, 22.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:19:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:19:33
2026-02-11T10:19:51.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:19:52.065 [DEBUG] [Thread-127258] [transport.py] [_log()] starting thread (client mode): 0xa2d90520
2026-02-11T10:19:52.065 [DEBUG] [Thread-127258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:19:52.085 [DEBUG] [Thread-127258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:19:52.085 [INFO] [Thread-127258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:19:52.088 [DEBUG] [Thread-127258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:19:52.088 [DEBUG] [Thread-127258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] client lang: <none>
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] server lang: <none>
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] kex follows: False
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] Compression: none
2026-02-11T10:19:52.089 [DEBUG] [Thread-127258] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:19:52.107 [DEBUG] [Thread-127258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:19:52.107 [DEBUG] [Thread-127258] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:19:52.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:19:52.108 [DEBUG] [Thread-127258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:19:52.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:19:52.111 [DEBUG] [Thread-127258] [transport.py] [_log()] userauth is OK
2026-02-11T10:19:52.111 [DEBUG] [Thread-127258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:19:52.111 [DEBUG] [Thread-127258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:19:52.111 [DEBUG] [Thread-127258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:19:52.111 [DEBUG] [Thread-127258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:19:52.137 [INFO] [Thread-127258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:19:52.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:19:52.779 [DEBUG] [Thread-127258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:19:52.779 [DEBUG] [Thread-127258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:19:52.780 [DEBUG] [Thread-127258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:19:52.820 [DEBUG] [Thread-127258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:19:52.820 [DEBUG] [Thread-127258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:19:52.823 [DEBUG] [Thread-127258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:19:52.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:19:52.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:19:52.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:19:52.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:19:52.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:19:52.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:19:52.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:19:52.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:19:52.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:19:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.347014 -999.00  +21.10  15.98     50  +10.40 1 2 1 1 1   888    0 10.96 10.44 ----- 16.6 16.0 309.8 20.9 26.1 -15.9 25.5 -20.8 25.1 -16.0 25.5 -15.4
2026-02-11T10:19:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:19:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:19:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.347014
2026-02-11T10:19:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:19:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:19:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:19:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:19:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:19:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:19:33', tmtdew=13.15, humidity=42.99, cloud=0.0, wind=18.28, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:19:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:19:52.849 [DEBUG] [Thread-127258] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:19:52.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:19:52.937 [DEBUG] [Thread-127261] [transport.py] [_log()] starting thread (client mode): 0xa2d93070
2026-02-11T10:19:52.937 [DEBUG] [Thread-127261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:19:52.952 [DEBUG] [Thread-127261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:19:52.952 [INFO] [Thread-127261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:19:52.959 [DEBUG] [Thread-127261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] client lang: <none>
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] server lang: <none>
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] kex follows: False
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] Compression: none
2026-02-11T10:19:52.960 [DEBUG] [Thread-127261] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:19:53.022 [DEBUG] [Thread-127261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:19:53.023 [DEBUG] [Thread-127261] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:19:53.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:19:53.024 [DEBUG] [Thread-127261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:19:53.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:19:53.078 [DEBUG] [Thread-127261] [transport.py] [_log()] userauth is OK
2026-02-11T10:19:53.078 [DEBUG] [Thread-127261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:19:53.078 [DEBUG] [Thread-127261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:19:53.078 [DEBUG] [Thread-127261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:19:53.078 [DEBUG] [Thread-127261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:19:53.105 [INFO] [Thread-127261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:19:53.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:19:53.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:19:53.916 [DEBUG] [Thread-127261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:19:53.916 [DEBUG] [Thread-127261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:19:53.964 [DEBUG] [Thread-127261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:19:53.964 [DEBUG] [Thread-127261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:19:53.974 [DEBUG] [Thread-127261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:19:53.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:19:53.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:19:53.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:19:54.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:19:54.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:19:54.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:19:54.010 [DEBUG] [Thread-127261] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:20:03.695 [DEBUG] [Thread-127263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:20:08.221 [DEBUG] [Thread-127264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:20:18.750 [DEBUG] [Thread-127265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:20:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:20:24.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:20:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:20:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 20, 9), 12.74, 44.1, 0.0, 12.48, 21.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:20:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:20:09
2026-02-11T10:20:26.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:20:26.825 [DEBUG] [Thread-127266] [transport.py] [_log()] starting thread (client mode): 0xa2dc1f60
2026-02-11T10:20:26.825 [DEBUG] [Thread-127266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:20:26.845 [DEBUG] [Thread-127266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:20:26.845 [INFO] [Thread-127266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:20:26.848 [DEBUG] [Thread-127266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:20:26.848 [DEBUG] [Thread-127266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:20:26.848 [DEBUG] [Thread-127266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:20:26.848 [DEBUG] [Thread-127266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:20:26.848 [DEBUG] [Thread-127266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] client lang: <none>
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] server lang: <none>
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] kex follows: False
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:20:26.849 [DEBUG] [Thread-127266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:20:26.850 [DEBUG] [Thread-127266] [transport.py] [_log()] Compression: none
2026-02-11T10:20:26.850 [DEBUG] [Thread-127266] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:20:26.867 [DEBUG] [Thread-127266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:20:26.868 [DEBUG] [Thread-127266] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:20:26.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:20:26.868 [DEBUG] [Thread-127266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:20:26.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:20:26.871 [DEBUG] [Thread-127266] [transport.py] [_log()] userauth is OK
2026-02-11T10:20:26.872 [DEBUG] [Thread-127266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:20:26.872 [DEBUG] [Thread-127266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:20:26.872 [DEBUG] [Thread-127266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:20:26.872 [DEBUG] [Thread-127266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:20:26.897 [INFO] [Thread-127266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:20:26.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:20:27.527 [DEBUG] [Thread-127266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:20:27.527 [DEBUG] [Thread-127266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:20:27.528 [DEBUG] [Thread-127266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:20:27.568 [DEBUG] [Thread-127266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:20:27.568 [DEBUG] [Thread-127266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:20:27.571 [DEBUG] [Thread-127266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:20:27.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:20:27.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:20:27.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:20:27.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:20:27.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:20:27.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:20:27.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:20:27.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:20:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:20:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.347361 -999.00  +21.30  12.63     51  +10.80 1 2 1 1 1   888    0 10.97 8.56 ----- 14.4 12.6 301.4 22.2 26.6 -16.3 26.0 -16.1 25.3 -15.5 25.8 -15.0
2026-02-11T10:20:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:20:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:20:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.347361
2026-02-11T10:20:27.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:20:27.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:20:27.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:20:27.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:20:27.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:20:27.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:20:09', tmtdew=12.74, humidity=44.1, cloud=0.0, wind=12.48, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:20:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:20:27.600 [DEBUG] [Thread-127266] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:20:27.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:20:27.698 [DEBUG] [Thread-127269] [transport.py] [_log()] starting thread (client mode): 0xa81d6020
2026-02-11T10:20:27.698 [DEBUG] [Thread-127269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:20:27.714 [DEBUG] [Thread-127269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:20:27.714 [INFO] [Thread-127269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] client lang: <none>
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] server lang: <none>
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] kex follows: False
2026-02-11T10:20:27.722 [DEBUG] [Thread-127269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:20:27.723 [DEBUG] [Thread-127269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:20:27.723 [DEBUG] [Thread-127269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:20:27.723 [DEBUG] [Thread-127269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:20:27.723 [DEBUG] [Thread-127269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:20:27.723 [DEBUG] [Thread-127269] [transport.py] [_log()] Compression: none
2026-02-11T10:20:27.723 [DEBUG] [Thread-127269] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:20:27.789 [DEBUG] [Thread-127269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:20:27.789 [DEBUG] [Thread-127269] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:20:27.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:20:27.791 [DEBUG] [Thread-127269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:20:27.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:20:27.846 [DEBUG] [Thread-127269] [transport.py] [_log()] userauth is OK
2026-02-11T10:20:27.846 [DEBUG] [Thread-127269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:20:27.847 [DEBUG] [Thread-127269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:20:27.847 [DEBUG] [Thread-127269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:20:27.847 [DEBUG] [Thread-127269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:20:27.866 [INFO] [Thread-127269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:20:27.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:20:27.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:20:28.743 [DEBUG] [Thread-127269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:20:28.743 [DEBUG] [Thread-127269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:20:28.791 [DEBUG] [Thread-127269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:20:28.792 [DEBUG] [Thread-127269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:20:28.801 [DEBUG] [Thread-127269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:20:28.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:20:28.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:20:28.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:20:28.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:20:28.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:20:28.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:20:28.844 [DEBUG] [Thread-127269] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:20:33.787 [DEBUG] [Thread-127271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:20:48.839 [DEBUG] [Thread-127272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:20:49.689 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:20:49.691 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:20:58.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:20:58.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:20:58.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:21:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 20, 44), 12.88, 43.9, 0.0, 12.48, 21.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:21:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:20:44
2026-02-11T10:21:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:21:01.269 [DEBUG] [Thread-127273] [transport.py] [_log()] starting thread (client mode): 0xa2dc1030
2026-02-11T10:21:01.269 [DEBUG] [Thread-127273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:21:01.288 [DEBUG] [Thread-127273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:21:01.288 [INFO] [Thread-127273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] client lang: <none>
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] server lang: <none>
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] kex follows: False
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] Compression: none
2026-02-11T10:21:01.292 [DEBUG] [Thread-127273] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:21:01.308 [DEBUG] [Thread-127273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:21:01.308 [DEBUG] [Thread-127273] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:21:01.308 [DEBUG] [Thread-127273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:21:01.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:21:01.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:21:01.309 [DEBUG] [Thread-127273] [transport.py] [_log()] userauth is OK
2026-02-11T10:21:01.309 [DEBUG] [Thread-127273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:21:01.309 [DEBUG] [Thread-127273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:21:01.309 [DEBUG] [Thread-127273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:21:01.309 [DEBUG] [Thread-127273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:21:01.326 [INFO] [Thread-127273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:21:01.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:21:01.986 [DEBUG] [Thread-127273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:21:01.987 [DEBUG] [Thread-127273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:21:01.987 [DEBUG] [Thread-127273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:21:02.027 [DEBUG] [Thread-127273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:21:02.028 [DEBUG] [Thread-127273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:21:02.031 [DEBUG] [Thread-127273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:21:02.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:21:02.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:21:02.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:21:02.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:21:02.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:21:02.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:21:02.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:21:02.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:21:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:21:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.347708 -999.00  +21.50  19.29     51  +10.90 1 2 1 1 1   888    0 10.91 7.97 ----- 18.7 19.3 299.0 28.3 27.1 -16.4 26.4 -15.9 25.3 -15.6 26.0 -15.4
2026-02-11T10:21:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:21:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:21:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.347708
2026-02-11T10:21:02.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:21:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:21:02.056 [DEBUG] [Thread-127273] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:21:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:21:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:21:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:21:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:20:44', tmtdew=12.88, humidity=43.9, cloud=0.0, wind=12.48, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:20:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:21:02.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:21:02.160 [DEBUG] [Thread-127276] [transport.py] [_log()] starting thread (client mode): 0xa57b1a80
2026-02-11T10:21:02.160 [DEBUG] [Thread-127276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:21:02.175 [DEBUG] [Thread-127276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:21:02.175 [INFO] [Thread-127276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] client lang: <none>
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] server lang: <none>
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] kex follows: False
2026-02-11T10:21:02.183 [DEBUG] [Thread-127276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:21:02.184 [DEBUG] [Thread-127276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:21:02.184 [DEBUG] [Thread-127276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:21:02.184 [DEBUG] [Thread-127276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:21:02.184 [DEBUG] [Thread-127276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:21:02.184 [DEBUG] [Thread-127276] [transport.py] [_log()] Compression: none
2026-02-11T10:21:02.184 [DEBUG] [Thread-127276] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:21:02.244 [DEBUG] [Thread-127276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:21:02.244 [DEBUG] [Thread-127276] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:21:02.245 [DEBUG] [Thread-127276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:21:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:21:02.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:21:02.302 [DEBUG] [Thread-127276] [transport.py] [_log()] userauth is OK
2026-02-11T10:21:02.303 [DEBUG] [Thread-127276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:21:02.303 [DEBUG] [Thread-127276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:21:02.303 [DEBUG] [Thread-127276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:21:02.303 [DEBUG] [Thread-127276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:21:02.321 [INFO] [Thread-127276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:21:02.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:21:02.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:21:03.158 [DEBUG] [Thread-127276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:21:03.158 [DEBUG] [Thread-127276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:21:03.206 [DEBUG] [Thread-127276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:21:03.206 [DEBUG] [Thread-127276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:21:03.214 [DEBUG] [Thread-127276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:21:03.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:21:03.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:21:03.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:21:03.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:21:03.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:21:03.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:21:03.252 [DEBUG] [Thread-127276] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:21:03.875 [DEBUG] [Thread-127278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:21:08.265 [DEBUG] [Thread-127279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:21:18.934 [DEBUG] [Thread-127280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:21:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:21:33.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:21:33.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
2026-02-11T10:21:33.970 [DEBUG] [Thread-127281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:21:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 21, 19), 12.99, 43.63, 0.0, 18.76, 22.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:21:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:21:19
2026-02-11T10:21:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:21:35.629 [DEBUG] [Thread-127282] [transport.py] [_log()] starting thread (client mode): 0xa81d5450
2026-02-11T10:21:35.629 [DEBUG] [Thread-127282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:21:35.649 [DEBUG] [Thread-127282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:21:35.649 [INFO] [Thread-127282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:21:35.652 [DEBUG] [Thread-127282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:21:35.652 [DEBUG] [Thread-127282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] client lang: <none>
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] server lang: <none>
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] kex follows: False
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] Compression: none
2026-02-11T10:21:35.653 [DEBUG] [Thread-127282] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:21:35.672 [DEBUG] [Thread-127282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:21:35.672 [DEBUG] [Thread-127282] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:21:35.673 [DEBUG] [Thread-127282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:21:35.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:21:35.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:21:35.674 [DEBUG] [Thread-127282] [transport.py] [_log()] userauth is OK
2026-02-11T10:21:35.675 [DEBUG] [Thread-127282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:21:35.675 [DEBUG] [Thread-127282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:21:35.675 [DEBUG] [Thread-127282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:21:35.675 [DEBUG] [Thread-127282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:21:35.694 [INFO] [Thread-127282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:21:35.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:21:36.346 [DEBUG] [Thread-127282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:21:36.347 [DEBUG] [Thread-127282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:21:36.347 [DEBUG] [Thread-127282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:21:36.387 [DEBUG] [Thread-127282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:21:36.387 [DEBUG] [Thread-127282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:21:36.390 [DEBUG] [Thread-127282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:21:36.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:21:36.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:21:36.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:21:36.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:21:36.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:21:36.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:21:36.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:21:36.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:21:36.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:21:36.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.348056 -999.00  +21.60  17.81     50  +11.00 1 2 1 1 1   888    0 11.04 5.81 ----- 17.4 17.8 299.2 27.2 27.3 -16.9 26.6 -16.5 25.5 -14.5 26.1 -14.8
2026-02-11T10:21:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:21:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:21:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.348056
2026-02-11T10:21:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:21:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:21:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:21:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:21:36.415 [DEBUG] [Thread-127282] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:21:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:21:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:21:19', tmtdew=12.99, humidity=43.63, cloud=0.0, wind=18.76, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:21:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:21:36.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:21:36.511 [DEBUG] [Thread-127285] [transport.py] [_log()] starting thread (client mode): 0xa2dc0790
2026-02-11T10:21:36.512 [DEBUG] [Thread-127285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:21:36.526 [DEBUG] [Thread-127285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:21:36.526 [INFO] [Thread-127285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] client lang: <none>
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] server lang: <none>
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] kex follows: False
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:21:36.534 [DEBUG] [Thread-127285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:21:36.535 [DEBUG] [Thread-127285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:21:36.535 [DEBUG] [Thread-127285] [transport.py] [_log()] Compression: none
2026-02-11T10:21:36.535 [DEBUG] [Thread-127285] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:21:36.599 [DEBUG] [Thread-127285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:21:36.599 [DEBUG] [Thread-127285] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:21:36.600 [DEBUG] [Thread-127285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:21:36.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:21:36.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:21:36.654 [DEBUG] [Thread-127285] [transport.py] [_log()] userauth is OK
2026-02-11T10:21:36.655 [DEBUG] [Thread-127285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:21:36.655 [DEBUG] [Thread-127285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:21:36.655 [DEBUG] [Thread-127285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:21:36.655 [DEBUG] [Thread-127285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:21:36.673 [INFO] [Thread-127285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:21:36.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:21:36.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:21:37.526 [DEBUG] [Thread-127285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:21:37.526 [DEBUG] [Thread-127285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:21:37.575 [DEBUG] [Thread-127285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:21:37.575 [DEBUG] [Thread-127285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:21:37.585 [DEBUG] [Thread-127285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:21:37.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:21:37.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:21:37.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:21:37.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:21:37.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:21:37.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:21:37.620 [DEBUG] [Thread-127285] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:21:49.007 [DEBUG] [Thread-127287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:21:49.835 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:21:49.836 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:22:04.058 [DEBUG] [Thread-127288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:22:07.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:22:07.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:22:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:22:08.311 [DEBUG] [Thread-127289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:22:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 21, 56), 13.05, 43.35, 0.0, 21.99, 22.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:22:09.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:21:56
2026-02-11T10:22:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:22:10.554 [DEBUG] [Thread-127290] [transport.py] [_log()] starting thread (client mode): 0xa2dc1720
2026-02-11T10:22:10.555 [DEBUG] [Thread-127290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:22:10.575 [DEBUG] [Thread-127290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:22:10.575 [INFO] [Thread-127290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:22:10.578 [DEBUG] [Thread-127290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] client lang: <none>
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] server lang: <none>
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] kex follows: False
2026-02-11T10:22:10.579 [DEBUG] [Thread-127290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:22:10.580 [DEBUG] [Thread-127290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:22:10.580 [DEBUG] [Thread-127290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:22:10.580 [DEBUG] [Thread-127290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:22:10.580 [DEBUG] [Thread-127290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:22:10.580 [DEBUG] [Thread-127290] [transport.py] [_log()] Compression: none
2026-02-11T10:22:10.580 [DEBUG] [Thread-127290] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:22:10.599 [DEBUG] [Thread-127290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:22:10.600 [DEBUG] [Thread-127290] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:22:10.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:22:10.601 [DEBUG] [Thread-127290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:22:10.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:22:10.604 [DEBUG] [Thread-127290] [transport.py] [_log()] userauth is OK
2026-02-11T10:22:10.604 [DEBUG] [Thread-127290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:22:10.604 [DEBUG] [Thread-127290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:22:10.604 [DEBUG] [Thread-127290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:22:10.604 [DEBUG] [Thread-127290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:22:10.629 [INFO] [Thread-127290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:22:10.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:22:11.253 [DEBUG] [Thread-127290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:22:11.254 [DEBUG] [Thread-127290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:22:11.254 [DEBUG] [Thread-127290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:22:11.294 [DEBUG] [Thread-127290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:22:11.294 [DEBUG] [Thread-127290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:22:11.296 [DEBUG] [Thread-127290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:22:11.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:22:11.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:22:11.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:22:11.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:22:11.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:22:11.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:22:11.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.348403 -999.00  +21.70  20.08     50  +11.00 1 2 1 1 1   888    0 11.07 3.62 ----- 20.5 20.1 309.0 24.4 27.6 -17.5 26.8 -16.2 25.6 -14.9 26.3 -15.0
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.348403
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:22:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:21:56', tmtdew=13.05, humidity=43.35, cloud=0.0, wind=21.99, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:21:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:22:11.308 [DEBUG] [Thread-127290] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:22:11.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:22:11.391 [DEBUG] [Thread-127293] [transport.py] [_log()] starting thread (client mode): 0xa2d03790
2026-02-11T10:22:11.391 [DEBUG] [Thread-127293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:22:11.406 [DEBUG] [Thread-127293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:22:11.406 [INFO] [Thread-127293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] client lang: <none>
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] server lang: <none>
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] kex follows: False
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] Compression: none
2026-02-11T10:22:11.417 [DEBUG] [Thread-127293] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:22:11.476 [DEBUG] [Thread-127293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:22:11.476 [DEBUG] [Thread-127293] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:22:11.477 [DEBUG] [Thread-127293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:22:11.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:22:11.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:22:11.533 [DEBUG] [Thread-127293] [transport.py] [_log()] userauth is OK
2026-02-11T10:22:11.533 [DEBUG] [Thread-127293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:22:11.533 [DEBUG] [Thread-127293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:22:11.533 [DEBUG] [Thread-127293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:22:11.533 [DEBUG] [Thread-127293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:22:11.547 [INFO] [Thread-127293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:22:11.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:22:11.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:22:12.385 [DEBUG] [Thread-127293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:22:12.385 [DEBUG] [Thread-127293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:22:12.433 [DEBUG] [Thread-127293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:22:12.433 [DEBUG] [Thread-127293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:22:12.442 [DEBUG] [Thread-127293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:22:12.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:22:12.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:22:12.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
2026-02-11T10:22:12.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:22:12.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:22:12.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:22:12.479 [DEBUG] [Thread-127293] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:22:19.094 [DEBUG] [Thread-127295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:22:34.144 [DEBUG] [Thread-127296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:22:42.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:22:42.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:22:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:22:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 22, 31), 13.05, 43.4, 0.0, 22.04, 22.42, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:22:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:22:31
2026-02-11T10:22:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:22:45.009 [DEBUG] [Thread-127297] [transport.py] [_log()] starting thread (client mode): 0xa2dc6c80
2026-02-11T10:22:45.009 [DEBUG] [Thread-127297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:22:45.029 [DEBUG] [Thread-127297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:22:45.029 [INFO] [Thread-127297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] client lang: <none>
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] server lang: <none>
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] kex follows: False
2026-02-11T10:22:45.032 [DEBUG] [Thread-127297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:22:45.033 [DEBUG] [Thread-127297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:22:45.033 [DEBUG] [Thread-127297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:22:45.033 [DEBUG] [Thread-127297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:22:45.033 [DEBUG] [Thread-127297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:22:45.033 [DEBUG] [Thread-127297] [transport.py] [_log()] Compression: none
2026-02-11T10:22:45.033 [DEBUG] [Thread-127297] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:22:45.049 [DEBUG] [Thread-127297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:22:45.050 [DEBUG] [Thread-127297] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:22:45.050 [DEBUG] [Thread-127297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:22:45.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:22:45.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:22:45.052 [DEBUG] [Thread-127297] [transport.py] [_log()] userauth is OK
2026-02-11T10:22:45.053 [DEBUG] [Thread-127297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:22:45.053 [DEBUG] [Thread-127297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:22:45.053 [DEBUG] [Thread-127297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:22:45.053 [DEBUG] [Thread-127297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:22:45.078 [INFO] [Thread-127297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:22:45.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:22:45.723 [DEBUG] [Thread-127297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:22:45.723 [DEBUG] [Thread-127297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:22:45.723 [DEBUG] [Thread-127297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:22:45.763 [DEBUG] [Thread-127297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:22:45.763 [DEBUG] [Thread-127297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:22:45.766 [DEBUG] [Thread-127297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:22:45.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:22:45.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:22:45.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:22:45.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:22:45.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:22:45.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:22:45.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:22:45.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:22:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:22:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.348750 -999.00  +21.80  14.62     50  +11.10 1 2 1 1 1   888    0 10.59 0.46 ----- 12.2 14.6 299.0 18.2 27.9 -17.3 27.0 -16.5 25.8 -15.2 26.5 -14.9
2026-02-11T10:22:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:22:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:22:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.348750
2026-02-11T10:22:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:22:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:22:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:22:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:22:45.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:22:45.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:22:31', tmtdew=13.05, humidity=43.4, cloud=0.0, wind=22.04, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:22:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:22:45.794 [DEBUG] [Thread-127297] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:22:45.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:22:45.890 [DEBUG] [Thread-127300] [transport.py] [_log()] starting thread (client mode): 0xa2dc35b0
2026-02-11T10:22:45.890 [DEBUG] [Thread-127300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:22:45.904 [DEBUG] [Thread-127300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:22:45.905 [INFO] [Thread-127300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:22:45.912 [DEBUG] [Thread-127300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:22:45.913 [DEBUG] [Thread-127300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] client lang: <none>
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] server lang: <none>
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] kex follows: False
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:22:45.914 [DEBUG] [Thread-127300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:22:45.915 [DEBUG] [Thread-127300] [transport.py] [_log()] Compression: none
2026-02-11T10:22:45.915 [DEBUG] [Thread-127300] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:22:45.974 [DEBUG] [Thread-127300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:22:45.974 [DEBUG] [Thread-127300] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:22:45.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:22:45.976 [DEBUG] [Thread-127300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:22:45.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:22:46.033 [DEBUG] [Thread-127300] [transport.py] [_log()] userauth is OK
2026-02-11T10:22:46.033 [DEBUG] [Thread-127300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:22:46.033 [DEBUG] [Thread-127300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:22:46.034 [DEBUG] [Thread-127300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:22:46.034 [DEBUG] [Thread-127300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:22:46.054 [INFO] [Thread-127300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:22:46.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:22:46.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:22:46.901 [DEBUG] [Thread-127300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:22:46.901 [DEBUG] [Thread-127300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:22:46.949 [DEBUG] [Thread-127300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:22:46.949 [DEBUG] [Thread-127300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:22:46.958 [DEBUG] [Thread-127300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:22:46.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:22:46.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:22:46.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:22:46.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:22:46.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:22:46.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:22:46.992 [DEBUG] [Thread-127300] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:22:49.184 [DEBUG] [Thread-127302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:22:49.974 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:22:49.976 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:04.235 [DEBUG] [Thread-127303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:08.366 [DEBUG] [Thread-127304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:17.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:23:17.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:23:17.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:23:18.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 23, 6), 13.08, 43.28, 0.0, 19.06, 22.37, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:23:18.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:23:06
2026-02-11T10:23:19.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:23:19.269 [DEBUG] [Thread-127305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:19.350 [DEBUG] [Thread-127306] [transport.py] [_log()] starting thread (client mode): 0xa57b2f80
2026-02-11T10:23:19.350 [DEBUG] [Thread-127306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:23:19.370 [DEBUG] [Thread-127306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:23:19.370 [INFO] [Thread-127306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:23:19.373 [DEBUG] [Thread-127306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:23:19.373 [DEBUG] [Thread-127306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] client lang: <none>
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] server lang: <none>
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] kex follows: False
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] Compression: none
2026-02-11T10:23:19.374 [DEBUG] [Thread-127306] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:23:19.392 [DEBUG] [Thread-127306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:23:19.392 [DEBUG] [Thread-127306] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:23:19.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:23:19.393 [DEBUG] [Thread-127306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:23:19.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:23:19.395 [DEBUG] [Thread-127306] [transport.py] [_log()] userauth is OK
2026-02-11T10:23:19.395 [DEBUG] [Thread-127306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:23:19.396 [DEBUG] [Thread-127306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:23:19.396 [DEBUG] [Thread-127306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:23:19.396 [DEBUG] [Thread-127306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:23:19.420 [INFO] [Thread-127306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:23:19.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:23:20.051 [DEBUG] [Thread-127306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:23:20.051 [DEBUG] [Thread-127306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:23:20.051 [DEBUG] [Thread-127306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:23:20.093 [DEBUG] [Thread-127306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:23:20.093 [DEBUG] [Thread-127306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:23:20.097 [DEBUG] [Thread-127306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:23:20.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:23:20.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:23:20.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:23:20.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:23:20.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:23:20.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:23:20.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:23:20.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:23:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:23:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.349097 -999.00  +22.20  15.84     49  +11.20 1 2 1 1 1   888    0 10.90 -0.54 ----- 12.9 15.8 293.4 20.5 28.2 -18.6 27.3 -15.9 25.8 -17.8 26.5 -17.5
2026-02-11T10:23:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:23:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:23:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.349097
2026-02-11T10:23:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:23:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:23:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:23:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:23:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:23:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:23:06', tmtdew=13.08, humidity=43.28, cloud=0.0, wind=19.06, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:22:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:23:20.124 [DEBUG] [Thread-127306] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:23:20.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:23:20.220 [DEBUG] [Thread-127309] [transport.py] [_log()] starting thread (client mode): 0xa57b0f40
2026-02-11T10:23:20.220 [DEBUG] [Thread-127309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:23:20.234 [DEBUG] [Thread-127309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:23:20.234 [INFO] [Thread-127309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] client lang: <none>
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] server lang: <none>
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] kex follows: False
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] Compression: none
2026-02-11T10:23:20.242 [DEBUG] [Thread-127309] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:23:20.300 [DEBUG] [Thread-127309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:23:20.300 [DEBUG] [Thread-127309] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:23:20.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:23:20.301 [DEBUG] [Thread-127309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:23:20.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:23:20.357 [DEBUG] [Thread-127309] [transport.py] [_log()] userauth is OK
2026-02-11T10:23:20.357 [DEBUG] [Thread-127309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:23:20.357 [DEBUG] [Thread-127309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:23:20.357 [DEBUG] [Thread-127309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:23:20.357 [DEBUG] [Thread-127309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:23:20.377 [INFO] [Thread-127309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:23:20.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:23:20.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:23:21.193 [DEBUG] [Thread-127309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:23:21.193 [DEBUG] [Thread-127309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:23:21.243 [DEBUG] [Thread-127309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:23:21.243 [DEBUG] [Thread-127309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:23:21.253 [DEBUG] [Thread-127309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:23:21.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:23:21.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:23: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') -> 00000000
2026-02-11T10:23:21.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:23:21.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:23:21.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:23:21.291 [DEBUG] [Thread-127309] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:23:34.303 [DEBUG] [Thread-127311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:49.356 [DEBUG] [Thread-127312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:50.116 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:50.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:23:51.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:23:51.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:23:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:23:53.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 23, 41), 13.5, 42.3, 0.0, 24.17, 23.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:23:53.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:23:41
2026-02-11T10:23:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:23:54.074 [DEBUG] [Thread-127313] [transport.py] [_log()] starting thread (client mode): 0xa57e2ad0
2026-02-11T10:23:54.074 [DEBUG] [Thread-127313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:23:54.095 [DEBUG] [Thread-127313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:23:54.095 [INFO] [Thread-127313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] client lang: <none>
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] server lang: <none>
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] kex follows: False
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:23:54.098 [DEBUG] [Thread-127313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:23:54.099 [DEBUG] [Thread-127313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:23:54.099 [DEBUG] [Thread-127313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:23:54.099 [DEBUG] [Thread-127313] [transport.py] [_log()] Compression: none
2026-02-11T10:23:54.099 [DEBUG] [Thread-127313] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:23:54.115 [DEBUG] [Thread-127313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:23:54.115 [DEBUG] [Thread-127313] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:23:54.115 [DEBUG] [Thread-127313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:23:54.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:23:54.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:23:54.116 [DEBUG] [Thread-127313] [transport.py] [_log()] userauth is OK
2026-02-11T10:23:54.116 [DEBUG] [Thread-127313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:23:54.116 [DEBUG] [Thread-127313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:23:54.116 [DEBUG] [Thread-127313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:23:54.116 [DEBUG] [Thread-127313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:23:54.125 [INFO] [Thread-127313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:23:54.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:23:54.749 [DEBUG] [Thread-127313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:23:54.750 [DEBUG] [Thread-127313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:23:54.750 [DEBUG] [Thread-127313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:23:54.790 [DEBUG] [Thread-127313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:23:54.791 [DEBUG] [Thread-127313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:23:54.794 [DEBUG] [Thread-127313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:23:54.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:23:54.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:23:54.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:23:54.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:23:54.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:23:54.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:23:54.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:23:54.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:23:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:23:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.349792 -999.00  +21.80  10.92     50  +11.00 1 2 1 1 1   888    0 10.65 0.23 ----- 12.2 10.9 282.6 21.5 27.4 -22.6 26.9 -21.6 25.3 -19.9 26.0 -19.1
2026-02-11T10:23:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:23:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:23:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.349792
2026-02-11T10:23:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:23:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:23:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:23:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:23:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:23:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:23:41', tmtdew=13.5, humidity=42.3, cloud=0.0, wind=24.17, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:23:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:23:54.824 [DEBUG] [Thread-127313] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:23:54.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:23:54.929 [DEBUG] [Thread-127316] [transport.py] [_log()] starting thread (client mode): 0xa2df89a0
2026-02-11T10:23:54.929 [DEBUG] [Thread-127316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:23:54.946 [DEBUG] [Thread-127316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:23:54.946 [INFO] [Thread-127316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:23:54.956 [DEBUG] [Thread-127316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] client lang: <none>
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] server lang: <none>
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] kex follows: False
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:23:54.957 [DEBUG] [Thread-127316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:23:54.958 [DEBUG] [Thread-127316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:23:54.958 [DEBUG] [Thread-127316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:23:54.958 [DEBUG] [Thread-127316] [transport.py] [_log()] Compression: none
2026-02-11T10:23:54.958 [DEBUG] [Thread-127316] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:23:55.016 [DEBUG] [Thread-127316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:23:55.017 [DEBUG] [Thread-127316] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:23:55.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:23:55.018 [DEBUG] [Thread-127316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:23:55.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:23:55.075 [DEBUG] [Thread-127316] [transport.py] [_log()] userauth is OK
2026-02-11T10:23:55.076 [DEBUG] [Thread-127316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:23:55.076 [DEBUG] [Thread-127316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:23:55.076 [DEBUG] [Thread-127316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:23:55.076 [DEBUG] [Thread-127316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:23:55.096 [INFO] [Thread-127316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:23:55.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:23:55.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:23:55.960 [DEBUG] [Thread-127316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:23:55.960 [DEBUG] [Thread-127316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:23:56.017 [DEBUG] [Thread-127316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:23:56.017 [DEBUG] [Thread-127316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:23:56.032 [DEBUG] [Thread-127316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:23:56.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:23:56.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:23:56.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:23:56.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:23:56.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:23:56.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:23:56.108 [DEBUG] [Thread-127316] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:24:04.393 [DEBUG] [Thread-127318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:24:08.410 [DEBUG] [Thread-127319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:24:19.437 [DEBUG] [Thread-127320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:24:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:24:26.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:24:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:24:28.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 24, 18), 13.19, 43.15, 0.0, 14.66, 22.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:24:28.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:24:18
2026-02-11T10:24:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:24:28.711 [DEBUG] [Thread-127321] [transport.py] [_log()] starting thread (client mode): 0xa2dc2d40
2026-02-11T10:24:28.711 [DEBUG] [Thread-127321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:24:28.731 [DEBUG] [Thread-127321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:24:28.731 [INFO] [Thread-127321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:24:28.734 [DEBUG] [Thread-127321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] client lang: <none>
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] server lang: <none>
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] kex follows: False
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] Compression: none
2026-02-11T10:24:28.735 [DEBUG] [Thread-127321] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:24:28.751 [DEBUG] [Thread-127321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:24:28.751 [DEBUG] [Thread-127321] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:24:28.752 [DEBUG] [Thread-127321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:24:28.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:24:28.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:24:28.754 [DEBUG] [Thread-127321] [transport.py] [_log()] userauth is OK
2026-02-11T10:24:28.754 [DEBUG] [Thread-127321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:24:28.754 [DEBUG] [Thread-127321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:24:28.754 [DEBUG] [Thread-127321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:24:28.754 [DEBUG] [Thread-127321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:24:28.783 [INFO] [Thread-127321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:24:28.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:24:29.380 [DEBUG] [Thread-127321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:24:29.380 [DEBUG] [Thread-127321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:24:29.380 [DEBUG] [Thread-127321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:24:29.421 [DEBUG] [Thread-127321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:24:29.422 [DEBUG] [Thread-127321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:24:29.425 [DEBUG] [Thread-127321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:24:29.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:24:29.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:24:29.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:24:29.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:24:29.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:24:29.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:24:29.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:24:29.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:24:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:24:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.350139 -999.00  +21.60  13.10     50  +10.90 1 2 1 1 1   888    0 10.32 -1.34 ----- 11.2 13.1 292.0 17.5 27.2 -21.4 26.7 -20.8 25.3 -18.0 25.9 -18.4
2026-02-11T10:24:29.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:24:29.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:24:29.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.350139
2026-02-11T10:24:29.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:24:29.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:24:29.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:24:29.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:24:29.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:24:29.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:24:18', tmtdew=13.19, humidity=43.15, cloud=0.0, wind=14.66, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:24:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:24:29.450 [DEBUG] [Thread-127321] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:24:29.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:24:29.561 [DEBUG] [Thread-127324] [transport.py] [_log()] starting thread (client mode): 0xa57b2a70
2026-02-11T10:24:29.561 [DEBUG] [Thread-127324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:24:29.579 [DEBUG] [Thread-127324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:24:29.579 [INFO] [Thread-127324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:24:29.587 [DEBUG] [Thread-127324] [transport.py] [_log()] client lang: <none>
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] server lang: <none>
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] kex follows: False
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] Compression: none
2026-02-11T10:24:29.588 [DEBUG] [Thread-127324] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:24:29.652 [DEBUG] [Thread-127324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:24:29.653 [DEBUG] [Thread-127324] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:24:29.653 [DEBUG] [Thread-127324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:24:29.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:24:29.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:24:29.714 [DEBUG] [Thread-127324] [transport.py] [_log()] userauth is OK
2026-02-11T10:24:29.714 [DEBUG] [Thread-127324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:24:29.715 [DEBUG] [Thread-127324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:24:29.715 [DEBUG] [Thread-127324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:24:29.715 [DEBUG] [Thread-127324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:24:29.740 [INFO] [Thread-127324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:24:29.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:24:29.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:24:30.678 [DEBUG] [Thread-127324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:24:30.678 [DEBUG] [Thread-127324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:24:30.726 [DEBUG] [Thread-127324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:24:30.727 [DEBUG] [Thread-127324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:24:30.736 [DEBUG] [Thread-127324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:24:30.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:24:30.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:24:30.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:24:30.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:24:30.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:24:30.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:24:30.773 [DEBUG] [Thread-127324] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:24:34.474 [DEBUG] [Thread-127326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:24:49.528 [DEBUG] [Thread-127327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:24:50.260 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:24:50.261 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:25:00.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:25:00.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:25:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:25:02.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 24, 53), 13.26, 42.83, 0.0, 14.91, 22.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:25:02.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:24:53
2026-02-11T10:25:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:25:03.141 [DEBUG] [Thread-127328] [transport.py] [_log()] starting thread (client mode): 0xa57b24d0
2026-02-11T10:25:03.141 [DEBUG] [Thread-127328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:25:03.161 [DEBUG] [Thread-127328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:25:03.161 [INFO] [Thread-127328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:03.164 [DEBUG] [Thread-127328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] client lang: <none>
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] server lang: <none>
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] kex follows: False
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] Compression: none
2026-02-11T10:25:03.165 [DEBUG] [Thread-127328] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:25:03.183 [DEBUG] [Thread-127328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:25:03.183 [DEBUG] [Thread-127328] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:25:03.184 [DEBUG] [Thread-127328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:25:03.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:25:03.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:25:03.185 [DEBUG] [Thread-127328] [transport.py] [_log()] userauth is OK
2026-02-11T10:25:03.185 [DEBUG] [Thread-127328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:25:03.186 [DEBUG] [Thread-127328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:25:03.186 [DEBUG] [Thread-127328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:25:03.186 [DEBUG] [Thread-127328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:25:03.209 [INFO] [Thread-127328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:25:03.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:25:04.565 [DEBUG] [Thread-127330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:25:08.463 [DEBUG] [Thread-127331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:25:08.820 [DEBUG] [Thread-127328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:25:08.821 [DEBUG] [Thread-127328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:25:08.821 [DEBUG] [Thread-127328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:25:08.861 [DEBUG] [Thread-127328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:25:08.861 [DEBUG] [Thread-127328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:25:08.864 [DEBUG] [Thread-127328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:25:08.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:25:08.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:25:08.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:25:08.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:25:08.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:25:08.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:25:08.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:25:08.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:25:08.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:25:08.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.350486 -999.00  +21.60  13.82     50  +11.00 1 2 1 1 1   888    0 10.67 -3.72 ----- 17.0 13.8 271.0 17.6 26.9 -20.6 26.5 -20.1 25.3 -17.5 25.9 -17.0
2026-02-11T10:25:08.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:25:08.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:25:08.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.350486
2026-02-11T10:25:08.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:25:08.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:25:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:25:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:25:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:25:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:24:53', tmtdew=13.26, humidity=42.83, cloud=0.0, wind=14.91, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:24:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:25:08.993 [DEBUG] [Thread-127328] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:25:09.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:25:09.087 [DEBUG] [Thread-127333] [transport.py] [_log()] starting thread (client mode): 0xa2d57ca0
2026-02-11T10:25:09.088 [DEBUG] [Thread-127333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:25:09.104 [DEBUG] [Thread-127333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:25:09.104 [INFO] [Thread-127333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:09.112 [DEBUG] [Thread-127333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] client lang: <none>
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] server lang: <none>
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] kex follows: False
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] Compression: none
2026-02-11T10:25:09.113 [DEBUG] [Thread-127333] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:25:09.170 [DEBUG] [Thread-127333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:25:09.171 [DEBUG] [Thread-127333] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:25:09.171 [DEBUG] [Thread-127333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:25:09.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:25:09.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:25:09.230 [DEBUG] [Thread-127333] [transport.py] [_log()] userauth is OK
2026-02-11T10:25:09.230 [DEBUG] [Thread-127333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:25:09.230 [DEBUG] [Thread-127333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:25:09.230 [DEBUG] [Thread-127333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:25:09.231 [DEBUG] [Thread-127333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:25:09.249 [INFO] [Thread-127333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:25:09.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:25:09.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:25:10.089 [DEBUG] [Thread-127333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:25:10.090 [DEBUG] [Thread-127333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:25:10.137 [DEBUG] [Thread-127333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:25:10.137 [DEBUG] [Thread-127333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:25:10.147 [DEBUG] [Thread-127333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:25:10.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:25: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')
2026-02-11T10:25:10.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:25:10.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:25:10.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:25:10.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:25:10.182 [DEBUG] [Thread-127333] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:25:19.604 [DEBUG] [Thread-127335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:25:34.652 [DEBUG] [Thread-127336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:25:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:25:40.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:25:40.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:25:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 25, 29), 13.08, 43.3, 0.0, 15.42, 22.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:25:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:25:29
2026-02-11T10:25:42.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:25:42.634 [DEBUG] [Thread-127337] [transport.py] [_log()] starting thread (client mode): 0xa2dc73a0
2026-02-11T10:25:42.634 [DEBUG] [Thread-127337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:25:42.653 [DEBUG] [Thread-127337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:25:42.653 [INFO] [Thread-127337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:25:42.657 [DEBUG] [Thread-127337] [transport.py] [_log()] client lang: <none>
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] server lang: <none>
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] kex follows: False
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] Compression: none
2026-02-11T10:25:42.658 [DEBUG] [Thread-127337] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:25:42.675 [DEBUG] [Thread-127337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:25:42.675 [DEBUG] [Thread-127337] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:25:42.675 [DEBUG] [Thread-127337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:25:42.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:25:42.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:25:42.677 [DEBUG] [Thread-127337] [transport.py] [_log()] userauth is OK
2026-02-11T10:25:42.678 [DEBUG] [Thread-127337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:25:42.678 [DEBUG] [Thread-127337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:25:42.678 [DEBUG] [Thread-127337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:25:42.678 [DEBUG] [Thread-127337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:25:42.697 [INFO] [Thread-127337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:25:42.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:25:43.311 [DEBUG] [Thread-127337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:25:43.311 [DEBUG] [Thread-127337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:25:43.312 [DEBUG] [Thread-127337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:25:43.352 [DEBUG] [Thread-127337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:25:43.352 [DEBUG] [Thread-127337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:25:43.355 [DEBUG] [Thread-127337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:25:43.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:25:43.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:25:43.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:25:43.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:25:43.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:25:43.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:25:43.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:25:43.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:25:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:25:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.350833 -999.00  +21.70  18.01     50  +11.10 1 2 1 1 1   888    0 10.26 -6.03 ----- 23.4 18.0 297.1 22.9 27.3 -15.7 26.5 -16.9 25.7 -13.3 26.4 -13.1
2026-02-11T10:25:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:25:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:25:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.350833
2026-02-11T10:25:43.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:25:43.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:25:43.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:25:43.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:25:43.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:25:43.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:25:29', tmtdew=13.08, humidity=43.3, cloud=0.0, wind=15.42, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:25:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:25:43.377 [DEBUG] [Thread-127337] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:25:43.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:25:43.478 [DEBUG] [Thread-127340] [transport.py] [_log()] starting thread (client mode): 0xa2d02f80
2026-02-11T10:25:43.478 [DEBUG] [Thread-127340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:25:43.493 [DEBUG] [Thread-127340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:25:43.493 [INFO] [Thread-127340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:25:43.506 [DEBUG] [Thread-127340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:25:43.506 [DEBUG] [Thread-127340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:25:43.506 [DEBUG] [Thread-127340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] client lang: <none>
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] server lang: <none>
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] kex follows: False
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:25:43.507 [DEBUG] [Thread-127340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:25:43.508 [DEBUG] [Thread-127340] [transport.py] [_log()] Compression: none
2026-02-11T10:25:43.508 [DEBUG] [Thread-127340] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:25:43.560 [DEBUG] [Thread-127340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:25:43.560 [DEBUG] [Thread-127340] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:25:43.561 [DEBUG] [Thread-127340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:25:43.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:25:43.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:25:43.622 [DEBUG] [Thread-127340] [transport.py] [_log()] userauth is OK
2026-02-11T10:25:43.622 [DEBUG] [Thread-127340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:25:43.622 [DEBUG] [Thread-127340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:25:43.622 [DEBUG] [Thread-127340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:25:43.622 [DEBUG] [Thread-127340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:25:43.642 [INFO] [Thread-127340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:25:43.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:25:43.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:25:44.454 [DEBUG] [Thread-127340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:25:44.455 [DEBUG] [Thread-127340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:25:44.502 [DEBUG] [Thread-127340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:25:44.503 [DEBUG] [Thread-127340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:25:44.512 [DEBUG] [Thread-127340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:25:44.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:25:44.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:25:44.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:25:44.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:25:44.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:25:44.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:25:44.553 [DEBUG] [Thread-127340] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:25:49.692 [DEBUG] [Thread-127342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:25:50.404 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:25:50.406 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:04.745 [DEBUG] [Thread-127343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:08.531 [DEBUG] [Thread-127344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:26:14.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:26:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:26:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 26, 4), 13.07, 43.35, 0.0, 20.13, 22.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:26:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:26:04
2026-02-11T10:26:17.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:26:17.229 [DEBUG] [Thread-127345] [transport.py] [_log()] starting thread (client mode): 0xa2dc3b20
2026-02-11T10:26:17.229 [DEBUG] [Thread-127345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:26:17.248 [DEBUG] [Thread-127345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:26:17.249 [INFO] [Thread-127345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:26:17.252 [DEBUG] [Thread-127345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:26:17.252 [DEBUG] [Thread-127345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:26:17.252 [DEBUG] [Thread-127345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] client lang: <none>
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] server lang: <none>
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] kex follows: False
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] Compression: none
2026-02-11T10:26:17.253 [DEBUG] [Thread-127345] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:26:17.270 [DEBUG] [Thread-127345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:26:17.271 [DEBUG] [Thread-127345] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:26:17.271 [DEBUG] [Thread-127345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:26:17.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:26:17.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:26:17.273 [DEBUG] [Thread-127345] [transport.py] [_log()] userauth is OK
2026-02-11T10:26:17.273 [DEBUG] [Thread-127345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:26:17.274 [DEBUG] [Thread-127345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:26:17.274 [DEBUG] [Thread-127345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:26:17.274 [DEBUG] [Thread-127345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:26:17.291 [INFO] [Thread-127345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:26:17.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:26:18.103 [DEBUG] [Thread-127345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:26:18.103 [DEBUG] [Thread-127345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:26:18.104 [DEBUG] [Thread-127345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:26:18.145 [DEBUG] [Thread-127345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:26:18.145 [DEBUG] [Thread-127345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:26:18.148 [DEBUG] [Thread-127345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:26:18.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:26:18.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:26:18.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:26:18.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:26:18.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:26:18.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:26:18.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:26:18.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:26:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:26:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.351181 -999.00  +21.80  20.58     50  +10.90 1 2 1 1 1   888    0 10.35 -7.57 ----- 21.2 20.6 291.8 27.4 27.7 -15.7 26.9 -14.1 25.7 -15.8 26.5 -14.0
2026-02-11T10:26:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:26:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:26:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.351181
2026-02-11T10:26:18.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:26:18.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:26:18.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:26:18.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:26:18.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:26:18.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:26:04', tmtdew=13.07, humidity=43.35, cloud=0.0, wind=20.13, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:25:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:26:18.173 [DEBUG] [Thread-127345] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:26:18.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:26:18.270 [DEBUG] [Thread-127348] [transport.py] [_log()] starting thread (client mode): 0xa5759ba0
2026-02-11T10:26:18.270 [DEBUG] [Thread-127348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:26:18.285 [DEBUG] [Thread-127348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:26:18.285 [INFO] [Thread-127348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:26:18.293 [DEBUG] [Thread-127348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:26:18.293 [DEBUG] [Thread-127348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:26:18.293 [DEBUG] [Thread-127348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:26:18.293 [DEBUG] [Thread-127348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:18.293 [DEBUG] [Thread-127348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] client lang: <none>
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] server lang: <none>
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] kex follows: False
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] Compression: none
2026-02-11T10:26:18.294 [DEBUG] [Thread-127348] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:26:18.352 [DEBUG] [Thread-127348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:26:18.352 [DEBUG] [Thread-127348] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:26:18.352 [DEBUG] [Thread-127348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:26:18.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:26:18.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:26:18.413 [DEBUG] [Thread-127348] [transport.py] [_log()] userauth is OK
2026-02-11T10:26:18.413 [DEBUG] [Thread-127348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:26:18.413 [DEBUG] [Thread-127348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:26:18.413 [DEBUG] [Thread-127348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:26:18.413 [DEBUG] [Thread-127348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:26:18.432 [INFO] [Thread-127348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:26:18.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:26:18.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:26:19.272 [DEBUG] [Thread-127348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:26:19.272 [DEBUG] [Thread-127348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:26:19.320 [DEBUG] [Thread-127348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:26:19.320 [DEBUG] [Thread-127348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:26:19.329 [DEBUG] [Thread-127348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:26:19.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:26:19.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:26:19.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
2026-02-11T10:26:19.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:26:19.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:26:19.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:26:19.364 [DEBUG] [Thread-127348] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:26:19.775 [DEBUG] [Thread-127350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:34.818 [DEBUG] [Thread-127351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:26:49.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:26:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:26:49.854 [DEBUG] [Thread-127352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:50.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:50.547 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:26:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 26, 41), 13.8, 41.54, 0.0, 22.16, 23.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:26:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:26:41
2026-02-11T10:26:51.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:26:51.776 [DEBUG] [Thread-127353] [transport.py] [_log()] starting thread (client mode): 0xa2d567a0
2026-02-11T10:26:51.776 [DEBUG] [Thread-127353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:26:51.796 [DEBUG] [Thread-127353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:26:51.796 [INFO] [Thread-127353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:26:51.799 [DEBUG] [Thread-127353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:26:51.799 [DEBUG] [Thread-127353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:26:51.799 [DEBUG] [Thread-127353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:26:51.799 [DEBUG] [Thread-127353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:51.799 [DEBUG] [Thread-127353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:51.799 [DEBUG] [Thread-127353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] client lang: <none>
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] server lang: <none>
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] kex follows: False
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] Compression: none
2026-02-11T10:26:51.800 [DEBUG] [Thread-127353] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:26:51.818 [DEBUG] [Thread-127353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:26:51.818 [DEBUG] [Thread-127353] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:26:51.818 [DEBUG] [Thread-127353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:26:51.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:26:51.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:26:51.818 [DEBUG] [Thread-127353] [transport.py] [_log()] userauth is OK
2026-02-11T10:26:51.818 [DEBUG] [Thread-127353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:26:51.818 [DEBUG] [Thread-127353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:26:51.818 [DEBUG] [Thread-127353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:26:51.819 [DEBUG] [Thread-127353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:26:51.828 [INFO] [Thread-127353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:26:51.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:26:52.463 [DEBUG] [Thread-127353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:26:52.464 [DEBUG] [Thread-127353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:26:52.464 [DEBUG] [Thread-127353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:26:52.504 [DEBUG] [Thread-127353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:26:52.504 [DEBUG] [Thread-127353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:26:52.507 [DEBUG] [Thread-127353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:26:52.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:26:52.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:26:52.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:26:52.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:26:52.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:26:52.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:26:52.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:26:52.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:26:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:26:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.351528 -999.00  +21.80  19.91     50  +11.10 1 2 1 1 1   888    0 10.55 -8.35 ----- 23.2 19.9 293.6 21.5 27.9 -15.9 27.1 -15.3 25.9 -14.1 26.7 -13.7
2026-02-11T10:26:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:26:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:26:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.351528
2026-02-11T10:26:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:26:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:26:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:26:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:26:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:26:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:26:41', tmtdew=13.8, humidity=41.54, cloud=0.0, wind=22.16, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:26:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:26:52.533 [DEBUG] [Thread-127353] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:26:52.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:26:52.629 [DEBUG] [Thread-127356] [transport.py] [_log()] starting thread (client mode): 0xa81d5db0
2026-02-11T10:26:52.629 [DEBUG] [Thread-127356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:26:52.644 [DEBUG] [Thread-127356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:26:52.644 [INFO] [Thread-127356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:26:52.651 [DEBUG] [Thread-127356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] client lang: <none>
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] server lang: <none>
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] kex follows: False
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:26:52.652 [DEBUG] [Thread-127356] [transport.py] [_log()] Compression: none
2026-02-11T10:26:52.653 [DEBUG] [Thread-127356] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:26:52.708 [DEBUG] [Thread-127356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:26:52.709 [DEBUG] [Thread-127356] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:26:52.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:26:52.710 [DEBUG] [Thread-127356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:26:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:26:52.769 [DEBUG] [Thread-127356] [transport.py] [_log()] userauth is OK
2026-02-11T10:26:52.769 [DEBUG] [Thread-127356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:26:52.769 [DEBUG] [Thread-127356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:26:52.769 [DEBUG] [Thread-127356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:26:52.769 [DEBUG] [Thread-127356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:26:52.788 [INFO] [Thread-127356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:26:52.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:26:52.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:26:53.596 [DEBUG] [Thread-127356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:26:53.596 [DEBUG] [Thread-127356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:26:53.644 [DEBUG] [Thread-127356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:26:53.645 [DEBUG] [Thread-127356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:26:53.654 [DEBUG] [Thread-127356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:26:53.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:26:53.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:26:53.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:26:53.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:26:53.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:26:53.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:26:53.691 [DEBUG] [Thread-127356] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:27:04.890 [DEBUG] [Thread-127358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:27:08.598 [DEBUG] [Thread-127359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:27:19.942 [DEBUG] [Thread-127360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:27:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:27:23.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:27: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
2026-02-11T10:27:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 27, 16), 13.25, 42.74, 0.0, 21.3, 22.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:27:25.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:27:16
2026-02-11T10:27:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:27:26.161 [DEBUG] [Thread-127361] [transport.py] [_log()] starting thread (client mode): 0xa57e3be0
2026-02-11T10:27:26.161 [DEBUG] [Thread-127361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:27:26.182 [DEBUG] [Thread-127361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:27:26.182 [INFO] [Thread-127361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] client lang: <none>
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] server lang: <none>
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] kex follows: False
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:27:26.183 [DEBUG] [Thread-127361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:27:26.184 [DEBUG] [Thread-127361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:27:26.184 [DEBUG] [Thread-127361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:27:26.184 [DEBUG] [Thread-127361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:27:26.184 [DEBUG] [Thread-127361] [transport.py] [_log()] Compression: none
2026-02-11T10:27:26.184 [DEBUG] [Thread-127361] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:27:26.192 [DEBUG] [Thread-127361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:27:26.192 [DEBUG] [Thread-127361] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:27:26.193 [DEBUG] [Thread-127361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:27:26.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:27:26.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:27:26.194 [DEBUG] [Thread-127361] [transport.py] [_log()] userauth is OK
2026-02-11T10:27:26.194 [DEBUG] [Thread-127361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:27:26.194 [DEBUG] [Thread-127361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:27:26.195 [DEBUG] [Thread-127361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:27:26.195 [DEBUG] [Thread-127361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:27:26.216 [INFO] [Thread-127361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:27:26.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:27:26.858 [DEBUG] [Thread-127361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:27:26.858 [DEBUG] [Thread-127361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:27:26.859 [DEBUG] [Thread-127361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:27:26.900 [DEBUG] [Thread-127361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:27:26.900 [DEBUG] [Thread-127361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:27:26.904 [DEBUG] [Thread-127361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:27:26.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:27:26.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:27:26.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:27:26.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:27:26.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:27:26.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:27:26.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:27:26.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:27:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:27:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.351875 -999.00  +21.80  20.31     50  +11.00 1 2 1 1 1   888    0 10.44 -8.83 ----- 18.3 20.3 272.6 27.9 28.1 -16.8 27.3 -15.4 25.7 -16.8 26.7 -15.0
2026-02-11T10:27:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:27:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:27:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.351875
2026-02-11T10:27:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:27:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:27:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:27:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:27:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:27:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:27:16', tmtdew=13.25, humidity=42.74, cloud=0.0, wind=21.3, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:26:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:27:26.933 [DEBUG] [Thread-127361] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:27:27.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:27:27.030 [DEBUG] [Thread-127364] [transport.py] [_log()] starting thread (client mode): 0xa2d578e0
2026-02-11T10:27:27.031 [DEBUG] [Thread-127364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:27:27.045 [DEBUG] [Thread-127364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:27:27.046 [INFO] [Thread-127364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:27:27.053 [DEBUG] [Thread-127364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] client lang: <none>
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] server lang: <none>
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] kex follows: False
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:27:27.054 [DEBUG] [Thread-127364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:27:27.055 [DEBUG] [Thread-127364] [transport.py] [_log()] Compression: none
2026-02-11T10:27:27.055 [DEBUG] [Thread-127364] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:27:27.112 [DEBUG] [Thread-127364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:27:27.113 [DEBUG] [Thread-127364] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:27:27.113 [DEBUG] [Thread-127364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:27:27.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:27:27.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:27:27.168 [DEBUG] [Thread-127364] [transport.py] [_log()] userauth is OK
2026-02-11T10:27:27.168 [DEBUG] [Thread-127364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:27:27.168 [DEBUG] [Thread-127364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:27:27.168 [DEBUG] [Thread-127364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:27:27.169 [DEBUG] [Thread-127364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:27:27.188 [INFO] [Thread-127364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:27:27.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:27:27.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:27:28.041 [DEBUG] [Thread-127364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:27:28.041 [DEBUG] [Thread-127364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:27:28.089 [DEBUG] [Thread-127364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:27:28.089 [DEBUG] [Thread-127364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:27:28.099 [DEBUG] [Thread-127364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:27:28.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:27:28.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')
2026-02-11T10:27:28.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:27:28.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:27:28.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:27:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:27:28.134 [DEBUG] [Thread-127364] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:27:34.980 [DEBUG] [Thread-127366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:27:50.033 [DEBUG] [Thread-127367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:27:50.686 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:27:50.687 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:27:58.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:27:58.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:27:58.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:28:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 27, 52), 12.88, 43.88, 0.0, 13.82, 22.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:28:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:27:52
2026-02-11T10:28:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:28:00.590 [DEBUG] [Thread-127368] [transport.py] [_log()] starting thread (client mode): 0xa575ac80
2026-02-11T10:28:00.590 [DEBUG] [Thread-127368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:28:00.610 [DEBUG] [Thread-127368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:28:00.610 [INFO] [Thread-127368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:28:00.613 [DEBUG] [Thread-127368] [transport.py] [_log()] client lang: <none>
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] server lang: <none>
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] kex follows: False
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] Compression: none
2026-02-11T10:28:00.614 [DEBUG] [Thread-127368] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:28:00.630 [DEBUG] [Thread-127368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:28:00.631 [DEBUG] [Thread-127368] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:28:00.632 [DEBUG] [Thread-127368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:28:00.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:28:00.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:28:00.634 [DEBUG] [Thread-127368] [transport.py] [_log()] userauth is OK
2026-02-11T10:28:00.634 [DEBUG] [Thread-127368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:28:00.634 [DEBUG] [Thread-127368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:28:00.634 [DEBUG] [Thread-127368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:28:00.634 [DEBUG] [Thread-127368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:28:00.659 [INFO] [Thread-127368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:28:00.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:28:01.257 [DEBUG] [Thread-127368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:28:01.257 [DEBUG] [Thread-127368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:28:01.258 [DEBUG] [Thread-127368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:28:01.298 [DEBUG] [Thread-127368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:28:01.299 [DEBUG] [Thread-127368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:28:01.302 [DEBUG] [Thread-127368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:28:01.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:28:01.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:28:01.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:28:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:28:01.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:28:01.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:28:01.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:28:01.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:28:01.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:28:01.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.352570 -999.00  +21.60  22.04     51  +11.00 1 2 1 1 1   888    0 10.32 -9.49 ----- 21.7 22.0 291.7 27.2 28.2 -21.9 27.6 -15.0 25.7 -16.1 26.6 -14.9
2026-02-11T10:28:01.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:28:01.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:28:01.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.352570
2026-02-11T10:28:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:28:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:28:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:28:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:28:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:28:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:27:52', tmtdew=12.88, humidity=43.88, cloud=0.0, wind=13.82, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:27:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:28:01.329 [DEBUG] [Thread-127368] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:28:01.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:28:01.424 [DEBUG] [Thread-127371] [transport.py] [_log()] starting thread (client mode): 0xa57e24a0
2026-02-11T10:28:01.424 [DEBUG] [Thread-127371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:28:01.445 [DEBUG] [Thread-127371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:28:01.446 [INFO] [Thread-127371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:28:01.453 [DEBUG] [Thread-127371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:28:01.454 [DEBUG] [Thread-127371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:28:01.454 [DEBUG] [Thread-127371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:28:01.454 [DEBUG] [Thread-127371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:01.454 [DEBUG] [Thread-127371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:01.454 [DEBUG] [Thread-127371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:01.454 [DEBUG] [Thread-127371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:01.454 [DEBUG] [Thread-127371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] client lang: <none>
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] server lang: <none>
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] kex follows: False
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:28:01.455 [DEBUG] [Thread-127371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:28:01.456 [DEBUG] [Thread-127371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:28:01.456 [DEBUG] [Thread-127371] [transport.py] [_log()] Compression: none
2026-02-11T10:28:01.456 [DEBUG] [Thread-127371] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:28:01.513 [DEBUG] [Thread-127371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:28:01.514 [DEBUG] [Thread-127371] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:28:01.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:28:01.515 [DEBUG] [Thread-127371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:28:01.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:28:01.572 [DEBUG] [Thread-127371] [transport.py] [_log()] userauth is OK
2026-02-11T10:28:01.572 [DEBUG] [Thread-127371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:28:01.572 [DEBUG] [Thread-127371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:28:01.573 [DEBUG] [Thread-127371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:28:01.573 [DEBUG] [Thread-127371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:28:01.592 [INFO] [Thread-127371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:28:01.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:28:01.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:28:02.484 [DEBUG] [Thread-127371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:28:02.484 [DEBUG] [Thread-127371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:28:02.531 [DEBUG] [Thread-127371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:28:02.532 [DEBUG] [Thread-127371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:28:02.541 [DEBUG] [Thread-127371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:28:02.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:28: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')
2026-02-11T10:28: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
2026-02-11T10:28:02.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:28:02.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:28:02.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:28:02.581 [DEBUG] [Thread-127371] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:28:05.072 [DEBUG] [Thread-127373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:28:08.653 [DEBUG] [Thread-127374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:28:20.121 [DEBUG] [Thread-127375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:28:32.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:28:32.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:28:32.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:28:34.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 27, 52), 12.88, 43.88, 0.0, 13.82, 22.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:28:34.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:27:52
2026-02-11T10:28:35.155 [DEBUG] [Thread-127376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:28:35.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:28:35.441 [DEBUG] [Thread-127377] [transport.py] [_log()] starting thread (client mode): 0xa2dc4610
2026-02-11T10:28:35.442 [DEBUG] [Thread-127377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:28:35.461 [DEBUG] [Thread-127377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:28:35.462 [INFO] [Thread-127377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] client lang: <none>
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] server lang: <none>
2026-02-11T10:28:35.465 [DEBUG] [Thread-127377] [transport.py] [_log()] kex follows: False
2026-02-11T10:28:35.466 [DEBUG] [Thread-127377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:28:35.466 [DEBUG] [Thread-127377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:28:35.466 [DEBUG] [Thread-127377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:28:35.466 [DEBUG] [Thread-127377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:28:35.466 [DEBUG] [Thread-127377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:28:35.466 [DEBUG] [Thread-127377] [transport.py] [_log()] Compression: none
2026-02-11T10:28:35.466 [DEBUG] [Thread-127377] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:28:35.485 [DEBUG] [Thread-127377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:28:35.485 [DEBUG] [Thread-127377] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:28:35.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:28:35.487 [DEBUG] [Thread-127377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:28:35.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:28:35.490 [DEBUG] [Thread-127377] [transport.py] [_log()] userauth is OK
2026-02-11T10:28:35.490 [DEBUG] [Thread-127377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:28:35.490 [DEBUG] [Thread-127377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:28:35.491 [DEBUG] [Thread-127377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:28:35.491 [DEBUG] [Thread-127377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:28:35.513 [INFO] [Thread-127377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:28:35.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:28:36.139 [DEBUG] [Thread-127377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:28:36.139 [DEBUG] [Thread-127377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:28:36.139 [DEBUG] [Thread-127377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:28:36.179 [DEBUG] [Thread-127377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:28:36.180 [DEBUG] [Thread-127377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:28:36.183 [DEBUG] [Thread-127377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:28:36.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:28:36.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:28:36.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:28:36.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:28:36.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:28:36.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:28:36.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:28:36.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:28:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:28:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.352917 -999.00  +21.70  20.96     51  +11.10 1 2 1 1 1   888    0 10.43 -9.82 ----- 22.0 21.0 286.0 30.9 28.3 -17.0 27.6 -15.6 25.9 -16.0 26.9 -14.0
2026-02-11T10:28:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:28:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:28:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.352917
2026-02-11T10:28:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:28:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:28:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:28:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:28:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:28:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:27:52', tmtdew=12.88, humidity=43.88, cloud=0.0, wind=13.82, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:28:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:28:36.210 [DEBUG] [Thread-127377] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:28:36.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:28:36.306 [DEBUG] [Thread-127380] [transport.py] [_log()] starting thread (client mode): 0xa57b32e0
2026-02-11T10:28:36.306 [DEBUG] [Thread-127380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:28:36.320 [DEBUG] [Thread-127380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:28:36.320 [INFO] [Thread-127380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:28:36.330 [DEBUG] [Thread-127380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:28:36.330 [DEBUG] [Thread-127380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:28:36.330 [DEBUG] [Thread-127380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:28:36.330 [DEBUG] [Thread-127380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:36.330 [DEBUG] [Thread-127380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:28:36.330 [DEBUG] [Thread-127380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:36.330 [DEBUG] [Thread-127380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] client lang: <none>
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] server lang: <none>
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] kex follows: False
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] Compression: none
2026-02-11T10:28:36.331 [DEBUG] [Thread-127380] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:28:36.391 [DEBUG] [Thread-127380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:28:36.392 [DEBUG] [Thread-127380] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:28:36.392 [DEBUG] [Thread-127380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:28:36.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:28:36.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:28:36.448 [DEBUG] [Thread-127380] [transport.py] [_log()] userauth is OK
2026-02-11T10:28:36.448 [DEBUG] [Thread-127380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:28:36.448 [DEBUG] [Thread-127380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:28:36.448 [DEBUG] [Thread-127380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:28:36.449 [DEBUG] [Thread-127380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:28:36.470 [INFO] [Thread-127380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:28:36.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:28:36.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:28:37.296 [DEBUG] [Thread-127380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:28:37.297 [DEBUG] [Thread-127380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:28:37.344 [DEBUG] [Thread-127380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:28:37.344 [DEBUG] [Thread-127380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:28:37.354 [DEBUG] [Thread-127380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:28:37.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:28:37.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:28:37.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:28:37.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:28:37.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:28:37.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:28:37.392 [DEBUG] [Thread-127380] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:28:50.197 [DEBUG] [Thread-127382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:28:50.829 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:28:50.830 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:29:05.247 [DEBUG] [Thread-127383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:29:07.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:29:07.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:29:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:29:08.701 [DEBUG] [Thread-127384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:29:09.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 28, 27), 12.61, 44.61, 0.0, 13.61, 21.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:29:09.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:28:27
2026-02-11T10:29:10.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:29:10.243 [DEBUG] [Thread-127385] [transport.py] [_log()] starting thread (client mode): 0xa2dfb340
2026-02-11T10:29:10.243 [DEBUG] [Thread-127385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:29:10.263 [DEBUG] [Thread-127385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:29:10.263 [INFO] [Thread-127385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:29:10.266 [DEBUG] [Thread-127385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:29:10.266 [DEBUG] [Thread-127385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:29:10.266 [DEBUG] [Thread-127385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] client lang: <none>
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] server lang: <none>
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] kex follows: False
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:29:10.267 [DEBUG] [Thread-127385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:29:10.268 [DEBUG] [Thread-127385] [transport.py] [_log()] Compression: none
2026-02-11T10:29:10.268 [DEBUG] [Thread-127385] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:29:10.286 [DEBUG] [Thread-127385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:29:10.286 [DEBUG] [Thread-127385] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:29:10.287 [DEBUG] [Thread-127385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:29:10.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:29:10.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:29:10.328 [DEBUG] [Thread-127385] [transport.py] [_log()] userauth is OK
2026-02-11T10:29:10.329 [DEBUG] [Thread-127385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:29:10.329 [DEBUG] [Thread-127385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:29:10.329 [DEBUG] [Thread-127385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:29:10.329 [DEBUG] [Thread-127385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:29:10.366 [INFO] [Thread-127385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:29:10.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:29:11.134 [DEBUG] [Thread-127385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:29:11.134 [DEBUG] [Thread-127385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:29:11.135 [DEBUG] [Thread-127385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:29:11.175 [DEBUG] [Thread-127385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:29:11.176 [DEBUG] [Thread-127385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:29:11.179 [DEBUG] [Thread-127385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:29:11.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:29:11.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:29:11.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:29:11.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:29:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:29:11.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:29:11.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:29:11.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:29:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:29:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.353264 -999.00  +21.80  18.58     50  +11.10 1 2 1 1 1   888    0 10.65 -8.31 ----- 16.6 18.6 301.0 26.0 28.4 -18.5 27.7 -16.0 25.9 -16.9 26.7 -17.9
2026-02-11T10:29:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:29:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:29:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.353264
2026-02-11T10:29:11.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:29:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:29:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:29:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:29:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:29:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:28:27', tmtdew=12.61, humidity=44.61, cloud=0.0, wind=13.61, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:28:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:29:11.207 [DEBUG] [Thread-127385] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:29:11.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:29:11.303 [DEBUG] [Thread-127388] [transport.py] [_log()] starting thread (client mode): 0xa57b2170
2026-02-11T10:29:11.303 [DEBUG] [Thread-127388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:29:11.317 [DEBUG] [Thread-127388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:29:11.318 [INFO] [Thread-127388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:29:11.325 [DEBUG] [Thread-127388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] client lang: <none>
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] server lang: <none>
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] kex follows: False
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] Compression: none
2026-02-11T10:29:11.326 [DEBUG] [Thread-127388] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:29:11.383 [DEBUG] [Thread-127388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:29:11.383 [DEBUG] [Thread-127388] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:29:11.384 [DEBUG] [Thread-127388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:29:11.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:29:11.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:29:11.439 [DEBUG] [Thread-127388] [transport.py] [_log()] userauth is OK
2026-02-11T10:29:11.439 [DEBUG] [Thread-127388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:29:11.439 [DEBUG] [Thread-127388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:29:11.440 [DEBUG] [Thread-127388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:29:11.440 [DEBUG] [Thread-127388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:29:11.458 [INFO] [Thread-127388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:29:11.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:29:11.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:29:12.288 [DEBUG] [Thread-127388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:29:12.288 [DEBUG] [Thread-127388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:29:12.336 [DEBUG] [Thread-127388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:29:12.337 [DEBUG] [Thread-127388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:29:12.346 [DEBUG] [Thread-127388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:29:12.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:29:12.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:29:12.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:29:12.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:29:12.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:29:12.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:29:12.383 [DEBUG] [Thread-127388] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:29:20.282 [DEBUG] [Thread-127390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:29:35.331 [DEBUG] [Thread-127391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:29:42.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:29:42.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:29:42.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:29:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 29, 3), 12.65, 44.51, 0.0, 17.19, 21.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:29:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:29:03
2026-02-11T10:29:44.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:29:44.810 [DEBUG] [Thread-127392] [transport.py] [_log()] starting thread (client mode): 0xa2dfb7f0
2026-02-11T10:29:44.810 [DEBUG] [Thread-127392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:29:44.831 [DEBUG] [Thread-127392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:29:44.832 [INFO] [Thread-127392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:29:44.835 [DEBUG] [Thread-127392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:29:44.835 [DEBUG] [Thread-127392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:29:44.835 [DEBUG] [Thread-127392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:29:44.835 [DEBUG] [Thread-127392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:44.835 [DEBUG] [Thread-127392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:44.835 [DEBUG] [Thread-127392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:44.835 [DEBUG] [Thread-127392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:44.844 [DEBUG] [Thread-127392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] client lang: <none>
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] server lang: <none>
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] kex follows: False
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] Compression: none
2026-02-11T10:29:44.845 [DEBUG] [Thread-127392] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:29:44.864 [DEBUG] [Thread-127392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:29:44.865 [DEBUG] [Thread-127392] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:29:44.866 [DEBUG] [Thread-127392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:29:44.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:29:44.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:29:44.868 [DEBUG] [Thread-127392] [transport.py] [_log()] userauth is OK
2026-02-11T10:29:44.868 [DEBUG] [Thread-127392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:29:44.868 [DEBUG] [Thread-127392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:29:44.868 [DEBUG] [Thread-127392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:29:44.868 [DEBUG] [Thread-127392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:29:44.893 [INFO] [Thread-127392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:29:44.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:29:45.530 [DEBUG] [Thread-127392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:29:45.531 [DEBUG] [Thread-127392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:29:45.531 [DEBUG] [Thread-127392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:29:45.571 [DEBUG] [Thread-127392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:29:45.572 [DEBUG] [Thread-127392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:29:45.575 [DEBUG] [Thread-127392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:29:45.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:29:45.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:29:45.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:29:45.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:29:45.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:29:45.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:29:45.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:29:45.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:29:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:29:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.353611 -999.00  +22.20  17.26     49  +11.10 1 2 1 1 1   888    0 10.61 -6.54 ----- 18.7 17.3 268.4 19.7 28.2 -19.4 27.4 -18.4 25.8 -19.6 26.6 -18.6
2026-02-11T10:29:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:29:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:29:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.353611
2026-02-11T10:29:45.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:29:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:29:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:29:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:29:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:29:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:29:03', tmtdew=12.65, humidity=44.51, cloud=0.0, wind=17.19, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:29:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:29:45.602 [DEBUG] [Thread-127392] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:29:45.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:29:45.700 [DEBUG] [Thread-127395] [transport.py] [_log()] starting thread (client mode): 0xa81d69b0
2026-02-11T10:29:45.700 [DEBUG] [Thread-127395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:29:45.714 [DEBUG] [Thread-127395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:29:45.715 [INFO] [Thread-127395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:29:45.722 [DEBUG] [Thread-127395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:29:45.722 [DEBUG] [Thread-127395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] client lang: <none>
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] server lang: <none>
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] kex follows: False
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] Compression: none
2026-02-11T10:29:45.723 [DEBUG] [Thread-127395] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:29:45.786 [DEBUG] [Thread-127395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:29:45.787 [DEBUG] [Thread-127395] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:29:45.787 [DEBUG] [Thread-127395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:29:45.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:29:45.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:29:45.842 [DEBUG] [Thread-127395] [transport.py] [_log()] userauth is OK
2026-02-11T10:29:45.843 [DEBUG] [Thread-127395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:29:45.843 [DEBUG] [Thread-127395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:29:45.843 [DEBUG] [Thread-127395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:29:45.843 [DEBUG] [Thread-127395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:29:45.863 [INFO] [Thread-127395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:29:45.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:29:45.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:29:46.755 [DEBUG] [Thread-127395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:29:46.756 [DEBUG] [Thread-127395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:29:46.803 [DEBUG] [Thread-127395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:29:46.803 [DEBUG] [Thread-127395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:29:46.813 [DEBUG] [Thread-127395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:29:46.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:29:46.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:29:46.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:29:46.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:29:46.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:29:46.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:29:46.856 [DEBUG] [Thread-127395] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:29:50.369 [DEBUG] [Thread-127397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:29:50.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:29:50.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:05.407 [DEBUG] [Thread-127398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:08.757 [DEBUG] [Thread-127399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:16.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:30:16.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:30:16.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:30:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 29, 39), 13.4, 42.53, 0.0, 19.94, 23.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:30:18.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:29:39
2026-02-11T10:30:19.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:30:19.471 [DEBUG] [Thread-127400] [transport.py] [_log()] starting thread (client mode): 0xa2d7ad10
2026-02-11T10:30:19.471 [DEBUG] [Thread-127400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:30:19.492 [DEBUG] [Thread-127400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:30:19.492 [INFO] [Thread-127400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:19.495 [DEBUG] [Thread-127400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] client lang: <none>
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] server lang: <none>
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] kex follows: False
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] Compression: none
2026-02-11T10:30:19.496 [DEBUG] [Thread-127400] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:30:19.509 [DEBUG] [Thread-127400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:30:19.510 [DEBUG] [Thread-127400] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:30:19.510 [DEBUG] [Thread-127400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:30:19.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:30:19.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:30:19.512 [DEBUG] [Thread-127400] [transport.py] [_log()] userauth is OK
2026-02-11T10:30:19.512 [DEBUG] [Thread-127400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:30:19.512 [DEBUG] [Thread-127400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:30:19.512 [DEBUG] [Thread-127400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:30:19.513 [DEBUG] [Thread-127400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:30:19.531 [INFO] [Thread-127400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:30:19.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:30:20.167 [DEBUG] [Thread-127400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:30:20.167 [DEBUG] [Thread-127400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:30:20.167 [DEBUG] [Thread-127400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:30:20.208 [DEBUG] [Thread-127400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:30:20.208 [DEBUG] [Thread-127400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:30:20.211 [DEBUG] [Thread-127400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:30:20.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:30:20.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:30:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:30:20.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:30:20.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:30:20.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:30:20.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.353958 -999.00  +22.00  16.57     48  +10.70 1 2 1 1 1   888    0 10.61 -4.58 ----- 15.0 16.6 284.2 20.0 27.8 -20.8 27.3 -19.7 25.5 -21.2 26.3 -18.5
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.353958
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:30:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:29:39', tmtdew=13.4, humidity=42.53, cloud=0.0, wind=19.94, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:29:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:30:20.230 [DEBUG] [Thread-127400] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:30:20.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:30:20.312 [DEBUG] [Thread-127403] [transport.py] [_log()] starting thread (client mode): 0xa2d7b700
2026-02-11T10:30:20.313 [DEBUG] [Thread-127403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:30:20.328 [DEBUG] [Thread-127403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:30:20.329 [INFO] [Thread-127403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:30:20.336 [DEBUG] [Thread-127403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:30:20.336 [DEBUG] [Thread-127403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:30:20.336 [DEBUG] [Thread-127403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:30:20.336 [DEBUG] [Thread-127403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:20.336 [DEBUG] [Thread-127403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] client lang: <none>
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] server lang: <none>
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] kex follows: False
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:30:20.337 [DEBUG] [Thread-127403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:30:20.338 [DEBUG] [Thread-127403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:30:20.338 [DEBUG] [Thread-127403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:30:20.338 [DEBUG] [Thread-127403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:30:20.338 [DEBUG] [Thread-127403] [transport.py] [_log()] Compression: none
2026-02-11T10:30:20.338 [DEBUG] [Thread-127403] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:30:20.404 [DEBUG] [Thread-127403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:30:20.405 [DEBUG] [Thread-127403] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:30:20.406 [DEBUG] [Thread-127403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:30:20.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:30:20.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:30:20.439 [DEBUG] [Thread-127405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:20.473 [DEBUG] [Thread-127403] [transport.py] [_log()] userauth is OK
2026-02-11T10:30:20.473 [DEBUG] [Thread-127403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:30:20.473 [DEBUG] [Thread-127403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:30:20.474 [DEBUG] [Thread-127403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:30:20.474 [DEBUG] [Thread-127403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:30:20.496 [INFO] [Thread-127403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:30:20.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:30:20.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:30:21.281 [DEBUG] [Thread-127403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:30:21.282 [DEBUG] [Thread-127403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:30:21.329 [DEBUG] [Thread-127403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:30:21.329 [DEBUG] [Thread-127403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:30:21.338 [DEBUG] [Thread-127403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:30:21.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:30:21.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:30:21.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:30:21.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:30:21.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:30:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:30:21.376 [DEBUG] [Thread-127403] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:30:35.487 [DEBUG] [Thread-127406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:50.525 [DEBUG] [Thread-127407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:51.136 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:51.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:30:51.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:30:51.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:30:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:30:53.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 30, 15), 13.31, 42.45, 0.0, 17.73, 22.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:30:53.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:30:15
2026-02-11T10:30:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:30:54.138 [DEBUG] [Thread-127408] [transport.py] [_log()] starting thread (client mode): 0xa57c19c0
2026-02-11T10:30:54.138 [DEBUG] [Thread-127408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:30:54.157 [DEBUG] [Thread-127408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:30:54.157 [INFO] [Thread-127408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:30:54.160 [DEBUG] [Thread-127408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:30:54.160 [DEBUG] [Thread-127408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:30:54.160 [DEBUG] [Thread-127408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] client lang: <none>
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] server lang: <none>
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] kex follows: False
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:30:54.161 [DEBUG] [Thread-127408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:30:54.162 [DEBUG] [Thread-127408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:30:54.162 [DEBUG] [Thread-127408] [transport.py] [_log()] Compression: none
2026-02-11T10:30:54.162 [DEBUG] [Thread-127408] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:30:54.180 [DEBUG] [Thread-127408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:30:54.181 [DEBUG] [Thread-127408] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:30:54.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:30:54.183 [DEBUG] [Thread-127408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:30:54.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:30:54.185 [DEBUG] [Thread-127408] [transport.py] [_log()] userauth is OK
2026-02-11T10:30:54.186 [DEBUG] [Thread-127408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:30:54.186 [DEBUG] [Thread-127408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:30:54.186 [DEBUG] [Thread-127408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:30:54.187 [DEBUG] [Thread-127408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:30:54.207 [INFO] [Thread-127408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:30:54.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:30:54.838 [DEBUG] [Thread-127408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:30:54.839 [DEBUG] [Thread-127408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:30:54.839 [DEBUG] [Thread-127408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:30:54.879 [DEBUG] [Thread-127408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:30:54.880 [DEBUG] [Thread-127408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:30:54.883 [DEBUG] [Thread-127408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:30:54.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:30:54.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:30:54.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:30:54.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:30:54.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:30:54.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:30:54.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:30:54.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:30:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:30:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.354306 -999.00  +21.90  19.38     49  +10.70 1 2 1 1 1   888    0 10.77 -3.03 ----- 18.0 19.4 275.8 22.3 27.5 -19.9 27.1 -19.0 25.6 -16.0 26.4 -14.1
2026-02-11T10:30:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:30:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:30:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.354306
2026-02-11T10:30:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:30:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:30:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:30:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:30:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:30:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:30:15', tmtdew=13.31, humidity=42.45, cloud=0.0, wind=17.73, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:30:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:30:54.920 [DEBUG] [Thread-127408] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:30:55.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:30:55.015 [DEBUG] [Thread-127411] [transport.py] [_log()] starting thread (client mode): 0xa57583d0
2026-02-11T10:30:55.016 [DEBUG] [Thread-127411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:30:55.031 [DEBUG] [Thread-127411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:30:55.031 [INFO] [Thread-127411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] client lang: <none>
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] server lang: <none>
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] kex follows: False
2026-02-11T10:30:55.039 [DEBUG] [Thread-127411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:30:55.040 [DEBUG] [Thread-127411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:30:55.040 [DEBUG] [Thread-127411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:30:55.040 [DEBUG] [Thread-127411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:30:55.040 [DEBUG] [Thread-127411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:30:55.040 [DEBUG] [Thread-127411] [transport.py] [_log()] Compression: none
2026-02-11T10:30:55.040 [DEBUG] [Thread-127411] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:30:55.099 [DEBUG] [Thread-127411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:30:55.099 [DEBUG] [Thread-127411] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:30:55.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:30:55.101 [DEBUG] [Thread-127411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:30:55.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:30:55.158 [DEBUG] [Thread-127411] [transport.py] [_log()] userauth is OK
2026-02-11T10:30:55.159 [DEBUG] [Thread-127411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:30:55.159 [DEBUG] [Thread-127411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:30:55.159 [DEBUG] [Thread-127411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:30:55.159 [DEBUG] [Thread-127411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:30:55.177 [INFO] [Thread-127411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:30:55.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:30:55.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:30:56.004 [DEBUG] [Thread-127411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:30:56.004 [DEBUG] [Thread-127411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:30:56.052 [DEBUG] [Thread-127411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:30:56.053 [DEBUG] [Thread-127411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:30:56.062 [DEBUG] [Thread-127411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:30:56.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:30:56.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:30:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:30:56.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:30:56.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:30:56.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:30:56.098 [DEBUG] [Thread-127411] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:31:05.562 [DEBUG] [Thread-127413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:31:08.801 [DEBUG] [Thread-127414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:31:20.613 [DEBUG] [Thread-127415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:31:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:31:26.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:31: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
2026-02-11T10:31:27.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 30, 51), 13.24, 42.73, 0.0, 13.48, 22.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:31:27.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:30:51
2026-02-11T10:31:28.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:31:28.428 [DEBUG] [Thread-127416] [transport.py] [_log()] starting thread (client mode): 0xa57c1450
2026-02-11T10:31:28.428 [DEBUG] [Thread-127416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:31:28.448 [DEBUG] [Thread-127416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:31:28.448 [INFO] [Thread-127416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:31:28.451 [DEBUG] [Thread-127416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] client lang: <none>
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] server lang: <none>
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] kex follows: False
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] Compression: none
2026-02-11T10:31:28.452 [DEBUG] [Thread-127416] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:31:28.467 [DEBUG] [Thread-127416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:31:28.468 [DEBUG] [Thread-127416] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:31:28.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:31:28.468 [DEBUG] [Thread-127416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:31:28.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:31:28.469 [DEBUG] [Thread-127416] [transport.py] [_log()] userauth is OK
2026-02-11T10:31:28.469 [DEBUG] [Thread-127416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:31:28.469 [DEBUG] [Thread-127416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:31:28.469 [DEBUG] [Thread-127416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:31:28.469 [DEBUG] [Thread-127416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:31:28.488 [INFO] [Thread-127416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:31:28.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:31:29.148 [DEBUG] [Thread-127416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:31:29.149 [DEBUG] [Thread-127416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:31:29.149 [DEBUG] [Thread-127416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:31:29.189 [DEBUG] [Thread-127416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:31:29.190 [DEBUG] [Thread-127416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:31:29.202 [DEBUG] [Thread-127416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:31:29.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:31:29.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:31:29.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:31:29.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:31:29.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:31:29.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:31:29.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:31:29.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:31:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:31:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.354653 -999.00  +21.80  11.22     49  +10.80 1 2 1 1 1   888    0 10.75 -0.80 ----- 13.6 11.2 271.8 17.1 28.0 -15.1 27.2 -16.4 25.9 -15.5 26.8 -13.9
2026-02-11T10:31:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:31:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:31:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.354653
2026-02-11T10:31:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:31:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:31:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:31:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:31:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:31:29.229 [DEBUG] [Thread-127416] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:31:29.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:30:51', tmtdew=13.24, humidity=42.73, cloud=0.0, wind=13.48, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:30:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:31:29.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:31:29.325 [DEBUG] [Thread-127419] [transport.py] [_log()] starting thread (client mode): 0xa2d7b370
2026-02-11T10:31:29.325 [DEBUG] [Thread-127419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:31:29.340 [DEBUG] [Thread-127419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:31:29.341 [INFO] [Thread-127419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:31:29.349 [DEBUG] [Thread-127419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:31:29.349 [DEBUG] [Thread-127419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:31:29.349 [DEBUG] [Thread-127419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:31:29.349 [DEBUG] [Thread-127419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:31:29.349 [DEBUG] [Thread-127419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:31:29.349 [DEBUG] [Thread-127419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:31:29.349 [DEBUG] [Thread-127419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] client lang: <none>
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] server lang: <none>
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] kex follows: False
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] Compression: none
2026-02-11T10:31:29.350 [DEBUG] [Thread-127419] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:31:29.410 [DEBUG] [Thread-127419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:31:29.410 [DEBUG] [Thread-127419] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:31:29.411 [DEBUG] [Thread-127419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:31:29.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:31:29.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:31:29.468 [DEBUG] [Thread-127419] [transport.py] [_log()] userauth is OK
2026-02-11T10:31:29.468 [DEBUG] [Thread-127419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:31:29.468 [DEBUG] [Thread-127419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:31:29.468 [DEBUG] [Thread-127419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:31:29.468 [DEBUG] [Thread-127419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:31:29.488 [INFO] [Thread-127419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:31:29.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:31:29.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:31:30.368 [DEBUG] [Thread-127419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:31:30.368 [DEBUG] [Thread-127419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:31:30.423 [DEBUG] [Thread-127419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:31:30.423 [DEBUG] [Thread-127419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:31:30.440 [DEBUG] [Thread-127419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:31:30.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:31:30.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:31:30.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:31:30.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:31:30.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:31:30.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:31:30.501 [DEBUG] [Thread-127419] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:31:35.650 [DEBUG] [Thread-127421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:31:50.706 [DEBUG] [Thread-127422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:31:51.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:31:51.278 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:32:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:32:00.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:32:00.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:32:02.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 31, 28), 13.2, 42.86, 0.0, 12.78, 22.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:32:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:31:28
2026-02-11T10:32:02.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:32:02.875 [DEBUG] [Thread-127423] [transport.py] [_log()] starting thread (client mode): 0xa57c00a0
2026-02-11T10:32:02.875 [DEBUG] [Thread-127423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:32:02.895 [DEBUG] [Thread-127423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:32:02.895 [INFO] [Thread-127423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] client lang: <none>
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] server lang: <none>
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] kex follows: False
2026-02-11T10:32:02.898 [DEBUG] [Thread-127423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:32:02.899 [DEBUG] [Thread-127423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:32:02.899 [DEBUG] [Thread-127423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:32:02.899 [DEBUG] [Thread-127423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:32:02.899 [DEBUG] [Thread-127423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:32:02.899 [DEBUG] [Thread-127423] [transport.py] [_log()] Compression: none
2026-02-11T10:32:02.899 [DEBUG] [Thread-127423] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:32:02.917 [DEBUG] [Thread-127423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:32:02.917 [DEBUG] [Thread-127423] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:32:02.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:32:02.918 [DEBUG] [Thread-127423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:32:02.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:32:02.919 [DEBUG] [Thread-127423] [transport.py] [_log()] userauth is OK
2026-02-11T10:32:02.919 [DEBUG] [Thread-127423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:32:02.920 [DEBUG] [Thread-127423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:32:02.920 [DEBUG] [Thread-127423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:32:02.920 [DEBUG] [Thread-127423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:32:02.930 [INFO] [Thread-127423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:32:02.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:32:03.749 [DEBUG] [Thread-127423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:32:03.749 [DEBUG] [Thread-127423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:32:03.749 [DEBUG] [Thread-127423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:32:03.790 [DEBUG] [Thread-127423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:32:03.790 [DEBUG] [Thread-127423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:32:03.793 [DEBUG] [Thread-127423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:32:03.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:32:03.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:32:03.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:32:03.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:32:03.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:32:03.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:32:03.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:32:03.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:32:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:32:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.355000 -999.00  +22.00  10.45     49  +11.10 1 2 1 1 1   888    0 10.84 1.89 ----- 12.0 10.4 271.0 18.8 28.3 -15.0 27.5 -14.1 26.1 -14.1 27.0 -13.3
2026-02-11T10:32:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:32:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:32:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.355000
2026-02-11T10:32:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:32:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:32:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:32:03.814 [DEBUG] [Thread-127423] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:32:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:32:03.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:32:03.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:31:28', tmtdew=13.2, humidity=42.86, cloud=0.0, wind=12.78, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:31:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:32:03.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:32:03.909 [DEBUG] [Thread-127426] [transport.py] [_log()] starting thread (client mode): 0xa57c2320
2026-02-11T10:32:03.909 [DEBUG] [Thread-127426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:32:03.924 [DEBUG] [Thread-127426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:32:03.925 [INFO] [Thread-127426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:32:03.932 [DEBUG] [Thread-127426] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:32:03.932 [DEBUG] [Thread-127426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:32:03.932 [DEBUG] [Thread-127426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:32:03.932 [DEBUG] [Thread-127426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:03.932 [DEBUG] [Thread-127426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:03.932 [DEBUG] [Thread-127426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] client lang: <none>
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] server lang: <none>
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] kex follows: False
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] Compression: none
2026-02-11T10:32:03.933 [DEBUG] [Thread-127426] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:32:03.991 [DEBUG] [Thread-127426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:32:03.992 [DEBUG] [Thread-127426] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:32:03.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:32:03.993 [DEBUG] [Thread-127426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:32:03.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:32:04.054 [DEBUG] [Thread-127426] [transport.py] [_log()] userauth is OK
2026-02-11T10:32:04.054 [DEBUG] [Thread-127426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:32:04.054 [DEBUG] [Thread-127426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:32:04.054 [DEBUG] [Thread-127426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:32:04.054 [DEBUG] [Thread-127426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:32:04.075 [INFO] [Thread-127426] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:32:04.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:32:04.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:32:04.931 [DEBUG] [Thread-127426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:32:04.931 [DEBUG] [Thread-127426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:32:04.978 [DEBUG] [Thread-127426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:32:04.979 [DEBUG] [Thread-127426] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:32:04.988 [DEBUG] [Thread-127426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:32:04.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:32:04.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')
2026-02-11T10:32:05.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:32:05.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:32:05.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:32:05.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:32:05.024 [DEBUG] [Thread-127426] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:32:05.742 [DEBUG] [Thread-127428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:32:08.850 [DEBUG] [Thread-127429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:32:20.793 [DEBUG] [Thread-127430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:32:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:32:35.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:32:35.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:32:35.826 [DEBUG] [Thread-127431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:32:37.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 32, 3), 13.32, 42.55, 0.0, 12.55, 22.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:32:37.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:32:03
2026-02-11T10:32:37.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:32:37.879 [DEBUG] [Thread-127432] [transport.py] [_log()] starting thread (client mode): 0xa57c0430
2026-02-11T10:32:37.879 [DEBUG] [Thread-127432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:32:37.899 [DEBUG] [Thread-127432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:32:37.900 [INFO] [Thread-127432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] client lang: <none>
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] server lang: <none>
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] kex follows: False
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] Compression: none
2026-02-11T10:32:37.903 [DEBUG] [Thread-127432] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:32:37.920 [DEBUG] [Thread-127432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:32:37.920 [DEBUG] [Thread-127432] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:32:37.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:32:37.921 [DEBUG] [Thread-127432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:32:37.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:32:37.923 [DEBUG] [Thread-127432] [transport.py] [_log()] userauth is OK
2026-02-11T10:32:37.923 [DEBUG] [Thread-127432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:32:37.923 [DEBUG] [Thread-127432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:32:37.923 [DEBUG] [Thread-127432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:32:37.923 [DEBUG] [Thread-127432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:32:37.943 [INFO] [Thread-127432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:32:37.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:32:38.555 [DEBUG] [Thread-127432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:32:38.555 [DEBUG] [Thread-127432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:32:38.555 [DEBUG] [Thread-127432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:32:38.596 [DEBUG] [Thread-127432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:32:38.596 [DEBUG] [Thread-127432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:32:38.598 [DEBUG] [Thread-127432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:32:38.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:32:38.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:32:38.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:32:38.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:32:38.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:32:38.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:32:38.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:32:38.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:32:38.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:32:38.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.355694 -999.00  +21.90   8.88     49  +10.90 1 2 1 1 1   888    0 11.21 7.52 ----- 9.9 8.9 275.1 21.7 28.6 -19.0 27.9 -16.0 26.1 -19.0 26.9 -18.1
2026-02-11T10:32:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:32:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:32:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.355694
2026-02-11T10:32:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:32:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:32:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:32:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:32:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:32:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:32:03', tmtdew=13.32, humidity=42.55, cloud=0.0, wind=12.55, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:32:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:32:38.622 [DEBUG] [Thread-127432] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:32:38.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:32:38.720 [DEBUG] [Thread-127435] [transport.py] [_log()] starting thread (client mode): 0xa2d54ca0
2026-02-11T10:32:38.720 [DEBUG] [Thread-127435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:32:38.739 [DEBUG] [Thread-127435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:32:38.739 [INFO] [Thread-127435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:32:38.749 [DEBUG] [Thread-127435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:32:38.749 [DEBUG] [Thread-127435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:32:38.750 [DEBUG] [Thread-127435] [transport.py] [_log()] client lang: <none>
2026-02-11T10:32:38.751 [DEBUG] [Thread-127435] [transport.py] [_log()] server lang: <none>
2026-02-11T10:32:38.751 [DEBUG] [Thread-127435] [transport.py] [_log()] kex follows: False
2026-02-11T10:32:38.751 [DEBUG] [Thread-127435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:32:38.751 [DEBUG] [Thread-127435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:32:38.751 [DEBUG] [Thread-127435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:32:38.751 [DEBUG] [Thread-127435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:32:38.751 [DEBUG] [Thread-127435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:32:38.752 [DEBUG] [Thread-127435] [transport.py] [_log()] Compression: none
2026-02-11T10:32:38.752 [DEBUG] [Thread-127435] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:32:38.806 [DEBUG] [Thread-127435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:32:38.807 [DEBUG] [Thread-127435] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:32:38.808 [DEBUG] [Thread-127435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:32:38.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:32:38.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:32:38.866 [DEBUG] [Thread-127435] [transport.py] [_log()] userauth is OK
2026-02-11T10:32:38.866 [DEBUG] [Thread-127435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:32:38.866 [DEBUG] [Thread-127435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:32:38.866 [DEBUG] [Thread-127435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:32:38.866 [DEBUG] [Thread-127435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:32:38.885 [INFO] [Thread-127435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:32:38.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:32:38.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:32:39.731 [DEBUG] [Thread-127435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:32:39.731 [DEBUG] [Thread-127435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:32:39.779 [DEBUG] [Thread-127435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:32:39.780 [DEBUG] [Thread-127435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:32:39.788 [DEBUG] [Thread-127435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:32:39.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:32:39.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:32:39.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
2026-02-11T10:32:39.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:32:39.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:32:39.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:32:39.826 [DEBUG] [Thread-127435] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:32:50.860 [DEBUG] [Thread-127437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:32:51.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:32:51.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:33:05.920 [DEBUG] [Thread-127438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:33:08.901 [DEBUG] [Thread-127439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:33:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:33:09.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:33:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:33:11.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 32, 38), 14.21, 40.41, 0.0, 13.27, 23.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:33:11.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:32:38
2026-02-11T10:33:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:33:12.140 [DEBUG] [Thread-127440] [transport.py] [_log()] starting thread (client mode): 0xa5759b10
2026-02-11T10:33:12.140 [DEBUG] [Thread-127440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:33:12.161 [DEBUG] [Thread-127440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:33:12.161 [INFO] [Thread-127440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:33:12.164 [DEBUG] [Thread-127440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:33:12.165 [DEBUG] [Thread-127440] [transport.py] [_log()] client lang: <none>
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] server lang: <none>
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] kex follows: False
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] Compression: none
2026-02-11T10:33:12.166 [DEBUG] [Thread-127440] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:33:12.183 [DEBUG] [Thread-127440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:33:12.184 [DEBUG] [Thread-127440] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:33:12.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:33:12.185 [DEBUG] [Thread-127440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:33:12.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:33:12.187 [DEBUG] [Thread-127440] [transport.py] [_log()] userauth is OK
2026-02-11T10:33:12.187 [DEBUG] [Thread-127440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:33:12.187 [DEBUG] [Thread-127440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:33:12.187 [DEBUG] [Thread-127440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:33:12.187 [DEBUG] [Thread-127440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:33:12.203 [INFO] [Thread-127440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:33:12.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:33:12.838 [DEBUG] [Thread-127440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:33:12.838 [DEBUG] [Thread-127440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:33:12.838 [DEBUG] [Thread-127440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:33:12.880 [DEBUG] [Thread-127440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:33:12.880 [DEBUG] [Thread-127440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:33:12.883 [DEBUG] [Thread-127440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:33:12.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:33:12.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:33:12.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:33:12.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:33:12.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:33:12.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:33:12.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.356042 -999.00  +21.80   7.79     50  +10.90 1 2 1 1 1   888    0 11.15 9.57 ----- 6.8 7.8 277.4 16.1 28.9 -16.6 27.9 -15.0 26.2 -19.0 26.9 -20.7
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.356042
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:33:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:32:38', tmtdew=14.21, humidity=40.41, cloud=0.0, wind=13.27, temperature=23.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:32:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:33:12.902 [DEBUG] [Thread-127440] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:33:12.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:33:12.997 [DEBUG] [Thread-127443] [transport.py] [_log()] starting thread (client mode): 0xa57c0dc0
2026-02-11T10:33:12.997 [DEBUG] [Thread-127443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:33:13.013 [DEBUG] [Thread-127443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:33:13.013 [INFO] [Thread-127443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:33:13.022 [DEBUG] [Thread-127443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:33:13.022 [DEBUG] [Thread-127443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:33:13.022 [DEBUG] [Thread-127443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:33:13.022 [DEBUG] [Thread-127443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:13.022 [DEBUG] [Thread-127443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:13.022 [DEBUG] [Thread-127443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:13.022 [DEBUG] [Thread-127443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] client lang: <none>
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] server lang: <none>
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] kex follows: False
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] Compression: none
2026-02-11T10:33:13.023 [DEBUG] [Thread-127443] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:33:13.081 [DEBUG] [Thread-127443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:33:13.082 [DEBUG] [Thread-127443] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:33:13.082 [DEBUG] [Thread-127443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:33:13.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:33:13.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:33:13.137 [DEBUG] [Thread-127443] [transport.py] [_log()] userauth is OK
2026-02-11T10:33:13.137 [DEBUG] [Thread-127443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:33:13.138 [DEBUG] [Thread-127443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:33:13.138 [DEBUG] [Thread-127443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:33:13.138 [DEBUG] [Thread-127443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:33:13.164 [INFO] [Thread-127443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:33:13.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:33:13.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:33:14.045 [DEBUG] [Thread-127443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:33:14.046 [DEBUG] [Thread-127443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:33:14.093 [DEBUG] [Thread-127443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:33:14.094 [DEBUG] [Thread-127443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:33:14.103 [DEBUG] [Thread-127443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:33:14.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:33:14.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:33:14.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:33:14.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:33:14.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:33:14.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:33:14.139 [DEBUG] [Thread-127443] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:33:20.965 [DEBUG] [Thread-127445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:33:36.016 [DEBUG] [Thread-127446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:33:44.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:33:44.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:33:44.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:33:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 33, 14), 13.36, 42.33, 0.0, 11.06, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:33:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:33:14
2026-02-11T10:33:46.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:33:46.463 [DEBUG] [Thread-127447] [transport.py] [_log()] starting thread (client mode): 0xa2df9d50
2026-02-11T10:33:46.463 [DEBUG] [Thread-127447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:33:46.482 [DEBUG] [Thread-127447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:33:46.482 [INFO] [Thread-127447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] client lang: <none>
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] server lang: <none>
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] kex follows: False
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] Compression: none
2026-02-11T10:33:46.485 [DEBUG] [Thread-127447] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:33:46.502 [DEBUG] [Thread-127447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:33:46.502 [DEBUG] [Thread-127447] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:33:46.503 [DEBUG] [Thread-127447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:33:46.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:33:46.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:33:46.504 [DEBUG] [Thread-127447] [transport.py] [_log()] userauth is OK
2026-02-11T10:33:46.505 [DEBUG] [Thread-127447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:33:46.505 [DEBUG] [Thread-127447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:33:46.505 [DEBUG] [Thread-127447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:33:46.505 [DEBUG] [Thread-127447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:33:46.518 [INFO] [Thread-127447] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:33:46.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:33:47.148 [DEBUG] [Thread-127447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:33:47.148 [DEBUG] [Thread-127447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:33:47.149 [DEBUG] [Thread-127447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:33:47.189 [DEBUG] [Thread-127447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:33:47.189 [DEBUG] [Thread-127447] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:33:47.192 [DEBUG] [Thread-127447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:33:47.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:33:47.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:33:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:33:47.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:33:47.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:33:47.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:33:47.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:33:47.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:33:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:33:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.356389 -999.00  +21.80  14.02     49  +10.90 1 2 1 1 1   888    0 11.33 10.82 ----- 9.2 14.0 267.6 17.3 28.2 -22.6 27.8 -20.2 25.9 -19.6 26.6 -20.3
2026-02-11T10:33:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:33:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:33:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.356389
2026-02-11T10:33:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:33:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:33:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:33:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:33:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:33:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:33:14', tmtdew=13.36, humidity=42.33, cloud=0.0, wind=11.06, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:33:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:33:47.214 [DEBUG] [Thread-127447] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:33:47.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:33:47.321 [DEBUG] [Thread-127450] [transport.py] [_log()] starting thread (client mode): 0xa2df8880
2026-02-11T10:33:47.321 [DEBUG] [Thread-127450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:33:47.336 [DEBUG] [Thread-127450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:33:47.336 [INFO] [Thread-127450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] client lang: <none>
2026-02-11T10:33:47.343 [DEBUG] [Thread-127450] [transport.py] [_log()] server lang: <none>
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] kex follows: False
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] Compression: none
2026-02-11T10:33:47.345 [DEBUG] [Thread-127450] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:33:47.399 [DEBUG] [Thread-127450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:33:47.399 [DEBUG] [Thread-127450] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:33:47.399 [DEBUG] [Thread-127450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:33:47.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:33:47.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:33:47.456 [DEBUG] [Thread-127450] [transport.py] [_log()] userauth is OK
2026-02-11T10:33:47.457 [DEBUG] [Thread-127450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:33:47.457 [DEBUG] [Thread-127450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:33:47.457 [DEBUG] [Thread-127450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:33:47.457 [DEBUG] [Thread-127450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:33:47.481 [INFO] [Thread-127450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:33:47.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:33:47.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:33:48.318 [DEBUG] [Thread-127450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:33:48.319 [DEBUG] [Thread-127450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:33:48.366 [DEBUG] [Thread-127450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:33:48.367 [DEBUG] [Thread-127450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:33:48.376 [DEBUG] [Thread-127450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:33:48.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:33:48.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:33:48.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:33:48.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:33:48.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:33:48.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:33:48.413 [DEBUG] [Thread-127450] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:33:51.052 [DEBUG] [Thread-127452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:33:51.563 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:33:51.564 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:06.102 [DEBUG] [Thread-127453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:08.944 [DEBUG] [Thread-127454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:18.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:34:18.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:34:18.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:34:20.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 33, 50), 13.35, 42.72, 0.0, 17.73, 22.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:34:20.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:33:50
2026-02-11T10:34:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:34:20.796 [DEBUG] [Thread-127455] [transport.py] [_log()] starting thread (client mode): 0xa2d7a590
2026-02-11T10:34:20.796 [DEBUG] [Thread-127455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:34:20.816 [DEBUG] [Thread-127455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:34:20.816 [INFO] [Thread-127455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] client lang: <none>
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] server lang: <none>
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] kex follows: False
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] Compression: none
2026-02-11T10:34:20.819 [DEBUG] [Thread-127455] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:34:20.836 [DEBUG] [Thread-127455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:34:20.837 [DEBUG] [Thread-127455] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:34:20.838 [DEBUG] [Thread-127455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:34:20.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:34:20.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:34:20.840 [DEBUG] [Thread-127455] [transport.py] [_log()] userauth is OK
2026-02-11T10:34:20.840 [DEBUG] [Thread-127455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:34:20.840 [DEBUG] [Thread-127455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:34:20.840 [DEBUG] [Thread-127455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:34:20.840 [DEBUG] [Thread-127455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:34:20.876 [INFO] [Thread-127455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:34:20.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:34:21.139 [DEBUG] [Thread-127457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:21.507 [DEBUG] [Thread-127455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:34:21.507 [DEBUG] [Thread-127455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:34:21.508 [DEBUG] [Thread-127455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:34:21.548 [DEBUG] [Thread-127455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:34:21.549 [DEBUG] [Thread-127455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:34:21.552 [DEBUG] [Thread-127455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:34:21.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:34:21.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:34:21.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:34:21.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:34:21.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:34:21.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:34:21.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:34:21.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:34:21.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:34:21.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.356736 -999.00  +21.80  14.03     49  +10.70 1 2 1 1 1   888    0 11.32 12.44 ----- 12.8 14.0 270.2 17.6 27.9 -22.5 27.5 -19.9 25.9 -18.7 26.4 -20.5
2026-02-11T10:34:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:34:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:34:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.356736
2026-02-11T10:34:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:34:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:34:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:34:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:34:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:34:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:33:50', tmtdew=13.35, humidity=42.72, cloud=0.0, wind=17.73, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:33:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:34:21.579 [DEBUG] [Thread-127455] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:34:21.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:34:21.676 [DEBUG] [Thread-127459] [transport.py] [_log()] starting thread (client mode): 0xa57e3910
2026-02-11T10:34:21.676 [DEBUG] [Thread-127459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:34:21.691 [DEBUG] [Thread-127459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:34:21.691 [INFO] [Thread-127459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:34:21.701 [DEBUG] [Thread-127459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:34:21.701 [DEBUG] [Thread-127459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:34:21.701 [DEBUG] [Thread-127459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] client lang: <none>
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] server lang: <none>
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] kex follows: False
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] Compression: none
2026-02-11T10:34:21.702 [DEBUG] [Thread-127459] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:34:21.772 [DEBUG] [Thread-127459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:34:21.772 [DEBUG] [Thread-127459] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:34:21.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:34:21.773 [DEBUG] [Thread-127459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:34:21.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:34:21.833 [DEBUG] [Thread-127459] [transport.py] [_log()] userauth is OK
2026-02-11T10:34:21.833 [DEBUG] [Thread-127459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:34:21.834 [DEBUG] [Thread-127459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:34:21.834 [DEBUG] [Thread-127459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:34:21.834 [DEBUG] [Thread-127459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:34:21.853 [INFO] [Thread-127459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:34:21.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:34:21.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:34:22.743 [DEBUG] [Thread-127459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:34:22.744 [DEBUG] [Thread-127459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:34:22.791 [DEBUG] [Thread-127459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:34:22.792 [DEBUG] [Thread-127459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:34:22.801 [DEBUG] [Thread-127459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:34:22.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:34:22.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:34:22.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:34:22.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:34:22.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:34:22.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:34:22.839 [DEBUG] [Thread-127459] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:34:36.174 [DEBUG] [Thread-127461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:51.227 [DEBUG] [Thread-127462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:51.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:51.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:34:52.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:34:52.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:34:52.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:34:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 34, 25), 13.39, 42.62, 0.0, 19.48, 22.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:34:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:34:25
2026-02-11T10:34:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:34:55.241 [DEBUG] [Thread-127463] [transport.py] [_log()] starting thread (client mode): 0xa2d577f0
2026-02-11T10:34:55.241 [DEBUG] [Thread-127463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:34:55.262 [DEBUG] [Thread-127463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:34:55.262 [INFO] [Thread-127463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] client lang: <none>
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] server lang: <none>
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] kex follows: False
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] Compression: none
2026-02-11T10:34:55.266 [DEBUG] [Thread-127463] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:34:55.283 [DEBUG] [Thread-127463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:34:55.283 [DEBUG] [Thread-127463] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:34:55.284 [DEBUG] [Thread-127463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:34:55.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:34:55.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:34:55.285 [DEBUG] [Thread-127463] [transport.py] [_log()] userauth is OK
2026-02-11T10:34:55.286 [DEBUG] [Thread-127463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:34:55.286 [DEBUG] [Thread-127463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:34:55.286 [DEBUG] [Thread-127463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:34:55.286 [DEBUG] [Thread-127463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:34:55.307 [INFO] [Thread-127463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:34:55.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:34:56.052 [DEBUG] [Thread-127463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:34:56.053 [DEBUG] [Thread-127463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:34:56.053 [DEBUG] [Thread-127463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:34:56.093 [DEBUG] [Thread-127463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:34:56.093 [DEBUG] [Thread-127463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:34:56.096 [DEBUG] [Thread-127463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:34:56.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:34:56.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:34:56.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:34:56.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:34:56.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:34:56.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:34:56.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:34:56.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:34:56.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:34:56.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.357083 -999.00  +21.90  14.85     49  +10.70 1 2 1 1 1   888    0 11.22 14.43 ----- 13.5 14.8 273.0 16.8 27.7 -21.9 27.3 -19.9 25.7 -19.5 26.4 -20.3
2026-02-11T10:34:56.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:34:56.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:34:56.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.357083
2026-02-11T10:34:56.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:34:56.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:34:56.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:34:56.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:34:56.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:34:56.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:34:25', tmtdew=13.39, humidity=42.62, cloud=0.0, wind=19.48, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:34:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:34:56.121 [DEBUG] [Thread-127463] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:34:56.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:34:56.220 [DEBUG] [Thread-127466] [transport.py] [_log()] starting thread (client mode): 0xa5759090
2026-02-11T10:34:56.220 [DEBUG] [Thread-127466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:34:56.236 [DEBUG] [Thread-127466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:34:56.236 [INFO] [Thread-127466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:34:56.243 [DEBUG] [Thread-127466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] client lang: <none>
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] server lang: <none>
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] kex follows: False
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:34:56.244 [DEBUG] [Thread-127466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:34:56.245 [DEBUG] [Thread-127466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:34:56.245 [DEBUG] [Thread-127466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:34:56.245 [DEBUG] [Thread-127466] [transport.py] [_log()] Compression: none
2026-02-11T10:34:56.245 [DEBUG] [Thread-127466] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:34:56.301 [DEBUG] [Thread-127466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:34:56.301 [DEBUG] [Thread-127466] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:34:56.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:34:56.302 [DEBUG] [Thread-127466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:34:56.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:34:56.357 [DEBUG] [Thread-127466] [transport.py] [_log()] userauth is OK
2026-02-11T10:34:56.357 [DEBUG] [Thread-127466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:34:56.357 [DEBUG] [Thread-127466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:34:56.357 [DEBUG] [Thread-127466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:34:56.358 [DEBUG] [Thread-127466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:34:56.378 [INFO] [Thread-127466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:34:56.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:34:56.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:34:57.204 [DEBUG] [Thread-127466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:34:57.205 [DEBUG] [Thread-127466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:34:57.252 [DEBUG] [Thread-127466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:34:57.252 [DEBUG] [Thread-127466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:34:57.261 [DEBUG] [Thread-127466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:34:57.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:34:57.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:34: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
2026-02-11T10:34:57.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:34:57.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:34:57.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:34:57.298 [DEBUG] [Thread-127466] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:35:06.264 [DEBUG] [Thread-127468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:35:08.995 [DEBUG] [Thread-127469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:35:21.313 [DEBUG] [Thread-127470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:35:27.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:35:27.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:35: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
2026-02-11T10:35:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 35, 1), 13.51, 41.96, 0.0, 14.13, 22.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:35:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:35:01
2026-02-11T10:35:29.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:35:29.629 [DEBUG] [Thread-127471] [transport.py] [_log()] starting thread (client mode): 0xa57e1d20
2026-02-11T10:35:29.630 [DEBUG] [Thread-127471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:35:29.650 [DEBUG] [Thread-127471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:35:29.650 [INFO] [Thread-127471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:35:29.653 [DEBUG] [Thread-127471] [transport.py] [_log()] client lang: <none>
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] server lang: <none>
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] kex follows: False
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] Compression: none
2026-02-11T10:35:29.654 [DEBUG] [Thread-127471] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:35:29.672 [DEBUG] [Thread-127471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:35:29.672 [DEBUG] [Thread-127471] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:35:29.673 [DEBUG] [Thread-127471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:35:29.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:35:29.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:35:29.675 [DEBUG] [Thread-127471] [transport.py] [_log()] userauth is OK
2026-02-11T10:35:29.675 [DEBUG] [Thread-127471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:35:29.675 [DEBUG] [Thread-127471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:35:29.675 [DEBUG] [Thread-127471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:35:29.675 [DEBUG] [Thread-127471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:35:29.699 [INFO] [Thread-127471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:35:29.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:35:30.343 [DEBUG] [Thread-127471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:35:30.343 [DEBUG] [Thread-127471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:35:30.344 [DEBUG] [Thread-127471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:35:30.384 [DEBUG] [Thread-127471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:35:30.384 [DEBUG] [Thread-127471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:35:30.387 [DEBUG] [Thread-127471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:35:30.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:35:30.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:35:30.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:35:30.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:35:30.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:35:30.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:35:30.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:35:30.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:35:30.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:35:30.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.357431 -999.00  +21.70  16.42     49  +10.80 1 2 1 1 1   888    0 11.26 16.22 ----- 19.4 16.4 280.6 21.4 27.4 -21.9 27.1 -20.2 25.4 -19.1 26.2 -19.4
2026-02-11T10:35:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:35:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:35:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.357431
2026-02-11T10:35:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:35:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:35:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:35:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:35:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:35:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:35:01', tmtdew=13.51, humidity=41.96, cloud=0.0, wind=14.13, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:34:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:35:30.416 [DEBUG] [Thread-127471] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:35:30.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:35:30.515 [DEBUG] [Thread-127474] [transport.py] [_log()] starting thread (client mode): 0xa2d01ed0
2026-02-11T10:35:30.515 [DEBUG] [Thread-127474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:35:30.531 [DEBUG] [Thread-127474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:35:30.531 [INFO] [Thread-127474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:35:30.538 [DEBUG] [Thread-127474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] client lang: <none>
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] server lang: <none>
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] kex follows: False
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:35:30.539 [DEBUG] [Thread-127474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:35:30.540 [DEBUG] [Thread-127474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:35:30.540 [DEBUG] [Thread-127474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:35:30.540 [DEBUG] [Thread-127474] [transport.py] [_log()] Compression: none
2026-02-11T10:35:30.540 [DEBUG] [Thread-127474] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:35:30.596 [DEBUG] [Thread-127474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:35:30.597 [DEBUG] [Thread-127474] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:35:30.597 [DEBUG] [Thread-127474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:35:30.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:35:30.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:35:30.653 [DEBUG] [Thread-127474] [transport.py] [_log()] userauth is OK
2026-02-11T10:35:30.653 [DEBUG] [Thread-127474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:35:30.653 [DEBUG] [Thread-127474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:35:30.653 [DEBUG] [Thread-127474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:35:30.653 [DEBUG] [Thread-127474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:35:30.672 [INFO] [Thread-127474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:35:30.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:35:30.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:35:31.540 [DEBUG] [Thread-127474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:35:31.540 [DEBUG] [Thread-127474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:35:31.590 [DEBUG] [Thread-127474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:35:31.590 [DEBUG] [Thread-127474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:35:31.601 [DEBUG] [Thread-127474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:35:31.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:35:31.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:35:31.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:35:31.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:35:31.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:35:31.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:35:31.636 [DEBUG] [Thread-127474] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:35:36.354 [DEBUG] [Thread-127476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:35:51.416 [DEBUG] [Thread-127477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:35:51.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:35:51.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:36:01.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:36:01.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:36: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
2026-02-11T10:36:03.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 35, 36), 14.6, 39.48, 0.0, 23.32, 24.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:36:03.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:35:36
2026-02-11T10:36:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:36:04.227 [DEBUG] [Thread-127478] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-11T10:36:04.228 [DEBUG] [Thread-127478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:36:04.248 [DEBUG] [Thread-127478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:36:04.248 [INFO] [Thread-127478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] client lang: <none>
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] server lang: <none>
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] kex follows: False
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:36:04.251 [DEBUG] [Thread-127478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:36:04.252 [DEBUG] [Thread-127478] [transport.py] [_log()] Compression: none
2026-02-11T10:36:04.252 [DEBUG] [Thread-127478] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:36:04.268 [DEBUG] [Thread-127478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:36:04.269 [DEBUG] [Thread-127478] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:36:04.269 [DEBUG] [Thread-127478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:36:04.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:36:04.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:36:04.271 [DEBUG] [Thread-127478] [transport.py] [_log()] userauth is OK
2026-02-11T10:36:04.272 [DEBUG] [Thread-127478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:36:04.272 [DEBUG] [Thread-127478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:36:04.272 [DEBUG] [Thread-127478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:36:04.272 [DEBUG] [Thread-127478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:36:04.292 [INFO] [Thread-127478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:36:04.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:36:04.934 [DEBUG] [Thread-127478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:36:04.935 [DEBUG] [Thread-127478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:36:04.935 [DEBUG] [Thread-127478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:36:04.975 [DEBUG] [Thread-127478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:36:04.976 [DEBUG] [Thread-127478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:36:04.979 [DEBUG] [Thread-127478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:36:04.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:36:04.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:36:04.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:36:04.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:36:05.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:36:05.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:36:05.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:36:05.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:36:05.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:36:05.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.357784 -999.00  +21.70  21.00     50  +10.90 1 2 1 1 1   888    0 11.64 16.72 ----- 18.0 21.0 274.8 28.8 27.1 -23.0 26.8 -19.1 25.2 -20.8 25.9 -20.7
2026-02-11T10:36:05.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:36:05.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:36:05.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.357784
2026-02-11T10:36:05.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:36:05.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:36:05.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:36:05.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:36:05.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:36:05.005 [DEBUG] [Thread-127478] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:36:05.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:35:36', tmtdew=14.6, humidity=39.48, cloud=0.0, wind=23.32, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:35:12.538', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:36:05.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:36:05.103 [DEBUG] [Thread-127481] [transport.py] [_log()] starting thread (client mode): 0xa2d56bc0
2026-02-11T10:36:05.103 [DEBUG] [Thread-127481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:36:05.117 [DEBUG] [Thread-127481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:36:05.117 [INFO] [Thread-127481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:36:05.126 [DEBUG] [Thread-127481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:36:05.126 [DEBUG] [Thread-127481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:36:05.126 [DEBUG] [Thread-127481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:36:05.126 [DEBUG] [Thread-127481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] client lang: <none>
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] server lang: <none>
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] kex follows: False
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] Compression: none
2026-02-11T10:36:05.127 [DEBUG] [Thread-127481] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:36:05.188 [DEBUG] [Thread-127481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:36:05.189 [DEBUG] [Thread-127481] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:36:05.190 [DEBUG] [Thread-127481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:36:05.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:36:05.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:36:05.244 [DEBUG] [Thread-127481] [transport.py] [_log()] userauth is OK
2026-02-11T10:36:05.245 [DEBUG] [Thread-127481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:36:05.245 [DEBUG] [Thread-127481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:36:05.245 [DEBUG] [Thread-127481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:36:05.245 [DEBUG] [Thread-127481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:36:05.263 [INFO] [Thread-127481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:36:05.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:36:05.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:36:06.107 [DEBUG] [Thread-127481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:36:06.108 [DEBUG] [Thread-127481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:36:06.155 [DEBUG] [Thread-127481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:36:06.156 [DEBUG] [Thread-127481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:36:06.165 [DEBUG] [Thread-127481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:36:06.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:36:06.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:36:06.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:36:06.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:36:06.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:36:06.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:36:06.202 [DEBUG] [Thread-127481] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:36:06.452 [DEBUG] [Thread-127483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:36:09.047 [DEBUG] [Thread-127484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:36:21.505 [DEBUG] [Thread-127485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:36:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:36:36.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:36:36.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:36:36.544 [DEBUG] [Thread-127486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:36:38.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 36, 11), 13.31, 42.55, 0.0, 20.12, 22.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:36:38.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:36:11
2026-02-11T10:36:38.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:36:38.635 [DEBUG] [Thread-127487] [transport.py] [_log()] starting thread (client mode): 0xa81d5db0
2026-02-11T10:36:38.635 [DEBUG] [Thread-127487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:36:38.654 [DEBUG] [Thread-127487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:36:38.655 [INFO] [Thread-127487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] client lang: <none>
2026-02-11T10:36:38.658 [DEBUG] [Thread-127487] [transport.py] [_log()] server lang: <none>
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] kex follows: False
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] Compression: none
2026-02-11T10:36:38.659 [DEBUG] [Thread-127487] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:36:38.678 [DEBUG] [Thread-127487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:36:38.678 [DEBUG] [Thread-127487] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:36:38.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:36:38.680 [DEBUG] [Thread-127487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:36:38.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:36:38.720 [DEBUG] [Thread-127487] [transport.py] [_log()] userauth is OK
2026-02-11T10:36:38.721 [DEBUG] [Thread-127487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:36:38.721 [DEBUG] [Thread-127487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:36:38.721 [DEBUG] [Thread-127487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:36:38.721 [DEBUG] [Thread-127487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:36:38.753 [INFO] [Thread-127487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:36:38.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:36:39.408 [DEBUG] [Thread-127487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:36:39.408 [DEBUG] [Thread-127487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:36:39.409 [DEBUG] [Thread-127487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:36:39.449 [DEBUG] [Thread-127487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:36:39.450 [DEBUG] [Thread-127487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:36:39.453 [DEBUG] [Thread-127487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:36:39.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:36:39.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:36:39.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:36:39.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:36:39.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:36:39.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:36:39.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:36:39.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:36:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:36:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.358472 -999.00  +21.50  20.10     50  +10.80 1 2 1 1 1   888    0 11.49 17.04 ----- 17.0 20.1 273.6 22.4 26.4 -22.4 26.3 -20.0 24.8 -18.4 25.5 -19.2
2026-02-11T10:36:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:36:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:36:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.358472
2026-02-11T10:36:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:36:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:36:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:36:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:36:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:36:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:36:11', tmtdew=13.31, humidity=42.55, cloud=0.0, wind=20.12, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:36:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:36:39.479 [DEBUG] [Thread-127487] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:36:39.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:36:39.562 [DEBUG] [Thread-127490] [transport.py] [_log()] starting thread (client mode): 0xa2dc14e0
2026-02-11T10:36:39.562 [DEBUG] [Thread-127490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:36:39.579 [DEBUG] [Thread-127490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:36:39.579 [INFO] [Thread-127490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:36:39.586 [DEBUG] [Thread-127490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:36:39.586 [DEBUG] [Thread-127490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:36:39.586 [DEBUG] [Thread-127490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] client lang: <none>
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] server lang: <none>
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] kex follows: False
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] Compression: none
2026-02-11T10:36:39.587 [DEBUG] [Thread-127490] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:36:39.644 [DEBUG] [Thread-127490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:36:39.645 [DEBUG] [Thread-127490] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:36:39.645 [DEBUG] [Thread-127490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:36:39.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:36:39.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:36:39.704 [DEBUG] [Thread-127490] [transport.py] [_log()] userauth is OK
2026-02-11T10:36:39.704 [DEBUG] [Thread-127490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:36:39.704 [DEBUG] [Thread-127490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:36:39.704 [DEBUG] [Thread-127490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:36:39.704 [DEBUG] [Thread-127490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:36:39.723 [INFO] [Thread-127490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:36:39.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:36:39.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:36:40.579 [DEBUG] [Thread-127490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:36:40.580 [DEBUG] [Thread-127490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:36:40.628 [DEBUG] [Thread-127490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:36:40.628 [DEBUG] [Thread-127490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:36:40.637 [DEBUG] [Thread-127490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:36:40.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:36:40.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:36:40.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:36:40.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:36:40.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:36:40.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:36:40.675 [DEBUG] [Thread-127490] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:36:51.576 [DEBUG] [Thread-127492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:36:52.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:36:52.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:37:06.623 [DEBUG] [Thread-127493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:37:09.101 [DEBUG] [Thread-127494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:37:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:37:10.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:37:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:37:12.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 36, 47), 13.0, 43.72, 0.0, 17.94, 21.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:37:12.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:36:47
2026-02-11T10:37:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:37:13.040 [DEBUG] [Thread-127495] [transport.py] [_log()] starting thread (client mode): 0xa2dc1030
2026-02-11T10:37:13.040 [DEBUG] [Thread-127495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:37:13.060 [DEBUG] [Thread-127495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:37:13.061 [INFO] [Thread-127495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] client lang: <none>
2026-02-11T10:37:13.064 [DEBUG] [Thread-127495] [transport.py] [_log()] server lang: <none>
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] kex follows: False
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] Compression: none
2026-02-11T10:37:13.065 [DEBUG] [Thread-127495] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:37:13.082 [DEBUG] [Thread-127495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:37:13.083 [DEBUG] [Thread-127495] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:37:13.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:37:13.084 [DEBUG] [Thread-127495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:37:13.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:37:13.087 [DEBUG] [Thread-127495] [transport.py] [_log()] userauth is OK
2026-02-11T10:37:13.087 [DEBUG] [Thread-127495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:37:13.087 [DEBUG] [Thread-127495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:37:13.087 [DEBUG] [Thread-127495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:37:13.087 [DEBUG] [Thread-127495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:37:13.107 [INFO] [Thread-127495] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:37:13.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:37:13.749 [DEBUG] [Thread-127495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:37:13.750 [DEBUG] [Thread-127495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:37:13.750 [DEBUG] [Thread-127495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:37:13.790 [DEBUG] [Thread-127495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:37:13.791 [DEBUG] [Thread-127495] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:37:13.794 [DEBUG] [Thread-127495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:37:13.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:37:13.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:37:13.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:37:13.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:37:13.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:37:13.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:37:13.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:37:13.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:37:13.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:37:13.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.358819 -999.00  +21.20  15.61     50  +10.60 1 2 1 1 1   888    0 11.39 19.04 ----- 14.2 15.6 265.2 19.7 26.2 -21.2 26.1 -19.9 24.8 -18.1 25.3 -19.7
2026-02-11T10:37:13.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:37:13.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:37:13.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.358819
2026-02-11T10:37:13.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:37:13.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:37:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:37:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:37:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:37:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:36:47', tmtdew=13.0, humidity=43.72, cloud=0.0, wind=17.94, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:36:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:37:13.822 [DEBUG] [Thread-127495] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:37:13.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:37:13.921 [DEBUG] [Thread-127498] [transport.py] [_log()] starting thread (client mode): 0xa575ae60
2026-02-11T10:37:13.921 [DEBUG] [Thread-127498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:37:13.940 [DEBUG] [Thread-127498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:37:13.940 [INFO] [Thread-127498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:37:13.947 [DEBUG] [Thread-127498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:37:13.948 [DEBUG] [Thread-127498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:37:13.948 [DEBUG] [Thread-127498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:37:13.948 [DEBUG] [Thread-127498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:13.948 [DEBUG] [Thread-127498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:13.948 [DEBUG] [Thread-127498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:13.948 [DEBUG] [Thread-127498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:13.948 [DEBUG] [Thread-127498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] client lang: <none>
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] server lang: <none>
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] kex follows: False
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:37:13.949 [DEBUG] [Thread-127498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:37:13.950 [DEBUG] [Thread-127498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:37:13.950 [DEBUG] [Thread-127498] [transport.py] [_log()] Compression: none
2026-02-11T10:37:13.950 [DEBUG] [Thread-127498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:37:14.008 [DEBUG] [Thread-127498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:37:14.009 [DEBUG] [Thread-127498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:37:14.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:37:14.010 [DEBUG] [Thread-127498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:37:14.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:37:14.064 [DEBUG] [Thread-127498] [transport.py] [_log()] userauth is OK
2026-02-11T10:37:14.064 [DEBUG] [Thread-127498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:37:14.064 [DEBUG] [Thread-127498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:37:14.065 [DEBUG] [Thread-127498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:37:14.065 [DEBUG] [Thread-127498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:37:14.087 [INFO] [Thread-127498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:37:14.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:37:14.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:37:14.920 [DEBUG] [Thread-127498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:37:14.921 [DEBUG] [Thread-127498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:37:14.968 [DEBUG] [Thread-127498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:37:14.969 [DEBUG] [Thread-127498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:37:14.978 [DEBUG] [Thread-127498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:37:14.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:37:14.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:37: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') -> 00000000
2026-02-11T10:37:15.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:37:15.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:37:15.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:37:15.015 [DEBUG] [Thread-127498] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:37:21.662 [DEBUG] [Thread-127500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:37:36.718 [DEBUG] [Thread-127501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:37:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:37:45.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:37:45.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:37:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 37, 23), 13.0, 43.7, 0.0, 15.81, 21.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:37:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:37:23
2026-02-11T10:37:47.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:37:47.635 [DEBUG] [Thread-127502] [transport.py] [_log()] starting thread (client mode): 0xa575b370
2026-02-11T10:37:47.635 [DEBUG] [Thread-127502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:37:47.654 [DEBUG] [Thread-127502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:37:47.655 [INFO] [Thread-127502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:47.658 [DEBUG] [Thread-127502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] client lang: <none>
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] server lang: <none>
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] kex follows: False
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] Compression: none
2026-02-11T10:37:47.659 [DEBUG] [Thread-127502] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:37:47.677 [DEBUG] [Thread-127502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:37:47.678 [DEBUG] [Thread-127502] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:37:47.678 [DEBUG] [Thread-127502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:37:47.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:37:47.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:37:47.680 [DEBUG] [Thread-127502] [transport.py] [_log()] userauth is OK
2026-02-11T10:37:47.680 [DEBUG] [Thread-127502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:37:47.681 [DEBUG] [Thread-127502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:37:47.681 [DEBUG] [Thread-127502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:37:47.681 [DEBUG] [Thread-127502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:37:47.699 [INFO] [Thread-127502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:37:47.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:37:48.504 [DEBUG] [Thread-127502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:37:48.504 [DEBUG] [Thread-127502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:37:48.504 [DEBUG] [Thread-127502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:37:48.544 [DEBUG] [Thread-127502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:37:48.544 [DEBUG] [Thread-127502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:37:48.547 [DEBUG] [Thread-127502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:37:48.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:37:48.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:37:48.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:37:48.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:37:48.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:37:48.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:37:48.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:37:48.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:37:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:37:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.359167 -999.00  +21.10  11.42     51  +10.70 1 2 1 1 1   888    0 11.59 20.30 ----- 9.7 11.4 298.0 14.3 26.1 -20.6 25.9 -19.3 24.8 -17.2 25.3 -17.9
2026-02-11T10:37:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:37:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:37:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.359167
2026-02-11T10:37:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:37:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:37:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:37:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:37:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:37:48.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:37:23', tmtdew=13.0, humidity=43.7, cloud=0.0, wind=15.81, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:37:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:37:48.571 [DEBUG] [Thread-127502] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:37:48.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:37:48.671 [DEBUG] [Thread-127505] [transport.py] [_log()] starting thread (client mode): 0xa2d541f0
2026-02-11T10:37:48.671 [DEBUG] [Thread-127505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:37:48.686 [DEBUG] [Thread-127505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:37:48.686 [INFO] [Thread-127505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] client lang: <none>
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] server lang: <none>
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] kex follows: False
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:37:48.694 [DEBUG] [Thread-127505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:37:48.695 [DEBUG] [Thread-127505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:37:48.695 [DEBUG] [Thread-127505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:37:48.695 [DEBUG] [Thread-127505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:37:48.695 [DEBUG] [Thread-127505] [transport.py] [_log()] Compression: none
2026-02-11T10:37:48.695 [DEBUG] [Thread-127505] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:37:48.756 [DEBUG] [Thread-127505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:37:48.757 [DEBUG] [Thread-127505] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:37:48.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:37:48.758 [DEBUG] [Thread-127505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:37:48.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:37:48.812 [DEBUG] [Thread-127505] [transport.py] [_log()] userauth is OK
2026-02-11T10:37:48.813 [DEBUG] [Thread-127505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:37:48.813 [DEBUG] [Thread-127505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:37:48.813 [DEBUG] [Thread-127505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:37:48.813 [DEBUG] [Thread-127505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:37:48.832 [INFO] [Thread-127505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:37:48.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:37:48.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:37:49.700 [DEBUG] [Thread-127505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:37:49.700 [DEBUG] [Thread-127505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:37:49.749 [DEBUG] [Thread-127505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:37:49.749 [DEBUG] [Thread-127505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:37:49.758 [DEBUG] [Thread-127505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:37:49.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:37:49.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:37:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:37:49.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:37:49.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:37:49.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:37:49.796 [DEBUG] [Thread-127505] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:37:51.758 [DEBUG] [Thread-127507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:37:52.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:37:52.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:06.812 [DEBUG] [Thread-127508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:09.150 [DEBUG] [Thread-127509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:19.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:38:19.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:38:19.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:38:21.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 37, 58), 12.52, 44.78, 0.0, 12.62, 21.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:38:21.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:37:58
2026-02-11T10:38:21.847 [DEBUG] [Thread-127510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:22.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:38:22.196 [DEBUG] [Thread-127511] [transport.py] [_log()] starting thread (client mode): 0xa57d66e0
2026-02-11T10:38:22.197 [DEBUG] [Thread-127511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:38:22.216 [DEBUG] [Thread-127511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:38:22.217 [INFO] [Thread-127511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:38:22.219 [DEBUG] [Thread-127511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:38:22.219 [DEBUG] [Thread-127511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:38:22.219 [DEBUG] [Thread-127511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] client lang: <none>
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] server lang: <none>
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] kex follows: False
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] Compression: none
2026-02-11T10:38:22.220 [DEBUG] [Thread-127511] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:38:22.236 [DEBUG] [Thread-127511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:38:22.236 [DEBUG] [Thread-127511] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:38:22.237 [DEBUG] [Thread-127511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:38:22.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:38:22.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:38:22.239 [DEBUG] [Thread-127511] [transport.py] [_log()] userauth is OK
2026-02-11T10:38:22.239 [DEBUG] [Thread-127511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:38:22.239 [DEBUG] [Thread-127511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:38:22.239 [DEBUG] [Thread-127511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:38:22.239 [DEBUG] [Thread-127511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:38:22.260 [INFO] [Thread-127511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:38:22.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:38:22.916 [DEBUG] [Thread-127511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:38:22.917 [DEBUG] [Thread-127511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:38:22.917 [DEBUG] [Thread-127511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:38:22.959 [DEBUG] [Thread-127511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:38:22.959 [DEBUG] [Thread-127511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:38:22.962 [DEBUG] [Thread-127511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:38:22.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:38:22.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:38:22.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:38:22.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:38:22.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:38:22.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:38:22.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:38:22.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.359520 -999.00  +21.20  15.35     51  +10.70 1 2 1 1 1   888    0 11.39 20.41 ----- 13.2 15.3 290.6 17.9 26.1 -19.4 25.8 -18.8 24.8 -16.3 25.3 -15.8
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.359520
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:38:22.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:37:58', tmtdew=12.52, humidity=44.78, cloud=0.0, wind=12.62, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:37:42.528', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:38:22.983 [DEBUG] [Thread-127511] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:38:23.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:38:23.073 [DEBUG] [Thread-127514] [transport.py] [_log()] starting thread (client mode): 0xa2d92380
2026-02-11T10:38:23.073 [DEBUG] [Thread-127514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:38:23.088 [DEBUG] [Thread-127514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:38:23.088 [INFO] [Thread-127514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:38:23.097 [DEBUG] [Thread-127514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] client lang: <none>
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] server lang: <none>
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] kex follows: False
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:38:23.098 [DEBUG] [Thread-127514] [transport.py] [_log()] Compression: none
2026-02-11T10:38:23.099 [DEBUG] [Thread-127514] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:38:23.155 [DEBUG] [Thread-127514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:38:23.155 [DEBUG] [Thread-127514] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:38:23.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:38:23.156 [DEBUG] [Thread-127514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:38:23.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:38:23.217 [DEBUG] [Thread-127514] [transport.py] [_log()] userauth is OK
2026-02-11T10:38:23.217 [DEBUG] [Thread-127514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:38:23.217 [DEBUG] [Thread-127514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:38:23.217 [DEBUG] [Thread-127514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:38:23.217 [DEBUG] [Thread-127514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:38:23.239 [INFO] [Thread-127514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:38:23.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:38:23.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:38:24.095 [DEBUG] [Thread-127514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:38:24.095 [DEBUG] [Thread-127514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:38:24.143 [DEBUG] [Thread-127514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:38:24.143 [DEBUG] [Thread-127514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:38:24.153 [DEBUG] [Thread-127514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:38:24.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:38:24.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:38:24.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:38:24.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:38:24.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:38:24.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:38:24.190 [DEBUG] [Thread-127514] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:38:36.884 [DEBUG] [Thread-127516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:51.939 [DEBUG] [Thread-127517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:52.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:52.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:38:54.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:38:54.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:38:54.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:38:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 38, 34), 13.28, 42.69, 0.0, 14.12, 22.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:38:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:38:34
2026-02-11T10:38:56.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:38:56.583 [DEBUG] [Thread-127518] [transport.py] [_log()] starting thread (client mode): 0xa2d00970
2026-02-11T10:38:56.583 [DEBUG] [Thread-127518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:38:56.604 [DEBUG] [Thread-127518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:38:56.604 [INFO] [Thread-127518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] client lang: <none>
2026-02-11T10:38:56.607 [DEBUG] [Thread-127518] [transport.py] [_log()] server lang: <none>
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] kex follows: False
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] Compression: none
2026-02-11T10:38:56.608 [DEBUG] [Thread-127518] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:38:56.624 [DEBUG] [Thread-127518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:38:56.625 [DEBUG] [Thread-127518] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:38:56.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:38:56.626 [DEBUG] [Thread-127518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:38:56.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:38:56.627 [DEBUG] [Thread-127518] [transport.py] [_log()] userauth is OK
2026-02-11T10:38:56.627 [DEBUG] [Thread-127518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:38:56.627 [DEBUG] [Thread-127518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:38:56.627 [DEBUG] [Thread-127518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:38:56.628 [DEBUG] [Thread-127518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:38:56.660 [INFO] [Thread-127518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:38:56.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:38:57.309 [DEBUG] [Thread-127518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:38:57.310 [DEBUG] [Thread-127518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:38:57.310 [DEBUG] [Thread-127518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:38:57.351 [DEBUG] [Thread-127518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:38:57.351 [DEBUG] [Thread-127518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:38:57.353 [DEBUG] [Thread-127518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:38:57.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:38:57.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:38:57.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:38:57.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:38:57.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:38:57.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:38:57.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:38:57.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:38:57.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:38:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.359861 -999.00  +21.20  12.70     51  +10.70 1 2 1 1 1   888    0 11.23 19.76 ----- 10.1 12.7 292.0 15.2 26.7 -13.7 25.9 -14.2 25.4 -12.8 26.0 -12.6
2026-02-11T10:38:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:38:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:38:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.359861
2026-02-11T10:38:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:38:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:38:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:38:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:38:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:38:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:38:34', tmtdew=13.28, humidity=42.69, cloud=0.0, wind=14.12, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:38:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:38:57.378 [DEBUG] [Thread-127518] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:38:57.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:38:57.476 [DEBUG] [Thread-127521] [transport.py] [_log()] starting thread (client mode): 0xa2d54e80
2026-02-11T10:38:57.476 [DEBUG] [Thread-127521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:38:57.491 [DEBUG] [Thread-127521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:38:57.491 [INFO] [Thread-127521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:38:57.498 [DEBUG] [Thread-127521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:38:57.498 [DEBUG] [Thread-127521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] client lang: <none>
2026-02-11T10:38:57.499 [DEBUG] [Thread-127521] [transport.py] [_log()] server lang: <none>
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] kex follows: False
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] Compression: none
2026-02-11T10:38:57.500 [DEBUG] [Thread-127521] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:38:57.555 [DEBUG] [Thread-127521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:38:57.556 [DEBUG] [Thread-127521] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:38:57.557 [DEBUG] [Thread-127521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:38:57.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:38:57.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:38:57.611 [DEBUG] [Thread-127521] [transport.py] [_log()] userauth is OK
2026-02-11T10:38:57.612 [DEBUG] [Thread-127521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:38:57.612 [DEBUG] [Thread-127521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:38:57.612 [DEBUG] [Thread-127521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:38:57.612 [DEBUG] [Thread-127521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:38:57.634 [INFO] [Thread-127521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:38:57.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:38:57.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:38:58.496 [DEBUG] [Thread-127521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:38:58.497 [DEBUG] [Thread-127521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:38:58.545 [DEBUG] [Thread-127521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:38:58.545 [DEBUG] [Thread-127521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:38:58.553 [DEBUG] [Thread-127521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:38:58.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:38:58.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:38:58.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:38:58.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:38:58.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:38:58.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:38:58.589 [DEBUG] [Thread-127521] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:39:06.974 [DEBUG] [Thread-127523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:39:09.208 [DEBUG] [Thread-127524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:39:22.026 [DEBUG] [Thread-127525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:39:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:39:28.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:39:28.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:39:30.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 39, 10), 12.76, 44.2, 0.0, 11.42, 21.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:39:30.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:39:10
2026-02-11T10:39:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:39:30.971 [DEBUG] [Thread-127526] [transport.py] [_log()] starting thread (client mode): 0xa2dc7250
2026-02-11T10:39:30.971 [DEBUG] [Thread-127526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:39:30.990 [DEBUG] [Thread-127526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:39:30.991 [INFO] [Thread-127526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:39:30.994 [DEBUG] [Thread-127526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:39:30.994 [DEBUG] [Thread-127526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:39:30.994 [DEBUG] [Thread-127526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] client lang: <none>
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] server lang: <none>
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] kex follows: False
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] Compression: none
2026-02-11T10:39:30.995 [DEBUG] [Thread-127526] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:39:31.013 [DEBUG] [Thread-127526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:39:31.013 [DEBUG] [Thread-127526] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:39:31.014 [DEBUG] [Thread-127526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:39:31.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:39:31.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:39:31.057 [DEBUG] [Thread-127526] [transport.py] [_log()] userauth is OK
2026-02-11T10:39:31.057 [DEBUG] [Thread-127526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:39:31.057 [DEBUG] [Thread-127526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:39:31.058 [DEBUG] [Thread-127526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:39:31.058 [DEBUG] [Thread-127526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:39:31.084 [INFO] [Thread-127526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:39:31.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:39:31.722 [DEBUG] [Thread-127526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:39:31.722 [DEBUG] [Thread-127526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:39:31.723 [DEBUG] [Thread-127526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:39:31.763 [DEBUG] [Thread-127526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:39:31.764 [DEBUG] [Thread-127526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:39:31.767 [DEBUG] [Thread-127526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:39:31.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:39:31.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:39:31.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:39:31.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:39:31.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:39:31.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:39:31.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:39:31.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:39:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:39:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.360214 -999.00  +21.30  17.28     51  +10.80 1 2 1 1 1   888    0 11.30 17.38 ----- 15.6 17.3 287.2 19.2 27.2 -14.3 26.5 -13.8 25.7 -12.6 26.2 -12.6
2026-02-11T10:39:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:39:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:39:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.360214
2026-02-11T10:39:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:39:31.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:39:31.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:39:31.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:39:31.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:39:31.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:39:10', tmtdew=12.76, humidity=44.2, cloud=0.0, wind=11.42, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:38:42.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:39:31.793 [DEBUG] [Thread-127526] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:39:31.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:39:31.887 [DEBUG] [Thread-127529] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-11T10:39:31.887 [DEBUG] [Thread-127529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:39:31.903 [DEBUG] [Thread-127529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:39:31.903 [INFO] [Thread-127529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:39:31.910 [DEBUG] [Thread-127529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] client lang: <none>
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] server lang: <none>
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] kex follows: False
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] Compression: none
2026-02-11T10:39:31.911 [DEBUG] [Thread-127529] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:39:31.968 [DEBUG] [Thread-127529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:39:31.969 [DEBUG] [Thread-127529] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:39:31.969 [DEBUG] [Thread-127529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:39:31.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:39:31.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:39:32.024 [DEBUG] [Thread-127529] [transport.py] [_log()] userauth is OK
2026-02-11T10:39:32.024 [DEBUG] [Thread-127529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:39:32.024 [DEBUG] [Thread-127529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:39:32.024 [DEBUG] [Thread-127529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:39:32.024 [DEBUG] [Thread-127529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:39:32.044 [INFO] [Thread-127529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:39:32.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:39:32.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:39:32.905 [DEBUG] [Thread-127529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:39:32.905 [DEBUG] [Thread-127529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:39:32.952 [DEBUG] [Thread-127529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:39:32.953 [DEBUG] [Thread-127529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:39:32.961 [DEBUG] [Thread-127529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:39:32.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:39:32.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:39:32.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:39:32.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:39:32.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:39:32.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:39:32.993 [DEBUG] [Thread-127529] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:39:37.063 [DEBUG] [Thread-127531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:39:52.117 [DEBUG] [Thread-127532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:39:52.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:39:52.434 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:40:03.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:40:03.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:40:03.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
2026-02-11T10:40:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 39, 46), 13.21, 42.7, 0.0, 18.32, 22.37, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:40:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:39:46
2026-02-11T10:40:05.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:40:05.908 [DEBUG] [Thread-127533] [transport.py] [_log()] starting thread (client mode): 0xa2d03640
2026-02-11T10:40:05.909 [DEBUG] [Thread-127533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:40:05.929 [DEBUG] [Thread-127533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:40:05.929 [INFO] [Thread-127533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:40:05.932 [DEBUG] [Thread-127533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] client lang: <none>
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] server lang: <none>
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] kex follows: False
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] Compression: none
2026-02-11T10:40:05.933 [DEBUG] [Thread-127533] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:40:05.950 [DEBUG] [Thread-127533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:40:05.951 [DEBUG] [Thread-127533] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:40:05.952 [DEBUG] [Thread-127533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:40:05.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:40:05.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:40:05.954 [DEBUG] [Thread-127533] [transport.py] [_log()] userauth is OK
2026-02-11T10:40:05.954 [DEBUG] [Thread-127533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:40:05.954 [DEBUG] [Thread-127533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:40:05.954 [DEBUG] [Thread-127533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:40:05.954 [DEBUG] [Thread-127533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:40:05.978 [INFO] [Thread-127533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:40:05.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:40:07.152 [DEBUG] [Thread-127535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:40:08.813 [DEBUG] [Thread-127533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:40:08.813 [DEBUG] [Thread-127533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:40:08.814 [DEBUG] [Thread-127533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:40:08.854 [DEBUG] [Thread-127533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:40:08.855 [DEBUG] [Thread-127533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:40:08.858 [DEBUG] [Thread-127533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:40:08.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:40:08.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:40:08.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:40:08.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:40:08.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:40:08.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:40:08.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:40:08.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:40:08.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:40:08.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.360556 -999.00  +21.80  19.15     50  +11.10 1 2 1 1 1   888    0 11.25 15.00 ----- 19.4 19.1 298.2 23.4 27.6 -13.8 26.8 -13.9 25.8 -13.2 26.5 -13.5
2026-02-11T10:40:08.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:40:08.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:40:08.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.360556
2026-02-11T10:40:08.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:40:08.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:40:08.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:40:08.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:40:08.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:40:08.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:39:46', tmtdew=13.21, humidity=42.7, cloud=0.0, wind=18.32, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:39:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:40:08.887 [DEBUG] [Thread-127533] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:40:08.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:40:08.982 [DEBUG] [Thread-127537] [transport.py] [_log()] starting thread (client mode): 0xa2d02320
2026-02-11T10:40:08.982 [DEBUG] [Thread-127537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:40:08.998 [DEBUG] [Thread-127537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:40:08.998 [INFO] [Thread-127537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:40:09.006 [DEBUG] [Thread-127537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:40:09.006 [DEBUG] [Thread-127537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:40:09.006 [DEBUG] [Thread-127537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] client lang: <none>
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] server lang: <none>
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] kex follows: False
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:40:09.007 [DEBUG] [Thread-127537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:40:09.008 [DEBUG] [Thread-127537] [transport.py] [_log()] Compression: none
2026-02-11T10:40:09.008 [DEBUG] [Thread-127537] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:40:09.064 [DEBUG] [Thread-127537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:40:09.065 [DEBUG] [Thread-127537] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:40:09.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:40:09.066 [DEBUG] [Thread-127537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:40:09.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:40:09.124 [DEBUG] [Thread-127537] [transport.py] [_log()] userauth is OK
2026-02-11T10:40:09.124 [DEBUG] [Thread-127537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:40:09.124 [DEBUG] [Thread-127537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:40:09.124 [DEBUG] [Thread-127537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:40:09.125 [DEBUG] [Thread-127537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:40:09.144 [INFO] [Thread-127537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:40:09.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:40:09.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:40:09.269 [DEBUG] [Thread-127539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:40:09.978 [DEBUG] [Thread-127537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:40:09.978 [DEBUG] [Thread-127537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:40:10.025 [DEBUG] [Thread-127537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:40:10.025 [DEBUG] [Thread-127537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:40:10.034 [DEBUG] [Thread-127537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:40:10.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:40:10.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:40:10.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:40:10.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:40:10.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:40:10.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:40:10.070 [DEBUG] [Thread-127537] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:40:22.190 [DEBUG] [Thread-127540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:40:37.244 [DEBUG] [Thread-127541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:40:40.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:40:40.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:40:40.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
2026-02-11T10:40:41.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 40, 22), 13.16, 42.85, 0.0, 22.85, 22.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:40:41.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:40:22
2026-02-11T10:40:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:40:42.459 [DEBUG] [Thread-127542] [transport.py] [_log()] starting thread (client mode): 0xa2d79060
2026-02-11T10:40:42.460 [DEBUG] [Thread-127542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:40:42.479 [DEBUG] [Thread-127542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:40:42.479 [INFO] [Thread-127542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:40:42.480 [DEBUG] [Thread-127542] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] client lang: <none>
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] server lang: <none>
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] kex follows: False
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] Compression: none
2026-02-11T10:40:42.481 [DEBUG] [Thread-127542] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:40:42.491 [DEBUG] [Thread-127542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:40:42.491 [DEBUG] [Thread-127542] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:40:42.492 [DEBUG] [Thread-127542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:40:42.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:40:42.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:40:42.493 [DEBUG] [Thread-127542] [transport.py] [_log()] userauth is OK
2026-02-11T10:40:42.494 [DEBUG] [Thread-127542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:40:42.494 [DEBUG] [Thread-127542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:40:42.494 [DEBUG] [Thread-127542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:40:42.494 [DEBUG] [Thread-127542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:40:42.509 [INFO] [Thread-127542] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:40:42.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:40:43.156 [DEBUG] [Thread-127542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:40:43.156 [DEBUG] [Thread-127542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:40:43.156 [DEBUG] [Thread-127542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:40:43.199 [DEBUG] [Thread-127542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:40:43.199 [DEBUG] [Thread-127542] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:40:43.201 [DEBUG] [Thread-127542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:40:43.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:40:43.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:40:43.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:40:43.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:40:43.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:40:43.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:40:43.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:40:43.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:40:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:40:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.360903 -999.00  +21.90  20.18     49  +11.00 1 2 1 1 1   888    0 11.25 14.29 ----- 21.1 20.2 295.2 25.4 27.9 -15.5 27.1 -15.0 25.9 -12.3 26.7 -12.8
2026-02-11T10:40:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:40:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:40:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.360903
2026-02-11T10:40:43.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:40:43.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:40:43.223 [DEBUG] [Thread-127542] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:40:43.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:40:43.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:40:43.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:40:43.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:40:22', tmtdew=13.16, humidity=42.85, cloud=0.0, wind=22.85, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:39:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:40:43.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:40:43.317 [DEBUG] [Thread-127545] [transport.py] [_log()] starting thread (client mode): 0xa2d91b70
2026-02-11T10:40:43.317 [DEBUG] [Thread-127545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:40:43.335 [DEBUG] [Thread-127545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:40:43.336 [INFO] [Thread-127545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:40:43.343 [DEBUG] [Thread-127545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:40:43.343 [DEBUG] [Thread-127545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:40:43.343 [DEBUG] [Thread-127545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:40:43.343 [DEBUG] [Thread-127545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:43.343 [DEBUG] [Thread-127545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:40:43.343 [DEBUG] [Thread-127545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] client lang: <none>
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] server lang: <none>
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] kex follows: False
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:40:43.344 [DEBUG] [Thread-127545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:40:43.345 [DEBUG] [Thread-127545] [transport.py] [_log()] Compression: none
2026-02-11T10:40:43.345 [DEBUG] [Thread-127545] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:40:43.404 [DEBUG] [Thread-127545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:40:43.404 [DEBUG] [Thread-127545] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:40:43.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:40:43.406 [DEBUG] [Thread-127545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:40:43.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:40:43.466 [DEBUG] [Thread-127545] [transport.py] [_log()] userauth is OK
2026-02-11T10:40:43.466 [DEBUG] [Thread-127545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:40:43.466 [DEBUG] [Thread-127545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:40:43.467 [DEBUG] [Thread-127545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:40:43.467 [DEBUG] [Thread-127545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:40:43.489 [INFO] [Thread-127545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:40:43.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:40:43.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:40:44.362 [DEBUG] [Thread-127545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:40:44.363 [DEBUG] [Thread-127545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:40:44.413 [DEBUG] [Thread-127545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:40:44.413 [DEBUG] [Thread-127545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:40:44.425 [DEBUG] [Thread-127545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:40:44.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:40: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')
2026-02-11T10:40:44.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:40:44.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:40:44.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:40:44.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:40:44.472 [DEBUG] [Thread-127545] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:40:52.281 [DEBUG] [Thread-127547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:40:52.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:40:52.575 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:07.331 [DEBUG] [Thread-127548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:09.319 [DEBUG] [Thread-127549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:41:14.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:41:14.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:41:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 40, 57), 13.76, 41.49, 0.0, 16.73, 23.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:41:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:40:57
2026-02-11T10:41:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:41:16.809 [DEBUG] [Thread-127550] [transport.py] [_log()] starting thread (client mode): 0xa2dc62f0
2026-02-11T10:41:16.810 [DEBUG] [Thread-127550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:41:16.830 [DEBUG] [Thread-127550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:41:16.830 [INFO] [Thread-127550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:16.833 [DEBUG] [Thread-127550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] client lang: <none>
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] server lang: <none>
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] kex follows: False
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] Compression: none
2026-02-11T10:41:16.834 [DEBUG] [Thread-127550] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:41:16.863 [DEBUG] [Thread-127550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:41:16.863 [DEBUG] [Thread-127550] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:41:16.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:41:16.864 [DEBUG] [Thread-127550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:41:16.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:41:16.866 [DEBUG] [Thread-127550] [transport.py] [_log()] userauth is OK
2026-02-11T10:41:16.866 [DEBUG] [Thread-127550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:41:16.867 [DEBUG] [Thread-127550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:41:16.867 [DEBUG] [Thread-127550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:41:16.867 [DEBUG] [Thread-127550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:41:16.891 [INFO] [Thread-127550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:41:16.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:41:17.504 [DEBUG] [Thread-127550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:41:17.505 [DEBUG] [Thread-127550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:41:17.505 [DEBUG] [Thread-127550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:41:17.546 [DEBUG] [Thread-127550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:41:17.546 [DEBUG] [Thread-127550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:41:17.549 [DEBUG] [Thread-127550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:41:17.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:41:17.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:41:17.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:41:17.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:41:17.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:41:17.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:41:17.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:41:17.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:41:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:41:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.361603 -999.00  +21.70  18.16     49  +10.70 1 2 1 1 1   888    0 11.40 15.00 ----- 13.1 18.2 285.4 22.0 28.1 -14.4 27.5 -15.4 25.9 -13.4 26.9 -13.1
2026-02-11T10:41:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:41:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:41:17.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.361603
2026-02-11T10:41:17.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:41:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:41:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:41:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:41:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:41:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:40:57', tmtdew=13.76, humidity=41.49, cloud=0.0, wind=16.73, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:40:42.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:41:17.576 [DEBUG] [Thread-127550] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:41:17.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:41:17.669 [DEBUG] [Thread-127553] [transport.py] [_log()] starting thread (client mode): 0xa2ddead0
2026-02-11T10:41:17.669 [DEBUG] [Thread-127553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:41:17.683 [DEBUG] [Thread-127553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:41:17.683 [INFO] [Thread-127553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] client lang: <none>
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] server lang: <none>
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] kex follows: False
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] Compression: none
2026-02-11T10:41:17.691 [DEBUG] [Thread-127553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:41:17.746 [DEBUG] [Thread-127553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:41:17.746 [DEBUG] [Thread-127553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:41:17.746 [DEBUG] [Thread-127553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:41:17.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:41:17.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:41:17.808 [DEBUG] [Thread-127553] [transport.py] [_log()] userauth is OK
2026-02-11T10:41:17.808 [DEBUG] [Thread-127553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:41:17.808 [DEBUG] [Thread-127553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:41:17.808 [DEBUG] [Thread-127553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:41:17.808 [DEBUG] [Thread-127553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:41:17.826 [INFO] [Thread-127553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:41:17.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:41:17.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:41:18.675 [DEBUG] [Thread-127553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:41:18.675 [DEBUG] [Thread-127553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:41:18.722 [DEBUG] [Thread-127553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:41:18.723 [DEBUG] [Thread-127553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:41:18.732 [DEBUG] [Thread-127553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:41:18.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:41:18.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:41:18.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:41:18.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:41:18.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:41:18.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:41:18.773 [DEBUG] [Thread-127553] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:41:22.367 [DEBUG] [Thread-127555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:37.419 [DEBUG] [Thread-127556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:48.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:41:48.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:41:48.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
2026-02-11T10:41:50.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 41, 33), 14.62, 39.48, 0.0, 23.18, 24.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:41:50.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:41:33
2026-02-11T10:41:51.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:41:51.414 [DEBUG] [Thread-127557] [transport.py] [_log()] starting thread (client mode): 0xa2ddfbb0
2026-02-11T10:41:51.415 [DEBUG] [Thread-127557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:41:51.436 [DEBUG] [Thread-127557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:41:51.436 [INFO] [Thread-127557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:41:51.438 [DEBUG] [Thread-127557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:41:51.438 [DEBUG] [Thread-127557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:41:51.438 [DEBUG] [Thread-127557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:41:51.438 [DEBUG] [Thread-127557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:51.438 [DEBUG] [Thread-127557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:51.438 [DEBUG] [Thread-127557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:51.438 [DEBUG] [Thread-127557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] client lang: <none>
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] server lang: <none>
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] kex follows: False
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] Compression: none
2026-02-11T10:41:51.439 [DEBUG] [Thread-127557] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:41:51.456 [DEBUG] [Thread-127557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:41:51.457 [DEBUG] [Thread-127557] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:41:51.457 [DEBUG] [Thread-127557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:41:51.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:41:51.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:41:51.459 [DEBUG] [Thread-127557] [transport.py] [_log()] userauth is OK
2026-02-11T10:41:51.459 [DEBUG] [Thread-127557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:41:51.459 [DEBUG] [Thread-127557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:41:51.460 [DEBUG] [Thread-127557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:41:51.460 [DEBUG] [Thread-127557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:41:51.485 [INFO] [Thread-127557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:41:51.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:41:52.135 [DEBUG] [Thread-127557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:41:52.135 [DEBUG] [Thread-127557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:41:52.135 [DEBUG] [Thread-127557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:41:52.176 [DEBUG] [Thread-127557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:41:52.176 [DEBUG] [Thread-127557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:41:52.179 [DEBUG] [Thread-127557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:41:52.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:41:52.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:41:52.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:41:52.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:41:52.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:41:52.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:41:52.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:41:52.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:41:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:41:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.361950 -999.00  +22.00  22.64     49  +10.90 1 2 1 1 1   888    0 11.11 13.41 ----- 23.1 22.6 273.0 26.3 28.6 -15.4 27.6 -14.1 26.0 -16.9 27.0 -13.2
2026-02-11T10:41:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:41:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:41:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.361950
2026-02-11T10:41:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:41:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:41:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:41:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:41:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:41:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:41:33', tmtdew=14.62, humidity=39.48, cloud=0.0, wind=23.18, temperature=24.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:41:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:41:52.205 [DEBUG] [Thread-127557] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:41:52.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:41:52.300 [DEBUG] [Thread-127560] [transport.py] [_log()] starting thread (client mode): 0xa57b18d0
2026-02-11T10:41:52.300 [DEBUG] [Thread-127560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:41:52.315 [DEBUG] [Thread-127560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:41:52.315 [INFO] [Thread-127560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:41:52.323 [DEBUG] [Thread-127560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:41:52.323 [DEBUG] [Thread-127560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:41:52.323 [DEBUG] [Thread-127560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] client lang: <none>
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] server lang: <none>
2026-02-11T10:41:52.324 [DEBUG] [Thread-127560] [transport.py] [_log()] kex follows: False
2026-02-11T10:41:52.325 [DEBUG] [Thread-127560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:41:52.325 [DEBUG] [Thread-127560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:41:52.325 [DEBUG] [Thread-127560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:41:52.325 [DEBUG] [Thread-127560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:41:52.325 [DEBUG] [Thread-127560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:41:52.325 [DEBUG] [Thread-127560] [transport.py] [_log()] Compression: none
2026-02-11T10:41:52.325 [DEBUG] [Thread-127560] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:41:52.384 [DEBUG] [Thread-127560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:41:52.385 [DEBUG] [Thread-127560] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:41:52.385 [DEBUG] [Thread-127560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:41:52.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:41:52.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:41:52.447 [DEBUG] [Thread-127560] [transport.py] [_log()] userauth is OK
2026-02-11T10:41:52.448 [DEBUG] [Thread-127560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:41:52.448 [DEBUG] [Thread-127560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:41:52.448 [DEBUG] [Thread-127560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:41:52.448 [DEBUG] [Thread-127560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:41:52.456 [DEBUG] [Thread-127562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:52.468 [INFO] [Thread-127560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:41:52.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:41:52.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:41:52.713 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:52.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:41:53.302 [DEBUG] [Thread-127560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:41:53.302 [DEBUG] [Thread-127560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:41:53.350 [DEBUG] [Thread-127560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:41:53.351 [DEBUG] [Thread-127560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:41:53.360 [DEBUG] [Thread-127560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:41:53.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:41:53.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:41:53.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:41:53.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:41:53.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:41:53.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:41:53.396 [DEBUG] [Thread-127560] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:42:07.515 [DEBUG] [Thread-127563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:42:09.370 [DEBUG] [Thread-127564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:42:22.554 [DEBUG] [Thread-127565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:42:23.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:42:23.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:42:23.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:42:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 42, 9), 14.15, 40.64, 0.0, 18.25, 22.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:42:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:42:09
2026-02-11T10:42:25.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:42:25.838 [DEBUG] [Thread-127566] [transport.py] [_log()] starting thread (client mode): 0xa2dc4670
2026-02-11T10:42:25.839 [DEBUG] [Thread-127566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:42:25.859 [DEBUG] [Thread-127566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:42:25.859 [INFO] [Thread-127566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:42:25.862 [DEBUG] [Thread-127566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] client lang: <none>
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] server lang: <none>
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] kex follows: False
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] Compression: none
2026-02-11T10:42:25.863 [DEBUG] [Thread-127566] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:42:25.883 [DEBUG] [Thread-127566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:42:25.884 [DEBUG] [Thread-127566] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:42:25.884 [DEBUG] [Thread-127566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:42:25.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:42:25.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:42:25.886 [DEBUG] [Thread-127566] [transport.py] [_log()] userauth is OK
2026-02-11T10:42:25.887 [DEBUG] [Thread-127566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:42:25.887 [DEBUG] [Thread-127566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:42:25.887 [DEBUG] [Thread-127566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:42:25.887 [DEBUG] [Thread-127566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:42:25.905 [INFO] [Thread-127566] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:42:25.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:42:26.671 [DEBUG] [Thread-127566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:42:26.671 [DEBUG] [Thread-127566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:42:26.672 [DEBUG] [Thread-127566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:42:26.712 [DEBUG] [Thread-127566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:42:26.713 [DEBUG] [Thread-127566] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:42:26.716 [DEBUG] [Thread-127566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:42:26.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:42:26.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:42:26.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:42:26.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:42:26.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:42:26.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:42:26.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:42:26.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:42:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:42:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.362297 -999.00  +22.10  13.47     48  +10.80 1 2 1 1 1   888    0 11.46 13.44 ----- 11.9 13.5 272.6 25.6 28.7 -14.5 27.8 -14.5 26.4 -12.6 27.2 -13.5
2026-02-11T10:42:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:42:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:42:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.362297
2026-02-11T10:42:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:42:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:42:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:42:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:42:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:42:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:42:09', tmtdew=14.15, humidity=40.64, cloud=0.0, wind=18.25, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:41:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:42:26.746 [DEBUG] [Thread-127566] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:42:26.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:42:26.843 [DEBUG] [Thread-127569] [transport.py] [_log()] starting thread (client mode): 0xa2dc7760
2026-02-11T10:42:26.844 [DEBUG] [Thread-127569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:42:26.859 [DEBUG] [Thread-127569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:42:26.859 [INFO] [Thread-127569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:42:26.866 [DEBUG] [Thread-127569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:42:26.867 [DEBUG] [Thread-127569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:42:26.867 [DEBUG] [Thread-127569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:42:26.867 [DEBUG] [Thread-127569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:42:26.867 [DEBUG] [Thread-127569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:42:26.867 [DEBUG] [Thread-127569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:42:26.867 [DEBUG] [Thread-127569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] client lang: <none>
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] server lang: <none>
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] kex follows: False
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:42:26.868 [DEBUG] [Thread-127569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:42:26.869 [DEBUG] [Thread-127569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:42:26.869 [DEBUG] [Thread-127569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:42:26.869 [DEBUG] [Thread-127569] [transport.py] [_log()] Compression: none
2026-02-11T10:42:26.869 [DEBUG] [Thread-127569] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:42:26.933 [DEBUG] [Thread-127569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:42:26.933 [DEBUG] [Thread-127569] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:42:26.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:42:26.935 [DEBUG] [Thread-127569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:42:26.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:42:26.995 [DEBUG] [Thread-127569] [transport.py] [_log()] userauth is OK
2026-02-11T10:42:26.996 [DEBUG] [Thread-127569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:42:26.996 [DEBUG] [Thread-127569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:42:26.996 [DEBUG] [Thread-127569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:42:26.996 [DEBUG] [Thread-127569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:42:27.015 [INFO] [Thread-127569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:42:27.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:42:27.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:42:27.893 [DEBUG] [Thread-127569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:42:27.893 [DEBUG] [Thread-127569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:42:27.940 [DEBUG] [Thread-127569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:42:27.940 [DEBUG] [Thread-127569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:42:27.949 [DEBUG] [Thread-127569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:42:27.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:42: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')
2026-02-11T10:42:27.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
2026-02-11T10:42:27.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:42:27.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:42:27.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:42:27.986 [DEBUG] [Thread-127569] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:42:37.591 [DEBUG] [Thread-127571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:42:52.649 [DEBUG] [Thread-127572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:42:52.861 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:42:52.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:42:57.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:42:57.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:42:57.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:42:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 42, 44), 13.82, 41.44, 0.0, 15.69, 22.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:42:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:42:44
2026-02-11T10:43:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:43:00.330 [DEBUG] [Thread-127573] [transport.py] [_log()] starting thread (client mode): 0xa2dc7be0
2026-02-11T10:43:00.331 [DEBUG] [Thread-127573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:43:00.350 [DEBUG] [Thread-127573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:43:00.350 [INFO] [Thread-127573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] client lang: <none>
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] server lang: <none>
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] kex follows: False
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] Compression: none
2026-02-11T10:43:00.352 [DEBUG] [Thread-127573] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:43:00.370 [DEBUG] [Thread-127573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:43:00.371 [DEBUG] [Thread-127573] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:43:00.372 [DEBUG] [Thread-127573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:43:00.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:43:00.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:43:00.374 [DEBUG] [Thread-127573] [transport.py] [_log()] userauth is OK
2026-02-11T10:43:00.374 [DEBUG] [Thread-127573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:43:00.374 [DEBUG] [Thread-127573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:43:00.374 [DEBUG] [Thread-127573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:43:00.374 [DEBUG] [Thread-127573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:43:00.389 [INFO] [Thread-127573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:43:00.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:43:01.019 [DEBUG] [Thread-127573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:43:01.020 [DEBUG] [Thread-127573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:43:01.020 [DEBUG] [Thread-127573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:43:01.060 [DEBUG] [Thread-127573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:43:01.060 [DEBUG] [Thread-127573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:43:01.063 [DEBUG] [Thread-127573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:43:01.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:43:01.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:43:01.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:43:01.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:43:01.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:43:01.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:43:01.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.362639 -999.00  +22.30   8.09     48  +11.00 1 2 1 1 1   888    0 11.16 14.52 ----- 11.2 8.1 270.7 15.8 29.0 -17.9 28.0 -14.0 26.4 -16.5 27.1 -17.7
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.362639
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:43:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:43:01.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:43:01.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:43:01.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:42:44', tmtdew=13.82, humidity=41.44, cloud=0.0, wind=15.69, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:42:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:43:01.081 [DEBUG] [Thread-127573] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:43:01.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:43:01.175 [DEBUG] [Thread-127576] [transport.py] [_log()] starting thread (client mode): 0xa57b3c70
2026-02-11T10:43:01.175 [DEBUG] [Thread-127576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:43:01.193 [DEBUG] [Thread-127576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:43:01.193 [INFO] [Thread-127576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] client lang: <none>
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] server lang: <none>
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] kex follows: False
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] Compression: none
2026-02-11T10:43:01.201 [DEBUG] [Thread-127576] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:43:01.259 [DEBUG] [Thread-127576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:43:01.259 [DEBUG] [Thread-127576] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:43:01.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:43:01.260 [DEBUG] [Thread-127576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:43:01.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:43:01.315 [DEBUG] [Thread-127576] [transport.py] [_log()] userauth is OK
2026-02-11T10:43:01.315 [DEBUG] [Thread-127576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:43:01.315 [DEBUG] [Thread-127576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:43:01.315 [DEBUG] [Thread-127576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:43:01.315 [DEBUG] [Thread-127576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:43:01.330 [INFO] [Thread-127576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:43:01.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:43:01.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:43:02.181 [DEBUG] [Thread-127576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:43:02.181 [DEBUG] [Thread-127576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:43:02.229 [DEBUG] [Thread-127576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:43:02.229 [DEBUG] [Thread-127576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:43:02.237 [DEBUG] [Thread-127576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:43:02.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:43:02.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:43:02.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:43:02.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:43:02.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:43:02.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:43:02.272 [DEBUG] [Thread-127576] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:43:07.691 [DEBUG] [Thread-127578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:43:09.431 [DEBUG] [Thread-127579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:43:22.750 [DEBUG] [Thread-127580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:43:32.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:43:32.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:43:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:43:34.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 43, 19), 13.73, 41.62, 0.0, 13.32, 22.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:43:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:43:19
2026-02-11T10:43:34.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:43:34.646 [DEBUG] [Thread-127581] [transport.py] [_log()] starting thread (client mode): 0xa2ddd6f0
2026-02-11T10:43:34.646 [DEBUG] [Thread-127581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:43:34.657 [DEBUG] [Thread-127581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:43:34.657 [INFO] [Thread-127581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:43:34.658 [DEBUG] [Thread-127581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:43:34.658 [DEBUG] [Thread-127581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:43:34.658 [DEBUG] [Thread-127581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] client lang: <none>
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] server lang: <none>
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] kex follows: False
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] Compression: none
2026-02-11T10:43:34.659 [DEBUG] [Thread-127581] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:43:34.673 [DEBUG] [Thread-127581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:43:34.673 [DEBUG] [Thread-127581] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:43:34.673 [DEBUG] [Thread-127581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:43:34.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:43:34.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:43:34.675 [DEBUG] [Thread-127581] [transport.py] [_log()] userauth is OK
2026-02-11T10:43:34.675 [DEBUG] [Thread-127581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:43:34.675 [DEBUG] [Thread-127581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:43:34.675 [DEBUG] [Thread-127581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:43:34.675 [DEBUG] [Thread-127581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:43:34.694 [INFO] [Thread-127581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:43:34.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:43:35.266 [DEBUG] [Thread-127581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:43:35.266 [DEBUG] [Thread-127581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:43:35.266 [DEBUG] [Thread-127581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:43:35.307 [DEBUG] [Thread-127581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:43:35.308 [DEBUG] [Thread-127581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:43:35.311 [DEBUG] [Thread-127581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:43:35.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:43:35.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:43:35.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:43:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:43:35.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:43:35.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:43:35.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:43:35.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:43:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:43:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.362986 -999.00  +22.10  16.08     48  +10.70 1 2 1 1 1   888    0 11.24 15.48 ----- 16.4 16.1 266.0 18.5 28.4 -19.9 27.9 -19.6 26.1 -16.2 26.9 -14.3
2026-02-11T10:43:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:43:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:43:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.362986
2026-02-11T10:43:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:43:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:43:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:43:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:43:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:43:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:43:19', tmtdew=13.73, humidity=41.62, cloud=0.0, wind=13.32, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:42:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:43:35.339 [DEBUG] [Thread-127581] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:43:35.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:43:35.436 [DEBUG] [Thread-127584] [transport.py] [_log()] starting thread (client mode): 0xa57b0e80
2026-02-11T10:43:35.437 [DEBUG] [Thread-127584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:43:35.451 [DEBUG] [Thread-127584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:43:35.451 [INFO] [Thread-127584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:43:35.459 [DEBUG] [Thread-127584] [transport.py] [_log()] client lang: <none>
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] server lang: <none>
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] kex follows: False
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] Compression: none
2026-02-11T10:43:35.460 [DEBUG] [Thread-127584] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:43:35.519 [DEBUG] [Thread-127584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:43:35.520 [DEBUG] [Thread-127584] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:43:35.521 [DEBUG] [Thread-127584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:43:35.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:43:35.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:43:35.576 [DEBUG] [Thread-127584] [transport.py] [_log()] userauth is OK
2026-02-11T10:43:35.576 [DEBUG] [Thread-127584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:43:35.576 [DEBUG] [Thread-127584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:43:35.576 [DEBUG] [Thread-127584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:43:35.576 [DEBUG] [Thread-127584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:43:35.601 [INFO] [Thread-127584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:43:35.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:43:35.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:43:36.503 [DEBUG] [Thread-127584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:43:36.503 [DEBUG] [Thread-127584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:43:36.552 [DEBUG] [Thread-127584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:43:36.552 [DEBUG] [Thread-127584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:43:36.561 [DEBUG] [Thread-127584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:43:36.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:43: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')
2026-02-11T10:43:36.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:43:36.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:43:36.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:43:36.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:43:36.600 [DEBUG] [Thread-127584] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:43:37.789 [DEBUG] [Thread-127586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:43:52.845 [DEBUG] [Thread-127587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:43:53.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:43:53.002 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:44:06.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:44:06.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:44:06.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:44:07.882 [DEBUG] [Thread-127588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:44:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 43, 54), 13.23, 43.14, 0.0, 16.92, 22.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:44:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:43:54
2026-02-11T10:44:09.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:44:09.174 [DEBUG] [Thread-127589] [transport.py] [_log()] starting thread (client mode): 0xa57e08b0
2026-02-11T10:44:09.175 [DEBUG] [Thread-127589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:44:09.195 [DEBUG] [Thread-127589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:44:09.195 [INFO] [Thread-127589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] client lang: <none>
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] server lang: <none>
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] kex follows: False
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:44:09.198 [DEBUG] [Thread-127589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:44:09.199 [DEBUG] [Thread-127589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:44:09.199 [DEBUG] [Thread-127589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:44:09.199 [DEBUG] [Thread-127589] [transport.py] [_log()] Compression: none
2026-02-11T10:44:09.199 [DEBUG] [Thread-127589] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:44:09.218 [DEBUG] [Thread-127589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:44:09.219 [DEBUG] [Thread-127589] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:44:09.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:44:09.220 [DEBUG] [Thread-127589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:44:09.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:44:09.222 [DEBUG] [Thread-127589] [transport.py] [_log()] userauth is OK
2026-02-11T10:44:09.222 [DEBUG] [Thread-127589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:44:09.223 [DEBUG] [Thread-127589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:44:09.223 [DEBUG] [Thread-127589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:44:09.223 [DEBUG] [Thread-127589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:44:09.246 [INFO] [Thread-127589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:44:09.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:44:09.465 [DEBUG] [Thread-127591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:44:09.868 [DEBUG] [Thread-127589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:44:09.869 [DEBUG] [Thread-127589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:44:09.869 [DEBUG] [Thread-127589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:44:09.909 [DEBUG] [Thread-127589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:44:09.910 [DEBUG] [Thread-127589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:44:09.913 [DEBUG] [Thread-127589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:44:09.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:44:09.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:44:09.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:44:09.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:44:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:44:09.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:44:09.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:44:09.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:44:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:44:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.363339 -999.00  +21.90  19.65     50  +11.10 1 2 1 1 1   888    0 11.26 14.33 ----- 17.5 19.6 257.6 31.9 28.2 -20.6 27.9 -16.9 25.9 -16.7 26.5 -18.1
2026-02-11T10:44:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:44:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:44:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.363339
2026-02-11T10:44:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:44:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:44:09.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:44:09.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:44:09.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:44:09.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:43:54', tmtdew=13.23, humidity=43.14, cloud=0.0, wind=16.92, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:43:12.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:44:09.940 [DEBUG] [Thread-127589] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:44:10.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:44:10.045 [DEBUG] [Thread-127593] [transport.py] [_log()] starting thread (client mode): 0xa81d7430
2026-02-11T10:44:10.045 [DEBUG] [Thread-127593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:44:10.062 [DEBUG] [Thread-127593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:44:10.062 [INFO] [Thread-127593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:44:10.070 [DEBUG] [Thread-127593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:44:10.070 [DEBUG] [Thread-127593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:44:10.070 [DEBUG] [Thread-127593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] client lang: <none>
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] server lang: <none>
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] kex follows: False
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:44:10.071 [DEBUG] [Thread-127593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:44:10.072 [DEBUG] [Thread-127593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:44:10.072 [DEBUG] [Thread-127593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:44:10.072 [DEBUG] [Thread-127593] [transport.py] [_log()] Compression: none
2026-02-11T10:44:10.072 [DEBUG] [Thread-127593] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:44:10.128 [DEBUG] [Thread-127593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:44:10.129 [DEBUG] [Thread-127593] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:44:10.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:44:10.130 [DEBUG] [Thread-127593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:44:10.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:44:10.183 [DEBUG] [Thread-127593] [transport.py] [_log()] userauth is OK
2026-02-11T10:44:10.184 [DEBUG] [Thread-127593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:44:10.184 [DEBUG] [Thread-127593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:44:10.184 [DEBUG] [Thread-127593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:44:10.184 [DEBUG] [Thread-127593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:44:10.203 [INFO] [Thread-127593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:44:10.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:44:10.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:44:11.094 [DEBUG] [Thread-127593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:44:11.094 [DEBUG] [Thread-127593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:44:11.142 [DEBUG] [Thread-127593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:44:11.143 [DEBUG] [Thread-127593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:44:11.152 [DEBUG] [Thread-127593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:44:11.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:44: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')
2026-02-11T10:44:11.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:44:11.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:44:11.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:44:11.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:44:11.187 [DEBUG] [Thread-127593] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:44:22.919 [DEBUG] [Thread-127595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:44:37.970 [DEBUG] [Thread-127596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:44:41.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:44:41.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:44:41.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
2026-02-11T10:44:42.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 44, 29), 13.09, 43.5, 0.0, 15.23, 22.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:44:42.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:44:29
2026-02-11T10:44:43.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:44:43.497 [DEBUG] [Thread-127597] [transport.py] [_log()] starting thread (client mode): 0xa57e2b30
2026-02-11T10:44:43.497 [DEBUG] [Thread-127597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:44:43.518 [DEBUG] [Thread-127597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:44:43.519 [INFO] [Thread-127597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:44:43.522 [DEBUG] [Thread-127597] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] client lang: <none>
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] server lang: <none>
2026-02-11T10:44:43.523 [DEBUG] [Thread-127597] [transport.py] [_log()] kex follows: False
2026-02-11T10:44:43.524 [DEBUG] [Thread-127597] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:44:43.524 [DEBUG] [Thread-127597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:44:43.524 [DEBUG] [Thread-127597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:44:43.524 [DEBUG] [Thread-127597] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:44:43.524 [DEBUG] [Thread-127597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:44:43.524 [DEBUG] [Thread-127597] [transport.py] [_log()] Compression: none
2026-02-11T10:44:43.524 [DEBUG] [Thread-127597] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:44:43.545 [DEBUG] [Thread-127597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:44:43.546 [DEBUG] [Thread-127597] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:44:43.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:44:43.547 [DEBUG] [Thread-127597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:44:43.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:44:43.549 [DEBUG] [Thread-127597] [transport.py] [_log()] userauth is OK
2026-02-11T10:44:43.549 [DEBUG] [Thread-127597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:44:43.549 [DEBUG] [Thread-127597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:44:43.549 [DEBUG] [Thread-127597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:44:43.549 [DEBUG] [Thread-127597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:44:43.574 [INFO] [Thread-127597] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:44:43.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:44:44.138 [DEBUG] [Thread-127597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:44:44.139 [DEBUG] [Thread-127597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:44:44.139 [DEBUG] [Thread-127597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:44:44.179 [DEBUG] [Thread-127597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:44:44.180 [DEBUG] [Thread-127597] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:44:44.183 [DEBUG] [Thread-127597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:44:44.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:44:44.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:44:44.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:44:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:44:44.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:44:44.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:44:44.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:44:44.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:44:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:44:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.363681 -999.00  +21.90  16.79     50  +11.20 1 2 1 1 1   888    0 11.02 12.43 ----- 14.2 16.8 268.0 19.5 27.9 -19.5 27.4 -18.4 25.8 -16.0 26.4 -17.5
2026-02-11T10:44:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:44:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:44:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.363681
2026-02-11T10:44:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:44:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:44:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:44:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:44:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:44:44.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:44:29', tmtdew=13.09, humidity=43.5, cloud=0.0, wind=15.23, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:43:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:44:44.207 [DEBUG] [Thread-127597] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:44:44.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:44:44.301 [DEBUG] [Thread-127600] [transport.py] [_log()] starting thread (client mode): 0xa57e1750
2026-02-11T10:44:44.302 [DEBUG] [Thread-127600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:44:44.320 [DEBUG] [Thread-127600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:44:44.320 [INFO] [Thread-127600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:44:44.327 [DEBUG] [Thread-127600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:44:44.328 [DEBUG] [Thread-127600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:44:44.328 [DEBUG] [Thread-127600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:44:44.328 [DEBUG] [Thread-127600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:44.328 [DEBUG] [Thread-127600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:44:44.328 [DEBUG] [Thread-127600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:44.328 [DEBUG] [Thread-127600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] client lang: <none>
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] server lang: <none>
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] kex follows: False
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:44:44.329 [DEBUG] [Thread-127600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:44:44.330 [DEBUG] [Thread-127600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:44:44.330 [DEBUG] [Thread-127600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:44:44.330 [DEBUG] [Thread-127600] [transport.py] [_log()] Compression: none
2026-02-11T10:44:44.330 [DEBUG] [Thread-127600] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:44:44.387 [DEBUG] [Thread-127600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:44:44.387 [DEBUG] [Thread-127600] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:44:44.388 [DEBUG] [Thread-127600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:44:44.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:44:44.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:44:44.444 [DEBUG] [Thread-127600] [transport.py] [_log()] userauth is OK
2026-02-11T10:44:44.444 [DEBUG] [Thread-127600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:44:44.444 [DEBUG] [Thread-127600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:44:44.444 [DEBUG] [Thread-127600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:44:44.444 [DEBUG] [Thread-127600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:44:44.463 [INFO] [Thread-127600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:44:44.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:44:44.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:44:45.305 [DEBUG] [Thread-127600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:44:45.306 [DEBUG] [Thread-127600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:44:45.354 [DEBUG] [Thread-127600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:44:45.354 [DEBUG] [Thread-127600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:44:45.363 [DEBUG] [Thread-127600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:44:45.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:44:45.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:44:45.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:44:45.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:44:45.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:44:45.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:44:45.400 [DEBUG] [Thread-127600] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:44:53.005 [DEBUG] [Thread-127602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:44:53.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:44:53.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:08.065 [DEBUG] [Thread-127603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:09.500 [DEBUG] [Thread-127604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:15.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:45:15.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:45:15.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:45:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 45, 5), 13.13, 43.4, 0.0, 17.84, 22.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:45:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:45:05
2026-02-11T10:45:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:45:17.775 [DEBUG] [Thread-127605] [transport.py] [_log()] starting thread (client mode): 0xa2dc5e70
2026-02-11T10:45:17.775 [DEBUG] [Thread-127605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:45:17.794 [DEBUG] [Thread-127605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:45:17.794 [INFO] [Thread-127605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] client lang: <none>
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] server lang: <none>
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] kex follows: False
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:45:17.796 [DEBUG] [Thread-127605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:45:17.797 [DEBUG] [Thread-127605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:45:17.797 [DEBUG] [Thread-127605] [transport.py] [_log()] Compression: none
2026-02-11T10:45:17.797 [DEBUG] [Thread-127605] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:45:17.807 [DEBUG] [Thread-127605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:45:17.807 [DEBUG] [Thread-127605] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:45:17.807 [DEBUG] [Thread-127605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:45:17.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:45:17.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:45:17.808 [DEBUG] [Thread-127605] [transport.py] [_log()] userauth is OK
2026-02-11T10:45:17.808 [DEBUG] [Thread-127605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:45:17.808 [DEBUG] [Thread-127605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:45:17.809 [DEBUG] [Thread-127605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:45:17.809 [DEBUG] [Thread-127605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:45:17.821 [INFO] [Thread-127605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:45:17.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:45:18.399 [DEBUG] [Thread-127605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:45:18.400 [DEBUG] [Thread-127605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:45:18.400 [DEBUG] [Thread-127605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:45:18.441 [DEBUG] [Thread-127605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:45:18.441 [DEBUG] [Thread-127605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:45:18.443 [DEBUG] [Thread-127605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:45:18.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:45:18.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:45:18.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:45:18.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:45:18.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:45:18.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:45:18.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:45:18.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:45:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:45:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.364728 -999.00  +22.30   9.60     49  +11.20 1 2 1 1 1   888    0 11.20 12.74 ----- 12.4 9.6 290.4 16.4 27.6 -16.5 27.1 -17.2 25.9 -13.1 26.4 -15.9
2026-02-11T10:45:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:45:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:45:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.364728
2026-02-11T10:45:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:45:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:45:18.466 [DEBUG] [Thread-127605] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:45:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:45:18.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:45:18.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:45:18.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:45:05', tmtdew=13.13, humidity=43.4, cloud=0.0, wind=17.84, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:45:12.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:45:18.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:45:18.562 [DEBUG] [Thread-127608] [transport.py] [_log()] starting thread (client mode): 0xa57b01c0
2026-02-11T10:45:18.562 [DEBUG] [Thread-127608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:45:18.576 [DEBUG] [Thread-127608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:45:18.576 [INFO] [Thread-127608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:45:18.584 [DEBUG] [Thread-127608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:45:18.584 [DEBUG] [Thread-127608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:45:18.584 [DEBUG] [Thread-127608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:45:18.584 [DEBUG] [Thread-127608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:18.584 [DEBUG] [Thread-127608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:18.584 [DEBUG] [Thread-127608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:18.584 [DEBUG] [Thread-127608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] client lang: <none>
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] server lang: <none>
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] kex follows: False
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:45:18.585 [DEBUG] [Thread-127608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:45:18.586 [DEBUG] [Thread-127608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:45:18.586 [DEBUG] [Thread-127608] [transport.py] [_log()] Compression: none
2026-02-11T10:45:18.586 [DEBUG] [Thread-127608] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:45:18.643 [DEBUG] [Thread-127608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:45:18.644 [DEBUG] [Thread-127608] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:45:18.644 [DEBUG] [Thread-127608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:45:18.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:45:18.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:45:18.699 [DEBUG] [Thread-127608] [transport.py] [_log()] userauth is OK
2026-02-11T10:45:18.699 [DEBUG] [Thread-127608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:45:18.699 [DEBUG] [Thread-127608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:45:18.699 [DEBUG] [Thread-127608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:45:18.699 [DEBUG] [Thread-127608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:45:18.721 [INFO] [Thread-127608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:45:18.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:45:18.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:45:19.585 [DEBUG] [Thread-127608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:45:19.585 [DEBUG] [Thread-127608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:45:19.633 [DEBUG] [Thread-127608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:45:19.633 [DEBUG] [Thread-127608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:45:19.643 [DEBUG] [Thread-127608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:45:19.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:45: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')
2026-02-11T10:45:19.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:45:19.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:45:19.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:45:19.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:45:19.677 [DEBUG] [Thread-127608] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:45:23.101 [DEBUG] [Thread-127610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:38.151 [DEBUG] [Thread-127611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:45:49.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:45: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
2026-02-11T10:45:51.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 45, 40), 13.96, 41.1, 0.0, 20.89, 23.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:45:51.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:45:40
2026-02-11T10:45:51.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:45:52.006 [DEBUG] [Thread-127612] [transport.py] [_log()] starting thread (client mode): 0xa57e37c0
2026-02-11T10:45:52.006 [DEBUG] [Thread-127612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:45:52.024 [DEBUG] [Thread-127612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:45:52.024 [INFO] [Thread-127612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:45:52.025 [DEBUG] [Thread-127612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:45:52.025 [DEBUG] [Thread-127612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:45:52.025 [DEBUG] [Thread-127612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] client lang: <none>
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] server lang: <none>
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] kex follows: False
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] Compression: none
2026-02-11T10:45:52.026 [DEBUG] [Thread-127612] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:45:52.035 [DEBUG] [Thread-127612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:45:52.036 [DEBUG] [Thread-127612] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:45:52.037 [DEBUG] [Thread-127612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:45:52.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:45:52.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:45:52.039 [DEBUG] [Thread-127612] [transport.py] [_log()] userauth is OK
2026-02-11T10:45:52.039 [DEBUG] [Thread-127612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:45:52.040 [DEBUG] [Thread-127612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:45:52.040 [DEBUG] [Thread-127612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:45:52.040 [DEBUG] [Thread-127612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:45:52.059 [INFO] [Thread-127612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:45:52.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:45:52.627 [DEBUG] [Thread-127612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:45:52.627 [DEBUG] [Thread-127612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:45:52.627 [DEBUG] [Thread-127612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:45:52.667 [DEBUG] [Thread-127612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:45:52.668 [DEBUG] [Thread-127612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:45:52.671 [DEBUG] [Thread-127612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:45:52.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:45:52.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:45:52.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:45:52.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:45:52.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:45:52.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:45:52.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:45:52.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:45:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:45:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.365075 -999.00  +22.10  10.70     49  +11.00 1 2 1 1 1   888    0 11.29 11.87 ----- 10.6 10.7 274.6 17.6 27.9 -14.8 27.2 -12.2 26.1 -12.0 26.6 -12.0
2026-02-11T10:45:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:45:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:45:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.365075
2026-02-11T10:45:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:45:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:45:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:45:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:45:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:45:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:45:40', tmtdew=13.96, humidity=41.1, cloud=0.0, wind=20.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:45:42.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:45:52.701 [DEBUG] [Thread-127612] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:45:52.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:45:52.797 [DEBUG] [Thread-127615] [transport.py] [_log()] starting thread (client mode): 0xa57e35e0
2026-02-11T10:45:52.797 [DEBUG] [Thread-127615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:45:52.813 [DEBUG] [Thread-127615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:45:52.813 [INFO] [Thread-127615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:45:52.820 [DEBUG] [Thread-127615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] client lang: <none>
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] server lang: <none>
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] kex follows: False
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:45:52.821 [DEBUG] [Thread-127615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:45:52.822 [DEBUG] [Thread-127615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:45:52.822 [DEBUG] [Thread-127615] [transport.py] [_log()] Compression: none
2026-02-11T10:45:52.822 [DEBUG] [Thread-127615] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:45:52.884 [DEBUG] [Thread-127615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:45:52.885 [DEBUG] [Thread-127615] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:45:52.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:45:52.885 [DEBUG] [Thread-127615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:45:52.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:45:52.943 [DEBUG] [Thread-127615] [transport.py] [_log()] userauth is OK
2026-02-11T10:45:52.943 [DEBUG] [Thread-127615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:45:52.944 [DEBUG] [Thread-127615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:45:52.944 [DEBUG] [Thread-127615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:45:52.944 [DEBUG] [Thread-127615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:45:52.967 [INFO] [Thread-127615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:45:52.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:45:52.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:45:53.187 [DEBUG] [Thread-127617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:53.286 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:53.287 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:45:53.855 [DEBUG] [Thread-127615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:45:53.856 [DEBUG] [Thread-127615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:45:53.903 [DEBUG] [Thread-127615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:45:53.903 [DEBUG] [Thread-127615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:45:53.921 [DEBUG] [Thread-127615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:45:53.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:45:53.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:45:53.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:45:53.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:45:53.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:45:53.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:45:53.958 [DEBUG] [Thread-127615] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:46:08.239 [DEBUG] [Thread-127618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:46:09.541 [DEBUG] [Thread-127619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:46:23.278 [DEBUG] [Thread-127620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:46:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:46:23.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:46:23.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:46:25.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 46, 15), 13.16, 43.35, 0.0, 13.25, 22.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:46:25.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:46:15
2026-02-11T10:46:26.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:46:26.462 [DEBUG] [Thread-127621] [transport.py] [_log()] starting thread (client mode): 0xa2d91c90
2026-02-11T10:46:26.463 [DEBUG] [Thread-127621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:46:26.482 [DEBUG] [Thread-127621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:46:26.482 [INFO] [Thread-127621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:46:26.485 [DEBUG] [Thread-127621] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] client lang: <none>
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] server lang: <none>
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] kex follows: False
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] Compression: none
2026-02-11T10:46:26.486 [DEBUG] [Thread-127621] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:46:26.499 [DEBUG] [Thread-127621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:46:26.499 [DEBUG] [Thread-127621] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:46:26.500 [DEBUG] [Thread-127621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:46:26.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:46:26.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:46:26.502 [DEBUG] [Thread-127621] [transport.py] [_log()] userauth is OK
2026-02-11T10:46:26.502 [DEBUG] [Thread-127621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:46:26.502 [DEBUG] [Thread-127621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:46:26.502 [DEBUG] [Thread-127621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:46:26.503 [DEBUG] [Thread-127621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:46:26.517 [INFO] [Thread-127621] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:46:26.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:46:27.097 [DEBUG] [Thread-127621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:46:27.097 [DEBUG] [Thread-127621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:46:27.097 [DEBUG] [Thread-127621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:46:27.137 [DEBUG] [Thread-127621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:46:27.137 [DEBUG] [Thread-127621] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:46:27.141 [DEBUG] [Thread-127621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:46:27.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:46:27.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:46:27.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:46:27.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:46:27.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:46:27.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:46:27.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:46:27.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:46:27.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:46:27.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.365422 -999.00  +22.10  13.28     49  +11.10 1 2 1 1 1   888    0 11.26 11.80 ----- 12.6 13.3 285.2 14.1 28.1 -16.5 27.4 -13.1 26.0 -15.3 26.8 -12.7
2026-02-11T10:46:27.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:46:27.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:46:27.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.365422
2026-02-11T10:46:27.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:46:27.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:46:27.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:46:27.164 [DEBUG] [Thread-127621] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:46:27.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:46:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:46:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:46:15', tmtdew=13.16, humidity=43.35, cloud=0.0, wind=13.25, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:46:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:46:27.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:46:38.312 [DEBUG] [Thread-127624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:46:53.353 [DEBUG] [Thread-127625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:46:53.427 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:46:53.428 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:47:08.387 [DEBUG] [Thread-127626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:47:09.574 [DEBUG] [Thread-127627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:47:23.422 [DEBUG] [Thread-127628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:47:38.456 [DEBUG] [Thread-127629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:47:53.494 [DEBUG] [Thread-127630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:47:53.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:47:53.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:48:08.532 [DEBUG] [Thread-127631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:48:09.622 [DEBUG] [Thread-127632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:48:23.568 [DEBUG] [Thread-127633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:48:38.609 [DEBUG] [Thread-127634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:48:40.504 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T10:48:53.648 [DEBUG] [Thread-127635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:48:53.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:48:53.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:49:08.687 [DEBUG] [Thread-127636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:49:09.668 [DEBUG] [Thread-127637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:49:10.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:49:10.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:49:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:49:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 48, 36), 13.85, 41.33, 0.0, 24.45, 23.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:49:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:48:36
2026-02-11T10:49:12.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:49:13.092 [DEBUG] [Thread-127638] [transport.py] [_log()] starting thread (client mode): 0xa2d902e0
2026-02-11T10:49:13.092 [DEBUG] [Thread-127638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:49:13.113 [DEBUG] [Thread-127638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:49:13.113 [INFO] [Thread-127638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:49:13.116 [DEBUG] [Thread-127638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] client lang: <none>
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] server lang: <none>
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] kex follows: False
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] Compression: none
2026-02-11T10:49:13.117 [DEBUG] [Thread-127638] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:49:13.134 [DEBUG] [Thread-127638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:49:13.134 [DEBUG] [Thread-127638] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:49:13.135 [DEBUG] [Thread-127638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:49:13.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:49:13.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:49:13.136 [DEBUG] [Thread-127638] [transport.py] [_log()] userauth is OK
2026-02-11T10:49:13.137 [DEBUG] [Thread-127638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:49:13.137 [DEBUG] [Thread-127638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:49:13.137 [DEBUG] [Thread-127638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:49:13.137 [DEBUG] [Thread-127638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:49:13.152 [INFO] [Thread-127638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:49:13.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:49:13.769 [DEBUG] [Thread-127638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:49:13.769 [DEBUG] [Thread-127638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:49:13.770 [DEBUG] [Thread-127638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:49:13.810 [DEBUG] [Thread-127638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:49:13.811 [DEBUG] [Thread-127638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:49:13.814 [DEBUG] [Thread-127638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:49:13.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:49:13.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:49:13.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:49:13.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:49:13.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:49:13.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:49:13.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:49:13.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:49:13.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:49:13.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.366811 -999.00  +22.20  14.11     48  +10.90 1 2 1 1 1   888    0 11.47 20.92 ----- 16.3 14.1 286.8 25.4 27.0 -17.0 26.7 -15.8 25.5 -16.9 26.3 -16.0
2026-02-11T10:49:13.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:49:13.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:49:13.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.366811
2026-02-11T10:49:13.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:49:13.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:49:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:49:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:49:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:49:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:48:36', tmtdew=13.85, humidity=41.33, cloud=0.0, wind=24.45, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:48:12.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:49:13.839 [DEBUG] [Thread-127638] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:49:13.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:49:13.935 [DEBUG] [Thread-127641] [transport.py] [_log()] starting thread (client mode): 0xa57e1540
2026-02-11T10:49:13.935 [DEBUG] [Thread-127641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:49:13.950 [DEBUG] [Thread-127641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:49:13.950 [INFO] [Thread-127641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:49:13.958 [DEBUG] [Thread-127641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:49:13.958 [DEBUG] [Thread-127641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:49:13.958 [DEBUG] [Thread-127641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:49:13.958 [DEBUG] [Thread-127641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:13.958 [DEBUG] [Thread-127641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:13.958 [DEBUG] [Thread-127641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:13.958 [DEBUG] [Thread-127641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] client lang: <none>
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] server lang: <none>
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] kex follows: False
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] Compression: none
2026-02-11T10:49:13.959 [DEBUG] [Thread-127641] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:49:14.015 [DEBUG] [Thread-127641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:49:14.016 [DEBUG] [Thread-127641] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:49:14.017 [DEBUG] [Thread-127641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:49:14.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:49:14.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:49:14.072 [DEBUG] [Thread-127641] [transport.py] [_log()] userauth is OK
2026-02-11T10:49:14.072 [DEBUG] [Thread-127641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:49:14.072 [DEBUG] [Thread-127641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:49:14.072 [DEBUG] [Thread-127641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:49:14.072 [DEBUG] [Thread-127641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:49:14.091 [INFO] [Thread-127641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:49:14.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:49:14.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:49:14.930 [DEBUG] [Thread-127641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:49:14.931 [DEBUG] [Thread-127641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:49:14.978 [DEBUG] [Thread-127641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:49:14.979 [DEBUG] [Thread-127641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:49:14.988 [DEBUG] [Thread-127641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:49:14.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:49:14.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:49:15.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:49:15.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:49:15.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:49:15.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:49:15.026 [DEBUG] [Thread-127641] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:49:23.724 [DEBUG] [Thread-127643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:49:38.775 [DEBUG] [Thread-127644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:49:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:49:45.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:49:45.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:49:47.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 49, 11), 13.0, 43.48, 0.0, 19.92, 22.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:49:47.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:49:11
2026-02-11T10:49:47.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:49:47.508 [DEBUG] [Thread-127645] [transport.py] [_log()] starting thread (client mode): 0xa57e2a40
2026-02-11T10:49:47.508 [DEBUG] [Thread-127645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:49:47.527 [DEBUG] [Thread-127645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:49:47.527 [INFO] [Thread-127645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:49:47.530 [DEBUG] [Thread-127645] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] client lang: <none>
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] server lang: <none>
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] kex follows: False
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:49:47.531 [DEBUG] [Thread-127645] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:49:47.532 [DEBUG] [Thread-127645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:49:47.532 [DEBUG] [Thread-127645] [transport.py] [_log()] Compression: none
2026-02-11T10:49:47.532 [DEBUG] [Thread-127645] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:49:47.550 [DEBUG] [Thread-127645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:49:47.551 [DEBUG] [Thread-127645] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:49:47.551 [DEBUG] [Thread-127645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:49:47.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:49:47.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:49:47.553 [DEBUG] [Thread-127645] [transport.py] [_log()] userauth is OK
2026-02-11T10:49:47.553 [DEBUG] [Thread-127645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:49:47.554 [DEBUG] [Thread-127645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:49:47.554 [DEBUG] [Thread-127645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:49:47.554 [DEBUG] [Thread-127645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:49:47.571 [INFO] [Thread-127645] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:49:47.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:49:48.337 [DEBUG] [Thread-127645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:49:48.337 [DEBUG] [Thread-127645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:49:48.338 [DEBUG] [Thread-127645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:49:48.378 [DEBUG] [Thread-127645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:49:48.378 [DEBUG] [Thread-127645] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:49:48.381 [DEBUG] [Thread-127645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:49:48.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:49:48.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:49:48.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:49:48.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:49:48.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:49:48.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:49:48.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:49:48.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:49:48.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:49:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.367506 -999.00  +21.80  17.75     50  +11.00 1 2 1 1 1   888    0 11.29 21.56 ----- 19.4 17.8 294.8 23.6 26.6 -16.8 26.3 -16.3 25.4 -17.2 26.0 -17.0
2026-02-11T10:49:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:49:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:49:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.367506
2026-02-11T10:49:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:49:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:49:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:49:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:49:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:49:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:49:11', tmtdew=13.0, humidity=43.48, cloud=0.0, wind=19.92, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:49:12.518', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:49:48.400 [DEBUG] [Thread-127645] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:49:48.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:49:48.492 [DEBUG] [Thread-127648] [transport.py] [_log()] starting thread (client mode): 0xa2d90cd0
2026-02-11T10:49:48.492 [DEBUG] [Thread-127648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:49:48.506 [DEBUG] [Thread-127648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:49:48.507 [INFO] [Thread-127648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:49:48.514 [DEBUG] [Thread-127648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:49:48.514 [DEBUG] [Thread-127648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:49:48.514 [DEBUG] [Thread-127648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] client lang: <none>
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] server lang: <none>
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] kex follows: False
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] Compression: none
2026-02-11T10:49:48.515 [DEBUG] [Thread-127648] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:49:48.571 [DEBUG] [Thread-127648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:49:48.572 [DEBUG] [Thread-127648] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:49:48.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:49:48.573 [DEBUG] [Thread-127648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:49:48.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:49:48.627 [DEBUG] [Thread-127648] [transport.py] [_log()] userauth is OK
2026-02-11T10:49:48.628 [DEBUG] [Thread-127648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:49:48.628 [DEBUG] [Thread-127648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:49:48.628 [DEBUG] [Thread-127648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:49:48.628 [DEBUG] [Thread-127648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:49:48.647 [INFO] [Thread-127648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:49:48.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:49:48.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:49:49.574 [DEBUG] [Thread-127648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:49:49.574 [DEBUG] [Thread-127648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:49:49.622 [DEBUG] [Thread-127648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:49:49.622 [DEBUG] [Thread-127648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:49:49.630 [DEBUG] [Thread-127648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:49:49.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:49:49.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:49:49.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:49:49.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:49:49.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:49:49.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:49:49.663 [DEBUG] [Thread-127648] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:49:53.812 [DEBUG] [Thread-127650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:49:53.849 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:49:53.850 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:08.868 [DEBUG] [Thread-127651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:09.712 [DEBUG] [Thread-127652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:19.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:50:19.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:50:19.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:50:21.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 49, 46), 12.85, 43.73, 0.0, 16.5, 22.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:50:21.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:49:46
2026-02-11T10:50:21.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:50:22.095 [DEBUG] [Thread-127653] [transport.py] [_log()] starting thread (client mode): 0xa2df9900
2026-02-11T10:50:22.095 [DEBUG] [Thread-127653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:50:22.117 [DEBUG] [Thread-127653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:50:22.117 [INFO] [Thread-127653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:50:22.120 [DEBUG] [Thread-127653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] client lang: <none>
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] server lang: <none>
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] kex follows: False
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] Compression: none
2026-02-11T10:50:22.121 [DEBUG] [Thread-127653] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:50:22.138 [DEBUG] [Thread-127653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:50:22.139 [DEBUG] [Thread-127653] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:50:22.139 [DEBUG] [Thread-127653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:50:22.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:50:22.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:50:22.142 [DEBUG] [Thread-127653] [transport.py] [_log()] userauth is OK
2026-02-11T10:50:22.142 [DEBUG] [Thread-127653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:50:22.142 [DEBUG] [Thread-127653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:50:22.142 [DEBUG] [Thread-127653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:50:22.142 [DEBUG] [Thread-127653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:50:22.168 [INFO] [Thread-127653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:50:22.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:50:22.827 [DEBUG] [Thread-127653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:50:22.827 [DEBUG] [Thread-127653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:50:22.828 [DEBUG] [Thread-127653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:50:22.868 [DEBUG] [Thread-127653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:50:22.868 [DEBUG] [Thread-127653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:50:22.870 [DEBUG] [Thread-127653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:50:22.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:50:22.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:50:22.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:50:22.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:50:22.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:50:22.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:50:22.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:50:22.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:50:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:50:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.367853 -999.00  +21.70  14.52     50  +11.10 1 2 1 1 1   888    0 11.81 20.19 ----- 16.9 14.5 295.8 21.1 26.4 -17.1 26.2 -16.5 25.4 -16.0 25.9 -17.0
2026-02-11T10:50:22.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:50:22.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:50:22.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.367853
2026-02-11T10:50:22.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:50:22.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:50:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:50:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:50:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:50:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:49:46', tmtdew=12.85, humidity=43.73, cloud=0.0, wind=16.5, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:49:42.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:50:22.895 [DEBUG] [Thread-127653] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:50:22.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:50:22.993 [DEBUG] [Thread-127656] [transport.py] [_log()] starting thread (client mode): 0xa2d02f80
2026-02-11T10:50:22.993 [DEBUG] [Thread-127656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:50:23.012 [DEBUG] [Thread-127656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:50:23.013 [INFO] [Thread-127656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:50:23.020 [DEBUG] [Thread-127656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:50:23.020 [DEBUG] [Thread-127656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:50:23.020 [DEBUG] [Thread-127656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:50:23.020 [DEBUG] [Thread-127656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] client lang: <none>
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] server lang: <none>
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] kex follows: False
2026-02-11T10:50:23.021 [DEBUG] [Thread-127656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:50:23.022 [DEBUG] [Thread-127656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:50:23.022 [DEBUG] [Thread-127656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:50:23.022 [DEBUG] [Thread-127656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:50:23.022 [DEBUG] [Thread-127656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:50:23.022 [DEBUG] [Thread-127656] [transport.py] [_log()] Compression: none
2026-02-11T10:50:23.022 [DEBUG] [Thread-127656] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:50:23.079 [DEBUG] [Thread-127656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:50:23.079 [DEBUG] [Thread-127656] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:50:23.080 [DEBUG] [Thread-127656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:50:23.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:50:23.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:50:23.135 [DEBUG] [Thread-127656] [transport.py] [_log()] userauth is OK
2026-02-11T10:50:23.135 [DEBUG] [Thread-127656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:50:23.135 [DEBUG] [Thread-127656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:50:23.135 [DEBUG] [Thread-127656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:50:23.135 [DEBUG] [Thread-127656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:50:23.158 [INFO] [Thread-127656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:50:23.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:50:23.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:50:23.903 [DEBUG] [Thread-127658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:23.983 [DEBUG] [Thread-127656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:50:23.983 [DEBUG] [Thread-127656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:50:24.030 [DEBUG] [Thread-127656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:50:24.030 [DEBUG] [Thread-127656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:50:24.039 [DEBUG] [Thread-127656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:50:24.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:50:24.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:50:24.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:50:24.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:50:24.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:50:24.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:50:24.081 [DEBUG] [Thread-127656] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:50:38.957 [DEBUG] [Thread-127659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:53.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:53.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:53.999 [DEBUG] [Thread-127660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:50:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:50:54.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:50:54.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
2026-02-11T10:50:55.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 50, 21), 12.67, 44.18, 0.0, 15.47, 21.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:50:55.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:50:21
2026-02-11T10:50:56.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:50:56.443 [DEBUG] [Thread-127661] [transport.py] [_log()] starting thread (client mode): 0xa2d03370
2026-02-11T10:50:56.444 [DEBUG] [Thread-127661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:50:56.463 [DEBUG] [Thread-127661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:50:56.463 [INFO] [Thread-127661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:50:56.464 [DEBUG] [Thread-127661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:50:56.464 [DEBUG] [Thread-127661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] client lang: <none>
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] server lang: <none>
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] kex follows: False
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] Compression: none
2026-02-11T10:50:56.465 [DEBUG] [Thread-127661] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:50:56.479 [DEBUG] [Thread-127661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:50:56.479 [DEBUG] [Thread-127661] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:50:56.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:50:56.480 [DEBUG] [Thread-127661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:50:56.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:50:56.481 [DEBUG] [Thread-127661] [transport.py] [_log()] userauth is OK
2026-02-11T10:50:56.481 [DEBUG] [Thread-127661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:50:56.482 [DEBUG] [Thread-127661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:50:56.482 [DEBUG] [Thread-127661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:50:56.482 [DEBUG] [Thread-127661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:50:56.495 [INFO] [Thread-127661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:50:56.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:50:57.086 [DEBUG] [Thread-127661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:50:57.087 [DEBUG] [Thread-127661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:50:57.087 [DEBUG] [Thread-127661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:50:57.127 [DEBUG] [Thread-127661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:50:57.127 [DEBUG] [Thread-127661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:50:57.129 [DEBUG] [Thread-127661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:50:57.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:50:57.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:50:57.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:50:57.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:50:57.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:50:57.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:50:57.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:50:57.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:50:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:50:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.368200 -999.00  +21.90  21.55     50  +11.10 1 2 1 1 1   888    0 11.63 17.05 ----- 20.1 21.6 302.6 26.4 26.4 -17.5 26.2 -16.3 25.4 -17.2 25.8 -17.0
2026-02-11T10:50:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:50:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:50:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.368200
2026-02-11T10:50:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:50:57.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:50:57.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:50:57.152 [DEBUG] [Thread-127661] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:50:57.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:50:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:50:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:50:21', tmtdew=12.67, humidity=44.18, cloud=0.0, wind=15.47, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:50:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:50:57.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:50:57.258 [DEBUG] [Thread-127664] [transport.py] [_log()] starting thread (client mode): 0xa2d91c90
2026-02-11T10:50:57.259 [DEBUG] [Thread-127664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:50:57.274 [DEBUG] [Thread-127664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:50:57.274 [INFO] [Thread-127664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:50:57.282 [DEBUG] [Thread-127664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:50:57.283 [DEBUG] [Thread-127664] [transport.py] [_log()] client lang: <none>
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] server lang: <none>
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] kex follows: False
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] Compression: none
2026-02-11T10:50:57.284 [DEBUG] [Thread-127664] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:50:57.340 [DEBUG] [Thread-127664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:50:57.340 [DEBUG] [Thread-127664] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:50:57.340 [DEBUG] [Thread-127664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:50:57.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:50:57.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:50:57.396 [DEBUG] [Thread-127664] [transport.py] [_log()] userauth is OK
2026-02-11T10:50:57.396 [DEBUG] [Thread-127664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:50:57.396 [DEBUG] [Thread-127664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:50:57.396 [DEBUG] [Thread-127664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:50:57.396 [DEBUG] [Thread-127664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:50:57.410 [INFO] [Thread-127664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:50:57.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:50:57.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:50:58.273 [DEBUG] [Thread-127664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:50:58.273 [DEBUG] [Thread-127664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:50:58.321 [DEBUG] [Thread-127664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:50:58.321 [DEBUG] [Thread-127664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:50:58.329 [DEBUG] [Thread-127664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:50:58.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:50:58.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')
2026-02-11T10:50:58.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:50:58.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:50:58.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:50:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:50:58.361 [DEBUG] [Thread-127664] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:51:09.036 [DEBUG] [Thread-127666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:51:09.754 [DEBUG] [Thread-127667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:51:24.090 [DEBUG] [Thread-127668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:51:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:51:28.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:51:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:51:30.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 50, 57), 12.47, 44.97, 0.0, 15.65, 21.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:51:30.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:50:57
2026-02-11T10:51:30.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:51:30.796 [DEBUG] [Thread-127669] [transport.py] [_log()] starting thread (client mode): 0xa2d002e0
2026-02-11T10:51:30.797 [DEBUG] [Thread-127669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:51:30.817 [DEBUG] [Thread-127669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:51:30.817 [INFO] [Thread-127669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:51:30.820 [DEBUG] [Thread-127669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:51:30.820 [DEBUG] [Thread-127669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] client lang: <none>
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] server lang: <none>
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] kex follows: False
2026-02-11T10:51:30.821 [DEBUG] [Thread-127669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:51:30.822 [DEBUG] [Thread-127669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:51:30.822 [DEBUG] [Thread-127669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:51:30.822 [DEBUG] [Thread-127669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:51:30.822 [DEBUG] [Thread-127669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:51:30.822 [DEBUG] [Thread-127669] [transport.py] [_log()] Compression: none
2026-02-11T10:51:30.822 [DEBUG] [Thread-127669] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:51:30.839 [DEBUG] [Thread-127669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:51:30.840 [DEBUG] [Thread-127669] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:51:30.840 [DEBUG] [Thread-127669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:51:30.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:51:30.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:51:30.843 [DEBUG] [Thread-127669] [transport.py] [_log()] userauth is OK
2026-02-11T10:51:30.843 [DEBUG] [Thread-127669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:51:30.843 [DEBUG] [Thread-127669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:51:30.843 [DEBUG] [Thread-127669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:51:30.843 [DEBUG] [Thread-127669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:51:30.858 [INFO] [Thread-127669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:51:30.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:51:31.454 [DEBUG] [Thread-127669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:51:31.455 [DEBUG] [Thread-127669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:51:31.455 [DEBUG] [Thread-127669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:51:31.496 [DEBUG] [Thread-127669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:51:31.496 [DEBUG] [Thread-127669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:51:31.501 [DEBUG] [Thread-127669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:51:31.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:51:31.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:51:31.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:51:31.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:51:31.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:51:31.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:51:31.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:51:31.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:51:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:51:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.368547 -999.00  +21.70  15.02     50  +11.10 1 2 1 1 1   888    0 11.16 14.15 ----- 14.7 15.0 284.8 23.9 26.4 -15.1 26.1 -17.2 25.4 -16.8 25.8 -18.1
2026-02-11T10:51:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:51:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:51:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.368547
2026-02-11T10:51:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:51:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:51:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:51:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:51:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:51:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:50:57', tmtdew=12.47, humidity=44.97, cloud=0.0, wind=15.65, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:50:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:51:31.528 [DEBUG] [Thread-127669] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:51:31.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:51:31.642 [DEBUG] [Thread-127672] [transport.py] [_log()] starting thread (client mode): 0xa2d7a080
2026-02-11T10:51:31.642 [DEBUG] [Thread-127672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:51:31.657 [DEBUG] [Thread-127672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:51:31.657 [INFO] [Thread-127672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:51:31.666 [DEBUG] [Thread-127672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] client lang: <none>
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] server lang: <none>
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] kex follows: False
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:51:31.667 [DEBUG] [Thread-127672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:51:31.668 [DEBUG] [Thread-127672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:51:31.668 [DEBUG] [Thread-127672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:51:31.668 [DEBUG] [Thread-127672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:51:31.668 [DEBUG] [Thread-127672] [transport.py] [_log()] Compression: none
2026-02-11T10:51:31.668 [DEBUG] [Thread-127672] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:51:31.728 [DEBUG] [Thread-127672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:51:31.729 [DEBUG] [Thread-127672] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:51:31.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:51:31.730 [DEBUG] [Thread-127672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:51:31.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:51:31.788 [DEBUG] [Thread-127672] [transport.py] [_log()] userauth is OK
2026-02-11T10:51:31.789 [DEBUG] [Thread-127672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:51:31.789 [DEBUG] [Thread-127672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:51:31.789 [DEBUG] [Thread-127672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:51:31.789 [DEBUG] [Thread-127672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:51:31.812 [INFO] [Thread-127672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:51:31.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:51:31.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:51:32.657 [DEBUG] [Thread-127672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:51:32.657 [DEBUG] [Thread-127672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:51:32.704 [DEBUG] [Thread-127672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:51:32.705 [DEBUG] [Thread-127672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:51:32.714 [DEBUG] [Thread-127672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:51:32.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:51:32.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:51:32.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:51:32.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:51:32.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:51:32.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:51:32.751 [DEBUG] [Thread-127672] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:51:39.126 [DEBUG] [Thread-127674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:51:54.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:51:54.142 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:51:54.178 [DEBUG] [Thread-127675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:52:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:52:02.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:52:02.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:52:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 51, 32), 12.58, 44.68, 0.0, 13.55, 21.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:52:05.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:51:32
2026-02-11T10:52:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:52:05.717 [DEBUG] [Thread-127676] [transport.py] [_log()] starting thread (client mode): 0xa2d79c60
2026-02-11T10:52:05.717 [DEBUG] [Thread-127676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:52:05.733 [DEBUG] [Thread-127676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:52:05.733 [INFO] [Thread-127676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:52:05.734 [DEBUG] [Thread-127676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] client lang: <none>
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] server lang: <none>
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] kex follows: False
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] Compression: none
2026-02-11T10:52:05.735 [DEBUG] [Thread-127676] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:52:05.743 [DEBUG] [Thread-127676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:52:05.744 [DEBUG] [Thread-127676] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:52:05.744 [DEBUG] [Thread-127676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:52:05.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:52:05.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:52:05.745 [DEBUG] [Thread-127676] [transport.py] [_log()] userauth is OK
2026-02-11T10:52:05.745 [DEBUG] [Thread-127676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:52:05.745 [DEBUG] [Thread-127676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:52:05.745 [DEBUG] [Thread-127676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:52:05.745 [DEBUG] [Thread-127676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:52:05.760 [INFO] [Thread-127676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:52:05.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:52:06.317 [DEBUG] [Thread-127676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:52:06.318 [DEBUG] [Thread-127676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:52:06.318 [DEBUG] [Thread-127676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:52:06.358 [DEBUG] [Thread-127676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:52:06.358 [DEBUG] [Thread-127676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:52:06.362 [DEBUG] [Thread-127676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:52:06.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:52:06.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:52:06.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:52:06.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:52:06.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:52:06.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:52:06.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:52:06.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:52:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:52:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.369242 -999.00  +21.80  21.56     50  +11.00 1 2 1 1 1   888    0 11.34 10.39 ----- 20.3 21.6 284.1 27.4 26.1 -20.0 26.0 -17.7 24.9 -18.4 25.7 -18.7
2026-02-11T10:52:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:52:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:52:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.369242
2026-02-11T10:52:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:52:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:52:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:52:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:52:06.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:52:06.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:51:32', tmtdew=12.58, humidity=44.68, cloud=0.0, wind=13.55, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:51:42.509', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:52:06.390 [DEBUG] [Thread-127676] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:52:06.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:52:06.486 [DEBUG] [Thread-127679] [transport.py] [_log()] starting thread (client mode): 0xa2dc7280
2026-02-11T10:52:06.486 [DEBUG] [Thread-127679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:52:06.500 [DEBUG] [Thread-127679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:52:06.500 [INFO] [Thread-127679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:52:06.508 [DEBUG] [Thread-127679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:52:06.508 [DEBUG] [Thread-127679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:52:06.508 [DEBUG] [Thread-127679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:52:06.508 [DEBUG] [Thread-127679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:06.508 [DEBUG] [Thread-127679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] client lang: <none>
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] server lang: <none>
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] kex follows: False
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] Compression: none
2026-02-11T10:52:06.509 [DEBUG] [Thread-127679] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:52:06.567 [DEBUG] [Thread-127679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:52:06.568 [DEBUG] [Thread-127679] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:52:06.569 [DEBUG] [Thread-127679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:52:06.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:52:06.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:52:06.624 [DEBUG] [Thread-127679] [transport.py] [_log()] userauth is OK
2026-02-11T10:52:06.624 [DEBUG] [Thread-127679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:52:06.624 [DEBUG] [Thread-127679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:52:06.624 [DEBUG] [Thread-127679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:52:06.624 [DEBUG] [Thread-127679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:52:06.644 [INFO] [Thread-127679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:52:06.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:52:06.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:52:07.513 [DEBUG] [Thread-127679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:52:07.513 [DEBUG] [Thread-127679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:52:07.561 [DEBUG] [Thread-127679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:52:07.562 [DEBUG] [Thread-127679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:52:07.571 [DEBUG] [Thread-127679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:52:07.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:52:07.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:52:07.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:52:07.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:52:07.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:52:07.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:52:07.607 [DEBUG] [Thread-127679] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:52:09.214 [DEBUG] [Thread-127681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:52:09.787 [DEBUG] [Thread-127682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:52:24.276 [DEBUG] [Thread-127683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:52:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:52:37.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:52:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:52:39.315 [DEBUG] [Thread-127684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 52, 7), 12.7, 44.36, 0.0, 12.92, 22.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:52:07
2026-02-11T10:52:39.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:52:40.080 [DEBUG] [Thread-127685] [transport.py] [_log()] starting thread (client mode): 0xa2df9600
2026-02-11T10:52:40.081 [DEBUG] [Thread-127685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:52:40.097 [DEBUG] [Thread-127685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:52:40.097 [INFO] [Thread-127685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:52:40.098 [DEBUG] [Thread-127685] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:52:40.098 [DEBUG] [Thread-127685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:52:40.098 [DEBUG] [Thread-127685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] client lang: <none>
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] server lang: <none>
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] kex follows: False
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] Compression: none
2026-02-11T10:52:40.099 [DEBUG] [Thread-127685] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:52:40.120 [DEBUG] [Thread-127685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:52:40.121 [DEBUG] [Thread-127685] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:52:40.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:52:40.122 [DEBUG] [Thread-127685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:52:40.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:52:40.124 [DEBUG] [Thread-127685] [transport.py] [_log()] userauth is OK
2026-02-11T10:52:40.124 [DEBUG] [Thread-127685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:52:40.125 [DEBUG] [Thread-127685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:52:40.125 [DEBUG] [Thread-127685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:52:40.125 [DEBUG] [Thread-127685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:52:40.149 [INFO] [Thread-127685] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:52:40.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:52:40.750 [DEBUG] [Thread-127685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:52:40.750 [DEBUG] [Thread-127685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:52:40.751 [DEBUG] [Thread-127685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:52:40.791 [DEBUG] [Thread-127685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:52:40.792 [DEBUG] [Thread-127685] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:52:40.794 [DEBUG] [Thread-127685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:52:40.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:52:40.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:52:40.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:52:40.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:52:40.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:52:40.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:52:40.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:52:40.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:52:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:52:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.369589 -999.00  +21.70  22.76     50  +11.00 1 2 1 1 1   888    0 11.04 7.87 ----- 26.9 22.8 281.4 34.2 25.8 -20.5 25.9 -18.4 24.9 -20.7 25.5 -19.1
2026-02-11T10:52:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:52:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:52:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.369589
2026-02-11T10:52:40.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:52:40.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:52:40.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:52:40.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:52:40.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:52:40.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:52:07', tmtdew=12.7, humidity=44.36, cloud=0.0, wind=12.92, temperature=22.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:52:12.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:52:40.819 [DEBUG] [Thread-127685] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:52:40.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:52:40.904 [DEBUG] [Thread-127688] [transport.py] [_log()] starting thread (client mode): 0xa2dc40a0
2026-02-11T10:52:40.904 [DEBUG] [Thread-127688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:52:40.919 [DEBUG] [Thread-127688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:52:40.919 [INFO] [Thread-127688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] client lang: <none>
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] server lang: <none>
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] kex follows: False
2026-02-11T10:52:40.927 [DEBUG] [Thread-127688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:52:40.928 [DEBUG] [Thread-127688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:52:40.928 [DEBUG] [Thread-127688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:52:40.928 [DEBUG] [Thread-127688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:52:40.928 [DEBUG] [Thread-127688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:52:40.928 [DEBUG] [Thread-127688] [transport.py] [_log()] Compression: none
2026-02-11T10:52:40.928 [DEBUG] [Thread-127688] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:52:40.984 [DEBUG] [Thread-127688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:52:40.984 [DEBUG] [Thread-127688] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:52:40.985 [DEBUG] [Thread-127688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:52:40.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:52:40.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:52:41.040 [DEBUG] [Thread-127688] [transport.py] [_log()] userauth is OK
2026-02-11T10:52:41.040 [DEBUG] [Thread-127688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:52:41.040 [DEBUG] [Thread-127688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:52:41.040 [DEBUG] [Thread-127688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:52:41.040 [DEBUG] [Thread-127688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:52:41.058 [INFO] [Thread-127688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:52:41.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:52:41.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:52:41.897 [DEBUG] [Thread-127688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:52:41.897 [DEBUG] [Thread-127688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:52:41.945 [DEBUG] [Thread-127688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:52:41.945 [DEBUG] [Thread-127688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:52:41.955 [DEBUG] [Thread-127688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:52:41.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:52:41.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:52:41.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:52:41.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:52:41.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:52:41.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:52:41.991 [DEBUG] [Thread-127688] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:52:54.284 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:52:54.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:52:54.351 [DEBUG] [Thread-127690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:53:09.415 [DEBUG] [Thread-127691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:53:09.816 [DEBUG] [Thread-127692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:53:11.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:53:11.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:53:11.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:53:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 52, 43), 12.74, 44.15, 0.0, 19.71, 21.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:53:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:52:43
2026-02-11T10:53:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:53:14.440 [DEBUG] [Thread-127693] [transport.py] [_log()] starting thread (client mode): 0xa2d02260
2026-02-11T10:53:14.440 [DEBUG] [Thread-127693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:53:14.460 [DEBUG] [Thread-127693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:53:14.460 [INFO] [Thread-127693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] client lang: <none>
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] server lang: <none>
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] kex follows: False
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] Compression: none
2026-02-11T10:53:14.462 [DEBUG] [Thread-127693] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:53:14.473 [DEBUG] [Thread-127693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:53:14.474 [DEBUG] [Thread-127693] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:53:14.474 [DEBUG] [Thread-127693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:53:14.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:53:14.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:53:14.476 [DEBUG] [Thread-127693] [transport.py] [_log()] userauth is OK
2026-02-11T10:53:14.476 [DEBUG] [Thread-127693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:53:14.476 [DEBUG] [Thread-127693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:53:14.476 [DEBUG] [Thread-127693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:53:14.476 [DEBUG] [Thread-127693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:53:14.495 [INFO] [Thread-127693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:53:14.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:53:15.079 [DEBUG] [Thread-127693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:53:15.079 [DEBUG] [Thread-127693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:53:15.079 [DEBUG] [Thread-127693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:53:15.119 [DEBUG] [Thread-127693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:53:15.119 [DEBUG] [Thread-127693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:53:15.122 [DEBUG] [Thread-127693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:53:15.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:53:15.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:53:15.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:53:15.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:53:15.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:53:15.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:53:15.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:53:15.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:53:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:53:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.369931 -999.00  +21.50  15.74     51  +10.90 1 2 1 1 1   888    0 11.07 6.17 ----- 23.5 15.7 289.6 30.1 25.8 -17.8 25.6 -18.6 24.7 -20.6 25.2 -19.8
2026-02-11T10:53:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:53:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:53:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.369931
2026-02-11T10:53:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:53:15.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:53:15.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:53:15.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:53:15.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:53:15.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:52:43', tmtdew=12.74, humidity=44.15, cloud=0.0, wind=19.71, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:52:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:53:15.146 [DEBUG] [Thread-127693] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:53:15.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:53:15.241 [DEBUG] [Thread-127696] [transport.py] [_log()] starting thread (client mode): 0xa2d79f90
2026-02-11T10:53:15.241 [DEBUG] [Thread-127696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:53:15.257 [DEBUG] [Thread-127696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:53:15.257 [INFO] [Thread-127696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] client lang: <none>
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] server lang: <none>
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] kex follows: False
2026-02-11T10:53:15.265 [DEBUG] [Thread-127696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:53:15.266 [DEBUG] [Thread-127696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:53:15.266 [DEBUG] [Thread-127696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:53:15.266 [DEBUG] [Thread-127696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:53:15.266 [DEBUG] [Thread-127696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:53:15.266 [DEBUG] [Thread-127696] [transport.py] [_log()] Compression: none
2026-02-11T10:53:15.266 [DEBUG] [Thread-127696] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:53:15.324 [DEBUG] [Thread-127696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:53:15.325 [DEBUG] [Thread-127696] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:53:15.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:53:15.326 [DEBUG] [Thread-127696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:53:15.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:53:15.380 [DEBUG] [Thread-127696] [transport.py] [_log()] userauth is OK
2026-02-11T10:53:15.381 [DEBUG] [Thread-127696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:53:15.381 [DEBUG] [Thread-127696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:53:15.381 [DEBUG] [Thread-127696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:53:15.381 [DEBUG] [Thread-127696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:53:15.400 [INFO] [Thread-127696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:53:15.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:53:15.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:53:16.263 [DEBUG] [Thread-127696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:53:16.263 [DEBUG] [Thread-127696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:53:16.311 [DEBUG] [Thread-127696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:53:16.311 [DEBUG] [Thread-127696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:53:16.320 [DEBUG] [Thread-127696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:53:16.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:53:16.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:53:16.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:53:16.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:53:16.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:53:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:53:16.358 [DEBUG] [Thread-127696] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:53:24.454 [DEBUG] [Thread-127698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:53:39.515 [DEBUG] [Thread-127699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:53:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:53:46.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:53:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:53:48.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 53, 19), 12.95, 43.57, 0.0, 24.05, 21.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:53:48.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:53:19
2026-02-11T10:53:48.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:53:49.054 [DEBUG] [Thread-127700] [transport.py] [_log()] starting thread (client mode): 0xa2d92bc0
2026-02-11T10:53:49.054 [DEBUG] [Thread-127700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:53:49.068 [DEBUG] [Thread-127700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:53:49.069 [INFO] [Thread-127700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] client lang: <none>
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] server lang: <none>
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] kex follows: False
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:53:49.070 [DEBUG] [Thread-127700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:53:49.071 [DEBUG] [Thread-127700] [transport.py] [_log()] Compression: none
2026-02-11T10:53:49.071 [DEBUG] [Thread-127700] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:53:49.080 [DEBUG] [Thread-127700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:53:49.080 [DEBUG] [Thread-127700] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:53:49.081 [DEBUG] [Thread-127700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:53:49.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:53:49.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:53:49.082 [DEBUG] [Thread-127700] [transport.py] [_log()] userauth is OK
2026-02-11T10:53:49.082 [DEBUG] [Thread-127700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:53:49.083 [DEBUG] [Thread-127700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:53:49.083 [DEBUG] [Thread-127700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:53:49.083 [DEBUG] [Thread-127700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:53:49.097 [INFO] [Thread-127700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:53:49.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:53:49.676 [DEBUG] [Thread-127700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:53:49.676 [DEBUG] [Thread-127700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:53:49.676 [DEBUG] [Thread-127700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:53:49.717 [DEBUG] [Thread-127700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:53:49.717 [DEBUG] [Thread-127700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:53:49.720 [DEBUG] [Thread-127700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:53:49.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:53:49.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:53:49.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:53:49.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:53:49.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:53:49.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:53:49.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:53:49.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:53:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:53:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.370631 -999.00  +21.40  11.43     51  +11.00 1 2 1 1 1   888    0 11.05 4.81 ----- 14.3 11.4 300.8 20.1 26.9 -13.1 26.1 -12.4 25.3 -12.3 25.8 -12.3
2026-02-11T10:53:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:53:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:53:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.370631
2026-02-11T10:53:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:53:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:53:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:53:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:53:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:53:49.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:53:19', tmtdew=12.95, humidity=43.57, cloud=0.0, wind=24.05, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:53:42.518', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:53:49.749 [DEBUG] [Thread-127700] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:53:49.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:53:49.846 [DEBUG] [Thread-127703] [transport.py] [_log()] starting thread (client mode): 0xa2d7b160
2026-02-11T10:53:49.846 [DEBUG] [Thread-127703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:53:49.861 [DEBUG] [Thread-127703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:53:49.861 [INFO] [Thread-127703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:53:49.868 [DEBUG] [Thread-127703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:53:49.868 [DEBUG] [Thread-127703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] client lang: <none>
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] server lang: <none>
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] kex follows: False
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] Compression: none
2026-02-11T10:53:49.869 [DEBUG] [Thread-127703] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:53:49.926 [DEBUG] [Thread-127703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:53:49.927 [DEBUG] [Thread-127703] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:53:49.928 [DEBUG] [Thread-127703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:53:49.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:53:49.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:53:49.987 [DEBUG] [Thread-127703] [transport.py] [_log()] userauth is OK
2026-02-11T10:53:49.987 [DEBUG] [Thread-127703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:53:49.988 [DEBUG] [Thread-127703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:53:49.988 [DEBUG] [Thread-127703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:53:49.988 [DEBUG] [Thread-127703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:53:50.006 [INFO] [Thread-127703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:53:50.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:53:50.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:53:50.861 [DEBUG] [Thread-127703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:53:50.861 [DEBUG] [Thread-127703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:53:50.908 [DEBUG] [Thread-127703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:53:50.908 [DEBUG] [Thread-127703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:53:50.916 [DEBUG] [Thread-127703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:53:50.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:53:50.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:53:50.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:53:50.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:53:50.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:53:50.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:53:50.950 [DEBUG] [Thread-127703] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:53:54.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:53:54.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:53:54.550 [DEBUG] [Thread-127705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:09.602 [DEBUG] [Thread-127706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:09.862 [DEBUG] [Thread-127707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:20.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:54:20.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:54:20.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:54:22.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 53, 54), 12.79, 43.93, 0.0, 15.65, 21.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:54:22.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:53:54
2026-02-11T10:54:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:54:23.493 [DEBUG] [Thread-127708] [transport.py] [_log()] starting thread (client mode): 0xa57c1b70
2026-02-11T10:54:23.493 [DEBUG] [Thread-127708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:54:23.512 [DEBUG] [Thread-127708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:54:23.512 [INFO] [Thread-127708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] client lang: <none>
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] server lang: <none>
2026-02-11T10:54:23.514 [DEBUG] [Thread-127708] [transport.py] [_log()] kex follows: False
2026-02-11T10:54:23.515 [DEBUG] [Thread-127708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:54:23.515 [DEBUG] [Thread-127708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:54:23.515 [DEBUG] [Thread-127708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:54:23.515 [DEBUG] [Thread-127708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:54:23.515 [DEBUG] [Thread-127708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:54:23.515 [DEBUG] [Thread-127708] [transport.py] [_log()] Compression: none
2026-02-11T10:54:23.515 [DEBUG] [Thread-127708] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:54:23.527 [DEBUG] [Thread-127708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:54:23.527 [DEBUG] [Thread-127708] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:54:23.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:54:23.528 [DEBUG] [Thread-127708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:54:23.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:54:23.530 [DEBUG] [Thread-127708] [transport.py] [_log()] userauth is OK
2026-02-11T10:54:23.530 [DEBUG] [Thread-127708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:54:23.530 [DEBUG] [Thread-127708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:54:23.531 [DEBUG] [Thread-127708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:54:23.531 [DEBUG] [Thread-127708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:54:23.550 [INFO] [Thread-127708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:54:23.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:54:24.204 [DEBUG] [Thread-127708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:54:24.204 [DEBUG] [Thread-127708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:54:24.205 [DEBUG] [Thread-127708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:54:24.245 [DEBUG] [Thread-127708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:54:24.246 [DEBUG] [Thread-127708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:54:24.249 [DEBUG] [Thread-127708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:54:24.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:54:24.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:54:24.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:54:24.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:54:24.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:54:24.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:54:24.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:54:24.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:54:24.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:54:24.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.370978 -999.00  +21.70  12.30     51  +11.10 1 2 1 1 1   888    0 10.94 1.87 ----- 14.3 12.3 303.4 20.3 27.4 -12.7 26.6 -11.9 25.6 -12.1 26.2 -11.4
2026-02-11T10:54:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:54:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:54:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.370978
2026-02-11T10:54:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:54:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:54:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:54:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:54:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:54:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:53:54', tmtdew=12.79, humidity=43.93, cloud=0.0, wind=15.65, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:54:12.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:54:24.275 [DEBUG] [Thread-127708] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:54:24.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:54:24.370 [DEBUG] [Thread-127711] [transport.py] [_log()] starting thread (client mode): 0xa2d56620
2026-02-11T10:54:24.371 [DEBUG] [Thread-127711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:54:24.385 [DEBUG] [Thread-127711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:54:24.385 [INFO] [Thread-127711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] client lang: <none>
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] server lang: <none>
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] kex follows: False
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] Compression: none
2026-02-11T10:54:24.392 [DEBUG] [Thread-127711] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:54:24.452 [DEBUG] [Thread-127711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:54:24.453 [DEBUG] [Thread-127711] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:54:24.453 [DEBUG] [Thread-127711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:54:24.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:54:24.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:54:24.508 [DEBUG] [Thread-127711] [transport.py] [_log()] userauth is OK
2026-02-11T10:54:24.509 [DEBUG] [Thread-127711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:54:24.509 [DEBUG] [Thread-127711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:54:24.509 [DEBUG] [Thread-127711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:54:24.509 [DEBUG] [Thread-127711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:54:24.534 [INFO] [Thread-127711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:54:24.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:54:24.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:54:24.641 [DEBUG] [Thread-127713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:25.372 [DEBUG] [Thread-127711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:54:25.372 [DEBUG] [Thread-127711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:54:25.419 [DEBUG] [Thread-127711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:54:25.419 [DEBUG] [Thread-127711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:54:25.427 [DEBUG] [Thread-127711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:54:25.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:54:25.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:54:25.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:54:25.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:54:25.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:54:25.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:54:25.460 [DEBUG] [Thread-127711] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:54:39.695 [DEBUG] [Thread-127714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:54.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:54.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:54.731 [DEBUG] [Thread-127715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:54:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:54:55.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:54:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:54:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 54, 29), 12.52, 44.69, 0.0, 12.07, 21.72, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:54:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:54:29
2026-02-11T10:54:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:54:57.994 [DEBUG] [Thread-127716] [transport.py] [_log()] starting thread (client mode): 0xa2d90640
2026-02-11T10:54:57.994 [DEBUG] [Thread-127716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:54:58.013 [DEBUG] [Thread-127716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:54:58.013 [INFO] [Thread-127716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:54:58.016 [DEBUG] [Thread-127716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] client lang: <none>
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] server lang: <none>
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] kex follows: False
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:54:58.017 [DEBUG] [Thread-127716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:54:58.018 [DEBUG] [Thread-127716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:54:58.018 [DEBUG] [Thread-127716] [transport.py] [_log()] Compression: none
2026-02-11T10:54:58.018 [DEBUG] [Thread-127716] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:54:58.033 [DEBUG] [Thread-127716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:54:58.034 [DEBUG] [Thread-127716] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:54:58.034 [DEBUG] [Thread-127716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:54:58.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:54:58.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:54:58.036 [DEBUG] [Thread-127716] [transport.py] [_log()] userauth is OK
2026-02-11T10:54:58.036 [DEBUG] [Thread-127716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:54:58.037 [DEBUG] [Thread-127716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:54:58.037 [DEBUG] [Thread-127716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:54:58.037 [DEBUG] [Thread-127716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:54:58.062 [INFO] [Thread-127716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:54:58.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:54:58.719 [DEBUG] [Thread-127716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:54:58.720 [DEBUG] [Thread-127716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:54:58.720 [DEBUG] [Thread-127716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:54:58.760 [DEBUG] [Thread-127716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:54:58.761 [DEBUG] [Thread-127716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:54:58.764 [DEBUG] [Thread-127716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:54:58.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:54:58.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:54:58.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:54:58.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:54:58.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:54:58.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:54:58.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:54:58.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:54:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:54:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.371325 -999.00  +22.10  14.81     50  +11.20 1 2 1 1 1   888    0 10.95 -0.40 ----- 14.3 14.8 303.0 17.2 27.9 -12.3 26.9 -11.4 25.9 -10.6 26.5 -11.0
2026-02-11T10:54:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:54:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:54:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.371325
2026-02-11T10:54:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:54:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:54:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:54:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:54:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:54:58.788 [DEBUG] [Thread-127716] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:54:58.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:54:29', tmtdew=12.52, humidity=44.69, cloud=0.0, wind=12.07, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:54:42.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:54:58.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:54:58.891 [DEBUG] [Thread-127719] [transport.py] [_log()] starting thread (client mode): 0xa2d7a650
2026-02-11T10:54:58.891 [DEBUG] [Thread-127719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:54:58.905 [DEBUG] [Thread-127719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:54:58.906 [INFO] [Thread-127719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:54:58.914 [DEBUG] [Thread-127719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:54:58.914 [DEBUG] [Thread-127719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] client lang: <none>
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] server lang: <none>
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] kex follows: False
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] Compression: none
2026-02-11T10:54:58.915 [DEBUG] [Thread-127719] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:54:58.970 [DEBUG] [Thread-127719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:54:58.970 [DEBUG] [Thread-127719] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:54:58.970 [DEBUG] [Thread-127719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:54:58.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:54:58.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:54:59.029 [DEBUG] [Thread-127719] [transport.py] [_log()] userauth is OK
2026-02-11T10:54:59.029 [DEBUG] [Thread-127719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:54:59.030 [DEBUG] [Thread-127719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:54:59.030 [DEBUG] [Thread-127719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:54:59.030 [DEBUG] [Thread-127719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:54:59.055 [INFO] [Thread-127719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:54:59.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:54:59.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:54:59.885 [DEBUG] [Thread-127719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:54:59.886 [DEBUG] [Thread-127719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:54:59.934 [DEBUG] [Thread-127719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:54:59.934 [DEBUG] [Thread-127719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:54:59.943 [DEBUG] [Thread-127719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:54:59.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:54:59.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:54:59.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:54:59.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:54:59.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:54:59.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:54:59.989 [DEBUG] [Thread-127719] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:55:09.771 [DEBUG] [Thread-127721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:55:09.895 [DEBUG] [Thread-127722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:55:24.828 [DEBUG] [Thread-127723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:55:30.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:55:30.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:55:30.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:55:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 55, 6), 12.74, 44.13, 0.0, 13.22, 21.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:55:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:55:06
2026-02-11T10:55:32.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:55:32.534 [DEBUG] [Thread-127724] [transport.py] [_log()] starting thread (client mode): 0xa2d92bc0
2026-02-11T10:55:32.534 [DEBUG] [Thread-127724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:55:32.554 [DEBUG] [Thread-127724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:55:32.554 [INFO] [Thread-127724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:55:32.557 [DEBUG] [Thread-127724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] client lang: <none>
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] server lang: <none>
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] kex follows: False
2026-02-11T10:55:32.558 [DEBUG] [Thread-127724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:55:32.559 [DEBUG] [Thread-127724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:55:32.559 [DEBUG] [Thread-127724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:55:32.559 [DEBUG] [Thread-127724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:55:32.559 [DEBUG] [Thread-127724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:55:32.559 [DEBUG] [Thread-127724] [transport.py] [_log()] Compression: none
2026-02-11T10:55:32.559 [DEBUG] [Thread-127724] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:55:32.577 [DEBUG] [Thread-127724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:55:32.578 [DEBUG] [Thread-127724] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:55:32.578 [DEBUG] [Thread-127724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:55:32.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:55:32.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:55:32.580 [DEBUG] [Thread-127724] [transport.py] [_log()] userauth is OK
2026-02-11T10:55:32.581 [DEBUG] [Thread-127724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:55:32.581 [DEBUG] [Thread-127724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:55:32.581 [DEBUG] [Thread-127724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:55:32.581 [DEBUG] [Thread-127724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:55:32.598 [INFO] [Thread-127724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:55:32.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:55:33.248 [DEBUG] [Thread-127724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:55:33.248 [DEBUG] [Thread-127724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:55:33.248 [DEBUG] [Thread-127724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:55:33.289 [DEBUG] [Thread-127724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:55:33.289 [DEBUG] [Thread-127724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:55:33.293 [DEBUG] [Thread-127724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:55:33.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:55:33.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:55:33.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:55:33.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:55:33.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:55:33.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:55:33.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:55:33.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:55:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:55:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.371672 -999.00  +22.20  12.63     50  +11.30 1 3 1 1 1   888    0 10.77 -1.40 ----- 16.1 12.6 285.2 20.9 28.4 -12.6 27.3 -10.8 26.2 -8.8 26.9 -10.1
2026-02-11T10:55:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:55:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:55:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.371672
2026-02-11T10:55:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:55:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:55:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:55:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:55:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T10:55:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:55:06', tmtdew=12.74, humidity=44.13, cloud=0.0, wind=13.22, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:55:12.461', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:55:33.316 [DEBUG] [Thread-127724] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:55:33.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:55:33.413 [DEBUG] [Thread-127727] [transport.py] [_log()] starting thread (client mode): 0xa2df8c70
2026-02-11T10:55:33.413 [DEBUG] [Thread-127727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:55:33.428 [DEBUG] [Thread-127727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:55:33.428 [INFO] [Thread-127727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:55:33.435 [DEBUG] [Thread-127727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] client lang: <none>
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] server lang: <none>
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] kex follows: False
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:55:33.436 [DEBUG] [Thread-127727] [transport.py] [_log()] Compression: none
2026-02-11T10:55:33.437 [DEBUG] [Thread-127727] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:55:33.501 [DEBUG] [Thread-127727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:55:33.501 [DEBUG] [Thread-127727] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:55:33.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:55:33.503 [DEBUG] [Thread-127727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:55:33.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:55:33.566 [DEBUG] [Thread-127727] [transport.py] [_log()] userauth is OK
2026-02-11T10:55:33.566 [DEBUG] [Thread-127727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:55:33.567 [DEBUG] [Thread-127727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:55:33.567 [DEBUG] [Thread-127727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:55:33.567 [DEBUG] [Thread-127727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:55:33.591 [INFO] [Thread-127727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:55:33.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:55:33.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:55:34.432 [DEBUG] [Thread-127727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:55:34.433 [DEBUG] [Thread-127727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:55:34.480 [DEBUG] [Thread-127727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:55:34.481 [DEBUG] [Thread-127727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:55:34.490 [DEBUG] [Thread-127727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:55:34.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:55:34.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:55:34.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:55:34.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:55:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:55:34.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:55:34.528 [DEBUG] [Thread-127727] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:55:39.869 [DEBUG] [Thread-127729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:55:54.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:55:54.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:55:54.929 [DEBUG] [Thread-127730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:56:04.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:56:04.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:56:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:56:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 55, 41), 13.53, 42.13, 0.0, 14.68, 22.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:56:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:55:41
2026-02-11T10:56:06.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:56:07.148 [DEBUG] [Thread-127731] [transport.py] [_log()] starting thread (client mode): 0xa2dfb340
2026-02-11T10:56:07.148 [DEBUG] [Thread-127731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:56:07.168 [DEBUG] [Thread-127731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:56:07.168 [INFO] [Thread-127731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:56:07.171 [DEBUG] [Thread-127731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:56:07.171 [DEBUG] [Thread-127731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:56:07.171 [DEBUG] [Thread-127731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:56:07.171 [DEBUG] [Thread-127731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:07.171 [DEBUG] [Thread-127731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:07.171 [DEBUG] [Thread-127731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:07.171 [DEBUG] [Thread-127731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] client lang: <none>
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] server lang: <none>
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] kex follows: False
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] Compression: none
2026-02-11T10:56:07.172 [DEBUG] [Thread-127731] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:56:07.180 [DEBUG] [Thread-127731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:56:07.180 [DEBUG] [Thread-127731] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:56:07.181 [DEBUG] [Thread-127731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:56:07.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:56:07.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:56:07.182 [DEBUG] [Thread-127731] [transport.py] [_log()] userauth is OK
2026-02-11T10:56:07.182 [DEBUG] [Thread-127731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:56:07.182 [DEBUG] [Thread-127731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:56:07.182 [DEBUG] [Thread-127731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:56:07.182 [DEBUG] [Thread-127731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:56:07.200 [INFO] [Thread-127731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:56:07.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:56:07.825 [DEBUG] [Thread-127731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:56:07.825 [DEBUG] [Thread-127731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:56:07.826 [DEBUG] [Thread-127731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:56:07.866 [DEBUG] [Thread-127731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:56:07.866 [DEBUG] [Thread-127731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:56:07.869 [DEBUG] [Thread-127731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:56:07.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:56:07.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:56:07.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:56:07.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:56:07.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:56:07.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:56:07.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:56:07.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:56:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:56:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.372020 -999.00  +22.30  15.25     49  +11.30 1 3 1 1 1   888    0 10.78 -1.16 ----- 14.9 15.2 297.6 17.4 28.8 -11.3 27.7 -10.6 26.4 -9.1 27.1 -9.6
2026-02-11T10:56:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:56:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:56:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.372020
2026-02-11T10:56:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:56:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:56:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:56:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:56:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T10:56:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:55:41', tmtdew=13.53, humidity=42.13, cloud=0.0, wind=14.68, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:55:42.528', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:56:07.893 [DEBUG] [Thread-127731] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:56:07.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:56:07.991 [DEBUG] [Thread-127734] [transport.py] [_log()] starting thread (client mode): 0xa2d57220
2026-02-11T10:56:07.991 [DEBUG] [Thread-127734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:56:08.008 [DEBUG] [Thread-127734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:56:08.008 [INFO] [Thread-127734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:56:08.020 [DEBUG] [Thread-127734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:56:08.020 [DEBUG] [Thread-127734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:56:08.020 [DEBUG] [Thread-127734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:56:08.020 [DEBUG] [Thread-127734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:08.020 [DEBUG] [Thread-127734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] client lang: <none>
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] server lang: <none>
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] kex follows: False
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:56:08.021 [DEBUG] [Thread-127734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:56:08.022 [DEBUG] [Thread-127734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:56:08.022 [DEBUG] [Thread-127734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:56:08.022 [DEBUG] [Thread-127734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:56:08.022 [DEBUG] [Thread-127734] [transport.py] [_log()] Compression: none
2026-02-11T10:56:08.022 [DEBUG] [Thread-127734] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:56:08.084 [DEBUG] [Thread-127734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:56:08.085 [DEBUG] [Thread-127734] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:56:08.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:56:08.085 [DEBUG] [Thread-127734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:56:08.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:56:08.153 [DEBUG] [Thread-127734] [transport.py] [_log()] userauth is OK
2026-02-11T10:56:08.154 [DEBUG] [Thread-127734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:56:08.154 [DEBUG] [Thread-127734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:56:08.154 [DEBUG] [Thread-127734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:56:08.154 [DEBUG] [Thread-127734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:56:08.177 [INFO] [Thread-127734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:56:08.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:56:08.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:56:09.048 [DEBUG] [Thread-127734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:56:09.048 [DEBUG] [Thread-127734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:56:09.096 [DEBUG] [Thread-127734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:56:09.096 [DEBUG] [Thread-127734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:56:09.104 [DEBUG] [Thread-127734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:56:09.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:56:09.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:56:09.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:56:09.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:56:09.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:56:09.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:56:09.140 [DEBUG] [Thread-127734] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:56:09.929 [DEBUG] [Thread-127736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:56:09.963 [DEBUG] [Thread-127737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:56:25.025 [DEBUG] [Thread-127738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:56:39.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:56:39.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:56:39.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:56:40.063 [DEBUG] [Thread-127739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:56:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 56, 16), 13.04, 43.3, 0.0, 20.04, 22.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:56:41.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:56:16
2026-02-11T10:56:41.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:56:41.576 [DEBUG] [Thread-127740] [transport.py] [_log()] starting thread (client mode): 0xa81d77f0
2026-02-11T10:56:41.576 [DEBUG] [Thread-127740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:56:41.595 [DEBUG] [Thread-127740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:56:41.595 [INFO] [Thread-127740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] client lang: <none>
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] server lang: <none>
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] kex follows: False
2026-02-11T10:56:41.599 [DEBUG] [Thread-127740] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:56:41.600 [DEBUG] [Thread-127740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:56:41.600 [DEBUG] [Thread-127740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:56:41.600 [DEBUG] [Thread-127740] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:56:41.600 [DEBUG] [Thread-127740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:56:41.600 [DEBUG] [Thread-127740] [transport.py] [_log()] Compression: none
2026-02-11T10:56:41.600 [DEBUG] [Thread-127740] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:56:41.618 [DEBUG] [Thread-127740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:56:41.619 [DEBUG] [Thread-127740] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:56:41.619 [DEBUG] [Thread-127740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:56:41.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:56:41.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:56:41.621 [DEBUG] [Thread-127740] [transport.py] [_log()] userauth is OK
2026-02-11T10:56:41.621 [DEBUG] [Thread-127740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:56:41.621 [DEBUG] [Thread-127740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:56:41.622 [DEBUG] [Thread-127740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:56:41.622 [DEBUG] [Thread-127740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:56:41.643 [INFO] [Thread-127740] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:56:41.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:56:42.280 [DEBUG] [Thread-127740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:56:42.281 [DEBUG] [Thread-127740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:56:42.281 [DEBUG] [Thread-127740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:56:42.321 [DEBUG] [Thread-127740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:56:42.321 [DEBUG] [Thread-127740] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:56:42.325 [DEBUG] [Thread-127740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:56:42.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:56:42.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:56:42.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:56:42.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:56:42.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:56:42.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:56:42.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:56:42.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:56:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:56:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.372367 -999.00  +22.30  17.58     50  +11.40 1 3 1 1 1   888    0 10.98 -1.59 ----- 20.0 17.6 311.3 20.8 29.1 -10.7 28.0 -9.9 26.7 -8.5 27.4 -9.2
2026-02-11T10:56:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:56:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:56:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.372367
2026-02-11T10:56:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:56:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:56:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:56:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:56:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T10:56:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:56:16', tmtdew=13.04, humidity=43.3, cloud=0.0, wind=20.04, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:56:12.509', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:56:42.350 [DEBUG] [Thread-127740] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:56:42.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:56:42.450 [DEBUG] [Thread-127743] [transport.py] [_log()] starting thread (client mode): 0xa575a620
2026-02-11T10:56:42.450 [DEBUG] [Thread-127743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:56:42.467 [DEBUG] [Thread-127743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:56:42.468 [INFO] [Thread-127743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:56:42.480 [DEBUG] [Thread-127743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:56:42.480 [DEBUG] [Thread-127743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:56:42.480 [DEBUG] [Thread-127743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] client lang: <none>
2026-02-11T10:56:42.481 [DEBUG] [Thread-127743] [transport.py] [_log()] server lang: <none>
2026-02-11T10:56:42.482 [DEBUG] [Thread-127743] [transport.py] [_log()] kex follows: False
2026-02-11T10:56:42.482 [DEBUG] [Thread-127743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:56:42.482 [DEBUG] [Thread-127743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:56:42.482 [DEBUG] [Thread-127743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:56:42.482 [DEBUG] [Thread-127743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:56:42.482 [DEBUG] [Thread-127743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:56:42.483 [DEBUG] [Thread-127743] [transport.py] [_log()] Compression: none
2026-02-11T10:56:42.483 [DEBUG] [Thread-127743] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:56:42.537 [DEBUG] [Thread-127743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:56:42.538 [DEBUG] [Thread-127743] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:56:42.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:56:42.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:56:42.540 [DEBUG] [Thread-127743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:56:42.596 [DEBUG] [Thread-127743] [transport.py] [_log()] userauth is OK
2026-02-11T10:56:42.596 [DEBUG] [Thread-127743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:56:42.596 [DEBUG] [Thread-127743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:56:42.596 [DEBUG] [Thread-127743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:56:42.596 [DEBUG] [Thread-127743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:56:42.617 [INFO] [Thread-127743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:56:42.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:56:42.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:56:43.456 [DEBUG] [Thread-127743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:56:43.457 [DEBUG] [Thread-127743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:56:43.504 [DEBUG] [Thread-127743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:56:43.505 [DEBUG] [Thread-127743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:56:43.514 [DEBUG] [Thread-127743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:56:43.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:56:43.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:56:43.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:56:43.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:56:43.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:56:43.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:56:43.550 [DEBUG] [Thread-127743] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:56:54.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:56:54.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:56:55.099 [DEBUG] [Thread-127745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:57:09.959 [DEBUG] [Thread-127746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:57:10.151 [DEBUG] [Thread-127747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:57:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:57:13.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:57:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:57:15.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 56, 51), 13.28, 42.8, 0.0, 18.4, 22.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:57:15.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:56:51
2026-02-11T10:57:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:57:15.993 [DEBUG] [Thread-127748] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-11T10:57:15.993 [DEBUG] [Thread-127748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:57:16.003 [DEBUG] [Thread-127748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:57:16.003 [INFO] [Thread-127748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:57:16.006 [DEBUG] [Thread-127748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:57:16.006 [DEBUG] [Thread-127748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:57:16.006 [DEBUG] [Thread-127748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:57:16.006 [DEBUG] [Thread-127748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:16.006 [DEBUG] [Thread-127748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] client lang: <none>
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] server lang: <none>
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] kex follows: False
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] Compression: none
2026-02-11T10:57:16.007 [DEBUG] [Thread-127748] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:57:16.023 [DEBUG] [Thread-127748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:57:16.023 [DEBUG] [Thread-127748] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:57:16.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:57:16.024 [DEBUG] [Thread-127748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:57:16.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:57:16.068 [DEBUG] [Thread-127748] [transport.py] [_log()] userauth is OK
2026-02-11T10:57:16.069 [DEBUG] [Thread-127748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:57:16.069 [DEBUG] [Thread-127748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:57:16.069 [DEBUG] [Thread-127748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:57:16.069 [DEBUG] [Thread-127748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:57:16.104 [INFO] [Thread-127748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:57:16.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:57:16.710 [DEBUG] [Thread-127748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:57:16.710 [DEBUG] [Thread-127748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:57:16.711 [DEBUG] [Thread-127748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:57:16.752 [DEBUG] [Thread-127748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:57:16.752 [DEBUG] [Thread-127748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:57:16.755 [DEBUG] [Thread-127748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:57:16.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:57:16.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:57:16.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:57:16.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:57:16.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:57:16.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:57:16.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:57:16.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:57:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:57:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.372714 -999.00  +23.10  19.56     49  +11.80 1 3 1 1 1   888    0 10.77 -1.13 ----- 18.8 19.6 318.8 22.8 29.5 -9.5 28.2 -9.7 26.9 -8.0 27.7 -8.9
2026-02-11T10:57:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:57:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:57:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.372714
2026-02-11T10:57:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:57:16.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:57:16.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:57:16.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:57:16.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T10:57:16.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:56:51', tmtdew=13.28, humidity=42.8, cloud=0.0, wind=18.4, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:56:42.490', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:57:16.782 [DEBUG] [Thread-127748] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:57:16.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:57:16.877 [DEBUG] [Thread-127751] [transport.py] [_log()] starting thread (client mode): 0xa2d57eb0
2026-02-11T10:57:16.877 [DEBUG] [Thread-127751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:57:16.893 [DEBUG] [Thread-127751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:57:16.893 [INFO] [Thread-127751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:57:16.901 [DEBUG] [Thread-127751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:57:16.901 [DEBUG] [Thread-127751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:57:16.901 [DEBUG] [Thread-127751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:57:16.901 [DEBUG] [Thread-127751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] client lang: <none>
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] server lang: <none>
2026-02-11T10:57:16.902 [DEBUG] [Thread-127751] [transport.py] [_log()] kex follows: False
2026-02-11T10:57:16.903 [DEBUG] [Thread-127751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:57:16.903 [DEBUG] [Thread-127751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:57:16.903 [DEBUG] [Thread-127751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:57:16.903 [DEBUG] [Thread-127751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:57:16.903 [DEBUG] [Thread-127751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:57:16.903 [DEBUG] [Thread-127751] [transport.py] [_log()] Compression: none
2026-02-11T10:57:16.903 [DEBUG] [Thread-127751] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:57:16.958 [DEBUG] [Thread-127751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:57:16.959 [DEBUG] [Thread-127751] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:57:16.959 [DEBUG] [Thread-127751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:57:16.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:57:16.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:57:17.019 [DEBUG] [Thread-127751] [transport.py] [_log()] userauth is OK
2026-02-11T10:57:17.019 [DEBUG] [Thread-127751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:57:17.019 [DEBUG] [Thread-127751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:57:17.020 [DEBUG] [Thread-127751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:57:17.020 [DEBUG] [Thread-127751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:57:17.040 [INFO] [Thread-127751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:57:17.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:57:17.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:57:17.914 [DEBUG] [Thread-127751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:57:17.914 [DEBUG] [Thread-127751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:57:17.967 [DEBUG] [Thread-127751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:57:17.967 [DEBUG] [Thread-127751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:57:17.980 [DEBUG] [Thread-127751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:57:17.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:57:17.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:57:18.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:57:18.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:57:18.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:57:18.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:57:18.030 [DEBUG] [Thread-127751] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:57:25.187 [DEBUG] [Thread-127753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:57:40.230 [DEBUG] [Thread-127754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:57:48.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:57:48.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:57:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:57:49.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 57, 27), 13.31, 42.72, 0.0, 18.56, 22.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:57:49.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:57:27
2026-02-11T10:57:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:57:50.345 [DEBUG] [Thread-127755] [transport.py] [_log()] starting thread (client mode): 0xa57c0880
2026-02-11T10:57:50.345 [DEBUG] [Thread-127755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:57:50.365 [DEBUG] [Thread-127755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:57:50.366 [INFO] [Thread-127755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:57:50.368 [DEBUG] [Thread-127755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:57:50.368 [DEBUG] [Thread-127755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:57:50.368 [DEBUG] [Thread-127755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:57:50.368 [DEBUG] [Thread-127755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] client lang: <none>
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] server lang: <none>
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] kex follows: False
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] Compression: none
2026-02-11T10:57:50.369 [DEBUG] [Thread-127755] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:57:50.386 [DEBUG] [Thread-127755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:57:50.387 [DEBUG] [Thread-127755] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:57:50.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:57:50.388 [DEBUG] [Thread-127755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:57:50.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:57:50.390 [DEBUG] [Thread-127755] [transport.py] [_log()] userauth is OK
2026-02-11T10:57:50.390 [DEBUG] [Thread-127755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:57:50.391 [DEBUG] [Thread-127755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:57:50.391 [DEBUG] [Thread-127755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:57:50.391 [DEBUG] [Thread-127755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:57:50.404 [INFO] [Thread-127755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:57:50.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:57:51.055 [DEBUG] [Thread-127755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:57:51.056 [DEBUG] [Thread-127755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:57:51.056 [DEBUG] [Thread-127755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:57:51.097 [DEBUG] [Thread-127755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:57:51.097 [DEBUG] [Thread-127755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:57:51.100 [DEBUG] [Thread-127755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:57:51.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:57:51.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:57:51.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:57:51.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:57:51.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:57:51.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:57:51.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:57:51.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:57:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:57:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.373408 -999.00  +23.30  18.45     47  +11.50 1 3 1 1 1   888    0 10.94 4.60 ----- 27.6 18.4 329.8 22.1 29.5 -13.4 28.7 -11.2 27.2 -8.2 28.1 -10.7
2026-02-11T10:57:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:57:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:57:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.373408
2026-02-11T10:57:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:57:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:57:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:57:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:57:51.128 [DEBUG] [Thread-127755] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:57:51.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T10:57:51.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:57:27', tmtdew=13.31, humidity=42.72, cloud=0.0, wind=18.56, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:57:42.451', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:57:51.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:57:51.225 [DEBUG] [Thread-127758] [transport.py] [_log()] starting thread (client mode): 0xa57c3190
2026-02-11T10:57:51.225 [DEBUG] [Thread-127758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:57:51.239 [DEBUG] [Thread-127758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:57:51.240 [INFO] [Thread-127758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:57:51.247 [DEBUG] [Thread-127758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] client lang: <none>
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] server lang: <none>
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] kex follows: False
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] Compression: none
2026-02-11T10:57:51.248 [DEBUG] [Thread-127758] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:57:51.304 [DEBUG] [Thread-127758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:57:51.304 [DEBUG] [Thread-127758] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:57:51.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:57:51.306 [DEBUG] [Thread-127758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:57:51.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:57:51.360 [DEBUG] [Thread-127758] [transport.py] [_log()] userauth is OK
2026-02-11T10:57:51.361 [DEBUG] [Thread-127758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:57:51.361 [DEBUG] [Thread-127758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:57:51.361 [DEBUG] [Thread-127758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:57:51.361 [DEBUG] [Thread-127758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:57:51.379 [INFO] [Thread-127758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:57:51.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:57:51.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:57:52.205 [DEBUG] [Thread-127758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:57:52.205 [DEBUG] [Thread-127758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:57:52.253 [DEBUG] [Thread-127758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:57:52.254 [DEBUG] [Thread-127758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:57:52.262 [DEBUG] [Thread-127758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:57:52.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:57:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:57: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
2026-02-11T10:57:52.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:57:52.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:57:52.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:57:52.299 [DEBUG] [Thread-127758] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:57:54.992 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:57:54.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:57:55.268 [DEBUG] [Thread-127760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:10.011 [DEBUG] [Thread-127761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:10.318 [DEBUG] [Thread-127762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:58:22.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:58:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:58:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 58, 2), 13.38, 42.55, 0.0, 24.56, 22.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:58:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:58:02
2026-02-11T10:58:24.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:58:24.715 [DEBUG] [Thread-127763] [transport.py] [_log()] starting thread (client mode): 0xa57c13f0
2026-02-11T10:58:24.715 [DEBUG] [Thread-127763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:58:24.736 [DEBUG] [Thread-127763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:58:24.736 [INFO] [Thread-127763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:58:24.739 [DEBUG] [Thread-127763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] client lang: <none>
2026-02-11T10:58:24.740 [DEBUG] [Thread-127763] [transport.py] [_log()] server lang: <none>
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] kex follows: False
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] Compression: none
2026-02-11T10:58:24.741 [DEBUG] [Thread-127763] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:58:24.760 [DEBUG] [Thread-127763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:58:24.761 [DEBUG] [Thread-127763] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:58:24.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:58:24.762 [DEBUG] [Thread-127763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:58:24.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:58:24.764 [DEBUG] [Thread-127763] [transport.py] [_log()] userauth is OK
2026-02-11T10:58:24.764 [DEBUG] [Thread-127763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:58:24.765 [DEBUG] [Thread-127763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:58:24.765 [DEBUG] [Thread-127763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:58:24.765 [DEBUG] [Thread-127763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:58:24.790 [INFO] [Thread-127763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:58:24.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:58:25.351 [DEBUG] [Thread-127765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:25.406 [DEBUG] [Thread-127763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:58:25.406 [DEBUG] [Thread-127763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:58:25.406 [DEBUG] [Thread-127763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:58:25.447 [DEBUG] [Thread-127763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:58:25.448 [DEBUG] [Thread-127763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:58:25.451 [DEBUG] [Thread-127763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:58:25.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:58:25.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:58:25.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:58:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:58:25.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:58:25.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:58:25.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:58:25.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:58:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:58:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.373756 -999.00  +23.00  22.25     48  +11.40 1 2 1 1 1   888    0 10.93 6.66 ----- 20.1 22.2 304.8 27.0 29.1 -13.9 28.4 -12.7 27.1 -11.5 27.8 -12.6
2026-02-11T10:58:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:58:25.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:58:25.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.373756
2026-02-11T10:58:25.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:58:25.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:58:25.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:58:25.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:58:25.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:58:25.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:58:02', tmtdew=13.38, humidity=42.55, cloud=0.0, wind=24.56, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:58:12.518', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:58:25.477 [DEBUG] [Thread-127763] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:58:25.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:58:25.573 [DEBUG] [Thread-127767] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-11T10:58:25.573 [DEBUG] [Thread-127767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:58:25.591 [DEBUG] [Thread-127767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:58:25.591 [INFO] [Thread-127767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:58:25.598 [DEBUG] [Thread-127767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] client lang: <none>
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] server lang: <none>
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] kex follows: False
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:58:25.599 [DEBUG] [Thread-127767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:58:25.600 [DEBUG] [Thread-127767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:58:25.600 [DEBUG] [Thread-127767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:58:25.600 [DEBUG] [Thread-127767] [transport.py] [_log()] Compression: none
2026-02-11T10:58:25.600 [DEBUG] [Thread-127767] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:58:25.658 [DEBUG] [Thread-127767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:58:25.658 [DEBUG] [Thread-127767] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:58:25.658 [DEBUG] [Thread-127767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:58:25.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:58:25.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:58:25.718 [DEBUG] [Thread-127767] [transport.py] [_log()] userauth is OK
2026-02-11T10:58:25.719 [DEBUG] [Thread-127767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:58:25.719 [DEBUG] [Thread-127767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:58:25.719 [DEBUG] [Thread-127767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:58:25.719 [DEBUG] [Thread-127767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:58:25.737 [INFO] [Thread-127767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:58:25.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:58:25.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:58:26.588 [DEBUG] [Thread-127767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:58:26.588 [DEBUG] [Thread-127767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:58:26.636 [DEBUG] [Thread-127767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:58:26.637 [DEBUG] [Thread-127767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:58:26.646 [DEBUG] [Thread-127767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:58:26.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:58:26.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:58:26.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:58:26.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:58:26.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:58:26.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:58:26.683 [DEBUG] [Thread-127767] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:58:40.389 [DEBUG] [Thread-127769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:55.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:55.135 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:55.444 [DEBUG] [Thread-127770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:58:56.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:58:56.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:58:56.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:58:58.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 58, 37), 13.51, 42.19, 0.0, 24.98, 22.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:58:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:58:37
2026-02-11T10:58:58.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:58:59.055 [DEBUG] [Thread-127771] [transport.py] [_log()] starting thread (client mode): 0xa2df8fd0
2026-02-11T10:58:59.055 [DEBUG] [Thread-127771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:58:59.075 [DEBUG] [Thread-127771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:58:59.076 [INFO] [Thread-127771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:58:59.079 [DEBUG] [Thread-127771] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:58:59.079 [DEBUG] [Thread-127771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:58:59.079 [DEBUG] [Thread-127771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:58:59.079 [DEBUG] [Thread-127771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:59.079 [DEBUG] [Thread-127771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:59.079 [DEBUG] [Thread-127771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:59.079 [DEBUG] [Thread-127771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:59.080 [DEBUG] [Thread-127771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:58:59.080 [DEBUG] [Thread-127771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:58:59.080 [DEBUG] [Thread-127771] [transport.py] [_log()] client lang: <none>
2026-02-11T10:58:59.080 [DEBUG] [Thread-127771] [transport.py] [_log()] server lang: <none>
2026-02-11T10:58:59.080 [DEBUG] [Thread-127771] [transport.py] [_log()] kex follows: False
2026-02-11T10:58:59.080 [DEBUG] [Thread-127771] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:58:59.080 [DEBUG] [Thread-127771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:58:59.081 [DEBUG] [Thread-127771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:58:59.081 [DEBUG] [Thread-127771] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:58:59.081 [DEBUG] [Thread-127771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:58:59.081 [DEBUG] [Thread-127771] [transport.py] [_log()] Compression: none
2026-02-11T10:58:59.081 [DEBUG] [Thread-127771] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:58:59.101 [DEBUG] [Thread-127771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:58:59.102 [DEBUG] [Thread-127771] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:58:59.102 [DEBUG] [Thread-127771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:58:59.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:58:59.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:58:59.103 [DEBUG] [Thread-127771] [transport.py] [_log()] userauth is OK
2026-02-11T10:58:59.104 [DEBUG] [Thread-127771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:58:59.104 [DEBUG] [Thread-127771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:58:59.104 [DEBUG] [Thread-127771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:58:59.104 [DEBUG] [Thread-127771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:58:59.119 [INFO] [Thread-127771] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:58:59.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:58:59.783 [DEBUG] [Thread-127771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:58:59.784 [DEBUG] [Thread-127771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:58:59.784 [DEBUG] [Thread-127771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:58:59.824 [DEBUG] [Thread-127771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:58:59.824 [DEBUG] [Thread-127771] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:58:59.828 [DEBUG] [Thread-127771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:58:59.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:58:59.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:58:59.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:58:59.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:58:59.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:58:59.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:58:59.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:58:59.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:58:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:58:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.374103 -999.00  +22.40  22.02     49  +11.20 1 2 1 1 1   888    0 11.01 7.27 ----- 22.3 22.0 294.4 29.7 28.6 -14.6 28.2 -13.2 26.9 -12.4 27.6 -13.5
2026-02-11T10:58:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:58:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:58:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.374103
2026-02-11T10:58:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:58:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:58:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:58:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:58:59.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:58:59.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:58:37', tmtdew=13.51, humidity=42.19, cloud=0.0, wind=24.98, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:58:42.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:58:59.853 [DEBUG] [Thread-127771] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:58:59.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:58:59.948 [DEBUG] [Thread-127774] [transport.py] [_log()] starting thread (client mode): 0xa5759ba0
2026-02-11T10:58:59.948 [DEBUG] [Thread-127774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:58:59.962 [DEBUG] [Thread-127774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:58:59.962 [INFO] [Thread-127774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:58:59.970 [DEBUG] [Thread-127774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] client lang: <none>
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] server lang: <none>
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] kex follows: False
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:58:59.971 [DEBUG] [Thread-127774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:58:59.972 [DEBUG] [Thread-127774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:58:59.972 [DEBUG] [Thread-127774] [transport.py] [_log()] Compression: none
2026-02-11T10:58:59.972 [DEBUG] [Thread-127774] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:59:00.029 [DEBUG] [Thread-127774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:59:00.030 [DEBUG] [Thread-127774] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:59:00.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:59:00.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:59:00.032 [DEBUG] [Thread-127774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:59:00.088 [DEBUG] [Thread-127774] [transport.py] [_log()] userauth is OK
2026-02-11T10:59:00.088 [DEBUG] [Thread-127774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:59:00.088 [DEBUG] [Thread-127774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:59:00.089 [DEBUG] [Thread-127774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:59:00.089 [DEBUG] [Thread-127774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:59:00.111 [INFO] [Thread-127774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:59:00.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:59:00.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:59:00.934 [DEBUG] [Thread-127774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:59:00.935 [DEBUG] [Thread-127774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:59:00.983 [DEBUG] [Thread-127774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:59:00.983 [DEBUG] [Thread-127774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:59:00.992 [DEBUG] [Thread-127774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:59:01.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:59:01.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:59:01.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:59:01.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:59:01.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:59:01.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:59:01.028 [DEBUG] [Thread-127774] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:59:10.045 [DEBUG] [Thread-127776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:59:10.484 [DEBUG] [Thread-127777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:59:25.537 [DEBUG] [Thread-127778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:59:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T10:59:31.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T10:59:31.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T10:59:32.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 59, 13), 12.87, 43.73, 0.0, 22.21, 22.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T10:59:32.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:59:13
2026-02-11T10:59:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T10:59:33.461 [DEBUG] [Thread-127779] [transport.py] [_log()] starting thread (client mode): 0xa2dface0
2026-02-11T10:59:33.462 [DEBUG] [Thread-127779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:59:33.482 [DEBUG] [Thread-127779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T10:59:33.482 [INFO] [Thread-127779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T10:59:33.485 [DEBUG] [Thread-127779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:59:33.485 [DEBUG] [Thread-127779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T10:59:33.485 [DEBUG] [Thread-127779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:59:33.485 [DEBUG] [Thread-127779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] client lang: <none>
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] server lang: <none>
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] kex follows: False
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] Compression: none
2026-02-11T10:59:33.486 [DEBUG] [Thread-127779] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:59:33.501 [DEBUG] [Thread-127779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:59:33.502 [DEBUG] [Thread-127779] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:59:33.502 [DEBUG] [Thread-127779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T10:59:33.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T10:59:33.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:59:33.504 [DEBUG] [Thread-127779] [transport.py] [_log()] userauth is OK
2026-02-11T10:59:33.504 [DEBUG] [Thread-127779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:59:33.504 [DEBUG] [Thread-127779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:59:33.504 [DEBUG] [Thread-127779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T10:59:33.504 [DEBUG] [Thread-127779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:59:33.522 [INFO] [Thread-127779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:59:33.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:59:34.164 [DEBUG] [Thread-127779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:59:34.164 [DEBUG] [Thread-127779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:59:34.164 [DEBUG] [Thread-127779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T10:59:34.204 [DEBUG] [Thread-127779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:59:34.204 [DEBUG] [Thread-127779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:59:34.207 [DEBUG] [Thread-127779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:59:34.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:59:34.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T10:59:34.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T10:59:34.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T10:59:34.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:59:34.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T10:59:34.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:59:34.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:59:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T10:59:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.374450 -999.00  +22.10  27.72     49  +11.00 1 2 1 1 1   888    0 11.32 7.97 ----- 22.4 27.7 292.4 37.2 28.4 -13.3 27.9 -12.4 26.5 -13.1 27.3 -13.0
2026-02-11T10:59:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T10:59:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T10:59:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.374450
2026-02-11T10:59:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T10:59:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T10:59:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T10:59:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T10:59:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T10:59:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:59:13', tmtdew=12.87, humidity=43.73, cloud=0.0, wind=22.21, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:59:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T10:59:34.233 [DEBUG] [Thread-127779] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:59:34.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T10:59:34.327 [DEBUG] [Thread-127782] [transport.py] [_log()] starting thread (client mode): 0xa2d55ed0
2026-02-11T10:59:34.327 [DEBUG] [Thread-127782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T10:59:34.343 [DEBUG] [Thread-127782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T10:59:34.344 [INFO] [Thread-127782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T10:59:34.351 [DEBUG] [Thread-127782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T10:59:34.352 [DEBUG] [Thread-127782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T10:59:34.352 [DEBUG] [Thread-127782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T10:59:34.352 [DEBUG] [Thread-127782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:59:34.352 [DEBUG] [Thread-127782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] client lang: <none>
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] server lang: <none>
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] kex follows: False
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T10:59:34.353 [DEBUG] [Thread-127782] [transport.py] [_log()] Compression: none
2026-02-11T10:59:34.354 [DEBUG] [Thread-127782] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T10:59:34.411 [DEBUG] [Thread-127782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T10:59:34.412 [DEBUG] [Thread-127782] [transport.py] [_log()] Switch to new keys ...
2026-02-11T10:59:34.412 [DEBUG] [Thread-127782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T10:59:34.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T10:59:34.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T10:59:34.467 [DEBUG] [Thread-127782] [transport.py] [_log()] userauth is OK
2026-02-11T10:59:34.467 [DEBUG] [Thread-127782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T10:59:34.467 [DEBUG] [Thread-127782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T10:59:34.467 [DEBUG] [Thread-127782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T10:59:34.467 [DEBUG] [Thread-127782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T10:59:34.491 [INFO] [Thread-127782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T10:59:34.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T10:59:34.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T10:59:35.388 [DEBUG] [Thread-127782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T10:59:35.388 [DEBUG] [Thread-127782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T10:59:35.436 [DEBUG] [Thread-127782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T10:59:35.437 [DEBUG] [Thread-127782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T10:59:35.446 [DEBUG] [Thread-127782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T10:59:35.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T10:59:35.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T10:59:35.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T10:59:35.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T10:59:35.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T10:59:35.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T10:59:35.482 [DEBUG] [Thread-127782] [transport.py] [_log()] EOF in transport thread
2026-02-11T10:59:40.574 [DEBUG] [Thread-127784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:59:55.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:59:55.278 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T10:59:55.623 [DEBUG] [Thread-127785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:00:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:00:05.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:00:05.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:00:07.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 10, 59, 49), 13.46, 42.2, 0.0, 24.26, 22.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:00:07.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 10:59:49
2026-02-11T11:00:07.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:00:08.131 [DEBUG] [Thread-127786] [transport.py] [_log()] starting thread (client mode): 0xa2d7b6d0
2026-02-11T11:00:08.131 [DEBUG] [Thread-127786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:00:08.151 [DEBUG] [Thread-127786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:00:08.151 [INFO] [Thread-127786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:00:08.154 [DEBUG] [Thread-127786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:00:08.154 [DEBUG] [Thread-127786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:00:08.154 [DEBUG] [Thread-127786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:00:08.154 [DEBUG] [Thread-127786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:08.154 [DEBUG] [Thread-127786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] client lang: <none>
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] server lang: <none>
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] kex follows: False
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] Compression: none
2026-02-11T11:00:08.155 [DEBUG] [Thread-127786] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:00:08.171 [DEBUG] [Thread-127786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:00:08.171 [DEBUG] [Thread-127786] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:00:08.172 [DEBUG] [Thread-127786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:00:08.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:00:08.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:00:08.212 [DEBUG] [Thread-127786] [transport.py] [_log()] userauth is OK
2026-02-11T11:00:08.212 [DEBUG] [Thread-127786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:00:08.212 [DEBUG] [Thread-127786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:00:08.212 [DEBUG] [Thread-127786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:00:08.212 [DEBUG] [Thread-127786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:00:08.248 [INFO] [Thread-127786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:00:08.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:00:10.078 [DEBUG] [Thread-127788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:00:10.658 [DEBUG] [Thread-127789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:00:10.693 [DEBUG] [Thread-127786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:00:10.693 [DEBUG] [Thread-127786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:00:10.693 [DEBUG] [Thread-127786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:00:10.734 [DEBUG] [Thread-127786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:00:10.734 [DEBUG] [Thread-127786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:00:10.737 [DEBUG] [Thread-127786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:00:10.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:00:10.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:00:10.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:00:10.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:00:10.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:00:10.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:00:10.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:00:10.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:00:10.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:00:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.374797 -999.00  +22.30  20.93     48  +11.10 1 2 1 1 1   888    0 11.44 10.12 ----- 19.1 20.9 305.6 29.5 28.1 -13.2 27.7 -12.9 26.5 -12.7 27.2 -13.3
2026-02-11T11:00:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:00:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:00:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.374797
2026-02-11T11:00:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:00:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:00:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:00:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:00:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:00:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T10:59:49', tmtdew=13.46, humidity=42.2, cloud=0.0, wind=24.26, temperature=22.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T08:59:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:00:10.822 [DEBUG] [Thread-127786] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:00:10.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:00:10.913 [DEBUG] [Thread-127791] [transport.py] [_log()] starting thread (client mode): 0xa2d00b50
2026-02-11T11:00:10.913 [DEBUG] [Thread-127791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:00:10.928 [DEBUG] [Thread-127791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:00:10.928 [INFO] [Thread-127791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:00:10.935 [DEBUG] [Thread-127791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:00:10.935 [DEBUG] [Thread-127791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:00:10.935 [DEBUG] [Thread-127791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:00:10.935 [DEBUG] [Thread-127791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:10.935 [DEBUG] [Thread-127791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:10.935 [DEBUG] [Thread-127791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:10.935 [DEBUG] [Thread-127791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] client lang: <none>
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] server lang: <none>
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] kex follows: False
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] Compression: none
2026-02-11T11:00:10.936 [DEBUG] [Thread-127791] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:00:10.992 [DEBUG] [Thread-127791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:00:10.992 [DEBUG] [Thread-127791] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:00:10.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:00:10.993 [DEBUG] [Thread-127791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:00:10.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:00:11.053 [DEBUG] [Thread-127791] [transport.py] [_log()] userauth is OK
2026-02-11T11:00:11.053 [DEBUG] [Thread-127791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:00:11.053 [DEBUG] [Thread-127791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:00:11.053 [DEBUG] [Thread-127791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:00:11.053 [DEBUG] [Thread-127791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:00:11.071 [INFO] [Thread-127791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:00:11.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:00:11.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:00:11.900 [DEBUG] [Thread-127791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:00:11.900 [DEBUG] [Thread-127791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:00:11.948 [DEBUG] [Thread-127791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:00:11.948 [DEBUG] [Thread-127791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:00:11.956 [DEBUG] [Thread-127791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:00:11.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:00: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')
2026-02-11T11:00:11.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:00:11.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:00:11.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:00:11.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:00:11.990 [DEBUG] [Thread-127791] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:00:25.692 [DEBUG] [Thread-127793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:00:40.746 [DEBUG] [Thread-127794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:00:42.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:00:42.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:00:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:00:43.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 0, 24), 13.47, 42.13, 0.0, 23.93, 22.31, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:00:43.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:00:24
2026-02-11T11:00:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:00:44.447 [DEBUG] [Thread-127795] [transport.py] [_log()] starting thread (client mode): 0xa2d578e0
2026-02-11T11:00:44.447 [DEBUG] [Thread-127795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:00:44.466 [DEBUG] [Thread-127795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:00:44.466 [INFO] [Thread-127795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:00:44.469 [DEBUG] [Thread-127795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:00:44.469 [DEBUG] [Thread-127795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:00:44.469 [DEBUG] [Thread-127795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:00:44.469 [DEBUG] [Thread-127795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:44.469 [DEBUG] [Thread-127795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:44.469 [DEBUG] [Thread-127795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] client lang: <none>
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] server lang: <none>
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] kex follows: False
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] Compression: none
2026-02-11T11:00:44.470 [DEBUG] [Thread-127795] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:00:44.487 [DEBUG] [Thread-127795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:00:44.488 [DEBUG] [Thread-127795] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:00:44.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:00:44.489 [DEBUG] [Thread-127795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:00:44.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:00:44.491 [DEBUG] [Thread-127795] [transport.py] [_log()] userauth is OK
2026-02-11T11:00:44.491 [DEBUG] [Thread-127795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:00:44.492 [DEBUG] [Thread-127795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:00:44.492 [DEBUG] [Thread-127795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:00:44.492 [DEBUG] [Thread-127795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:00:44.516 [INFO] [Thread-127795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:00:44.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:00:45.133 [DEBUG] [Thread-127795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:00:45.133 [DEBUG] [Thread-127795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:00:45.134 [DEBUG] [Thread-127795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:00:45.174 [DEBUG] [Thread-127795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:00:45.174 [DEBUG] [Thread-127795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:00:45.178 [DEBUG] [Thread-127795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:00:45.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:00:45.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:00:45.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:00:45.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:00:45.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:00:45.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:00:45.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:00:45.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:00:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:00:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.375144 -999.00  +22.30  22.32     48  +10.80 1 2 1 1 1   888    0 11.48 13.14 ----- 22.6 22.3 290.4 29.2 27.8 -12.8 27.5 -12.8 26.4 -12.0 27.0 -13.4
2026-02-11T11:00:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:00:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:00:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.375144
2026-02-11T11:00:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:00:45.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:00:45.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:00:45.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:00:45.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:00:45.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:00:24', tmtdew=13.47, humidity=42.13, cloud=0.0, wind=23.93, temperature=22.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:00:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:00:45.205 [DEBUG] [Thread-127795] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:00:45.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:00:45.302 [DEBUG] [Thread-127798] [transport.py] [_log()] starting thread (client mode): 0xa2d565c0
2026-02-11T11:00:45.302 [DEBUG] [Thread-127798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:00:45.317 [DEBUG] [Thread-127798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:00:45.317 [INFO] [Thread-127798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] client lang: <none>
2026-02-11T11:00:45.325 [DEBUG] [Thread-127798] [transport.py] [_log()] server lang: <none>
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] kex follows: False
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] Compression: none
2026-02-11T11:00:45.326 [DEBUG] [Thread-127798] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:00:45.384 [DEBUG] [Thread-127798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:00:45.385 [DEBUG] [Thread-127798] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:00:45.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:00:45.386 [DEBUG] [Thread-127798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:00:45.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:00:45.440 [DEBUG] [Thread-127798] [transport.py] [_log()] userauth is OK
2026-02-11T11:00:45.441 [DEBUG] [Thread-127798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:00:45.441 [DEBUG] [Thread-127798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:00:45.441 [DEBUG] [Thread-127798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:00:45.441 [DEBUG] [Thread-127798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:00:45.461 [INFO] [Thread-127798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:00:45.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:00:45.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:00:46.303 [DEBUG] [Thread-127798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:00:46.303 [DEBUG] [Thread-127798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:00:46.351 [DEBUG] [Thread-127798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:00:46.351 [DEBUG] [Thread-127798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:00:46.360 [DEBUG] [Thread-127798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:00:46.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:00:46.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:00:46.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:00:46.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:00:46.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:00:46.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:00:46.395 [DEBUG] [Thread-127798] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:00:55.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:00:55.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:00:55.783 [DEBUG] [Thread-127800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:01:10.110 [DEBUG] [Thread-127801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:01:10.833 [DEBUG] [Thread-127802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:01:16.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:01:16.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:01:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:01:18.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 0, 59), 13.15, 43.33, 0.0, 19.34, 22.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:01:18.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:00:59
2026-02-11T11:01:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:01:18.788 [DEBUG] [Thread-127803] [transport.py] [_log()] starting thread (client mode): 0xa2d78a90
2026-02-11T11:01:18.788 [DEBUG] [Thread-127803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:01:18.809 [DEBUG] [Thread-127803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:01:18.809 [INFO] [Thread-127803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:01:18.812 [DEBUG] [Thread-127803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] client lang: <none>
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] server lang: <none>
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] kex follows: False
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] Compression: none
2026-02-11T11:01:18.813 [DEBUG] [Thread-127803] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:01:18.828 [DEBUG] [Thread-127803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:01:18.829 [DEBUG] [Thread-127803] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:01:18.830 [DEBUG] [Thread-127803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:01:18.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:01:18.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:01:18.833 [DEBUG] [Thread-127803] [transport.py] [_log()] userauth is OK
2026-02-11T11:01:18.833 [DEBUG] [Thread-127803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:01:18.833 [DEBUG] [Thread-127803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:01:18.834 [DEBUG] [Thread-127803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:01:18.834 [DEBUG] [Thread-127803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:01:18.853 [INFO] [Thread-127803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:01:18.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:01:19.483 [DEBUG] [Thread-127803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:01:19.483 [DEBUG] [Thread-127803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:01:19.484 [DEBUG] [Thread-127803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:01:19.524 [DEBUG] [Thread-127803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:01:19.524 [DEBUG] [Thread-127803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:01:19.527 [DEBUG] [Thread-127803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:01:19.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:01:19.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:01:19.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:01:19.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:01:19.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:01:19.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:01:19.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:01:19.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:01:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:01:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.375492 -999.00  +22.20  18.01     49  +11.10 1 2 1 1 1   888    0 11.42 15.51 ----- 22.7 18.0 293.4 21.7 27.8 -12.3 27.2 -12.2 26.2 -12.8 26.8 -12.9
2026-02-11T11:01:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:01:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:01:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.375492
2026-02-11T11:01:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:01:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:01:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:01:19.551 [DEBUG] [Thread-127803] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:01:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:01:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:01:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:00:59', tmtdew=13.15, humidity=43.33, cloud=0.0, wind=19.34, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:00:42.509', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:01:19.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:01:19.645 [DEBUG] [Thread-127806] [transport.py] [_log()] starting thread (client mode): 0xa57e36d0
2026-02-11T11:01:19.645 [DEBUG] [Thread-127806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:01:19.660 [DEBUG] [Thread-127806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:01:19.660 [INFO] [Thread-127806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] client lang: <none>
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] server lang: <none>
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] kex follows: False
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] Compression: none
2026-02-11T11:01:19.668 [DEBUG] [Thread-127806] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:01:19.726 [DEBUG] [Thread-127806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:01:19.727 [DEBUG] [Thread-127806] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:01:19.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:01:19.728 [DEBUG] [Thread-127806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:01:19.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:01:19.782 [DEBUG] [Thread-127806] [transport.py] [_log()] userauth is OK
2026-02-11T11:01:19.782 [DEBUG] [Thread-127806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:01:19.783 [DEBUG] [Thread-127806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:01:19.783 [DEBUG] [Thread-127806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:01:19.783 [DEBUG] [Thread-127806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:01:19.801 [INFO] [Thread-127806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:01:19.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:01:19.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:01:20.647 [DEBUG] [Thread-127806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:01:20.648 [DEBUG] [Thread-127806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:01:20.695 [DEBUG] [Thread-127806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:01:20.695 [DEBUG] [Thread-127806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:01:20.705 [DEBUG] [Thread-127806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:01:20.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:01:20.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:01:20.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:01:20.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:01:20.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:01:20.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:01:20.744 [DEBUG] [Thread-127806] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:01:25.871 [DEBUG] [Thread-127808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:01:40.922 [DEBUG] [Thread-127809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:01:50.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:01:50.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:01:50.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:01:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 1, 35), 14.18, 40.34, 0.0, 20.43, 23.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:01:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:01:35
2026-02-11T11:01:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:01:53.413 [DEBUG] [Thread-127810] [transport.py] [_log()] starting thread (client mode): 0xa57c2800
2026-02-11T11:01:53.414 [DEBUG] [Thread-127810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:01:53.433 [DEBUG] [Thread-127810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:01:53.433 [INFO] [Thread-127810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:53.436 [DEBUG] [Thread-127810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] client lang: <none>
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] server lang: <none>
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] kex follows: False
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] Compression: none
2026-02-11T11:01:53.437 [DEBUG] [Thread-127810] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:01:53.454 [DEBUG] [Thread-127810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:01:53.454 [DEBUG] [Thread-127810] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:01:53.455 [DEBUG] [Thread-127810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:01:53.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:01:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:01:53.457 [DEBUG] [Thread-127810] [transport.py] [_log()] userauth is OK
2026-02-11T11:01:53.457 [DEBUG] [Thread-127810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:01:53.457 [DEBUG] [Thread-127810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:01:53.457 [DEBUG] [Thread-127810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:01:53.458 [DEBUG] [Thread-127810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:01:53.482 [INFO] [Thread-127810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:01:53.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:01:54.070 [DEBUG] [Thread-127810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:01:54.070 [DEBUG] [Thread-127810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:01:54.071 [DEBUG] [Thread-127810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:01:54.111 [DEBUG] [Thread-127810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:01:54.112 [DEBUG] [Thread-127810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:01:54.115 [DEBUG] [Thread-127810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:01:54.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:01:54.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:01:54.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:01:54.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:01:54.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:01:54.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:01:54.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:01:54.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:01:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:01:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.375839 -999.00  +22.20  23.58     50  +11.50 1 2 1 1 1   888    0 11.23 13.13 ----- 19.5 23.6 287.8 29.4 27.9 -14.2 27.4 -9.3 26.3 -10.8 27.1 -9.6
2026-02-11T11:01:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:01:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:01:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.375839
2026-02-11T11:01:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:01:54.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:01:54.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:01:54.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:01:54.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:01:54.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:01:35', tmtdew=14.18, humidity=40.34, cloud=0.0, wind=20.43, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:01:12.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:01:54.142 [DEBUG] [Thread-127810] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:01:54.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:01:54.236 [DEBUG] [Thread-127813] [transport.py] [_log()] starting thread (client mode): 0xa575b640
2026-02-11T11:01:54.237 [DEBUG] [Thread-127813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:01:54.251 [DEBUG] [Thread-127813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:01:54.252 [INFO] [Thread-127813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:01:54.259 [DEBUG] [Thread-127813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:01:54.259 [DEBUG] [Thread-127813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:01:54.259 [DEBUG] [Thread-127813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:01:54.259 [DEBUG] [Thread-127813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] client lang: <none>
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] server lang: <none>
2026-02-11T11:01:54.260 [DEBUG] [Thread-127813] [transport.py] [_log()] kex follows: False
2026-02-11T11:01:54.261 [DEBUG] [Thread-127813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:01:54.261 [DEBUG] [Thread-127813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:01:54.261 [DEBUG] [Thread-127813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:01:54.261 [DEBUG] [Thread-127813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:01:54.261 [DEBUG] [Thread-127813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:01:54.261 [DEBUG] [Thread-127813] [transport.py] [_log()] Compression: none
2026-02-11T11:01:54.261 [DEBUG] [Thread-127813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:01:54.317 [DEBUG] [Thread-127813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:01:54.317 [DEBUG] [Thread-127813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:01:54.318 [DEBUG] [Thread-127813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:01:54.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:01:54.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:01:54.377 [DEBUG] [Thread-127813] [transport.py] [_log()] userauth is OK
2026-02-11T11:01:54.378 [DEBUG] [Thread-127813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:01:54.378 [DEBUG] [Thread-127813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:01:54.378 [DEBUG] [Thread-127813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:01:54.378 [DEBUG] [Thread-127813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:01:54.397 [INFO] [Thread-127813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:01:54.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:01:54.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:01:55.227 [DEBUG] [Thread-127813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:01:55.228 [DEBUG] [Thread-127813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:01:55.275 [DEBUG] [Thread-127813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:01:55.276 [DEBUG] [Thread-127813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:01:55.285 [DEBUG] [Thread-127813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:01:55.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:01: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')
2026-02-11T11:01:55.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:01:55.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:01:55.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:01:55.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:01:55.322 [DEBUG] [Thread-127813] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:01:55.563 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:01:55.564 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:01:55.957 [DEBUG] [Thread-127815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:10.143 [DEBUG] [Thread-127816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:11.017 [DEBUG] [Thread-127817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:25.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:02:25.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:02:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:02:26.050 [DEBUG] [Thread-127818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 2, 10), 13.11, 43.57, 0.0, 18.47, 22.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:02:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:02:10
2026-02-11T11:02:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:02:27.706 [DEBUG] [Thread-127819] [transport.py] [_log()] starting thread (client mode): 0xa575b8e0
2026-02-11T11:02:27.706 [DEBUG] [Thread-127819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:02:27.726 [DEBUG] [Thread-127819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:02:27.726 [INFO] [Thread-127819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] client lang: <none>
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] server lang: <none>
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] kex follows: False
2026-02-11T11:02:27.730 [DEBUG] [Thread-127819] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:02:27.731 [DEBUG] [Thread-127819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:02:27.731 [DEBUG] [Thread-127819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:02:27.731 [DEBUG] [Thread-127819] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:02:27.731 [DEBUG] [Thread-127819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:02:27.731 [DEBUG] [Thread-127819] [transport.py] [_log()] Compression: none
2026-02-11T11:02:27.731 [DEBUG] [Thread-127819] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:02:27.750 [DEBUG] [Thread-127819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:02:27.750 [DEBUG] [Thread-127819] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:02:27.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:02:27.751 [DEBUG] [Thread-127819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:02:27.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:02:27.753 [DEBUG] [Thread-127819] [transport.py] [_log()] userauth is OK
2026-02-11T11:02:27.754 [DEBUG] [Thread-127819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:02:27.754 [DEBUG] [Thread-127819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:02:27.754 [DEBUG] [Thread-127819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:02:27.754 [DEBUG] [Thread-127819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:02:27.778 [INFO] [Thread-127819] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:02:27.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:02:28.429 [DEBUG] [Thread-127819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:02:28.429 [DEBUG] [Thread-127819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:02:28.430 [DEBUG] [Thread-127819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:02:28.470 [DEBUG] [Thread-127819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:02:28.470 [DEBUG] [Thread-127819] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:02:28.473 [DEBUG] [Thread-127819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:02:28.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:02:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:02:28.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:02:28.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:02:28.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:02:28.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:02:28.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:02:28.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:02:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:02:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.376533 -999.00  +22.30  22.77     50  +11.50 1 2 1 1 1   888    0 11.20 11.37 ----- 22.4 22.8 271.0 29.5 27.6 -15.9 27.4 -13.1 26.4 -14.0 26.9 -13.7
2026-02-11T11:02:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:02:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:02:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.376533
2026-02-11T11:02:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:02:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:02:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:02:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:02:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:02:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:02:10', tmtdew=13.11, humidity=43.57, cloud=0.0, wind=18.47, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:02:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:02:28.497 [DEBUG] [Thread-127819] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:02:28.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:02:28.591 [DEBUG] [Thread-127822] [transport.py] [_log()] starting thread (client mode): 0xa2d01060
2026-02-11T11:02:28.592 [DEBUG] [Thread-127822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:02:28.607 [DEBUG] [Thread-127822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:02:28.607 [INFO] [Thread-127822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:02:28.615 [DEBUG] [Thread-127822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:02:28.615 [DEBUG] [Thread-127822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:02:28.615 [DEBUG] [Thread-127822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:02:28.615 [DEBUG] [Thread-127822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:02:28.615 [DEBUG] [Thread-127822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:02:28.615 [DEBUG] [Thread-127822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:02:28.615 [DEBUG] [Thread-127822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] client lang: <none>
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] server lang: <none>
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] kex follows: False
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] Compression: none
2026-02-11T11:02:28.616 [DEBUG] [Thread-127822] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:02:28.677 [DEBUG] [Thread-127822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:02:28.678 [DEBUG] [Thread-127822] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:02:28.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:02:28.679 [DEBUG] [Thread-127822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:02:28.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:02:28.738 [DEBUG] [Thread-127822] [transport.py] [_log()] userauth is OK
2026-02-11T11:02:28.738 [DEBUG] [Thread-127822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:02:28.738 [DEBUG] [Thread-127822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:02:28.738 [DEBUG] [Thread-127822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:02:28.738 [DEBUG] [Thread-127822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:02:28.758 [INFO] [Thread-127822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:02:28.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:02:28.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:02:29.623 [DEBUG] [Thread-127822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:02:29.623 [DEBUG] [Thread-127822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:02:29.671 [DEBUG] [Thread-127822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:02:29.672 [DEBUG] [Thread-127822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:02:29.681 [DEBUG] [Thread-127822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:02:29.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:02:29.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:02:29.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:02:29.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:02:29.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:02:29.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:02:29.718 [DEBUG] [Thread-127822] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:02:41.091 [DEBUG] [Thread-127824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:55.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:55.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:56.140 [DEBUG] [Thread-127825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:02:59.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:02:59.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:02:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:03:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 2, 45), 12.89, 43.75, 0.0, 21.33, 22.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:03:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:02:45
2026-02-11T11:03:01.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:03:02.089 [DEBUG] [Thread-127826] [transport.py] [_log()] starting thread (client mode): 0xa5758e80
2026-02-11T11:03:02.090 [DEBUG] [Thread-127826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:03:02.105 [DEBUG] [Thread-127826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:03:02.105 [INFO] [Thread-127826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:03:02.108 [DEBUG] [Thread-127826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:03:02.108 [DEBUG] [Thread-127826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:03:02.108 [DEBUG] [Thread-127826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:03:02.108 [DEBUG] [Thread-127826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:02.108 [DEBUG] [Thread-127826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] client lang: <none>
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] server lang: <none>
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] kex follows: False
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] Compression: none
2026-02-11T11:03:02.109 [DEBUG] [Thread-127826] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:03:02.126 [DEBUG] [Thread-127826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:03:02.127 [DEBUG] [Thread-127826] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:03:02.127 [DEBUG] [Thread-127826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:03:02.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:03:02.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:03:02.128 [DEBUG] [Thread-127826] [transport.py] [_log()] userauth is OK
2026-02-11T11:03:02.128 [DEBUG] [Thread-127826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:03:02.129 [DEBUG] [Thread-127826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:03:02.129 [DEBUG] [Thread-127826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:03:02.129 [DEBUG] [Thread-127826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:03:02.160 [INFO] [Thread-127826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:03:02.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:03:02.738 [DEBUG] [Thread-127826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:03:02.739 [DEBUG] [Thread-127826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:03:02.739 [DEBUG] [Thread-127826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:03:02.779 [DEBUG] [Thread-127826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:03:02.779 [DEBUG] [Thread-127826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:03:02.782 [DEBUG] [Thread-127826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:03:02.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:03:02.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:03:02.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:03:02.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:03:02.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:03:02.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:03:02.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:03:02.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:03:02.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:03:02.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.376881 -999.00  +22.10  14.86     50  +11.30 1 2 1 1 1   888    0 11.26 9.56 ----- 15.0 14.9 272.2 22.6 27.4 -14.8 27.1 -14.2 25.9 -16.3 26.6 -14.5
2026-02-11T11:03:02.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:03:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:03:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.376881
2026-02-11T11:03:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:03:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:03:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:03:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:03:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:03:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:02:45', tmtdew=12.89, humidity=43.75, cloud=0.0, wind=21.33, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:02:42.518', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:03:02.811 [DEBUG] [Thread-127826] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:03:02.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:03:02.909 [DEBUG] [Thread-127829] [transport.py] [_log()] starting thread (client mode): 0xa57b2b00
2026-02-11T11:03:02.909 [DEBUG] [Thread-127829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:03:02.923 [DEBUG] [Thread-127829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:03:02.923 [INFO] [Thread-127829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:03:02.931 [DEBUG] [Thread-127829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:03:02.931 [DEBUG] [Thread-127829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:03:02.931 [DEBUG] [Thread-127829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:03:02.931 [DEBUG] [Thread-127829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] client lang: <none>
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] server lang: <none>
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] kex follows: False
2026-02-11T11:03:02.932 [DEBUG] [Thread-127829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:03:02.933 [DEBUG] [Thread-127829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:03:02.933 [DEBUG] [Thread-127829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:03:02.933 [DEBUG] [Thread-127829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:03:02.933 [DEBUG] [Thread-127829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:03:02.933 [DEBUG] [Thread-127829] [transport.py] [_log()] Compression: none
2026-02-11T11:03:02.933 [DEBUG] [Thread-127829] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:03:02.994 [DEBUG] [Thread-127829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:03:02.995 [DEBUG] [Thread-127829] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:03:02.995 [DEBUG] [Thread-127829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:03:02.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:03:02.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:03:03.051 [DEBUG] [Thread-127829] [transport.py] [_log()] userauth is OK
2026-02-11T11:03:03.051 [DEBUG] [Thread-127829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:03:03.051 [DEBUG] [Thread-127829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:03:03.051 [DEBUG] [Thread-127829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:03:03.051 [DEBUG] [Thread-127829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:03:03.067 [INFO] [Thread-127829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:03:03.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:03:03.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:03:03.957 [DEBUG] [Thread-127829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:03:03.957 [DEBUG] [Thread-127829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:03:04.006 [DEBUG] [Thread-127829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:03:04.006 [DEBUG] [Thread-127829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:03:04.015 [DEBUG] [Thread-127829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:03:04.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:03:04.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:03:04.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:03:04.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:03:04.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:03:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:03:04.053 [DEBUG] [Thread-127829] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:03:10.177 [DEBUG] [Thread-127831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:03:11.181 [DEBUG] [Thread-127832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:03:26.233 [DEBUG] [Thread-127833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:03:34.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:03:34.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:03:34.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:03:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 3, 20), 12.71, 44.28, 0.0, 20.56, 22.3, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:03:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:03:20
2026-02-11T11:03:36.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:03:36.382 [DEBUG] [Thread-127834] [transport.py] [_log()] starting thread (client mode): 0xa2d03430
2026-02-11T11:03:36.383 [DEBUG] [Thread-127834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:03:36.404 [DEBUG] [Thread-127834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:03:36.404 [INFO] [Thread-127834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] client lang: <none>
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] server lang: <none>
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] kex follows: False
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:03:36.407 [DEBUG] [Thread-127834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:03:36.408 [DEBUG] [Thread-127834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:03:36.408 [DEBUG] [Thread-127834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:03:36.408 [DEBUG] [Thread-127834] [transport.py] [_log()] Compression: none
2026-02-11T11:03:36.408 [DEBUG] [Thread-127834] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:03:36.425 [DEBUG] [Thread-127834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:03:36.426 [DEBUG] [Thread-127834] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:03:36.426 [DEBUG] [Thread-127834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:03:36.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:03:36.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:03:36.428 [DEBUG] [Thread-127834] [transport.py] [_log()] userauth is OK
2026-02-11T11:03:36.429 [DEBUG] [Thread-127834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:03:36.429 [DEBUG] [Thread-127834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:03:36.429 [DEBUG] [Thread-127834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:03:36.429 [DEBUG] [Thread-127834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:03:36.450 [INFO] [Thread-127834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:03:36.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:03:37.081 [DEBUG] [Thread-127834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:03:37.081 [DEBUG] [Thread-127834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:03:37.082 [DEBUG] [Thread-127834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:03:37.122 [DEBUG] [Thread-127834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:03:37.122 [DEBUG] [Thread-127834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:03:37.125 [DEBUG] [Thread-127834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:03:37.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:03:37.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:03:37.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:03:37.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:03:37.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:03:37.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:03:37.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:03:37.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.377228 -999.00  +22.10  14.24     50  +11.40 1 2 1 1 1   888    0 11.19 8.42 ----- 15.3 14.2 275.8 17.6 27.3 -14.3 27.0 -14.1 26.0 -14.0 26.6 -14.3
2026-02-11T11:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.377228
2026-02-11T11:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:03:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:03:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:03:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:03:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:03:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:03:20', tmtdew=12.71, humidity=44.28, cloud=0.0, wind=20.56, temperature=22.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:03:12.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:03:37.149 [DEBUG] [Thread-127834] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:03:37.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:03:37.244 [DEBUG] [Thread-127837] [transport.py] [_log()] starting thread (client mode): 0xa57c07f0
2026-02-11T11:03:37.244 [DEBUG] [Thread-127837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:03:37.261 [DEBUG] [Thread-127837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:03:37.261 [INFO] [Thread-127837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] client lang: <none>
2026-02-11T11:03:37.269 [DEBUG] [Thread-127837] [transport.py] [_log()] server lang: <none>
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] kex follows: False
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] Compression: none
2026-02-11T11:03:37.270 [DEBUG] [Thread-127837] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:03:37.326 [DEBUG] [Thread-127837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:03:37.327 [DEBUG] [Thread-127837] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:03:37.327 [DEBUG] [Thread-127837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:03:37.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:03:37.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:03:37.382 [DEBUG] [Thread-127837] [transport.py] [_log()] userauth is OK
2026-02-11T11:03:37.383 [DEBUG] [Thread-127837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:03:37.383 [DEBUG] [Thread-127837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:03:37.383 [DEBUG] [Thread-127837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:03:37.383 [DEBUG] [Thread-127837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:03:37.402 [INFO] [Thread-127837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:03:37.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:03:37.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:03:38.268 [DEBUG] [Thread-127837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:03:38.268 [DEBUG] [Thread-127837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:03:38.316 [DEBUG] [Thread-127837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:03:38.316 [DEBUG] [Thread-127837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:03:38.325 [DEBUG] [Thread-127837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:03:38.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:03:38.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:03:38.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:03:38.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:03:38.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:03:38.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:03:38.363 [DEBUG] [Thread-127837] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:03:41.274 [DEBUG] [Thread-127839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:03:55.850 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:03:55.852 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:03:56.321 [DEBUG] [Thread-127840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:04:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:04:08.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:04:08.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:04:10.210 [DEBUG] [Thread-127841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:04:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 3, 56), 12.52, 44.73, 0.0, 19.07, 22.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:04:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:03:56
2026-02-11T11:04:10.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:04:10.954 [DEBUG] [Thread-127842] [transport.py] [_log()] starting thread (client mode): 0xa57b11b0
2026-02-11T11:04:10.954 [DEBUG] [Thread-127842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:04:10.972 [DEBUG] [Thread-127842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:04:10.973 [INFO] [Thread-127842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] client lang: <none>
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] server lang: <none>
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] kex follows: False
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] Compression: none
2026-02-11T11:04:10.974 [DEBUG] [Thread-127842] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:04:10.982 [DEBUG] [Thread-127842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:04:10.982 [DEBUG] [Thread-127842] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:04:10.983 [DEBUG] [Thread-127842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:04:10.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:04:10.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:04:10.984 [DEBUG] [Thread-127842] [transport.py] [_log()] userauth is OK
2026-02-11T11:04:10.984 [DEBUG] [Thread-127842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:04:10.984 [DEBUG] [Thread-127842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:04:10.984 [DEBUG] [Thread-127842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:04:10.984 [DEBUG] [Thread-127842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:04:11.001 [INFO] [Thread-127842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:04:11.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:04:11.355 [DEBUG] [Thread-127844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:04:11.648 [DEBUG] [Thread-127842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:04:11.649 [DEBUG] [Thread-127842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:04:11.649 [DEBUG] [Thread-127842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:04:11.689 [DEBUG] [Thread-127842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:04:11.690 [DEBUG] [Thread-127842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:04:11.693 [DEBUG] [Thread-127842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:04:11.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:04:11.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:04:11.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:04:11.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:04:11.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:04:11.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:04:11.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:04:11.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.377575 -999.00  +22.00  17.86     50  +11.40 1 2 1 1 1   888    0 11.16 8.16 ----- 14.4 17.9 275.2 22.0 27.0 -15.4 26.9 -13.8 25.9 -15.2 26.4 -14.6
2026-02-11T11:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.377575
2026-02-11T11:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:04:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:04:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:04:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:04:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:04:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:03:56', tmtdew=12.52, humidity=44.73, cloud=0.0, wind=19.07, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:03:42.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:04:11.718 [DEBUG] [Thread-127842] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:04:11.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:04:11.814 [DEBUG] [Thread-127846] [transport.py] [_log()] starting thread (client mode): 0xa2dc40a0
2026-02-11T11:04:11.814 [DEBUG] [Thread-127846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:04:11.829 [DEBUG] [Thread-127846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:04:11.829 [INFO] [Thread-127846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] client lang: <none>
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] server lang: <none>
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] kex follows: False
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:04:11.837 [DEBUG] [Thread-127846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:04:11.838 [DEBUG] [Thread-127846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:04:11.838 [DEBUG] [Thread-127846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:04:11.838 [DEBUG] [Thread-127846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:04:11.838 [DEBUG] [Thread-127846] [transport.py] [_log()] Compression: none
2026-02-11T11:04:11.838 [DEBUG] [Thread-127846] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:04:11.896 [DEBUG] [Thread-127846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:04:11.896 [DEBUG] [Thread-127846] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:04:11.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:04:11.897 [DEBUG] [Thread-127846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:04:11.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:04:11.953 [DEBUG] [Thread-127846] [transport.py] [_log()] userauth is OK
2026-02-11T11:04:11.954 [DEBUG] [Thread-127846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:04:11.954 [DEBUG] [Thread-127846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:04:11.954 [DEBUG] [Thread-127846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:04:11.954 [DEBUG] [Thread-127846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:04:11.975 [INFO] [Thread-127846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:04:11.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:04:11.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:04:12.843 [DEBUG] [Thread-127846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:04:12.843 [DEBUG] [Thread-127846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:04:12.891 [DEBUG] [Thread-127846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:04:12.891 [DEBUG] [Thread-127846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:04:12.900 [DEBUG] [Thread-127846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:04:12.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:04:12.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:04:12.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:04:12.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:04:12.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:04:12.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:04:12.934 [DEBUG] [Thread-127846] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:04:26.390 [DEBUG] [Thread-127848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:04:41.439 [DEBUG] [Thread-127849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:04:42.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:04:42.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:04:42.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:04:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 4, 31), 12.57, 44.61, 0.0, 18.72, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:04:44.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:04:31
2026-02-11T11:04:45.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:04:45.315 [DEBUG] [Thread-127850] [transport.py] [_log()] starting thread (client mode): 0xa2dc5930
2026-02-11T11:04:45.315 [DEBUG] [Thread-127850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:04:45.335 [DEBUG] [Thread-127850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:04:45.335 [INFO] [Thread-127850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:04:45.338 [DEBUG] [Thread-127850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:04:45.338 [DEBUG] [Thread-127850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:04:45.338 [DEBUG] [Thread-127850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] client lang: <none>
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] server lang: <none>
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] kex follows: False
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] Compression: none
2026-02-11T11:04:45.339 [DEBUG] [Thread-127850] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:04:45.359 [DEBUG] [Thread-127850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:04:45.359 [DEBUG] [Thread-127850] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:04:45.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:04:45.361 [DEBUG] [Thread-127850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:04:45.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:04:45.400 [DEBUG] [Thread-127850] [transport.py] [_log()] userauth is OK
2026-02-11T11:04:45.401 [DEBUG] [Thread-127850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:04:45.401 [DEBUG] [Thread-127850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:04:45.401 [DEBUG] [Thread-127850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:04:45.401 [DEBUG] [Thread-127850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:04:45.422 [INFO] [Thread-127850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:04:45.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:04:46.039 [DEBUG] [Thread-127850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:04:46.039 [DEBUG] [Thread-127850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:04:46.039 [DEBUG] [Thread-127850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:04:46.080 [DEBUG] [Thread-127850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:04:46.081 [DEBUG] [Thread-127850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:04:46.084 [DEBUG] [Thread-127850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:04:46.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:04:46.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:04:46.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:04:46.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:04:46.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:04:46.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:04:46.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:04:46.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:04:46.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:04:46.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.377922 -999.00  +21.80  16.75     51  +11.40 1 2 1 1 1   888    0 11.03 6.81 ----- 16.1 16.8 277.4 27.9 26.8 -15.5 26.7 -13.7 25.7 -14.9 26.3 -15.7
2026-02-11T11:04:46.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:04:46.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:04:46.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.377922
2026-02-11T11:04:46.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:04:46.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:04:46.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:04:46.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:04:46.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:04:46.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:04:31', tmtdew=12.57, humidity=44.61, cloud=0.0, wind=18.72, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:04:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:04:46.112 [DEBUG] [Thread-127850] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:04:46.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:04:46.204 [DEBUG] [Thread-127853] [transport.py] [_log()] starting thread (client mode): 0xa57e15a0
2026-02-11T11:04:46.204 [DEBUG] [Thread-127853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:04:46.219 [DEBUG] [Thread-127853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:04:46.219 [INFO] [Thread-127853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:04:46.227 [DEBUG] [Thread-127853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:04:46.227 [DEBUG] [Thread-127853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:04:46.227 [DEBUG] [Thread-127853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:04:46.227 [DEBUG] [Thread-127853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:46.227 [DEBUG] [Thread-127853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:04:46.227 [DEBUG] [Thread-127853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] client lang: <none>
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] server lang: <none>
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] kex follows: False
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:04:46.228 [DEBUG] [Thread-127853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:04:46.229 [DEBUG] [Thread-127853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:04:46.229 [DEBUG] [Thread-127853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:04:46.229 [DEBUG] [Thread-127853] [transport.py] [_log()] Compression: none
2026-02-11T11:04:46.229 [DEBUG] [Thread-127853] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:04:46.284 [DEBUG] [Thread-127853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:04:46.285 [DEBUG] [Thread-127853] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:04:46.286 [DEBUG] [Thread-127853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:04:46.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:04:46.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:04:46.340 [DEBUG] [Thread-127853] [transport.py] [_log()] userauth is OK
2026-02-11T11:04:46.340 [DEBUG] [Thread-127853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:04:46.340 [DEBUG] [Thread-127853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:04:46.341 [DEBUG] [Thread-127853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:04:46.341 [DEBUG] [Thread-127853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:04:46.359 [INFO] [Thread-127853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:04:46.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:04:46.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:04:47.218 [DEBUG] [Thread-127853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:04:47.218 [DEBUG] [Thread-127853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:04:47.266 [DEBUG] [Thread-127853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:04:47.266 [DEBUG] [Thread-127853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:04:47.275 [DEBUG] [Thread-127853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:04:47.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:04:47.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:04:47.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:04:47.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:04:47.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:04:47.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:04:47.310 [DEBUG] [Thread-127853] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:04:55.992 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:04:55.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:04:56.477 [DEBUG] [Thread-127855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:05:10.255 [DEBUG] [Thread-127856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:05:11.528 [DEBUG] [Thread-127857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:05:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:05:17.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:05:17.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
2026-02-11T11:05:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 5, 6), 12.55, 44.66, 0.0, 21.47, 22.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:05:19.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:05:06
2026-02-11T11:05:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:05:19.694 [DEBUG] [Thread-127858] [transport.py] [_log()] starting thread (client mode): 0xa2d79ff0
2026-02-11T11:05:19.694 [DEBUG] [Thread-127858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:05:19.715 [DEBUG] [Thread-127858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:05:19.715 [INFO] [Thread-127858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:05:19.718 [DEBUG] [Thread-127858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] client lang: <none>
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] server lang: <none>
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] kex follows: False
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:05:19.719 [DEBUG] [Thread-127858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:05:19.720 [DEBUG] [Thread-127858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:05:19.720 [DEBUG] [Thread-127858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:05:19.720 [DEBUG] [Thread-127858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:05:19.720 [DEBUG] [Thread-127858] [transport.py] [_log()] Compression: none
2026-02-11T11:05:19.720 [DEBUG] [Thread-127858] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:05:19.736 [DEBUG] [Thread-127858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:05:19.737 [DEBUG] [Thread-127858] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:05:19.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:05:19.738 [DEBUG] [Thread-127858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:05:19.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:05:19.740 [DEBUG] [Thread-127858] [transport.py] [_log()] userauth is OK
2026-02-11T11:05:19.740 [DEBUG] [Thread-127858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:05:19.740 [DEBUG] [Thread-127858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:05:19.740 [DEBUG] [Thread-127858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:05:19.740 [DEBUG] [Thread-127858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:05:19.756 [INFO] [Thread-127858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:05:19.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:05:20.402 [DEBUG] [Thread-127858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:05:20.403 [DEBUG] [Thread-127858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:05:20.403 [DEBUG] [Thread-127858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:05:20.444 [DEBUG] [Thread-127858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:05:20.444 [DEBUG] [Thread-127858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:05:20.445 [DEBUG] [Thread-127858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:05:20.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:05:20.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:05:20.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:05:20.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:05:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:05:20.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:05:20.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:05:20.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:05:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:05:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.378270 -999.00  +21.80  16.46     51  +11.40 1 2 1 1 1   888    0 11.18 5.17 ----- 16.0 16.5 279.5 21.9 27.1 -10.9 26.6 -13.9 25.5 -15.0 26.1 -14.5
2026-02-11T11:05:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:05:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:05:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.378270
2026-02-11T11:05:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:05:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:05:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:05:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:05:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:05:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:05:06', tmtdew=12.55, humidity=44.66, cloud=0.0, wind=21.47, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:04:42.528', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:05:20.465 [DEBUG] [Thread-127858] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:05:20.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:05:20.547 [DEBUG] [Thread-127861] [transport.py] [_log()] starting thread (client mode): 0xa2d79b10
2026-02-11T11:05:20.547 [DEBUG] [Thread-127861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:05:20.564 [DEBUG] [Thread-127861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:05:20.564 [INFO] [Thread-127861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:05:20.571 [DEBUG] [Thread-127861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:05:20.571 [DEBUG] [Thread-127861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:05:20.571 [DEBUG] [Thread-127861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:05:20.571 [DEBUG] [Thread-127861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:05:20.571 [DEBUG] [Thread-127861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:05:20.571 [DEBUG] [Thread-127861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:05:20.571 [DEBUG] [Thread-127861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] client lang: <none>
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] server lang: <none>
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] kex follows: False
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] Compression: none
2026-02-11T11:05:20.572 [DEBUG] [Thread-127861] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:05:20.631 [DEBUG] [Thread-127861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:05:20.632 [DEBUG] [Thread-127861] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:05:20.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:05:20.633 [DEBUG] [Thread-127861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:05:20.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:05:20.687 [DEBUG] [Thread-127861] [transport.py] [_log()] userauth is OK
2026-02-11T11:05:20.688 [DEBUG] [Thread-127861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:05:20.688 [DEBUG] [Thread-127861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:05:20.688 [DEBUG] [Thread-127861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:05:20.688 [DEBUG] [Thread-127861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:05:20.708 [INFO] [Thread-127861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:05:20.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:05:20.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:05:21.546 [DEBUG] [Thread-127861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:05:21.547 [DEBUG] [Thread-127861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:05:21.594 [DEBUG] [Thread-127861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:05:21.595 [DEBUG] [Thread-127861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:05:21.604 [DEBUG] [Thread-127861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:05:21.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:05:21.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:05:21.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:05:21.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:05:21.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:05:21.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:05:21.642 [DEBUG] [Thread-127861] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:05:26.565 [DEBUG] [Thread-127863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:05:41.609 [DEBUG] [Thread-127864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:05:51.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:05:51.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:05:51.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:05:53.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 5, 41), 13.68, 41.86, 0.0, 29.29, 23.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:05:53.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:05:41
2026-02-11T11:05:54.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:05:54.363 [DEBUG] [Thread-127865] [transport.py] [_log()] starting thread (client mode): 0xa2d782b0
2026-02-11T11:05:54.363 [DEBUG] [Thread-127865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:05:54.383 [DEBUG] [Thread-127865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:05:54.384 [INFO] [Thread-127865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] client lang: <none>
2026-02-11T11:05:54.385 [DEBUG] [Thread-127865] [transport.py] [_log()] server lang: <none>
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] kex follows: False
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] Compression: none
2026-02-11T11:05:54.386 [DEBUG] [Thread-127865] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:05:54.394 [DEBUG] [Thread-127865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:05:54.395 [DEBUG] [Thread-127865] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:05:54.395 [DEBUG] [Thread-127865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:05:54.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:05:54.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:05:54.396 [DEBUG] [Thread-127865] [transport.py] [_log()] userauth is OK
2026-02-11T11:05:54.396 [DEBUG] [Thread-127865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:05:54.396 [DEBUG] [Thread-127865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:05:54.396 [DEBUG] [Thread-127865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:05:54.396 [DEBUG] [Thread-127865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:05:54.409 [INFO] [Thread-127865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:05:54.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:05:54.975 [DEBUG] [Thread-127865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:05:54.975 [DEBUG] [Thread-127865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:05:54.975 [DEBUG] [Thread-127865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:05:55.015 [DEBUG] [Thread-127865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:05:55.016 [DEBUG] [Thread-127865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:05:55.019 [DEBUG] [Thread-127865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:05:55.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:05:55.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:05:55.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:05:55.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:05:55.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:05:55.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:05:55.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:05:55.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:05:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:05:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.378617 -999.00  +22.10  25.28     51  +11.50 1 3 1 1 1   888    0 11.00 3.05 ----- 28.5 25.3 296.6 32.6 27.6 -12.3 26.9 -8.3 26.0 -9.7 26.6 -9.8
2026-02-11T11:05:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:05:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:05:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.378617
2026-02-11T11:05:55.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:05:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:05:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:05:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:05:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T11:05:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:05:41', tmtdew=13.68, humidity=41.86, cloud=0.0, wind=29.29, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:05:12.509', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:05:55.043 [DEBUG] [Thread-127865] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:05:55.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:05:56.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:05:56.135 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:05:56.645 [DEBUG] [Thread-127868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:06:10.313 [DEBUG] [Thread-127869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:06:11.696 [DEBUG] [Thread-127870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:06:26.733 [DEBUG] [Thread-127871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:06:41.769 [DEBUG] [Thread-127872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:06:56.276 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:06:56.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:06:56.806 [DEBUG] [Thread-127873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:07:10.349 [DEBUG] [Thread-127874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:07:11.844 [DEBUG] [Thread-127875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:07:26.880 [DEBUG] [Thread-127876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:07:41.918 [DEBUG] [Thread-127877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:07:56.418 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:07:56.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:07:56.954 [DEBUG] [Thread-127878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:08:07.864 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T11:08:10.391 [DEBUG] [Thread-127879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:08:11.991 [DEBUG] [Thread-127880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:08:27.027 [DEBUG] [Thread-127881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:08:37.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:08:37.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:08:37.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:08:39.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 8, 3), 12.74, 44.41, 0.0, 17.49, 22.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:08:39.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:08:03
2026-02-11T11:08:40.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:08:40.318 [DEBUG] [Thread-127882] [transport.py] [_log()] starting thread (client mode): 0xa2d90d30
2026-02-11T11:08:40.318 [DEBUG] [Thread-127882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:08:40.338 [DEBUG] [Thread-127882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:08:40.338 [INFO] [Thread-127882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:08:40.341 [DEBUG] [Thread-127882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:08:40.341 [DEBUG] [Thread-127882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:08:40.341 [DEBUG] [Thread-127882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:08:40.341 [DEBUG] [Thread-127882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:08:40.341 [DEBUG] [Thread-127882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] client lang: <none>
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] server lang: <none>
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] kex follows: False
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] Compression: none
2026-02-11T11:08:40.342 [DEBUG] [Thread-127882] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:08:40.359 [DEBUG] [Thread-127882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:08:40.359 [DEBUG] [Thread-127882] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:08:40.360 [DEBUG] [Thread-127882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:08:40.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:08:40.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:08:40.362 [DEBUG] [Thread-127882] [transport.py] [_log()] userauth is OK
2026-02-11T11:08:40.362 [DEBUG] [Thread-127882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:08:40.362 [DEBUG] [Thread-127882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:08:40.362 [DEBUG] [Thread-127882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:08:40.362 [DEBUG] [Thread-127882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:08:40.386 [INFO] [Thread-127882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:08:40.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:08:41.047 [DEBUG] [Thread-127882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:08:41.048 [DEBUG] [Thread-127882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:08:41.048 [DEBUG] [Thread-127882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:08:41.088 [DEBUG] [Thread-127882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:08:41.088 [DEBUG] [Thread-127882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:08:41.091 [DEBUG] [Thread-127882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:08:41.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:08:41.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:08:41.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:08:41.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:08:41.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:08:41.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:08:41.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:08:41.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:08:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:08:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.380700 -999.00  +21.90  18.89     50  +11.20 1 2 1 1 1   888    0 10.42 -12.49 ----- 16.6 18.9 312.0 22.1 26.5 -17.2 26.2 -16.7 25.4 -18.5 25.8 -18.3
2026-02-11T11:08:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:08:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:08:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.380700
2026-02-11T11:08:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:08:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:08:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:08:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:08:41.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:08:41.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:08:03', tmtdew=12.74, humidity=44.41, cloud=0.0, wind=17.49, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:08:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:08:41.117 [DEBUG] [Thread-127882] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:08:41.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:08:41.214 [DEBUG] [Thread-127885] [transport.py] [_log()] starting thread (client mode): 0xa57c2f50
2026-02-11T11:08:41.214 [DEBUG] [Thread-127885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:08:41.229 [DEBUG] [Thread-127885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:08:41.229 [INFO] [Thread-127885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:08:41.236 [DEBUG] [Thread-127885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:08:41.236 [DEBUG] [Thread-127885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] client lang: <none>
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] server lang: <none>
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] kex follows: False
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] Compression: none
2026-02-11T11:08:41.237 [DEBUG] [Thread-127885] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:08:41.293 [DEBUG] [Thread-127885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:08:41.294 [DEBUG] [Thread-127885] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:08:41.294 [DEBUG] [Thread-127885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:08:41.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:08:41.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:08:41.350 [DEBUG] [Thread-127885] [transport.py] [_log()] userauth is OK
2026-02-11T11:08:41.350 [DEBUG] [Thread-127885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:08:41.351 [DEBUG] [Thread-127885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:08:41.351 [DEBUG] [Thread-127885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:08:41.351 [DEBUG] [Thread-127885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:08:41.369 [INFO] [Thread-127885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:08:41.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:08:41.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:08:42.065 [DEBUG] [Thread-127887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:08:42.181 [DEBUG] [Thread-127885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:08:42.181 [DEBUG] [Thread-127885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:08:42.229 [DEBUG] [Thread-127885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:08:42.229 [DEBUG] [Thread-127885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:08:42.238 [DEBUG] [Thread-127885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:08:42.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:08:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:08:42.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:08:42.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:08:42.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:08:42.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:08:42.272 [DEBUG] [Thread-127885] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:08:56.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:08:56.560 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:08:57.120 [DEBUG] [Thread-127888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:09:10.427 [DEBUG] [Thread-127889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:09:12.160 [DEBUG] [Thread-127890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:09:12.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:09:12.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:09:12.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:09:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 8, 38), 13.45, 42.36, 0.0, 23.08, 22.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:09:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:08:38
2026-02-11T11:09:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:09:14.625 [DEBUG] [Thread-127891] [transport.py] [_log()] starting thread (client mode): 0xa2d01630
2026-02-11T11:09:14.625 [DEBUG] [Thread-127891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:09:14.647 [DEBUG] [Thread-127891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:09:14.647 [INFO] [Thread-127891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:09:14.648 [DEBUG] [Thread-127891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:09:14.657 [DEBUG] [Thread-127891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] client lang: <none>
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] server lang: <none>
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] kex follows: False
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:09:14.658 [DEBUG] [Thread-127891] [transport.py] [_log()] Compression: none
2026-02-11T11:09:14.659 [DEBUG] [Thread-127891] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:09:14.679 [DEBUG] [Thread-127891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:09:14.679 [DEBUG] [Thread-127891] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:09:14.680 [DEBUG] [Thread-127891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:09:14.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:09:14.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:09:14.682 [DEBUG] [Thread-127891] [transport.py] [_log()] userauth is OK
2026-02-11T11:09:14.682 [DEBUG] [Thread-127891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:09:14.682 [DEBUG] [Thread-127891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:09:14.683 [DEBUG] [Thread-127891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:09:14.683 [DEBUG] [Thread-127891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:09:14.708 [INFO] [Thread-127891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:09:14.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:09:15.297 [DEBUG] [Thread-127891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:09:15.297 [DEBUG] [Thread-127891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:09:15.297 [DEBUG] [Thread-127891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:09:15.337 [DEBUG] [Thread-127891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:09:15.337 [DEBUG] [Thread-127891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:09:15.341 [DEBUG] [Thread-127891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:09:15.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:09:15.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:09:15.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:09:15.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:09:15.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:09:15.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:09:15.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:09:15.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:09:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:09:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.381047 -999.00  +21.70  13.52     50  +11.00 1 2 1 1 1   888    0 10.45 -14.59 ----- 11.3 13.5 304.2 20.9 26.4 -17.3 26.2 -16.7 25.4 -17.1 25.8 -18.2
2026-02-11T11:09:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:09:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:09:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.381047
2026-02-11T11:09:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:09:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:09:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:09:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:09:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:09:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:08:38', tmtdew=13.45, humidity=42.36, cloud=0.0, wind=23.08, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:08:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:09:15.368 [DEBUG] [Thread-127891] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:09:15.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:09:15.463 [DEBUG] [Thread-127894] [transport.py] [_log()] starting thread (client mode): 0xa2df8880
2026-02-11T11:09:15.463 [DEBUG] [Thread-127894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:09:15.482 [DEBUG] [Thread-127894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:09:15.482 [INFO] [Thread-127894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:09:15.490 [DEBUG] [Thread-127894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:09:15.490 [DEBUG] [Thread-127894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:09:15.490 [DEBUG] [Thread-127894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:09:15.490 [DEBUG] [Thread-127894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:15.490 [DEBUG] [Thread-127894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:15.490 [DEBUG] [Thread-127894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] client lang: <none>
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] server lang: <none>
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] kex follows: False
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] Compression: none
2026-02-11T11:09:15.491 [DEBUG] [Thread-127894] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:09:15.550 [DEBUG] [Thread-127894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:09:15.550 [DEBUG] [Thread-127894] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:09:15.551 [DEBUG] [Thread-127894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:09:15.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:09:15.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:09:15.606 [DEBUG] [Thread-127894] [transport.py] [_log()] userauth is OK
2026-02-11T11:09:15.607 [DEBUG] [Thread-127894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:09:15.607 [DEBUG] [Thread-127894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:09:15.607 [DEBUG] [Thread-127894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:09:15.607 [DEBUG] [Thread-127894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:09:15.626 [INFO] [Thread-127894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:09:15.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:09:15.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:09:16.656 [DEBUG] [Thread-127894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:09:16.657 [DEBUG] [Thread-127894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:09:16.705 [DEBUG] [Thread-127894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:09:16.705 [DEBUG] [Thread-127894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:09:16.714 [DEBUG] [Thread-127894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:09:16.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:09:16.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:09:16.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:09:16.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:09:16.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:09:16.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:09:16.751 [DEBUG] [Thread-127894] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:09:27.206 [DEBUG] [Thread-127896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:09:42.256 [DEBUG] [Thread-127897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:09:46.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:09:46.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:09:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:09:48.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 9, 13), 12.52, 44.59, 0.0, 20.11, 22.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:09:48.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:09:13
2026-02-11T11:09:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:09:49.437 [DEBUG] [Thread-127898] [transport.py] [_log()] starting thread (client mode): 0xa57e3f10
2026-02-11T11:09:49.438 [DEBUG] [Thread-127898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:09:49.459 [DEBUG] [Thread-127898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:09:49.459 [INFO] [Thread-127898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] client lang: <none>
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] server lang: <none>
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] kex follows: False
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:09:49.462 [DEBUG] [Thread-127898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:09:49.463 [DEBUG] [Thread-127898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:09:49.463 [DEBUG] [Thread-127898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:09:49.463 [DEBUG] [Thread-127898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:09:49.463 [DEBUG] [Thread-127898] [transport.py] [_log()] Compression: none
2026-02-11T11:09:49.463 [DEBUG] [Thread-127898] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:09:49.479 [DEBUG] [Thread-127898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:09:49.480 [DEBUG] [Thread-127898] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:09:49.481 [DEBUG] [Thread-127898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:09:49.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:09:49.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:09:49.483 [DEBUG] [Thread-127898] [transport.py] [_log()] userauth is OK
2026-02-11T11:09:49.483 [DEBUG] [Thread-127898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:09:49.483 [DEBUG] [Thread-127898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:09:49.483 [DEBUG] [Thread-127898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:09:49.483 [DEBUG] [Thread-127898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:09:49.508 [INFO] [Thread-127898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:09:49.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:09:50.144 [DEBUG] [Thread-127898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:09:50.144 [DEBUG] [Thread-127898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:09:50.153 [DEBUG] [Thread-127898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:09:50.185 [DEBUG] [Thread-127898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:09:50.186 [DEBUG] [Thread-127898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:09:50.189 [DEBUG] [Thread-127898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:09:50.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:09:50.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:09:50.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:09:50.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:09:50.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:09:50.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:09:50.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:09:50.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:09:50.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:09:50.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.381394 -999.00  +21.80  15.36     51  +11.30 1 2 1 1 1   888    0 10.47 -18.43 ----- 15.4 15.4 305.6 17.7 26.4 -17.6 26.2 -15.9 25.4 -16.5 25.8 -17.5
2026-02-11T11:09:50.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:09:50.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:09:50.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.381394
2026-02-11T11:09:50.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:09:50.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:09:50.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:09:50.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:09:50.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:09:50.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:09:13', tmtdew=12.52, humidity=44.59, cloud=0.0, wind=20.11, temperature=22.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:09:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:09:50.215 [DEBUG] [Thread-127898] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:09:50.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:09:50.310 [DEBUG] [Thread-127901] [transport.py] [_log()] starting thread (client mode): 0xa2d90640
2026-02-11T11:09:50.311 [DEBUG] [Thread-127901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:09:50.325 [DEBUG] [Thread-127901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:09:50.326 [INFO] [Thread-127901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:09:50.333 [DEBUG] [Thread-127901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:09:50.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:09:50.335 [DEBUG] [Thread-127901] [transport.py] [_log()] client lang: <none>
2026-02-11T11:09:50.335 [DEBUG] [Thread-127901] [transport.py] [_log()] server lang: <none>
2026-02-11T11:09:50.335 [DEBUG] [Thread-127901] [transport.py] [_log()] kex follows: False
2026-02-11T11:09:50.335 [DEBUG] [Thread-127901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:09:50.335 [DEBUG] [Thread-127901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:09:50.336 [DEBUG] [Thread-127901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:09:50.336 [DEBUG] [Thread-127901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:09:50.336 [DEBUG] [Thread-127901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:09:50.336 [DEBUG] [Thread-127901] [transport.py] [_log()] Compression: none
2026-02-11T11:09:50.336 [DEBUG] [Thread-127901] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:09:50.397 [DEBUG] [Thread-127901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:09:50.398 [DEBUG] [Thread-127901] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:09:50.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:09:50.399 [DEBUG] [Thread-127901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:09:50.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:09:50.453 [DEBUG] [Thread-127901] [transport.py] [_log()] userauth is OK
2026-02-11T11:09:50.454 [DEBUG] [Thread-127901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:09:50.454 [DEBUG] [Thread-127901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:09:50.454 [DEBUG] [Thread-127901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:09:50.454 [DEBUG] [Thread-127901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:09:50.473 [INFO] [Thread-127901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:09:50.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:09:50.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:09:51.384 [DEBUG] [Thread-127901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:09:51.385 [DEBUG] [Thread-127901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:09:51.432 [DEBUG] [Thread-127901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:09:51.433 [DEBUG] [Thread-127901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:09:51.442 [DEBUG] [Thread-127901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:09:51.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:09:51.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:09:51.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:09:51.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:09:51.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:09:51.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:09:51.479 [DEBUG] [Thread-127901] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:09:56.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:09:56.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:09:57.297 [DEBUG] [Thread-127903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:10.459 [DEBUG] [Thread-127904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:12.350 [DEBUG] [Thread-127905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:10:21.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:10:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:10:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 9, 48), 12.23, 45.79, 0.0, 17.59, 21.83, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:10:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:09:48
2026-02-11T11:10:23.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:10:23.996 [DEBUG] [Thread-127906] [transport.py] [_log()] starting thread (client mode): 0xa2df8c70
2026-02-11T11:10:23.996 [DEBUG] [Thread-127906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:10:24.015 [DEBUG] [Thread-127906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:10:24.015 [INFO] [Thread-127906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:10:24.018 [DEBUG] [Thread-127906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] client lang: <none>
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] server lang: <none>
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] kex follows: False
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] Compression: none
2026-02-11T11:10:24.019 [DEBUG] [Thread-127906] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:10:24.036 [DEBUG] [Thread-127906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:10:24.037 [DEBUG] [Thread-127906] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:10:24.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:10:24.038 [DEBUG] [Thread-127906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:10:24.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:10:24.040 [DEBUG] [Thread-127906] [transport.py] [_log()] userauth is OK
2026-02-11T11:10:24.040 [DEBUG] [Thread-127906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:10:24.041 [DEBUG] [Thread-127906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:10:24.041 [DEBUG] [Thread-127906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:10:24.041 [DEBUG] [Thread-127906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:10:24.077 [INFO] [Thread-127906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:10:24.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:10:24.722 [DEBUG] [Thread-127906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:10:24.722 [DEBUG] [Thread-127906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:10:24.723 [DEBUG] [Thread-127906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:10:24.763 [DEBUG] [Thread-127906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:10:24.764 [DEBUG] [Thread-127906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:10:24.767 [DEBUG] [Thread-127906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:10:24.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:10:24.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:10:24.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:10:24.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:10:24.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:10:24.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:10:24.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:10:24.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:10:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:10:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.382089 -999.00  +21.70  14.44     51  +11.20 1 2 1 1 1   888    0 10.42 -21.52 ----- 15.8 14.4 292.6 16.9 26.4 -18.5 26.1 -16.5 25.4 -18.1 25.7 -18.0
2026-02-11T11:10:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:10:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:10:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.382089
2026-02-11T11:10:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:10:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:10:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:10:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:10:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:10:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:09:48', tmtdew=12.23, humidity=45.79, cloud=0.0, wind=17.59, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:10:12.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:10:24.794 [DEBUG] [Thread-127906] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:10:24.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:10:24.904 [DEBUG] [Thread-127909] [transport.py] [_log()] starting thread (client mode): 0xa2dc40a0
2026-02-11T11:10:24.904 [DEBUG] [Thread-127909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:10:24.919 [DEBUG] [Thread-127909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:10:24.919 [INFO] [Thread-127909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:10:24.927 [DEBUG] [Thread-127909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:10:24.927 [DEBUG] [Thread-127909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:10:24.927 [DEBUG] [Thread-127909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:10:24.927 [DEBUG] [Thread-127909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:24.927 [DEBUG] [Thread-127909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:24.927 [DEBUG] [Thread-127909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] client lang: <none>
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] server lang: <none>
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] kex follows: False
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:10:24.928 [DEBUG] [Thread-127909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:10:24.929 [DEBUG] [Thread-127909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:10:24.929 [DEBUG] [Thread-127909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:10:24.929 [DEBUG] [Thread-127909] [transport.py] [_log()] Compression: none
2026-02-11T11:10:24.929 [DEBUG] [Thread-127909] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:10:24.990 [DEBUG] [Thread-127909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:10:24.991 [DEBUG] [Thread-127909] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:10:24.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:10:24.992 [DEBUG] [Thread-127909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:10:24.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:10:25.049 [DEBUG] [Thread-127909] [transport.py] [_log()] userauth is OK
2026-02-11T11:10:25.050 [DEBUG] [Thread-127909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:10:25.050 [DEBUG] [Thread-127909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:10:25.050 [DEBUG] [Thread-127909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:10:25.050 [DEBUG] [Thread-127909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:10:25.069 [INFO] [Thread-127909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:10:25.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:10:25.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:10:25.929 [DEBUG] [Thread-127909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:10:25.929 [DEBUG] [Thread-127909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:10:25.977 [DEBUG] [Thread-127909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:10:25.977 [DEBUG] [Thread-127909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:10:25.986 [DEBUG] [Thread-127909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:10:25.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:10:25.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')
2026-02-11T11:10:26.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
2026-02-11T11:10:26.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:10:26.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:10:26.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:10:26.023 [DEBUG] [Thread-127909] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:10:27.387 [DEBUG] [Thread-127911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:42.442 [DEBUG] [Thread-127912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:56.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:10:56.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:10:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:10:56.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:56.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:57.475 [DEBUG] [Thread-127913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:10:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 10, 24), 12.39, 45.34, 0.0, 16.99, 21.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:10:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:10:24
2026-02-11T11:10:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:10:58.429 [DEBUG] [Thread-127914] [transport.py] [_log()] starting thread (client mode): 0xa2dc5ae0
2026-02-11T11:10:58.429 [DEBUG] [Thread-127914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:10:58.448 [DEBUG] [Thread-127914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:10:58.448 [INFO] [Thread-127914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] client lang: <none>
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] server lang: <none>
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] kex follows: False
2026-02-11T11:10:58.450 [DEBUG] [Thread-127914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:10:58.451 [DEBUG] [Thread-127914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:10:58.451 [DEBUG] [Thread-127914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:10:58.451 [DEBUG] [Thread-127914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:10:58.451 [DEBUG] [Thread-127914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:10:58.451 [DEBUG] [Thread-127914] [transport.py] [_log()] Compression: none
2026-02-11T11:10:58.451 [DEBUG] [Thread-127914] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:10:58.459 [DEBUG] [Thread-127914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:10:58.459 [DEBUG] [Thread-127914] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:10:58.459 [DEBUG] [Thread-127914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:10:58.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:10:58.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:10:58.461 [DEBUG] [Thread-127914] [transport.py] [_log()] userauth is OK
2026-02-11T11:10:58.461 [DEBUG] [Thread-127914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:10:58.461 [DEBUG] [Thread-127914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:10:58.461 [DEBUG] [Thread-127914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:10:58.461 [DEBUG] [Thread-127914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:10:58.496 [INFO] [Thread-127914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:10:58.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:10:59.112 [DEBUG] [Thread-127914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:10:59.112 [DEBUG] [Thread-127914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:10:59.113 [DEBUG] [Thread-127914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:10:59.153 [DEBUG] [Thread-127914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:10:59.154 [DEBUG] [Thread-127914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:10:59.157 [DEBUG] [Thread-127914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:10:59.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:10:59.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:10:59.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:10:59.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:10:59.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:10:59.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:10:59.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:10:59.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:10:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:10:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.382436 -999.00  +21.60  11.09     51  +11.30 1 2 1 1 1   888    0 10.20 -22.48 ----- 8.5 11.1 301.4 15.9 26.3 -17.4 26.1 -16.3 25.3 -16.5 25.7 -17.8
2026-02-11T11:10:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:10:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:10:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.382436
2026-02-11T11:10:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:10:59.182 [DEBUG] [Thread-127914] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:10:59.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:10:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:10:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:10:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:10:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:10:24', tmtdew=12.39, humidity=45.34, cloud=0.0, wind=16.99, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:10:42.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:10:59.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:10:59.278 [DEBUG] [Thread-127917] [transport.py] [_log()] starting thread (client mode): 0xa2d91240
2026-02-11T11:10:59.278 [DEBUG] [Thread-127917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:10:59.296 [DEBUG] [Thread-127917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:10:59.296 [INFO] [Thread-127917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:10:59.303 [DEBUG] [Thread-127917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] client lang: <none>
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] server lang: <none>
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] kex follows: False
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:10:59.304 [DEBUG] [Thread-127917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:10:59.305 [DEBUG] [Thread-127917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:10:59.305 [DEBUG] [Thread-127917] [transport.py] [_log()] Compression: none
2026-02-11T11:10:59.305 [DEBUG] [Thread-127917] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:10:59.361 [DEBUG] [Thread-127917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:10:59.362 [DEBUG] [Thread-127917] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:10:59.362 [DEBUG] [Thread-127917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:10:59.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:10:59.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:10:59.420 [DEBUG] [Thread-127917] [transport.py] [_log()] userauth is OK
2026-02-11T11:10:59.420 [DEBUG] [Thread-127917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:10:59.420 [DEBUG] [Thread-127917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:10:59.420 [DEBUG] [Thread-127917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:10:59.420 [DEBUG] [Thread-127917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:10:59.441 [INFO] [Thread-127917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:10:59.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:10:59.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:11:00.296 [DEBUG] [Thread-127917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:11:00.296 [DEBUG] [Thread-127917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:11:00.344 [DEBUG] [Thread-127917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:11:00.344 [DEBUG] [Thread-127917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:11:00.353 [DEBUG] [Thread-127917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:11:00.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:11:00.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:11:00.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:11:00.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:11:00.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:11:00.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:11:00.389 [DEBUG] [Thread-127917] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:11:10.514 [DEBUG] [Thread-127919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:11:12.512 [DEBUG] [Thread-127920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:11:27.565 [DEBUG] [Thread-127921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:11:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:11:30.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:11:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:11:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 10, 59), 12.52, 44.61, 0.0, 13.04, 22.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:11:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:10:59
2026-02-11T11:11:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:11:33.094 [DEBUG] [Thread-127922] [transport.py] [_log()] starting thread (client mode): 0xa2df9e70
2026-02-11T11:11:33.095 [DEBUG] [Thread-127922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:11:33.116 [DEBUG] [Thread-127922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:11:33.116 [INFO] [Thread-127922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] client lang: <none>
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] server lang: <none>
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] kex follows: False
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:11:33.118 [DEBUG] [Thread-127922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:11:33.119 [DEBUG] [Thread-127922] [transport.py] [_log()] Compression: none
2026-02-11T11:11:33.119 [DEBUG] [Thread-127922] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:11:33.135 [DEBUG] [Thread-127922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:11:33.135 [DEBUG] [Thread-127922] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:11:33.136 [DEBUG] [Thread-127922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:11:33.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:11:33.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:11:33.137 [DEBUG] [Thread-127922] [transport.py] [_log()] userauth is OK
2026-02-11T11:11:33.138 [DEBUG] [Thread-127922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:11:33.138 [DEBUG] [Thread-127922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:11:33.138 [DEBUG] [Thread-127922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:11:33.138 [DEBUG] [Thread-127922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:11:33.162 [INFO] [Thread-127922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:11:33.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:11:33.777 [DEBUG] [Thread-127922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:11:33.778 [DEBUG] [Thread-127922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:11:33.778 [DEBUG] [Thread-127922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:11:33.819 [DEBUG] [Thread-127922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:11:33.819 [DEBUG] [Thread-127922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:11:33.822 [DEBUG] [Thread-127922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:11:33.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:11:33.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:11:33.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:11:33.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:11:33.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:11:33.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:11:33.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:11:33.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:11:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:11:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.382783 -999.00  +21.70  15.06     52  +11.40 1 2 1 1 1   888    0 10.04 -24.75 ----- 11.3 15.1 310.2 20.0 27.2 -11.2 26.1 -14.3 25.3 -15.4 25.8 -13.7
2026-02-11T11:11:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:11:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:11:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.382783
2026-02-11T11:11:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:11:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:11:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:11:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:11:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:11:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:10:59', tmtdew=12.52, humidity=44.61, cloud=0.0, wind=13.04, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:11:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:11:33.850 [DEBUG] [Thread-127922] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:11:33.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:11:33.946 [DEBUG] [Thread-127925] [transport.py] [_log()] starting thread (client mode): 0xa57e0220
2026-02-11T11:11:33.946 [DEBUG] [Thread-127925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:11:33.962 [DEBUG] [Thread-127925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:11:33.962 [INFO] [Thread-127925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:11:33.970 [DEBUG] [Thread-127925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:11:33.970 [DEBUG] [Thread-127925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:11:33.970 [DEBUG] [Thread-127925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:11:33.970 [DEBUG] [Thread-127925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:11:33.971 [DEBUG] [Thread-127925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:11:33.971 [DEBUG] [Thread-127925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:11:33.971 [DEBUG] [Thread-127925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:11:33.971 [DEBUG] [Thread-127925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:11:33.971 [DEBUG] [Thread-127925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] client lang: <none>
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] server lang: <none>
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] kex follows: False
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] Compression: none
2026-02-11T11:11:33.972 [DEBUG] [Thread-127925] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:11:34.027 [DEBUG] [Thread-127925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:11:34.028 [DEBUG] [Thread-127925] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:11:34.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:11:34.029 [DEBUG] [Thread-127925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:11:34.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:11:34.083 [DEBUG] [Thread-127925] [transport.py] [_log()] userauth is OK
2026-02-11T11:11:34.084 [DEBUG] [Thread-127925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:11:34.084 [DEBUG] [Thread-127925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:11:34.084 [DEBUG] [Thread-127925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:11:34.084 [DEBUG] [Thread-127925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:11:34.103 [INFO] [Thread-127925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:11:34.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:11:34.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:11:34.940 [DEBUG] [Thread-127925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:11:34.940 [DEBUG] [Thread-127925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:11:34.988 [DEBUG] [Thread-127925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:11:34.989 [DEBUG] [Thread-127925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:11:34.998 [DEBUG] [Thread-127925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:11:35.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:11:35.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:11:35.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:11:35.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:11:35.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:11:35.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:11:35.035 [DEBUG] [Thread-127925] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:11:42.603 [DEBUG] [Thread-127927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:11:56.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:11:56.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:11:57.654 [DEBUG] [Thread-127928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:12:05.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:12:05.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:12:05.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
2026-02-11T11:12:06.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 11, 34), 12.92, 43.91, 0.0, 20.61, 23.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:12:06.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:11:34
2026-02-11T11:12:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:12:07.452 [DEBUG] [Thread-127929] [transport.py] [_log()] starting thread (client mode): 0xa57e3160
2026-02-11T11:12:07.453 [DEBUG] [Thread-127929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:12:07.473 [DEBUG] [Thread-127929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:12:07.473 [INFO] [Thread-127929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] client lang: <none>
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] server lang: <none>
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] kex follows: False
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] Compression: none
2026-02-11T11:12:07.477 [DEBUG] [Thread-127929] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:12:07.493 [DEBUG] [Thread-127929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:12:07.494 [DEBUG] [Thread-127929] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:12:07.494 [DEBUG] [Thread-127929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:12:07.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:12:07.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:12:07.496 [DEBUG] [Thread-127929] [transport.py] [_log()] userauth is OK
2026-02-11T11:12:07.497 [DEBUG] [Thread-127929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:12:07.497 [DEBUG] [Thread-127929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:12:07.497 [DEBUG] [Thread-127929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:12:07.497 [DEBUG] [Thread-127929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:12:07.533 [INFO] [Thread-127929] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:12:07.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:12:08.166 [DEBUG] [Thread-127929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:12:08.166 [DEBUG] [Thread-127929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:12:08.167 [DEBUG] [Thread-127929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:12:08.207 [DEBUG] [Thread-127929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:12:08.207 [DEBUG] [Thread-127929] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:12:08.210 [DEBUG] [Thread-127929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:12:08.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:12:08.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:12:08.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:12:08.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:12:08.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:12:08.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:12:08.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:12:08.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:12:08.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:12:08.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.383130 -999.00  +22.20  15.41     51  +11.70 1 2 1 1 1   888    0 10.15 -25.27 ----- 14.1 15.4 296.0 21.2 27.7 -11.3 26.9 -10.2 26.1 -10.8 26.5 -11.4
2026-02-11T11:12:08.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:12:08.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:12:08.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.383130
2026-02-11T11:12:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:12:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:12:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:12:08.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:12:08.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:12:08.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:11:34', tmtdew=12.92, humidity=43.91, cloud=0.0, wind=20.61, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:11:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:12:08.235 [DEBUG] [Thread-127929] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:12:08.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:12:08.329 [DEBUG] [Thread-127932] [transport.py] [_log()] starting thread (client mode): 0xa57b1c30
2026-02-11T11:12:08.330 [DEBUG] [Thread-127932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:12:08.345 [DEBUG] [Thread-127932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:12:08.345 [INFO] [Thread-127932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:12:08.353 [DEBUG] [Thread-127932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:12:08.354 [DEBUG] [Thread-127932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] client lang: <none>
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] server lang: <none>
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] kex follows: False
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:12:08.355 [DEBUG] [Thread-127932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:12:08.356 [DEBUG] [Thread-127932] [transport.py] [_log()] Compression: none
2026-02-11T11:12:08.356 [DEBUG] [Thread-127932] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:12:08.412 [DEBUG] [Thread-127932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:12:08.413 [DEBUG] [Thread-127932] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:12:08.413 [DEBUG] [Thread-127932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:12:08.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:12:08.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:12:08.471 [DEBUG] [Thread-127932] [transport.py] [_log()] userauth is OK
2026-02-11T11:12:08.471 [DEBUG] [Thread-127932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:12:08.471 [DEBUG] [Thread-127932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:12:08.471 [DEBUG] [Thread-127932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:12:08.471 [DEBUG] [Thread-127932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:12:08.495 [INFO] [Thread-127932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:12:08.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:12:08.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:12:09.347 [DEBUG] [Thread-127932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:12:09.347 [DEBUG] [Thread-127932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:12:09.394 [DEBUG] [Thread-127932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:12:09.394 [DEBUG] [Thread-127932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:12:09.404 [DEBUG] [Thread-127932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:12:09.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:12:09.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:12:09.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:12:09.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:12:09.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:12:09.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:12:09.440 [DEBUG] [Thread-127932] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:12:10.546 [DEBUG] [Thread-127934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:12:12.689 [DEBUG] [Thread-127935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:12:27.742 [DEBUG] [Thread-127936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:12:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:12:39.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:12:39.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:12:41.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 12, 9), 12.79, 44.18, 0.0, 20.7, 22.44, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:12:41.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:12:09
2026-02-11T11:12:41.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:12:41.816 [DEBUG] [Thread-127937] [transport.py] [_log()] starting thread (client mode): 0xa2df8e50
2026-02-11T11:12:41.816 [DEBUG] [Thread-127937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:12:41.837 [DEBUG] [Thread-127937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:12:41.837 [INFO] [Thread-127937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] client lang: <none>
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] server lang: <none>
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] kex follows: False
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:12:41.840 [DEBUG] [Thread-127937] [transport.py] [_log()] Compression: none
2026-02-11T11:12:41.841 [DEBUG] [Thread-127937] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:12:41.858 [DEBUG] [Thread-127937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:12:41.859 [DEBUG] [Thread-127937] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:12:41.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:12:41.860 [DEBUG] [Thread-127937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:12:41.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:12:41.862 [DEBUG] [Thread-127937] [transport.py] [_log()] userauth is OK
2026-02-11T11:12:41.862 [DEBUG] [Thread-127937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:12:41.862 [DEBUG] [Thread-127937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:12:41.863 [DEBUG] [Thread-127937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:12:41.863 [DEBUG] [Thread-127937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:12:41.888 [INFO] [Thread-127937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:12:41.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:12:42.516 [DEBUG] [Thread-127937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:12:42.516 [DEBUG] [Thread-127937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:12:42.517 [DEBUG] [Thread-127937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:12:42.557 [DEBUG] [Thread-127937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:12:42.558 [DEBUG] [Thread-127937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:12:42.561 [DEBUG] [Thread-127937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:12:42.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:12:42.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:12:42.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:12:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:12:42.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:12:42.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:12:42.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:12:42.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:12:42.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:12:42.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.383478 -999.00  +22.30  27.63     49  +11.30 1 2 1 1 1   888    0 10.06 -25.04 ----- 25.7 27.6 274.8 30.9 27.5 -17.6 27.2 -11.8 26.2 -13.8 26.8 -12.2
2026-02-11T11:12:42.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:12:42.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:12:42.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.383478
2026-02-11T11:12:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:12:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:12:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:12:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:12:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:12:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:12:09', tmtdew=12.79, humidity=44.18, cloud=0.0, wind=20.7, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:12:12.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:12:42.587 [DEBUG] [Thread-127937] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:12:42.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:12:42.687 [DEBUG] [Thread-127940] [transport.py] [_log()] starting thread (client mode): 0xa57e2560
2026-02-11T11:12:42.687 [DEBUG] [Thread-127940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:12:42.702 [DEBUG] [Thread-127940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:12:42.702 [INFO] [Thread-127940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:12:42.710 [DEBUG] [Thread-127940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:12:42.710 [DEBUG] [Thread-127940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] client lang: <none>
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] server lang: <none>
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] kex follows: False
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:12:42.711 [DEBUG] [Thread-127940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:12:42.712 [DEBUG] [Thread-127940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:12:42.712 [DEBUG] [Thread-127940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:12:42.712 [DEBUG] [Thread-127940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:12:42.712 [DEBUG] [Thread-127940] [transport.py] [_log()] Compression: none
2026-02-11T11:12:42.712 [DEBUG] [Thread-127940] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:12:42.778 [DEBUG] [Thread-127940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:12:42.779 [DEBUG] [Thread-127940] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:12:42.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:12:42.780 [DEBUG] [Thread-127940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:12:42.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:12:42.782 [DEBUG] [Thread-127942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:12:42.835 [DEBUG] [Thread-127940] [transport.py] [_log()] userauth is OK
2026-02-11T11:12:42.835 [DEBUG] [Thread-127940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:12:42.835 [DEBUG] [Thread-127940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:12:42.836 [DEBUG] [Thread-127940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:12:42.836 [DEBUG] [Thread-127940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:12:42.854 [INFO] [Thread-127940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:12:42.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:12:42.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:12:43.706 [DEBUG] [Thread-127940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:12:43.707 [DEBUG] [Thread-127940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:12:43.754 [DEBUG] [Thread-127940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:12:43.755 [DEBUG] [Thread-127940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:12:43.764 [DEBUG] [Thread-127940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:12:43.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:12:43.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:12:43.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
2026-02-11T11:12:43.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:12:43.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:12:43.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:12:43.800 [DEBUG] [Thread-127940] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:12:57.135 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:12:57.136 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:12:57.832 [DEBUG] [Thread-127943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:13:10.609 [DEBUG] [Thread-127944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:13:12.866 [DEBUG] [Thread-127945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:13:13.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:13:13.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:13:13.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:13:15.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 12, 45), 13.12, 43.25, 0.0, 24.56, 22.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:13:15.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:12:45
2026-02-11T11:13:16.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:13:16.190 [DEBUG] [Thread-127946] [transport.py] [_log()] starting thread (client mode): 0xa2dc2b00
2026-02-11T11:13:16.190 [DEBUG] [Thread-127946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:13:16.210 [DEBUG] [Thread-127946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:13:16.211 [INFO] [Thread-127946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] client lang: <none>
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] server lang: <none>
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] kex follows: False
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] Compression: none
2026-02-11T11:13:16.214 [DEBUG] [Thread-127946] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:13:16.231 [DEBUG] [Thread-127946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:13:16.232 [DEBUG] [Thread-127946] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:13:16.232 [DEBUG] [Thread-127946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:13:16.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:13:16.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:13:16.234 [DEBUG] [Thread-127946] [transport.py] [_log()] userauth is OK
2026-02-11T11:13:16.234 [DEBUG] [Thread-127946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:13:16.234 [DEBUG] [Thread-127946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:13:16.234 [DEBUG] [Thread-127946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:13:16.234 [DEBUG] [Thread-127946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:13:16.259 [INFO] [Thread-127946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:13:16.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:13:16.863 [DEBUG] [Thread-127946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:13:16.863 [DEBUG] [Thread-127946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:13:16.863 [DEBUG] [Thread-127946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:13:16.904 [DEBUG] [Thread-127946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:13:16.904 [DEBUG] [Thread-127946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:13:16.907 [DEBUG] [Thread-127946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:13:16.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:13:16.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:13:16.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:13:16.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:13:16.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:13:16.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:13:16.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:13:16.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:13:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:13:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.383825 -999.00  +22.40  27.54     49  +11.30 1 2 1 1 1   888    0 9.99 -23.21 ----- 27.6 27.5 295.2 31.6 27.3 -18.9 27.1 -16.3 25.8 -17.9 26.4 -17.1
2026-02-11T11:13:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:13:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:13:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.383825
2026-02-11T11:13:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:13:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:13:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:13:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:13:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:13:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:12:45', tmtdew=13.12, humidity=43.25, cloud=0.0, wind=24.56, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:12:42.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:13:16.931 [DEBUG] [Thread-127946] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:13:17.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:13:17.026 [DEBUG] [Thread-127949] [transport.py] [_log()] starting thread (client mode): 0xa2dc0e50
2026-02-11T11:13:17.026 [DEBUG] [Thread-127949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:13:17.041 [DEBUG] [Thread-127949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:13:17.041 [INFO] [Thread-127949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] client lang: <none>
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] server lang: <none>
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] kex follows: False
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] Compression: none
2026-02-11T11:13:17.049 [DEBUG] [Thread-127949] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:13:17.105 [DEBUG] [Thread-127949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:13:17.106 [DEBUG] [Thread-127949] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:13:17.106 [DEBUG] [Thread-127949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:13:17.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:13:17.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:13:17.162 [DEBUG] [Thread-127949] [transport.py] [_log()] userauth is OK
2026-02-11T11:13:17.162 [DEBUG] [Thread-127949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:13:17.162 [DEBUG] [Thread-127949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:13:17.162 [DEBUG] [Thread-127949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:13:17.162 [DEBUG] [Thread-127949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:13:17.180 [INFO] [Thread-127949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:13:17.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:13:17.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:13:18.010 [DEBUG] [Thread-127949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:13:18.011 [DEBUG] [Thread-127949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:13:18.058 [DEBUG] [Thread-127949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:13:18.059 [DEBUG] [Thread-127949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:13:18.068 [DEBUG] [Thread-127949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:13:18.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:13:18.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:13:18.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:13:18.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:13:18.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:13:18.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:13:18.104 [DEBUG] [Thread-127949] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:13:27.901 [DEBUG] [Thread-127951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:13:42.951 [DEBUG] [Thread-127952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:13:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:13:48.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:13:48.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:13:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 13, 20), 13.51, 42.24, 0.0, 25.81, 22.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:13:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:13:20
2026-02-11T11:13:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:13:50.608 [DEBUG] [Thread-127953] [transport.py] [_log()] starting thread (client mode): 0xa2dc5f30
2026-02-11T11:13:50.608 [DEBUG] [Thread-127953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:13:50.629 [DEBUG] [Thread-127953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:13:50.629 [INFO] [Thread-127953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] client lang: <none>
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] server lang: <none>
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] kex follows: False
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:13:50.632 [DEBUG] [Thread-127953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:13:50.633 [DEBUG] [Thread-127953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:13:50.633 [DEBUG] [Thread-127953] [transport.py] [_log()] Compression: none
2026-02-11T11:13:50.633 [DEBUG] [Thread-127953] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:13:50.649 [DEBUG] [Thread-127953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:13:50.650 [DEBUG] [Thread-127953] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:13:50.650 [DEBUG] [Thread-127953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:13:50.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:13:50.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:13:50.652 [DEBUG] [Thread-127953] [transport.py] [_log()] userauth is OK
2026-02-11T11:13:50.653 [DEBUG] [Thread-127953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:13:50.653 [DEBUG] [Thread-127953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:13:50.653 [DEBUG] [Thread-127953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:13:50.653 [DEBUG] [Thread-127953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:13:50.677 [INFO] [Thread-127953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:13:50.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:13:51.311 [DEBUG] [Thread-127953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:13:51.311 [DEBUG] [Thread-127953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:13:51.311 [DEBUG] [Thread-127953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:13:51.351 [DEBUG] [Thread-127953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:13:51.352 [DEBUG] [Thread-127953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:13:51.355 [DEBUG] [Thread-127953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:13:51.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:13:51.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:13:51.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:13:51.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:13:51.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:13:51.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:13:51.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:13:51.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:13:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:13:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.384172 -999.00  +22.00  19.86     50  +11.10 1 2 1 1 1   888    0 10.21 -19.71 ----- 22.7 19.9 291.2 26.9 27.1 -17.2 26.7 -16.8 25.5 -15.9 26.2 -17.5
2026-02-11T11:13:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:13:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:13:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.384172
2026-02-11T11:13:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:13:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:13:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:13:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:13:51.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:13:51.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:13:20', tmtdew=13.51, humidity=42.24, cloud=0.0, wind=25.81, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:13:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:13:51.382 [DEBUG] [Thread-127953] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:13:51.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:13:51.477 [DEBUG] [Thread-127956] [transport.py] [_log()] starting thread (client mode): 0xa2dfb250
2026-02-11T11:13:51.478 [DEBUG] [Thread-127956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:13:51.496 [DEBUG] [Thread-127956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:13:51.496 [INFO] [Thread-127956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:13:51.503 [DEBUG] [Thread-127956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] client lang: <none>
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] server lang: <none>
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] kex follows: False
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:13:51.504 [DEBUG] [Thread-127956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:13:51.505 [DEBUG] [Thread-127956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:13:51.505 [DEBUG] [Thread-127956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:13:51.505 [DEBUG] [Thread-127956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:13:51.505 [DEBUG] [Thread-127956] [transport.py] [_log()] Compression: none
2026-02-11T11:13:51.505 [DEBUG] [Thread-127956] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:13:51.563 [DEBUG] [Thread-127956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:13:51.564 [DEBUG] [Thread-127956] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:13:51.564 [DEBUG] [Thread-127956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:13:51.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:13:51.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:13:51.621 [DEBUG] [Thread-127956] [transport.py] [_log()] userauth is OK
2026-02-11T11:13:51.622 [DEBUG] [Thread-127956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:13:51.622 [DEBUG] [Thread-127956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:13:51.622 [DEBUG] [Thread-127956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:13:51.622 [DEBUG] [Thread-127956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:13:51.647 [INFO] [Thread-127956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:13:51.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:13:51.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:13:52.519 [DEBUG] [Thread-127956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:13:52.519 [DEBUG] [Thread-127956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:13:52.567 [DEBUG] [Thread-127956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:13:52.568 [DEBUG] [Thread-127956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:13:52.577 [DEBUG] [Thread-127956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:13:52.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:13:52.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:13:52.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:13:52.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:13:52.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:13:52.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:13:52.613 [DEBUG] [Thread-127956] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:13:57.279 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:13:57.281 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:13:57.990 [DEBUG] [Thread-127958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:10.679 [DEBUG] [Thread-127959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:13.049 [DEBUG] [Thread-127960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:22.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:14:22.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:14:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:14:24.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 13, 55), 13.34, 42.65, 0.0, 22.48, 22.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:14:24.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:13:55
2026-02-11T11:14:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:14:25.012 [DEBUG] [Thread-127961] [transport.py] [_log()] starting thread (client mode): 0xa2dfaa10
2026-02-11T11:14:25.012 [DEBUG] [Thread-127961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:14:25.033 [DEBUG] [Thread-127961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:14:25.033 [INFO] [Thread-127961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:14:25.036 [DEBUG] [Thread-127961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] client lang: <none>
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] server lang: <none>
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] kex follows: False
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] Compression: none
2026-02-11T11:14:25.037 [DEBUG] [Thread-127961] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:14:25.055 [DEBUG] [Thread-127961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:14:25.056 [DEBUG] [Thread-127961] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:14:25.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:14:25.057 [DEBUG] [Thread-127961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:14:25.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:14:25.060 [DEBUG] [Thread-127961] [transport.py] [_log()] userauth is OK
2026-02-11T11:14:25.060 [DEBUG] [Thread-127961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:14:25.060 [DEBUG] [Thread-127961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:14:25.060 [DEBUG] [Thread-127961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:14:25.060 [DEBUG] [Thread-127961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:14:25.096 [INFO] [Thread-127961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:14:25.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:14:25.752 [DEBUG] [Thread-127961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:14:25.752 [DEBUG] [Thread-127961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:14:25.753 [DEBUG] [Thread-127961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:14:25.794 [DEBUG] [Thread-127961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:14:25.794 [DEBUG] [Thread-127961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:14:25.797 [DEBUG] [Thread-127961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:14:25.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:14:25.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:14:25.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:14:25.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:14:25.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:14:25.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:14:25.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:14:25.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:14:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:14:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.384519 -999.00  +21.90  24.42     50  +11.10 1 2 1 1 1   888    0 10.21 -21.66 ----- 23.9 24.4 292.2 31.6 27.3 -12.4 26.6 -16.3 25.6 -17.9 26.1 -16.7
2026-02-11T11:14:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:14:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:14:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.384519
2026-02-11T11:14:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:14:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:14:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:14:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:14:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:14:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:13:55', tmtdew=13.34, humidity=42.65, cloud=0.0, wind=22.48, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:13:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:14:25.828 [DEBUG] [Thread-127961] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:14:25.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:14:25.924 [DEBUG] [Thread-127964] [transport.py] [_log()] starting thread (client mode): 0xa57e25f0
2026-02-11T11:14:25.924 [DEBUG] [Thread-127964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:14:25.939 [DEBUG] [Thread-127964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:14:25.939 [INFO] [Thread-127964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:14:25.946 [DEBUG] [Thread-127964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] client lang: <none>
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] server lang: <none>
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] kex follows: False
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] Compression: none
2026-02-11T11:14:25.947 [DEBUG] [Thread-127964] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:14:26.006 [DEBUG] [Thread-127964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:14:26.006 [DEBUG] [Thread-127964] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:14:26.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:14:26.007 [DEBUG] [Thread-127964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:14:26.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:14:26.061 [DEBUG] [Thread-127964] [transport.py] [_log()] userauth is OK
2026-02-11T11:14:26.062 [DEBUG] [Thread-127964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:14:26.062 [DEBUG] [Thread-127964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:14:26.062 [DEBUG] [Thread-127964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:14:26.062 [DEBUG] [Thread-127964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:14:26.082 [INFO] [Thread-127964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:14:26.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:14:26.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:14:26.894 [DEBUG] [Thread-127964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:14:26.894 [DEBUG] [Thread-127964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:14:26.943 [DEBUG] [Thread-127964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:14:26.943 [DEBUG] [Thread-127964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:14:26.952 [DEBUG] [Thread-127964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:14:26.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:14: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')
2026-02-11T11:14: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') -> 00000000
2026-02-11T11:14:26.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:14:26.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:14:26.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:14:26.988 [DEBUG] [Thread-127964] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:14:28.085 [DEBUG] [Thread-127966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:43.132 [DEBUG] [Thread-127967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:14:56.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:14:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:14:57.427 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:57.428 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:58.166 [DEBUG] [Thread-127968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:14:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 14, 31), 13.3, 42.77, 0.0, 20.1, 22.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:14:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:14:31
2026-02-11T11:14:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:14:59.340 [DEBUG] [Thread-127969] [transport.py] [_log()] starting thread (client mode): 0xa2d918a0
2026-02-11T11:14:59.340 [DEBUG] [Thread-127969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:14:59.361 [DEBUG] [Thread-127969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:14:59.361 [INFO] [Thread-127969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:14:59.364 [DEBUG] [Thread-127969] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:14:59.364 [DEBUG] [Thread-127969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:14:59.364 [DEBUG] [Thread-127969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:14:59.364 [DEBUG] [Thread-127969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:14:59.364 [DEBUG] [Thread-127969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] client lang: <none>
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] server lang: <none>
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] kex follows: False
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] Compression: none
2026-02-11T11:14:59.365 [DEBUG] [Thread-127969] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:14:59.382 [DEBUG] [Thread-127969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:14:59.383 [DEBUG] [Thread-127969] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:14:59.383 [DEBUG] [Thread-127969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:14:59.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:14:59.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:14:59.385 [DEBUG] [Thread-127969] [transport.py] [_log()] userauth is OK
2026-02-11T11:14:59.385 [DEBUG] [Thread-127969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:14:59.385 [DEBUG] [Thread-127969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:14:59.386 [DEBUG] [Thread-127969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:14:59.386 [DEBUG] [Thread-127969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:14:59.410 [INFO] [Thread-127969] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:14:59.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:15:00.192 [DEBUG] [Thread-127969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:15:00.192 [DEBUG] [Thread-127969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:15:00.193 [DEBUG] [Thread-127969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:15:00.233 [DEBUG] [Thread-127969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:15:00.234 [DEBUG] [Thread-127969] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:15:00.237 [DEBUG] [Thread-127969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:15:00.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:15:00.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:15:00.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:15:00.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:15:00.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:15:00.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:15:00.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:15:00.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:15:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:15:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.385214 -999.00  +22.10  20.04     50  +11.30 1 2 1 1 1   888    0 10.18 -21.29 ----- 21.5 20.0 282.7 26.6 28.1 -13.1 27.3 -12.1 26.1 -12.2 26.8 -12.4
2026-02-11T11:15:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:15:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:15:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.385214
2026-02-11T11:15:00.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:15:00.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:15:00.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:15:00.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:15:00.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:15:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:14:31', tmtdew=13.3, humidity=42.77, cloud=0.0, wind=20.1, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:14:42.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:15:00.263 [DEBUG] [Thread-127969] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:15:00.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:15:00.357 [DEBUG] [Thread-127972] [transport.py] [_log()] starting thread (client mode): 0xa575bd60
2026-02-11T11:15:00.357 [DEBUG] [Thread-127972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:15:00.372 [DEBUG] [Thread-127972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:15:00.372 [INFO] [Thread-127972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] client lang: <none>
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] server lang: <none>
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] kex follows: False
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:15:00.380 [DEBUG] [Thread-127972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:15:00.381 [DEBUG] [Thread-127972] [transport.py] [_log()] Compression: none
2026-02-11T11:15:00.381 [DEBUG] [Thread-127972] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:15:00.437 [DEBUG] [Thread-127972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:15:00.437 [DEBUG] [Thread-127972] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:15:00.438 [DEBUG] [Thread-127972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:15:00.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:15:00.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:15:00.497 [DEBUG] [Thread-127972] [transport.py] [_log()] userauth is OK
2026-02-11T11:15:00.497 [DEBUG] [Thread-127972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:15:00.497 [DEBUG] [Thread-127972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:15:00.497 [DEBUG] [Thread-127972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:15:00.497 [DEBUG] [Thread-127972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:15:00.522 [INFO] [Thread-127972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:15:00.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:15:00.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:15:01.356 [DEBUG] [Thread-127972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:15:01.357 [DEBUG] [Thread-127972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:15:01.404 [DEBUG] [Thread-127972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:15:01.405 [DEBUG] [Thread-127972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:15:01.414 [DEBUG] [Thread-127972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:15:01.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:15:01.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:15:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:15:01.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:15:01.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:15:01.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:15:01.451 [DEBUG] [Thread-127972] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:15:10.741 [DEBUG] [Thread-127974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:15:13.197 [DEBUG] [Thread-127975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:15:28.245 [DEBUG] [Thread-127976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:15:31.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:15:31.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:15:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:15:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 15, 7), 13.41, 42.51, 0.0, 22.99, 22.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:15:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:15:07
2026-02-11T11:15:33.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:15:34.044 [DEBUG] [Thread-127977] [transport.py] [_log()] starting thread (client mode): 0xa57c3190
2026-02-11T11:15:34.044 [DEBUG] [Thread-127977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:15:34.064 [DEBUG] [Thread-127977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:15:34.064 [INFO] [Thread-127977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] client lang: <none>
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] server lang: <none>
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] kex follows: False
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:15:34.067 [DEBUG] [Thread-127977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:15:34.068 [DEBUG] [Thread-127977] [transport.py] [_log()] Compression: none
2026-02-11T11:15:34.068 [DEBUG] [Thread-127977] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:15:34.085 [DEBUG] [Thread-127977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:15:34.085 [DEBUG] [Thread-127977] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:15:34.086 [DEBUG] [Thread-127977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:15:34.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:15:34.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:15:34.088 [DEBUG] [Thread-127977] [transport.py] [_log()] userauth is OK
2026-02-11T11:15:34.088 [DEBUG] [Thread-127977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:15:34.088 [DEBUG] [Thread-127977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:15:34.088 [DEBUG] [Thread-127977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:15:34.088 [DEBUG] [Thread-127977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:15:34.107 [INFO] [Thread-127977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:15:34.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:15:34.698 [DEBUG] [Thread-127977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:15:34.698 [DEBUG] [Thread-127977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:15:34.699 [DEBUG] [Thread-127977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:15:34.739 [DEBUG] [Thread-127977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:15:34.740 [DEBUG] [Thread-127977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:15:34.743 [DEBUG] [Thread-127977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:15:34.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:15:34.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:15:34.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:15:34.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:15:34.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:15:34.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:15:34.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:15:34.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:15:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:15:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.385561 -999.00  +22.10  19.76     49  +11.00 1 2 1 1 1   888    0 10.19 -19.63 ----- 17.9 19.8 271.8 26.3 28.1 -13.1 27.6 -12.5 26.2 -16.2 27.1 -12.2
2026-02-11T11:15:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:15:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:15:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.385561
2026-02-11T11:15:34.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:15:34.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:15:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:15:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:15:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:15:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:15:07', tmtdew=13.41, humidity=42.51, cloud=0.0, wind=22.99, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:15:12.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:15:34.770 [DEBUG] [Thread-127977] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:15:34.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:15:34.869 [DEBUG] [Thread-127980] [transport.py] [_log()] starting thread (client mode): 0xa57d66e0
2026-02-11T11:15:34.869 [DEBUG] [Thread-127980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:15:34.883 [DEBUG] [Thread-127980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:15:34.883 [INFO] [Thread-127980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] client lang: <none>
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] server lang: <none>
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] kex follows: False
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:15:34.891 [DEBUG] [Thread-127980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:15:34.892 [DEBUG] [Thread-127980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:15:34.892 [DEBUG] [Thread-127980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:15:34.892 [DEBUG] [Thread-127980] [transport.py] [_log()] Compression: none
2026-02-11T11:15:34.892 [DEBUG] [Thread-127980] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:15:34.953 [DEBUG] [Thread-127980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:15:34.953 [DEBUG] [Thread-127980] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:15:34.954 [DEBUG] [Thread-127980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:15:34.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:15:34.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:15:35.013 [DEBUG] [Thread-127980] [transport.py] [_log()] userauth is OK
2026-02-11T11:15:35.013 [DEBUG] [Thread-127980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:15:35.013 [DEBUG] [Thread-127980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:15:35.013 [DEBUG] [Thread-127980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:15:35.014 [DEBUG] [Thread-127980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:15:35.032 [INFO] [Thread-127980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:15:35.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:15:35.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:15:35.864 [DEBUG] [Thread-127980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:15:35.865 [DEBUG] [Thread-127980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:15:35.912 [DEBUG] [Thread-127980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:15:35.912 [DEBUG] [Thread-127980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:15:35.921 [DEBUG] [Thread-127980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:15:35.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:15:35.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:15:35.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:15:35.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:15:35.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:15:35.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:15:35.955 [DEBUG] [Thread-127980] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:15:43.280 [DEBUG] [Thread-127982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:15:57.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:15:57.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:15:58.325 [DEBUG] [Thread-127983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:16:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:16:05.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:16:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:16:07.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 15, 42), 15.01, 38.48, 0.0, 24.17, 24.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:16:07.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:15:42
2026-02-11T11:16:08.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:16:08.358 [DEBUG] [Thread-127984] [transport.py] [_log()] starting thread (client mode): 0xa57c1cf0
2026-02-11T11:16:08.358 [DEBUG] [Thread-127984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:16:08.376 [DEBUG] [Thread-127984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:16:08.376 [INFO] [Thread-127984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:16:08.379 [DEBUG] [Thread-127984] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:16:08.379 [DEBUG] [Thread-127984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:16:08.379 [DEBUG] [Thread-127984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:16:08.379 [DEBUG] [Thread-127984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:08.379 [DEBUG] [Thread-127984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:08.379 [DEBUG] [Thread-127984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] client lang: <none>
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] server lang: <none>
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] kex follows: False
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] Compression: none
2026-02-11T11:16:08.380 [DEBUG] [Thread-127984] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:16:08.400 [DEBUG] [Thread-127984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:16:08.400 [DEBUG] [Thread-127984] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:16:08.401 [DEBUG] [Thread-127984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:16:08.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:16:08.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:16:08.403 [DEBUG] [Thread-127984] [transport.py] [_log()] userauth is OK
2026-02-11T11:16:08.403 [DEBUG] [Thread-127984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:16:08.403 [DEBUG] [Thread-127984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:16:08.403 [DEBUG] [Thread-127984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:16:08.404 [DEBUG] [Thread-127984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:16:08.425 [INFO] [Thread-127984] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:16:08.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:16:09.066 [DEBUG] [Thread-127984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:16:09.066 [DEBUG] [Thread-127984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:16:09.067 [DEBUG] [Thread-127984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:16:09.107 [DEBUG] [Thread-127984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:16:09.107 [DEBUG] [Thread-127984] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:16:09.110 [DEBUG] [Thread-127984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:16:09.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:16:09.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:16:09.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:16:09.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:16:09.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:16:09.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:16:09.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:16:09.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:16:09.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:16:09.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.385908 -999.00  +22.20  20.29     49  +11.10 1 2 1 1 1   888    0 10.30 -18.89 ----- 19.6 20.3 287.4 24.7 28.3 -13.6 27.8 -12.1 26.3 -11.6 27.2 -11.7
2026-02-11T11:16:09.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:16:09.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:16:09.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.385908
2026-02-11T11:16:09.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:16:09.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:16:09.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:16:09.135 [DEBUG] [Thread-127984] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:16:09.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:16:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:16:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:15:42', tmtdew=15.01, humidity=38.48, cloud=0.0, wind=24.17, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:15:42.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:16:09.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:16:09.230 [DEBUG] [Thread-127987] [transport.py] [_log()] starting thread (client mode): 0xa2d006d0
2026-02-11T11:16:09.230 [DEBUG] [Thread-127987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:16:09.245 [DEBUG] [Thread-127987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:16:09.245 [INFO] [Thread-127987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:16:09.252 [DEBUG] [Thread-127987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] client lang: <none>
2026-02-11T11:16:09.253 [DEBUG] [Thread-127987] [transport.py] [_log()] server lang: <none>
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] kex follows: False
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] Compression: none
2026-02-11T11:16:09.254 [DEBUG] [Thread-127987] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:16:09.311 [DEBUG] [Thread-127987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:16:09.311 [DEBUG] [Thread-127987] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:16:09.311 [DEBUG] [Thread-127987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:16:09.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:16:09.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:16:09.378 [DEBUG] [Thread-127987] [transport.py] [_log()] userauth is OK
2026-02-11T11:16:09.378 [DEBUG] [Thread-127987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:16:09.379 [DEBUG] [Thread-127987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:16:09.379 [DEBUG] [Thread-127987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:16:09.379 [DEBUG] [Thread-127987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:16:09.400 [INFO] [Thread-127987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:16:09.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:16:09.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:16:10.206 [DEBUG] [Thread-127987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:16:10.206 [DEBUG] [Thread-127987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:16:10.255 [DEBUG] [Thread-127987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:16:10.255 [DEBUG] [Thread-127987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:16:10.264 [DEBUG] [Thread-127987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:16:10.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:16:10.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:16:10.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:16:10.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:16:10.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:16:10.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:16:10.305 [DEBUG] [Thread-127987] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:16:10.794 [DEBUG] [Thread-127989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:16:13.363 [DEBUG] [Thread-127990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:16:28.412 [DEBUG] [Thread-127991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:16:40.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:16:40.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:16:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:16:42.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 16, 17), 13.68, 41.91, 0.0, 19.07, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:16:42.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:16:17
2026-02-11T11:16:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:16:42.704 [DEBUG] [Thread-127992] [transport.py] [_log()] starting thread (client mode): 0xa57e0b50
2026-02-11T11:16:42.704 [DEBUG] [Thread-127992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:16:42.725 [DEBUG] [Thread-127992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:16:42.726 [INFO] [Thread-127992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:16:42.729 [DEBUG] [Thread-127992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:16:42.729 [DEBUG] [Thread-127992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] client lang: <none>
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] server lang: <none>
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] kex follows: False
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] Compression: none
2026-02-11T11:16:42.730 [DEBUG] [Thread-127992] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:16:42.747 [DEBUG] [Thread-127992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:16:42.748 [DEBUG] [Thread-127992] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:16:42.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:16:42.749 [DEBUG] [Thread-127992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:16:42.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:16:42.750 [DEBUG] [Thread-127992] [transport.py] [_log()] userauth is OK
2026-02-11T11:16:42.750 [DEBUG] [Thread-127992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:16:42.750 [DEBUG] [Thread-127992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:16:42.750 [DEBUG] [Thread-127992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:16:42.750 [DEBUG] [Thread-127992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:16:42.765 [INFO] [Thread-127992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:16:42.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:16:43.368 [DEBUG] [Thread-127992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:16:43.368 [DEBUG] [Thread-127992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:16:43.368 [DEBUG] [Thread-127992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:16:43.409 [DEBUG] [Thread-127992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:16:43.409 [DEBUG] [Thread-127992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:16:43.412 [DEBUG] [Thread-127992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:16:43.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:16:43.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:16:43.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:16:43.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:16:43.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:16:43.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:16:43.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:16:43.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:16:43.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:16:43.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.386256 -999.00  +22.30  17.58     48  +11.00 1 2 1 1 1   888    0 10.53 -16.10 ----- 15.5 17.6 274.4 22.4 28.6 -14.1 27.9 -12.8 26.4 -12.8 27.4 -11.4
2026-02-11T11:16:43.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:16:43.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:16:43.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.386256
2026-02-11T11:16:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:16:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:16:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:16:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:16:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:16:43.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:16:17', tmtdew=13.68, humidity=41.91, cloud=0.0, wind=19.07, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:16:12.518', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:16:43.443 [DEBUG] [Thread-127992] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:16:43.449 [DEBUG] [Thread-127995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:16:43.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:16:43.539 [DEBUG] [Thread-127996] [transport.py] [_log()] starting thread (client mode): 0xa2df8fd0
2026-02-11T11:16:43.539 [DEBUG] [Thread-127996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:16:43.553 [DEBUG] [Thread-127996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:16:43.554 [INFO] [Thread-127996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:16:43.561 [DEBUG] [Thread-127996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:16:43.562 [DEBUG] [Thread-127996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:16:43.562 [DEBUG] [Thread-127996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:16:43.562 [DEBUG] [Thread-127996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:43.562 [DEBUG] [Thread-127996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:16:43.562 [DEBUG] [Thread-127996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:43.562 [DEBUG] [Thread-127996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:16:43.562 [DEBUG] [Thread-127996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] client lang: <none>
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] server lang: <none>
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] kex follows: False
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:16:43.563 [DEBUG] [Thread-127996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:16:43.564 [DEBUG] [Thread-127996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:16:43.564 [DEBUG] [Thread-127996] [transport.py] [_log()] Compression: none
2026-02-11T11:16:43.564 [DEBUG] [Thread-127996] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:16:43.620 [DEBUG] [Thread-127996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:16:43.621 [DEBUG] [Thread-127996] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:16:43.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:16:43.622 [DEBUG] [Thread-127996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:16:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:16:43.682 [DEBUG] [Thread-127996] [transport.py] [_log()] userauth is OK
2026-02-11T11:16:43.683 [DEBUG] [Thread-127996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:16:43.683 [DEBUG] [Thread-127996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:16:43.683 [DEBUG] [Thread-127996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:16:43.683 [DEBUG] [Thread-127996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:16:43.703 [INFO] [Thread-127996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:16:43.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:16:43.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:16:44.545 [DEBUG] [Thread-127996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:16:44.545 [DEBUG] [Thread-127996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:16:44.593 [DEBUG] [Thread-127996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:16:44.594 [DEBUG] [Thread-127996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:16:44.603 [DEBUG] [Thread-127996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:16:44.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:16:44.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:16:44.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:16:44.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:16:44.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:16:44.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:16:44.644 [DEBUG] [Thread-127996] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:16:57.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:16:57.713 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:16:58.496 [DEBUG] [Thread-127998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:17:10.844 [DEBUG] [Thread-127999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:17:13.531 [DEBUG] [Thread-128000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:17:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:17:14.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:17:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:17:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 16, 54), 13.89, 40.91, 0.0, 15.12, 22.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:17:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:16:54
2026-02-11T11:17:16.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:17:17.060 [DEBUG] [Thread-128001] [transport.py] [_log()] starting thread (client mode): 0xa2d93880
2026-02-11T11:17:17.060 [DEBUG] [Thread-128001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:17:17.080 [DEBUG] [Thread-128001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:17:17.080 [INFO] [Thread-128001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] client lang: <none>
2026-02-11T11:17:17.084 [DEBUG] [Thread-128001] [transport.py] [_log()] server lang: <none>
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] kex follows: False
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] Compression: none
2026-02-11T11:17:17.085 [DEBUG] [Thread-128001] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:17:17.104 [DEBUG] [Thread-128001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:17:17.105 [DEBUG] [Thread-128001] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:17:17.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:17:17.106 [DEBUG] [Thread-128001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:17:17.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:17:17.108 [DEBUG] [Thread-128001] [transport.py] [_log()] userauth is OK
2026-02-11T11:17:17.109 [DEBUG] [Thread-128001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:17:17.109 [DEBUG] [Thread-128001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:17:17.109 [DEBUG] [Thread-128001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:17:17.109 [DEBUG] [Thread-128001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:17:17.144 [INFO] [Thread-128001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:17:17.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:17:17.723 [DEBUG] [Thread-128001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:17:17.723 [DEBUG] [Thread-128001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:17:17.724 [DEBUG] [Thread-128001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:17:17.764 [DEBUG] [Thread-128001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:17:17.764 [DEBUG] [Thread-128001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:17:17.767 [DEBUG] [Thread-128001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:17:17.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:17:17.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:17:17.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:17:17.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:17:17.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:17:17.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:17:17.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:17:17.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:17:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:17:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.386603 -999.00  +22.20  13.44     49  +11.00 1 2 1 1 1   888    0 10.61 -12.96 ----- 13.7 13.4 294.2 16.0 28.8 -14.2 28.1 -12.2 26.5 -13.8 27.6 -12.4
2026-02-11T11:17:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:17:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:17:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.386603
2026-02-11T11:17:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:17:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:17:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:17:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:17:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:17:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:16:54', tmtdew=13.89, humidity=40.91, cloud=0.0, wind=15.12, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:16:42.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:17:17.791 [DEBUG] [Thread-128001] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:17:17.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:17:17.880 [DEBUG] [Thread-128004] [transport.py] [_log()] starting thread (client mode): 0xa5758e80
2026-02-11T11:17:17.880 [DEBUG] [Thread-128004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:17:17.895 [DEBUG] [Thread-128004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:17:17.895 [INFO] [Thread-128004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:17:17.902 [DEBUG] [Thread-128004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:17:17.902 [DEBUG] [Thread-128004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:17:17.902 [DEBUG] [Thread-128004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:17:17.902 [DEBUG] [Thread-128004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:17.902 [DEBUG] [Thread-128004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] client lang: <none>
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] server lang: <none>
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] kex follows: False
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] Compression: none
2026-02-11T11:17:17.903 [DEBUG] [Thread-128004] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:17:17.958 [DEBUG] [Thread-128004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:17:17.959 [DEBUG] [Thread-128004] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:17:17.959 [DEBUG] [Thread-128004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:17:17.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:17:17.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:17:18.015 [DEBUG] [Thread-128004] [transport.py] [_log()] userauth is OK
2026-02-11T11:17:18.015 [DEBUG] [Thread-128004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:17:18.015 [DEBUG] [Thread-128004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:17:18.015 [DEBUG] [Thread-128004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:17:18.015 [DEBUG] [Thread-128004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:17:18.038 [INFO] [Thread-128004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:17:18.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:17:18.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:17:18.906 [DEBUG] [Thread-128004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:17:18.907 [DEBUG] [Thread-128004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:17:18.955 [DEBUG] [Thread-128004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:17:18.955 [DEBUG] [Thread-128004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:17:18.963 [DEBUG] [Thread-128004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:17:18.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:17:18.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:17:18.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:17:18.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:17:18.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:17:18.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:17:18.996 [DEBUG] [Thread-128004] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:17:28.567 [DEBUG] [Thread-128006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:17:43.621 [DEBUG] [Thread-128007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:17:48.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:17:48.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:17:48.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:17:51.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 17, 29), 13.87, 40.99, 0.0, 21.24, 23.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:17:51.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:17:29
2026-02-11T11:17:51.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:17:51.677 [DEBUG] [Thread-128008] [transport.py] [_log()] starting thread (client mode): 0xa57c3040
2026-02-11T11:17:51.677 [DEBUG] [Thread-128008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:17:51.697 [DEBUG] [Thread-128008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:17:51.697 [INFO] [Thread-128008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:17:51.700 [DEBUG] [Thread-128008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:17:51.700 [DEBUG] [Thread-128008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:17:51.700 [DEBUG] [Thread-128008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:17:51.700 [DEBUG] [Thread-128008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:51.700 [DEBUG] [Thread-128008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] client lang: <none>
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] server lang: <none>
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] kex follows: False
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] Compression: none
2026-02-11T11:17:51.701 [DEBUG] [Thread-128008] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:17:51.719 [DEBUG] [Thread-128008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:17:51.720 [DEBUG] [Thread-128008] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:17:51.720 [DEBUG] [Thread-128008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:17:51.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:17:51.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:17:51.722 [DEBUG] [Thread-128008] [transport.py] [_log()] userauth is OK
2026-02-11T11:17:51.722 [DEBUG] [Thread-128008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:17:51.722 [DEBUG] [Thread-128008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:17:51.723 [DEBUG] [Thread-128008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:17:51.723 [DEBUG] [Thread-128008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:17:51.746 [INFO] [Thread-128008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:17:51.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:17:52.542 [DEBUG] [Thread-128008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:17:52.542 [DEBUG] [Thread-128008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:17:52.542 [DEBUG] [Thread-128008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:17:52.582 [DEBUG] [Thread-128008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:17:52.582 [DEBUG] [Thread-128008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:17:52.585 [DEBUG] [Thread-128008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:17:52.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:17:52.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:17:52.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:17:52.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:17:52.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:17:52.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:17:52.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:17:52.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:17:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:17:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.386950 -999.00  +22.60  18.30     49  +11.40 1 2 1 1 1   888    0 10.52 -9.48 ----- 22.8 18.3 300.6 23.0 29.2 -12.7 28.4 -12.3 27.1 -11.8 27.9 -11.2
2026-02-11T11:17:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:17:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:17:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.386950
2026-02-11T11:17:52.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:17:52.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:17:52.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:17:52.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:17:52.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:17:52.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:17:29', tmtdew=13.87, humidity=40.99, cloud=0.0, wind=21.24, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:17:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:17:52.610 [DEBUG] [Thread-128008] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:17:52.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:17:52.717 [DEBUG] [Thread-128011] [transport.py] [_log()] starting thread (client mode): 0xa2d7a200
2026-02-11T11:17:52.717 [DEBUG] [Thread-128011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:17:52.733 [DEBUG] [Thread-128011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:17:52.733 [INFO] [Thread-128011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:17:52.740 [DEBUG] [Thread-128011] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:17:52.740 [DEBUG] [Thread-128011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] client lang: <none>
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] server lang: <none>
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] kex follows: False
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] Compression: none
2026-02-11T11:17:52.741 [DEBUG] [Thread-128011] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:17:52.798 [DEBUG] [Thread-128011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:17:52.799 [DEBUG] [Thread-128011] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:17:52.799 [DEBUG] [Thread-128011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:17:52.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:17:52.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:17:52.854 [DEBUG] [Thread-128011] [transport.py] [_log()] userauth is OK
2026-02-11T11:17:52.854 [DEBUG] [Thread-128011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:17:52.854 [DEBUG] [Thread-128011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:17:52.854 [DEBUG] [Thread-128011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:17:52.854 [DEBUG] [Thread-128011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:17:52.871 [INFO] [Thread-128011] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:17:52.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:17:52.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:17:53.704 [DEBUG] [Thread-128011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:17:53.705 [DEBUG] [Thread-128011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:17:53.753 [DEBUG] [Thread-128011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:17:53.753 [DEBUG] [Thread-128011] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:17:53.762 [DEBUG] [Thread-128011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:17:53.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:17:53.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:17:53.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:17:53.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:17:53.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:17:53.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:17:53.799 [DEBUG] [Thread-128011] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:17:57.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:17:57.856 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:17:58.659 [DEBUG] [Thread-128013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:18:10.895 [DEBUG] [Thread-128014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:18:13.712 [DEBUG] [Thread-128015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:18:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:18:23.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:18:23.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:18:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 18, 4), 13.96, 40.79, 0.0, 20.18, 23.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:18:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:18:04
2026-02-11T11:18:26.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:18:26.245 [DEBUG] [Thread-128016] [transport.py] [_log()] starting thread (client mode): 0xa57b1d50
2026-02-11T11:18:26.245 [DEBUG] [Thread-128016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:18:26.266 [DEBUG] [Thread-128016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:18:26.266 [INFO] [Thread-128016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:18:26.269 [DEBUG] [Thread-128016] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] client lang: <none>
2026-02-11T11:18:26.270 [DEBUG] [Thread-128016] [transport.py] [_log()] server lang: <none>
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] kex follows: False
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] Compression: none
2026-02-11T11:18:26.271 [DEBUG] [Thread-128016] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:18:26.289 [DEBUG] [Thread-128016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:18:26.289 [DEBUG] [Thread-128016] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:18:26.289 [DEBUG] [Thread-128016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:18:26.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:18:26.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:18:26.290 [DEBUG] [Thread-128016] [transport.py] [_log()] userauth is OK
2026-02-11T11:18:26.291 [DEBUG] [Thread-128016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:18:26.291 [DEBUG] [Thread-128016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:18:26.291 [DEBUG] [Thread-128016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:18:26.291 [DEBUG] [Thread-128016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:18:26.300 [INFO] [Thread-128016] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:18:26.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:18:26.936 [DEBUG] [Thread-128016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:18:26.936 [DEBUG] [Thread-128016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:18:26.937 [DEBUG] [Thread-128016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:18:26.977 [DEBUG] [Thread-128016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:18:26.978 [DEBUG] [Thread-128016] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:18:26.981 [DEBUG] [Thread-128016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:18:26.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:18:26.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:18:26.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:18:26.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:18:27.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:18:27.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:18:27.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:18:27.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:18:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:18:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.387297 -999.00  +23.10  23.96     47  +11.40 1 2 1 1 1   888    0 10.77 -3.55 ----- 23.7 24.0 284.4 28.3 29.6 -13.1 28.6 -12.4 27.2 -11.2 28.1 -11.3
2026-02-11T11:18:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:18:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:18:27.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.387297
2026-02-11T11:18:27.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:18:27.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:18:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:18:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:18:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:18:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:18:04', tmtdew=13.96, humidity=40.79, cloud=0.0, wind=20.18, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:17:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:18:27.006 [DEBUG] [Thread-128016] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:18:27.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:18:27.112 [DEBUG] [Thread-128019] [transport.py] [_log()] starting thread (client mode): 0xa2dc1030
2026-02-11T11:18:27.112 [DEBUG] [Thread-128019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:18:27.130 [DEBUG] [Thread-128019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:18:27.130 [INFO] [Thread-128019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:18:27.138 [DEBUG] [Thread-128019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] client lang: <none>
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] server lang: <none>
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] kex follows: False
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:18:27.139 [DEBUG] [Thread-128019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:18:27.140 [DEBUG] [Thread-128019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:18:27.140 [DEBUG] [Thread-128019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:18:27.140 [DEBUG] [Thread-128019] [transport.py] [_log()] Compression: none
2026-02-11T11:18:27.140 [DEBUG] [Thread-128019] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:18:27.200 [DEBUG] [Thread-128019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:18:27.200 [DEBUG] [Thread-128019] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:18:27.201 [DEBUG] [Thread-128019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:18:27.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:18:27.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:18:27.261 [DEBUG] [Thread-128019] [transport.py] [_log()] userauth is OK
2026-02-11T11:18:27.261 [DEBUG] [Thread-128019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:18:27.262 [DEBUG] [Thread-128019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:18:27.262 [DEBUG] [Thread-128019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:18:27.262 [DEBUG] [Thread-128019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:18:27.289 [INFO] [Thread-128019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:18:27.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:18:27.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:18:28.118 [DEBUG] [Thread-128019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:18:28.118 [DEBUG] [Thread-128019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:18:28.169 [DEBUG] [Thread-128019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:18:28.169 [DEBUG] [Thread-128019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:18:28.178 [DEBUG] [Thread-128019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:18:28.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:18:28.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:18:28.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:18:28.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:18:28.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:18:28.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:18:28.214 [DEBUG] [Thread-128019] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:18:28.752 [DEBUG] [Thread-128021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:18:43.803 [DEBUG] [Thread-128022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:18:57.997 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:18:57.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:18:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:18:58.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:18:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:18:58.844 [DEBUG] [Thread-128023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:19:00.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 18, 40), 15.7, 36.99, 0.0, 28.93, 25.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:19:00.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:18:40
2026-02-11T11:19:00.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:19:00.693 [DEBUG] [Thread-128024] [transport.py] [_log()] starting thread (client mode): 0xa2dc2110
2026-02-11T11:19:00.693 [DEBUG] [Thread-128024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:19:00.709 [DEBUG] [Thread-128024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:19:00.710 [INFO] [Thread-128024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:19:00.711 [DEBUG] [Thread-128024] [transport.py] [_log()] client lang: <none>
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] server lang: <none>
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] kex follows: False
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] Compression: none
2026-02-11T11:19:00.712 [DEBUG] [Thread-128024] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:19:00.721 [DEBUG] [Thread-128024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:19:00.722 [DEBUG] [Thread-128024] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:19:00.722 [DEBUG] [Thread-128024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:19:00.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:19:00.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:19:00.723 [DEBUG] [Thread-128024] [transport.py] [_log()] userauth is OK
2026-02-11T11:19:00.724 [DEBUG] [Thread-128024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:19:00.724 [DEBUG] [Thread-128024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:19:00.724 [DEBUG] [Thread-128024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:19:00.724 [DEBUG] [Thread-128024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:19:00.740 [INFO] [Thread-128024] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:19:00.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:19:01.366 [DEBUG] [Thread-128024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:19:01.366 [DEBUG] [Thread-128024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:19:01.367 [DEBUG] [Thread-128024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:19:01.407 [DEBUG] [Thread-128024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:19:01.408 [DEBUG] [Thread-128024] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:19:01.411 [DEBUG] [Thread-128024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:19:01.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:19:01.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:19:01.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:19:01.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:19:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:19:01.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:19:01.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:19:01.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:19:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:19:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.387644 -999.00  +23.60  25.63     46  +11.40 1 2 1 1 1   888    0 11.00 4.32 ----- 22.1 25.6 312.4 30.4 29.7 -12.5 28.9 -12.3 27.4 -11.5 28.3 -11.6
2026-02-11T11:19:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:19:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:19:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.387644
2026-02-11T11:19:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:19:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:19:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:19:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:19:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:19:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:18:40', tmtdew=15.7, humidity=36.99, cloud=0.0, wind=28.93, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:18:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:19:01.437 [DEBUG] [Thread-128024] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:19:01.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:19:01.531 [DEBUG] [Thread-128027] [transport.py] [_log()] starting thread (client mode): 0xa2d575e0
2026-02-11T11:19:01.531 [DEBUG] [Thread-128027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:19:01.546 [DEBUG] [Thread-128027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:19:01.546 [INFO] [Thread-128027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] client lang: <none>
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] server lang: <none>
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] kex follows: False
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] Compression: none
2026-02-11T11:19:01.554 [DEBUG] [Thread-128027] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:19:01.618 [DEBUG] [Thread-128027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:19:01.619 [DEBUG] [Thread-128027] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:19:01.619 [DEBUG] [Thread-128027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:19:01.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:19:01.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:19:01.678 [DEBUG] [Thread-128027] [transport.py] [_log()] userauth is OK
2026-02-11T11:19:01.678 [DEBUG] [Thread-128027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:19:01.678 [DEBUG] [Thread-128027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:19:01.678 [DEBUG] [Thread-128027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:19:01.678 [DEBUG] [Thread-128027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:19:01.701 [INFO] [Thread-128027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:19:01.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:19:01.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:19:02.577 [DEBUG] [Thread-128027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:19:02.577 [DEBUG] [Thread-128027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:19:02.626 [DEBUG] [Thread-128027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:19:02.626 [DEBUG] [Thread-128027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:19:02.639 [DEBUG] [Thread-128027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:19:02.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:19:02.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:19:02.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:19:02.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:19:02.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:19:02.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:19:02.676 [DEBUG] [Thread-128027] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:19:10.947 [DEBUG] [Thread-128029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:19:13.881 [DEBUG] [Thread-128030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:19:28.931 [DEBUG] [Thread-128031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:19:32.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:19:32.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:19:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:19:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 19, 15), 14.28, 40.19, 0.0, 19.59, 23.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:19:35.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:19:15
2026-02-11T11:19:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:19:35.649 [DEBUG] [Thread-128032] [transport.py] [_log()] starting thread (client mode): 0xa2dc11e0
2026-02-11T11:19:35.649 [DEBUG] [Thread-128032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:19:35.669 [DEBUG] [Thread-128032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:19:35.670 [INFO] [Thread-128032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:19:35.672 [DEBUG] [Thread-128032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] client lang: <none>
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] server lang: <none>
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] kex follows: False
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] Compression: none
2026-02-11T11:19:35.673 [DEBUG] [Thread-128032] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:19:35.691 [DEBUG] [Thread-128032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:19:35.691 [DEBUG] [Thread-128032] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:19:35.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:19:35.693 [DEBUG] [Thread-128032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:19:35.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:19:35.698 [DEBUG] [Thread-128032] [transport.py] [_log()] userauth is OK
2026-02-11T11:19:35.698 [DEBUG] [Thread-128032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:19:35.698 [DEBUG] [Thread-128032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:19:35.698 [DEBUG] [Thread-128032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:19:35.698 [DEBUG] [Thread-128032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:19:35.730 [INFO] [Thread-128032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:19:35.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:19:36.350 [DEBUG] [Thread-128032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:19:36.350 [DEBUG] [Thread-128032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:19:36.350 [DEBUG] [Thread-128032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:19:36.391 [DEBUG] [Thread-128032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:19:36.392 [DEBUG] [Thread-128032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:19:36.394 [DEBUG] [Thread-128032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:19:36.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:19:36.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:19:36.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:19:36.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:19:36.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:19:36.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:19:36.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:19:36.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:19:36.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:19:36.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.388339 -999.00  +22.60  30.25     47  +11.00 1 2 2 1 1   888    0 11.42 19.99 ----- 26.4 30.2 312.6 32.6 29.8 -19.2 28.7 -17.9 27.3 -16.7 28.1 -18.1
2026-02-11T11:19:36.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:19:36.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:19:36.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.388339
2026-02-11T11:19:36.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:19:36.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:19:36.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:19:36.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:19:36.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:19:36.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:19:15', tmtdew=14.28, humidity=40.19, cloud=0.0, wind=19.59, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:19:12.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:19:36.420 [DEBUG] [Thread-128032] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:19:36.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:19:36.516 [DEBUG] [Thread-128035] [transport.py] [_log()] starting thread (client mode): 0xa57c0100
2026-02-11T11:19:36.516 [DEBUG] [Thread-128035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:19:36.531 [DEBUG] [Thread-128035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:19:36.531 [INFO] [Thread-128035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:19:36.539 [DEBUG] [Thread-128035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:19:36.539 [DEBUG] [Thread-128035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:19:36.539 [DEBUG] [Thread-128035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:19:36.539 [DEBUG] [Thread-128035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:36.539 [DEBUG] [Thread-128035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:19:36.539 [DEBUG] [Thread-128035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] client lang: <none>
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] server lang: <none>
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] kex follows: False
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:19:36.540 [DEBUG] [Thread-128035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:19:36.541 [DEBUG] [Thread-128035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:19:36.541 [DEBUG] [Thread-128035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:19:36.541 [DEBUG] [Thread-128035] [transport.py] [_log()] Compression: none
2026-02-11T11:19:36.541 [DEBUG] [Thread-128035] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:19:36.599 [DEBUG] [Thread-128035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:19:36.600 [DEBUG] [Thread-128035] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:19:36.601 [DEBUG] [Thread-128035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:19:36.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:19:36.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:19:36.658 [DEBUG] [Thread-128035] [transport.py] [_log()] userauth is OK
2026-02-11T11:19:36.658 [DEBUG] [Thread-128035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:19:36.659 [DEBUG] [Thread-128035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:19:36.659 [DEBUG] [Thread-128035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:19:36.659 [DEBUG] [Thread-128035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:19:36.678 [INFO] [Thread-128035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:19:36.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:19:36.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:19:37.566 [DEBUG] [Thread-128035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:19:37.566 [DEBUG] [Thread-128035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:19:37.616 [DEBUG] [Thread-128035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:19:37.617 [DEBUG] [Thread-128035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:19:37.626 [DEBUG] [Thread-128035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:19:37.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:19:37.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:19:37.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:19:37.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:19:37.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:19:37.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:19:37.668 [DEBUG] [Thread-128035] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:19:43.967 [DEBUG] [Thread-128037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:19:58.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:19:58.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:19:59.019 [DEBUG] [Thread-128038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:20:07.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:20:07.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:20:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:20:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 19, 51), 14.09, 40.65, 0.0, 22.02, 23.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:20:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:19:51
2026-02-11T11:20:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:20:10.133 [DEBUG] [Thread-128039] [transport.py] [_log()] starting thread (client mode): 0xa2dc74f0
2026-02-11T11:20:10.142 [DEBUG] [Thread-128039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:20:10.153 [DEBUG] [Thread-128039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:20:10.153 [INFO] [Thread-128039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] client lang: <none>
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] server lang: <none>
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] kex follows: False
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] Compression: none
2026-02-11T11:20:10.155 [DEBUG] [Thread-128039] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:20:10.163 [DEBUG] [Thread-128039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:20:10.163 [DEBUG] [Thread-128039] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:20:10.163 [DEBUG] [Thread-128039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:20:10.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:20:10.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:20:10.164 [DEBUG] [Thread-128039] [transport.py] [_log()] userauth is OK
2026-02-11T11:20:10.164 [DEBUG] [Thread-128039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:20:10.164 [DEBUG] [Thread-128039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:20:10.164 [DEBUG] [Thread-128039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:20:10.164 [DEBUG] [Thread-128039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:20:10.173 [INFO] [Thread-128039] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:20:10.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:20:10.965 [DEBUG] [Thread-128039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:20:10.965 [DEBUG] [Thread-128039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:20:10.965 [DEBUG] [Thread-128039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:20:11.000 [DEBUG] [Thread-128041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:20:11.006 [DEBUG] [Thread-128039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:20:11.006 [DEBUG] [Thread-128039] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:20:11.008 [DEBUG] [Thread-128039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:20:11.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:20:11.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:20:11.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:20:11.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:20:11.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:20:11.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:20:11.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:20:11.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:20:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:20:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.388686 -999.00  +22.40  25.69     49  +11.20 1 2 1 1 1   888    0 11.47 21.20 ----- 25.8 25.7 310.6 30.2 29.2 -18.6 28.2 -18.1 27.0 -17.1 27.8 -17.7
2026-02-11T11:20:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:20:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:20:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.388686
2026-02-11T11:20:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:20:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:20:11.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:20:11.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:20:11.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:20:11.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:19:51', tmtdew=14.09, humidity=40.65, cloud=0.0, wind=22.02, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:19:42.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:20:11.032 [DEBUG] [Thread-128039] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:20:11.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:20:11.121 [DEBUG] [Thread-128043] [transport.py] [_log()] starting thread (client mode): 0xa2df8e50
2026-02-11T11:20:11.121 [DEBUG] [Thread-128043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:20:11.135 [DEBUG] [Thread-128043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:20:11.135 [INFO] [Thread-128043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] client lang: <none>
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] server lang: <none>
2026-02-11T11:20:11.143 [DEBUG] [Thread-128043] [transport.py] [_log()] kex follows: False
2026-02-11T11:20:11.144 [DEBUG] [Thread-128043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:20:11.144 [DEBUG] [Thread-128043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:20:11.144 [DEBUG] [Thread-128043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:20:11.144 [DEBUG] [Thread-128043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:20:11.144 [DEBUG] [Thread-128043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:20:11.144 [DEBUG] [Thread-128043] [transport.py] [_log()] Compression: none
2026-02-11T11:20:11.144 [DEBUG] [Thread-128043] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:20:11.202 [DEBUG] [Thread-128043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:20:11.202 [DEBUG] [Thread-128043] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:20:11.203 [DEBUG] [Thread-128043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:20:11.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:20:11.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:20:11.258 [DEBUG] [Thread-128043] [transport.py] [_log()] userauth is OK
2026-02-11T11:20:11.258 [DEBUG] [Thread-128043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:20:11.258 [DEBUG] [Thread-128043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:20:11.258 [DEBUG] [Thread-128043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:20:11.258 [DEBUG] [Thread-128043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:20:11.276 [INFO] [Thread-128043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:20:11.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:20:11.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:20:12.117 [DEBUG] [Thread-128043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:20:12.117 [DEBUG] [Thread-128043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:20:12.168 [DEBUG] [Thread-128043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:20:12.168 [DEBUG] [Thread-128043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:20:12.179 [DEBUG] [Thread-128043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:20:12.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:20:12.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:20:12.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:20:12.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:20:12.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:20:12.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:20:12.229 [DEBUG] [Thread-128043] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:20:14.055 [DEBUG] [Thread-128045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:20:29.104 [DEBUG] [Thread-128046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:20:42.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:20:42.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:20: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
2026-02-11T11:20:44.143 [DEBUG] [Thread-128047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:20:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 20, 26), 14.11, 40.57, 0.0, 21.98, 23.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:20:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:20:26
2026-02-11T11:20:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:20:44.757 [DEBUG] [Thread-128048] [transport.py] [_log()] starting thread (client mode): 0xa2dc45b0
2026-02-11T11:20:44.757 [DEBUG] [Thread-128048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:20:44.778 [DEBUG] [Thread-128048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:20:44.778 [INFO] [Thread-128048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] client lang: <none>
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] server lang: <none>
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] kex follows: False
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] Compression: none
2026-02-11T11:20:44.779 [DEBUG] [Thread-128048] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:20:44.787 [DEBUG] [Thread-128048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:20:44.788 [DEBUG] [Thread-128048] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:20:44.788 [DEBUG] [Thread-128048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:20:44.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:20:44.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:20:44.789 [DEBUG] [Thread-128048] [transport.py] [_log()] userauth is OK
2026-02-11T11:20:44.790 [DEBUG] [Thread-128048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:20:44.790 [DEBUG] [Thread-128048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:20:44.790 [DEBUG] [Thread-128048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:20:44.790 [DEBUG] [Thread-128048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:20:44.807 [INFO] [Thread-128048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:20:44.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:20:45.594 [DEBUG] [Thread-128048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:20:45.595 [DEBUG] [Thread-128048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:20:45.595 [DEBUG] [Thread-128048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:20:45.635 [DEBUG] [Thread-128048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:20:45.635 [DEBUG] [Thread-128048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:20:45.639 [DEBUG] [Thread-128048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:20:45.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:20:45.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:20:45.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:20:45.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:20:45.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:20:45.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:20:45.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:20:45.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:20:45.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:20:45.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.389033 -999.00  +22.60  20.37     48  +11.30 1 2 1 1 1   888    0 11.86 21.25 ----- 25.6 20.4 299.2 33.0 28.8 -18.6 28.0 -17.6 26.9 -18.0 27.5 -18.2
2026-02-11T11:20:45.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:20:45.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:20:45.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.389033
2026-02-11T11:20:45.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:20:45.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:20:45.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:20:45.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:20:45.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:20:45.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:20:26', tmtdew=14.11, humidity=40.57, cloud=0.0, wind=21.98, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:20:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:20:45.659 [DEBUG] [Thread-128048] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:20:45.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:20:45.755 [DEBUG] [Thread-128051] [transport.py] [_log()] starting thread (client mode): 0xa2d55b40
2026-02-11T11:20:45.755 [DEBUG] [Thread-128051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:20:45.770 [DEBUG] [Thread-128051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:20:45.770 [INFO] [Thread-128051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:20:45.778 [DEBUG] [Thread-128051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:20:45.778 [DEBUG] [Thread-128051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] client lang: <none>
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] server lang: <none>
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] kex follows: False
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] Compression: none
2026-02-11T11:20:45.779 [DEBUG] [Thread-128051] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:20:45.837 [DEBUG] [Thread-128051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:20:45.838 [DEBUG] [Thread-128051] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:20:45.838 [DEBUG] [Thread-128051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:20:45.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:20:45.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:20:45.893 [DEBUG] [Thread-128051] [transport.py] [_log()] userauth is OK
2026-02-11T11:20:45.893 [DEBUG] [Thread-128051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:20:45.894 [DEBUG] [Thread-128051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:20:45.894 [DEBUG] [Thread-128051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:20:45.894 [DEBUG] [Thread-128051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:20:45.915 [INFO] [Thread-128051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:20:45.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:20:45.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:20:46.826 [DEBUG] [Thread-128051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:20:46.826 [DEBUG] [Thread-128051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:20:46.874 [DEBUG] [Thread-128051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:20:46.875 [DEBUG] [Thread-128051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:20:46.887 [DEBUG] [Thread-128051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:20:46.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:20:46.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:20:46.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:20:46.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:20:46.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:20:46.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:20:46.930 [DEBUG] [Thread-128051] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:20:58.284 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:20:58.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:20:59.180 [DEBUG] [Thread-128053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:21:11.045 [DEBUG] [Thread-128054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:21:14.234 [DEBUG] [Thread-128055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:21:16.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:21:16.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:21:16.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:21:18.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 21, 1), 13.95, 40.97, 0.0, 20.61, 22.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:21:18.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:21:01
2026-02-11T11:21:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:21:19.269 [DEBUG] [Thread-128056] [transport.py] [_log()] starting thread (client mode): 0xa2d55e70
2026-02-11T11:21:19.269 [DEBUG] [Thread-128056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:21:19.289 [DEBUG] [Thread-128056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:21:19.289 [INFO] [Thread-128056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:21:19.292 [DEBUG] [Thread-128056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] client lang: <none>
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] server lang: <none>
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] kex follows: False
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] Compression: none
2026-02-11T11:21:19.293 [DEBUG] [Thread-128056] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:21:19.310 [DEBUG] [Thread-128056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:21:19.311 [DEBUG] [Thread-128056] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:21:19.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:21:19.311 [DEBUG] [Thread-128056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:21:19.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:21:19.314 [DEBUG] [Thread-128056] [transport.py] [_log()] userauth is OK
2026-02-11T11:21:19.314 [DEBUG] [Thread-128056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:21:19.314 [DEBUG] [Thread-128056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:21:19.314 [DEBUG] [Thread-128056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:21:19.314 [DEBUG] [Thread-128056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:21:19.349 [INFO] [Thread-128056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:21:19.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:21:20.005 [DEBUG] [Thread-128056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:21:20.005 [DEBUG] [Thread-128056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:21:20.005 [DEBUG] [Thread-128056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:21:20.045 [DEBUG] [Thread-128056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:21:20.046 [DEBUG] [Thread-128056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:21:20.049 [DEBUG] [Thread-128056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:21:20.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:21:20.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:21:20.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:21:20.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:21:20.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:21:20.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:21:20.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:21:20.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:21:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:21:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.389375 -999.00  +22.60  21.69     48  +11.20 1 2 1 1 1   888    0 11.65 24.23 ----- 21.8 21.7 299.0 28.9 28.4 -19.1 27.8 -17.3 26.7 -17.5 27.4 -18.0
2026-02-11T11:21:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:21:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:21:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.389375
2026-02-11T11:21:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:21:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:21:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:21:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:21:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:21:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:21:01', tmtdew=13.95, humidity=40.97, cloud=0.0, wind=20.61, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:20:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:21:20.078 [DEBUG] [Thread-128056] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:21:20.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:21:20.173 [DEBUG] [Thread-128059] [transport.py] [_log()] starting thread (client mode): 0xa2d56740
2026-02-11T11:21:20.174 [DEBUG] [Thread-128059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:21:20.188 [DEBUG] [Thread-128059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:21:20.188 [INFO] [Thread-128059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] client lang: <none>
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] server lang: <none>
2026-02-11T11:21:20.195 [DEBUG] [Thread-128059] [transport.py] [_log()] kex follows: False
2026-02-11T11:21:20.196 [DEBUG] [Thread-128059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:21:20.196 [DEBUG] [Thread-128059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:21:20.196 [DEBUG] [Thread-128059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:21:20.196 [DEBUG] [Thread-128059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:21:20.196 [DEBUG] [Thread-128059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:21:20.196 [DEBUG] [Thread-128059] [transport.py] [_log()] Compression: none
2026-02-11T11:21:20.196 [DEBUG] [Thread-128059] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:21:20.252 [DEBUG] [Thread-128059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:21:20.252 [DEBUG] [Thread-128059] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:21:20.252 [DEBUG] [Thread-128059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:21:20.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:21:20.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:21:20.308 [DEBUG] [Thread-128059] [transport.py] [_log()] userauth is OK
2026-02-11T11:21:20.308 [DEBUG] [Thread-128059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:21:20.308 [DEBUG] [Thread-128059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:21:20.308 [DEBUG] [Thread-128059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:21:20.308 [DEBUG] [Thread-128059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:21:20.323 [INFO] [Thread-128059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:21:20.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:21:20.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:21:21.139 [DEBUG] [Thread-128059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:21:21.139 [DEBUG] [Thread-128059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:21:21.187 [DEBUG] [Thread-128059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:21:21.187 [DEBUG] [Thread-128059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:21:21.196 [DEBUG] [Thread-128059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:21:21.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:21:21.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')
2026-02-11T11:21:21.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:21:21.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:21:21.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:21:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:21:21.234 [DEBUG] [Thread-128059] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:21:29.270 [DEBUG] [Thread-128061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:21:44.321 [DEBUG] [Thread-128062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:21:51.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:21:51.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:21:51.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:21:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 21, 36), 13.79, 41.46, 0.0, 19.73, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:21:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:21:36
2026-02-11T11:21:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:21:53.803 [DEBUG] [Thread-128063] [transport.py] [_log()] starting thread (client mode): 0xa2d79f60
2026-02-11T11:21:53.803 [DEBUG] [Thread-128063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:21:53.824 [DEBUG] [Thread-128063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:21:53.825 [INFO] [Thread-128063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] client lang: <none>
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] server lang: <none>
2026-02-11T11:21:53.827 [DEBUG] [Thread-128063] [transport.py] [_log()] kex follows: False
2026-02-11T11:21:53.828 [DEBUG] [Thread-128063] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:21:53.828 [DEBUG] [Thread-128063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:21:53.828 [DEBUG] [Thread-128063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:21:53.828 [DEBUG] [Thread-128063] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:21:53.828 [DEBUG] [Thread-128063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:21:53.828 [DEBUG] [Thread-128063] [transport.py] [_log()] Compression: none
2026-02-11T11:21:53.828 [DEBUG] [Thread-128063] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:21:53.846 [DEBUG] [Thread-128063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:21:53.847 [DEBUG] [Thread-128063] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:21:53.847 [DEBUG] [Thread-128063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:21:53.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:21:53.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:21:53.849 [DEBUG] [Thread-128063] [transport.py] [_log()] userauth is OK
2026-02-11T11:21:53.849 [DEBUG] [Thread-128063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:21:53.850 [DEBUG] [Thread-128063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:21:53.850 [DEBUG] [Thread-128063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:21:53.850 [DEBUG] [Thread-128063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:21:53.873 [INFO] [Thread-128063] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:21:53.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:21:54.550 [DEBUG] [Thread-128063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:21:54.550 [DEBUG] [Thread-128063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:21:54.551 [DEBUG] [Thread-128063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:21:54.591 [DEBUG] [Thread-128063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:21:54.592 [DEBUG] [Thread-128063] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:21:54.595 [DEBUG] [Thread-128063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:21:54.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:21:54.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:21:54.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:21:54.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:21:54.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:21:54.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:21:54.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:21:54.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:21:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:21:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.389728 -999.00  +22.40  26.81     49  +11.20 1 2 1 1 1   888    0 11.79 24.00 ----- 26.9 26.8 309.8 30.9 28.1 -18.8 27.6 -16.5 26.6 -17.0 27.2 -18.7
2026-02-11T11:21:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:21:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:21:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.389728
2026-02-11T11:21:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:21:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:21:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:21:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:21:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:21:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:21:36', tmtdew=13.79, humidity=41.46, cloud=0.0, wind=19.73, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:21:12.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:21:54.621 [DEBUG] [Thread-128063] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:21:54.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:21:54.727 [DEBUG] [Thread-128066] [transport.py] [_log()] starting thread (client mode): 0xa2d799c0
2026-02-11T11:21:54.727 [DEBUG] [Thread-128066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:21:54.745 [DEBUG] [Thread-128066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:21:54.745 [INFO] [Thread-128066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:21:54.752 [DEBUG] [Thread-128066] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] client lang: <none>
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] server lang: <none>
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] kex follows: False
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:21:54.753 [DEBUG] [Thread-128066] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:21:54.754 [DEBUG] [Thread-128066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:21:54.754 [DEBUG] [Thread-128066] [transport.py] [_log()] Compression: none
2026-02-11T11:21:54.754 [DEBUG] [Thread-128066] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:21:54.812 [DEBUG] [Thread-128066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:21:54.813 [DEBUG] [Thread-128066] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:21:54.814 [DEBUG] [Thread-128066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:21:54.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:21:54.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:21:54.868 [DEBUG] [Thread-128066] [transport.py] [_log()] userauth is OK
2026-02-11T11:21:54.868 [DEBUG] [Thread-128066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:21:54.869 [DEBUG] [Thread-128066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:21:54.869 [DEBUG] [Thread-128066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:21:54.869 [DEBUG] [Thread-128066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:21:54.889 [INFO] [Thread-128066] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:21:54.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:21:54.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:21:55.754 [DEBUG] [Thread-128066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:21:55.754 [DEBUG] [Thread-128066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:21:55.801 [DEBUG] [Thread-128066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:21:55.802 [DEBUG] [Thread-128066] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:21:55.811 [DEBUG] [Thread-128066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:21:55.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:21:55.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:21:55.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:21:55.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:21:55.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:21:55.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:21:55.847 [DEBUG] [Thread-128066] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:21:58.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:21:58.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:21:59.362 [DEBUG] [Thread-128068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:22:11.086 [DEBUG] [Thread-128069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:22:14.415 [DEBUG] [Thread-128070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:22:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:22:25.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:22:25.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:22:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 22, 11), 13.1, 43.12, 0.0, 26.03, 22.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:22:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:22:11
2026-02-11T11:22:28.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:22:28.214 [DEBUG] [Thread-128071] [transport.py] [_log()] starting thread (client mode): 0xa2d79c90
2026-02-11T11:22:28.214 [DEBUG] [Thread-128071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:22:28.234 [DEBUG] [Thread-128071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:22:28.234 [INFO] [Thread-128071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] client lang: <none>
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] server lang: <none>
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] kex follows: False
2026-02-11T11:22:28.237 [DEBUG] [Thread-128071] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:22:28.238 [DEBUG] [Thread-128071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:22:28.238 [DEBUG] [Thread-128071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:22:28.238 [DEBUG] [Thread-128071] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:22:28.238 [DEBUG] [Thread-128071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:22:28.238 [DEBUG] [Thread-128071] [transport.py] [_log()] Compression: none
2026-02-11T11:22:28.238 [DEBUG] [Thread-128071] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:22:28.255 [DEBUG] [Thread-128071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:22:28.255 [DEBUG] [Thread-128071] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:22:28.256 [DEBUG] [Thread-128071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:22:28.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:22:28.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:22:28.258 [DEBUG] [Thread-128071] [transport.py] [_log()] userauth is OK
2026-02-11T11:22:28.258 [DEBUG] [Thread-128071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:22:28.258 [DEBUG] [Thread-128071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:22:28.258 [DEBUG] [Thread-128071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:22:28.258 [DEBUG] [Thread-128071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:22:28.295 [INFO] [Thread-128071] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:22:28.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:22:28.963 [DEBUG] [Thread-128071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:22:28.964 [DEBUG] [Thread-128071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:22:28.964 [DEBUG] [Thread-128071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:22:29.004 [DEBUG] [Thread-128071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:22:29.005 [DEBUG] [Thread-128071] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:22:29.008 [DEBUG] [Thread-128071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:22:29.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:22:29.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:22:29.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:22:29.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:22:29.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:22:29.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:22:29.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:22:29.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:22:29.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:22:29.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.390075 -999.00  +22.30  19.68     49  +11.10 1 2 1 1 1   888    0 11.76 24.23 ----- 20.1 19.7 308.4 27.9 27.9 -18.6 27.4 -17.0 26.4 -17.9 27.0 -18.8
2026-02-11T11:22:29.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:22:29.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:22:29.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.390075
2026-02-11T11:22:29.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:22:29.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:22:29.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:22:29.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:22:29.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:22:29.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:22:11', tmtdew=13.1, humidity=43.12, cloud=0.0, wind=26.03, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:21:42.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:22:29.035 [DEBUG] [Thread-128071] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:22:29.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:22:29.130 [DEBUG] [Thread-128074] [transport.py] [_log()] starting thread (client mode): 0xa2d55f90
2026-02-11T11:22:29.130 [DEBUG] [Thread-128074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:22:29.145 [DEBUG] [Thread-128074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:22:29.145 [INFO] [Thread-128074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:22:29.153 [DEBUG] [Thread-128074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:22:29.153 [DEBUG] [Thread-128074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:22:29.153 [DEBUG] [Thread-128074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:22:29.153 [DEBUG] [Thread-128074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] client lang: <none>
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] server lang: <none>
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] kex follows: False
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:22:29.154 [DEBUG] [Thread-128074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:22:29.155 [DEBUG] [Thread-128074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:22:29.155 [DEBUG] [Thread-128074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:22:29.155 [DEBUG] [Thread-128074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:22:29.155 [DEBUG] [Thread-128074] [transport.py] [_log()] Compression: none
2026-02-11T11:22:29.155 [DEBUG] [Thread-128074] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:22:29.213 [DEBUG] [Thread-128074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:22:29.214 [DEBUG] [Thread-128074] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:22:29.214 [DEBUG] [Thread-128074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:22:29.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:22:29.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:22:29.272 [DEBUG] [Thread-128074] [transport.py] [_log()] userauth is OK
2026-02-11T11:22:29.273 [DEBUG] [Thread-128074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:22:29.273 [DEBUG] [Thread-128074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:22:29.273 [DEBUG] [Thread-128074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:22:29.273 [DEBUG] [Thread-128074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:22:29.292 [INFO] [Thread-128074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:22:29.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:22:29.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:22:29.452 [DEBUG] [Thread-128076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:22:30.137 [DEBUG] [Thread-128074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:22:30.137 [DEBUG] [Thread-128074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:22:30.185 [DEBUG] [Thread-128074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:22:30.186 [DEBUG] [Thread-128074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:22:30.195 [DEBUG] [Thread-128074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:22:30.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:22:30.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:22:30.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:22:30.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:22:30.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:22:30.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:22:30.232 [DEBUG] [Thread-128074] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:22:44.507 [DEBUG] [Thread-128077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:22:58.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:22:58.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:22:59.545 [DEBUG] [Thread-128078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:23:00.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:23:00.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:23: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
2026-02-11T11:23:02.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 22, 46), 13.06, 43.58, 0.0, 14.36, 22.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:23:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:22:46
2026-02-11T11:23:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:23:02.570 [DEBUG] [Thread-128079] [transport.py] [_log()] starting thread (client mode): 0xa2d55b40
2026-02-11T11:23:02.570 [DEBUG] [Thread-128079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:23:02.591 [DEBUG] [Thread-128079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:23:02.591 [INFO] [Thread-128079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:23:02.594 [DEBUG] [Thread-128079] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:23:02.594 [DEBUG] [Thread-128079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:23:02.594 [DEBUG] [Thread-128079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:23:02.594 [DEBUG] [Thread-128079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:02.594 [DEBUG] [Thread-128079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] client lang: <none>
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] server lang: <none>
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] kex follows: False
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] Compression: none
2026-02-11T11:23:02.595 [DEBUG] [Thread-128079] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:23:02.612 [DEBUG] [Thread-128079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:23:02.613 [DEBUG] [Thread-128079] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:23:02.613 [DEBUG] [Thread-128079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:23:02.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:23:02.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:23:02.616 [DEBUG] [Thread-128079] [transport.py] [_log()] userauth is OK
2026-02-11T11:23:02.616 [DEBUG] [Thread-128079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:23:02.616 [DEBUG] [Thread-128079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:23:02.616 [DEBUG] [Thread-128079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:23:02.616 [DEBUG] [Thread-128079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:23:02.640 [INFO] [Thread-128079] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:23:02.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:23:03.279 [DEBUG] [Thread-128079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:23:03.279 [DEBUG] [Thread-128079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:23:03.279 [DEBUG] [Thread-128079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:23:03.320 [DEBUG] [Thread-128079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:23:03.320 [DEBUG] [Thread-128079] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:23:03.322 [DEBUG] [Thread-128079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:23:03.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:23:03.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:23:03.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:23:03.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:23:03.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:23:03.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:23:03.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:23:03.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:23:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:23:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.390422 -999.00  +22.30  14.60     48  +11.00 1 2 1 1 1   888    0 11.76 23.31 ----- 14.5 14.6 314.8 21.2 27.7 -19.2 27.2 -17.0 26.2 -17.5 26.9 -18.5
2026-02-11T11:23:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:23:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:23:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.390422
2026-02-11T11:23:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:23:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:23:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:23:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:23:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:23:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:22:46', tmtdew=13.06, humidity=43.58, cloud=0.0, wind=14.36, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:22:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:23:03.345 [DEBUG] [Thread-128079] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:23:03.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:23:03.437 [DEBUG] [Thread-128082] [transport.py] [_log()] starting thread (client mode): 0xa2d565c0
2026-02-11T11:23:03.437 [DEBUG] [Thread-128082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:23:03.453 [DEBUG] [Thread-128082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:23:03.453 [INFO] [Thread-128082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:23:03.462 [DEBUG] [Thread-128082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:23:03.462 [DEBUG] [Thread-128082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:23:03.462 [DEBUG] [Thread-128082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:23:03.462 [DEBUG] [Thread-128082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:03.462 [DEBUG] [Thread-128082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:03.462 [DEBUG] [Thread-128082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] client lang: <none>
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] server lang: <none>
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] kex follows: False
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:23:03.463 [DEBUG] [Thread-128082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:23:03.464 [DEBUG] [Thread-128082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:23:03.464 [DEBUG] [Thread-128082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:23:03.464 [DEBUG] [Thread-128082] [transport.py] [_log()] Compression: none
2026-02-11T11:23:03.464 [DEBUG] [Thread-128082] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:23:03.528 [DEBUG] [Thread-128082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:23:03.529 [DEBUG] [Thread-128082] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:23:03.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:23:03.530 [DEBUG] [Thread-128082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:23:03.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:23:03.592 [DEBUG] [Thread-128082] [transport.py] [_log()] userauth is OK
2026-02-11T11:23:03.592 [DEBUG] [Thread-128082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:23:03.592 [DEBUG] [Thread-128082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:23:03.592 [DEBUG] [Thread-128082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:23:03.592 [DEBUG] [Thread-128082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:23:03.617 [INFO] [Thread-128082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:23:03.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:23:03.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:23:04.456 [DEBUG] [Thread-128082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:23:04.457 [DEBUG] [Thread-128082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:23:04.504 [DEBUG] [Thread-128082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:23:04.504 [DEBUG] [Thread-128082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:23:04.514 [DEBUG] [Thread-128082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:23:04.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:23:04.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:23:04.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:23:04.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:23:04.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:23:04.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:23:04.551 [DEBUG] [Thread-128082] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:23:11.125 [DEBUG] [Thread-128084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:23:14.585 [DEBUG] [Thread-128085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:23:29.648 [DEBUG] [Thread-128086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:23:34.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:23:34.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:23:34.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
2026-02-11T11:23:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 23, 22), 12.99, 43.73, 0.0, 12.63, 22.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:23:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:23:22
2026-02-11T11:23:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:23:37.058 [DEBUG] [Thread-128087] [transport.py] [_log()] starting thread (client mode): 0xa2d00a00
2026-02-11T11:23:37.058 [DEBUG] [Thread-128087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:23:37.078 [DEBUG] [Thread-128087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:23:37.078 [INFO] [Thread-128087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:23:37.082 [DEBUG] [Thread-128087] [transport.py] [_log()] client lang: <none>
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] server lang: <none>
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] kex follows: False
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] Compression: none
2026-02-11T11:23:37.083 [DEBUG] [Thread-128087] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:23:37.100 [DEBUG] [Thread-128087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:23:37.100 [DEBUG] [Thread-128087] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:23:37.101 [DEBUG] [Thread-128087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:23:37.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:23:37.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:23:37.103 [DEBUG] [Thread-128087] [transport.py] [_log()] userauth is OK
2026-02-11T11:23:37.103 [DEBUG] [Thread-128087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:23:37.103 [DEBUG] [Thread-128087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:23:37.103 [DEBUG] [Thread-128087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:23:37.103 [DEBUG] [Thread-128087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:23:37.121 [INFO] [Thread-128087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:23:37.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:23:37.914 [DEBUG] [Thread-128087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:23:37.915 [DEBUG] [Thread-128087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:23:37.915 [DEBUG] [Thread-128087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:23:37.956 [DEBUG] [Thread-128087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:23:37.956 [DEBUG] [Thread-128087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:23:37.958 [DEBUG] [Thread-128087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:23:37.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:23:37.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:23:37.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:23:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:23:37.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:23:37.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:23:37.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:23:37.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:23:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:23:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.391116 -999.00  +22.20   9.26     48  +10.90 1 2 1 1 1   888    0 11.68 25.23 ----- 9.6 9.3 299.8 17.6 27.8 -17.4 27.3 -16.1 26.5 -17.2 26.9 -17.9
2026-02-11T11:23:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:23:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:23:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.391116
2026-02-11T11:23:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:23:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:23:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:23:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:23:37.983 [DEBUG] [Thread-128087] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:23:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:23:37.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:23:22', tmtdew=12.99, humidity=43.73, cloud=0.0, wind=12.63, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:23:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:23:38.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:23:38.077 [DEBUG] [Thread-128090] [transport.py] [_log()] starting thread (client mode): 0xa5759120
2026-02-11T11:23:38.078 [DEBUG] [Thread-128090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:23:38.092 [DEBUG] [Thread-128090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:23:38.092 [INFO] [Thread-128090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:23:38.099 [DEBUG] [Thread-128090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:23:38.100 [DEBUG] [Thread-128090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:23:38.100 [DEBUG] [Thread-128090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:23:38.100 [DEBUG] [Thread-128090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:38.100 [DEBUG] [Thread-128090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:23:38.100 [DEBUG] [Thread-128090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] client lang: <none>
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] server lang: <none>
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] kex follows: False
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:23:38.101 [DEBUG] [Thread-128090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:23:38.102 [DEBUG] [Thread-128090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:23:38.102 [DEBUG] [Thread-128090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:23:38.102 [DEBUG] [Thread-128090] [transport.py] [_log()] Compression: none
2026-02-11T11:23:38.102 [DEBUG] [Thread-128090] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:23:38.159 [DEBUG] [Thread-128090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:23:38.160 [DEBUG] [Thread-128090] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:23:38.160 [DEBUG] [Thread-128090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:23:38.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:23:38.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:23:38.219 [DEBUG] [Thread-128090] [transport.py] [_log()] userauth is OK
2026-02-11T11:23:38.219 [DEBUG] [Thread-128090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:23:38.219 [DEBUG] [Thread-128090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:23:38.219 [DEBUG] [Thread-128090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:23:38.219 [DEBUG] [Thread-128090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:23:38.242 [INFO] [Thread-128090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:23:38.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:23:38.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:23:39.106 [DEBUG] [Thread-128090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:23:39.106 [DEBUG] [Thread-128090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:23:39.154 [DEBUG] [Thread-128090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:23:39.154 [DEBUG] [Thread-128090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:23:39.163 [DEBUG] [Thread-128090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:23:39.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:23:39.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')
2026-02-11T11:23:39.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:23:39.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:23:39.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:23:39.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:23:39.196 [DEBUG] [Thread-128090] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:23:44.686 [DEBUG] [Thread-128092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:23:58.709 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:23:58.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:23:59.739 [DEBUG] [Thread-128093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:24:09.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:24:09.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:24:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:24:11.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 23, 57), 13.15, 42.93, 0.0, 12.51, 22.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:24:11.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:23:57
2026-02-11T11:24:11.157 [DEBUG] [Thread-128094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:24:11.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:24:11.544 [DEBUG] [Thread-128095] [transport.py] [_log()] starting thread (client mode): 0xa2d57d60
2026-02-11T11:24:11.544 [DEBUG] [Thread-128095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:24:11.567 [DEBUG] [Thread-128095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:24:11.567 [INFO] [Thread-128095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:24:11.570 [DEBUG] [Thread-128095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:24:11.571 [DEBUG] [Thread-128095] [transport.py] [_log()] client lang: <none>
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] server lang: <none>
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] kex follows: False
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] Compression: none
2026-02-11T11:24:11.572 [DEBUG] [Thread-128095] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:24:11.589 [DEBUG] [Thread-128095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:24:11.590 [DEBUG] [Thread-128095] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:24:11.590 [DEBUG] [Thread-128095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:24:11.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:24:11.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:24:11.593 [DEBUG] [Thread-128095] [transport.py] [_log()] userauth is OK
2026-02-11T11:24:11.594 [DEBUG] [Thread-128095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:24:11.594 [DEBUG] [Thread-128095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:24:11.594 [DEBUG] [Thread-128095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:24:11.594 [DEBUG] [Thread-128095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:24:11.612 [INFO] [Thread-128095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:24:11.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:24:12.248 [DEBUG] [Thread-128095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:24:12.248 [DEBUG] [Thread-128095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:24:12.249 [DEBUG] [Thread-128095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:24:12.289 [DEBUG] [Thread-128095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:24:12.290 [DEBUG] [Thread-128095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:24:12.293 [DEBUG] [Thread-128095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:24:12.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:24:12.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:24:12.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:24:12.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:24:12.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:24:12.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:24:12.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:24:12.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:24:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:24:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.391464 -999.00  +22.40  10.36     48  +11.00 1 2 1 1 1   888    0 11.74 23.70 ----- 10.4 10.4 296.9 13.6 27.7 -17.6 27.3 -15.4 26.5 -15.9 26.9 -17.6
2026-02-11T11:24:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:24:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:24:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.391464
2026-02-11T11:24:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:24:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:24:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:24:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:24:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:24:12.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:23:57', tmtdew=13.15, humidity=42.93, cloud=0.0, wind=12.51, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:23:42.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:24:12.321 [DEBUG] [Thread-128095] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:24:12.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:24:12.416 [DEBUG] [Thread-128098] [transport.py] [_log()] starting thread (client mode): 0xa2d03910
2026-02-11T11:24:12.416 [DEBUG] [Thread-128098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:24:12.431 [DEBUG] [Thread-128098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:24:12.431 [INFO] [Thread-128098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:24:12.438 [DEBUG] [Thread-128098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:24:12.438 [DEBUG] [Thread-128098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] client lang: <none>
2026-02-11T11:24:12.439 [DEBUG] [Thread-128098] [transport.py] [_log()] server lang: <none>
2026-02-11T11:24:12.440 [DEBUG] [Thread-128098] [transport.py] [_log()] kex follows: False
2026-02-11T11:24:12.440 [DEBUG] [Thread-128098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:24:12.440 [DEBUG] [Thread-128098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:24:12.440 [DEBUG] [Thread-128098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:24:12.440 [DEBUG] [Thread-128098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:24:12.440 [DEBUG] [Thread-128098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:24:12.440 [DEBUG] [Thread-128098] [transport.py] [_log()] Compression: none
2026-02-11T11:24:12.441 [DEBUG] [Thread-128098] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:24:12.496 [DEBUG] [Thread-128098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:24:12.496 [DEBUG] [Thread-128098] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:24:12.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:24:12.498 [DEBUG] [Thread-128098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:24:12.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:24:12.552 [DEBUG] [Thread-128098] [transport.py] [_log()] userauth is OK
2026-02-11T11:24:12.552 [DEBUG] [Thread-128098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:24:12.552 [DEBUG] [Thread-128098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:24:12.552 [DEBUG] [Thread-128098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:24:12.552 [DEBUG] [Thread-128098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:24:12.571 [INFO] [Thread-128098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:24:12.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:24:12.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:24:13.400 [DEBUG] [Thread-128098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:24:13.401 [DEBUG] [Thread-128098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:24:13.450 [DEBUG] [Thread-128098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:24:13.451 [DEBUG] [Thread-128098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:24:13.462 [DEBUG] [Thread-128098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:24:13.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:24:13.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:24: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') -> 00000000
2026-02-11T11:24:13.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:24:13.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:24:13.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:24:13.507 [DEBUG] [Thread-128098] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:24:14.777 [DEBUG] [Thread-128100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:24:29.827 [DEBUG] [Thread-128101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:24:43.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:24:43.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:24:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:24:44.862 [DEBUG] [Thread-128102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:24:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 24, 32), 13.19, 42.83, 0.0, 13.82, 22.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:24:45.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:24:32
2026-02-11T11:24:45.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:24:45.849 [DEBUG] [Thread-128103] [transport.py] [_log()] starting thread (client mode): 0xa2d03c40
2026-02-11T11:24:45.849 [DEBUG] [Thread-128103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:24:45.868 [DEBUG] [Thread-128103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:24:45.868 [INFO] [Thread-128103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:24:45.871 [DEBUG] [Thread-128103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] client lang: <none>
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] server lang: <none>
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] kex follows: False
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] Compression: none
2026-02-11T11:24:45.872 [DEBUG] [Thread-128103] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:24:45.890 [DEBUG] [Thread-128103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:24:45.890 [DEBUG] [Thread-128103] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:24:45.890 [DEBUG] [Thread-128103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:24:45.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:24:45.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:24:45.892 [DEBUG] [Thread-128103] [transport.py] [_log()] userauth is OK
2026-02-11T11:24:45.892 [DEBUG] [Thread-128103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:24:45.892 [DEBUG] [Thread-128103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:24:45.892 [DEBUG] [Thread-128103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:24:45.892 [DEBUG] [Thread-128103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:24:45.912 [INFO] [Thread-128103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:24:45.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:24:46.551 [DEBUG] [Thread-128103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:24:46.551 [DEBUG] [Thread-128103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:24:46.551 [DEBUG] [Thread-128103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:24:46.592 [DEBUG] [Thread-128103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:24:46.592 [DEBUG] [Thread-128103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:24:46.594 [DEBUG] [Thread-128103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:24:46.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:24:46.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:24:46.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:24:46.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:24:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:24:46.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:24:46.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.391811 -999.00  +22.60  10.33     48  +11.10 1 2 1 1 1   888    0 11.78 24.17 ----- 10.5 10.3 304.2 12.9 27.7 -17.8 27.3 -15.7 26.4 -15.9 26.9 -17.6
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.391811
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:24:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:24:32', tmtdew=13.19, humidity=42.83, cloud=0.0, wind=13.82, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:24:12.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:24:46.621 [DEBUG] [Thread-128103] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:24:46.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:24:46.706 [DEBUG] [Thread-128106] [transport.py] [_log()] starting thread (client mode): 0xa57c2920
2026-02-11T11:24:46.706 [DEBUG] [Thread-128106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:24:46.722 [DEBUG] [Thread-128106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:24:46.722 [INFO] [Thread-128106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] client lang: <none>
2026-02-11T11:24:46.730 [DEBUG] [Thread-128106] [transport.py] [_log()] server lang: <none>
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] kex follows: False
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] Compression: none
2026-02-11T11:24:46.731 [DEBUG] [Thread-128106] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:24:46.790 [DEBUG] [Thread-128106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:24:46.791 [DEBUG] [Thread-128106] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:24:46.791 [DEBUG] [Thread-128106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:24:46.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:24:46.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:24:46.846 [DEBUG] [Thread-128106] [transport.py] [_log()] userauth is OK
2026-02-11T11:24:46.847 [DEBUG] [Thread-128106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:24:46.847 [DEBUG] [Thread-128106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:24:46.847 [DEBUG] [Thread-128106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:24:46.847 [DEBUG] [Thread-128106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:24:46.865 [INFO] [Thread-128106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:24:46.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:24:46.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:24:47.742 [DEBUG] [Thread-128106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:24:47.742 [DEBUG] [Thread-128106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:24:47.790 [DEBUG] [Thread-128106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:24:47.790 [DEBUG] [Thread-128106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:24:47.799 [DEBUG] [Thread-128106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:24:47.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:24:47.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:24:47.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:24:47.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:24:47.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:24:47.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:24:47.835 [DEBUG] [Thread-128106] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:24:58.849 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:24:58.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:24:59.899 [DEBUG] [Thread-128108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:25:11.204 [DEBUG] [Thread-128109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:25:14.947 [DEBUG] [Thread-128110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:25:17.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:25:17.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:25:17.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:25:19.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 25, 7), 13.15, 42.91, 0.0, 9.67, 22.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:25:19.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:25:07
2026-02-11T11:25:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:25:20.209 [DEBUG] [Thread-128111] [transport.py] [_log()] starting thread (client mode): 0xa57c2950
2026-02-11T11:25:20.209 [DEBUG] [Thread-128111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:25:20.230 [DEBUG] [Thread-128111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:25:20.230 [INFO] [Thread-128111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] client lang: <none>
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] server lang: <none>
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] kex follows: False
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] Compression: none
2026-02-11T11:25:20.233 [DEBUG] [Thread-128111] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:25:20.248 [DEBUG] [Thread-128111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:25:20.248 [DEBUG] [Thread-128111] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:25:20.248 [DEBUG] [Thread-128111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:25:20.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:25:20.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:25:20.249 [DEBUG] [Thread-128111] [transport.py] [_log()] userauth is OK
2026-02-11T11:25:20.249 [DEBUG] [Thread-128111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:25:20.249 [DEBUG] [Thread-128111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:25:20.249 [DEBUG] [Thread-128111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:25:20.249 [DEBUG] [Thread-128111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:25:20.264 [INFO] [Thread-128111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:25:20.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:25:20.885 [DEBUG] [Thread-128111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:25:20.885 [DEBUG] [Thread-128111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:25:20.886 [DEBUG] [Thread-128111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:25:20.926 [DEBUG] [Thread-128111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:25:20.927 [DEBUG] [Thread-128111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:25:20.930 [DEBUG] [Thread-128111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:25:20.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:25:20.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:25:20.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:25:20.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:25:20.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:25:20.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:25:20.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:25:20.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:25:20.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:25:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.392158 -999.00  +22.90  15.78     47  +11.20 1 2 1 1 1   888    0 11.86 25.83 ----- 20.1 15.8 288.6 18.2 27.8 -16.1 27.5 -12.4 26.8 -11.6 27.3 -11.4
2026-02-11T11:25:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:25:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:25:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.392158
2026-02-11T11:25:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:25:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:25:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:25:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:25:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:25:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:25:07', tmtdew=13.15, humidity=42.91, cloud=0.0, wind=9.67, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:24:42.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:25:20.958 [DEBUG] [Thread-128111] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:25:21.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:25:21.058 [DEBUG] [Thread-128114] [transport.py] [_log()] starting thread (client mode): 0xa2d78760
2026-02-11T11:25:21.059 [DEBUG] [Thread-128114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:25:21.074 [DEBUG] [Thread-128114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:25:21.074 [INFO] [Thread-128114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:25:21.082 [DEBUG] [Thread-128114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] client lang: <none>
2026-02-11T11:25:21.083 [DEBUG] [Thread-128114] [transport.py] [_log()] server lang: <none>
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] kex follows: False
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] Compression: none
2026-02-11T11:25:21.084 [DEBUG] [Thread-128114] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:25:21.143 [DEBUG] [Thread-128114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:25:21.143 [DEBUG] [Thread-128114] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:25:21.144 [DEBUG] [Thread-128114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:25:21.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:25:21.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:25:21.200 [DEBUG] [Thread-128114] [transport.py] [_log()] userauth is OK
2026-02-11T11:25:21.200 [DEBUG] [Thread-128114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:25:21.201 [DEBUG] [Thread-128114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:25:21.201 [DEBUG] [Thread-128114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:25:21.201 [DEBUG] [Thread-128114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:25:21.220 [INFO] [Thread-128114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:25:21.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:25:21.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:25:22.044 [DEBUG] [Thread-128114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:25:22.044 [DEBUG] [Thread-128114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:25:22.092 [DEBUG] [Thread-128114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:25:22.092 [DEBUG] [Thread-128114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:25:22.101 [DEBUG] [Thread-128114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:25:22.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:25:22.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:25:22.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
2026-02-11T11:25:22.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:25:22.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:25:22.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:25:22.138 [DEBUG] [Thread-128114] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:25:29.979 [DEBUG] [Thread-128116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:25:45.030 [DEBUG] [Thread-128117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:25:52.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:25:52.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:25:52.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:25:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 25, 42), 13.62, 41.83, 0.0, 14.43, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:25:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:25:42
2026-02-11T11:25:55.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:25:55.162 [DEBUG] [Thread-128118] [transport.py] [_log()] starting thread (client mode): 0xa575acb0
2026-02-11T11:25:55.162 [DEBUG] [Thread-128118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:25:55.182 [DEBUG] [Thread-128118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:25:55.182 [INFO] [Thread-128118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] client lang: <none>
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] server lang: <none>
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] kex follows: False
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:25:55.185 [DEBUG] [Thread-128118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:25:55.186 [DEBUG] [Thread-128118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:25:55.186 [DEBUG] [Thread-128118] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:25:55.186 [DEBUG] [Thread-128118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:25:55.186 [DEBUG] [Thread-128118] [transport.py] [_log()] Compression: none
2026-02-11T11:25:55.186 [DEBUG] [Thread-128118] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:25:55.204 [DEBUG] [Thread-128118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:25:55.205 [DEBUG] [Thread-128118] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:25:55.205 [DEBUG] [Thread-128118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:25:55.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:25:55.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:25:55.208 [DEBUG] [Thread-128118] [transport.py] [_log()] userauth is OK
2026-02-11T11:25:55.208 [DEBUG] [Thread-128118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:25:55.208 [DEBUG] [Thread-128118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:25:55.208 [DEBUG] [Thread-128118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:25:55.208 [DEBUG] [Thread-128118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:25:55.232 [INFO] [Thread-128118] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:25:55.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:25:55.847 [DEBUG] [Thread-128118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:25:55.847 [DEBUG] [Thread-128118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:25:55.848 [DEBUG] [Thread-128118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:25:55.889 [DEBUG] [Thread-128118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:25:55.889 [DEBUG] [Thread-128118] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:25:55.892 [DEBUG] [Thread-128118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:25:55.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:25:55.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:25:55.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:25:55.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:25:55.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:25:55.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:25:55.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:25:55.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:25:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:25:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.392505 -999.00  +22.90  26.87     48  +11.30 1 2 1 1 1   888    0 11.72 28.50 ----- 23.2 26.9 321.6 29.3 28.6 -12.5 28.1 -10.5 27.3 -11.1 27.8 -12.1
2026-02-11T11:25:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:25:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:25:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.392505
2026-02-11T11:25:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:25:55.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:25:55.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:25:55.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:25:55.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:25:55.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:25:42', tmtdew=13.62, humidity=41.83, cloud=0.0, wind=14.43, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:25:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:25:55.922 [DEBUG] [Thread-128118] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:25:56.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:25:56.018 [DEBUG] [Thread-128121] [transport.py] [_log()] starting thread (client mode): 0xa5758940
2026-02-11T11:25:56.018 [DEBUG] [Thread-128121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:25:56.032 [DEBUG] [Thread-128121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:25:56.033 [INFO] [Thread-128121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:25:56.040 [DEBUG] [Thread-128121] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:25:56.040 [DEBUG] [Thread-128121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:25:56.041 [DEBUG] [Thread-128121] [transport.py] [_log()] client lang: <none>
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] server lang: <none>
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] kex follows: False
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:25:56.042 [DEBUG] [Thread-128121] [transport.py] [_log()] Compression: none
2026-02-11T11:25:56.043 [DEBUG] [Thread-128121] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:25:56.099 [DEBUG] [Thread-128121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:25:56.100 [DEBUG] [Thread-128121] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:25:56.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:25:56.101 [DEBUG] [Thread-128121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:25:56.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:25:56.159 [DEBUG] [Thread-128121] [transport.py] [_log()] userauth is OK
2026-02-11T11:25:56.159 [DEBUG] [Thread-128121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:25:56.160 [DEBUG] [Thread-128121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:25:56.160 [DEBUG] [Thread-128121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:25:56.160 [DEBUG] [Thread-128121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:25:56.179 [INFO] [Thread-128121] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:25:56.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:25:56.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:25:56.994 [DEBUG] [Thread-128121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:25:56.995 [DEBUG] [Thread-128121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:25:57.045 [DEBUG] [Thread-128121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:25:57.046 [DEBUG] [Thread-128121] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:25:57.057 [DEBUG] [Thread-128121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:25:57.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:25:57.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:25:57.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:25:57.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:25:57.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:25:57.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:25:57.097 [DEBUG] [Thread-128121] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:25:58.990 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:25:58.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:26:00.074 [DEBUG] [Thread-128123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:26:11.238 [DEBUG] [Thread-128124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:26:15.125 [DEBUG] [Thread-128125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:26:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:26:27.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:26:27.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:26:29.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 26, 18), 13.59, 41.97, 0.0, 20.66, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:26:29.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:26:18
2026-02-11T11:26:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:26:29.564 [DEBUG] [Thread-128126] [transport.py] [_log()] starting thread (client mode): 0xa57c0220
2026-02-11T11:26:29.564 [DEBUG] [Thread-128126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:26:29.584 [DEBUG] [Thread-128126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:26:29.584 [INFO] [Thread-128126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:26:29.587 [DEBUG] [Thread-128126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] client lang: <none>
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] server lang: <none>
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] kex follows: False
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] Compression: none
2026-02-11T11:26:29.588 [DEBUG] [Thread-128126] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:26:29.607 [DEBUG] [Thread-128126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:26:29.608 [DEBUG] [Thread-128126] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:26:29.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:26:29.609 [DEBUG] [Thread-128126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:26:29.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:26:29.611 [DEBUG] [Thread-128126] [transport.py] [_log()] userauth is OK
2026-02-11T11:26:29.611 [DEBUG] [Thread-128126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:26:29.611 [DEBUG] [Thread-128126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:26:29.611 [DEBUG] [Thread-128126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:26:29.611 [DEBUG] [Thread-128126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:26:29.636 [INFO] [Thread-128126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:26:29.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:26:30.162 [DEBUG] [Thread-128128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:26:30.413 [DEBUG] [Thread-128126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:26:30.413 [DEBUG] [Thread-128126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:26:30.414 [DEBUG] [Thread-128126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:26:30.455 [DEBUG] [Thread-128126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:26:30.456 [DEBUG] [Thread-128126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:26:30.458 [DEBUG] [Thread-128126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:26:30.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:26:30.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:26:30.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:26:30.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:26:30.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:26:30.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:26:30.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.392853 -999.00  +23.50  21.36     47  +11.70 1 2 1 1 1   888    0 12.33 31.67 ----- 19.4 21.4 305.0 26.2 29.0 -11.7 28.4 -10.5 27.6 -11.1 28.1 -11.9
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.392853
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:26:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:26:30.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:26:30.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:26:30.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:26:30.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:26:18', tmtdew=13.59, humidity=41.97, cloud=0.0, wind=20.66, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:25:42.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:26:30.478 [DEBUG] [Thread-128126] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:26:30.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:26:30.563 [DEBUG] [Thread-128130] [transport.py] [_log()] starting thread (client mode): 0xa2dc2680
2026-02-11T11:26:30.563 [DEBUG] [Thread-128130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:26:30.577 [DEBUG] [Thread-128130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:26:30.578 [INFO] [Thread-128130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:26:30.585 [DEBUG] [Thread-128130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:26:30.585 [DEBUG] [Thread-128130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:26:30.585 [DEBUG] [Thread-128130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] client lang: <none>
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] server lang: <none>
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] kex follows: False
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] Compression: none
2026-02-11T11:26:30.586 [DEBUG] [Thread-128130] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:26:30.642 [DEBUG] [Thread-128130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:26:30.643 [DEBUG] [Thread-128130] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:26:30.643 [DEBUG] [Thread-128130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:26:30.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:26:30.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:26:30.699 [DEBUG] [Thread-128130] [transport.py] [_log()] userauth is OK
2026-02-11T11:26:30.699 [DEBUG] [Thread-128130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:26:30.699 [DEBUG] [Thread-128130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:26:30.699 [DEBUG] [Thread-128130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:26:30.699 [DEBUG] [Thread-128130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:26:30.719 [INFO] [Thread-128130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:26:30.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:26:30.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:26:31.558 [DEBUG] [Thread-128130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:26:31.558 [DEBUG] [Thread-128130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:26:31.606 [DEBUG] [Thread-128130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:26:31.606 [DEBUG] [Thread-128130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:26:31.616 [DEBUG] [Thread-128130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:26:31.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:26:31.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:26:31.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:26:31.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:26:31.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:26:31.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:26:31.652 [DEBUG] [Thread-128130] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:26:45.198 [DEBUG] [Thread-128132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:26:59.131 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:26:59.141 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:27:00.249 [DEBUG] [Thread-128133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:27:01.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:27:01.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:27:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:27:03.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 26, 53), 13.85, 41.23, 0.0, 18.3, 23.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:27:03.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:26:53
2026-02-11T11:27:03.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:27:03.963 [DEBUG] [Thread-128134] [transport.py] [_log()] starting thread (client mode): 0xa2dc0ca0
2026-02-11T11:27:03.963 [DEBUG] [Thread-128134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:27:03.983 [DEBUG] [Thread-128134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:27:03.983 [INFO] [Thread-128134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:27:03.986 [DEBUG] [Thread-128134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] client lang: <none>
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] server lang: <none>
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] kex follows: False
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] Compression: none
2026-02-11T11:27:03.987 [DEBUG] [Thread-128134] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:27:04.002 [DEBUG] [Thread-128134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:27:04.002 [DEBUG] [Thread-128134] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:27:04.002 [DEBUG] [Thread-128134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:27:04.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:27:04.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:27:04.046 [DEBUG] [Thread-128134] [transport.py] [_log()] userauth is OK
2026-02-11T11:27:04.047 [DEBUG] [Thread-128134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:27:04.047 [DEBUG] [Thread-128134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:27:04.047 [DEBUG] [Thread-128134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:27:04.047 [DEBUG] [Thread-128134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:27:04.084 [INFO] [Thread-128134] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:27:04.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:27:04.735 [DEBUG] [Thread-128134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:27:04.736 [DEBUG] [Thread-128134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:27:04.736 [DEBUG] [Thread-128134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:27:04.776 [DEBUG] [Thread-128134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:27:04.776 [DEBUG] [Thread-128134] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:27:04.779 [DEBUG] [Thread-128134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:27:04.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:27:04.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:27:04.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:27:04.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:27:04.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:27:04.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:27:04.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:27:04.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:27:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:27:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.393200 -999.00  +23.50  31.46     46  +11.40 1 2 2 1 1   888    0 12.33 35.87 ----- 30.4 31.5 293.2 33.5 29.3 -13.2 28.7 -11.1 27.7 -11.0 28.4 -12.0
2026-02-11T11:27:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:27:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:27:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.393200
2026-02-11T11:27:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:27:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:27:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:27:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:27:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:27:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:26:53', tmtdew=13.85, humidity=41.23, cloud=0.0, wind=18.3, temperature=23.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:26:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:27:04.810 [DEBUG] [Thread-128134] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:27:04.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:27:04.904 [DEBUG] [Thread-128137] [transport.py] [_log()] starting thread (client mode): 0xa575bd60
2026-02-11T11:27:04.904 [DEBUG] [Thread-128137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:27:04.918 [DEBUG] [Thread-128137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:27:04.919 [INFO] [Thread-128137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] client lang: <none>
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] server lang: <none>
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] kex follows: False
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:27:04.926 [DEBUG] [Thread-128137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:27:04.927 [DEBUG] [Thread-128137] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:27:04.927 [DEBUG] [Thread-128137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:27:04.927 [DEBUG] [Thread-128137] [transport.py] [_log()] Compression: none
2026-02-11T11:27:04.927 [DEBUG] [Thread-128137] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:27:04.986 [DEBUG] [Thread-128137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:27:04.987 [DEBUG] [Thread-128137] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:27:04.987 [DEBUG] [Thread-128137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:27:04.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:27:04.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:27:05.041 [DEBUG] [Thread-128137] [transport.py] [_log()] userauth is OK
2026-02-11T11:27:05.042 [DEBUG] [Thread-128137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:27:05.042 [DEBUG] [Thread-128137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:27:05.042 [DEBUG] [Thread-128137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:27:05.042 [DEBUG] [Thread-128137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:27:05.061 [INFO] [Thread-128137] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:27:05.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:27:05.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:27:05.907 [DEBUG] [Thread-128137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:27:05.907 [DEBUG] [Thread-128137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:27:05.955 [DEBUG] [Thread-128137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:27:05.955 [DEBUG] [Thread-128137] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:27:05.964 [DEBUG] [Thread-128137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:27:05.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:27:05.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:27:05.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:27:05.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:27:05.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:27:05.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:27:05.998 [DEBUG] [Thread-128137] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:27:11.276 [DEBUG] [Thread-128139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:27:15.286 [DEBUG] [Thread-128140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:27:30.336 [DEBUG] [Thread-128141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:27:36.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:27:36.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:27:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:27:37.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 27, 28), 14.34, 40.04, 0.0, 21.38, 23.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:27:37.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:27:28
2026-02-11T11:27:38.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:27:38.494 [DEBUG] [Thread-128142] [transport.py] [_log()] starting thread (client mode): 0xa57c1f90
2026-02-11T11:27:38.494 [DEBUG] [Thread-128142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:27:38.516 [DEBUG] [Thread-128142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:27:38.517 [INFO] [Thread-128142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] client lang: <none>
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] server lang: <none>
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] kex follows: False
2026-02-11T11:27:38.519 [DEBUG] [Thread-128142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:27:38.520 [DEBUG] [Thread-128142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:27:38.520 [DEBUG] [Thread-128142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:27:38.520 [DEBUG] [Thread-128142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:27:38.520 [DEBUG] [Thread-128142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:27:38.520 [DEBUG] [Thread-128142] [transport.py] [_log()] Compression: none
2026-02-11T11:27:38.520 [DEBUG] [Thread-128142] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:27:38.528 [DEBUG] [Thread-128142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:27:38.528 [DEBUG] [Thread-128142] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:27:38.528 [DEBUG] [Thread-128142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:27:38.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:27:38.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:27:38.530 [DEBUG] [Thread-128142] [transport.py] [_log()] userauth is OK
2026-02-11T11:27:38.530 [DEBUG] [Thread-128142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:27:38.530 [DEBUG] [Thread-128142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:27:38.530 [DEBUG] [Thread-128142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:27:38.530 [DEBUG] [Thread-128142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:27:38.543 [INFO] [Thread-128142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:27:38.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:27:39.127 [DEBUG] [Thread-128142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:27:39.128 [DEBUG] [Thread-128142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:27:39.128 [DEBUG] [Thread-128142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:27:39.169 [DEBUG] [Thread-128142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:27:39.169 [DEBUG] [Thread-128142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:27:39.172 [DEBUG] [Thread-128142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:27:39.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:27:39.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:27:39.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:27:39.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:27:39.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:27:39.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:27:39.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:27:39.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:27:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:27:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.393547 -999.00  +23.10  24.47     47  +11.40 1 2 1 1 1   888    0 12.25 38.56 ----- 22.7 24.5 301.0 29.6 29.5 -13.7 28.9 -11.7 27.7 -12.7 28.5 -12.5
2026-02-11T11:27:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:27:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:27:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.393547
2026-02-11T11:27:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:27:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:27:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:27:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:27:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:27:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:27:28', tmtdew=14.34, humidity=40.04, cloud=0.0, wind=21.38, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:26:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:27:39.193 [DEBUG] [Thread-128142] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:27:39.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:27:39.277 [DEBUG] [Thread-128145] [transport.py] [_log()] starting thread (client mode): 0xa2d92800
2026-02-11T11:27:39.277 [DEBUG] [Thread-128145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:27:39.291 [DEBUG] [Thread-128145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:27:39.292 [INFO] [Thread-128145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] client lang: <none>
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] server lang: <none>
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] kex follows: False
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] Compression: none
2026-02-11T11:27:39.299 [DEBUG] [Thread-128145] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:27:39.356 [DEBUG] [Thread-128145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:27:39.356 [DEBUG] [Thread-128145] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:27:39.356 [DEBUG] [Thread-128145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:27:39.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:27:39.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:27:39.413 [DEBUG] [Thread-128145] [transport.py] [_log()] userauth is OK
2026-02-11T11:27:39.413 [DEBUG] [Thread-128145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:27:39.413 [DEBUG] [Thread-128145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:27:39.413 [DEBUG] [Thread-128145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:27:39.413 [DEBUG] [Thread-128145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:27:39.429 [INFO] [Thread-128145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:27:39.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:27:39.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:27:40.276 [DEBUG] [Thread-128145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:27:40.276 [DEBUG] [Thread-128145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:27:40.324 [DEBUG] [Thread-128145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:27:40.324 [DEBUG] [Thread-128145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:27:40.334 [DEBUG] [Thread-128145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:27:40.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:27:40.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:27:40.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:27:40.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:27:40.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:27:40.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:27:40.371 [DEBUG] [Thread-128145] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:27:45.372 [DEBUG] [Thread-128147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:27:59.281 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:27:59.282 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:28:00.424 [DEBUG] [Thread-128148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:28:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:28:10.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:28:10.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
2026-02-11T11:28:11.334 [DEBUG] [Thread-128149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:28:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 28, 4), 14.31, 40.14, 0.0, 19.76, 23.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:28:12.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:28:04
2026-02-11T11:28:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:28:12.705 [DEBUG] [Thread-128150] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-11T11:28:12.705 [DEBUG] [Thread-128150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:28:12.724 [DEBUG] [Thread-128150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:28:12.724 [INFO] [Thread-128150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:12.727 [DEBUG] [Thread-128150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] client lang: <none>
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] server lang: <none>
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] kex follows: False
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] Compression: none
2026-02-11T11:28:12.728 [DEBUG] [Thread-128150] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:28:12.746 [DEBUG] [Thread-128150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:28:12.746 [DEBUG] [Thread-128150] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:28:12.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:28:12.748 [DEBUG] [Thread-128150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:28:12.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:28:12.750 [DEBUG] [Thread-128150] [transport.py] [_log()] userauth is OK
2026-02-11T11:28:12.750 [DEBUG] [Thread-128150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:28:12.750 [DEBUG] [Thread-128150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:28:12.750 [DEBUG] [Thread-128150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:28:12.750 [DEBUG] [Thread-128150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:28:12.775 [INFO] [Thread-128150] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:28:12.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:28:13.399 [DEBUG] [Thread-128150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:28:13.399 [DEBUG] [Thread-128150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:28:13.399 [DEBUG] [Thread-128150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:28:13.440 [DEBUG] [Thread-128150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:28:13.440 [DEBUG] [Thread-128150] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:28:13.443 [DEBUG] [Thread-128150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:28:13.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:28:13.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:28:13.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:28:13.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:28:13.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:28:13.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:28:13.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:28:13.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:28:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:28:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.394241 -999.00  +23.20  20.94     47  +11.50 1 2 1 1 1   888    0 12.59 48.49 ----- 26.1 20.9 309.2 29.3 29.9 -13.7 29.1 -11.9 28.0 -11.5 28.8 -11.2
2026-02-11T11:28:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:28:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:28:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.394241
2026-02-11T11:28:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:28:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:28:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:28:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:28:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:28:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:28:04', tmtdew=14.31, humidity=40.14, cloud=0.0, wind=19.76, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:27:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:28:13.469 [DEBUG] [Thread-128150] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:28:13.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:28:13.564 [DEBUG] [Thread-128153] [transport.py] [_log()] starting thread (client mode): 0xa575a830
2026-02-11T11:28:13.564 [DEBUG] [Thread-128153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:28:13.580 [DEBUG] [Thread-128153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:28:13.580 [INFO] [Thread-128153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:28:13.587 [DEBUG] [Thread-128153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:28:13.588 [DEBUG] [Thread-128153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:28:13.588 [DEBUG] [Thread-128153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:28:13.588 [DEBUG] [Thread-128153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:13.588 [DEBUG] [Thread-128153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:13.588 [DEBUG] [Thread-128153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] client lang: <none>
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] server lang: <none>
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] kex follows: False
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:28:13.589 [DEBUG] [Thread-128153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:28:13.590 [DEBUG] [Thread-128153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:28:13.590 [DEBUG] [Thread-128153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:28:13.590 [DEBUG] [Thread-128153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:28:13.590 [DEBUG] [Thread-128153] [transport.py] [_log()] Compression: none
2026-02-11T11:28:13.590 [DEBUG] [Thread-128153] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:28:13.646 [DEBUG] [Thread-128153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:28:13.647 [DEBUG] [Thread-128153] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:28:13.648 [DEBUG] [Thread-128153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:28:13.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:28:13.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:28:13.706 [DEBUG] [Thread-128153] [transport.py] [_log()] userauth is OK
2026-02-11T11:28:13.706 [DEBUG] [Thread-128153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:28:13.707 [DEBUG] [Thread-128153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:28:13.707 [DEBUG] [Thread-128153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:28:13.707 [DEBUG] [Thread-128153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:28:13.730 [INFO] [Thread-128153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:28:13.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:28:13.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:28:14.571 [DEBUG] [Thread-128153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:28:14.571 [DEBUG] [Thread-128153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:28:14.619 [DEBUG] [Thread-128153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:28:14.619 [DEBUG] [Thread-128153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:28:14.628 [DEBUG] [Thread-128153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:28:14.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:28:14.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:28:14.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:28:14.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:28:14.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:28:14.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:28:14.665 [DEBUG] [Thread-128153] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:28:15.463 [DEBUG] [Thread-128155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:28:30.514 [DEBUG] [Thread-128156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:28:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:28:44.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:28:44.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:28:45.562 [DEBUG] [Thread-128157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:28:46.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 28, 4), 14.31, 40.14, 0.0, 19.76, 23.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:28:46.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:28:04
2026-02-11T11:28:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:28:46.945 [DEBUG] [Thread-128158] [transport.py] [_log()] starting thread (client mode): 0xa57c19c0
2026-02-11T11:28:46.945 [DEBUG] [Thread-128158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:28:46.965 [DEBUG] [Thread-128158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:28:46.965 [INFO] [Thread-128158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] client lang: <none>
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] server lang: <none>
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] kex follows: False
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:28:46.968 [DEBUG] [Thread-128158] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:28:46.969 [DEBUG] [Thread-128158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:28:46.969 [DEBUG] [Thread-128158] [transport.py] [_log()] Compression: none
2026-02-11T11:28:46.969 [DEBUG] [Thread-128158] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:28:46.984 [DEBUG] [Thread-128158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:28:46.985 [DEBUG] [Thread-128158] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:28:46.986 [DEBUG] [Thread-128158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:28:46.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:28:46.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:28:46.987 [DEBUG] [Thread-128158] [transport.py] [_log()] userauth is OK
2026-02-11T11:28:46.988 [DEBUG] [Thread-128158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:28:46.988 [DEBUG] [Thread-128158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:28:46.988 [DEBUG] [Thread-128158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:28:46.988 [DEBUG] [Thread-128158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:28:47.006 [INFO] [Thread-128158] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:28:47.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:28:47.653 [DEBUG] [Thread-128158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:28:47.653 [DEBUG] [Thread-128158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:28:47.654 [DEBUG] [Thread-128158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:28:47.694 [DEBUG] [Thread-128158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:28:47.695 [DEBUG] [Thread-128158] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:28:47.698 [DEBUG] [Thread-128158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:28:47.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:28:47.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:28:47.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:28:47.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:28:47.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:28:47.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:28:47.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:28:47.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:28:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:28:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.394589 -999.00  +23.30  20.10     47  +11.60 1 2 1 1 1   888    0 12.66 52.59 ----- 18.8 20.1 295.5 28.9 30.3 -11.7 29.4 -10.8 28.2 -10.5 29.1 -11.2
2026-02-11T11:28:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:28:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:28:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.394589
2026-02-11T11:28:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:28:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:28:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:28:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:28:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:28:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:28:04', tmtdew=14.31, humidity=40.14, cloud=0.0, wind=19.76, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:28:12.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:28:47.726 [DEBUG] [Thread-128158] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:28:47.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:28:47.822 [DEBUG] [Thread-128161] [transport.py] [_log()] starting thread (client mode): 0xa2dc14e0
2026-02-11T11:28:47.822 [DEBUG] [Thread-128161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:28:47.837 [DEBUG] [Thread-128161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:28:47.837 [INFO] [Thread-128161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:28:47.845 [DEBUG] [Thread-128161] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] client lang: <none>
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] server lang: <none>
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] kex follows: False
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:28:47.846 [DEBUG] [Thread-128161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:28:47.847 [DEBUG] [Thread-128161] [transport.py] [_log()] Compression: none
2026-02-11T11:28:47.847 [DEBUG] [Thread-128161] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:28:47.905 [DEBUG] [Thread-128161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:28:47.906 [DEBUG] [Thread-128161] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:28:47.907 [DEBUG] [Thread-128161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:28:47.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:28:47.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:28:47.962 [DEBUG] [Thread-128161] [transport.py] [_log()] userauth is OK
2026-02-11T11:28:47.962 [DEBUG] [Thread-128161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:28:47.962 [DEBUG] [Thread-128161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:28:47.962 [DEBUG] [Thread-128161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:28:47.963 [DEBUG] [Thread-128161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:28:47.986 [INFO] [Thread-128161] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:28:47.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:28:47.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:28:48.839 [DEBUG] [Thread-128161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:28:48.839 [DEBUG] [Thread-128161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:28:48.887 [DEBUG] [Thread-128161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:28:48.887 [DEBUG] [Thread-128161] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:28:48.896 [DEBUG] [Thread-128161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:28:48.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:28:48.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:28:48.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:28:48.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:28:48.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:28:48.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:28:48.933 [DEBUG] [Thread-128161] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:28:59.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:28:59.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:29:00.599 [DEBUG] [Thread-128163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:29:11.368 [DEBUG] [Thread-128164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:29:15.650 [DEBUG] [Thread-128165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:29:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:29:18.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:29:18.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:29:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 28, 39), 14.77, 39.18, 0.0, 20.11, 24.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:29:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:28:39
2026-02-11T11:29:21.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:29:21.390 [DEBUG] [Thread-128166] [transport.py] [_log()] starting thread (client mode): 0xa2dc3e50
2026-02-11T11:29:21.390 [DEBUG] [Thread-128166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:29:21.409 [DEBUG] [Thread-128166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:29:21.410 [INFO] [Thread-128166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:29:21.413 [DEBUG] [Thread-128166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:29:21.413 [DEBUG] [Thread-128166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:29:21.413 [DEBUG] [Thread-128166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:29:21.413 [DEBUG] [Thread-128166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] client lang: <none>
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] server lang: <none>
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] kex follows: False
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] Compression: none
2026-02-11T11:29:21.414 [DEBUG] [Thread-128166] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:29:21.434 [DEBUG] [Thread-128166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:29:21.435 [DEBUG] [Thread-128166] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:29:21.435 [DEBUG] [Thread-128166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:29:21.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:29:21.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:29:21.437 [DEBUG] [Thread-128166] [transport.py] [_log()] userauth is OK
2026-02-11T11:29:21.438 [DEBUG] [Thread-128166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:29:21.438 [DEBUG] [Thread-128166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:29:21.438 [DEBUG] [Thread-128166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:29:21.438 [DEBUG] [Thread-128166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:29:21.462 [INFO] [Thread-128166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:29:21.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:29:22.093 [DEBUG] [Thread-128166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:29:22.094 [DEBUG] [Thread-128166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:29:22.094 [DEBUG] [Thread-128166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:29:22.134 [DEBUG] [Thread-128166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:29:22.135 [DEBUG] [Thread-128166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:29:22.138 [DEBUG] [Thread-128166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:29:22.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:29:22.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:29:22.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:29:22.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:29:22.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:29:22.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:29:22.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:29:22.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:29:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:29:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.394936 -999.00  +23.10  27.60     48  +11.60 1 2 1 1 1   888    0 12.90 61.59 ----- 26.1 27.6 295.6 29.5 29.9 -18.1 29.1 -15.5 27.8 -15.4 28.6 -17.1
2026-02-11T11:29:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:29:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:29:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.394936
2026-02-11T11:29:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:29:22.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:29:22.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:29:22.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:29:22.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:29:22.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:28:39', tmtdew=14.77, humidity=39.18, cloud=0.0, wind=20.11, temperature=24.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:28:42.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:29:22.163 [DEBUG] [Thread-128166] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:29:22.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:29:22.258 [DEBUG] [Thread-128169] [transport.py] [_log()] starting thread (client mode): 0xa2dc4400
2026-02-11T11:29:22.258 [DEBUG] [Thread-128169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:29:22.275 [DEBUG] [Thread-128169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:29:22.275 [INFO] [Thread-128169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:29:22.282 [DEBUG] [Thread-128169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] client lang: <none>
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] server lang: <none>
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] kex follows: False
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:29:22.283 [DEBUG] [Thread-128169] [transport.py] [_log()] Compression: none
2026-02-11T11:29:22.284 [DEBUG] [Thread-128169] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:29:22.340 [DEBUG] [Thread-128169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:29:22.340 [DEBUG] [Thread-128169] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:29:22.341 [DEBUG] [Thread-128169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:29:22.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:29:22.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:29:22.400 [DEBUG] [Thread-128169] [transport.py] [_log()] userauth is OK
2026-02-11T11:29:22.400 [DEBUG] [Thread-128169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:29:22.400 [DEBUG] [Thread-128169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:29:22.400 [DEBUG] [Thread-128169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:29:22.400 [DEBUG] [Thread-128169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:29:22.421 [INFO] [Thread-128169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:29:22.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:29:22.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:29:23.289 [DEBUG] [Thread-128169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:29:23.289 [DEBUG] [Thread-128169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:29:23.337 [DEBUG] [Thread-128169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:29:23.337 [DEBUG] [Thread-128169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:29:23.346 [DEBUG] [Thread-128169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:29:23.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:29:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:29:23.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:29:23.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:29:23.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:29:23.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:29:23.379 [DEBUG] [Thread-128169] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:29:30.687 [DEBUG] [Thread-128171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:29:45.746 [DEBUG] [Thread-128172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:29:53.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:29:53.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:29:53.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:29:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 29, 14), 13.9, 41.29, 0.0, 21.7, 23.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:29:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:29:14
2026-02-11T11:29:56.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:29:56.230 [DEBUG] [Thread-128173] [transport.py] [_log()] starting thread (client mode): 0xa57586d0
2026-02-11T11:29:56.230 [DEBUG] [Thread-128173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:29:56.251 [DEBUG] [Thread-128173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:29:56.251 [INFO] [Thread-128173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] client lang: <none>
2026-02-11T11:29:56.255 [DEBUG] [Thread-128173] [transport.py] [_log()] server lang: <none>
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] kex follows: False
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] Compression: none
2026-02-11T11:29:56.256 [DEBUG] [Thread-128173] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:29:56.275 [DEBUG] [Thread-128173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:29:56.276 [DEBUG] [Thread-128173] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:29:56.276 [DEBUG] [Thread-128173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:29:56.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:29:56.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:29:56.278 [DEBUG] [Thread-128173] [transport.py] [_log()] userauth is OK
2026-02-11T11:29:56.278 [DEBUG] [Thread-128173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:29:56.279 [DEBUG] [Thread-128173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:29:56.279 [DEBUG] [Thread-128173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:29:56.279 [DEBUG] [Thread-128173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:29:56.293 [INFO] [Thread-128173] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:29:56.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:29:56.912 [DEBUG] [Thread-128173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:29:56.912 [DEBUG] [Thread-128173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:29:56.913 [DEBUG] [Thread-128173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:29:56.953 [DEBUG] [Thread-128173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:29:56.953 [DEBUG] [Thread-128173] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:29:56.956 [DEBUG] [Thread-128173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:29:56.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:29:56.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:29:56.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:29:56.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:29:56.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:29:56.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:29:56.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:29:56.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:29:56.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:29:56.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.395283 -999.00  +22.40  23.94     50  +11.60 1 2 1 1 1   888    0 12.94 58.57 ----- 21.1 23.9 303.0 29.7 29.4 -18.1 28.7 -16.5 27.5 -16.4 28.2 -16.9
2026-02-11T11:29:56.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:29:56.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:29:56.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.395283
2026-02-11T11:29:56.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:29:56.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:29:56.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:29:56.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:29:56.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:29:56.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:29:14', tmtdew=13.9, humidity=41.29, cloud=0.0, wind=21.7, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:29:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:29:56.981 [DEBUG] [Thread-128173] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:29:57.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:29:57.077 [DEBUG] [Thread-128176] [transport.py] [_log()] starting thread (client mode): 0xa2d78dc0
2026-02-11T11:29:57.077 [DEBUG] [Thread-128176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:29:57.092 [DEBUG] [Thread-128176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:29:57.092 [INFO] [Thread-128176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:29:57.099 [DEBUG] [Thread-128176] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:29:57.099 [DEBUG] [Thread-128176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:29:57.099 [DEBUG] [Thread-128176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:29:57.099 [DEBUG] [Thread-128176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:57.099 [DEBUG] [Thread-128176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] client lang: <none>
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] server lang: <none>
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] kex follows: False
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] Compression: none
2026-02-11T11:29:57.100 [DEBUG] [Thread-128176] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:29:57.157 [DEBUG] [Thread-128176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:29:57.158 [DEBUG] [Thread-128176] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:29:57.158 [DEBUG] [Thread-128176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:29:57.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:29:57.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:29:57.217 [DEBUG] [Thread-128176] [transport.py] [_log()] userauth is OK
2026-02-11T11:29:57.217 [DEBUG] [Thread-128176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:29:57.217 [DEBUG] [Thread-128176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:29:57.217 [DEBUG] [Thread-128176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:29:57.218 [DEBUG] [Thread-128176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:29:57.236 [INFO] [Thread-128176] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:29:57.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:29:57.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:29:58.040 [DEBUG] [Thread-128176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:29:58.040 [DEBUG] [Thread-128176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:29:58.088 [DEBUG] [Thread-128176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:29:58.088 [DEBUG] [Thread-128176] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:29:58.097 [DEBUG] [Thread-128176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:29:58.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:29:58.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:29:58.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:29:58.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:29:58.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:29:58.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:29:58.130 [DEBUG] [Thread-128176] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:29:59.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:29:59.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:30:00.781 [DEBUG] [Thread-128178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:30:11.401 [DEBUG] [Thread-128179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:30:15.830 [DEBUG] [Thread-128180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:30:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:30:28.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:30:28.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
2026-02-11T11:30:30.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 29, 52), 13.75, 41.72, 0.0, 20.73, 23.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:30:30.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:29:52
2026-02-11T11:30:30.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:30:30.741 [DEBUG] [Thread-128181] [transport.py] [_log()] starting thread (client mode): 0xa2dc18a0
2026-02-11T11:30:30.741 [DEBUG] [Thread-128181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:30:30.761 [DEBUG] [Thread-128181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:30:30.761 [INFO] [Thread-128181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] client lang: <none>
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] server lang: <none>
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] kex follows: False
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] Compression: none
2026-02-11T11:30:30.764 [DEBUG] [Thread-128181] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:30:30.782 [DEBUG] [Thread-128181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:30:30.783 [DEBUG] [Thread-128181] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:30:30.783 [DEBUG] [Thread-128181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:30:30.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:30:30.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:30:30.784 [DEBUG] [Thread-128181] [transport.py] [_log()] userauth is OK
2026-02-11T11:30:30.784 [DEBUG] [Thread-128181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:30:30.784 [DEBUG] [Thread-128181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:30:30.784 [DEBUG] [Thread-128181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:30:30.784 [DEBUG] [Thread-128181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:30:30.803 [INFO] [Thread-128181] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:30:30.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:30:30.867 [DEBUG] [Thread-128183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:30:31.561 [DEBUG] [Thread-128181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:30:31.561 [DEBUG] [Thread-128181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:30:31.561 [DEBUG] [Thread-128181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:30:31.601 [DEBUG] [Thread-128181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:30:31.601 [DEBUG] [Thread-128181] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:30:31.604 [DEBUG] [Thread-128181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:30:31.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:30:31.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:30:31.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:30:31.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:30:31.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:30:31.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:30:31.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:30:31.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:30:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:30:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.395630 -999.00  +22.30  21.98     51  +11.70 1 2 1 1 1   888    0 12.86 52.77 ----- 32.8 22.0 317.8 26.8 29.1 -17.0 28.4 -15.8 27.3 -15.5 27.9 -15.9
2026-02-11T11:30:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:30:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:30:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.395630
2026-02-11T11:30:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:30:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:30:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:30:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:30:31.630 [DEBUG] [Thread-128181] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:30:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:30:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:29:52', tmtdew=13.75, humidity=41.72, cloud=0.0, wind=20.73, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:29:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:30:31.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:30:31.726 [DEBUG] [Thread-128185] [transport.py] [_log()] starting thread (client mode): 0xa2d55b40
2026-02-11T11:30:31.726 [DEBUG] [Thread-128185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:30:31.742 [DEBUG] [Thread-128185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:30:31.742 [INFO] [Thread-128185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:30:31.751 [DEBUG] [Thread-128185] [transport.py] [_log()] client lang: <none>
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] server lang: <none>
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] kex follows: False
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] Compression: none
2026-02-11T11:30:31.752 [DEBUG] [Thread-128185] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:30:31.809 [DEBUG] [Thread-128185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:30:31.809 [DEBUG] [Thread-128185] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:30:31.810 [DEBUG] [Thread-128185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:30:31.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:30:31.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:30:31.869 [DEBUG] [Thread-128185] [transport.py] [_log()] userauth is OK
2026-02-11T11:30:31.869 [DEBUG] [Thread-128185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:30:31.869 [DEBUG] [Thread-128185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:30:31.869 [DEBUG] [Thread-128185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:30:31.869 [DEBUG] [Thread-128185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:30:31.888 [INFO] [Thread-128185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:30:31.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:30:31.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:30:32.762 [DEBUG] [Thread-128185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:30:32.762 [DEBUG] [Thread-128185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:30:32.809 [DEBUG] [Thread-128185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:30:32.810 [DEBUG] [Thread-128185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:30:32.819 [DEBUG] [Thread-128185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:30:32.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:30:32.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:30:32.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:30:32.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:30:32.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:30:32.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:30:32.858 [DEBUG] [Thread-128185] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:30:45.902 [DEBUG] [Thread-128187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:30:59.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:30:59.709 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:31:00.961 [DEBUG] [Thread-128188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:31:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:31:02.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:31:02.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:31:04.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 30, 28), 13.17, 43.2, 0.0, 22.07, 22.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:31:04.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:30:28
2026-02-11T11:31:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:31:05.279 [DEBUG] [Thread-128189] [transport.py] [_log()] starting thread (client mode): 0xa2d91e10
2026-02-11T11:31:05.279 [DEBUG] [Thread-128189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:31:05.298 [DEBUG] [Thread-128189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:31:05.298 [INFO] [Thread-128189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:31:05.301 [DEBUG] [Thread-128189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:31:05.301 [DEBUG] [Thread-128189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] client lang: <none>
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] server lang: <none>
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] kex follows: False
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] Compression: none
2026-02-11T11:31:05.302 [DEBUG] [Thread-128189] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:31:05.319 [DEBUG] [Thread-128189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:31:05.319 [DEBUG] [Thread-128189] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:31:05.320 [DEBUG] [Thread-128189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:31:05.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:31:05.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:31:05.322 [DEBUG] [Thread-128189] [transport.py] [_log()] userauth is OK
2026-02-11T11:31:05.322 [DEBUG] [Thread-128189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:31:05.322 [DEBUG] [Thread-128189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:31:05.322 [DEBUG] [Thread-128189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:31:05.322 [DEBUG] [Thread-128189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:31:05.348 [INFO] [Thread-128189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:31:05.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:31:06.005 [DEBUG] [Thread-128189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:31:06.006 [DEBUG] [Thread-128189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:31:06.006 [DEBUG] [Thread-128189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:31:06.046 [DEBUG] [Thread-128189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:31:06.046 [DEBUG] [Thread-128189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:31:06.049 [DEBUG] [Thread-128189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:31:06.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:31:06.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:31:06.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:31:06.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:31:06.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:31:06.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:31:06.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:31:06.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:31:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:31:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.395978 -999.00  +22.40  24.57     50  +11.70 1 2 1 1 1   888    0 12.63 50.68 ----- 18.7 24.6 279.8 36.4 28.8 -18.4 28.2 -16.1 27.1 -15.9 27.8 -16.5
2026-02-11T11:31:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:31:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:31:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.395978
2026-02-11T11:31:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:31:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:31:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:31:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:31:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:31:06.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:30:28', tmtdew=13.17, humidity=43.2, cloud=0.0, wind=22.07, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:30:12.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:31:06.074 [DEBUG] [Thread-128189] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:31:06.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:31:06.180 [DEBUG] [Thread-128192] [transport.py] [_log()] starting thread (client mode): 0xa2d91180
2026-02-11T11:31:06.180 [DEBUG] [Thread-128192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:31:06.195 [DEBUG] [Thread-128192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:31:06.195 [INFO] [Thread-128192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:31:06.202 [DEBUG] [Thread-128192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:31:06.203 [DEBUG] [Thread-128192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:31:06.203 [DEBUG] [Thread-128192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:31:06.203 [DEBUG] [Thread-128192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:06.203 [DEBUG] [Thread-128192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:06.203 [DEBUG] [Thread-128192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] client lang: <none>
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] server lang: <none>
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] kex follows: False
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] Compression: none
2026-02-11T11:31:06.204 [DEBUG] [Thread-128192] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:31:06.268 [DEBUG] [Thread-128192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:31:06.268 [DEBUG] [Thread-128192] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:31:06.269 [DEBUG] [Thread-128192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:31:06.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:31:06.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:31:06.341 [DEBUG] [Thread-128192] [transport.py] [_log()] userauth is OK
2026-02-11T11:31:06.341 [DEBUG] [Thread-128192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:31:06.341 [DEBUG] [Thread-128192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:31:06.341 [DEBUG] [Thread-128192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:31:06.341 [DEBUG] [Thread-128192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:31:06.360 [INFO] [Thread-128192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:31:06.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:31:06.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:31:07.231 [DEBUG] [Thread-128192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:31:07.231 [DEBUG] [Thread-128192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:31:07.279 [DEBUG] [Thread-128192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:31:07.279 [DEBUG] [Thread-128192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:31:07.289 [DEBUG] [Thread-128192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:31:07.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:31:07.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')
2026-02-11T11:31:07.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:31:07.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:31:07.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:31:07.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:31:07.326 [DEBUG] [Thread-128192] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:31:11.453 [DEBUG] [Thread-128194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:31:15.998 [DEBUG] [Thread-128195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:31:31.052 [DEBUG] [Thread-128196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:31:37.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:31:37.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:31:37.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:31:39.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 31, 3), 12.97, 43.74, 0.0, 22.67, 22.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:31:39.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:31:03
2026-02-11T11:31:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:31:39.638 [DEBUG] [Thread-128197] [transport.py] [_log()] starting thread (client mode): 0xa2d55b40
2026-02-11T11:31:39.638 [DEBUG] [Thread-128197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:31:39.658 [DEBUG] [Thread-128197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:31:39.658 [INFO] [Thread-128197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:31:39.661 [DEBUG] [Thread-128197] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] client lang: <none>
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] server lang: <none>
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] kex follows: False
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:31:39.662 [DEBUG] [Thread-128197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:31:39.663 [DEBUG] [Thread-128197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:31:39.663 [DEBUG] [Thread-128197] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:31:39.663 [DEBUG] [Thread-128197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:31:39.663 [DEBUG] [Thread-128197] [transport.py] [_log()] Compression: none
2026-02-11T11:31:39.663 [DEBUG] [Thread-128197] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:31:39.682 [DEBUG] [Thread-128197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:31:39.683 [DEBUG] [Thread-128197] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:31:39.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:31:39.684 [DEBUG] [Thread-128197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:31:39.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:31:39.687 [DEBUG] [Thread-128197] [transport.py] [_log()] userauth is OK
2026-02-11T11:31:39.687 [DEBUG] [Thread-128197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:31:39.687 [DEBUG] [Thread-128197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:31:39.687 [DEBUG] [Thread-128197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:31:39.688 [DEBUG] [Thread-128197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:31:39.705 [INFO] [Thread-128197] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:31:39.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:31:40.336 [DEBUG] [Thread-128197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:31:40.336 [DEBUG] [Thread-128197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:31:40.337 [DEBUG] [Thread-128197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:31:40.377 [DEBUG] [Thread-128197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:31:40.378 [DEBUG] [Thread-128197] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:31:40.381 [DEBUG] [Thread-128197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:31:40.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:31:40.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:31:40.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:31:40.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:31:40.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:31:40.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:31:40.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:31:40.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:31:40.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:31:40.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.396325 -999.00  +22.40  29.56     50  +11.60 1 2 1 1 1   888    0 12.45 48.00 ----- 27.1 29.6 278.2 34.3 28.4 -17.3 28.0 -16.4 26.6 -19.7 27.4 -17.9
2026-02-11T11:31:40.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:31:40.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:31:40.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.396325
2026-02-11T11:31:40.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:31:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:31:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:31:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:31:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:31:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:31:03', tmtdew=12.97, humidity=43.74, cloud=0.0, wind=22.67, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:30:42.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:31:40.409 [DEBUG] [Thread-128197] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:31:40.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:31:40.504 [DEBUG] [Thread-128200] [transport.py] [_log()] starting thread (client mode): 0xa2d902e0
2026-02-11T11:31:40.505 [DEBUG] [Thread-128200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:31:40.520 [DEBUG] [Thread-128200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:31:40.520 [INFO] [Thread-128200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:31:40.527 [DEBUG] [Thread-128200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] client lang: <none>
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] server lang: <none>
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] kex follows: False
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:31:40.528 [DEBUG] [Thread-128200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:31:40.529 [DEBUG] [Thread-128200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:31:40.529 [DEBUG] [Thread-128200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:31:40.529 [DEBUG] [Thread-128200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:31:40.529 [DEBUG] [Thread-128200] [transport.py] [_log()] Compression: none
2026-02-11T11:31:40.529 [DEBUG] [Thread-128200] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:31:40.585 [DEBUG] [Thread-128200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:31:40.586 [DEBUG] [Thread-128200] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:31:40.587 [DEBUG] [Thread-128200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:31:40.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:31:40.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:31:40.642 [DEBUG] [Thread-128200] [transport.py] [_log()] userauth is OK
2026-02-11T11:31:40.642 [DEBUG] [Thread-128200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:31:40.642 [DEBUG] [Thread-128200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:31:40.643 [DEBUG] [Thread-128200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:31:40.643 [DEBUG] [Thread-128200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:31:40.661 [INFO] [Thread-128200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:31:40.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:31:40.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:31:41.486 [DEBUG] [Thread-128200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:31:41.486 [DEBUG] [Thread-128200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:31:41.534 [DEBUG] [Thread-128200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:31:41.535 [DEBUG] [Thread-128200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:31:41.544 [DEBUG] [Thread-128200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:31:41.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:31:41.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:31:41.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:31:41.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:31:41.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:31:41.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:31:41.581 [DEBUG] [Thread-128200] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:31:46.089 [DEBUG] [Thread-128202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:31:59.849 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:31:59.859 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:32:01.146 [DEBUG] [Thread-128203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:32:11.484 [DEBUG] [Thread-128204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:32:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:32:11.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:32:11.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:32:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 31, 38), 13.5, 42.32, 0.0, 28.09, 23.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:32:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:31:38
2026-02-11T11:32:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:32:14.115 [DEBUG] [Thread-128205] [transport.py] [_log()] starting thread (client mode): 0xa57c2290
2026-02-11T11:32:14.115 [DEBUG] [Thread-128205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:32:14.135 [DEBUG] [Thread-128205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:32:14.135 [INFO] [Thread-128205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] client lang: <none>
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] server lang: <none>
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] kex follows: False
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:32:14.138 [DEBUG] [Thread-128205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:32:14.139 [DEBUG] [Thread-128205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:32:14.139 [DEBUG] [Thread-128205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:32:14.139 [DEBUG] [Thread-128205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:32:14.139 [DEBUG] [Thread-128205] [transport.py] [_log()] Compression: none
2026-02-11T11:32:14.139 [DEBUG] [Thread-128205] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:32:14.158 [DEBUG] [Thread-128205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:32:14.159 [DEBUG] [Thread-128205] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:32:14.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:32:14.160 [DEBUG] [Thread-128205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:32:14.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:32:14.203 [DEBUG] [Thread-128205] [transport.py] [_log()] userauth is OK
2026-02-11T11:32:14.203 [DEBUG] [Thread-128205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:32:14.203 [DEBUG] [Thread-128205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:32:14.203 [DEBUG] [Thread-128205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:32:14.204 [DEBUG] [Thread-128205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:32:14.231 [INFO] [Thread-128205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:32:14.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:32:14.866 [DEBUG] [Thread-128205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:32:14.866 [DEBUG] [Thread-128205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:32:14.867 [DEBUG] [Thread-128205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:32:14.907 [DEBUG] [Thread-128205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:32:14.907 [DEBUG] [Thread-128205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:32:14.910 [DEBUG] [Thread-128205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:32:14.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:32:14.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:32:14.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:32:14.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:32:14.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:32:14.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:32:14.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:32:14.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:32:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:32:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.396672 -999.00  +22.20  20.24     51  +11.60 1 2 1 1 1   888    0 12.45 46.89 ----- 22.7 20.2 273.0 29.3 27.9 -18.1 27.6 -16.7 26.2 -18.3 27.2 -16.6
2026-02-11T11:32:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:32:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:32:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.396672
2026-02-11T11:32:14.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:32:14.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:32:14.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:32:14.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:32:14.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:32:14.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:31:38', tmtdew=13.5, humidity=42.32, cloud=0.0, wind=28.09, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:31:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:32:14.937 [DEBUG] [Thread-128205] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:32:15.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:32:15.034 [DEBUG] [Thread-128208] [transport.py] [_log()] starting thread (client mode): 0x9eb04910
2026-02-11T11:32:15.034 [DEBUG] [Thread-128208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:32:15.049 [DEBUG] [Thread-128208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:32:15.049 [INFO] [Thread-128208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] client lang: <none>
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] server lang: <none>
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] kex follows: False
2026-02-11T11:32:15.057 [DEBUG] [Thread-128208] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:32:15.058 [DEBUG] [Thread-128208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:32:15.058 [DEBUG] [Thread-128208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:32:15.058 [DEBUG] [Thread-128208] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:32:15.058 [DEBUG] [Thread-128208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:32:15.058 [DEBUG] [Thread-128208] [transport.py] [_log()] Compression: none
2026-02-11T11:32:15.058 [DEBUG] [Thread-128208] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:32:15.115 [DEBUG] [Thread-128208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:32:15.116 [DEBUG] [Thread-128208] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:32:15.117 [DEBUG] [Thread-128208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:32:15.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:32:15.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:32:15.172 [DEBUG] [Thread-128208] [transport.py] [_log()] userauth is OK
2026-02-11T11:32:15.172 [DEBUG] [Thread-128208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:32:15.173 [DEBUG] [Thread-128208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:32:15.173 [DEBUG] [Thread-128208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:32:15.173 [DEBUG] [Thread-128208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:32:15.192 [INFO] [Thread-128208] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:32:15.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:32:15.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:32:16.024 [DEBUG] [Thread-128208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:32:16.025 [DEBUG] [Thread-128208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:32:16.073 [DEBUG] [Thread-128208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:32:16.074 [DEBUG] [Thread-128208] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:32:16.083 [DEBUG] [Thread-128208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:32:16.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:32:16.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:32:16.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:32:16.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:32:16.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:32:16.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:32:16.121 [DEBUG] [Thread-128208] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:32:16.185 [DEBUG] [Thread-128210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:32:31.246 [DEBUG] [Thread-128211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:32:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:32:46.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:32:46.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
2026-02-11T11:32:46.283 [DEBUG] [Thread-128212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:32:47.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 32, 14), 12.65, 44.44, 0.0, 26.56, 22.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:32:47.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:32:14
2026-02-11T11:32:48.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:32:48.464 [DEBUG] [Thread-128213] [transport.py] [_log()] starting thread (client mode): 0x9eb047c0
2026-02-11T11:32:48.464 [DEBUG] [Thread-128213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:32:48.484 [DEBUG] [Thread-128213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:32:48.485 [INFO] [Thread-128213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] client lang: <none>
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] server lang: <none>
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] kex follows: False
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] Compression: none
2026-02-11T11:32:48.488 [DEBUG] [Thread-128213] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:32:48.505 [DEBUG] [Thread-128213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:32:48.505 [DEBUG] [Thread-128213] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:32:48.506 [DEBUG] [Thread-128213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:32:48.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:32:48.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:32:48.508 [DEBUG] [Thread-128213] [transport.py] [_log()] userauth is OK
2026-02-11T11:32:48.508 [DEBUG] [Thread-128213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:32:48.508 [DEBUG] [Thread-128213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:32:48.508 [DEBUG] [Thread-128213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:32:48.508 [DEBUG] [Thread-128213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:32:48.539 [INFO] [Thread-128213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:32:48.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:32:49.181 [DEBUG] [Thread-128213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:32:49.182 [DEBUG] [Thread-128213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:32:49.182 [DEBUG] [Thread-128213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:32:49.222 [DEBUG] [Thread-128213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:32:49.222 [DEBUG] [Thread-128213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:32:49.225 [DEBUG] [Thread-128213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:32:49.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:32:49.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:32:49.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:32:49.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:32:49.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:32:49.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:32:49.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:32:49.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:32:49.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:32:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.397366 -999.00  +21.80  28.20     51  +11.40 1 2 1 1 1   888    0 12.45 40.00 ----- 32.2 28.2 271.4 39.0 27.4 -19.0 27.1 -16.9 25.8 -19.2 26.6 -16.9
2026-02-11T11:32:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:32:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:32:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.397366
2026-02-11T11:32:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:32:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:32:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:32:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:32:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:32:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:32:14', tmtdew=12.65, humidity=44.44, cloud=0.0, wind=26.56, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:32:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:32:49.250 [DEBUG] [Thread-128213] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:32:49.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:32:49.356 [DEBUG] [Thread-128216] [transport.py] [_log()] starting thread (client mode): 0xa57b26b0
2026-02-11T11:32:49.356 [DEBUG] [Thread-128216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:32:49.370 [DEBUG] [Thread-128216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:32:49.371 [INFO] [Thread-128216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:32:49.379 [DEBUG] [Thread-128216] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] client lang: <none>
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] server lang: <none>
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] kex follows: False
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:32:49.380 [DEBUG] [Thread-128216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:32:49.381 [DEBUG] [Thread-128216] [transport.py] [_log()] Compression: none
2026-02-11T11:32:49.381 [DEBUG] [Thread-128216] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:32:49.443 [DEBUG] [Thread-128216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:32:49.443 [DEBUG] [Thread-128216] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:32:49.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:32:49.445 [DEBUG] [Thread-128216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:32:49.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:32:49.502 [DEBUG] [Thread-128216] [transport.py] [_log()] userauth is OK
2026-02-11T11:32:49.502 [DEBUG] [Thread-128216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:32:49.502 [DEBUG] [Thread-128216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:32:49.503 [DEBUG] [Thread-128216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:32:49.503 [DEBUG] [Thread-128216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:32:49.528 [INFO] [Thread-128216] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:32:49.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:32:49.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:32:50.377 [DEBUG] [Thread-128216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:32:50.377 [DEBUG] [Thread-128216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:32:50.425 [DEBUG] [Thread-128216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:32:50.425 [DEBUG] [Thread-128216] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:32:50.434 [DEBUG] [Thread-128216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:32:50.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:32:50.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:32:50.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:32:50.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:32:50.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:32:50.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:32:50.470 [DEBUG] [Thread-128216] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:32:59.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:33:00.000 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:33:01.322 [DEBUG] [Thread-128218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:33:11.541 [DEBUG] [Thread-128219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:33:16.373 [DEBUG] [Thread-128220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:33:20.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:33:20.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:33:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:33:22.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 32, 49), 12.58, 44.76, 0.0, 22.14, 22.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:33:22.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:32:49
2026-02-11T11:33:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:33:22.822 [DEBUG] [Thread-128221] [transport.py] [_log()] starting thread (client mode): 0xa57b0b50
2026-02-11T11:33:22.822 [DEBUG] [Thread-128221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:33:22.841 [DEBUG] [Thread-128221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:33:22.842 [INFO] [Thread-128221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:33:22.845 [DEBUG] [Thread-128221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] client lang: <none>
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] server lang: <none>
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] kex follows: False
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] Compression: none
2026-02-11T11:33:22.846 [DEBUG] [Thread-128221] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:33:22.864 [DEBUG] [Thread-128221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:33:22.865 [DEBUG] [Thread-128221] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:33:22.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:33:22.866 [DEBUG] [Thread-128221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:33:22.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:33:22.867 [DEBUG] [Thread-128221] [transport.py] [_log()] userauth is OK
2026-02-11T11:33:22.867 [DEBUG] [Thread-128221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:33:22.867 [DEBUG] [Thread-128221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:33:22.868 [DEBUG] [Thread-128221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:33:22.868 [DEBUG] [Thread-128221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:33:22.899 [INFO] [Thread-128221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:33:22.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:33:23.652 [DEBUG] [Thread-128221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:33:23.652 [DEBUG] [Thread-128221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:33:23.652 [DEBUG] [Thread-128221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:33:23.692 [DEBUG] [Thread-128221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:33:23.692 [DEBUG] [Thread-128221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:33:23.696 [DEBUG] [Thread-128221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:33:23.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:33:23.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:33:23.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:33:23.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:33:23.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:33:23.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:33:23.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:33:23.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:33:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:33:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.397714 -999.00  +21.50  15.50     51  +11.10 1 2 1 1 1   888    0 12.35 35.80 ----- 12.2 15.5 263.6 35.7 26.9 -19.6 26.8 -17.6 25.4 -23.3 26.2 -17.8
2026-02-11T11:33:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:33:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:33:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.397714
2026-02-11T11:33:23.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:33:23.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:33:23.725 [DEBUG] [Thread-128221] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:33:23.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:33:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:33:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:33:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:32:49', tmtdew=12.58, humidity=44.76, cloud=0.0, wind=22.14, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:32:42.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:33:23.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:33:23.818 [DEBUG] [Thread-128224] [transport.py] [_log()] starting thread (client mode): 0xa575add0
2026-02-11T11:33:23.818 [DEBUG] [Thread-128224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:33:23.832 [DEBUG] [Thread-128224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:33:23.833 [INFO] [Thread-128224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:33:23.840 [DEBUG] [Thread-128224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:33:23.840 [DEBUG] [Thread-128224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:33:23.840 [DEBUG] [Thread-128224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:33:23.840 [DEBUG] [Thread-128224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:23.840 [DEBUG] [Thread-128224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] client lang: <none>
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] server lang: <none>
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] kex follows: False
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] Compression: none
2026-02-11T11:33:23.841 [DEBUG] [Thread-128224] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:33:23.899 [DEBUG] [Thread-128224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:33:23.899 [DEBUG] [Thread-128224] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:33:23.900 [DEBUG] [Thread-128224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:33:23.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:33:23.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:33:23.959 [DEBUG] [Thread-128224] [transport.py] [_log()] userauth is OK
2026-02-11T11:33:23.959 [DEBUG] [Thread-128224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:33:23.960 [DEBUG] [Thread-128224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:33:23.960 [DEBUG] [Thread-128224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:33:23.960 [DEBUG] [Thread-128224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:33:23.984 [INFO] [Thread-128224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:33:23.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:33:23.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:33:24.838 [DEBUG] [Thread-128224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:33:24.838 [DEBUG] [Thread-128224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:33:24.893 [DEBUG] [Thread-128224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:33:24.893 [DEBUG] [Thread-128224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:33:24.904 [DEBUG] [Thread-128224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:33:24.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:33:24.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:33:24.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:33:24.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:33:24.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:33:24.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:33:24.937 [DEBUG] [Thread-128224] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:33:31.411 [DEBUG] [Thread-128226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:33:46.466 [DEBUG] [Thread-128227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:33:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:33:54.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:33:54.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:33:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 33, 24), 12.75, 44.31, 0.0, 23.26, 22.26, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:33:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:33:24
2026-02-11T11:33:57.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:33:57.469 [DEBUG] [Thread-128228] [transport.py] [_log()] starting thread (client mode): 0xa2d90d30
2026-02-11T11:33:57.470 [DEBUG] [Thread-128228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:33:57.489 [DEBUG] [Thread-128228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:33:57.489 [INFO] [Thread-128228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:33:57.492 [DEBUG] [Thread-128228] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] client lang: <none>
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] server lang: <none>
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] kex follows: False
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] Compression: none
2026-02-11T11:33:57.493 [DEBUG] [Thread-128228] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:33:57.508 [DEBUG] [Thread-128228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:33:57.509 [DEBUG] [Thread-128228] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:33:57.509 [DEBUG] [Thread-128228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:33:57.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:33:57.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:33:57.512 [DEBUG] [Thread-128228] [transport.py] [_log()] userauth is OK
2026-02-11T11:33:57.512 [DEBUG] [Thread-128228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:33:57.512 [DEBUG] [Thread-128228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:33:57.512 [DEBUG] [Thread-128228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:33:57.512 [DEBUG] [Thread-128228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:33:57.531 [INFO] [Thread-128228] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:33:57.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:33:58.105 [DEBUG] [Thread-128228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:33:58.105 [DEBUG] [Thread-128228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:33:58.106 [DEBUG] [Thread-128228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:33:58.147 [DEBUG] [Thread-128228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:33:58.147 [DEBUG] [Thread-128228] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:33:58.149 [DEBUG] [Thread-128228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:33:58.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:33:58.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:33:58.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:33:58.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:33:58.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:33:58.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:33:58.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:33:58.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:33:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:33:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.398408 -999.00  +22.00  12.53     51  +11.60 1 2 1 1 1   888    0 12.01 27.83 ----- 13.5 12.5 276.4 20.8 28.0 -12.2 27.6 -12.2 26.6 -12.6 27.0 -12.5
2026-02-11T11:33:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:33:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:33:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.398408
2026-02-11T11:33:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:33:58.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:33:58.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:33:58.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:33:58.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:33:58.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:33:24', tmtdew=12.75, humidity=44.31, cloud=0.0, wind=23.26, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:33:42.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:33:58.171 [DEBUG] [Thread-128228] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:33:58.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:33:58.255 [DEBUG] [Thread-128231] [transport.py] [_log()] starting thread (client mode): 0xa57b0670
2026-02-11T11:33:58.256 [DEBUG] [Thread-128231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:33:58.270 [DEBUG] [Thread-128231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:33:58.270 [INFO] [Thread-128231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:33:58.277 [DEBUG] [Thread-128231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] client lang: <none>
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] server lang: <none>
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] kex follows: False
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:33:58.278 [DEBUG] [Thread-128231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:33:58.279 [DEBUG] [Thread-128231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:33:58.279 [DEBUG] [Thread-128231] [transport.py] [_log()] Compression: none
2026-02-11T11:33:58.279 [DEBUG] [Thread-128231] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:33:58.337 [DEBUG] [Thread-128231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:33:58.338 [DEBUG] [Thread-128231] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:33:58.338 [DEBUG] [Thread-128231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:33:58.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:33:58.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:33:58.394 [DEBUG] [Thread-128231] [transport.py] [_log()] userauth is OK
2026-02-11T11:33:58.394 [DEBUG] [Thread-128231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:33:58.394 [DEBUG] [Thread-128231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:33:58.394 [DEBUG] [Thread-128231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:33:58.394 [DEBUG] [Thread-128231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:33:58.412 [INFO] [Thread-128231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:33:58.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:33:58.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:33:59.221 [DEBUG] [Thread-128231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:33:59.221 [DEBUG] [Thread-128231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:33:59.269 [DEBUG] [Thread-128231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:33:59.269 [DEBUG] [Thread-128231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:33:59.278 [DEBUG] [Thread-128231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:33:59.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:33:59.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:33:59.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:33:59.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:33:59.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:33:59.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:33:59.316 [DEBUG] [Thread-128231] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:34:00.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:34:00.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:34:01.505 [DEBUG] [Thread-128233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:34:11.604 [DEBUG] [Thread-128234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:34:16.564 [DEBUG] [Thread-128235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:34:29.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:34:29.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:34:29.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:34:31.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 33, 59), 12.59, 44.91, 0.0, 18.63, 22.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:34:31.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:33:59
2026-02-11T11:34:31.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:34:31.599 [DEBUG] [Thread-128236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:34:31.704 [DEBUG] [Thread-128237] [transport.py] [_log()] starting thread (client mode): 0x9eb06c20
2026-02-11T11:34:31.704 [DEBUG] [Thread-128237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:34:31.717 [DEBUG] [Thread-128237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:34:31.717 [INFO] [Thread-128237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] client lang: <none>
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] server lang: <none>
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] kex follows: False
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] Compression: none
2026-02-11T11:34:31.719 [DEBUG] [Thread-128237] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:34:31.728 [DEBUG] [Thread-128237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:34:31.728 [DEBUG] [Thread-128237] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:34:31.728 [DEBUG] [Thread-128237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:34:31.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:34:31.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:34:31.730 [DEBUG] [Thread-128237] [transport.py] [_log()] userauth is OK
2026-02-11T11:34:31.730 [DEBUG] [Thread-128237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:34:31.730 [DEBUG] [Thread-128237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:34:31.730 [DEBUG] [Thread-128237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:34:31.730 [DEBUG] [Thread-128237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:34:31.741 [INFO] [Thread-128237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:34:31.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:34:32.322 [DEBUG] [Thread-128237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:34:32.322 [DEBUG] [Thread-128237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:34:32.322 [DEBUG] [Thread-128237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:34:32.362 [DEBUG] [Thread-128237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:34:32.362 [DEBUG] [Thread-128237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:34:32.366 [DEBUG] [Thread-128237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:34:32.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:34:32.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:34:32.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:34:32.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:34:32.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:34:32.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:34:32.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:34:32.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:34:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.398755 -999.00  +22.40  11.68     51  +11.80 1 2 1 1 1   888    0 11.79 21.92 ----- 19.8 11.7 269.8 17.7 28.3 -14.9 27.7 -13.9 26.6 -14.1 27.1 -15.8
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.398755
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:34:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:33:59', tmtdew=12.59, humidity=44.91, cloud=0.0, wind=18.63, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:34:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:34:32.387 [DEBUG] [Thread-128237] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:34:32.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:34:32.482 [DEBUG] [Thread-128240] [transport.py] [_log()] starting thread (client mode): 0x9eb05ba0
2026-02-11T11:34:32.483 [DEBUG] [Thread-128240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:34:32.497 [DEBUG] [Thread-128240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:34:32.497 [INFO] [Thread-128240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:34:32.505 [DEBUG] [Thread-128240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:34:32.505 [DEBUG] [Thread-128240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:34:32.505 [DEBUG] [Thread-128240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:34:32.505 [DEBUG] [Thread-128240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:34:32.505 [DEBUG] [Thread-128240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:34:32.505 [DEBUG] [Thread-128240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] client lang: <none>
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] server lang: <none>
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] kex follows: False
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] Compression: none
2026-02-11T11:34:32.506 [DEBUG] [Thread-128240] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:34:32.564 [DEBUG] [Thread-128240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:34:32.564 [DEBUG] [Thread-128240] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:34:32.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:34:32.566 [DEBUG] [Thread-128240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:34:32.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:34:32.619 [DEBUG] [Thread-128240] [transport.py] [_log()] userauth is OK
2026-02-11T11:34:32.620 [DEBUG] [Thread-128240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:34:32.620 [DEBUG] [Thread-128240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:34:32.620 [DEBUG] [Thread-128240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:34:32.620 [DEBUG] [Thread-128240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:34:32.638 [INFO] [Thread-128240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:34:32.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:34:32.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:34:33.456 [DEBUG] [Thread-128240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:34:33.457 [DEBUG] [Thread-128240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:34:33.504 [DEBUG] [Thread-128240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:34:33.505 [DEBUG] [Thread-128240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:34:33.514 [DEBUG] [Thread-128240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:34:33.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:34:33.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:34:33.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:34:33.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:34:33.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:34:33.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:34:33.551 [DEBUG] [Thread-128240] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:34:46.628 [DEBUG] [Thread-128242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:35:00.286 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:35:00.287 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:35:01.670 [DEBUG] [Thread-128243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:35:03.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:35:03.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:35:03.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:35:05.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 34, 34), 13.49, 42.42, 0.0, 25.41, 23.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:35:05.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:34:34
2026-02-11T11:35:05.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:35:05.882 [DEBUG] [Thread-128244] [transport.py] [_log()] starting thread (client mode): 0xa57b38b0
2026-02-11T11:35:05.882 [DEBUG] [Thread-128244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:35:05.893 [DEBUG] [Thread-128244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:35:05.893 [INFO] [Thread-128244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] client lang: <none>
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] server lang: <none>
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] kex follows: False
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] Compression: none
2026-02-11T11:35:05.894 [DEBUG] [Thread-128244] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:35:05.902 [DEBUG] [Thread-128244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:35:05.902 [DEBUG] [Thread-128244] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:35:05.902 [DEBUG] [Thread-128244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:35:05.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:35:05.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:35:05.903 [DEBUG] [Thread-128244] [transport.py] [_log()] userauth is OK
2026-02-11T11:35:05.903 [DEBUG] [Thread-128244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:35:05.903 [DEBUG] [Thread-128244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:35:05.903 [DEBUG] [Thread-128244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:35:05.903 [DEBUG] [Thread-128244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:35:05.922 [INFO] [Thread-128244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:35:05.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:35:06.519 [DEBUG] [Thread-128244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:35:06.519 [DEBUG] [Thread-128244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:35:06.519 [DEBUG] [Thread-128244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:35:06.560 [DEBUG] [Thread-128244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:35:06.560 [DEBUG] [Thread-128244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:35:06.563 [DEBUG] [Thread-128244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:35:06.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:35:06.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:35:06.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:35:06.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:35:06.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:35:06.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:35:06.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:35:06.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:35:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:35:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.399103 -999.00  +22.50  14.72     50  +11.80 1 2 1 1 1   888    0 11.61 18.31 ----- 14.9 14.7 284.4 27.5 27.9 -20.3 27.4 -18.2 26.2 -16.6 26.8 -17.5
2026-02-11T11:35:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:35:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:35:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.399103
2026-02-11T11:35:06.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:35:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:35:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:35:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:35:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:35:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:34:34', tmtdew=13.49, humidity=42.42, cloud=0.0, wind=25.41, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:34:42.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:35:06.592 [DEBUG] [Thread-128244] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:35:06.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:35:06.689 [DEBUG] [Thread-128247] [transport.py] [_log()] starting thread (client mode): 0xa2dc4fa0
2026-02-11T11:35:06.689 [DEBUG] [Thread-128247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:35:06.704 [DEBUG] [Thread-128247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:35:06.704 [INFO] [Thread-128247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:35:06.711 [DEBUG] [Thread-128247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:35:06.712 [DEBUG] [Thread-128247] [transport.py] [_log()] client lang: <none>
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] server lang: <none>
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] kex follows: False
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] Compression: none
2026-02-11T11:35:06.713 [DEBUG] [Thread-128247] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:35:06.770 [DEBUG] [Thread-128247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:35:06.771 [DEBUG] [Thread-128247] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:35:06.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:35:06.772 [DEBUG] [Thread-128247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:35:06.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:35:06.829 [DEBUG] [Thread-128247] [transport.py] [_log()] userauth is OK
2026-02-11T11:35:06.829 [DEBUG] [Thread-128247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:35:06.829 [DEBUG] [Thread-128247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:35:06.829 [DEBUG] [Thread-128247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:35:06.829 [DEBUG] [Thread-128247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:35:06.847 [INFO] [Thread-128247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:35:06.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:35:06.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:35:07.720 [DEBUG] [Thread-128247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:35:07.721 [DEBUG] [Thread-128247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:35:07.770 [DEBUG] [Thread-128247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:35:07.770 [DEBUG] [Thread-128247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:35:07.779 [DEBUG] [Thread-128247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:35:07.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:35:07.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:35:07.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:35:07.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:35:07.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:35:07.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:35:07.817 [DEBUG] [Thread-128247] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:35:11.655 [DEBUG] [Thread-128249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:35:16.706 [DEBUG] [Thread-128250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:35:31.758 [DEBUG] [Thread-128251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:35:37.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:35:37.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:35:37.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:35:39.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 35, 11), 12.69, 44.74, 0.0, 21.31, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:35:39.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:35:11
2026-02-11T11:35:40.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:35:40.317 [DEBUG] [Thread-128252] [transport.py] [_log()] starting thread (client mode): 0x9eb070d0
2026-02-11T11:35:40.318 [DEBUG] [Thread-128252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:35:40.337 [DEBUG] [Thread-128252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:35:40.337 [INFO] [Thread-128252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:35:40.340 [DEBUG] [Thread-128252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:35:40.340 [DEBUG] [Thread-128252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:35:40.340 [DEBUG] [Thread-128252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:35:40.340 [DEBUG] [Thread-128252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:40.340 [DEBUG] [Thread-128252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:40.340 [DEBUG] [Thread-128252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:40.340 [DEBUG] [Thread-128252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] client lang: <none>
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] server lang: <none>
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] kex follows: False
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] Compression: none
2026-02-11T11:35:40.341 [DEBUG] [Thread-128252] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:35:40.357 [DEBUG] [Thread-128252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:35:40.357 [DEBUG] [Thread-128252] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:35:40.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:35:40.358 [DEBUG] [Thread-128252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:35:40.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:35:40.360 [DEBUG] [Thread-128252] [transport.py] [_log()] userauth is OK
2026-02-11T11:35:40.361 [DEBUG] [Thread-128252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:35:40.361 [DEBUG] [Thread-128252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:35:40.361 [DEBUG] [Thread-128252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:35:40.361 [DEBUG] [Thread-128252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:35:40.384 [INFO] [Thread-128252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:35:40.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:35:40.986 [DEBUG] [Thread-128252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:35:40.987 [DEBUG] [Thread-128252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:35:40.987 [DEBUG] [Thread-128252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:35:41.027 [DEBUG] [Thread-128252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:35:41.028 [DEBUG] [Thread-128252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:35:41.031 [DEBUG] [Thread-128252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:35:41.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:35:41.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:35:41.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:35:41.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:35:41.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:35:41.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:35:41.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:35:41.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:35:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:35:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.399450 -999.00  +22.90  19.89     49  +11.90 1 2 1 1 1   888    0 11.61 15.53 ----- 21.2 19.9 268.6 21.5 27.8 -18.8 27.4 -17.3 26.2 -17.6 26.8 -16.0
2026-02-11T11:35:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:35:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:35:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.399450
2026-02-11T11:35:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:35:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:35:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:35:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:35:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:35:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:35:11', tmtdew=12.69, humidity=44.74, cloud=0.0, wind=21.31, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:35:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:35:41.051 [DEBUG] [Thread-128252] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:35:41.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:35:41.151 [DEBUG] [Thread-128255] [transport.py] [_log()] starting thread (client mode): 0xa575ad70
2026-02-11T11:35:41.151 [DEBUG] [Thread-128255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:35:41.166 [DEBUG] [Thread-128255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:35:41.166 [INFO] [Thread-128255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:35:41.174 [DEBUG] [Thread-128255] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:35:41.174 [DEBUG] [Thread-128255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:35:41.174 [DEBUG] [Thread-128255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:35:41.174 [DEBUG] [Thread-128255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:41.174 [DEBUG] [Thread-128255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] client lang: <none>
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] server lang: <none>
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] kex follows: False
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:35:41.175 [DEBUG] [Thread-128255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:35:41.176 [DEBUG] [Thread-128255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:35:41.176 [DEBUG] [Thread-128255] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:35:41.176 [DEBUG] [Thread-128255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:35:41.176 [DEBUG] [Thread-128255] [transport.py] [_log()] Compression: none
2026-02-11T11:35:41.176 [DEBUG] [Thread-128255] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:35:41.235 [DEBUG] [Thread-128255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:35:41.235 [DEBUG] [Thread-128255] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:35:41.236 [DEBUG] [Thread-128255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:35:41.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:35:41.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:35:41.290 [DEBUG] [Thread-128255] [transport.py] [_log()] userauth is OK
2026-02-11T11:35:41.291 [DEBUG] [Thread-128255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:35:41.291 [DEBUG] [Thread-128255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:35:41.291 [DEBUG] [Thread-128255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:35:41.291 [DEBUG] [Thread-128255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:35:41.310 [INFO] [Thread-128255] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:35:41.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:35:41.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:35:42.148 [DEBUG] [Thread-128255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:35:42.149 [DEBUG] [Thread-128255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:35:42.196 [DEBUG] [Thread-128255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:35:42.196 [DEBUG] [Thread-128255] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:35:42.206 [DEBUG] [Thread-128255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:35:42.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:35:42.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:35:42.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:35:42.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:35:42.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:35:42.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:35:42.241 [DEBUG] [Thread-128255] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:35:46.795 [DEBUG] [Thread-128257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:00.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:00.428 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:01.847 [DEBUG] [Thread-128258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:11.719 [DEBUG] [Thread-128259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:12.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:36:12.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:36:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:36:14.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 35, 46), 12.85, 43.86, 0.0, 26.52, 22.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:36:14.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:35:46
2026-02-11T11:36:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:36:14.733 [DEBUG] [Thread-128260] [transport.py] [_log()] starting thread (client mode): 0xa575a710
2026-02-11T11:36:14.733 [DEBUG] [Thread-128260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:36:14.746 [DEBUG] [Thread-128260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:36:14.746 [INFO] [Thread-128260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] client lang: <none>
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] server lang: <none>
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] kex follows: False
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] Compression: none
2026-02-11T11:36:14.747 [DEBUG] [Thread-128260] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:36:14.759 [DEBUG] [Thread-128260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:36:14.760 [DEBUG] [Thread-128260] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:36:14.761 [DEBUG] [Thread-128260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:36:14.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:36:14.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:36:14.763 [DEBUG] [Thread-128260] [transport.py] [_log()] userauth is OK
2026-02-11T11:36:14.763 [DEBUG] [Thread-128260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:36:14.763 [DEBUG] [Thread-128260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:36:14.763 [DEBUG] [Thread-128260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:36:14.763 [DEBUG] [Thread-128260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:36:14.785 [INFO] [Thread-128260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:36:14.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:36:15.356 [DEBUG] [Thread-128260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:36:15.356 [DEBUG] [Thread-128260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:36:15.357 [DEBUG] [Thread-128260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:36:15.397 [DEBUG] [Thread-128260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:36:15.398 [DEBUG] [Thread-128260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:36:15.401 [DEBUG] [Thread-128260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:36:15.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:36:15.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:36:15.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:36:15.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:36:15.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:36:15.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:36:15.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:36:15.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:36:15.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:36:15.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.400144 -999.00  +22.00  21.30     51  +11.50 1 2 1 1 1   888    0 11.32 10.65 ----- 18.5 21.3 273.8 33.9 27.3 -19.5 27.1 -18.3 25.7 -21.1 26.4 -17.7
2026-02-11T11:36:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:36:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:36:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.400144
2026-02-11T11:36:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:36:15.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:36:15.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:36:15.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:36:15.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:36:15.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:35:46', tmtdew=12.85, humidity=43.86, cloud=0.0, wind=26.52, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:36:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:36:15.421 [DEBUG] [Thread-128260] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:36:15.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:36:15.516 [DEBUG] [Thread-128263] [transport.py] [_log()] starting thread (client mode): 0xa57b0040
2026-02-11T11:36:15.516 [DEBUG] [Thread-128263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:36:15.531 [DEBUG] [Thread-128263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:36:15.531 [INFO] [Thread-128263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:36:15.538 [DEBUG] [Thread-128263] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] client lang: <none>
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] server lang: <none>
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] kex follows: False
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] Compression: none
2026-02-11T11:36:15.539 [DEBUG] [Thread-128263] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:36:15.595 [DEBUG] [Thread-128263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:36:15.596 [DEBUG] [Thread-128263] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:36:15.596 [DEBUG] [Thread-128263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:36:15.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:36:15.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:36:15.652 [DEBUG] [Thread-128263] [transport.py] [_log()] userauth is OK
2026-02-11T11:36:15.653 [DEBUG] [Thread-128263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:36:15.653 [DEBUG] [Thread-128263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:36:15.653 [DEBUG] [Thread-128263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:36:15.653 [DEBUG] [Thread-128263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:36:15.672 [INFO] [Thread-128263] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:36:15.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:36:15.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:36:16.518 [DEBUG] [Thread-128263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:36:16.518 [DEBUG] [Thread-128263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:36:16.566 [DEBUG] [Thread-128263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:36:16.567 [DEBUG] [Thread-128263] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:36:16.576 [DEBUG] [Thread-128263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:36:16.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:36:16.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')
2026-02-11T11:36:16.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:36:16.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:36:16.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:36:16.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:36:16.613 [DEBUG] [Thread-128263] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:36:16.883 [DEBUG] [Thread-128265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:31.932 [DEBUG] [Thread-128266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:46.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:36:46.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:36: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
2026-02-11T11:36:46.967 [DEBUG] [Thread-128267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:36:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 36, 21), 12.7, 44.27, 0.0, 29.61, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:36:48.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:36:21
2026-02-11T11:36:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:36:48.937 [DEBUG] [Thread-128268] [transport.py] [_log()] starting thread (client mode): 0xa5758e80
2026-02-11T11:36:48.938 [DEBUG] [Thread-128268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:36:48.957 [DEBUG] [Thread-128268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:36:48.958 [INFO] [Thread-128268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] client lang: <none>
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] server lang: <none>
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] kex follows: False
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] Compression: none
2026-02-11T11:36:48.959 [DEBUG] [Thread-128268] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:36:48.967 [DEBUG] [Thread-128268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:36:48.967 [DEBUG] [Thread-128268] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:36:48.968 [DEBUG] [Thread-128268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:36:48.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:36:48.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:36:48.970 [DEBUG] [Thread-128268] [transport.py] [_log()] userauth is OK
2026-02-11T11:36:48.970 [DEBUG] [Thread-128268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:36:48.970 [DEBUG] [Thread-128268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:36:48.970 [DEBUG] [Thread-128268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:36:48.970 [DEBUG] [Thread-128268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:36:48.987 [INFO] [Thread-128268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:36:48.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:36:49.610 [DEBUG] [Thread-128268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:36:49.610 [DEBUG] [Thread-128268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:36:49.610 [DEBUG] [Thread-128268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:36:49.652 [DEBUG] [Thread-128268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:36:49.652 [DEBUG] [Thread-128268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:36:49.655 [DEBUG] [Thread-128268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:36:49.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:36:49.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:36:49.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:36:49.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:36:49.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:36:49.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:36:49.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:36:49.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:36:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:36:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.400491 -999.00  +21.90  21.90     52  +11.60 1 2 1 1 1   888    0 11.17 4.30 ----- 23.1 21.9 269.6 26.2 27.2 -17.3 26.9 -16.4 25.7 -16.3 26.4 -16.3
2026-02-11T11:36:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:36:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:36:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.400491
2026-02-11T11:36:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:36:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:36:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:36:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:36:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:36:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:36:21', tmtdew=12.7, humidity=44.27, cloud=0.0, wind=29.61, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:36:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:36:49.683 [DEBUG] [Thread-128268] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:36:49.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:36:49.779 [DEBUG] [Thread-128271] [transport.py] [_log()] starting thread (client mode): 0x9eb063e0
2026-02-11T11:36:49.779 [DEBUG] [Thread-128271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:36:49.794 [DEBUG] [Thread-128271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:36:49.794 [INFO] [Thread-128271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:36:49.801 [DEBUG] [Thread-128271] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] client lang: <none>
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] server lang: <none>
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] kex follows: False
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:36:49.802 [DEBUG] [Thread-128271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:36:49.803 [DEBUG] [Thread-128271] [transport.py] [_log()] Compression: none
2026-02-11T11:36:49.803 [DEBUG] [Thread-128271] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:36:49.866 [DEBUG] [Thread-128271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:36:49.866 [DEBUG] [Thread-128271] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:36:49.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:36:49.867 [DEBUG] [Thread-128271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:36:49.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:36:49.921 [DEBUG] [Thread-128271] [transport.py] [_log()] userauth is OK
2026-02-11T11:36:49.922 [DEBUG] [Thread-128271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:36:49.922 [DEBUG] [Thread-128271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:36:49.922 [DEBUG] [Thread-128271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:36:49.922 [DEBUG] [Thread-128271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:36:49.941 [INFO] [Thread-128271] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:36:49.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:36:49.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:36:50.796 [DEBUG] [Thread-128271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:36:50.796 [DEBUG] [Thread-128271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:36:50.844 [DEBUG] [Thread-128271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:36:50.844 [DEBUG] [Thread-128271] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:36:50.853 [DEBUG] [Thread-128271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:36:50.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:36:50.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')
2026-02-11T11:36:50.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:36:50.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:36:50.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:36:50.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:36:50.890 [DEBUG] [Thread-128271] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:37:00.575 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:37:00.576 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:37:02.002 [DEBUG] [Thread-128273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:37:11.771 [DEBUG] [Thread-128274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:37:17.052 [DEBUG] [Thread-128275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:37:20.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:37:20.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:37:20.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:37:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 36, 56), 12.56, 44.81, 0.0, 22.97, 22.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:37:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:36:56
2026-02-11T11:37:23.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:37:23.233 [DEBUG] [Thread-128276] [transport.py] [_log()] starting thread (client mode): 0xa2dc6f80
2026-02-11T11:37:23.233 [DEBUG] [Thread-128276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:37:23.245 [DEBUG] [Thread-128276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:37:23.245 [INFO] [Thread-128276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] client lang: <none>
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] server lang: <none>
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] kex follows: False
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] Compression: none
2026-02-11T11:37:23.247 [DEBUG] [Thread-128276] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:37:23.255 [DEBUG] [Thread-128276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:37:23.255 [DEBUG] [Thread-128276] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:37:23.255 [DEBUG] [Thread-128276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:37:23.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:37:23.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:37:23.256 [DEBUG] [Thread-128276] [transport.py] [_log()] userauth is OK
2026-02-11T11:37:23.256 [DEBUG] [Thread-128276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:37:23.256 [DEBUG] [Thread-128276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:37:23.256 [DEBUG] [Thread-128276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:37:23.256 [DEBUG] [Thread-128276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:37:23.269 [INFO] [Thread-128276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:37:23.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:37:23.842 [DEBUG] [Thread-128276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:37:23.842 [DEBUG] [Thread-128276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:37:23.843 [DEBUG] [Thread-128276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:37:23.883 [DEBUG] [Thread-128276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:37:23.883 [DEBUG] [Thread-128276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:37:23.886 [DEBUG] [Thread-128276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:37:23.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:37:23.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:37:23.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:37:23.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:37:23.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:37:23.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:37:23.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:37:23.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:37:23.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:37:23.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.400838 -999.00  +22.10  15.69     51  +11.80 1 2 1 1 1   888    0 10.84 -1.74 ----- 18.3 15.7 281.4 26.4 27.1 -17.5 26.9 -16.2 25.7 -16.5 26.4 -14.4
2026-02-11T11:37:23.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:37:23.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:37:23.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.400838
2026-02-11T11:37:23.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:37:23.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:37:23.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:37:23.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:37:23.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:37:23.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:36:56', tmtdew=12.56, humidity=44.81, cloud=0.0, wind=22.97, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:37:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:37:23.910 [DEBUG] [Thread-128276] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:37:24.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:37:24.016 [DEBUG] [Thread-128279] [transport.py] [_log()] starting thread (client mode): 0xa2dc6f20
2026-02-11T11:37:24.016 [DEBUG] [Thread-128279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:37:24.034 [DEBUG] [Thread-128279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:37:24.035 [INFO] [Thread-128279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:37:24.042 [DEBUG] [Thread-128279] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:37:24.043 [DEBUG] [Thread-128279] [transport.py] [_log()] client lang: <none>
2026-02-11T11:37:24.044 [DEBUG] [Thread-128279] [transport.py] [_log()] server lang: <none>
2026-02-11T11:37:24.044 [DEBUG] [Thread-128279] [transport.py] [_log()] kex follows: False
2026-02-11T11:37:24.044 [DEBUG] [Thread-128279] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:37:24.044 [DEBUG] [Thread-128279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:37:24.044 [DEBUG] [Thread-128279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:37:24.044 [DEBUG] [Thread-128279] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:37:24.044 [DEBUG] [Thread-128279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:37:24.045 [DEBUG] [Thread-128279] [transport.py] [_log()] Compression: none
2026-02-11T11:37:24.045 [DEBUG] [Thread-128279] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:37:24.104 [DEBUG] [Thread-128279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:37:24.105 [DEBUG] [Thread-128279] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:37:24.106 [DEBUG] [Thread-128279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:37:24.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:37:24.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:37:24.167 [DEBUG] [Thread-128279] [transport.py] [_log()] userauth is OK
2026-02-11T11:37:24.167 [DEBUG] [Thread-128279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:37:24.167 [DEBUG] [Thread-128279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:37:24.167 [DEBUG] [Thread-128279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:37:24.167 [DEBUG] [Thread-128279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:37:24.186 [INFO] [Thread-128279] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:37:24.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:37:24.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:37:25.074 [DEBUG] [Thread-128279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:37:25.074 [DEBUG] [Thread-128279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:37:25.122 [DEBUG] [Thread-128279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:37:25.122 [DEBUG] [Thread-128279] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:37:25.132 [DEBUG] [Thread-128279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:37:25.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:37:25.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:37:25.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
2026-02-11T11:37:25.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:37:25.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:37:25.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:37:25.168 [DEBUG] [Thread-128279] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:37:32.090 [DEBUG] [Thread-128281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:37:47.140 [DEBUG] [Thread-128282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:37:55.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:37:55.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:37:55.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:37:57.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 37, 32), 12.27, 45.59, 0.0, 21.74, 22.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:37:57.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:37:32
2026-02-11T11:37:57.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:37:57.579 [DEBUG] [Thread-128283] [transport.py] [_log()] starting thread (client mode): 0xa2dc2aa0
2026-02-11T11:37:57.579 [DEBUG] [Thread-128283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:37:57.605 [DEBUG] [Thread-128283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:37:57.605 [INFO] [Thread-128283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:57.608 [DEBUG] [Thread-128283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] client lang: <none>
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] server lang: <none>
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] kex follows: False
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] Compression: none
2026-02-11T11:37:57.609 [DEBUG] [Thread-128283] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:37:57.619 [DEBUG] [Thread-128283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:37:57.619 [DEBUG] [Thread-128283] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:37:57.620 [DEBUG] [Thread-128283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:37:57.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:37:57.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:37:57.622 [DEBUG] [Thread-128283] [transport.py] [_log()] userauth is OK
2026-02-11T11:37:57.622 [DEBUG] [Thread-128283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:37:57.622 [DEBUG] [Thread-128283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:37:57.622 [DEBUG] [Thread-128283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:37:57.622 [DEBUG] [Thread-128283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:37:57.648 [INFO] [Thread-128283] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:37:57.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:37:58.204 [DEBUG] [Thread-128283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:37:58.205 [DEBUG] [Thread-128283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:37:58.205 [DEBUG] [Thread-128283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:37:58.245 [DEBUG] [Thread-128283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:37:58.246 [DEBUG] [Thread-128283] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:37:58.249 [DEBUG] [Thread-128283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:37:58.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:37:58.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:37:58.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:37:58.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:37:58.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:37:58.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:37:58.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:37:58.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:37:58.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:37:58.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.401186 -999.00  +22.60  14.76     51  +12.00 1 2 1 1 1   888    0 10.96 -5.97 ----- 24.2 14.8 268.2 24.2 27.4 -15.5 27.1 -14.5 26.0 -14.2 26.6 -13.3
2026-02-11T11:37:58.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:37:58.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:37:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.401186
2026-02-11T11:37:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:37:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:37:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:37:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:37:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:37:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:37:32', tmtdew=12.27, humidity=45.59, cloud=0.0, wind=21.74, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:37:42.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:37:58.275 [DEBUG] [Thread-128283] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:37:58.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:37:58.372 [DEBUG] [Thread-128286] [transport.py] [_log()] starting thread (client mode): 0xa57c1a80
2026-02-11T11:37:58.373 [DEBUG] [Thread-128286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:37:58.387 [DEBUG] [Thread-128286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:37:58.387 [INFO] [Thread-128286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:37:58.394 [DEBUG] [Thread-128286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:37:58.395 [DEBUG] [Thread-128286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:37:58.395 [DEBUG] [Thread-128286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:37:58.395 [DEBUG] [Thread-128286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:58.395 [DEBUG] [Thread-128286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:37:58.395 [DEBUG] [Thread-128286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:58.395 [DEBUG] [Thread-128286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] client lang: <none>
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] server lang: <none>
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] kex follows: False
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:37:58.396 [DEBUG] [Thread-128286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:37:58.397 [DEBUG] [Thread-128286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:37:58.397 [DEBUG] [Thread-128286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:37:58.397 [DEBUG] [Thread-128286] [transport.py] [_log()] Compression: none
2026-02-11T11:37:58.397 [DEBUG] [Thread-128286] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:37:58.452 [DEBUG] [Thread-128286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:37:58.453 [DEBUG] [Thread-128286] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:37:58.453 [DEBUG] [Thread-128286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:37:58.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:37:58.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:37:58.507 [DEBUG] [Thread-128286] [transport.py] [_log()] userauth is OK
2026-02-11T11:37:58.508 [DEBUG] [Thread-128286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:37:58.508 [DEBUG] [Thread-128286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:37:58.508 [DEBUG] [Thread-128286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:37:58.508 [DEBUG] [Thread-128286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:37:58.533 [INFO] [Thread-128286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:37:58.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:37:58.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:37:59.334 [DEBUG] [Thread-128286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:37:59.335 [DEBUG] [Thread-128286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:37:59.382 [DEBUG] [Thread-128286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:37:59.382 [DEBUG] [Thread-128286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:37:59.390 [DEBUG] [Thread-128286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:37:59.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:37:59.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:37:59.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
2026-02-11T11:37:59.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:37:59.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:37:59.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:37:59.425 [DEBUG] [Thread-128286] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:38:00.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:38:00.720 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:38:02.179 [DEBUG] [Thread-128288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:38:11.814 [DEBUG] [Thread-128289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:38:17.231 [DEBUG] [Thread-128290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:38:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:38:29.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:38:29.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:38:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 38, 7), 12.3, 45.54, 0.0, 20.15, 22.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:38:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:38:07
2026-02-11T11:38:31.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:38:31.807 [DEBUG] [Thread-128291] [transport.py] [_log()] starting thread (client mode): 0xa575add0
2026-02-11T11:38:31.807 [DEBUG] [Thread-128291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:38:31.827 [DEBUG] [Thread-128291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:38:31.827 [INFO] [Thread-128291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:38:31.828 [DEBUG] [Thread-128291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] client lang: <none>
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] server lang: <none>
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] kex follows: False
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] Compression: none
2026-02-11T11:38:31.829 [DEBUG] [Thread-128291] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:38:31.839 [DEBUG] [Thread-128291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:38:31.839 [DEBUG] [Thread-128291] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:38:31.840 [DEBUG] [Thread-128291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:38:31.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:38:31.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:38:31.842 [DEBUG] [Thread-128291] [transport.py] [_log()] userauth is OK
2026-02-11T11:38:31.842 [DEBUG] [Thread-128291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:38:31.843 [DEBUG] [Thread-128291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:38:31.843 [DEBUG] [Thread-128291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:38:31.843 [DEBUG] [Thread-128291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:38:31.868 [INFO] [Thread-128291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:38:31.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:38:32.265 [DEBUG] [Thread-128293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:38:32.479 [DEBUG] [Thread-128291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:38:32.479 [DEBUG] [Thread-128291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:38:32.480 [DEBUG] [Thread-128291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:38:32.521 [DEBUG] [Thread-128291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:38:32.521 [DEBUG] [Thread-128291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:38:32.524 [DEBUG] [Thread-128291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:38:32.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:38:32.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:38:32.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:38:32.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:38:32.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:38:32.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:38:32.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:38:32.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:38:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:38:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.401533 -999.00  +22.70  27.92     50  +11.80 1 2 1 1 1   888    0 10.67 -8.57 ----- 25.4 27.9 280.8 33.5 27.2 -17.3 26.9 -16.1 25.9 -15.1 26.4 -14.9
2026-02-11T11:38:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:38:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:38:32.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.401533
2026-02-11T11:38:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:38:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:38:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:38:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:38:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:38:32.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:38:07', tmtdew=12.3, humidity=45.54, cloud=0.0, wind=20.15, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:38:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:38:32.547 [DEBUG] [Thread-128291] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:38:32.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:38:32.640 [DEBUG] [Thread-128295] [transport.py] [_log()] starting thread (client mode): 0xa2dc6ce0
2026-02-11T11:38:32.641 [DEBUG] [Thread-128295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:38:32.655 [DEBUG] [Thread-128295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:38:32.655 [INFO] [Thread-128295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:38:32.665 [DEBUG] [Thread-128295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:38:32.665 [DEBUG] [Thread-128295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:38:32.665 [DEBUG] [Thread-128295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] client lang: <none>
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] server lang: <none>
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] kex follows: False
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] Compression: none
2026-02-11T11:38:32.666 [DEBUG] [Thread-128295] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:38:32.722 [DEBUG] [Thread-128295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:38:32.723 [DEBUG] [Thread-128295] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:38:32.723 [DEBUG] [Thread-128295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:38:32.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:38:32.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:38:32.783 [DEBUG] [Thread-128295] [transport.py] [_log()] userauth is OK
2026-02-11T11:38:32.784 [DEBUG] [Thread-128295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:38:32.784 [DEBUG] [Thread-128295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:38:32.784 [DEBUG] [Thread-128295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:38:32.784 [DEBUG] [Thread-128295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:38:32.805 [INFO] [Thread-128295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:38:32.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:38:32.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:38:33.632 [DEBUG] [Thread-128295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:38:33.633 [DEBUG] [Thread-128295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:38:33.680 [DEBUG] [Thread-128295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:38:33.680 [DEBUG] [Thread-128295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:38:33.688 [DEBUG] [Thread-128295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:38:33.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:38:33.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:38:33.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
2026-02-11T11:38:33.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:38:33.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:38:33.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:38:33.722 [DEBUG] [Thread-128295] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:38:47.299 [DEBUG] [Thread-128297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:39:00.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:39:00.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:39:02.361 [DEBUG] [Thread-128298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:39:03.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:39:03.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:39:03.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:39:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 38, 42), 12.61, 44.89, 0.0, 23.13, 22.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:39:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:38:42
2026-02-11T11:39:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:39:06.183 [DEBUG] [Thread-128299] [transport.py] [_log()] starting thread (client mode): 0xa2df8e50
2026-02-11T11:39:06.183 [DEBUG] [Thread-128299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:39:06.204 [DEBUG] [Thread-128299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:39:06.204 [INFO] [Thread-128299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:39:06.205 [DEBUG] [Thread-128299] [transport.py] [_log()] client lang: <none>
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] server lang: <none>
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] kex follows: False
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] Compression: none
2026-02-11T11:39:06.206 [DEBUG] [Thread-128299] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:39:06.219 [DEBUG] [Thread-128299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:39:06.220 [DEBUG] [Thread-128299] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:39:06.221 [DEBUG] [Thread-128299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:39:06.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:39:06.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:39:06.223 [DEBUG] [Thread-128299] [transport.py] [_log()] userauth is OK
2026-02-11T11:39:06.223 [DEBUG] [Thread-128299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:39:06.223 [DEBUG] [Thread-128299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:39:06.224 [DEBUG] [Thread-128299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:39:06.224 [DEBUG] [Thread-128299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:39:06.250 [INFO] [Thread-128299] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:39:06.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:39:06.911 [DEBUG] [Thread-128299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:39:06.911 [DEBUG] [Thread-128299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:39:06.911 [DEBUG] [Thread-128299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:39:06.951 [DEBUG] [Thread-128299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:39:06.952 [DEBUG] [Thread-128299] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:39:06.955 [DEBUG] [Thread-128299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:39:06.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:39:06.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:39:06.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:39:06.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:39:06.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:39:06.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:39:06.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:39:06.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:39:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:39:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.401880 -999.00  +22.50  15.84     50  +11.80 1 2 1 1 1   888    0 10.75 -10.75 ----- 6.1 15.8 277.6 27.5 27.2 -17.1 26.8 -16.1 25.8 -14.9 26.4 -15.1
2026-02-11T11:39:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:39:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:39:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.401880
2026-02-11T11:39:06.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:39:06.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:39:06.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:39:06.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:39:06.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:39:06.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:38:42', tmtdew=12.61, humidity=44.89, cloud=0.0, wind=23.13, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:38:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:39:06.981 [DEBUG] [Thread-128299] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:39:07.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:39:07.066 [DEBUG] [Thread-128302] [transport.py] [_log()] starting thread (client mode): 0xa2df8fd0
2026-02-11T11:39:07.067 [DEBUG] [Thread-128302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:39:07.081 [DEBUG] [Thread-128302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:39:07.081 [INFO] [Thread-128302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] client lang: <none>
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] server lang: <none>
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] kex follows: False
2026-02-11T11:39:07.089 [DEBUG] [Thread-128302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:39:07.090 [DEBUG] [Thread-128302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:39:07.090 [DEBUG] [Thread-128302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:39:07.090 [DEBUG] [Thread-128302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:39:07.090 [DEBUG] [Thread-128302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:39:07.090 [DEBUG] [Thread-128302] [transport.py] [_log()] Compression: none
2026-02-11T11:39:07.090 [DEBUG] [Thread-128302] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:39:07.146 [DEBUG] [Thread-128302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:39:07.147 [DEBUG] [Thread-128302] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:39:07.147 [DEBUG] [Thread-128302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:39:07.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:39:07.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:39:07.205 [DEBUG] [Thread-128302] [transport.py] [_log()] userauth is OK
2026-02-11T11:39:07.206 [DEBUG] [Thread-128302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:39:07.206 [DEBUG] [Thread-128302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:39:07.206 [DEBUG] [Thread-128302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:39:07.206 [DEBUG] [Thread-128302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:39:07.224 [INFO] [Thread-128302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:39:07.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:39:07.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:39:08.149 [DEBUG] [Thread-128302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:39:08.149 [DEBUG] [Thread-128302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:39:08.200 [DEBUG] [Thread-128302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:39:08.200 [DEBUG] [Thread-128302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:39:08.213 [DEBUG] [Thread-128302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:39:08.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:39: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')
2026-02-11T11:39: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
2026-02-11T11:39:08.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:39:08.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:39:08.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:39:08.254 [DEBUG] [Thread-128302] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:39:11.865 [DEBUG] [Thread-128304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:39:17.400 [DEBUG] [Thread-128305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:39:32.452 [DEBUG] [Thread-128306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:39:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:39:38.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:39:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:39:40.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 39, 19), 12.94, 44.01, 0.0, 24.33, 22.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:39:40.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:39:19
2026-02-11T11:39:40.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:39:40.648 [DEBUG] [Thread-128307] [transport.py] [_log()] starting thread (client mode): 0xa2df8fa0
2026-02-11T11:39:40.648 [DEBUG] [Thread-128307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:39:40.668 [DEBUG] [Thread-128307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:39:40.669 [INFO] [Thread-128307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:39:40.671 [DEBUG] [Thread-128307] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] client lang: <none>
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] server lang: <none>
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] kex follows: False
2026-02-11T11:39:40.672 [DEBUG] [Thread-128307] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:39:40.673 [DEBUG] [Thread-128307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:39:40.673 [DEBUG] [Thread-128307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:39:40.673 [DEBUG] [Thread-128307] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:39:40.673 [DEBUG] [Thread-128307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:39:40.673 [DEBUG] [Thread-128307] [transport.py] [_log()] Compression: none
2026-02-11T11:39:40.673 [DEBUG] [Thread-128307] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:39:40.691 [DEBUG] [Thread-128307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:39:40.692 [DEBUG] [Thread-128307] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:39:40.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:39:40.693 [DEBUG] [Thread-128307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:39:40.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:39:40.695 [DEBUG] [Thread-128307] [transport.py] [_log()] userauth is OK
2026-02-11T11:39:40.696 [DEBUG] [Thread-128307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:39:40.696 [DEBUG] [Thread-128307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:39:40.696 [DEBUG] [Thread-128307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:39:40.696 [DEBUG] [Thread-128307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:39:40.722 [INFO] [Thread-128307] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:39:40.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:39:41.362 [DEBUG] [Thread-128307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:39:41.363 [DEBUG] [Thread-128307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:39:41.363 [DEBUG] [Thread-128307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:39:41.403 [DEBUG] [Thread-128307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:39:41.404 [DEBUG] [Thread-128307] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:39:41.407 [DEBUG] [Thread-128307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:39:41.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:39:41.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:39:41.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:39:41.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:39:41.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:39:41.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:39:41.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:39:41.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:39:41.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:39:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.402228 -999.00  +22.40  22.62     50  +11.80 1 2 1 1 1   888    0 10.70 -13.60 ----- 20.8 22.6 281.2 29.6 27.2 -15.7 26.9 -14.3 25.9 -15.8 26.6 -11.4
2026-02-11T11:39:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:39:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:39:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.402228
2026-02-11T11:39:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:39:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:39:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:39:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:39:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:39:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:39:19', tmtdew=12.94, humidity=44.01, cloud=0.0, wind=24.33, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:39:12.499', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:39:41.437 [DEBUG] [Thread-128307] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:39:41.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:39:41.533 [DEBUG] [Thread-128310] [transport.py] [_log()] starting thread (client mode): 0xa575ac80
2026-02-11T11:39:41.533 [DEBUG] [Thread-128310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:39:41.552 [DEBUG] [Thread-128310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:39:41.553 [INFO] [Thread-128310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:39:41.560 [DEBUG] [Thread-128310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] client lang: <none>
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] server lang: <none>
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] kex follows: False
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] Compression: none
2026-02-11T11:39:41.561 [DEBUG] [Thread-128310] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:39:41.618 [DEBUG] [Thread-128310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:39:41.619 [DEBUG] [Thread-128310] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:39:41.620 [DEBUG] [Thread-128310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:39:41.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:39:41.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:39:41.675 [DEBUG] [Thread-128310] [transport.py] [_log()] userauth is OK
2026-02-11T11:39:41.675 [DEBUG] [Thread-128310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:39:41.676 [DEBUG] [Thread-128310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:39:41.676 [DEBUG] [Thread-128310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:39:41.676 [DEBUG] [Thread-128310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:39:41.697 [INFO] [Thread-128310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:39:41.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:39:41.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:39:42.505 [DEBUG] [Thread-128310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:39:42.505 [DEBUG] [Thread-128310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:39:42.553 [DEBUG] [Thread-128310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:39:42.553 [DEBUG] [Thread-128310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:39:42.561 [DEBUG] [Thread-128310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:39:42.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:39:42.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:39:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:39:42.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:39:42.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:39:42.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:39:42.593 [DEBUG] [Thread-128310] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:39:47.489 [DEBUG] [Thread-128312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:01.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:01.006 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:02.539 [DEBUG] [Thread-128313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:11.926 [DEBUG] [Thread-128314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:40:12.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:40:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:40:14.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 39, 54), 13.13, 43.35, 0.0, 29.32, 22.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:40:14.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:39:54
2026-02-11T11:40:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:40:14.976 [DEBUG] [Thread-128315] [transport.py] [_log()] starting thread (client mode): 0x9eb050f0
2026-02-11T11:40:14.976 [DEBUG] [Thread-128315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:40:14.995 [DEBUG] [Thread-128315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:40:14.996 [INFO] [Thread-128315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:40:14.997 [DEBUG] [Thread-128315] [transport.py] [_log()] client lang: <none>
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] server lang: <none>
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] kex follows: False
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] Compression: none
2026-02-11T11:40:14.998 [DEBUG] [Thread-128315] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:40:15.016 [DEBUG] [Thread-128315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:40:15.016 [DEBUG] [Thread-128315] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:40:15.017 [DEBUG] [Thread-128315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:40:15.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:40:15.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:40:15.019 [DEBUG] [Thread-128315] [transport.py] [_log()] userauth is OK
2026-02-11T11:40:15.019 [DEBUG] [Thread-128315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:40:15.019 [DEBUG] [Thread-128315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:40:15.019 [DEBUG] [Thread-128315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:40:15.019 [DEBUG] [Thread-128315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:40:15.033 [INFO] [Thread-128315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:40:15.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:40:15.626 [DEBUG] [Thread-128315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:40:15.626 [DEBUG] [Thread-128315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:40:15.627 [DEBUG] [Thread-128315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:40:15.667 [DEBUG] [Thread-128315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:40:15.667 [DEBUG] [Thread-128315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:40:15.671 [DEBUG] [Thread-128315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:40:15.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:40:15.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:40:15.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:40:15.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:40:15.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:40:15.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:40:15.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:40:15.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:40:15.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:40:15.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.402575 -999.00  +22.50  22.77     50  +11.70 1 2 1 1 1   888    0 10.53 -17.18 ----- 21.2 22.8 280.2 32.3 27.9 -13.5 27.4 -12.8 26.4 -12.6 27.0 -11.9
2026-02-11T11:40:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:40:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:40:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.402575
2026-02-11T11:40:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:40:15.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:40:15.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:40:15.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:40:15.697 [DEBUG] [Thread-128315] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:40:15.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:40:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:39:54', tmtdew=13.13, humidity=43.35, cloud=0.0, wind=29.32, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:39:42.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:40:15.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:40:15.794 [DEBUG] [Thread-128318] [transport.py] [_log()] starting thread (client mode): 0xa57c2950
2026-02-11T11:40:15.794 [DEBUG] [Thread-128318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:40:15.811 [DEBUG] [Thread-128318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:40:15.811 [INFO] [Thread-128318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:40:15.818 [DEBUG] [Thread-128318] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] client lang: <none>
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] server lang: <none>
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] kex follows: False
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] Compression: none
2026-02-11T11:40:15.819 [DEBUG] [Thread-128318] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:40:15.881 [DEBUG] [Thread-128318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:40:15.881 [DEBUG] [Thread-128318] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:40:15.882 [DEBUG] [Thread-128318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:40:15.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:40:15.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:40:15.940 [DEBUG] [Thread-128318] [transport.py] [_log()] userauth is OK
2026-02-11T11:40:15.941 [DEBUG] [Thread-128318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:40:15.941 [DEBUG] [Thread-128318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:40:15.941 [DEBUG] [Thread-128318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:40:15.941 [DEBUG] [Thread-128318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:40:15.960 [INFO] [Thread-128318] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:40:15.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:40:15.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:40:16.820 [DEBUG] [Thread-128318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:40:16.821 [DEBUG] [Thread-128318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:40:16.868 [DEBUG] [Thread-128318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:40:16.869 [DEBUG] [Thread-128318] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:40:16.878 [DEBUG] [Thread-128318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:40:16.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:40:16.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:40:16.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:40:16.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:40:16.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:40:16.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:40:16.915 [DEBUG] [Thread-128318] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:40:17.582 [DEBUG] [Thread-128320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:32.631 [DEBUG] [Thread-128321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:40:46.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:40:46.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:40:47.665 [DEBUG] [Thread-128322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:40:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 40, 29), 12.98, 43.71, 0.0, 26.45, 22.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:40:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:40:29
2026-02-11T11:40:49.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:40:49.238 [DEBUG] [Thread-128323] [transport.py] [_log()] starting thread (client mode): 0xa2d57ca0
2026-02-11T11:40:49.238 [DEBUG] [Thread-128323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:40:49.257 [DEBUG] [Thread-128323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:40:49.257 [INFO] [Thread-128323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] client lang: <none>
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] server lang: <none>
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] kex follows: False
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:40:49.260 [DEBUG] [Thread-128323] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:40:49.261 [DEBUG] [Thread-128323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:40:49.261 [DEBUG] [Thread-128323] [transport.py] [_log()] Compression: none
2026-02-11T11:40:49.261 [DEBUG] [Thread-128323] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:40:49.278 [DEBUG] [Thread-128323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:40:49.279 [DEBUG] [Thread-128323] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:40:49.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:40:49.280 [DEBUG] [Thread-128323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:40:49.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:40:49.281 [DEBUG] [Thread-128323] [transport.py] [_log()] userauth is OK
2026-02-11T11:40:49.281 [DEBUG] [Thread-128323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:40:49.281 [DEBUG] [Thread-128323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:40:49.281 [DEBUG] [Thread-128323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:40:49.281 [DEBUG] [Thread-128323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:40:49.296 [INFO] [Thread-128323] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:40:49.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:40:49.927 [DEBUG] [Thread-128323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:40:49.927 [DEBUG] [Thread-128323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:40:49.928 [DEBUG] [Thread-128323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:40:49.969 [DEBUG] [Thread-128323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:40:49.969 [DEBUG] [Thread-128323] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:40:49.972 [DEBUG] [Thread-128323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:40:49.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:40:49.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:40:49.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:40:49.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:40:49.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:40:49.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:40:49.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:40:49.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:40:49.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:40:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.403264 -999.00  +22.30  18.02     51  +11.90 1 2 1 1 1   888    0 10.09 -28.52 ----- 14.4 18.0 282.8 26.6 27.4 -18.5 26.9 -18.0 25.9 -16.5 26.6 -15.1
2026-02-11T11:40:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:40:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:40:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.403264
2026-02-11T11:40:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:40:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:40:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:40:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:40:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:40:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:40:29', tmtdew=12.98, humidity=43.71, cloud=0.0, wind=26.45, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:40:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:40:50.001 [DEBUG] [Thread-128323] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:40:50.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:40:50.099 [DEBUG] [Thread-128326] [transport.py] [_log()] starting thread (client mode): 0xa57b1360
2026-02-11T11:40:50.099 [DEBUG] [Thread-128326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:40:50.113 [DEBUG] [Thread-128326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:40:50.113 [INFO] [Thread-128326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:40:50.121 [DEBUG] [Thread-128326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:40:50.121 [DEBUG] [Thread-128326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:40:50.121 [DEBUG] [Thread-128326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] client lang: <none>
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] server lang: <none>
2026-02-11T11:40:50.122 [DEBUG] [Thread-128326] [transport.py] [_log()] kex follows: False
2026-02-11T11:40:50.123 [DEBUG] [Thread-128326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:40:50.123 [DEBUG] [Thread-128326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:40:50.123 [DEBUG] [Thread-128326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:40:50.123 [DEBUG] [Thread-128326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:40:50.123 [DEBUG] [Thread-128326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:40:50.123 [DEBUG] [Thread-128326] [transport.py] [_log()] Compression: none
2026-02-11T11:40:50.123 [DEBUG] [Thread-128326] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:40:50.185 [DEBUG] [Thread-128326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:40:50.186 [DEBUG] [Thread-128326] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:40:50.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:40:50.187 [DEBUG] [Thread-128326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:40:50.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:40:50.246 [DEBUG] [Thread-128326] [transport.py] [_log()] userauth is OK
2026-02-11T11:40:50.246 [DEBUG] [Thread-128326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:40:50.246 [DEBUG] [Thread-128326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:40:50.247 [DEBUG] [Thread-128326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:40:50.247 [DEBUG] [Thread-128326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:40:50.266 [INFO] [Thread-128326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:40:50.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:40:50.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:40:51.213 [DEBUG] [Thread-128326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:40:51.214 [DEBUG] [Thread-128326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:40:51.261 [DEBUG] [Thread-128326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:40:51.261 [DEBUG] [Thread-128326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:40:51.270 [DEBUG] [Thread-128326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:40:51.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:40:51.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:40:51.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:40:51.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:40:51.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:40:51.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:40:51.304 [DEBUG] [Thread-128326] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:41:01.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:41:01.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:41:02.702 [DEBUG] [Thread-128328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:41:11.979 [DEBUG] [Thread-128329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:41:17.755 [DEBUG] [Thread-128330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:41:21.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:41:21.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:41:21.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
2026-02-11T11:41:23.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 41, 5), 13.06, 43.53, 0.0, 27.95, 22.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:41:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:41:05
2026-02-11T11:41:23.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:41:23.651 [DEBUG] [Thread-128331] [transport.py] [_log()] starting thread (client mode): 0xa57c23e0
2026-02-11T11:41:23.651 [DEBUG] [Thread-128331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:41:23.666 [DEBUG] [Thread-128331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:41:23.667 [INFO] [Thread-128331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:41:23.669 [DEBUG] [Thread-128331] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] client lang: <none>
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] server lang: <none>
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] kex follows: False
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] Compression: none
2026-02-11T11:41:23.670 [DEBUG] [Thread-128331] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:41:23.687 [DEBUG] [Thread-128331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:41:23.688 [DEBUG] [Thread-128331] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:41:23.688 [DEBUG] [Thread-128331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:41:23.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:41:23.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:41:23.690 [DEBUG] [Thread-128331] [transport.py] [_log()] userauth is OK
2026-02-11T11:41:23.690 [DEBUG] [Thread-128331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:41:23.690 [DEBUG] [Thread-128331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:41:23.691 [DEBUG] [Thread-128331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:41:23.691 [DEBUG] [Thread-128331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:41:23.714 [INFO] [Thread-128331] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:41:23.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:41:24.278 [DEBUG] [Thread-128331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:41:24.279 [DEBUG] [Thread-128331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:41:24.279 [DEBUG] [Thread-128331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:41:24.319 [DEBUG] [Thread-128331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:41:24.319 [DEBUG] [Thread-128331] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:41:24.322 [DEBUG] [Thread-128331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:41:24.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:41:24.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:41:24.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:41:24.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:41:24.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:41:24.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:41:24.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:41:24.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:41:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:41:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.403616 -999.00  +22.60  28.99     50  +11.90 1 2 1 1 1   888    0 10.07 -33.19 ----- 28.6 29.0 292.4 31.6 27.7 -15.1 27.3 -14.5 26.3 -14.4 27.1 -11.7
2026-02-11T11:41:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:41:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:41:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.403616
2026-02-11T11:41:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:41:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:41:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:41:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:41:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:41:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:41:05', tmtdew=13.06, humidity=43.53, cloud=0.0, wind=27.95, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:41:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:41:24.353 [DEBUG] [Thread-128331] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:41:24.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:41:24.451 [DEBUG] [Thread-128334] [transport.py] [_log()] starting thread (client mode): 0xa57c2920
2026-02-11T11:41:24.451 [DEBUG] [Thread-128334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:41:24.465 [DEBUG] [Thread-128334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:41:24.465 [INFO] [Thread-128334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:41:24.472 [DEBUG] [Thread-128334] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:41:24.473 [DEBUG] [Thread-128334] [transport.py] [_log()] client lang: <none>
2026-02-11T11:41:24.474 [DEBUG] [Thread-128334] [transport.py] [_log()] server lang: <none>
2026-02-11T11:41:24.474 [DEBUG] [Thread-128334] [transport.py] [_log()] kex follows: False
2026-02-11T11:41:24.474 [DEBUG] [Thread-128334] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:41:24.474 [DEBUG] [Thread-128334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:41:24.474 [DEBUG] [Thread-128334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:41:24.474 [DEBUG] [Thread-128334] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:41:24.474 [DEBUG] [Thread-128334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:41:24.475 [DEBUG] [Thread-128334] [transport.py] [_log()] Compression: none
2026-02-11T11:41:24.475 [DEBUG] [Thread-128334] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:41:24.532 [DEBUG] [Thread-128334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:41:24.533 [DEBUG] [Thread-128334] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:41:24.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:41:24.534 [DEBUG] [Thread-128334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:41:24.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:41:24.590 [DEBUG] [Thread-128334] [transport.py] [_log()] userauth is OK
2026-02-11T11:41:24.590 [DEBUG] [Thread-128334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:41:24.590 [DEBUG] [Thread-128334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:41:24.590 [DEBUG] [Thread-128334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:41:24.591 [DEBUG] [Thread-128334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:41:24.613 [INFO] [Thread-128334] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:41:24.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:41:24.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:41:25.452 [DEBUG] [Thread-128334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:41:25.452 [DEBUG] [Thread-128334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:41:25.499 [DEBUG] [Thread-128334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:41:25.499 [DEBUG] [Thread-128334] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:41:25.508 [DEBUG] [Thread-128334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:41:25.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:41:25.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')
2026-02-11T11:41:25.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:41:25.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:41:25.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:41:25.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:41:25.545 [DEBUG] [Thread-128334] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:41:32.789 [DEBUG] [Thread-128336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:41:47.840 [DEBUG] [Thread-128337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:41:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:41:55.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:41:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:41:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 41, 41), 14.09, 40.86, 0.0, 28.23, 24.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:41:57.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:41:41
2026-02-11T11:41:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:41:58.187 [DEBUG] [Thread-128338] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-11T11:41:58.187 [DEBUG] [Thread-128338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:41:58.207 [DEBUG] [Thread-128338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:41:58.207 [INFO] [Thread-128338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:41:58.210 [DEBUG] [Thread-128338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:41:58.210 [DEBUG] [Thread-128338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] client lang: <none>
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] server lang: <none>
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] kex follows: False
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:41:58.211 [DEBUG] [Thread-128338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:41:58.212 [DEBUG] [Thread-128338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:41:58.212 [DEBUG] [Thread-128338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:41:58.212 [DEBUG] [Thread-128338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:41:58.212 [DEBUG] [Thread-128338] [transport.py] [_log()] Compression: none
2026-02-11T11:41:58.212 [DEBUG] [Thread-128338] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:41:58.231 [DEBUG] [Thread-128338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:41:58.232 [DEBUG] [Thread-128338] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:41:58.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:41:58.233 [DEBUG] [Thread-128338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:41:58.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:41:58.276 [DEBUG] [Thread-128338] [transport.py] [_log()] userauth is OK
2026-02-11T11:41:58.277 [DEBUG] [Thread-128338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:41:58.277 [DEBUG] [Thread-128338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:41:58.277 [DEBUG] [Thread-128338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:41:58.277 [DEBUG] [Thread-128338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:41:58.302 [INFO] [Thread-128338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:41:58.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:41:58.917 [DEBUG] [Thread-128338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:41:58.917 [DEBUG] [Thread-128338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:41:58.918 [DEBUG] [Thread-128338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:41:58.958 [DEBUG] [Thread-128338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:41:58.958 [DEBUG] [Thread-128338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:41:58.961 [DEBUG] [Thread-128338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:41:58.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:41:58.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:41:58.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:41:58.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:41:58.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:41:58.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:41:58.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:41:58.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:41:58.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:41:58.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.403964 -999.00  +22.50  25.47     50  +11.80 1 2 1 1 1   888    0 10.03 -35.81 ----- 23.4 25.5 306.0 29.6 28.1 -14.4 27.6 -13.7 26.6 -12.6 27.4 -11.4
2026-02-11T11:41:58.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:41:58.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:41:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.403964
2026-02-11T11:41:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:41:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:41:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:41:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:41:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:41:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:41:41', tmtdew=14.09, humidity=40.86, cloud=0.0, wind=28.23, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:41:42.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:41:58.987 [DEBUG] [Thread-128338] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:41:59.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:41:59.096 [DEBUG] [Thread-128341] [transport.py] [_log()] starting thread (client mode): 0xa57c3df0
2026-02-11T11:41:59.096 [DEBUG] [Thread-128341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:41:59.110 [DEBUG] [Thread-128341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:41:59.111 [INFO] [Thread-128341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:41:59.119 [DEBUG] [Thread-128341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:41:59.119 [DEBUG] [Thread-128341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:41:59.119 [DEBUG] [Thread-128341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:41:59.119 [DEBUG] [Thread-128341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:59.119 [DEBUG] [Thread-128341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:41:59.119 [DEBUG] [Thread-128341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] client lang: <none>
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] server lang: <none>
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] kex follows: False
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:41:59.120 [DEBUG] [Thread-128341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:41:59.121 [DEBUG] [Thread-128341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:41:59.121 [DEBUG] [Thread-128341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:41:59.121 [DEBUG] [Thread-128341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:41:59.121 [DEBUG] [Thread-128341] [transport.py] [_log()] Compression: none
2026-02-11T11:41:59.121 [DEBUG] [Thread-128341] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:41:59.179 [DEBUG] [Thread-128341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:41:59.180 [DEBUG] [Thread-128341] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:41:59.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:41:59.181 [DEBUG] [Thread-128341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:41:59.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:41:59.239 [DEBUG] [Thread-128341] [transport.py] [_log()] userauth is OK
2026-02-11T11:41:59.239 [DEBUG] [Thread-128341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:41:59.240 [DEBUG] [Thread-128341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:41:59.240 [DEBUG] [Thread-128341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:41:59.240 [DEBUG] [Thread-128341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:41:59.259 [INFO] [Thread-128341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:41:59.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:41:59.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:42:00.081 [DEBUG] [Thread-128341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:42:00.082 [DEBUG] [Thread-128341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:42:00.129 [DEBUG] [Thread-128341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:42:00.129 [DEBUG] [Thread-128341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:42:00.139 [DEBUG] [Thread-128341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:42:00.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:42: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')
2026-02-11T11:42:00.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:42:00.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:42:00.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:42:00.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:42:00.175 [DEBUG] [Thread-128341] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:42:01.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:42:01.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:42:02.877 [DEBUG] [Thread-128343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:42:12.049 [DEBUG] [Thread-128344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:42:17.927 [DEBUG] [Thread-128345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:42:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:42:30.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:42:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:42:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 42, 16), 12.98, 43.73, 0.0, 21.23, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:42:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:42:16
2026-02-11T11:42:32.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:42:32.660 [DEBUG] [Thread-128346] [transport.py] [_log()] starting thread (client mode): 0xa2d78dc0
2026-02-11T11:42:32.660 [DEBUG] [Thread-128346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:42:32.681 [DEBUG] [Thread-128346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:42:32.681 [INFO] [Thread-128346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:42:32.684 [DEBUG] [Thread-128346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:42:32.684 [DEBUG] [Thread-128346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:42:32.684 [DEBUG] [Thread-128346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] client lang: <none>
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] server lang: <none>
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] kex follows: False
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] Compression: none
2026-02-11T11:42:32.685 [DEBUG] [Thread-128346] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:42:32.702 [DEBUG] [Thread-128346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:42:32.702 [DEBUG] [Thread-128346] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:42:32.703 [DEBUG] [Thread-128346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:42:32.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:42:32.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:42:32.705 [DEBUG] [Thread-128346] [transport.py] [_log()] userauth is OK
2026-02-11T11:42:32.705 [DEBUG] [Thread-128346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:42:32.705 [DEBUG] [Thread-128346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:42:32.705 [DEBUG] [Thread-128346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:42:32.706 [DEBUG] [Thread-128346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:42:32.742 [INFO] [Thread-128346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:42:32.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:42:32.962 [DEBUG] [Thread-128348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:42:33.396 [DEBUG] [Thread-128346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:42:33.396 [DEBUG] [Thread-128346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:42:33.396 [DEBUG] [Thread-128346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:42:33.436 [DEBUG] [Thread-128346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:42:33.437 [DEBUG] [Thread-128346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:42:33.440 [DEBUG] [Thread-128346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:42:33.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:42:33.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:42:33.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:42:33.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:42:33.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:42:33.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:42:33.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:42:33.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:42:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:42:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.404311 -999.00  +22.40  25.79     50  +11.50 1 2 1 1 1   888    0 9.98 -36.64 ----- 27.2 25.8 279.3 36.0 28.4 -16.6 27.8 -14.8 26.6 -14.8 27.5 -13.4
2026-02-11T11:42:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:42:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:42:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.404311
2026-02-11T11:42:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:42:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:42:33.466 [DEBUG] [Thread-128346] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:42:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:42:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:42:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:42:33.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:42:16', tmtdew=12.98, humidity=43.73, cloud=0.0, wind=21.23, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:42:12.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:42:33.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:42:33.563 [DEBUG] [Thread-128350] [transport.py] [_log()] starting thread (client mode): 0xa2dc2710
2026-02-11T11:42:33.564 [DEBUG] [Thread-128350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:42:33.579 [DEBUG] [Thread-128350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:42:33.580 [INFO] [Thread-128350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:42:33.588 [DEBUG] [Thread-128350] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:42:33.588 [DEBUG] [Thread-128350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:42:33.588 [DEBUG] [Thread-128350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:42:33.588 [DEBUG] [Thread-128350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:42:33.588 [DEBUG] [Thread-128350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:42:33.588 [DEBUG] [Thread-128350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] client lang: <none>
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] server lang: <none>
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] kex follows: False
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:42:33.589 [DEBUG] [Thread-128350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:42:33.590 [DEBUG] [Thread-128350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:42:33.590 [DEBUG] [Thread-128350] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:42:33.590 [DEBUG] [Thread-128350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:42:33.590 [DEBUG] [Thread-128350] [transport.py] [_log()] Compression: none
2026-02-11T11:42:33.590 [DEBUG] [Thread-128350] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:42:33.657 [DEBUG] [Thread-128350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:42:33.657 [DEBUG] [Thread-128350] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:42:33.658 [DEBUG] [Thread-128350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:42:33.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:42:33.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:42:33.718 [DEBUG] [Thread-128350] [transport.py] [_log()] userauth is OK
2026-02-11T11:42:33.718 [DEBUG] [Thread-128350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:42:33.718 [DEBUG] [Thread-128350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:42:33.718 [DEBUG] [Thread-128350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:42:33.718 [DEBUG] [Thread-128350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:42:33.740 [INFO] [Thread-128350] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:42:33.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:42:33.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:42:34.590 [DEBUG] [Thread-128350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:42:34.591 [DEBUG] [Thread-128350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:42:34.638 [DEBUG] [Thread-128350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:42:34.639 [DEBUG] [Thread-128350] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:42:34.648 [DEBUG] [Thread-128350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:42:34.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:42:34.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:42:34.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:42:34.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:42:34.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:42:34.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:42:34.687 [DEBUG] [Thread-128350] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:42:47.996 [DEBUG] [Thread-128352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:43:01.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:43:01.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:43:03.049 [DEBUG] [Thread-128353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:43:04.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:43:04.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:43:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:43:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 42, 52), 12.87, 43.8, 0.0, 24.03, 22.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:43:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:42:52
2026-02-11T11:43:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:43:07.044 [DEBUG] [Thread-128354] [transport.py] [_log()] starting thread (client mode): 0xa2d55630
2026-02-11T11:43:07.044 [DEBUG] [Thread-128354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:43:07.063 [DEBUG] [Thread-128354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:43:07.063 [INFO] [Thread-128354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:43:07.066 [DEBUG] [Thread-128354] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] client lang: <none>
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] server lang: <none>
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] kex follows: False
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] Compression: none
2026-02-11T11:43:07.067 [DEBUG] [Thread-128354] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:43:07.083 [DEBUG] [Thread-128354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:43:07.084 [DEBUG] [Thread-128354] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:43:07.084 [DEBUG] [Thread-128354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:43:07.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:43:07.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:43:07.086 [DEBUG] [Thread-128354] [transport.py] [_log()] userauth is OK
2026-02-11T11:43:07.086 [DEBUG] [Thread-128354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:43:07.086 [DEBUG] [Thread-128354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:43:07.086 [DEBUG] [Thread-128354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:43:07.086 [DEBUG] [Thread-128354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:43:07.100 [INFO] [Thread-128354] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:43:07.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:43:07.750 [DEBUG] [Thread-128354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:43:07.750 [DEBUG] [Thread-128354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:43:07.750 [DEBUG] [Thread-128354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:43:07.791 [DEBUG] [Thread-128354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:43:07.792 [DEBUG] [Thread-128354] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:43:07.795 [DEBUG] [Thread-128354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:43:07.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:43:07.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:43:07.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:43:07.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:43:07.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:43:07.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:43:07.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:43:07.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:43:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:43:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.404658 -999.00  +22.10  23.95     51  +11.50 1 2 1 1 1   888    0 10.10 -36.75 ----- 21.9 23.9 283.4 30.2 28.4 -16.1 27.8 -14.8 26.4 -13.6 27.5 -12.2
2026-02-11T11:43:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:43:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:43:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.404658
2026-02-11T11:43:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:43:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:43:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:43:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:43:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:43:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:42:52', tmtdew=12.87, humidity=43.8, cloud=0.0, wind=24.03, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:42:42.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:43:07.819 [DEBUG] [Thread-128354] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:43:07.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:43:07.916 [DEBUG] [Thread-128357] [transport.py] [_log()] starting thread (client mode): 0xa2d56e00
2026-02-11T11:43:07.916 [DEBUG] [Thread-128357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:43:07.931 [DEBUG] [Thread-128357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:43:07.931 [INFO] [Thread-128357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:43:07.938 [DEBUG] [Thread-128357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] client lang: <none>
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] server lang: <none>
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] kex follows: False
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] Compression: none
2026-02-11T11:43:07.939 [DEBUG] [Thread-128357] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:43:08.000 [DEBUG] [Thread-128357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:43:08.001 [DEBUG] [Thread-128357] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:43:08.001 [DEBUG] [Thread-128357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:43:08.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:43:08.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:43:08.056 [DEBUG] [Thread-128357] [transport.py] [_log()] userauth is OK
2026-02-11T11:43:08.057 [DEBUG] [Thread-128357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:43:08.057 [DEBUG] [Thread-128357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:43:08.057 [DEBUG] [Thread-128357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:43:08.057 [DEBUG] [Thread-128357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:43:08.084 [INFO] [Thread-128357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:43:08.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:43:08.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:43:08.956 [DEBUG] [Thread-128357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:43:08.957 [DEBUG] [Thread-128357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:43:09.004 [DEBUG] [Thread-128357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:43:09.005 [DEBUG] [Thread-128357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:43:09.014 [DEBUG] [Thread-128357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:43:09.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:43:09.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:43:09.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:43:09.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:43:09.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:43:09.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:43:09.049 [DEBUG] [Thread-128357] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:43:12.097 [DEBUG] [Thread-128359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:43:18.087 [DEBUG] [Thread-128360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:43:33.143 [DEBUG] [Thread-128361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:43:39.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:43:39.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:43:39.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:43:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 43, 27), 12.95, 43.58, 0.0, 21.77, 22.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:43:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:43:27
2026-02-11T11:43:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:43:41.546 [DEBUG] [Thread-128362] [transport.py] [_log()] starting thread (client mode): 0x9eb05420
2026-02-11T11:43:41.546 [DEBUG] [Thread-128362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:43:41.567 [DEBUG] [Thread-128362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:43:41.567 [INFO] [Thread-128362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:43:41.577 [DEBUG] [Thread-128362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:43:41.577 [DEBUG] [Thread-128362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:43:41.577 [DEBUG] [Thread-128362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:43:41.577 [DEBUG] [Thread-128362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:41.577 [DEBUG] [Thread-128362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:41.577 [DEBUG] [Thread-128362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:41.577 [DEBUG] [Thread-128362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] client lang: <none>
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] server lang: <none>
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] kex follows: False
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] Compression: none
2026-02-11T11:43:41.578 [DEBUG] [Thread-128362] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:43:41.595 [DEBUG] [Thread-128362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:43:41.596 [DEBUG] [Thread-128362] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:43:41.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:43:41.597 [DEBUG] [Thread-128362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:43:41.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:43:41.599 [DEBUG] [Thread-128362] [transport.py] [_log()] userauth is OK
2026-02-11T11:43:41.599 [DEBUG] [Thread-128362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:43:41.600 [DEBUG] [Thread-128362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:43:41.600 [DEBUG] [Thread-128362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:43:41.600 [DEBUG] [Thread-128362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:43:41.615 [INFO] [Thread-128362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:43:41.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:43:42.251 [DEBUG] [Thread-128362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:43:42.252 [DEBUG] [Thread-128362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:43:42.252 [DEBUG] [Thread-128362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:43:42.292 [DEBUG] [Thread-128362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:43:42.293 [DEBUG] [Thread-128362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:43:42.296 [DEBUG] [Thread-128362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:43:42.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:43:42.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:43:42.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:43:42.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:43:42.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:43:42.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:43:42.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:43:42.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:43:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:43:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.405005 -999.00  +21.80  19.34     51  +11.40 1 2 1 1 1   888    0 9.93 -41.25 ----- 16.7 19.3 280.0 30.5 28.4 -16.3 27.9 -15.2 26.2 -16.3 27.5 -13.0
2026-02-11T11:43:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:43:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:43:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.405005
2026-02-11T11:43:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:43:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:43:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:43:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:43:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:43:42.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:43:27', tmtdew=12.95, humidity=43.58, cloud=0.0, wind=21.77, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:43:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:43:42.323 [DEBUG] [Thread-128362] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:43:42.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:43:42.419 [DEBUG] [Thread-128365] [transport.py] [_log()] starting thread (client mode): 0xa2d01a20
2026-02-11T11:43:42.419 [DEBUG] [Thread-128365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:43:42.435 [DEBUG] [Thread-128365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:43:42.435 [INFO] [Thread-128365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:43:42.444 [DEBUG] [Thread-128365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:43:42.444 [DEBUG] [Thread-128365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:43:42.444 [DEBUG] [Thread-128365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:43:42.444 [DEBUG] [Thread-128365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:42.444 [DEBUG] [Thread-128365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] client lang: <none>
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] server lang: <none>
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] kex follows: False
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:43:42.445 [DEBUG] [Thread-128365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:43:42.446 [DEBUG] [Thread-128365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:43:42.446 [DEBUG] [Thread-128365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:43:42.446 [DEBUG] [Thread-128365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:43:42.446 [DEBUG] [Thread-128365] [transport.py] [_log()] Compression: none
2026-02-11T11:43:42.446 [DEBUG] [Thread-128365] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:43:42.501 [DEBUG] [Thread-128365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:43:42.502 [DEBUG] [Thread-128365] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:43:42.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:43:42.503 [DEBUG] [Thread-128365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:43:42.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:43:42.561 [DEBUG] [Thread-128365] [transport.py] [_log()] userauth is OK
2026-02-11T11:43:42.561 [DEBUG] [Thread-128365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:43:42.562 [DEBUG] [Thread-128365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:43:42.562 [DEBUG] [Thread-128365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:43:42.562 [DEBUG] [Thread-128365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:43:42.581 [INFO] [Thread-128365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:43:42.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:43:42.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:43:43.424 [DEBUG] [Thread-128365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:43:43.424 [DEBUG] [Thread-128365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:43:43.473 [DEBUG] [Thread-128365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:43:43.473 [DEBUG] [Thread-128365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:43:43.483 [DEBUG] [Thread-128365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:43:43.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:43:43.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')
2026-02-11T11:43:43.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:43:43.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:43:43.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:43:43.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:43:43.526 [DEBUG] [Thread-128365] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:43:48.179 [DEBUG] [Thread-128367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:01.575 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:01.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:03.238 [DEBUG] [Thread-128368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:12.150 [DEBUG] [Thread-128369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:13.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:44:13.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:44:13.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
2026-02-11T11:44:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 44, 3), 13.12, 43.15, 0.0, 24.33, 22.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:44:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:44:03
2026-02-11T11:44:15.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:44:15.911 [DEBUG] [Thread-128370] [transport.py] [_log()] starting thread (client mode): 0xa2d024a0
2026-02-11T11:44:15.911 [DEBUG] [Thread-128370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:44:15.931 [DEBUG] [Thread-128370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:44:15.931 [INFO] [Thread-128370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] client lang: <none>
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] server lang: <none>
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] kex follows: False
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:44:15.934 [DEBUG] [Thread-128370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:44:15.935 [DEBUG] [Thread-128370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:44:15.935 [DEBUG] [Thread-128370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:44:15.935 [DEBUG] [Thread-128370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:44:15.935 [DEBUG] [Thread-128370] [transport.py] [_log()] Compression: none
2026-02-11T11:44:15.935 [DEBUG] [Thread-128370] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:44:15.951 [DEBUG] [Thread-128370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:44:15.952 [DEBUG] [Thread-128370] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:44:15.952 [DEBUG] [Thread-128370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:44:15.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:44:15.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:44:15.997 [DEBUG] [Thread-128370] [transport.py] [_log()] userauth is OK
2026-02-11T11:44:15.997 [DEBUG] [Thread-128370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:44:15.997 [DEBUG] [Thread-128370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:44:15.997 [DEBUG] [Thread-128370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:44:15.997 [DEBUG] [Thread-128370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:44:16.034 [INFO] [Thread-128370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:44:16.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:44:16.618 [DEBUG] [Thread-128370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:44:16.618 [DEBUG] [Thread-128370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:44:16.619 [DEBUG] [Thread-128370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:44:16.659 [DEBUG] [Thread-128370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:44:16.659 [DEBUG] [Thread-128370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:44:16.661 [DEBUG] [Thread-128370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:44:16.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:44:16.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:44:16.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:44:16.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:44:16.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:44:16.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:44:16.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:44:16.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:44:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:44:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.405352 -999.00  +21.90  13.54     51  +11.60 1 2 1 1 1   888    0 9.72 -43.28 ----- 15.2 13.5 281.3 18.6 28.9 -13.2 28.1 -13.4 26.9 -10.7 27.8 -10.2
2026-02-11T11:44:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:44:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:44:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.405352
2026-02-11T11:44:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:44:16.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:44:16.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:44:16.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:44:16.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:44:16.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:44:03', tmtdew=13.12, humidity=43.15, cloud=0.0, wind=24.33, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:43:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:44:16.688 [DEBUG] [Thread-128370] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:44:16.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:44:16.784 [DEBUG] [Thread-128373] [transport.py] [_log()] starting thread (client mode): 0xa2d7ad10
2026-02-11T11:44:16.784 [DEBUG] [Thread-128373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:44:16.799 [DEBUG] [Thread-128373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:44:16.799 [INFO] [Thread-128373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:44:16.807 [DEBUG] [Thread-128373] [transport.py] [_log()] client lang: <none>
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] server lang: <none>
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] kex follows: False
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] Compression: none
2026-02-11T11:44:16.808 [DEBUG] [Thread-128373] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:44:16.864 [DEBUG] [Thread-128373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:44:16.864 [DEBUG] [Thread-128373] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:44:16.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:44:16.865 [DEBUG] [Thread-128373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:44:16.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:44:16.921 [DEBUG] [Thread-128373] [transport.py] [_log()] userauth is OK
2026-02-11T11:44:16.921 [DEBUG] [Thread-128373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:44:16.921 [DEBUG] [Thread-128373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:44:16.922 [DEBUG] [Thread-128373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:44:16.922 [DEBUG] [Thread-128373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:44:16.941 [INFO] [Thread-128373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:44:16.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:44:16.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:44:17.760 [DEBUG] [Thread-128373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:44:17.760 [DEBUG] [Thread-128373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:44:17.808 [DEBUG] [Thread-128373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:44:17.809 [DEBUG] [Thread-128373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:44:17.818 [DEBUG] [Thread-128373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:44:17.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:44:17.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:44:17.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:44:17.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:44:17.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:44:17.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:44:17.854 [DEBUG] [Thread-128373] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:44:18.273 [DEBUG] [Thread-128375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:33.327 [DEBUG] [Thread-128376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:44:47.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:44:47.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:44:48.364 [DEBUG] [Thread-128377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:44:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 44, 38), 14.46, 39.97, 0.0, 23.57, 24.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:44:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:44:38
2026-02-11T11:44:50.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:44:50.445 [DEBUG] [Thread-128378] [transport.py] [_log()] starting thread (client mode): 0xa2d00370
2026-02-11T11:44:50.445 [DEBUG] [Thread-128378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:44:50.445 [DEBUG] [Thread-128378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:44:50.445 [INFO] [Thread-128378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] client lang: <none>
2026-02-11T11:44:50.450 [DEBUG] [Thread-128378] [transport.py] [_log()] server lang: <none>
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] kex follows: False
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] Compression: none
2026-02-11T11:44:50.451 [DEBUG] [Thread-128378] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:44:50.467 [DEBUG] [Thread-128378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:44:50.468 [DEBUG] [Thread-128378] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:44:50.468 [DEBUG] [Thread-128378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:44:50.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:44:50.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:44:50.471 [DEBUG] [Thread-128378] [transport.py] [_log()] userauth is OK
2026-02-11T11:44:50.471 [DEBUG] [Thread-128378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:44:50.471 [DEBUG] [Thread-128378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:44:50.471 [DEBUG] [Thread-128378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:44:50.471 [DEBUG] [Thread-128378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:44:50.494 [INFO] [Thread-128378] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:44:50.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:44:51.130 [DEBUG] [Thread-128378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:44:51.130 [DEBUG] [Thread-128378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:44:51.131 [DEBUG] [Thread-128378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:44:51.175 [DEBUG] [Thread-128378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:44:51.175 [DEBUG] [Thread-128378] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:44:51.179 [DEBUG] [Thread-128378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:44:51.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:44:51.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:44:51.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:44:51.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:44:51.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:44:51.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:44:51.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:44:51.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:44:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:44:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.405700 -999.00  +22.20  11.35     51  +11.70 1 2 1 1 1   888    0 9.59 -47.79 ----- 11.7 11.3 301.8 17.9 29.2 -12.5 28.4 -12.9 27.2 -9.9 28.1 -9.5
2026-02-11T11:44:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:44:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:44:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.405700
2026-02-11T11:44:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:44:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:44:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:44:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:44:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:44:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:44:38', tmtdew=14.46, humidity=39.97, cloud=0.0, wind=23.57, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:44:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:44:51.215 [DEBUG] [Thread-128378] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:44:51.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:44:51.309 [DEBUG] [Thread-128381] [transport.py] [_log()] starting thread (client mode): 0xa2d3c5b0
2026-02-11T11:44:51.309 [DEBUG] [Thread-128381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:44:51.325 [DEBUG] [Thread-128381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:44:51.325 [INFO] [Thread-128381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:44:51.333 [DEBUG] [Thread-128381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:44:51.333 [DEBUG] [Thread-128381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:44:51.333 [DEBUG] [Thread-128381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] client lang: <none>
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] server lang: <none>
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] kex follows: False
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] Compression: none
2026-02-11T11:44:51.334 [DEBUG] [Thread-128381] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:44:51.390 [DEBUG] [Thread-128381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:44:51.391 [DEBUG] [Thread-128381] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:44:51.391 [DEBUG] [Thread-128381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:44:51.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:44:51.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:44:51.450 [DEBUG] [Thread-128381] [transport.py] [_log()] userauth is OK
2026-02-11T11:44:51.450 [DEBUG] [Thread-128381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:44:51.450 [DEBUG] [Thread-128381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:44:51.450 [DEBUG] [Thread-128381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:44:51.450 [DEBUG] [Thread-128381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:44:51.469 [INFO] [Thread-128381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:44:51.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:44:51.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:44:52.319 [DEBUG] [Thread-128381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:44:52.319 [DEBUG] [Thread-128381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:44:52.367 [DEBUG] [Thread-128381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:44:52.367 [DEBUG] [Thread-128381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:44:52.375 [DEBUG] [Thread-128381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:44:52.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:44:52.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')
2026-02-11T11:44:52.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:44:52.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:44:52.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:44:52.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:44:52.410 [DEBUG] [Thread-128381] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:45:01.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:45:01.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:45:03.400 [DEBUG] [Thread-128383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:45:12.203 [DEBUG] [Thread-128384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:45:18.451 [DEBUG] [Thread-128385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:45:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:45:22.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:45:22.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:45:24.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 45, 14), 13.65, 42.32, 0.0, 27.79, 23.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:45:24.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:45:14
2026-02-11T11:45:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:45:24.708 [DEBUG] [Thread-128386] [transport.py] [_log()] starting thread (client mode): 0xa2d3e410
2026-02-11T11:45:24.709 [DEBUG] [Thread-128386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:45:24.729 [DEBUG] [Thread-128386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:45:24.729 [INFO] [Thread-128386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:45:24.732 [DEBUG] [Thread-128386] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] client lang: <none>
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] server lang: <none>
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] kex follows: False
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] Compression: none
2026-02-11T11:45:24.733 [DEBUG] [Thread-128386] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:45:24.749 [DEBUG] [Thread-128386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:45:24.750 [DEBUG] [Thread-128386] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:45:24.750 [DEBUG] [Thread-128386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:45:24.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:45:24.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:45:24.752 [DEBUG] [Thread-128386] [transport.py] [_log()] userauth is OK
2026-02-11T11:45:24.752 [DEBUG] [Thread-128386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:45:24.753 [DEBUG] [Thread-128386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:45:24.753 [DEBUG] [Thread-128386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:45:24.753 [DEBUG] [Thread-128386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:45:24.777 [INFO] [Thread-128386] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:45:24.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:45:25.440 [DEBUG] [Thread-128386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:45:25.440 [DEBUG] [Thread-128386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:45:25.441 [DEBUG] [Thread-128386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:45:25.481 [DEBUG] [Thread-128386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:45:25.482 [DEBUG] [Thread-128386] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:45:25.485 [DEBUG] [Thread-128386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:45:25.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:45:25.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:45:25.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:45:25.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:45:25.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:45:25.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:45:25.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:45:25.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:45:25.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:45:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.406394 -999.00  +22.60  24.51     48  +11.30 1 2 1 1 1   888    0 9.39 -50.68 ----- 29.2 24.5 301.0 35.6 28.8 -18.8 28.1 -18.2 26.8 -15.1 27.6 -15.0
2026-02-11T11:45:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:45:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:45:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.406394
2026-02-11T11:45:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:45:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:45:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:45:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:45:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:45:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:45:14', tmtdew=13.65, humidity=42.32, cloud=0.0, wind=27.79, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:45:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:45:25.511 [DEBUG] [Thread-128386] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:45:25.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:45:25.607 [DEBUG] [Thread-128389] [transport.py] [_log()] starting thread (client mode): 0xa2d3c9a0
2026-02-11T11:45:25.607 [DEBUG] [Thread-128389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:45:25.621 [DEBUG] [Thread-128389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:45:25.621 [INFO] [Thread-128389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] client lang: <none>
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] server lang: <none>
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] kex follows: False
2026-02-11T11:45:25.629 [DEBUG] [Thread-128389] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:45:25.630 [DEBUG] [Thread-128389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:45:25.630 [DEBUG] [Thread-128389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:45:25.630 [DEBUG] [Thread-128389] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:45:25.630 [DEBUG] [Thread-128389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:45:25.630 [DEBUG] [Thread-128389] [transport.py] [_log()] Compression: none
2026-02-11T11:45:25.630 [DEBUG] [Thread-128389] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:45:25.687 [DEBUG] [Thread-128389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:45:25.687 [DEBUG] [Thread-128389] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:45:25.688 [DEBUG] [Thread-128389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:45:25.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:45:25.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:45:25.747 [DEBUG] [Thread-128389] [transport.py] [_log()] userauth is OK
2026-02-11T11:45:25.747 [DEBUG] [Thread-128389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:45:25.747 [DEBUG] [Thread-128389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:45:25.747 [DEBUG] [Thread-128389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:45:25.747 [DEBUG] [Thread-128389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:45:25.766 [INFO] [Thread-128389] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:45:25.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:45:25.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:45:26.616 [DEBUG] [Thread-128389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:45:26.616 [DEBUG] [Thread-128389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:45:26.664 [DEBUG] [Thread-128389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:45:26.664 [DEBUG] [Thread-128389] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:45:26.673 [DEBUG] [Thread-128389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:45:26.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:45:26.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:45:26.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:45:26.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:45:26.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:45:26.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:45:26.710 [DEBUG] [Thread-128389] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:45:33.492 [DEBUG] [Thread-128391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:45:48.544 [DEBUG] [Thread-128392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:45:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:45:56.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:45:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:45:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 45, 49), 13.85, 41.52, 0.0, 27.83, 23.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:45:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:45:49
2026-02-11T11:45:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:45:59.221 [DEBUG] [Thread-128393] [transport.py] [_log()] starting thread (client mode): 0xa2d3e980
2026-02-11T11:45:59.222 [DEBUG] [Thread-128393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:45:59.240 [DEBUG] [Thread-128393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:45:59.241 [INFO] [Thread-128393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] client lang: <none>
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] server lang: <none>
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] kex follows: False
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:45:59.244 [DEBUG] [Thread-128393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:45:59.245 [DEBUG] [Thread-128393] [transport.py] [_log()] Compression: none
2026-02-11T11:45:59.245 [DEBUG] [Thread-128393] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:45:59.262 [DEBUG] [Thread-128393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:45:59.263 [DEBUG] [Thread-128393] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:45:59.263 [DEBUG] [Thread-128393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:45:59.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:45:59.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:45:59.266 [DEBUG] [Thread-128393] [transport.py] [_log()] userauth is OK
2026-02-11T11:45:59.266 [DEBUG] [Thread-128393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:45:59.266 [DEBUG] [Thread-128393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:45:59.267 [DEBUG] [Thread-128393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:45:59.267 [DEBUG] [Thread-128393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:45:59.289 [INFO] [Thread-128393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:45:59.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:45:59.917 [DEBUG] [Thread-128393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:45:59.917 [DEBUG] [Thread-128393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:45:59.918 [DEBUG] [Thread-128393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:45:59.958 [DEBUG] [Thread-128393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:45:59.958 [DEBUG] [Thread-128393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:45:59.961 [DEBUG] [Thread-128393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:45:59.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:45:59.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:45:59.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:45:59.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:45:59.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:45:59.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:45:59.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:45:59.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:45:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:45:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.406741 -999.00  +22.60  22.87     49  +11.40 1 2 1 1 1   888    0 9.31 -50.45 ----- 28.1 22.9 301.2 34.2 28.4 -16.6 27.7 -16.7 26.7 -14.6 27.4 -14.1
2026-02-11T11:45:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:45:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:45:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.406741
2026-02-11T11:45:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:45:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:45:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:45:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:45:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:45:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:45:49', tmtdew=13.85, humidity=41.52, cloud=0.0, wind=27.83, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:45:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:45:59.985 [DEBUG] [Thread-128393] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:46:00.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:46:00.087 [DEBUG] [Thread-128396] [transport.py] [_log()] starting thread (client mode): 0xa2d3c790
2026-02-11T11:46:00.087 [DEBUG] [Thread-128396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:46:00.102 [DEBUG] [Thread-128396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:46:00.102 [INFO] [Thread-128396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:46:00.110 [DEBUG] [Thread-128396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:46:00.110 [DEBUG] [Thread-128396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:46:00.110 [DEBUG] [Thread-128396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:46:00.110 [DEBUG] [Thread-128396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] client lang: <none>
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] server lang: <none>
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] kex follows: False
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] Compression: none
2026-02-11T11:46:00.111 [DEBUG] [Thread-128396] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:46:00.167 [DEBUG] [Thread-128396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:46:00.167 [DEBUG] [Thread-128396] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:46:00.168 [DEBUG] [Thread-128396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:46:00.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:46:00.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:46:00.224 [DEBUG] [Thread-128396] [transport.py] [_log()] userauth is OK
2026-02-11T11:46:00.224 [DEBUG] [Thread-128396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:46:00.224 [DEBUG] [Thread-128396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:46:00.224 [DEBUG] [Thread-128396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:46:00.224 [DEBUG] [Thread-128396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:46:00.243 [INFO] [Thread-128396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:46:00.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:46:00.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:46:01.067 [DEBUG] [Thread-128396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:46:01.067 [DEBUG] [Thread-128396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:46:01.115 [DEBUG] [Thread-128396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:46:01.116 [DEBUG] [Thread-128396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:46:01.124 [DEBUG] [Thread-128396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:46:01.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:46:01.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:46:01.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:46:01.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:46:01.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:46:01.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:46:01.161 [DEBUG] [Thread-128396] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:46:01.873 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:46:01.873 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:46:03.581 [DEBUG] [Thread-128398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:46:12.251 [DEBUG] [Thread-128399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:46:18.633 [DEBUG] [Thread-128400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:46:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:46:31.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:46:31.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:46:33.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 46, 24), 13.67, 41.97, 0.0, 31.9, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:46:33.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:46:24
2026-02-11T11:46:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:46:33.505 [DEBUG] [Thread-128401] [transport.py] [_log()] starting thread (client mode): 0xa2d3d480
2026-02-11T11:46:33.505 [DEBUG] [Thread-128401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:46:33.525 [DEBUG] [Thread-128401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:46:33.525 [INFO] [Thread-128401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] client lang: <none>
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] server lang: <none>
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] kex follows: False
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] Compression: none
2026-02-11T11:46:33.529 [DEBUG] [Thread-128401] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:46:33.543 [DEBUG] [Thread-128401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:46:33.543 [DEBUG] [Thread-128401] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:46:33.543 [DEBUG] [Thread-128401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:46:33.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:46:33.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:46:33.544 [DEBUG] [Thread-128401] [transport.py] [_log()] userauth is OK
2026-02-11T11:46:33.545 [DEBUG] [Thread-128401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:46:33.545 [DEBUG] [Thread-128401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:46:33.545 [DEBUG] [Thread-128401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:46:33.545 [DEBUG] [Thread-128401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:46:33.555 [INFO] [Thread-128401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:46:33.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:46:33.671 [DEBUG] [Thread-128403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:46:34.167 [DEBUG] [Thread-128401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:46:34.167 [DEBUG] [Thread-128401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:46:34.167 [DEBUG] [Thread-128401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:46:34.209 [DEBUG] [Thread-128401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:46:34.209 [DEBUG] [Thread-128401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:46:34.212 [DEBUG] [Thread-128401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:46:34.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:46:34.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:46:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:46:34.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:46:34.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:46:34.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:46:34.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:46:34.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:46:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:46:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.407089 -999.00  +22.40  32.68     49  +11.20 1 2 2 1 1   888    0 9.60 -45.76 ----- 30.9 32.7 292.6 38.6 28.1 -17.1 27.5 -17.2 26.4 -16.9 27.2 -14.5
2026-02-11T11:46:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:46:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:46:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.407089
2026-02-11T11:46:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:46:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:46:34.236 [DEBUG] [Thread-128401] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:46:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:46:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:46:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:46:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:46:24', tmtdew=13.67, humidity=41.97, cloud=0.0, wind=31.9, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:46:12.490', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:46:34.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:46:34.331 [DEBUG] [Thread-128405] [transport.py] [_log()] starting thread (client mode): 0xa2d3c190
2026-02-11T11:46:34.331 [DEBUG] [Thread-128405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:46:34.346 [DEBUG] [Thread-128405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:46:34.347 [INFO] [Thread-128405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:46:34.354 [DEBUG] [Thread-128405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] client lang: <none>
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] server lang: <none>
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] kex follows: False
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:46:34.355 [DEBUG] [Thread-128405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:46:34.356 [DEBUG] [Thread-128405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:46:34.356 [DEBUG] [Thread-128405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:46:34.356 [DEBUG] [Thread-128405] [transport.py] [_log()] Compression: none
2026-02-11T11:46:34.356 [DEBUG] [Thread-128405] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:46:34.413 [DEBUG] [Thread-128405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:46:34.413 [DEBUG] [Thread-128405] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:46:34.414 [DEBUG] [Thread-128405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:46:34.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:46:34.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:46:34.475 [DEBUG] [Thread-128405] [transport.py] [_log()] userauth is OK
2026-02-11T11:46:34.475 [DEBUG] [Thread-128405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:46:34.475 [DEBUG] [Thread-128405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:46:34.475 [DEBUG] [Thread-128405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:46:34.476 [DEBUG] [Thread-128405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:46:34.494 [INFO] [Thread-128405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:46:34.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:46:34.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:46:35.336 [DEBUG] [Thread-128405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:46:35.336 [DEBUG] [Thread-128405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:46:35.384 [DEBUG] [Thread-128405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:46:35.384 [DEBUG] [Thread-128405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:46:35.394 [DEBUG] [Thread-128405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:46:35.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:46:35.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:46:35.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:46:35.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:46:35.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:46:35.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:46:35.431 [DEBUG] [Thread-128405] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:46:48.708 [DEBUG] [Thread-128407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:47:02.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:47:02.013 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:47:03.757 [DEBUG] [Thread-128408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:47:05.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:47:05.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:47:05.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:47:07.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 46, 59), 13.55, 42.0, 0.0, 29.18, 22.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:47:07.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:46:59
2026-02-11T11:47:07.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:47:07.756 [DEBUG] [Thread-128409] [transport.py] [_log()] starting thread (client mode): 0xa2d3f610
2026-02-11T11:47:07.756 [DEBUG] [Thread-128409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:47:07.776 [DEBUG] [Thread-128409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:47:07.776 [INFO] [Thread-128409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:47:07.779 [DEBUG] [Thread-128409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:47:07.779 [DEBUG] [Thread-128409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:47:07.779 [DEBUG] [Thread-128409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:47:07.779 [DEBUG] [Thread-128409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:07.779 [DEBUG] [Thread-128409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] client lang: <none>
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] server lang: <none>
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] kex follows: False
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] Compression: none
2026-02-11T11:47:07.780 [DEBUG] [Thread-128409] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:47:07.801 [DEBUG] [Thread-128409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:47:07.801 [DEBUG] [Thread-128409] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:47:07.802 [DEBUG] [Thread-128409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:47:07.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:47:07.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:47:07.804 [DEBUG] [Thread-128409] [transport.py] [_log()] userauth is OK
2026-02-11T11:47:07.804 [DEBUG] [Thread-128409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:47:07.805 [DEBUG] [Thread-128409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:47:07.805 [DEBUG] [Thread-128409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:47:07.805 [DEBUG] [Thread-128409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:47:07.843 [INFO] [Thread-128409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:47:07.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:47:08.489 [DEBUG] [Thread-128409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:47:08.489 [DEBUG] [Thread-128409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:47:08.489 [DEBUG] [Thread-128409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:47:08.530 [DEBUG] [Thread-128409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:47:08.530 [DEBUG] [Thread-128409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:47:08.534 [DEBUG] [Thread-128409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:47:08.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:47:08.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:47:08.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:47:08.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:47:08.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:47:08.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:47:08.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:47:08.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:47:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:47:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.407436 -999.00  +22.20  27.98     49  +11.20 1 2 1 1 1   888    0 9.60 -40.26 ----- 22.7 28.0 294.8 35.5 27.8 -16.5 27.3 -16.3 26.4 -15.6 26.9 -14.5
2026-02-11T11:47:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:47:08.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:47:08.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.407436
2026-02-11T11:47:08.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:47:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:47:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:47:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:47:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:47:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:46:59', tmtdew=13.55, humidity=42.0, cloud=0.0, wind=29.18, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:46:42.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:47:08.557 [DEBUG] [Thread-128409] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:47:08.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:47:08.653 [DEBUG] [Thread-128412] [transport.py] [_log()] starting thread (client mode): 0xa2d3fac0
2026-02-11T11:47:08.654 [DEBUG] [Thread-128412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:47:08.669 [DEBUG] [Thread-128412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:47:08.669 [INFO] [Thread-128412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] client lang: <none>
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] server lang: <none>
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] kex follows: False
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:47:08.677 [DEBUG] [Thread-128412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:47:08.678 [DEBUG] [Thread-128412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:47:08.678 [DEBUG] [Thread-128412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:47:08.678 [DEBUG] [Thread-128412] [transport.py] [_log()] Compression: none
2026-02-11T11:47:08.678 [DEBUG] [Thread-128412] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:47:08.735 [DEBUG] [Thread-128412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:47:08.736 [DEBUG] [Thread-128412] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:47:08.736 [DEBUG] [Thread-128412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:47:08.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:47:08.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:47:08.792 [DEBUG] [Thread-128412] [transport.py] [_log()] userauth is OK
2026-02-11T11:47:08.792 [DEBUG] [Thread-128412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:47:08.792 [DEBUG] [Thread-128412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:47:08.793 [DEBUG] [Thread-128412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:47:08.793 [DEBUG] [Thread-128412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:47:08.814 [INFO] [Thread-128412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:47:08.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:47:08.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:47:09.638 [DEBUG] [Thread-128412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:47:09.638 [DEBUG] [Thread-128412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:47:09.686 [DEBUG] [Thread-128412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:47:09.686 [DEBUG] [Thread-128412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:47:09.695 [DEBUG] [Thread-128412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:47:09.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:47:09.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:47:09.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:47:09.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:47:09.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:47:09.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:47:09.730 [DEBUG] [Thread-128412] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:47:12.289 [DEBUG] [Thread-128414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:47:18.791 [DEBUG] [Thread-128415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:47:33.843 [DEBUG] [Thread-128416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:47:39.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:47:39.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:47:39.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:47:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 46, 59), 13.55, 42.0, 0.0, 29.18, 22.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:47:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:46:59
2026-02-11T11:47:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:47:42.276 [DEBUG] [Thread-128417] [transport.py] [_log()] starting thread (client mode): 0xa2d79600
2026-02-11T11:47:42.276 [DEBUG] [Thread-128417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:47:42.296 [DEBUG] [Thread-128417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:47:42.296 [INFO] [Thread-128417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:47:42.299 [DEBUG] [Thread-128417] [transport.py] [_log()] client lang: <none>
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] server lang: <none>
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] kex follows: False
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] Compression: none
2026-02-11T11:47:42.300 [DEBUG] [Thread-128417] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:47:42.318 [DEBUG] [Thread-128417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:47:42.318 [DEBUG] [Thread-128417] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:47:42.319 [DEBUG] [Thread-128417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:47:42.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:47:42.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:47:42.321 [DEBUG] [Thread-128417] [transport.py] [_log()] userauth is OK
2026-02-11T11:47:42.321 [DEBUG] [Thread-128417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:47:42.321 [DEBUG] [Thread-128417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:47:42.321 [DEBUG] [Thread-128417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:47:42.321 [DEBUG] [Thread-128417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:47:42.343 [INFO] [Thread-128417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:47:42.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:47:42.983 [DEBUG] [Thread-128417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:47:42.983 [DEBUG] [Thread-128417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:47:42.984 [DEBUG] [Thread-128417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:47:43.025 [DEBUG] [Thread-128417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:47:43.025 [DEBUG] [Thread-128417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:47:43.028 [DEBUG] [Thread-128417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:47:43.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:47:43.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:47:43.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:47:43.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:47:43.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:47:43.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:47:43.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:47:43.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:47:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:47:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.407783 -999.00  +22.00  22.62     50  +11.20 1 2 1 1 1   888    0 9.83 -42.79 ----- 18.8 22.6 296.4 27.6 27.6 -16.1 27.2 -16.2 26.3 -14.7 26.8 -15.0
2026-02-11T11:47:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:47:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:47:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.407783
2026-02-11T11:47:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:47:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:47:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:47:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:47:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:47:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:46:59', tmtdew=13.55, humidity=42.0, cloud=0.0, wind=29.18, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:47:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:47:43.051 [DEBUG] [Thread-128417] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:47:43.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:47:43.149 [DEBUG] [Thread-128420] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae90
2026-02-11T11:47:43.149 [DEBUG] [Thread-128420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:47:43.165 [DEBUG] [Thread-128420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:47:43.165 [INFO] [Thread-128420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:47:43.172 [DEBUG] [Thread-128420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:47:43.172 [DEBUG] [Thread-128420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:47:43.173 [DEBUG] [Thread-128420] [transport.py] [_log()] client lang: <none>
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] server lang: <none>
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] kex follows: False
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] Compression: none
2026-02-11T11:47:43.174 [DEBUG] [Thread-128420] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:47:43.232 [DEBUG] [Thread-128420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:47:43.232 [DEBUG] [Thread-128420] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:47:43.233 [DEBUG] [Thread-128420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:47:43.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:47:43.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:47:43.288 [DEBUG] [Thread-128420] [transport.py] [_log()] userauth is OK
2026-02-11T11:47:43.289 [DEBUG] [Thread-128420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:47:43.289 [DEBUG] [Thread-128420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:47:43.289 [DEBUG] [Thread-128420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:47:43.289 [DEBUG] [Thread-128420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:47:43.308 [INFO] [Thread-128420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:47:43.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:47:43.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:47:44.167 [DEBUG] [Thread-128420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:47:44.167 [DEBUG] [Thread-128420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:47:44.215 [DEBUG] [Thread-128420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:47:44.215 [DEBUG] [Thread-128420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:47:44.225 [DEBUG] [Thread-128420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:47:44.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:47:44.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:47:44.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:47:44.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:47:44.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:47:44.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:47:44.261 [DEBUG] [Thread-128420] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:47:48.878 [DEBUG] [Thread-128422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:02.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:02.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:03.931 [DEBUG] [Thread-128423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:12.339 [DEBUG] [Thread-128424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:14.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:48:14.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:48:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:48:16.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 47, 34), 14.29, 40.27, 0.0, 20.15, 23.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:48:16.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:47:34
2026-02-11T11:48:16.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:48:16.704 [DEBUG] [Thread-128425] [transport.py] [_log()] starting thread (client mode): 0xa2d78e80
2026-02-11T11:48:16.704 [DEBUG] [Thread-128425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:48:16.723 [DEBUG] [Thread-128425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:48:16.723 [INFO] [Thread-128425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:48:16.727 [DEBUG] [Thread-128425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:48:16.727 [DEBUG] [Thread-128425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:48:16.727 [DEBUG] [Thread-128425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:48:16.727 [DEBUG] [Thread-128425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] client lang: <none>
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] server lang: <none>
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] kex follows: False
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] Compression: none
2026-02-11T11:48:16.728 [DEBUG] [Thread-128425] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:48:16.747 [DEBUG] [Thread-128425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:48:16.747 [DEBUG] [Thread-128425] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:48:16.748 [DEBUG] [Thread-128425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:48:16.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:48:16.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:48:16.750 [DEBUG] [Thread-128425] [transport.py] [_log()] userauth is OK
2026-02-11T11:48:16.750 [DEBUG] [Thread-128425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:48:16.750 [DEBUG] [Thread-128425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:48:16.751 [DEBUG] [Thread-128425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:48:16.751 [DEBUG] [Thread-128425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:48:16.775 [INFO] [Thread-128425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:48:16.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:48:17.410 [DEBUG] [Thread-128425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:48:17.410 [DEBUG] [Thread-128425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:48:17.411 [DEBUG] [Thread-128425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:48:17.451 [DEBUG] [Thread-128425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:48:17.452 [DEBUG] [Thread-128425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:48:17.455 [DEBUG] [Thread-128425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:48:17.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:48:17.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:48:17.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:48:17.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:48:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:48:17.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:48:17.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:48:17.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:48:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:48:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.408131 -999.00  +21.70  15.24     51  +11.20 1 2 1 1 1   888    0 9.79 -41.15 ----- 15.5 15.2 297.2 21.1 27.4 -16.0 27.0 -15.8 26.1 -15.2 26.7 -14.7
2026-02-11T11:48:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:48:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:48:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.408131
2026-02-11T11:48:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:48:17.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:48:17.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:48:17.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:48:17.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:48:17.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:47:34', tmtdew=14.29, humidity=40.27, cloud=0.0, wind=20.15, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:47:42.518', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:48:17.483 [DEBUG] [Thread-128425] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:48:17.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:48:17.588 [DEBUG] [Thread-128428] [transport.py] [_log()] starting thread (client mode): 0xa2d78c70
2026-02-11T11:48:17.588 [DEBUG] [Thread-128428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:48:17.606 [DEBUG] [Thread-128428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:48:17.606 [INFO] [Thread-128428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] client lang: <none>
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] server lang: <none>
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] kex follows: False
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] Compression: none
2026-02-11T11:48:17.613 [DEBUG] [Thread-128428] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:48:17.673 [DEBUG] [Thread-128428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:48:17.674 [DEBUG] [Thread-128428] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:48:17.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:48:17.675 [DEBUG] [Thread-128428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:48:17.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:48:17.733 [DEBUG] [Thread-128428] [transport.py] [_log()] userauth is OK
2026-02-11T11:48:17.734 [DEBUG] [Thread-128428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:48:17.734 [DEBUG] [Thread-128428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:48:17.734 [DEBUG] [Thread-128428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:48:17.734 [DEBUG] [Thread-128428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:48:17.754 [INFO] [Thread-128428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:48:17.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:48:17.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:48:18.618 [DEBUG] [Thread-128428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:48:18.618 [DEBUG] [Thread-128428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:48:18.666 [DEBUG] [Thread-128428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:48:18.666 [DEBUG] [Thread-128428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:48:18.676 [DEBUG] [Thread-128428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:48:18.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:48:18.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')
2026-02-11T11:48:18.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:48:18.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:48:18.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:48:18.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:48:18.713 [DEBUG] [Thread-128428] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:48:18.968 [DEBUG] [Thread-128430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:34.018 [DEBUG] [Thread-128431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:48.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:48:48.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:48:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:48:49.055 [DEBUG] [Thread-128432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:48:51.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 48, 10), 13.25, 43.0, 0.0, 14.7, 22.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:48:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:48:10
2026-02-11T11:48:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:48:51.674 [DEBUG] [Thread-128433] [transport.py] [_log()] starting thread (client mode): 0xa2d78fa0
2026-02-11T11:48:51.674 [DEBUG] [Thread-128433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:48:51.694 [DEBUG] [Thread-128433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:48:51.694 [INFO] [Thread-128433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:48:51.697 [DEBUG] [Thread-128433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:48:51.697 [DEBUG] [Thread-128433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:48:51.697 [DEBUG] [Thread-128433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:48:51.697 [DEBUG] [Thread-128433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:51.697 [DEBUG] [Thread-128433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:51.697 [DEBUG] [Thread-128433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] client lang: <none>
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] server lang: <none>
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] kex follows: False
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] Compression: none
2026-02-11T11:48:51.698 [DEBUG] [Thread-128433] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:48:51.717 [DEBUG] [Thread-128433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:48:51.717 [DEBUG] [Thread-128433] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:48:51.718 [DEBUG] [Thread-128433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:48:51.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:48:51.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:48:51.720 [DEBUG] [Thread-128433] [transport.py] [_log()] userauth is OK
2026-02-11T11:48:51.720 [DEBUG] [Thread-128433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:48:51.720 [DEBUG] [Thread-128433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:48:51.720 [DEBUG] [Thread-128433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:48:51.720 [DEBUG] [Thread-128433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:48:51.745 [INFO] [Thread-128433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:48:51.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:48:52.402 [DEBUG] [Thread-128433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:48:52.403 [DEBUG] [Thread-128433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:48:52.403 [DEBUG] [Thread-128433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:48:52.443 [DEBUG] [Thread-128433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:48:52.444 [DEBUG] [Thread-128433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:48:52.447 [DEBUG] [Thread-128433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:48:52.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:48:52.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:48:52.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:48:52.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:48:52.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:48:52.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:48:52.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:48:52.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:48:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:48:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.408477 -999.00  +22.10  15.00     50  +11.40 1 2 1 1 1   888    0 9.66 -39.46 ----- 18.6 15.0 286.6 18.4 27.3 -15.3 27.0 -15.1 26.2 -14.8 26.7 -15.4
2026-02-11T11:48:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:48:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:48:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.408477
2026-02-11T11:48:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:48:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:48:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:48:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:48:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:48:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:48:10', tmtdew=13.25, humidity=43.0, cloud=0.0, wind=14.7, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:48:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:48:52.477 [DEBUG] [Thread-128433] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:48:52.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:48:52.566 [DEBUG] [Thread-128436] [transport.py] [_log()] starting thread (client mode): 0xa2d3e230
2026-02-11T11:48:52.566 [DEBUG] [Thread-128436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:48:52.580 [DEBUG] [Thread-128436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:48:52.581 [INFO] [Thread-128436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:48:52.588 [DEBUG] [Thread-128436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:48:52.588 [DEBUG] [Thread-128436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:48:52.588 [DEBUG] [Thread-128436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:48:52.588 [DEBUG] [Thread-128436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:52.588 [DEBUG] [Thread-128436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] client lang: <none>
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] server lang: <none>
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] kex follows: False
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:48:52.589 [DEBUG] [Thread-128436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:48:52.590 [DEBUG] [Thread-128436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:48:52.590 [DEBUG] [Thread-128436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:48:52.590 [DEBUG] [Thread-128436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:48:52.590 [DEBUG] [Thread-128436] [transport.py] [_log()] Compression: none
2026-02-11T11:48:52.590 [DEBUG] [Thread-128436] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:48:52.645 [DEBUG] [Thread-128436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:48:52.646 [DEBUG] [Thread-128436] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:48:52.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:48:52.647 [DEBUG] [Thread-128436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:48:52.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:48:52.702 [DEBUG] [Thread-128436] [transport.py] [_log()] userauth is OK
2026-02-11T11:48:52.702 [DEBUG] [Thread-128436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:48:52.702 [DEBUG] [Thread-128436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:48:52.702 [DEBUG] [Thread-128436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:48:52.702 [DEBUG] [Thread-128436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:48:52.721 [INFO] [Thread-128436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:48:52.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:48:52.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:48:53.565 [DEBUG] [Thread-128436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:48:53.565 [DEBUG] [Thread-128436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:48:53.613 [DEBUG] [Thread-128436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:48:53.614 [DEBUG] [Thread-128436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:48:53.623 [DEBUG] [Thread-128436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:48:53.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:48:53.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')
2026-02-11T11:48:53.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:48:53.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:48:53.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:48:53.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:48:53.659 [DEBUG] [Thread-128436] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:49:02.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:49:02.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:49:04.094 [DEBUG] [Thread-128438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:49:12.382 [DEBUG] [Thread-128439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:49:19.141 [DEBUG] [Thread-128440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:49:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:49:23.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:49:23.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:49:25.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 48, 45), 13.06, 43.35, 0.0, 18.05, 22.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:49:25.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:48:45
2026-02-11T11:49:26.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:49:26.419 [DEBUG] [Thread-128441] [transport.py] [_log()] starting thread (client mode): 0xa2d3dcc0
2026-02-11T11:49:26.420 [DEBUG] [Thread-128441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:49:26.441 [DEBUG] [Thread-128441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:49:26.441 [INFO] [Thread-128441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] client lang: <none>
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] server lang: <none>
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] kex follows: False
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] Compression: none
2026-02-11T11:49:26.445 [DEBUG] [Thread-128441] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:49:26.465 [DEBUG] [Thread-128441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:49:26.465 [DEBUG] [Thread-128441] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:49:26.466 [DEBUG] [Thread-128441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:49:26.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:49:26.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:49:26.468 [DEBUG] [Thread-128441] [transport.py] [_log()] userauth is OK
2026-02-11T11:49:26.468 [DEBUG] [Thread-128441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:49:26.468 [DEBUG] [Thread-128441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:49:26.468 [DEBUG] [Thread-128441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:49:26.468 [DEBUG] [Thread-128441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:49:26.493 [INFO] [Thread-128441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:49:26.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:49:27.134 [DEBUG] [Thread-128441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:49:27.134 [DEBUG] [Thread-128441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:49:27.135 [DEBUG] [Thread-128441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:49:27.175 [DEBUG] [Thread-128441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:49:27.175 [DEBUG] [Thread-128441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:49:27.177 [DEBUG] [Thread-128441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:49:27.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:49:27.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:49:27.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:49:27.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:49:27.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:49:27.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:49:27.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.409172 -999.00  +21.80  13.35     50  +11.20 1 2 1 1 1   888    0 10.05 -32.06 ----- 13.1 13.3 316.4 21.5 27.1 -17.4 26.9 -16.7 26.1 -16.9 26.5 -17.3
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.409172
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:49:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:48:45', tmtdew=13.06, humidity=43.35, cloud=0.0, wind=18.05, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:49:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:49:27.198 [DEBUG] [Thread-128441] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:49:27.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:49:27.282 [DEBUG] [Thread-128444] [transport.py] [_log()] starting thread (client mode): 0xa2d78b80
2026-02-11T11:49:27.282 [DEBUG] [Thread-128444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:49:27.296 [DEBUG] [Thread-128444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:49:27.297 [INFO] [Thread-128444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:49:27.305 [DEBUG] [Thread-128444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:49:27.305 [DEBUG] [Thread-128444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:49:27.305 [DEBUG] [Thread-128444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:49:27.305 [DEBUG] [Thread-128444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:49:27.305 [DEBUG] [Thread-128444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:49:27.305 [DEBUG] [Thread-128444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] client lang: <none>
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] server lang: <none>
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] kex follows: False
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:49:27.306 [DEBUG] [Thread-128444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:49:27.307 [DEBUG] [Thread-128444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:49:27.307 [DEBUG] [Thread-128444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:49:27.307 [DEBUG] [Thread-128444] [transport.py] [_log()] Compression: none
2026-02-11T11:49:27.307 [DEBUG] [Thread-128444] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:49:27.363 [DEBUG] [Thread-128444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:49:27.364 [DEBUG] [Thread-128444] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:49:27.364 [DEBUG] [Thread-128444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:49:27.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:49:27.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:49:27.423 [DEBUG] [Thread-128444] [transport.py] [_log()] userauth is OK
2026-02-11T11:49:27.423 [DEBUG] [Thread-128444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:49:27.423 [DEBUG] [Thread-128444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:49:27.423 [DEBUG] [Thread-128444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:49:27.423 [DEBUG] [Thread-128444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:49:27.442 [INFO] [Thread-128444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:49:27.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:49:27.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:49:28.280 [DEBUG] [Thread-128444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:49:28.280 [DEBUG] [Thread-128444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:49:28.329 [DEBUG] [Thread-128444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:49:28.329 [DEBUG] [Thread-128444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:49:28.343 [DEBUG] [Thread-128444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:49:28.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:49:28.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:49:28.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:49:28.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:49:28.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:49:28.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:49:28.380 [DEBUG] [Thread-128444] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:49:34.174 [DEBUG] [Thread-128446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:49:49.225 [DEBUG] [Thread-128447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:49:58.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:49:58.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:49:58.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:50:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 49, 21), 13.1, 43.23, 0.0, 18.47, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:50:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:49:21
2026-02-11T11:50:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:50:01.471 [DEBUG] [Thread-128448] [transport.py] [_log()] starting thread (client mode): 0xa2d789a0
2026-02-11T11:50:01.472 [DEBUG] [Thread-128448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:50:01.492 [DEBUG] [Thread-128448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:50:01.493 [INFO] [Thread-128448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:50:01.495 [DEBUG] [Thread-128448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] client lang: <none>
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] server lang: <none>
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] kex follows: False
2026-02-11T11:50:01.496 [DEBUG] [Thread-128448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:50:01.497 [DEBUG] [Thread-128448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:50:01.497 [DEBUG] [Thread-128448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:50:01.497 [DEBUG] [Thread-128448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:50:01.497 [DEBUG] [Thread-128448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:50:01.497 [DEBUG] [Thread-128448] [transport.py] [_log()] Compression: none
2026-02-11T11:50:01.497 [DEBUG] [Thread-128448] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:50:01.513 [DEBUG] [Thread-128448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:50:01.514 [DEBUG] [Thread-128448] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:50:01.514 [DEBUG] [Thread-128448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:50:01.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:50:01.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:50:01.516 [DEBUG] [Thread-128448] [transport.py] [_log()] userauth is OK
2026-02-11T11:50:01.516 [DEBUG] [Thread-128448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:50:01.517 [DEBUG] [Thread-128448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:50:01.517 [DEBUG] [Thread-128448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:50:01.517 [DEBUG] [Thread-128448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:50:01.533 [INFO] [Thread-128448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:50:01.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:50:02.147 [DEBUG] [Thread-128448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:50:02.147 [DEBUG] [Thread-128448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:50:02.148 [DEBUG] [Thread-128448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:50:02.188 [DEBUG] [Thread-128448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:50:02.188 [DEBUG] [Thread-128448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:50:02.191 [DEBUG] [Thread-128448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:50:02.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:50:02.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:50:02.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:50:02.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:50:02.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:50:02.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:50:02.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:50:02.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:50:02.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:50:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.409519 -999.00  +21.80  13.26     51  +11.30 1 2 1 1 1   888    0 10.04 -33.34 ----- 14.2 13.3 343.0 15.8 27.1 -17.2 26.7 -16.9 26.1 -17.2 26.5 -17.4
2026-02-11T11:50:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:50:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:50:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.409519
2026-02-11T11:50:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:50:02.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:50:02.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:50:02.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:50:02.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:50:02.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:49:21', tmtdew=13.1, humidity=43.23, cloud=0.0, wind=18.47, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:49:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:50:02.219 [DEBUG] [Thread-128448] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:50:02.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:50:02.440 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:50:02.442 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:50:04.262 [DEBUG] [Thread-128451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:50:12.450 [DEBUG] [Thread-128452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:50:19.322 [DEBUG] [Thread-128453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:50:34.358 [DEBUG] [Thread-128454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:50:49.406 [DEBUG] [Thread-128455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:51:02.584 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:51:02.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:51:04.441 [DEBUG] [Thread-128456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:51:12.495 [DEBUG] [Thread-128457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:51:19.474 [DEBUG] [Thread-128458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:51:34.510 [DEBUG] [Thread-128459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:51:49.547 [DEBUG] [Thread-128460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:52:02.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:52:02.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:52:04.590 [DEBUG] [Thread-128461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:52:12.539 [DEBUG] [Thread-128462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:52:13.879 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T11:52:19.626 [DEBUG] [Thread-128463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:52:34.661 [DEBUG] [Thread-128464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:52:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:52:43.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:52:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:52:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 52, 20), 13.88, 41.43, 0.0, 28.71, 23.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:52:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:52:20
2026-02-11T11:52:46.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:52:46.227 [DEBUG] [Thread-128465] [transport.py] [_log()] starting thread (client mode): 0xa2d7b820
2026-02-11T11:52:46.228 [DEBUG] [Thread-128465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:52:46.248 [DEBUG] [Thread-128465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:52:46.248 [INFO] [Thread-128465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:52:46.251 [DEBUG] [Thread-128465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] client lang: <none>
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] server lang: <none>
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] kex follows: False
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] Compression: none
2026-02-11T11:52:46.252 [DEBUG] [Thread-128465] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:52:46.273 [DEBUG] [Thread-128465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:52:46.274 [DEBUG] [Thread-128465] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:52:46.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:52:46.275 [DEBUG] [Thread-128465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:52:46.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:52:46.278 [DEBUG] [Thread-128465] [transport.py] [_log()] userauth is OK
2026-02-11T11:52:46.278 [DEBUG] [Thread-128465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:52:46.279 [DEBUG] [Thread-128465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:52:46.279 [DEBUG] [Thread-128465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:52:46.279 [DEBUG] [Thread-128465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:52:46.303 [INFO] [Thread-128465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:52:46.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:52:46.928 [DEBUG] [Thread-128465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:52:46.928 [DEBUG] [Thread-128465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:52:46.929 [DEBUG] [Thread-128465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:52:46.969 [DEBUG] [Thread-128465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:52:46.970 [DEBUG] [Thread-128465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:52:46.972 [DEBUG] [Thread-128465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:52:46.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:52:46.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:52:46.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:52:46.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:52:46.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:52:46.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:52:46.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:52:46.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:52:46.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:52:46.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.411255 -999.00  +22.70  29.94     47  +11.00 1 2 1 1 1   888    0 10.12 -20.33 ----- 27.1 29.9 297.2 38.1 28.9 -16.1 28.1 -16.6 27.2 -16.9 27.9 -15.1
2026-02-11T11:52:46.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:52:46.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:52:46.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.411255
2026-02-11T11:52:46.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:52:46.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:52:46.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:52:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:52:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:52:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:52:20', tmtdew=13.88, humidity=41.43, cloud=0.0, wind=28.71, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:52:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:52:46.998 [DEBUG] [Thread-128465] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:52:47.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:52:47.094 [DEBUG] [Thread-128468] [transport.py] [_log()] starting thread (client mode): 0xa2d780d0
2026-02-11T11:52:47.094 [DEBUG] [Thread-128468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:52:47.108 [DEBUG] [Thread-128468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:52:47.108 [INFO] [Thread-128468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:52:47.116 [DEBUG] [Thread-128468] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:52:47.116 [DEBUG] [Thread-128468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:52:47.116 [DEBUG] [Thread-128468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:52:47.116 [DEBUG] [Thread-128468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] client lang: <none>
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] server lang: <none>
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] kex follows: False
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] Compression: none
2026-02-11T11:52:47.117 [DEBUG] [Thread-128468] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:52:47.176 [DEBUG] [Thread-128468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:52:47.176 [DEBUG] [Thread-128468] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:52:47.176 [DEBUG] [Thread-128468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:52:47.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:52:47.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:52:47.232 [DEBUG] [Thread-128468] [transport.py] [_log()] userauth is OK
2026-02-11T11:52:47.232 [DEBUG] [Thread-128468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:52:47.232 [DEBUG] [Thread-128468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:52:47.232 [DEBUG] [Thread-128468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:52:47.232 [DEBUG] [Thread-128468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:52:47.256 [INFO] [Thread-128468] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:52:47.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:52:47.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:52:48.060 [DEBUG] [Thread-128468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:52:48.061 [DEBUG] [Thread-128468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:52:48.108 [DEBUG] [Thread-128468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:52:48.109 [DEBUG] [Thread-128468] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:52:48.118 [DEBUG] [Thread-128468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:52:48.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:52:48.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:52:48.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:52:48.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:52:48.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:52:48.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:52:48.152 [DEBUG] [Thread-128468] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:52:49.699 [DEBUG] [Thread-128470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:02.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:02.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:04.754 [DEBUG] [Thread-128471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:12.589 [DEBUG] [Thread-128472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:53:18.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:53:18.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:53:19.795 [DEBUG] [Thread-128473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 52, 55), 14.0, 41.0, 0.0, 21.98, 23.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:53:20.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:52:55
2026-02-11T11:53:20.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:53:20.598 [DEBUG] [Thread-128474] [transport.py] [_log()] starting thread (client mode): 0xa2d3c610
2026-02-11T11:53:20.599 [DEBUG] [Thread-128474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:53:20.618 [DEBUG] [Thread-128474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:53:20.618 [INFO] [Thread-128474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:53:20.621 [DEBUG] [Thread-128474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] client lang: <none>
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] server lang: <none>
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] kex follows: False
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:53:20.622 [DEBUG] [Thread-128474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:53:20.623 [DEBUG] [Thread-128474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:53:20.623 [DEBUG] [Thread-128474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:53:20.623 [DEBUG] [Thread-128474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:53:20.623 [DEBUG] [Thread-128474] [transport.py] [_log()] Compression: none
2026-02-11T11:53:20.623 [DEBUG] [Thread-128474] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:53:20.639 [DEBUG] [Thread-128474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:53:20.639 [DEBUG] [Thread-128474] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:53:20.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:53:20.640 [DEBUG] [Thread-128474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:53:20.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:53:20.642 [DEBUG] [Thread-128474] [transport.py] [_log()] userauth is OK
2026-02-11T11:53:20.642 [DEBUG] [Thread-128474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:53:20.643 [DEBUG] [Thread-128474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:53:20.643 [DEBUG] [Thread-128474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:53:20.643 [DEBUG] [Thread-128474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:53:20.660 [INFO] [Thread-128474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:53:20.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:53:21.261 [DEBUG] [Thread-128474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:53:21.261 [DEBUG] [Thread-128474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:53:21.262 [DEBUG] [Thread-128474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:53:21.302 [DEBUG] [Thread-128474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:53:21.303 [DEBUG] [Thread-128474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:53:21.306 [DEBUG] [Thread-128474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:53:21.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:53:21.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:53:21.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:53:21.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:53:21.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:53:21.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:53:21.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:53:21.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:53:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:53:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.411602 -999.00  +22.50  28.12     48  +11.00 1 2 1 1 1   888    0 10.26 -15.71 ----- 30.7 28.1 300.2 33.2 28.9 -17.0 28.2 -16.7 27.2 -17.9 28.0 -15.9
2026-02-11T11:53:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:53:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:53:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.411602
2026-02-11T11:53:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:53:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:53:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:53:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:53:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:53:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:52:55', tmtdew=14.0, humidity=41.0, cloud=0.0, wind=21.98, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:52:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:53:21.333 [DEBUG] [Thread-128474] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:53:21.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:53:21.428 [DEBUG] [Thread-128477] [transport.py] [_log()] starting thread (client mode): 0xa2d3c310
2026-02-11T11:53:21.428 [DEBUG] [Thread-128477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:53:21.443 [DEBUG] [Thread-128477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:53:21.443 [INFO] [Thread-128477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:53:21.450 [DEBUG] [Thread-128477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] client lang: <none>
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] server lang: <none>
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] kex follows: False
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] Compression: none
2026-02-11T11:53:21.451 [DEBUG] [Thread-128477] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:53:21.511 [DEBUG] [Thread-128477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:53:21.512 [DEBUG] [Thread-128477] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:53:21.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:53:21.513 [DEBUG] [Thread-128477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:53:21.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:53:21.568 [DEBUG] [Thread-128477] [transport.py] [_log()] userauth is OK
2026-02-11T11:53:21.569 [DEBUG] [Thread-128477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:53:21.569 [DEBUG] [Thread-128477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:53:21.569 [DEBUG] [Thread-128477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:53:21.569 [DEBUG] [Thread-128477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:53:21.587 [INFO] [Thread-128477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:53:21.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:53:21.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:53:22.405 [DEBUG] [Thread-128477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:53:22.406 [DEBUG] [Thread-128477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:53:22.454 [DEBUG] [Thread-128477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:53:22.454 [DEBUG] [Thread-128477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:53:22.464 [DEBUG] [Thread-128477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:53:22.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:53:22.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:53:22.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:53:22.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:53:22.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:53:22.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:53:22.500 [DEBUG] [Thread-128477] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:53:34.828 [DEBUG] [Thread-128479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:49.879 [DEBUG] [Thread-128480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:53:52.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:53:52.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:53:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:53:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 53, 30), 14.07, 40.86, 0.0, 23.5, 23.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:53:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:53:30
2026-02-11T11:53:54.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:53:54.845 [DEBUG] [Thread-128481] [transport.py] [_log()] starting thread (client mode): 0xa2d6ef50
2026-02-11T11:53:54.846 [DEBUG] [Thread-128481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:53:54.866 [DEBUG] [Thread-128481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:53:54.866 [INFO] [Thread-128481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:53:54.869 [DEBUG] [Thread-128481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:53:54.869 [DEBUG] [Thread-128481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:53:54.869 [DEBUG] [Thread-128481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] client lang: <none>
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] server lang: <none>
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] kex follows: False
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] Compression: none
2026-02-11T11:53:54.870 [DEBUG] [Thread-128481] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:53:54.885 [DEBUG] [Thread-128481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:53:54.886 [DEBUG] [Thread-128481] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:53:54.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:53:54.887 [DEBUG] [Thread-128481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:53:54.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:53:54.889 [DEBUG] [Thread-128481] [transport.py] [_log()] userauth is OK
2026-02-11T11:53:54.890 [DEBUG] [Thread-128481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:53:54.890 [DEBUG] [Thread-128481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:53:54.890 [DEBUG] [Thread-128481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:53:54.890 [DEBUG] [Thread-128481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:53:54.916 [INFO] [Thread-128481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:53:54.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:53:55.546 [DEBUG] [Thread-128481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:53:55.546 [DEBUG] [Thread-128481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:53:55.547 [DEBUG] [Thread-128481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:53:55.587 [DEBUG] [Thread-128481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:53:55.587 [DEBUG] [Thread-128481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:53:55.591 [DEBUG] [Thread-128481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:53:55.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:53:55.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:53:55.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:53:55.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:53:55.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:53:55.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:53:55.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:53:55.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:53:55.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:53:55.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.412297 -999.00  +22.70  17.83     48  +11.20 1 2 1 1 1   888    0 10.74 -7.95 ----- 18.8 17.8 285.2 25.3 29.1 -17.6 28.4 -16.7 27.1 -17.7 28.2 -15.4
2026-02-11T11:53:55.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:53:55.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:53:55.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.412297
2026-02-11T11:53:55.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:53:55.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:53:55.619 [DEBUG] [Thread-128481] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:53:55.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:53:55.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:53:55.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:53:55.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:53:30', tmtdew=14.07, humidity=40.86, cloud=0.0, wind=23.5, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:53:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:53:55.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:53:55.711 [DEBUG] [Thread-128484] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0b0
2026-02-11T11:53:55.711 [DEBUG] [Thread-128484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:53:55.726 [DEBUG] [Thread-128484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:53:55.726 [INFO] [Thread-128484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] client lang: <none>
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] server lang: <none>
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] kex follows: False
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] Compression: none
2026-02-11T11:53:55.734 [DEBUG] [Thread-128484] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:53:55.793 [DEBUG] [Thread-128484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:53:55.794 [DEBUG] [Thread-128484] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:53:55.794 [DEBUG] [Thread-128484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:53:55.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:53:55.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:53:55.848 [DEBUG] [Thread-128484] [transport.py] [_log()] userauth is OK
2026-02-11T11:53:55.848 [DEBUG] [Thread-128484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:53:55.848 [DEBUG] [Thread-128484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:53:55.848 [DEBUG] [Thread-128484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:53:55.848 [DEBUG] [Thread-128484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:53:55.862 [INFO] [Thread-128484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:53:55.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:53:55.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:53:56.683 [DEBUG] [Thread-128484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:53:56.683 [DEBUG] [Thread-128484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:53:56.731 [DEBUG] [Thread-128484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:53:56.732 [DEBUG] [Thread-128484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:53:56.741 [DEBUG] [Thread-128484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:53:56.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:53:56.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:53:56.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:53:56.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:53:56.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:53:56.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:53:56.777 [DEBUG] [Thread-128484] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:54:03.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:54:03.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:54:04.921 [DEBUG] [Thread-128486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:54:12.631 [DEBUG] [Thread-128487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:54:19.975 [DEBUG] [Thread-128488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:54:26.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:54:26.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:54:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:54:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 54, 5), 14.28, 40.33, 0.0, 23.71, 23.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:54:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:54:05
2026-02-11T11:54:29.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:54:29.203 [DEBUG] [Thread-128489] [transport.py] [_log()] starting thread (client mode): 0xa2d6f1f0
2026-02-11T11:54:29.204 [DEBUG] [Thread-128489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:54:29.224 [DEBUG] [Thread-128489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:54:29.224 [INFO] [Thread-128489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:54:29.228 [DEBUG] [Thread-128489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:54:29.228 [DEBUG] [Thread-128489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:54:29.228 [DEBUG] [Thread-128489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] client lang: <none>
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] server lang: <none>
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] kex follows: False
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] Compression: none
2026-02-11T11:54:29.229 [DEBUG] [Thread-128489] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:54:29.247 [DEBUG] [Thread-128489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:54:29.247 [DEBUG] [Thread-128489] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:54:29.248 [DEBUG] [Thread-128489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:54:29.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:54:29.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:54:29.250 [DEBUG] [Thread-128489] [transport.py] [_log()] userauth is OK
2026-02-11T11:54:29.250 [DEBUG] [Thread-128489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:54:29.250 [DEBUG] [Thread-128489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:54:29.250 [DEBUG] [Thread-128489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:54:29.250 [DEBUG] [Thread-128489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:54:29.264 [INFO] [Thread-128489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:54:29.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:54:29.890 [DEBUG] [Thread-128489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:54:29.891 [DEBUG] [Thread-128489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:54:29.891 [DEBUG] [Thread-128489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:54:29.931 [DEBUG] [Thread-128489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:54:29.931 [DEBUG] [Thread-128489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:54:29.934 [DEBUG] [Thread-128489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:54:29.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:54:29.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:54:29.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:54:29.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:54:29.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:54:29.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:54:29.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:54:29.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:54:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:54:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.412644 -999.00  +22.70  20.73     47  +10.90 1 2 1 1 1   888    0 11.09 -3.12 ----- 19.6 20.7 291.2 25.3 29.4 -16.9 28.6 -15.9 27.4 -15.6 28.4 -15.3
2026-02-11T11:54:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:54:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:54:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.412644
2026-02-11T11:54:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:54:29.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:54:29.961 [DEBUG] [Thread-128489] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:54:29.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:54:29.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:54:29.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:54:29.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:54:05', tmtdew=14.28, humidity=40.33, cloud=0.0, wind=23.71, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:54:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:54:30.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:54:30.055 [DEBUG] [Thread-128492] [transport.py] [_log()] starting thread (client mode): 0xa2d6d5a0
2026-02-11T11:54:30.055 [DEBUG] [Thread-128492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:54:30.069 [DEBUG] [Thread-128492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:54:30.070 [INFO] [Thread-128492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:54:30.077 [DEBUG] [Thread-128492] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:54:30.078 [DEBUG] [Thread-128492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:54:30.078 [DEBUG] [Thread-128492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:54:30.078 [DEBUG] [Thread-128492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] client lang: <none>
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] server lang: <none>
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] kex follows: False
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] Compression: none
2026-02-11T11:54:30.079 [DEBUG] [Thread-128492] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:54:30.137 [DEBUG] [Thread-128492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:54:30.137 [DEBUG] [Thread-128492] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:54:30.138 [DEBUG] [Thread-128492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:54:30.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:54:30.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:54:30.193 [DEBUG] [Thread-128492] [transport.py] [_log()] userauth is OK
2026-02-11T11:54:30.193 [DEBUG] [Thread-128492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:54:30.193 [DEBUG] [Thread-128492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:54:30.193 [DEBUG] [Thread-128492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:54:30.194 [DEBUG] [Thread-128492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:54:30.219 [INFO] [Thread-128492] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:54:30.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:54:30.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:54:31.173 [DEBUG] [Thread-128492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:54:31.173 [DEBUG] [Thread-128492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:54:31.221 [DEBUG] [Thread-128492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:54:31.221 [DEBUG] [Thread-128492] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:54:31.230 [DEBUG] [Thread-128492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:54:31.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:54:31.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:54:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:54:31.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:54:31.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:54:31.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:54:31.267 [DEBUG] [Thread-128492] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:54:35.011 [DEBUG] [Thread-128494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:54:50.062 [DEBUG] [Thread-128495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:55:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:55:01.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:55:01.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:55:03.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 54, 41), 14.9, 38.71, 0.0, 25.19, 24.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:55:03.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:55:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:54:41
2026-02-11T11:55:03.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:55:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:55:03.656 [DEBUG] [Thread-128496] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe50
2026-02-11T11:55:03.657 [DEBUG] [Thread-128496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:55:03.677 [DEBUG] [Thread-128496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:55:03.677 [INFO] [Thread-128496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:55:03.681 [DEBUG] [Thread-128496] [transport.py] [_log()] client lang: <none>
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] server lang: <none>
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] kex follows: False
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] Compression: none
2026-02-11T11:55:03.682 [DEBUG] [Thread-128496] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:55:03.700 [DEBUG] [Thread-128496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:55:03.701 [DEBUG] [Thread-128496] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:55:03.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:55:03.702 [DEBUG] [Thread-128496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:55:03.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:55:03.704 [DEBUG] [Thread-128496] [transport.py] [_log()] userauth is OK
2026-02-11T11:55:03.704 [DEBUG] [Thread-128496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:55:03.704 [DEBUG] [Thread-128496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:55:03.704 [DEBUG] [Thread-128496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:55:03.704 [DEBUG] [Thread-128496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:55:03.729 [INFO] [Thread-128496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:55:03.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:55:04.436 [DEBUG] [Thread-128496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:55:04.436 [DEBUG] [Thread-128496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:55:04.437 [DEBUG] [Thread-128496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:55:04.477 [DEBUG] [Thread-128496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:55:04.478 [DEBUG] [Thread-128496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:55:04.481 [DEBUG] [Thread-128496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:55:04.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:55:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:55:04.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:55:04.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:55:04.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:55:04.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:55:04.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:55:04.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:55:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:55:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.412991 -999.00  +23.10  21.10     47  +11.40 1 2 1 1 1   888    0 10.90 2.40 ----- 21.4 21.1 272.0 25.4 29.6 -16.1 28.8 -15.5 27.6 -14.6 28.6 -15.2
2026-02-11T11:55:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:55:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:55:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.412991
2026-02-11T11:55:04.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:55:04.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:55:04.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:55:04.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:55:04.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:55:04.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:54:41', tmtdew=14.9, humidity=38.71, cloud=0.0, wind=25.19, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:54:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:55:04.510 [DEBUG] [Thread-128496] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:55:04.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:55:04.602 [DEBUG] [Thread-128499] [transport.py] [_log()] starting thread (client mode): 0xa2d7b700
2026-02-11T11:55:04.602 [DEBUG] [Thread-128499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:55:04.618 [DEBUG] [Thread-128499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:55:04.618 [INFO] [Thread-128499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] client lang: <none>
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] server lang: <none>
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] kex follows: False
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:55:04.626 [DEBUG] [Thread-128499] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:55:04.627 [DEBUG] [Thread-128499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:55:04.627 [DEBUG] [Thread-128499] [transport.py] [_log()] Compression: none
2026-02-11T11:55:04.627 [DEBUG] [Thread-128499] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:55:04.690 [DEBUG] [Thread-128499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:55:04.691 [DEBUG] [Thread-128499] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:55:04.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:55:04.692 [DEBUG] [Thread-128499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:55:04.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:55:04.750 [DEBUG] [Thread-128499] [transport.py] [_log()] userauth is OK
2026-02-11T11:55:04.750 [DEBUG] [Thread-128499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:55:04.750 [DEBUG] [Thread-128499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:55:04.750 [DEBUG] [Thread-128499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:55:04.750 [DEBUG] [Thread-128499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:55:04.769 [INFO] [Thread-128499] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:55:04.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:55:04.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:55:05.101 [DEBUG] [Thread-128501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:55:05.628 [DEBUG] [Thread-128499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:55:05.628 [DEBUG] [Thread-128499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:55:05.676 [DEBUG] [Thread-128499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:55:05.677 [DEBUG] [Thread-128499] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:55:05.686 [DEBUG] [Thread-128499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:55:05.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:55:05.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:55:05.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:55:05.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:55:05.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:55:05.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:55:05.722 [DEBUG] [Thread-128499] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:55:12.667 [DEBUG] [Thread-128502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:55:20.163 [DEBUG] [Thread-128503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:55:35.196 [DEBUG] [Thread-128504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:55:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:55:35.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:55:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:55:37.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 55, 16), 14.37, 40.22, 0.0, 21.62, 23.34, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:55:37.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:55:16
2026-02-11T11:55:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:55:38.299 [DEBUG] [Thread-128505] [transport.py] [_log()] starting thread (client mode): 0xa2d6c430
2026-02-11T11:55:38.299 [DEBUG] [Thread-128505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:55:38.320 [DEBUG] [Thread-128505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:55:38.320 [INFO] [Thread-128505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] client lang: <none>
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] server lang: <none>
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] kex follows: False
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:55:38.322 [DEBUG] [Thread-128505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:55:38.323 [DEBUG] [Thread-128505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:55:38.323 [DEBUG] [Thread-128505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:55:38.323 [DEBUG] [Thread-128505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:55:38.323 [DEBUG] [Thread-128505] [transport.py] [_log()] Compression: none
2026-02-11T11:55:38.323 [DEBUG] [Thread-128505] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:55:38.340 [DEBUG] [Thread-128505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:55:38.340 [DEBUG] [Thread-128505] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:55:38.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:55:38.341 [DEBUG] [Thread-128505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:55:38.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:55:38.343 [DEBUG] [Thread-128505] [transport.py] [_log()] userauth is OK
2026-02-11T11:55:38.344 [DEBUG] [Thread-128505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:55:38.344 [DEBUG] [Thread-128505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:55:38.344 [DEBUG] [Thread-128505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:55:38.344 [DEBUG] [Thread-128505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:55:38.368 [INFO] [Thread-128505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:55:38.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:55:38.952 [DEBUG] [Thread-128505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:55:38.953 [DEBUG] [Thread-128505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:55:38.953 [DEBUG] [Thread-128505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:55:38.993 [DEBUG] [Thread-128505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:55:38.994 [DEBUG] [Thread-128505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:55:38.997 [DEBUG] [Thread-128505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:55:39.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:55:39.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:55:39.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:55:39.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:55:39.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:55:39.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:55:39.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:55:39.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:55:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:55:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.413338 -999.00  +22.90  18.98     47  +11.00 1 2 1 1 1   888    0 11.23 8.87 ----- 16.9 19.0 282.8 22.4 29.6 -17.5 28.8 -16.0 27.4 -13.3 28.6 -14.8
2026-02-11T11:55:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:55:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:55:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.413338
2026-02-11T11:55:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:55:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:55:39.023 [DEBUG] [Thread-128505] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:55:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:55:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:55:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:55:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:55:16', tmtdew=14.37, humidity=40.22, cloud=0.0, wind=21.62, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:55:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:55:39.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:55:39.121 [DEBUG] [Thread-128508] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0e0
2026-02-11T11:55:39.121 [DEBUG] [Thread-128508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:55:39.136 [DEBUG] [Thread-128508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:55:39.136 [INFO] [Thread-128508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:55:39.144 [DEBUG] [Thread-128508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:55:39.144 [DEBUG] [Thread-128508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:55:39.145 [DEBUG] [Thread-128508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:55:39.145 [DEBUG] [Thread-128508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:39.145 [DEBUG] [Thread-128508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:55:39.145 [DEBUG] [Thread-128508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:39.145 [DEBUG] [Thread-128508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:55:39.145 [DEBUG] [Thread-128508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] client lang: <none>
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] server lang: <none>
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] kex follows: False
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] Compression: none
2026-02-11T11:55:39.146 [DEBUG] [Thread-128508] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:55:39.209 [DEBUG] [Thread-128508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:55:39.210 [DEBUG] [Thread-128508] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:55:39.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:55:39.211 [DEBUG] [Thread-128508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:55:39.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:55:39.270 [DEBUG] [Thread-128508] [transport.py] [_log()] userauth is OK
2026-02-11T11:55:39.271 [DEBUG] [Thread-128508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:55:39.271 [DEBUG] [Thread-128508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:55:39.271 [DEBUG] [Thread-128508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:55:39.271 [DEBUG] [Thread-128508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:55:39.294 [INFO] [Thread-128508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:55:39.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:55:39.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:55:40.122 [DEBUG] [Thread-128508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:55:40.122 [DEBUG] [Thread-128508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:55:40.171 [DEBUG] [Thread-128508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:55:40.171 [DEBUG] [Thread-128508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:55:40.187 [DEBUG] [Thread-128508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:55:40.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:55:40.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:55:40.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:55:40.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:55:40.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:55:40.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:55:40.236 [DEBUG] [Thread-128508] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:55:50.237 [DEBUG] [Thread-128510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:56:03.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:56:03.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:56:05.289 [DEBUG] [Thread-128511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:56:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:56:10.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:56:10.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:56:12.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 55, 51), 14.16, 40.36, 0.0, 14.01, 23.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:56:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:55:51
2026-02-11T11:56:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:56:12.646 [DEBUG] [Thread-128512] [transport.py] [_log()] starting thread (client mode): 0xa2d6e500
2026-02-11T11:56:12.646 [DEBUG] [Thread-128512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:56:12.666 [DEBUG] [Thread-128512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:56:12.666 [INFO] [Thread-128512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:56:12.667 [DEBUG] [Thread-128512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:56:12.667 [DEBUG] [Thread-128512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:56:12.667 [DEBUG] [Thread-128512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:56:12.667 [DEBUG] [Thread-128512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:12.667 [DEBUG] [Thread-128512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:12.667 [DEBUG] [Thread-128512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:12.667 [DEBUG] [Thread-128512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] client lang: <none>
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] server lang: <none>
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] kex follows: False
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] Compression: none
2026-02-11T11:56:12.668 [DEBUG] [Thread-128512] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:56:12.680 [DEBUG] [Thread-128512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:56:12.680 [DEBUG] [Thread-128512] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:56:12.681 [DEBUG] [Thread-128512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:56:12.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:56:12.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:56:12.682 [DEBUG] [Thread-128512] [transport.py] [_log()] userauth is OK
2026-02-11T11:56:12.682 [DEBUG] [Thread-128512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:56:12.682 [DEBUG] [Thread-128512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:56:12.682 [DEBUG] [Thread-128512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:56:12.682 [DEBUG] [Thread-128512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:56:12.693 [INFO] [Thread-128512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:56:12.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:56:12.720 [DEBUG] [Thread-128514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:56:13.316 [DEBUG] [Thread-128512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:56:13.317 [DEBUG] [Thread-128512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:56:13.317 [DEBUG] [Thread-128512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:56:13.358 [DEBUG] [Thread-128512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:56:13.358 [DEBUG] [Thread-128512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:56:13.360 [DEBUG] [Thread-128512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:56:13.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:56:13.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:56:13.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:56:13.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:56:13.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:56:13.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:56:13.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:56:13.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:56:13.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:56:13.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.413686 -999.00  +22.50  18.50     48  +11.00 1 2 1 1 1   888    0 11.50 15.53 ----- 16.4 18.5 295.8 20.6 29.9 -15.5 29.0 -15.1 27.7 -13.8 28.8 -14.2
2026-02-11T11:56:13.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:56:13.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:56:13.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.413686
2026-02-11T11:56:13.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:56:13.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:56:13.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:56:13.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:56:13.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:56:13.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:55:51', tmtdew=14.16, humidity=40.36, cloud=0.0, wind=14.01, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:55:42.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:56:13.382 [DEBUG] [Thread-128512] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:56:13.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:56:13.476 [DEBUG] [Thread-128516] [transport.py] [_log()] starting thread (client mode): 0xa2d6dab0
2026-02-11T11:56:13.477 [DEBUG] [Thread-128516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:56:13.494 [DEBUG] [Thread-128516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:56:13.494 [INFO] [Thread-128516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:56:13.501 [DEBUG] [Thread-128516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] client lang: <none>
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] server lang: <none>
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] kex follows: False
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:56:13.502 [DEBUG] [Thread-128516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:56:13.503 [DEBUG] [Thread-128516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:56:13.503 [DEBUG] [Thread-128516] [transport.py] [_log()] Compression: none
2026-02-11T11:56:13.503 [DEBUG] [Thread-128516] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:56:13.561 [DEBUG] [Thread-128516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:56:13.562 [DEBUG] [Thread-128516] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:56:13.562 [DEBUG] [Thread-128516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:56:13.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:56:13.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:56:13.617 [DEBUG] [Thread-128516] [transport.py] [_log()] userauth is OK
2026-02-11T11:56:13.617 [DEBUG] [Thread-128516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:56:13.617 [DEBUG] [Thread-128516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:56:13.617 [DEBUG] [Thread-128516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:56:13.618 [DEBUG] [Thread-128516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:56:13.635 [INFO] [Thread-128516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:56:13.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:56:13.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:56:14.498 [DEBUG] [Thread-128516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:56:14.499 [DEBUG] [Thread-128516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:56:14.546 [DEBUG] [Thread-128516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:56:14.547 [DEBUG] [Thread-128516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:56:14.556 [DEBUG] [Thread-128516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:56:14.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:56:14.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:56:14.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:56:14.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:56:14.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:56:14.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:56:14.593 [DEBUG] [Thread-128516] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:56:20.324 [DEBUG] [Thread-128518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:56:35.375 [DEBUG] [Thread-128519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:56:44.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:56:44.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:56:44.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:56:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 56, 26), 13.9, 40.98, 0.0, 10.64, 23.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:56:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:56:26
2026-02-11T11:56:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:56:46.964 [DEBUG] [Thread-128520] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1c0
2026-02-11T11:56:46.964 [DEBUG] [Thread-128520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:56:46.984 [DEBUG] [Thread-128520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:56:46.984 [INFO] [Thread-128520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:56:46.987 [DEBUG] [Thread-128520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:56:46.987 [DEBUG] [Thread-128520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:56:46.987 [DEBUG] [Thread-128520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:56:46.987 [DEBUG] [Thread-128520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] client lang: <none>
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] server lang: <none>
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] kex follows: False
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:56:46.988 [DEBUG] [Thread-128520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:56:46.989 [DEBUG] [Thread-128520] [transport.py] [_log()] Compression: none
2026-02-11T11:56:46.989 [DEBUG] [Thread-128520] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:56:47.008 [DEBUG] [Thread-128520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:56:47.008 [DEBUG] [Thread-128520] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:56:47.008 [DEBUG] [Thread-128520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:56:47.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:56:47.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:56:47.011 [DEBUG] [Thread-128520] [transport.py] [_log()] userauth is OK
2026-02-11T11:56:47.011 [DEBUG] [Thread-128520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:56:47.011 [DEBUG] [Thread-128520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:56:47.011 [DEBUG] [Thread-128520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:56:47.011 [DEBUG] [Thread-128520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:56:47.032 [INFO] [Thread-128520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:56:47.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:56:47.672 [DEBUG] [Thread-128520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:56:47.672 [DEBUG] [Thread-128520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:56:47.673 [DEBUG] [Thread-128520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:56:47.713 [DEBUG] [Thread-128520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:56:47.714 [DEBUG] [Thread-128520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:56:47.717 [DEBUG] [Thread-128520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:56:47.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:56:47.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:56:47.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:56:47.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:56:47.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:56:47.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:56:47.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:56:47.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:56:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:56:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.414033 -999.00  +22.70  13.69     48  +11.40 1 2 1 1 1   888    0 11.55 23.42 ----- 15.4 13.7 291.8 18.9 30.1 -14.7 29.1 -13.9 28.0 -12.2 28.9 -13.2
2026-02-11T11:56:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:56:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:56:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.414033
2026-02-11T11:56:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:56:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:56:47.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:56:47.745 [DEBUG] [Thread-128520] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:56:47.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:56:47.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:56:47.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:56:26', tmtdew=13.9, humidity=40.98, cloud=0.0, wind=10.64, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:56:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:56:47.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:56:47.843 [DEBUG] [Thread-128523] [transport.py] [_log()] starting thread (client mode): 0xa2d6ceb0
2026-02-11T11:56:47.844 [DEBUG] [Thread-128523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:56:47.858 [DEBUG] [Thread-128523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:56:47.858 [INFO] [Thread-128523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] client lang: <none>
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] server lang: <none>
2026-02-11T11:56:47.866 [DEBUG] [Thread-128523] [transport.py] [_log()] kex follows: False
2026-02-11T11:56:47.867 [DEBUG] [Thread-128523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:56:47.867 [DEBUG] [Thread-128523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:56:47.867 [DEBUG] [Thread-128523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:56:47.867 [DEBUG] [Thread-128523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:56:47.867 [DEBUG] [Thread-128523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:56:47.867 [DEBUG] [Thread-128523] [transport.py] [_log()] Compression: none
2026-02-11T11:56:47.867 [DEBUG] [Thread-128523] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:56:47.928 [DEBUG] [Thread-128523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:56:47.929 [DEBUG] [Thread-128523] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:56:47.929 [DEBUG] [Thread-128523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:56:47.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:56:47.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:56:47.990 [DEBUG] [Thread-128523] [transport.py] [_log()] userauth is OK
2026-02-11T11:56:47.990 [DEBUG] [Thread-128523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:56:47.990 [DEBUG] [Thread-128523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:56:47.991 [DEBUG] [Thread-128523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:56:47.991 [DEBUG] [Thread-128523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:56:48.020 [INFO] [Thread-128523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:56:48.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:56:48.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:56:48.851 [DEBUG] [Thread-128523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:56:48.851 [DEBUG] [Thread-128523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:56:48.899 [DEBUG] [Thread-128523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:56:48.899 [DEBUG] [Thread-128523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:56:48.909 [DEBUG] [Thread-128523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:56:48.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:56:48.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:56:48.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:56:48.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:56:48.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:56:48.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:56:48.945 [DEBUG] [Thread-128523] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:56:50.422 [DEBUG] [Thread-128525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:03.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:03.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:05.476 [DEBUG] [Thread-128526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:12.760 [DEBUG] [Thread-128527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:57:18.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:57:18.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:57:20.510 [DEBUG] [Thread-128528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:20.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 57, 1), 13.88, 41.03, 0.0, 13.67, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:57:20.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:57:01
2026-02-11T11:57:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:57:21.517 [DEBUG] [Thread-128529] [transport.py] [_log()] starting thread (client mode): 0xa2d78460
2026-02-11T11:57:21.517 [DEBUG] [Thread-128529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:57:21.538 [DEBUG] [Thread-128529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:57:21.538 [INFO] [Thread-128529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] client lang: <none>
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] server lang: <none>
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] kex follows: False
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] Compression: none
2026-02-11T11:57:21.541 [DEBUG] [Thread-128529] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:57:21.558 [DEBUG] [Thread-128529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:57:21.559 [DEBUG] [Thread-128529] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:57:21.559 [DEBUG] [Thread-128529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:57:21.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:57:21.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:57:21.562 [DEBUG] [Thread-128529] [transport.py] [_log()] userauth is OK
2026-02-11T11:57:21.563 [DEBUG] [Thread-128529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:57:21.563 [DEBUG] [Thread-128529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:57:21.563 [DEBUG] [Thread-128529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:57:21.563 [DEBUG] [Thread-128529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:57:21.587 [INFO] [Thread-128529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:57:21.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:57:22.209 [DEBUG] [Thread-128529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:57:22.209 [DEBUG] [Thread-128529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:57:22.210 [DEBUG] [Thread-128529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:57:22.250 [DEBUG] [Thread-128529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:57:22.251 [DEBUG] [Thread-128529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:57:22.254 [DEBUG] [Thread-128529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:57:22.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:57:22.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:57:22.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:57:22.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:57:22.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:57:22.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:57:22.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:57:22.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:57:22.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:57:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.414380 -999.00  +23.50  24.93     47  +11.60 1 2 1 1 1   888    0 11.70 28.41 ----- 28.5 24.9 289.8 29.4 30.4 -13.8 29.4 -13.5 28.2 -12.5 29.2 -14.0
2026-02-11T11:57:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:57:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:57:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.414380
2026-02-11T11:57:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:57:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:57:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:57:22.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:57:22.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:57:22.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:57:01', tmtdew=13.88, humidity=41.03, cloud=0.0, wind=13.67, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:56:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:57:22.275 [DEBUG] [Thread-128529] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:57:22.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:57:22.361 [DEBUG] [Thread-128532] [transport.py] [_log()] starting thread (client mode): 0xa2d6cd60
2026-02-11T11:57:22.361 [DEBUG] [Thread-128532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:57:22.375 [DEBUG] [Thread-128532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:57:22.375 [INFO] [Thread-128532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] client lang: <none>
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] server lang: <none>
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] kex follows: False
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] Compression: none
2026-02-11T11:57:22.383 [DEBUG] [Thread-128532] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:57:22.444 [DEBUG] [Thread-128532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:57:22.444 [DEBUG] [Thread-128532] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:57:22.444 [DEBUG] [Thread-128532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:57:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:57:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:57:22.502 [DEBUG] [Thread-128532] [transport.py] [_log()] userauth is OK
2026-02-11T11:57:22.502 [DEBUG] [Thread-128532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:57:22.502 [DEBUG] [Thread-128532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:57:22.502 [DEBUG] [Thread-128532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:57:22.502 [DEBUG] [Thread-128532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:57:22.519 [INFO] [Thread-128532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:57:22.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:57:22.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:57:23.320 [DEBUG] [Thread-128532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:57:23.321 [DEBUG] [Thread-128532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:57:23.369 [DEBUG] [Thread-128532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:57:23.369 [DEBUG] [Thread-128532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:57:23.381 [DEBUG] [Thread-128532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:57:23.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:57:23.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:57:23.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:57:23.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:57:23.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:57:23.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:57:23.416 [DEBUG] [Thread-128532] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:57:35.546 [DEBUG] [Thread-128534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:50.603 [DEBUG] [Thread-128535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:57:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:57:53.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:57:53.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:57:55.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 57, 36), 14.66, 39.41, 0.0, 19.87, 24.31, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:57:55.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:57:36
2026-02-11T11:57:55.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:57:56.001 [DEBUG] [Thread-128536] [transport.py] [_log()] starting thread (client mode): 0xa2d18700
2026-02-11T11:57:56.001 [DEBUG] [Thread-128536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:57:56.021 [DEBUG] [Thread-128536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:57:56.021 [INFO] [Thread-128536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:57:56.024 [DEBUG] [Thread-128536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] client lang: <none>
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] server lang: <none>
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] kex follows: False
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:57:56.025 [DEBUG] [Thread-128536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:57:56.026 [DEBUG] [Thread-128536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:57:56.026 [DEBUG] [Thread-128536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:57:56.026 [DEBUG] [Thread-128536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:57:56.026 [DEBUG] [Thread-128536] [transport.py] [_log()] Compression: none
2026-02-11T11:57:56.026 [DEBUG] [Thread-128536] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:57:56.044 [DEBUG] [Thread-128536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:57:56.045 [DEBUG] [Thread-128536] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:57:56.046 [DEBUG] [Thread-128536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:57:56.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:57:56.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:57:56.048 [DEBUG] [Thread-128536] [transport.py] [_log()] userauth is OK
2026-02-11T11:57:56.048 [DEBUG] [Thread-128536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:57:56.048 [DEBUG] [Thread-128536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:57:56.048 [DEBUG] [Thread-128536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:57:56.048 [DEBUG] [Thread-128536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:57:56.072 [INFO] [Thread-128536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:57:56.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:57:56.711 [DEBUG] [Thread-128536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:57:56.711 [DEBUG] [Thread-128536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:57:56.711 [DEBUG] [Thread-128536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:57:56.752 [DEBUG] [Thread-128536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:57:56.752 [DEBUG] [Thread-128536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:57:56.755 [DEBUG] [Thread-128536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:57:56.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:57:56.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:57:56.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:57:56.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:57:56.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:57:56.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:57:56.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:57:56.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:57:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:57:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.414727 -999.00  +23.40  23.07     47  +11.60 1 2 1 1 1   888    0 12.02 33.87 ----- 23.1 23.1 290.1 36.9 30.4 -14.9 29.4 -14.7 28.2 -12.9 29.2 -13.9
2026-02-11T11:57:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:57:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:57:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.414727
2026-02-11T11:57:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:57:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:57:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:57:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:57:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:57:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:57:36', tmtdew=14.66, humidity=39.41, cloud=0.0, wind=19.87, temperature=24.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:57:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:57:56.785 [DEBUG] [Thread-128536] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:57:56.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:57:56.879 [DEBUG] [Thread-128539] [transport.py] [_log()] starting thread (client mode): 0xa2d6f160
2026-02-11T11:57:56.879 [DEBUG] [Thread-128539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:57:56.894 [DEBUG] [Thread-128539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:57:56.894 [INFO] [Thread-128539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:57:56.901 [DEBUG] [Thread-128539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:57:56.901 [DEBUG] [Thread-128539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:57:56.901 [DEBUG] [Thread-128539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:57:56.901 [DEBUG] [Thread-128539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:56.901 [DEBUG] [Thread-128539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:57:56.901 [DEBUG] [Thread-128539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:56.901 [DEBUG] [Thread-128539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] client lang: <none>
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] server lang: <none>
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] kex follows: False
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] Compression: none
2026-02-11T11:57:56.902 [DEBUG] [Thread-128539] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:57:56.959 [DEBUG] [Thread-128539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:57:56.959 [DEBUG] [Thread-128539] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:57:56.960 [DEBUG] [Thread-128539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:57:56.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:57:56.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:57:57.014 [DEBUG] [Thread-128539] [transport.py] [_log()] userauth is OK
2026-02-11T11:57:57.015 [DEBUG] [Thread-128539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:57:57.015 [DEBUG] [Thread-128539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:57:57.015 [DEBUG] [Thread-128539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:57:57.015 [DEBUG] [Thread-128539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:57:57.033 [INFO] [Thread-128539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:57:57.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:57:57.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:57:57.856 [DEBUG] [Thread-128539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:57:57.856 [DEBUG] [Thread-128539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:57:57.904 [DEBUG] [Thread-128539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:57:57.905 [DEBUG] [Thread-128539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:57:57.914 [DEBUG] [Thread-128539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:57:57.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:57:57.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:57:57.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:57:57.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:57:57.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:57:57.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:57:57.951 [DEBUG] [Thread-128539] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:58:03.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:58:03.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:58:05.646 [DEBUG] [Thread-128541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:58:12.797 [DEBUG] [Thread-128542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:58:20.699 [DEBUG] [Thread-128543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:58:27.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:58:27.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:58:27.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
2026-02-11T11:58:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 58, 12), 14.46, 39.77, 0.0, 21.88, 23.67, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:58:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:58:12
2026-02-11T11:58:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:58:30.417 [DEBUG] [Thread-128544] [transport.py] [_log()] starting thread (client mode): 0xa2d6c460
2026-02-11T11:58:30.417 [DEBUG] [Thread-128544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:58:30.436 [DEBUG] [Thread-128544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:58:30.436 [INFO] [Thread-128544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:58:30.439 [DEBUG] [Thread-128544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:58:30.439 [DEBUG] [Thread-128544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:58:30.439 [DEBUG] [Thread-128544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] client lang: <none>
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] server lang: <none>
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] kex follows: False
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] Compression: none
2026-02-11T11:58:30.440 [DEBUG] [Thread-128544] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:58:30.456 [DEBUG] [Thread-128544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:58:30.457 [DEBUG] [Thread-128544] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:58:30.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:58:30.458 [DEBUG] [Thread-128544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:58:30.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:58:30.460 [DEBUG] [Thread-128544] [transport.py] [_log()] userauth is OK
2026-02-11T11:58:30.460 [DEBUG] [Thread-128544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:58:30.460 [DEBUG] [Thread-128544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:58:30.461 [DEBUG] [Thread-128544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:58:30.461 [DEBUG] [Thread-128544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:58:30.481 [INFO] [Thread-128544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:58:30.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:58:31.053 [DEBUG] [Thread-128544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:58:31.054 [DEBUG] [Thread-128544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:58:31.054 [DEBUG] [Thread-128544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:58:31.095 [DEBUG] [Thread-128544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:58:31.095 [DEBUG] [Thread-128544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:58:31.099 [DEBUG] [Thread-128544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:58:31.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:58:31.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:58:31.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:58:31.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:58:31.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:58:31.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:58:31.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:58:31.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:58:31.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:58:31.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.415422 -999.00  +23.30  34.93     46  +11.20 1 2 2 1 1   888    0 12.55 55.03 ----- 37.6 34.9 293.2 37.8 30.6 -15.5 29.6 -14.4 28.5 -15.2 29.3 -15.2
2026-02-11T11:58:31.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:58:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:58:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.415422
2026-02-11T11:58:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:58:12', tmtdew=14.46, humidity=39.77, cloud=0.0, wind=21.88, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:58:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:58:31.128 [DEBUG] [Thread-128544] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:58:31.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:58:31.224 [DEBUG] [Thread-128547] [transport.py] [_log()] starting thread (client mode): 0xa2d6ce80
2026-02-11T11:58:31.225 [DEBUG] [Thread-128547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:58:31.239 [DEBUG] [Thread-128547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:58:31.240 [INFO] [Thread-128547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:58:31.247 [DEBUG] [Thread-128547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:58:31.247 [DEBUG] [Thread-128547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:58:31.247 [DEBUG] [Thread-128547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] client lang: <none>
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] server lang: <none>
2026-02-11T11:58:31.248 [DEBUG] [Thread-128547] [transport.py] [_log()] kex follows: False
2026-02-11T11:58:31.249 [DEBUG] [Thread-128547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:58:31.249 [DEBUG] [Thread-128547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:58:31.249 [DEBUG] [Thread-128547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:58:31.249 [DEBUG] [Thread-128547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:58:31.249 [DEBUG] [Thread-128547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:58:31.249 [DEBUG] [Thread-128547] [transport.py] [_log()] Compression: none
2026-02-11T11:58:31.249 [DEBUG] [Thread-128547] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:58:31.313 [DEBUG] [Thread-128547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:58:31.314 [DEBUG] [Thread-128547] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:58:31.315 [DEBUG] [Thread-128547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:58:31.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:58:31.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:58:31.377 [DEBUG] [Thread-128547] [transport.py] [_log()] userauth is OK
2026-02-11T11:58:31.378 [DEBUG] [Thread-128547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:58:31.378 [DEBUG] [Thread-128547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:58:31.378 [DEBUG] [Thread-128547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:58:31.378 [DEBUG] [Thread-128547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:58:31.400 [INFO] [Thread-128547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:58:31.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:58:31.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:58:32.256 [DEBUG] [Thread-128547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:58:32.256 [DEBUG] [Thread-128547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:58:32.305 [DEBUG] [Thread-128547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:58:32.305 [DEBUG] [Thread-128547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:58:32.314 [DEBUG] [Thread-128547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:58:32.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:58:32.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')
2026-02-11T11:58:32.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:58:32.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:58:32.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:58:32.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:58:32.355 [DEBUG] [Thread-128547] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:58:35.737 [DEBUG] [Thread-128549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:58:50.788 [DEBUG] [Thread-128550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:59:02.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:59:02.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:59:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:59:03.735 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:59:03.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:59:04.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 58, 47), 14.47, 39.91, 0.0, 26.15, 23.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:59:04.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:58:47
2026-02-11T11:59:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:59:04.749 [DEBUG] [Thread-128551] [transport.py] [_log()] starting thread (client mode): 0xa2d6e800
2026-02-11T11:59:04.749 [DEBUG] [Thread-128551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:59:04.769 [DEBUG] [Thread-128551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:59:04.769 [INFO] [Thread-128551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] client lang: <none>
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] server lang: <none>
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] kex follows: False
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] Compression: none
2026-02-11T11:59:04.773 [DEBUG] [Thread-128551] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:59:04.791 [DEBUG] [Thread-128551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:59:04.791 [DEBUG] [Thread-128551] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:59:04.792 [DEBUG] [Thread-128551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:59:04.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:59:04.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:59:04.794 [DEBUG] [Thread-128551] [transport.py] [_log()] userauth is OK
2026-02-11T11:59:04.794 [DEBUG] [Thread-128551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:59:04.794 [DEBUG] [Thread-128551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:59:04.795 [DEBUG] [Thread-128551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:59:04.795 [DEBUG] [Thread-128551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:59:04.832 [INFO] [Thread-128551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:59:04.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:59:05.646 [DEBUG] [Thread-128551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:59:05.646 [DEBUG] [Thread-128551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:59:05.647 [DEBUG] [Thread-128551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:59:05.688 [DEBUG] [Thread-128551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:59:05.688 [DEBUG] [Thread-128551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:59:05.691 [DEBUG] [Thread-128551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:59:05.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:59:05.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:59:05.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:59:05.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:59:05.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:59:05.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:59:05.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:59:05.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:59:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:59:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.415769 -999.00  +23.40  37.94     46  +11.40 1 2 2 1 1   888    0 12.98 62.67 ----- 32.4 37.9 283.2 41.6 30.4 -16.1 29.5 -14.8 28.1 -17.6 29.3 -15.3
2026-02-11T11:59:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:59:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:59:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.415769
2026-02-11T11:59:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:59:05.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:59:05.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:59:05.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:59:05.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:59:05.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:58:47', tmtdew=14.47, humidity=39.91, cloud=0.0, wind=26.15, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:58:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:59:05.719 [DEBUG] [Thread-128551] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:59:05.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:59:05.816 [DEBUG] [Thread-128554] [transport.py] [_log()] starting thread (client mode): 0xa2d6ec50
2026-02-11T11:59:05.816 [DEBUG] [Thread-128554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:59:05.824 [DEBUG] [Thread-128555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:59:05.831 [DEBUG] [Thread-128554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:59:05.831 [INFO] [Thread-128554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:59:05.838 [DEBUG] [Thread-128554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:59:05.839 [DEBUG] [Thread-128554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:59:05.839 [DEBUG] [Thread-128554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:59:05.839 [DEBUG] [Thread-128554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:05.839 [DEBUG] [Thread-128554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:05.839 [DEBUG] [Thread-128554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:05.839 [DEBUG] [Thread-128554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:05.839 [DEBUG] [Thread-128554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] client lang: <none>
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] server lang: <none>
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] kex follows: False
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:59:05.840 [DEBUG] [Thread-128554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:59:05.841 [DEBUG] [Thread-128554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:59:05.841 [DEBUG] [Thread-128554] [transport.py] [_log()] Compression: none
2026-02-11T11:59:05.841 [DEBUG] [Thread-128554] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:59:05.901 [DEBUG] [Thread-128554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:59:05.902 [DEBUG] [Thread-128554] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:59:05.902 [DEBUG] [Thread-128554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:59:05.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:59:05.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:59:05.963 [DEBUG] [Thread-128554] [transport.py] [_log()] userauth is OK
2026-02-11T11:59:05.964 [DEBUG] [Thread-128554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:59:05.964 [DEBUG] [Thread-128554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:59:05.964 [DEBUG] [Thread-128554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:59:05.964 [DEBUG] [Thread-128554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:59:05.988 [INFO] [Thread-128554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:59:05.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:59:05.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:59:06.826 [DEBUG] [Thread-128554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:59:06.826 [DEBUG] [Thread-128554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:59:06.874 [DEBUG] [Thread-128554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:59:06.874 [DEBUG] [Thread-128554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:59:06.884 [DEBUG] [Thread-128554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:59:06.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:59:06.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:59:06.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:59:06.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:59:06.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:59:06.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:59:06.921 [DEBUG] [Thread-128554] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:59:12.831 [DEBUG] [Thread-128557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:59:20.871 [DEBUG] [Thread-128558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:59:35.907 [DEBUG] [Thread-128559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T11:59:36.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T11:59:36.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T11:59:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T11:59:39.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 59, 23), 14.71, 39.35, 0.0, 23.87, 24.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T11:59:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:59:23
2026-02-11T11:59:39.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T11:59:39.698 [DEBUG] [Thread-128560] [transport.py] [_log()] starting thread (client mode): 0xa2d6f7f0
2026-02-11T11:59:39.698 [DEBUG] [Thread-128560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:59:39.719 [DEBUG] [Thread-128560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T11:59:39.719 [INFO] [Thread-128560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T11:59:39.722 [DEBUG] [Thread-128560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:59:39.722 [DEBUG] [Thread-128560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T11:59:39.722 [DEBUG] [Thread-128560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:59:39.722 [DEBUG] [Thread-128560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] client lang: <none>
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] server lang: <none>
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] kex follows: False
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] Compression: none
2026-02-11T11:59:39.723 [DEBUG] [Thread-128560] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:59:39.742 [DEBUG] [Thread-128560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:59:39.742 [DEBUG] [Thread-128560] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:59:39.743 [DEBUG] [Thread-128560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T11:59:39.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T11:59:39.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:59:39.744 [DEBUG] [Thread-128560] [transport.py] [_log()] userauth is OK
2026-02-11T11:59:39.745 [DEBUG] [Thread-128560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:59:39.745 [DEBUG] [Thread-128560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:59:39.745 [DEBUG] [Thread-128560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T11:59:39.745 [DEBUG] [Thread-128560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:59:39.760 [INFO] [Thread-128560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:59:39.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:59:40.376 [DEBUG] [Thread-128560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:59:40.376 [DEBUG] [Thread-128560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:59:40.377 [DEBUG] [Thread-128560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T11:59:40.417 [DEBUG] [Thread-128560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:59:40.418 [DEBUG] [Thread-128560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:59:40.421 [DEBUG] [Thread-128560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:59:40.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:59:40.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T11:59:40.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T11:59:40.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T11:59:40.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:59:40.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T11:59:40.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:59:40.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:59:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T11:59:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.416116 -999.00  +23.10  29.02     46  +11.00 1 2 1 1 1   888    0 13.28 67.98 ----- 25.3 29.0 293.6 35.2 30.4 -16.8 29.5 -15.7 28.2 -16.8 29.2 -16.1
2026-02-11T11:59:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T11:59:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T11:59:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.416116
2026-02-11T11:59:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T11:59:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T11:59:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T11:59:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T11:59:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T11:59:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:59:23', tmtdew=14.71, humidity=39.35, cloud=0.0, wind=23.87, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:59:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T11:59:40.447 [DEBUG] [Thread-128560] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:59:40.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T11:59:40.543 [DEBUG] [Thread-128563] [transport.py] [_log()] starting thread (client mode): 0xa2d6c4f0
2026-02-11T11:59:40.544 [DEBUG] [Thread-128563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T11:59:40.558 [DEBUG] [Thread-128563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T11:59:40.558 [INFO] [Thread-128563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] client lang: <none>
2026-02-11T11:59:40.566 [DEBUG] [Thread-128563] [transport.py] [_log()] server lang: <none>
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] kex follows: False
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] Compression: none
2026-02-11T11:59:40.567 [DEBUG] [Thread-128563] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T11:59:40.624 [DEBUG] [Thread-128563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T11:59:40.624 [DEBUG] [Thread-128563] [transport.py] [_log()] Switch to new keys ...
2026-02-11T11:59:40.625 [DEBUG] [Thread-128563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T11:59:40.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T11:59:40.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T11:59:40.684 [DEBUG] [Thread-128563] [transport.py] [_log()] userauth is OK
2026-02-11T11:59:40.684 [DEBUG] [Thread-128563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T11:59:40.684 [DEBUG] [Thread-128563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T11:59:40.684 [DEBUG] [Thread-128563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T11:59:40.684 [DEBUG] [Thread-128563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T11:59:40.703 [INFO] [Thread-128563] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T11:59:40.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T11:59:40.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T11:59:41.546 [DEBUG] [Thread-128563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T11:59:41.546 [DEBUG] [Thread-128563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T11:59:41.593 [DEBUG] [Thread-128563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T11:59:41.593 [DEBUG] [Thread-128563] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T11:59:41.603 [DEBUG] [Thread-128563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T11:59:41.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T11:59:41.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T11:59:41.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T11:59:41.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T11:59:41.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T11:59:41.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T11:59:41.640 [DEBUG] [Thread-128563] [transport.py] [_log()] EOF in transport thread
2026-02-11T11:59:50.941 [DEBUG] [Thread-128565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:03.877 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:03.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:05.996 [DEBUG] [Thread-128566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:11.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:00:11.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:00:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:00:12.877 [DEBUG] [Thread-128567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 11, 59, 58), 14.73, 38.99, 0.0, 21.28, 23.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:00:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 11:59:58
2026-02-11T12:00:13.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:00:14.098 [DEBUG] [Thread-128568] [transport.py] [_log()] starting thread (client mode): 0xa2d6ebc0
2026-02-11T12:00:14.098 [DEBUG] [Thread-128568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:00:14.108 [DEBUG] [Thread-128568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:00:14.108 [INFO] [Thread-128568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:00:14.111 [DEBUG] [Thread-128568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:00:14.111 [DEBUG] [Thread-128568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:00:14.111 [DEBUG] [Thread-128568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:00:14.111 [DEBUG] [Thread-128568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:00:14.111 [DEBUG] [Thread-128568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:00:14.111 [DEBUG] [Thread-128568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:00:14.111 [DEBUG] [Thread-128568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] client lang: <none>
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] server lang: <none>
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] kex follows: False
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] Compression: none
2026-02-11T12:00:14.112 [DEBUG] [Thread-128568] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:00:14.127 [DEBUG] [Thread-128568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:00:14.128 [DEBUG] [Thread-128568] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:00:14.128 [DEBUG] [Thread-128568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:00:14.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:00:14.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:00:14.129 [DEBUG] [Thread-128568] [transport.py] [_log()] userauth is OK
2026-02-11T12:00:14.129 [DEBUG] [Thread-128568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:00:14.130 [DEBUG] [Thread-128568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:00:14.130 [DEBUG] [Thread-128568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:00:14.130 [DEBUG] [Thread-128568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:00:14.152 [INFO] [Thread-128568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:00:14.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:00:21.042 [DEBUG] [Thread-128570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:27.332 [DEBUG] [Thread-128568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:00:27.332 [DEBUG] [Thread-128568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:00:27.333 [DEBUG] [Thread-128568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:00:27.373 [DEBUG] [Thread-128568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:00:27.373 [DEBUG] [Thread-128568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:00:27.376 [DEBUG] [Thread-128568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:00:27.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:00:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:00:27.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:00:27.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:00:27.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:00:27.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:00:27.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:00:27.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:00:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:00:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.416463 -999.00  +22.90  22.36     47  +11.20 1 2 1 1 1   888    0 12.98 66.05 ----- 21.2 22.4 308.4 36.9 30.4 -17.6 29.5 -16.4 28.1 -16.3 29.3 -15.7
2026-02-11T12:00:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:00:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:00:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.416463
2026-02-11T12:00:27.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:00:27.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:00:27.447 [DEBUG] [Thread-128568] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:00:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:00:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:00:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:00:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T11:59:58', tmtdew=14.73, humidity=38.99, cloud=0.0, wind=21.28, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T09:59:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:00:27.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:00:27.547 [DEBUG] [Thread-128572] [transport.py] [_log()] starting thread (client mode): 0xa2d6e8c0
2026-02-11T12:00:27.547 [DEBUG] [Thread-128572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:00:27.565 [DEBUG] [Thread-128572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:00:27.565 [INFO] [Thread-128572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:00:27.572 [DEBUG] [Thread-128572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:00:27.572 [DEBUG] [Thread-128572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:00:27.572 [DEBUG] [Thread-128572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:00:27.572 [DEBUG] [Thread-128572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:00:27.572 [DEBUG] [Thread-128572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:00:27.572 [DEBUG] [Thread-128572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] client lang: <none>
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] server lang: <none>
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] kex follows: False
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] Compression: none
2026-02-11T12:00:27.573 [DEBUG] [Thread-128572] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:00:27.632 [DEBUG] [Thread-128572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:00:27.632 [DEBUG] [Thread-128572] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:00:27.633 [DEBUG] [Thread-128572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:00:27.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:00:27.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:00:27.687 [DEBUG] [Thread-128572] [transport.py] [_log()] userauth is OK
2026-02-11T12:00:27.688 [DEBUG] [Thread-128572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:00:27.688 [DEBUG] [Thread-128572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:00:27.688 [DEBUG] [Thread-128572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:00:27.688 [DEBUG] [Thread-128572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:00:27.707 [INFO] [Thread-128572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:00:27.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:00:27.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:00:28.530 [DEBUG] [Thread-128572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:00:28.531 [DEBUG] [Thread-128572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:00:28.578 [DEBUG] [Thread-128572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:00:28.579 [DEBUG] [Thread-128572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:00:28.588 [DEBUG] [Thread-128572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:00:28.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:00:28.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')
2026-02-11T12:00:28.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:00:28.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:00:28.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:00:28.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:00:28.625 [DEBUG] [Thread-128572] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:00:36.078 [DEBUG] [Thread-128574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:51.137 [DEBUG] [Thread-128575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:00:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:00:58.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:00:58.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:01:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 0, 33), 14.91, 38.74, 0.0, 26.85, 24.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:01:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:00:33
2026-02-11T12:01:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:01:01.068 [DEBUG] [Thread-128576] [transport.py] [_log()] starting thread (client mode): 0xa2d6d720
2026-02-11T12:01:01.068 [DEBUG] [Thread-128576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:01:01.089 [DEBUG] [Thread-128576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:01:01.089 [INFO] [Thread-128576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:01:01.092 [DEBUG] [Thread-128576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:01:01.092 [DEBUG] [Thread-128576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:01:01.092 [DEBUG] [Thread-128576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:01:01.092 [DEBUG] [Thread-128576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:01.092 [DEBUG] [Thread-128576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:01.092 [DEBUG] [Thread-128576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] client lang: <none>
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] server lang: <none>
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] kex follows: False
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:01:01.093 [DEBUG] [Thread-128576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:01:01.094 [DEBUG] [Thread-128576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:01:01.094 [DEBUG] [Thread-128576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:01:01.094 [DEBUG] [Thread-128576] [transport.py] [_log()] Compression: none
2026-02-11T12:01:01.094 [DEBUG] [Thread-128576] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:01:01.113 [DEBUG] [Thread-128576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:01:01.114 [DEBUG] [Thread-128576] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:01:01.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:01:01.116 [DEBUG] [Thread-128576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:01:01.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:01:01.118 [DEBUG] [Thread-128576] [transport.py] [_log()] userauth is OK
2026-02-11T12:01:01.118 [DEBUG] [Thread-128576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:01:01.118 [DEBUG] [Thread-128576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:01:01.119 [DEBUG] [Thread-128576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:01:01.119 [DEBUG] [Thread-128576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:01:01.144 [INFO] [Thread-128576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:01:01.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:01:01.765 [DEBUG] [Thread-128576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:01:01.765 [DEBUG] [Thread-128576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:01:01.765 [DEBUG] [Thread-128576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:01:01.805 [DEBUG] [Thread-128576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:01:01.806 [DEBUG] [Thread-128576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:01:01.809 [DEBUG] [Thread-128576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:01:01.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:01:01.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:01:01.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:01:01.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:01:01.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:01:01.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:01:01.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:01:01.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:01:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:01:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.416810 -999.00  +22.80  23.84     47  +11.00 1 2 1 1 1   888    0 13.14 65.57 ----- 21.9 23.8 314.8 34.7 30.4 -18.2 29.5 -16.8 28.1 -18.1 29.2 -16.3
2026-02-11T12:01:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:01:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:01:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.416810
2026-02-11T12:01:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:01:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:01:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:01:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:01:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:01:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:00:33', tmtdew=14.91, humidity=38.74, cloud=0.0, wind=26.85, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:00:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:01:01.835 [DEBUG] [Thread-128576] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:01:01.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:01:01.931 [DEBUG] [Thread-128579] [transport.py] [_log()] starting thread (client mode): 0xa2d6cc70
2026-02-11T12:01:01.931 [DEBUG] [Thread-128579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:01:01.946 [DEBUG] [Thread-128579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:01:01.946 [INFO] [Thread-128579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:01:01.954 [DEBUG] [Thread-128579] [transport.py] [_log()] client lang: <none>
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] server lang: <none>
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] kex follows: False
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] Compression: none
2026-02-11T12:01:01.955 [DEBUG] [Thread-128579] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:01:02.012 [DEBUG] [Thread-128579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:01:02.013 [DEBUG] [Thread-128579] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:01:02.013 [DEBUG] [Thread-128579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:01:02.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:01:02.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:01:02.072 [DEBUG] [Thread-128579] [transport.py] [_log()] userauth is OK
2026-02-11T12:01:02.072 [DEBUG] [Thread-128579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:01:02.072 [DEBUG] [Thread-128579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:01:02.072 [DEBUG] [Thread-128579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:01:02.072 [DEBUG] [Thread-128579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:01:02.091 [INFO] [Thread-128579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:01:02.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:01:02.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:01:02.983 [DEBUG] [Thread-128579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:01:02.984 [DEBUG] [Thread-128579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:01:03.031 [DEBUG] [Thread-128579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:01:03.035 [DEBUG] [Thread-128579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:01:03.044 [DEBUG] [Thread-128579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:01:03.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:01:03.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')
2026-02-11T12:01:03.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:01:03.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:01:03.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:01:03.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:01:03.077 [DEBUG] [Thread-128579] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:01:04.021 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:01:04.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:01:06.175 [DEBUG] [Thread-128581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:01:12.906 [DEBUG] [Thread-128582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:01:21.226 [DEBUG] [Thread-128583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:01:33.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:01:33.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:01:33.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:01:34.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 1, 10), 14.44, 40.01, 0.0, 20.91, 23.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:01:34.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:01:10
2026-02-11T12:01:35.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:01:35.352 [DEBUG] [Thread-128584] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4a0
2026-02-11T12:01:35.352 [DEBUG] [Thread-128584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:01:35.372 [DEBUG] [Thread-128584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:01:35.372 [INFO] [Thread-128584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:01:35.375 [DEBUG] [Thread-128584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:01:35.375 [DEBUG] [Thread-128584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:01:35.375 [DEBUG] [Thread-128584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] client lang: <none>
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] server lang: <none>
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] kex follows: False
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] Compression: none
2026-02-11T12:01:35.376 [DEBUG] [Thread-128584] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:01:35.393 [DEBUG] [Thread-128584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:01:35.393 [DEBUG] [Thread-128584] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:01:35.394 [DEBUG] [Thread-128584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:01:35.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:01:35.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:01:35.396 [DEBUG] [Thread-128584] [transport.py] [_log()] userauth is OK
2026-02-11T12:01:35.396 [DEBUG] [Thread-128584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:01:35.396 [DEBUG] [Thread-128584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:01:35.396 [DEBUG] [Thread-128584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:01:35.396 [DEBUG] [Thread-128584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:01:35.411 [INFO] [Thread-128584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:01:35.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:01:36.051 [DEBUG] [Thread-128584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:01:36.052 [DEBUG] [Thread-128584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:01:36.052 [DEBUG] [Thread-128584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:01:36.092 [DEBUG] [Thread-128584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:01:36.092 [DEBUG] [Thread-128584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:01:36.095 [DEBUG] [Thread-128584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:01:36.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:01:36.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:01:36.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:01:36.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:01:36.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:01:36.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:01:36.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:01:36.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:01:36.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:01:36.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.417158 -999.00  +23.30  22.46     47  +11.50 1 2 1 1 1   888    0 13.07 71.17 ----- 20.9 22.5 300.4 34.4 30.5 -16.9 29.4 -16.4 28.3 -16.9 29.3 -14.9
2026-02-11T12:01:36.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:01:36.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:01:36.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.417158
2026-02-11T12:01:36.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:01:36.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:01:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:01:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:01:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:01:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:01:10', tmtdew=14.44, humidity=40.01, cloud=0.0, wind=20.91, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:00:42.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:01:36.121 [DEBUG] [Thread-128584] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:01:36.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:01:36.216 [DEBUG] [Thread-128587] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8e0
2026-02-11T12:01:36.216 [DEBUG] [Thread-128587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:01:36.230 [DEBUG] [Thread-128587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:01:36.230 [INFO] [Thread-128587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:01:36.239 [DEBUG] [Thread-128587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] client lang: <none>
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] server lang: <none>
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] kex follows: False
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] Compression: none
2026-02-11T12:01:36.240 [DEBUG] [Thread-128587] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:01:36.261 [DEBUG] [Thread-128589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:01:36.295 [DEBUG] [Thread-128587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:01:36.296 [DEBUG] [Thread-128587] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:01:36.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:01:36.297 [DEBUG] [Thread-128587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:01:36.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:01:36.352 [DEBUG] [Thread-128587] [transport.py] [_log()] userauth is OK
2026-02-11T12:01:36.352 [DEBUG] [Thread-128587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:01:36.352 [DEBUG] [Thread-128587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:01:36.352 [DEBUG] [Thread-128587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:01:36.352 [DEBUG] [Thread-128587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:01:36.370 [INFO] [Thread-128587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:01:36.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:01:36.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:01:37.185 [DEBUG] [Thread-128587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:01:37.185 [DEBUG] [Thread-128587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:01:37.233 [DEBUG] [Thread-128587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:01:37.233 [DEBUG] [Thread-128587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:01:37.242 [DEBUG] [Thread-128587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:01:37.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:01:37.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:01:37.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:01:37.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:01:37.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:01:37.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:01:37.276 [DEBUG] [Thread-128587] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:01:51.312 [DEBUG] [Thread-128590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:02:04.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:02:04.167 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:02:06.348 [DEBUG] [Thread-128591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:02:07.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:02:07.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:02:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:02:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 1, 45), 15.0, 38.66, 0.0, 24.01, 24.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:02:09.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:01:45
2026-02-11T12:02:09.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:02:10.016 [DEBUG] [Thread-128592] [transport.py] [_log()] starting thread (client mode): 0xa2d780d0
2026-02-11T12:02:10.016 [DEBUG] [Thread-128592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:02:10.035 [DEBUG] [Thread-128592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:02:10.035 [INFO] [Thread-128592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:02:10.038 [DEBUG] [Thread-128592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:02:10.038 [DEBUG] [Thread-128592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:02:10.038 [DEBUG] [Thread-128592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:02:10.038 [DEBUG] [Thread-128592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] client lang: <none>
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] server lang: <none>
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] kex follows: False
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] Compression: none
2026-02-11T12:02:10.039 [DEBUG] [Thread-128592] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:02:10.056 [DEBUG] [Thread-128592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:02:10.056 [DEBUG] [Thread-128592] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:02:10.057 [DEBUG] [Thread-128592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:02:10.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:02:10.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:02:10.059 [DEBUG] [Thread-128592] [transport.py] [_log()] userauth is OK
2026-02-11T12:02:10.059 [DEBUG] [Thread-128592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:02:10.059 [DEBUG] [Thread-128592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:02:10.059 [DEBUG] [Thread-128592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:02:10.059 [DEBUG] [Thread-128592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:02:10.094 [INFO] [Thread-128592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:02:10.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:02:10.752 [DEBUG] [Thread-128592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:02:10.752 [DEBUG] [Thread-128592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:02:10.753 [DEBUG] [Thread-128592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:02:10.793 [DEBUG] [Thread-128592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:02:10.794 [DEBUG] [Thread-128592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:02:10.797 [DEBUG] [Thread-128592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:02:10.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:02:10.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:02:10.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:02:10.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:02:10.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:02:10.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:02:10.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:02:10.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:02:10.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:02:10.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.417505 -999.00  +23.80  18.21     45  +11.30 1 2 1 1 1   888    0 13.34 73.02 ----- 15.6 18.2 292.6 21.0 30.7 -16.9 29.6 -15.9 28.6 -15.2 29.5 -16.0
2026-02-11T12:02:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:02:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:02:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.417505
2026-02-11T12:02:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:02:10.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:02:10.826 [DEBUG] [Thread-128592] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:02:10.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:02:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:02:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:02:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:01:45', tmtdew=15.0, humidity=38.66, cloud=0.0, wind=24.01, temperature=24.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:01:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:02:10.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:02:10.913 [DEBUG] [Thread-128595] [transport.py] [_log()] starting thread (client mode): 0xa2d7bca0
2026-02-11T12:02:10.914 [DEBUG] [Thread-128595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:02:10.928 [DEBUG] [Thread-128595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:02:10.928 [INFO] [Thread-128595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] client lang: <none>
2026-02-11T12:02:10.935 [DEBUG] [Thread-128595] [transport.py] [_log()] server lang: <none>
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] kex follows: False
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] Compression: none
2026-02-11T12:02:10.936 [DEBUG] [Thread-128595] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:02:10.992 [DEBUG] [Thread-128595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:02:10.992 [DEBUG] [Thread-128595] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:02:10.993 [DEBUG] [Thread-128595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:02:10.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:02:10.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:02:11.047 [DEBUG] [Thread-128595] [transport.py] [_log()] userauth is OK
2026-02-11T12:02:11.048 [DEBUG] [Thread-128595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:02:11.048 [DEBUG] [Thread-128595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:02:11.048 [DEBUG] [Thread-128595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:02:11.048 [DEBUG] [Thread-128595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:02:11.066 [INFO] [Thread-128595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:02:11.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:02:11.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:02:11.900 [DEBUG] [Thread-128595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:02:11.901 [DEBUG] [Thread-128595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:02:11.948 [DEBUG] [Thread-128595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:02:11.948 [DEBUG] [Thread-128595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:02:11.958 [DEBUG] [Thread-128595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:02:11.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:02:11.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:02:11.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:02:11.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:02:11.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:02:11.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:02:11.995 [DEBUG] [Thread-128595] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:02:12.947 [DEBUG] [Thread-128597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:02:21.385 [DEBUG] [Thread-128598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:02:36.439 [DEBUG] [Thread-128599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:02:42.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:02:42.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:02:42.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
2026-02-11T12:02:43.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 2, 20), 15.09, 38.4, 0.0, 19.8, 23.95, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:02:43.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:02:20
2026-02-11T12:02:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:02:44.494 [DEBUG] [Thread-128600] [transport.py] [_log()] starting thread (client mode): 0xa2d79030
2026-02-11T12:02:44.495 [DEBUG] [Thread-128600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:02:44.514 [DEBUG] [Thread-128600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:02:44.514 [INFO] [Thread-128600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:02:44.515 [DEBUG] [Thread-128600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] client lang: <none>
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] server lang: <none>
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] kex follows: False
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] Compression: none
2026-02-11T12:02:44.516 [DEBUG] [Thread-128600] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:02:44.523 [DEBUG] [Thread-128600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:02:44.524 [DEBUG] [Thread-128600] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:02:44.524 [DEBUG] [Thread-128600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:02:44.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:02:44.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:02:44.526 [DEBUG] [Thread-128600] [transport.py] [_log()] userauth is OK
2026-02-11T12:02:44.526 [DEBUG] [Thread-128600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:02:44.526 [DEBUG] [Thread-128600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:02:44.526 [DEBUG] [Thread-128600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:02:44.526 [DEBUG] [Thread-128600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:02:44.548 [INFO] [Thread-128600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:02:44.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:02:45.161 [DEBUG] [Thread-128600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:02:45.161 [DEBUG] [Thread-128600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:02:45.161 [DEBUG] [Thread-128600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:02:45.202 [DEBUG] [Thread-128600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:02:45.202 [DEBUG] [Thread-128600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:02:45.205 [DEBUG] [Thread-128600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:02:45.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:02:45.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:02:45.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:02:45.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:02:45.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:02:45.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:02:45.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:02:45.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:02:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:02:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.418200 -999.00  +24.50  22.44     44  +11.50 1 2 1 1 1   888    0 13.44 69.67 ----- 25.2 22.4 295.8 26.2 31.1 -16.2 30.0 -15.3 29.0 -15.0 29.9 -15.4
2026-02-11T12:02:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:02:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:02:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.418200
2026-02-11T12:02:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:02:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:02:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:02:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:02:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:02:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:02:20', tmtdew=15.09, humidity=38.4, cloud=0.0, wind=19.8, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:02:12.480', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:02:45.229 [DEBUG] [Thread-128600] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:02:45.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:02:45.325 [DEBUG] [Thread-128603] [transport.py] [_log()] starting thread (client mode): 0xa2d6e350
2026-02-11T12:02:45.325 [DEBUG] [Thread-128603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:02:45.340 [DEBUG] [Thread-128603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:02:45.340 [INFO] [Thread-128603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:02:45.348 [DEBUG] [Thread-128603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] client lang: <none>
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] server lang: <none>
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] kex follows: False
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:02:45.349 [DEBUG] [Thread-128603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:02:45.350 [DEBUG] [Thread-128603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:02:45.350 [DEBUG] [Thread-128603] [transport.py] [_log()] Compression: none
2026-02-11T12:02:45.350 [DEBUG] [Thread-128603] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:02:45.408 [DEBUG] [Thread-128603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:02:45.409 [DEBUG] [Thread-128603] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:02:45.409 [DEBUG] [Thread-128603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:02:45.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:02:45.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:02:45.464 [DEBUG] [Thread-128603] [transport.py] [_log()] userauth is OK
2026-02-11T12:02:45.465 [DEBUG] [Thread-128603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:02:45.465 [DEBUG] [Thread-128603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:02:45.465 [DEBUG] [Thread-128603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:02:45.465 [DEBUG] [Thread-128603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:02:45.485 [INFO] [Thread-128603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:02:45.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:02:45.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:02:46.341 [DEBUG] [Thread-128603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:02:46.342 [DEBUG] [Thread-128603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:02:46.389 [DEBUG] [Thread-128603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:02:46.390 [DEBUG] [Thread-128603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:02:46.399 [DEBUG] [Thread-128603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:02:46.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:02:46.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:02: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') -> 00000000
2026-02-11T12:02:46.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:02:46.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:02:46.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:02:46.434 [DEBUG] [Thread-128603] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:02:51.476 [DEBUG] [Thread-128605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:04.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:04.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:06.529 [DEBUG] [Thread-128606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:12.993 [DEBUG] [Thread-128607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:03:16.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:03:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:03:18.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 2, 55), 14.71, 39.41, 0.0, 24.19, 23.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:03:18.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:02:55
2026-02-11T12:03:18.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:03:18.760 [DEBUG] [Thread-128608] [transport.py] [_log()] starting thread (client mode): 0xa2d78ca0
2026-02-11T12:03:18.760 [DEBUG] [Thread-128608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:03:18.780 [DEBUG] [Thread-128608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:03:18.780 [INFO] [Thread-128608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:03:18.785 [DEBUG] [Thread-128608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] client lang: <none>
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] server lang: <none>
2026-02-11T12:03:18.786 [DEBUG] [Thread-128608] [transport.py] [_log()] kex follows: False
2026-02-11T12:03:18.787 [DEBUG] [Thread-128608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:03:18.787 [DEBUG] [Thread-128608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:03:18.787 [DEBUG] [Thread-128608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:03:18.787 [DEBUG] [Thread-128608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:03:18.787 [DEBUG] [Thread-128608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:03:18.787 [DEBUG] [Thread-128608] [transport.py] [_log()] Compression: none
2026-02-11T12:03:18.787 [DEBUG] [Thread-128608] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:03:18.806 [DEBUG] [Thread-128608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:03:18.806 [DEBUG] [Thread-128608] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:03:18.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:03:18.808 [DEBUG] [Thread-128608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:03:18.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:03:18.809 [DEBUG] [Thread-128608] [transport.py] [_log()] userauth is OK
2026-02-11T12:03:18.810 [DEBUG] [Thread-128608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:03:18.810 [DEBUG] [Thread-128608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:03:18.810 [DEBUG] [Thread-128608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:03:18.810 [DEBUG] [Thread-128608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:03:18.834 [INFO] [Thread-128608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:03:18.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:03:19.569 [DEBUG] [Thread-128608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:03:19.570 [DEBUG] [Thread-128608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:03:19.570 [DEBUG] [Thread-128608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:03:19.611 [DEBUG] [Thread-128608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:03:19.611 [DEBUG] [Thread-128608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:03:19.613 [DEBUG] [Thread-128608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:03:19.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:03:19.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:03:19.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:03:19.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:03:19.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:03:19.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:03:19.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:03:19.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:03:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:03:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.418547 -999.00  +24.20  18.69     45  +11.60 1 2 1 1 1   888    0 13.30 74.93 ----- 20.6 18.7 280.3 28.7 31.1 -18.4 30.1 -17.1 28.9 -15.7 30.0 -15.9
2026-02-11T12:03:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:03:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:03:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.418547
2026-02-11T12:03:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:03:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:03:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:03:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:03:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:03:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:02:55', tmtdew=14.71, humidity=39.41, cloud=0.0, wind=24.19, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:02:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:03:19.637 [DEBUG] [Thread-128608] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:03:19.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:03:19.731 [DEBUG] [Thread-128611] [transport.py] [_log()] starting thread (client mode): 0xa2d794b0
2026-02-11T12:03:19.731 [DEBUG] [Thread-128611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:03:19.745 [DEBUG] [Thread-128611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:03:19.745 [INFO] [Thread-128611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:03:19.753 [DEBUG] [Thread-128611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:03:19.753 [DEBUG] [Thread-128611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:03:19.753 [DEBUG] [Thread-128611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:03:19.753 [DEBUG] [Thread-128611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:19.753 [DEBUG] [Thread-128611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] client lang: <none>
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] server lang: <none>
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] kex follows: False
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] Compression: none
2026-02-11T12:03:19.754 [DEBUG] [Thread-128611] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:03:19.812 [DEBUG] [Thread-128611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:03:19.812 [DEBUG] [Thread-128611] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:03:19.813 [DEBUG] [Thread-128611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:03:19.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:03:19.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:03:19.872 [DEBUG] [Thread-128611] [transport.py] [_log()] userauth is OK
2026-02-11T12:03:19.872 [DEBUG] [Thread-128611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:03:19.873 [DEBUG] [Thread-128611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:03:19.873 [DEBUG] [Thread-128611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:03:19.873 [DEBUG] [Thread-128611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:03:19.891 [INFO] [Thread-128611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:03:19.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:03:19.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:03:20.721 [DEBUG] [Thread-128611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:03:20.721 [DEBUG] [Thread-128611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:03:20.771 [DEBUG] [Thread-128611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:03:20.772 [DEBUG] [Thread-128611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:03:20.784 [DEBUG] [Thread-128611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:03:20.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:03:20.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')
2026-02-11T12:03:20.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:03:20.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:03:20.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:03:20.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:03:20.821 [DEBUG] [Thread-128611] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:03:21.566 [DEBUG] [Thread-128613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:36.618 [DEBUG] [Thread-128614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:03:50.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:03:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:03:51.656 [DEBUG] [Thread-128615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:03:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 3, 32), 14.8, 39.21, 0.0, 29.77, 24.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:03:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:03:32
2026-02-11T12:03:53.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:03:53.334 [DEBUG] [Thread-128616] [transport.py] [_log()] starting thread (client mode): 0xa2d7b250
2026-02-11T12:03:53.334 [DEBUG] [Thread-128616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:03:53.354 [DEBUG] [Thread-128616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:03:53.354 [INFO] [Thread-128616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:03:53.357 [DEBUG] [Thread-128616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:03:53.358 [DEBUG] [Thread-128616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:03:53.358 [DEBUG] [Thread-128616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:03:53.358 [DEBUG] [Thread-128616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:53.358 [DEBUG] [Thread-128616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:53.358 [DEBUG] [Thread-128616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:53.358 [DEBUG] [Thread-128616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:53.358 [DEBUG] [Thread-128616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] client lang: <none>
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] server lang: <none>
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] kex follows: False
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] Compression: none
2026-02-11T12:03:53.359 [DEBUG] [Thread-128616] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:03:53.377 [DEBUG] [Thread-128616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:03:53.378 [DEBUG] [Thread-128616] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:03:53.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:03:53.379 [DEBUG] [Thread-128616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:03:53.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:03:53.381 [DEBUG] [Thread-128616] [transport.py] [_log()] userauth is OK
2026-02-11T12:03:53.381 [DEBUG] [Thread-128616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:03:53.382 [DEBUG] [Thread-128616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:03:53.382 [DEBUG] [Thread-128616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:03:53.382 [DEBUG] [Thread-128616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:03:53.409 [INFO] [Thread-128616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:03:53.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:03:54.035 [DEBUG] [Thread-128616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:03:54.035 [DEBUG] [Thread-128616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:03:54.036 [DEBUG] [Thread-128616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:03:54.077 [DEBUG] [Thread-128616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:03:54.077 [DEBUG] [Thread-128616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:03:54.080 [DEBUG] [Thread-128616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:03:54.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:03:54.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:03:54.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:03:54.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:03:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:03:54.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:03:54.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:03:54.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:03:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:03:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.418894 -999.00  +24.20  22.10     44  +11.50 1 2 1 1 1   888    0 13.74 76.66 ----- 20.8 22.1 275.2 31.0 31.2 -18.3 30.2 -17.0 29.0 -17.6 30.0 -17.8
2026-02-11T12:03:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:03:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:03:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.418894
2026-02-11T12:03:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:03:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:03:54.107 [DEBUG] [Thread-128616] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:03:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:03:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:03:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:03:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:03:32', tmtdew=14.8, humidity=39.21, cloud=0.0, wind=29.77, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:03:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:03:54.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:03:54.207 [DEBUG] [Thread-128619] [transport.py] [_log()] starting thread (client mode): 0xa2d6c760
2026-02-11T12:03:54.207 [DEBUG] [Thread-128619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:03:54.221 [DEBUG] [Thread-128619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:03:54.221 [INFO] [Thread-128619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:03:54.229 [DEBUG] [Thread-128619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:03:54.229 [DEBUG] [Thread-128619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:03:54.229 [DEBUG] [Thread-128619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:03:54.229 [DEBUG] [Thread-128619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:54.229 [DEBUG] [Thread-128619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] client lang: <none>
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] server lang: <none>
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] kex follows: False
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] Compression: none
2026-02-11T12:03:54.230 [DEBUG] [Thread-128619] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:03:54.288 [DEBUG] [Thread-128619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:03:54.289 [DEBUG] [Thread-128619] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:03:54.289 [DEBUG] [Thread-128619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:03:54.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:03:54.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:03:54.345 [DEBUG] [Thread-128619] [transport.py] [_log()] userauth is OK
2026-02-11T12:03:54.345 [DEBUG] [Thread-128619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:03:54.346 [DEBUG] [Thread-128619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:03:54.346 [DEBUG] [Thread-128619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:03:54.346 [DEBUG] [Thread-128619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:03:54.365 [INFO] [Thread-128619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:03:54.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:03:54.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:03:55.209 [DEBUG] [Thread-128619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:03:55.209 [DEBUG] [Thread-128619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:03:55.259 [DEBUG] [Thread-128619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:03:55.259 [DEBUG] [Thread-128619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:03:55.267 [DEBUG] [Thread-128619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:03:55.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:03:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:03:55.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:03:55.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:03:55.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:03:55.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:03:55.301 [DEBUG] [Thread-128619] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:04:04.448 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:04:04.449 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:04:06.694 [DEBUG] [Thread-128621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:04:13.039 [DEBUG] [Thread-128622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:04:21.743 [DEBUG] [Thread-128623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:04:25.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:04:25.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:04:25.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:04:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 4, 8), 14.86, 39.08, 0.0, 29.98, 24.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:04:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:04:08
2026-02-11T12:04:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:04:27.763 [DEBUG] [Thread-128624] [transport.py] [_log()] starting thread (client mode): 0xa2d78670
2026-02-11T12:04:27.764 [DEBUG] [Thread-128624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:04:27.784 [DEBUG] [Thread-128624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:04:27.784 [INFO] [Thread-128624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:04:27.788 [DEBUG] [Thread-128624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:04:27.788 [DEBUG] [Thread-128624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] client lang: <none>
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] server lang: <none>
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] kex follows: False
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] Compression: none
2026-02-11T12:04:27.789 [DEBUG] [Thread-128624] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:04:27.807 [DEBUG] [Thread-128624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:04:27.807 [DEBUG] [Thread-128624] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:04:27.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:04:27.808 [DEBUG] [Thread-128624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:04:27.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:04:27.811 [DEBUG] [Thread-128624] [transport.py] [_log()] userauth is OK
2026-02-11T12:04:27.811 [DEBUG] [Thread-128624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:04:27.811 [DEBUG] [Thread-128624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:04:27.811 [DEBUG] [Thread-128624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:04:27.811 [DEBUG] [Thread-128624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:04:27.834 [INFO] [Thread-128624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:04:27.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:04:28.482 [DEBUG] [Thread-128624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:04:28.483 [DEBUG] [Thread-128624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:04:28.483 [DEBUG] [Thread-128624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:04:28.523 [DEBUG] [Thread-128624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:04:28.523 [DEBUG] [Thread-128624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:04:28.526 [DEBUG] [Thread-128624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:04:28.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:04:28.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:04:28.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:04:28.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:04:28.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:04:28.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:04:28.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:04:28.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:04:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:04:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.419241 -999.00  +24.30  23.08     44  +11.50 1 2 1 1 1   888    0 13.62 81.73 ----- 24.0 23.1 301.8 29.1 31.2 -17.0 30.2 -16.5 29.0 -16.1 30.2 -15.0
2026-02-11T12:04:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:04:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:04:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.419241
2026-02-11T12:04:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:04:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:04:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:04:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:04:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:04:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:04:08', tmtdew=14.86, humidity=39.08, cloud=0.0, wind=29.98, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:03:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:04:28.550 [DEBUG] [Thread-128624] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:04:28.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:04:28.646 [DEBUG] [Thread-128627] [transport.py] [_log()] starting thread (client mode): 0xa2d78d90
2026-02-11T12:04:28.646 [DEBUG] [Thread-128627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:04:28.661 [DEBUG] [Thread-128627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:04:28.661 [INFO] [Thread-128627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] client lang: <none>
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] server lang: <none>
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] kex follows: False
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:04:28.669 [DEBUG] [Thread-128627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:04:28.670 [DEBUG] [Thread-128627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:04:28.670 [DEBUG] [Thread-128627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:04:28.670 [DEBUG] [Thread-128627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:04:28.670 [DEBUG] [Thread-128627] [transport.py] [_log()] Compression: none
2026-02-11T12:04:28.670 [DEBUG] [Thread-128627] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:04:28.726 [DEBUG] [Thread-128627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:04:28.726 [DEBUG] [Thread-128627] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:04:28.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:04:28.727 [DEBUG] [Thread-128627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:04:28.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:04:28.787 [DEBUG] [Thread-128627] [transport.py] [_log()] userauth is OK
2026-02-11T12:04:28.787 [DEBUG] [Thread-128627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:04:28.787 [DEBUG] [Thread-128627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:04:28.787 [DEBUG] [Thread-128627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:04:28.787 [DEBUG] [Thread-128627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:04:28.806 [INFO] [Thread-128627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:04:28.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:04:28.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:04:29.645 [DEBUG] [Thread-128627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:04:29.645 [DEBUG] [Thread-128627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:04:29.693 [DEBUG] [Thread-128627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:04:29.693 [DEBUG] [Thread-128627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:04:29.703 [DEBUG] [Thread-128627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:04:29.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:04:29.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')
2026-02-11T12:04:29.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
2026-02-11T12:04:29.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:04:29.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:04:29.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:04:29.740 [DEBUG] [Thread-128627] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:04:36.780 [DEBUG] [Thread-128629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:04:51.833 [DEBUG] [Thread-128630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:04:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:04:59.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:04:59.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:05:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 4, 43), 15.24, 38.2, 0.0, 27.38, 24.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:05:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:04:43
2026-02-11T12:05:02.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:05:02.252 [DEBUG] [Thread-128631] [transport.py] [_log()] starting thread (client mode): 0xa2d3dc60
2026-02-11T12:05:02.253 [DEBUG] [Thread-128631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:05:02.273 [DEBUG] [Thread-128631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:05:02.273 [INFO] [Thread-128631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:02.276 [DEBUG] [Thread-128631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] client lang: <none>
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] server lang: <none>
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] kex follows: False
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] Compression: none
2026-02-11T12:05:02.277 [DEBUG] [Thread-128631] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:05:02.294 [DEBUG] [Thread-128631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:05:02.294 [DEBUG] [Thread-128631] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:05:02.295 [DEBUG] [Thread-128631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:05:02.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:05:02.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:05:02.296 [DEBUG] [Thread-128631] [transport.py] [_log()] userauth is OK
2026-02-11T12:05:02.296 [DEBUG] [Thread-128631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:05:02.296 [DEBUG] [Thread-128631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:05:02.297 [DEBUG] [Thread-128631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:05:02.297 [DEBUG] [Thread-128631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:05:02.314 [INFO] [Thread-128631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:05:02.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:05:02.936 [DEBUG] [Thread-128631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:05:02.936 [DEBUG] [Thread-128631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:05:02.937 [DEBUG] [Thread-128631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:05:02.977 [DEBUG] [Thread-128631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:05:02.977 [DEBUG] [Thread-128631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:05:02.979 [DEBUG] [Thread-128631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:05:02.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:05:02.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:05:02.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:05:02.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:05:03.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:05:03.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:05:03.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:05:03.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:05:03.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:05:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.419588 -999.00  +24.40  26.22     44  +11.50 1 2 1 1 1   888    0 14.17 86.79 ----- 26.3 26.2 292.4 36.4 31.3 -16.7 30.3 -17.1 29.2 -15.4 30.3 -15.6
2026-02-11T12:05:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:05:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:05:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.419588
2026-02-11T12:05:03.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:05:03.005 [DEBUG] [Thread-128631] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:05:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:05:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:05:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:05:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:05:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:04:43', tmtdew=15.24, humidity=38.2, cloud=0.0, wind=27.38, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:04:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:05:03.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:05:03.099 [DEBUG] [Thread-128634] [transport.py] [_log()] starting thread (client mode): 0xa2d3d630
2026-02-11T12:05:03.100 [DEBUG] [Thread-128634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:05:03.117 [DEBUG] [Thread-128634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:05:03.118 [INFO] [Thread-128634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:05:03.128 [DEBUG] [Thread-128634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:05:03.128 [DEBUG] [Thread-128634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] client lang: <none>
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] server lang: <none>
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] kex follows: False
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] Compression: none
2026-02-11T12:05:03.129 [DEBUG] [Thread-128634] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:05:03.195 [DEBUG] [Thread-128634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:05:03.196 [DEBUG] [Thread-128634] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:05:03.196 [DEBUG] [Thread-128634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:05:03.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:05:03.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:05:03.257 [DEBUG] [Thread-128634] [transport.py] [_log()] userauth is OK
2026-02-11T12:05:03.257 [DEBUG] [Thread-128634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:05:03.257 [DEBUG] [Thread-128634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:05:03.257 [DEBUG] [Thread-128634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:05:03.257 [DEBUG] [Thread-128634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:05:03.282 [INFO] [Thread-128634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:05:03.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:05:03.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:05:04.118 [DEBUG] [Thread-128634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:05:04.118 [DEBUG] [Thread-128634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:05:04.166 [DEBUG] [Thread-128634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:05:04.166 [DEBUG] [Thread-128634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:05:04.176 [DEBUG] [Thread-128634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:05:04.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:05: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')
2026-02-11T12:05:04.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:05:04.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:05:04.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:05:04.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:05:04.215 [DEBUG] [Thread-128634] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:05:04.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:05:04.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:05:06.873 [DEBUG] [Thread-128636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:05:13.100 [DEBUG] [Thread-128637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:05:21.935 [DEBUG] [Thread-128638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:05:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:05:34.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:05:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:05:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 5, 18), 15.32, 38.0, 0.0, 30.77, 24.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:05:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:05:18
2026-02-11T12:05:36.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:05:36.675 [DEBUG] [Thread-128639] [transport.py] [_log()] starting thread (client mode): 0xa2d79c00
2026-02-11T12:05:36.675 [DEBUG] [Thread-128639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:05:36.695 [DEBUG] [Thread-128639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:05:36.695 [INFO] [Thread-128639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:05:36.698 [DEBUG] [Thread-128639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:05:36.698 [DEBUG] [Thread-128639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:05:36.698 [DEBUG] [Thread-128639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:05:36.698 [DEBUG] [Thread-128639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:36.698 [DEBUG] [Thread-128639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] client lang: <none>
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] server lang: <none>
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] kex follows: False
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] Compression: none
2026-02-11T12:05:36.699 [DEBUG] [Thread-128639] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:05:36.717 [DEBUG] [Thread-128639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:05:36.717 [DEBUG] [Thread-128639] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:05:36.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:05:36.719 [DEBUG] [Thread-128639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:05:36.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:05:36.761 [DEBUG] [Thread-128639] [transport.py] [_log()] userauth is OK
2026-02-11T12:05:36.761 [DEBUG] [Thread-128639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:05:36.761 [DEBUG] [Thread-128639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:05:36.761 [DEBUG] [Thread-128639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:05:36.761 [DEBUG] [Thread-128639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:05:36.782 [INFO] [Thread-128639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:05:36.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:05:36.973 [DEBUG] [Thread-128641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:05:37.428 [DEBUG] [Thread-128639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:05:37.428 [DEBUG] [Thread-128639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:05:37.428 [DEBUG] [Thread-128639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:05:37.469 [DEBUG] [Thread-128639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:05:37.470 [DEBUG] [Thread-128639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:05:37.473 [DEBUG] [Thread-128639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:05:37.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:05:37.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:05:37.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:05:37.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:05:37.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:05:37.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:05:37.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:05:37.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:05:37.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:05:37.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.419936 -999.00  +24.30  28.46     43  +11.20 1 2 1 1 1   888    0 14.09 91.25 ----- 31.2 28.5 300.2 33.9 31.2 -21.6 30.2 -18.5 28.9 -22.2 29.9 -19.4
2026-02-11T12:05:37.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:05:37.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:05:37.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.419936
2026-02-11T12:05:37.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:05:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:05:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:05:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:05:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:05:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:05:18', tmtdew=15.32, humidity=38.0, cloud=0.0, wind=30.77, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:04:42.470', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:05:37.500 [DEBUG] [Thread-128639] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:05:37.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:05:37.596 [DEBUG] [Thread-128643] [transport.py] [_log()] starting thread (client mode): 0xa2d79870
2026-02-11T12:05:37.596 [DEBUG] [Thread-128643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:05:37.610 [DEBUG] [Thread-128643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:05:37.611 [INFO] [Thread-128643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:05:37.618 [DEBUG] [Thread-128643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] client lang: <none>
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] server lang: <none>
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] kex follows: False
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:05:37.619 [DEBUG] [Thread-128643] [transport.py] [_log()] Compression: none
2026-02-11T12:05:37.620 [DEBUG] [Thread-128643] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:05:37.677 [DEBUG] [Thread-128643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:05:37.678 [DEBUG] [Thread-128643] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:05:37.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:05:37.679 [DEBUG] [Thread-128643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:05:37.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:05:37.733 [DEBUG] [Thread-128643] [transport.py] [_log()] userauth is OK
2026-02-11T12:05:37.733 [DEBUG] [Thread-128643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:05:37.734 [DEBUG] [Thread-128643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:05:37.734 [DEBUG] [Thread-128643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:05:37.734 [DEBUG] [Thread-128643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:05:37.752 [INFO] [Thread-128643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:05:37.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:05:37.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:05:38.584 [DEBUG] [Thread-128643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:05:38.585 [DEBUG] [Thread-128643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:05:38.632 [DEBUG] [Thread-128643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:05:38.633 [DEBUG] [Thread-128643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:05:38.642 [DEBUG] [Thread-128643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:05:38.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:05:38.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:05:38.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:05:38.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:05:38.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:05:38.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:05:38.678 [DEBUG] [Thread-128643] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:05:52.014 [DEBUG] [Thread-128645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:06:04.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:06:04.735 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:06:07.064 [DEBUG] [Thread-128646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:06:08.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:06:08.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:06:08.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:06:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 5, 55), 14.87, 38.81, 0.0, 24.56, 23.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:06:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:05:55
2026-02-11T12:06:11.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:06:11.665 [DEBUG] [Thread-128647] [transport.py] [_log()] starting thread (client mode): 0xa2d7a0e0
2026-02-11T12:06:11.665 [DEBUG] [Thread-128647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:06:11.674 [DEBUG] [Thread-128647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:06:11.674 [INFO] [Thread-128647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] client lang: <none>
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] server lang: <none>
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] kex follows: False
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] Compression: none
2026-02-11T12:06:11.676 [DEBUG] [Thread-128647] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:06:11.685 [DEBUG] [Thread-128647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:06:11.685 [DEBUG] [Thread-128647] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:06:11.686 [DEBUG] [Thread-128647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:06:11.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:06:11.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:06:11.686 [DEBUG] [Thread-128647] [transport.py] [_log()] userauth is OK
2026-02-11T12:06:11.687 [DEBUG] [Thread-128647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:06:11.687 [DEBUG] [Thread-128647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:06:11.687 [DEBUG] [Thread-128647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:06:11.687 [DEBUG] [Thread-128647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:06:11.698 [INFO] [Thread-128647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:06:11.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:06:12.500 [DEBUG] [Thread-128647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:06:12.500 [DEBUG] [Thread-128647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:06:12.501 [DEBUG] [Thread-128647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:06:12.541 [DEBUG] [Thread-128647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:06:12.541 [DEBUG] [Thread-128647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:06:12.544 [DEBUG] [Thread-128647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:06:12.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:06:12.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:06:12.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:06:12.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:06:12.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:06:12.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:06:12.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:06:12.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:06:12.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:06:12.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.420283 -999.00  +24.00  25.27     44  +11.20 1 2 1 1 1   888    0 14.08 91.48 ----- 19.9 25.3 290.0 31.8 31.1 -20.4 30.1 -16.6 29.0 -20.7 29.8 -19.9
2026-02-11T12:06:12.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:06:12.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:06:12.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.420283
2026-02-11T12:06:12.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:06:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:06:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:06:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:06:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:06:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:05:55', tmtdew=14.87, humidity=38.81, cloud=0.0, wind=24.56, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:05:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:06:12.567 [DEBUG] [Thread-128647] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:06:12.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:06:12.662 [DEBUG] [Thread-128650] [transport.py] [_log()] starting thread (client mode): 0xa2d798d0
2026-02-11T12:06:12.663 [DEBUG] [Thread-128650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:06:12.679 [DEBUG] [Thread-128650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:06:12.679 [INFO] [Thread-128650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:06:12.686 [DEBUG] [Thread-128650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:06:12.687 [DEBUG] [Thread-128650] [transport.py] [_log()] client lang: <none>
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] server lang: <none>
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] kex follows: False
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] Compression: none
2026-02-11T12:06:12.688 [DEBUG] [Thread-128650] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:06:12.748 [DEBUG] [Thread-128650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:06:12.748 [DEBUG] [Thread-128650] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:06:12.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:06:12.749 [DEBUG] [Thread-128650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:06:12.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:06:12.803 [DEBUG] [Thread-128650] [transport.py] [_log()] userauth is OK
2026-02-11T12:06:12.803 [DEBUG] [Thread-128650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:06:12.803 [DEBUG] [Thread-128650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:06:12.804 [DEBUG] [Thread-128650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:06:12.804 [DEBUG] [Thread-128650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:06:12.826 [INFO] [Thread-128650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:06:12.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:06:12.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:06:13.135 [DEBUG] [Thread-128652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:06:13.647 [DEBUG] [Thread-128650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:06:13.647 [DEBUG] [Thread-128650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:06:13.695 [DEBUG] [Thread-128650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:06:13.695 [DEBUG] [Thread-128650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:06:13.704 [DEBUG] [Thread-128650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:06:13.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:06:13.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')
2026-02-11T12:06:13.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
2026-02-11T12:06:13.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:06:13.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:06:13.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:06:13.740 [DEBUG] [Thread-128650] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:06:22.097 [DEBUG] [Thread-128653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:06:37.146 [DEBUG] [Thread-128654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:06:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:06:43.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:06:43.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
2026-02-11T12:06:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 6, 30), 14.77, 39.03, 0.0, 20.7, 23.75, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:06:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:06:30
2026-02-11T12:06:46.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:06:46.164 [DEBUG] [Thread-128655] [transport.py] [_log()] starting thread (client mode): 0xa2d3c2b0
2026-02-11T12:06:46.165 [DEBUG] [Thread-128655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:06:46.185 [DEBUG] [Thread-128655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:06:46.185 [INFO] [Thread-128655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:06:46.189 [DEBUG] [Thread-128655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:06:46.189 [DEBUG] [Thread-128655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:06:46.189 [DEBUG] [Thread-128655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:06:46.189 [DEBUG] [Thread-128655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:46.189 [DEBUG] [Thread-128655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:46.189 [DEBUG] [Thread-128655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:46.189 [DEBUG] [Thread-128655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] client lang: <none>
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] server lang: <none>
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] kex follows: False
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] Compression: none
2026-02-11T12:06:46.190 [DEBUG] [Thread-128655] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:06:46.211 [DEBUG] [Thread-128655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:06:46.212 [DEBUG] [Thread-128655] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:06:46.212 [DEBUG] [Thread-128655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:06:46.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:06:46.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:06:46.215 [DEBUG] [Thread-128655] [transport.py] [_log()] userauth is OK
2026-02-11T12:06:46.215 [DEBUG] [Thread-128655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:06:46.215 [DEBUG] [Thread-128655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:06:46.215 [DEBUG] [Thread-128655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:06:46.215 [DEBUG] [Thread-128655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:06:46.240 [INFO] [Thread-128655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:06:46.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:06:46.857 [DEBUG] [Thread-128655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:06:46.857 [DEBUG] [Thread-128655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:06:46.858 [DEBUG] [Thread-128655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:06:46.899 [DEBUG] [Thread-128655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:06:46.899 [DEBUG] [Thread-128655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:06:46.902 [DEBUG] [Thread-128655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:06:46.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:06:46.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:06:46.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:06:46.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:06:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:06:46.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:06:46.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:06:46.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:06:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:06:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.420977 -999.00  +23.80  29.87     44  +11.10 1 2 1 1 1   888    0 14.92 106.91 ----- 34.9 29.9 307.2 43.0 30.5 -24.6 29.8 -22.5 28.5 -19.5 29.5 -17.2
2026-02-11T12:06:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:06:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:06:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.420977
2026-02-11T12:06:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:06:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:06:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:06:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:06:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:06:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:06:30', tmtdew=14.77, humidity=39.03, cloud=0.0, wind=20.7, temperature=23.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:06:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:06:46.922 [DEBUG] [Thread-128655] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:06:47.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:06:47.012 [DEBUG] [Thread-128658] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-11T12:06:47.012 [DEBUG] [Thread-128658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:06:47.027 [DEBUG] [Thread-128658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:06:47.027 [INFO] [Thread-128658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:06:47.034 [DEBUG] [Thread-128658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:06:47.034 [DEBUG] [Thread-128658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:06:47.034 [DEBUG] [Thread-128658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] client lang: <none>
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] server lang: <none>
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] kex follows: False
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] Compression: none
2026-02-11T12:06:47.035 [DEBUG] [Thread-128658] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:06:47.094 [DEBUG] [Thread-128658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:06:47.095 [DEBUG] [Thread-128658] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:06:47.095 [DEBUG] [Thread-128658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:06:47.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:06:47.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:06:47.153 [DEBUG] [Thread-128658] [transport.py] [_log()] userauth is OK
2026-02-11T12:06:47.154 [DEBUG] [Thread-128658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:06:47.154 [DEBUG] [Thread-128658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:06:47.154 [DEBUG] [Thread-128658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:06:47.154 [DEBUG] [Thread-128658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:06:47.173 [INFO] [Thread-128658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:06:47.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:06:47.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:06:48.000 [DEBUG] [Thread-128658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:06:48.000 [DEBUG] [Thread-128658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:06:48.047 [DEBUG] [Thread-128658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:06:48.047 [DEBUG] [Thread-128658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:06:48.056 [DEBUG] [Thread-128658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:06:48.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:06:48.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:06:48.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:06:48.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:06:48.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:06:48.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:06:48.090 [DEBUG] [Thread-128658] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:06:52.181 [DEBUG] [Thread-128660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:04.876 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:04.877 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:07.231 [DEBUG] [Thread-128661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:13.176 [DEBUG] [Thread-128662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:07:18.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:07:18.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:07:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 7, 5), 14.49, 39.67, 0.0, 23.4, 23.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:07:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:07:05
2026-02-11T12:07:20.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:07:20.487 [DEBUG] [Thread-128663] [transport.py] [_log()] starting thread (client mode): 0xa2d3cdf0
2026-02-11T12:07:20.487 [DEBUG] [Thread-128663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:07:20.498 [DEBUG] [Thread-128663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:07:20.498 [INFO] [Thread-128663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] client lang: <none>
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] server lang: <none>
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] kex follows: False
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] Compression: none
2026-02-11T12:07:20.499 [DEBUG] [Thread-128663] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:07:20.511 [DEBUG] [Thread-128663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:07:20.512 [DEBUG] [Thread-128663] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:07:20.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:07:20.512 [DEBUG] [Thread-128663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:07:20.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:07:20.513 [DEBUG] [Thread-128663] [transport.py] [_log()] userauth is OK
2026-02-11T12:07:20.514 [DEBUG] [Thread-128663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:07:20.514 [DEBUG] [Thread-128663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:07:20.514 [DEBUG] [Thread-128663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:07:20.514 [DEBUG] [Thread-128663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:07:20.538 [INFO] [Thread-128663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:07:20.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:07:21.157 [DEBUG] [Thread-128663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:07:21.157 [DEBUG] [Thread-128663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:07:21.158 [DEBUG] [Thread-128663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:07:21.198 [DEBUG] [Thread-128663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:07:21.199 [DEBUG] [Thread-128663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:07:21.202 [DEBUG] [Thread-128663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:07:21.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:07:21.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:07:21.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:07:21.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:07:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:07:21.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:07:21.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:07:21.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:07:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:07:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.421324 -999.00  +22.50  22.99     47  +10.80 1 2 1 1 1   888    0 14.63 105.66 ----- 21.7 23.0 309.4 38.4 30.4 -19.7 29.5 -20.8 28.6 -18.4 29.4 -19.1
2026-02-11T12:07:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:07:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:07:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.421324
2026-02-11T12:07:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:07:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:07:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:07:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:07:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:07:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:07:05', tmtdew=14.49, humidity=39.67, cloud=0.0, wind=23.4, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:06:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:07:21.231 [DEBUG] [Thread-128663] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:07:21.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:07:21.326 [DEBUG] [Thread-128666] [transport.py] [_log()] starting thread (client mode): 0xa2d3cd90
2026-02-11T12:07:21.327 [DEBUG] [Thread-128666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:07:21.346 [DEBUG] [Thread-128666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:07:21.346 [INFO] [Thread-128666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:21.354 [DEBUG] [Thread-128666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] client lang: <none>
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] server lang: <none>
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] kex follows: False
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] Compression: none
2026-02-11T12:07:21.355 [DEBUG] [Thread-128666] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:07:21.412 [DEBUG] [Thread-128666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:07:21.412 [DEBUG] [Thread-128666] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:07:21.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:07:21.414 [DEBUG] [Thread-128666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:07:21.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:07:21.475 [DEBUG] [Thread-128666] [transport.py] [_log()] userauth is OK
2026-02-11T12:07:21.475 [DEBUG] [Thread-128666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:07:21.475 [DEBUG] [Thread-128666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:07:21.475 [DEBUG] [Thread-128666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:07:21.475 [DEBUG] [Thread-128666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:07:21.494 [INFO] [Thread-128666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:07:21.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:07:21.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:07:22.266 [DEBUG] [Thread-128668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:22.363 [DEBUG] [Thread-128666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:07:22.363 [DEBUG] [Thread-128666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:07:22.413 [DEBUG] [Thread-128666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:07:22.413 [DEBUG] [Thread-128666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:07:22.422 [DEBUG] [Thread-128666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:07:22.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:07:22.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:07:22.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:07:22.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:07:22.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:07:22.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:07:22.458 [DEBUG] [Thread-128666] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:07:37.324 [DEBUG] [Thread-128669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:52.359 [DEBUG] [Thread-128670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:07:52.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:07:52.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:07:52.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:07:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 7, 41), 15.31, 37.78, 0.0, 30.17, 24.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:07:54.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:07:41
2026-02-11T12:07:55.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:07:55.332 [DEBUG] [Thread-128671] [transport.py] [_log()] starting thread (client mode): 0xa2d1b970
2026-02-11T12:07:55.332 [DEBUG] [Thread-128671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:07:55.353 [DEBUG] [Thread-128671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:07:55.354 [INFO] [Thread-128671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] client lang: <none>
2026-02-11T12:07:55.355 [DEBUG] [Thread-128671] [transport.py] [_log()] server lang: <none>
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] kex follows: False
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] Compression: none
2026-02-11T12:07:55.356 [DEBUG] [Thread-128671] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:07:55.368 [DEBUG] [Thread-128671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:07:55.369 [DEBUG] [Thread-128671] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:07:55.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:07:55.371 [DEBUG] [Thread-128671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:07:55.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:07:55.373 [DEBUG] [Thread-128671] [transport.py] [_log()] userauth is OK
2026-02-11T12:07:55.374 [DEBUG] [Thread-128671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:07:55.374 [DEBUG] [Thread-128671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:07:55.374 [DEBUG] [Thread-128671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:07:55.374 [DEBUG] [Thread-128671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:07:55.400 [INFO] [Thread-128671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:07:55.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:07:56.002 [DEBUG] [Thread-128671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:07:56.002 [DEBUG] [Thread-128671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:07:56.003 [DEBUG] [Thread-128671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:07:56.043 [DEBUG] [Thread-128671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:07:56.043 [DEBUG] [Thread-128671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:07:56.046 [DEBUG] [Thread-128671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:07:56.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:07:56.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:07:56.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:07:56.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:07:56.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:07:56.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:07:56.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:07:56.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:07:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:07:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.421672 -999.00  +22.70  30.19     47  +11.00 1 2 2 1 1   888    0 14.86 109.25 ----- 27.8 30.2 306.6 34.7 30.4 -17.3 29.5 -17.1 28.6 -16.4 29.5 -15.5
2026-02-11T12:07:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:07:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:07:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.421672
2026-02-11T12:07:56.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:07:56.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:07:56.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:07:56.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:07:56.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:07:56.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:07:41', tmtdew=15.31, humidity=37.78, cloud=0.0, wind=30.17, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:07:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:07:56.072 [DEBUG] [Thread-128671] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:07:56.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:07:56.167 [DEBUG] [Thread-128674] [transport.py] [_log()] starting thread (client mode): 0xa2d1a140
2026-02-11T12:07:56.167 [DEBUG] [Thread-128674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:07:56.182 [DEBUG] [Thread-128674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:07:56.183 [INFO] [Thread-128674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:07:56.191 [DEBUG] [Thread-128674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:07:56.191 [DEBUG] [Thread-128674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:07:56.191 [DEBUG] [Thread-128674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:07:56.191 [DEBUG] [Thread-128674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:56.191 [DEBUG] [Thread-128674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:07:56.191 [DEBUG] [Thread-128674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] client lang: <none>
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] server lang: <none>
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] kex follows: False
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:07:56.192 [DEBUG] [Thread-128674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:07:56.193 [DEBUG] [Thread-128674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:07:56.193 [DEBUG] [Thread-128674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:07:56.193 [DEBUG] [Thread-128674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:07:56.193 [DEBUG] [Thread-128674] [transport.py] [_log()] Compression: none
2026-02-11T12:07:56.193 [DEBUG] [Thread-128674] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:07:56.251 [DEBUG] [Thread-128674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:07:56.251 [DEBUG] [Thread-128674] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:07:56.252 [DEBUG] [Thread-128674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:07:56.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:07:56.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:07:56.310 [DEBUG] [Thread-128674] [transport.py] [_log()] userauth is OK
2026-02-11T12:07:56.310 [DEBUG] [Thread-128674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:07:56.310 [DEBUG] [Thread-128674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:07:56.311 [DEBUG] [Thread-128674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:07:56.311 [DEBUG] [Thread-128674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:07:56.331 [INFO] [Thread-128674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:07:56.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:07:56.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:07:57.156 [DEBUG] [Thread-128674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:07:57.156 [DEBUG] [Thread-128674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:07:57.204 [DEBUG] [Thread-128674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:07:57.205 [DEBUG] [Thread-128674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:07:57.214 [DEBUG] [Thread-128674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:07:57.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:07:57.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:07:57.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:07:57.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:07:57.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:07:57.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:07:57.251 [DEBUG] [Thread-128674] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:08:05.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:08:05.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:08:07.393 [DEBUG] [Thread-128676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:08:13.226 [DEBUG] [Thread-128677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:08:22.443 [DEBUG] [Thread-128678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:08:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:08:27.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:08:27.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:08:29.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 8, 17), 14.38, 39.92, 0.0, 17.11, 23.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:08:29.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:08:17
2026-02-11T12:08:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:08:29.637 [DEBUG] [Thread-128679] [transport.py] [_log()] starting thread (client mode): 0xa2d3f9d0
2026-02-11T12:08:29.638 [DEBUG] [Thread-128679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:08:29.658 [DEBUG] [Thread-128679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:08:29.658 [INFO] [Thread-128679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:08:29.661 [DEBUG] [Thread-128679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:08:29.661 [DEBUG] [Thread-128679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] client lang: <none>
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] server lang: <none>
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] kex follows: False
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:08:29.662 [DEBUG] [Thread-128679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:08:29.663 [DEBUG] [Thread-128679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:08:29.663 [DEBUG] [Thread-128679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:08:29.663 [DEBUG] [Thread-128679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:08:29.663 [DEBUG] [Thread-128679] [transport.py] [_log()] Compression: none
2026-02-11T12:08:29.663 [DEBUG] [Thread-128679] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:08:29.680 [DEBUG] [Thread-128679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:08:29.680 [DEBUG] [Thread-128679] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:08:29.680 [DEBUG] [Thread-128679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:08:29.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:08:29.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:08:29.682 [DEBUG] [Thread-128679] [transport.py] [_log()] userauth is OK
2026-02-11T12:08:29.683 [DEBUG] [Thread-128679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:08:29.683 [DEBUG] [Thread-128679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:08:29.683 [DEBUG] [Thread-128679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:08:29.683 [DEBUG] [Thread-128679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:08:29.708 [INFO] [Thread-128679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:08:29.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:08:30.365 [DEBUG] [Thread-128679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:08:30.365 [DEBUG] [Thread-128679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:08:30.365 [DEBUG] [Thread-128679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:08:30.406 [DEBUG] [Thread-128679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:08:30.406 [DEBUG] [Thread-128679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:08:30.409 [DEBUG] [Thread-128679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:08:30.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:08:30.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:08:30.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:08:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:08:30.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:08:30.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:08:30.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:08:30.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:08:30.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:08:30.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.422019 -999.00  +22.90  25.73     46  +11.00 1 2 1 1 1   888    0 15.08 111.09 ----- 23.1 25.7 320.8 30.7 30.6 -16.4 29.6 -16.7 28.8 -14.7 29.7 -15.4
2026-02-11T12:08:30.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:08:30.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:08:30.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.422019
2026-02-11T12:08:30.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:08:17', tmtdew=14.38, humidity=39.92, cloud=0.0, wind=17.11, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:07:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:08:30.435 [DEBUG] [Thread-128679] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:08:30.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:08:30.532 [DEBUG] [Thread-128682] [transport.py] [_log()] starting thread (client mode): 0xa2d3d060
2026-02-11T12:08:30.532 [DEBUG] [Thread-128682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:08:30.548 [DEBUG] [Thread-128682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:08:30.549 [INFO] [Thread-128682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:08:30.556 [DEBUG] [Thread-128682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] client lang: <none>
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] server lang: <none>
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] kex follows: False
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:08:30.557 [DEBUG] [Thread-128682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:08:30.558 [DEBUG] [Thread-128682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:08:30.558 [DEBUG] [Thread-128682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:08:30.558 [DEBUG] [Thread-128682] [transport.py] [_log()] Compression: none
2026-02-11T12:08:30.558 [DEBUG] [Thread-128682] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:08:30.623 [DEBUG] [Thread-128682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:08:30.624 [DEBUG] [Thread-128682] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:08:30.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:08:30.625 [DEBUG] [Thread-128682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:08:30.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:08:30.683 [DEBUG] [Thread-128682] [transport.py] [_log()] userauth is OK
2026-02-11T12:08:30.683 [DEBUG] [Thread-128682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:08:30.683 [DEBUG] [Thread-128682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:08:30.683 [DEBUG] [Thread-128682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:08:30.683 [DEBUG] [Thread-128682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:08:30.702 [INFO] [Thread-128682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:08:30.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:08:30.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:08:31.532 [DEBUG] [Thread-128682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:08:31.532 [DEBUG] [Thread-128682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:08:31.582 [DEBUG] [Thread-128682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:08:31.582 [DEBUG] [Thread-128682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:08:31.597 [DEBUG] [Thread-128682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:08:31.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:08:31.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:08: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
2026-02-11T12:08:31.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:08:31.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:08:31.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:08:31.638 [DEBUG] [Thread-128682] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:08:37.480 [DEBUG] [Thread-128684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:08:52.541 [DEBUG] [Thread-128685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:09:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:09:01.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:09:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:09:03.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 8, 52), 14.07, 40.92, 0.0, 14.91, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:09:03.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:08:52
2026-02-11T12:09:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:09:04.128 [DEBUG] [Thread-128686] [transport.py] [_log()] starting thread (client mode): 0xa2d19090
2026-02-11T12:09:04.128 [DEBUG] [Thread-128686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:09:04.148 [DEBUG] [Thread-128686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:09:04.148 [INFO] [Thread-128686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:09:04.151 [DEBUG] [Thread-128686] [transport.py] [_log()] client lang: <none>
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] server lang: <none>
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] kex follows: False
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] Compression: none
2026-02-11T12:09:04.152 [DEBUG] [Thread-128686] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:09:04.170 [DEBUG] [Thread-128686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:09:04.170 [DEBUG] [Thread-128686] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:09:04.171 [DEBUG] [Thread-128686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:09:04.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:09:04.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:09:04.173 [DEBUG] [Thread-128686] [transport.py] [_log()] userauth is OK
2026-02-11T12:09:04.173 [DEBUG] [Thread-128686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:09:04.173 [DEBUG] [Thread-128686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:09:04.173 [DEBUG] [Thread-128686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:09:04.173 [DEBUG] [Thread-128686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:09:04.198 [INFO] [Thread-128686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:09:04.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:09:04.794 [DEBUG] [Thread-128686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:09:04.795 [DEBUG] [Thread-128686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:09:04.795 [DEBUG] [Thread-128686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:09:04.835 [DEBUG] [Thread-128686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:09:04.835 [DEBUG] [Thread-128686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:09:04.839 [DEBUG] [Thread-128686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:09:04.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:09:04.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:09:04.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:09:04.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:09:04.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:09:04.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:09:04.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:09:04.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:09:04.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:09:04.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.422366 -999.00  +22.70  19.71     47  +10.80 1 2 1 1 1   888    0 15.25 110.63 ----- 20.4 19.7 327.0 28.8 30.9 -16.8 29.8 -17.0 29.0 -14.9 29.8 -15.4
2026-02-11T12:09:04.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:09:04.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:09:04.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.422366
2026-02-11T12:09:04.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:09:04.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:09:04.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:09:04.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:09:04.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:09:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:08:52', tmtdew=14.07, humidity=40.92, cloud=0.0, wind=14.91, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:08:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:09:04.865 [DEBUG] [Thread-128686] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:09:04.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:09:04.960 [DEBUG] [Thread-128689] [transport.py] [_log()] starting thread (client mode): 0xa2d1aaa0
2026-02-11T12:09:04.960 [DEBUG] [Thread-128689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:09:04.974 [DEBUG] [Thread-128689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:09:04.975 [INFO] [Thread-128689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] client lang: <none>
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] server lang: <none>
2026-02-11T12:09:04.983 [DEBUG] [Thread-128689] [transport.py] [_log()] kex follows: False
2026-02-11T12:09:04.984 [DEBUG] [Thread-128689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:09:04.984 [DEBUG] [Thread-128689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:09:04.984 [DEBUG] [Thread-128689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:09:04.984 [DEBUG] [Thread-128689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:09:04.984 [DEBUG] [Thread-128689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:09:04.984 [DEBUG] [Thread-128689] [transport.py] [_log()] Compression: none
2026-02-11T12:09:04.984 [DEBUG] [Thread-128689] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:09:05.051 [DEBUG] [Thread-128689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:09:05.052 [DEBUG] [Thread-128689] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:09:05.052 [DEBUG] [Thread-128689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:09:05.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:09:05.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:09:05.115 [DEBUG] [Thread-128689] [transport.py] [_log()] userauth is OK
2026-02-11T12:09:05.115 [DEBUG] [Thread-128689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:09:05.115 [DEBUG] [Thread-128689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:09:05.115 [DEBUG] [Thread-128689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:09:05.116 [DEBUG] [Thread-128689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:09:05.135 [INFO] [Thread-128689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:09:05.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:09:05.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:09:05.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:09:05.159 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:09:05.960 [DEBUG] [Thread-128689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:09:05.960 [DEBUG] [Thread-128689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:09:06.007 [DEBUG] [Thread-128689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:09:06.008 [DEBUG] [Thread-128689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:09:06.017 [DEBUG] [Thread-128689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:09:06.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:09:06.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:09:06.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:09:06.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:09:06.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:09:06.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:09:06.054 [DEBUG] [Thread-128689] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:09:07.578 [DEBUG] [Thread-128691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:09:13.280 [DEBUG] [Thread-128692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:09:22.631 [DEBUG] [Thread-128693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:09:36.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:09:36.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:09:36.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:09:37.671 [DEBUG] [Thread-128694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:09:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 9, 27), 13.9, 41.33, 0.0, 11.98, 23.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:09:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:09:27
2026-02-11T12:09:38.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:09:38.409 [DEBUG] [Thread-128695] [transport.py] [_log()] starting thread (client mode): 0xa2d19c90
2026-02-11T12:09:38.409 [DEBUG] [Thread-128695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:09:38.430 [DEBUG] [Thread-128695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:09:38.430 [INFO] [Thread-128695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:09:38.433 [DEBUG] [Thread-128695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:09:38.433 [DEBUG] [Thread-128695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:09:38.433 [DEBUG] [Thread-128695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:09:38.433 [DEBUG] [Thread-128695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:38.433 [DEBUG] [Thread-128695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:38.433 [DEBUG] [Thread-128695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:38.433 [DEBUG] [Thread-128695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] client lang: <none>
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] server lang: <none>
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] kex follows: False
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] Compression: none
2026-02-11T12:09:38.434 [DEBUG] [Thread-128695] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:09:38.452 [DEBUG] [Thread-128695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:09:38.452 [DEBUG] [Thread-128695] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:09:38.453 [DEBUG] [Thread-128695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:09:38.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:09:38.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:09:38.455 [DEBUG] [Thread-128695] [transport.py] [_log()] userauth is OK
2026-02-11T12:09:38.455 [DEBUG] [Thread-128695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:09:38.456 [DEBUG] [Thread-128695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:09:38.456 [DEBUG] [Thread-128695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:09:38.456 [DEBUG] [Thread-128695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:09:38.474 [INFO] [Thread-128695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:09:38.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:09:39.085 [DEBUG] [Thread-128695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:09:39.085 [DEBUG] [Thread-128695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:09:39.085 [DEBUG] [Thread-128695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:09:39.126 [DEBUG] [Thread-128695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:09:39.126 [DEBUG] [Thread-128695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:09:39.129 [DEBUG] [Thread-128695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:09:39.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:09:39.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:09:39.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:09:39.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:09:39.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:09:39.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:09:39.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:09:39.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:09:39.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:09:39.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.422713 -999.00  +23.10  15.54     46  +11.00 1 2 1 1 1   888    0 14.92 113.15 ----- 16.8 15.5 339.7 24.1 31.0 -19.3 29.9 -15.8 29.0 -19.0 29.6 -21.4
2026-02-11T12:09:39.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:09:39.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:09:39.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.422713
2026-02-11T12:09:39.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:09:39.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:09:39.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:09:39.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:09:39.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:09:39.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:09:27', tmtdew=13.9, humidity=41.33, cloud=0.0, wind=11.98, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:08:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:09:39.154 [DEBUG] [Thread-128695] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:09:39.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:09:39.249 [DEBUG] [Thread-128698] [transport.py] [_log()] starting thread (client mode): 0xa2d18e80
2026-02-11T12:09:39.250 [DEBUG] [Thread-128698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:09:39.265 [DEBUG] [Thread-128698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:09:39.265 [INFO] [Thread-128698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:09:39.272 [DEBUG] [Thread-128698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:09:39.273 [DEBUG] [Thread-128698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:09:39.273 [DEBUG] [Thread-128698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:09:39.273 [DEBUG] [Thread-128698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:39.273 [DEBUG] [Thread-128698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:09:39.273 [DEBUG] [Thread-128698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:39.273 [DEBUG] [Thread-128698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] client lang: <none>
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] server lang: <none>
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] kex follows: False
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:09:39.274 [DEBUG] [Thread-128698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:09:39.275 [DEBUG] [Thread-128698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:09:39.275 [DEBUG] [Thread-128698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:09:39.275 [DEBUG] [Thread-128698] [transport.py] [_log()] Compression: none
2026-02-11T12:09:39.275 [DEBUG] [Thread-128698] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:09:39.342 [DEBUG] [Thread-128698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:09:39.342 [DEBUG] [Thread-128698] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:09:39.343 [DEBUG] [Thread-128698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:09:39.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:09:39.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:09:39.401 [DEBUG] [Thread-128698] [transport.py] [_log()] userauth is OK
2026-02-11T12:09:39.401 [DEBUG] [Thread-128698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:09:39.401 [DEBUG] [Thread-128698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:09:39.401 [DEBUG] [Thread-128698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:09:39.401 [DEBUG] [Thread-128698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:09:39.420 [INFO] [Thread-128698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:09:39.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:09:39.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:09:40.246 [DEBUG] [Thread-128698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:09:40.247 [DEBUG] [Thread-128698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:09:40.294 [DEBUG] [Thread-128698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:09:40.295 [DEBUG] [Thread-128698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:09:40.304 [DEBUG] [Thread-128698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:09:40.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:09:40.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:09:40.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:09:40.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:09:40.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:09:40.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:09:40.340 [DEBUG] [Thread-128698] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:09:52.708 [DEBUG] [Thread-128700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:10:05.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:10:05.299 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:10:07.760 [DEBUG] [Thread-128701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:10:10.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:10:10.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:10:10.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:10:12.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 10, 3), 13.8, 41.6, 0.0, 13.75, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:10:12.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:10:03
2026-02-11T12:10:12.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:10:12.814 [DEBUG] [Thread-128702] [transport.py] [_log()] starting thread (client mode): 0xa2d1b3d0
2026-02-11T12:10:12.814 [DEBUG] [Thread-128702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:10:12.835 [DEBUG] [Thread-128702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:10:12.836 [INFO] [Thread-128702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] client lang: <none>
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] server lang: <none>
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] kex follows: False
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] Compression: none
2026-02-11T12:10:12.837 [DEBUG] [Thread-128702] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:10:12.846 [DEBUG] [Thread-128702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:10:12.847 [DEBUG] [Thread-128702] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:10:12.847 [DEBUG] [Thread-128702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:10:12.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:10:12.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:10:12.849 [DEBUG] [Thread-128702] [transport.py] [_log()] userauth is OK
2026-02-11T12:10:12.849 [DEBUG] [Thread-128702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:10:12.849 [DEBUG] [Thread-128702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:10:12.850 [DEBUG] [Thread-128702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:10:12.850 [DEBUG] [Thread-128702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:10:12.867 [INFO] [Thread-128702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:10:12.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:10:13.323 [DEBUG] [Thread-128704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:10:16.159 [DEBUG] [Thread-128702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:10:16.159 [DEBUG] [Thread-128702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:10:16.160 [DEBUG] [Thread-128702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:10:16.200 [DEBUG] [Thread-128702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:10:16.201 [DEBUG] [Thread-128702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:10:16.204 [DEBUG] [Thread-128702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:10:16.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:10:16.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:10:16.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:10:16.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:10:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:10:16.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:10:16.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:10:16.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:10:16.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:10:16.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.423755 -999.00  +23.60  17.44     46  +11.60 1 2 1 1 1   888    0 15.23 111.67 ----- 16.0 17.4 275.0 24.4 30.6 -17.4 29.8 -15.6 28.8 -13.6 29.9 -14.7
2026-02-11T12:10:16.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:10:16.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:10:16.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.423755
2026-02-11T12:10:16.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:10:16.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:10:16.231 [DEBUG] [Thread-128702] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:10:16.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:10:16.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:10:16.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:10:16.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:10:03', tmtdew=13.8, humidity=41.6, cloud=0.0, wind=13.75, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:10:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:10:16.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:10:16.330 [DEBUG] [Thread-128706] [transport.py] [_log()] starting thread (client mode): 0xa2d185e0
2026-02-11T12:10:16.330 [DEBUG] [Thread-128706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:10:16.345 [DEBUG] [Thread-128706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:10:16.345 [INFO] [Thread-128706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:10:16.352 [DEBUG] [Thread-128706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] client lang: <none>
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] server lang: <none>
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] kex follows: False
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:10:16.353 [DEBUG] [Thread-128706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:10:16.354 [DEBUG] [Thread-128706] [transport.py] [_log()] Compression: none
2026-02-11T12:10:16.354 [DEBUG] [Thread-128706] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:10:16.413 [DEBUG] [Thread-128706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:10:16.413 [DEBUG] [Thread-128706] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:10:16.414 [DEBUG] [Thread-128706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:10:16.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:10:16.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:10:16.474 [DEBUG] [Thread-128706] [transport.py] [_log()] userauth is OK
2026-02-11T12:10:16.474 [DEBUG] [Thread-128706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:10:16.474 [DEBUG] [Thread-128706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:10:16.474 [DEBUG] [Thread-128706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:10:16.474 [DEBUG] [Thread-128706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:10:16.494 [INFO] [Thread-128706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:10:16.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:10:16.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:10:17.331 [DEBUG] [Thread-128706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:10:17.331 [DEBUG] [Thread-128706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:10:17.382 [DEBUG] [Thread-128706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:10:17.383 [DEBUG] [Thread-128706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:10:17.392 [DEBUG] [Thread-128706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:10:17.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:10:17.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:10:17.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:10:17.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:10:17.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:10:17.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:10:17.429 [DEBUG] [Thread-128706] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:10:22.800 [DEBUG] [Thread-128708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:10:37.848 [DEBUG] [Thread-128709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:10:47.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:10:47.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:10:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:10:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 10, 38), 14.36, 40.03, 0.0, 20.85, 23.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:10:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:10:38
2026-02-11T12:10:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:10:49.829 [DEBUG] [Thread-128710] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb20
2026-02-11T12:10:49.829 [DEBUG] [Thread-128710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:10:49.845 [DEBUG] [Thread-128710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:10:49.845 [INFO] [Thread-128710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] client lang: <none>
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] server lang: <none>
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] kex follows: False
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] Compression: none
2026-02-11T12:10:49.848 [DEBUG] [Thread-128710] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:10:49.864 [DEBUG] [Thread-128710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:10:49.864 [DEBUG] [Thread-128710] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:10:49.865 [DEBUG] [Thread-128710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:10:49.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:10:49.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:10:49.867 [DEBUG] [Thread-128710] [transport.py] [_log()] userauth is OK
2026-02-11T12:10:49.867 [DEBUG] [Thread-128710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:10:49.867 [DEBUG] [Thread-128710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:10:49.867 [DEBUG] [Thread-128710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:10:49.868 [DEBUG] [Thread-128710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:10:49.884 [INFO] [Thread-128710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:10:49.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:10:50.482 [DEBUG] [Thread-128710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:10:50.483 [DEBUG] [Thread-128710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:10:50.483 [DEBUG] [Thread-128710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:10:50.523 [DEBUG] [Thread-128710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:10:50.523 [DEBUG] [Thread-128710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:10:50.526 [DEBUG] [Thread-128710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:10:50.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:10:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:10:50.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:10:50.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:10:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:10:50.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:10:50.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:10:50.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:10:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:10:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.424102 -999.00  +23.70  25.88     46  +11.50 1 2 1 1 1   888    0 15.04 109.13 ----- 29.7 25.9 312.8 33.1 30.9 -18.2 30.1 -15.4 28.9 -15.4 30.0 -15.5
2026-02-11T12:10:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:10:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:10:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.424102
2026-02-11T12:10:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:10:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:10:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:10:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:10:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:10:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:10:38', tmtdew=14.36, humidity=40.03, cloud=0.0, wind=20.85, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:10:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:10:50.553 [DEBUG] [Thread-128710] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:10:50.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:10:50.649 [DEBUG] [Thread-128713] [transport.py] [_log()] starting thread (client mode): 0xa2d3d660
2026-02-11T12:10:50.650 [DEBUG] [Thread-128713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:10:50.664 [DEBUG] [Thread-128713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:10:50.664 [INFO] [Thread-128713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:10:50.673 [DEBUG] [Thread-128713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:10:50.673 [DEBUG] [Thread-128713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:10:50.673 [DEBUG] [Thread-128713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:10:50.673 [DEBUG] [Thread-128713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:50.673 [DEBUG] [Thread-128713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] client lang: <none>
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] server lang: <none>
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] kex follows: False
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] Compression: none
2026-02-11T12:10:50.674 [DEBUG] [Thread-128713] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:10:50.735 [DEBUG] [Thread-128713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:10:50.736 [DEBUG] [Thread-128713] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:10:50.736 [DEBUG] [Thread-128713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:10:50.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:10:50.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:10:50.794 [DEBUG] [Thread-128713] [transport.py] [_log()] userauth is OK
2026-02-11T12:10:50.794 [DEBUG] [Thread-128713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:10:50.794 [DEBUG] [Thread-128713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:10:50.794 [DEBUG] [Thread-128713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:10:50.794 [DEBUG] [Thread-128713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:10:50.814 [INFO] [Thread-128713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:10:50.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:10:50.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:10:51.627 [DEBUG] [Thread-128713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:10:51.627 [DEBUG] [Thread-128713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:10:51.675 [DEBUG] [Thread-128713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:10:51.676 [DEBUG] [Thread-128713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:10:51.685 [DEBUG] [Thread-128713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:10:51.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:10:51.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:10:51.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:10:51.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:10:51.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:10:51.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:10:51.725 [DEBUG] [Thread-128713] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:10:52.880 [DEBUG] [Thread-128715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:05.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:05.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:07.928 [DEBUG] [Thread-128716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:13.372 [DEBUG] [Thread-128717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:21.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:11:21.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:11:21.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:11:22.962 [DEBUG] [Thread-128718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 11, 13), 14.45, 39.87, 0.0, 21.75, 23.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:11:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:11:13
2026-02-11T12:11:24.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:11:24.197 [DEBUG] [Thread-128719] [transport.py] [_log()] starting thread (client mode): 0xa2d3fac0
2026-02-11T12:11:24.197 [DEBUG] [Thread-128719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:11:24.218 [DEBUG] [Thread-128719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:11:24.218 [INFO] [Thread-128719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] client lang: <none>
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] server lang: <none>
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] kex follows: False
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] Compression: none
2026-02-11T12:11:24.219 [DEBUG] [Thread-128719] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:11:24.227 [DEBUG] [Thread-128719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:11:24.228 [DEBUG] [Thread-128719] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:11:24.228 [DEBUG] [Thread-128719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:11:24.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:11:24.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:11:24.230 [DEBUG] [Thread-128719] [transport.py] [_log()] userauth is OK
2026-02-11T12:11:24.230 [DEBUG] [Thread-128719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:11:24.230 [DEBUG] [Thread-128719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:11:24.230 [DEBUG] [Thread-128719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:11:24.230 [DEBUG] [Thread-128719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:11:24.248 [INFO] [Thread-128719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:11:24.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:11:24.838 [DEBUG] [Thread-128719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:11:24.838 [DEBUG] [Thread-128719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:11:24.839 [DEBUG] [Thread-128719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:11:24.879 [DEBUG] [Thread-128719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:11:24.880 [DEBUG] [Thread-128719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:11:24.883 [DEBUG] [Thread-128719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:11:24.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:11:24.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:11:24.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:11:24.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:11:24.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:11:24.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:11:24.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:11:24.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:11:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:11:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.424449 -999.00  +23.50  33.04     46  +11.30 1 2 2 1 1   888    0 14.99 107.34 ----- 32.7 33.0 293.2 39.3 30.9 -18.3 30.0 -15.8 29.0 -15.4 29.9 -16.1
2026-02-11T12:11:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:11:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:11:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.424449
2026-02-11T12:11:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:11:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:11:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:11:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:11:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:11:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:11:13', tmtdew=14.45, humidity=39.87, cloud=0.0, wind=21.75, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:11:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:11:24.903 [DEBUG] [Thread-128719] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:11:24.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:11:24.999 [DEBUG] [Thread-128722] [transport.py] [_log()] starting thread (client mode): 0xa2d181c0
2026-02-11T12:11:25.000 [DEBUG] [Thread-128722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:11:25.014 [DEBUG] [Thread-128722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:11:25.014 [INFO] [Thread-128722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] client lang: <none>
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] server lang: <none>
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] kex follows: False
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:11:25.022 [DEBUG] [Thread-128722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:11:25.023 [DEBUG] [Thread-128722] [transport.py] [_log()] Compression: none
2026-02-11T12:11:25.023 [DEBUG] [Thread-128722] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:11:25.086 [DEBUG] [Thread-128722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:11:25.086 [DEBUG] [Thread-128722] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:11:25.087 [DEBUG] [Thread-128722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:11:25.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:11:25.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:11:25.145 [DEBUG] [Thread-128722] [transport.py] [_log()] userauth is OK
2026-02-11T12:11:25.146 [DEBUG] [Thread-128722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:11:25.146 [DEBUG] [Thread-128722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:11:25.146 [DEBUG] [Thread-128722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:11:25.146 [DEBUG] [Thread-128722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:11:25.164 [INFO] [Thread-128722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:11:25.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:11:25.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:11:26.023 [DEBUG] [Thread-128722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:11:26.023 [DEBUG] [Thread-128722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:11:26.071 [DEBUG] [Thread-128722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:11:26.071 [DEBUG] [Thread-128722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:11:26.081 [DEBUG] [Thread-128722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:11:26.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:11:26.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:11: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
2026-02-11T12:11:26.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:11:26.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:11:26.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:11:26.117 [DEBUG] [Thread-128722] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:11:37.996 [DEBUG] [Thread-128724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:53.047 [DEBUG] [Thread-128725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:11:56.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:11:56.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:11:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:11:58.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 11, 48), 14.66, 39.49, 0.0, 24.51, 23.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:11:58.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:11:48
2026-02-11T12:11:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:11:58.877 [DEBUG] [Thread-128726] [transport.py] [_log()] starting thread (client mode): 0xa2d1b430
2026-02-11T12:11:58.877 [DEBUG] [Thread-128726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:11:58.892 [DEBUG] [Thread-128726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:11:58.892 [INFO] [Thread-128726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] client lang: <none>
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] server lang: <none>
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] kex follows: False
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] Compression: none
2026-02-11T12:11:58.894 [DEBUG] [Thread-128726] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:11:58.905 [DEBUG] [Thread-128726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:11:58.906 [DEBUG] [Thread-128726] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:11:58.906 [DEBUG] [Thread-128726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:11:58.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:11:58.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:11:58.908 [DEBUG] [Thread-128726] [transport.py] [_log()] userauth is OK
2026-02-11T12:11:58.908 [DEBUG] [Thread-128726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:11:58.908 [DEBUG] [Thread-128726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:11:58.908 [DEBUG] [Thread-128726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:11:58.908 [DEBUG] [Thread-128726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:11:58.926 [INFO] [Thread-128726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:11:58.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:11:59.516 [DEBUG] [Thread-128726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:11:59.516 [DEBUG] [Thread-128726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:11:59.516 [DEBUG] [Thread-128726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:11:59.557 [DEBUG] [Thread-128726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:11:59.558 [DEBUG] [Thread-128726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:11:59.560 [DEBUG] [Thread-128726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:11:59.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:11:59.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:11:59.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:11:59.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:11:59.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:11:59.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:11:59.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:11:59.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:11:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:11:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.424797 -999.00  +23.10  20.83     47  +11.40 1 2 1 1 1   888    0 14.47 96.05 ----- 28.1 20.8 302.4 31.6 30.4 -19.4 29.6 -18.8 28.6 -15.8 29.5 -18.9
2026-02-11T12:11:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:11:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:11:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.424797
2026-02-11T12:11:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:11:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:11:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:11:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:11:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:11:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:11:48', tmtdew=14.66, humidity=39.49, cloud=0.0, wind=24.51, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:11:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:11:59.586 [DEBUG] [Thread-128726] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:11:59.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:11:59.683 [DEBUG] [Thread-128729] [transport.py] [_log()] starting thread (client mode): 0xa2d19c60
2026-02-11T12:11:59.683 [DEBUG] [Thread-128729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:11:59.697 [DEBUG] [Thread-128729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:11:59.698 [INFO] [Thread-128729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:11:59.706 [DEBUG] [Thread-128729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:11:59.706 [DEBUG] [Thread-128729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:11:59.706 [DEBUG] [Thread-128729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:11:59.706 [DEBUG] [Thread-128729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:59.706 [DEBUG] [Thread-128729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:11:59.706 [DEBUG] [Thread-128729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] client lang: <none>
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] server lang: <none>
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] kex follows: False
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:11:59.707 [DEBUG] [Thread-128729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:11:59.708 [DEBUG] [Thread-128729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:11:59.708 [DEBUG] [Thread-128729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:11:59.708 [DEBUG] [Thread-128729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:11:59.708 [DEBUG] [Thread-128729] [transport.py] [_log()] Compression: none
2026-02-11T12:11:59.708 [DEBUG] [Thread-128729] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:11:59.764 [DEBUG] [Thread-128729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:11:59.765 [DEBUG] [Thread-128729] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:11:59.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:11:59.766 [DEBUG] [Thread-128729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:11:59.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:11:59.820 [DEBUG] [Thread-128729] [transport.py] [_log()] userauth is OK
2026-02-11T12:11:59.821 [DEBUG] [Thread-128729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:11:59.821 [DEBUG] [Thread-128729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:11:59.821 [DEBUG] [Thread-128729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:11:59.821 [DEBUG] [Thread-128729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:11:59.840 [INFO] [Thread-128729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:11:59.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:11:59.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:12:00.668 [DEBUG] [Thread-128729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:12:00.668 [DEBUG] [Thread-128729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:12:00.716 [DEBUG] [Thread-128729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:12:00.716 [DEBUG] [Thread-128729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:12:00.725 [DEBUG] [Thread-128729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:12:00.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:12:00.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:12:00.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:12:00.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:12:00.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:12:00.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:12:00.761 [DEBUG] [Thread-128729] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:12:05.583 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:12:05.583 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:12:08.084 [DEBUG] [Thread-128731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:12:13.424 [DEBUG] [Thread-128732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:12:23.143 [DEBUG] [Thread-128733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:12:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:12:30.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:12:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:12:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 11, 48), 14.66, 39.49, 0.0, 24.51, 23.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:12:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:11:48
2026-02-11T12:12:32.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:12:33.125 [DEBUG] [Thread-128734] [transport.py] [_log()] starting thread (client mode): 0xa2d3e650
2026-02-11T12:12:33.125 [DEBUG] [Thread-128734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:12:33.146 [DEBUG] [Thread-128734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:12:33.146 [INFO] [Thread-128734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] client lang: <none>
2026-02-11T12:12:33.149 [DEBUG] [Thread-128734] [transport.py] [_log()] server lang: <none>
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] kex follows: False
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] Compression: none
2026-02-11T12:12:33.150 [DEBUG] [Thread-128734] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:12:33.168 [DEBUG] [Thread-128734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:12:33.169 [DEBUG] [Thread-128734] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:12:33.170 [DEBUG] [Thread-128734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:12:33.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:12:33.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:12:33.172 [DEBUG] [Thread-128734] [transport.py] [_log()] userauth is OK
2026-02-11T12:12:33.172 [DEBUG] [Thread-128734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:12:33.172 [DEBUG] [Thread-128734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:12:33.172 [DEBUG] [Thread-128734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:12:33.172 [DEBUG] [Thread-128734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:12:33.195 [INFO] [Thread-128734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:12:33.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:12:33.794 [DEBUG] [Thread-128734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:12:33.794 [DEBUG] [Thread-128734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:12:33.795 [DEBUG] [Thread-128734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:12:33.835 [DEBUG] [Thread-128734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:12:33.835 [DEBUG] [Thread-128734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:12:33.838 [DEBUG] [Thread-128734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:12:33.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:12:33.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:12:33.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:12:33.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:12:33.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:12:33.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:12:33.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:12:33.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:12:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:12:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.425144 -999.00  +23.50  23.43     47  +11.60 1 2 1 1 1   888    0 14.67 93.57 ----- 22.9 23.4 304.8 37.5 30.6 -15.1 29.6 -14.9 28.9 -13.1 29.8 -14.6
2026-02-11T12:12:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:12:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:12:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.425144
2026-02-11T12:12:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:12:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:12:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:12:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:12:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:12:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:11:48', tmtdew=14.66, humidity=39.49, cloud=0.0, wind=24.51, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:12:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:12:33.861 [DEBUG] [Thread-128734] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:12:33.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:12:33.960 [DEBUG] [Thread-128737] [transport.py] [_log()] starting thread (client mode): 0xa2d19630
2026-02-11T12:12:33.960 [DEBUG] [Thread-128737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:12:33.975 [DEBUG] [Thread-128737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:12:33.975 [INFO] [Thread-128737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:12:33.983 [DEBUG] [Thread-128737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:12:33.983 [DEBUG] [Thread-128737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:12:33.983 [DEBUG] [Thread-128737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:12:33.983 [DEBUG] [Thread-128737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:12:33.983 [DEBUG] [Thread-128737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] client lang: <none>
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] server lang: <none>
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] kex follows: False
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] Compression: none
2026-02-11T12:12:33.984 [DEBUG] [Thread-128737] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:12:34.042 [DEBUG] [Thread-128737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:12:34.043 [DEBUG] [Thread-128737] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:12:34.043 [DEBUG] [Thread-128737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:12:34.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:12:34.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:12:34.098 [DEBUG] [Thread-128737] [transport.py] [_log()] userauth is OK
2026-02-11T12:12:34.098 [DEBUG] [Thread-128737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:12:34.099 [DEBUG] [Thread-128737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:12:34.099 [DEBUG] [Thread-128737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:12:34.099 [DEBUG] [Thread-128737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:12:34.117 [INFO] [Thread-128737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:12:34.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:12:34.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:12:34.962 [DEBUG] [Thread-128737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:12:34.962 [DEBUG] [Thread-128737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:12:35.010 [DEBUG] [Thread-128737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:12:35.010 [DEBUG] [Thread-128737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:12:35.019 [DEBUG] [Thread-128737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:12:35.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:12:35.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:12:35.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:12:35.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:12:35.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:12:35.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:12:35.053 [DEBUG] [Thread-128737] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:12:38.178 [DEBUG] [Thread-128739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:12:53.226 [DEBUG] [Thread-128740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:13:05.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:13:05.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:13:05.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:13:05.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:13:05.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:13:06.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 12, 25), 14.54, 39.78, 0.0, 23.48, 23.72, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:13:06.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:12:25
2026-02-11T12:13:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:13:07.475 [DEBUG] [Thread-128741] [transport.py] [_log()] starting thread (client mode): 0xa2d3cf40
2026-02-11T12:13:07.475 [DEBUG] [Thread-128741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:13:07.493 [DEBUG] [Thread-128741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:13:07.493 [INFO] [Thread-128741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] client lang: <none>
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] server lang: <none>
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] kex follows: False
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:13:07.494 [DEBUG] [Thread-128741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:13:07.495 [DEBUG] [Thread-128741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:13:07.495 [DEBUG] [Thread-128741] [transport.py] [_log()] Compression: none
2026-02-11T12:13:07.495 [DEBUG] [Thread-128741] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:13:07.511 [DEBUG] [Thread-128741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:13:07.511 [DEBUG] [Thread-128741] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:13:07.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:13:07.511 [DEBUG] [Thread-128741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:13:07.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:13:07.512 [DEBUG] [Thread-128741] [transport.py] [_log()] userauth is OK
2026-02-11T12:13:07.512 [DEBUG] [Thread-128741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:13:07.512 [DEBUG] [Thread-128741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:13:07.512 [DEBUG] [Thread-128741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:13:07.512 [DEBUG] [Thread-128741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:13:07.525 [INFO] [Thread-128741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:13:07.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:13:08.078 [DEBUG] [Thread-128741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:13:08.078 [DEBUG] [Thread-128741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:13:08.079 [DEBUG] [Thread-128741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:13:08.119 [DEBUG] [Thread-128741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:13:08.119 [DEBUG] [Thread-128741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:13:08.121 [DEBUG] [Thread-128741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:13:08.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:13:08.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:13:08.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:13:08.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:13:08.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:13:08.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:13:08.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:13:08.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:13:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.425491 -999.00  +23.70  25.59     46  +11.60 1 2 1 1 1   888    0 14.97 103.24 ----- 28.0 25.6 306.6 31.5 30.8 -16.0 29.9 -14.7 29.0 -12.9 29.9 -13.5
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.425491
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:13:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:12:25', tmtdew=14.54, humidity=39.78, cloud=0.0, wind=23.48, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:12:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:13:08.144 [DEBUG] [Thread-128741] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:13:08.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:13:08.246 [DEBUG] [Thread-128744] [transport.py] [_log()] starting thread (client mode): 0xa2d3c4f0
2026-02-11T12:13:08.246 [DEBUG] [Thread-128744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:13:08.260 [DEBUG] [Thread-128744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:13:08.260 [INFO] [Thread-128744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:13:08.262 [DEBUG] [Thread-128746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] client lang: <none>
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] server lang: <none>
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] kex follows: False
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:13:08.268 [DEBUG] [Thread-128744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:13:08.269 [DEBUG] [Thread-128744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:13:08.269 [DEBUG] [Thread-128744] [transport.py] [_log()] Compression: none
2026-02-11T12:13:08.269 [DEBUG] [Thread-128744] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:13:08.330 [DEBUG] [Thread-128744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:13:08.330 [DEBUG] [Thread-128744] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:13:08.331 [DEBUG] [Thread-128744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:13:08.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:13:08.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:13:08.390 [DEBUG] [Thread-128744] [transport.py] [_log()] userauth is OK
2026-02-11T12:13:08.390 [DEBUG] [Thread-128744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:13:08.391 [DEBUG] [Thread-128744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:13:08.391 [DEBUG] [Thread-128744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:13:08.391 [DEBUG] [Thread-128744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:13:08.409 [INFO] [Thread-128744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:13:08.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:13:08.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:13:09.252 [DEBUG] [Thread-128744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:13:09.253 [DEBUG] [Thread-128744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:13:09.300 [DEBUG] [Thread-128744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:13:09.300 [DEBUG] [Thread-128744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:13:09.314 [DEBUG] [Thread-128744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:13:09.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:13:09.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')
2026-02-11T12:13:09.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
2026-02-11T12:13:09.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:13:09.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:13:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:13:09.361 [DEBUG] [Thread-128744] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:13:13.459 [DEBUG] [Thread-128747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:13:23.309 [DEBUG] [Thread-128748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:13:38.345 [DEBUG] [Thread-128749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:13:39.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:13:39.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:13:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:13:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 12, 25), 14.54, 39.78, 0.0, 23.48, 23.72, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:13:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:12:25
2026-02-11T12:13:42.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:13:42.148 [DEBUG] [Thread-128750] [transport.py] [_log()] starting thread (client mode): 0xa2d78ee0
2026-02-11T12:13:42.148 [DEBUG] [Thread-128750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:13:42.168 [DEBUG] [Thread-128750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:13:42.168 [INFO] [Thread-128750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] client lang: <none>
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] server lang: <none>
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] kex follows: False
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] Compression: none
2026-02-11T12:13:42.171 [DEBUG] [Thread-128750] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:13:42.188 [DEBUG] [Thread-128750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:13:42.189 [DEBUG] [Thread-128750] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:13:42.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:13:42.189 [DEBUG] [Thread-128750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:13:42.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:13:42.191 [DEBUG] [Thread-128750] [transport.py] [_log()] userauth is OK
2026-02-11T12:13:42.192 [DEBUG] [Thread-128750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:13:42.192 [DEBUG] [Thread-128750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:13:42.192 [DEBUG] [Thread-128750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:13:42.192 [DEBUG] [Thread-128750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:13:42.209 [INFO] [Thread-128750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:13:42.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:13:42.829 [DEBUG] [Thread-128750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:13:42.829 [DEBUG] [Thread-128750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:13:42.829 [DEBUG] [Thread-128750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:13:42.869 [DEBUG] [Thread-128750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:13:42.870 [DEBUG] [Thread-128750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:13:42.873 [DEBUG] [Thread-128750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:13:42.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:13:42.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:13:42.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:13:42.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:13:42.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:13:42.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:13:42.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:13:42.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.425838 -999.00  +23.50  22.33     46  +11.40 1 2 1 1 1   888    0 15.40 106.27 ----- 24.6 22.3 314.0 35.4 30.9 -17.0 30.1 -14.9 29.0 -16.0 30.0 -13.9
2026-02-11T12:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.425838
2026-02-11T12:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:13:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:13:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:13:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:13:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:13:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:12:25', tmtdew=14.54, humidity=39.78, cloud=0.0, wind=23.48, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:13:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:13:42.898 [DEBUG] [Thread-128750] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:13:42.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:13:42.996 [DEBUG] [Thread-128753] [transport.py] [_log()] starting thread (client mode): 0xa2d7aaa0
2026-02-11T12:13:42.996 [DEBUG] [Thread-128753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:13:43.011 [DEBUG] [Thread-128753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:13:43.011 [INFO] [Thread-128753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] client lang: <none>
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] server lang: <none>
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] kex follows: False
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] Compression: none
2026-02-11T12:13:43.019 [DEBUG] [Thread-128753] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:13:43.077 [DEBUG] [Thread-128753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:13:43.077 [DEBUG] [Thread-128753] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:13:43.078 [DEBUG] [Thread-128753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:13:43.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:13:43.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:13:43.132 [DEBUG] [Thread-128753] [transport.py] [_log()] userauth is OK
2026-02-11T12:13:43.133 [DEBUG] [Thread-128753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:13:43.133 [DEBUG] [Thread-128753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:13:43.133 [DEBUG] [Thread-128753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:13:43.133 [DEBUG] [Thread-128753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:13:43.157 [INFO] [Thread-128753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:13:43.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:13:43.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:13:44.040 [DEBUG] [Thread-128753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:13:44.041 [DEBUG] [Thread-128753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:13:44.088 [DEBUG] [Thread-128753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:13:44.089 [DEBUG] [Thread-128753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:13:44.098 [DEBUG] [Thread-128753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:13:44.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:13:44.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:13:44.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:13:44.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:13:44.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:13:44.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:13:44.137 [DEBUG] [Thread-128753] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:13:53.380 [DEBUG] [Thread-128755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:05.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:05.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:08.433 [DEBUG] [Thread-128756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:13.501 [DEBUG] [Thread-128757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:14.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:14:14.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:14:14.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:14:16.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 13, 35), 14.78, 39.14, 0.0, 26.25, 24.44, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:14:16.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:13:35
2026-02-11T12:14:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:14:17.048 [DEBUG] [Thread-128758] [transport.py] [_log()] starting thread (client mode): 0xa2d3e380
2026-02-11T12:14:17.049 [DEBUG] [Thread-128758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:14:17.069 [DEBUG] [Thread-128758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:14:17.070 [INFO] [Thread-128758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:14:17.072 [DEBUG] [Thread-128758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] client lang: <none>
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] server lang: <none>
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] kex follows: False
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] Compression: none
2026-02-11T12:14:17.073 [DEBUG] [Thread-128758] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:14:17.082 [DEBUG] [Thread-128758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:14:17.082 [DEBUG] [Thread-128758] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:14:17.083 [DEBUG] [Thread-128758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:14:17.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:14:17.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:14:17.084 [DEBUG] [Thread-128758] [transport.py] [_log()] userauth is OK
2026-02-11T12:14:17.084 [DEBUG] [Thread-128758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:14:17.084 [DEBUG] [Thread-128758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:14:17.084 [DEBUG] [Thread-128758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:14:17.084 [DEBUG] [Thread-128758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:14:17.097 [INFO] [Thread-128758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:14:17.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:14:17.768 [DEBUG] [Thread-128758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:14:17.768 [DEBUG] [Thread-128758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:14:17.769 [DEBUG] [Thread-128758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:14:17.809 [DEBUG] [Thread-128758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:14:17.810 [DEBUG] [Thread-128758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:14:17.813 [DEBUG] [Thread-128758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:14:17.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:14:17.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:14:17.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:14:17.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:14:17.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:14:17.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:14:17.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:14:17.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:14:17.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:14:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.426533 -999.00  +23.50  22.56     46  +11.40 1 2 1 1 1   888    0 14.87 97.32 ----- 21.5 22.6 298.2 30.6 31.1 -15.0 30.1 -13.0 29.1 -14.7 30.1 -13.4
2026-02-11T12:14:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:14:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:14:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.426533
2026-02-11T12:14:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:14:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:14:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:14:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:14:17.838 [DEBUG] [Thread-128758] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:14:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:14:17.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:13:35', tmtdew=14.78, humidity=39.14, cloud=0.0, wind=26.25, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:14:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:14:17.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:14:17.942 [DEBUG] [Thread-128761] [transport.py] [_log()] starting thread (client mode): 0xa2d3cca0
2026-02-11T12:14:17.943 [DEBUG] [Thread-128761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:14:17.957 [DEBUG] [Thread-128761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:14:17.957 [INFO] [Thread-128761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:14:17.965 [DEBUG] [Thread-128761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:14:17.965 [DEBUG] [Thread-128761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:14:17.965 [DEBUG] [Thread-128761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] client lang: <none>
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] server lang: <none>
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] kex follows: False
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] Compression: none
2026-02-11T12:14:17.966 [DEBUG] [Thread-128761] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:14:18.024 [DEBUG] [Thread-128761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:14:18.025 [DEBUG] [Thread-128761] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:14:18.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:14:18.026 [DEBUG] [Thread-128761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:14:18.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:14:18.080 [DEBUG] [Thread-128761] [transport.py] [_log()] userauth is OK
2026-02-11T12:14:18.080 [DEBUG] [Thread-128761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:14:18.080 [DEBUG] [Thread-128761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:14:18.080 [DEBUG] [Thread-128761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:14:18.080 [DEBUG] [Thread-128761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:14:18.098 [INFO] [Thread-128761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:14:18.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:14:18.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:14:18.967 [DEBUG] [Thread-128761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:14:18.967 [DEBUG] [Thread-128761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:14:19.019 [DEBUG] [Thread-128761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:14:19.020 [DEBUG] [Thread-128761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:14:19.032 [DEBUG] [Thread-128761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:14:19.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:14:19.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')
2026-02-11T12:14:19.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:14:19.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:14:19.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:14:19.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:14:19.072 [DEBUG] [Thread-128761] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:14:23.480 [DEBUG] [Thread-128763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:38.534 [DEBUG] [Thread-128764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:49.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:14:49.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:14:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:14:51.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 14, 11), 14.36, 40.06, 0.0, 24.15, 23.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:14:51.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:14:11
2026-02-11T12:14:51.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:14:52.027 [DEBUG] [Thread-128765] [transport.py] [_log()] starting thread (client mode): 0xa2d79e40
2026-02-11T12:14:52.027 [DEBUG] [Thread-128765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:14:52.038 [DEBUG] [Thread-128765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:14:52.038 [INFO] [Thread-128765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] client lang: <none>
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] server lang: <none>
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] kex follows: False
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:14:52.041 [DEBUG] [Thread-128765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:14:52.042 [DEBUG] [Thread-128765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:14:52.042 [DEBUG] [Thread-128765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:14:52.042 [DEBUG] [Thread-128765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:14:52.042 [DEBUG] [Thread-128765] [transport.py] [_log()] Compression: none
2026-02-11T12:14:52.042 [DEBUG] [Thread-128765] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:14:52.057 [DEBUG] [Thread-128765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:14:52.057 [DEBUG] [Thread-128765] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:14:52.058 [DEBUG] [Thread-128765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:14:52.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:14:52.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:14:52.059 [DEBUG] [Thread-128765] [transport.py] [_log()] userauth is OK
2026-02-11T12:14:52.059 [DEBUG] [Thread-128765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:14:52.059 [DEBUG] [Thread-128765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:14:52.059 [DEBUG] [Thread-128765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:14:52.059 [DEBUG] [Thread-128765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:14:52.081 [INFO] [Thread-128765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:14:52.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:14:52.718 [DEBUG] [Thread-128765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:14:52.719 [DEBUG] [Thread-128765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:14:52.719 [DEBUG] [Thread-128765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:14:52.759 [DEBUG] [Thread-128765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:14:52.759 [DEBUG] [Thread-128765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:14:52.762 [DEBUG] [Thread-128765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:14:52.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:14:52.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:14:52.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:14:52.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:14:52.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:14:52.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:14:52.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:14:52.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:14:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:14:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.426880 -999.00  +23.80  21.45     45  +11.40 1 2 1 1 1   888    0 14.47 91.38 ----- 21.8 21.4 311.0 28.2 31.3 -15.1 30.3 -12.9 29.3 -13.0 30.3 -13.9
2026-02-11T12:14:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:14:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:14:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.426880
2026-02-11T12:14:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:14:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:14:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:14:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:14:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:14:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:14:11', tmtdew=14.36, humidity=40.06, cloud=0.0, wind=24.15, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:14:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:14:52.790 [DEBUG] [Thread-128765] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:14:52.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:14:52.886 [DEBUG] [Thread-128768] [transport.py] [_log()] starting thread (client mode): 0xa2d781f0
2026-02-11T12:14:52.886 [DEBUG] [Thread-128768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:14:52.901 [DEBUG] [Thread-128768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:14:52.901 [INFO] [Thread-128768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] client lang: <none>
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] server lang: <none>
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] kex follows: False
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] Compression: none
2026-02-11T12:14:52.908 [DEBUG] [Thread-128768] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:14:52.966 [DEBUG] [Thread-128768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:14:52.967 [DEBUG] [Thread-128768] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:14:52.967 [DEBUG] [Thread-128768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:14:52.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:14:52.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:14:53.023 [DEBUG] [Thread-128768] [transport.py] [_log()] userauth is OK
2026-02-11T12:14:53.023 [DEBUG] [Thread-128768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:14:53.023 [DEBUG] [Thread-128768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:14:53.023 [DEBUG] [Thread-128768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:14:53.023 [DEBUG] [Thread-128768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:14:53.041 [INFO] [Thread-128768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:14:53.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:14:53.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:14:53.568 [DEBUG] [Thread-128770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:14:53.864 [DEBUG] [Thread-128768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:14:53.864 [DEBUG] [Thread-128768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:14:53.912 [DEBUG] [Thread-128768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:14:53.912 [DEBUG] [Thread-128768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:14:53.921 [DEBUG] [Thread-128768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:14:53.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:14:53.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:14:53.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:14:53.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:14:53.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:14:53.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:14:53.955 [DEBUG] [Thread-128768] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:15:06.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:15:06.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:15:08.628 [DEBUG] [Thread-128771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:15:13.538 [DEBUG] [Thread-128772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:15:23.665 [DEBUG] [Thread-128773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:15:23.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:15:23.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:15:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:15:25.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 14, 47), 14.75, 39.32, 0.0, 24.4, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:15:25.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:14:47
2026-02-11T12:15:26.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:15:26.483 [DEBUG] [Thread-128774] [transport.py] [_log()] starting thread (client mode): 0xa2d3e410
2026-02-11T12:15:26.483 [DEBUG] [Thread-128774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:15:26.503 [DEBUG] [Thread-128774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:15:26.504 [INFO] [Thread-128774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:15:26.506 [DEBUG] [Thread-128774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] client lang: <none>
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] server lang: <none>
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] kex follows: False
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] Compression: none
2026-02-11T12:15:26.507 [DEBUG] [Thread-128774] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:15:26.525 [DEBUG] [Thread-128774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:15:26.525 [DEBUG] [Thread-128774] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:15:26.526 [DEBUG] [Thread-128774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:15:26.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:15:26.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:15:26.527 [DEBUG] [Thread-128774] [transport.py] [_log()] userauth is OK
2026-02-11T12:15:26.527 [DEBUG] [Thread-128774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:15:26.527 [DEBUG] [Thread-128774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:15:26.527 [DEBUG] [Thread-128774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:15:26.527 [DEBUG] [Thread-128774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:15:26.559 [INFO] [Thread-128774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:15:26.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:15:27.151 [DEBUG] [Thread-128774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:15:27.152 [DEBUG] [Thread-128774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:15:27.152 [DEBUG] [Thread-128774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:15:27.192 [DEBUG] [Thread-128774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:15:27.192 [DEBUG] [Thread-128774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:15:27.197 [DEBUG] [Thread-128774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:15:27.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:15:27.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:15:27.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:15:27.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:15:27.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:15:27.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:15:27.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:15:27.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:15:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:15:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.427227 -999.00  +23.80  14.73     45  +11.30 1 2 1 1 1   888    0 14.42 88.69 ----- 19.2 14.7 307.8 27.2 31.3 -15.1 30.3 -14.6 29.3 -13.1 30.3 -13.6
2026-02-11T12:15:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:15:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:15:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.427227
2026-02-11T12:15:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:15:27.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:15:27.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:15:27.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:15:27.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:15:27.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:14:47', tmtdew=14.75, humidity=39.32, cloud=0.0, wind=24.4, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:15:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:15:27.223 [DEBUG] [Thread-128774] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:15:27.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:15:27.313 [DEBUG] [Thread-128777] [transport.py] [_log()] starting thread (client mode): 0xa2d3cdc0
2026-02-11T12:15:27.313 [DEBUG] [Thread-128777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:15:27.330 [DEBUG] [Thread-128777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:15:27.331 [INFO] [Thread-128777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:15:27.338 [DEBUG] [Thread-128777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:15:27.338 [DEBUG] [Thread-128777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] client lang: <none>
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] server lang: <none>
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] kex follows: False
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] Compression: none
2026-02-11T12:15:27.339 [DEBUG] [Thread-128777] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:15:27.398 [DEBUG] [Thread-128777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:15:27.399 [DEBUG] [Thread-128777] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:15:27.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:15:27.400 [DEBUG] [Thread-128777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:15:27.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:15:27.454 [DEBUG] [Thread-128777] [transport.py] [_log()] userauth is OK
2026-02-11T12:15:27.455 [DEBUG] [Thread-128777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:15:27.455 [DEBUG] [Thread-128777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:15:27.455 [DEBUG] [Thread-128777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:15:27.455 [DEBUG] [Thread-128777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:15:27.481 [INFO] [Thread-128777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:15:27.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:15:27.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:15:28.311 [DEBUG] [Thread-128777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:15:28.311 [DEBUG] [Thread-128777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:15:28.359 [DEBUG] [Thread-128777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:15:28.360 [DEBUG] [Thread-128777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:15:28.369 [DEBUG] [Thread-128777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:15:28.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:15:28.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:15:28.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:15:28.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:15:28.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:15:28.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:15:28.405 [DEBUG] [Thread-128777] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:15:38.706 [DEBUG] [Thread-128779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:15:53.761 [DEBUG] [Thread-128780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:15:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:15:58.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:15: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
2026-02-11T12:16:00.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 15, 23), 14.87, 39.01, 0.0, 25.14, 24.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:16:00.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:15:23
2026-02-11T12:16:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:16:00.905 [DEBUG] [Thread-128781] [transport.py] [_log()] starting thread (client mode): 0xa2d79db0
2026-02-11T12:16:00.905 [DEBUG] [Thread-128781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:16:00.924 [DEBUG] [Thread-128781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:16:00.924 [INFO] [Thread-128781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:16:00.927 [DEBUG] [Thread-128781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:16:00.927 [DEBUG] [Thread-128781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:16:00.927 [DEBUG] [Thread-128781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:16:00.927 [DEBUG] [Thread-128781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:00.927 [DEBUG] [Thread-128781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:00.927 [DEBUG] [Thread-128781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:00.927 [DEBUG] [Thread-128781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] client lang: <none>
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] server lang: <none>
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] kex follows: False
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] Compression: none
2026-02-11T12:16:00.928 [DEBUG] [Thread-128781] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:16:00.946 [DEBUG] [Thread-128781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:16:00.947 [DEBUG] [Thread-128781] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:16:00.947 [DEBUG] [Thread-128781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:16:00.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:16:00.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:16:00.949 [DEBUG] [Thread-128781] [transport.py] [_log()] userauth is OK
2026-02-11T12:16:00.949 [DEBUG] [Thread-128781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:16:00.949 [DEBUG] [Thread-128781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:16:00.950 [DEBUG] [Thread-128781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:16:00.950 [DEBUG] [Thread-128781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:16:00.968 [INFO] [Thread-128781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:16:00.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:16:01.588 [DEBUG] [Thread-128781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:16:01.588 [DEBUG] [Thread-128781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:16:01.588 [DEBUG] [Thread-128781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:16:01.629 [DEBUG] [Thread-128781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:16:01.629 [DEBUG] [Thread-128781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:16:01.633 [DEBUG] [Thread-128781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:16:01.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:16:01.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:16:01.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:16:01.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:16:01.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:16:01.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:16:01.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:16:01.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:16:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:16:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.427574 -999.00  +23.80  23.77     45  +11.30 1 2 1 1 1   888    0 14.88 94.28 ----- 18.3 23.8 305.2 28.0 31.5 -14.9 30.4 -13.8 29.4 -13.5 30.4 -13.3
2026-02-11T12:16:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:16:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:16:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.427574
2026-02-11T12:16:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:16:01.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:16:01.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:16:01.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:16:01.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:16:01.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:15:23', tmtdew=14.87, humidity=39.01, cloud=0.0, wind=25.14, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:15:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:16:01.658 [DEBUG] [Thread-128781] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:16:01.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:16:01.761 [DEBUG] [Thread-128784] [transport.py] [_log()] starting thread (client mode): 0xa2d7a230
2026-02-11T12:16:01.761 [DEBUG] [Thread-128784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:16:01.776 [DEBUG] [Thread-128784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:16:01.776 [INFO] [Thread-128784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] client lang: <none>
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] server lang: <none>
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] kex follows: False
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] Compression: none
2026-02-11T12:16:01.784 [DEBUG] [Thread-128784] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:16:01.840 [DEBUG] [Thread-128784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:16:01.840 [DEBUG] [Thread-128784] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:16:01.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:16:01.840 [DEBUG] [Thread-128784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:16:01.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:16:01.902 [DEBUG] [Thread-128784] [transport.py] [_log()] userauth is OK
2026-02-11T12:16:01.902 [DEBUG] [Thread-128784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:16:01.902 [DEBUG] [Thread-128784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:16:01.902 [DEBUG] [Thread-128784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:16:01.902 [DEBUG] [Thread-128784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:16:01.922 [INFO] [Thread-128784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:16:01.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:16:01.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:16:02.778 [DEBUG] [Thread-128784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:16:02.778 [DEBUG] [Thread-128784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:16:02.826 [DEBUG] [Thread-128784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:16:02.826 [DEBUG] [Thread-128784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:16:02.835 [DEBUG] [Thread-128784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:16:02.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:16:02.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:16:02.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:16:02.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:16:02.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:16:02.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:16:02.870 [DEBUG] [Thread-128784] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:16:06.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:16:06.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:16:08.801 [DEBUG] [Thread-128786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:16:13.591 [DEBUG] [Thread-128787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:16:23.854 [DEBUG] [Thread-128788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:16:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:16:32.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:16:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:16:34.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 15, 59), 15.37, 37.37, 0.0, 16.78, 24.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:16:34.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:15:59
2026-02-11T12:16:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:16:35.348 [DEBUG] [Thread-128789] [transport.py] [_log()] starting thread (client mode): 0xa2d793f0
2026-02-11T12:16:35.348 [DEBUG] [Thread-128789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:16:35.369 [DEBUG] [Thread-128789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:16:35.369 [INFO] [Thread-128789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:16:35.372 [DEBUG] [Thread-128789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] client lang: <none>
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] server lang: <none>
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] kex follows: False
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] Compression: none
2026-02-11T12:16:35.373 [DEBUG] [Thread-128789] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:16:35.390 [DEBUG] [Thread-128789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:16:35.391 [DEBUG] [Thread-128789] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:16:35.391 [DEBUG] [Thread-128789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:16:35.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:16:35.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:16:35.394 [DEBUG] [Thread-128789] [transport.py] [_log()] userauth is OK
2026-02-11T12:16:35.394 [DEBUG] [Thread-128789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:16:35.394 [DEBUG] [Thread-128789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:16:35.394 [DEBUG] [Thread-128789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:16:35.394 [DEBUG] [Thread-128789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:16:35.420 [INFO] [Thread-128789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:16:35.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:16:36.028 [DEBUG] [Thread-128789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:16:36.029 [DEBUG] [Thread-128789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:16:36.029 [DEBUG] [Thread-128789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:16:36.069 [DEBUG] [Thread-128789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:16:36.070 [DEBUG] [Thread-128789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:16:36.073 [DEBUG] [Thread-128789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:16:36.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:16:36.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:16:36.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:16:36.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:16:36.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:16:36.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:16:36.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:16:36.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:16:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:16:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.427922 -999.00  +23.70  30.92     44  +10.90 1 2 2 1 1   888    0 14.69 90.92 ----- 26.6 30.9 269.8 37.5 31.3 -20.5 30.6 -14.9 29.1 -21.4 30.1 -17.9
2026-02-11T12:16:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:16:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:16:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.427922
2026-02-11T12:16:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:16:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:16:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:16:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:16:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:16:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:15:59', tmtdew=15.37, humidity=37.37, cloud=0.0, wind=16.78, temperature=24.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:16:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:16:36.099 [DEBUG] [Thread-128789] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:16:36.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:16:36.193 [DEBUG] [Thread-128792] [transport.py] [_log()] starting thread (client mode): 0xa2d79780
2026-02-11T12:16:36.193 [DEBUG] [Thread-128792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:16:36.208 [DEBUG] [Thread-128792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:16:36.208 [INFO] [Thread-128792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:16:36.215 [DEBUG] [Thread-128792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:16:36.216 [DEBUG] [Thread-128792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] client lang: <none>
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] server lang: <none>
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] kex follows: False
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:16:36.217 [DEBUG] [Thread-128792] [transport.py] [_log()] Compression: none
2026-02-11T12:16:36.218 [DEBUG] [Thread-128792] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:16:36.273 [DEBUG] [Thread-128792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:16:36.274 [DEBUG] [Thread-128792] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:16:36.274 [DEBUG] [Thread-128792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:16:36.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:16:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:16:36.329 [DEBUG] [Thread-128792] [transport.py] [_log()] userauth is OK
2026-02-11T12:16:36.329 [DEBUG] [Thread-128792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:16:36.330 [DEBUG] [Thread-128792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:16:36.330 [DEBUG] [Thread-128792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:16:36.330 [DEBUG] [Thread-128792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:16:36.351 [INFO] [Thread-128792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:16:36.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:16:36.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:16:37.269 [DEBUG] [Thread-128792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:16:37.269 [DEBUG] [Thread-128792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:16:37.317 [DEBUG] [Thread-128792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:16:37.318 [DEBUG] [Thread-128792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:16:37.327 [DEBUG] [Thread-128792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:16:37.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:16:37.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:16:37.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:16:37.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:16:37.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:16:37.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:16:37.360 [DEBUG] [Thread-128792] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:16:38.891 [DEBUG] [Thread-128794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:16:53.937 [DEBUG] [Thread-128795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:17:06.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:17:06.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:17:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:17:07.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:17:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:17:08.971 [DEBUG] [Thread-128796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:17:09.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 16, 34), 15.36, 37.65, 0.0, 17.93, 24.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:17:09.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:16:34
2026-02-11T12:17:09.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:17:09.744 [DEBUG] [Thread-128797] [transport.py] [_log()] starting thread (client mode): 0xa2d3f9d0
2026-02-11T12:17:09.744 [DEBUG] [Thread-128797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:17:09.767 [DEBUG] [Thread-128797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:17:09.767 [INFO] [Thread-128797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] client lang: <none>
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] server lang: <none>
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] kex follows: False
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:17:09.770 [DEBUG] [Thread-128797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:17:09.771 [DEBUG] [Thread-128797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:17:09.771 [DEBUG] [Thread-128797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:17:09.771 [DEBUG] [Thread-128797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:17:09.771 [DEBUG] [Thread-128797] [transport.py] [_log()] Compression: none
2026-02-11T12:17:09.771 [DEBUG] [Thread-128797] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:17:09.788 [DEBUG] [Thread-128797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:17:09.788 [DEBUG] [Thread-128797] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:17:09.789 [DEBUG] [Thread-128797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:17:09.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:17:09.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:17:09.790 [DEBUG] [Thread-128797] [transport.py] [_log()] userauth is OK
2026-02-11T12:17:09.791 [DEBUG] [Thread-128797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:17:09.791 [DEBUG] [Thread-128797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:17:09.791 [DEBUG] [Thread-128797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:17:09.791 [DEBUG] [Thread-128797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:17:09.808 [INFO] [Thread-128797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:17:09.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:17:10.413 [DEBUG] [Thread-128797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:17:10.413 [DEBUG] [Thread-128797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:17:10.414 [DEBUG] [Thread-128797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:17:10.454 [DEBUG] [Thread-128797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:17:10.454 [DEBUG] [Thread-128797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:17:10.457 [DEBUG] [Thread-128797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:17:10.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:17:10.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:17:10.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:17:10.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:17:10.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:17:10.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:17:10.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:17:10.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:17:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:17:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.428269 -999.00  +23.40  17.12     46  +11.30 1 2 1 1 1   888    0 14.63 87.31 ----- 19.5 17.1 283.0 31.5 31.2 -16.1 30.4 -16.1 29.0 -13.6 30.3 -14.0
2026-02-11T12:17:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:17:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:17:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.428269
2026-02-11T12:17:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:17:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:17:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:17:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:17:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:17:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:16:34', tmtdew=15.36, humidity=37.65, cloud=0.0, wind=17.93, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:16:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:17:10.484 [DEBUG] [Thread-128797] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:17:10.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:17:10.580 [DEBUG] [Thread-128800] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9a0
2026-02-11T12:17:10.581 [DEBUG] [Thread-128800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:17:10.596 [DEBUG] [Thread-128800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:17:10.596 [INFO] [Thread-128800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:17:10.604 [DEBUG] [Thread-128800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:17:10.604 [DEBUG] [Thread-128800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:17:10.605 [DEBUG] [Thread-128800] [transport.py] [_log()] client lang: <none>
2026-02-11T12:17:10.606 [DEBUG] [Thread-128800] [transport.py] [_log()] server lang: <none>
2026-02-11T12:17:10.606 [DEBUG] [Thread-128800] [transport.py] [_log()] kex follows: False
2026-02-11T12:17:10.606 [DEBUG] [Thread-128800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:17:10.606 [DEBUG] [Thread-128800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:17:10.606 [DEBUG] [Thread-128800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:17:10.607 [DEBUG] [Thread-128800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:17:10.607 [DEBUG] [Thread-128800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:17:10.607 [DEBUG] [Thread-128800] [transport.py] [_log()] Compression: none
2026-02-11T12:17:10.607 [DEBUG] [Thread-128800] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:17:10.664 [DEBUG] [Thread-128800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:17:10.665 [DEBUG] [Thread-128800] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:17:10.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:17:10.666 [DEBUG] [Thread-128800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:17:10.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:17:10.721 [DEBUG] [Thread-128800] [transport.py] [_log()] userauth is OK
2026-02-11T12:17:10.721 [DEBUG] [Thread-128800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:17:10.721 [DEBUG] [Thread-128800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:17:10.721 [DEBUG] [Thread-128800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:17:10.721 [DEBUG] [Thread-128800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:17:10.740 [INFO] [Thread-128800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:17:10.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:17:10.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:17:11.664 [DEBUG] [Thread-128800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:17:11.664 [DEBUG] [Thread-128800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:17:11.712 [DEBUG] [Thread-128800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:17:11.712 [DEBUG] [Thread-128800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:17:11.721 [DEBUG] [Thread-128800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:17:11.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:17:11.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:17:11.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:17:11.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:17:11.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:17:11.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:17:11.759 [DEBUG] [Thread-128800] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:17:13.644 [DEBUG] [Thread-128802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:17:24.003 [DEBUG] [Thread-128803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:17:39.056 [DEBUG] [Thread-128804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:17:41.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:17:41.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:17:41.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
2026-02-11T12:17:43.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 17, 10), 14.93, 38.59, 0.0, 22.51, 23.95, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:17:43.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:17:10
2026-02-11T12:17:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:17:44.168 [DEBUG] [Thread-128805] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9e0
2026-02-11T12:17:44.168 [DEBUG] [Thread-128805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:17:44.189 [DEBUG] [Thread-128805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:17:44.189 [INFO] [Thread-128805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:44.192 [DEBUG] [Thread-128805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] client lang: <none>
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] server lang: <none>
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] kex follows: False
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] Compression: none
2026-02-11T12:17:44.193 [DEBUG] [Thread-128805] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:17:44.210 [DEBUG] [Thread-128805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:17:44.210 [DEBUG] [Thread-128805] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:17:44.211 [DEBUG] [Thread-128805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:17:44.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:17:44.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:17:44.213 [DEBUG] [Thread-128805] [transport.py] [_log()] userauth is OK
2026-02-11T12:17:44.213 [DEBUG] [Thread-128805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:17:44.213 [DEBUG] [Thread-128805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:17:44.213 [DEBUG] [Thread-128805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:17:44.214 [DEBUG] [Thread-128805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:17:44.238 [INFO] [Thread-128805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:17:44.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:17:44.829 [DEBUG] [Thread-128805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:17:44.829 [DEBUG] [Thread-128805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:17:44.830 [DEBUG] [Thread-128805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:17:44.870 [DEBUG] [Thread-128805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:17:44.871 [DEBUG] [Thread-128805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:17:44.874 [DEBUG] [Thread-128805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:17:44.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:17:44.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:17:44.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:17:44.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:17:44.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:17:44.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:17:44.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:17:44.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.428616 -999.00  +23.30  38.15     45  +10.90 1 2 2 1 1   888    0 14.55 84.05 ----- 39.2 38.1 280.0 45.3 30.9 -20.6 30.4 -16.3 28.6 -17.0 29.9 -16.6
2026-02-11T12:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.428616
2026-02-11T12:17:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:17:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:17:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:17:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:17:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:17:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:17:10', tmtdew=14.93, humidity=38.59, cloud=0.0, wind=22.51, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:17:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:17:44.905 [DEBUG] [Thread-128805] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:17:44.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:17:44.999 [DEBUG] [Thread-128808] [transport.py] [_log()] starting thread (client mode): 0xa2d7aaa0
2026-02-11T12:17:45.000 [DEBUG] [Thread-128808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:17:45.020 [DEBUG] [Thread-128808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:17:45.020 [INFO] [Thread-128808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:17:45.027 [DEBUG] [Thread-128808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] client lang: <none>
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] server lang: <none>
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] kex follows: False
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:17:45.028 [DEBUG] [Thread-128808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:17:45.029 [DEBUG] [Thread-128808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:17:45.029 [DEBUG] [Thread-128808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:17:45.029 [DEBUG] [Thread-128808] [transport.py] [_log()] Compression: none
2026-02-11T12:17:45.029 [DEBUG] [Thread-128808] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:17:45.088 [DEBUG] [Thread-128808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:17:45.088 [DEBUG] [Thread-128808] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:17:45.089 [DEBUG] [Thread-128808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:17:45.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:17:45.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:17:45.148 [DEBUG] [Thread-128808] [transport.py] [_log()] userauth is OK
2026-02-11T12:17:45.148 [DEBUG] [Thread-128808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:17:45.148 [DEBUG] [Thread-128808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:17:45.148 [DEBUG] [Thread-128808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:17:45.149 [DEBUG] [Thread-128808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:17:45.168 [INFO] [Thread-128808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:17:45.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:17:45.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:17:46.047 [DEBUG] [Thread-128808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:17:46.047 [DEBUG] [Thread-128808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:17:46.096 [DEBUG] [Thread-128808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:17:46.096 [DEBUG] [Thread-128808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:17:46.106 [DEBUG] [Thread-128808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:17:46.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:17:46.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:17:46.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:17:46.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:17:46.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:17:46.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:17:46.143 [DEBUG] [Thread-128808] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:17:54.094 [DEBUG] [Thread-128810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:06.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:06.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:09.155 [DEBUG] [Thread-128811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:13.696 [DEBUG] [Thread-128812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:18:16.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:18:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:18:18.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 17, 46), 15.33, 37.69, 0.0, 29.31, 24.3, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:18:18.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:17:46
2026-02-11T12:18:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:18:18.898 [DEBUG] [Thread-128813] [transport.py] [_log()] starting thread (client mode): 0xa2d3df00
2026-02-11T12:18:18.898 [DEBUG] [Thread-128813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:18:18.914 [DEBUG] [Thread-128813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:18:18.914 [INFO] [Thread-128813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:18:18.916 [DEBUG] [Thread-128813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:18:18.916 [DEBUG] [Thread-128813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:18:18.916 [DEBUG] [Thread-128813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] client lang: <none>
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] server lang: <none>
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] kex follows: False
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] Compression: none
2026-02-11T12:18:18.917 [DEBUG] [Thread-128813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:18:18.929 [DEBUG] [Thread-128813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:18:18.929 [DEBUG] [Thread-128813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:18:18.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:18:18.930 [DEBUG] [Thread-128813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:18:18.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:18:18.931 [DEBUG] [Thread-128813] [transport.py] [_log()] userauth is OK
2026-02-11T12:18:18.931 [DEBUG] [Thread-128813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:18:18.931 [DEBUG] [Thread-128813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:18:18.931 [DEBUG] [Thread-128813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:18:18.931 [DEBUG] [Thread-128813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:18:18.949 [INFO] [Thread-128813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:18:18.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:18:19.610 [DEBUG] [Thread-128813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:18:19.611 [DEBUG] [Thread-128813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:18:19.611 [DEBUG] [Thread-128813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:18:19.651 [DEBUG] [Thread-128813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:18:19.651 [DEBUG] [Thread-128813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:18:19.654 [DEBUG] [Thread-128813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:18:19.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:18:19.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:18:19.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:18:19.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:18:19.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:18:19.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:18:19.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:18:19.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:18:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:18:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.428963 -999.00  +23.00  28.02     47  +11.20 1 2 1 1 1   888    0 14.41 80.42 ----- 35.9 28.0 278.2 42.0 30.6 -19.4 30.0 -16.1 28.3 -18.7 29.7 -15.2
2026-02-11T12:18:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:18:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:18:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.428963
2026-02-11T12:18:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:18:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:18:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:18:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:18:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:18:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:17:46', tmtdew=15.33, humidity=37.69, cloud=0.0, wind=29.31, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:17:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:18:19.678 [DEBUG] [Thread-128813] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:18:19.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:18:19.771 [DEBUG] [Thread-128816] [transport.py] [_log()] starting thread (client mode): 0xa2d3d420
2026-02-11T12:18:19.771 [DEBUG] [Thread-128816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:18:19.787 [DEBUG] [Thread-128816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:18:19.787 [INFO] [Thread-128816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] client lang: <none>
2026-02-11T12:18:19.795 [DEBUG] [Thread-128816] [transport.py] [_log()] server lang: <none>
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] kex follows: False
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] Compression: none
2026-02-11T12:18:19.796 [DEBUG] [Thread-128816] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:18:19.858 [DEBUG] [Thread-128816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:18:19.859 [DEBUG] [Thread-128816] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:18:19.859 [DEBUG] [Thread-128816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:18:19.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:18:19.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:18:19.916 [DEBUG] [Thread-128816] [transport.py] [_log()] userauth is OK
2026-02-11T12:18:19.916 [DEBUG] [Thread-128816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:18:19.916 [DEBUG] [Thread-128816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:18:19.916 [DEBUG] [Thread-128816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:18:19.916 [DEBUG] [Thread-128816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:18:19.936 [INFO] [Thread-128816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:18:19.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:18:19.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:18:20.752 [DEBUG] [Thread-128816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:18:20.753 [DEBUG] [Thread-128816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:18:20.800 [DEBUG] [Thread-128816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:18:20.801 [DEBUG] [Thread-128816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:18:20.810 [DEBUG] [Thread-128816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:18:20.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:18:20.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:18:20.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:18:20.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:18:20.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:18:20.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:18:20.846 [DEBUG] [Thread-128816] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:18:24.189 [DEBUG] [Thread-128818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:39.240 [DEBUG] [Thread-128819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:50.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:18:50.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:18:50.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:18:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 18, 21), 15.24, 37.89, 0.0, 35.52, 24.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:18:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:18:21
2026-02-11T12:18:53.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:18:53.730 [DEBUG] [Thread-128820] [transport.py] [_log()] starting thread (client mode): 0xa2d6ee90
2026-02-11T12:18:53.731 [DEBUG] [Thread-128820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:18:53.751 [DEBUG] [Thread-128820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:18:53.752 [INFO] [Thread-128820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:18:53.755 [DEBUG] [Thread-128820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:18:53.755 [DEBUG] [Thread-128820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:18:53.755 [DEBUG] [Thread-128820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] client lang: <none>
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] server lang: <none>
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] kex follows: False
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] Compression: none
2026-02-11T12:18:53.756 [DEBUG] [Thread-128820] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:18:53.773 [DEBUG] [Thread-128820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:18:53.774 [DEBUG] [Thread-128820] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:18:53.774 [DEBUG] [Thread-128820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:18:53.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:18:53.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:18:53.784 [DEBUG] [Thread-128820] [transport.py] [_log()] userauth is OK
2026-02-11T12:18:53.785 [DEBUG] [Thread-128820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:18:53.785 [DEBUG] [Thread-128820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:18:53.785 [DEBUG] [Thread-128820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:18:53.785 [DEBUG] [Thread-128820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:18:53.809 [INFO] [Thread-128820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:18:53.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:18:54.279 [DEBUG] [Thread-128822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:18:54.459 [DEBUG] [Thread-128820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:18:54.459 [DEBUG] [Thread-128820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:18:54.460 [DEBUG] [Thread-128820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:18:54.500 [DEBUG] [Thread-128820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:18:54.500 [DEBUG] [Thread-128820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:18:54.503 [DEBUG] [Thread-128820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:18:54.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:18:54.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:18:54.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:18:54.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:18:54.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:18:54.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:18:54.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:18:54.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:18:54.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:18:54.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.429658 -999.00  +23.00  34.21     46  +10.90 1 2 2 1 1   888    0 14.12 62.96 ----- 35.6 34.2 268.0 45.6 30.4 -19.1 29.6 -18.5 28.4 -18.7 29.2 -18.5
2026-02-11T12:18:54.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:18:54.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:18:54.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.429658
2026-02-11T12:18:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:18:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:18:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:18:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:18:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:18:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:18:21', tmtdew=15.24, humidity=37.89, cloud=0.0, wind=35.52, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:18:42.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:18:54.530 [DEBUG] [Thread-128820] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:18:54.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:18:54.626 [DEBUG] [Thread-128824] [transport.py] [_log()] starting thread (client mode): 0xa2d6fa90
2026-02-11T12:18:54.626 [DEBUG] [Thread-128824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:18:54.641 [DEBUG] [Thread-128824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:18:54.641 [INFO] [Thread-128824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:18:54.649 [DEBUG] [Thread-128824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] client lang: <none>
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] server lang: <none>
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] kex follows: False
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] Compression: none
2026-02-11T12:18:54.650 [DEBUG] [Thread-128824] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:18:54.707 [DEBUG] [Thread-128824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:18:54.707 [DEBUG] [Thread-128824] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:18:54.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:18:54.708 [DEBUG] [Thread-128824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:18:54.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:18:54.763 [DEBUG] [Thread-128824] [transport.py] [_log()] userauth is OK
2026-02-11T12:18:54.763 [DEBUG] [Thread-128824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:18:54.763 [DEBUG] [Thread-128824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:18:54.763 [DEBUG] [Thread-128824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:18:54.764 [DEBUG] [Thread-128824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:18:54.784 [INFO] [Thread-128824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:18:54.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:18:54.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:18:55.644 [DEBUG] [Thread-128824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:18:55.644 [DEBUG] [Thread-128824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:18:55.692 [DEBUG] [Thread-128824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:18:55.692 [DEBUG] [Thread-128824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:18:55.701 [DEBUG] [Thread-128824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:18:55.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:18:55.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:18:55.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:18:55.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:18:55.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:18:55.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:18:55.734 [DEBUG] [Thread-128824] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:19:06.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:19:06.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:19:09.313 [DEBUG] [Thread-128826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:19:13.755 [DEBUG] [Thread-128827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:19:24.370 [DEBUG] [Thread-128828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:19:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:19:25.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:19:25.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
2026-02-11T12:19:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 18, 57), 14.7, 39.15, 0.0, 33.21, 23.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:19:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:18:57
2026-02-11T12:19:28.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:19:28.201 [DEBUG] [Thread-128829] [transport.py] [_log()] starting thread (client mode): 0xa2d6e890
2026-02-11T12:19:28.202 [DEBUG] [Thread-128829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:19:28.222 [DEBUG] [Thread-128829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:19:28.222 [INFO] [Thread-128829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:19:28.223 [DEBUG] [Thread-128829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:19:28.223 [DEBUG] [Thread-128829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] client lang: <none>
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] server lang: <none>
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] kex follows: False
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] Compression: none
2026-02-11T12:19:28.224 [DEBUG] [Thread-128829] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:19:28.232 [DEBUG] [Thread-128829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:19:28.232 [DEBUG] [Thread-128829] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:19:28.233 [DEBUG] [Thread-128829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:19:28.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:19:28.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:19:28.234 [DEBUG] [Thread-128829] [transport.py] [_log()] userauth is OK
2026-02-11T12:19:28.234 [DEBUG] [Thread-128829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:19:28.234 [DEBUG] [Thread-128829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:19:28.234 [DEBUG] [Thread-128829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:19:28.235 [DEBUG] [Thread-128829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:19:28.257 [INFO] [Thread-128829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:19:28.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:19:28.903 [DEBUG] [Thread-128829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:19:28.903 [DEBUG] [Thread-128829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:19:28.904 [DEBUG] [Thread-128829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:19:28.944 [DEBUG] [Thread-128829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:19:28.944 [DEBUG] [Thread-128829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:19:28.948 [DEBUG] [Thread-128829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:19:28.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:19:28.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:19:28.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:19:28.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:19:28.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:19:28.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:19:28.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:19:28.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:19:28.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:19:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.430005 -999.00  +23.00  27.72     46  +11.00 1 2 1 1 1   888    0 14.13 56.34 ----- 26.6 27.7 288.0 31.1 30.3 -20.4 29.6 -17.9 28.3 -18.9 29.1 -21.0
2026-02-11T12:19:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:19:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:19:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.430005
2026-02-11T12:19:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:19:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:19:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:19:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:19:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:19:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:18:57', tmtdew=14.7, humidity=39.15, cloud=0.0, wind=33.21, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:19:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:19:28.976 [DEBUG] [Thread-128829] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:19:29.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:19:29.070 [DEBUG] [Thread-128832] [transport.py] [_log()] starting thread (client mode): 0xa2d6f1c0
2026-02-11T12:19:29.071 [DEBUG] [Thread-128832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:19:29.085 [DEBUG] [Thread-128832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:19:29.085 [INFO] [Thread-128832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:19:29.092 [DEBUG] [Thread-128832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:19:29.092 [DEBUG] [Thread-128832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:19:29.092 [DEBUG] [Thread-128832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] client lang: <none>
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] server lang: <none>
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] kex follows: False
2026-02-11T12:19:29.093 [DEBUG] [Thread-128832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:19:29.094 [DEBUG] [Thread-128832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:19:29.094 [DEBUG] [Thread-128832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:19:29.094 [DEBUG] [Thread-128832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:19:29.094 [DEBUG] [Thread-128832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:19:29.094 [DEBUG] [Thread-128832] [transport.py] [_log()] Compression: none
2026-02-11T12:19:29.094 [DEBUG] [Thread-128832] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:19:29.151 [DEBUG] [Thread-128832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:19:29.152 [DEBUG] [Thread-128832] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:19:29.152 [DEBUG] [Thread-128832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:19:29.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:19:29.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:19:29.214 [DEBUG] [Thread-128832] [transport.py] [_log()] userauth is OK
2026-02-11T12:19:29.215 [DEBUG] [Thread-128832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:19:29.215 [DEBUG] [Thread-128832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:19:29.215 [DEBUG] [Thread-128832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:19:29.215 [DEBUG] [Thread-128832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:19:29.234 [INFO] [Thread-128832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:19:29.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:19:29.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:19:30.103 [DEBUG] [Thread-128832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:19:30.103 [DEBUG] [Thread-128832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:19:30.151 [DEBUG] [Thread-128832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:19:30.151 [DEBUG] [Thread-128832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:19:30.160 [DEBUG] [Thread-128832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:19:30.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:19:30.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:19:30.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:19:30.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:19:30.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:19:30.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:19:30.193 [DEBUG] [Thread-128832] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:19:39.405 [DEBUG] [Thread-128834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:19:54.456 [DEBUG] [Thread-128835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:20:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:20:00.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:20:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:20:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 19, 32), 14.63, 39.29, 0.0, 33.54, 23.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:20:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:19:32
2026-02-11T12:20:02.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:20:03.055 [DEBUG] [Thread-128836] [transport.py] [_log()] starting thread (client mode): 0xa2d3c9a0
2026-02-11T12:20:03.055 [DEBUG] [Thread-128836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:20:03.077 [DEBUG] [Thread-128836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:20:03.077 [INFO] [Thread-128836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:20:03.080 [DEBUG] [Thread-128836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:20:03.080 [DEBUG] [Thread-128836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] client lang: <none>
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] server lang: <none>
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] kex follows: False
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:20:03.081 [DEBUG] [Thread-128836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:20:03.082 [DEBUG] [Thread-128836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:20:03.082 [DEBUG] [Thread-128836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:20:03.082 [DEBUG] [Thread-128836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:20:03.082 [DEBUG] [Thread-128836] [transport.py] [_log()] Compression: none
2026-02-11T12:20:03.082 [DEBUG] [Thread-128836] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:20:03.099 [DEBUG] [Thread-128836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:20:03.100 [DEBUG] [Thread-128836] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:20:03.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:20:03.101 [DEBUG] [Thread-128836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:20:03.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:20:03.103 [DEBUG] [Thread-128836] [transport.py] [_log()] userauth is OK
2026-02-11T12:20:03.103 [DEBUG] [Thread-128836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:20:03.104 [DEBUG] [Thread-128836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:20:03.104 [DEBUG] [Thread-128836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:20:03.104 [DEBUG] [Thread-128836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:20:03.127 [INFO] [Thread-128836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:20:03.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:20:03.915 [DEBUG] [Thread-128836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:20:03.915 [DEBUG] [Thread-128836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:20:03.916 [DEBUG] [Thread-128836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:20:03.956 [DEBUG] [Thread-128836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:20:03.957 [DEBUG] [Thread-128836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:20:03.960 [DEBUG] [Thread-128836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:20:03.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:20:03.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:20:03.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:20:03.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:20:03.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:20:03.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:20:03.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:20:03.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:20:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:20:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.430352 -999.00  +22.40  14.07     47  +10.80 1 2 1 1 1   888    0 13.57 46.55 ----- 16.5 14.1 269.8 23.8 29.6 -22.6 29.1 -19.1 27.8 -18.4 28.6 -21.1
2026-02-11T12:20:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:20:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:20:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.430352
2026-02-11T12:20:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:20:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:20:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:20:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:20:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:20:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:19:32', tmtdew=14.63, humidity=39.29, cloud=0.0, wind=33.54, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:19:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:20:03.990 [DEBUG] [Thread-128836] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:20:04.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:20:04.085 [DEBUG] [Thread-128839] [transport.py] [_log()] starting thread (client mode): 0xa2d3fa60
2026-02-11T12:20:04.086 [DEBUG] [Thread-128839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:20:04.100 [DEBUG] [Thread-128839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:20:04.100 [INFO] [Thread-128839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:20:04.107 [DEBUG] [Thread-128839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] client lang: <none>
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] server lang: <none>
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] kex follows: False
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] Compression: none
2026-02-11T12:20:04.108 [DEBUG] [Thread-128839] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:20:04.169 [DEBUG] [Thread-128839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:20:04.170 [DEBUG] [Thread-128839] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:20:04.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:20:04.171 [DEBUG] [Thread-128839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:20:04.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:20:04.225 [DEBUG] [Thread-128839] [transport.py] [_log()] userauth is OK
2026-02-11T12:20:04.226 [DEBUG] [Thread-128839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:20:04.226 [DEBUG] [Thread-128839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:20:04.226 [DEBUG] [Thread-128839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:20:04.226 [DEBUG] [Thread-128839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:20:04.245 [INFO] [Thread-128839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:20:04.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:20:04.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:20:05.104 [DEBUG] [Thread-128839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:20:05.105 [DEBUG] [Thread-128839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:20:05.152 [DEBUG] [Thread-128839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:20:05.152 [DEBUG] [Thread-128839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:20:05.161 [DEBUG] [Thread-128839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:20:05.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:20:05.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')
2026-02-11T12:20:05.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:20:05.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:20:05.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:20:05.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:20:05.200 [DEBUG] [Thread-128839] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:20:06.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:20:06.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:20:09.494 [DEBUG] [Thread-128841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:20:13.821 [DEBUG] [Thread-128842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:20:24.559 [DEBUG] [Thread-128843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:20:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:20:35.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:20:35.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
2026-02-11T12:20:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 20, 8), 14.33, 39.97, 0.0, 32.54, 23.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:20:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:20:08
2026-02-11T12:20:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:20:37.632 [DEBUG] [Thread-128844] [transport.py] [_log()] starting thread (client mode): 0xa2d6fac0
2026-02-11T12:20:37.633 [DEBUG] [Thread-128844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:20:37.651 [DEBUG] [Thread-128844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:20:37.652 [INFO] [Thread-128844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] client lang: <none>
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] server lang: <none>
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] kex follows: False
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:20:37.655 [DEBUG] [Thread-128844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:20:37.656 [DEBUG] [Thread-128844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:20:37.656 [DEBUG] [Thread-128844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:20:37.656 [DEBUG] [Thread-128844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:20:37.656 [DEBUG] [Thread-128844] [transport.py] [_log()] Compression: none
2026-02-11T12:20:37.656 [DEBUG] [Thread-128844] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:20:37.672 [DEBUG] [Thread-128844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:20:37.672 [DEBUG] [Thread-128844] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:20:37.673 [DEBUG] [Thread-128844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:20:37.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:20:37.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:20:37.675 [DEBUG] [Thread-128844] [transport.py] [_log()] userauth is OK
2026-02-11T12:20:37.675 [DEBUG] [Thread-128844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:20:37.675 [DEBUG] [Thread-128844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:20:37.675 [DEBUG] [Thread-128844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:20:37.675 [DEBUG] [Thread-128844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:20:37.699 [INFO] [Thread-128844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:20:37.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:20:38.339 [DEBUG] [Thread-128844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:20:38.340 [DEBUG] [Thread-128844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:20:38.340 [DEBUG] [Thread-128844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:20:38.380 [DEBUG] [Thread-128844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:20:38.381 [DEBUG] [Thread-128844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:20:38.384 [DEBUG] [Thread-128844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:20:38.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:20:38.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:20:38.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:20:38.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:20:38.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:20:38.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:20:38.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:20:38.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:20:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:20:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.430699 -999.00  +22.50  31.42     48  +11.10 1 2 2 1 1   888    0 13.17 31.71 ----- 24.4 31.4 291.2 34.3 29.6 -18.6 29.0 -17.5 27.8 -16.6 28.6 -19.2
2026-02-11T12:20:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:20:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:20:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.430699
2026-02-11T12:20:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:20:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:20:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:20:38.410 [DEBUG] [Thread-128844] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:20:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:20:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:20:38.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:20:08', tmtdew=14.33, humidity=39.97, cloud=0.0, wind=32.54, temperature=23.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:20:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:20:38.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:20:38.505 [DEBUG] [Thread-128847] [transport.py] [_log()] starting thread (client mode): 0xa2d6f700
2026-02-11T12:20:38.505 [DEBUG] [Thread-128847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:20:38.519 [DEBUG] [Thread-128847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:20:38.519 [INFO] [Thread-128847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:20:38.526 [DEBUG] [Thread-128847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:20:38.526 [DEBUG] [Thread-128847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] client lang: <none>
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] server lang: <none>
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] kex follows: False
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] Compression: none
2026-02-11T12:20:38.527 [DEBUG] [Thread-128847] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:20:38.585 [DEBUG] [Thread-128847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:20:38.585 [DEBUG] [Thread-128847] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:20:38.586 [DEBUG] [Thread-128847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:20:38.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:20:38.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:20:38.641 [DEBUG] [Thread-128847] [transport.py] [_log()] userauth is OK
2026-02-11T12:20:38.641 [DEBUG] [Thread-128847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:20:38.641 [DEBUG] [Thread-128847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:20:38.641 [DEBUG] [Thread-128847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:20:38.641 [DEBUG] [Thread-128847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:20:38.660 [INFO] [Thread-128847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:20:38.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:20:38.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:20:39.498 [DEBUG] [Thread-128847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:20:39.498 [DEBUG] [Thread-128847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:20:39.546 [DEBUG] [Thread-128847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:20:39.546 [DEBUG] [Thread-128847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:20:39.555 [DEBUG] [Thread-128847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:20:39.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:20: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')
2026-02-11T12:20: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
2026-02-11T12:20:39.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:20:39.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:20:39.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:20:39.592 [DEBUG] [Thread-128847] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:20:39.602 [DEBUG] [Thread-128849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:20:54.652 [DEBUG] [Thread-128850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:21:06.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:21:06.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:21:09.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:21:09.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:21:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:21:09.685 [DEBUG] [Thread-128851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:21:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 20, 43), 13.92, 41.35, 0.0, 28.3, 23.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:21:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:20:43
2026-02-11T12:21:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:21:12.053 [DEBUG] [Thread-128852] [transport.py] [_log()] starting thread (client mode): 0xa2d79480
2026-02-11T12:21:12.053 [DEBUG] [Thread-128852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:21:12.074 [DEBUG] [Thread-128852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:21:12.074 [INFO] [Thread-128852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] client lang: <none>
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] server lang: <none>
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] kex follows: False
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] Compression: none
2026-02-11T12:21:12.078 [DEBUG] [Thread-128852] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:21:12.094 [DEBUG] [Thread-128852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:21:12.095 [DEBUG] [Thread-128852] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:21:12.095 [DEBUG] [Thread-128852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:21:12.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:21:12.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:21:12.097 [DEBUG] [Thread-128852] [transport.py] [_log()] userauth is OK
2026-02-11T12:21:12.097 [DEBUG] [Thread-128852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:21:12.098 [DEBUG] [Thread-128852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:21:12.098 [DEBUG] [Thread-128852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:21:12.098 [DEBUG] [Thread-128852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:21:12.121 [INFO] [Thread-128852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:21:12.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:21:12.724 [DEBUG] [Thread-128852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:21:12.725 [DEBUG] [Thread-128852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:21:12.725 [DEBUG] [Thread-128852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:21:12.766 [DEBUG] [Thread-128852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:21:12.766 [DEBUG] [Thread-128852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:21:12.770 [DEBUG] [Thread-128852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:21:12.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:21:12.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:21:12.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:21:12.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:21:12.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:21:12.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:21:12.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:21:12.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:21:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:21:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.431047 -999.00  +22.90  22.31     47  +11.30 1 2 1 1 1   888    0 12.70 22.55 ----- 19.6 22.3 298.4 36.1 29.5 -17.1 28.8 -16.5 27.8 -15.3 28.8 -14.0
2026-02-11T12:21:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:21:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:21:12.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.431047
2026-02-11T12:21:12.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:21:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:21:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:21:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:21:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:21:12.797 [DEBUG] [Thread-128852] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:21:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:20:43', tmtdew=13.92, humidity=41.35, cloud=0.0, wind=28.3, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:20:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:21:12.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:21:12.890 [DEBUG] [Thread-128855] [transport.py] [_log()] starting thread (client mode): 0xa2d6ec20
2026-02-11T12:21:12.890 [DEBUG] [Thread-128855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:21:12.905 [DEBUG] [Thread-128855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:21:12.905 [INFO] [Thread-128855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] client lang: <none>
2026-02-11T12:21:12.912 [DEBUG] [Thread-128855] [transport.py] [_log()] server lang: <none>
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] kex follows: False
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] Compression: none
2026-02-11T12:21:12.913 [DEBUG] [Thread-128855] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:21:12.971 [DEBUG] [Thread-128855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:21:12.971 [DEBUG] [Thread-128855] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:21:12.972 [DEBUG] [Thread-128855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:21:12.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:21:12.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:21:13.028 [DEBUG] [Thread-128855] [transport.py] [_log()] userauth is OK
2026-02-11T12:21:13.028 [DEBUG] [Thread-128855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:21:13.028 [DEBUG] [Thread-128855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:21:13.028 [DEBUG] [Thread-128855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:21:13.028 [DEBUG] [Thread-128855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:21:13.049 [INFO] [Thread-128855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:21:13.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:21:13.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:21:13.854 [DEBUG] [Thread-128857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:21:13.872 [DEBUG] [Thread-128855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:21:13.872 [DEBUG] [Thread-128855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:21:13.920 [DEBUG] [Thread-128855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:21:13.920 [DEBUG] [Thread-128855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:21:13.929 [DEBUG] [Thread-128855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:21:13.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:21:13.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:21:13.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:21:13.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:21:13.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:21:13.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:21:13.965 [DEBUG] [Thread-128855] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:21:24.723 [DEBUG] [Thread-128858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:21:39.765 [DEBUG] [Thread-128859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:21:43.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:21:43.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:21:43.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:21:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 21, 19), 13.97, 41.19, 0.0, 24.9, 23.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:21:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:21:19
2026-02-11T12:21:46.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:21:46.422 [DEBUG] [Thread-128860] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1f0
2026-02-11T12:21:46.422 [DEBUG] [Thread-128860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:21:46.441 [DEBUG] [Thread-128860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:21:46.442 [INFO] [Thread-128860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:21:46.445 [DEBUG] [Thread-128860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:21:46.445 [DEBUG] [Thread-128860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:21:46.445 [DEBUG] [Thread-128860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:21:46.445 [DEBUG] [Thread-128860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:46.445 [DEBUG] [Thread-128860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] client lang: <none>
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] server lang: <none>
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] kex follows: False
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] Compression: none
2026-02-11T12:21:46.446 [DEBUG] [Thread-128860] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:21:46.464 [DEBUG] [Thread-128860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:21:46.465 [DEBUG] [Thread-128860] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:21:46.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:21:46.466 [DEBUG] [Thread-128860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:21:46.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:21:46.468 [DEBUG] [Thread-128860] [transport.py] [_log()] userauth is OK
2026-02-11T12:21:46.468 [DEBUG] [Thread-128860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:21:46.468 [DEBUG] [Thread-128860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:21:46.468 [DEBUG] [Thread-128860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:21:46.468 [DEBUG] [Thread-128860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:21:46.488 [INFO] [Thread-128860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:21:46.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:21:47.114 [DEBUG] [Thread-128860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:21:47.114 [DEBUG] [Thread-128860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:21:47.114 [DEBUG] [Thread-128860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:21:47.155 [DEBUG] [Thread-128860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:21:47.155 [DEBUG] [Thread-128860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:21:47.158 [DEBUG] [Thread-128860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:21:47.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:21:47.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:21:47.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:21:47.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:21:47.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:21:47.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:21:47.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:21:47.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:21:47.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:21:47.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.431394 -999.00  +23.50  29.67     46  +11.30 1 2 1 1 1   888    0 12.45 15.49 ----- 32.3 29.7 297.2 32.6 30.0 -15.0 29.3 -13.4 28.3 -14.9 29.2 -14.5
2026-02-11T12:21:47.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:21:47.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:21:47.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.431394
2026-02-11T12:21:47.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:21:47.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:21:47.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:21:47.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:21:47.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:21:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:21:19', tmtdew=13.97, humidity=41.19, cloud=0.0, wind=24.9, temperature=23.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:21:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:21:47.181 [DEBUG] [Thread-128860] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:21:47.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:21:47.274 [DEBUG] [Thread-128863] [transport.py] [_log()] starting thread (client mode): 0xa2d6e740
2026-02-11T12:21:47.274 [DEBUG] [Thread-128863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:21:47.290 [DEBUG] [Thread-128863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:21:47.290 [INFO] [Thread-128863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:21:47.297 [DEBUG] [Thread-128863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] client lang: <none>
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] server lang: <none>
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] kex follows: False
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] Compression: none
2026-02-11T12:21:47.298 [DEBUG] [Thread-128863] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:21:47.354 [DEBUG] [Thread-128863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:21:47.354 [DEBUG] [Thread-128863] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:21:47.354 [DEBUG] [Thread-128863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:21:47.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:21:47.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:21:47.415 [DEBUG] [Thread-128863] [transport.py] [_log()] userauth is OK
2026-02-11T12:21:47.415 [DEBUG] [Thread-128863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:21:47.415 [DEBUG] [Thread-128863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:21:47.415 [DEBUG] [Thread-128863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:21:47.415 [DEBUG] [Thread-128863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:21:47.435 [INFO] [Thread-128863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:21:47.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:21:47.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:21:48.277 [DEBUG] [Thread-128863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:21:48.277 [DEBUG] [Thread-128863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:21:48.326 [DEBUG] [Thread-128863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:21:48.327 [DEBUG] [Thread-128863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:21:48.336 [DEBUG] [Thread-128863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:21:48.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:21:48.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:21:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:21:48.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:21:48.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:21:48.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:21:48.374 [DEBUG] [Thread-128863] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:21:54.805 [DEBUG] [Thread-128865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:07.025 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:07.026 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:09.859 [DEBUG] [Thread-128866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:13.894 [DEBUG] [Thread-128867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:18.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:22:18.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:22:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:22:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 21, 55), 13.85, 41.35, 0.0, 17.06, 22.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:22:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:21:55
2026-02-11T12:22:21.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:22:21.410 [DEBUG] [Thread-128868] [transport.py] [_log()] starting thread (client mode): 0xa2d3fd30
2026-02-11T12:22:21.410 [DEBUG] [Thread-128868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:22:21.431 [DEBUG] [Thread-128868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:22:21.431 [INFO] [Thread-128868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:22:21.434 [DEBUG] [Thread-128868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] client lang: <none>
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] server lang: <none>
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] kex follows: False
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] Compression: none
2026-02-11T12:22:21.435 [DEBUG] [Thread-128868] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:22:21.451 [DEBUG] [Thread-128868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:22:21.451 [DEBUG] [Thread-128868] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:22:21.452 [DEBUG] [Thread-128868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:22:21.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:22:21.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:22:21.454 [DEBUG] [Thread-128868] [transport.py] [_log()] userauth is OK
2026-02-11T12:22:21.454 [DEBUG] [Thread-128868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:22:21.454 [DEBUG] [Thread-128868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:22:21.454 [DEBUG] [Thread-128868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:22:21.454 [DEBUG] [Thread-128868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:22:21.479 [INFO] [Thread-128868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:22:21.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:22:22.115 [DEBUG] [Thread-128868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:22:22.115 [DEBUG] [Thread-128868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:22:22.115 [DEBUG] [Thread-128868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:22:22.156 [DEBUG] [Thread-128868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:22:22.157 [DEBUG] [Thread-128868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:22:22.160 [DEBUG] [Thread-128868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:22:22.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:22:22.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:22:22.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:22:22.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:22:22.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:22:22.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:22:22.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:22:22.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:22:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:22:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.431741 -999.00  +23.00  27.04     46  +10.90 1 2 1 1 1   888    0 12.45 15.08 ----- 30.7 27.0 288.6 34.6 30.1 -16.8 29.4 -15.4 28.4 -14.0 29.2 -14.9
2026-02-11T12:22:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:22:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:22:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.431741
2026-02-11T12:22:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:22:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:22:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:22:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:22:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:22:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:21:55', tmtdew=13.85, humidity=41.35, cloud=0.0, wind=17.06, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:21:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:22:22.185 [DEBUG] [Thread-128868] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:22:22.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:22:22.277 [DEBUG] [Thread-128871] [transport.py] [_log()] starting thread (client mode): 0xa2d3efe0
2026-02-11T12:22:22.277 [DEBUG] [Thread-128871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:22:22.292 [DEBUG] [Thread-128871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:22:22.292 [INFO] [Thread-128871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] client lang: <none>
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] server lang: <none>
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] kex follows: False
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] Compression: none
2026-02-11T12:22:22.300 [DEBUG] [Thread-128871] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:22:22.362 [DEBUG] [Thread-128871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:22:22.363 [DEBUG] [Thread-128871] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:22:22.363 [DEBUG] [Thread-128871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:22:22.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:22:22.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:22:22.419 [DEBUG] [Thread-128871] [transport.py] [_log()] userauth is OK
2026-02-11T12:22:22.420 [DEBUG] [Thread-128871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:22:22.420 [DEBUG] [Thread-128871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:22:22.420 [DEBUG] [Thread-128871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:22:22.420 [DEBUG] [Thread-128871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:22:22.439 [INFO] [Thread-128871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:22:22.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:22:22.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:22:23.283 [DEBUG] [Thread-128871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:22:23.283 [DEBUG] [Thread-128871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:22:23.331 [DEBUG] [Thread-128871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:22:23.331 [DEBUG] [Thread-128871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:22:23.340 [DEBUG] [Thread-128871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:22:23.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:22:23.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:22:23.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:22:23.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:22:23.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:22:23.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:22:23.374 [DEBUG] [Thread-128871] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:22:24.897 [DEBUG] [Thread-128873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:39.950 [DEBUG] [Thread-128874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:53.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:22:53.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:22:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:22:54.986 [DEBUG] [Thread-128875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:22:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 22, 30), 13.93, 41.17, 0.0, 19.92, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:22:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:22:30
2026-02-11T12:22:55.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:22:55.808 [DEBUG] [Thread-128876] [transport.py] [_log()] starting thread (client mode): 0xa2d3c9a0
2026-02-11T12:22:55.808 [DEBUG] [Thread-128876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:22:55.829 [DEBUG] [Thread-128876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:22:55.829 [INFO] [Thread-128876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] client lang: <none>
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] server lang: <none>
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] kex follows: False
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] Compression: none
2026-02-11T12:22:55.832 [DEBUG] [Thread-128876] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:22:55.851 [DEBUG] [Thread-128876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:22:55.852 [DEBUG] [Thread-128876] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:22:55.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:22:55.853 [DEBUG] [Thread-128876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:22:55.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:22:55.854 [DEBUG] [Thread-128876] [transport.py] [_log()] userauth is OK
2026-02-11T12:22:55.855 [DEBUG] [Thread-128876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:22:55.855 [DEBUG] [Thread-128876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:22:55.855 [DEBUG] [Thread-128876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:22:55.855 [DEBUG] [Thread-128876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:22:55.887 [INFO] [Thread-128876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:22:55.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:22:56.529 [DEBUG] [Thread-128876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:22:56.530 [DEBUG] [Thread-128876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:22:56.530 [DEBUG] [Thread-128876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:22:56.570 [DEBUG] [Thread-128876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:22:56.570 [DEBUG] [Thread-128876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:22:56.573 [DEBUG] [Thread-128876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:22:56.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:22:56.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:22:56.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:22:56.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:22:56.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:22:56.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:22:56.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:22:56.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:22:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:22:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.432088 -999.00  +22.60  21.88     47  +10.90 1 2 1 1 1   888    0 12.49 13.50 ----- 16.7 21.9 292.6 30.5 30.3 -16.1 29.5 -14.4 28.6 -13.7 29.4 -13.9
2026-02-11T12:22:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:22:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:22:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.432088
2026-02-11T12:22:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:22:56.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:22:56.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:22:56.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:22:56.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:22:56.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:22:30', tmtdew=13.93, humidity=41.17, cloud=0.0, wind=19.92, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:22:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:22:56.598 [DEBUG] [Thread-128876] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:22:56.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:22:56.690 [DEBUG] [Thread-128879] [transport.py] [_log()] starting thread (client mode): 0xa2d6ca90
2026-02-11T12:22:56.690 [DEBUG] [Thread-128879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:22:56.705 [DEBUG] [Thread-128879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:22:56.705 [INFO] [Thread-128879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] client lang: <none>
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] server lang: <none>
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] kex follows: False
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:22:56.713 [DEBUG] [Thread-128879] [transport.py] [_log()] Compression: none
2026-02-11T12:22:56.714 [DEBUG] [Thread-128879] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:22:56.771 [DEBUG] [Thread-128879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:22:56.772 [DEBUG] [Thread-128879] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:22:56.772 [DEBUG] [Thread-128879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:22:56.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:22:56.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:22:56.827 [DEBUG] [Thread-128879] [transport.py] [_log()] userauth is OK
2026-02-11T12:22:56.827 [DEBUG] [Thread-128879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:22:56.827 [DEBUG] [Thread-128879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:22:56.828 [DEBUG] [Thread-128879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:22:56.828 [DEBUG] [Thread-128879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:22:56.847 [INFO] [Thread-128879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:22:56.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:22:56.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:22:57.677 [DEBUG] [Thread-128879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:22:57.677 [DEBUG] [Thread-128879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:22:57.725 [DEBUG] [Thread-128879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:22:57.726 [DEBUG] [Thread-128879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:22:57.735 [DEBUG] [Thread-128879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:22:57.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:22:57.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:22:57.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
2026-02-11T12:22:57.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:22:57.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:22:57.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:22:57.776 [DEBUG] [Thread-128879] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:23:07.167 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:23:07.168 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:23:10.023 [DEBUG] [Thread-128881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:23:13.944 [DEBUG] [Thread-128882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:23:25.080 [DEBUG] [Thread-128883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:23:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:23:27.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:23:27.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
2026-02-11T12:23:29.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 23, 6), 14.01, 40.95, 0.0, 14.86, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:23:29.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:23:06
2026-02-11T12:23:30.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:23:30.172 [DEBUG] [Thread-128884] [transport.py] [_log()] starting thread (client mode): 0xa2d3cf70
2026-02-11T12:23:30.172 [DEBUG] [Thread-128884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:23:30.192 [DEBUG] [Thread-128884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:23:30.192 [INFO] [Thread-128884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] client lang: <none>
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] server lang: <none>
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] kex follows: False
2026-02-11T12:23:30.195 [DEBUG] [Thread-128884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:23:30.196 [DEBUG] [Thread-128884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:23:30.196 [DEBUG] [Thread-128884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:23:30.196 [DEBUG] [Thread-128884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:23:30.196 [DEBUG] [Thread-128884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:23:30.196 [DEBUG] [Thread-128884] [transport.py] [_log()] Compression: none
2026-02-11T12:23:30.196 [DEBUG] [Thread-128884] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:23:30.214 [DEBUG] [Thread-128884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:23:30.215 [DEBUG] [Thread-128884] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:23:30.215 [DEBUG] [Thread-128884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:23:30.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:23:30.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:23:30.218 [DEBUG] [Thread-128884] [transport.py] [_log()] userauth is OK
2026-02-11T12:23:30.218 [DEBUG] [Thread-128884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:23:30.218 [DEBUG] [Thread-128884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:23:30.218 [DEBUG] [Thread-128884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:23:30.219 [DEBUG] [Thread-128884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:23:30.243 [INFO] [Thread-128884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:23:30.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:23:30.864 [DEBUG] [Thread-128884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:23:30.864 [DEBUG] [Thread-128884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:23:30.864 [DEBUG] [Thread-128884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:23:30.905 [DEBUG] [Thread-128884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:23:30.906 [DEBUG] [Thread-128884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:23:30.909 [DEBUG] [Thread-128884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:23:30.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:23:30.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:23:30.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:23:30.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:23:30.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:23:30.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:23:30.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:23:30.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:23:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:23:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.432783 -999.00  +22.80  12.71     47  +11.00 1 2 1 1 1   888    0 12.29 2.90 ----- 11.7 12.7 304.8 22.4 30.3 -15.7 29.6 -16.7 28.6 -11.8 29.6 -12.1
2026-02-11T12:23:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:23:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:23:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.432783
2026-02-11T12:23:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:23:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:23:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:23:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:23:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:23:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:23:06', tmtdew=14.01, humidity=40.95, cloud=0.0, wind=14.86, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:23:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:23:30.934 [DEBUG] [Thread-128884] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:23:31.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:23:31.029 [DEBUG] [Thread-128887] [transport.py] [_log()] starting thread (client mode): 0xa2d3d8d0
2026-02-11T12:23:31.029 [DEBUG] [Thread-128887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:23:31.044 [DEBUG] [Thread-128887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:23:31.044 [INFO] [Thread-128887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:23:31.051 [DEBUG] [Thread-128887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:23:31.052 [DEBUG] [Thread-128887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:23:31.052 [DEBUG] [Thread-128887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:23:31.052 [DEBUG] [Thread-128887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:23:31.052 [DEBUG] [Thread-128887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:23:31.052 [DEBUG] [Thread-128887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:23:31.052 [DEBUG] [Thread-128887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] client lang: <none>
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] server lang: <none>
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] kex follows: False
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:23:31.053 [DEBUG] [Thread-128887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:23:31.054 [DEBUG] [Thread-128887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:23:31.054 [DEBUG] [Thread-128887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:23:31.054 [DEBUG] [Thread-128887] [transport.py] [_log()] Compression: none
2026-02-11T12:23:31.054 [DEBUG] [Thread-128887] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:23:31.115 [DEBUG] [Thread-128887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:23:31.116 [DEBUG] [Thread-128887] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:23:31.117 [DEBUG] [Thread-128887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:23:31.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:23:31.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:23:31.175 [DEBUG] [Thread-128887] [transport.py] [_log()] userauth is OK
2026-02-11T12:23:31.175 [DEBUG] [Thread-128887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:23:31.176 [DEBUG] [Thread-128887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:23:31.176 [DEBUG] [Thread-128887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:23:31.176 [DEBUG] [Thread-128887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:23:31.196 [INFO] [Thread-128887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:23:31.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:23:31.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:23:32.034 [DEBUG] [Thread-128887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:23:32.034 [DEBUG] [Thread-128887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:23:32.085 [DEBUG] [Thread-128887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:23:32.085 [DEBUG] [Thread-128887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:23:32.098 [DEBUG] [Thread-128887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:23:32.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:23:32.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')
2026-02-11T12:23:32.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:23:32.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:23:32.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:23:32.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:23:32.134 [DEBUG] [Thread-128887] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:23:40.118 [DEBUG] [Thread-128889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:23:55.165 [DEBUG] [Thread-128890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:24:02.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:24:02.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:24:02.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:24:04.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 23, 41), 14.65, 39.34, 0.0, 19.13, 23.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:24:04.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:23:41
2026-02-11T12:24:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:24:04.740 [DEBUG] [Thread-128891] [transport.py] [_log()] starting thread (client mode): 0xa2d3d4b0
2026-02-11T12:24:04.740 [DEBUG] [Thread-128891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:24:04.761 [DEBUG] [Thread-128891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:24:04.761 [INFO] [Thread-128891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:24:04.764 [DEBUG] [Thread-128891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:24:04.764 [DEBUG] [Thread-128891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:24:04.764 [DEBUG] [Thread-128891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:24:04.764 [DEBUG] [Thread-128891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:04.764 [DEBUG] [Thread-128891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] client lang: <none>
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] server lang: <none>
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] kex follows: False
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] Compression: none
2026-02-11T12:24:04.765 [DEBUG] [Thread-128891] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:24:04.781 [DEBUG] [Thread-128891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:24:04.781 [DEBUG] [Thread-128891] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:24:04.782 [DEBUG] [Thread-128891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:24:04.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:24:04.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:24:04.784 [DEBUG] [Thread-128891] [transport.py] [_log()] userauth is OK
2026-02-11T12:24:04.784 [DEBUG] [Thread-128891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:24:04.784 [DEBUG] [Thread-128891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:24:04.784 [DEBUG] [Thread-128891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:24:04.785 [DEBUG] [Thread-128891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:24:04.821 [INFO] [Thread-128891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:24:04.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:24:05.467 [DEBUG] [Thread-128891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:24:05.467 [DEBUG] [Thread-128891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:24:05.468 [DEBUG] [Thread-128891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:24:05.508 [DEBUG] [Thread-128891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:24:05.509 [DEBUG] [Thread-128891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:24:05.512 [DEBUG] [Thread-128891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:24:05.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:24:05.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:24:05.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:24:05.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:24:05.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:24:05.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:24:05.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:24:05.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:24:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:24:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.433130 -999.00  +23.20  22.38     46  +11.20 1 2 1 1 1   888    0 12.23 -1.34 ----- 21.9 22.4 277.8 28.7 30.7 -15.1 29.8 -12.3 28.9 -13.2 29.9 -12.2
2026-02-11T12:24:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:24:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:24:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.433130
2026-02-11T12:24:05.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:24:05.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:24:05.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:24:05.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:24:05.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:24:05.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:23:41', tmtdew=14.65, humidity=39.34, cloud=0.0, wind=19.13, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:23:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:24:05.540 [DEBUG] [Thread-128891] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:24:05.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:24:05.631 [DEBUG] [Thread-128894] [transport.py] [_log()] starting thread (client mode): 0xa2d3f1f0
2026-02-11T12:24:05.631 [DEBUG] [Thread-128894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:24:05.646 [DEBUG] [Thread-128894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:24:05.646 [INFO] [Thread-128894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:24:05.654 [DEBUG] [Thread-128894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:24:05.655 [DEBUG] [Thread-128894] [transport.py] [_log()] client lang: <none>
2026-02-11T12:24:05.656 [DEBUG] [Thread-128894] [transport.py] [_log()] server lang: <none>
2026-02-11T12:24:05.656 [DEBUG] [Thread-128894] [transport.py] [_log()] kex follows: False
2026-02-11T12:24:05.656 [DEBUG] [Thread-128894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:24:05.656 [DEBUG] [Thread-128894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:24:05.656 [DEBUG] [Thread-128894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:24:05.656 [DEBUG] [Thread-128894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:24:05.657 [DEBUG] [Thread-128894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:24:05.657 [DEBUG] [Thread-128894] [transport.py] [_log()] Compression: none
2026-02-11T12:24:05.657 [DEBUG] [Thread-128894] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:24:05.717 [DEBUG] [Thread-128894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:24:05.718 [DEBUG] [Thread-128894] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:24:05.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:24:05.719 [DEBUG] [Thread-128894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:24:05.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:24:05.778 [DEBUG] [Thread-128894] [transport.py] [_log()] userauth is OK
2026-02-11T12:24:05.779 [DEBUG] [Thread-128894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:24:05.779 [DEBUG] [Thread-128894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:24:05.779 [DEBUG] [Thread-128894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:24:05.779 [DEBUG] [Thread-128894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:24:05.803 [INFO] [Thread-128894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:24:05.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:24:05.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:24:06.636 [DEBUG] [Thread-128894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:24:06.637 [DEBUG] [Thread-128894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:24:06.684 [DEBUG] [Thread-128894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:24:06.684 [DEBUG] [Thread-128894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:24:06.692 [DEBUG] [Thread-128894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:24:06.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:24:06.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:24:06.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
2026-02-11T12:24:06.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:24:06.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:24:06.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:24:06.737 [DEBUG] [Thread-128894] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:24:07.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:24:07.308 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:24:10.202 [DEBUG] [Thread-128896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:24:13.996 [DEBUG] [Thread-128897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:24:25.257 [DEBUG] [Thread-128898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:24:36.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:24:36.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:24:36.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:24:38.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 24, 16), 14.12, 40.62, 0.0, 22.2, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:24:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:24:16
2026-02-11T12:24:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:24:39.202 [DEBUG] [Thread-128899] [transport.py] [_log()] starting thread (client mode): 0xa2d3ea70
2026-02-11T12:24:39.202 [DEBUG] [Thread-128899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:24:39.218 [DEBUG] [Thread-128899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:24:39.218 [INFO] [Thread-128899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:24:39.221 [DEBUG] [Thread-128899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:24:39.221 [DEBUG] [Thread-128899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] client lang: <none>
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] server lang: <none>
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] kex follows: False
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] Compression: none
2026-02-11T12:24:39.222 [DEBUG] [Thread-128899] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:24:39.240 [DEBUG] [Thread-128899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:24:39.240 [DEBUG] [Thread-128899] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:24:39.241 [DEBUG] [Thread-128899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:24:39.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:24:39.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:24:39.243 [DEBUG] [Thread-128899] [transport.py] [_log()] userauth is OK
2026-02-11T12:24:39.243 [DEBUG] [Thread-128899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:24:39.243 [DEBUG] [Thread-128899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:24:39.244 [DEBUG] [Thread-128899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:24:39.244 [DEBUG] [Thread-128899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:24:39.267 [INFO] [Thread-128899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:24:39.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:24:40.012 [DEBUG] [Thread-128899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:24:40.012 [DEBUG] [Thread-128899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:24:40.013 [DEBUG] [Thread-128899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:24:40.053 [DEBUG] [Thread-128899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:24:40.054 [DEBUG] [Thread-128899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:24:40.057 [DEBUG] [Thread-128899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:24:40.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:24:40.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:24:40.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:24:40.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:24:40.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:24:40.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:24:40.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:24:40.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:24:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:24:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.433477 -999.00  +23.50  22.18     45  +11.00 1 2 1 1 1   888    0 11.89 -2.38 ----- 16.9 22.2 281.0 28.4 30.5 -13.9 29.8 -14.3 28.9 -10.4 29.7 -11.6
2026-02-11T12:24:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:24:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:24:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.433477
2026-02-11T12:24:40.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:24:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:24:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:24:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:24:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:24:40.080 [DEBUG] [Thread-128899] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:24:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:24:16', tmtdew=14.12, humidity=40.62, cloud=0.0, wind=22.2, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:24:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:24:40.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:24:40.174 [DEBUG] [Thread-128902] [transport.py] [_log()] starting thread (client mode): 0xa2d6d330
2026-02-11T12:24:40.174 [DEBUG] [Thread-128902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:24:40.190 [DEBUG] [Thread-128902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:24:40.190 [INFO] [Thread-128902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:24:40.197 [DEBUG] [Thread-128902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] client lang: <none>
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] server lang: <none>
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] kex follows: False
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:24:40.198 [DEBUG] [Thread-128902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:24:40.199 [DEBUG] [Thread-128902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:24:40.199 [DEBUG] [Thread-128902] [transport.py] [_log()] Compression: none
2026-02-11T12:24:40.199 [DEBUG] [Thread-128902] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:24:40.258 [DEBUG] [Thread-128902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:24:40.258 [DEBUG] [Thread-128902] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:24:40.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:24:40.259 [DEBUG] [Thread-128902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:24:40.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:24:40.297 [DEBUG] [Thread-128904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:24:40.313 [DEBUG] [Thread-128902] [transport.py] [_log()] userauth is OK
2026-02-11T12:24:40.314 [DEBUG] [Thread-128902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:24:40.314 [DEBUG] [Thread-128902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:24:40.314 [DEBUG] [Thread-128902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:24:40.314 [DEBUG] [Thread-128902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:24:40.333 [INFO] [Thread-128902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:24:40.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:24:40.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:24:41.210 [DEBUG] [Thread-128902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:24:41.211 [DEBUG] [Thread-128902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:24:41.258 [DEBUG] [Thread-128902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:24:41.259 [DEBUG] [Thread-128902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:24:41.269 [DEBUG] [Thread-128902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:24:41.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:24: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')
2026-02-11T12:24:41.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:24:41.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:24:41.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:24:41.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:24:41.311 [DEBUG] [Thread-128902] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:24:55.346 [DEBUG] [Thread-128905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:25:07.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:25:07.450 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:25:10.380 [DEBUG] [Thread-128906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:25:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:25:11.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:25:11.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:25:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 24, 51), 14.77, 38.96, 0.0, 22.67, 23.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:25:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:24:51
2026-02-11T12:25:13.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:25:13.731 [DEBUG] [Thread-128907] [transport.py] [_log()] starting thread (client mode): 0xa2d78040
2026-02-11T12:25:13.732 [DEBUG] [Thread-128907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:25:13.754 [DEBUG] [Thread-128907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:25:13.755 [INFO] [Thread-128907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:25:13.758 [DEBUG] [Thread-128907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:25:13.759 [DEBUG] [Thread-128907] [transport.py] [_log()] client lang: <none>
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] server lang: <none>
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] kex follows: False
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:25:13.760 [DEBUG] [Thread-128907] [transport.py] [_log()] Compression: none
2026-02-11T12:25:13.761 [DEBUG] [Thread-128907] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:25:13.783 [DEBUG] [Thread-128907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:25:13.784 [DEBUG] [Thread-128907] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:25:13.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:25:13.785 [DEBUG] [Thread-128907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:25:13.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:25:13.825 [DEBUG] [Thread-128907] [transport.py] [_log()] userauth is OK
2026-02-11T12:25:13.825 [DEBUG] [Thread-128907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:25:13.825 [DEBUG] [Thread-128907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:25:13.825 [DEBUG] [Thread-128907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:25:13.826 [DEBUG] [Thread-128907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:25:13.858 [INFO] [Thread-128907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:25:13.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:25:14.048 [DEBUG] [Thread-128909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:25:14.689 [DEBUG] [Thread-128907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:25:14.689 [DEBUG] [Thread-128907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:25:14.690 [DEBUG] [Thread-128907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:25:14.731 [DEBUG] [Thread-128907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:25:14.731 [DEBUG] [Thread-128907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:25:14.734 [DEBUG] [Thread-128907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:25:14.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:25:14.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:25:14.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:25:14.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:25:14.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:25:14.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:25:14.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:25:14.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:25:14.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:25:14.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.433824 -999.00  +23.50  24.34     45  +10.90 1 2 1 1 1   888    0 11.93 -2.14 ----- 23.6 24.3 279.6 30.3 30.2 -16.0 29.8 -16.5 28.2 -15.5 29.4 -13.2
2026-02-11T12:25:14.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:25:14.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:25:14.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.433824
2026-02-11T12:25:14.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:25:14.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:25:14.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:25:14.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:25:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:25:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:24:51', tmtdew=14.77, humidity=38.96, cloud=0.0, wind=22.67, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:24:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:25:14.759 [DEBUG] [Thread-128907] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:25:14.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:25:14.853 [DEBUG] [Thread-128911] [transport.py] [_log()] starting thread (client mode): 0xa2d7a1d0
2026-02-11T12:25:14.853 [DEBUG] [Thread-128911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:25:14.868 [DEBUG] [Thread-128911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:25:14.868 [INFO] [Thread-128911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] client lang: <none>
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] server lang: <none>
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] kex follows: False
2026-02-11T12:25:14.876 [DEBUG] [Thread-128911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:25:14.877 [DEBUG] [Thread-128911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:25:14.877 [DEBUG] [Thread-128911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:25:14.877 [DEBUG] [Thread-128911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:25:14.877 [DEBUG] [Thread-128911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:25:14.877 [DEBUG] [Thread-128911] [transport.py] [_log()] Compression: none
2026-02-11T12:25:14.877 [DEBUG] [Thread-128911] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:25:14.934 [DEBUG] [Thread-128911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:25:14.934 [DEBUG] [Thread-128911] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:25:14.935 [DEBUG] [Thread-128911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:25:14.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:25:14.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:25:14.989 [DEBUG] [Thread-128911] [transport.py] [_log()] userauth is OK
2026-02-11T12:25:14.990 [DEBUG] [Thread-128911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:25:14.990 [DEBUG] [Thread-128911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:25:14.990 [DEBUG] [Thread-128911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:25:14.990 [DEBUG] [Thread-128911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:25:15.008 [INFO] [Thread-128911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:25:15.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:25:15.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:25:15.813 [DEBUG] [Thread-128911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:25:15.813 [DEBUG] [Thread-128911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:25:15.861 [DEBUG] [Thread-128911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:25:15.861 [DEBUG] [Thread-128911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:25:15.871 [DEBUG] [Thread-128911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:25:15.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:25:15.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:25:15.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
2026-02-11T12:25:15.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:25:15.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:25:15.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:25:15.907 [DEBUG] [Thread-128911] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:25:25.414 [DEBUG] [Thread-128913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:25:40.467 [DEBUG] [Thread-128914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:25:45.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:25:45.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:25:45.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:25:47.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 25, 26), 14.79, 38.88, 0.0, 24.07, 23.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:25:47.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:25:26
2026-02-11T12:25:48.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:25:48.371 [DEBUG] [Thread-128915] [transport.py] [_log()] starting thread (client mode): 0xa2d6fd00
2026-02-11T12:25:48.371 [DEBUG] [Thread-128915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:25:48.386 [DEBUG] [Thread-128915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:25:48.387 [INFO] [Thread-128915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] client lang: <none>
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] server lang: <none>
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] kex follows: False
2026-02-11T12:25:48.389 [DEBUG] [Thread-128915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:25:48.390 [DEBUG] [Thread-128915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:25:48.390 [DEBUG] [Thread-128915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:25:48.390 [DEBUG] [Thread-128915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:25:48.390 [DEBUG] [Thread-128915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:25:48.390 [DEBUG] [Thread-128915] [transport.py] [_log()] Compression: none
2026-02-11T12:25:48.390 [DEBUG] [Thread-128915] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:25:48.401 [DEBUG] [Thread-128915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:25:48.401 [DEBUG] [Thread-128915] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:25:48.402 [DEBUG] [Thread-128915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:25:48.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:25:48.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:25:48.403 [DEBUG] [Thread-128915] [transport.py] [_log()] userauth is OK
2026-02-11T12:25:48.403 [DEBUG] [Thread-128915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:25:48.403 [DEBUG] [Thread-128915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:25:48.403 [DEBUG] [Thread-128915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:25:48.403 [DEBUG] [Thread-128915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:25:48.426 [INFO] [Thread-128915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:25:48.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:25:49.080 [DEBUG] [Thread-128915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:25:49.080 [DEBUG] [Thread-128915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:25:49.081 [DEBUG] [Thread-128915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:25:49.122 [DEBUG] [Thread-128915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:25:49.122 [DEBUG] [Thread-128915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:25:49.125 [DEBUG] [Thread-128915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:25:49.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:25:49.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:25:49.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:25:49.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:25:49.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:25:49.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:25:49.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:25:49.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:25:49.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:25:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.434172 -999.00  +23.30  23.80     45  +10.80 1 2 1 1 1   888    0 12.18 -1.02 ----- 20.8 23.8 279.8 30.6 29.7 -19.2 29.3 -17.9 28.0 -16.4 28.8 -17.1
2026-02-11T12:25:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:25:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:25:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.434172
2026-02-11T12:25:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:25:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:25:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:25:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:25:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:25:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:25:26', tmtdew=14.79, humidity=38.88, cloud=0.0, wind=24.07, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:25:12.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:25:49.153 [DEBUG] [Thread-128915] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:25:49.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:25:49.249 [DEBUG] [Thread-128918] [transport.py] [_log()] starting thread (client mode): 0xa2d3de10
2026-02-11T12:25:49.250 [DEBUG] [Thread-128918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:25:49.264 [DEBUG] [Thread-128918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:25:49.264 [INFO] [Thread-128918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] client lang: <none>
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] server lang: <none>
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] kex follows: False
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:25:49.272 [DEBUG] [Thread-128918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:25:49.273 [DEBUG] [Thread-128918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:25:49.273 [DEBUG] [Thread-128918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:25:49.273 [DEBUG] [Thread-128918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:25:49.273 [DEBUG] [Thread-128918] [transport.py] [_log()] Compression: none
2026-02-11T12:25:49.273 [DEBUG] [Thread-128918] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:25:49.334 [DEBUG] [Thread-128918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:25:49.334 [DEBUG] [Thread-128918] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:25:49.335 [DEBUG] [Thread-128918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:25:49.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:25:49.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:25:49.393 [DEBUG] [Thread-128918] [transport.py] [_log()] userauth is OK
2026-02-11T12:25:49.393 [DEBUG] [Thread-128918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:25:49.393 [DEBUG] [Thread-128918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:25:49.394 [DEBUG] [Thread-128918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:25:49.394 [DEBUG] [Thread-128918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:25:49.412 [INFO] [Thread-128918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:25:49.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:25:49.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:25:50.261 [DEBUG] [Thread-128918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:25:50.262 [DEBUG] [Thread-128918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:25:50.309 [DEBUG] [Thread-128918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:25:50.309 [DEBUG] [Thread-128918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:25:50.319 [DEBUG] [Thread-128918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:25:50.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:25:50.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')
2026-02-11T12:25:50.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
2026-02-11T12:25:50.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:25:50.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:25:50.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:25:50.356 [DEBUG] [Thread-128918] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:25:55.503 [DEBUG] [Thread-128920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:07.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:07.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:10.568 [DEBUG] [Thread-128921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:14.108 [DEBUG] [Thread-128922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:26:20.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:26:20.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:26:22.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 26, 2), 14.91, 38.58, 0.0, 26.06, 23.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:26:22.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:26:02
2026-02-11T12:26:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:26:23.255 [DEBUG] [Thread-128923] [transport.py] [_log()] starting thread (client mode): 0xa2d6e380
2026-02-11T12:26:23.255 [DEBUG] [Thread-128923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:26:23.271 [DEBUG] [Thread-128923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:26:23.271 [INFO] [Thread-128923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] client lang: <none>
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] server lang: <none>
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] kex follows: False
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] Compression: none
2026-02-11T12:26:23.276 [DEBUG] [Thread-128923] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:26:23.294 [DEBUG] [Thread-128923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:26:23.295 [DEBUG] [Thread-128923] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:26:23.296 [DEBUG] [Thread-128923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:26:23.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:26:23.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:26:23.297 [DEBUG] [Thread-128923] [transport.py] [_log()] userauth is OK
2026-02-11T12:26:23.298 [DEBUG] [Thread-128923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:26:23.298 [DEBUG] [Thread-128923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:26:23.298 [DEBUG] [Thread-128923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:26:23.298 [DEBUG] [Thread-128923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:26:23.317 [INFO] [Thread-128923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:26:23.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:26:24.104 [DEBUG] [Thread-128923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:26:24.104 [DEBUG] [Thread-128923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:26:24.104 [DEBUG] [Thread-128923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:26:24.145 [DEBUG] [Thread-128923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:26:24.146 [DEBUG] [Thread-128923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:26:24.149 [DEBUG] [Thread-128923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:26:24.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:26:24.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:26:24.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:26:24.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:26:24.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:26:24.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:26:24.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:26:24.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:26:24.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:26:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.434519 -999.00  +23.00  18.96     46  +10.90 1 2 1 1 1   888    0 11.91 -3.17 ----- 19.7 19.0 269.6 26.3 29.4 -18.9 28.9 -17.0 27.7 -16.1 28.6 -17.0
2026-02-11T12:26:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:26:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:26:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.434519
2026-02-11T12:26:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:26:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:26:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:26:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:26:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:26:24.177 [DEBUG] [Thread-128923] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:26:24.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:26:02', tmtdew=14.91, humidity=38.58, cloud=0.0, wind=26.06, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:25:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:26:24.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:26:24.274 [DEBUG] [Thread-128926] [transport.py] [_log()] starting thread (client mode): 0xa2d6da50
2026-02-11T12:26:24.274 [DEBUG] [Thread-128926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:26:24.288 [DEBUG] [Thread-128926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:26:24.288 [INFO] [Thread-128926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:26:24.296 [DEBUG] [Thread-128926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:26:24.296 [DEBUG] [Thread-128926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:26:24.297 [DEBUG] [Thread-128926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:26:24.297 [DEBUG] [Thread-128926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:24.297 [DEBUG] [Thread-128926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:24.297 [DEBUG] [Thread-128926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:24.297 [DEBUG] [Thread-128926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:24.297 [DEBUG] [Thread-128926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] client lang: <none>
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] server lang: <none>
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] kex follows: False
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] Compression: none
2026-02-11T12:26:24.298 [DEBUG] [Thread-128926] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:26:24.361 [DEBUG] [Thread-128926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:26:24.361 [DEBUG] [Thread-128926] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:26:24.362 [DEBUG] [Thread-128926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:26:24.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:26:24.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:26:24.421 [DEBUG] [Thread-128926] [transport.py] [_log()] userauth is OK
2026-02-11T12:26:24.421 [DEBUG] [Thread-128926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:26:24.421 [DEBUG] [Thread-128926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:26:24.422 [DEBUG] [Thread-128926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:26:24.422 [DEBUG] [Thread-128926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:26:24.445 [INFO] [Thread-128926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:26:24.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:26:24.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:26:25.297 [DEBUG] [Thread-128926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:26:25.298 [DEBUG] [Thread-128926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:26:25.346 [DEBUG] [Thread-128926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:26:25.346 [DEBUG] [Thread-128926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:26:25.355 [DEBUG] [Thread-128926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:26:25.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:26: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')
2026-02-11T12:26:25.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:26:25.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:26:25.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:26:25.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:26:25.395 [DEBUG] [Thread-128926] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:26:25.603 [DEBUG] [Thread-128928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:40.660 [DEBUG] [Thread-128929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:55.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:26:55.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:26:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:26:55.698 [DEBUG] [Thread-128930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:26:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 26, 37), 15.44, 37.42, 0.0, 19.87, 24.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:26:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:26:37
2026-02-11T12:26:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:26:57.860 [DEBUG] [Thread-128931] [transport.py] [_log()] starting thread (client mode): 0xa2d6e1a0
2026-02-11T12:26:57.860 [DEBUG] [Thread-128931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:26:57.880 [DEBUG] [Thread-128931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:26:57.880 [INFO] [Thread-128931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] client lang: <none>
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] server lang: <none>
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] kex follows: False
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] Compression: none
2026-02-11T12:26:57.884 [DEBUG] [Thread-128931] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:26:57.900 [DEBUG] [Thread-128931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:26:57.900 [DEBUG] [Thread-128931] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:26:57.901 [DEBUG] [Thread-128931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:26:57.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:26:57.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:26:57.902 [DEBUG] [Thread-128931] [transport.py] [_log()] userauth is OK
2026-02-11T12:26:57.903 [DEBUG] [Thread-128931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:26:57.903 [DEBUG] [Thread-128931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:26:57.903 [DEBUG] [Thread-128931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:26:57.903 [DEBUG] [Thread-128931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:26:57.923 [INFO] [Thread-128931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:26:57.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:26:58.591 [DEBUG] [Thread-128931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:26:58.591 [DEBUG] [Thread-128931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:26:58.592 [DEBUG] [Thread-128931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:26:58.632 [DEBUG] [Thread-128931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:26:58.633 [DEBUG] [Thread-128931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:26:58.636 [DEBUG] [Thread-128931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:26:58.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:26:58.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:26:58.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:26:58.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:26:58.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:26:58.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:26:58.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:26:58.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:26:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:26:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.434866 -999.00  +22.60  16.35     46  +10.60 1 2 1 1 1   888    0 11.83 -7.83 ----- 15.3 16.4 267.6 20.0 29.0 -19.2 28.8 -16.4 27.4 -18.8 28.1 -16.6
2026-02-11T12:26:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:26:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:26:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.434866
2026-02-11T12:26:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:26:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:26:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:26:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:26:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:26:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:26:37', tmtdew=15.44, humidity=37.42, cloud=0.0, wind=19.87, temperature=24.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:26:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:26:58.662 [DEBUG] [Thread-128931] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:26:58.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:26:58.758 [DEBUG] [Thread-128934] [transport.py] [_log()] starting thread (client mode): 0xa2d6f340
2026-02-11T12:26:58.758 [DEBUG] [Thread-128934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:26:58.773 [DEBUG] [Thread-128934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:26:58.773 [INFO] [Thread-128934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] client lang: <none>
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] server lang: <none>
2026-02-11T12:26:58.781 [DEBUG] [Thread-128934] [transport.py] [_log()] kex follows: False
2026-02-11T12:26:58.782 [DEBUG] [Thread-128934] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:26:58.782 [DEBUG] [Thread-128934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:26:58.782 [DEBUG] [Thread-128934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:26:58.782 [DEBUG] [Thread-128934] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:26:58.782 [DEBUG] [Thread-128934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:26:58.782 [DEBUG] [Thread-128934] [transport.py] [_log()] Compression: none
2026-02-11T12:26:58.782 [DEBUG] [Thread-128934] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:26:58.841 [DEBUG] [Thread-128934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:26:58.841 [DEBUG] [Thread-128934] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:26:58.842 [DEBUG] [Thread-128934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:26:58.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:26:58.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:26:58.896 [DEBUG] [Thread-128934] [transport.py] [_log()] userauth is OK
2026-02-11T12:26:58.896 [DEBUG] [Thread-128934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:26:58.897 [DEBUG] [Thread-128934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:26:58.897 [DEBUG] [Thread-128934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:26:58.897 [DEBUG] [Thread-128934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:26:58.916 [INFO] [Thread-128934] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:26:58.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:26:58.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:26:59.740 [DEBUG] [Thread-128934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:26:59.740 [DEBUG] [Thread-128934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:26:59.788 [DEBUG] [Thread-128934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:26:59.789 [DEBUG] [Thread-128934] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:26:59.798 [DEBUG] [Thread-128934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:26:59.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:26:59.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')
2026-02-11T12:26: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
2026-02-11T12:26:59.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:26:59.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:26:59.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:26:59.835 [DEBUG] [Thread-128934] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:27:07.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:27:07.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:27:10.732 [DEBUG] [Thread-128936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:27:14.168 [DEBUG] [Thread-128937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:27:25.792 [DEBUG] [Thread-128938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:27:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:27:29.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:27:29.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:27:31.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 27, 12), 13.98, 40.77, 0.0, 21.93, 22.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:27:31.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:27:12
2026-02-11T12:27:32.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:27:32.251 [DEBUG] [Thread-128939] [transport.py] [_log()] starting thread (client mode): 0xa2d19900
2026-02-11T12:27:32.251 [DEBUG] [Thread-128939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:27:32.266 [DEBUG] [Thread-128939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:27:32.266 [INFO] [Thread-128939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:27:32.269 [DEBUG] [Thread-128939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:27:32.269 [DEBUG] [Thread-128939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:27:32.269 [DEBUG] [Thread-128939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:27:32.269 [DEBUG] [Thread-128939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] client lang: <none>
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] server lang: <none>
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] kex follows: False
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] Compression: none
2026-02-11T12:27:32.270 [DEBUG] [Thread-128939] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:27:32.286 [DEBUG] [Thread-128939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:27:32.286 [DEBUG] [Thread-128939] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:27:32.287 [DEBUG] [Thread-128939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:27:32.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:27:32.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:27:32.288 [DEBUG] [Thread-128939] [transport.py] [_log()] userauth is OK
2026-02-11T12:27:32.289 [DEBUG] [Thread-128939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:27:32.289 [DEBUG] [Thread-128939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:27:32.289 [DEBUG] [Thread-128939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:27:32.289 [DEBUG] [Thread-128939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:27:32.304 [INFO] [Thread-128939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:27:32.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:27:32.943 [DEBUG] [Thread-128939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:27:32.943 [DEBUG] [Thread-128939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:27:32.943 [DEBUG] [Thread-128939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:27:32.985 [DEBUG] [Thread-128939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:27:32.985 [DEBUG] [Thread-128939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:27:32.987 [DEBUG] [Thread-128939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:27:32.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:27:32.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:27:32.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:27:33.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:27:33.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:27:33.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:27:33.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:27:33.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:27:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:27:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.435560 -999.00  +22.30  15.76     48  +10.90 1 2 1 1 1   888    0 11.77 -21.36 ----- 13.1 15.8 278.8 23.2 28.5 -17.4 28.4 -15.2 27.1 -13.9 27.8 -15.0
2026-02-11T12:27:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:27:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:27:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.435560
2026-02-11T12:27:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:27:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:27:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:27:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:27:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:27:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:27:12', tmtdew=13.98, humidity=40.77, cloud=0.0, wind=21.93, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:27:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:27:33.008 [DEBUG] [Thread-128939] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:27:33.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:27:33.115 [DEBUG] [Thread-128942] [transport.py] [_log()] starting thread (client mode): 0xa2d79c90
2026-02-11T12:27:33.115 [DEBUG] [Thread-128942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:27:33.130 [DEBUG] [Thread-128942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:27:33.130 [INFO] [Thread-128942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:27:33.137 [DEBUG] [Thread-128942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] client lang: <none>
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] server lang: <none>
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] kex follows: False
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] Compression: none
2026-02-11T12:27:33.138 [DEBUG] [Thread-128942] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:27:33.195 [DEBUG] [Thread-128942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:27:33.195 [DEBUG] [Thread-128942] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:27:33.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:27:33.196 [DEBUG] [Thread-128942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:27:33.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:27:33.252 [DEBUG] [Thread-128942] [transport.py] [_log()] userauth is OK
2026-02-11T12:27:33.252 [DEBUG] [Thread-128942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:27:33.253 [DEBUG] [Thread-128942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:27:33.253 [DEBUG] [Thread-128942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:27:33.253 [DEBUG] [Thread-128942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:27:33.272 [INFO] [Thread-128942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:27:33.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:27:33.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:27:34.096 [DEBUG] [Thread-128942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:27:34.097 [DEBUG] [Thread-128942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:27:34.144 [DEBUG] [Thread-128942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:27:34.145 [DEBUG] [Thread-128942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:27:34.157 [DEBUG] [Thread-128942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:27:34.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:27:34.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:27:34.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:27:34.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:27:34.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:27:34.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:27:34.200 [DEBUG] [Thread-128942] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:27:40.828 [DEBUG] [Thread-128944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:27:55.880 [DEBUG] [Thread-128945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:28:04.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:28:04.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:28:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:28:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 27, 49), 14.28, 40.04, 0.0, 22.62, 23.12, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:28:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:27:49
2026-02-11T12:28:06.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:28:06.725 [DEBUG] [Thread-128946] [transport.py] [_log()] starting thread (client mode): 0xa2d78670
2026-02-11T12:28:06.726 [DEBUG] [Thread-128946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:28:06.746 [DEBUG] [Thread-128946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:28:06.746 [INFO] [Thread-128946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:28:06.749 [DEBUG] [Thread-128946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:28:06.749 [DEBUG] [Thread-128946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:28:06.749 [DEBUG] [Thread-128946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:28:06.749 [DEBUG] [Thread-128946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:06.749 [DEBUG] [Thread-128946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] client lang: <none>
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] server lang: <none>
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] kex follows: False
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] Compression: none
2026-02-11T12:28:06.750 [DEBUG] [Thread-128946] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:28:06.768 [DEBUG] [Thread-128946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:28:06.769 [DEBUG] [Thread-128946] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:28:06.770 [DEBUG] [Thread-128946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:28:06.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:28:06.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:28:06.773 [DEBUG] [Thread-128946] [transport.py] [_log()] userauth is OK
2026-02-11T12:28:06.773 [DEBUG] [Thread-128946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:28:06.774 [DEBUG] [Thread-128946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:28:06.774 [DEBUG] [Thread-128946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:28:06.774 [DEBUG] [Thread-128946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:28:06.798 [INFO] [Thread-128946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:28:06.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:28:07.416 [DEBUG] [Thread-128946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:28:07.416 [DEBUG] [Thread-128946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:28:07.417 [DEBUG] [Thread-128946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:28:07.457 [DEBUG] [Thread-128946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:28:07.457 [DEBUG] [Thread-128946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:28:07.461 [DEBUG] [Thread-128946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:28:07.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:28:07.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:28:07.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:28:07.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:28:07.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:28:07.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:28:07.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:28:07.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:28:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:28:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.435908 -999.00  +22.80  17.22     47  +10.90 1 2 1 1 1   888    0 11.58 -24.70 ----- 19.4 17.2 297.8 24.5 28.6 -15.2 28.2 -14.2 27.3 -13.6 27.8 -14.9
2026-02-11T12:28:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:28:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:28:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.435908
2026-02-11T12:28:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:28:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:28:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:28:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:28:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:28:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:27:49', tmtdew=14.28, humidity=40.04, cloud=0.0, wind=22.62, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:27:42.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:28:07.488 [DEBUG] [Thread-128946] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:28:07.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:28:07.583 [DEBUG] [Thread-128949] [transport.py] [_log()] starting thread (client mode): 0xa2d78e50
2026-02-11T12:28:07.583 [DEBUG] [Thread-128949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:28:07.598 [DEBUG] [Thread-128949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:28:07.598 [INFO] [Thread-128949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:28:07.606 [DEBUG] [Thread-128949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:28:07.607 [DEBUG] [Thread-128949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:28:07.608 [DEBUG] [Thread-128949] [transport.py] [_log()] client lang: <none>
2026-02-11T12:28:07.608 [DEBUG] [Thread-128949] [transport.py] [_log()] server lang: <none>
2026-02-11T12:28:07.608 [DEBUG] [Thread-128949] [transport.py] [_log()] kex follows: False
2026-02-11T12:28:07.608 [DEBUG] [Thread-128949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:28:07.608 [DEBUG] [Thread-128949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:28:07.608 [DEBUG] [Thread-128949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:28:07.609 [DEBUG] [Thread-128949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:28:07.609 [DEBUG] [Thread-128949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:28:07.609 [DEBUG] [Thread-128949] [transport.py] [_log()] Compression: none
2026-02-11T12:28:07.609 [DEBUG] [Thread-128949] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:28:07.668 [DEBUG] [Thread-128949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:28:07.668 [DEBUG] [Thread-128949] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:28:07.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:28:07.669 [DEBUG] [Thread-128949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:28:07.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:28:07.723 [DEBUG] [Thread-128949] [transport.py] [_log()] userauth is OK
2026-02-11T12:28:07.724 [DEBUG] [Thread-128949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:28:07.724 [DEBUG] [Thread-128949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:28:07.724 [DEBUG] [Thread-128949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:28:07.724 [DEBUG] [Thread-128949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:28:07.743 [INFO] [Thread-128949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:28:07.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:28:07.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:28:07.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:28:07.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:28:08.577 [DEBUG] [Thread-128949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:28:08.577 [DEBUG] [Thread-128949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:28:08.625 [DEBUG] [Thread-128949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:28:08.625 [DEBUG] [Thread-128949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:28:08.634 [DEBUG] [Thread-128949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:28:08.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:28:08.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:28:08.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:28:08.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:28:08.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:28:08.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:28:08.668 [DEBUG] [Thread-128949] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:28:10.913 [DEBUG] [Thread-128951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:28:14.217 [DEBUG] [Thread-128952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:28:25.969 [DEBUG] [Thread-128953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:28:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:28:38.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:28:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:28:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 28, 24), 14.33, 39.92, 0.0, 21.9, 23.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:28:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:28:24
2026-02-11T12:28:40.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:28:41.006 [DEBUG] [Thread-128954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:28:41.070 [DEBUG] [Thread-128955] [transport.py] [_log()] starting thread (client mode): 0xa2d3f670
2026-02-11T12:28:41.070 [DEBUG] [Thread-128955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:28:41.091 [DEBUG] [Thread-128955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:28:41.091 [INFO] [Thread-128955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:28:41.094 [DEBUG] [Thread-128955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] client lang: <none>
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] server lang: <none>
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] kex follows: False
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] Compression: none
2026-02-11T12:28:41.095 [DEBUG] [Thread-128955] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:28:41.115 [DEBUG] [Thread-128955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:28:41.115 [DEBUG] [Thread-128955] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:28:41.116 [DEBUG] [Thread-128955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:28:41.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:28:41.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:28:41.118 [DEBUG] [Thread-128955] [transport.py] [_log()] userauth is OK
2026-02-11T12:28:41.118 [DEBUG] [Thread-128955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:28:41.119 [DEBUG] [Thread-128955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:28:41.119 [DEBUG] [Thread-128955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:28:41.119 [DEBUG] [Thread-128955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:28:41.151 [INFO] [Thread-128955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:28:41.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:28:41.795 [DEBUG] [Thread-128955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:28:41.796 [DEBUG] [Thread-128955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:28:41.796 [DEBUG] [Thread-128955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:28:41.836 [DEBUG] [Thread-128955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:28:41.836 [DEBUG] [Thread-128955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:28:41.840 [DEBUG] [Thread-128955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:28:41.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:28:41.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:28:41.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:28:41.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:28:41.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:28:41.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:28:41.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:28:41.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:28:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:28:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.436254 -999.00  +22.50  24.44     47  +10.70 1 2 1 1 1   888    0 11.56 -24.68 ----- 20.9 24.4 295.4 31.1 28.4 -16.5 28.1 -14.6 27.1 -14.1 27.6 -14.8
2026-02-11T12:28:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:28:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:28:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.436254
2026-02-11T12:28:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:28:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:28:41.865 [DEBUG] [Thread-128955] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:28:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:28:41.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:28:41.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:28:41.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:28:24', tmtdew=14.33, humidity=39.92, cloud=0.0, wind=21.9, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:28:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:28:41.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:28:41.962 [DEBUG] [Thread-128958] [transport.py] [_log()] starting thread (client mode): 0xa2d1a620
2026-02-11T12:28:41.962 [DEBUG] [Thread-128958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:28:41.977 [DEBUG] [Thread-128958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:28:41.977 [INFO] [Thread-128958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:28:41.985 [DEBUG] [Thread-128958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:28:41.985 [DEBUG] [Thread-128958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:28:41.985 [DEBUG] [Thread-128958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:28:41.985 [DEBUG] [Thread-128958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:41.985 [DEBUG] [Thread-128958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:28:41.985 [DEBUG] [Thread-128958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:41.985 [DEBUG] [Thread-128958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] client lang: <none>
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] server lang: <none>
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] kex follows: False
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] Compression: none
2026-02-11T12:28:41.986 [DEBUG] [Thread-128958] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:28:42.043 [DEBUG] [Thread-128958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:28:42.044 [DEBUG] [Thread-128958] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:28:42.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:28:42.045 [DEBUG] [Thread-128958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:28:42.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:28:42.099 [DEBUG] [Thread-128958] [transport.py] [_log()] userauth is OK
2026-02-11T12:28:42.099 [DEBUG] [Thread-128958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:28:42.099 [DEBUG] [Thread-128958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:28:42.099 [DEBUG] [Thread-128958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:28:42.099 [DEBUG] [Thread-128958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:28:42.117 [INFO] [Thread-128958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:28:42.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:28:42.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:28:42.930 [DEBUG] [Thread-128958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:28:42.931 [DEBUG] [Thread-128958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:28:42.978 [DEBUG] [Thread-128958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:28:42.978 [DEBUG] [Thread-128958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:28:42.987 [DEBUG] [Thread-128958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:28:42.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:28:42.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:28:43.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:28:43.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:28:43.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:28:43.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:28:43.021 [DEBUG] [Thread-128958] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:28:56.037 [DEBUG] [Thread-128960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:29:08.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:29:08.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:29:11.089 [DEBUG] [Thread-128961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:29:13.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:29:13.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:29:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:29:14.269 [DEBUG] [Thread-128962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:29:14.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 29, 1), 14.14, 40.49, 0.0, 16.67, 23.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:29:14.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:29:01
2026-02-11T12:29:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:29:15.433 [DEBUG] [Thread-128963] [transport.py] [_log()] starting thread (client mode): 0xa2d3d720
2026-02-11T12:29:15.433 [DEBUG] [Thread-128963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:29:15.455 [DEBUG] [Thread-128963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:29:15.455 [INFO] [Thread-128963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:29:15.457 [DEBUG] [Thread-128963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:29:15.457 [DEBUG] [Thread-128963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] client lang: <none>
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] server lang: <none>
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] kex follows: False
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] Compression: none
2026-02-11T12:29:15.458 [DEBUG] [Thread-128963] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:29:15.468 [DEBUG] [Thread-128963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:29:15.469 [DEBUG] [Thread-128963] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:29:15.469 [DEBUG] [Thread-128963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:29:15.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:29:15.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:29:15.471 [DEBUG] [Thread-128963] [transport.py] [_log()] userauth is OK
2026-02-11T12:29:15.471 [DEBUG] [Thread-128963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:29:15.471 [DEBUG] [Thread-128963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:29:15.471 [DEBUG] [Thread-128963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:29:15.471 [DEBUG] [Thread-128963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:29:15.486 [INFO] [Thread-128963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:29:15.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:29:16.278 [DEBUG] [Thread-128963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:29:16.278 [DEBUG] [Thread-128963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:29:16.279 [DEBUG] [Thread-128963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:29:16.319 [DEBUG] [Thread-128963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:29:16.320 [DEBUG] [Thread-128963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:29:16.323 [DEBUG] [Thread-128963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:29:16.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:29:16.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:29:16.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:29:16.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:29:16.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:29:16.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:29:16.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:29:16.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:29:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:29:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.436602 -999.00  +22.20  27.13     48  +10.90 1 2 1 1 1   888    0 11.55 -28.33 ----- 26.5 27.1 296.2 32.6 28.1 -16.1 27.9 -14.8 26.9 -15.3 27.4 -14.4
2026-02-11T12:29:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:29:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:29:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.436602
2026-02-11T12:29:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:29:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:29:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:29:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:29:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:29:16.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:29:01', tmtdew=14.14, humidity=40.49, cloud=0.0, wind=16.67, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:28:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:29:16.352 [DEBUG] [Thread-128963] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:29:16.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:29:16.445 [DEBUG] [Thread-128966] [transport.py] [_log()] starting thread (client mode): 0xa2d1aa10
2026-02-11T12:29:16.445 [DEBUG] [Thread-128966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:29:16.461 [DEBUG] [Thread-128966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:29:16.461 [INFO] [Thread-128966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:29:16.469 [DEBUG] [Thread-128966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] client lang: <none>
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] server lang: <none>
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] kex follows: False
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:29:16.470 [DEBUG] [Thread-128966] [transport.py] [_log()] Compression: none
2026-02-11T12:29:16.471 [DEBUG] [Thread-128966] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:29:16.528 [DEBUG] [Thread-128966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:29:16.528 [DEBUG] [Thread-128966] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:29:16.529 [DEBUG] [Thread-128966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:29:16.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:29:16.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:29:16.587 [DEBUG] [Thread-128966] [transport.py] [_log()] userauth is OK
2026-02-11T12:29:16.588 [DEBUG] [Thread-128966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:29:16.588 [DEBUG] [Thread-128966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:29:16.588 [DEBUG] [Thread-128966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:29:16.588 [DEBUG] [Thread-128966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:29:16.607 [INFO] [Thread-128966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:29:16.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:29:16.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:29:17.452 [DEBUG] [Thread-128966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:29:17.453 [DEBUG] [Thread-128966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:29:17.500 [DEBUG] [Thread-128966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:29:17.500 [DEBUG] [Thread-128966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:29:17.510 [DEBUG] [Thread-128966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:29:17.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:29:17.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:29:17.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:29:17.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:29:17.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:29:17.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:29:17.547 [DEBUG] [Thread-128966] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:29:26.124 [DEBUG] [Thread-128968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:29:41.179 [DEBUG] [Thread-128969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:29:47.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:29:47.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:29:47.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:29:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 29, 36), 14.54, 39.57, 0.0, 25.79, 23.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:29:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:29:36
2026-02-11T12:29:49.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:29:49.899 [DEBUG] [Thread-128970] [transport.py] [_log()] starting thread (client mode): 0xa2d796c0
2026-02-11T12:29:49.899 [DEBUG] [Thread-128970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:29:49.920 [DEBUG] [Thread-128970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:29:49.920 [INFO] [Thread-128970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:29:49.923 [DEBUG] [Thread-128970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:29:49.923 [DEBUG] [Thread-128970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:29:49.923 [DEBUG] [Thread-128970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:29:49.923 [DEBUG] [Thread-128970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:49.923 [DEBUG] [Thread-128970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:49.923 [DEBUG] [Thread-128970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:49.923 [DEBUG] [Thread-128970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] client lang: <none>
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] server lang: <none>
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] kex follows: False
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] Compression: none
2026-02-11T12:29:49.924 [DEBUG] [Thread-128970] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:29:49.942 [DEBUG] [Thread-128970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:29:49.943 [DEBUG] [Thread-128970] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:29:49.945 [DEBUG] [Thread-128970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:29:49.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:29:49.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:29:49.947 [DEBUG] [Thread-128970] [transport.py] [_log()] userauth is OK
2026-02-11T12:29:49.948 [DEBUG] [Thread-128970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:29:49.948 [DEBUG] [Thread-128970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:29:49.948 [DEBUG] [Thread-128970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:29:49.948 [DEBUG] [Thread-128970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:29:49.968 [INFO] [Thread-128970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:29:49.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:29:50.585 [DEBUG] [Thread-128970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:29:50.585 [DEBUG] [Thread-128970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:29:50.586 [DEBUG] [Thread-128970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:29:50.626 [DEBUG] [Thread-128970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:29:50.627 [DEBUG] [Thread-128970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:29:50.629 [DEBUG] [Thread-128970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:29:50.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:29:50.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:29:50.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:29:50.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:29:50.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:29:50.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:29:50.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:29:50.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:29:50.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:29:50.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.436949 -999.00  +22.10  30.53     49  +11.00 1 2 2 1 1   888    0 11.12 -32.02 ----- 28.2 30.5 283.8 38.1 27.8 -16.3 27.7 -14.2 26.7 -15.6 27.2 -14.4
2026-02-11T12:29:50.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:29:50.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:29:50.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.436949
2026-02-11T12:29:50.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:29:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:29:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:29:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:29:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:29:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:29:36', tmtdew=14.54, humidity=39.57, cloud=0.0, wind=25.79, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:29:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:29:50.658 [DEBUG] [Thread-128970] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:29:50.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:29:50.753 [DEBUG] [Thread-128973] [transport.py] [_log()] starting thread (client mode): 0xa2d1acb0
2026-02-11T12:29:50.753 [DEBUG] [Thread-128973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:29:50.768 [DEBUG] [Thread-128973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:29:50.768 [INFO] [Thread-128973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] client lang: <none>
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] server lang: <none>
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] kex follows: False
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:29:50.776 [DEBUG] [Thread-128973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:29:50.777 [DEBUG] [Thread-128973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:29:50.777 [DEBUG] [Thread-128973] [transport.py] [_log()] Compression: none
2026-02-11T12:29:50.777 [DEBUG] [Thread-128973] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:29:50.835 [DEBUG] [Thread-128973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:29:50.836 [DEBUG] [Thread-128973] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:29:50.836 [DEBUG] [Thread-128973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:29:50.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:29:50.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:29:50.895 [DEBUG] [Thread-128973] [transport.py] [_log()] userauth is OK
2026-02-11T12:29:50.895 [DEBUG] [Thread-128973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:29:50.895 [DEBUG] [Thread-128973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:29:50.895 [DEBUG] [Thread-128973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:29:50.895 [DEBUG] [Thread-128973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:29:50.915 [INFO] [Thread-128973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:29:50.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:29:50.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:29:51.816 [DEBUG] [Thread-128973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:29:51.816 [DEBUG] [Thread-128973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:29:51.864 [DEBUG] [Thread-128973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:29:51.864 [DEBUG] [Thread-128973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:29:51.874 [DEBUG] [Thread-128973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:29:51.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:29:51.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:29:51.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:29:51.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:29:51.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:29:51.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:29:51.911 [DEBUG] [Thread-128973] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:29:56.217 [DEBUG] [Thread-128975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:08.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:08.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:11.271 [DEBUG] [Thread-128976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:14.302 [DEBUG] [Thread-128977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:30:21.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:30:21.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:30:23.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 30, 12), 13.96, 41.2, 0.0, 29.41, 22.95, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:30:23.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:30:12
2026-02-11T12:30:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:30:24.228 [DEBUG] [Thread-128978] [transport.py] [_log()] starting thread (client mode): 0xa2d135b0
2026-02-11T12:30:24.228 [DEBUG] [Thread-128978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:30:24.249 [DEBUG] [Thread-128978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:30:24.249 [INFO] [Thread-128978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] client lang: <none>
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] server lang: <none>
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] kex follows: False
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:30:24.252 [DEBUG] [Thread-128978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:30:24.253 [DEBUG] [Thread-128978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:30:24.253 [DEBUG] [Thread-128978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:30:24.253 [DEBUG] [Thread-128978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:30:24.253 [DEBUG] [Thread-128978] [transport.py] [_log()] Compression: none
2026-02-11T12:30:24.253 [DEBUG] [Thread-128978] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:30:24.269 [DEBUG] [Thread-128978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:30:24.269 [DEBUG] [Thread-128978] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:30:24.270 [DEBUG] [Thread-128978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:30:24.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:30:24.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:30:24.272 [DEBUG] [Thread-128978] [transport.py] [_log()] userauth is OK
2026-02-11T12:30:24.272 [DEBUG] [Thread-128978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:30:24.272 [DEBUG] [Thread-128978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:30:24.272 [DEBUG] [Thread-128978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:30:24.272 [DEBUG] [Thread-128978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:30:24.291 [INFO] [Thread-128978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:30:24.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:30:25.065 [DEBUG] [Thread-128978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:30:25.066 [DEBUG] [Thread-128978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:30:25.066 [DEBUG] [Thread-128978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:30:25.106 [DEBUG] [Thread-128978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:30:25.106 [DEBUG] [Thread-128978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:30:25.109 [DEBUG] [Thread-128978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:30:25.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:30:25.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:30:25.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:30:25.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:30:25.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:30:25.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:30:25.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:30:25.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:30:25.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:30:25.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.437297 -999.00  +22.50  25.37     48  +11.00 1 2 1 1 1   888    0 11.06 -37.27 ----- 27.1 25.4 287.6 31.4 27.8 -14.8 27.6 -13.7 26.7 -15.3 27.2 -14.9
2026-02-11T12:30:25.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:30:25.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:30:25.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.437297
2026-02-11T12:30:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:30:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:30:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:30:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:30:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:30:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:30:12', tmtdew=13.96, humidity=41.2, cloud=0.0, wind=29.41, temperature=22.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:29:42.461', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:30:25.133 [DEBUG] [Thread-128978] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:30:25.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:30:25.221 [DEBUG] [Thread-128981] [transport.py] [_log()] starting thread (client mode): 0xa2d192a0
2026-02-11T12:30:25.221 [DEBUG] [Thread-128981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:30:25.237 [DEBUG] [Thread-128981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:30:25.237 [INFO] [Thread-128981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:30:25.246 [DEBUG] [Thread-128981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:30:25.246 [DEBUG] [Thread-128981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:30:25.246 [DEBUG] [Thread-128981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:30:25.246 [DEBUG] [Thread-128981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:25.246 [DEBUG] [Thread-128981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] client lang: <none>
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] server lang: <none>
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] kex follows: False
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] Compression: none
2026-02-11T12:30:25.247 [DEBUG] [Thread-128981] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:30:25.307 [DEBUG] [Thread-128981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:30:25.307 [DEBUG] [Thread-128981] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:30:25.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:30:25.308 [DEBUG] [Thread-128981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:30:25.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:30:25.362 [DEBUG] [Thread-128981] [transport.py] [_log()] userauth is OK
2026-02-11T12:30:25.363 [DEBUG] [Thread-128981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:30:25.363 [DEBUG] [Thread-128981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:30:25.363 [DEBUG] [Thread-128981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:30:25.363 [DEBUG] [Thread-128981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:30:25.382 [INFO] [Thread-128981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:30:25.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:30:25.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:30:26.216 [DEBUG] [Thread-128981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:30:26.217 [DEBUG] [Thread-128981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:30:26.264 [DEBUG] [Thread-128981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:30:26.265 [DEBUG] [Thread-128981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:30:26.275 [DEBUG] [Thread-128981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:30:26.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:30: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')
2026-02-11T12:30: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
2026-02-11T12:30:26.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:30:26.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:30:26.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:30:26.307 [DEBUG] [Thread-128983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:26.312 [DEBUG] [Thread-128981] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:30:41.360 [DEBUG] [Thread-128984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:30:56.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:30:56.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:30:56.396 [DEBUG] [Thread-128985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:30:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 30, 47), 13.99, 40.6, 0.0, 28.73, 22.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:30:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:30:47
2026-02-11T12:30:58.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:30:58.724 [DEBUG] [Thread-128986] [transport.py] [_log()] starting thread (client mode): 0xa2d1a830
2026-02-11T12:30:58.724 [DEBUG] [Thread-128986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:30:58.744 [DEBUG] [Thread-128986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:30:58.744 [INFO] [Thread-128986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:30:58.747 [DEBUG] [Thread-128986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] client lang: <none>
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] server lang: <none>
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] kex follows: False
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:30:58.748 [DEBUG] [Thread-128986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:30:58.749 [DEBUG] [Thread-128986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:30:58.749 [DEBUG] [Thread-128986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:30:58.749 [DEBUG] [Thread-128986] [transport.py] [_log()] Compression: none
2026-02-11T12:30:58.749 [DEBUG] [Thread-128986] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:30:58.770 [DEBUG] [Thread-128986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:30:58.771 [DEBUG] [Thread-128986] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:30:58.772 [DEBUG] [Thread-128986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:30:58.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:30:58.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:30:58.774 [DEBUG] [Thread-128986] [transport.py] [_log()] userauth is OK
2026-02-11T12:30:58.774 [DEBUG] [Thread-128986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:30:58.774 [DEBUG] [Thread-128986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:30:58.775 [DEBUG] [Thread-128986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:30:58.775 [DEBUG] [Thread-128986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:30:58.799 [INFO] [Thread-128986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:30:58.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:30:59.410 [DEBUG] [Thread-128986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:30:59.410 [DEBUG] [Thread-128986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:30:59.411 [DEBUG] [Thread-128986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:30:59.452 [DEBUG] [Thread-128986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:30:59.452 [DEBUG] [Thread-128986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:30:59.456 [DEBUG] [Thread-128986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:30:59.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:30:59.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:30:59.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:30:59.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:30:59.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:30:59.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:30:59.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:30:59.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:30:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:30:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.437644 -999.00  +22.70  25.62     47  +10.90 1 2 1 1 1   888    0 10.48 -44.34 ----- 23.4 25.6 293.4 31.9 27.6 -15.4 27.5 -13.5 26.6 -13.7 27.0 -15.0
2026-02-11T12:30:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:30:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:30:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.437644
2026-02-11T12:30:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:30:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:30:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:30:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:30:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:30:59.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:30:47', tmtdew=13.99, humidity=40.6, cloud=0.0, wind=28.73, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:30:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:30:59.485 [DEBUG] [Thread-128986] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:30:59.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:30:59.582 [DEBUG] [Thread-128989] [transport.py] [_log()] starting thread (client mode): 0xa8197df0
2026-02-11T12:30:59.582 [DEBUG] [Thread-128989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:30:59.598 [DEBUG] [Thread-128989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:30:59.598 [INFO] [Thread-128989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] client lang: <none>
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] server lang: <none>
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] kex follows: False
2026-02-11T12:30:59.609 [DEBUG] [Thread-128989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:30:59.610 [DEBUG] [Thread-128989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:30:59.610 [DEBUG] [Thread-128989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:30:59.610 [DEBUG] [Thread-128989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:30:59.610 [DEBUG] [Thread-128989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:30:59.610 [DEBUG] [Thread-128989] [transport.py] [_log()] Compression: none
2026-02-11T12:30:59.610 [DEBUG] [Thread-128989] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:30:59.667 [DEBUG] [Thread-128989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:30:59.668 [DEBUG] [Thread-128989] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:30:59.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:30:59.669 [DEBUG] [Thread-128989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:30:59.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:30:59.727 [DEBUG] [Thread-128989] [transport.py] [_log()] userauth is OK
2026-02-11T12:30:59.727 [DEBUG] [Thread-128989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:30:59.727 [DEBUG] [Thread-128989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:30:59.727 [DEBUG] [Thread-128989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:30:59.727 [DEBUG] [Thread-128989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:30:59.746 [INFO] [Thread-128989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:30:59.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:30:59.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:31:00.623 [DEBUG] [Thread-128989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:31:00.623 [DEBUG] [Thread-128989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:31:00.672 [DEBUG] [Thread-128989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:31:00.673 [DEBUG] [Thread-128989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:31:00.682 [DEBUG] [Thread-128989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:31:00.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:31:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:31:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:31:00.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:31:00.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:31:00.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:31:00.718 [DEBUG] [Thread-128989] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:31:08.294 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:31:08.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:31:11.433 [DEBUG] [Thread-128991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:31:14.360 [DEBUG] [Thread-128992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:31:26.483 [DEBUG] [Thread-128993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:31:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:31:30.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:31:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:31:32.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 31, 22), 14.05, 40.45, 0.0, 27.24, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:31:32.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:31:22
2026-02-11T12:31:32.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:31:33.147 [DEBUG] [Thread-128994] [transport.py] [_log()] starting thread (client mode): 0xa2d12b30
2026-02-11T12:31:33.147 [DEBUG] [Thread-128994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:31:33.167 [DEBUG] [Thread-128994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:31:33.167 [INFO] [Thread-128994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:31:33.170 [DEBUG] [Thread-128994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] client lang: <none>
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] server lang: <none>
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] kex follows: False
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] Compression: none
2026-02-11T12:31:33.171 [DEBUG] [Thread-128994] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:31:33.188 [DEBUG] [Thread-128994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:31:33.189 [DEBUG] [Thread-128994] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:31:33.189 [DEBUG] [Thread-128994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:31:33.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:31:33.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:31:33.233 [DEBUG] [Thread-128994] [transport.py] [_log()] userauth is OK
2026-02-11T12:31:33.233 [DEBUG] [Thread-128994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:31:33.233 [DEBUG] [Thread-128994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:31:33.233 [DEBUG] [Thread-128994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:31:33.233 [DEBUG] [Thread-128994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:31:33.264 [INFO] [Thread-128994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:31:33.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:31:33.899 [DEBUG] [Thread-128994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:31:33.899 [DEBUG] [Thread-128994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:31:33.900 [DEBUG] [Thread-128994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:31:33.940 [DEBUG] [Thread-128994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:31:33.940 [DEBUG] [Thread-128994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:31:33.944 [DEBUG] [Thread-128994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:31:33.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:31:33.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:31:33.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:31:33.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:31:33.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:31:33.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:31:33.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:31:33.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:31:33.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:31:33.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.437991 -999.00  +22.80  32.41     46  +10.80 1 2 2 1 1   888    0 10.61 -46.31 ----- 30.8 32.4 298.0 35.6 27.5 -15.7 27.4 -14.0 26.6 -14.6 26.9 -15.2
2026-02-11T12:31:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:31:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:31:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.437991
2026-02-11T12:31:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:31:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:31:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:31:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:31:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:31:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:31:22', tmtdew=14.05, humidity=40.45, cloud=0.0, wind=27.24, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:30:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:31:33.968 [DEBUG] [Thread-128994] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:31:34.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:31:34.072 [DEBUG] [Thread-128997] [transport.py] [_log()] starting thread (client mode): 0xa2d12bc0
2026-02-11T12:31:34.073 [DEBUG] [Thread-128997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:31:34.086 [DEBUG] [Thread-128997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:31:34.087 [INFO] [Thread-128997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:31:34.094 [DEBUG] [Thread-128997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:31:34.094 [DEBUG] [Thread-128997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:31:34.094 [DEBUG] [Thread-128997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:31:34.094 [DEBUG] [Thread-128997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] client lang: <none>
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] server lang: <none>
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] kex follows: False
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] Compression: none
2026-02-11T12:31:34.095 [DEBUG] [Thread-128997] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:31:34.158 [DEBUG] [Thread-128997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:31:34.159 [DEBUG] [Thread-128997] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:31:34.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:31:34.160 [DEBUG] [Thread-128997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:31:34.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:31:34.215 [DEBUG] [Thread-128997] [transport.py] [_log()] userauth is OK
2026-02-11T12:31:34.215 [DEBUG] [Thread-128997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:31:34.215 [DEBUG] [Thread-128997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:31:34.216 [DEBUG] [Thread-128997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:31:34.216 [DEBUG] [Thread-128997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:31:34.235 [INFO] [Thread-128997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:31:34.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:31:34.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:31:35.069 [DEBUG] [Thread-128997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:31:35.069 [DEBUG] [Thread-128997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:31:35.122 [DEBUG] [Thread-128997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:31:35.122 [DEBUG] [Thread-128997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:31:35.132 [DEBUG] [Thread-128997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:31:35.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:31:35.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:31:35.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:31:35.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:31:35.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:31:35.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:31:35.172 [DEBUG] [Thread-128997] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:31:41.522 [DEBUG] [Thread-128999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:31:56.579 [DEBUG] [Thread-129000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:32:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:32:05.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:32:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:32:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 31, 57), 13.86, 41.2, 0.0, 16.0, 22.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:32:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:31:57
2026-02-11T12:32:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:32:07.976 [DEBUG] [Thread-129001] [transport.py] [_log()] starting thread (client mode): 0xa2d12620
2026-02-11T12:32:07.976 [DEBUG] [Thread-129001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:32:07.996 [DEBUG] [Thread-129001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:32:07.996 [INFO] [Thread-129001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:32:07.999 [DEBUG] [Thread-129001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] client lang: <none>
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] server lang: <none>
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] kex follows: False
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:32:08.000 [DEBUG] [Thread-129001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:32:08.001 [DEBUG] [Thread-129001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:32:08.001 [DEBUG] [Thread-129001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:32:08.001 [DEBUG] [Thread-129001] [transport.py] [_log()] Compression: none
2026-02-11T12:32:08.001 [DEBUG] [Thread-129001] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:32:08.019 [DEBUG] [Thread-129001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:32:08.019 [DEBUG] [Thread-129001] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:32:08.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:32:08.020 [DEBUG] [Thread-129001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:32:08.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:32:08.022 [DEBUG] [Thread-129001] [transport.py] [_log()] userauth is OK
2026-02-11T12:32:08.022 [DEBUG] [Thread-129001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:32:08.023 [DEBUG] [Thread-129001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:32:08.023 [DEBUG] [Thread-129001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:32:08.023 [DEBUG] [Thread-129001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:32:08.045 [INFO] [Thread-129001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:32:08.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:32:08.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:32:08.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:32:08.859 [DEBUG] [Thread-129001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:32:08.859 [DEBUG] [Thread-129001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:32:08.860 [DEBUG] [Thread-129001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:32:08.900 [DEBUG] [Thread-129001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:32:08.901 [DEBUG] [Thread-129001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:32:08.904 [DEBUG] [Thread-129001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:32:08.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:32:08.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:32:08.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:32:08.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:32:08.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:32:08.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:32:08.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:32:08.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:32:08.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:32:08.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.438685 -999.00  +22.30  25.14     48  +10.80 1 2 1 1 1   888    0 10.69 -48.38 ----- 26.6 25.1 292.6 28.8 27.2 -16.1 27.1 -14.4 26.2 -16.9 26.8 -15.4
2026-02-11T12:32:08.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:32:08.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:32:08.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.438685
2026-02-11T12:32:08.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:32:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:32:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:32:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:32:08.927 [DEBUG] [Thread-129001] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:32:08.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:32:08.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:31:57', tmtdew=13.86, humidity=41.2, cloud=0.0, wind=16.0, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:31:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:32:09.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:32:09.026 [DEBUG] [Thread-129004] [transport.py] [_log()] starting thread (client mode): 0xa2d186d0
2026-02-11T12:32:09.027 [DEBUG] [Thread-129004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:32:09.041 [DEBUG] [Thread-129004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:32:09.042 [INFO] [Thread-129004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:32:09.049 [DEBUG] [Thread-129004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] client lang: <none>
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] server lang: <none>
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] kex follows: False
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] Compression: none
2026-02-11T12:32:09.050 [DEBUG] [Thread-129004] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:32:09.114 [DEBUG] [Thread-129004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:32:09.115 [DEBUG] [Thread-129004] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:32:09.115 [DEBUG] [Thread-129004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:32:09.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:32:09.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:32:09.169 [DEBUG] [Thread-129004] [transport.py] [_log()] userauth is OK
2026-02-11T12:32:09.170 [DEBUG] [Thread-129004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:32:09.170 [DEBUG] [Thread-129004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:32:09.170 [DEBUG] [Thread-129004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:32:09.170 [DEBUG] [Thread-129004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:32:09.194 [INFO] [Thread-129004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:32:09.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:32:09.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:32:10.017 [DEBUG] [Thread-129004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:32:10.017 [DEBUG] [Thread-129004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:32:10.065 [DEBUG] [Thread-129004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:32:10.065 [DEBUG] [Thread-129004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:32:10.074 [DEBUG] [Thread-129004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:32:10.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:32:10.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:32:10.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
2026-02-11T12:32:10.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:32:10.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:32:10.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:32:10.110 [DEBUG] [Thread-129004] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:32:11.616 [DEBUG] [Thread-129006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:32:14.419 [DEBUG] [Thread-129007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:32:26.655 [DEBUG] [Thread-129008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:32:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:32:40.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:32:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:32:41.693 [DEBUG] [Thread-129009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:32:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 32, 34), 14.87, 38.77, 0.0, 27.8, 24.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:32:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:32:34
2026-02-11T12:32:42.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:32:42.552 [DEBUG] [Thread-129010] [transport.py] [_log()] starting thread (client mode): 0xa2d11060
2026-02-11T12:32:42.552 [DEBUG] [Thread-129010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:32:42.572 [DEBUG] [Thread-129010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:32:42.572 [INFO] [Thread-129010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:32:42.575 [DEBUG] [Thread-129010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] client lang: <none>
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] server lang: <none>
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] kex follows: False
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:32:42.576 [DEBUG] [Thread-129010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:32:42.577 [DEBUG] [Thread-129010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:32:42.577 [DEBUG] [Thread-129010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:32:42.577 [DEBUG] [Thread-129010] [transport.py] [_log()] Compression: none
2026-02-11T12:32:42.577 [DEBUG] [Thread-129010] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:32:42.595 [DEBUG] [Thread-129010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:32:42.596 [DEBUG] [Thread-129010] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:32:42.597 [DEBUG] [Thread-129010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:32:42.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:32:42.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:32:42.600 [DEBUG] [Thread-129010] [transport.py] [_log()] userauth is OK
2026-02-11T12:32:42.600 [DEBUG] [Thread-129010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:32:42.600 [DEBUG] [Thread-129010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:32:42.600 [DEBUG] [Thread-129010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:32:42.600 [DEBUG] [Thread-129010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:32:42.620 [INFO] [Thread-129010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:32:42.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:32:43.234 [DEBUG] [Thread-129010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:32:43.234 [DEBUG] [Thread-129010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:32:43.234 [DEBUG] [Thread-129010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:32:43.276 [DEBUG] [Thread-129010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:32:43.276 [DEBUG] [Thread-129010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:32:43.279 [DEBUG] [Thread-129010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:32:43.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:32:43.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:32:43.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:32:43.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:32:43.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:32:43.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:32:43.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.439033 -999.00  +22.00  24.02     49  +10.80 1 2 1 1 1   888    0 10.48 -47.54 ----- 20.9 24.0 289.4 34.6 26.9 -15.5 26.9 -14.6 26.1 -14.8 26.6 -15.9
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.439033
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:32:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:32:34', tmtdew=14.87, humidity=38.77, cloud=0.0, wind=27.8, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:32:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:32:43.302 [DEBUG] [Thread-129010] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:32:43.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:32:43.399 [DEBUG] [Thread-129013] [transport.py] [_log()] starting thread (client mode): 0xa2d18ee0
2026-02-11T12:32:43.399 [DEBUG] [Thread-129013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:32:43.415 [DEBUG] [Thread-129013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:32:43.415 [INFO] [Thread-129013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:32:43.423 [DEBUG] [Thread-129013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:32:43.423 [DEBUG] [Thread-129013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] client lang: <none>
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] server lang: <none>
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] kex follows: False
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] Compression: none
2026-02-11T12:32:43.424 [DEBUG] [Thread-129013] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:32:43.483 [DEBUG] [Thread-129013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:32:43.484 [DEBUG] [Thread-129013] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:32:43.484 [DEBUG] [Thread-129013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:32:43.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:32:43.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:32:43.541 [DEBUG] [Thread-129013] [transport.py] [_log()] userauth is OK
2026-02-11T12:32:43.542 [DEBUG] [Thread-129013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:32:43.542 [DEBUG] [Thread-129013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:32:43.542 [DEBUG] [Thread-129013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:32:43.542 [DEBUG] [Thread-129013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:32:43.561 [INFO] [Thread-129013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:32:43.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:32:43.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:32:44.390 [DEBUG] [Thread-129013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:32:44.391 [DEBUG] [Thread-129013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:32:44.438 [DEBUG] [Thread-129013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:32:44.439 [DEBUG] [Thread-129013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:32:44.448 [DEBUG] [Thread-129013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:32:44.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:32:44.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:32:44.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:32:44.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:32:44.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:32:44.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:32:44.485 [DEBUG] [Thread-129013] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:32:56.732 [DEBUG] [Thread-129015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:33:08.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:33:08.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:33:11.786 [DEBUG] [Thread-129016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:33:14.473 [DEBUG] [Thread-129017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:33:14.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:33:14.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:33:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:33:16.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 32, 34), 14.87, 38.77, 0.0, 27.8, 24.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:33:16.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:32:34
2026-02-11T12:33:16.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:33:16.923 [DEBUG] [Thread-129018] [transport.py] [_log()] starting thread (client mode): 0xa2d12410
2026-02-11T12:33:16.924 [DEBUG] [Thread-129018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:33:16.943 [DEBUG] [Thread-129018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:33:16.943 [INFO] [Thread-129018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:33:16.944 [DEBUG] [Thread-129018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] client lang: <none>
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] server lang: <none>
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] kex follows: False
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] Compression: none
2026-02-11T12:33:16.945 [DEBUG] [Thread-129018] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:33:16.952 [DEBUG] [Thread-129018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:33:16.952 [DEBUG] [Thread-129018] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:33:16.953 [DEBUG] [Thread-129018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:33:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:33:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:33:16.954 [DEBUG] [Thread-129018] [transport.py] [_log()] userauth is OK
2026-02-11T12:33:16.954 [DEBUG] [Thread-129018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:33:16.954 [DEBUG] [Thread-129018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:33:16.954 [DEBUG] [Thread-129018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:33:16.954 [DEBUG] [Thread-129018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:33:16.966 [INFO] [Thread-129018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:33:16.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:33:17.601 [DEBUG] [Thread-129018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:33:17.601 [DEBUG] [Thread-129018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:33:17.602 [DEBUG] [Thread-129018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:33:17.642 [DEBUG] [Thread-129018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:33:17.642 [DEBUG] [Thread-129018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:33:17.646 [DEBUG] [Thread-129018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:33:17.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:33:17.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:33:17.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:33:17.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:33:17.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:33:17.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:33:17.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:33:17.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:33:17.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:33:17.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.439380 -999.00  +21.80  34.76     49  +10.80 1 2 2 1 1   888    0 10.79 -47.94 ----- 30.1 34.8 296.2 37.6 26.8 -16.4 26.8 -14.8 25.9 -16.6 26.5 -16.0
2026-02-11T12:33:17.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:33:17.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:33:17.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.439380
2026-02-11T12:33:17.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:33:17.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:33:17.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:33:17.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:33:17.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:33:17.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:32:34', tmtdew=14.87, humidity=38.77, cloud=0.0, wind=27.8, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:32:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:33:17.674 [DEBUG] [Thread-129018] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:33:17.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:33:17.779 [DEBUG] [Thread-129021] [transport.py] [_log()] starting thread (client mode): 0xa2d13a00
2026-02-11T12:33:17.779 [DEBUG] [Thread-129021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:33:17.794 [DEBUG] [Thread-129021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:33:17.794 [INFO] [Thread-129021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] client lang: <none>
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] server lang: <none>
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] kex follows: False
2026-02-11T12:33:17.803 [DEBUG] [Thread-129021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:33:17.804 [DEBUG] [Thread-129021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:33:17.804 [DEBUG] [Thread-129021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:33:17.804 [DEBUG] [Thread-129021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:33:17.804 [DEBUG] [Thread-129021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:33:17.804 [DEBUG] [Thread-129021] [transport.py] [_log()] Compression: none
2026-02-11T12:33:17.804 [DEBUG] [Thread-129021] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:33:17.861 [DEBUG] [Thread-129021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:33:17.862 [DEBUG] [Thread-129021] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:33:17.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:33:17.863 [DEBUG] [Thread-129021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:33:17.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:33:17.917 [DEBUG] [Thread-129021] [transport.py] [_log()] userauth is OK
2026-02-11T12:33:17.917 [DEBUG] [Thread-129021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:33:17.918 [DEBUG] [Thread-129021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:33:17.918 [DEBUG] [Thread-129021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:33:17.918 [DEBUG] [Thread-129021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:33:17.937 [INFO] [Thread-129021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:33:17.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:33:17.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:33:18.829 [DEBUG] [Thread-129021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:33:18.829 [DEBUG] [Thread-129021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:33:18.878 [DEBUG] [Thread-129021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:33:18.878 [DEBUG] [Thread-129021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:33:18.888 [DEBUG] [Thread-129021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:33:18.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:33:18.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:33:18.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:33:18.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:33:18.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:33:18.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:33:18.930 [DEBUG] [Thread-129021] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:33:26.825 [DEBUG] [Thread-129023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:33:41.876 [DEBUG] [Thread-129024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:33:48.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:33:48.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:33:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:33:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 33, 9), 13.88, 41.37, 0.0, 25.81, 22.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:33:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:33:09
2026-02-11T12:33:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:33:51.705 [DEBUG] [Thread-129025] [transport.py] [_log()] starting thread (client mode): 0xa2d12530
2026-02-11T12:33:51.705 [DEBUG] [Thread-129025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:33:51.726 [DEBUG] [Thread-129025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:33:51.726 [INFO] [Thread-129025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:33:51.729 [DEBUG] [Thread-129025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:33:51.729 [DEBUG] [Thread-129025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] client lang: <none>
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] server lang: <none>
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] kex follows: False
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:33:51.730 [DEBUG] [Thread-129025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:33:51.731 [DEBUG] [Thread-129025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:33:51.731 [DEBUG] [Thread-129025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:33:51.731 [DEBUG] [Thread-129025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:33:51.731 [DEBUG] [Thread-129025] [transport.py] [_log()] Compression: none
2026-02-11T12:33:51.731 [DEBUG] [Thread-129025] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:33:51.747 [DEBUG] [Thread-129025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:33:51.747 [DEBUG] [Thread-129025] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:33:51.748 [DEBUG] [Thread-129025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:33:51.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:33:51.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:33:51.750 [DEBUG] [Thread-129025] [transport.py] [_log()] userauth is OK
2026-02-11T12:33:51.750 [DEBUG] [Thread-129025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:33:51.750 [DEBUG] [Thread-129025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:33:51.750 [DEBUG] [Thread-129025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:33:51.750 [DEBUG] [Thread-129025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:33:51.774 [INFO] [Thread-129025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:33:51.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:33:52.422 [DEBUG] [Thread-129025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:33:52.422 [DEBUG] [Thread-129025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:33:52.423 [DEBUG] [Thread-129025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:33:52.463 [DEBUG] [Thread-129025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:33:52.463 [DEBUG] [Thread-129025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:33:52.466 [DEBUG] [Thread-129025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:33:52.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:33:52.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:33:52.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:33:52.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:33:52.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:33:52.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:33:52.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:33:52.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:33:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:33:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.439727 -999.00  +21.90  23.93     49  +10.90 1 2 1 1 1   888    0 10.61 -47.51 ----- 27.2 23.9 291.6 38.6 26.6 -16.2 26.6 -14.9 25.8 -16.1 26.3 -16.5
2026-02-11T12:33:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:33:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:33:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.439727
2026-02-11T12:33:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:33:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:33:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:33:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:33:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:33:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:33:09', tmtdew=13.88, humidity=41.37, cloud=0.0, wind=25.81, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:33:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:33:52.491 [DEBUG] [Thread-129025] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:33:52.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:33:52.588 [DEBUG] [Thread-129028] [transport.py] [_log()] starting thread (client mode): 0xa2d10c70
2026-02-11T12:33:52.588 [DEBUG] [Thread-129028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:33:52.602 [DEBUG] [Thread-129028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:33:52.602 [INFO] [Thread-129028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:33:52.610 [DEBUG] [Thread-129028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] client lang: <none>
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] server lang: <none>
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] kex follows: False
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] Compression: none
2026-02-11T12:33:52.611 [DEBUG] [Thread-129028] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:33:52.668 [DEBUG] [Thread-129028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:33:52.668 [DEBUG] [Thread-129028] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:33:52.669 [DEBUG] [Thread-129028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:33:52.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:33:52.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:33:52.724 [DEBUG] [Thread-129028] [transport.py] [_log()] userauth is OK
2026-02-11T12:33:52.724 [DEBUG] [Thread-129028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:33:52.724 [DEBUG] [Thread-129028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:33:52.724 [DEBUG] [Thread-129028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:33:52.724 [DEBUG] [Thread-129028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:33:52.747 [INFO] [Thread-129028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:33:52.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:33:52.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:33:53.572 [DEBUG] [Thread-129028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:33:53.572 [DEBUG] [Thread-129028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:33:53.620 [DEBUG] [Thread-129028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:33:53.620 [DEBUG] [Thread-129028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:33:53.628 [DEBUG] [Thread-129028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:33:53.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:33:53.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:33:53.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
2026-02-11T12:33:53.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:33:53.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:33:53.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:33:53.662 [DEBUG] [Thread-129028] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:33:56.909 [DEBUG] [Thread-129030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:08.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:08.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:11.962 [DEBUG] [Thread-129031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:14.528 [DEBUG] [Thread-129032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:34:23.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:34:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:34:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 33, 44), 13.91, 40.92, 0.0, 27.44, 22.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:34:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:33:44
2026-02-11T12:34:26.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:34:26.704 [DEBUG] [Thread-129033] [transport.py] [_log()] starting thread (client mode): 0xa2d19cf0
2026-02-11T12:34:26.704 [DEBUG] [Thread-129033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:34:26.725 [DEBUG] [Thread-129033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:34:26.725 [INFO] [Thread-129033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] client lang: <none>
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] server lang: <none>
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] kex follows: False
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] Compression: none
2026-02-11T12:34:26.728 [DEBUG] [Thread-129033] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:34:26.745 [DEBUG] [Thread-129033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:34:26.746 [DEBUG] [Thread-129033] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:34:26.746 [DEBUG] [Thread-129033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:34:26.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:34:26.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:34:26.748 [DEBUG] [Thread-129033] [transport.py] [_log()] userauth is OK
2026-02-11T12:34:26.748 [DEBUG] [Thread-129033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:34:26.749 [DEBUG] [Thread-129033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:34:26.749 [DEBUG] [Thread-129033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:34:26.749 [DEBUG] [Thread-129033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:34:26.786 [INFO] [Thread-129033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:34:26.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:34:27.002 [DEBUG] [Thread-129035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:27.423 [DEBUG] [Thread-129033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:34:27.423 [DEBUG] [Thread-129033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:34:27.424 [DEBUG] [Thread-129033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:34:27.464 [DEBUG] [Thread-129033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:34:27.464 [DEBUG] [Thread-129033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:34:27.467 [DEBUG] [Thread-129033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:34:27.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:34:27.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:34:27.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:34:27.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:34:27.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:34:27.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:34:27.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:34:27.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:34:27.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:34:27.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.440074 -999.00  +21.80  24.84     49  +10.80 1 2 1 1 1   888    0 10.45 -44.71 ----- 23.5 24.8 293.2 39.7 26.5 -17.0 26.5 -15.4 25.8 -16.3 26.2 -16.2
2026-02-11T12:34:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:34:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:34:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.440074
2026-02-11T12:34:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:34:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:34:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:34:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:34:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:34:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:33:44', tmtdew=13.91, humidity=40.92, cloud=0.0, wind=27.44, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:33:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:34:27.496 [DEBUG] [Thread-129033] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:34:27.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:34:27.592 [DEBUG] [Thread-129037] [transport.py] [_log()] starting thread (client mode): 0xa2d1a1d0
2026-02-11T12:34:27.592 [DEBUG] [Thread-129037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:34:27.607 [DEBUG] [Thread-129037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:34:27.607 [INFO] [Thread-129037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:34:27.614 [DEBUG] [Thread-129037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:34:27.614 [DEBUG] [Thread-129037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:34:27.614 [DEBUG] [Thread-129037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] client lang: <none>
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] server lang: <none>
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] kex follows: False
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] Compression: none
2026-02-11T12:34:27.615 [DEBUG] [Thread-129037] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:34:27.676 [DEBUG] [Thread-129037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:34:27.677 [DEBUG] [Thread-129037] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:34:27.677 [DEBUG] [Thread-129037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:34:27.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:34:27.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:34:27.735 [DEBUG] [Thread-129037] [transport.py] [_log()] userauth is OK
2026-02-11T12:34:27.735 [DEBUG] [Thread-129037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:34:27.735 [DEBUG] [Thread-129037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:34:27.735 [DEBUG] [Thread-129037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:34:27.736 [DEBUG] [Thread-129037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:34:27.754 [INFO] [Thread-129037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:34:27.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:34:27.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:34:28.605 [DEBUG] [Thread-129037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:34:28.606 [DEBUG] [Thread-129037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:34:28.653 [DEBUG] [Thread-129037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:34:28.654 [DEBUG] [Thread-129037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:34:28.663 [DEBUG] [Thread-129037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:34:28.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:34:28.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:34:28.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
2026-02-11T12:34:28.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:34:28.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:34:28.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:34:28.703 [DEBUG] [Thread-129037] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:34:42.044 [DEBUG] [Thread-129039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:57.095 [DEBUG] [Thread-129040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:34:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:34:58.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:34:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:35:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 34, 20), 14.04, 40.64, 0.0, 28.37, 23.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:35:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:34:20
2026-02-11T12:35:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:35:01.508 [DEBUG] [Thread-129041] [transport.py] [_log()] starting thread (client mode): 0xa2d194b0
2026-02-11T12:35:01.508 [DEBUG] [Thread-129041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:35:01.522 [DEBUG] [Thread-129041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:35:01.522 [INFO] [Thread-129041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] client lang: <none>
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] server lang: <none>
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] kex follows: False
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] Compression: none
2026-02-11T12:35:01.523 [DEBUG] [Thread-129041] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:35:01.531 [DEBUG] [Thread-129041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:35:01.531 [DEBUG] [Thread-129041] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:35:01.531 [DEBUG] [Thread-129041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:35:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:35:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:35:01.532 [DEBUG] [Thread-129041] [transport.py] [_log()] userauth is OK
2026-02-11T12:35:01.532 [DEBUG] [Thread-129041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:35:01.532 [DEBUG] [Thread-129041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:35:01.532 [DEBUG] [Thread-129041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:35:01.532 [DEBUG] [Thread-129041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:35:01.542 [INFO] [Thread-129041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:35:01.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:35:02.375 [DEBUG] [Thread-129041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:35:02.376 [DEBUG] [Thread-129041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:35:02.376 [DEBUG] [Thread-129041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:35:02.416 [DEBUG] [Thread-129041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:35:02.417 [DEBUG] [Thread-129041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:35:02.420 [DEBUG] [Thread-129041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:35:02.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:35:02.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:35:02.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:35:02.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:35:02.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:35:02.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:35:02.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:35:02.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:35:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:35:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.440421 -999.00  +22.00  17.69     49  +10.90 1 2 1 1 1   888    0 10.81 -42.31 ----- 20.3 17.7 280.9 27.2 26.6 -16.9 26.5 -14.6 25.8 -18.6 26.1 -16.5
2026-02-11T12:35:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:35:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:35:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.440421
2026-02-11T12:35:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:35:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:35:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:35:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:35:02.447 [DEBUG] [Thread-129041] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:35:02.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:35:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:34:20', tmtdew=14.04, humidity=40.64, cloud=0.0, wind=28.37, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:34:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:35:02.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:35:02.540 [DEBUG] [Thread-129044] [transport.py] [_log()] starting thread (client mode): 0xa2d12830
2026-02-11T12:35:02.540 [DEBUG] [Thread-129044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:35:02.555 [DEBUG] [Thread-129044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:35:02.555 [INFO] [Thread-129044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:35:02.562 [DEBUG] [Thread-129044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] client lang: <none>
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] server lang: <none>
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] kex follows: False
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:35:02.563 [DEBUG] [Thread-129044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:35:02.564 [DEBUG] [Thread-129044] [transport.py] [_log()] Compression: none
2026-02-11T12:35:02.564 [DEBUG] [Thread-129044] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:35:02.625 [DEBUG] [Thread-129044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:35:02.625 [DEBUG] [Thread-129044] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:35:02.626 [DEBUG] [Thread-129044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:35:02.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:35:02.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:35:02.680 [DEBUG] [Thread-129044] [transport.py] [_log()] userauth is OK
2026-02-11T12:35:02.681 [DEBUG] [Thread-129044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:35:02.681 [DEBUG] [Thread-129044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:35:02.681 [DEBUG] [Thread-129044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:35:02.681 [DEBUG] [Thread-129044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:35:02.706 [INFO] [Thread-129044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:35:02.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:35:02.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:35:03.562 [DEBUG] [Thread-129044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:35:03.562 [DEBUG] [Thread-129044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:35:03.610 [DEBUG] [Thread-129044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:35:03.610 [DEBUG] [Thread-129044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:35:03.619 [DEBUG] [Thread-129044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:35:03.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:35:03.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:35:03.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
2026-02-11T12:35:03.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:35:03.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:35:03.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:35:03.657 [DEBUG] [Thread-129044] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:35:08.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:35:08.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:35:12.132 [DEBUG] [Thread-129046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:35:14.561 [DEBUG] [Thread-129047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:35:27.191 [DEBUG] [Thread-129048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:35:33.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:35:33.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:35:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:35:35.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 34, 57), 13.77, 41.3, 0.0, 18.83, 22.72, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:35:35.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:34:57
2026-02-11T12:35:36.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:35:36.230 [DEBUG] [Thread-129049] [transport.py] [_log()] starting thread (client mode): 0xa2d139a0
2026-02-11T12:35:36.231 [DEBUG] [Thread-129049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:35:36.251 [DEBUG] [Thread-129049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:35:36.251 [INFO] [Thread-129049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] client lang: <none>
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] server lang: <none>
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] kex follows: False
2026-02-11T12:35:36.254 [DEBUG] [Thread-129049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:35:36.255 [DEBUG] [Thread-129049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:35:36.255 [DEBUG] [Thread-129049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:35:36.255 [DEBUG] [Thread-129049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:35:36.255 [DEBUG] [Thread-129049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:35:36.255 [DEBUG] [Thread-129049] [transport.py] [_log()] Compression: none
2026-02-11T12:35:36.255 [DEBUG] [Thread-129049] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:35:36.274 [DEBUG] [Thread-129049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:35:36.275 [DEBUG] [Thread-129049] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:35:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:35:36.276 [DEBUG] [Thread-129049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:35:36.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:35:36.279 [DEBUG] [Thread-129049] [transport.py] [_log()] userauth is OK
2026-02-11T12:35:36.279 [DEBUG] [Thread-129049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:35:36.279 [DEBUG] [Thread-129049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:35:36.279 [DEBUG] [Thread-129049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:35:36.279 [DEBUG] [Thread-129049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:35:36.312 [INFO] [Thread-129049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:35:36.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:35:36.953 [DEBUG] [Thread-129049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:35:36.953 [DEBUG] [Thread-129049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:35:36.953 [DEBUG] [Thread-129049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:35:36.993 [DEBUG] [Thread-129049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:35:36.994 [DEBUG] [Thread-129049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:35:36.997 [DEBUG] [Thread-129049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:35:37.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:35:37.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:35:37.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:35:37.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:35:37.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:35:37.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:35:37.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:35:37.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:35:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:35:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.440769 -999.00  +21.90  20.10     49  +10.80 1 2 1 1 1   888    0 10.80 -42.67 ----- 21.3 20.1 308.8 29.6 26.6 -16.4 26.4 -15.1 25.8 -15.7 26.1 -16.7
2026-02-11T12:35:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:35:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:35:37.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.440769
2026-02-11T12:35:37.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:35:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:35:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:35:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:35:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:35:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:34:57', tmtdew=13.77, humidity=41.3, cloud=0.0, wind=18.83, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:34:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:35:37.023 [DEBUG] [Thread-129049] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:35:37.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:35:37.119 [DEBUG] [Thread-129052] [transport.py] [_log()] starting thread (client mode): 0xa2d7baf0
2026-02-11T12:35:37.119 [DEBUG] [Thread-129052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:35:37.135 [DEBUG] [Thread-129052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:35:37.135 [INFO] [Thread-129052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:35:37.142 [DEBUG] [Thread-129052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] client lang: <none>
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] server lang: <none>
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] kex follows: False
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:35:37.143 [DEBUG] [Thread-129052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:35:37.144 [DEBUG] [Thread-129052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:35:37.144 [DEBUG] [Thread-129052] [transport.py] [_log()] Compression: none
2026-02-11T12:35:37.144 [DEBUG] [Thread-129052] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:35:37.200 [DEBUG] [Thread-129052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:35:37.201 [DEBUG] [Thread-129052] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:35:37.201 [DEBUG] [Thread-129052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:35:37.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:35:37.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:35:37.260 [DEBUG] [Thread-129052] [transport.py] [_log()] userauth is OK
2026-02-11T12:35:37.260 [DEBUG] [Thread-129052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:35:37.261 [DEBUG] [Thread-129052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:35:37.261 [DEBUG] [Thread-129052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:35:37.261 [DEBUG] [Thread-129052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:35:37.284 [INFO] [Thread-129052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:35:37.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:35:37.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:35:38.105 [DEBUG] [Thread-129052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:35:38.106 [DEBUG] [Thread-129052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:35:38.156 [DEBUG] [Thread-129052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:35:38.156 [DEBUG] [Thread-129052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:35:38.169 [DEBUG] [Thread-129052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:35:38.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:35:38.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:35:38.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
2026-02-11T12:35:38.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:35:38.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:35:38.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:35:38.216 [DEBUG] [Thread-129052] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:35:42.228 [DEBUG] [Thread-129054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:35:57.278 [DEBUG] [Thread-129055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:36:08.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:36:08.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:36:08.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:36:09.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:36:09.006 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:36:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 35, 33), 13.67, 41.54, 0.0, 20.77, 22.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:36:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:35:33
2026-02-11T12:36:10.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:36:10.508 [DEBUG] [Thread-129056] [transport.py] [_log()] starting thread (client mode): 0xa2d7ab30
2026-02-11T12:36:10.508 [DEBUG] [Thread-129056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:36:10.528 [DEBUG] [Thread-129056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:36:10.528 [INFO] [Thread-129056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:36:10.531 [DEBUG] [Thread-129056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] client lang: <none>
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] server lang: <none>
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] kex follows: False
2026-02-11T12:36:10.532 [DEBUG] [Thread-129056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:36:10.533 [DEBUG] [Thread-129056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:36:10.533 [DEBUG] [Thread-129056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:36:10.533 [DEBUG] [Thread-129056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:36:10.533 [DEBUG] [Thread-129056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:36:10.533 [DEBUG] [Thread-129056] [transport.py] [_log()] Compression: none
2026-02-11T12:36:10.533 [DEBUG] [Thread-129056] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:36:10.552 [DEBUG] [Thread-129056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:36:10.552 [DEBUG] [Thread-129056] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:36:10.553 [DEBUG] [Thread-129056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:36:10.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:36:10.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:36:10.557 [DEBUG] [Thread-129056] [transport.py] [_log()] userauth is OK
2026-02-11T12:36:10.558 [DEBUG] [Thread-129056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:36:10.558 [DEBUG] [Thread-129056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:36:10.558 [DEBUG] [Thread-129056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:36:10.558 [DEBUG] [Thread-129056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:36:10.576 [INFO] [Thread-129056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:36:10.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:36:11.220 [DEBUG] [Thread-129056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:36:11.220 [DEBUG] [Thread-129056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:36:11.221 [DEBUG] [Thread-129056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:36:11.261 [DEBUG] [Thread-129056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:36:11.262 [DEBUG] [Thread-129056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:36:11.265 [DEBUG] [Thread-129056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:36:11.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:36:11.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:36:11.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:36:11.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:36:11.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:36:11.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:36:11.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:36:11.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:36:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:36:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.441116 -999.00  +22.10  26.19     49  +11.00 1 2 1 1 1   888    0 10.64 -45.54 ----- 23.7 26.2 293.8 30.5 26.7 -15.3 26.4 -14.2 25.9 -14.7 26.1 -16.6
2026-02-11T12:36:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:36:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:36:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.441116
2026-02-11T12:36:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:36:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:36:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:36:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:36:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:36:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:35:33', tmtdew=13.67, humidity=41.54, cloud=0.0, wind=20.77, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:35:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:36:11.291 [DEBUG] [Thread-129056] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:36:11.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:36:11.388 [DEBUG] [Thread-129059] [transport.py] [_log()] starting thread (client mode): 0xa2d11e40
2026-02-11T12:36:11.389 [DEBUG] [Thread-129059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:36:11.405 [DEBUG] [Thread-129059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:36:11.405 [INFO] [Thread-129059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:36:11.413 [DEBUG] [Thread-129059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] client lang: <none>
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] server lang: <none>
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] kex follows: False
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] Compression: none
2026-02-11T12:36:11.414 [DEBUG] [Thread-129059] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:36:11.473 [DEBUG] [Thread-129059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:36:11.473 [DEBUG] [Thread-129059] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:36:11.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:36:11.474 [DEBUG] [Thread-129059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:36:11.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:36:11.539 [DEBUG] [Thread-129059] [transport.py] [_log()] userauth is OK
2026-02-11T12:36:11.539 [DEBUG] [Thread-129059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:36:11.539 [DEBUG] [Thread-129059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:36:11.539 [DEBUG] [Thread-129059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:36:11.539 [DEBUG] [Thread-129059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:36:11.558 [INFO] [Thread-129059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:36:11.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:36:11.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:36:12.311 [DEBUG] [Thread-129061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:36:12.401 [DEBUG] [Thread-129059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:36:12.402 [DEBUG] [Thread-129059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:36:12.449 [DEBUG] [Thread-129059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:36:12.449 [DEBUG] [Thread-129059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:36:12.460 [DEBUG] [Thread-129059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:36:12.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:36:12.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')
2026-02-11T12:36:12.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
2026-02-11T12:36:12.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:36:12.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:36:12.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:36:12.495 [DEBUG] [Thread-129059] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:36:14.612 [DEBUG] [Thread-129062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:36:27.361 [DEBUG] [Thread-129063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:36:42.400 [DEBUG] [Thread-129064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:36:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:36:42.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:36:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:36:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 36, 8), 13.78, 41.27, 0.0, 22.69, 22.7, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:36:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:36:08
2026-02-11T12:36:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:36:44.818 [DEBUG] [Thread-129065] [transport.py] [_log()] starting thread (client mode): 0xa2d3f8b0
2026-02-11T12:36:44.818 [DEBUG] [Thread-129065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:36:44.837 [DEBUG] [Thread-129065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:36:44.837 [INFO] [Thread-129065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:36:44.840 [DEBUG] [Thread-129065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] client lang: <none>
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] server lang: <none>
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] kex follows: False
2026-02-11T12:36:44.841 [DEBUG] [Thread-129065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:36:44.842 [DEBUG] [Thread-129065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:36:44.842 [DEBUG] [Thread-129065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:36:44.842 [DEBUG] [Thread-129065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:36:44.842 [DEBUG] [Thread-129065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:36:44.842 [DEBUG] [Thread-129065] [transport.py] [_log()] Compression: none
2026-02-11T12:36:44.842 [DEBUG] [Thread-129065] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:36:44.858 [DEBUG] [Thread-129065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:36:44.859 [DEBUG] [Thread-129065] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:36:44.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:36:44.860 [DEBUG] [Thread-129065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:36:44.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:36:44.862 [DEBUG] [Thread-129065] [transport.py] [_log()] userauth is OK
2026-02-11T12:36:44.862 [DEBUG] [Thread-129065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:36:44.862 [DEBUG] [Thread-129065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:36:44.862 [DEBUG] [Thread-129065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:36:44.862 [DEBUG] [Thread-129065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:36:44.881 [INFO] [Thread-129065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:36:44.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:36:45.465 [DEBUG] [Thread-129065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:36:45.465 [DEBUG] [Thread-129065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:36:45.466 [DEBUG] [Thread-129065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:36:45.506 [DEBUG] [Thread-129065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:36:45.507 [DEBUG] [Thread-129065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:36:45.509 [DEBUG] [Thread-129065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:36:45.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:36:45.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:36:45.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:36:45.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:36:45.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:36:45.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:36:45.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:36:45.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:36:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:36:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.441810 -999.00  +22.40  21.58     48  +11.00 1 2 1 1 1   888    0 10.52 -37.64 ----- 28.0 21.6 316.6 23.4 27.5 -15.6 27.1 -11.7 26.4 -13.9 26.7 -13.6
2026-02-11T12:36:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:36:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:36:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.441810
2026-02-11T12:36:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:36:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:36:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:36:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:36:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:36:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:36:08', tmtdew=13.78, humidity=41.27, cloud=0.0, wind=22.69, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:36:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:36:45.536 [DEBUG] [Thread-129065] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:36:45.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:36:45.632 [DEBUG] [Thread-129068] [transport.py] [_log()] starting thread (client mode): 0xa2d12b30
2026-02-11T12:36:45.632 [DEBUG] [Thread-129068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:36:45.647 [DEBUG] [Thread-129068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:36:45.647 [INFO] [Thread-129068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] client lang: <none>
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] server lang: <none>
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] kex follows: False
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:36:45.655 [DEBUG] [Thread-129068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:36:45.656 [DEBUG] [Thread-129068] [transport.py] [_log()] Compression: none
2026-02-11T12:36:45.656 [DEBUG] [Thread-129068] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:36:45.712 [DEBUG] [Thread-129068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:36:45.713 [DEBUG] [Thread-129068] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:36:45.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:36:45.714 [DEBUG] [Thread-129068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:36:45.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:36:45.771 [DEBUG] [Thread-129068] [transport.py] [_log()] userauth is OK
2026-02-11T12:36:45.772 [DEBUG] [Thread-129068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:36:45.772 [DEBUG] [Thread-129068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:36:45.772 [DEBUG] [Thread-129068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:36:45.772 [DEBUG] [Thread-129068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:36:45.787 [INFO] [Thread-129068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:36:45.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:36:45.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:36:46.639 [DEBUG] [Thread-129068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:36:46.639 [DEBUG] [Thread-129068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:36:46.687 [DEBUG] [Thread-129068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:36:46.688 [DEBUG] [Thread-129068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:36:46.696 [DEBUG] [Thread-129068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:36:46.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:36:46.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:36:46.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:36:46.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:36:46.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:36:46.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:36:46.727 [DEBUG] [Thread-129068] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:36:57.437 [DEBUG] [Thread-129070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:37:09.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:37:09.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:37:12.494 [DEBUG] [Thread-129071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:37:14.645 [DEBUG] [Thread-129072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:37:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:37:16.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:37:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:37:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 36, 44), 13.67, 41.75, 0.0, 21.58, 22.75, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:37:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:36:44
2026-02-11T12:37:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:37:18.955 [DEBUG] [Thread-129073] [transport.py] [_log()] starting thread (client mode): 0xa2d78880
2026-02-11T12:37:18.955 [DEBUG] [Thread-129073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:37:18.974 [DEBUG] [Thread-129073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:37:18.974 [INFO] [Thread-129073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:37:18.977 [DEBUG] [Thread-129073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] client lang: <none>
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] server lang: <none>
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] kex follows: False
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] Compression: none
2026-02-11T12:37:18.978 [DEBUG] [Thread-129073] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:37:18.987 [DEBUG] [Thread-129073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:37:18.987 [DEBUG] [Thread-129073] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:37:18.987 [DEBUG] [Thread-129073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:37:18.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:37:18.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:37:18.989 [DEBUG] [Thread-129073] [transport.py] [_log()] userauth is OK
2026-02-11T12:37:18.989 [DEBUG] [Thread-129073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:37:18.989 [DEBUG] [Thread-129073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:37:18.990 [DEBUG] [Thread-129073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:37:18.990 [DEBUG] [Thread-129073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:37:19.005 [INFO] [Thread-129073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:37:19.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:37:19.638 [DEBUG] [Thread-129073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:37:19.638 [DEBUG] [Thread-129073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:37:19.639 [DEBUG] [Thread-129073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:37:19.679 [DEBUG] [Thread-129073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:37:19.680 [DEBUG] [Thread-129073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:37:19.682 [DEBUG] [Thread-129073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:37:19.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:37:19.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:37:19.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:37:19.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:37:19.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:37:19.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:37:19.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:37:19.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:37:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:37:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.442157 -999.00  +22.90  33.86     48  +11.30 1 2 2 1 1   888    0 10.53 -38.42 ----- 23.2 33.9 275.2 40.1 27.4 -16.9 27.2 -13.7 26.2 -14.8 26.9 -13.7
2026-02-11T12:37:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:37:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:37:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.442157
2026-02-11T12:37:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:37:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:37:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:37:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:37:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:37:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:36:44', tmtdew=13.67, humidity=41.75, cloud=0.0, wind=21.58, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:36:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:37:19.705 [DEBUG] [Thread-129073] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:37:19.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:37:19.795 [DEBUG] [Thread-129076] [transport.py] [_log()] starting thread (client mode): 0xa2d6c340
2026-02-11T12:37:19.795 [DEBUG] [Thread-129076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:37:19.809 [DEBUG] [Thread-129076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:37:19.809 [INFO] [Thread-129076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:37:19.816 [DEBUG] [Thread-129076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] client lang: <none>
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] server lang: <none>
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] kex follows: False
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:37:19.817 [DEBUG] [Thread-129076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:37:19.818 [DEBUG] [Thread-129076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:37:19.818 [DEBUG] [Thread-129076] [transport.py] [_log()] Compression: none
2026-02-11T12:37:19.818 [DEBUG] [Thread-129076] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:37:19.875 [DEBUG] [Thread-129076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:37:19.875 [DEBUG] [Thread-129076] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:37:19.876 [DEBUG] [Thread-129076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:37:19.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:37:19.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:37:19.931 [DEBUG] [Thread-129076] [transport.py] [_log()] userauth is OK
2026-02-11T12:37:19.931 [DEBUG] [Thread-129076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:37:19.931 [DEBUG] [Thread-129076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:37:19.932 [DEBUG] [Thread-129076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:37:19.932 [DEBUG] [Thread-129076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:37:19.951 [INFO] [Thread-129076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:37:19.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:37:19.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:37:20.782 [DEBUG] [Thread-129076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:37:20.782 [DEBUG] [Thread-129076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:37:20.830 [DEBUG] [Thread-129076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:37:20.830 [DEBUG] [Thread-129076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:37:20.839 [DEBUG] [Thread-129076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:37:20.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:37:20.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')
2026-02-11T12:37:20.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
2026-02-11T12:37:20.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:37:20.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:37:20.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:37:20.876 [DEBUG] [Thread-129076] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:37:27.535 [DEBUG] [Thread-129078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:37:42.586 [DEBUG] [Thread-129079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:37:50.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:37:50.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:37:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:37:52.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 37, 19), 13.31, 42.66, 0.0, 20.01, 22.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:37:52.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:37:19
2026-02-11T12:37:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:37:53.170 [DEBUG] [Thread-129080] [transport.py] [_log()] starting thread (client mode): 0xa2d3ce80
2026-02-11T12:37:53.170 [DEBUG] [Thread-129080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:37:53.196 [DEBUG] [Thread-129080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:37:53.196 [INFO] [Thread-129080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:37:53.199 [DEBUG] [Thread-129080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:37:53.199 [DEBUG] [Thread-129080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:37:53.199 [DEBUG] [Thread-129080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:37:53.199 [DEBUG] [Thread-129080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:53.199 [DEBUG] [Thread-129080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:53.199 [DEBUG] [Thread-129080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:53.199 [DEBUG] [Thread-129080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] client lang: <none>
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] server lang: <none>
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] kex follows: False
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:37:53.200 [DEBUG] [Thread-129080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:37:53.201 [DEBUG] [Thread-129080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:37:53.201 [DEBUG] [Thread-129080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:37:53.201 [DEBUG] [Thread-129080] [transport.py] [_log()] Compression: none
2026-02-11T12:37:53.201 [DEBUG] [Thread-129080] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:37:53.219 [DEBUG] [Thread-129080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:37:53.219 [DEBUG] [Thread-129080] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:37:53.220 [DEBUG] [Thread-129080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:37:53.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:37:53.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:37:53.222 [DEBUG] [Thread-129080] [transport.py] [_log()] userauth is OK
2026-02-11T12:37:53.222 [DEBUG] [Thread-129080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:37:53.222 [DEBUG] [Thread-129080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:37:53.222 [DEBUG] [Thread-129080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:37:53.222 [DEBUG] [Thread-129080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:37:53.239 [INFO] [Thread-129080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:37:53.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:37:54.027 [DEBUG] [Thread-129080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:37:54.027 [DEBUG] [Thread-129080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:37:54.028 [DEBUG] [Thread-129080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:37:54.068 [DEBUG] [Thread-129080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:37:54.068 [DEBUG] [Thread-129080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:37:54.072 [DEBUG] [Thread-129080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:37:54.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:37:54.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:37:54.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:37:54.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:37:54.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:37:54.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:37:54.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:37:54.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:37:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:37:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.442505 -999.00  +22.90  31.90     47  +11.00 1 2 2 1 1   888    0 10.86 -37.89 ----- 22.8 31.9 273.8 37.6 27.8 -13.4 27.2 -12.2 26.4 -13.2 26.9 -13.6
2026-02-11T12:37:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:37:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:37:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.442505
2026-02-11T12:37:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:37:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:37:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:37:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:37:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:37:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:37:19', tmtdew=13.31, humidity=42.66, cloud=0.0, wind=20.01, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:37:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:37:54.099 [DEBUG] [Thread-129080] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:37:54.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:37:54.196 [DEBUG] [Thread-129083] [transport.py] [_log()] starting thread (client mode): 0xa2d3ff10
2026-02-11T12:37:54.196 [DEBUG] [Thread-129083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:37:54.210 [DEBUG] [Thread-129083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:37:54.210 [INFO] [Thread-129083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:37:54.218 [DEBUG] [Thread-129083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:37:54.218 [DEBUG] [Thread-129083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:37:54.218 [DEBUG] [Thread-129083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:37:54.218 [DEBUG] [Thread-129083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:54.218 [DEBUG] [Thread-129083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:37:54.218 [DEBUG] [Thread-129083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] client lang: <none>
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] server lang: <none>
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] kex follows: False
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] Compression: none
2026-02-11T12:37:54.219 [DEBUG] [Thread-129083] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:37:54.275 [DEBUG] [Thread-129083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:37:54.275 [DEBUG] [Thread-129083] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:37:54.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:37:54.277 [DEBUG] [Thread-129083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:37:54.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:37:54.331 [DEBUG] [Thread-129083] [transport.py] [_log()] userauth is OK
2026-02-11T12:37:54.332 [DEBUG] [Thread-129083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:37:54.332 [DEBUG] [Thread-129083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:37:54.332 [DEBUG] [Thread-129083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:37:54.332 [DEBUG] [Thread-129083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:37:54.350 [INFO] [Thread-129083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:37:54.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:37:54.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:37:55.167 [DEBUG] [Thread-129083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:37:55.167 [DEBUG] [Thread-129083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:37:55.215 [DEBUG] [Thread-129083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:37:55.215 [DEBUG] [Thread-129083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:37:55.224 [DEBUG] [Thread-129083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:37:55.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:37:55.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:37:55.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:37:55.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:37:55.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:37:55.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:37:55.260 [DEBUG] [Thread-129083] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:37:57.625 [DEBUG] [Thread-129085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:38:09.290 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:38:09.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:38:12.675 [DEBUG] [Thread-129086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:38:14.682 [DEBUG] [Thread-129087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:38:25.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:38:25.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:38:25.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:38:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 37, 54), 14.18, 40.38, 0.0, 32.82, 23.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:38:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:37:54
2026-02-11T12:38:27.712 [DEBUG] [Thread-129088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:38:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:38:28.151 [DEBUG] [Thread-129089] [transport.py] [_log()] starting thread (client mode): 0xa2d10cd0
2026-02-11T12:38:28.151 [DEBUG] [Thread-129089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:38:28.170 [DEBUG] [Thread-129089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:38:28.170 [INFO] [Thread-129089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:38:28.173 [DEBUG] [Thread-129089] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:38:28.173 [DEBUG] [Thread-129089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:38:28.173 [DEBUG] [Thread-129089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] client lang: <none>
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] server lang: <none>
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] kex follows: False
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:38:28.174 [DEBUG] [Thread-129089] [transport.py] [_log()] Compression: none
2026-02-11T12:38:28.175 [DEBUG] [Thread-129089] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:38:28.191 [DEBUG] [Thread-129089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:38:28.192 [DEBUG] [Thread-129089] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:38:28.192 [DEBUG] [Thread-129089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:38:28.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:38:28.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:38:28.194 [DEBUG] [Thread-129089] [transport.py] [_log()] userauth is OK
2026-02-11T12:38:28.195 [DEBUG] [Thread-129089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:38:28.195 [DEBUG] [Thread-129089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:38:28.195 [DEBUG] [Thread-129089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:38:28.195 [DEBUG] [Thread-129089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:38:28.219 [INFO] [Thread-129089] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:38:28.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:38:28.855 [DEBUG] [Thread-129089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:38:28.855 [DEBUG] [Thread-129089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:38:28.855 [DEBUG] [Thread-129089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:38:28.896 [DEBUG] [Thread-129089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:38:28.897 [DEBUG] [Thread-129089] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:38:28.900 [DEBUG] [Thread-129089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:38:28.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:38:28.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:38:28.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:38:28.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:38:28.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:38:28.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:38:28.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:38:28.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:38:28.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:38:28.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.442852 -999.00  +23.40  24.44     46  +11.20 1 2 1 1 1   888    0 10.48 -41.58 ----- 21.7 24.4 270.6 36.4 28.3 -14.6 27.6 -10.5 26.9 -12.0 27.4 -11.5
2026-02-11T12:38:28.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:38:28.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:38:28.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.442852
2026-02-11T12:38:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:38:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:38:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:38:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:38:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:38:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:37:54', tmtdew=14.18, humidity=40.38, cloud=0.0, wind=32.82, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:37:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:38:28.928 [DEBUG] [Thread-129089] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:38:29.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:38:29.024 [DEBUG] [Thread-129092] [transport.py] [_log()] starting thread (client mode): 0xa2d11f90
2026-02-11T12:38:29.024 [DEBUG] [Thread-129092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:38:29.039 [DEBUG] [Thread-129092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:38:29.039 [INFO] [Thread-129092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] client lang: <none>
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] server lang: <none>
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] kex follows: False
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:38:29.047 [DEBUG] [Thread-129092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:38:29.048 [DEBUG] [Thread-129092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:38:29.048 [DEBUG] [Thread-129092] [transport.py] [_log()] Compression: none
2026-02-11T12:38:29.048 [DEBUG] [Thread-129092] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:38:29.103 [DEBUG] [Thread-129092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:38:29.104 [DEBUG] [Thread-129092] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:38:29.105 [DEBUG] [Thread-129092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:38:29.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:38:29.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:38:29.164 [DEBUG] [Thread-129092] [transport.py] [_log()] userauth is OK
2026-02-11T12:38:29.164 [DEBUG] [Thread-129092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:38:29.164 [DEBUG] [Thread-129092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:38:29.164 [DEBUG] [Thread-129092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:38:29.165 [DEBUG] [Thread-129092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:38:29.184 [INFO] [Thread-129092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:38:29.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:38:29.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:38:30.067 [DEBUG] [Thread-129092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:38:30.067 [DEBUG] [Thread-129092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:38:30.115 [DEBUG] [Thread-129092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:38:30.115 [DEBUG] [Thread-129092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:38:30.124 [DEBUG] [Thread-129092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:38:30.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:38:30.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:38:30.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:38:30.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:38:30.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:38:30.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:38:30.161 [DEBUG] [Thread-129092] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:38:42.750 [DEBUG] [Thread-129094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:38:57.802 [DEBUG] [Thread-129095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:39:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:39:00.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:39:00.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:39:02.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 38, 29), 14.57, 39.47, 0.0, 34.62, 23.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:39:02.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:38:29
2026-02-11T12:39:02.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:39:02.508 [DEBUG] [Thread-129096] [transport.py] [_log()] starting thread (client mode): 0xa2d6d240
2026-02-11T12:39:02.508 [DEBUG] [Thread-129096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:39:02.528 [DEBUG] [Thread-129096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:39:02.528 [INFO] [Thread-129096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:39:02.532 [DEBUG] [Thread-129096] [transport.py] [_log()] client lang: <none>
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] server lang: <none>
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] kex follows: False
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] Compression: none
2026-02-11T12:39:02.533 [DEBUG] [Thread-129096] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:39:02.552 [DEBUG] [Thread-129096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:39:02.553 [DEBUG] [Thread-129096] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:39:02.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:39:02.554 [DEBUG] [Thread-129096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:39:02.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:39:02.556 [DEBUG] [Thread-129096] [transport.py] [_log()] userauth is OK
2026-02-11T12:39:02.556 [DEBUG] [Thread-129096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:39:02.556 [DEBUG] [Thread-129096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:39:02.556 [DEBUG] [Thread-129096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:39:02.556 [DEBUG] [Thread-129096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:39:02.580 [INFO] [Thread-129096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:39:02.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:39:03.183 [DEBUG] [Thread-129096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:39:03.183 [DEBUG] [Thread-129096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:39:03.183 [DEBUG] [Thread-129096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:39:03.224 [DEBUG] [Thread-129096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:39:03.224 [DEBUG] [Thread-129096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:39:03.226 [DEBUG] [Thread-129096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:39:03.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:39:03.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:39:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:39:03.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:39:03.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:39:03.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:39:03.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:39:03.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:39:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:39:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.443199 -999.00  +23.60  29.64     45  +11.00 1 2 1 1 1   888    0 10.73 -36.96 ----- 23.7 29.6 294.6 33.8 28.6 -14.9 27.9 -10.7 27.2 -12.6 27.7 -12.4
2026-02-11T12:39:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:39:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:39:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.443199
2026-02-11T12:39:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:39:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:39:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:39:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:39:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:39:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:38:29', tmtdew=14.57, humidity=39.47, cloud=0.0, wind=34.62, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:38:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:39:03.247 [DEBUG] [Thread-129096] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:39:03.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:39:03.343 [DEBUG] [Thread-129099] [transport.py] [_log()] starting thread (client mode): 0xa2d6e500
2026-02-11T12:39:03.343 [DEBUG] [Thread-129099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:39:03.358 [DEBUG] [Thread-129099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:39:03.358 [INFO] [Thread-129099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:39:03.365 [DEBUG] [Thread-129099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] client lang: <none>
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] server lang: <none>
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] kex follows: False
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] Compression: none
2026-02-11T12:39:03.366 [DEBUG] [Thread-129099] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:39:03.426 [DEBUG] [Thread-129099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:39:03.427 [DEBUG] [Thread-129099] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:39:03.427 [DEBUG] [Thread-129099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:39:03.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:39:03.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:39:03.491 [DEBUG] [Thread-129099] [transport.py] [_log()] userauth is OK
2026-02-11T12:39:03.491 [DEBUG] [Thread-129099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:39:03.491 [DEBUG] [Thread-129099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:39:03.491 [DEBUG] [Thread-129099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:39:03.491 [DEBUG] [Thread-129099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:39:03.511 [INFO] [Thread-129099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:39:03.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:39:03.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:39:04.371 [DEBUG] [Thread-129099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:39:04.372 [DEBUG] [Thread-129099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:39:04.419 [DEBUG] [Thread-129099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:39:04.420 [DEBUG] [Thread-129099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:39:04.429 [DEBUG] [Thread-129099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:39:04.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:39:04.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:39:04.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:39:04.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:39:04.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:39:04.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:39:04.466 [DEBUG] [Thread-129099] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:39:09.429 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:39:09.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:39:12.840 [DEBUG] [Thread-129101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:39:14.716 [DEBUG] [Thread-129102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:39:27.892 [DEBUG] [Thread-129103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:39:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:39:34.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:39:34.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:39:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 39, 7), 14.96, 38.56, 0.0, 28.51, 23.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:39:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:39:07
2026-02-11T12:39:36.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:39:36.839 [DEBUG] [Thread-129104] [transport.py] [_log()] starting thread (client mode): 0xa2d6e740
2026-02-11T12:39:36.839 [DEBUG] [Thread-129104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:39:36.859 [DEBUG] [Thread-129104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:39:36.859 [INFO] [Thread-129104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:39:36.860 [DEBUG] [Thread-129104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:39:36.860 [DEBUG] [Thread-129104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:39:36.860 [DEBUG] [Thread-129104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:39:36.860 [DEBUG] [Thread-129104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:36.860 [DEBUG] [Thread-129104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:36.860 [DEBUG] [Thread-129104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:36.860 [DEBUG] [Thread-129104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] client lang: <none>
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] server lang: <none>
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] kex follows: False
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] Compression: none
2026-02-11T12:39:36.861 [DEBUG] [Thread-129104] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:39:36.875 [DEBUG] [Thread-129104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:39:36.876 [DEBUG] [Thread-129104] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:39:36.877 [DEBUG] [Thread-129104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:39:36.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:39:36.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:39:36.879 [DEBUG] [Thread-129104] [transport.py] [_log()] userauth is OK
2026-02-11T12:39:36.880 [DEBUG] [Thread-129104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:39:36.880 [DEBUG] [Thread-129104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:39:36.880 [DEBUG] [Thread-129104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:39:36.880 [DEBUG] [Thread-129104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:39:36.900 [INFO] [Thread-129104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:39:36.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:39:37.540 [DEBUG] [Thread-129104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:39:37.541 [DEBUG] [Thread-129104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:39:37.541 [DEBUG] [Thread-129104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:39:37.581 [DEBUG] [Thread-129104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:39:37.582 [DEBUG] [Thread-129104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:39:37.585 [DEBUG] [Thread-129104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:39:37.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:39:37.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:39:37.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:39:37.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:39:37.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:39:37.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:39:37.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:39:37.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:39:37.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:39:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.443546 -999.00  +23.50  29.10     45  +11.10 1 2 1 1 1   888    0 10.73 -34.39 ----- 25.6 29.1 314.4 31.8 28.5 -15.5 27.8 -14.4 27.2 -13.4 27.8 -15.7
2026-02-11T12:39:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:39:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:39:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.443546
2026-02-11T12:39:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:39:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:39:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:39:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:39:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:39:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:39:07', tmtdew=14.96, humidity=38.56, cloud=0.0, wind=28.51, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:38:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:39:37.611 [DEBUG] [Thread-129104] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:39:37.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:39:37.710 [DEBUG] [Thread-129107] [transport.py] [_log()] starting thread (client mode): 0xa2d10af0
2026-02-11T12:39:37.710 [DEBUG] [Thread-129107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:39:37.733 [DEBUG] [Thread-129107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:39:37.733 [INFO] [Thread-129107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:39:37.741 [DEBUG] [Thread-129107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:39:37.741 [DEBUG] [Thread-129107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] client lang: <none>
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] server lang: <none>
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] kex follows: False
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:39:37.742 [DEBUG] [Thread-129107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:39:37.743 [DEBUG] [Thread-129107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:39:37.743 [DEBUG] [Thread-129107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:39:37.743 [DEBUG] [Thread-129107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:39:37.743 [DEBUG] [Thread-129107] [transport.py] [_log()] Compression: none
2026-02-11T12:39:37.743 [DEBUG] [Thread-129107] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:39:37.801 [DEBUG] [Thread-129107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:39:37.801 [DEBUG] [Thread-129107] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:39:37.802 [DEBUG] [Thread-129107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:39:37.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:39:37.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:39:37.857 [DEBUG] [Thread-129107] [transport.py] [_log()] userauth is OK
2026-02-11T12:39:37.857 [DEBUG] [Thread-129107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:39:37.857 [DEBUG] [Thread-129107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:39:37.858 [DEBUG] [Thread-129107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:39:37.858 [DEBUG] [Thread-129107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:39:37.876 [INFO] [Thread-129107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:39:37.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:39:37.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:39:38.773 [DEBUG] [Thread-129107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:39:38.773 [DEBUG] [Thread-129107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:39:38.821 [DEBUG] [Thread-129107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:39:38.822 [DEBUG] [Thread-129107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:39:38.831 [DEBUG] [Thread-129107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:39:38.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:39:38.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')
2026-02-11T12:39:38.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:39:38.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:39:38.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:39:38.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:39:38.872 [DEBUG] [Thread-129107] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:39:42.932 [DEBUG] [Thread-129109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:39:57.990 [DEBUG] [Thread-129110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:40:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:40:08.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:40:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:40:09.573 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:40:09.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:40:10.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 39, 42), 15.38, 37.68, 0.0, 25.9, 24.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:40:10.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:39:42
2026-02-11T12:40:11.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:40:11.486 [DEBUG] [Thread-129111] [transport.py] [_log()] starting thread (client mode): 0xa2d12a40
2026-02-11T12:40:11.486 [DEBUG] [Thread-129111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:40:11.505 [DEBUG] [Thread-129111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:40:11.505 [INFO] [Thread-129111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] client lang: <none>
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] server lang: <none>
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] kex follows: False
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] Compression: none
2026-02-11T12:40:11.508 [DEBUG] [Thread-129111] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:40:11.525 [DEBUG] [Thread-129111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:40:11.526 [DEBUG] [Thread-129111] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:40:11.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:40:11.527 [DEBUG] [Thread-129111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:40:11.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:40:11.529 [DEBUG] [Thread-129111] [transport.py] [_log()] userauth is OK
2026-02-11T12:40:11.529 [DEBUG] [Thread-129111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:40:11.529 [DEBUG] [Thread-129111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:40:11.529 [DEBUG] [Thread-129111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:40:11.530 [DEBUG] [Thread-129111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:40:11.547 [INFO] [Thread-129111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:40:11.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:40:12.261 [DEBUG] [Thread-129111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:40:12.261 [DEBUG] [Thread-129111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:40:12.262 [DEBUG] [Thread-129111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:40:12.302 [DEBUG] [Thread-129111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:40:12.302 [DEBUG] [Thread-129111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:40:12.305 [DEBUG] [Thread-129111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:40:12.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:40:12.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:40:12.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:40:12.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:40:12.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:40:12.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:40:12.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:40:12.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:40:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:40:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.443894 -999.00  +23.70  22.04     45  +11.30 1 2 1 1 1   888    0 11.13 -30.32 ----- 26.8 22.0 283.3 36.6 29.0 -13.3 28.1 -10.8 27.6 -10.7 27.9 -13.8
2026-02-11T12:40:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:40:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:40:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.443894
2026-02-11T12:40:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:40:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:40:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:40:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:40:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:40:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:39:42', tmtdew=15.38, humidity=37.68, cloud=0.0, wind=25.9, temperature=24.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:39:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:40:12.328 [DEBUG] [Thread-129111] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:40:12.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:40:12.429 [DEBUG] [Thread-129114] [transport.py] [_log()] starting thread (client mode): 0xa2d119f0
2026-02-11T12:40:12.429 [DEBUG] [Thread-129114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:40:12.444 [DEBUG] [Thread-129114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:40:12.444 [INFO] [Thread-129114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:40:12.452 [DEBUG] [Thread-129114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:40:12.452 [DEBUG] [Thread-129114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:40:12.452 [DEBUG] [Thread-129114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:40:12.452 [DEBUG] [Thread-129114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:12.452 [DEBUG] [Thread-129114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:12.452 [DEBUG] [Thread-129114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] client lang: <none>
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] server lang: <none>
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] kex follows: False
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] Compression: none
2026-02-11T12:40:12.453 [DEBUG] [Thread-129114] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:40:12.508 [DEBUG] [Thread-129114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:40:12.508 [DEBUG] [Thread-129114] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:40:12.509 [DEBUG] [Thread-129114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:40:12.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:40:12.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:40:12.565 [DEBUG] [Thread-129114] [transport.py] [_log()] userauth is OK
2026-02-11T12:40:12.565 [DEBUG] [Thread-129114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:40:12.565 [DEBUG] [Thread-129114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:40:12.565 [DEBUG] [Thread-129114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:40:12.566 [DEBUG] [Thread-129114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:40:12.587 [INFO] [Thread-129114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:40:12.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:40:12.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:40:13.024 [DEBUG] [Thread-129116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:40:13.424 [DEBUG] [Thread-129114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:40:13.424 [DEBUG] [Thread-129114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:40:13.472 [DEBUG] [Thread-129114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:40:13.472 [DEBUG] [Thread-129114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:40:13.481 [DEBUG] [Thread-129114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:40:13.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:40:13.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:40:13.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:40:13.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:40:13.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:40:13.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:40:13.515 [DEBUG] [Thread-129114] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:40:14.749 [DEBUG] [Thread-129117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:40:28.070 [DEBUG] [Thread-129118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:40:43.108 [DEBUG] [Thread-129119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:40:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:40:43.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:40:43.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
2026-02-11T12:40:45.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 40, 18), 15.11, 38.38, 0.0, 34.95, 24.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:40:45.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:40:18
2026-02-11T12:40:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:40:45.868 [DEBUG] [Thread-129120] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc10
2026-02-11T12:40:45.868 [DEBUG] [Thread-129120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:40:45.891 [DEBUG] [Thread-129120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:40:45.891 [INFO] [Thread-129120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:40:45.895 [DEBUG] [Thread-129120] [transport.py] [_log()] client lang: <none>
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] server lang: <none>
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] kex follows: False
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] Compression: none
2026-02-11T12:40:45.896 [DEBUG] [Thread-129120] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:40:45.914 [DEBUG] [Thread-129120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:40:45.915 [DEBUG] [Thread-129120] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:40:45.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:40:45.917 [DEBUG] [Thread-129120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:40:45.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:40:45.919 [DEBUG] [Thread-129120] [transport.py] [_log()] userauth is OK
2026-02-11T12:40:45.919 [DEBUG] [Thread-129120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:40:45.919 [DEBUG] [Thread-129120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:40:45.919 [DEBUG] [Thread-129120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:40:45.919 [DEBUG] [Thread-129120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:40:45.956 [INFO] [Thread-129120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:40:45.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:40:46.625 [DEBUG] [Thread-129120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:40:46.626 [DEBUG] [Thread-129120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:40:46.626 [DEBUG] [Thread-129120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:40:46.667 [DEBUG] [Thread-129120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:40:46.667 [DEBUG] [Thread-129120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:40:46.669 [DEBUG] [Thread-129120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:40:46.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:40:46.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:40:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:40:46.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:40:46.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:40:46.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:40:46.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:40:46.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.444588 -999.00  +23.30  35.04     44  +10.60 1 2 2 1 1   888    0 11.33 -20.91 ----- 34.0 35.0 294.4 43.1 29.1 -15.8 28.5 -13.5 27.6 -14.6 28.5 -13.9
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.444588
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:40:46.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:40:18', tmtdew=15.11, humidity=38.38, cloud=0.0, wind=34.95, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:40:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:40:46.688 [DEBUG] [Thread-129120] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:40:46.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:40:46.771 [DEBUG] [Thread-129123] [transport.py] [_log()] starting thread (client mode): 0xa2d6d150
2026-02-11T12:40:46.771 [DEBUG] [Thread-129123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:40:46.788 [DEBUG] [Thread-129123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:40:46.788 [INFO] [Thread-129123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:40:46.795 [DEBUG] [Thread-129123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] client lang: <none>
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] server lang: <none>
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] kex follows: False
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:40:46.796 [DEBUG] [Thread-129123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:40:46.797 [DEBUG] [Thread-129123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:40:46.797 [DEBUG] [Thread-129123] [transport.py] [_log()] Compression: none
2026-02-11T12:40:46.797 [DEBUG] [Thread-129123] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:40:46.858 [DEBUG] [Thread-129123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:40:46.858 [DEBUG] [Thread-129123] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:40:46.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:40:46.860 [DEBUG] [Thread-129123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:40:46.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:40:46.917 [DEBUG] [Thread-129123] [transport.py] [_log()] userauth is OK
2026-02-11T12:40:46.918 [DEBUG] [Thread-129123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:40:46.918 [DEBUG] [Thread-129123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:40:46.918 [DEBUG] [Thread-129123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:40:46.918 [DEBUG] [Thread-129123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:40:46.940 [INFO] [Thread-129123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:40:46.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:40:46.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:40:47.818 [DEBUG] [Thread-129123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:40:47.818 [DEBUG] [Thread-129123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:40:47.866 [DEBUG] [Thread-129123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:40:47.866 [DEBUG] [Thread-129123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:40:47.875 [DEBUG] [Thread-129123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:40:47.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:40:47.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')
2026-02-11T12:40:47.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:40:47.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:40:47.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:40:47.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:40:47.912 [DEBUG] [Thread-129123] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:40:58.145 [DEBUG] [Thread-129125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:41:09.717 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:41:09.718 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:41:13.202 [DEBUG] [Thread-129126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:41:14.816 [DEBUG] [Thread-129127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:41:17.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:41:17.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:41:17.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:41:19.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 40, 53), 15.41, 37.63, 0.0, 27.42, 24.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:41:19.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:40:53
2026-02-11T12:41:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:41:20.306 [DEBUG] [Thread-129128] [transport.py] [_log()] starting thread (client mode): 0xa2db5210
2026-02-11T12:41:20.306 [DEBUG] [Thread-129128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:41:20.326 [DEBUG] [Thread-129128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:41:20.326 [INFO] [Thread-129128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] client lang: <none>
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] server lang: <none>
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] kex follows: False
2026-02-11T12:41:20.329 [DEBUG] [Thread-129128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:41:20.330 [DEBUG] [Thread-129128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:41:20.330 [DEBUG] [Thread-129128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:41:20.330 [DEBUG] [Thread-129128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:41:20.330 [DEBUG] [Thread-129128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:41:20.330 [DEBUG] [Thread-129128] [transport.py] [_log()] Compression: none
2026-02-11T12:41:20.330 [DEBUG] [Thread-129128] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:41:20.347 [DEBUG] [Thread-129128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:41:20.347 [DEBUG] [Thread-129128] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:41:20.347 [DEBUG] [Thread-129128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:41:20.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:41:20.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:41:20.347 [DEBUG] [Thread-129128] [transport.py] [_log()] userauth is OK
2026-02-11T12:41:20.347 [DEBUG] [Thread-129128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:41:20.348 [DEBUG] [Thread-129128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:41:20.348 [DEBUG] [Thread-129128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:41:20.348 [DEBUG] [Thread-129128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:41:20.362 [INFO] [Thread-129128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:41:20.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:41:20.979 [DEBUG] [Thread-129128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:41:20.979 [DEBUG] [Thread-129128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:41:20.979 [DEBUG] [Thread-129128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:41:21.019 [DEBUG] [Thread-129128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:41:21.020 [DEBUG] [Thread-129128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:41:21.022 [DEBUG] [Thread-129128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:41:21.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:41:21.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:41:21.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:41:21.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:41:21.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:41:21.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:41:21.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:41:21.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:41:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:41:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.444935 -999.00  +23.20  31.80     45  +10.80 1 2 2 1 1   888    0 11.41 -18.32 ----- 31.0 31.8 307.2 37.8 29.3 -14.5 28.5 -12.5 27.8 -14.0 28.5 -14.1
2026-02-11T12:41:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:41:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:41:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.444935
2026-02-11T12:41:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:41:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:41:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:41:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:41:21.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:41:21.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:40:53', tmtdew=15.41, humidity=37.63, cloud=0.0, wind=27.42, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:40:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:41:21.049 [DEBUG] [Thread-129128] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:41:21.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:41:21.143 [DEBUG] [Thread-129131] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc10
2026-02-11T12:41:21.143 [DEBUG] [Thread-129131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:41:21.158 [DEBUG] [Thread-129131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:41:21.158 [INFO] [Thread-129131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] client lang: <none>
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] server lang: <none>
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] kex follows: False
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:41:21.166 [DEBUG] [Thread-129131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:41:21.167 [DEBUG] [Thread-129131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:41:21.167 [DEBUG] [Thread-129131] [transport.py] [_log()] Compression: none
2026-02-11T12:41:21.167 [DEBUG] [Thread-129131] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:41:21.226 [DEBUG] [Thread-129131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:41:21.226 [DEBUG] [Thread-129131] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:41:21.227 [DEBUG] [Thread-129131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:41:21.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:41:21.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:41:21.283 [DEBUG] [Thread-129131] [transport.py] [_log()] userauth is OK
2026-02-11T12:41:21.283 [DEBUG] [Thread-129131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:41:21.283 [DEBUG] [Thread-129131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:41:21.283 [DEBUG] [Thread-129131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:41:21.284 [DEBUG] [Thread-129131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:41:21.301 [INFO] [Thread-129131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:41:21.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:41:21.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:41:22.136 [DEBUG] [Thread-129131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:41:22.136 [DEBUG] [Thread-129131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:41:22.184 [DEBUG] [Thread-129131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:41:22.184 [DEBUG] [Thread-129131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:41:22.193 [DEBUG] [Thread-129131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:41:22.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:41: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')
2026-02-11T12:41:22.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:41:22.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:41:22.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:41:22.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:41:22.228 [DEBUG] [Thread-129131] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:41:28.241 [DEBUG] [Thread-129133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:41:43.294 [DEBUG] [Thread-129134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:41:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:41:52.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:41:52.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:41:54.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 41, 28), 15.21, 38.03, 0.0, 24.03, 24.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:41:54.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:41:28
2026-02-11T12:41:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:41:54.541 [DEBUG] [Thread-129135] [transport.py] [_log()] starting thread (client mode): 0xa2db60b0
2026-02-11T12:41:54.541 [DEBUG] [Thread-129135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:41:54.562 [DEBUG] [Thread-129135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:41:54.562 [INFO] [Thread-129135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] client lang: <none>
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] server lang: <none>
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] kex follows: False
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] Compression: none
2026-02-11T12:41:54.565 [DEBUG] [Thread-129135] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:41:54.583 [DEBUG] [Thread-129135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:41:54.583 [DEBUG] [Thread-129135] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:41:54.584 [DEBUG] [Thread-129135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:41:54.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:41:54.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:41:54.586 [DEBUG] [Thread-129135] [transport.py] [_log()] userauth is OK
2026-02-11T12:41:54.586 [DEBUG] [Thread-129135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:41:54.586 [DEBUG] [Thread-129135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:41:54.586 [DEBUG] [Thread-129135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:41:54.586 [DEBUG] [Thread-129135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:41:54.610 [INFO] [Thread-129135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:41:54.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:41:55.343 [DEBUG] [Thread-129135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:41:55.343 [DEBUG] [Thread-129135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:41:55.344 [DEBUG] [Thread-129135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:41:55.384 [DEBUG] [Thread-129135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:41:55.384 [DEBUG] [Thread-129135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:41:55.387 [DEBUG] [Thread-129135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:41:55.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:41:55.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:41:55.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:41:55.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:41:55.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:41:55.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:41:55.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:41:55.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:41:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:41:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.445283 -999.00  +23.10  28.61     45  +10.70 1 2 1 1 1   888    0 11.45 -15.68 ----- 31.3 28.6 299.2 43.6 29.4 -16.0 28.6 -13.2 27.7 -15.1 28.7 -14.6
2026-02-11T12:41:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:41:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:41:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.445283
2026-02-11T12:41:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:41:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:41:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:41:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:41:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:41:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:41:28', tmtdew=15.21, humidity=38.03, cloud=0.0, wind=24.03, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:41:12.451', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:41:55.411 [DEBUG] [Thread-129135] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:41:55.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:41:55.507 [DEBUG] [Thread-129138] [transport.py] [_log()] starting thread (client mode): 0xa2d3e320
2026-02-11T12:41:55.507 [DEBUG] [Thread-129138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:41:55.522 [DEBUG] [Thread-129138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:41:55.522 [INFO] [Thread-129138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:41:55.530 [DEBUG] [Thread-129138] [transport.py] [_log()] client lang: <none>
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] server lang: <none>
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] kex follows: False
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] Compression: none
2026-02-11T12:41:55.531 [DEBUG] [Thread-129138] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:41:55.591 [DEBUG] [Thread-129138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:41:55.591 [DEBUG] [Thread-129138] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:41:55.592 [DEBUG] [Thread-129138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:41:55.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:41:55.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:41:55.646 [DEBUG] [Thread-129138] [transport.py] [_log()] userauth is OK
2026-02-11T12:41:55.647 [DEBUG] [Thread-129138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:41:55.647 [DEBUG] [Thread-129138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:41:55.647 [DEBUG] [Thread-129138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:41:55.647 [DEBUG] [Thread-129138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:41:55.666 [INFO] [Thread-129138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:41:55.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:41:55.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:41:56.523 [DEBUG] [Thread-129138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:41:56.523 [DEBUG] [Thread-129138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:41:56.571 [DEBUG] [Thread-129138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:41:56.571 [DEBUG] [Thread-129138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:41:56.579 [DEBUG] [Thread-129138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:41:56.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:41:56.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:41:56.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
2026-02-11T12:41:56.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:41:56.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:41:56.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:41:56.614 [DEBUG] [Thread-129138] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:41:58.329 [DEBUG] [Thread-129140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:42:09.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:42:09.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:42:13.384 [DEBUG] [Thread-129141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:42:14.849 [DEBUG] [Thread-129142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:42:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:42:26.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:42:26.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:42:28.422 [DEBUG] [Thread-129143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:42:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 42, 3), 14.95, 38.65, 0.0, 20.22, 23.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:42:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:42:03
2026-02-11T12:42:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:42:29.000 [DEBUG] [Thread-129144] [transport.py] [_log()] starting thread (client mode): 0xa2d3d450
2026-02-11T12:42:29.000 [DEBUG] [Thread-129144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:42:29.011 [DEBUG] [Thread-129144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:42:29.012 [INFO] [Thread-129144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:42:29.014 [DEBUG] [Thread-129144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:42:29.014 [DEBUG] [Thread-129144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:42:29.014 [DEBUG] [Thread-129144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:42:29.014 [DEBUG] [Thread-129144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:42:29.014 [DEBUG] [Thread-129144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:42:29.014 [DEBUG] [Thread-129144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] client lang: <none>
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] server lang: <none>
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] kex follows: False
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] Compression: none
2026-02-11T12:42:29.015 [DEBUG] [Thread-129144] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:42:29.032 [DEBUG] [Thread-129144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:42:29.033 [DEBUG] [Thread-129144] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:42:29.033 [DEBUG] [Thread-129144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:42:29.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:42:29.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:42:29.035 [DEBUG] [Thread-129144] [transport.py] [_log()] userauth is OK
2026-02-11T12:42:29.035 [DEBUG] [Thread-129144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:42:29.035 [DEBUG] [Thread-129144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:42:29.035 [DEBUG] [Thread-129144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:42:29.035 [DEBUG] [Thread-129144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:42:29.060 [INFO] [Thread-129144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:42:29.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:42:29.639 [DEBUG] [Thread-129144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:42:29.639 [DEBUG] [Thread-129144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:42:29.640 [DEBUG] [Thread-129144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:42:29.680 [DEBUG] [Thread-129144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:42:29.680 [DEBUG] [Thread-129144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:42:29.684 [DEBUG] [Thread-129144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:42:29.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:42:29.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:42:29.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:42:29.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:42:29.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:42:29.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:42:29.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:42:29.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:42:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:42:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.445977 -999.00  +22.60  15.02     46  +10.70 1 2 1 1 1   888    0 11.50 -15.26 ----- 16.8 15.0 311.0 28.5 29.6 -14.7 28.7 -13.1 28.0 -12.3 28.8 -15.0
2026-02-11T12:42:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:42:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:42:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.445977
2026-02-11T12:42:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:42:29.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:42:29.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:42:29.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:42:29.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:42:29.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:42:03', tmtdew=14.95, humidity=38.65, cloud=0.0, wind=20.22, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:42:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:42:29.712 [DEBUG] [Thread-129144] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:42:29.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:42:29.808 [DEBUG] [Thread-129147] [transport.py] [_log()] starting thread (client mode): 0xa2d3cd90
2026-02-11T12:42:29.808 [DEBUG] [Thread-129147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:42:29.822 [DEBUG] [Thread-129147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:42:29.823 [INFO] [Thread-129147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:42:29.830 [DEBUG] [Thread-129147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:42:29.830 [DEBUG] [Thread-129147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] client lang: <none>
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] server lang: <none>
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] kex follows: False
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] Compression: none
2026-02-11T12:42:29.831 [DEBUG] [Thread-129147] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:42:29.891 [DEBUG] [Thread-129147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:42:29.891 [DEBUG] [Thread-129147] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:42:29.892 [DEBUG] [Thread-129147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:42:29.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:42:29.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:42:29.951 [DEBUG] [Thread-129147] [transport.py] [_log()] userauth is OK
2026-02-11T12:42:29.952 [DEBUG] [Thread-129147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:42:29.952 [DEBUG] [Thread-129147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:42:29.952 [DEBUG] [Thread-129147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:42:29.952 [DEBUG] [Thread-129147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:42:29.976 [INFO] [Thread-129147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:42:29.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:42:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:42:30.856 [DEBUG] [Thread-129147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:42:30.856 [DEBUG] [Thread-129147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:42:30.904 [DEBUG] [Thread-129147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:42:30.904 [DEBUG] [Thread-129147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:42:30.913 [DEBUG] [Thread-129147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:42:30.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:42:30.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:42:30.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:42:30.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:42:30.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:42:30.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:42:30.951 [DEBUG] [Thread-129147] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:42:43.462 [DEBUG] [Thread-129149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:42:58.516 [DEBUG] [Thread-129150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:43:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:43:00.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:43:00.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
2026-02-11T12:43:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 42, 39), 15.92, 36.39, 0.0, 31.12, 24.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:43:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:42:39
2026-02-11T12:43:03.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:43:03.314 [DEBUG] [Thread-129151] [transport.py] [_log()] starting thread (client mode): 0xa2db6620
2026-02-11T12:43:03.315 [DEBUG] [Thread-129151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:43:03.334 [DEBUG] [Thread-129151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:43:03.334 [INFO] [Thread-129151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:43:03.337 [DEBUG] [Thread-129151] [transport.py] [_log()] client lang: <none>
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] server lang: <none>
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] kex follows: False
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] Compression: none
2026-02-11T12:43:03.338 [DEBUG] [Thread-129151] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:43:03.346 [DEBUG] [Thread-129151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:43:03.346 [DEBUG] [Thread-129151] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:43:03.347 [DEBUG] [Thread-129151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:43:03.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:43:03.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:43:03.348 [DEBUG] [Thread-129151] [transport.py] [_log()] userauth is OK
2026-02-11T12:43:03.348 [DEBUG] [Thread-129151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:43:03.349 [DEBUG] [Thread-129151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:43:03.349 [DEBUG] [Thread-129151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:43:03.349 [DEBUG] [Thread-129151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:43:03.372 [INFO] [Thread-129151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:43:03.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:43:03.937 [DEBUG] [Thread-129151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:43:03.938 [DEBUG] [Thread-129151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:43:03.938 [DEBUG] [Thread-129151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:43:03.978 [DEBUG] [Thread-129151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:43:03.978 [DEBUG] [Thread-129151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:43:03.982 [DEBUG] [Thread-129151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:43:03.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:43:03.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:43:03.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:43:03.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:43:04.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:43:04.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:43:04.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:43:04.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:43:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:43:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.446324 -999.00  +22.80  24.98     46  +10.80 1 2 1 1 1   888    0 11.45 -14.38 ----- 22.5 25.0 302.4 31.9 29.8 -15.8 28.9 -12.4 28.1 -16.4 29.0 -13.9
2026-02-11T12:43:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:43:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:43:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.446324
2026-02-11T12:43:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:43:04.013 [DEBUG] [Thread-129151] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:43:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:43:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:43:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:43:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:43:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:42:39', tmtdew=15.92, humidity=36.39, cloud=0.0, wind=31.12, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:42:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:43:04.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:43:04.113 [DEBUG] [Thread-129154] [transport.py] [_log()] starting thread (client mode): 0xa2d3c0d0
2026-02-11T12:43:04.113 [DEBUG] [Thread-129154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:43:04.131 [DEBUG] [Thread-129154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:43:04.131 [INFO] [Thread-129154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:43:04.138 [DEBUG] [Thread-129154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:43:04.138 [DEBUG] [Thread-129154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:43:04.138 [DEBUG] [Thread-129154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] client lang: <none>
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] server lang: <none>
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] kex follows: False
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] Compression: none
2026-02-11T12:43:04.139 [DEBUG] [Thread-129154] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:43:04.199 [DEBUG] [Thread-129154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:43:04.200 [DEBUG] [Thread-129154] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:43:04.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:43:04.201 [DEBUG] [Thread-129154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:43:04.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:43:04.254 [DEBUG] [Thread-129154] [transport.py] [_log()] userauth is OK
2026-02-11T12:43:04.255 [DEBUG] [Thread-129154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:43:04.255 [DEBUG] [Thread-129154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:43:04.255 [DEBUG] [Thread-129154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:43:04.255 [DEBUG] [Thread-129154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:43:04.279 [INFO] [Thread-129154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:43:04.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:43:04.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:43:05.144 [DEBUG] [Thread-129154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:43:05.145 [DEBUG] [Thread-129154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:43:05.192 [DEBUG] [Thread-129154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:43:05.193 [DEBUG] [Thread-129154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:43:05.202 [DEBUG] [Thread-129154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:43:05.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:43:05.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:43:05.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:43:05.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:43:05.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:43:05.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:43:05.238 [DEBUG] [Thread-129154] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:43:10.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:43:10.020 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:43:13.554 [DEBUG] [Thread-129156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:43:14.883 [DEBUG] [Thread-129157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:43:28.606 [DEBUG] [Thread-129158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:43:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:43:35.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:43:35.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:43:37.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 43, 14), 14.7, 38.87, 0.0, 21.35, 23.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:43:37.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:43:14
2026-02-11T12:43:37.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:43:37.600 [DEBUG] [Thread-129159] [transport.py] [_log()] starting thread (client mode): 0xa2db4d90
2026-02-11T12:43:37.600 [DEBUG] [Thread-129159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:43:37.616 [DEBUG] [Thread-129159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:43:37.616 [INFO] [Thread-129159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:43:37.618 [DEBUG] [Thread-129159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] client lang: <none>
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] server lang: <none>
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] kex follows: False
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] Compression: none
2026-02-11T12:43:37.619 [DEBUG] [Thread-129159] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:43:37.635 [DEBUG] [Thread-129159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:43:37.635 [DEBUG] [Thread-129159] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:43:37.636 [DEBUG] [Thread-129159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:43:37.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:43:37.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:43:37.638 [DEBUG] [Thread-129159] [transport.py] [_log()] userauth is OK
2026-02-11T12:43:37.638 [DEBUG] [Thread-129159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:43:37.638 [DEBUG] [Thread-129159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:43:37.638 [DEBUG] [Thread-129159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:43:37.638 [DEBUG] [Thread-129159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:43:37.656 [INFO] [Thread-129159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:43:37.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:43:38.237 [DEBUG] [Thread-129159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:43:38.238 [DEBUG] [Thread-129159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:43:38.238 [DEBUG] [Thread-129159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:43:38.278 [DEBUG] [Thread-129159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:43:38.278 [DEBUG] [Thread-129159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:43:38.281 [DEBUG] [Thread-129159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:43:38.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:43:38.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:43:38.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:43:38.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:43:38.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:43:38.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:43:38.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:43:38.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:43:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:43:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.446671 -999.00  +23.10  20.45     46  +10.80 1 2 1 1 1   888    0 11.68 -13.20 ----- 18.6 20.4 315.8 25.3 29.9 -14.9 29.0 -12.4 28.4 -12.0 29.0 -14.8
2026-02-11T12:43:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:43:38.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:43:38.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.446671
2026-02-11T12:43:38.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:43:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:43:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:43:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:43:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:43:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:43:14', tmtdew=14.7, humidity=38.87, cloud=0.0, wind=21.35, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:43:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:43:38.308 [DEBUG] [Thread-129159] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:43:38.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:43:38.399 [DEBUG] [Thread-129162] [transport.py] [_log()] starting thread (client mode): 0xa2db7820
2026-02-11T12:43:38.399 [DEBUG] [Thread-129162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:43:38.417 [DEBUG] [Thread-129162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:43:38.417 [INFO] [Thread-129162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:43:38.425 [DEBUG] [Thread-129162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] client lang: <none>
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] server lang: <none>
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] kex follows: False
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:43:38.426 [DEBUG] [Thread-129162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:43:38.427 [DEBUG] [Thread-129162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:43:38.427 [DEBUG] [Thread-129162] [transport.py] [_log()] Compression: none
2026-02-11T12:43:38.427 [DEBUG] [Thread-129162] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:43:38.484 [DEBUG] [Thread-129162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:43:38.484 [DEBUG] [Thread-129162] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:43:38.485 [DEBUG] [Thread-129162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:43:38.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:43:38.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:43:38.539 [DEBUG] [Thread-129162] [transport.py] [_log()] userauth is OK
2026-02-11T12:43:38.540 [DEBUG] [Thread-129162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:43:38.540 [DEBUG] [Thread-129162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:43:38.540 [DEBUG] [Thread-129162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:43:38.540 [DEBUG] [Thread-129162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:43:38.558 [INFO] [Thread-129162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:43:38.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:43:38.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:43:39.379 [DEBUG] [Thread-129162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:43:39.379 [DEBUG] [Thread-129162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:43:39.429 [DEBUG] [Thread-129162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:43:39.429 [DEBUG] [Thread-129162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:43:39.441 [DEBUG] [Thread-129162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:43:39.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:43:39.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')
2026-02-11T12:43:39.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:43:39.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:43:39.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:43:39.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:43:39.487 [DEBUG] [Thread-129162] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:43:43.646 [DEBUG] [Thread-129164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:43:58.708 [DEBUG] [Thread-129165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:44:09.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:44:09.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:44:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:44:10.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:44:10.162 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:44:11.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 43, 49), 14.77, 39.12, 0.0, 19.23, 23.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:44:11.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:43:49
2026-02-11T12:44:11.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:44:12.114 [DEBUG] [Thread-129166] [transport.py] [_log()] starting thread (client mode): 0xa81d7d90
2026-02-11T12:44:12.114 [DEBUG] [Thread-129166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:44:12.135 [DEBUG] [Thread-129166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:44:12.135 [INFO] [Thread-129166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] client lang: <none>
2026-02-11T12:44:12.138 [DEBUG] [Thread-129166] [transport.py] [_log()] server lang: <none>
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] kex follows: False
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] Compression: none
2026-02-11T12:44:12.139 [DEBUG] [Thread-129166] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:44:12.159 [DEBUG] [Thread-129166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:44:12.159 [DEBUG] [Thread-129166] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:44:12.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:44:12.160 [DEBUG] [Thread-129166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:44:12.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:44:12.162 [DEBUG] [Thread-129166] [transport.py] [_log()] userauth is OK
2026-02-11T12:44:12.162 [DEBUG] [Thread-129166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:44:12.162 [DEBUG] [Thread-129166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:44:12.162 [DEBUG] [Thread-129166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:44:12.162 [DEBUG] [Thread-129166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:44:12.179 [INFO] [Thread-129166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:44:12.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:44:12.762 [DEBUG] [Thread-129166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:44:12.763 [DEBUG] [Thread-129166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:44:12.763 [DEBUG] [Thread-129166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:44:12.803 [DEBUG] [Thread-129166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:44:12.803 [DEBUG] [Thread-129166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:44:12.808 [DEBUG] [Thread-129166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:44:12.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:44:12.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:44:12.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:44:12.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:44:12.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:44:12.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:44:12.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:44:12.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:44:12.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:44:12.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.447019 -999.00  +22.80  27.07     46  +10.90 1 2 1 1 1   888    0 11.55 -10.74 ----- 21.9 27.1 288.4 29.9 29.9 -15.6 29.1 -12.3 28.3 -13.4 29.2 -14.3
2026-02-11T12:44:12.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:44:12.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:44:12.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.447019
2026-02-11T12:44:12.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:44:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:44:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:44:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:44:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:44:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:43:49', tmtdew=14.77, humidity=39.12, cloud=0.0, wind=19.23, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:43:42.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:44:12.830 [DEBUG] [Thread-129166] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:44:12.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:44:12.929 [DEBUG] [Thread-129169] [transport.py] [_log()] starting thread (client mode): 0xa81d6380
2026-02-11T12:44:12.929 [DEBUG] [Thread-129169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:44:12.943 [DEBUG] [Thread-129169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:44:12.943 [INFO] [Thread-129169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:44:12.951 [DEBUG] [Thread-129169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:44:12.951 [DEBUG] [Thread-129169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:44:12.951 [DEBUG] [Thread-129169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:44:12.951 [DEBUG] [Thread-129169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:12.951 [DEBUG] [Thread-129169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] client lang: <none>
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] server lang: <none>
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] kex follows: False
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:44:12.952 [DEBUG] [Thread-129169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:44:12.953 [DEBUG] [Thread-129169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:44:12.953 [DEBUG] [Thread-129169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:44:12.953 [DEBUG] [Thread-129169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:44:12.953 [DEBUG] [Thread-129169] [transport.py] [_log()] Compression: none
2026-02-11T12:44:12.953 [DEBUG] [Thread-129169] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:44:13.007 [DEBUG] [Thread-129169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:44:13.007 [DEBUG] [Thread-129169] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:44:13.007 [DEBUG] [Thread-129169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:44:13.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:44:13.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:44:13.068 [DEBUG] [Thread-129169] [transport.py] [_log()] userauth is OK
2026-02-11T12:44:13.068 [DEBUG] [Thread-129169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:44:13.068 [DEBUG] [Thread-129169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:44:13.068 [DEBUG] [Thread-129169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:44:13.068 [DEBUG] [Thread-129169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:44:13.090 [INFO] [Thread-129169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:44:13.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:44:13.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:44:13.745 [DEBUG] [Thread-129171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:44:13.929 [DEBUG] [Thread-129169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:44:13.929 [DEBUG] [Thread-129169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:44:13.977 [DEBUG] [Thread-129169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:44:13.978 [DEBUG] [Thread-129169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:44:13.988 [DEBUG] [Thread-129169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:44:13.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:44:13.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:44:14.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:44:14.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:44:14.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:44:14.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:44:14.025 [DEBUG] [Thread-129169] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:44:14.917 [DEBUG] [Thread-129172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:44:28.799 [DEBUG] [Thread-129173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:44:43.835 [DEBUG] [Thread-129174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:44:44.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:44:44.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:44:44.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:44:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 44, 24), 14.69, 39.32, 0.0, 17.45, 23.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:44:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:44:24
2026-02-11T12:44:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:44:46.403 [DEBUG] [Thread-129175] [transport.py] [_log()] starting thread (client mode): 0xa81d6830
2026-02-11T12:44:46.403 [DEBUG] [Thread-129175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:44:46.423 [DEBUG] [Thread-129175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:44:46.423 [INFO] [Thread-129175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:44:46.426 [DEBUG] [Thread-129175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] client lang: <none>
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] server lang: <none>
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] kex follows: False
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] Compression: none
2026-02-11T12:44:46.427 [DEBUG] [Thread-129175] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:44:46.443 [DEBUG] [Thread-129175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:44:46.444 [DEBUG] [Thread-129175] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:44:46.445 [DEBUG] [Thread-129175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:44:46.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:44:46.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:44:46.492 [DEBUG] [Thread-129175] [transport.py] [_log()] userauth is OK
2026-02-11T12:44:46.493 [DEBUG] [Thread-129175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:44:46.493 [DEBUG] [Thread-129175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:44:46.493 [DEBUG] [Thread-129175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:44:46.493 [DEBUG] [Thread-129175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:44:46.513 [INFO] [Thread-129175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:44:46.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:44:47.127 [DEBUG] [Thread-129175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:44:47.127 [DEBUG] [Thread-129175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:44:47.127 [DEBUG] [Thread-129175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:44:47.168 [DEBUG] [Thread-129175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:44:47.168 [DEBUG] [Thread-129175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:44:47.171 [DEBUG] [Thread-129175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:44:47.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:44:47.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:44:47.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:44:47.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:44:47.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:44:47.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:44:47.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:44:47.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:44:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:44:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.447713 -999.00  +23.70  24.67     45  +11.20 1 2 1 1 1   888    0 11.66 -8.01 ----- 26.1 24.7 298.8 31.1 30.2 -15.8 29.4 -12.4 28.5 -14.2 29.4 -12.8
2026-02-11T12:44:47.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:44:47.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:44:47.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.447713
2026-02-11T12:44:47.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:44:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:44:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:44:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:44:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:44:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:44:24', tmtdew=14.69, humidity=39.32, cloud=0.0, wind=17.45, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:44:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:44:47.191 [DEBUG] [Thread-129175] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:44:47.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:44:47.289 [DEBUG] [Thread-129178] [transport.py] [_log()] starting thread (client mode): 0xa81d5e10
2026-02-11T12:44:47.289 [DEBUG] [Thread-129178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:44:47.307 [DEBUG] [Thread-129178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:44:47.308 [INFO] [Thread-129178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:44:47.315 [DEBUG] [Thread-129178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] client lang: <none>
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] server lang: <none>
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] kex follows: False
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:44:47.316 [DEBUG] [Thread-129178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:44:47.317 [DEBUG] [Thread-129178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:44:47.317 [DEBUG] [Thread-129178] [transport.py] [_log()] Compression: none
2026-02-11T12:44:47.317 [DEBUG] [Thread-129178] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:44:47.378 [DEBUG] [Thread-129178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:44:47.380 [DEBUG] [Thread-129178] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:44:47.380 [DEBUG] [Thread-129178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:44:47.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:44:47.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:44:47.435 [DEBUG] [Thread-129178] [transport.py] [_log()] userauth is OK
2026-02-11T12:44:47.435 [DEBUG] [Thread-129178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:44:47.435 [DEBUG] [Thread-129178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:44:47.435 [DEBUG] [Thread-129178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:44:47.435 [DEBUG] [Thread-129178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:44:47.453 [INFO] [Thread-129178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:44:47.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:44:47.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:44:48.300 [DEBUG] [Thread-129178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:44:48.301 [DEBUG] [Thread-129178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:44:48.352 [DEBUG] [Thread-129178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:44:48.352 [DEBUG] [Thread-129178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:44:48.362 [DEBUG] [Thread-129178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:44:48.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:44:48.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:44:48.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:44:48.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:44:48.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:44:48.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:44:48.398 [DEBUG] [Thread-129178] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:44:58.872 [DEBUG] [Thread-129180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:45:10.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:45:10.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:45:13.931 [DEBUG] [Thread-129181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:45:14.951 [DEBUG] [Thread-129182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:45:18.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:45:18.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:45: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
2026-02-11T12:45:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 44, 24), 15.04, 38.32, 0.0, 21.05, 24.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:45:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:44:24
2026-02-11T12:45:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:45:20.861 [DEBUG] [Thread-129183] [transport.py] [_log()] starting thread (client mode): 0xa81d6170
2026-02-11T12:45:20.862 [DEBUG] [Thread-129183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:45:20.882 [DEBUG] [Thread-129183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:45:20.882 [INFO] [Thread-129183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:45:20.883 [DEBUG] [Thread-129183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:45:20.883 [DEBUG] [Thread-129183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:45:20.883 [DEBUG] [Thread-129183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:45:20.883 [DEBUG] [Thread-129183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] client lang: <none>
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] server lang: <none>
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] kex follows: False
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] Compression: none
2026-02-11T12:45:20.884 [DEBUG] [Thread-129183] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:45:20.896 [DEBUG] [Thread-129183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:45:20.897 [DEBUG] [Thread-129183] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:45:20.897 [DEBUG] [Thread-129183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:45:20.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:45:20.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:45:20.899 [DEBUG] [Thread-129183] [transport.py] [_log()] userauth is OK
2026-02-11T12:45:20.899 [DEBUG] [Thread-129183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:45:20.899 [DEBUG] [Thread-129183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:45:20.899 [DEBUG] [Thread-129183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:45:20.899 [DEBUG] [Thread-129183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:45:20.916 [INFO] [Thread-129183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:45:20.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:45:21.563 [DEBUG] [Thread-129183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:45:21.563 [DEBUG] [Thread-129183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:45:21.564 [DEBUG] [Thread-129183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:45:21.605 [DEBUG] [Thread-129183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:45:21.606 [DEBUG] [Thread-129183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:45:21.609 [DEBUG] [Thread-129183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:45:21.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:45:21.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:45:21.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:45:21.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:45:21.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:45:21.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:45:21.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:45:21.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:45:21.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:45:21.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.448060 -999.00  +23.80  30.21     44  +11.00 1 2 2 1 1   888    0 12.12 -0.11 ----- 32.5 30.2 292.7 35.9 30.2 -16.0 29.3 -13.3 28.4 -13.9 29.4 -14.0
2026-02-11T12:45:21.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:45:21.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:45:21.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.448060
2026-02-11T12:45:21.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:45:21.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:45:21.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:45:21.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:45:21.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:45:21.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:44:24', tmtdew=15.04, humidity=38.32, cloud=0.0, wind=21.05, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:45:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:45:21.636 [DEBUG] [Thread-129183] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:45:21.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:45:21.730 [DEBUG] [Thread-129186] [transport.py] [_log()] starting thread (client mode): 0xa81d70d0
2026-02-11T12:45:21.731 [DEBUG] [Thread-129186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:45:21.746 [DEBUG] [Thread-129186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:45:21.746 [INFO] [Thread-129186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:45:21.753 [DEBUG] [Thread-129186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:45:21.754 [DEBUG] [Thread-129186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:45:21.755 [DEBUG] [Thread-129186] [transport.py] [_log()] client lang: <none>
2026-02-11T12:45:21.755 [DEBUG] [Thread-129186] [transport.py] [_log()] server lang: <none>
2026-02-11T12:45:21.755 [DEBUG] [Thread-129186] [transport.py] [_log()] kex follows: False
2026-02-11T12:45:21.755 [DEBUG] [Thread-129186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:45:21.755 [DEBUG] [Thread-129186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:45:21.756 [DEBUG] [Thread-129186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:45:21.756 [DEBUG] [Thread-129186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:45:21.756 [DEBUG] [Thread-129186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:45:21.756 [DEBUG] [Thread-129186] [transport.py] [_log()] Compression: none
2026-02-11T12:45:21.756 [DEBUG] [Thread-129186] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:45:21.812 [DEBUG] [Thread-129186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:45:21.813 [DEBUG] [Thread-129186] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:45:21.814 [DEBUG] [Thread-129186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:45:21.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:45:21.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:45:21.868 [DEBUG] [Thread-129186] [transport.py] [_log()] userauth is OK
2026-02-11T12:45:21.869 [DEBUG] [Thread-129186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:45:21.869 [DEBUG] [Thread-129186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:45:21.869 [DEBUG] [Thread-129186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:45:21.869 [DEBUG] [Thread-129186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:45:21.888 [INFO] [Thread-129186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:45:21.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:45:21.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:45:22.721 [DEBUG] [Thread-129186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:45:22.722 [DEBUG] [Thread-129186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:45:22.769 [DEBUG] [Thread-129186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:45:22.770 [DEBUG] [Thread-129186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:45:22.779 [DEBUG] [Thread-129186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:45:22.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:45:22.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:45:22.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:45:22.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:45:22.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:45:22.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:45:22.816 [DEBUG] [Thread-129186] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:45:28.968 [DEBUG] [Thread-129188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:45:44.020 [DEBUG] [Thread-129189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:45:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:45:52.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:45:52.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:45:54.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 45, 35), 15.41, 37.55, 0.0, 37.12, 24.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:45:54.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:45:35
2026-02-11T12:45:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:45:55.157 [DEBUG] [Thread-129190] [transport.py] [_log()] starting thread (client mode): 0xa2db5bd0
2026-02-11T12:45:55.157 [DEBUG] [Thread-129190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:45:55.179 [DEBUG] [Thread-129190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:45:55.179 [INFO] [Thread-129190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] client lang: <none>
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] server lang: <none>
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] kex follows: False
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] Compression: none
2026-02-11T12:45:55.181 [DEBUG] [Thread-129190] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:45:55.189 [DEBUG] [Thread-129190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:45:55.190 [DEBUG] [Thread-129190] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:45:55.190 [DEBUG] [Thread-129190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:45:55.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:45:55.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:45:55.192 [DEBUG] [Thread-129190] [transport.py] [_log()] userauth is OK
2026-02-11T12:45:55.192 [DEBUG] [Thread-129190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:45:55.192 [DEBUG] [Thread-129190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:45:55.193 [DEBUG] [Thread-129190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:45:55.193 [DEBUG] [Thread-129190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:45:55.217 [INFO] [Thread-129190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:45:55.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:45:55.928 [DEBUG] [Thread-129190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:45:55.928 [DEBUG] [Thread-129190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:45:55.929 [DEBUG] [Thread-129190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:45:55.969 [DEBUG] [Thread-129190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:45:55.969 [DEBUG] [Thread-129190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:45:55.973 [DEBUG] [Thread-129190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:45:55.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:45:55.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:45:55.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:45:55.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:45:55.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:45:55.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:45:55.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:45:55.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:45:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:45:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.448407 -999.00  +23.50  31.41     45  +11.00 1 2 2 1 1   888    0 12.17 6.46 ----- 32.5 31.4 310.8 35.5 30.2 -14.6 29.3 -12.7 28.6 -11.8 29.4 -14.2
2026-02-11T12:45:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:45:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:45:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.448407
2026-02-11T12:45:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:45:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:45:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:45:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:45:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:45:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:45:35', tmtdew=15.41, humidity=37.55, cloud=0.0, wind=37.12, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:45:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:45:55.999 [DEBUG] [Thread-129190] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:45:56.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:45:56.089 [DEBUG] [Thread-129193] [transport.py] [_log()] starting thread (client mode): 0xa2db4640
2026-02-11T12:45:56.089 [DEBUG] [Thread-129193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:45:56.104 [DEBUG] [Thread-129193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:45:56.104 [INFO] [Thread-129193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:45:56.111 [DEBUG] [Thread-129193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:45:56.112 [DEBUG] [Thread-129193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:45:56.112 [DEBUG] [Thread-129193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:45:56.112 [DEBUG] [Thread-129193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:56.112 [DEBUG] [Thread-129193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] client lang: <none>
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] server lang: <none>
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] kex follows: False
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] Compression: none
2026-02-11T12:45:56.113 [DEBUG] [Thread-129193] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:45:56.168 [DEBUG] [Thread-129193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:45:56.169 [DEBUG] [Thread-129193] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:45:56.169 [DEBUG] [Thread-129193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:45:56.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:45:56.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:45:56.224 [DEBUG] [Thread-129193] [transport.py] [_log()] userauth is OK
2026-02-11T12:45:56.224 [DEBUG] [Thread-129193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:45:56.225 [DEBUG] [Thread-129193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:45:56.225 [DEBUG] [Thread-129193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:45:56.225 [DEBUG] [Thread-129193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:45:56.243 [INFO] [Thread-129193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:45:56.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:45:56.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:45:57.083 [DEBUG] [Thread-129193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:45:57.083 [DEBUG] [Thread-129193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:45:57.131 [DEBUG] [Thread-129193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:45:57.131 [DEBUG] [Thread-129193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:45:57.140 [DEBUG] [Thread-129193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:45:57.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:45:57.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:45:57.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:45:57.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:45:57.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:45:57.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:45:57.172 [DEBUG] [Thread-129193] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:45:59.056 [DEBUG] [Thread-129195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:46:10.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:46:10.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:46:14.108 [DEBUG] [Thread-129196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:46:14.986 [DEBUG] [Thread-129197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:46:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:46:27.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:46:27.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
2026-02-11T12:46:29.145 [DEBUG] [Thread-129198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:46:29.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 46, 12), 15.11, 38.31, 0.0, 24.4, 24.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:46:29.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:46:12
2026-02-11T12:46:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:46:30.055 [DEBUG] [Thread-129199] [transport.py] [_log()] starting thread (client mode): 0xa2db7580
2026-02-11T12:46:30.055 [DEBUG] [Thread-129199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:46:30.075 [DEBUG] [Thread-129199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:46:30.075 [INFO] [Thread-129199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] client lang: <none>
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] server lang: <none>
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] kex follows: False
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] Compression: none
2026-02-11T12:46:30.078 [DEBUG] [Thread-129199] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:46:30.097 [DEBUG] [Thread-129199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:46:30.097 [DEBUG] [Thread-129199] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:46:30.098 [DEBUG] [Thread-129199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:46:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:46:30.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:46:30.101 [DEBUG] [Thread-129199] [transport.py] [_log()] userauth is OK
2026-02-11T12:46:30.101 [DEBUG] [Thread-129199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:46:30.101 [DEBUG] [Thread-129199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:46:30.102 [DEBUG] [Thread-129199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:46:30.102 [DEBUG] [Thread-129199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:46:30.126 [INFO] [Thread-129199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:46:30.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:46:30.731 [DEBUG] [Thread-129199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:46:30.731 [DEBUG] [Thread-129199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:46:30.731 [DEBUG] [Thread-129199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:46:30.772 [DEBUG] [Thread-129199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:46:30.773 [DEBUG] [Thread-129199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:46:30.776 [DEBUG] [Thread-129199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:46:30.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:46:30.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:46:30.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:46:30.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:46:30.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:46:30.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:46:30.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:46:30.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:46:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:46:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.448755 -999.00  +23.90  28.70     45  +11.20 1 2 1 1 1   888    0 12.35 13.92 ----- 26.9 28.7 304.0 36.1 30.3 -15.1 29.4 -12.4 28.7 -12.3 29.5 -13.7
2026-02-11T12:46:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:46:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:46:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.448755
2026-02-11T12:46:30.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:46:30.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:46:30.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:46:30.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:46:30.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:46:30.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:46:12', tmtdew=15.11, humidity=38.31, cloud=0.0, wind=24.4, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:46:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:46:30.802 [DEBUG] [Thread-129199] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:46:30.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:46:30.897 [DEBUG] [Thread-129202] [transport.py] [_log()] starting thread (client mode): 0xa2db65c0
2026-02-11T12:46:30.897 [DEBUG] [Thread-129202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:46:30.913 [DEBUG] [Thread-129202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:46:30.913 [INFO] [Thread-129202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:46:30.920 [DEBUG] [Thread-129202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] client lang: <none>
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] server lang: <none>
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] kex follows: False
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] Compression: none
2026-02-11T12:46:30.921 [DEBUG] [Thread-129202] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:46:30.985 [DEBUG] [Thread-129202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:46:30.986 [DEBUG] [Thread-129202] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:46:30.986 [DEBUG] [Thread-129202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:46:30.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:46:30.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:46:31.041 [DEBUG] [Thread-129202] [transport.py] [_log()] userauth is OK
2026-02-11T12:46:31.041 [DEBUG] [Thread-129202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:46:31.041 [DEBUG] [Thread-129202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:46:31.041 [DEBUG] [Thread-129202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:46:31.041 [DEBUG] [Thread-129202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:46:31.061 [INFO] [Thread-129202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:46:31.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:46:31.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:46:32.004 [DEBUG] [Thread-129202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:46:32.004 [DEBUG] [Thread-129202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:46:32.052 [DEBUG] [Thread-129202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:46:32.052 [DEBUG] [Thread-129202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:46:32.062 [DEBUG] [Thread-129202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:46:32.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:46:32.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:46: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') -> 00000000
2026-02-11T12:46:32.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:46:32.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:46:32.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:46:32.097 [DEBUG] [Thread-129202] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:46:44.177 [DEBUG] [Thread-129204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:46:59.238 [DEBUG] [Thread-129205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:47:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:47:02.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:47:02.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
2026-02-11T12:47:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 46, 47), 15.1, 38.07, 0.0, 27.68, 23.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:47:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:46:47
2026-02-11T12:47:04.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:47:04.534 [DEBUG] [Thread-129206] [transport.py] [_log()] starting thread (client mode): 0xa2db5180
2026-02-11T12:47:04.534 [DEBUG] [Thread-129206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:47:04.554 [DEBUG] [Thread-129206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:47:04.554 [INFO] [Thread-129206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] client lang: <none>
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] server lang: <none>
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] kex follows: False
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] Compression: none
2026-02-11T12:47:04.557 [DEBUG] [Thread-129206] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:47:04.576 [DEBUG] [Thread-129206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:47:04.576 [DEBUG] [Thread-129206] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:47:04.577 [DEBUG] [Thread-129206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:47:04.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:47:04.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:47:04.579 [DEBUG] [Thread-129206] [transport.py] [_log()] userauth is OK
2026-02-11T12:47:04.579 [DEBUG] [Thread-129206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:47:04.579 [DEBUG] [Thread-129206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:47:04.579 [DEBUG] [Thread-129206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:47:04.579 [DEBUG] [Thread-129206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:47:04.604 [INFO] [Thread-129206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:47:04.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:47:05.209 [DEBUG] [Thread-129206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:47:05.209 [DEBUG] [Thread-129206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:47:05.210 [DEBUG] [Thread-129206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:47:05.250 [DEBUG] [Thread-129206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:47:05.251 [DEBUG] [Thread-129206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:47:05.254 [DEBUG] [Thread-129206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:47:05.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:47:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:47:05.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:47:05.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:47:05.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:47:05.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:47:05.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:47:05.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:47:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:47:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.449102 -999.00  +23.70  28.18     44  +10.90 1 2 1 1 1   888    0 12.81 23.39 ----- 28.0 28.2 305.0 34.6 30.4 -14.2 29.4 -12.9 28.8 -11.7 29.7 -14.6
2026-02-11T12:47:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:47:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:47:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.449102
2026-02-11T12:47:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:47:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:47:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:47:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:47:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:47:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:46:47', tmtdew=15.1, humidity=38.07, cloud=0.0, wind=27.68, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:46:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:47:05.291 [DEBUG] [Thread-129206] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:47:05.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:47:05.386 [DEBUG] [Thread-129209] [transport.py] [_log()] starting thread (client mode): 0xa2db5c90
2026-02-11T12:47:05.387 [DEBUG] [Thread-129209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:47:05.406 [DEBUG] [Thread-129209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:47:05.406 [INFO] [Thread-129209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:47:05.421 [DEBUG] [Thread-129209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:47:05.421 [DEBUG] [Thread-129209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:47:05.421 [DEBUG] [Thread-129209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:47:05.421 [DEBUG] [Thread-129209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:05.421 [DEBUG] [Thread-129209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:05.421 [DEBUG] [Thread-129209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:05.421 [DEBUG] [Thread-129209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] client lang: <none>
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] server lang: <none>
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] kex follows: False
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] Compression: none
2026-02-11T12:47:05.422 [DEBUG] [Thread-129209] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:47:05.482 [DEBUG] [Thread-129209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:47:05.483 [DEBUG] [Thread-129209] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:47:05.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:47:05.484 [DEBUG] [Thread-129209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:47:05.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:47:05.545 [DEBUG] [Thread-129209] [transport.py] [_log()] userauth is OK
2026-02-11T12:47:05.545 [DEBUG] [Thread-129209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:47:05.545 [DEBUG] [Thread-129209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:47:05.545 [DEBUG] [Thread-129209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:47:05.545 [DEBUG] [Thread-129209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:47:05.564 [INFO] [Thread-129209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:47:05.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:47:05.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:47:06.439 [DEBUG] [Thread-129209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:47:06.439 [DEBUG] [Thread-129209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:47:06.488 [DEBUG] [Thread-129209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:47:06.488 [DEBUG] [Thread-129209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:47:06.497 [DEBUG] [Thread-129209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:47:06.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:47:06.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:47:06.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:47:06.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:47:06.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:47:06.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:47:06.540 [DEBUG] [Thread-129209] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:47:10.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:47:10.587 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:47:14.276 [DEBUG] [Thread-129211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:47:15.027 [DEBUG] [Thread-129212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:47:29.329 [DEBUG] [Thread-129213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:47:36.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:47:36.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:47:36.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:47:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 47, 22), 15.24, 37.74, 0.0, 27.67, 24.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:47:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:47:22
2026-02-11T12:47:38.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:47:38.925 [DEBUG] [Thread-129214] [transport.py] [_log()] starting thread (client mode): 0xa2db78b0
2026-02-11T12:47:38.925 [DEBUG] [Thread-129214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:47:38.945 [DEBUG] [Thread-129214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:47:38.945 [INFO] [Thread-129214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:47:38.947 [DEBUG] [Thread-129214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] client lang: <none>
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] server lang: <none>
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] kex follows: False
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] Compression: none
2026-02-11T12:47:38.948 [DEBUG] [Thread-129214] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:47:38.964 [DEBUG] [Thread-129214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:47:38.964 [DEBUG] [Thread-129214] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:47:38.964 [DEBUG] [Thread-129214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:47:38.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:47:38.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:47:38.966 [DEBUG] [Thread-129214] [transport.py] [_log()] userauth is OK
2026-02-11T12:47:38.966 [DEBUG] [Thread-129214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:47:38.966 [DEBUG] [Thread-129214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:47:38.967 [DEBUG] [Thread-129214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:47:38.967 [DEBUG] [Thread-129214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:47:38.988 [INFO] [Thread-129214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:47:38.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:47:39.623 [DEBUG] [Thread-129214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:47:39.624 [DEBUG] [Thread-129214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:47:39.624 [DEBUG] [Thread-129214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:47:39.664 [DEBUG] [Thread-129214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:47:39.664 [DEBUG] [Thread-129214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:47:39.668 [DEBUG] [Thread-129214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:47:39.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:47:39.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:47:39.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:47:39.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:47:39.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:47:39.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:47:39.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:47:39.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:47:39.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:47:39.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.449449 -999.00  +23.50  24.97     45  +11.00 1 2 1 1 1   888    0 12.71 28.59 ----- 25.7 25.0 312.4 37.3 30.4 -14.5 29.4 -12.8 28.8 -12.9 29.7 -14.6
2026-02-11T12:47:39.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:47:39.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:47:39.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.449449
2026-02-11T12:47:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:47:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:47:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:47:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:47:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:47:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:47:22', tmtdew=15.24, humidity=37.74, cloud=0.0, wind=27.67, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:47:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:47:39.695 [DEBUG] [Thread-129214] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:47:39.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:47:39.795 [DEBUG] [Thread-129217] [transport.py] [_log()] starting thread (client mode): 0xa2db57e0
2026-02-11T12:47:39.795 [DEBUG] [Thread-129217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:47:39.813 [DEBUG] [Thread-129217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:47:39.814 [INFO] [Thread-129217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] client lang: <none>
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] server lang: <none>
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] kex follows: False
2026-02-11T12:47:39.822 [DEBUG] [Thread-129217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:47:39.823 [DEBUG] [Thread-129217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:47:39.823 [DEBUG] [Thread-129217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:47:39.823 [DEBUG] [Thread-129217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:47:39.823 [DEBUG] [Thread-129217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:47:39.823 [DEBUG] [Thread-129217] [transport.py] [_log()] Compression: none
2026-02-11T12:47:39.823 [DEBUG] [Thread-129217] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:47:39.881 [DEBUG] [Thread-129217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:47:39.881 [DEBUG] [Thread-129217] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:47:39.882 [DEBUG] [Thread-129217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:47:39.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:47:39.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:47:39.940 [DEBUG] [Thread-129217] [transport.py] [_log()] userauth is OK
2026-02-11T12:47:39.940 [DEBUG] [Thread-129217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:47:39.941 [DEBUG] [Thread-129217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:47:39.941 [DEBUG] [Thread-129217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:47:39.941 [DEBUG] [Thread-129217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:47:39.959 [INFO] [Thread-129217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:47:39.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:47:39.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:47:40.816 [DEBUG] [Thread-129217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:47:40.816 [DEBUG] [Thread-129217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:47:40.864 [DEBUG] [Thread-129217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:47:40.864 [DEBUG] [Thread-129217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:47:40.872 [DEBUG] [Thread-129217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:47:40.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:47:40.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')
2026-02-11T12:47:40.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
2026-02-11T12:47:40.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:47:40.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:47:40.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:47:40.907 [DEBUG] [Thread-129217] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:47:44.367 [DEBUG] [Thread-129219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:47:59.421 [DEBUG] [Thread-129220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:48:10.725 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:48:10.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:48:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:48:10.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:48:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:48:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 47, 59), 14.82, 39.08, 0.0, 21.35, 23.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:48:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:47:59
2026-02-11T12:48:13.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:48:13.635 [DEBUG] [Thread-129221] [transport.py] [_log()] starting thread (client mode): 0xa81d5930
2026-02-11T12:48:13.636 [DEBUG] [Thread-129221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:48:13.650 [DEBUG] [Thread-129221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:48:13.651 [INFO] [Thread-129221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] client lang: <none>
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] server lang: <none>
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] kex follows: False
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] Compression: none
2026-02-11T12:48:13.654 [DEBUG] [Thread-129221] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:48:13.670 [DEBUG] [Thread-129221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:48:13.670 [DEBUG] [Thread-129221] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:48:13.671 [DEBUG] [Thread-129221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:48:13.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:48:13.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:48:13.673 [DEBUG] [Thread-129221] [transport.py] [_log()] userauth is OK
2026-02-11T12:48:13.673 [DEBUG] [Thread-129221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:48:13.673 [DEBUG] [Thread-129221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:48:13.673 [DEBUG] [Thread-129221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:48:13.673 [DEBUG] [Thread-129221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:48:13.691 [INFO] [Thread-129221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:48:13.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:48:14.279 [DEBUG] [Thread-129221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:48:14.279 [DEBUG] [Thread-129221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:48:14.279 [DEBUG] [Thread-129221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:48:14.320 [DEBUG] [Thread-129221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:48:14.320 [DEBUG] [Thread-129221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:48:14.323 [DEBUG] [Thread-129221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:48:14.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:48:14.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:48:14.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:48:14.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:48:14.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:48:14.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:48:14.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:48:14.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:48:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:48:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.449796 -999.00  +23.20  16.74     45  +10.80 1 2 1 1 1   888    0 12.60 33.40 ----- 15.6 16.7 277.8 29.3 30.4 -14.7 29.5 -12.7 28.8 -14.2 29.8 -13.4
2026-02-11T12:48:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:48:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:48:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.449796
2026-02-11T12:48:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:48:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:48:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:48:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:48:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:48:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:47:59', tmtdew=14.82, humidity=39.08, cloud=0.0, wind=21.35, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:47:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:48:14.352 [DEBUG] [Thread-129221] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:48:14.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:48:14.447 [DEBUG] [Thread-129224] [transport.py] [_log()] starting thread (client mode): 0xa81d4f40
2026-02-11T12:48:14.447 [DEBUG] [Thread-129224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:48:14.456 [DEBUG] [Thread-129225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:48:14.462 [DEBUG] [Thread-129224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:48:14.462 [INFO] [Thread-129224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:48:14.469 [DEBUG] [Thread-129224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:48:14.469 [DEBUG] [Thread-129224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:48:14.469 [DEBUG] [Thread-129224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] client lang: <none>
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] server lang: <none>
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] kex follows: False
2026-02-11T12:48:14.470 [DEBUG] [Thread-129224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:48:14.471 [DEBUG] [Thread-129224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:48:14.471 [DEBUG] [Thread-129224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:48:14.471 [DEBUG] [Thread-129224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:48:14.471 [DEBUG] [Thread-129224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:48:14.471 [DEBUG] [Thread-129224] [transport.py] [_log()] Compression: none
2026-02-11T12:48:14.471 [DEBUG] [Thread-129224] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:48:14.529 [DEBUG] [Thread-129224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:48:14.530 [DEBUG] [Thread-129224] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:48:14.530 [DEBUG] [Thread-129224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:48:14.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:48:14.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:48:14.585 [DEBUG] [Thread-129224] [transport.py] [_log()] userauth is OK
2026-02-11T12:48:14.585 [DEBUG] [Thread-129224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:48:14.586 [DEBUG] [Thread-129224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:48:14.586 [DEBUG] [Thread-129224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:48:14.586 [DEBUG] [Thread-129224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:48:14.605 [INFO] [Thread-129224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:48:14.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:48:14.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:48:15.062 [DEBUG] [Thread-129227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:48:15.441 [DEBUG] [Thread-129224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:48:15.441 [DEBUG] [Thread-129224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:48:15.489 [DEBUG] [Thread-129224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:48:15.490 [DEBUG] [Thread-129224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:48:15.499 [DEBUG] [Thread-129224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:48:15.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:48:15.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:48:15.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:48:15.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:48:15.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:48:15.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:48:15.534 [DEBUG] [Thread-129224] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:48:29.499 [DEBUG] [Thread-129228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:48:44.533 [DEBUG] [Thread-129229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:48:45.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:48:45.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:48:45.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
2026-02-11T12:48:47.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 48, 34), 15.42, 37.48, 0.0, 19.44, 24.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:48:47.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:48:34
2026-02-11T12:48:47.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:48:47.967 [DEBUG] [Thread-129230] [transport.py] [_log()] starting thread (client mode): 0xa2d3dae0
2026-02-11T12:48:47.967 [DEBUG] [Thread-129230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:48:47.986 [DEBUG] [Thread-129230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:48:47.986 [INFO] [Thread-129230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:48:47.989 [DEBUG] [Thread-129230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:48:47.989 [DEBUG] [Thread-129230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:48:47.989 [DEBUG] [Thread-129230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] client lang: <none>
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] server lang: <none>
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] kex follows: False
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] Compression: none
2026-02-11T12:48:47.990 [DEBUG] [Thread-129230] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:48:48.006 [DEBUG] [Thread-129230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:48:48.006 [DEBUG] [Thread-129230] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:48:48.007 [DEBUG] [Thread-129230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:48:48.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:48:48.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:48:48.009 [DEBUG] [Thread-129230] [transport.py] [_log()] userauth is OK
2026-02-11T12:48:48.009 [DEBUG] [Thread-129230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:48:48.009 [DEBUG] [Thread-129230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:48:48.009 [DEBUG] [Thread-129230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:48:48.009 [DEBUG] [Thread-129230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:48:48.027 [INFO] [Thread-129230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:48:48.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:48:48.655 [DEBUG] [Thread-129230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:48:48.656 [DEBUG] [Thread-129230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:48:48.656 [DEBUG] [Thread-129230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:48:48.697 [DEBUG] [Thread-129230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:48:48.697 [DEBUG] [Thread-129230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:48:48.700 [DEBUG] [Thread-129230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:48:48.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:48:48.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:48:48.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:48:48.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:48:48.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:48:48.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:48:48.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:48:48.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:48:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:48:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.450144 -999.00  +22.70  16.11     46  +10.70 1 2 1 1 1   888    0 13.07 31.60 ----- 16.7 16.1 317.0 19.0 30.2 -20.2 29.7 -12.8 28.6 -17.4 29.8 -13.0
2026-02-11T12:48:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:48:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:48:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.450144
2026-02-11T12:48:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:48:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:48:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:48:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:48:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:48:48.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:48:34', tmtdew=15.42, humidity=37.48, cloud=0.0, wind=19.44, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:48:12.442', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:48:48.722 [DEBUG] [Thread-129230] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:48:48.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:48:48.818 [DEBUG] [Thread-129233] [transport.py] [_log()] starting thread (client mode): 0xa2d3e560
2026-02-11T12:48:48.818 [DEBUG] [Thread-129233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:48:48.833 [DEBUG] [Thread-129233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:48:48.833 [INFO] [Thread-129233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] client lang: <none>
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] server lang: <none>
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] kex follows: False
2026-02-11T12:48:48.841 [DEBUG] [Thread-129233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:48:48.842 [DEBUG] [Thread-129233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:48:48.842 [DEBUG] [Thread-129233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:48:48.842 [DEBUG] [Thread-129233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:48:48.842 [DEBUG] [Thread-129233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:48:48.842 [DEBUG] [Thread-129233] [transport.py] [_log()] Compression: none
2026-02-11T12:48:48.842 [DEBUG] [Thread-129233] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:48:48.905 [DEBUG] [Thread-129233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:48:48.906 [DEBUG] [Thread-129233] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:48:48.907 [DEBUG] [Thread-129233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:48:48.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:48:48.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:48:48.964 [DEBUG] [Thread-129233] [transport.py] [_log()] userauth is OK
2026-02-11T12:48:48.965 [DEBUG] [Thread-129233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:48:48.965 [DEBUG] [Thread-129233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:48:48.965 [DEBUG] [Thread-129233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:48:48.965 [DEBUG] [Thread-129233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:48:48.984 [INFO] [Thread-129233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:48:48.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:48:48.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:48:49.819 [DEBUG] [Thread-129233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:48:49.819 [DEBUG] [Thread-129233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:48:49.867 [DEBUG] [Thread-129233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:48:49.867 [DEBUG] [Thread-129233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:48:49.875 [DEBUG] [Thread-129233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:48:49.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:48:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:48:49.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:48:49.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:48:49.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:48:49.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:48:49.907 [DEBUG] [Thread-129233] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:48:59.568 [DEBUG] [Thread-129235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:49:10.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:49:10.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:49:14.619 [DEBUG] [Thread-129236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:49:15.111 [DEBUG] [Thread-129237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:49:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:49:19.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:49:19.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:49:21.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 49, 10), 14.12, 40.65, 0.0, 11.68, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:49:21.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:49:10
2026-02-11T12:49:22.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:49:22.268 [DEBUG] [Thread-129238] [transport.py] [_log()] starting thread (client mode): 0xa81d6230
2026-02-11T12:49:22.268 [DEBUG] [Thread-129238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:49:22.288 [DEBUG] [Thread-129238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:49:22.289 [INFO] [Thread-129238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] client lang: <none>
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] server lang: <none>
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] kex follows: False
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] Compression: none
2026-02-11T12:49:22.292 [DEBUG] [Thread-129238] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:49:22.310 [DEBUG] [Thread-129238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:49:22.310 [DEBUG] [Thread-129238] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:49:22.311 [DEBUG] [Thread-129238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:49:22.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:49:22.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:49:22.313 [DEBUG] [Thread-129238] [transport.py] [_log()] userauth is OK
2026-02-11T12:49:22.314 [DEBUG] [Thread-129238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:49:22.314 [DEBUG] [Thread-129238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:49:22.314 [DEBUG] [Thread-129238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:49:22.314 [DEBUG] [Thread-129238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:49:22.339 [INFO] [Thread-129238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:49:22.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:49:22.971 [DEBUG] [Thread-129238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:49:22.971 [DEBUG] [Thread-129238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:49:22.972 [DEBUG] [Thread-129238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:49:23.013 [DEBUG] [Thread-129238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:49:23.013 [DEBUG] [Thread-129238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:49:23.015 [DEBUG] [Thread-129238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:49:23.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:49:23.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:49:23.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:49:23.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:49:23.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:49:23.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:49:23.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:49:23.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:49:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:49:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.450838 -999.00  +23.40  23.59     45  +10.90 1 2 1 1 1   888    0 13.11 33.21 ----- 20.5 23.6 283.8 27.2 29.3 -21.7 29.1 -17.0 27.8 -22.2 29.1 -18.6
2026-02-11T12:49:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:49:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:49:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.450838
2026-02-11T12:49:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:49:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:49:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:49:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:49:23.039 [DEBUG] [Thread-129238] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:49:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:49:23.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:49:10', tmtdew=14.12, humidity=40.65, cloud=0.0, wind=11.68, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:49:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:49:23.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:49:23.132 [DEBUG] [Thread-129241] [transport.py] [_log()] starting thread (client mode): 0xa81d4df0
2026-02-11T12:49:23.132 [DEBUG] [Thread-129241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:49:23.147 [DEBUG] [Thread-129241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:49:23.147 [INFO] [Thread-129241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:23.154 [DEBUG] [Thread-129241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] client lang: <none>
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] server lang: <none>
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] kex follows: False
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] Compression: none
2026-02-11T12:49:23.155 [DEBUG] [Thread-129241] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:49:23.213 [DEBUG] [Thread-129241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:49:23.213 [DEBUG] [Thread-129241] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:49:23.214 [DEBUG] [Thread-129241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:49:23.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:49:23.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:49:23.270 [DEBUG] [Thread-129241] [transport.py] [_log()] userauth is OK
2026-02-11T12:49:23.270 [DEBUG] [Thread-129241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:49:23.270 [DEBUG] [Thread-129241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:49:23.271 [DEBUG] [Thread-129241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:49:23.271 [DEBUG] [Thread-129241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:49:23.289 [INFO] [Thread-129241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:49:23.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:49:23.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:49:24.166 [DEBUG] [Thread-129241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:49:24.166 [DEBUG] [Thread-129241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:49:24.214 [DEBUG] [Thread-129241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:49:24.214 [DEBUG] [Thread-129241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:49:24.223 [DEBUG] [Thread-129241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:49:24.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:49:24.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')
2026-02-11T12:49:24.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:49:24.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:49:24.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:49:24.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:49:24.259 [DEBUG] [Thread-129241] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:49:29.656 [DEBUG] [Thread-129243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:49:44.711 [DEBUG] [Thread-129244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:49:54.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:49:54.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:49:54.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:49:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 49, 45), 14.47, 39.52, 0.0, 17.7, 23.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:49:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:49:45
2026-02-11T12:49:56.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:49:56.667 [DEBUG] [Thread-129245] [transport.py] [_log()] starting thread (client mode): 0xa2d6d8d0
2026-02-11T12:49:56.667 [DEBUG] [Thread-129245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:49:56.687 [DEBUG] [Thread-129245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:49:56.688 [INFO] [Thread-129245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:49:56.691 [DEBUG] [Thread-129245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:49:56.691 [DEBUG] [Thread-129245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:49:56.691 [DEBUG] [Thread-129245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:49:56.691 [DEBUG] [Thread-129245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:56.691 [DEBUG] [Thread-129245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:56.691 [DEBUG] [Thread-129245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:56.691 [DEBUG] [Thread-129245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] client lang: <none>
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] server lang: <none>
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] kex follows: False
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] Compression: none
2026-02-11T12:49:56.692 [DEBUG] [Thread-129245] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:49:56.711 [DEBUG] [Thread-129245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:49:56.712 [DEBUG] [Thread-129245] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:49:56.713 [DEBUG] [Thread-129245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:49:56.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:49:56.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:49:56.757 [DEBUG] [Thread-129245] [transport.py] [_log()] userauth is OK
2026-02-11T12:49:56.757 [DEBUG] [Thread-129245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:49:56.758 [DEBUG] [Thread-129245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:49:56.758 [DEBUG] [Thread-129245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:49:56.758 [DEBUG] [Thread-129245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:49:56.790 [INFO] [Thread-129245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:49:56.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:49:57.460 [DEBUG] [Thread-129245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:49:57.460 [DEBUG] [Thread-129245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:49:57.460 [DEBUG] [Thread-129245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:49:57.501 [DEBUG] [Thread-129245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:49:57.501 [DEBUG] [Thread-129245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:49:57.504 [DEBUG] [Thread-129245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:49:57.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:49:57.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:49:57.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:49:57.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:49:57.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:49:57.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:49:57.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:49:57.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:49:57.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:49:57.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.451185 -999.00  +22.90  21.29     46  +10.70 1 2 1 1 1   888    0 13.30 39.63 ----- 25.1 21.3 276.0 27.3 28.9 -20.4 28.6 -17.5 27.5 -21.6 28.7 -20.1
2026-02-11T12:49:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:49:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:49:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.451185
2026-02-11T12:49:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:49:57.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:49:57.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:49:57.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:49:57.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:49:57.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:49:45', tmtdew=14.47, humidity=39.52, cloud=0.0, wind=17.7, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:49:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:49:57.531 [DEBUG] [Thread-129245] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:49:57.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:49:57.627 [DEBUG] [Thread-129248] [transport.py] [_log()] starting thread (client mode): 0xa2d3fcd0
2026-02-11T12:49:57.627 [DEBUG] [Thread-129248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:49:57.641 [DEBUG] [Thread-129248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:49:57.641 [INFO] [Thread-129248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:49:57.649 [DEBUG] [Thread-129248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:49:57.649 [DEBUG] [Thread-129248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:49:57.649 [DEBUG] [Thread-129248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:49:57.649 [DEBUG] [Thread-129248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:57.649 [DEBUG] [Thread-129248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:49:57.649 [DEBUG] [Thread-129248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] client lang: <none>
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] server lang: <none>
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] kex follows: False
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] Compression: none
2026-02-11T12:49:57.650 [DEBUG] [Thread-129248] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:49:57.714 [DEBUG] [Thread-129248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:49:57.714 [DEBUG] [Thread-129248] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:49:57.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:49:57.716 [DEBUG] [Thread-129248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:49:57.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:49:57.769 [DEBUG] [Thread-129248] [transport.py] [_log()] userauth is OK
2026-02-11T12:49:57.770 [DEBUG] [Thread-129248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:49:57.770 [DEBUG] [Thread-129248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:49:57.770 [DEBUG] [Thread-129248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:49:57.770 [DEBUG] [Thread-129248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:49:57.785 [INFO] [Thread-129248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:49:57.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:49:57.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:49:58.591 [DEBUG] [Thread-129248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:49:58.592 [DEBUG] [Thread-129248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:49:58.639 [DEBUG] [Thread-129248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:49:58.640 [DEBUG] [Thread-129248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:49:58.649 [DEBUG] [Thread-129248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:49:58.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:49:58.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:49: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') -> 00000000
2026-02-11T12:49:58.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:49:58.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:49:58.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:49:58.686 [DEBUG] [Thread-129248] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:49:59.748 [DEBUG] [Thread-129250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:50:11.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:50:11.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:50:14.801 [DEBUG] [Thread-129251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:50:15.156 [DEBUG] [Thread-129252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:50:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:50:28.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:50:28.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
2026-02-11T12:50:29.841 [DEBUG] [Thread-129253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:50:30.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 50, 20), 14.54, 39.34, 0.0, 20.78, 23.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:50:30.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:50:20
2026-02-11T12:50:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:50:31.409 [DEBUG] [Thread-129254] [transport.py] [_log()] starting thread (client mode): 0xa2db4f40
2026-02-11T12:50:31.410 [DEBUG] [Thread-129254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:50:31.432 [DEBUG] [Thread-129254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:50:31.432 [INFO] [Thread-129254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] client lang: <none>
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] server lang: <none>
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] kex follows: False
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:50:31.435 [DEBUG] [Thread-129254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:50:31.436 [DEBUG] [Thread-129254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:50:31.436 [DEBUG] [Thread-129254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:50:31.436 [DEBUG] [Thread-129254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:50:31.436 [DEBUG] [Thread-129254] [transport.py] [_log()] Compression: none
2026-02-11T12:50:31.436 [DEBUG] [Thread-129254] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:50:31.456 [DEBUG] [Thread-129254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:50:31.457 [DEBUG] [Thread-129254] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:50:31.458 [DEBUG] [Thread-129254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:50:31.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:50:31.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:50:31.460 [DEBUG] [Thread-129254] [transport.py] [_log()] userauth is OK
2026-02-11T12:50:31.460 [DEBUG] [Thread-129254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:50:31.460 [DEBUG] [Thread-129254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:50:31.461 [DEBUG] [Thread-129254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:50:31.461 [DEBUG] [Thread-129254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:50:31.497 [INFO] [Thread-129254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:50:31.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:50:32.093 [DEBUG] [Thread-129254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:50:32.094 [DEBUG] [Thread-129254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:50:32.094 [DEBUG] [Thread-129254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:50:32.134 [DEBUG] [Thread-129254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:50:32.135 [DEBUG] [Thread-129254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:50:32.138 [DEBUG] [Thread-129254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:50:32.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:50:32.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:50:32.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:50:32.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:50:32.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:50:32.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:50:32.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:50:32.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:50:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:50:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.451532 -999.00  +23.10  24.20     46  +10.90 1 2 1 1 1   888    0 12.77 33.94 ----- 23.1 24.2 280.3 31.8 28.6 -20.0 28.4 -17.6 27.2 -19.1 28.3 -19.8
2026-02-11T12:50:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:50:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:50:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.451532
2026-02-11T12:50:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:50:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:50:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:50:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:50:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:50:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:50:20', tmtdew=14.54, humidity=39.34, cloud=0.0, wind=20.78, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:50:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:50:32.164 [DEBUG] [Thread-129254] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:50:32.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:50:32.258 [DEBUG] [Thread-129257] [transport.py] [_log()] starting thread (client mode): 0xa2d6f8e0
2026-02-11T12:50:32.258 [DEBUG] [Thread-129257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:50:32.273 [DEBUG] [Thread-129257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:50:32.273 [INFO] [Thread-129257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:50:32.280 [DEBUG] [Thread-129257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:50:32.281 [DEBUG] [Thread-129257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:50:32.281 [DEBUG] [Thread-129257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:50:32.281 [DEBUG] [Thread-129257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:50:32.281 [DEBUG] [Thread-129257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:50:32.281 [DEBUG] [Thread-129257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:50:32.281 [DEBUG] [Thread-129257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] client lang: <none>
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] server lang: <none>
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] kex follows: False
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:50:32.282 [DEBUG] [Thread-129257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:50:32.283 [DEBUG] [Thread-129257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:50:32.283 [DEBUG] [Thread-129257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:50:32.283 [DEBUG] [Thread-129257] [transport.py] [_log()] Compression: none
2026-02-11T12:50:32.283 [DEBUG] [Thread-129257] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:50:32.348 [DEBUG] [Thread-129257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:50:32.348 [DEBUG] [Thread-129257] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:50:32.349 [DEBUG] [Thread-129257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:50:32.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:50:32.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:50:32.406 [DEBUG] [Thread-129257] [transport.py] [_log()] userauth is OK
2026-02-11T12:50:32.406 [DEBUG] [Thread-129257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:50:32.406 [DEBUG] [Thread-129257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:50:32.406 [DEBUG] [Thread-129257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:50:32.406 [DEBUG] [Thread-129257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:50:32.426 [INFO] [Thread-129257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:50:32.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:50:32.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:50:33.260 [DEBUG] [Thread-129257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:50:33.260 [DEBUG] [Thread-129257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:50:33.308 [DEBUG] [Thread-129257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:50:33.308 [DEBUG] [Thread-129257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:50:33.317 [DEBUG] [Thread-129257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:50:33.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:50:33.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')
2026-02-11T12:50:33.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:50:33.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:50:33.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:50:33.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:50:33.351 [DEBUG] [Thread-129257] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:50:44.877 [DEBUG] [Thread-129259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:50:59.935 [DEBUG] [Thread-129260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:51:03.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:51:03.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:51:03.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:51:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 50, 56), 14.47, 39.97, 0.0, 32.15, 23.42, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:51:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:50:56
2026-02-11T12:51:05.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:51:05.720 [DEBUG] [Thread-129261] [transport.py] [_log()] starting thread (client mode): 0xa2d6ddb0
2026-02-11T12:51:05.720 [DEBUG] [Thread-129261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:51:05.740 [DEBUG] [Thread-129261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:51:05.740 [INFO] [Thread-129261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:51:05.743 [DEBUG] [Thread-129261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:51:05.743 [DEBUG] [Thread-129261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:51:05.743 [DEBUG] [Thread-129261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:51:05.743 [DEBUG] [Thread-129261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:05.743 [DEBUG] [Thread-129261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:05.743 [DEBUG] [Thread-129261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] client lang: <none>
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] server lang: <none>
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] kex follows: False
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] Compression: none
2026-02-11T12:51:05.744 [DEBUG] [Thread-129261] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:51:05.765 [DEBUG] [Thread-129261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:51:05.766 [DEBUG] [Thread-129261] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:51:05.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:51:05.767 [DEBUG] [Thread-129261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:51:05.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:51:05.769 [DEBUG] [Thread-129261] [transport.py] [_log()] userauth is OK
2026-02-11T12:51:05.769 [DEBUG] [Thread-129261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:51:05.769 [DEBUG] [Thread-129261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:51:05.770 [DEBUG] [Thread-129261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:51:05.770 [DEBUG] [Thread-129261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:51:05.794 [INFO] [Thread-129261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:51:05.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:51:06.427 [DEBUG] [Thread-129261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:51:06.427 [DEBUG] [Thread-129261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:51:06.428 [DEBUG] [Thread-129261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:51:06.467 [DEBUG] [Thread-129261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:51:06.468 [DEBUG] [Thread-129261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:51:06.472 [DEBUG] [Thread-129261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:51:06.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:51:06.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:51:06.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:51:06.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:51:06.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:51:06.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:51:06.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:51:06.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:51:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:51:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.451880 -999.00  +23.00  26.56     46  +10.90 1 2 1 1 1   888    0 12.90 34.30 ----- 19.4 26.6 274.2 32.5 28.2 -20.4 28.1 -18.3 26.9 -20.6 28.1 -20.8
2026-02-11T12:51:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:51:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:51:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.451880
2026-02-11T12:51:06.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:51:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:51:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:51:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:51:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:51:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:50:56', tmtdew=14.47, humidity=39.97, cloud=0.0, wind=32.15, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:50:42.432', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:51:06.498 [DEBUG] [Thread-129261] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:51:06.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:51:06.595 [DEBUG] [Thread-129264] [transport.py] [_log()] starting thread (client mode): 0xa2d3e560
2026-02-11T12:51:06.595 [DEBUG] [Thread-129264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:51:06.611 [DEBUG] [Thread-129264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:51:06.611 [INFO] [Thread-129264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:51:06.621 [DEBUG] [Thread-129264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:51:06.622 [DEBUG] [Thread-129264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:51:06.622 [DEBUG] [Thread-129264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:51:06.622 [DEBUG] [Thread-129264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:06.622 [DEBUG] [Thread-129264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:06.622 [DEBUG] [Thread-129264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:06.622 [DEBUG] [Thread-129264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:06.622 [DEBUG] [Thread-129264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:51:06.623 [DEBUG] [Thread-129264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:51:06.623 [DEBUG] [Thread-129264] [transport.py] [_log()] client lang: <none>
2026-02-11T12:51:06.623 [DEBUG] [Thread-129264] [transport.py] [_log()] server lang: <none>
2026-02-11T12:51:06.623 [DEBUG] [Thread-129264] [transport.py] [_log()] kex follows: False
2026-02-11T12:51:06.623 [DEBUG] [Thread-129264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:51:06.623 [DEBUG] [Thread-129264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:51:06.623 [DEBUG] [Thread-129264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:51:06.624 [DEBUG] [Thread-129264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:51:06.624 [DEBUG] [Thread-129264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:51:06.624 [DEBUG] [Thread-129264] [transport.py] [_log()] Compression: none
2026-02-11T12:51:06.624 [DEBUG] [Thread-129264] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:51:06.685 [DEBUG] [Thread-129264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:51:06.686 [DEBUG] [Thread-129264] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:51:06.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:51:06.687 [DEBUG] [Thread-129264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:51:06.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:51:06.742 [DEBUG] [Thread-129264] [transport.py] [_log()] userauth is OK
2026-02-11T12:51:06.742 [DEBUG] [Thread-129264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:51:06.742 [DEBUG] [Thread-129264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:51:06.742 [DEBUG] [Thread-129264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:51:06.742 [DEBUG] [Thread-129264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:51:06.761 [INFO] [Thread-129264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:51:06.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:51:06.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:51:07.619 [DEBUG] [Thread-129264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:51:07.620 [DEBUG] [Thread-129264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:51:07.669 [DEBUG] [Thread-129264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:51:07.669 [DEBUG] [Thread-129264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:51:07.680 [DEBUG] [Thread-129264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:51:07.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:51:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:51:07.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:51:07.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:51:07.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:51:07.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:51:07.722 [DEBUG] [Thread-129264] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:51:11.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:51:11.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:51:14.972 [DEBUG] [Thread-129266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:51:15.210 [DEBUG] [Thread-129267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:51:30.025 [DEBUG] [Thread-129268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:51:37.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:51:37.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:51:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:51:39.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 51, 31), 14.61, 39.64, 0.0, 36.66, 23.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:51:39.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:51:31
2026-02-11T12:51:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:51:40.156 [DEBUG] [Thread-129269] [transport.py] [_log()] starting thread (client mode): 0xa2d6f2e0
2026-02-11T12:51:40.156 [DEBUG] [Thread-129269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:51:40.176 [DEBUG] [Thread-129269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:51:40.176 [INFO] [Thread-129269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:51:40.179 [DEBUG] [Thread-129269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] client lang: <none>
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] server lang: <none>
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] kex follows: False
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:51:40.180 [DEBUG] [Thread-129269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:51:40.181 [DEBUG] [Thread-129269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:51:40.181 [DEBUG] [Thread-129269] [transport.py] [_log()] Compression: none
2026-02-11T12:51:40.181 [DEBUG] [Thread-129269] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:51:40.198 [DEBUG] [Thread-129269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:51:40.199 [DEBUG] [Thread-129269] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:51:40.199 [DEBUG] [Thread-129269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:51:40.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:51:40.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:51:40.201 [DEBUG] [Thread-129269] [transport.py] [_log()] userauth is OK
2026-02-11T12:51:40.201 [DEBUG] [Thread-129269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:51:40.201 [DEBUG] [Thread-129269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:51:40.201 [DEBUG] [Thread-129269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:51:40.201 [DEBUG] [Thread-129269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:51:40.225 [INFO] [Thread-129269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:51:40.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:51:40.862 [DEBUG] [Thread-129269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:51:40.862 [DEBUG] [Thread-129269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:51:40.862 [DEBUG] [Thread-129269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:51:40.903 [DEBUG] [Thread-129269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:51:40.904 [DEBUG] [Thread-129269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:51:40.907 [DEBUG] [Thread-129269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:51:40.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:51:40.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:51:40.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:51:40.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:51:40.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:51:40.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:51:40.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:51:40.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:51:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:51:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.452227 -999.00  +22.70  25.02     47  +10.90 1 2 1 1 1   888    0 13.08 35.03 ----- 29.1 25.0 272.7 31.0 28.1 -16.9 27.9 -18.5 26.7 -16.2 27.7 -19.6
2026-02-11T12:51:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:51:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:51:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.452227
2026-02-11T12:51:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:51:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:51:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:51:40.936 [DEBUG] [Thread-129269] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:51:40.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:51:40.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:51:40.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:51:31', tmtdew=14.61, humidity=39.64, cloud=0.0, wind=36.66, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:51:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:51:41.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:51:41.032 [DEBUG] [Thread-129272] [transport.py] [_log()] starting thread (client mode): 0xa2d6c700
2026-02-11T12:51:41.032 [DEBUG] [Thread-129272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:51:41.047 [DEBUG] [Thread-129272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:51:41.047 [INFO] [Thread-129272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:51:41.054 [DEBUG] [Thread-129272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:51:41.055 [DEBUG] [Thread-129272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:51:41.055 [DEBUG] [Thread-129272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:51:41.055 [DEBUG] [Thread-129272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:41.055 [DEBUG] [Thread-129272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] client lang: <none>
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] server lang: <none>
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] kex follows: False
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] Compression: none
2026-02-11T12:51:41.056 [DEBUG] [Thread-129272] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:51:41.114 [DEBUG] [Thread-129272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:51:41.115 [DEBUG] [Thread-129272] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:51:41.115 [DEBUG] [Thread-129272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:51:41.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:51:41.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:51:41.170 [DEBUG] [Thread-129272] [transport.py] [_log()] userauth is OK
2026-02-11T12:51:41.171 [DEBUG] [Thread-129272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:51:41.171 [DEBUG] [Thread-129272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:51:41.171 [DEBUG] [Thread-129272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:51:41.171 [DEBUG] [Thread-129272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:51:41.189 [INFO] [Thread-129272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:51:41.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:51:41.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:51:41.988 [DEBUG] [Thread-129272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:51:41.988 [DEBUG] [Thread-129272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:51:42.036 [DEBUG] [Thread-129272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:51:42.037 [DEBUG] [Thread-129272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:51:42.046 [DEBUG] [Thread-129272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:51:42.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:51:42.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:51:42.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:51:42.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:51:42.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:51:42.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:51:42.083 [DEBUG] [Thread-129272] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:51:45.063 [DEBUG] [Thread-129274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:00.123 [DEBUG] [Thread-129275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:11.294 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:11.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:52:12.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:52:12.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:52:14.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 51, 31), 14.61, 39.64, 0.0, 36.66, 23.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:52:14.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:51:31
2026-02-11T12:52:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:52:14.889 [DEBUG] [Thread-129276] [transport.py] [_log()] starting thread (client mode): 0xa2db4280
2026-02-11T12:52:14.889 [DEBUG] [Thread-129276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:52:14.909 [DEBUG] [Thread-129276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:52:14.909 [INFO] [Thread-129276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:52:14.912 [DEBUG] [Thread-129276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] client lang: <none>
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] server lang: <none>
2026-02-11T12:52:14.913 [DEBUG] [Thread-129276] [transport.py] [_log()] kex follows: False
2026-02-11T12:52:14.914 [DEBUG] [Thread-129276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:52:14.914 [DEBUG] [Thread-129276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:52:14.914 [DEBUG] [Thread-129276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:52:14.914 [DEBUG] [Thread-129276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:52:14.914 [DEBUG] [Thread-129276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:52:14.914 [DEBUG] [Thread-129276] [transport.py] [_log()] Compression: none
2026-02-11T12:52:14.914 [DEBUG] [Thread-129276] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:52:14.931 [DEBUG] [Thread-129276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:52:14.932 [DEBUG] [Thread-129276] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:52:14.932 [DEBUG] [Thread-129276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:52:14.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:52:14.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:52:14.934 [DEBUG] [Thread-129276] [transport.py] [_log()] userauth is OK
2026-02-11T12:52:14.935 [DEBUG] [Thread-129276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:52:14.935 [DEBUG] [Thread-129276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:52:14.935 [DEBUG] [Thread-129276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:52:14.935 [DEBUG] [Thread-129276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:52:14.953 [INFO] [Thread-129276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:52:14.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:52:15.157 [DEBUG] [Thread-129278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:15.249 [DEBUG] [Thread-129279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:15.527 [DEBUG] [Thread-129276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:52:15.527 [DEBUG] [Thread-129276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:52:15.528 [DEBUG] [Thread-129276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:52:15.568 [DEBUG] [Thread-129276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:52:15.568 [DEBUG] [Thread-129276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:52:15.572 [DEBUG] [Thread-129276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:52:15.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:52:15.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:52:15.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:52:15.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:52:15.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:52:15.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:52:15.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:52:15.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:52:15.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:52:15.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.452574 -999.00  +23.10  33.52     46  +11.20 1 2 2 1 1   888    0 13.37 40.43 ----- 34.6 33.5 294.0 40.0 28.1 -19.5 27.9 -17.5 26.9 -17.8 27.7 -17.5
2026-02-11T12:52:15.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:52:15.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:52:15.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.452574
2026-02-11T12:52:15.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:52:15.597 [DEBUG] [Thread-129276] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:52:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:52:15.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:52:15.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:52:15.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:52:15.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:51:31', tmtdew=14.61, humidity=39.64, cloud=0.0, wind=36.66, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:51:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:52:15.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:52:15.693 [DEBUG] [Thread-129281] [transport.py] [_log()] starting thread (client mode): 0xa81d5bd0
2026-02-11T12:52:15.693 [DEBUG] [Thread-129281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:52:15.708 [DEBUG] [Thread-129281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:52:15.709 [INFO] [Thread-129281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] client lang: <none>
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] server lang: <none>
2026-02-11T12:52:15.717 [DEBUG] [Thread-129281] [transport.py] [_log()] kex follows: False
2026-02-11T12:52:15.718 [DEBUG] [Thread-129281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:52:15.718 [DEBUG] [Thread-129281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:52:15.718 [DEBUG] [Thread-129281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:52:15.718 [DEBUG] [Thread-129281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:52:15.718 [DEBUG] [Thread-129281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:52:15.718 [DEBUG] [Thread-129281] [transport.py] [_log()] Compression: none
2026-02-11T12:52:15.718 [DEBUG] [Thread-129281] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:52:15.773 [DEBUG] [Thread-129281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:52:15.774 [DEBUG] [Thread-129281] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:52:15.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:52:15.775 [DEBUG] [Thread-129281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:52:15.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:52:15.834 [DEBUG] [Thread-129281] [transport.py] [_log()] userauth is OK
2026-02-11T12:52:15.834 [DEBUG] [Thread-129281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:52:15.835 [DEBUG] [Thread-129281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:52:15.835 [DEBUG] [Thread-129281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:52:15.835 [DEBUG] [Thread-129281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:52:15.854 [INFO] [Thread-129281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:52:15.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:52:15.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:52:16.672 [DEBUG] [Thread-129281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:52:16.672 [DEBUG] [Thread-129281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:52:16.720 [DEBUG] [Thread-129281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:52:16.720 [DEBUG] [Thread-129281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:52:16.733 [DEBUG] [Thread-129281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:52:16.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:52:16.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:52:16.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:52:16.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:52:16.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:52:16.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:52:16.776 [DEBUG] [Thread-129281] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:52:30.195 [DEBUG] [Thread-129283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:45.240 [DEBUG] [Thread-129284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:52:46.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:52:46.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:52:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:52:48.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 52, 6), 14.47, 39.96, 0.0, 33.75, 23.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:52:48.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:52:06
2026-02-11T12:52:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:52:49.192 [DEBUG] [Thread-129285] [transport.py] [_log()] starting thread (client mode): 0xa81d4f40
2026-02-11T12:52:49.192 [DEBUG] [Thread-129285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:52:49.213 [DEBUG] [Thread-129285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:52:49.214 [INFO] [Thread-129285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:52:49.216 [DEBUG] [Thread-129285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] client lang: <none>
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] server lang: <none>
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] kex follows: False
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] Compression: none
2026-02-11T12:52:49.217 [DEBUG] [Thread-129285] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:52:49.233 [DEBUG] [Thread-129285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:52:49.234 [DEBUG] [Thread-129285] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:52:49.234 [DEBUG] [Thread-129285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:52:49.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:52:49.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:52:49.236 [DEBUG] [Thread-129285] [transport.py] [_log()] userauth is OK
2026-02-11T12:52:49.236 [DEBUG] [Thread-129285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:52:49.236 [DEBUG] [Thread-129285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:52:49.236 [DEBUG] [Thread-129285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:52:49.237 [DEBUG] [Thread-129285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:52:49.269 [INFO] [Thread-129285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:52:49.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:52:49.901 [DEBUG] [Thread-129285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:52:49.901 [DEBUG] [Thread-129285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:52:49.902 [DEBUG] [Thread-129285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:52:49.942 [DEBUG] [Thread-129285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:52:49.942 [DEBUG] [Thread-129285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:52:49.945 [DEBUG] [Thread-129285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:52:49.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:52:49.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:52:49.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:52:49.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:52:49.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:52:49.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:52:49.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:52:49.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:52:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:52:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.452921 -999.00  +23.20  30.44     46  +11.10 1 2 2 1 1   888    0 13.34 38.75 ----- 31.3 30.4 289.7 42.0 28.0 -17.5 27.6 -17.1 26.9 -18.4 27.4 -19.2
2026-02-11T12:52:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:52:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:52:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.452921
2026-02-11T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:52:06', tmtdew=14.47, humidity=39.96, cloud=0.0, wind=33.75, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:52:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:52:49.967 [DEBUG] [Thread-129285] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:52:50.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:52:50.053 [DEBUG] [Thread-129288] [transport.py] [_log()] starting thread (client mode): 0xa2d3c940
2026-02-11T12:52:50.053 [DEBUG] [Thread-129288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:52:50.067 [DEBUG] [Thread-129288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:52:50.068 [INFO] [Thread-129288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:52:50.075 [DEBUG] [Thread-129288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:52:50.075 [DEBUG] [Thread-129288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:52:50.075 [DEBUG] [Thread-129288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:52:50.075 [DEBUG] [Thread-129288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:50.075 [DEBUG] [Thread-129288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] client lang: <none>
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] server lang: <none>
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] kex follows: False
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] Compression: none
2026-02-11T12:52:50.076 [DEBUG] [Thread-129288] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:52:50.135 [DEBUG] [Thread-129288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:52:50.135 [DEBUG] [Thread-129288] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:52:50.136 [DEBUG] [Thread-129288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:52:50.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:52:50.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:52:50.194 [DEBUG] [Thread-129288] [transport.py] [_log()] userauth is OK
2026-02-11T12:52:50.194 [DEBUG] [Thread-129288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:52:50.194 [DEBUG] [Thread-129288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:52:50.195 [DEBUG] [Thread-129288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:52:50.195 [DEBUG] [Thread-129288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:52:50.215 [INFO] [Thread-129288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:52:50.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:52:50.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:52:51.062 [DEBUG] [Thread-129288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:52:51.062 [DEBUG] [Thread-129288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:52:51.111 [DEBUG] [Thread-129288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:52:51.111 [DEBUG] [Thread-129288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:52:51.120 [DEBUG] [Thread-129288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:52:51.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:52:51.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:52:51.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:52:51.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:52:51.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:52:51.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:52:51.157 [DEBUG] [Thread-129288] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:53:00.275 [DEBUG] [Thread-129290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:53:11.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:53:11.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:53:15.291 [DEBUG] [Thread-129291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:53:15.326 [DEBUG] [Thread-129292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:53:21.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:53:21.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:53:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:53:23.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 52, 42), 15.0, 38.44, 0.0, 27.73, 23.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:53:23.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:52:42
2026-02-11T12:53:23.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:53:23.939 [DEBUG] [Thread-129293] [transport.py] [_log()] starting thread (client mode): 0xa2d3f0d0
2026-02-11T12:53:23.939 [DEBUG] [Thread-129293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:53:23.960 [DEBUG] [Thread-129293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:53:23.960 [INFO] [Thread-129293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:53:23.963 [DEBUG] [Thread-129293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:53:23.963 [DEBUG] [Thread-129293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:53:23.963 [DEBUG] [Thread-129293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] client lang: <none>
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] server lang: <none>
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] kex follows: False
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] Compression: none
2026-02-11T12:53:23.964 [DEBUG] [Thread-129293] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:53:23.982 [DEBUG] [Thread-129293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:53:23.983 [DEBUG] [Thread-129293] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:53:23.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:53:23.984 [DEBUG] [Thread-129293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:53:23.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:53:23.986 [DEBUG] [Thread-129293] [transport.py] [_log()] userauth is OK
2026-02-11T12:53:23.987 [DEBUG] [Thread-129293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:53:23.987 [DEBUG] [Thread-129293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:53:23.987 [DEBUG] [Thread-129293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:53:23.987 [DEBUG] [Thread-129293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:53:24.005 [INFO] [Thread-129293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:53:24.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:53:24.635 [DEBUG] [Thread-129293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:53:24.635 [DEBUG] [Thread-129293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:53:24.635 [DEBUG] [Thread-129293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:53:24.676 [DEBUG] [Thread-129293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:53:24.676 [DEBUG] [Thread-129293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:53:24.678 [DEBUG] [Thread-129293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:53:24.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:53:24.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:53:24.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:53:24.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:53:24.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:53:24.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:53:24.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:53:24.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:53:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:53:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.453616 -999.00  +22.80  37.66     46  +10.90 1 2 2 1 1   888    0 13.02 36.77 ----- 33.7 37.7 270.2 39.8 28.3 -16.7 28.0 -14.2 26.8 -16.9 27.9 -13.3
2026-02-11T12:53:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:53:24.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:53:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.453616
2026-02-11T12:53:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:53:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:53:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:53:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:53:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:53:24.703 [DEBUG] [Thread-129293] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:53:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:52:42', tmtdew=15.0, humidity=38.44, cloud=0.0, wind=27.73, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:53:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:53:24.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:53:24.800 [DEBUG] [Thread-129296] [transport.py] [_log()] starting thread (client mode): 0xa2d3faf0
2026-02-11T12:53:24.801 [DEBUG] [Thread-129296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:53:24.815 [DEBUG] [Thread-129296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:53:24.815 [INFO] [Thread-129296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] client lang: <none>
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] server lang: <none>
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] kex follows: False
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] Compression: none
2026-02-11T12:53:24.823 [DEBUG] [Thread-129296] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:53:24.881 [DEBUG] [Thread-129296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:53:24.881 [DEBUG] [Thread-129296] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:53:24.881 [DEBUG] [Thread-129296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:53:24.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:53:24.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:53:24.941 [DEBUG] [Thread-129296] [transport.py] [_log()] userauth is OK
2026-02-11T12:53:24.941 [DEBUG] [Thread-129296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:53:24.941 [DEBUG] [Thread-129296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:53:24.941 [DEBUG] [Thread-129296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:53:24.941 [DEBUG] [Thread-129296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:53:24.963 [INFO] [Thread-129296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:53:24.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:53:24.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:53:25.797 [DEBUG] [Thread-129296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:53:25.797 [DEBUG] [Thread-129296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:53:25.845 [DEBUG] [Thread-129296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:53:25.846 [DEBUG] [Thread-129296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:53:25.855 [DEBUG] [Thread-129296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:53:25.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:53:25.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:53:25.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
2026-02-11T12:53:25.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:53:25.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:53:25.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:53:25.891 [DEBUG] [Thread-129296] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:53:30.364 [DEBUG] [Thread-129298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:53:45.416 [DEBUG] [Thread-129299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:53:55.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:53:55.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:53:55.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
2026-02-11T12:53:57.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 53, 17), 14.33, 39.87, 0.0, 30.26, 23.3, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:53:57.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:53:17
2026-02-11T12:53:58.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:53:58.510 [DEBUG] [Thread-129300] [transport.py] [_log()] starting thread (client mode): 0xa2d10bb0
2026-02-11T12:53:58.510 [DEBUG] [Thread-129300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:53:58.530 [DEBUG] [Thread-129300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:53:58.530 [INFO] [Thread-129300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] client lang: <none>
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] server lang: <none>
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] kex follows: False
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] Compression: none
2026-02-11T12:53:58.534 [DEBUG] [Thread-129300] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:53:58.552 [DEBUG] [Thread-129300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:53:58.553 [DEBUG] [Thread-129300] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:53:58.553 [DEBUG] [Thread-129300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:53:58.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:53:58.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:53:58.555 [DEBUG] [Thread-129300] [transport.py] [_log()] userauth is OK
2026-02-11T12:53:58.556 [DEBUG] [Thread-129300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:53:58.556 [DEBUG] [Thread-129300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:53:58.556 [DEBUG] [Thread-129300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:53:58.556 [DEBUG] [Thread-129300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:53:58.593 [INFO] [Thread-129300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:53:58.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:53:59.250 [DEBUG] [Thread-129300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:53:59.250 [DEBUG] [Thread-129300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:53:59.250 [DEBUG] [Thread-129300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:53:59.291 [DEBUG] [Thread-129300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:53:59.292 [DEBUG] [Thread-129300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:53:59.295 [DEBUG] [Thread-129300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:53:59.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:53:59.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:53:59.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:53:59.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:53:59.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:53:59.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:53:59.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:53:59.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:53:59.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:53:59.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.453963 -999.00  +23.00  32.69     46  +10.80 1 2 2 1 1   888    0 12.98 36.57 ----- 30.8 32.7 273.8 40.2 28.5 -16.9 28.1 -14.3 26.9 -17.7 27.9 -13.4
2026-02-11T12:53:59.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:53:59.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:53:59.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.453963
2026-02-11T12:53:59.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:53:59.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:53:59.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:53:59.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:53:59.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:53:59.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:53:17', tmtdew=14.33, humidity=39.87, cloud=0.0, wind=30.26, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:53:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:53:59.325 [DEBUG] [Thread-129300] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:53:59.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:53:59.420 [DEBUG] [Thread-129303] [transport.py] [_log()] starting thread (client mode): 0xa2d7a5c0
2026-02-11T12:53:59.420 [DEBUG] [Thread-129303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:53:59.434 [DEBUG] [Thread-129303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:53:59.435 [INFO] [Thread-129303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:53:59.442 [DEBUG] [Thread-129303] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] client lang: <none>
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] server lang: <none>
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] kex follows: False
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] Compression: none
2026-02-11T12:53:59.443 [DEBUG] [Thread-129303] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:53:59.502 [DEBUG] [Thread-129303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:53:59.503 [DEBUG] [Thread-129303] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:53:59.503 [DEBUG] [Thread-129303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:53:59.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:53:59.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:53:59.558 [DEBUG] [Thread-129303] [transport.py] [_log()] userauth is OK
2026-02-11T12:53:59.559 [DEBUG] [Thread-129303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:53:59.559 [DEBUG] [Thread-129303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:53:59.559 [DEBUG] [Thread-129303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:53:59.559 [DEBUG] [Thread-129303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:53:59.578 [INFO] [Thread-129303] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:53:59.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:53:59.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:54:00.394 [DEBUG] [Thread-129303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:54:00.394 [DEBUG] [Thread-129303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:54:00.442 [DEBUG] [Thread-129303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:54:00.443 [DEBUG] [Thread-129303] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:54:00.452 [DEBUG] [Thread-129303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:54:00.455 [DEBUG] [Thread-129305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:54:00.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:54:00.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:54:00.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:54:00.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:54:00.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:54:00.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:54:00.487 [DEBUG] [Thread-129303] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:54:11.576 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:54:11.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:54:15.337 [DEBUG] [Thread-129306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:54:15.505 [DEBUG] [Thread-129307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:54:30.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:54:30.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:54:30.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:54:30.544 [DEBUG] [Thread-129308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:54:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 53, 53), 14.56, 39.37, 0.0, 33.29, 23.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:54:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:53:53
2026-02-11T12:54:33.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:54:33.278 [DEBUG] [Thread-129309] [transport.py] [_log()] starting thread (client mode): 0xa2d6ddb0
2026-02-11T12:54:33.279 [DEBUG] [Thread-129309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:54:33.298 [DEBUG] [Thread-129309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:54:33.298 [INFO] [Thread-129309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:54:33.299 [DEBUG] [Thread-129309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:54:33.299 [DEBUG] [Thread-129309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:54:33.299 [DEBUG] [Thread-129309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:54:33.299 [DEBUG] [Thread-129309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:54:33.299 [DEBUG] [Thread-129309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] client lang: <none>
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] server lang: <none>
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] kex follows: False
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] Compression: none
2026-02-11T12:54:33.300 [DEBUG] [Thread-129309] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:54:33.315 [DEBUG] [Thread-129309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:54:33.315 [DEBUG] [Thread-129309] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:54:33.316 [DEBUG] [Thread-129309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:54:33.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:54:33.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:54:33.318 [DEBUG] [Thread-129309] [transport.py] [_log()] userauth is OK
2026-02-11T12:54:33.318 [DEBUG] [Thread-129309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:54:33.318 [DEBUG] [Thread-129309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:54:33.318 [DEBUG] [Thread-129309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:54:33.318 [DEBUG] [Thread-129309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:54:33.337 [INFO] [Thread-129309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:54:33.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:54:33.964 [DEBUG] [Thread-129309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:54:33.965 [DEBUG] [Thread-129309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:54:33.965 [DEBUG] [Thread-129309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:54:34.005 [DEBUG] [Thread-129309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:54:34.006 [DEBUG] [Thread-129309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:54:34.009 [DEBUG] [Thread-129309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:54:34.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:54:34.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:54:34.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:54:34.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:54:34.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:54:34.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:54:34.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:54:34.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:54:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:54:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454310 -999.00  +22.90  29.97     46  +10.80 1 2 1 1 1   888    0 13.10 34.59 ----- 25.0 30.0 293.8 34.0 28.8 -14.8 28.1 -14.6 27.3 -14.0 28.0 -13.6
2026-02-11T12:54:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:54:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:54:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454310
2026-02-11T12:54:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:54:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:54:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:54:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:54:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:54:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:53:53', tmtdew=14.56, humidity=39.37, cloud=0.0, wind=33.29, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:54:34.036 [DEBUG] [Thread-129309] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:54:34.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:54:34.131 [DEBUG] [Thread-129312] [transport.py] [_log()] starting thread (client mode): 0xa2d7a230
2026-02-11T12:54:34.131 [DEBUG] [Thread-129312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:54:34.146 [DEBUG] [Thread-129312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:54:34.146 [INFO] [Thread-129312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:54:34.153 [DEBUG] [Thread-129312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:54:34.153 [DEBUG] [Thread-129312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] client lang: <none>
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] server lang: <none>
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] kex follows: False
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] Compression: none
2026-02-11T12:54:34.154 [DEBUG] [Thread-129312] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:54:34.212 [DEBUG] [Thread-129312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:54:34.213 [DEBUG] [Thread-129312] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:54:34.213 [DEBUG] [Thread-129312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:54:34.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:54:34.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:54:34.270 [DEBUG] [Thread-129312] [transport.py] [_log()] userauth is OK
2026-02-11T12:54:34.270 [DEBUG] [Thread-129312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:54:34.270 [DEBUG] [Thread-129312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:54:34.270 [DEBUG] [Thread-129312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:54:34.270 [DEBUG] [Thread-129312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:54:34.288 [INFO] [Thread-129312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:54:34.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:54:34.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:54:35.156 [DEBUG] [Thread-129312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:54:35.157 [DEBUG] [Thread-129312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:54:35.204 [DEBUG] [Thread-129312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:54:35.204 [DEBUG] [Thread-129312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:54:35.213 [DEBUG] [Thread-129312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:54:35.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:54:35.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:54:35.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:54:35.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:54:35.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:54:35.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:54:35.249 [DEBUG] [Thread-129312] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:54:45.585 [DEBUG] [Thread-129314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:55:00.635 [DEBUG] [Thread-129315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:55:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:55:05.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:55: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
2026-02-11T12:55:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 54, 28), 15.03, 38.24, 0.0, 33.49, 23.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:55:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:54:28
2026-02-11T12:55:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:55:07.868 [DEBUG] [Thread-129316] [transport.py] [_log()] starting thread (client mode): 0xa2d13dc0
2026-02-11T12:55:07.868 [DEBUG] [Thread-129316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:55:07.887 [DEBUG] [Thread-129316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:55:07.887 [INFO] [Thread-129316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] client lang: <none>
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] server lang: <none>
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] kex follows: False
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] Compression: none
2026-02-11T12:55:07.889 [DEBUG] [Thread-129316] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:55:07.897 [DEBUG] [Thread-129316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:55:07.897 [DEBUG] [Thread-129316] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:55:07.898 [DEBUG] [Thread-129316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:55:07.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:55:07.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:55:07.899 [DEBUG] [Thread-129316] [transport.py] [_log()] userauth is OK
2026-02-11T12:55:07.899 [DEBUG] [Thread-129316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:55:07.899 [DEBUG] [Thread-129316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:55:07.899 [DEBUG] [Thread-129316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:55:07.899 [DEBUG] [Thread-129316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:55:07.915 [INFO] [Thread-129316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:55:07.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:55:08.888 [DEBUG] [Thread-129316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:55:08.888 [DEBUG] [Thread-129316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:55:08.889 [DEBUG] [Thread-129316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:55:08.929 [DEBUG] [Thread-129316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:55:08.929 [DEBUG] [Thread-129316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:55:08.932 [DEBUG] [Thread-129316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:55:08.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:55:08.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:55:08.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:55:08.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:55:08.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:55:08.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:55:08.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:55:08.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:55:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:55:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:55:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:55:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:55:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:55:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:55:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:55:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:55:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:55:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:55:08.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:54:28', tmtdew=15.03, humidity=38.24, cloud=0.0, wind=33.49, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:55:08.955 [DEBUG] [Thread-129316] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:55:09.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:55:09.052 [DEBUG] [Thread-129319] [transport.py] [_log()] starting thread (client mode): 0xa2d3d8d0
2026-02-11T12:55:09.052 [DEBUG] [Thread-129319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:55:09.067 [DEBUG] [Thread-129319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:55:09.067 [INFO] [Thread-129319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:55:09.075 [DEBUG] [Thread-129319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:55:09.075 [DEBUG] [Thread-129319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:55:09.075 [DEBUG] [Thread-129319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:55:09.075 [DEBUG] [Thread-129319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] client lang: <none>
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] server lang: <none>
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] kex follows: False
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:55:09.076 [DEBUG] [Thread-129319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:55:09.077 [DEBUG] [Thread-129319] [transport.py] [_log()] Compression: none
2026-02-11T12:55:09.077 [DEBUG] [Thread-129319] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:55:09.134 [DEBUG] [Thread-129319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:55:09.134 [DEBUG] [Thread-129319] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:55:09.135 [DEBUG] [Thread-129319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:55:09.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:55:09.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:55:09.190 [DEBUG] [Thread-129319] [transport.py] [_log()] userauth is OK
2026-02-11T12:55:09.190 [DEBUG] [Thread-129319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:55:09.190 [DEBUG] [Thread-129319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:55:09.190 [DEBUG] [Thread-129319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:55:09.190 [DEBUG] [Thread-129319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:55:09.209 [INFO] [Thread-129319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:55:09.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:55:09.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:55:10.028 [DEBUG] [Thread-129319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:55:10.028 [DEBUG] [Thread-129319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:55:10.076 [DEBUG] [Thread-129319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:55:10.076 [DEBUG] [Thread-129319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:55:10.085 [DEBUG] [Thread-129319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:55:10.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:55:10.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:55:10.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:55:10.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:55:10.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:55:10.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:55:10.118 [DEBUG] [Thread-129319] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:55:11.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:55:11.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:55:15.370 [DEBUG] [Thread-129321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:55:15.675 [DEBUG] [Thread-129322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:55:30.729 [DEBUG] [Thread-129323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:55:40.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:55:40.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:55:40.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:55:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 55, 4), 15.08, 38.13, 0.0, 33.68, 23.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:55:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:55:04
2026-02-11T12:55:42.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:55:42.866 [DEBUG] [Thread-129324] [transport.py] [_log()] starting thread (client mode): 0xa2d3f760
2026-02-11T12:55:42.866 [DEBUG] [Thread-129324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:55:42.887 [DEBUG] [Thread-129324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:55:42.887 [INFO] [Thread-129324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:42.890 [DEBUG] [Thread-129324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] client lang: <none>
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] server lang: <none>
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] kex follows: False
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] Compression: none
2026-02-11T12:55:42.891 [DEBUG] [Thread-129324] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:55:42.908 [DEBUG] [Thread-129324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:55:42.908 [DEBUG] [Thread-129324] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:55:42.909 [DEBUG] [Thread-129324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:55:42.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:55:42.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:55:42.910 [DEBUG] [Thread-129324] [transport.py] [_log()] userauth is OK
2026-02-11T12:55:42.910 [DEBUG] [Thread-129324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:55:42.910 [DEBUG] [Thread-129324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:55:42.910 [DEBUG] [Thread-129324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:55:42.910 [DEBUG] [Thread-129324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:55:42.921 [INFO] [Thread-129324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:55:42.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:55:43.563 [DEBUG] [Thread-129324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:55:43.564 [DEBUG] [Thread-129324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:55:43.564 [DEBUG] [Thread-129324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:55:43.604 [DEBUG] [Thread-129324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:55:43.605 [DEBUG] [Thread-129324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:55:43.608 [DEBUG] [Thread-129324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:55:43.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:55:43.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:55:43.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:55:43.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:55:43.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:55:43.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:55:43.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:55:43.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:55:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:55:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:55:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:55:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:55:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:55:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:55:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:55:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:55:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:55:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:55:43.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:55:04', tmtdew=15.08, humidity=38.13, cloud=0.0, wind=33.68, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:55:43.635 [DEBUG] [Thread-129324] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:55:43.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:55:43.733 [DEBUG] [Thread-129327] [transport.py] [_log()] starting thread (client mode): 0xa2d3efe0
2026-02-11T12:55:43.733 [DEBUG] [Thread-129327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:55:43.749 [DEBUG] [Thread-129327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:55:43.749 [INFO] [Thread-129327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:55:43.758 [DEBUG] [Thread-129327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] client lang: <none>
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] server lang: <none>
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] kex follows: False
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] Compression: none
2026-02-11T12:55:43.759 [DEBUG] [Thread-129327] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:55:43.821 [DEBUG] [Thread-129327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:55:43.822 [DEBUG] [Thread-129327] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:55:43.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:55:43.823 [DEBUG] [Thread-129327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:55:43.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:55:43.879 [DEBUG] [Thread-129327] [transport.py] [_log()] userauth is OK
2026-02-11T12:55:43.880 [DEBUG] [Thread-129327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:55:43.880 [DEBUG] [Thread-129327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:55:43.880 [DEBUG] [Thread-129327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:55:43.880 [DEBUG] [Thread-129327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:55:43.906 [INFO] [Thread-129327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:55:43.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:55:43.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:55:44.735 [DEBUG] [Thread-129327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:55:44.736 [DEBUG] [Thread-129327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:55:44.788 [DEBUG] [Thread-129327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:55:44.788 [DEBUG] [Thread-129327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:55:44.799 [DEBUG] [Thread-129327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:55:44.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:55:44.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:55:44.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:55:44.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:55:44.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:55:44.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:55:44.843 [DEBUG] [Thread-129327] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:55:45.770 [DEBUG] [Thread-129329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:00.825 [DEBUG] [Thread-129330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:11.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:11.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:14.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:56:14.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:56:14.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:56:15.402 [DEBUG] [Thread-129331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:15.863 [DEBUG] [Thread-129332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 55, 40), 15.9, 36.42, 0.0, 37.08, 24.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:56:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:55:40
2026-02-11T12:56:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:56:17.271 [DEBUG] [Thread-129333] [transport.py] [_log()] starting thread (client mode): 0xa2d126e0
2026-02-11T12:56:17.271 [DEBUG] [Thread-129333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:56:17.292 [DEBUG] [Thread-129333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:56:17.292 [INFO] [Thread-129333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:56:17.295 [DEBUG] [Thread-129333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:56:17.295 [DEBUG] [Thread-129333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:56:17.295 [DEBUG] [Thread-129333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:56:17.295 [DEBUG] [Thread-129333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:17.295 [DEBUG] [Thread-129333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:17.295 [DEBUG] [Thread-129333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:17.295 [DEBUG] [Thread-129333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] client lang: <none>
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] server lang: <none>
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] kex follows: False
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] Compression: none
2026-02-11T12:56:17.296 [DEBUG] [Thread-129333] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:56:17.313 [DEBUG] [Thread-129333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:56:17.314 [DEBUG] [Thread-129333] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:56:17.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:56:17.315 [DEBUG] [Thread-129333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:56:17.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:56:17.317 [DEBUG] [Thread-129333] [transport.py] [_log()] userauth is OK
2026-02-11T12:56:17.318 [DEBUG] [Thread-129333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:56:17.318 [DEBUG] [Thread-129333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:56:17.318 [DEBUG] [Thread-129333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:56:17.318 [DEBUG] [Thread-129333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:56:17.342 [INFO] [Thread-129333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:56:17.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:56:18.134 [DEBUG] [Thread-129333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:56:18.135 [DEBUG] [Thread-129333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:56:18.135 [DEBUG] [Thread-129333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:56:18.176 [DEBUG] [Thread-129333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:56:18.176 [DEBUG] [Thread-129333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:56:18.179 [DEBUG] [Thread-129333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:56:18.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:56:18.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:56:18.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:56:18.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:56:18.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:56:18.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:56:18.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:56:18.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:56:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:56:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:56:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:56:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:56:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:56:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:56:18.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:56:18.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:56:18.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:56:18.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:56:18.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:55:40', tmtdew=15.9, humidity=36.42, cloud=0.0, wind=37.08, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:56:18.196 [DEBUG] [Thread-129333] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:56:18.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:56:18.302 [DEBUG] [Thread-129336] [transport.py] [_log()] starting thread (client mode): 0xa2d79b40
2026-02-11T12:56:18.302 [DEBUG] [Thread-129336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:56:18.320 [DEBUG] [Thread-129336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:56:18.321 [INFO] [Thread-129336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:56:18.328 [DEBUG] [Thread-129336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] client lang: <none>
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] server lang: <none>
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] kex follows: False
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:56:18.329 [DEBUG] [Thread-129336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:56:18.330 [DEBUG] [Thread-129336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:56:18.330 [DEBUG] [Thread-129336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:56:18.330 [DEBUG] [Thread-129336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:56:18.330 [DEBUG] [Thread-129336] [transport.py] [_log()] Compression: none
2026-02-11T12:56:18.330 [DEBUG] [Thread-129336] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:56:18.392 [DEBUG] [Thread-129336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:56:18.392 [DEBUG] [Thread-129336] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:56:18.392 [DEBUG] [Thread-129336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:56:18.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:56:18.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:56:18.450 [DEBUG] [Thread-129336] [transport.py] [_log()] userauth is OK
2026-02-11T12:56:18.451 [DEBUG] [Thread-129336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:56:18.451 [DEBUG] [Thread-129336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:56:18.451 [DEBUG] [Thread-129336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:56:18.451 [DEBUG] [Thread-129336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:56:18.470 [INFO] [Thread-129336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:56:18.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:56:18.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:56:19.280 [DEBUG] [Thread-129336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:56:19.280 [DEBUG] [Thread-129336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:56:19.329 [DEBUG] [Thread-129336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:56:19.329 [DEBUG] [Thread-129336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:56:19.337 [DEBUG] [Thread-129336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:56:19.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:56:19.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:56:19.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:56:19.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:56:19.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:56:19.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:56:19.371 [DEBUG] [Thread-129336] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:56:30.900 [DEBUG] [Thread-129338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:45.953 [DEBUG] [Thread-129339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:56:49.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:56:49.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:56:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:56:51.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 56, 15), 15.05, 38.26, 0.0, 29.11, 23.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:56:51.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:56:15
2026-02-11T12:56:51.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:56:51.842 [DEBUG] [Thread-129340] [transport.py] [_log()] starting thread (client mode): 0xa2d79b10
2026-02-11T12:56:51.842 [DEBUG] [Thread-129340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:56:51.863 [DEBUG] [Thread-129340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:56:51.863 [INFO] [Thread-129340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] client lang: <none>
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] server lang: <none>
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] kex follows: False
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] Compression: none
2026-02-11T12:56:51.867 [DEBUG] [Thread-129340] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:56:51.885 [DEBUG] [Thread-129340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:56:51.886 [DEBUG] [Thread-129340] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:56:51.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:56:51.887 [DEBUG] [Thread-129340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:56:51.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:56:51.889 [DEBUG] [Thread-129340] [transport.py] [_log()] userauth is OK
2026-02-11T12:56:51.889 [DEBUG] [Thread-129340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:56:51.889 [DEBUG] [Thread-129340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:56:51.889 [DEBUG] [Thread-129340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:56:51.889 [DEBUG] [Thread-129340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:56:51.909 [INFO] [Thread-129340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:56:51.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:56:52.533 [DEBUG] [Thread-129340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:56:52.533 [DEBUG] [Thread-129340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:56:52.534 [DEBUG] [Thread-129340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:56:52.575 [DEBUG] [Thread-129340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:56:52.575 [DEBUG] [Thread-129340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:56:52.578 [DEBUG] [Thread-129340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:56:52.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:56:52.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:56:52.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:56:52.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:56:52.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:56:52.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:56:52.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:56:52.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:56:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:56:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:56:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:56:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:56:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:56:52.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:56:52.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:56:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:56:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:56:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:56:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:56:15', tmtdew=15.05, humidity=38.26, cloud=0.0, wind=29.11, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:56:52.608 [DEBUG] [Thread-129340] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:56:52.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:56:52.704 [DEBUG] [Thread-129343] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4d0
2026-02-11T12:56:52.704 [DEBUG] [Thread-129343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:56:52.719 [DEBUG] [Thread-129343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:56:52.719 [INFO] [Thread-129343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:56:52.726 [DEBUG] [Thread-129343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] client lang: <none>
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] server lang: <none>
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] kex follows: False
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] Compression: none
2026-02-11T12:56:52.727 [DEBUG] [Thread-129343] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:56:52.787 [DEBUG] [Thread-129343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:56:52.787 [DEBUG] [Thread-129343] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:56:52.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:56:52.789 [DEBUG] [Thread-129343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:56:52.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:56:52.846 [DEBUG] [Thread-129343] [transport.py] [_log()] userauth is OK
2026-02-11T12:56:52.846 [DEBUG] [Thread-129343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:56:52.846 [DEBUG] [Thread-129343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:56:52.846 [DEBUG] [Thread-129343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:56:52.847 [DEBUG] [Thread-129343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:56:52.865 [INFO] [Thread-129343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:56:52.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:56:52.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:56:53.690 [DEBUG] [Thread-129343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:56:53.690 [DEBUG] [Thread-129343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:56:53.738 [DEBUG] [Thread-129343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:56:53.738 [DEBUG] [Thread-129343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:56:53.748 [DEBUG] [Thread-129343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:56:53.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:56:53.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:56:53.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:56:53.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:56:53.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:56:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:56:53.784 [DEBUG] [Thread-129343] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:57:00.990 [DEBUG] [Thread-129345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:57:12.021 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:57:12.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:57:15.445 [DEBUG] [Thread-129346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:57:16.041 [DEBUG] [Thread-129347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:57:23.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:57:23.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:57:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:57:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 56, 51), 14.66, 39.1, 0.0, 24.07, 23.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:57:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:56:51
2026-02-11T12:57:26.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:57:26.200 [DEBUG] [Thread-129348] [transport.py] [_log()] starting thread (client mode): 0xa2d1a6e0
2026-02-11T12:57:26.200 [DEBUG] [Thread-129348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:57:26.215 [DEBUG] [Thread-129348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:57:26.215 [INFO] [Thread-129348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:57:26.218 [DEBUG] [Thread-129348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] client lang: <none>
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] server lang: <none>
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] kex follows: False
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] Compression: none
2026-02-11T12:57:26.219 [DEBUG] [Thread-129348] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:57:26.236 [DEBUG] [Thread-129348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:57:26.236 [DEBUG] [Thread-129348] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:57:26.237 [DEBUG] [Thread-129348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:57:26.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:57:26.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:57:26.239 [DEBUG] [Thread-129348] [transport.py] [_log()] userauth is OK
2026-02-11T12:57:26.239 [DEBUG] [Thread-129348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:57:26.239 [DEBUG] [Thread-129348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:57:26.239 [DEBUG] [Thread-129348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:57:26.240 [DEBUG] [Thread-129348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:57:26.264 [INFO] [Thread-129348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:57:26.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:57:26.916 [DEBUG] [Thread-129348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:57:26.916 [DEBUG] [Thread-129348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:57:26.926 [DEBUG] [Thread-129348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:57:26.957 [DEBUG] [Thread-129348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:57:26.958 [DEBUG] [Thread-129348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:57:26.961 [DEBUG] [Thread-129348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:57:26.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:57:26.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:57:26.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:57:26.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:57:26.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:57:26.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:57:26.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:57:26.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:57:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:57:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:57:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:57:26.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:57:26.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:57:26.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:57:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:57:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:57:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:57:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:57:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:56:51', tmtdew=14.66, humidity=39.1, cloud=0.0, wind=24.07, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:57:26.988 [DEBUG] [Thread-129348] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:57:27.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:57:27.084 [DEBUG] [Thread-129351] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff70
2026-02-11T12:57:27.084 [DEBUG] [Thread-129351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:57:27.100 [DEBUG] [Thread-129351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:57:27.100 [INFO] [Thread-129351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:57:27.108 [DEBUG] [Thread-129351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:57:27.108 [DEBUG] [Thread-129351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:57:27.108 [DEBUG] [Thread-129351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:57:27.108 [DEBUG] [Thread-129351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] client lang: <none>
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] server lang: <none>
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] kex follows: False
2026-02-11T12:57:27.109 [DEBUG] [Thread-129351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:57:27.110 [DEBUG] [Thread-129351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:57:27.110 [DEBUG] [Thread-129351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:57:27.110 [DEBUG] [Thread-129351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:57:27.110 [DEBUG] [Thread-129351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:57:27.110 [DEBUG] [Thread-129351] [transport.py] [_log()] Compression: none
2026-02-11T12:57:27.110 [DEBUG] [Thread-129351] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:57:27.171 [DEBUG] [Thread-129351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:57:27.171 [DEBUG] [Thread-129351] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:57:27.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:57:27.173 [DEBUG] [Thread-129351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:57:27.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:57:27.226 [DEBUG] [Thread-129351] [transport.py] [_log()] userauth is OK
2026-02-11T12:57:27.227 [DEBUG] [Thread-129351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:57:27.227 [DEBUG] [Thread-129351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:57:27.227 [DEBUG] [Thread-129351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:57:27.227 [DEBUG] [Thread-129351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:57:27.247 [INFO] [Thread-129351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:57:27.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:57:27.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:57:28.096 [DEBUG] [Thread-129351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:57:28.096 [DEBUG] [Thread-129351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:57:28.144 [DEBUG] [Thread-129351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:57:28.145 [DEBUG] [Thread-129351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:57:28.154 [DEBUG] [Thread-129351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:57:28.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:57: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')
2026-02-11T12:57:28.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:57:28.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:57:28.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:57:28.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:57:28.188 [DEBUG] [Thread-129351] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:57:31.074 [DEBUG] [Thread-129353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:57:46.127 [DEBUG] [Thread-129354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:57:58.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:57:58.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:57:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:58:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 57, 27), 14.87, 38.64, 0.0, 27.65, 23.7, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:58:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:57:27
2026-02-11T12:58:00.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:58:00.652 [DEBUG] [Thread-129355] [transport.py] [_log()] starting thread (client mode): 0xa2d3e5c0
2026-02-11T12:58:00.652 [DEBUG] [Thread-129355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:58:00.673 [DEBUG] [Thread-129355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:58:00.673 [INFO] [Thread-129355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:58:00.677 [DEBUG] [Thread-129355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] client lang: <none>
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] server lang: <none>
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] kex follows: False
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] Compression: none
2026-02-11T12:58:00.678 [DEBUG] [Thread-129355] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:58:00.688 [DEBUG] [Thread-129355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:58:00.689 [DEBUG] [Thread-129355] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:58:00.689 [DEBUG] [Thread-129355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:58:00.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:58:00.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:58:00.691 [DEBUG] [Thread-129355] [transport.py] [_log()] userauth is OK
2026-02-11T12:58:00.692 [DEBUG] [Thread-129355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:58:00.692 [DEBUG] [Thread-129355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:58:00.692 [DEBUG] [Thread-129355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:58:00.692 [DEBUG] [Thread-129355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:58:00.716 [INFO] [Thread-129355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:58:00.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:58:01.161 [DEBUG] [Thread-129357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:58:01.283 [DEBUG] [Thread-129355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:58:01.283 [DEBUG] [Thread-129355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:58:01.284 [DEBUG] [Thread-129355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:58:01.324 [DEBUG] [Thread-129355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:58:01.324 [DEBUG] [Thread-129355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:58:01.328 [DEBUG] [Thread-129355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:58:01.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:58:01.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:58:01.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:58:01.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:58:01.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:58:01.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:58:01.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:58:01.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:58:01.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:58:01.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:58:01.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:58:01.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:58:01.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:58:01.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:58:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:58:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:58:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:58:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:58:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:57:27', tmtdew=14.87, humidity=38.64, cloud=0.0, wind=27.65, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:58:01.357 [DEBUG] [Thread-129355] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:58:01.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:58:01.453 [DEBUG] [Thread-129359] [transport.py] [_log()] starting thread (client mode): 0xa2d78220
2026-02-11T12:58:01.454 [DEBUG] [Thread-129359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:58:01.468 [DEBUG] [Thread-129359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:58:01.468 [INFO] [Thread-129359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:58:01.475 [DEBUG] [Thread-129359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:58:01.475 [DEBUG] [Thread-129359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] client lang: <none>
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] server lang: <none>
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] kex follows: False
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] Compression: none
2026-02-11T12:58:01.476 [DEBUG] [Thread-129359] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:58:01.534 [DEBUG] [Thread-129359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:58:01.535 [DEBUG] [Thread-129359] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:58:01.536 [DEBUG] [Thread-129359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:58:01.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:58:01.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:58:01.596 [DEBUG] [Thread-129359] [transport.py] [_log()] userauth is OK
2026-02-11T12:58:01.596 [DEBUG] [Thread-129359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:58:01.597 [DEBUG] [Thread-129359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:58:01.597 [DEBUG] [Thread-129359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:58:01.597 [DEBUG] [Thread-129359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:58:01.621 [INFO] [Thread-129359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:58:01.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:58:01.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:58:02.480 [DEBUG] [Thread-129359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:58:02.480 [DEBUG] [Thread-129359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:58:02.528 [DEBUG] [Thread-129359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:58:02.528 [DEBUG] [Thread-129359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:58:02.538 [DEBUG] [Thread-129359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:58:02.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:58:02.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')
2026-02-11T12:58:02.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:58:02.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:58:02.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:58:02.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:58:02.574 [DEBUG] [Thread-129359] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:58:12.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:58:12.166 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:58:15.495 [DEBUG] [Thread-129361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:58:16.194 [DEBUG] [Thread-129362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:58:31.255 [DEBUG] [Thread-129363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:58:32.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:58:32.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:58:32.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:58:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 58, 3), 15.07, 38.19, 0.0, 25.6, 23.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:58:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:58:03
2026-02-11T12:58:35.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:58:35.192 [DEBUG] [Thread-129364] [transport.py] [_log()] starting thread (client mode): 0xa2d78a60
2026-02-11T12:58:35.192 [DEBUG] [Thread-129364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:58:35.211 [DEBUG] [Thread-129364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:58:35.211 [INFO] [Thread-129364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:58:35.214 [DEBUG] [Thread-129364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] client lang: <none>
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] server lang: <none>
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] kex follows: False
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:58:35.215 [DEBUG] [Thread-129364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:58:35.216 [DEBUG] [Thread-129364] [transport.py] [_log()] Compression: none
2026-02-11T12:58:35.216 [DEBUG] [Thread-129364] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:58:35.233 [DEBUG] [Thread-129364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:58:35.233 [DEBUG] [Thread-129364] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:58:35.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:58:35.234 [DEBUG] [Thread-129364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:58:35.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:58:35.236 [DEBUG] [Thread-129364] [transport.py] [_log()] userauth is OK
2026-02-11T12:58:35.236 [DEBUG] [Thread-129364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:58:35.236 [DEBUG] [Thread-129364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:58:35.236 [DEBUG] [Thread-129364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:58:35.236 [DEBUG] [Thread-129364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:58:35.272 [INFO] [Thread-129364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:58:35.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:58:35.927 [DEBUG] [Thread-129364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:58:35.928 [DEBUG] [Thread-129364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:58:35.928 [DEBUG] [Thread-129364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:58:35.970 [DEBUG] [Thread-129364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:58:35.970 [DEBUG] [Thread-129364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:58:35.974 [DEBUG] [Thread-129364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:58:35.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:58:35.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:58:35.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:58:35.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:58:35.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:58:36.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:58:36.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:58:36.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:58:36.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:58:36.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:58:36.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:58:36.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:58:36.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:58:36.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:58:36.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:58:36.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:58:36.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:58:36.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:58:36.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:58:03', tmtdew=15.07, humidity=38.19, cloud=0.0, wind=25.6, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:58:36.004 [DEBUG] [Thread-129364] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:58:36.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:58:36.099 [DEBUG] [Thread-129367] [transport.py] [_log()] starting thread (client mode): 0xa2d13df0
2026-02-11T12:58:36.099 [DEBUG] [Thread-129367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:58:36.113 [DEBUG] [Thread-129367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:58:36.113 [INFO] [Thread-129367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:58:36.121 [DEBUG] [Thread-129367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:58:36.121 [DEBUG] [Thread-129367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:58:36.121 [DEBUG] [Thread-129367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] client lang: <none>
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] server lang: <none>
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] kex follows: False
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] Compression: none
2026-02-11T12:58:36.122 [DEBUG] [Thread-129367] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:58:36.181 [DEBUG] [Thread-129367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:58:36.182 [DEBUG] [Thread-129367] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:58:36.183 [DEBUG] [Thread-129367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:58:36.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:58:36.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:58:36.243 [DEBUG] [Thread-129367] [transport.py] [_log()] userauth is OK
2026-02-11T12:58:36.243 [DEBUG] [Thread-129367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:58:36.243 [DEBUG] [Thread-129367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:58:36.243 [DEBUG] [Thread-129367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:58:36.243 [DEBUG] [Thread-129367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:58:36.267 [INFO] [Thread-129367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:58:36.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:58:36.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:58:37.129 [DEBUG] [Thread-129367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:58:37.129 [DEBUG] [Thread-129367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:58:37.178 [DEBUG] [Thread-129367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:58:37.178 [DEBUG] [Thread-129367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:58:37.187 [DEBUG] [Thread-129367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:58:37.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:58:37.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:58:37.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:58:37.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:58:37.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:58:37.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:58:37.223 [DEBUG] [Thread-129367] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:58:46.294 [DEBUG] [Thread-129369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:59:01.346 [DEBUG] [Thread-129370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:59:07.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:59:07.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:59:07.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:59:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 58, 38), 16.48, 35.16, 0.0, 38.11, 25.42, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:59:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:58:38
2026-02-11T12:59:09.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:59:09.573 [DEBUG] [Thread-129371] [transport.py] [_log()] starting thread (client mode): 0xa2d7b370
2026-02-11T12:59:09.573 [DEBUG] [Thread-129371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:59:09.589 [DEBUG] [Thread-129371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:59:09.589 [INFO] [Thread-129371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:59:09.592 [DEBUG] [Thread-129371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:59:09.592 [DEBUG] [Thread-129371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:59:09.592 [DEBUG] [Thread-129371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] client lang: <none>
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] server lang: <none>
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] kex follows: False
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] Compression: none
2026-02-11T12:59:09.593 [DEBUG] [Thread-129371] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:59:09.611 [DEBUG] [Thread-129371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:59:09.612 [DEBUG] [Thread-129371] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:59:09.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:59:09.613 [DEBUG] [Thread-129371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:59:09.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:59:09.615 [DEBUG] [Thread-129371] [transport.py] [_log()] userauth is OK
2026-02-11T12:59:09.615 [DEBUG] [Thread-129371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:59:09.615 [DEBUG] [Thread-129371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:59:09.615 [DEBUG] [Thread-129371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:59:09.616 [DEBUG] [Thread-129371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:59:09.652 [INFO] [Thread-129371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:59:09.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:59:10.316 [DEBUG] [Thread-129371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:59:10.316 [DEBUG] [Thread-129371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:59:10.317 [DEBUG] [Thread-129371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:59:10.357 [DEBUG] [Thread-129371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:59:10.357 [DEBUG] [Thread-129371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:59:10.360 [DEBUG] [Thread-129371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:59:10.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:59:10.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:59:10.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:59:10.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:59:10.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:59:10.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:59:10.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:59:10.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:59:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:59:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:59:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:59:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:59:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:59:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:59:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:59:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:59:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:59:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:59:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:58:38', tmtdew=16.48, humidity=35.16, cloud=0.0, wind=38.11, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:59:10.387 [DEBUG] [Thread-129371] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:59:10.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:59:10.483 [DEBUG] [Thread-129374] [transport.py] [_log()] starting thread (client mode): 0xa81d6fb0
2026-02-11T12:59:10.483 [DEBUG] [Thread-129374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:59:10.500 [DEBUG] [Thread-129374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:59:10.500 [INFO] [Thread-129374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] client lang: <none>
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] server lang: <none>
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] kex follows: False
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:59:10.508 [DEBUG] [Thread-129374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:59:10.509 [DEBUG] [Thread-129374] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:59:10.509 [DEBUG] [Thread-129374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:59:10.509 [DEBUG] [Thread-129374] [transport.py] [_log()] Compression: none
2026-02-11T12:59:10.509 [DEBUG] [Thread-129374] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:59:10.578 [DEBUG] [Thread-129374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:59:10.579 [DEBUG] [Thread-129374] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:59:10.579 [DEBUG] [Thread-129374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:59:10.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:59:10.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:59:10.638 [DEBUG] [Thread-129374] [transport.py] [_log()] userauth is OK
2026-02-11T12:59:10.638 [DEBUG] [Thread-129374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:59:10.638 [DEBUG] [Thread-129374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:59:10.638 [DEBUG] [Thread-129374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:59:10.638 [DEBUG] [Thread-129374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:59:10.653 [INFO] [Thread-129374] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:59:10.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:59:10.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:59:11.575 [DEBUG] [Thread-129374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:59:11.575 [DEBUG] [Thread-129374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:59:11.623 [DEBUG] [Thread-129374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:59:11.624 [DEBUG] [Thread-129374] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:59:11.633 [DEBUG] [Thread-129374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:59:11.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:59:11.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T12:59:11.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T12:59:11.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:59:11.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:59:11.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:59:11.670 [DEBUG] [Thread-129374] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:59:12.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:59:12.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:59:15.544 [DEBUG] [Thread-129376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:59:16.384 [DEBUG] [Thread-129377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:59:31.441 [DEBUG] [Thread-129378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T12:59:41.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T12:59:41.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T12:59:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T12:59:43.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 59, 14), 15.38, 37.81, 0.0, 23.54, 24.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T12:59:43.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:59:14
2026-02-11T12:59:43.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T12:59:43.932 [DEBUG] [Thread-129379] [transport.py] [_log()] starting thread (client mode): 0xa81d51b0
2026-02-11T12:59:43.933 [DEBUG] [Thread-129379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:59:43.954 [DEBUG] [Thread-129379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T12:59:43.954 [INFO] [Thread-129379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T12:59:43.957 [DEBUG] [Thread-129379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] client lang: <none>
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] server lang: <none>
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] kex follows: False
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:59:43.958 [DEBUG] [Thread-129379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:59:43.959 [DEBUG] [Thread-129379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:59:43.959 [DEBUG] [Thread-129379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:59:43.959 [DEBUG] [Thread-129379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:59:43.959 [DEBUG] [Thread-129379] [transport.py] [_log()] Compression: none
2026-02-11T12:59:43.959 [DEBUG] [Thread-129379] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:59:43.968 [DEBUG] [Thread-129379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:59:43.969 [DEBUG] [Thread-129379] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:59:43.969 [DEBUG] [Thread-129379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T12:59:43.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T12:59:43.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:59:43.971 [DEBUG] [Thread-129379] [transport.py] [_log()] userauth is OK
2026-02-11T12:59:43.972 [DEBUG] [Thread-129379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:59:43.972 [DEBUG] [Thread-129379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:59:43.972 [DEBUG] [Thread-129379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T12:59:43.972 [DEBUG] [Thread-129379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:59:43.997 [INFO] [Thread-129379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:59:43.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:59:44.644 [DEBUG] [Thread-129379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:59:44.644 [DEBUG] [Thread-129379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:59:44.644 [DEBUG] [Thread-129379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T12:59:44.685 [DEBUG] [Thread-129379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:59:44.686 [DEBUG] [Thread-129379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:59:44.689 [DEBUG] [Thread-129379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:59:44.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:59:44.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T12:59:44.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T12:59:44.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T12:59:44.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:59:44.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T12:59:44.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:59:44.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:59:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T12:59:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T12:59:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T12:59:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T12:59:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T12:59:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T12:59:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T12:59:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T12:59:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T12:59:44.718 [DEBUG] [Thread-129379] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:59:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T12:59:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:59:14', tmtdew=15.38, humidity=37.81, cloud=0.0, wind=23.54, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T12:59:44.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T12:59:44.815 [DEBUG] [Thread-129382] [transport.py] [_log()] starting thread (client mode): 0xa81d7e50
2026-02-11T12:59:44.816 [DEBUG] [Thread-129382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T12:59:44.830 [DEBUG] [Thread-129382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T12:59:44.830 [INFO] [Thread-129382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T12:59:44.837 [DEBUG] [Thread-129382] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T12:59:44.838 [DEBUG] [Thread-129382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T12:59:44.838 [DEBUG] [Thread-129382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T12:59:44.838 [DEBUG] [Thread-129382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:44.838 [DEBUG] [Thread-129382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T12:59:44.838 [DEBUG] [Thread-129382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:44.838 [DEBUG] [Thread-129382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] client lang: <none>
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] server lang: <none>
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] kex follows: False
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T12:59:44.839 [DEBUG] [Thread-129382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T12:59:44.840 [DEBUG] [Thread-129382] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T12:59:44.840 [DEBUG] [Thread-129382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T12:59:44.840 [DEBUG] [Thread-129382] [transport.py] [_log()] Compression: none
2026-02-11T12:59:44.840 [DEBUG] [Thread-129382] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T12:59:44.903 [DEBUG] [Thread-129382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T12:59:44.904 [DEBUG] [Thread-129382] [transport.py] [_log()] Switch to new keys ...
2026-02-11T12:59:44.904 [DEBUG] [Thread-129382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T12:59:44.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T12:59:44.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T12:59:44.962 [DEBUG] [Thread-129382] [transport.py] [_log()] userauth is OK
2026-02-11T12:59:44.963 [DEBUG] [Thread-129382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T12:59:44.963 [DEBUG] [Thread-129382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T12:59:44.963 [DEBUG] [Thread-129382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T12:59:44.963 [DEBUG] [Thread-129382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T12:59:44.981 [INFO] [Thread-129382] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T12:59:44.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T12:59:44.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T12:59:45.793 [DEBUG] [Thread-129382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T12:59:45.793 [DEBUG] [Thread-129382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T12:59:45.841 [DEBUG] [Thread-129382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T12:59:45.842 [DEBUG] [Thread-129382] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T12:59:45.851 [DEBUG] [Thread-129382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T12:59:45.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T12:59: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')
2026-02-11T12:59:45.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
2026-02-11T12:59:45.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T12:59:45.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T12:59:45.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T12:59:45.888 [DEBUG] [Thread-129382] [transport.py] [_log()] EOF in transport thread
2026-02-11T12:59:46.478 [DEBUG] [Thread-129384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:01.526 [DEBUG] [Thread-129385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:12.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:12.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:15.598 [DEBUG] [Thread-129386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:15.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:00:15.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:00:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:00:16.558 [DEBUG] [Thread-129387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 12, 59, 49), 15.3, 37.94, 0.0, 19.6, 24.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:00:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 12:59:49
2026-02-11T13:00:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:00:18.438 [DEBUG] [Thread-129388] [transport.py] [_log()] starting thread (client mode): 0xa2d19900
2026-02-11T13:00:18.438 [DEBUG] [Thread-129388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:00:18.459 [DEBUG] [Thread-129388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:00:18.459 [INFO] [Thread-129388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:00:18.462 [DEBUG] [Thread-129388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:00:18.462 [DEBUG] [Thread-129388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] client lang: <none>
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] server lang: <none>
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] kex follows: False
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:00:18.463 [DEBUG] [Thread-129388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:00:18.464 [DEBUG] [Thread-129388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:00:18.464 [DEBUG] [Thread-129388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:00:18.464 [DEBUG] [Thread-129388] [transport.py] [_log()] Compression: none
2026-02-11T13:00:18.464 [DEBUG] [Thread-129388] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:00:18.482 [DEBUG] [Thread-129388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:00:18.483 [DEBUG] [Thread-129388] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:00:18.483 [DEBUG] [Thread-129388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:00:18.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:00:18.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:00:18.485 [DEBUG] [Thread-129388] [transport.py] [_log()] userauth is OK
2026-02-11T13:00:18.485 [DEBUG] [Thread-129388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:00:18.486 [DEBUG] [Thread-129388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:00:18.486 [DEBUG] [Thread-129388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:00:18.486 [DEBUG] [Thread-129388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:00:18.504 [INFO] [Thread-129388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:00:18.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:00:19.429 [DEBUG] [Thread-129388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:00:19.429 [DEBUG] [Thread-129388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:00:19.429 [DEBUG] [Thread-129388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:00:19.470 [DEBUG] [Thread-129388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:00:19.470 [DEBUG] [Thread-129388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:00:19.474 [DEBUG] [Thread-129388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:00:19.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:00:19.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:00:19.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:00:19.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:00:19.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:00:19.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:00:19.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:00:19.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:00:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:00:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.454657 -999.00  +23.10  29.79     46  +10.80 1 2 1 1 1   888    0 13.26 40.08 ----- 28.2 29.8 293.6 37.3 29.1 -13.9 28.2 -14.7 27.6 -12.3 28.3 -13.5
2026-02-11T13:00:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:00:19.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:00:19.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.454657
2026-02-11T13:00:19.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:00:19.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:00:19.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:00:19.500 [DEBUG] [Thread-129388] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:00:19.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:00:19.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:00:19.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T12:59:49', tmtdew=15.3, humidity=37.94, cloud=0.0, wind=19.6, temperature=24.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T10:54:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:00:19.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:00:19.602 [DEBUG] [Thread-129391] [transport.py] [_log()] starting thread (client mode): 0xa2db7670
2026-02-11T13:00:19.602 [DEBUG] [Thread-129391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:00:19.616 [DEBUG] [Thread-129391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:00:19.616 [INFO] [Thread-129391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:00:19.624 [DEBUG] [Thread-129391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] client lang: <none>
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] server lang: <none>
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] kex follows: False
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] Compression: none
2026-02-11T13:00:19.625 [DEBUG] [Thread-129391] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:00:19.686 [DEBUG] [Thread-129391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:00:19.686 [DEBUG] [Thread-129391] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:00:19.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:00:19.687 [DEBUG] [Thread-129391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:00:19.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:00:19.742 [DEBUG] [Thread-129391] [transport.py] [_log()] userauth is OK
2026-02-11T13:00:19.742 [DEBUG] [Thread-129391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:00:19.742 [DEBUG] [Thread-129391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:00:19.742 [DEBUG] [Thread-129391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:00:19.742 [DEBUG] [Thread-129391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:00:19.762 [INFO] [Thread-129391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:00:19.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:00:19.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:00:20.639 [DEBUG] [Thread-129391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:00:20.639 [DEBUG] [Thread-129391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:00:20.687 [DEBUG] [Thread-129391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:00:20.687 [DEBUG] [Thread-129391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:00:20.696 [DEBUG] [Thread-129391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:00:20.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:00:20.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:00:20.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:00:20.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:00:20.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:00:20.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:00:20.730 [DEBUG] [Thread-129391] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:00:31.599 [DEBUG] [Thread-129393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:46.647 [DEBUG] [Thread-129394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:00:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:00:50.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:00:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:00:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 0, 24), 15.36, 37.81, 0.0, 21.23, 24.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:00:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:00:24
2026-02-11T13:00:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:00:53.068 [DEBUG] [Thread-129395] [transport.py] [_log()] starting thread (client mode): 0xa2d12890
2026-02-11T13:00:53.068 [DEBUG] [Thread-129395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:00:53.089 [DEBUG] [Thread-129395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:00:53.089 [INFO] [Thread-129395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:00:53.092 [DEBUG] [Thread-129395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] client lang: <none>
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] server lang: <none>
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] kex follows: False
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] Compression: none
2026-02-11T13:00:53.093 [DEBUG] [Thread-129395] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:00:53.109 [DEBUG] [Thread-129395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:00:53.109 [DEBUG] [Thread-129395] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:00:53.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:00:53.110 [DEBUG] [Thread-129395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:00:53.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:00:53.112 [DEBUG] [Thread-129395] [transport.py] [_log()] userauth is OK
2026-02-11T13:00:53.112 [DEBUG] [Thread-129395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:00:53.112 [DEBUG] [Thread-129395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:00:53.113 [DEBUG] [Thread-129395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:00:53.113 [DEBUG] [Thread-129395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:00:53.147 [INFO] [Thread-129395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:00:53.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:00:53.805 [DEBUG] [Thread-129395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:00:53.805 [DEBUG] [Thread-129395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:00:53.806 [DEBUG] [Thread-129395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:00:53.846 [DEBUG] [Thread-129395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:00:53.847 [DEBUG] [Thread-129395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:00:53.850 [DEBUG] [Thread-129395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:00:53.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:00:53.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:00:53.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:00:53.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:00:53.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:00:53.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:00:53.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:00:53.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:00:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:00:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.458477 -999.00  +23.50  25.59     45  +10.90 1 2 1 1 1   888    0 13.42 42.45 NA 12.9 25.6 328.1 31.1 29.1 -18.5 28.4 -17.5 27.8 -15.3 28.6 -15.7
2026-02-11T13:00:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:00:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:00:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.458477
2026-02-11T13:00:53.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:00:53.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:00:53.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:00:53.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:00:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:00:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:00:24', tmtdew=15.36, humidity=37.81, cloud=0.0, wind=21.23, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:00:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:00:53.877 [DEBUG] [Thread-129395] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:00:53.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:00:53.972 [DEBUG] [Thread-129398] [transport.py] [_log()] starting thread (client mode): 0xa2db4190
2026-02-11T13:00:53.972 [DEBUG] [Thread-129398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:00:53.987 [DEBUG] [Thread-129398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:00:53.987 [INFO] [Thread-129398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:00:53.995 [DEBUG] [Thread-129398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:00:53.995 [DEBUG] [Thread-129398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:00:53.995 [DEBUG] [Thread-129398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] client lang: <none>
2026-02-11T13:00:53.996 [DEBUG] [Thread-129398] [transport.py] [_log()] server lang: <none>
2026-02-11T13:00:53.997 [DEBUG] [Thread-129398] [transport.py] [_log()] kex follows: False
2026-02-11T13:00:53.997 [DEBUG] [Thread-129398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:00:53.997 [DEBUG] [Thread-129398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:00:53.997 [DEBUG] [Thread-129398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:00:53.997 [DEBUG] [Thread-129398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:00:53.997 [DEBUG] [Thread-129398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:00:53.998 [DEBUG] [Thread-129398] [transport.py] [_log()] Compression: none
2026-02-11T13:00:53.998 [DEBUG] [Thread-129398] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:00:54.055 [DEBUG] [Thread-129398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:00:54.056 [DEBUG] [Thread-129398] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:00:54.057 [DEBUG] [Thread-129398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:00:54.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:00:54.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:00:54.110 [DEBUG] [Thread-129398] [transport.py] [_log()] userauth is OK
2026-02-11T13:00:54.110 [DEBUG] [Thread-129398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:00:54.110 [DEBUG] [Thread-129398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:00:54.111 [DEBUG] [Thread-129398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:00:54.111 [DEBUG] [Thread-129398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:00:54.135 [INFO] [Thread-129398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:00:54.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:00:54.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:00:54.985 [DEBUG] [Thread-129398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:00:54.985 [DEBUG] [Thread-129398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:00:55.034 [DEBUG] [Thread-129398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:00:55.034 [DEBUG] [Thread-129398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:00:55.043 [DEBUG] [Thread-129398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:00:55.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:00:55.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:00:55.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:00:55.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:00:55.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:00:55.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:00:55.080 [DEBUG] [Thread-129398] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:01:01.681 [DEBUG] [Thread-129400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:01:12.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:01:12.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:01:15.647 [DEBUG] [Thread-129401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:01:16.733 [DEBUG] [Thread-129402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:01:25.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:01:25.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:01:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:01:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 0, 59), 15.12, 38.39, 0.0, 20.94, 24.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:01:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:00:59
2026-02-11T13:01:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:01:27.377 [DEBUG] [Thread-129403] [transport.py] [_log()] starting thread (client mode): 0xa2db7490
2026-02-11T13:01:27.377 [DEBUG] [Thread-129403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:01:27.397 [DEBUG] [Thread-129403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:01:27.397 [INFO] [Thread-129403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:01:27.398 [DEBUG] [Thread-129403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] client lang: <none>
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] server lang: <none>
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] kex follows: False
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] Compression: none
2026-02-11T13:01:27.399 [DEBUG] [Thread-129403] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:01:27.407 [DEBUG] [Thread-129403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:01:27.407 [DEBUG] [Thread-129403] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:01:27.408 [DEBUG] [Thread-129403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:01:27.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:01:27.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:01:27.409 [DEBUG] [Thread-129403] [transport.py] [_log()] userauth is OK
2026-02-11T13:01:27.409 [DEBUG] [Thread-129403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:01:27.409 [DEBUG] [Thread-129403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:01:27.409 [DEBUG] [Thread-129403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:01:27.410 [DEBUG] [Thread-129403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:01:27.426 [INFO] [Thread-129403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:01:27.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:01:28.065 [DEBUG] [Thread-129403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:01:28.065 [DEBUG] [Thread-129403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:01:28.065 [DEBUG] [Thread-129403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:01:28.106 [DEBUG] [Thread-129403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:01:28.106 [DEBUG] [Thread-129403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:01:28.109 [DEBUG] [Thread-129403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:01:28.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:01:28.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:01:28.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:01:28.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:01:28.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:01:28.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:01:28.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:01:28.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:01:28.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:01:28.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.458824 -999.00  +23.30  21.56     45  +11.00 1 2 1 1 1   888    0 13.53 41.20 NA 21.3 21.6 314.2 28.5 29.3 -17.4 28.6 -16.2 28.0 -14.1 28.9 -14.8
2026-02-11T13:01:28.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:01:28.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:01:28.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.458824
2026-02-11T13:01:28.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:01:28.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:01:28.133 [DEBUG] [Thread-129403] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:01:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:01:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:01:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:01:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:00:59', tmtdew=15.12, humidity=38.39, cloud=0.0, wind=20.94, temperature=24.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:00:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:01:28.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:01:28.231 [DEBUG] [Thread-129406] [transport.py] [_log()] starting thread (client mode): 0xa2db7610
2026-02-11T13:01:28.231 [DEBUG] [Thread-129406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:01:28.246 [DEBUG] [Thread-129406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:01:28.246 [INFO] [Thread-129406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:01:28.253 [DEBUG] [Thread-129406] [transport.py] [_log()] client lang: <none>
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] server lang: <none>
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] kex follows: False
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] Compression: none
2026-02-11T13:01:28.254 [DEBUG] [Thread-129406] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:01:28.314 [DEBUG] [Thread-129406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:01:28.314 [DEBUG] [Thread-129406] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:01:28.315 [DEBUG] [Thread-129406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:01:28.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:01:28.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:01:28.374 [DEBUG] [Thread-129406] [transport.py] [_log()] userauth is OK
2026-02-11T13:01:28.374 [DEBUG] [Thread-129406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:01:28.374 [DEBUG] [Thread-129406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:01:28.374 [DEBUG] [Thread-129406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:01:28.374 [DEBUG] [Thread-129406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:01:28.400 [INFO] [Thread-129406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:01:28.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:01:28.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:01:29.254 [DEBUG] [Thread-129406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:01:29.254 [DEBUG] [Thread-129406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:01:29.304 [DEBUG] [Thread-129406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:01:29.304 [DEBUG] [Thread-129406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:01:29.313 [DEBUG] [Thread-129406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:01:29.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:01:29.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:01:29.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:01:29.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:01:29.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:01:29.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:01:29.348 [DEBUG] [Thread-129406] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:01:31.765 [DEBUG] [Thread-129408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:01:46.810 [DEBUG] [Thread-129409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:01:59.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:01:59.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:01:59.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:02:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 1, 34), 16.12, 35.92, 0.0, 16.8, 24.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:02:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:01:34
2026-02-11T13:02:01.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:02:01.778 [DEBUG] [Thread-129410] [transport.py] [_log()] starting thread (client mode): 0xa2db43a0
2026-02-11T13:02:01.779 [DEBUG] [Thread-129410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:02:01.799 [DEBUG] [Thread-129410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:02:01.800 [INFO] [Thread-129410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] client lang: <none>
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] server lang: <none>
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] kex follows: False
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] Compression: none
2026-02-11T13:02:01.803 [DEBUG] [Thread-129410] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:02:01.822 [DEBUG] [Thread-129410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:02:01.823 [DEBUG] [Thread-129410] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:02:01.823 [DEBUG] [Thread-129410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:02:01.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:02:01.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:02:01.825 [DEBUG] [Thread-129410] [transport.py] [_log()] userauth is OK
2026-02-11T13:02:01.826 [DEBUG] [Thread-129410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:02:01.826 [DEBUG] [Thread-129410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:02:01.826 [DEBUG] [Thread-129410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:02:01.826 [DEBUG] [Thread-129410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:02:01.847 [DEBUG] [Thread-129412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:02:01.849 [INFO] [Thread-129410] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:02:01.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:02:02.453 [DEBUG] [Thread-129410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:02:02.454 [DEBUG] [Thread-129410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:02:02.454 [DEBUG] [Thread-129410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:02:02.495 [DEBUG] [Thread-129410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:02:02.495 [DEBUG] [Thread-129410] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:02:02.498 [DEBUG] [Thread-129410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:02:02.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:02:02.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:02:02.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:02:02.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:02:02.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:02:02.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:02:02.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.459171 -999.00  +23.60  18.46     45  +11.00 1 2 1 1 1   888    0 13.17 40.71 ----- 23.0 18.5 317.8 26.4 29.6 -17.0 28.8 -16.5 28.3 -13.6 29.2 -15.0
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.459171
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:02:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:01:34', tmtdew=16.12, humidity=35.92, cloud=0.0, wind=16.8, temperature=24.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:01:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:02:02.518 [DEBUG] [Thread-129410] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:02:02.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:02:02.602 [DEBUG] [Thread-129414] [transport.py] [_log()] starting thread (client mode): 0xa2db7eb0
2026-02-11T13:02:02.602 [DEBUG] [Thread-129414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:02:02.616 [DEBUG] [Thread-129414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:02:02.616 [INFO] [Thread-129414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:02:02.624 [DEBUG] [Thread-129414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:02:02.624 [DEBUG] [Thread-129414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:02:02.624 [DEBUG] [Thread-129414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:02:02.624 [DEBUG] [Thread-129414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:02.624 [DEBUG] [Thread-129414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:02.624 [DEBUG] [Thread-129414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] client lang: <none>
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] server lang: <none>
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] kex follows: False
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:02:02.625 [DEBUG] [Thread-129414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:02:02.626 [DEBUG] [Thread-129414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:02:02.626 [DEBUG] [Thread-129414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:02:02.626 [DEBUG] [Thread-129414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:02:02.626 [DEBUG] [Thread-129414] [transport.py] [_log()] Compression: none
2026-02-11T13:02:02.626 [DEBUG] [Thread-129414] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:02:02.682 [DEBUG] [Thread-129414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:02:02.682 [DEBUG] [Thread-129414] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:02:02.683 [DEBUG] [Thread-129414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:02:02.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:02:02.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:02:02.739 [DEBUG] [Thread-129414] [transport.py] [_log()] userauth is OK
2026-02-11T13:02:02.739 [DEBUG] [Thread-129414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:02:02.739 [DEBUG] [Thread-129414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:02:02.739 [DEBUG] [Thread-129414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:02:02.739 [DEBUG] [Thread-129414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:02:02.758 [INFO] [Thread-129414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:02:02.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:02:02.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:02:03.636 [DEBUG] [Thread-129414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:02:03.636 [DEBUG] [Thread-129414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:02:03.684 [DEBUG] [Thread-129414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:02:03.684 [DEBUG] [Thread-129414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:02:03.693 [DEBUG] [Thread-129414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:02:03.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:02:03.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:02:03.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:02:03.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:02:03.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:02:03.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:02:03.727 [DEBUG] [Thread-129414] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:02:12.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:02:12.734 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:02:15.705 [DEBUG] [Thread-129416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:02:16.883 [DEBUG] [Thread-129417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:02:31.942 [DEBUG] [Thread-129418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:02:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:02:33.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:02:33.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
2026-02-11T13:02:35.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 2, 10), 15.75, 36.95, 0.0, 17.82, 24.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:02:35.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:02:10
2026-02-11T13:02:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:02:36.498 [DEBUG] [Thread-129419] [transport.py] [_log()] starting thread (client mode): 0xa81d54e0
2026-02-11T13:02:36.498 [DEBUG] [Thread-129419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:02:36.517 [DEBUG] [Thread-129419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:02:36.517 [INFO] [Thread-129419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] client lang: <none>
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] server lang: <none>
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] kex follows: False
2026-02-11T13:02:36.520 [DEBUG] [Thread-129419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:02:36.521 [DEBUG] [Thread-129419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:02:36.521 [DEBUG] [Thread-129419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:02:36.521 [DEBUG] [Thread-129419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:02:36.521 [DEBUG] [Thread-129419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:02:36.521 [DEBUG] [Thread-129419] [transport.py] [_log()] Compression: none
2026-02-11T13:02:36.521 [DEBUG] [Thread-129419] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:02:36.531 [DEBUG] [Thread-129419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:02:36.532 [DEBUG] [Thread-129419] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:02:36.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:02:36.533 [DEBUG] [Thread-129419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:02:36.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:02:36.536 [DEBUG] [Thread-129419] [transport.py] [_log()] userauth is OK
2026-02-11T13:02:36.536 [DEBUG] [Thread-129419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:02:36.536 [DEBUG] [Thread-129419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:02:36.536 [DEBUG] [Thread-129419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:02:36.537 [DEBUG] [Thread-129419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:02:36.562 [INFO] [Thread-129419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:02:36.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:02:37.174 [DEBUG] [Thread-129419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:02:37.174 [DEBUG] [Thread-129419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:02:37.174 [DEBUG] [Thread-129419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:02:37.215 [DEBUG] [Thread-129419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:02:37.216 [DEBUG] [Thread-129419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:02:37.219 [DEBUG] [Thread-129419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:02:37.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:02:37.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:02:37.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:02:37.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:02:37.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:02:37.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:02:37.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:02:37.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:02:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:02:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.459518 -999.00  +23.20  23.13     45  +10.80 1 2 1 1 1   888    0 13.18 39.38 ----- 23.4 23.1 313.8 30.5 29.7 -16.7 28.4 -21.7 28.4 -14.4 29.2 -19.9
2026-02-11T13:02:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:02:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:02:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.459518
2026-02-11T13:02:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:02:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:02:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:02:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:02:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:02:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:02:10', tmtdew=15.75, humidity=36.95, cloud=0.0, wind=17.82, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:01:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:02:37.245 [DEBUG] [Thread-129419] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:02:37.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:02:37.340 [DEBUG] [Thread-129422] [transport.py] [_log()] starting thread (client mode): 0xa81d6680
2026-02-11T13:02:37.340 [DEBUG] [Thread-129422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:02:37.355 [DEBUG] [Thread-129422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:02:37.355 [INFO] [Thread-129422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] client lang: <none>
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] server lang: <none>
2026-02-11T13:02:37.363 [DEBUG] [Thread-129422] [transport.py] [_log()] kex follows: False
2026-02-11T13:02:37.364 [DEBUG] [Thread-129422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:02:37.364 [DEBUG] [Thread-129422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:02:37.364 [DEBUG] [Thread-129422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:02:37.364 [DEBUG] [Thread-129422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:02:37.364 [DEBUG] [Thread-129422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:02:37.364 [DEBUG] [Thread-129422] [transport.py] [_log()] Compression: none
2026-02-11T13:02:37.364 [DEBUG] [Thread-129422] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:02:37.424 [DEBUG] [Thread-129422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:02:37.425 [DEBUG] [Thread-129422] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:02:37.425 [DEBUG] [Thread-129422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:02:37.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:02:37.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:02:37.487 [DEBUG] [Thread-129422] [transport.py] [_log()] userauth is OK
2026-02-11T13:02:37.487 [DEBUG] [Thread-129422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:02:37.487 [DEBUG] [Thread-129422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:02:37.488 [DEBUG] [Thread-129422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:02:37.488 [DEBUG] [Thread-129422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:02:37.507 [INFO] [Thread-129422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:02:37.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:02:37.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:02:38.354 [DEBUG] [Thread-129422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:02:38.354 [DEBUG] [Thread-129422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:02:38.403 [DEBUG] [Thread-129422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:02:38.403 [DEBUG] [Thread-129422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:02:38.412 [DEBUG] [Thread-129422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:02:38.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:02:38.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:02:38.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:02:38.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:02:38.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:02:38.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:02:38.449 [DEBUG] [Thread-129422] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:02:46.977 [DEBUG] [Thread-129424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:02.030 [DEBUG] [Thread-129425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:08.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:03:08.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:03:08.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:03:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 2, 45), 15.54, 37.18, 0.0, 24.49, 24.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:03:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:02:45
2026-02-11T13:03:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:03:10.857 [DEBUG] [Thread-129426] [transport.py] [_log()] starting thread (client mode): 0xa2d13fa0
2026-02-11T13:03:10.857 [DEBUG] [Thread-129426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:03:10.876 [DEBUG] [Thread-129426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:03:10.877 [INFO] [Thread-129426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:03:10.878 [DEBUG] [Thread-129426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] client lang: <none>
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] server lang: <none>
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] kex follows: False
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] Compression: none
2026-02-11T13:03:10.879 [DEBUG] [Thread-129426] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:03:10.892 [DEBUG] [Thread-129426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:03:10.892 [DEBUG] [Thread-129426] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:03:10.893 [DEBUG] [Thread-129426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:03:10.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:03:10.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:03:10.894 [DEBUG] [Thread-129426] [transport.py] [_log()] userauth is OK
2026-02-11T13:03:10.895 [DEBUG] [Thread-129426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:03:10.895 [DEBUG] [Thread-129426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:03:10.895 [DEBUG] [Thread-129426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:03:10.895 [DEBUG] [Thread-129426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:03:10.919 [INFO] [Thread-129426] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:03:10.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:03:11.660 [DEBUG] [Thread-129426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:03:11.661 [DEBUG] [Thread-129426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:03:11.661 [DEBUG] [Thread-129426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:03:11.701 [DEBUG] [Thread-129426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:03:11.702 [DEBUG] [Thread-129426] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:03:11.705 [DEBUG] [Thread-129426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:03:11.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:03:11.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:03:11.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:03:11.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:03:11.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:03:11.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:03:11.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:03:11.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:03:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:03:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.459866 -999.00  +23.50  19.93     45  +11.10 1 2 1 1 1   888    0 13.26 38.34 ----- 20.5 19.9 274.6 25.9 29.1 -21.7 28.2 -19.9 27.8 -18.6 28.6 -19.7
2026-02-11T13:03:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:03:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:03:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.459866
2026-02-11T13:03:11.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:03:11.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:03:11.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:03:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:03:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:03:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:02:45', tmtdew=15.54, humidity=37.18, cloud=0.0, wind=24.49, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:02:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:03:11.733 [DEBUG] [Thread-129426] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:03:11.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:03:11.831 [DEBUG] [Thread-129429] [transport.py] [_log()] starting thread (client mode): 0xa81d7670
2026-02-11T13:03:11.831 [DEBUG] [Thread-129429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:03:11.846 [DEBUG] [Thread-129429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:03:11.846 [INFO] [Thread-129429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:03:11.854 [DEBUG] [Thread-129429] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:03:11.854 [DEBUG] [Thread-129429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:03:11.854 [DEBUG] [Thread-129429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:03:11.854 [DEBUG] [Thread-129429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] client lang: <none>
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] server lang: <none>
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] kex follows: False
2026-02-11T13:03:11.855 [DEBUG] [Thread-129429] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:03:11.856 [DEBUG] [Thread-129429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:03:11.856 [DEBUG] [Thread-129429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:03:11.856 [DEBUG] [Thread-129429] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:03:11.856 [DEBUG] [Thread-129429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:03:11.856 [DEBUG] [Thread-129429] [transport.py] [_log()] Compression: none
2026-02-11T13:03:11.856 [DEBUG] [Thread-129429] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:03:11.915 [DEBUG] [Thread-129429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:03:11.916 [DEBUG] [Thread-129429] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:03:11.916 [DEBUG] [Thread-129429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:03:11.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:03:11.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:03:11.975 [DEBUG] [Thread-129429] [transport.py] [_log()] userauth is OK
2026-02-11T13:03:11.975 [DEBUG] [Thread-129429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:03:11.975 [DEBUG] [Thread-129429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:03:11.975 [DEBUG] [Thread-129429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:03:11.975 [DEBUG] [Thread-129429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:03:11.994 [INFO] [Thread-129429] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:03:11.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:03:11.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:03:12.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:12.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:12.901 [DEBUG] [Thread-129429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:03:12.901 [DEBUG] [Thread-129429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:03:12.951 [DEBUG] [Thread-129429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:03:12.951 [DEBUG] [Thread-129429] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:03:12.962 [DEBUG] [Thread-129429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:03:12.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:03:12.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:03:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:03:12.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:03:12.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:03:12.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:03:13.002 [DEBUG] [Thread-129429] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:03:15.769 [DEBUG] [Thread-129431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:17.066 [DEBUG] [Thread-129432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:32.115 [DEBUG] [Thread-129433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:03:43.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:03:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:03:44.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 3, 20), 15.42, 37.41, 0.0, 25.87, 23.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:03:44.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:03:20
2026-02-11T13:03:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:03:45.374 [DEBUG] [Thread-129434] [transport.py] [_log()] starting thread (client mode): 0xa81d50f0
2026-02-11T13:03:45.374 [DEBUG] [Thread-129434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:03:45.389 [DEBUG] [Thread-129434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:03:45.389 [INFO] [Thread-129434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] client lang: <none>
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] server lang: <none>
2026-02-11T13:03:45.392 [DEBUG] [Thread-129434] [transport.py] [_log()] kex follows: False
2026-02-11T13:03:45.393 [DEBUG] [Thread-129434] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:03:45.393 [DEBUG] [Thread-129434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:03:45.393 [DEBUG] [Thread-129434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:03:45.393 [DEBUG] [Thread-129434] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:03:45.393 [DEBUG] [Thread-129434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:03:45.393 [DEBUG] [Thread-129434] [transport.py] [_log()] Compression: none
2026-02-11T13:03:45.393 [DEBUG] [Thread-129434] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:03:45.402 [DEBUG] [Thread-129434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:03:45.403 [DEBUG] [Thread-129434] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:03:45.404 [DEBUG] [Thread-129434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:03:45.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:03:45.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:03:45.406 [DEBUG] [Thread-129434] [transport.py] [_log()] userauth is OK
2026-02-11T13:03:45.406 [DEBUG] [Thread-129434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:03:45.407 [DEBUG] [Thread-129434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:03:45.407 [DEBUG] [Thread-129434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:03:45.407 [DEBUG] [Thread-129434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:03:45.429 [INFO] [Thread-129434] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:03:45.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:03:46.009 [DEBUG] [Thread-129434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:03:46.011 [DEBUG] [Thread-129434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:03:46.012 [DEBUG] [Thread-129434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:03:46.051 [DEBUG] [Thread-129434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:03:46.051 [DEBUG] [Thread-129434] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:03:46.054 [DEBUG] [Thread-129434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:03:46.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:03:46.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:03:46.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:03:46.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:03:46.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:03:46.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:03:46.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:03:46.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:03:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:03:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.460907 -999.00  +22.80  18.17     46  +10.60 1 2 1 1 1   888    0 13.01 30.04 ----- 21.0 18.2 277.8 27.9 27.8 -20.9 27.4 -19.3 26.6 -18.4 27.5 -20.0
2026-02-11T13:03:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:03:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:03:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.460907
2026-02-11T13:03:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:03:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:03:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:03:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:03:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:03:46.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:03:20', tmtdew=15.42, humidity=37.41, cloud=0.0, wind=25.87, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:03:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:03:46.084 [DEBUG] [Thread-129434] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:03:46.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:03:46.179 [DEBUG] [Thread-129437] [transport.py] [_log()] starting thread (client mode): 0xa2d10ee0
2026-02-11T13:03:46.179 [DEBUG] [Thread-129437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:03:46.194 [DEBUG] [Thread-129437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:03:46.194 [INFO] [Thread-129437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:03:46.201 [DEBUG] [Thread-129437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] client lang: <none>
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] server lang: <none>
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] kex follows: False
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] Compression: none
2026-02-11T13:03:46.202 [DEBUG] [Thread-129437] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:03:46.258 [DEBUG] [Thread-129437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:03:46.258 [DEBUG] [Thread-129437] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:03:46.259 [DEBUG] [Thread-129437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:03:46.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:03:46.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:03:46.314 [DEBUG] [Thread-129437] [transport.py] [_log()] userauth is OK
2026-02-11T13:03:46.315 [DEBUG] [Thread-129437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:03:46.315 [DEBUG] [Thread-129437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:03:46.315 [DEBUG] [Thread-129437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:03:46.315 [DEBUG] [Thread-129437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:03:46.334 [INFO] [Thread-129437] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:03:46.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:03:46.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:03:47.149 [DEBUG] [Thread-129439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:03:47.159 [DEBUG] [Thread-129437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:03:47.160 [DEBUG] [Thread-129437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:03:47.207 [DEBUG] [Thread-129437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:03:47.208 [DEBUG] [Thread-129437] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:03:47.217 [DEBUG] [Thread-129437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:03:47.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:03:47.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:03:47.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:03:47.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:03:47.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:03:47.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:03:47.254 [DEBUG] [Thread-129437] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:04:02.201 [DEBUG] [Thread-129440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:04:13.027 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:04:13.027 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:04:15.830 [DEBUG] [Thread-129441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:04:17.241 [DEBUG] [Thread-129442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:04:17.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:04:17.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:04:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:04:19.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 3, 56), 14.58, 39.46, 0.0, 25.41, 23.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:04:19.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:03:56
2026-02-11T13:04:19.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:04:19.707 [DEBUG] [Thread-129443] [transport.py] [_log()] starting thread (client mode): 0xa2db7a00
2026-02-11T13:04:19.707 [DEBUG] [Thread-129443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:04:19.731 [DEBUG] [Thread-129443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:04:19.731 [INFO] [Thread-129443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:19.733 [DEBUG] [Thread-129443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] client lang: <none>
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] server lang: <none>
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] kex follows: False
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] Compression: none
2026-02-11T13:04:19.734 [DEBUG] [Thread-129443] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:04:19.742 [DEBUG] [Thread-129443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:04:19.743 [DEBUG] [Thread-129443] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:04:19.743 [DEBUG] [Thread-129443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:04:19.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:04:19.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:04:19.745 [DEBUG] [Thread-129443] [transport.py] [_log()] userauth is OK
2026-02-11T13:04:19.746 [DEBUG] [Thread-129443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:04:19.746 [DEBUG] [Thread-129443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:04:19.746 [DEBUG] [Thread-129443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:04:19.746 [DEBUG] [Thread-129443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:04:19.764 [INFO] [Thread-129443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:04:19.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:04:20.339 [DEBUG] [Thread-129443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:04:20.339 [DEBUG] [Thread-129443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:04:20.339 [DEBUG] [Thread-129443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:04:20.380 [DEBUG] [Thread-129443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:04:20.380 [DEBUG] [Thread-129443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:04:20.383 [DEBUG] [Thread-129443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:04:20.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:04:20.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:04:20.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:04:20.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:04:20.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:04:20.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:04:20.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:04:20.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:04:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:04:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.461254 -999.00  +22.80  33.68     45  +10.50 1 2 2 1 1   888    0 12.66 23.00 ----- 29.7 33.7 286.6 36.8 27.3 -20.7 27.2 -19.3 26.6 -18.9 27.3 -18.9
2026-02-11T13:04:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:04:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:04:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.461254
2026-02-11T13:04:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:04:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:04:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:04:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:04:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:04:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:03:56', tmtdew=14.58, humidity=39.46, cloud=0.0, wind=25.41, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:04:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:04:20.406 [DEBUG] [Thread-129443] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:04:20.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:04:20.488 [DEBUG] [Thread-129446] [transport.py] [_log()] starting thread (client mode): 0xa81d72b0
2026-02-11T13:04:20.488 [DEBUG] [Thread-129446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:04:20.503 [DEBUG] [Thread-129446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:04:20.504 [INFO] [Thread-129446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] client lang: <none>
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] server lang: <none>
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] kex follows: False
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] Compression: none
2026-02-11T13:04:20.511 [DEBUG] [Thread-129446] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:04:20.568 [DEBUG] [Thread-129446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:04:20.568 [DEBUG] [Thread-129446] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:04:20.568 [DEBUG] [Thread-129446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:04:20.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:04:20.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:04:20.630 [DEBUG] [Thread-129446] [transport.py] [_log()] userauth is OK
2026-02-11T13:04:20.630 [DEBUG] [Thread-129446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:04:20.630 [DEBUG] [Thread-129446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:04:20.630 [DEBUG] [Thread-129446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:04:20.630 [DEBUG] [Thread-129446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:04:20.644 [INFO] [Thread-129446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:04:20.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:04:20.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:04:21.489 [DEBUG] [Thread-129446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:04:21.489 [DEBUG] [Thread-129446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:04:21.536 [DEBUG] [Thread-129446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:04:21.537 [DEBUG] [Thread-129446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:04:21.546 [DEBUG] [Thread-129446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:04:21.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:04:21.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:04:21.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:04:21.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:04:21.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:04:21.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:04:21.583 [DEBUG] [Thread-129446] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:04:32.278 [DEBUG] [Thread-129448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:04:47.333 [DEBUG] [Thread-129449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:04:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:04:51.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:04:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:04:53.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 4, 31), 14.7, 39.16, 0.0, 28.0, 23.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:04:53.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:04:31
2026-02-11T13:04:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:04:54.060 [DEBUG] [Thread-129450] [transport.py] [_log()] starting thread (client mode): 0xa81d7a30
2026-02-11T13:04:54.060 [DEBUG] [Thread-129450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:04:54.079 [DEBUG] [Thread-129450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:04:54.079 [INFO] [Thread-129450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] client lang: <none>
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] server lang: <none>
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] kex follows: False
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:04:54.083 [DEBUG] [Thread-129450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:04:54.084 [DEBUG] [Thread-129450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:04:54.084 [DEBUG] [Thread-129450] [transport.py] [_log()] Compression: none
2026-02-11T13:04:54.084 [DEBUG] [Thread-129450] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:04:54.102 [DEBUG] [Thread-129450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:04:54.103 [DEBUG] [Thread-129450] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:04:54.103 [DEBUG] [Thread-129450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:04:54.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:04:54.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:04:54.106 [DEBUG] [Thread-129450] [transport.py] [_log()] userauth is OK
2026-02-11T13:04:54.106 [DEBUG] [Thread-129450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:04:54.106 [DEBUG] [Thread-129450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:04:54.106 [DEBUG] [Thread-129450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:04:54.106 [DEBUG] [Thread-129450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:04:54.125 [INFO] [Thread-129450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:04:54.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:04:54.747 [DEBUG] [Thread-129450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:04:54.747 [DEBUG] [Thread-129450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:04:54.747 [DEBUG] [Thread-129450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:04:54.787 [DEBUG] [Thread-129450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:04:54.787 [DEBUG] [Thread-129450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:04:54.789 [DEBUG] [Thread-129450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:04:54.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:04:54.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:04:54.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:04:54.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:04:54.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:04:54.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:04:54.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:04:54.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:04:54.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:04:54.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.461602 -999.00  +22.50  24.40     46  +10.40 1 2 1 1 1   888    0 12.95 17.77 ----- 22.2 24.4 276.6 32.4 27.3 -22.4 26.9 -19.1 26.2 -24.5 26.9 -20.1
2026-02-11T13:04:54.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:04:54.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:04:54.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.461602
2026-02-11T13:04:54.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:04:54.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:04:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:04:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:04:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:04:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:04:31', tmtdew=14.7, humidity=39.16, cloud=0.0, wind=28.0, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:04:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:04:54.815 [DEBUG] [Thread-129450] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:04:54.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:04:54.910 [DEBUG] [Thread-129453] [transport.py] [_log()] starting thread (client mode): 0xa81d6980
2026-02-11T13:04:54.910 [DEBUG] [Thread-129453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:04:54.925 [DEBUG] [Thread-129453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:04:54.925 [INFO] [Thread-129453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:04:54.933 [DEBUG] [Thread-129453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:04:54.933 [DEBUG] [Thread-129453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:04:54.933 [DEBUG] [Thread-129453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:04:54.933 [DEBUG] [Thread-129453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:54.933 [DEBUG] [Thread-129453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:04:54.933 [DEBUG] [Thread-129453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] client lang: <none>
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] server lang: <none>
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] kex follows: False
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:04:54.934 [DEBUG] [Thread-129453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:04:54.935 [DEBUG] [Thread-129453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:04:54.935 [DEBUG] [Thread-129453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:04:54.935 [DEBUG] [Thread-129453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:04:54.935 [DEBUG] [Thread-129453] [transport.py] [_log()] Compression: none
2026-02-11T13:04:54.935 [DEBUG] [Thread-129453] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:04:54.991 [DEBUG] [Thread-129453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:04:54.991 [DEBUG] [Thread-129453] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:04:54.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:04:54.993 [DEBUG] [Thread-129453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:04:54.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:04:55.047 [DEBUG] [Thread-129453] [transport.py] [_log()] userauth is OK
2026-02-11T13:04:55.047 [DEBUG] [Thread-129453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:04:55.047 [DEBUG] [Thread-129453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:04:55.047 [DEBUG] [Thread-129453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:04:55.047 [DEBUG] [Thread-129453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:04:55.068 [INFO] [Thread-129453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:04:55.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:04:55.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:04:55.921 [DEBUG] [Thread-129453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:04:55.922 [DEBUG] [Thread-129453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:04:55.971 [DEBUG] [Thread-129453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:04:55.971 [DEBUG] [Thread-129453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:04:55.980 [DEBUG] [Thread-129453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:04:55.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:04:55.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:04:55.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
2026-02-11T13:04:56.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:04:56.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:04:56.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:04:56.016 [DEBUG] [Thread-129453] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:05:02.367 [DEBUG] [Thread-129455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:05:13.168 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:05:13.169 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:05:15.884 [DEBUG] [Thread-129456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:05:17.408 [DEBUG] [Thread-129457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:05:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:05:26.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:05:26.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:05:27.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 5, 6), 14.7, 39.21, 0.0, 26.63, 23.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:05:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:05:06
2026-02-11T13:05:28.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:05:28.530 [DEBUG] [Thread-129458] [transport.py] [_log()] starting thread (client mode): 0xa2d126b0
2026-02-11T13:05:28.530 [DEBUG] [Thread-129458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:05:28.550 [DEBUG] [Thread-129458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:05:28.550 [INFO] [Thread-129458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] client lang: <none>
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] server lang: <none>
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] kex follows: False
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] Compression: none
2026-02-11T13:05:28.554 [DEBUG] [Thread-129458] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:05:28.571 [DEBUG] [Thread-129458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:05:28.572 [DEBUG] [Thread-129458] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:05:28.572 [DEBUG] [Thread-129458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:05:28.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:05:28.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:05:28.574 [DEBUG] [Thread-129458] [transport.py] [_log()] userauth is OK
2026-02-11T13:05:28.574 [DEBUG] [Thread-129458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:05:28.575 [DEBUG] [Thread-129458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:05:28.575 [DEBUG] [Thread-129458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:05:28.575 [DEBUG] [Thread-129458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:05:28.593 [INFO] [Thread-129458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:05:28.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:05:29.237 [DEBUG] [Thread-129458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:05:29.237 [DEBUG] [Thread-129458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:05:29.238 [DEBUG] [Thread-129458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:05:29.278 [DEBUG] [Thread-129458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:05:29.279 [DEBUG] [Thread-129458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:05:29.282 [DEBUG] [Thread-129458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:05:29.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:05:29.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:05:29.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:05:29.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:05:29.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:05:29.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:05:29.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:05:29.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:05:29.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:05:29.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.461949 -999.00  +22.60  17.41     46  +10.50 1 2 1 1 1   888    0 12.57 12.84 ----- 18.9 17.4 282.2 26.1 27.1 -20.5 26.8 -18.9 26.1 -20.0 26.8 -19.1
2026-02-11T13:05:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:05:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:05:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.461949
2026-02-11T13:05:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:05:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:05:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:05:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:05:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:05:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:05:06', tmtdew=14.7, humidity=39.21, cloud=0.0, wind=26.63, temperature=23.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:05:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:05:29.310 [DEBUG] [Thread-129458] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:05:29.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:05:29.406 [DEBUG] [Thread-129461] [transport.py] [_log()] starting thread (client mode): 0xa2d12d70
2026-02-11T13:05:29.406 [DEBUG] [Thread-129461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:05:29.428 [DEBUG] [Thread-129461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:05:29.428 [INFO] [Thread-129461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:05:29.436 [DEBUG] [Thread-129461] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] client lang: <none>
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] server lang: <none>
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] kex follows: False
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] Compression: none
2026-02-11T13:05:29.437 [DEBUG] [Thread-129461] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:05:29.499 [DEBUG] [Thread-129461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:05:29.500 [DEBUG] [Thread-129461] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:05:29.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:05:29.501 [DEBUG] [Thread-129461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:05:29.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:05:29.558 [DEBUG] [Thread-129461] [transport.py] [_log()] userauth is OK
2026-02-11T13:05:29.559 [DEBUG] [Thread-129461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:05:29.559 [DEBUG] [Thread-129461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:05:29.559 [DEBUG] [Thread-129461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:05:29.559 [DEBUG] [Thread-129461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:05:29.578 [INFO] [Thread-129461] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:05:29.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:05:29.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:05:30.471 [DEBUG] [Thread-129461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:05:30.471 [DEBUG] [Thread-129461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:05:30.519 [DEBUG] [Thread-129461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:05:30.520 [DEBUG] [Thread-129461] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:05:30.529 [DEBUG] [Thread-129461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:05:30.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:05:30.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')
2026-02-11T13:05:30.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:05:30.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:05:30.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:05:30.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:05:30.566 [DEBUG] [Thread-129461] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:05:32.445 [DEBUG] [Thread-129463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:05:47.502 [DEBUG] [Thread-129464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:06:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:06:00.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:06:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:06:02.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 5, 41), 16.26, 35.59, 0.0, 24.7, 25.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:06:02.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:05:41
2026-02-11T13:06:02.534 [DEBUG] [Thread-129465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:06:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:06:02.911 [DEBUG] [Thread-129466] [transport.py] [_log()] starting thread (client mode): 0xa2d13280
2026-02-11T13:06:02.911 [DEBUG] [Thread-129466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:06:02.930 [DEBUG] [Thread-129466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:06:02.930 [INFO] [Thread-129466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:06:02.933 [DEBUG] [Thread-129466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:06:02.933 [DEBUG] [Thread-129466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:06:02.933 [DEBUG] [Thread-129466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:06:02.933 [DEBUG] [Thread-129466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] client lang: <none>
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] server lang: <none>
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] kex follows: False
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] Compression: none
2026-02-11T13:06:02.934 [DEBUG] [Thread-129466] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:06:02.950 [DEBUG] [Thread-129466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:06:02.951 [DEBUG] [Thread-129466] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:06:02.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:06:02.951 [DEBUG] [Thread-129466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:06:02.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:06:02.952 [DEBUG] [Thread-129466] [transport.py] [_log()] userauth is OK
2026-02-11T13:06:02.952 [DEBUG] [Thread-129466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:06:02.952 [DEBUG] [Thread-129466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:06:02.952 [DEBUG] [Thread-129466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:06:02.952 [DEBUG] [Thread-129466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:06:02.966 [INFO] [Thread-129466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:06:02.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:06:03.578 [DEBUG] [Thread-129466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:06:03.578 [DEBUG] [Thread-129466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:06:03.578 [DEBUG] [Thread-129466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:06:03.620 [DEBUG] [Thread-129466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:06:03.620 [DEBUG] [Thread-129466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:06:03.623 [DEBUG] [Thread-129466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:06:03.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:06:03.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:06:03.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:06:03.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:06:03.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:06:03.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:06:03.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:06:03.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:06:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:06:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.462296 -999.00  +22.50  18.68     46  +10.40 1 2 1 1 1   888    0 12.38 8.12 ----- 21.3 18.7 296.2 24.2 27.1 -21.0 26.8 -19.2 26.1 -19.7 26.6 -19.6
2026-02-11T13:06:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:06:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:06:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.462296
2026-02-11T13:06:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:06:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:06:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:06:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:06:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:06:03.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:05:41', tmtdew=16.26, humidity=35.59, cloud=0.0, wind=24.7, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:05:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:06:03.652 [DEBUG] [Thread-129466] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:06:03.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:06:03.752 [DEBUG] [Thread-129469] [transport.py] [_log()] starting thread (client mode): 0xa2d12590
2026-02-11T13:06:03.752 [DEBUG] [Thread-129469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:06:03.767 [DEBUG] [Thread-129469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:06:03.767 [INFO] [Thread-129469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:06:03.775 [DEBUG] [Thread-129469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:06:03.775 [DEBUG] [Thread-129469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:06:03.775 [DEBUG] [Thread-129469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:06:03.775 [DEBUG] [Thread-129469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:03.775 [DEBUG] [Thread-129469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] client lang: <none>
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] server lang: <none>
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] kex follows: False
2026-02-11T13:06:03.776 [DEBUG] [Thread-129469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:06:03.777 [DEBUG] [Thread-129469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:06:03.777 [DEBUG] [Thread-129469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:06:03.777 [DEBUG] [Thread-129469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:06:03.777 [DEBUG] [Thread-129469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:06:03.777 [DEBUG] [Thread-129469] [transport.py] [_log()] Compression: none
2026-02-11T13:06:03.777 [DEBUG] [Thread-129469] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:06:03.839 [DEBUG] [Thread-129469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:06:03.840 [DEBUG] [Thread-129469] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:06:03.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:06:03.841 [DEBUG] [Thread-129469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:06:03.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:06:03.898 [DEBUG] [Thread-129469] [transport.py] [_log()] userauth is OK
2026-02-11T13:06:03.898 [DEBUG] [Thread-129469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:06:03.898 [DEBUG] [Thread-129469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:06:03.898 [DEBUG] [Thread-129469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:06:03.898 [DEBUG] [Thread-129469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:06:03.917 [INFO] [Thread-129469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:06:03.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:06:03.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:06:04.774 [DEBUG] [Thread-129469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:06:04.775 [DEBUG] [Thread-129469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:06:04.823 [DEBUG] [Thread-129469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:06:04.823 [DEBUG] [Thread-129469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:06:04.832 [DEBUG] [Thread-129469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:06:04.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:06:04.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:06: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') -> 00000000
2026-02-11T13:06:04.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:06:04.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:06:04.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:06:04.870 [DEBUG] [Thread-129469] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:06:13.310 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:06:13.311 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:06:15.935 [DEBUG] [Thread-129471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:06:17.574 [DEBUG] [Thread-129472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:06:32.627 [DEBUG] [Thread-129473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:06:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:06:34.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:06:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:06:36.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 6, 17), 14.61, 39.14, 0.0, 20.68, 23.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:06:36.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:06:17
2026-02-11T13:06:37.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:06:37.369 [DEBUG] [Thread-129474] [transport.py] [_log()] starting thread (client mode): 0xa81d6aa0
2026-02-11T13:06:37.369 [DEBUG] [Thread-129474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:06:37.390 [DEBUG] [Thread-129474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:06:37.390 [INFO] [Thread-129474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] client lang: <none>
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] server lang: <none>
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] kex follows: False
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] Compression: none
2026-02-11T13:06:37.394 [DEBUG] [Thread-129474] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:06:37.413 [DEBUG] [Thread-129474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:06:37.413 [DEBUG] [Thread-129474] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:06:37.414 [DEBUG] [Thread-129474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:06:37.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:06:37.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:06:37.417 [DEBUG] [Thread-129474] [transport.py] [_log()] userauth is OK
2026-02-11T13:06:37.417 [DEBUG] [Thread-129474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:06:37.417 [DEBUG] [Thread-129474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:06:37.417 [DEBUG] [Thread-129474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:06:37.417 [DEBUG] [Thread-129474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:06:37.431 [INFO] [Thread-129474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:06:37.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:06:38.078 [DEBUG] [Thread-129474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:06:38.078 [DEBUG] [Thread-129474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:06:38.079 [DEBUG] [Thread-129474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:06:38.119 [DEBUG] [Thread-129474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:06:38.119 [DEBUG] [Thread-129474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:06:38.122 [DEBUG] [Thread-129474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:06:38.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:06:38.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:06:38.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:06:38.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:06:38.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:06:38.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:06:38.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:06:38.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:06:38.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:06:38.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.462643 -999.00  +22.50  30.37     46  +10.50 1 2 2 1 1   888    0 12.28 3.47 ----- 30.1 30.4 293.8 31.8 26.9 -20.5 26.6 -18.8 26.0 -19.1 26.5 -19.6
2026-02-11T13:06:38.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:06:38.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:06:38.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.462643
2026-02-11T13:06:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:06:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:06:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:06:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:06:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:06:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:06:17', tmtdew=14.61, humidity=39.14, cloud=0.0, wind=20.68, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:06:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:06:38.153 [DEBUG] [Thread-129474] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:06:38.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:06:38.245 [DEBUG] [Thread-129477] [transport.py] [_log()] starting thread (client mode): 0xa81d5690
2026-02-11T13:06:38.245 [DEBUG] [Thread-129477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:06:38.262 [DEBUG] [Thread-129477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:06:38.262 [INFO] [Thread-129477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] client lang: <none>
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] server lang: <none>
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] kex follows: False
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:06:38.270 [DEBUG] [Thread-129477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:06:38.271 [DEBUG] [Thread-129477] [transport.py] [_log()] Compression: none
2026-02-11T13:06:38.271 [DEBUG] [Thread-129477] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:06:38.330 [DEBUG] [Thread-129477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:06:38.331 [DEBUG] [Thread-129477] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:06:38.332 [DEBUG] [Thread-129477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:06:38.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:06:38.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:06:38.386 [DEBUG] [Thread-129477] [transport.py] [_log()] userauth is OK
2026-02-11T13:06:38.387 [DEBUG] [Thread-129477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:06:38.387 [DEBUG] [Thread-129477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:06:38.387 [DEBUG] [Thread-129477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:06:38.387 [DEBUG] [Thread-129477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:06:38.407 [INFO] [Thread-129477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:06:38.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:06:38.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:06:39.282 [DEBUG] [Thread-129477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:06:39.282 [DEBUG] [Thread-129477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:06:39.330 [DEBUG] [Thread-129477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:06:39.331 [DEBUG] [Thread-129477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:06:39.342 [DEBUG] [Thread-129477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:06:39.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:06:39.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:06:39.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:06:39.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:06:39.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:06:39.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:06:39.380 [DEBUG] [Thread-129477] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:06:47.668 [DEBUG] [Thread-129479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:02.730 [DEBUG] [Thread-129480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:09.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:07:09.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:07:09.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:07:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 6, 52), 14.78, 39.03, 0.0, 23.13, 23.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:07:11.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:06:52
2026-02-11T13:07:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:07:11.701 [DEBUG] [Thread-129481] [transport.py] [_log()] starting thread (client mode): 0xa2d01000
2026-02-11T13:07:11.701 [DEBUG] [Thread-129481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:07:11.715 [DEBUG] [Thread-129481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:07:11.715 [INFO] [Thread-129481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] client lang: <none>
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] server lang: <none>
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] kex follows: False
2026-02-11T13:07:11.718 [DEBUG] [Thread-129481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:07:11.719 [DEBUG] [Thread-129481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:07:11.719 [DEBUG] [Thread-129481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:07:11.719 [DEBUG] [Thread-129481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:07:11.719 [DEBUG] [Thread-129481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:07:11.719 [DEBUG] [Thread-129481] [transport.py] [_log()] Compression: none
2026-02-11T13:07:11.719 [DEBUG] [Thread-129481] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:07:11.726 [DEBUG] [Thread-129481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:07:11.727 [DEBUG] [Thread-129481] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:07:11.727 [DEBUG] [Thread-129481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:07:11.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:07:11.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:07:11.728 [DEBUG] [Thread-129481] [transport.py] [_log()] userauth is OK
2026-02-11T13:07:11.728 [DEBUG] [Thread-129481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:07:11.728 [DEBUG] [Thread-129481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:07:11.728 [DEBUG] [Thread-129481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:07:11.728 [DEBUG] [Thread-129481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:07:11.743 [INFO] [Thread-129481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:07:11.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:07:12.321 [DEBUG] [Thread-129481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:07:12.321 [DEBUG] [Thread-129481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:07:12.322 [DEBUG] [Thread-129481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:07:12.362 [DEBUG] [Thread-129481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:07:12.363 [DEBUG] [Thread-129481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:07:12.366 [DEBUG] [Thread-129481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:07:12.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:07:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:07:12.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:07:12.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:07:12.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:07:12.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:07:12.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:07:12.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:07:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:07:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.462991 -999.00  +22.50  30.18     47  +10.70 1 2 2 1 1   888    0 12.24 -2.03 ----- 26.0 30.2 292.2 32.9 26.7 -20.8 26.6 -18.7 26.0 -18.3 26.4 -19.9
2026-02-11T13:07:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:07:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:07:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.462991
2026-02-11T13:07:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:07:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:07:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:07:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:07:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:07:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:06:52', tmtdew=14.78, humidity=39.03, cloud=0.0, wind=23.13, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:06:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:07:12.393 [DEBUG] [Thread-129481] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:07:12.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:07:12.504 [DEBUG] [Thread-129484] [transport.py] [_log()] starting thread (client mode): 0xa2d03bb0
2026-02-11T13:07:12.504 [DEBUG] [Thread-129484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:07:12.519 [DEBUG] [Thread-129484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:07:12.519 [INFO] [Thread-129484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] client lang: <none>
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] server lang: <none>
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] kex follows: False
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:07:12.527 [DEBUG] [Thread-129484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:07:12.528 [DEBUG] [Thread-129484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:07:12.528 [DEBUG] [Thread-129484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:07:12.528 [DEBUG] [Thread-129484] [transport.py] [_log()] Compression: none
2026-02-11T13:07:12.528 [DEBUG] [Thread-129484] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:07:12.586 [DEBUG] [Thread-129484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:07:12.587 [DEBUG] [Thread-129484] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:07:12.588 [DEBUG] [Thread-129484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:07:12.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:07:12.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:07:12.647 [DEBUG] [Thread-129484] [transport.py] [_log()] userauth is OK
2026-02-11T13:07:12.647 [DEBUG] [Thread-129484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:07:12.647 [DEBUG] [Thread-129484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:07:12.647 [DEBUG] [Thread-129484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:07:12.648 [DEBUG] [Thread-129484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:07:12.666 [INFO] [Thread-129484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:07:12.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:07:12.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:07:13.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:13.454 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:13.522 [DEBUG] [Thread-129484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:07:13.522 [DEBUG] [Thread-129484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:07:13.570 [DEBUG] [Thread-129484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:07:13.571 [DEBUG] [Thread-129484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:07:13.580 [DEBUG] [Thread-129484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:07:13.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:07:13.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:07: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
2026-02-11T13:07:13.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:07:13.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:07:13.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:07:13.617 [DEBUG] [Thread-129484] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:07:15.984 [DEBUG] [Thread-129486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:17.767 [DEBUG] [Thread-129487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:32.822 [DEBUG] [Thread-129488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:07:43.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:07:43.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
2026-02-11T13:07:46.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 7, 28), 15.25, 38.02, 0.0, 26.03, 23.94, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:07:46.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:07:28
2026-02-11T13:07:46.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:07:46.676 [DEBUG] [Thread-129489] [transport.py] [_log()] starting thread (client mode): 0xa2d022c0
2026-02-11T13:07:46.676 [DEBUG] [Thread-129489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:07:46.696 [DEBUG] [Thread-129489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:07:46.696 [INFO] [Thread-129489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:07:46.697 [DEBUG] [Thread-129489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:07:46.697 [DEBUG] [Thread-129489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:07:46.697 [DEBUG] [Thread-129489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:07:46.697 [DEBUG] [Thread-129489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:46.697 [DEBUG] [Thread-129489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] client lang: <none>
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] server lang: <none>
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] kex follows: False
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] Compression: none
2026-02-11T13:07:46.698 [DEBUG] [Thread-129489] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:07:46.709 [DEBUG] [Thread-129489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:07:46.709 [DEBUG] [Thread-129489] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:07:46.709 [DEBUG] [Thread-129489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:07:46.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:07:46.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:07:46.710 [DEBUG] [Thread-129489] [transport.py] [_log()] userauth is OK
2026-02-11T13:07:46.710 [DEBUG] [Thread-129489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:07:46.710 [DEBUG] [Thread-129489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:07:46.710 [DEBUG] [Thread-129489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:07:46.710 [DEBUG] [Thread-129489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:07:46.720 [INFO] [Thread-129489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:07:46.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:07:47.327 [DEBUG] [Thread-129489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:07:47.327 [DEBUG] [Thread-129489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:07:47.328 [DEBUG] [Thread-129489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:07:47.369 [DEBUG] [Thread-129489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:07:47.369 [DEBUG] [Thread-129489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:07:47.372 [DEBUG] [Thread-129489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:07:47.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:07:47.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:07:47.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:07:47.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:07:47.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:07:47.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:07:47.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:07:47.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:07:47.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:07:47.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.463338 -999.00  +23.10  27.55     46  +10.90 1 2 1 1 1   888    0 12.01 -4.86 ----- 28.8 27.6 289.8 31.9 27.2 -14.8 27.1 -13.6 26.4 -14.5 27.0 -13.6
2026-02-11T13:07:47.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:07:47.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:07:47.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.463338
2026-02-11T13:07:47.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:07:47.395 [DEBUG] [Thread-129489] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:07:47.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:07:47.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:07:47.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:07:47.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:07:47.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:07:28', tmtdew=15.25, humidity=38.02, cloud=0.0, wind=26.03, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:07:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:07:47.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:07:47.503 [DEBUG] [Thread-129492] [transport.py] [_log()] starting thread (client mode): 0xa2d01ff0
2026-02-11T13:07:47.503 [DEBUG] [Thread-129492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:07:47.522 [DEBUG] [Thread-129492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:07:47.522 [INFO] [Thread-129492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:07:47.533 [DEBUG] [Thread-129492] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:07:47.533 [DEBUG] [Thread-129492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:07:47.533 [DEBUG] [Thread-129492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] client lang: <none>
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] server lang: <none>
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] kex follows: False
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] Compression: none
2026-02-11T13:07:47.534 [DEBUG] [Thread-129492] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:07:47.594 [DEBUG] [Thread-129492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:07:47.594 [DEBUG] [Thread-129492] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:07:47.595 [DEBUG] [Thread-129492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:07:47.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:07:47.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:07:47.654 [DEBUG] [Thread-129492] [transport.py] [_log()] userauth is OK
2026-02-11T13:07:47.655 [DEBUG] [Thread-129492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:07:47.655 [DEBUG] [Thread-129492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:07:47.655 [DEBUG] [Thread-129492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:07:47.655 [DEBUG] [Thread-129492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:07:47.673 [INFO] [Thread-129492] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:07:47.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:07:47.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:07:47.859 [DEBUG] [Thread-129494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:07:48.621 [DEBUG] [Thread-129492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:07:48.621 [DEBUG] [Thread-129492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:07:48.669 [DEBUG] [Thread-129492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:07:48.669 [DEBUG] [Thread-129492] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:07:48.679 [DEBUG] [Thread-129492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:07:48.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:07:48.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:07:48.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:07:48.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:07:48.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:07:48.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:07:48.722 [DEBUG] [Thread-129492] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:08:02.916 [DEBUG] [Thread-129495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:08:13.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:08:13.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:08:16.033 [DEBUG] [Thread-129496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:08:17.951 [DEBUG] [Thread-129497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:08:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:08:18.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:08:18.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:08:20.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 8, 3), 15.27, 37.97, 0.0, 29.73, 23.94, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:08:20.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:08:03
2026-02-11T13:08:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:08:21.139 [DEBUG] [Thread-129498] [transport.py] [_log()] starting thread (client mode): 0xa2d013f0
2026-02-11T13:08:21.140 [DEBUG] [Thread-129498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:08:21.159 [DEBUG] [Thread-129498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:08:21.159 [INFO] [Thread-129498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:08:21.162 [DEBUG] [Thread-129498] [transport.py] [_log()] client lang: <none>
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] server lang: <none>
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] kex follows: False
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] Compression: none
2026-02-11T13:08:21.163 [DEBUG] [Thread-129498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:08:21.179 [DEBUG] [Thread-129498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:08:21.180 [DEBUG] [Thread-129498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:08:21.180 [DEBUG] [Thread-129498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:08:21.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:08:21.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:08:21.182 [DEBUG] [Thread-129498] [transport.py] [_log()] userauth is OK
2026-02-11T13:08:21.182 [DEBUG] [Thread-129498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:08:21.183 [DEBUG] [Thread-129498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:08:21.183 [DEBUG] [Thread-129498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:08:21.183 [DEBUG] [Thread-129498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:08:21.202 [INFO] [Thread-129498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:08:21.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:08:21.845 [DEBUG] [Thread-129498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:08:21.845 [DEBUG] [Thread-129498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:08:21.846 [DEBUG] [Thread-129498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:08:21.886 [DEBUG] [Thread-129498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:08:21.886 [DEBUG] [Thread-129498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:08:21.890 [DEBUG] [Thread-129498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:08:21.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:08:21.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:08:21.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:08:21.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:08:21.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:08:21.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:08:21.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:08:21.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:08:21.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:08:21.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.463685 -999.00  +23.10  34.56     44  +10.30 1 2 2 1 1   888    0 12.37 -5.33 ----- 30.7 34.6 288.0 39.7 27.7 -15.8 27.4 -14.6 26.8 -15.2 27.4 -15.3
2026-02-11T13:08:21.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:08:21.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:08:21.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.463685
2026-02-11T13:08:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:08:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:08:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:08:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:08:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:08:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:08:03', tmtdew=15.27, humidity=37.97, cloud=0.0, wind=29.73, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:07:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:08:21.915 [DEBUG] [Thread-129498] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:08:22.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:08:22.013 [DEBUG] [Thread-129501] [transport.py] [_log()] starting thread (client mode): 0xa2d03c10
2026-02-11T13:08:22.013 [DEBUG] [Thread-129501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:08:22.033 [DEBUG] [Thread-129501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:08:22.033 [INFO] [Thread-129501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:08:22.042 [DEBUG] [Thread-129501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] client lang: <none>
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] server lang: <none>
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] kex follows: False
2026-02-11T13:08:22.043 [DEBUG] [Thread-129501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:08:22.044 [DEBUG] [Thread-129501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:08:22.044 [DEBUG] [Thread-129501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:08:22.044 [DEBUG] [Thread-129501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:08:22.044 [DEBUG] [Thread-129501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:08:22.044 [DEBUG] [Thread-129501] [transport.py] [_log()] Compression: none
2026-02-11T13:08:22.044 [DEBUG] [Thread-129501] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:08:22.099 [DEBUG] [Thread-129501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:08:22.100 [DEBUG] [Thread-129501] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:08:22.101 [DEBUG] [Thread-129501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:08:22.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:08:22.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:08:22.163 [DEBUG] [Thread-129501] [transport.py] [_log()] userauth is OK
2026-02-11T13:08:22.163 [DEBUG] [Thread-129501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:08:22.163 [DEBUG] [Thread-129501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:08:22.163 [DEBUG] [Thread-129501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:08:22.164 [DEBUG] [Thread-129501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:08:22.189 [INFO] [Thread-129501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:08:22.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:08:22.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:08:23.031 [DEBUG] [Thread-129501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:08:23.031 [DEBUG] [Thread-129501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:08:23.081 [DEBUG] [Thread-129501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:08:23.081 [DEBUG] [Thread-129501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:08:23.091 [DEBUG] [Thread-129501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:08:23.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:08:23.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:08:23.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:08:23.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:08:23.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:08:23.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:08:23.128 [DEBUG] [Thread-129501] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:08:32.986 [DEBUG] [Thread-129503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:08:48.037 [DEBUG] [Thread-129504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:08:53.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:08:53.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:08: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
2026-02-11T13:08:55.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 8, 38), 17.35, 33.24, 0.0, 30.84, 25.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:08:55.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:08:38
2026-02-11T13:08:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:08:55.507 [DEBUG] [Thread-129505] [transport.py] [_log()] starting thread (client mode): 0xa2db6e60
2026-02-11T13:08:55.507 [DEBUG] [Thread-129505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:08:55.526 [DEBUG] [Thread-129505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:08:55.527 [INFO] [Thread-129505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] client lang: <none>
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] server lang: <none>
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] kex follows: False
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] Compression: none
2026-02-11T13:08:55.530 [DEBUG] [Thread-129505] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:08:55.546 [DEBUG] [Thread-129505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:08:55.546 [DEBUG] [Thread-129505] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:08:55.547 [DEBUG] [Thread-129505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:08:55.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:08:55.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:08:55.549 [DEBUG] [Thread-129505] [transport.py] [_log()] userauth is OK
2026-02-11T13:08:55.549 [DEBUG] [Thread-129505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:08:55.549 [DEBUG] [Thread-129505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:08:55.549 [DEBUG] [Thread-129505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:08:55.549 [DEBUG] [Thread-129505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:08:55.569 [INFO] [Thread-129505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:08:55.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:08:56.319 [DEBUG] [Thread-129505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:08:56.319 [DEBUG] [Thread-129505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:08:56.319 [DEBUG] [Thread-129505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:08:56.360 [DEBUG] [Thread-129505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:08:56.360 [DEBUG] [Thread-129505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:08:56.364 [DEBUG] [Thread-129505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:08:56.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:08:56.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:08:56.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:08:56.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:08:56.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:08:56.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:08:56.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:08:56.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:08:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:08:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.464032 -999.00  +22.90  32.08     45  +10.40 1 2 2 1 1   888    0 12.38 -3.88 ----- 28.6 32.1 296.6 37.9 27.8 -17.2 27.5 -15.6 26.9 -16.1 27.6 -15.1
2026-02-11T13:08:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:08:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:08:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.464032
2026-02-11T13:08:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:08:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:08:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:08:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:08:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:08:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:08:38', tmtdew=17.35, humidity=33.24, cloud=0.0, wind=30.84, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:08:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:08:56.392 [DEBUG] [Thread-129505] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:08:56.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:08:56.486 [DEBUG] [Thread-129508] [transport.py] [_log()] starting thread (client mode): 0xa2db5690
2026-02-11T13:08:56.486 [DEBUG] [Thread-129508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:08:56.501 [DEBUG] [Thread-129508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:08:56.502 [INFO] [Thread-129508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:08:56.509 [DEBUG] [Thread-129508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:08:56.510 [DEBUG] [Thread-129508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:08:56.510 [DEBUG] [Thread-129508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:08:56.510 [DEBUG] [Thread-129508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:56.510 [DEBUG] [Thread-129508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:08:56.510 [DEBUG] [Thread-129508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:56.510 [DEBUG] [Thread-129508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] client lang: <none>
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] server lang: <none>
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] kex follows: False
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:08:56.511 [DEBUG] [Thread-129508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:08:56.512 [DEBUG] [Thread-129508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:08:56.512 [DEBUG] [Thread-129508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:08:56.512 [DEBUG] [Thread-129508] [transport.py] [_log()] Compression: none
2026-02-11T13:08:56.512 [DEBUG] [Thread-129508] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:08:56.579 [DEBUG] [Thread-129508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:08:56.580 [DEBUG] [Thread-129508] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:08:56.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:08:56.581 [DEBUG] [Thread-129508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:08:56.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:08:56.638 [DEBUG] [Thread-129508] [transport.py] [_log()] userauth is OK
2026-02-11T13:08:56.639 [DEBUG] [Thread-129508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:08:56.639 [DEBUG] [Thread-129508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:08:56.639 [DEBUG] [Thread-129508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:08:56.639 [DEBUG] [Thread-129508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:08:56.657 [INFO] [Thread-129508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:08:56.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:08:56.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:08:57.497 [DEBUG] [Thread-129508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:08:57.497 [DEBUG] [Thread-129508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:08:57.545 [DEBUG] [Thread-129508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:08:57.545 [DEBUG] [Thread-129508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:08:57.554 [DEBUG] [Thread-129508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:08:57.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:08:57.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:08:57.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:08:57.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:08:57.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:08:57.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:08:57.590 [DEBUG] [Thread-129508] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:09:03.073 [DEBUG] [Thread-129510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:09:13.735 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:09:13.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:09:16.081 [DEBUG] [Thread-129511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:09:18.120 [DEBUG] [Thread-129512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:09:27.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:09:27.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:09:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:09:29.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 9, 14), 16.0, 35.99, 0.0, 28.34, 24.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:09:29.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:09:14
2026-02-11T13:09:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:09:30.375 [DEBUG] [Thread-129513] [transport.py] [_log()] starting thread (client mode): 0xa2d031c0
2026-02-11T13:09:30.376 [DEBUG] [Thread-129513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:09:30.397 [DEBUG] [Thread-129513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:09:30.397 [INFO] [Thread-129513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:09:30.400 [DEBUG] [Thread-129513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:09:30.400 [DEBUG] [Thread-129513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:09:30.400 [DEBUG] [Thread-129513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:09:30.400 [DEBUG] [Thread-129513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:09:30.400 [DEBUG] [Thread-129513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:09:30.400 [DEBUG] [Thread-129513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] client lang: <none>
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] server lang: <none>
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] kex follows: False
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:09:30.401 [DEBUG] [Thread-129513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:09:30.402 [DEBUG] [Thread-129513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:09:30.402 [DEBUG] [Thread-129513] [transport.py] [_log()] Compression: none
2026-02-11T13:09:30.402 [DEBUG] [Thread-129513] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:09:30.422 [DEBUG] [Thread-129513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:09:30.422 [DEBUG] [Thread-129513] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:09:30.423 [DEBUG] [Thread-129513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:09:30.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:09:30.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:09:30.426 [DEBUG] [Thread-129513] [transport.py] [_log()] userauth is OK
2026-02-11T13:09:30.426 [DEBUG] [Thread-129513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:09:30.426 [DEBUG] [Thread-129513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:09:30.426 [DEBUG] [Thread-129513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:09:30.427 [DEBUG] [Thread-129513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:09:30.447 [INFO] [Thread-129513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:09:30.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:09:31.098 [DEBUG] [Thread-129513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:09:31.098 [DEBUG] [Thread-129513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:09:31.099 [DEBUG] [Thread-129513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:09:31.139 [DEBUG] [Thread-129513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:09:31.139 [DEBUG] [Thread-129513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:09:31.143 [DEBUG] [Thread-129513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:09:31.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:09:31.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:09:31.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:09:31.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:09:31.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:09:31.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:09:31.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:09:31.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:09:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:09:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.464727 -999.00  +23.80  22.41     43  +10.70 1 2 1 1 1   888    0 12.18 -0.35 ----- 24.2 22.4 299.8 28.2 28.4 -16.9 27.9 -15.3 27.4 -14.0 28.1 -15.6
2026-02-11T13:09:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:09:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:09:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.464727
2026-02-11T13:09:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:09:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:09:31.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:09:31.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:09:31.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:09:31.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:09:14', tmtdew=16.0, humidity=35.99, cloud=0.0, wind=28.34, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:09:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:09:31.171 [DEBUG] [Thread-129513] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:09:31.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:09:31.271 [DEBUG] [Thread-129516] [transport.py] [_log()] starting thread (client mode): 0xa2d005e0
2026-02-11T13:09:31.271 [DEBUG] [Thread-129516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:09:31.288 [DEBUG] [Thread-129516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:09:31.288 [INFO] [Thread-129516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:09:31.299 [DEBUG] [Thread-129516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:09:31.299 [DEBUG] [Thread-129516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] client lang: <none>
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] server lang: <none>
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] kex follows: False
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:09:31.300 [DEBUG] [Thread-129516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:09:31.301 [DEBUG] [Thread-129516] [transport.py] [_log()] Compression: none
2026-02-11T13:09:31.301 [DEBUG] [Thread-129516] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:09:31.356 [DEBUG] [Thread-129516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:09:31.357 [DEBUG] [Thread-129516] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:09:31.358 [DEBUG] [Thread-129516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:09:31.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:09:31.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:09:31.413 [DEBUG] [Thread-129516] [transport.py] [_log()] userauth is OK
2026-02-11T13:09:31.414 [DEBUG] [Thread-129516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:09:31.414 [DEBUG] [Thread-129516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:09:31.414 [DEBUG] [Thread-129516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:09:31.414 [DEBUG] [Thread-129516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:09:31.438 [INFO] [Thread-129516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:09:31.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:09:31.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:09:32.303 [DEBUG] [Thread-129516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:09:32.303 [DEBUG] [Thread-129516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:09:32.351 [DEBUG] [Thread-129516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:09:32.352 [DEBUG] [Thread-129516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:09:32.361 [DEBUG] [Thread-129516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:09:32.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:09:32.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:09:32.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:09:32.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:09:32.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:09:32.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:09:32.401 [DEBUG] [Thread-129516] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:09:33.153 [DEBUG] [Thread-129518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:09:48.203 [DEBUG] [Thread-129519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:10:02.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:10:02.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:10:02.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:10:03.235 [DEBUG] [Thread-129520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:10:04.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 9, 50), 15.97, 36.22, 0.0, 24.47, 24.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:10:04.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:09:50
2026-02-11T13:10:04.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:10:04.898 [DEBUG] [Thread-129521] [transport.py] [_log()] starting thread (client mode): 0xa2db4f10
2026-02-11T13:10:04.898 [DEBUG] [Thread-129521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:10:04.918 [DEBUG] [Thread-129521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:10:04.918 [INFO] [Thread-129521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:10:04.921 [DEBUG] [Thread-129521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] client lang: <none>
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] server lang: <none>
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] kex follows: False
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] Compression: none
2026-02-11T13:10:04.922 [DEBUG] [Thread-129521] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:10:04.937 [DEBUG] [Thread-129521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:10:04.938 [DEBUG] [Thread-129521] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:10:04.939 [DEBUG] [Thread-129521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:10:04.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:10:04.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:10:04.941 [DEBUG] [Thread-129521] [transport.py] [_log()] userauth is OK
2026-02-11T13:10:04.941 [DEBUG] [Thread-129521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:10:04.941 [DEBUG] [Thread-129521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:10:04.941 [DEBUG] [Thread-129521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:10:04.941 [DEBUG] [Thread-129521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:10:04.961 [INFO] [Thread-129521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:10:04.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:10:05.742 [DEBUG] [Thread-129521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:10:05.742 [DEBUG] [Thread-129521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:10:05.742 [DEBUG] [Thread-129521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:10:05.783 [DEBUG] [Thread-129521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:10:05.783 [DEBUG] [Thread-129521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:10:05.786 [DEBUG] [Thread-129521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:10:05.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:10:05.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:10:05.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:10:05.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:10:05.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:10:05.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:10:05.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:10:05.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:10:05.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:10:05.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.465074 -999.00  +23.10  22.59     43  +10.20 1 2 1 1 1   888    0 12.52 5.19 ----- 20.7 22.6 314.4 29.9 28.7 -17.3 28.1 -16.5 27.6 -14.0 28.3 -16.1
2026-02-11T13:10:05.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:10:05.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:10:05.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.465074
2026-02-11T13:10:05.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:10:05.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:10:05.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:10:05.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:10:05.803 [DEBUG] [Thread-129521] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:10:05.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:10:05.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:09:50', tmtdew=15.97, humidity=36.22, cloud=0.0, wind=24.47, temperature=24.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:09:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:10:05.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:10:05.900 [DEBUG] [Thread-129524] [transport.py] [_log()] starting thread (client mode): 0xa2db7c70
2026-02-11T13:10:05.900 [DEBUG] [Thread-129524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:10:05.924 [DEBUG] [Thread-129524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:10:05.924 [INFO] [Thread-129524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:10:05.932 [DEBUG] [Thread-129524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:10:05.932 [DEBUG] [Thread-129524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:10:05.932 [DEBUG] [Thread-129524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:10:05.932 [DEBUG] [Thread-129524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:05.932 [DEBUG] [Thread-129524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] client lang: <none>
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] server lang: <none>
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] kex follows: False
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] Compression: none
2026-02-11T13:10:05.933 [DEBUG] [Thread-129524] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:10:05.990 [DEBUG] [Thread-129524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:10:05.990 [DEBUG] [Thread-129524] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:10:05.991 [DEBUG] [Thread-129524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:10:05.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:10:05.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:10:06.046 [DEBUG] [Thread-129524] [transport.py] [_log()] userauth is OK
2026-02-11T13:10:06.046 [DEBUG] [Thread-129524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:10:06.046 [DEBUG] [Thread-129524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:10:06.046 [DEBUG] [Thread-129524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:10:06.046 [DEBUG] [Thread-129524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:10:06.065 [INFO] [Thread-129524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:10:06.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:10:06.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:10:06.948 [DEBUG] [Thread-129524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:10:06.948 [DEBUG] [Thread-129524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:10:06.998 [DEBUG] [Thread-129524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:10:06.998 [DEBUG] [Thread-129524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:10:07.010 [DEBUG] [Thread-129524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:10:07.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:10: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')
2026-02-11T13:10:07.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:10:07.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:10:07.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:10:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:10:07.057 [DEBUG] [Thread-129524] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:10:13.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:10:13.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:10:16.138 [DEBUG] [Thread-129526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:10:18.271 [DEBUG] [Thread-129527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:10:33.319 [DEBUG] [Thread-129528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:10:37.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:10:37.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:10:37.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:10:38.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 10, 25), 15.64, 36.96, 0.0, 22.0, 24.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:10:39.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:10:25
2026-02-11T13:10:39.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:10:39.538 [DEBUG] [Thread-129529] [transport.py] [_log()] starting thread (client mode): 0xa2d01360
2026-02-11T13:10:39.538 [DEBUG] [Thread-129529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:10:39.559 [DEBUG] [Thread-129529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:10:39.560 [INFO] [Thread-129529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:10:39.563 [DEBUG] [Thread-129529] [transport.py] [_log()] client lang: <none>
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] server lang: <none>
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] kex follows: False
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] Compression: none
2026-02-11T13:10:39.564 [DEBUG] [Thread-129529] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:10:39.582 [DEBUG] [Thread-129529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:10:39.582 [DEBUG] [Thread-129529] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:10:39.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:10:39.584 [DEBUG] [Thread-129529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:10:39.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:10:39.586 [DEBUG] [Thread-129529] [transport.py] [_log()] userauth is OK
2026-02-11T13:10:39.586 [DEBUG] [Thread-129529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:10:39.586 [DEBUG] [Thread-129529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:10:39.587 [DEBUG] [Thread-129529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:10:39.587 [DEBUG] [Thread-129529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:10:39.610 [INFO] [Thread-129529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:10:39.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:10:40.292 [DEBUG] [Thread-129529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:10:40.292 [DEBUG] [Thread-129529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:10:40.292 [DEBUG] [Thread-129529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:10:40.333 [DEBUG] [Thread-129529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:10:40.333 [DEBUG] [Thread-129529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:10:40.337 [DEBUG] [Thread-129529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:10:40.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:10:40.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:10:40.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:10:40.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:10:40.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:10:40.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:10:40.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:10:40.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:10:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:10:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.465421 -999.00  +22.90  14.30     44  +10.20 1 2 1 1 1   888    0 12.59 9.24 ----- 16.8 14.3 316.6 24.4 28.8 -17.1 28.2 -15.2 27.7 -14.6 28.4 -16.3
2026-02-11T13:10:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:10:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:10:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.465421
2026-02-11T13:10:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:10:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:10:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:10:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:10:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:10:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:10:25', tmtdew=15.64, humidity=36.96, cloud=0.0, wind=22.0, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:10:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:10:40.361 [DEBUG] [Thread-129529] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:10:40.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:10:40.459 [DEBUG] [Thread-129532] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff70
2026-02-11T13:10:40.459 [DEBUG] [Thread-129532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:10:40.480 [DEBUG] [Thread-129532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:10:40.480 [INFO] [Thread-129532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:10:40.492 [DEBUG] [Thread-129532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:10:40.492 [DEBUG] [Thread-129532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:10:40.492 [DEBUG] [Thread-129532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] client lang: <none>
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] server lang: <none>
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] kex follows: False
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] Compression: none
2026-02-11T13:10:40.493 [DEBUG] [Thread-129532] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:10:40.556 [DEBUG] [Thread-129532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:10:40.557 [DEBUG] [Thread-129532] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:10:40.558 [DEBUG] [Thread-129532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:10:40.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:10:40.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:10:40.622 [DEBUG] [Thread-129532] [transport.py] [_log()] userauth is OK
2026-02-11T13:10:40.622 [DEBUG] [Thread-129532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:10:40.623 [DEBUG] [Thread-129532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:10:40.623 [DEBUG] [Thread-129532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:10:40.623 [DEBUG] [Thread-129532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:10:40.646 [INFO] [Thread-129532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:10:40.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:10:40.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:10:41.476 [DEBUG] [Thread-129532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:10:41.476 [DEBUG] [Thread-129532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:10:41.527 [DEBUG] [Thread-129532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:10:41.527 [DEBUG] [Thread-129532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:10:41.537 [DEBUG] [Thread-129532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:10:41.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:10:41.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')
2026-02-11T13:10:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:10:41.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:10:41.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:10:41.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:10:41.576 [DEBUG] [Thread-129532] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:10:48.353 [DEBUG] [Thread-129534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:03.403 [DEBUG] [Thread-129535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:11.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:11:11.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:11:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:11:13.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 10, 25), 15.64, 36.96, 0.0, 22.0, 24.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:11:13.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:10:25
2026-02-11T13:11:13.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:11:14.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:14.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:14.082 [DEBUG] [Thread-129536] [transport.py] [_log()] starting thread (client mode): 0xa2d6c370
2026-02-11T13:11:14.082 [DEBUG] [Thread-129536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:11:14.103 [DEBUG] [Thread-129536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:11:14.103 [INFO] [Thread-129536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] client lang: <none>
2026-02-11T13:11:14.105 [DEBUG] [Thread-129536] [transport.py] [_log()] server lang: <none>
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] kex follows: False
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] Compression: none
2026-02-11T13:11:14.106 [DEBUG] [Thread-129536] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:11:14.119 [DEBUG] [Thread-129536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:11:14.119 [DEBUG] [Thread-129536] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:11:14.120 [DEBUG] [Thread-129536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:11:14.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:11:14.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:11:14.122 [DEBUG] [Thread-129536] [transport.py] [_log()] userauth is OK
2026-02-11T13:11:14.122 [DEBUG] [Thread-129536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:11:14.122 [DEBUG] [Thread-129536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:11:14.122 [DEBUG] [Thread-129536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:11:14.122 [DEBUG] [Thread-129536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:11:14.141 [INFO] [Thread-129536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:11:14.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:11:14.788 [DEBUG] [Thread-129536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:11:14.788 [DEBUG] [Thread-129536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:11:14.788 [DEBUG] [Thread-129536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:11:14.829 [DEBUG] [Thread-129536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:11:14.830 [DEBUG] [Thread-129536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:11:14.833 [DEBUG] [Thread-129536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:11:14.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:11:14.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:11:14.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:11:14.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:11:14.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:11:14.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:11:14.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:11:14.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:11:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:11:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.465768 -999.00  +22.90  19.77     45  +10.30 1 2 1 1 1   888    0 12.64 11.03 ----- 19.4 19.8 313.6 24.9 29.0 -16.6 28.3 -14.6 27.9 -14.2 28.7 -15.7
2026-02-11T13:11:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:11:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:11:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.465768
2026-02-11T13:11:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:11:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:11:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:11:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:11:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:11:14.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:10:25', tmtdew=15.64, humidity=36.96, cloud=0.0, wind=22.0, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:10:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:11:14.854 [DEBUG] [Thread-129536] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:11:14.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:11:14.949 [DEBUG] [Thread-129539] [transport.py] [_log()] starting thread (client mode): 0xa2d01a20
2026-02-11T13:11:14.949 [DEBUG] [Thread-129539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:11:14.964 [DEBUG] [Thread-129539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:11:14.964 [INFO] [Thread-129539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:11:14.971 [DEBUG] [Thread-129539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] client lang: <none>
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] server lang: <none>
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] kex follows: False
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] Compression: none
2026-02-11T13:11:14.972 [DEBUG] [Thread-129539] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:11:15.030 [DEBUG] [Thread-129539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:11:15.031 [DEBUG] [Thread-129539] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:11:15.031 [DEBUG] [Thread-129539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:11:15.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:11:15.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:11:15.092 [DEBUG] [Thread-129539] [transport.py] [_log()] userauth is OK
2026-02-11T13:11:15.092 [DEBUG] [Thread-129539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:11:15.092 [DEBUG] [Thread-129539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:11:15.093 [DEBUG] [Thread-129539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:11:15.093 [DEBUG] [Thread-129539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:11:15.111 [INFO] [Thread-129539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:11:15.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:11:15.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:11:15.957 [DEBUG] [Thread-129539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:11:15.957 [DEBUG] [Thread-129539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:11:16.008 [DEBUG] [Thread-129539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:11:16.008 [DEBUG] [Thread-129539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:11:16.017 [DEBUG] [Thread-129539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:11:16.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:11:16.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')
2026-02-11T13:11:16.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:11:16.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:11:16.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:11:16.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:11:16.064 [DEBUG] [Thread-129539] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:11:16.185 [DEBUG] [Thread-129541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:18.439 [DEBUG] [Thread-129542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:33.490 [DEBUG] [Thread-129543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:46.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:11:46.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:11:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:11:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 11, 37), 16.24, 35.46, 0.0, 17.93, 24.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:11:48.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:11:37
2026-02-11T13:11:48.529 [DEBUG] [Thread-129544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:11:48.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:11:48.767 [DEBUG] [Thread-129545] [transport.py] [_log()] starting thread (client mode): 0xa2d1a2c0
2026-02-11T13:11:48.767 [DEBUG] [Thread-129545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:11:48.787 [DEBUG] [Thread-129545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:11:48.787 [INFO] [Thread-129545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:11:48.790 [DEBUG] [Thread-129545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:11:48.790 [DEBUG] [Thread-129545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:11:48.790 [DEBUG] [Thread-129545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] client lang: <none>
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] server lang: <none>
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] kex follows: False
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:11:48.791 [DEBUG] [Thread-129545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:11:48.792 [DEBUG] [Thread-129545] [transport.py] [_log()] Compression: none
2026-02-11T13:11:48.792 [DEBUG] [Thread-129545] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:11:48.809 [DEBUG] [Thread-129545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:11:48.810 [DEBUG] [Thread-129545] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:11:48.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:11:48.811 [DEBUG] [Thread-129545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:11:48.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:11:48.814 [DEBUG] [Thread-129545] [transport.py] [_log()] userauth is OK
2026-02-11T13:11:48.814 [DEBUG] [Thread-129545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:11:48.814 [DEBUG] [Thread-129545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:11:48.814 [DEBUG] [Thread-129545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:11:48.815 [DEBUG] [Thread-129545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:11:48.838 [INFO] [Thread-129545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:11:48.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:11:49.663 [DEBUG] [Thread-129545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:11:49.663 [DEBUG] [Thread-129545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:11:49.664 [DEBUG] [Thread-129545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:11:49.704 [DEBUG] [Thread-129545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:11:49.705 [DEBUG] [Thread-129545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:11:49.708 [DEBUG] [Thread-129545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:11:49.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:11:49.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:11:49.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:11:49.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:11:49.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:11:49.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:11:49.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:11:49.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:11:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:11:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.466115 -999.00  +23.30  27.27     43  +10.20 1 2 1 1 1   888    0 12.73 14.08 ----- 26.4 27.3 311.6 32.0 29.2 -16.4 28.4 -15.3 28.0 -13.6 28.9 -15.4
2026-02-11T13:11:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:11:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:11:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.466115
2026-02-11T13:11:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:11:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:11:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:11:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:11:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:11:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:11:37', tmtdew=16.24, humidity=35.46, cloud=0.0, wind=17.93, temperature=24.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:11:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:11:49.738 [DEBUG] [Thread-129545] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:11:49.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:11:49.834 [DEBUG] [Thread-129548] [transport.py] [_log()] starting thread (client mode): 0xa2d11450
2026-02-11T13:11:49.834 [DEBUG] [Thread-129548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:11:49.848 [DEBUG] [Thread-129548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:11:49.849 [INFO] [Thread-129548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:11:49.856 [DEBUG] [Thread-129548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] client lang: <none>
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] server lang: <none>
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] kex follows: False
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:11:49.857 [DEBUG] [Thread-129548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:11:49.858 [DEBUG] [Thread-129548] [transport.py] [_log()] Compression: none
2026-02-11T13:11:49.858 [DEBUG] [Thread-129548] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:11:49.914 [DEBUG] [Thread-129548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:11:49.915 [DEBUG] [Thread-129548] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:11:49.915 [DEBUG] [Thread-129548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:11:49.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:11:49.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:11:49.974 [DEBUG] [Thread-129548] [transport.py] [_log()] userauth is OK
2026-02-11T13:11:49.974 [DEBUG] [Thread-129548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:11:49.974 [DEBUG] [Thread-129548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:11:49.975 [DEBUG] [Thread-129548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:11:49.975 [DEBUG] [Thread-129548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:11:49.998 [INFO] [Thread-129548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:11:49.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:11:49.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:11:50.840 [DEBUG] [Thread-129548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:11:50.840 [DEBUG] [Thread-129548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:11:50.889 [DEBUG] [Thread-129548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:11:50.889 [DEBUG] [Thread-129548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:11:50.899 [DEBUG] [Thread-129548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:11:50.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:11:50.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:11: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') -> 00000000
2026-02-11T13:11:50.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:11:50.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:11:50.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:11:50.938 [DEBUG] [Thread-129548] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:12:03.568 [DEBUG] [Thread-129550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:12:14.159 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:12:14.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:12:16.243 [DEBUG] [Thread-129551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:12:18.622 [DEBUG] [Thread-129552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:12:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:12:20.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:12:20.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
2026-02-11T13:12:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 12, 12), 15.6, 36.93, 0.0, 25.36, 23.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:12:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:12:12
2026-02-11T13:12:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:12:23.311 [DEBUG] [Thread-129553] [transport.py] [_log()] starting thread (client mode): 0xa2db63b0
2026-02-11T13:12:23.311 [DEBUG] [Thread-129553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:12:23.331 [DEBUG] [Thread-129553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:12:23.331 [INFO] [Thread-129553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:12:23.334 [DEBUG] [Thread-129553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:12:23.334 [DEBUG] [Thread-129553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] client lang: <none>
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] server lang: <none>
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] kex follows: False
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] Compression: none
2026-02-11T13:12:23.335 [DEBUG] [Thread-129553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:12:23.352 [DEBUG] [Thread-129553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:12:23.353 [DEBUG] [Thread-129553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:12:23.354 [DEBUG] [Thread-129553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:12:23.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:12:23.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:12:23.397 [DEBUG] [Thread-129553] [transport.py] [_log()] userauth is OK
2026-02-11T13:12:23.398 [DEBUG] [Thread-129553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:12:23.398 [DEBUG] [Thread-129553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:12:23.398 [DEBUG] [Thread-129553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:12:23.398 [DEBUG] [Thread-129553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:12:23.432 [INFO] [Thread-129553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:12:23.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:12:24.052 [DEBUG] [Thread-129553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:12:24.053 [DEBUG] [Thread-129553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:12:24.053 [DEBUG] [Thread-129553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:12:24.093 [DEBUG] [Thread-129553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:12:24.094 [DEBUG] [Thread-129553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:12:24.097 [DEBUG] [Thread-129553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:12:24.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:12:24.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:12:24.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:12:24.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:12:24.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:12:24.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:12:24.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:12:24.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:12:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:12:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.466463 -999.00  +23.20  25.52     43  +10.10 1 2 1 1 1   888    0 13.12 17.44 ----- 23.7 25.5 315.2 34.5 29.3 -16.8 28.5 -15.5 28.1 -14.6 29.0 -15.8
2026-02-11T13:12:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:12:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:12:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.466463
2026-02-11T13:12:24.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:12:24.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:12:24.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:12:24.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:12:24.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:12:24.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:12:12', tmtdew=15.6, humidity=36.93, cloud=0.0, wind=25.36, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:11:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:12:24.124 [DEBUG] [Thread-129553] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:12:24.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:12:24.219 [DEBUG] [Thread-129556] [transport.py] [_log()] starting thread (client mode): 0xa2d6d600
2026-02-11T13:12:24.219 [DEBUG] [Thread-129556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:12:24.234 [DEBUG] [Thread-129556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:12:24.234 [INFO] [Thread-129556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:12:24.241 [DEBUG] [Thread-129556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:12:24.241 [DEBUG] [Thread-129556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:12:24.241 [DEBUG] [Thread-129556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:12:24.241 [DEBUG] [Thread-129556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:24.241 [DEBUG] [Thread-129556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] client lang: <none>
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] server lang: <none>
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] kex follows: False
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:12:24.242 [DEBUG] [Thread-129556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:12:24.243 [DEBUG] [Thread-129556] [transport.py] [_log()] Compression: none
2026-02-11T13:12:24.243 [DEBUG] [Thread-129556] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:12:24.302 [DEBUG] [Thread-129556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:12:24.303 [DEBUG] [Thread-129556] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:12:24.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:12:24.304 [DEBUG] [Thread-129556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:12:24.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:12:24.367 [DEBUG] [Thread-129556] [transport.py] [_log()] userauth is OK
2026-02-11T13:12:24.367 [DEBUG] [Thread-129556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:12:24.368 [DEBUG] [Thread-129556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:12:24.368 [DEBUG] [Thread-129556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:12:24.368 [DEBUG] [Thread-129556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:12:24.388 [INFO] [Thread-129556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:12:24.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:12:24.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:12:25.226 [DEBUG] [Thread-129556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:12:25.226 [DEBUG] [Thread-129556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:12:25.274 [DEBUG] [Thread-129556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:12:25.274 [DEBUG] [Thread-129556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:12:25.292 [DEBUG] [Thread-129556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:12:25.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:12:25.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:12:25.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:12:25.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:12:25.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:12:25.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:12:25.330 [DEBUG] [Thread-129556] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:12:33.665 [DEBUG] [Thread-129558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:12:48.729 [DEBUG] [Thread-129559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:12:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:12:55.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:12:55.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:12:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 12, 47), 16.02, 36.1, 0.0, 21.12, 23.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:12:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:12:47
2026-02-11T13:12:57.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:12:57.736 [DEBUG] [Thread-129560] [transport.py] [_log()] starting thread (client mode): 0xa2d6e140
2026-02-11T13:12:57.736 [DEBUG] [Thread-129560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:12:57.756 [DEBUG] [Thread-129560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:12:57.757 [INFO] [Thread-129560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:12:57.759 [DEBUG] [Thread-129560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:12:57.759 [DEBUG] [Thread-129560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] client lang: <none>
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] server lang: <none>
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] kex follows: False
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:12:57.760 [DEBUG] [Thread-129560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:12:57.761 [DEBUG] [Thread-129560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:12:57.761 [DEBUG] [Thread-129560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:12:57.761 [DEBUG] [Thread-129560] [transport.py] [_log()] Compression: none
2026-02-11T13:12:57.761 [DEBUG] [Thread-129560] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:12:57.779 [DEBUG] [Thread-129560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:12:57.780 [DEBUG] [Thread-129560] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:12:57.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:12:57.781 [DEBUG] [Thread-129560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:12:57.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:12:57.783 [DEBUG] [Thread-129560] [transport.py] [_log()] userauth is OK
2026-02-11T13:12:57.784 [DEBUG] [Thread-129560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:12:57.784 [DEBUG] [Thread-129560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:12:57.784 [DEBUG] [Thread-129560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:12:57.784 [DEBUG] [Thread-129560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:12:57.802 [INFO] [Thread-129560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:12:57.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:12:58.435 [DEBUG] [Thread-129560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:12:58.435 [DEBUG] [Thread-129560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:12:58.435 [DEBUG] [Thread-129560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:12:58.476 [DEBUG] [Thread-129560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:12:58.476 [DEBUG] [Thread-129560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:12:58.479 [DEBUG] [Thread-129560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:12:58.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:12:58.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:12:58.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:12:58.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:12:58.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:12:58.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:12:58.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:12:58.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:12:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:12:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.466810 -999.00  +23.60  21.38     43  +10.30 1 2 1 1 1   888    0 13.22 21.78 ----- 22.0 21.4 292.0 26.4 29.5 -15.6 28.8 -13.5 28.4 -12.6 29.2 -15.4
2026-02-11T13:12:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:12:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:12:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.466810
2026-02-11T13:12:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:12:58.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:12:58.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:12:58.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:12:58.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:12:58.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:12:47', tmtdew=16.02, humidity=36.1, cloud=0.0, wind=21.12, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:12:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:12:58.502 [DEBUG] [Thread-129560] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:12:58.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:12:58.590 [DEBUG] [Thread-129563] [transport.py] [_log()] starting thread (client mode): 0xa2d6dc00
2026-02-11T13:12:58.590 [DEBUG] [Thread-129563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:12:58.605 [DEBUG] [Thread-129563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:12:58.605 [INFO] [Thread-129563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:12:58.612 [DEBUG] [Thread-129563] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:12:58.612 [DEBUG] [Thread-129563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] client lang: <none>
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] server lang: <none>
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] kex follows: False
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] Compression: none
2026-02-11T13:12:58.613 [DEBUG] [Thread-129563] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:12:58.670 [DEBUG] [Thread-129563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:12:58.671 [DEBUG] [Thread-129563] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:12:58.671 [DEBUG] [Thread-129563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:12:58.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:12:58.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:12:58.730 [DEBUG] [Thread-129563] [transport.py] [_log()] userauth is OK
2026-02-11T13:12:58.730 [DEBUG] [Thread-129563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:12:58.731 [DEBUG] [Thread-129563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:12:58.731 [DEBUG] [Thread-129563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:12:58.731 [DEBUG] [Thread-129563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:12:58.751 [INFO] [Thread-129563] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:12:58.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:12:58.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:12:59.595 [DEBUG] [Thread-129563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:12:59.595 [DEBUG] [Thread-129563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:12:59.643 [DEBUG] [Thread-129563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:12:59.643 [DEBUG] [Thread-129563] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:12:59.652 [DEBUG] [Thread-129563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:12:59.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:12:59.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:12:59.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:12:59.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:12:59.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:12:59.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:12:59.689 [DEBUG] [Thread-129563] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:13:03.777 [DEBUG] [Thread-129565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:13:14.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:13:14.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:13:16.291 [DEBUG] [Thread-129566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:13:18.831 [DEBUG] [Thread-129567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:13:29.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:13:29.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:13:29.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:13:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 13, 22), 15.87, 36.42, 0.0, 20.2, 23.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:13:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:13:22
2026-02-11T13:13:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:13:32.273 [DEBUG] [Thread-129568] [transport.py] [_log()] starting thread (client mode): 0xa2d02fb0
2026-02-11T13:13:32.273 [DEBUG] [Thread-129568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:13:32.292 [DEBUG] [Thread-129568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:13:32.293 [INFO] [Thread-129568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] client lang: <none>
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] server lang: <none>
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] kex follows: False
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] Compression: none
2026-02-11T13:13:32.296 [DEBUG] [Thread-129568] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:13:32.314 [DEBUG] [Thread-129568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:13:32.314 [DEBUG] [Thread-129568] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:13:32.315 [DEBUG] [Thread-129568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:13:32.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:13:32.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:13:32.317 [DEBUG] [Thread-129568] [transport.py] [_log()] userauth is OK
2026-02-11T13:13:32.317 [DEBUG] [Thread-129568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:13:32.317 [DEBUG] [Thread-129568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:13:32.317 [DEBUG] [Thread-129568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:13:32.317 [DEBUG] [Thread-129568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:13:32.336 [INFO] [Thread-129568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:13:32.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:13:32.917 [DEBUG] [Thread-129568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:13:32.917 [DEBUG] [Thread-129568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:13:32.917 [DEBUG] [Thread-129568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:13:32.959 [DEBUG] [Thread-129568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:13:32.959 [DEBUG] [Thread-129568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:13:32.962 [DEBUG] [Thread-129568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:13:32.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:13:32.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:13:32.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:13:32.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:13:32.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:13:32.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:13:32.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:13:32.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:13:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:13:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.467157 -999.00  +23.60  13.73     42  +10.30 1 2 1 1 1   888    0 13.24 25.07 ----- 9.7 13.7 326.2 22.2 29.6 -16.2 29.0 -13.1 28.4 -13.5 29.3 -15.2
2026-02-11T13:13:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:13:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:13:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.467157
2026-02-11T13:13:32.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:13:32.984 [DEBUG] [Thread-129568] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:13:32.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:13:32.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:13:32.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:13:32.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:13:32.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:13:22', tmtdew=15.87, humidity=36.42, cloud=0.0, wind=20.2, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:12:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:13:33.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:13:33.086 [DEBUG] [Thread-129571] [transport.py] [_log()] starting thread (client mode): 0xa81d67a0
2026-02-11T13:13:33.086 [DEBUG] [Thread-129571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:13:33.104 [DEBUG] [Thread-129571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:13:33.104 [INFO] [Thread-129571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:13:33.114 [DEBUG] [Thread-129571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:13:33.114 [DEBUG] [Thread-129571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] client lang: <none>
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] server lang: <none>
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] kex follows: False
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] Compression: none
2026-02-11T13:13:33.115 [DEBUG] [Thread-129571] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:13:33.176 [DEBUG] [Thread-129571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:13:33.177 [DEBUG] [Thread-129571] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:13:33.177 [DEBUG] [Thread-129571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:13:33.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:13:33.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:13:33.235 [DEBUG] [Thread-129571] [transport.py] [_log()] userauth is OK
2026-02-11T13:13:33.236 [DEBUG] [Thread-129571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:13:33.236 [DEBUG] [Thread-129571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:13:33.236 [DEBUG] [Thread-129571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:13:33.236 [DEBUG] [Thread-129571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:13:33.260 [INFO] [Thread-129571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:13:33.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:13:33.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:13:33.870 [DEBUG] [Thread-129573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:13:34.114 [DEBUG] [Thread-129571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:13:34.115 [DEBUG] [Thread-129571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:13:34.163 [DEBUG] [Thread-129571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:13:34.163 [DEBUG] [Thread-129571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:13:34.173 [DEBUG] [Thread-129571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:13:34.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:13:34.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:13:34.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:13:34.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:13:34.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:13:34.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:13:34.216 [DEBUG] [Thread-129571] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:13:48.919 [DEBUG] [Thread-129574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:14:03.960 [DEBUG] [Thread-129575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:14:04.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:14:04.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:14:04.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:14:06.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 13, 58), 15.21, 37.86, 0.0, 19.06, 23.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:14:06.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:13:58
2026-02-11T13:14:06.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:14:06.631 [DEBUG] [Thread-129576] [transport.py] [_log()] starting thread (client mode): 0xa2db5c90
2026-02-11T13:14:06.631 [DEBUG] [Thread-129576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:14:06.650 [DEBUG] [Thread-129576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:14:06.650 [INFO] [Thread-129576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:14:06.654 [DEBUG] [Thread-129576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] client lang: <none>
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] server lang: <none>
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] kex follows: False
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] Compression: none
2026-02-11T13:14:06.655 [DEBUG] [Thread-129576] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:14:06.674 [DEBUG] [Thread-129576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:14:06.675 [DEBUG] [Thread-129576] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:14:06.675 [DEBUG] [Thread-129576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:14:06.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:14:06.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:14:06.717 [DEBUG] [Thread-129576] [transport.py] [_log()] userauth is OK
2026-02-11T13:14:06.717 [DEBUG] [Thread-129576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:14:06.718 [DEBUG] [Thread-129576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:14:06.718 [DEBUG] [Thread-129576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:14:06.718 [DEBUG] [Thread-129576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:14:06.738 [INFO] [Thread-129576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:14:06.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:14:07.365 [DEBUG] [Thread-129576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:14:07.365 [DEBUG] [Thread-129576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:14:07.366 [DEBUG] [Thread-129576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:14:07.406 [DEBUG] [Thread-129576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:14:07.406 [DEBUG] [Thread-129576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:14:07.409 [DEBUG] [Thread-129576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:14:07.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:14:07.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:14:07.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:14:07.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:14:07.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:14:07.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:14:07.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.467504 -999.00  +23.50  11.92     43  +10.30 1 2 1 1 1   888    0 13.17 28.99 ----- 12.2 11.9 314.1 17.8 29.9 -16.1 29.1 -14.3 28.6 -13.5 29.6 -15.7
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.467504
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:14:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:13:58', tmtdew=15.21, humidity=37.86, cloud=0.0, wind=19.06, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:13:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:14:07.427 [DEBUG] [Thread-129576] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:14:07.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:14:07.511 [DEBUG] [Thread-129579] [transport.py] [_log()] starting thread (client mode): 0xa2db6cb0
2026-02-11T13:14:07.511 [DEBUG] [Thread-129579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:14:07.527 [DEBUG] [Thread-129579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:14:07.527 [INFO] [Thread-129579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:14:07.534 [DEBUG] [Thread-129579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:14:07.535 [DEBUG] [Thread-129579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:14:07.535 [DEBUG] [Thread-129579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:14:07.535 [DEBUG] [Thread-129579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] client lang: <none>
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] server lang: <none>
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] kex follows: False
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:14:07.536 [DEBUG] [Thread-129579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:14:07.537 [DEBUG] [Thread-129579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:14:07.537 [DEBUG] [Thread-129579] [transport.py] [_log()] Compression: none
2026-02-11T13:14:07.537 [DEBUG] [Thread-129579] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:14:07.595 [DEBUG] [Thread-129579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:14:07.596 [DEBUG] [Thread-129579] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:14:07.597 [DEBUG] [Thread-129579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:14:07.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:14:07.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:14:07.659 [DEBUG] [Thread-129579] [transport.py] [_log()] userauth is OK
2026-02-11T13:14:07.659 [DEBUG] [Thread-129579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:14:07.659 [DEBUG] [Thread-129579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:14:07.659 [DEBUG] [Thread-129579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:14:07.659 [DEBUG] [Thread-129579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:14:07.679 [INFO] [Thread-129579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:14:07.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:14:07.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:14:08.511 [DEBUG] [Thread-129579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:14:08.512 [DEBUG] [Thread-129579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:14:08.559 [DEBUG] [Thread-129579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:14:08.559 [DEBUG] [Thread-129579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:14:08.568 [DEBUG] [Thread-129579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:14:08.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:14:08.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')
2026-02-11T13:14:08.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:14:08.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:14:08.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:14:08.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:14:08.603 [DEBUG] [Thread-129579] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:14:14.444 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:14:14.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:14:16.354 [DEBUG] [Thread-129581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:14:18.995 [DEBUG] [Thread-129582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:14:34.042 [DEBUG] [Thread-129583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:14:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:14:38.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:14:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:14:40.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 13, 58), 15.21, 37.86, 0.0, 19.06, 23.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:14:40.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:13:58
2026-02-11T13:14:40.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:14:41.017 [DEBUG] [Thread-129584] [transport.py] [_log()] starting thread (client mode): 0xa2d3cf40
2026-02-11T13:14:41.017 [DEBUG] [Thread-129584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:14:41.036 [DEBUG] [Thread-129584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:14:41.036 [INFO] [Thread-129584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] client lang: <none>
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] server lang: <none>
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] kex follows: False
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] Compression: none
2026-02-11T13:14:41.039 [DEBUG] [Thread-129584] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:14:41.047 [DEBUG] [Thread-129584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:14:41.048 [DEBUG] [Thread-129584] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:14:41.048 [DEBUG] [Thread-129584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:14:41.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:14:41.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:14:41.049 [DEBUG] [Thread-129584] [transport.py] [_log()] userauth is OK
2026-02-11T13:14:41.050 [DEBUG] [Thread-129584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:14:41.050 [DEBUG] [Thread-129584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:14:41.050 [DEBUG] [Thread-129584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:14:41.050 [DEBUG] [Thread-129584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:14:41.070 [INFO] [Thread-129584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:14:41.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:14:41.875 [DEBUG] [Thread-129584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:14:41.875 [DEBUG] [Thread-129584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:14:41.875 [DEBUG] [Thread-129584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:14:41.917 [DEBUG] [Thread-129584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:14:41.917 [DEBUG] [Thread-129584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:14:41.920 [DEBUG] [Thread-129584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:14:41.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:14:41.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:14:41.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:14:41.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:14:41.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:14:41.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:14:41.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:14:41.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:14:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:14:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.468199 -999.00  +23.70  30.25     43  +10.40 1 2 2 1 1   888    0 13.42 35.64 ----- 27.2 30.2 293.2 39.0 30.2 -17.1 29.4 -15.3 28.9 -13.9 29.8 -15.6
2026-02-11T13:14:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:14:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:14:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.468199
2026-02-11T13:14:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:14:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:14:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:14:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:14:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:14:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:13:58', tmtdew=15.21, humidity=37.86, cloud=0.0, wind=19.06, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:14:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:14:41.945 [DEBUG] [Thread-129584] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:14:42.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:14:42.042 [DEBUG] [Thread-129587] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-11T13:14:42.042 [DEBUG] [Thread-129587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:14:42.056 [DEBUG] [Thread-129587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:14:42.056 [INFO] [Thread-129587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] client lang: <none>
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] server lang: <none>
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] kex follows: False
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:14:42.064 [DEBUG] [Thread-129587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:14:42.065 [DEBUG] [Thread-129587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:14:42.065 [DEBUG] [Thread-129587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:14:42.065 [DEBUG] [Thread-129587] [transport.py] [_log()] Compression: none
2026-02-11T13:14:42.065 [DEBUG] [Thread-129587] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:14:42.123 [DEBUG] [Thread-129587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:14:42.123 [DEBUG] [Thread-129587] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:14:42.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:14:42.124 [DEBUG] [Thread-129587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:14:42.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:14:42.179 [DEBUG] [Thread-129587] [transport.py] [_log()] userauth is OK
2026-02-11T13:14:42.180 [DEBUG] [Thread-129587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:14:42.180 [DEBUG] [Thread-129587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:14:42.180 [DEBUG] [Thread-129587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:14:42.180 [DEBUG] [Thread-129587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:14:42.198 [INFO] [Thread-129587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:14:42.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:14:42.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:14:43.051 [DEBUG] [Thread-129587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:14:43.051 [DEBUG] [Thread-129587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:14:43.101 [DEBUG] [Thread-129587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:14:43.101 [DEBUG] [Thread-129587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:14:43.111 [DEBUG] [Thread-129587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:14:43.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:14:43.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:14:43.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:14:43.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:14:43.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:14:43.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:14:43.144 [DEBUG] [Thread-129587] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:14:49.080 [DEBUG] [Thread-129589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:04.138 [DEBUG] [Thread-129590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:13.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:15:13.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:15:13.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:15:14.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:14.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 14, 33), 16.28, 35.46, 0.0, 31.61, 24.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:15:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:14:33
2026-02-11T13:15:15.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:15:15.846 [DEBUG] [Thread-129591] [transport.py] [_log()] starting thread (client mode): 0xa2d035e0
2026-02-11T13:15:15.846 [DEBUG] [Thread-129591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:15:15.865 [DEBUG] [Thread-129591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:15:15.866 [INFO] [Thread-129591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] client lang: <none>
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] server lang: <none>
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] kex follows: False
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] Compression: none
2026-02-11T13:15:15.868 [DEBUG] [Thread-129591] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:15:15.880 [DEBUG] [Thread-129591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:15:15.880 [DEBUG] [Thread-129591] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:15:15.880 [DEBUG] [Thread-129591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:15:15.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:15:15.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:15:15.882 [DEBUG] [Thread-129591] [transport.py] [_log()] userauth is OK
2026-02-11T13:15:15.882 [DEBUG] [Thread-129591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:15:15.883 [DEBUG] [Thread-129591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:15:15.883 [DEBUG] [Thread-129591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:15:15.883 [DEBUG] [Thread-129591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:15:15.899 [INFO] [Thread-129591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:15:15.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:15:16.398 [DEBUG] [Thread-129593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:16.535 [DEBUG] [Thread-129591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:15:16.535 [DEBUG] [Thread-129591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:15:16.535 [DEBUG] [Thread-129591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:15:16.576 [DEBUG] [Thread-129591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:15:16.577 [DEBUG] [Thread-129591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:15:16.581 [DEBUG] [Thread-129591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:15:16.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:15:16.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:15:16.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:15:16.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:15:16.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:15:16.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:15:16.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:15:16.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:15:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:15:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.468546 -999.00  +23.60  26.24     43  +10.40 1 2 1 1 1   888    0 13.50 38.64 ----- 25.5 26.2 314.0 32.4 30.1 -17.0 29.3 -15.3 28.8 -15.7 29.9 -16.8
2026-02-11T13:15:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:15:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:15:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.468546
2026-02-11T13:15:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:15:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:15:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:15:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:15:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:15:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:14:33', tmtdew=16.28, humidity=35.46, cloud=0.0, wind=31.61, temperature=24.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:14:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:15:16.606 [DEBUG] [Thread-129591] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:15:16.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:15:16.702 [DEBUG] [Thread-129595] [transport.py] [_log()] starting thread (client mode): 0xa2d18e80
2026-02-11T13:15:16.702 [DEBUG] [Thread-129595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:15:16.720 [DEBUG] [Thread-129595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:15:16.720 [INFO] [Thread-129595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:15:16.728 [DEBUG] [Thread-129595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:15:16.728 [DEBUG] [Thread-129595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:15:16.728 [DEBUG] [Thread-129595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:15:16.728 [DEBUG] [Thread-129595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:16.728 [DEBUG] [Thread-129595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] client lang: <none>
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] server lang: <none>
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] kex follows: False
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:15:16.729 [DEBUG] [Thread-129595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:15:16.730 [DEBUG] [Thread-129595] [transport.py] [_log()] Compression: none
2026-02-11T13:15:16.730 [DEBUG] [Thread-129595] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:15:16.788 [DEBUG] [Thread-129595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:15:16.788 [DEBUG] [Thread-129595] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:15:16.789 [DEBUG] [Thread-129595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:15:16.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:15:16.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:15:16.847 [DEBUG] [Thread-129595] [transport.py] [_log()] userauth is OK
2026-02-11T13:15:16.847 [DEBUG] [Thread-129595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:15:16.848 [DEBUG] [Thread-129595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:15:16.848 [DEBUG] [Thread-129595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:15:16.848 [DEBUG] [Thread-129595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:15:16.868 [INFO] [Thread-129595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:15:16.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:15:16.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:15:17.724 [DEBUG] [Thread-129595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:15:17.724 [DEBUG] [Thread-129595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:15:17.772 [DEBUG] [Thread-129595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:15:17.773 [DEBUG] [Thread-129595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:15:17.785 [DEBUG] [Thread-129595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:15:17.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:15:17.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:15:17.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:15:17.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:15:17.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:15:17.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:15:17.823 [DEBUG] [Thread-129595] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:15:19.176 [DEBUG] [Thread-129597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:34.228 [DEBUG] [Thread-129598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:15:47.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:15:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:15:49.264 [DEBUG] [Thread-129599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:15:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 15, 9), 15.47, 36.96, 0.0, 19.29, 23.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:15:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:15:09
2026-02-11T13:15:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:15:50.329 [DEBUG] [Thread-129600] [transport.py] [_log()] starting thread (client mode): 0xa2d12f50
2026-02-11T13:15:50.329 [DEBUG] [Thread-129600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:15:50.345 [DEBUG] [Thread-129600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:15:50.345 [INFO] [Thread-129600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:15:50.348 [DEBUG] [Thread-129600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:15:50.348 [DEBUG] [Thread-129600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:15:50.348 [DEBUG] [Thread-129600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:15:50.348 [DEBUG] [Thread-129600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:50.348 [DEBUG] [Thread-129600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:50.348 [DEBUG] [Thread-129600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] client lang: <none>
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] server lang: <none>
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] kex follows: False
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] Compression: none
2026-02-11T13:15:50.349 [DEBUG] [Thread-129600] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:15:50.365 [DEBUG] [Thread-129600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:15:50.365 [DEBUG] [Thread-129600] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:15:50.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:15:50.366 [DEBUG] [Thread-129600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:15:50.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:15:50.368 [DEBUG] [Thread-129600] [transport.py] [_log()] userauth is OK
2026-02-11T13:15:50.368 [DEBUG] [Thread-129600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:15:50.369 [DEBUG] [Thread-129600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:15:50.369 [DEBUG] [Thread-129600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:15:50.369 [DEBUG] [Thread-129600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:15:50.386 [INFO] [Thread-129600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:15:50.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:15:51.013 [DEBUG] [Thread-129600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:15:51.014 [DEBUG] [Thread-129600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:15:51.014 [DEBUG] [Thread-129600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:15:51.054 [DEBUG] [Thread-129600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:15:51.054 [DEBUG] [Thread-129600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:15:51.058 [DEBUG] [Thread-129600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:15:51.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:15:51.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:15:51.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:15:51.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:15:51.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:15:51.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:15:51.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:15:51.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:15:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:15:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.468893 -999.00  +24.00  32.12     42  +10.40 1 2 2 1 1   888    0 13.51 42.52 ----- 29.9 32.1 300.4 39.3 30.2 -17.2 29.4 -15.3 29.0 -17.4 29.9 -16.6
2026-02-11T13:15:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:15:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:15:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.468893
2026-02-11T13:15:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:15:51.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:15:51.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:15:51.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:15:51.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:15:51.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:15:09', tmtdew=15.47, humidity=36.96, cloud=0.0, wind=19.29, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:15:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:15:51.087 [DEBUG] [Thread-129600] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:15:51.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:15:51.183 [DEBUG] [Thread-129603] [transport.py] [_log()] starting thread (client mode): 0xa2d786a0
2026-02-11T13:15:51.183 [DEBUG] [Thread-129603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:15:51.199 [DEBUG] [Thread-129603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:15:51.200 [INFO] [Thread-129603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] client lang: <none>
2026-02-11T13:15:51.207 [DEBUG] [Thread-129603] [transport.py] [_log()] server lang: <none>
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] kex follows: False
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] Compression: none
2026-02-11T13:15:51.208 [DEBUG] [Thread-129603] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:15:51.268 [DEBUG] [Thread-129603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:15:51.268 [DEBUG] [Thread-129603] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:15:51.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:15:51.270 [DEBUG] [Thread-129603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:15:51.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:15:51.327 [DEBUG] [Thread-129603] [transport.py] [_log()] userauth is OK
2026-02-11T13:15:51.327 [DEBUG] [Thread-129603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:15:51.327 [DEBUG] [Thread-129603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:15:51.327 [DEBUG] [Thread-129603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:15:51.327 [DEBUG] [Thread-129603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:15:51.354 [INFO] [Thread-129603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:15:51.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:15:51.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:15:52.201 [DEBUG] [Thread-129603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:15:52.201 [DEBUG] [Thread-129603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:15:52.249 [DEBUG] [Thread-129603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:15:52.249 [DEBUG] [Thread-129603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:15:52.258 [DEBUG] [Thread-129603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:15:52.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:15:52.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:15:52.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:15:52.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:15:52.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:15:52.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:15:52.304 [DEBUG] [Thread-129603] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:16:04.299 [DEBUG] [Thread-129605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:16:14.726 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:16:14.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:16:16.451 [DEBUG] [Thread-129606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:16:19.359 [DEBUG] [Thread-129607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:16:22.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:16:22.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:16:22.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
2026-02-11T13:16:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 15, 45), 15.46, 37.26, 0.0, 29.64, 23.83, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:16:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:15:45
2026-02-11T13:16:25.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:16:25.266 [DEBUG] [Thread-129608] [transport.py] [_log()] starting thread (client mode): 0xa2db5d20
2026-02-11T13:16:25.266 [DEBUG] [Thread-129608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:16:25.286 [DEBUG] [Thread-129608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:16:25.286 [INFO] [Thread-129608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:16:25.289 [DEBUG] [Thread-129608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:16:25.289 [DEBUG] [Thread-129608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:16:25.289 [DEBUG] [Thread-129608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] client lang: <none>
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] server lang: <none>
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] kex follows: False
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:16:25.290 [DEBUG] [Thread-129608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:16:25.291 [DEBUG] [Thread-129608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:16:25.291 [DEBUG] [Thread-129608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:16:25.291 [DEBUG] [Thread-129608] [transport.py] [_log()] Compression: none
2026-02-11T13:16:25.291 [DEBUG] [Thread-129608] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:16:25.312 [DEBUG] [Thread-129608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:16:25.313 [DEBUG] [Thread-129608] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:16:25.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:16:25.314 [DEBUG] [Thread-129608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:16:25.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:16:25.316 [DEBUG] [Thread-129608] [transport.py] [_log()] userauth is OK
2026-02-11T13:16:25.316 [DEBUG] [Thread-129608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:16:25.316 [DEBUG] [Thread-129608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:16:25.317 [DEBUG] [Thread-129608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:16:25.317 [DEBUG] [Thread-129608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:16:25.356 [INFO] [Thread-129608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:16:25.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:16:25.893 [DEBUG] [Thread-129608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:16:25.893 [DEBUG] [Thread-129608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:16:25.893 [DEBUG] [Thread-129608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:16:25.934 [DEBUG] [Thread-129608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:16:25.934 [DEBUG] [Thread-129608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:16:25.937 [DEBUG] [Thread-129608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:16:25.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:16:25.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:16:25.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:16:25.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:16:25.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:16:25.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:16:25.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:16:25.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:16:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:16:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.469240 -999.00  +23.50  28.51     43  +10.20 1 2 1 1 1   888    0 13.97 46.18 ----- 27.1 28.5 312.2 37.0 30.2 -17.9 29.3 -15.6 28.9 -15.2 29.9 -16.7
2026-02-11T13:16:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:16:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:16:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.469240
2026-02-11T13:16:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:16:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:16:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:16:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:16:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:16:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:15:45', tmtdew=15.46, humidity=37.26, cloud=0.0, wind=29.64, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:15:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:16:25.956 [DEBUG] [Thread-129608] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:16:26.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:16:26.054 [DEBUG] [Thread-129611] [transport.py] [_log()] starting thread (client mode): 0xa2db7520
2026-02-11T13:16:26.054 [DEBUG] [Thread-129611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:16:26.070 [DEBUG] [Thread-129611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:16:26.070 [INFO] [Thread-129611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] client lang: <none>
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] server lang: <none>
2026-02-11T13:16:26.077 [DEBUG] [Thread-129611] [transport.py] [_log()] kex follows: False
2026-02-11T13:16:26.078 [DEBUG] [Thread-129611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:16:26.078 [DEBUG] [Thread-129611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:16:26.078 [DEBUG] [Thread-129611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:16:26.078 [DEBUG] [Thread-129611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:16:26.078 [DEBUG] [Thread-129611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:16:26.078 [DEBUG] [Thread-129611] [transport.py] [_log()] Compression: none
2026-02-11T13:16:26.078 [DEBUG] [Thread-129611] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:16:26.134 [DEBUG] [Thread-129611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:16:26.134 [DEBUG] [Thread-129611] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:16:26.135 [DEBUG] [Thread-129611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:16:26.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:16:26.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:16:26.191 [DEBUG] [Thread-129611] [transport.py] [_log()] userauth is OK
2026-02-11T13:16:26.191 [DEBUG] [Thread-129611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:16:26.191 [DEBUG] [Thread-129611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:16:26.191 [DEBUG] [Thread-129611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:16:26.191 [DEBUG] [Thread-129611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:16:26.213 [INFO] [Thread-129611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:16:26.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:16:26.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:16:27.041 [DEBUG] [Thread-129611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:16:27.041 [DEBUG] [Thread-129611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:16:27.089 [DEBUG] [Thread-129611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:16:27.089 [DEBUG] [Thread-129611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:16:27.097 [DEBUG] [Thread-129611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:16:27.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:16:27.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')
2026-02-11T13:16:27.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:16:27.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:16:27.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:16:27.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:16:27.138 [DEBUG] [Thread-129611] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:16:34.393 [DEBUG] [Thread-129613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:16:49.443 [DEBUG] [Thread-129614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:16:57.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:16:57.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:16:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:16:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 16, 20), 16.22, 35.64, 0.0, 30.0, 24.44, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:16:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:16:20
2026-02-11T13:16:59.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:16:59.949 [DEBUG] [Thread-129615] [transport.py] [_log()] starting thread (client mode): 0xa2db51b0
2026-02-11T13:16:59.949 [DEBUG] [Thread-129615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:16:59.970 [DEBUG] [Thread-129615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:16:59.970 [INFO] [Thread-129615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:16:59.972 [DEBUG] [Thread-129615] [transport.py] [_log()] client lang: <none>
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] server lang: <none>
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] kex follows: False
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] Compression: none
2026-02-11T13:16:59.973 [DEBUG] [Thread-129615] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:16:59.984 [DEBUG] [Thread-129615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:16:59.985 [DEBUG] [Thread-129615] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:16:59.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:16:59.986 [DEBUG] [Thread-129615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:16:59.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:16:59.988 [DEBUG] [Thread-129615] [transport.py] [_log()] userauth is OK
2026-02-11T13:16:59.989 [DEBUG] [Thread-129615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:16:59.989 [DEBUG] [Thread-129615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:16:59.989 [DEBUG] [Thread-129615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:16:59.989 [DEBUG] [Thread-129615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:17:00.015 [INFO] [Thread-129615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:17:00.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:17:00.623 [DEBUG] [Thread-129615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:17:00.623 [DEBUG] [Thread-129615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:17:00.623 [DEBUG] [Thread-129615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:17:00.664 [DEBUG] [Thread-129615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:17:00.665 [DEBUG] [Thread-129615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:17:00.668 [DEBUG] [Thread-129615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:17:00.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:17:00.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:17:00.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:17:00.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:17:00.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:17:00.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:17:00.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:17:00.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:17:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:17:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.469934 -999.00  +23.50  24.27     43  +10.20 1 2 1 1 1   888    0 14.22 57.37 ----- 23.2 24.3 296.4 34.5 30.2 -16.8 29.5 -16.2 29.0 -16.6 29.9 -17.1
2026-02-11T13:17:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:17:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:17:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.469934
2026-02-11T13:17:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:17:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:17:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:17:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:17:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:17:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:16:20', tmtdew=16.22, humidity=35.64, cloud=0.0, wind=30.0, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:16:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:17:00.689 [DEBUG] [Thread-129615] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:17:00.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:17:00.784 [DEBUG] [Thread-129618] [transport.py] [_log()] starting thread (client mode): 0xa2d02320
2026-02-11T13:17:00.785 [DEBUG] [Thread-129618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:17:00.800 [DEBUG] [Thread-129618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:17:00.800 [INFO] [Thread-129618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:17:00.807 [DEBUG] [Thread-129618] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:17:00.807 [DEBUG] [Thread-129618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:17:00.807 [DEBUG] [Thread-129618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:17:00.807 [DEBUG] [Thread-129618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] client lang: <none>
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] server lang: <none>
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] kex follows: False
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] Compression: none
2026-02-11T13:17:00.808 [DEBUG] [Thread-129618] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:17:00.868 [DEBUG] [Thread-129618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:17:00.868 [DEBUG] [Thread-129618] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:17:00.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:17:00.869 [DEBUG] [Thread-129618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:17:00.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:17:00.927 [DEBUG] [Thread-129618] [transport.py] [_log()] userauth is OK
2026-02-11T13:17:00.927 [DEBUG] [Thread-129618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:17:00.927 [DEBUG] [Thread-129618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:17:00.928 [DEBUG] [Thread-129618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:17:00.928 [DEBUG] [Thread-129618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:17:00.946 [INFO] [Thread-129618] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:17:00.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:17:00.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:17:01.819 [DEBUG] [Thread-129618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:17:01.819 [DEBUG] [Thread-129618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:17:01.866 [DEBUG] [Thread-129618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:17:01.867 [DEBUG] [Thread-129618] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:17:01.876 [DEBUG] [Thread-129618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:17:01.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:17:01.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')
2026-02-11T13:17:01.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:17:01.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:17:01.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:17:01.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:17:01.915 [DEBUG] [Thread-129618] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:17:04.481 [DEBUG] [Thread-129620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:17:14.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:17:14.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:17:16.487 [DEBUG] [Thread-129621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:17:19.541 [DEBUG] [Thread-129622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:17:31.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:17:31.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:17:31.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:17:33.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 16, 56), 16.29, 35.42, 0.0, 28.05, 24.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:17:33.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:16:56
2026-02-11T13:17:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:17:34.451 [DEBUG] [Thread-129623] [transport.py] [_log()] starting thread (client mode): 0xa2d3f190
2026-02-11T13:17:34.451 [DEBUG] [Thread-129623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:17:34.472 [DEBUG] [Thread-129623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:17:34.472 [INFO] [Thread-129623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:17:34.475 [DEBUG] [Thread-129623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] client lang: <none>
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] server lang: <none>
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] kex follows: False
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] Compression: none
2026-02-11T13:17:34.476 [DEBUG] [Thread-129623] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:17:34.485 [DEBUG] [Thread-129623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:17:34.485 [DEBUG] [Thread-129623] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:17:34.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:17:34.486 [DEBUG] [Thread-129623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:17:34.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:17:34.488 [DEBUG] [Thread-129623] [transport.py] [_log()] userauth is OK
2026-02-11T13:17:34.488 [DEBUG] [Thread-129623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:17:34.488 [DEBUG] [Thread-129623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:17:34.488 [DEBUG] [Thread-129623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:17:34.488 [DEBUG] [Thread-129623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:17:34.507 [INFO] [Thread-129623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:17:34.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:17:34.577 [DEBUG] [Thread-129625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:17:35.160 [DEBUG] [Thread-129623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:17:35.161 [DEBUG] [Thread-129623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:17:35.161 [DEBUG] [Thread-129623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:17:35.201 [DEBUG] [Thread-129623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:17:35.201 [DEBUG] [Thread-129623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:17:35.204 [DEBUG] [Thread-129623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:17:35.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:17:35.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:17:35.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:17:35.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:17:35.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:17:35.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:17:35.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:17:35.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:17:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:17:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.470282 -999.00  +23.50  23.90     43  +10.20 1 2 1 1 1   888    0 14.56 59.73 ----- 22.1 23.9 311.4 29.0 30.3 -16.1 29.5 -15.7 29.0 -13.5 30.0 -16.2
2026-02-11T13:17:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:17:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:17:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.470282
2026-02-11T13:17:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:17:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:17:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:17:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:17:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:17:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:16:56', tmtdew=16.29, humidity=35.42, cloud=0.0, wind=28.05, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:17:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:17:35.227 [DEBUG] [Thread-129623] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:17:35.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:17:35.322 [DEBUG] [Thread-129627] [transport.py] [_log()] starting thread (client mode): 0xa2d01660
2026-02-11T13:17:35.322 [DEBUG] [Thread-129627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:17:35.340 [DEBUG] [Thread-129627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:17:35.341 [INFO] [Thread-129627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:17:35.348 [DEBUG] [Thread-129627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] client lang: <none>
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] server lang: <none>
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] kex follows: False
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:17:35.349 [DEBUG] [Thread-129627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:17:35.350 [DEBUG] [Thread-129627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:17:35.350 [DEBUG] [Thread-129627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:17:35.350 [DEBUG] [Thread-129627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:17:35.350 [DEBUG] [Thread-129627] [transport.py] [_log()] Compression: none
2026-02-11T13:17:35.350 [DEBUG] [Thread-129627] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:17:35.407 [DEBUG] [Thread-129627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:17:35.408 [DEBUG] [Thread-129627] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:17:35.409 [DEBUG] [Thread-129627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:17:35.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:17:35.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:17:35.463 [DEBUG] [Thread-129627] [transport.py] [_log()] userauth is OK
2026-02-11T13:17:35.463 [DEBUG] [Thread-129627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:17:35.463 [DEBUG] [Thread-129627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:17:35.463 [DEBUG] [Thread-129627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:17:35.463 [DEBUG] [Thread-129627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:17:35.483 [INFO] [Thread-129627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:17:35.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:17:35.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:17:36.367 [DEBUG] [Thread-129627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:17:36.368 [DEBUG] [Thread-129627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:17:36.415 [DEBUG] [Thread-129627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:17:36.416 [DEBUG] [Thread-129627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:17:36.425 [DEBUG] [Thread-129627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:17:36.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:17:36.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:17:36.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:17:36.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:17:36.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:17:36.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:17:36.463 [DEBUG] [Thread-129627] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:17:49.612 [DEBUG] [Thread-129629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:18:04.666 [DEBUG] [Thread-129630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:18:06.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:18:06.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:18:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:18:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 17, 32), 15.96, 36.12, 0.0, 21.99, 23.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:18:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:17:32
2026-02-11T13:18:08.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:18:08.898 [DEBUG] [Thread-129631] [transport.py] [_log()] starting thread (client mode): 0xa2d7bf70
2026-02-11T13:18:08.898 [DEBUG] [Thread-129631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:18:08.913 [DEBUG] [Thread-129631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:18:08.913 [INFO] [Thread-129631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] client lang: <none>
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] server lang: <none>
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] kex follows: False
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:18:08.917 [DEBUG] [Thread-129631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:18:08.918 [DEBUG] [Thread-129631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:18:08.918 [DEBUG] [Thread-129631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:18:08.918 [DEBUG] [Thread-129631] [transport.py] [_log()] Compression: none
2026-02-11T13:18:08.918 [DEBUG] [Thread-129631] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:18:08.938 [DEBUG] [Thread-129631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:18:08.938 [DEBUG] [Thread-129631] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:18:08.939 [DEBUG] [Thread-129631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:18:08.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:18:08.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:18:08.940 [DEBUG] [Thread-129631] [transport.py] [_log()] userauth is OK
2026-02-11T13:18:08.941 [DEBUG] [Thread-129631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:18:08.941 [DEBUG] [Thread-129631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:18:08.941 [DEBUG] [Thread-129631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:18:08.941 [DEBUG] [Thread-129631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:18:08.958 [INFO] [Thread-129631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:18:08.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:18:09.615 [DEBUG] [Thread-129631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:18:09.616 [DEBUG] [Thread-129631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:18:09.616 [DEBUG] [Thread-129631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:18:09.656 [DEBUG] [Thread-129631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:18:09.656 [DEBUG] [Thread-129631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:18:09.659 [DEBUG] [Thread-129631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:18:09.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:18:09.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:18:09.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:18:09.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:18:09.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:18:09.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:18:09.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:18:09.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:18:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:18:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.470629 -999.00  +23.20  19.17     44  +10.30 1 2 1 1 1   888    0 14.34 61.93 ----- 14.9 19.2 310.8 28.6 30.4 -16.6 29.6 -15.0 29.2 -14.0 30.1 -15.1
2026-02-11T13:18:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:18:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:18:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.470629
2026-02-11T13:18:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:18:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:18:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:18:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:18:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:18:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:17:32', tmtdew=15.96, humidity=36.12, cloud=0.0, wind=21.99, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:17:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:18:09.685 [DEBUG] [Thread-129631] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:18:09.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:18:09.781 [DEBUG] [Thread-129634] [transport.py] [_log()] starting thread (client mode): 0xa5758cd0
2026-02-11T13:18:09.781 [DEBUG] [Thread-129634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:18:09.796 [DEBUG] [Thread-129634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:18:09.796 [INFO] [Thread-129634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:18:09.803 [DEBUG] [Thread-129634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] client lang: <none>
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] server lang: <none>
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] kex follows: False
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:18:09.804 [DEBUG] [Thread-129634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:18:09.806 [DEBUG] [Thread-129634] [transport.py] [_log()] Compression: none
2026-02-11T13:18:09.806 [DEBUG] [Thread-129634] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:18:09.863 [DEBUG] [Thread-129634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:18:09.863 [DEBUG] [Thread-129634] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:18:09.864 [DEBUG] [Thread-129634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:18:09.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:18:09.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:18:09.919 [DEBUG] [Thread-129634] [transport.py] [_log()] userauth is OK
2026-02-11T13:18:09.920 [DEBUG] [Thread-129634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:18:09.920 [DEBUG] [Thread-129634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:18:09.920 [DEBUG] [Thread-129634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:18:09.920 [DEBUG] [Thread-129634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:18:09.938 [INFO] [Thread-129634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:18:09.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:18:09.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:18:10.756 [DEBUG] [Thread-129634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:18:10.756 [DEBUG] [Thread-129634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:18:10.804 [DEBUG] [Thread-129634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:18:10.804 [DEBUG] [Thread-129634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:18:10.814 [DEBUG] [Thread-129634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:18:10.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:18:10.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')
2026-02-11T13:18:10.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:18:10.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:18:10.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:18:10.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:18:10.851 [DEBUG] [Thread-129634] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:18:15.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:18:15.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:18:16.520 [DEBUG] [Thread-129636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:18:19.702 [DEBUG] [Thread-129637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:18:34.751 [DEBUG] [Thread-129638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:18:40.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:18:40.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:18:40.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:18:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 18, 7), 15.69, 36.7, 0.0, 21.33, 23.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:18:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:18:07
2026-02-11T13:18:43.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:18:43.260 [DEBUG] [Thread-129639] [transport.py] [_log()] starting thread (client mode): 0xa2d7ab30
2026-02-11T13:18:43.260 [DEBUG] [Thread-129639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:18:43.280 [DEBUG] [Thread-129639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:18:43.281 [INFO] [Thread-129639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] client lang: <none>
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] server lang: <none>
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] kex follows: False
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:18:43.284 [DEBUG] [Thread-129639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:18:43.285 [DEBUG] [Thread-129639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:18:43.285 [DEBUG] [Thread-129639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:18:43.285 [DEBUG] [Thread-129639] [transport.py] [_log()] Compression: none
2026-02-11T13:18:43.285 [DEBUG] [Thread-129639] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:18:43.301 [DEBUG] [Thread-129639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:18:43.301 [DEBUG] [Thread-129639] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:18:43.302 [DEBUG] [Thread-129639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:18:43.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:18:43.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:18:43.304 [DEBUG] [Thread-129639] [transport.py] [_log()] userauth is OK
2026-02-11T13:18:43.304 [DEBUG] [Thread-129639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:18:43.304 [DEBUG] [Thread-129639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:18:43.304 [DEBUG] [Thread-129639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:18:43.304 [DEBUG] [Thread-129639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:18:43.340 [INFO] [Thread-129639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:18:43.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:18:43.998 [DEBUG] [Thread-129639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:18:43.998 [DEBUG] [Thread-129639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:18:43.999 [DEBUG] [Thread-129639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:18:44.039 [DEBUG] [Thread-129639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:18:44.040 [DEBUG] [Thread-129639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:18:44.042 [DEBUG] [Thread-129639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:18:44.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:18:44.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:18:44.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:18:44.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:18:44.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:18:44.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:18:44.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:18:44.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:18:44.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:18:44.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.470977 -999.00  +23.40  28.43     43  +10.30 1 2 1 1 1   888    0 14.42 60.49 ----- 33.3 28.4 288.2 35.7 30.6 -16.3 29.7 -14.5 29.3 -14.0 30.2 -14.9
2026-02-11T13:18:44.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:18:44.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:18:44.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.470977
2026-02-11T13:18:44.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:18:44.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:18:44.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:18:44.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:18:44.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:18:44.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:18:07', tmtdew=15.69, humidity=36.7, cloud=0.0, wind=21.33, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:18:12.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:18:44.071 [DEBUG] [Thread-129639] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:18:44.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:18:44.165 [DEBUG] [Thread-129642] [transport.py] [_log()] starting thread (client mode): 0xa81d5510
2026-02-11T13:18:44.165 [DEBUG] [Thread-129642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:18:44.180 [DEBUG] [Thread-129642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:18:44.180 [INFO] [Thread-129642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:18:44.188 [DEBUG] [Thread-129642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] client lang: <none>
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] server lang: <none>
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] kex follows: False
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:18:44.189 [DEBUG] [Thread-129642] [transport.py] [_log()] Compression: none
2026-02-11T13:18:44.190 [DEBUG] [Thread-129642] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:18:44.247 [DEBUG] [Thread-129642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:18:44.248 [DEBUG] [Thread-129642] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:18:44.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:18:44.249 [DEBUG] [Thread-129642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:18:44.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:18:44.303 [DEBUG] [Thread-129642] [transport.py] [_log()] userauth is OK
2026-02-11T13:18:44.303 [DEBUG] [Thread-129642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:18:44.303 [DEBUG] [Thread-129642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:18:44.304 [DEBUG] [Thread-129642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:18:44.304 [DEBUG] [Thread-129642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:18:44.323 [INFO] [Thread-129642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:18:44.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:18:44.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:18:45.149 [DEBUG] [Thread-129642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:18:45.149 [DEBUG] [Thread-129642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:18:45.197 [DEBUG] [Thread-129642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:18:45.198 [DEBUG] [Thread-129642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:18:45.207 [DEBUG] [Thread-129642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:18:45.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:18:45.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:18:45.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:18:45.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:18:45.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:18:45.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:18:45.244 [DEBUG] [Thread-129642] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:18:49.789 [DEBUG] [Thread-129644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:04.840 [DEBUG] [Thread-129645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:15.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:15.163 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:15.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:19:15.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:19:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:19:16.552 [DEBUG] [Thread-129646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:17.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 18, 43), 15.3, 37.8, 0.0, 22.06, 23.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:19:17.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:18:43
2026-02-11T13:19:17.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:19:17.631 [DEBUG] [Thread-129647] [transport.py] [_log()] starting thread (client mode): 0xa81d70a0
2026-02-11T13:19:17.631 [DEBUG] [Thread-129647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:19:17.650 [DEBUG] [Thread-129647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:19:17.650 [INFO] [Thread-129647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:19:17.654 [DEBUG] [Thread-129647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:19:17.654 [DEBUG] [Thread-129647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:19:17.654 [DEBUG] [Thread-129647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:19:17.654 [DEBUG] [Thread-129647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:17.654 [DEBUG] [Thread-129647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:17.654 [DEBUG] [Thread-129647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] client lang: <none>
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] server lang: <none>
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] kex follows: False
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] Compression: none
2026-02-11T13:19:17.655 [DEBUG] [Thread-129647] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:19:17.677 [DEBUG] [Thread-129647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:19:17.678 [DEBUG] [Thread-129647] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:19:17.679 [DEBUG] [Thread-129647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:19:17.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:19:17.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:19:17.681 [DEBUG] [Thread-129647] [transport.py] [_log()] userauth is OK
2026-02-11T13:19:17.681 [DEBUG] [Thread-129647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:19:17.681 [DEBUG] [Thread-129647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:19:17.681 [DEBUG] [Thread-129647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:19:17.681 [DEBUG] [Thread-129647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:19:17.704 [INFO] [Thread-129647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:19:17.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:19:18.339 [DEBUG] [Thread-129647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:19:18.340 [DEBUG] [Thread-129647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:19:18.340 [DEBUG] [Thread-129647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:19:18.380 [DEBUG] [Thread-129647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:19:18.381 [DEBUG] [Thread-129647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:19:18.383 [DEBUG] [Thread-129647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:19:18.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:19:18.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:19:18.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:19:18.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:19:18.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:19:18.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:19:18.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:19:18.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:19:18.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:19:18.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.471324 -999.00  +22.90  29.47     44  +10.20 1 2 1 1 1   888    0 14.40 57.80 ----- 22.4 29.5 307.0 35.4 30.4 -16.9 29.6 -15.1 29.1 -14.3 30.1 -15.5
2026-02-11T13:19:18.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:19:18.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:19:18.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.471324
2026-02-11T13:19:18.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:19:18.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:19:18.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:19:18.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:19:18.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:19:18.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:18:43', tmtdew=15.3, humidity=37.8, cloud=0.0, wind=22.06, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:18:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:19:18.410 [DEBUG] [Thread-129647] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:19:18.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:19:18.505 [DEBUG] [Thread-129650] [transport.py] [_log()] starting thread (client mode): 0xa2d78670
2026-02-11T13:19:18.505 [DEBUG] [Thread-129650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:19:18.520 [DEBUG] [Thread-129650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:19:18.520 [INFO] [Thread-129650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:19:18.527 [DEBUG] [Thread-129650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] client lang: <none>
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] server lang: <none>
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] kex follows: False
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] Compression: none
2026-02-11T13:19:18.528 [DEBUG] [Thread-129650] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:19:18.587 [DEBUG] [Thread-129650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:19:18.588 [DEBUG] [Thread-129650] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:19:18.588 [DEBUG] [Thread-129650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:19:18.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:19:18.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:19:18.645 [DEBUG] [Thread-129650] [transport.py] [_log()] userauth is OK
2026-02-11T13:19:18.645 [DEBUG] [Thread-129650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:19:18.646 [DEBUG] [Thread-129650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:19:18.646 [DEBUG] [Thread-129650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:19:18.646 [DEBUG] [Thread-129650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:19:18.666 [INFO] [Thread-129650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:19:18.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:19:18.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:19:19.509 [DEBUG] [Thread-129650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:19:19.509 [DEBUG] [Thread-129650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:19:19.557 [DEBUG] [Thread-129650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:19:19.557 [DEBUG] [Thread-129650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:19:19.569 [DEBUG] [Thread-129650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:19:19.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:19:19.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:19:19.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:19:19.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:19:19.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:19:19.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:19:19.603 [DEBUG] [Thread-129650] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:19:19.876 [DEBUG] [Thread-129652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:34.923 [DEBUG] [Thread-129653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:49.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:19:49.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:19:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:19:49.961 [DEBUG] [Thread-129654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:19:51.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 19, 18), 15.5, 37.4, 0.0, 27.58, 23.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:19:51.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:19:18
2026-02-11T13:19:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:19:52.499 [DEBUG] [Thread-129655] [transport.py] [_log()] starting thread (client mode): 0xa2d12d40
2026-02-11T13:19:52.499 [DEBUG] [Thread-129655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:19:52.520 [DEBUG] [Thread-129655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:19:52.520 [INFO] [Thread-129655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] client lang: <none>
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] server lang: <none>
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] kex follows: False
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] Compression: none
2026-02-11T13:19:52.523 [DEBUG] [Thread-129655] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:19:52.540 [DEBUG] [Thread-129655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:19:52.541 [DEBUG] [Thread-129655] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:19:52.541 [DEBUG] [Thread-129655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:19:52.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:19:52.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:19:52.543 [DEBUG] [Thread-129655] [transport.py] [_log()] userauth is OK
2026-02-11T13:19:52.543 [DEBUG] [Thread-129655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:19:52.543 [DEBUG] [Thread-129655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:19:52.543 [DEBUG] [Thread-129655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:19:52.544 [DEBUG] [Thread-129655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:19:52.564 [INFO] [Thread-129655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:19:52.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:19:53.208 [DEBUG] [Thread-129655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:19:53.209 [DEBUG] [Thread-129655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:19:53.209 [DEBUG] [Thread-129655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:19:53.251 [DEBUG] [Thread-129655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:19:53.251 [DEBUG] [Thread-129655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:19:53.254 [DEBUG] [Thread-129655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:19:53.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:19:53.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:19:53.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:19:53.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:19:53.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:19:53.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:19:53.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:19:53.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:19:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:19:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.472018 -999.00  +23.40  22.41     43  +10.40 1 2 1 1 1   888    0 14.80 66.88 ----- 17.3 22.4 304.2 32.9 30.7 -15.4 29.9 -14.0 29.5 -12.7 30.4 -15.1
2026-02-11T13:19:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:19:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:19:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.472018
2026-02-11T13:19:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:19:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:19:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:19:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:19:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:19:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:19:18', tmtdew=15.5, humidity=37.4, cloud=0.0, wind=27.58, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:19:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:19:53.276 [DEBUG] [Thread-129655] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:19:53.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:19:53.382 [DEBUG] [Thread-129658] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff10
2026-02-11T13:19:53.382 [DEBUG] [Thread-129658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:19:53.396 [DEBUG] [Thread-129658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:19:53.396 [INFO] [Thread-129658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:19:53.403 [DEBUG] [Thread-129658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:19:53.403 [DEBUG] [Thread-129658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] client lang: <none>
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] server lang: <none>
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] kex follows: False
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] Compression: none
2026-02-11T13:19:53.404 [DEBUG] [Thread-129658] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:19:53.463 [DEBUG] [Thread-129658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:19:53.464 [DEBUG] [Thread-129658] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:19:53.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:19:53.465 [DEBUG] [Thread-129658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:19:53.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:19:53.519 [DEBUG] [Thread-129658] [transport.py] [_log()] userauth is OK
2026-02-11T13:19:53.519 [DEBUG] [Thread-129658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:19:53.519 [DEBUG] [Thread-129658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:19:53.520 [DEBUG] [Thread-129658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:19:53.520 [DEBUG] [Thread-129658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:19:53.537 [INFO] [Thread-129658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:19:53.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:19:53.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:19:54.416 [DEBUG] [Thread-129658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:19:54.417 [DEBUG] [Thread-129658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:19:54.464 [DEBUG] [Thread-129658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:19:54.464 [DEBUG] [Thread-129658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:19:54.474 [DEBUG] [Thread-129658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:19:54.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:19:54.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:19:54.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:19:54.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:19:54.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:19:54.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:19:54.510 [DEBUG] [Thread-129658] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:20:04.997 [DEBUG] [Thread-129660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:20:15.302 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:20:15.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:20:16.597 [DEBUG] [Thread-129661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:20:20.049 [DEBUG] [Thread-129662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:20:24.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:20:24.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:20:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:20:26.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 19, 54), 15.96, 36.27, 0.0, 21.21, 24.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:20:26.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:19:54
2026-02-11T13:20:26.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:20:27.011 [DEBUG] [Thread-129663] [transport.py] [_log()] starting thread (client mode): 0xa2d1a800
2026-02-11T13:20:27.012 [DEBUG] [Thread-129663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:20:27.032 [DEBUG] [Thread-129663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:20:27.032 [INFO] [Thread-129663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:20:27.035 [DEBUG] [Thread-129663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] client lang: <none>
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] server lang: <none>
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] kex follows: False
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] Compression: none
2026-02-11T13:20:27.036 [DEBUG] [Thread-129663] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:20:27.053 [DEBUG] [Thread-129663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:20:27.053 [DEBUG] [Thread-129663] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:20:27.054 [DEBUG] [Thread-129663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:20:27.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:20:27.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:20:27.056 [DEBUG] [Thread-129663] [transport.py] [_log()] userauth is OK
2026-02-11T13:20:27.056 [DEBUG] [Thread-129663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:20:27.056 [DEBUG] [Thread-129663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:20:27.057 [DEBUG] [Thread-129663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:20:27.057 [DEBUG] [Thread-129663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:20:27.081 [INFO] [Thread-129663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:20:27.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:20:27.714 [DEBUG] [Thread-129663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:20:27.714 [DEBUG] [Thread-129663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:20:27.715 [DEBUG] [Thread-129663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:20:27.756 [DEBUG] [Thread-129663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:20:27.756 [DEBUG] [Thread-129663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:20:27.759 [DEBUG] [Thread-129663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:20:27.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:20:27.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:20:27.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:20:27.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:20:27.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:20:27.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:20:27.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:20:27.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:20:27.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:20:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.472365 -999.00  +24.40  22.17     41  +10.40 1 2 1 1 1   888    0 14.81 67.70 ----- 20.5 22.2 329.0 30.5 30.9 -14.1 30.1 -11.9 29.6 -10.9 30.6 -13.3
2026-02-11T13:20:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:20:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:20:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.472365
2026-02-11T13:20:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:20:27.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:20:27.786 [DEBUG] [Thread-129663] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:20:27.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:20:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:20:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:20:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:19:54', tmtdew=15.96, humidity=36.27, cloud=0.0, wind=21.21, temperature=24.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:20:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:20:27.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:20:27.884 [DEBUG] [Thread-129666] [transport.py] [_log()] starting thread (client mode): 0xa2d6d600
2026-02-11T13:20:27.884 [DEBUG] [Thread-129666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:20:27.903 [DEBUG] [Thread-129666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:20:27.904 [INFO] [Thread-129666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:20:27.916 [DEBUG] [Thread-129666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:20:27.916 [DEBUG] [Thread-129666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:20:27.916 [DEBUG] [Thread-129666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] client lang: <none>
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] server lang: <none>
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] kex follows: False
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:20:27.917 [DEBUG] [Thread-129666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:20:27.918 [DEBUG] [Thread-129666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:20:27.918 [DEBUG] [Thread-129666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:20:27.918 [DEBUG] [Thread-129666] [transport.py] [_log()] Compression: none
2026-02-11T13:20:27.918 [DEBUG] [Thread-129666] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:20:27.985 [DEBUG] [Thread-129666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:20:27.986 [DEBUG] [Thread-129666] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:20:27.986 [DEBUG] [Thread-129666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:20:27.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:20:27.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:20:28.052 [DEBUG] [Thread-129666] [transport.py] [_log()] userauth is OK
2026-02-11T13:20:28.052 [DEBUG] [Thread-129666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:20:28.053 [DEBUG] [Thread-129666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:20:28.053 [DEBUG] [Thread-129666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:20:28.053 [DEBUG] [Thread-129666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:20:28.077 [INFO] [Thread-129666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:20:28.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:20:28.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:20:28.929 [DEBUG] [Thread-129666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:20:28.929 [DEBUG] [Thread-129666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:20:28.977 [DEBUG] [Thread-129666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:20:28.977 [DEBUG] [Thread-129666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:20:28.987 [DEBUG] [Thread-129666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:20:28.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:20:28.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:20:29.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:20:29.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:20:29.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:20:29.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:20:29.026 [DEBUG] [Thread-129666] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:20:35.085 [DEBUG] [Thread-129668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:20:50.138 [DEBUG] [Thread-129669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:20:59.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:20:59.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:20:59.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:21:00.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 20, 30), 15.84, 36.48, 0.0, 19.27, 24.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:21:00.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:20:30
2026-02-11T13:21:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:21:01.508 [DEBUG] [Thread-129670] [transport.py] [_log()] starting thread (client mode): 0xa2d102e0
2026-02-11T13:21:01.508 [DEBUG] [Thread-129670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:21:01.528 [DEBUG] [Thread-129670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:21:01.529 [INFO] [Thread-129670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:21:01.531 [DEBUG] [Thread-129670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] client lang: <none>
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] server lang: <none>
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] kex follows: False
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] Compression: none
2026-02-11T13:21:01.532 [DEBUG] [Thread-129670] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:21:01.550 [DEBUG] [Thread-129670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:21:01.551 [DEBUG] [Thread-129670] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:21:01.551 [DEBUG] [Thread-129670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:21:01.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:21:01.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:21:01.553 [DEBUG] [Thread-129670] [transport.py] [_log()] userauth is OK
2026-02-11T13:21:01.553 [DEBUG] [Thread-129670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:21:01.553 [DEBUG] [Thread-129670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:21:01.553 [DEBUG] [Thread-129670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:21:01.553 [DEBUG] [Thread-129670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:21:01.579 [INFO] [Thread-129670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:21:01.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:21:02.212 [DEBUG] [Thread-129670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:21:02.213 [DEBUG] [Thread-129670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:21:02.213 [DEBUG] [Thread-129670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:21:02.254 [DEBUG] [Thread-129670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:21:02.254 [DEBUG] [Thread-129670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:21:02.257 [DEBUG] [Thread-129670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:21:02.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:21:02.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:21:02.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:21:02.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:21:02.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:21:02.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:21:02.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:21:02.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:21:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:21:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.472713 -999.00  +24.00  27.50     41  +10.20 1 2 1 1 1   888    0 14.67 70.04 ----- 26.7 27.5 299.8 33.0 31.1 -14.8 30.3 -13.2 29.9 -11.6 30.8 -14.1
2026-02-11T13:21:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:21:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:21:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.472713
2026-02-11T13:21:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:21:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:21:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:21:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:21:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:21:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:20:30', tmtdew=15.84, humidity=36.48, cloud=0.0, wind=19.27, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:20:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:21:02.282 [DEBUG] [Thread-129670] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:21:02.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:21:02.388 [DEBUG] [Thread-129673] [transport.py] [_log()] starting thread (client mode): 0xa2d11150
2026-02-11T13:21:02.388 [DEBUG] [Thread-129673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:21:02.403 [DEBUG] [Thread-129673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:21:02.403 [INFO] [Thread-129673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:21:02.411 [DEBUG] [Thread-129673] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:21:02.411 [DEBUG] [Thread-129673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:21:02.411 [DEBUG] [Thread-129673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:21:02.411 [DEBUG] [Thread-129673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] client lang: <none>
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] server lang: <none>
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] kex follows: False
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:21:02.412 [DEBUG] [Thread-129673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:21:02.413 [DEBUG] [Thread-129673] [transport.py] [_log()] Compression: none
2026-02-11T13:21:02.413 [DEBUG] [Thread-129673] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:21:02.467 [DEBUG] [Thread-129673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:21:02.468 [DEBUG] [Thread-129673] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:21:02.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:21:02.469 [DEBUG] [Thread-129673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:21:02.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:21:02.524 [DEBUG] [Thread-129673] [transport.py] [_log()] userauth is OK
2026-02-11T13:21:02.524 [DEBUG] [Thread-129673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:21:02.524 [DEBUG] [Thread-129673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:21:02.524 [DEBUG] [Thread-129673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:21:02.524 [DEBUG] [Thread-129673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:21:02.544 [INFO] [Thread-129673] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:21:02.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:21:02.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:21:03.379 [DEBUG] [Thread-129673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:21:03.380 [DEBUG] [Thread-129673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:21:03.427 [DEBUG] [Thread-129673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:21:03.428 [DEBUG] [Thread-129673] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:21:03.438 [DEBUG] [Thread-129673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:21:03.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:21:03.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:21:03.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:21:03.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:21:03.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:21:03.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:21:03.475 [DEBUG] [Thread-129673] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:21:05.173 [DEBUG] [Thread-129675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:21:15.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:21:15.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:21:16.642 [DEBUG] [Thread-129676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:21:20.224 [DEBUG] [Thread-129677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:21:33.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:21:33.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:21:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:21:35.260 [DEBUG] [Thread-129678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:21:35.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 21, 5), 15.8, 36.58, 0.0, 20.27, 24.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:21:35.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:21:05
2026-02-11T13:21:35.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:21:36.143 [DEBUG] [Thread-129679] [transport.py] [_log()] starting thread (client mode): 0xa2d13c40
2026-02-11T13:21:36.143 [DEBUG] [Thread-129679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:21:36.164 [DEBUG] [Thread-129679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:21:36.164 [INFO] [Thread-129679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:21:36.165 [DEBUG] [Thread-129679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:21:36.165 [DEBUG] [Thread-129679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:21:36.165 [DEBUG] [Thread-129679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:21:36.165 [DEBUG] [Thread-129679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:36.165 [DEBUG] [Thread-129679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:36.165 [DEBUG] [Thread-129679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:36.165 [DEBUG] [Thread-129679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] client lang: <none>
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] server lang: <none>
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] kex follows: False
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] Compression: none
2026-02-11T13:21:36.166 [DEBUG] [Thread-129679] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:21:36.176 [DEBUG] [Thread-129679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:21:36.176 [DEBUG] [Thread-129679] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:21:36.177 [DEBUG] [Thread-129679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:21:36.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:21:36.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:21:36.178 [DEBUG] [Thread-129679] [transport.py] [_log()] userauth is OK
2026-02-11T13:21:36.178 [DEBUG] [Thread-129679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:21:36.179 [DEBUG] [Thread-129679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:21:36.179 [DEBUG] [Thread-129679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:21:36.179 [DEBUG] [Thread-129679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:21:36.197 [INFO] [Thread-129679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:21:36.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:21:36.794 [DEBUG] [Thread-129679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:21:36.794 [DEBUG] [Thread-129679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:21:36.795 [DEBUG] [Thread-129679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:21:36.836 [DEBUG] [Thread-129679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:21:36.836 [DEBUG] [Thread-129679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:21:36.839 [DEBUG] [Thread-129679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:21:36.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:21:36.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:21:36.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:21:36.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:21:36.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:21:36.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:21:36.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:21:36.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:21:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:21:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.473060 -999.00  +24.20  22.87     42  +10.60 1 2 1 1 1   888    0 14.74 71.07 ----- 21.1 22.9 301.4 29.7 31.1 -13.7 30.3 -12.1 29.8 -11.0 30.9 -14.0
2026-02-11T13:21:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:21:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:21:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.473060
2026-02-11T13:21:36.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:21:36.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:21:36.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:21:36.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:21:36.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:21:36.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:21:05', tmtdew=15.8, humidity=36.58, cloud=0.0, wind=20.27, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:21:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:21:36.863 [DEBUG] [Thread-129679] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:21:36.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:21:36.959 [DEBUG] [Thread-129682] [transport.py] [_log()] starting thread (client mode): 0xa2d6f7c0
2026-02-11T13:21:36.959 [DEBUG] [Thread-129682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:21:36.973 [DEBUG] [Thread-129682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:21:36.973 [INFO] [Thread-129682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:21:36.981 [DEBUG] [Thread-129682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:21:36.981 [DEBUG] [Thread-129682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] client lang: <none>
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] server lang: <none>
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] kex follows: False
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] Compression: none
2026-02-11T13:21:36.982 [DEBUG] [Thread-129682] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:21:37.042 [DEBUG] [Thread-129682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:21:37.042 [DEBUG] [Thread-129682] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:21:37.042 [DEBUG] [Thread-129682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:21:37.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:21:37.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:21:37.099 [DEBUG] [Thread-129682] [transport.py] [_log()] userauth is OK
2026-02-11T13:21:37.099 [DEBUG] [Thread-129682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:21:37.099 [DEBUG] [Thread-129682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:21:37.100 [DEBUG] [Thread-129682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:21:37.100 [DEBUG] [Thread-129682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:21:37.123 [INFO] [Thread-129682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:21:37.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:21:37.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:21:37.951 [DEBUG] [Thread-129682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:21:37.951 [DEBUG] [Thread-129682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:21:37.999 [DEBUG] [Thread-129682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:21:37.999 [DEBUG] [Thread-129682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:21:38.008 [DEBUG] [Thread-129682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:21:38.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:21:38.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:21:38.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:21:38.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:21:38.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:21:38.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:21:38.043 [DEBUG] [Thread-129682] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:21:50.299 [DEBUG] [Thread-129684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:22:05.352 [DEBUG] [Thread-129685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:22:08.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:22:08.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:22:08.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:22:10.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 21, 41), 17.07, 33.8, 0.0, 27.52, 25.45, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:22:10.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:21:41
2026-02-11T13:22:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:22:10.535 [DEBUG] [Thread-129686] [transport.py] [_log()] starting thread (client mode): 0xa2d6faf0
2026-02-11T13:22:10.535 [DEBUG] [Thread-129686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:22:10.550 [DEBUG] [Thread-129686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:22:10.550 [INFO] [Thread-129686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:22:10.553 [DEBUG] [Thread-129686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] client lang: <none>
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] server lang: <none>
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] kex follows: False
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] Compression: none
2026-02-11T13:22:10.554 [DEBUG] [Thread-129686] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:22:10.572 [DEBUG] [Thread-129686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:22:10.573 [DEBUG] [Thread-129686] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:22:10.573 [DEBUG] [Thread-129686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:22:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:22:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:22:10.575 [DEBUG] [Thread-129686] [transport.py] [_log()] userauth is OK
2026-02-11T13:22:10.575 [DEBUG] [Thread-129686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:22:10.576 [DEBUG] [Thread-129686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:22:10.576 [DEBUG] [Thread-129686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:22:10.576 [DEBUG] [Thread-129686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:22:10.595 [INFO] [Thread-129686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:22:10.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:22:11.219 [DEBUG] [Thread-129686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:22:11.219 [DEBUG] [Thread-129686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:22:11.220 [DEBUG] [Thread-129686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:22:11.260 [DEBUG] [Thread-129686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:22:11.261 [DEBUG] [Thread-129686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:22:11.264 [DEBUG] [Thread-129686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:22:11.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:22:11.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:22:11.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:22:11.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:22:11.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:22:11.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:22:11.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:22:11.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:22:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:22:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.473407 -999.00  +24.20  25.78     42  +10.50 1 2 1 1 1   888    0 14.98 68.27 ----- 21.7 25.8 303.8 29.7 30.6 -21.4 29.8 -16.9 29.5 -20.0 30.2 -20.0
2026-02-11T13:22:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:22:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:22:11.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.473407
2026-02-11T13:22:11.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:22:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:22:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:22:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:22:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:22:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:21:41', tmtdew=17.07, humidity=33.8, cloud=0.0, wind=27.52, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:21:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:22:11.288 [DEBUG] [Thread-129686] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:22:11.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:22:11.383 [DEBUG] [Thread-129689] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff10
2026-02-11T13:22:11.383 [DEBUG] [Thread-129689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:22:11.398 [DEBUG] [Thread-129689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:22:11.398 [INFO] [Thread-129689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] client lang: <none>
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] server lang: <none>
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] kex follows: False
2026-02-11T13:22:11.405 [DEBUG] [Thread-129689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:22:11.406 [DEBUG] [Thread-129689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:22:11.406 [DEBUG] [Thread-129689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:22:11.406 [DEBUG] [Thread-129689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:22:11.406 [DEBUG] [Thread-129689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:22:11.406 [DEBUG] [Thread-129689] [transport.py] [_log()] Compression: none
2026-02-11T13:22:11.406 [DEBUG] [Thread-129689] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:22:11.466 [DEBUG] [Thread-129689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:22:11.466 [DEBUG] [Thread-129689] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:22:11.466 [DEBUG] [Thread-129689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:22:11.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:22:11.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:22:11.524 [DEBUG] [Thread-129689] [transport.py] [_log()] userauth is OK
2026-02-11T13:22:11.524 [DEBUG] [Thread-129689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:22:11.524 [DEBUG] [Thread-129689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:22:11.524 [DEBUG] [Thread-129689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:22:11.524 [DEBUG] [Thread-129689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:22:11.543 [INFO] [Thread-129689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:22:11.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:22:11.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:22:12.343 [DEBUG] [Thread-129689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:22:12.344 [DEBUG] [Thread-129689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:22:12.391 [DEBUG] [Thread-129689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:22:12.391 [DEBUG] [Thread-129689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:22:12.401 [DEBUG] [Thread-129689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:22:12.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:22:12.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:22:12.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:22:12.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:22:12.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:22:12.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:22:12.438 [DEBUG] [Thread-129689] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:22:15.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:22:15.587 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:22:16.675 [DEBUG] [Thread-129691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:22:20.388 [DEBUG] [Thread-129692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:22:35.428 [DEBUG] [Thread-129693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:22:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:22:42.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:22:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:22:44.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 22, 16), 15.96, 35.96, 0.0, 18.17, 24.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:22:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:22:16
2026-02-11T13:22:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:22:44.908 [DEBUG] [Thread-129694] [transport.py] [_log()] starting thread (client mode): 0xa2d02650
2026-02-11T13:22:44.908 [DEBUG] [Thread-129694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:22:44.933 [DEBUG] [Thread-129694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:22:44.933 [INFO] [Thread-129694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:22:44.936 [DEBUG] [Thread-129694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] client lang: <none>
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] server lang: <none>
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] kex follows: False
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] Compression: none
2026-02-11T13:22:44.937 [DEBUG] [Thread-129694] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:22:44.955 [DEBUG] [Thread-129694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:22:44.955 [DEBUG] [Thread-129694] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:22:44.956 [DEBUG] [Thread-129694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:22:44.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:22:44.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:22:44.958 [DEBUG] [Thread-129694] [transport.py] [_log()] userauth is OK
2026-02-11T13:22:44.958 [DEBUG] [Thread-129694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:22:44.959 [DEBUG] [Thread-129694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:22:44.959 [DEBUG] [Thread-129694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:22:44.959 [DEBUG] [Thread-129694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:22:44.976 [INFO] [Thread-129694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:22:44.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:22:45.570 [DEBUG] [Thread-129694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:22:45.570 [DEBUG] [Thread-129694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:22:45.570 [DEBUG] [Thread-129694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:22:45.611 [DEBUG] [Thread-129694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:22:45.612 [DEBUG] [Thread-129694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:22:45.615 [DEBUG] [Thread-129694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:22:45.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:22:45.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:22:45.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:22:45.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:22:45.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:22:45.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:22:45.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:22:45.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:22:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:22:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.473754 -999.00  +23.90  26.06     42  +10.40 1 2 1 1 1   888    0 14.99 69.20 ----- 22.0 26.1 308.2 31.4 30.2 -20.3 29.6 -16.7 29.1 -18.0 29.9 -20.3
2026-02-11T13:22:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:22:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:22:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.473754
2026-02-11T13:22:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:22:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:22:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:22:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:22:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:22:45.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:22:16', tmtdew=15.96, humidity=35.96, cloud=0.0, wind=18.17, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:22:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:22:45.643 [DEBUG] [Thread-129694] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:22:45.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:22:45.737 [DEBUG] [Thread-129697] [transport.py] [_log()] starting thread (client mode): 0xa2d00100
2026-02-11T13:22:45.738 [DEBUG] [Thread-129697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:22:45.756 [DEBUG] [Thread-129697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:22:45.756 [INFO] [Thread-129697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] client lang: <none>
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] server lang: <none>
2026-02-11T13:22:45.764 [DEBUG] [Thread-129697] [transport.py] [_log()] kex follows: False
2026-02-11T13:22:45.765 [DEBUG] [Thread-129697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:22:45.765 [DEBUG] [Thread-129697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:22:45.765 [DEBUG] [Thread-129697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:22:45.765 [DEBUG] [Thread-129697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:22:45.765 [DEBUG] [Thread-129697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:22:45.765 [DEBUG] [Thread-129697] [transport.py] [_log()] Compression: none
2026-02-11T13:22:45.765 [DEBUG] [Thread-129697] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:22:45.824 [DEBUG] [Thread-129697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:22:45.824 [DEBUG] [Thread-129697] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:22:45.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:22:45.826 [DEBUG] [Thread-129697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:22:45.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:22:45.880 [DEBUG] [Thread-129697] [transport.py] [_log()] userauth is OK
2026-02-11T13:22:45.880 [DEBUG] [Thread-129697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:22:45.880 [DEBUG] [Thread-129697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:22:45.880 [DEBUG] [Thread-129697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:22:45.881 [DEBUG] [Thread-129697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:22:45.905 [INFO] [Thread-129697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:22:45.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:22:45.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:22:46.732 [DEBUG] [Thread-129697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:22:46.733 [DEBUG] [Thread-129697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:22:46.781 [DEBUG] [Thread-129697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:22:46.781 [DEBUG] [Thread-129697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:22:46.789 [DEBUG] [Thread-129697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:22:46.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:22:46.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:22:46.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:22:46.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:22:46.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:22:46.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:22:46.822 [DEBUG] [Thread-129697] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:22:50.466 [DEBUG] [Thread-129699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:05.515 [DEBUG] [Thread-129700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:15.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:15.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:16.717 [DEBUG] [Thread-129701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:23:16.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:23:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:23:18.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 22, 52), 16.09, 35.63, 0.0, 25.71, 24.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:23:18.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:22:52
2026-02-11T13:23:19.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:23:19.355 [DEBUG] [Thread-129702] [transport.py] [_log()] starting thread (client mode): 0xa2d01db0
2026-02-11T13:23:19.355 [DEBUG] [Thread-129702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:23:19.375 [DEBUG] [Thread-129702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:23:19.375 [INFO] [Thread-129702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:23:19.378 [DEBUG] [Thread-129702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] client lang: <none>
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] server lang: <none>
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] kex follows: False
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:23:19.379 [DEBUG] [Thread-129702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:23:19.380 [DEBUG] [Thread-129702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:23:19.380 [DEBUG] [Thread-129702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:23:19.380 [DEBUG] [Thread-129702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:23:19.380 [DEBUG] [Thread-129702] [transport.py] [_log()] Compression: none
2026-02-11T13:23:19.380 [DEBUG] [Thread-129702] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:23:19.392 [DEBUG] [Thread-129702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:23:19.393 [DEBUG] [Thread-129702] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:23:19.393 [DEBUG] [Thread-129702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:23:19.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:23:19.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:23:19.437 [DEBUG] [Thread-129702] [transport.py] [_log()] userauth is OK
2026-02-11T13:23:19.437 [DEBUG] [Thread-129702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:23:19.437 [DEBUG] [Thread-129702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:23:19.437 [DEBUG] [Thread-129702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:23:19.438 [DEBUG] [Thread-129702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:23:19.471 [INFO] [Thread-129702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:23:19.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:23:20.076 [DEBUG] [Thread-129702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:23:20.076 [DEBUG] [Thread-129702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:23:20.077 [DEBUG] [Thread-129702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:23:20.117 [DEBUG] [Thread-129702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:23:20.117 [DEBUG] [Thread-129702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:23:20.120 [DEBUG] [Thread-129702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:23:20.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:23:20.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:23:20.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:23:20.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:23:20.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:23:20.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:23:20.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:23:20.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:23:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:23:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.474102 -999.00  +23.60  38.66     42  +10.10 1 2 2 1 1   888    0 15.04 72.12 ----- 36.3 38.7 298.4 47.3 29.9 -22.0 29.2 -18.4 28.9 -20.0 29.5 -21.8
2026-02-11T13:23:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:23:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:23:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.474102
2026-02-11T13:23:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:23:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:23:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:23:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:23:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:23:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:22:52', tmtdew=16.09, humidity=35.63, cloud=0.0, wind=25.71, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:22:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:23:20.145 [DEBUG] [Thread-129702] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:23:20.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:23:20.242 [DEBUG] [Thread-129705] [transport.py] [_log()] starting thread (client mode): 0xa2db5540
2026-02-11T13:23:20.242 [DEBUG] [Thread-129705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:23:20.257 [DEBUG] [Thread-129705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:23:20.257 [INFO] [Thread-129705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:23:20.264 [DEBUG] [Thread-129705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:23:20.265 [DEBUG] [Thread-129705] [transport.py] [_log()] client lang: <none>
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] server lang: <none>
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] kex follows: False
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] Compression: none
2026-02-11T13:23:20.266 [DEBUG] [Thread-129705] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:23:20.322 [DEBUG] [Thread-129705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:23:20.322 [DEBUG] [Thread-129705] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:23:20.323 [DEBUG] [Thread-129705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:23:20.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:23:20.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:23:20.379 [DEBUG] [Thread-129705] [transport.py] [_log()] userauth is OK
2026-02-11T13:23:20.379 [DEBUG] [Thread-129705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:23:20.379 [DEBUG] [Thread-129705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:23:20.379 [DEBUG] [Thread-129705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:23:20.379 [DEBUG] [Thread-129705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:23:20.393 [INFO] [Thread-129705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:23:20.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:23:20.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:23:20.552 [DEBUG] [Thread-129707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:21.218 [DEBUG] [Thread-129705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:23:21.218 [DEBUG] [Thread-129705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:23:21.266 [DEBUG] [Thread-129705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:23:21.266 [DEBUG] [Thread-129705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:23:21.276 [DEBUG] [Thread-129705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:23:21.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:23:21.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')
2026-02-11T13:23: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') -> 00000000
2026-02-11T13:23:21.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:23:21.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:23:21.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:23:21.313 [DEBUG] [Thread-129705] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:23:35.614 [DEBUG] [Thread-129708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:50.654 [DEBUG] [Thread-129709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:23:51.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:23:51.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:23:51.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:23:53.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 23, 27), 16.44, 34.9, 0.0, 31.48, 24.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:23:53.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:23:27
2026-02-11T13:23:54.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:23:54.266 [DEBUG] [Thread-129710] [transport.py] [_log()] starting thread (client mode): 0xa2db4d00
2026-02-11T13:23:54.267 [DEBUG] [Thread-129710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:23:54.288 [DEBUG] [Thread-129710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:23:54.288 [INFO] [Thread-129710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] client lang: <none>
2026-02-11T13:23:54.292 [DEBUG] [Thread-129710] [transport.py] [_log()] server lang: <none>
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] kex follows: False
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] Compression: none
2026-02-11T13:23:54.293 [DEBUG] [Thread-129710] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:23:54.312 [DEBUG] [Thread-129710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:23:54.313 [DEBUG] [Thread-129710] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:23:54.314 [DEBUG] [Thread-129710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:23:54.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:23:54.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:23:54.316 [DEBUG] [Thread-129710] [transport.py] [_log()] userauth is OK
2026-02-11T13:23:54.317 [DEBUG] [Thread-129710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:23:54.317 [DEBUG] [Thread-129710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:23:54.317 [DEBUG] [Thread-129710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:23:54.317 [DEBUG] [Thread-129710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:23:54.343 [INFO] [Thread-129710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:23:54.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:23:54.973 [DEBUG] [Thread-129710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:23:54.973 [DEBUG] [Thread-129710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:23:54.973 [DEBUG] [Thread-129710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:23:55.014 [DEBUG] [Thread-129710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:23:55.014 [DEBUG] [Thread-129710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:23:55.018 [DEBUG] [Thread-129710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:23:55.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:23:55.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:23:55.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:23:55.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:23:55.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:23:55.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:23:55.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:23:55.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:23:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:23:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.474449 -999.00  +23.50  27.25     43  +10.30 1 2 1 1 1   888    0 15.09 70.18 ----- 31.5 27.2 300.8 35.0 29.9 -14.8 29.5 -13.5 28.9 -13.2 29.7 -14.5
2026-02-11T13:23:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:23:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:23:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.474449
2026-02-11T13:23:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:23:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:23:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:23:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:23:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:23:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:23:27', tmtdew=16.44, humidity=34.9, cloud=0.0, wind=31.48, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:23:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:23:55.046 [DEBUG] [Thread-129710] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:23:55.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:23:55.142 [DEBUG] [Thread-129713] [transport.py] [_log()] starting thread (client mode): 0xa2db4610
2026-02-11T13:23:55.143 [DEBUG] [Thread-129713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:23:55.158 [DEBUG] [Thread-129713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:23:55.158 [INFO] [Thread-129713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:23:55.165 [DEBUG] [Thread-129713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] client lang: <none>
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] server lang: <none>
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] kex follows: False
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:23:55.166 [DEBUG] [Thread-129713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:23:55.167 [DEBUG] [Thread-129713] [transport.py] [_log()] Compression: none
2026-02-11T13:23:55.167 [DEBUG] [Thread-129713] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:23:55.223 [DEBUG] [Thread-129713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:23:55.224 [DEBUG] [Thread-129713] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:23:55.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:23:55.225 [DEBUG] [Thread-129713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:23:55.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:23:55.280 [DEBUG] [Thread-129713] [transport.py] [_log()] userauth is OK
2026-02-11T13:23:55.280 [DEBUG] [Thread-129713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:23:55.281 [DEBUG] [Thread-129713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:23:55.281 [DEBUG] [Thread-129713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:23:55.281 [DEBUG] [Thread-129713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:23:55.300 [INFO] [Thread-129713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:23:55.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:23:55.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:23:56.126 [DEBUG] [Thread-129713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:23:56.127 [DEBUG] [Thread-129713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:23:56.175 [DEBUG] [Thread-129713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:23:56.176 [DEBUG] [Thread-129713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:23:56.187 [DEBUG] [Thread-129713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:23:56.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:23:56.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:23:56.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:23:56.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:23:56.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:23:56.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:23:56.233 [DEBUG] [Thread-129713] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:24:05.691 [DEBUG] [Thread-129715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:24:15.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:24:15.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:24:16.746 [DEBUG] [Thread-129716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:24:20.753 [DEBUG] [Thread-129717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:24:26.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:24:26.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:24:26.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
2026-02-11T13:24:28.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 24, 2), 16.47, 34.84, 0.0, 28.94, 24.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:24:28.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:24:02
2026-02-11T13:24:28.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:24:28.732 [DEBUG] [Thread-129718] [transport.py] [_log()] starting thread (client mode): 0xa2d037c0
2026-02-11T13:24:28.732 [DEBUG] [Thread-129718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:24:28.752 [DEBUG] [Thread-129718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:24:28.752 [INFO] [Thread-129718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] client lang: <none>
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] server lang: <none>
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] kex follows: False
2026-02-11T13:24:28.753 [DEBUG] [Thread-129718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:24:28.754 [DEBUG] [Thread-129718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:24:28.754 [DEBUG] [Thread-129718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:24:28.754 [DEBUG] [Thread-129718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:24:28.754 [DEBUG] [Thread-129718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:24:28.754 [DEBUG] [Thread-129718] [transport.py] [_log()] Compression: none
2026-02-11T13:24:28.754 [DEBUG] [Thread-129718] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:24:28.771 [DEBUG] [Thread-129718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:24:28.772 [DEBUG] [Thread-129718] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:24:28.773 [DEBUG] [Thread-129718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:24:28.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:24:28.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:24:28.776 [DEBUG] [Thread-129718] [transport.py] [_log()] userauth is OK
2026-02-11T13:24:28.776 [DEBUG] [Thread-129718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:24:28.776 [DEBUG] [Thread-129718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:24:28.777 [DEBUG] [Thread-129718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:24:28.777 [DEBUG] [Thread-129718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:24:28.802 [INFO] [Thread-129718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:24:28.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:24:29.472 [DEBUG] [Thread-129718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:24:29.473 [DEBUG] [Thread-129718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:24:29.473 [DEBUG] [Thread-129718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:24:29.513 [DEBUG] [Thread-129718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:24:29.513 [DEBUG] [Thread-129718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:24:29.517 [DEBUG] [Thread-129718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:24:29.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:24:29.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:24:29.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:24:29.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:24:29.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:24:29.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:24:29.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:24:29.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:24:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:24:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.474796 -999.00  +23.90  27.30     42  +10.40 1 2 1 1 1   888    0 14.86 66.27 ----- 22.9 27.3 309.4 31.9 30.2 -15.1 29.6 -14.4 29.1 -13.0 29.9 -15.6
2026-02-11T13:24:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:24:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:24:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.474796
2026-02-11T13:24:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:24:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:24:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:24:29.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:24:29.545 [DEBUG] [Thread-129718] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:24:29.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:24:29.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:24:02', tmtdew=16.47, humidity=34.84, cloud=0.0, wind=28.94, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:23:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:24:29.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:24:29.641 [DEBUG] [Thread-129721] [transport.py] [_log()] starting thread (client mode): 0xa81d7a90
2026-02-11T13:24:29.641 [DEBUG] [Thread-129721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:24:29.656 [DEBUG] [Thread-129721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:24:29.656 [INFO] [Thread-129721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:24:29.663 [DEBUG] [Thread-129721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:24:29.664 [DEBUG] [Thread-129721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:24:29.664 [DEBUG] [Thread-129721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:24:29.664 [DEBUG] [Thread-129721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:24:29.664 [DEBUG] [Thread-129721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] client lang: <none>
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] server lang: <none>
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] kex follows: False
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] Compression: none
2026-02-11T13:24:29.665 [DEBUG] [Thread-129721] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:24:29.727 [DEBUG] [Thread-129721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:24:29.728 [DEBUG] [Thread-129721] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:24:29.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:24:29.729 [DEBUG] [Thread-129721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:24:29.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:24:29.784 [DEBUG] [Thread-129721] [transport.py] [_log()] userauth is OK
2026-02-11T13:24:29.784 [DEBUG] [Thread-129721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:24:29.784 [DEBUG] [Thread-129721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:24:29.784 [DEBUG] [Thread-129721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:24:29.785 [DEBUG] [Thread-129721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:24:29.803 [INFO] [Thread-129721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:24:29.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:24:29.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:24:30.657 [DEBUG] [Thread-129721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:24:30.657 [DEBUG] [Thread-129721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:24:30.705 [DEBUG] [Thread-129721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:24:30.706 [DEBUG] [Thread-129721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:24:30.715 [DEBUG] [Thread-129721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:24:30.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:24:30.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:24: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
2026-02-11T13:24:30.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:24:30.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:24:30.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:24:30.752 [DEBUG] [Thread-129721] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:24:35.792 [DEBUG] [Thread-129723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:24:50.847 [DEBUG] [Thread-129724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:25:00.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:25:00.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:25:00.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:25:02.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 24, 38), 17.57, 32.88, 0.0, 23.29, 26.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:25:02.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:24:38
2026-02-11T13:25:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:25:03.245 [DEBUG] [Thread-129725] [transport.py] [_log()] starting thread (client mode): 0xa2d03310
2026-02-11T13:25:03.245 [DEBUG] [Thread-129725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:25:03.264 [DEBUG] [Thread-129725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:25:03.265 [INFO] [Thread-129725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] client lang: <none>
2026-02-11T13:25:03.268 [DEBUG] [Thread-129725] [transport.py] [_log()] server lang: <none>
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] kex follows: False
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] Compression: none
2026-02-11T13:25:03.269 [DEBUG] [Thread-129725] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:25:03.277 [DEBUG] [Thread-129725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:25:03.278 [DEBUG] [Thread-129725] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:25:03.278 [DEBUG] [Thread-129725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:25:03.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:25:03.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:25:03.280 [DEBUG] [Thread-129725] [transport.py] [_log()] userauth is OK
2026-02-11T13:25:03.280 [DEBUG] [Thread-129725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:25:03.280 [DEBUG] [Thread-129725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:25:03.280 [DEBUG] [Thread-129725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:25:03.280 [DEBUG] [Thread-129725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:25:03.298 [INFO] [Thread-129725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:25:03.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:25:04.031 [DEBUG] [Thread-129725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:25:04.032 [DEBUG] [Thread-129725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:25:04.032 [DEBUG] [Thread-129725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:25:04.072 [DEBUG] [Thread-129725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:25:04.073 [DEBUG] [Thread-129725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:25:04.076 [DEBUG] [Thread-129725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:25:04.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:25:04.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:25:04.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:25:04.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:25:04.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:25:04.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:25:04.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:25:04.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:25:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:25:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.475143 -999.00  +24.10  23.05     42  +10.40 1 2 1 1 1   888    0 15.00 68.71 ----- 25.2 23.1 275.8 30.7 30.4 -16.1 29.8 -13.8 29.4 -16.6 30.1 -15.2
2026-02-11T13:25:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:25:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:25:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.475143
2026-02-11T13:25:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:25:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:25:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:25:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:25:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:25:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:24:38', tmtdew=17.57, humidity=32.88, cloud=0.0, wind=23.29, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:24:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:25:04.129 [DEBUG] [Thread-129725] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:25:04.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:25:04.229 [DEBUG] [Thread-129728] [transport.py] [_log()] starting thread (client mode): 0xa2d011b0
2026-02-11T13:25:04.229 [DEBUG] [Thread-129728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:25:04.248 [DEBUG] [Thread-129728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:25:04.249 [INFO] [Thread-129728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:25:04.259 [DEBUG] [Thread-129728] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] client lang: <none>
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] server lang: <none>
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] kex follows: False
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:25:04.260 [DEBUG] [Thread-129728] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:25:04.261 [DEBUG] [Thread-129728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:25:04.261 [DEBUG] [Thread-129728] [transport.py] [_log()] Compression: none
2026-02-11T13:25:04.261 [DEBUG] [Thread-129728] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:25:04.322 [DEBUG] [Thread-129728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:25:04.323 [DEBUG] [Thread-129728] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:25:04.323 [DEBUG] [Thread-129728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:25:04.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:25:04.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:25:04.386 [DEBUG] [Thread-129728] [transport.py] [_log()] userauth is OK
2026-02-11T13:25:04.386 [DEBUG] [Thread-129728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:25:04.387 [DEBUG] [Thread-129728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:25:04.387 [DEBUG] [Thread-129728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:25:04.387 [DEBUG] [Thread-129728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:25:04.408 [INFO] [Thread-129728] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:25:04.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:25:04.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:25:05.230 [DEBUG] [Thread-129728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:25:05.230 [DEBUG] [Thread-129728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:25:05.278 [DEBUG] [Thread-129728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:25:05.279 [DEBUG] [Thread-129728] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:25:05.288 [DEBUG] [Thread-129728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:25:05.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:25:05.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')
2026-02-11T13:25:05.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:25:05.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:25:05.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:25:05.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:25:05.325 [DEBUG] [Thread-129728] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:25:05.880 [DEBUG] [Thread-129730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:25:16.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:25:16.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:25:16.780 [DEBUG] [Thread-129731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:25:20.932 [DEBUG] [Thread-129732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:25:35.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:25:35.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:25:35.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:25:35.969 [DEBUG] [Thread-129733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:25:37.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 25, 14), 16.26, 35.52, 0.0, 29.92, 24.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:25:37.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:25:14
2026-02-11T13:25:38.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:25:38.182 [DEBUG] [Thread-129734] [transport.py] [_log()] starting thread (client mode): 0xa2d6c400
2026-02-11T13:25:38.183 [DEBUG] [Thread-129734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:25:38.204 [DEBUG] [Thread-129734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:25:38.204 [INFO] [Thread-129734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:25:38.205 [DEBUG] [Thread-129734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:25:38.205 [DEBUG] [Thread-129734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:25:38.205 [DEBUG] [Thread-129734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:25:38.205 [DEBUG] [Thread-129734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:38.205 [DEBUG] [Thread-129734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:38.205 [DEBUG] [Thread-129734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] client lang: <none>
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] server lang: <none>
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] kex follows: False
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] Compression: none
2026-02-11T13:25:38.206 [DEBUG] [Thread-129734] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:25:38.223 [DEBUG] [Thread-129734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:25:38.224 [DEBUG] [Thread-129734] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:25:38.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:25:38.225 [DEBUG] [Thread-129734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:25:38.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:25:38.227 [DEBUG] [Thread-129734] [transport.py] [_log()] userauth is OK
2026-02-11T13:25:38.228 [DEBUG] [Thread-129734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:25:38.228 [DEBUG] [Thread-129734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:25:38.228 [DEBUG] [Thread-129734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:25:38.228 [DEBUG] [Thread-129734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:25:38.252 [INFO] [Thread-129734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:25:38.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:25:38.882 [DEBUG] [Thread-129734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:25:38.882 [DEBUG] [Thread-129734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:25:38.883 [DEBUG] [Thread-129734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:25:38.923 [DEBUG] [Thread-129734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:25:38.923 [DEBUG] [Thread-129734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:25:38.925 [DEBUG] [Thread-129734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:25:38.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:25:38.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:25:38.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:25:38.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:25:38.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:25:38.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:25:38.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:25:38.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:25:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:25:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.475838 -999.00  +23.80  23.51     42  +10.30 1 2 1 1 1   888    0 15.00 71.85 ----- 25.5 23.5 292.2 27.5 30.4 -17.9 29.9 -14.9 29.3 -16.3 30.2 -15.9
2026-02-11T13:25:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.475838
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:25:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:25:14', tmtdew=16.26, humidity=35.52, cloud=0.0, wind=29.92, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:25:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:25:38.948 [DEBUG] [Thread-129734] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:25:39.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:25:39.032 [DEBUG] [Thread-129737] [transport.py] [_log()] starting thread (client mode): 0xa81d5c00
2026-02-11T13:25:39.032 [DEBUG] [Thread-129737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:25:39.046 [DEBUG] [Thread-129737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:25:39.046 [INFO] [Thread-129737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:25:39.053 [DEBUG] [Thread-129737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] client lang: <none>
2026-02-11T13:25:39.054 [DEBUG] [Thread-129737] [transport.py] [_log()] server lang: <none>
2026-02-11T13:25:39.055 [DEBUG] [Thread-129737] [transport.py] [_log()] kex follows: False
2026-02-11T13:25:39.055 [DEBUG] [Thread-129737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:25:39.055 [DEBUG] [Thread-129737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:25:39.055 [DEBUG] [Thread-129737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:25:39.055 [DEBUG] [Thread-129737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:25:39.055 [DEBUG] [Thread-129737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:25:39.056 [DEBUG] [Thread-129737] [transport.py] [_log()] Compression: none
2026-02-11T13:25:39.056 [DEBUG] [Thread-129737] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:25:39.116 [DEBUG] [Thread-129737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:25:39.116 [DEBUG] [Thread-129737] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:25:39.117 [DEBUG] [Thread-129737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:25:39.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:25:39.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:25:39.172 [DEBUG] [Thread-129737] [transport.py] [_log()] userauth is OK
2026-02-11T13:25:39.172 [DEBUG] [Thread-129737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:25:39.172 [DEBUG] [Thread-129737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:25:39.172 [DEBUG] [Thread-129737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:25:39.172 [DEBUG] [Thread-129737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:25:39.190 [INFO] [Thread-129737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:25:39.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:25:39.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:25:40.051 [DEBUG] [Thread-129737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:25:40.051 [DEBUG] [Thread-129737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:25:40.099 [DEBUG] [Thread-129737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:25:40.099 [DEBUG] [Thread-129737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:25:40.109 [DEBUG] [Thread-129737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:25:40.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:25:40.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:25:40.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:25:40.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:25:40.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:25:40.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:25:40.146 [DEBUG] [Thread-129737] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:25:51.006 [DEBUG] [Thread-129739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:26:06.057 [DEBUG] [Thread-129740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:26:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:26:10.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:26:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:26:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 25, 49), 15.75, 36.78, 0.0, 19.71, 23.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:26:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:25:49
2026-02-11T13:26:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:26:12.643 [DEBUG] [Thread-129741] [transport.py] [_log()] starting thread (client mode): 0xa2d3c250
2026-02-11T13:26:12.643 [DEBUG] [Thread-129741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:26:12.661 [DEBUG] [Thread-129741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:26:12.662 [INFO] [Thread-129741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] client lang: <none>
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] server lang: <none>
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] kex follows: False
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] Compression: none
2026-02-11T13:26:12.665 [DEBUG] [Thread-129741] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:26:12.684 [DEBUG] [Thread-129741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:26:12.685 [DEBUG] [Thread-129741] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:26:12.685 [DEBUG] [Thread-129741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:26:12.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:26:12.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:26:12.688 [DEBUG] [Thread-129741] [transport.py] [_log()] userauth is OK
2026-02-11T13:26:12.688 [DEBUG] [Thread-129741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:26:12.688 [DEBUG] [Thread-129741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:26:12.688 [DEBUG] [Thread-129741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:26:12.688 [DEBUG] [Thread-129741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:26:12.707 [INFO] [Thread-129741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:26:12.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:26:13.509 [DEBUG] [Thread-129741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:26:13.509 [DEBUG] [Thread-129741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:26:13.510 [DEBUG] [Thread-129741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:26:13.550 [DEBUG] [Thread-129741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:26:13.550 [DEBUG] [Thread-129741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:26:13.554 [DEBUG] [Thread-129741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:26:13.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:26:13.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:26:13.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:26:13.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:26:13.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:26:13.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:26:13.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:26:13.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:26:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:26:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.476185 -999.00  +24.10  18.11     42  +10.70 1 2 1 1 1   888    0 14.95 75.96 ----- 22.8 18.1 303.3 30.2 30.6 -17.0 30.0 -14.2 29.4 -15.3 30.4 -16.0
2026-02-11T13:26:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:26:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:26:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.476185
2026-02-11T13:26:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:26:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:26:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:26:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:26:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:26:13.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:25:49', tmtdew=15.75, humidity=36.78, cloud=0.0, wind=19.71, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:25:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:26:13.580 [DEBUG] [Thread-129741] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:26:13.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:26:13.676 [DEBUG] [Thread-129744] [transport.py] [_log()] starting thread (client mode): 0xa81d5c60
2026-02-11T13:26:13.676 [DEBUG] [Thread-129744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:26:13.690 [DEBUG] [Thread-129744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:26:13.691 [INFO] [Thread-129744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:26:13.698 [DEBUG] [Thread-129744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:26:13.699 [DEBUG] [Thread-129744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:26:13.700 [DEBUG] [Thread-129744] [transport.py] [_log()] client lang: <none>
2026-02-11T13:26:13.700 [DEBUG] [Thread-129744] [transport.py] [_log()] server lang: <none>
2026-02-11T13:26:13.700 [DEBUG] [Thread-129744] [transport.py] [_log()] kex follows: False
2026-02-11T13:26:13.700 [DEBUG] [Thread-129744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:26:13.700 [DEBUG] [Thread-129744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:26:13.700 [DEBUG] [Thread-129744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:26:13.700 [DEBUG] [Thread-129744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:26:13.701 [DEBUG] [Thread-129744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:26:13.701 [DEBUG] [Thread-129744] [transport.py] [_log()] Compression: none
2026-02-11T13:26:13.701 [DEBUG] [Thread-129744] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:26:13.756 [DEBUG] [Thread-129744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:26:13.757 [DEBUG] [Thread-129744] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:26:13.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:26:13.759 [DEBUG] [Thread-129744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:26:13.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:26:13.812 [DEBUG] [Thread-129744] [transport.py] [_log()] userauth is OK
2026-02-11T13:26:13.812 [DEBUG] [Thread-129744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:26:13.812 [DEBUG] [Thread-129744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:26:13.813 [DEBUG] [Thread-129744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:26:13.813 [DEBUG] [Thread-129744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:26:13.832 [INFO] [Thread-129744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:26:13.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:26:13.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:26:14.663 [DEBUG] [Thread-129744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:26:14.664 [DEBUG] [Thread-129744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:26:14.711 [DEBUG] [Thread-129744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:26:14.712 [DEBUG] [Thread-129744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:26:14.721 [DEBUG] [Thread-129744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:26:14.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:26:14.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:26:14.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:26:14.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:26:14.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:26:14.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:26:14.758 [DEBUG] [Thread-129744] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:26:16.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:26:16.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:26:16.813 [DEBUG] [Thread-129746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:26:21.094 [DEBUG] [Thread-129747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:26:36.146 [DEBUG] [Thread-129748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:26:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:26:44.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:26:44.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:26:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 26, 24), 15.8, 36.68, 0.0, 20.75, 24.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:26:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:26:24
2026-02-11T13:26:46.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:26:47.117 [DEBUG] [Thread-129749] [transport.py] [_log()] starting thread (client mode): 0xa2db68c0
2026-02-11T13:26:47.117 [DEBUG] [Thread-129749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:26:47.140 [DEBUG] [Thread-129749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:26:47.140 [INFO] [Thread-129749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:26:47.143 [DEBUG] [Thread-129749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] client lang: <none>
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] server lang: <none>
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] kex follows: False
2026-02-11T13:26:47.144 [DEBUG] [Thread-129749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:26:47.145 [DEBUG] [Thread-129749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:26:47.145 [DEBUG] [Thread-129749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:26:47.145 [DEBUG] [Thread-129749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:26:47.145 [DEBUG] [Thread-129749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:26:47.145 [DEBUG] [Thread-129749] [transport.py] [_log()] Compression: none
2026-02-11T13:26:47.145 [DEBUG] [Thread-129749] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:26:47.165 [DEBUG] [Thread-129749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:26:47.166 [DEBUG] [Thread-129749] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:26:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:26:47.167 [DEBUG] [Thread-129749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:26:47.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:26:47.169 [DEBUG] [Thread-129749] [transport.py] [_log()] userauth is OK
2026-02-11T13:26:47.170 [DEBUG] [Thread-129749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:26:47.170 [DEBUG] [Thread-129749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:26:47.170 [DEBUG] [Thread-129749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:26:47.170 [DEBUG] [Thread-129749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:26:47.192 [INFO] [Thread-129749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:26:47.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:26:47.844 [DEBUG] [Thread-129749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:26:47.844 [DEBUG] [Thread-129749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:26:47.845 [DEBUG] [Thread-129749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:26:47.885 [DEBUG] [Thread-129749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:26:47.886 [DEBUG] [Thread-129749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:26:47.889 [DEBUG] [Thread-129749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:26:47.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:26:47.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:26:47.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:26:47.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:26:47.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:26:47.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:26:47.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:26:47.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:26:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:26:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.476532 -999.00  +24.60  19.97     42  +10.90 1 2 1 1 1   888    0 15.14 74.14 ----- 16.7 20.0 315.6 23.8 30.7 -17.1 30.1 -15.2 29.6 -14.4 30.5 -16.8
2026-02-11T13:26:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:26:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:26:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.476532
2026-02-11T13:26:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:26:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:26:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:26:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:26:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:26:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:26:24', tmtdew=15.8, humidity=36.68, cloud=0.0, wind=20.75, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:26:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:26:47.917 [DEBUG] [Thread-129749] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:26:48.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:26:48.013 [DEBUG] [Thread-129752] [transport.py] [_log()] starting thread (client mode): 0xa2d01d80
2026-02-11T13:26:48.013 [DEBUG] [Thread-129752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:26:48.027 [DEBUG] [Thread-129752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:26:48.027 [INFO] [Thread-129752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:26:48.035 [DEBUG] [Thread-129752] [transport.py] [_log()] client lang: <none>
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] server lang: <none>
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] kex follows: False
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] Compression: none
2026-02-11T13:26:48.036 [DEBUG] [Thread-129752] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:26:48.092 [DEBUG] [Thread-129752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:26:48.093 [DEBUG] [Thread-129752] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:26:48.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:26:48.103 [DEBUG] [Thread-129752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:26:48.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:26:48.151 [DEBUG] [Thread-129752] [transport.py] [_log()] userauth is OK
2026-02-11T13:26:48.152 [DEBUG] [Thread-129752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:26:48.152 [DEBUG] [Thread-129752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:26:48.152 [DEBUG] [Thread-129752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:26:48.152 [DEBUG] [Thread-129752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:26:48.174 [INFO] [Thread-129752] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:26:48.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:26:48.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:26:49.019 [DEBUG] [Thread-129752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:26:49.019 [DEBUG] [Thread-129752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:26:49.070 [DEBUG] [Thread-129752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:26:49.070 [DEBUG] [Thread-129752] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:26:49.080 [DEBUG] [Thread-129752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:26:49.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:26:49.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:26:49.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:26:49.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:26:49.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:26:49.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:26:49.122 [DEBUG] [Thread-129752] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:26:51.184 [DEBUG] [Thread-129754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:06.233 [DEBUG] [Thread-129755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:16.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:16.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:16.856 [DEBUG] [Thread-129756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:19.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:27:19.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:27:19.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:27:21.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 27), 16.44, 35.23, 0.0, 19.85, 24.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:27:21.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:27:00
2026-02-11T13:27:21.267 [DEBUG] [Thread-129757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:27:21.529 [DEBUG] [Thread-129758] [transport.py] [_log()] starting thread (client mode): 0xa81d60b0
2026-02-11T13:27:21.529 [DEBUG] [Thread-129758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:27:21.549 [DEBUG] [Thread-129758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:27:21.549 [INFO] [Thread-129758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:27:21.552 [DEBUG] [Thread-129758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:27:21.552 [DEBUG] [Thread-129758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:27:21.552 [DEBUG] [Thread-129758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:27:21.552 [DEBUG] [Thread-129758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] client lang: <none>
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] server lang: <none>
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] kex follows: False
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] Compression: none
2026-02-11T13:27:21.553 [DEBUG] [Thread-129758] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:27:21.568 [DEBUG] [Thread-129758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:27:21.569 [DEBUG] [Thread-129758] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:27:21.569 [DEBUG] [Thread-129758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:27:21.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:27:21.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:27:21.569 [DEBUG] [Thread-129758] [transport.py] [_log()] userauth is OK
2026-02-11T13:27:21.569 [DEBUG] [Thread-129758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:27:21.569 [DEBUG] [Thread-129758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:27:21.569 [DEBUG] [Thread-129758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:27:21.569 [DEBUG] [Thread-129758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:27:21.579 [INFO] [Thread-129758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:27:21.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:27:22.233 [DEBUG] [Thread-129758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:27:22.233 [DEBUG] [Thread-129758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:27:22.234 [DEBUG] [Thread-129758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:27:22.274 [DEBUG] [Thread-129758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:27:22.274 [DEBUG] [Thread-129758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:27:22.277 [DEBUG] [Thread-129758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:27:22.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:27:22.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:27:22.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:27:22.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:27:22.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:27:22.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:27:22.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:27:22.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.476879 -999.00  +24.80  21.30     41  +11.00 1 2 1 1 1   888    0 15.47 79.31 ----- 19.7 21.3 322.2 29.5 30.9 -17.2 30.2 -16.1 29.8 -15.2 30.7 -16.9
2026-02-11T13:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.476879
2026-02-11T13:27:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:27:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:27:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:27:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:27:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:27:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:27:00', tmtdew=16.44, humidity=35.23, cloud=0.0, wind=19.85, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:26:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:27:22.295 [DEBUG] [Thread-129758] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:27:22.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:27:22.392 [DEBUG] [Thread-129761] [transport.py] [_log()] starting thread (client mode): 0xa2d03ee0
2026-02-11T13:27:22.392 [DEBUG] [Thread-129761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:27:22.407 [DEBUG] [Thread-129761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:27:22.407 [INFO] [Thread-129761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:27:22.415 [DEBUG] [Thread-129761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:27:22.415 [DEBUG] [Thread-129761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:27:22.415 [DEBUG] [Thread-129761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:27:22.415 [DEBUG] [Thread-129761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] client lang: <none>
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] server lang: <none>
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] kex follows: False
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] Compression: none
2026-02-11T13:27:22.416 [DEBUG] [Thread-129761] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:27:22.475 [DEBUG] [Thread-129761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:27:22.475 [DEBUG] [Thread-129761] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:27:22.475 [DEBUG] [Thread-129761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:27:22.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:27:22.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:27:22.531 [DEBUG] [Thread-129761] [transport.py] [_log()] userauth is OK
2026-02-11T13:27:22.531 [DEBUG] [Thread-129761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:27:22.531 [DEBUG] [Thread-129761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:27:22.531 [DEBUG] [Thread-129761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:27:22.531 [DEBUG] [Thread-129761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:27:22.545 [INFO] [Thread-129761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:27:22.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:27:22.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:27:23.391 [DEBUG] [Thread-129761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:27:23.392 [DEBUG] [Thread-129761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:27:23.439 [DEBUG] [Thread-129761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:27:23.440 [DEBUG] [Thread-129761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:27:23.449 [DEBUG] [Thread-129761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:27:23.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:27:23.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:27:23.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:27:23.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:27:23.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:27:23.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:27:23.485 [DEBUG] [Thread-129761] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:27:36.302 [DEBUG] [Thread-129763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:51.345 [DEBUG] [Thread-129764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:27:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:27:53.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:27:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:27:55.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 27, 35), 16.85, 34.37, 0.0, 25.23, 25.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:27:55.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:27:35
2026-02-11T13:27:56.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:27:56.348 [DEBUG] [Thread-129765] [transport.py] [_log()] starting thread (client mode): 0xa575ad10
2026-02-11T13:27:56.349 [DEBUG] [Thread-129765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:27:56.370 [DEBUG] [Thread-129765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:27:56.370 [INFO] [Thread-129765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] client lang: <none>
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] server lang: <none>
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] kex follows: False
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] Compression: none
2026-02-11T13:27:56.372 [DEBUG] [Thread-129765] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:27:56.390 [DEBUG] [Thread-129765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:27:56.391 [DEBUG] [Thread-129765] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:27:56.392 [DEBUG] [Thread-129765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:27:56.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:27:56.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:27:56.394 [DEBUG] [Thread-129765] [transport.py] [_log()] userauth is OK
2026-02-11T13:27:56.394 [DEBUG] [Thread-129765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:27:56.394 [DEBUG] [Thread-129765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:27:56.394 [DEBUG] [Thread-129765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:27:56.394 [DEBUG] [Thread-129765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:27:56.419 [INFO] [Thread-129765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:27:56.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:27:57.059 [DEBUG] [Thread-129765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:27:57.059 [DEBUG] [Thread-129765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:27:57.060 [DEBUG] [Thread-129765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:27:57.100 [DEBUG] [Thread-129765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:27:57.100 [DEBUG] [Thread-129765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:27:57.103 [DEBUG] [Thread-129765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:27:57.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:27:57.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:27:57.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:27:57.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:27:57.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:27:57.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:27:57.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:27:57.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:27:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:27:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.477226 -999.00  +25.20  23.61     41  +11.10 1 2 1 1 1   888    0 15.03 74.11 ----- 22.0 23.6 294.2 34.0 31.1 -17.6 30.4 -15.2 29.9 -16.5 30.9 -16.4
2026-02-11T13:27:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:27:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:27:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.477226
2026-02-11T13:27:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:27:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:27:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:27:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:27:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:27:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:27:35', tmtdew=16.85, humidity=34.37, cloud=0.0, wind=25.23, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:27:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:27:57.128 [DEBUG] [Thread-129765] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:27:57.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:27:57.220 [DEBUG] [Thread-129768] [transport.py] [_log()] starting thread (client mode): 0xa2db4e50
2026-02-11T13:27:57.220 [DEBUG] [Thread-129768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:27:57.235 [DEBUG] [Thread-129768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:27:57.235 [INFO] [Thread-129768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:27:57.242 [DEBUG] [Thread-129768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:27:57.243 [DEBUG] [Thread-129768] [transport.py] [_log()] client lang: <none>
2026-02-11T13:27:57.244 [DEBUG] [Thread-129768] [transport.py] [_log()] server lang: <none>
2026-02-11T13:27:57.244 [DEBUG] [Thread-129768] [transport.py] [_log()] kex follows: False
2026-02-11T13:27:57.244 [DEBUG] [Thread-129768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:27:57.244 [DEBUG] [Thread-129768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:27:57.244 [DEBUG] [Thread-129768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:27:57.245 [DEBUG] [Thread-129768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:27:57.245 [DEBUG] [Thread-129768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:27:57.245 [DEBUG] [Thread-129768] [transport.py] [_log()] Compression: none
2026-02-11T13:27:57.245 [DEBUG] [Thread-129768] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:27:57.300 [DEBUG] [Thread-129768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:27:57.300 [DEBUG] [Thread-129768] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:27:57.301 [DEBUG] [Thread-129768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:27:57.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:27:57.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:27:57.356 [DEBUG] [Thread-129768] [transport.py] [_log()] userauth is OK
2026-02-11T13:27:57.356 [DEBUG] [Thread-129768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:27:57.357 [DEBUG] [Thread-129768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:27:57.357 [DEBUG] [Thread-129768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:27:57.357 [DEBUG] [Thread-129768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:27:57.377 [INFO] [Thread-129768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:27:57.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:27:57.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:27:58.216 [DEBUG] [Thread-129768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:27:58.216 [DEBUG] [Thread-129768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:27:58.264 [DEBUG] [Thread-129768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:27:58.264 [DEBUG] [Thread-129768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:27:58.273 [DEBUG] [Thread-129768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:27:58.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:27:58.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:27:58.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:27:58.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:27:58.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:27:58.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:27:58.310 [DEBUG] [Thread-129768] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:28:06.382 [DEBUG] [Thread-129770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:28:16.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:28:16.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:28:16.910 [DEBUG] [Thread-129771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:28:21.434 [DEBUG] [Thread-129772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:28:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:28:28.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:28:28.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:28:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 28, 10), 16.09, 35.91, 0.0, 25.25, 24.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:28:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:28:10
2026-02-11T13:28:30.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:28:30.747 [DEBUG] [Thread-129773] [transport.py] [_log()] starting thread (client mode): 0xa575b040
2026-02-11T13:28:30.747 [DEBUG] [Thread-129773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:28:30.767 [DEBUG] [Thread-129773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:28:30.767 [INFO] [Thread-129773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] client lang: <none>
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] server lang: <none>
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] kex follows: False
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] Compression: none
2026-02-11T13:28:30.770 [DEBUG] [Thread-129773] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:28:30.787 [DEBUG] [Thread-129773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:28:30.788 [DEBUG] [Thread-129773] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:28:30.789 [DEBUG] [Thread-129773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:28:30.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:28:30.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:28:30.791 [DEBUG] [Thread-129773] [transport.py] [_log()] userauth is OK
2026-02-11T13:28:30.791 [DEBUG] [Thread-129773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:28:30.791 [DEBUG] [Thread-129773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:28:30.791 [DEBUG] [Thread-129773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:28:30.791 [DEBUG] [Thread-129773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:28:30.828 [INFO] [Thread-129773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:28:30.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:28:31.409 [DEBUG] [Thread-129773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:28:31.410 [DEBUG] [Thread-129773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:28:31.410 [DEBUG] [Thread-129773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:28:31.450 [DEBUG] [Thread-129773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:28:31.451 [DEBUG] [Thread-129773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:28:31.454 [DEBUG] [Thread-129773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:28:31.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:28:31.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:28:31.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:28:31.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:28:31.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:28:31.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:28:31.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:28:31.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:28:31.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:28:31.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.477574 -999.00  +25.20  23.90     40  +10.90 1 2 1 1 1   888    0 15.27 72.79 ----- 28.3 23.9 302.4 29.2 31.1 -17.9 30.5 -16.5 30.1 -16.0 31.0 -16.8
2026-02-11T13:28:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:28:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:28:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.477574
2026-02-11T13:28:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:28:31.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:28:31.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:28:31.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:28:31.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:28:31.483 [DEBUG] [Thread-129773] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:28:31.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:28:10', tmtdew=16.09, humidity=35.91, cloud=0.0, wind=25.25, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:27:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:28:31.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:28:31.576 [DEBUG] [Thread-129776] [transport.py] [_log()] starting thread (client mode): 0xa575b910
2026-02-11T13:28:31.576 [DEBUG] [Thread-129776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:28:31.591 [DEBUG] [Thread-129776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:28:31.592 [INFO] [Thread-129776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:28:31.599 [DEBUG] [Thread-129776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:28:31.599 [DEBUG] [Thread-129776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:28:31.599 [DEBUG] [Thread-129776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:28:31.599 [DEBUG] [Thread-129776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] client lang: <none>
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] server lang: <none>
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] kex follows: False
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] Compression: none
2026-02-11T13:28:31.600 [DEBUG] [Thread-129776] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:28:31.660 [DEBUG] [Thread-129776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:28:31.660 [DEBUG] [Thread-129776] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:28:31.661 [DEBUG] [Thread-129776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:28:31.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:28:31.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:28:31.717 [DEBUG] [Thread-129776] [transport.py] [_log()] userauth is OK
2026-02-11T13:28:31.717 [DEBUG] [Thread-129776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:28:31.718 [DEBUG] [Thread-129776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:28:31.718 [DEBUG] [Thread-129776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:28:31.718 [DEBUG] [Thread-129776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:28:31.738 [INFO] [Thread-129776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:28:31.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:28:31.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:28:32.621 [DEBUG] [Thread-129776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:28:32.621 [DEBUG] [Thread-129776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:28:32.669 [DEBUG] [Thread-129776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:28:32.670 [DEBUG] [Thread-129776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:28:32.679 [DEBUG] [Thread-129776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:28:32.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:28:32.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:28: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
2026-02-11T13:28:32.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:28:32.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:28:32.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:28:32.716 [DEBUG] [Thread-129776] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:28:36.471 [DEBUG] [Thread-129778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:28:51.526 [DEBUG] [Thread-129779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:29:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:29:02.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:29:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:29:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 28, 46), 16.44, 35.1, 0.0, 25.43, 24.94, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:29:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:28:46
2026-02-11T13:29:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:29:05.125 [DEBUG] [Thread-129780] [transport.py] [_log()] starting thread (client mode): 0xa2d02200
2026-02-11T13:29:05.125 [DEBUG] [Thread-129780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:29:05.138 [DEBUG] [Thread-129780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:29:05.138 [INFO] [Thread-129780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] client lang: <none>
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] server lang: <none>
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] kex follows: False
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:29:05.142 [DEBUG] [Thread-129780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:29:05.143 [DEBUG] [Thread-129780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:29:05.143 [DEBUG] [Thread-129780] [transport.py] [_log()] Compression: none
2026-02-11T13:29:05.143 [DEBUG] [Thread-129780] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:29:05.159 [DEBUG] [Thread-129780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:29:05.159 [DEBUG] [Thread-129780] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:29:05.160 [DEBUG] [Thread-129780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:29:05.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:29:05.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:29:05.161 [DEBUG] [Thread-129780] [transport.py] [_log()] userauth is OK
2026-02-11T13:29:05.161 [DEBUG] [Thread-129780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:29:05.162 [DEBUG] [Thread-129780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:29:05.162 [DEBUG] [Thread-129780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:29:05.162 [DEBUG] [Thread-129780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:29:05.179 [INFO] [Thread-129780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:29:05.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:29:05.970 [DEBUG] [Thread-129780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:29:05.971 [DEBUG] [Thread-129780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:29:05.971 [DEBUG] [Thread-129780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:29:06.011 [DEBUG] [Thread-129780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:29:06.012 [DEBUG] [Thread-129780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:29:06.015 [DEBUG] [Thread-129780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:29:06.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:29:06.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:29:06.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:29:06.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:29:06.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:29:06.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:29:06.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:29:06.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:29:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:29:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.477921 -999.00  +24.90  33.34     41  +10.90 1 2 2 1 1   888    0 15.40 79.21 ----- 31.6 33.3 280.4 37.0 31.3 -18.1 30.5 -15.9 30.2 -15.2 31.1 -16.6
2026-02-11T13:29:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:29:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:29:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.477921
2026-02-11T13:29:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:29:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:29:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:29:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:29:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:29:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:28:46', tmtdew=16.44, humidity=35.1, cloud=0.0, wind=25.43, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:28:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:29:06.041 [DEBUG] [Thread-129780] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:29:06.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:29:06.137 [DEBUG] [Thread-129783] [transport.py] [_log()] starting thread (client mode): 0xa575a110
2026-02-11T13:29:06.137 [DEBUG] [Thread-129783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:29:06.152 [DEBUG] [Thread-129783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:29:06.152 [INFO] [Thread-129783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:29:06.160 [DEBUG] [Thread-129783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:29:06.160 [DEBUG] [Thread-129783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:29:06.160 [DEBUG] [Thread-129783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:29:06.160 [DEBUG] [Thread-129783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:06.160 [DEBUG] [Thread-129783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:06.160 [DEBUG] [Thread-129783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:06.160 [DEBUG] [Thread-129783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] client lang: <none>
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] server lang: <none>
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] kex follows: False
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] Compression: none
2026-02-11T13:29:06.161 [DEBUG] [Thread-129783] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:29:06.222 [DEBUG] [Thread-129783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:29:06.222 [DEBUG] [Thread-129783] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:29:06.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:29:06.224 [DEBUG] [Thread-129783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:29:06.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:29:06.284 [DEBUG] [Thread-129783] [transport.py] [_log()] userauth is OK
2026-02-11T13:29:06.284 [DEBUG] [Thread-129783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:29:06.284 [DEBUG] [Thread-129783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:29:06.284 [DEBUG] [Thread-129783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:29:06.284 [DEBUG] [Thread-129783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:29:06.303 [INFO] [Thread-129783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:29:06.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:29:06.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:29:06.564 [DEBUG] [Thread-129785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:29:07.174 [DEBUG] [Thread-129783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:29:07.174 [DEBUG] [Thread-129783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:29:07.222 [DEBUG] [Thread-129783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:29:07.223 [DEBUG] [Thread-129783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:29:07.232 [DEBUG] [Thread-129783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:29:07.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:29:07.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:29:07.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:29:07.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:29:07.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:29:07.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:29:07.269 [DEBUG] [Thread-129783] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:29:16.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:29:16.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:29:16.951 [DEBUG] [Thread-129786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:29:21.612 [DEBUG] [Thread-129787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:29:36.649 [DEBUG] [Thread-129788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:29:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:29:37.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:29:37.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
2026-02-11T13:29:39.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 29, 22), 16.48, 35.02, 0.0, 28.06, 24.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:29:39.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:29:22
2026-02-11T13:29:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:29:39.909 [DEBUG] [Thread-129789] [transport.py] [_log()] starting thread (client mode): 0xa5743f10
2026-02-11T13:29:39.909 [DEBUG] [Thread-129789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:29:39.922 [DEBUG] [Thread-129789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:29:39.922 [INFO] [Thread-129789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] client lang: <none>
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] server lang: <none>
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] kex follows: False
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] Compression: none
2026-02-11T13:29:39.926 [DEBUG] [Thread-129789] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:29:39.936 [DEBUG] [Thread-129789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:29:39.937 [DEBUG] [Thread-129789] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:29:39.937 [DEBUG] [Thread-129789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:29:39.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:29:39.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:29:39.938 [DEBUG] [Thread-129789] [transport.py] [_log()] userauth is OK
2026-02-11T13:29:39.938 [DEBUG] [Thread-129789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:29:39.938 [DEBUG] [Thread-129789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:29:39.938 [DEBUG] [Thread-129789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:29:39.938 [DEBUG] [Thread-129789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:29:39.950 [INFO] [Thread-129789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:29:39.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:29:40.547 [DEBUG] [Thread-129789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:29:40.548 [DEBUG] [Thread-129789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:29:40.548 [DEBUG] [Thread-129789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:29:40.588 [DEBUG] [Thread-129789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:29:40.588 [DEBUG] [Thread-129789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:29:40.592 [DEBUG] [Thread-129789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:29:40.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:29:40.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:29:40.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:29:40.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:29:40.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:29:40.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:29:40.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:29:40.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:29:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:29:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.478615 -999.00  +24.40  26.12     41  +10.50 1 2 1 1 1   888    0 15.94 83.71 ----- 32.6 26.1 289.7 36.7 30.6 -25.2 29.9 -20.1 29.5 -19.1 30.1 -22.4
2026-02-11T13:29:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:29:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:29:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.478615
2026-02-11T13:29:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:29:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:29:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:29:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:29:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:29:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:29:22', tmtdew=16.48, humidity=35.02, cloud=0.0, wind=28.06, temperature=24.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:29:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:29:40.614 [DEBUG] [Thread-129789] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:29:40.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:29:40.710 [DEBUG] [Thread-129792] [transport.py] [_log()] starting thread (client mode): 0xa5743d90
2026-02-11T13:29:40.710 [DEBUG] [Thread-129792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:29:40.725 [DEBUG] [Thread-129792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:29:40.725 [INFO] [Thread-129792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] client lang: <none>
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] server lang: <none>
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] kex follows: False
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:29:40.733 [DEBUG] [Thread-129792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:29:40.734 [DEBUG] [Thread-129792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:29:40.734 [DEBUG] [Thread-129792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:29:40.734 [DEBUG] [Thread-129792] [transport.py] [_log()] Compression: none
2026-02-11T13:29:40.734 [DEBUG] [Thread-129792] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:29:40.794 [DEBUG] [Thread-129792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:29:40.795 [DEBUG] [Thread-129792] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:29:40.795 [DEBUG] [Thread-129792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:29:40.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:29:40.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:29:40.852 [DEBUG] [Thread-129792] [transport.py] [_log()] userauth is OK
2026-02-11T13:29:40.853 [DEBUG] [Thread-129792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:29:40.853 [DEBUG] [Thread-129792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:29:40.853 [DEBUG] [Thread-129792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:29:40.853 [DEBUG] [Thread-129792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:29:40.872 [INFO] [Thread-129792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:29:40.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:29:40.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:29:41.701 [DEBUG] [Thread-129792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:29:41.701 [DEBUG] [Thread-129792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:29:41.752 [DEBUG] [Thread-129792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:29:41.753 [DEBUG] [Thread-129792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:29:41.762 [DEBUG] [Thread-129792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:29:41.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:29:41.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:29:41.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:29:41.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:29:41.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:29:41.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:29:41.799 [DEBUG] [Thread-129792] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:29:51.687 [DEBUG] [Thread-129794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:30:06.747 [DEBUG] [Thread-129795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:30:11.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:30:11.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:30:11.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
2026-02-11T13:30:13.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 29, 57), 16.55, 34.72, 0.0, 37.32, 24.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:30:13.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:29:57
2026-02-11T13:30:14.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:30:14.261 [DEBUG] [Thread-129796] [transport.py] [_log()] starting thread (client mode): 0xa81d76a0
2026-02-11T13:30:14.261 [DEBUG] [Thread-129796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:30:14.281 [DEBUG] [Thread-129796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:30:14.281 [INFO] [Thread-129796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] client lang: <none>
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] server lang: <none>
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] kex follows: False
2026-02-11T13:30:14.284 [DEBUG] [Thread-129796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:30:14.285 [DEBUG] [Thread-129796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:30:14.285 [DEBUG] [Thread-129796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:30:14.285 [DEBUG] [Thread-129796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:30:14.285 [DEBUG] [Thread-129796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:30:14.285 [DEBUG] [Thread-129796] [transport.py] [_log()] Compression: none
2026-02-11T13:30:14.285 [DEBUG] [Thread-129796] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:30:14.300 [DEBUG] [Thread-129796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:30:14.301 [DEBUG] [Thread-129796] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:30:14.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:30:14.302 [DEBUG] [Thread-129796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:30:14.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:30:14.305 [DEBUG] [Thread-129796] [transport.py] [_log()] userauth is OK
2026-02-11T13:30:14.306 [DEBUG] [Thread-129796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:30:14.306 [DEBUG] [Thread-129796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:30:14.306 [DEBUG] [Thread-129796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:30:14.306 [DEBUG] [Thread-129796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:30:14.324 [INFO] [Thread-129796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:30:14.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:30:14.899 [DEBUG] [Thread-129796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:30:14.900 [DEBUG] [Thread-129796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:30:14.900 [DEBUG] [Thread-129796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:30:14.940 [DEBUG] [Thread-129796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:30:14.941 [DEBUG] [Thread-129796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:30:14.944 [DEBUG] [Thread-129796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:30:14.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:30:14.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:30:14.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:30:14.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:30:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:30:14.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:30:14.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:30:14.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:30:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:30:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.478963 -999.00  +24.00  30.46     42  +10.30 1 2 2 1 1   888    0 15.65 85.55 ----- 30.7 30.5 293.8 39.1 29.9 -23.5 29.5 -19.5 28.7 -20.7 29.7 -20.8
2026-02-11T13:30:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:30:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:30:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.478963
2026-02-11T13:30:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:30:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:30:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:30:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:30:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:30:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:29:57', tmtdew=16.55, humidity=34.72, cloud=0.0, wind=37.32, temperature=24.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:29:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:30:14.971 [DEBUG] [Thread-129796] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:30:15.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:30:15.078 [DEBUG] [Thread-129799] [transport.py] [_log()] starting thread (client mode): 0xa81d6fb0
2026-02-11T13:30:15.079 [DEBUG] [Thread-129799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:30:15.093 [DEBUG] [Thread-129799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:30:15.093 [INFO] [Thread-129799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:15.101 [DEBUG] [Thread-129799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] client lang: <none>
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] server lang: <none>
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] kex follows: False
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:30:15.102 [DEBUG] [Thread-129799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:30:15.103 [DEBUG] [Thread-129799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:30:15.103 [DEBUG] [Thread-129799] [transport.py] [_log()] Compression: none
2026-02-11T13:30:15.103 [DEBUG] [Thread-129799] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:30:15.160 [DEBUG] [Thread-129799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:30:15.161 [DEBUG] [Thread-129799] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:30:15.161 [DEBUG] [Thread-129799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:30:15.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:30:15.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:30:15.216 [DEBUG] [Thread-129799] [transport.py] [_log()] userauth is OK
2026-02-11T13:30:15.216 [DEBUG] [Thread-129799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:30:15.217 [DEBUG] [Thread-129799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:30:15.217 [DEBUG] [Thread-129799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:30:15.217 [DEBUG] [Thread-129799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:30:15.236 [INFO] [Thread-129799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:30:15.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:30:15.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:30:16.075 [DEBUG] [Thread-129799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:30:16.075 [DEBUG] [Thread-129799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:30:16.123 [DEBUG] [Thread-129799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:30:16.124 [DEBUG] [Thread-129799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:30:16.133 [DEBUG] [Thread-129799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:30:16.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:30:16.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:30:16.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:30:16.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:30:16.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:30:16.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:30:16.165 [DEBUG] [Thread-129799] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:30:16.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:30:16.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:30:16.997 [DEBUG] [Thread-129801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:30:21.786 [DEBUG] [Thread-129802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:30:36.834 [DEBUG] [Thread-129803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:30:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:30:46.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:30:46.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
2026-02-11T13:30:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 30, 32), 16.31, 35.2, 0.0, 36.65, 24.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:30:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:30:32
2026-02-11T13:30:48.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:30:48.642 [DEBUG] [Thread-129804] [transport.py] [_log()] starting thread (client mode): 0xa575b910
2026-02-11T13:30:48.642 [DEBUG] [Thread-129804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:30:48.661 [DEBUG] [Thread-129804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:30:48.662 [INFO] [Thread-129804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] client lang: <none>
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] server lang: <none>
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] kex follows: False
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:30:48.665 [DEBUG] [Thread-129804] [transport.py] [_log()] Compression: none
2026-02-11T13:30:48.666 [DEBUG] [Thread-129804] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:30:48.675 [DEBUG] [Thread-129804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:30:48.675 [DEBUG] [Thread-129804] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:30:48.676 [DEBUG] [Thread-129804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:30:48.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:30:48.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:30:48.678 [DEBUG] [Thread-129804] [transport.py] [_log()] userauth is OK
2026-02-11T13:30:48.678 [DEBUG] [Thread-129804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:30:48.678 [DEBUG] [Thread-129804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:30:48.678 [DEBUG] [Thread-129804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:30:48.678 [DEBUG] [Thread-129804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:30:48.702 [INFO] [Thread-129804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:30:48.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:30:49.308 [DEBUG] [Thread-129804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:30:49.308 [DEBUG] [Thread-129804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:30:49.309 [DEBUG] [Thread-129804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:30:49.349 [DEBUG] [Thread-129804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:30:49.349 [DEBUG] [Thread-129804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:30:49.351 [DEBUG] [Thread-129804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:30:49.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:30:49.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:30:49.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:30:49.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:30:49.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:30:49.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:30:49.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:30:49.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:30:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:30:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.479657 -999.00  +23.40  33.00     42  +10.00 1 2 2 1 1   888    0 15.63 80.47 ----- 29.6 33.0 290.2 43.1 29.3 -18.7 28.9 -17.7 28.4 -17.1 29.1 -18.5
2026-02-11T13:30:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:30:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:30:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.479657
2026-02-11T13:30:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:30:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:30:49.379 [DEBUG] [Thread-129804] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:30:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:30:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:30:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:30:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:30:32', tmtdew=16.31, humidity=35.2, cloud=0.0, wind=36.65, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:30:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:30:49.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:30:49.488 [DEBUG] [Thread-129807] [transport.py] [_log()] starting thread (client mode): 0xa81d7160
2026-02-11T13:30:49.489 [DEBUG] [Thread-129807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:30:49.504 [DEBUG] [Thread-129807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:30:49.504 [INFO] [Thread-129807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:30:49.512 [DEBUG] [Thread-129807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] client lang: <none>
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] server lang: <none>
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] kex follows: False
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] Compression: none
2026-02-11T13:30:49.513 [DEBUG] [Thread-129807] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:30:49.572 [DEBUG] [Thread-129807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:30:49.573 [DEBUG] [Thread-129807] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:30:49.573 [DEBUG] [Thread-129807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:30:49.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:30:49.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:30:49.632 [DEBUG] [Thread-129807] [transport.py] [_log()] userauth is OK
2026-02-11T13:30:49.632 [DEBUG] [Thread-129807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:30:49.632 [DEBUG] [Thread-129807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:30:49.632 [DEBUG] [Thread-129807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:30:49.633 [DEBUG] [Thread-129807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:30:49.653 [INFO] [Thread-129807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:30:49.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:30:49.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:30:50.495 [DEBUG] [Thread-129807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:30:50.496 [DEBUG] [Thread-129807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:30:50.543 [DEBUG] [Thread-129807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:30:50.543 [DEBUG] [Thread-129807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:30:50.553 [DEBUG] [Thread-129807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:30:50.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:30:50.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:30: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') -> 00000000
2026-02-11T13:30:50.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:30:50.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:30:50.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:30:50.590 [DEBUG] [Thread-129807] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:30:51.871 [DEBUG] [Thread-129809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:06.924 [DEBUG] [Thread-129810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:16.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:16.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:17.041 [DEBUG] [Thread-129811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:31:20.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:31:20.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:31:21.958 [DEBUG] [Thread-129812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 31, 8), 16.2, 35.45, 0.0, 36.82, 24.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:31:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:31:08
2026-02-11T13:31:23.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:31:23.506 [DEBUG] [Thread-129813] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-11T13:31:23.506 [DEBUG] [Thread-129813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:31:23.526 [DEBUG] [Thread-129813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:31:23.526 [INFO] [Thread-129813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:31:23.529 [DEBUG] [Thread-129813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:31:23.529 [DEBUG] [Thread-129813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:31:23.529 [DEBUG] [Thread-129813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] client lang: <none>
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] server lang: <none>
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] kex follows: False
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:31:23.530 [DEBUG] [Thread-129813] [transport.py] [_log()] Compression: none
2026-02-11T13:31:23.531 [DEBUG] [Thread-129813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:31:23.551 [DEBUG] [Thread-129813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:31:23.551 [DEBUG] [Thread-129813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:31:23.552 [DEBUG] [Thread-129813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:31:23.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:31:23.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:31:23.554 [DEBUG] [Thread-129813] [transport.py] [_log()] userauth is OK
2026-02-11T13:31:23.554 [DEBUG] [Thread-129813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:31:23.555 [DEBUG] [Thread-129813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:31:23.555 [DEBUG] [Thread-129813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:31:23.555 [DEBUG] [Thread-129813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:31:23.578 [INFO] [Thread-129813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:31:23.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:31:24.209 [DEBUG] [Thread-129813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:31:24.209 [DEBUG] [Thread-129813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:31:24.210 [DEBUG] [Thread-129813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:31:24.250 [DEBUG] [Thread-129813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:31:24.250 [DEBUG] [Thread-129813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:31:24.253 [DEBUG] [Thread-129813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:31:24.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:31:24.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:31:24.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:31:24.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:31:24.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:31:24.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:31:24.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:31:24.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:31:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:31:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.480004 -999.00  +23.50  30.77     43  +10.20 1 2 2 1 1   888    0 15.47 74.91 ----- 28.2 30.8 297.0 40.0 29.0 -19.1 28.7 -16.7 28.1 -16.6 28.8 -17.7
2026-02-11T13:31:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:31:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:31:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.480004
2026-02-11T13:31:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:31:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:31:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:31:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:31:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:31:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:31:08', tmtdew=16.2, humidity=35.45, cloud=0.0, wind=36.82, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:31:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:31:24.277 [DEBUG] [Thread-129813] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:31:24.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:31:24.376 [DEBUG] [Thread-129816] [transport.py] [_log()] starting thread (client mode): 0xa575ae30
2026-02-11T13:31:24.376 [DEBUG] [Thread-129816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:31:24.391 [DEBUG] [Thread-129816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:31:24.391 [INFO] [Thread-129816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:31:24.398 [DEBUG] [Thread-129816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:31:24.399 [DEBUG] [Thread-129816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:31:24.399 [DEBUG] [Thread-129816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:31:24.399 [DEBUG] [Thread-129816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:24.399 [DEBUG] [Thread-129816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:24.399 [DEBUG] [Thread-129816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:24.399 [DEBUG] [Thread-129816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] client lang: <none>
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] server lang: <none>
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] kex follows: False
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] Compression: none
2026-02-11T13:31:24.400 [DEBUG] [Thread-129816] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:31:24.459 [DEBUG] [Thread-129816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:31:24.460 [DEBUG] [Thread-129816] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:31:24.460 [DEBUG] [Thread-129816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:31:24.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:31:24.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:31:24.515 [DEBUG] [Thread-129816] [transport.py] [_log()] userauth is OK
2026-02-11T13:31:24.515 [DEBUG] [Thread-129816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:31:24.515 [DEBUG] [Thread-129816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:31:24.515 [DEBUG] [Thread-129816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:31:24.516 [DEBUG] [Thread-129816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:31:24.534 [INFO] [Thread-129816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:31:24.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:31:24.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:31:25.392 [DEBUG] [Thread-129816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:31:25.392 [DEBUG] [Thread-129816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:31:25.441 [DEBUG] [Thread-129816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:31:25.441 [DEBUG] [Thread-129816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:31:25.450 [DEBUG] [Thread-129816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:31:25.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:31:25.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:31:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:31:25.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:31:25.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:31:25.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:31:25.484 [DEBUG] [Thread-129816] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:31:36.993 [DEBUG] [Thread-129818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:52.049 [DEBUG] [Thread-129819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:31:55.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:31:55.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:31:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:31:57.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 31, 44), 15.78, 36.58, 0.0, 35.69, 23.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:31:57.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:31:44
2026-02-11T13:31:57.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:31:57.842 [DEBUG] [Thread-129820] [transport.py] [_log()] starting thread (client mode): 0xa2d6d390
2026-02-11T13:31:57.843 [DEBUG] [Thread-129820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:31:57.863 [DEBUG] [Thread-129820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:31:57.863 [INFO] [Thread-129820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:31:57.866 [DEBUG] [Thread-129820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:31:57.866 [DEBUG] [Thread-129820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:31:57.866 [DEBUG] [Thread-129820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:31:57.866 [DEBUG] [Thread-129820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:57.866 [DEBUG] [Thread-129820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] client lang: <none>
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] server lang: <none>
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] kex follows: False
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] Compression: none
2026-02-11T13:31:57.867 [DEBUG] [Thread-129820] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:31:57.883 [DEBUG] [Thread-129820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:31:57.884 [DEBUG] [Thread-129820] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:31:57.884 [DEBUG] [Thread-129820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:31:57.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:31:57.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:31:57.886 [DEBUG] [Thread-129820] [transport.py] [_log()] userauth is OK
2026-02-11T13:31:57.887 [DEBUG] [Thread-129820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:31:57.887 [DEBUG] [Thread-129820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:31:57.887 [DEBUG] [Thread-129820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:31:57.887 [DEBUG] [Thread-129820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:31:57.911 [INFO] [Thread-129820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:31:57.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:31:58.579 [DEBUG] [Thread-129820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:31:58.579 [DEBUG] [Thread-129820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:31:58.580 [DEBUG] [Thread-129820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:31:58.620 [DEBUG] [Thread-129820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:31:58.621 [DEBUG] [Thread-129820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:31:58.624 [DEBUG] [Thread-129820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:31:58.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:31:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:31:58.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:31:58.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:31:58.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:31:58.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:31:58.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:31:58.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:31:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:31:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.480351 -999.00  +23.20  32.54     43  +10.10 1 2 2 1 1   888    0 15.35 74.48 ----- 28.4 32.5 294.6 41.1 28.9 -19.5 28.6 -15.7 28.1 -16.6 28.6 -16.8
2026-02-11T13:31:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:31:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:31:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.480351
2026-02-11T13:31:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:31:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:31:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:31:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:31:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:31:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:31:44', tmtdew=15.78, humidity=36.58, cloud=0.0, wind=35.69, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:31:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:31:58.651 [DEBUG] [Thread-129820] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:31:58.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:31:58.757 [DEBUG] [Thread-129823] [transport.py] [_log()] starting thread (client mode): 0xa2db7be0
2026-02-11T13:31:58.757 [DEBUG] [Thread-129823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:31:58.771 [DEBUG] [Thread-129823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:31:58.771 [INFO] [Thread-129823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:31:58.779 [DEBUG] [Thread-129823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:31:58.779 [DEBUG] [Thread-129823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:31:58.779 [DEBUG] [Thread-129823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] client lang: <none>
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] server lang: <none>
2026-02-11T13:31:58.780 [DEBUG] [Thread-129823] [transport.py] [_log()] kex follows: False
2026-02-11T13:31:58.781 [DEBUG] [Thread-129823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:31:58.781 [DEBUG] [Thread-129823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:31:58.781 [DEBUG] [Thread-129823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:31:58.781 [DEBUG] [Thread-129823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:31:58.781 [DEBUG] [Thread-129823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:31:58.781 [DEBUG] [Thread-129823] [transport.py] [_log()] Compression: none
2026-02-11T13:31:58.781 [DEBUG] [Thread-129823] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:31:58.841 [DEBUG] [Thread-129823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:31:58.841 [DEBUG] [Thread-129823] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:31:58.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:31:58.843 [DEBUG] [Thread-129823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:31:58.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:31:58.900 [DEBUG] [Thread-129823] [transport.py] [_log()] userauth is OK
2026-02-11T13:31:58.900 [DEBUG] [Thread-129823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:31:58.901 [DEBUG] [Thread-129823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:31:58.901 [DEBUG] [Thread-129823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:31:58.901 [DEBUG] [Thread-129823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:31:58.921 [INFO] [Thread-129823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:31:58.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:31:58.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:31:59.796 [DEBUG] [Thread-129823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:31:59.796 [DEBUG] [Thread-129823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:31:59.844 [DEBUG] [Thread-129823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:31:59.844 [DEBUG] [Thread-129823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:31:59.854 [DEBUG] [Thread-129823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:31:59.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:31:59.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:31:59.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:31:59.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:31:59.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:31:59.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:31:59.889 [DEBUG] [Thread-129823] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:32:07.086 [DEBUG] [Thread-129825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:32:17.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:32:17.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:32:17.078 [DEBUG] [Thread-129826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:32:22.144 [DEBUG] [Thread-129827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:32:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:32:29.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:32:29.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:32:31.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 32, 19), 15.85, 36.45, 0.0, 32.29, 23.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:32:31.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:32:19
2026-02-11T13:32:32.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:32:32.294 [DEBUG] [Thread-129828] [transport.py] [_log()] starting thread (client mode): 0xa5758940
2026-02-11T13:32:32.295 [DEBUG] [Thread-129828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:32:32.316 [DEBUG] [Thread-129828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:32:32.316 [INFO] [Thread-129828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:32:32.319 [DEBUG] [Thread-129828] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:32:32.319 [DEBUG] [Thread-129828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:32:32.319 [DEBUG] [Thread-129828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:32:32.319 [DEBUG] [Thread-129828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] client lang: <none>
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] server lang: <none>
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] kex follows: False
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] Compression: none
2026-02-11T13:32:32.320 [DEBUG] [Thread-129828] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:32:32.338 [DEBUG] [Thread-129828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:32:32.338 [DEBUG] [Thread-129828] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:32:32.339 [DEBUG] [Thread-129828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:32:32.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:32:32.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:32:32.341 [DEBUG] [Thread-129828] [transport.py] [_log()] userauth is OK
2026-02-11T13:32:32.341 [DEBUG] [Thread-129828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:32:32.341 [DEBUG] [Thread-129828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:32:32.341 [DEBUG] [Thread-129828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:32:32.341 [DEBUG] [Thread-129828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:32:32.366 [INFO] [Thread-129828] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:32:32.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:32:32.989 [DEBUG] [Thread-129828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:32:32.989 [DEBUG] [Thread-129828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:32:32.990 [DEBUG] [Thread-129828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:32:33.030 [DEBUG] [Thread-129828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:32:33.030 [DEBUG] [Thread-129828] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:32:33.033 [DEBUG] [Thread-129828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:32:33.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:32:33.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:32:33.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:32:33.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:32:33.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:32:33.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:32:33.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:32:33.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:32:33.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:32:33.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.480699 -999.00  +23.30  24.61     43  +10.40 1 2 1 1 1   888    0 15.30 68.13 ----- 24.6 24.6 295.6 33.6 29.4 -13.5 29.0 -12.4 28.6 -12.7 29.1 -12.1
2026-02-11T13:32:33.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:32:33.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:32:33.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.480699
2026-02-11T13:32:33.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:32:33.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:32:33.055 [DEBUG] [Thread-129828] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:32:33.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:32:33.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:32:33.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:32:33.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:32:19', tmtdew=15.85, humidity=36.45, cloud=0.0, wind=32.29, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:32:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:32:33.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:32:33.149 [DEBUG] [Thread-129831] [transport.py] [_log()] starting thread (client mode): 0xa5759390
2026-02-11T13:32:33.150 [DEBUG] [Thread-129831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:32:33.164 [DEBUG] [Thread-129831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:32:33.164 [INFO] [Thread-129831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:32:33.172 [DEBUG] [Thread-129831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] client lang: <none>
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] server lang: <none>
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] kex follows: False
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:32:33.173 [DEBUG] [Thread-129831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:32:33.174 [DEBUG] [Thread-129831] [transport.py] [_log()] Compression: none
2026-02-11T13:32:33.174 [DEBUG] [Thread-129831] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:32:33.232 [DEBUG] [Thread-129831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:32:33.232 [DEBUG] [Thread-129831] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:32:33.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:32:33.234 [DEBUG] [Thread-129831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:32:33.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:32:33.288 [DEBUG] [Thread-129831] [transport.py] [_log()] userauth is OK
2026-02-11T13:32:33.288 [DEBUG] [Thread-129831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:32:33.288 [DEBUG] [Thread-129831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:32:33.288 [DEBUG] [Thread-129831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:32:33.288 [DEBUG] [Thread-129831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:32:33.309 [INFO] [Thread-129831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:32:33.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:32:33.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:32:34.140 [DEBUG] [Thread-129831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:32:34.140 [DEBUG] [Thread-129831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:32:34.188 [DEBUG] [Thread-129831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:32:34.188 [DEBUG] [Thread-129831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:32:34.198 [DEBUG] [Thread-129831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:32:34.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:32:34.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:32:34.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:32:34.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:32:34.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:32:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:32:34.236 [DEBUG] [Thread-129831] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:32:37.181 [DEBUG] [Thread-129833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:32:52.246 [DEBUG] [Thread-129834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:33:04.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:33:04.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:33:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:33:06.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 32, 55), 15.51, 37.27, 0.0, 22.51, 23.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:33:06.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:32:55
2026-02-11T13:33:06.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:33:06.560 [DEBUG] [Thread-129835] [transport.py] [_log()] starting thread (client mode): 0xa2db6fe0
2026-02-11T13:33:06.560 [DEBUG] [Thread-129835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:33:06.581 [DEBUG] [Thread-129835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:33:06.582 [INFO] [Thread-129835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] client lang: <none>
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] server lang: <none>
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] kex follows: False
2026-02-11T13:33:06.584 [DEBUG] [Thread-129835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:33:06.585 [DEBUG] [Thread-129835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:33:06.585 [DEBUG] [Thread-129835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:33:06.585 [DEBUG] [Thread-129835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:33:06.585 [DEBUG] [Thread-129835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:33:06.585 [DEBUG] [Thread-129835] [transport.py] [_log()] Compression: none
2026-02-11T13:33:06.585 [DEBUG] [Thread-129835] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:33:06.597 [DEBUG] [Thread-129835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:33:06.598 [DEBUG] [Thread-129835] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:33:06.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:33:06.599 [DEBUG] [Thread-129835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:33:06.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:33:06.601 [DEBUG] [Thread-129835] [transport.py] [_log()] userauth is OK
2026-02-11T13:33:06.601 [DEBUG] [Thread-129835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:33:06.602 [DEBUG] [Thread-129835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:33:06.602 [DEBUG] [Thread-129835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:33:06.602 [DEBUG] [Thread-129835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:33:06.627 [INFO] [Thread-129835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:33:06.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:33:07.256 [DEBUG] [Thread-129835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:33:07.256 [DEBUG] [Thread-129835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:33:07.257 [DEBUG] [Thread-129835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:33:07.282 [DEBUG] [Thread-129837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:33:07.297 [DEBUG] [Thread-129835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:33:07.297 [DEBUG] [Thread-129835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:33:07.300 [DEBUG] [Thread-129835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:33:07.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:33:07.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:33:07.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:33:07.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:33:07.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:33:07.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:33:07.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:33:07.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:33:07.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:33:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.481045 -999.00  +23.30  22.80     43  +10.30 1 2 1 1 1   888    0 14.98 62.13 ----- 19.7 22.8 311.6 25.8 29.4 -13.3 29.1 -12.7 28.5 -14.1 29.3 -12.0
2026-02-11T13:33:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:33:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:33:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.481045
2026-02-11T13:33:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:33:07.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:33:07.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:33:07.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:33:07.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:33:07.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:32:55', tmtdew=15.51, humidity=37.27, cloud=0.0, wind=22.51, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:32:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:33:07.326 [DEBUG] [Thread-129835] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:33:07.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:33:07.432 [DEBUG] [Thread-129839] [transport.py] [_log()] starting thread (client mode): 0xa2db5cc0
2026-02-11T13:33:07.433 [DEBUG] [Thread-129839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:33:07.447 [DEBUG] [Thread-129839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:33:07.448 [INFO] [Thread-129839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:33:07.455 [DEBUG] [Thread-129839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:33:07.456 [DEBUG] [Thread-129839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:33:07.456 [DEBUG] [Thread-129839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:33:07.456 [DEBUG] [Thread-129839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:07.456 [DEBUG] [Thread-129839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:07.456 [DEBUG] [Thread-129839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:07.456 [DEBUG] [Thread-129839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] client lang: <none>
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] server lang: <none>
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] kex follows: False
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:33:07.457 [DEBUG] [Thread-129839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:33:07.458 [DEBUG] [Thread-129839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:33:07.458 [DEBUG] [Thread-129839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:33:07.458 [DEBUG] [Thread-129839] [transport.py] [_log()] Compression: none
2026-02-11T13:33:07.458 [DEBUG] [Thread-129839] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:33:07.523 [DEBUG] [Thread-129839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:33:07.524 [DEBUG] [Thread-129839] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:33:07.524 [DEBUG] [Thread-129839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:33:07.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:33:07.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:33:07.580 [DEBUG] [Thread-129839] [transport.py] [_log()] userauth is OK
2026-02-11T13:33:07.580 [DEBUG] [Thread-129839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:33:07.580 [DEBUG] [Thread-129839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:33:07.581 [DEBUG] [Thread-129839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:33:07.581 [DEBUG] [Thread-129839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:33:07.602 [INFO] [Thread-129839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:33:07.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:33:07.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:33:08.491 [DEBUG] [Thread-129839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:33:08.492 [DEBUG] [Thread-129839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:33:08.539 [DEBUG] [Thread-129839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:33:08.539 [DEBUG] [Thread-129839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:33:08.548 [DEBUG] [Thread-129839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:33:08.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:33:08.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:33:08.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:33:08.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:33:08.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:33:08.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:33:08.587 [DEBUG] [Thread-129839] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:33:17.111 [DEBUG] [Thread-129841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:33:17.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:33:17.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:33:22.319 [DEBUG] [Thread-129842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:33:37.368 [DEBUG] [Thread-129843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:33:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:33:38.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:33:38.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
2026-02-11T13:33:40.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 33, 31), 15.59, 37.12, 0.0, 19.25, 23.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:33:40.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:33:31
2026-02-11T13:33:40.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:33:41.011 [DEBUG] [Thread-129844] [transport.py] [_log()] starting thread (client mode): 0xa5758e50
2026-02-11T13:33:41.012 [DEBUG] [Thread-129844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:33:41.032 [DEBUG] [Thread-129844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:33:41.032 [INFO] [Thread-129844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:33:41.033 [DEBUG] [Thread-129844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:33:41.033 [DEBUG] [Thread-129844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:33:41.033 [DEBUG] [Thread-129844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:33:41.033 [DEBUG] [Thread-129844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:41.033 [DEBUG] [Thread-129844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:41.033 [DEBUG] [Thread-129844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:41.033 [DEBUG] [Thread-129844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] client lang: <none>
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] server lang: <none>
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] kex follows: False
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] Compression: none
2026-02-11T13:33:41.034 [DEBUG] [Thread-129844] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:33:41.043 [DEBUG] [Thread-129844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:33:41.044 [DEBUG] [Thread-129844] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:33:41.044 [DEBUG] [Thread-129844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:33:41.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:33:41.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:33:41.046 [DEBUG] [Thread-129844] [transport.py] [_log()] userauth is OK
2026-02-11T13:33:41.046 [DEBUG] [Thread-129844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:33:41.047 [DEBUG] [Thread-129844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:33:41.047 [DEBUG] [Thread-129844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:33:41.047 [DEBUG] [Thread-129844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:33:41.065 [INFO] [Thread-129844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:33:41.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:33:41.702 [DEBUG] [Thread-129844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:33:41.703 [DEBUG] [Thread-129844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:33:41.703 [DEBUG] [Thread-129844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:33:41.743 [DEBUG] [Thread-129844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:33:41.744 [DEBUG] [Thread-129844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:33:41.747 [DEBUG] [Thread-129844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:33:41.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:33:41.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:33:41.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:33:41.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:33:41.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:33:41.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:33:41.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:33:41.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:33:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:33:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.481393 -999.00  +23.10  25.75     44  +10.20 1 2 1 1 1   888    0 15.18 62.33 ----- 18.8 25.8 282.2 36.7 29.8 -16.1 29.2 -14.8 28.9 -10.9 29.4 -15.2
2026-02-11T13:33:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:33:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:33:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.481393
2026-02-11T13:33:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:33:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:33:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:33:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:33:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:33:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:33:31', tmtdew=15.59, humidity=37.12, cloud=0.0, wind=19.25, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:33:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:33:41.775 [DEBUG] [Thread-129844] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:33:41.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:33:41.872 [DEBUG] [Thread-129847] [transport.py] [_log()] starting thread (client mode): 0xa81d7a30
2026-02-11T13:33:41.872 [DEBUG] [Thread-129847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:33:41.888 [DEBUG] [Thread-129847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:33:41.888 [INFO] [Thread-129847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:33:41.896 [DEBUG] [Thread-129847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] client lang: <none>
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] server lang: <none>
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] kex follows: False
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] Compression: none
2026-02-11T13:33:41.897 [DEBUG] [Thread-129847] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:33:41.956 [DEBUG] [Thread-129847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:33:41.956 [DEBUG] [Thread-129847] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:33:41.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:33:41.958 [DEBUG] [Thread-129847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:33:41.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:33:42.012 [DEBUG] [Thread-129847] [transport.py] [_log()] userauth is OK
2026-02-11T13:33:42.012 [DEBUG] [Thread-129847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:33:42.012 [DEBUG] [Thread-129847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:33:42.013 [DEBUG] [Thread-129847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:33:42.013 [DEBUG] [Thread-129847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:33:42.031 [INFO] [Thread-129847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:33:42.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:33:42.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:33:42.896 [DEBUG] [Thread-129847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:33:42.897 [DEBUG] [Thread-129847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:33:42.945 [DEBUG] [Thread-129847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:33:42.945 [DEBUG] [Thread-129847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:33:42.954 [DEBUG] [Thread-129847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:33:42.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:33:42.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:33:42.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:33:42.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:33:42.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:33:42.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:33:42.988 [DEBUG] [Thread-129847] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:33:52.404 [DEBUG] [Thread-129849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:34:07.458 [DEBUG] [Thread-129850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:34:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:34:12.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:34:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:34:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 34, 6), 15.5, 37.3, 0.0, 23.06, 23.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:34:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:34:06
2026-02-11T13:34:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:34:15.307 [DEBUG] [Thread-129851] [transport.py] [_log()] starting thread (client mode): 0xa81d7160
2026-02-11T13:34:15.307 [DEBUG] [Thread-129851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:34:15.327 [DEBUG] [Thread-129851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:34:15.327 [INFO] [Thread-129851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:34:15.330 [DEBUG] [Thread-129851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:34:15.330 [DEBUG] [Thread-129851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:34:15.330 [DEBUG] [Thread-129851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] client lang: <none>
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] server lang: <none>
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] kex follows: False
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] Compression: none
2026-02-11T13:34:15.331 [DEBUG] [Thread-129851] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:34:15.349 [DEBUG] [Thread-129851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:34:15.349 [DEBUG] [Thread-129851] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:34:15.350 [DEBUG] [Thread-129851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:34:15.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:34:15.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:34:15.352 [DEBUG] [Thread-129851] [transport.py] [_log()] userauth is OK
2026-02-11T13:34:15.352 [DEBUG] [Thread-129851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:34:15.352 [DEBUG] [Thread-129851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:34:15.352 [DEBUG] [Thread-129851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:34:15.352 [DEBUG] [Thread-129851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:34:15.389 [INFO] [Thread-129851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:34:15.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:34:16.024 [DEBUG] [Thread-129851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:34:16.024 [DEBUG] [Thread-129851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:34:16.024 [DEBUG] [Thread-129851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:34:16.065 [DEBUG] [Thread-129851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:34:16.066 [DEBUG] [Thread-129851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:34:16.070 [DEBUG] [Thread-129851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:34:16.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:34:16.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:34:16.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:34:16.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:34:16.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:34:16.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:34:16.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:34:16.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:34:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:34:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.481740 -999.00  +23.10  15.53     44  +10.30 1 2 1 1 1   888    0 14.76 55.93 ----- 20.5 15.5 306.0 20.4 29.8 -15.9 29.2 -14.1 28.8 -11.1 29.4 -14.6
2026-02-11T13:34:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:34:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:34:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.481740
2026-02-11T13:34:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:34:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:34:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:34:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:34:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:34:16.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:34:06', tmtdew=15.5, humidity=37.3, cloud=0.0, wind=23.06, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:33:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:34:16.095 [DEBUG] [Thread-129851] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:34:16.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:34:16.199 [DEBUG] [Thread-129854] [transport.py] [_log()] starting thread (client mode): 0xa2db7f10
2026-02-11T13:34:16.200 [DEBUG] [Thread-129854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:34:16.214 [DEBUG] [Thread-129854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:34:16.214 [INFO] [Thread-129854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] client lang: <none>
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] server lang: <none>
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] kex follows: False
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:34:16.222 [DEBUG] [Thread-129854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:34:16.223 [DEBUG] [Thread-129854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:34:16.223 [DEBUG] [Thread-129854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:34:16.223 [DEBUG] [Thread-129854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:34:16.223 [DEBUG] [Thread-129854] [transport.py] [_log()] Compression: none
2026-02-11T13:34:16.223 [DEBUG] [Thread-129854] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:34:16.283 [DEBUG] [Thread-129854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:34:16.284 [DEBUG] [Thread-129854] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:34:16.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:34:16.285 [DEBUG] [Thread-129854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:34:16.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:34:16.339 [DEBUG] [Thread-129854] [transport.py] [_log()] userauth is OK
2026-02-11T13:34:16.340 [DEBUG] [Thread-129854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:34:16.340 [DEBUG] [Thread-129854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:34:16.340 [DEBUG] [Thread-129854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:34:16.340 [DEBUG] [Thread-129854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:34:16.360 [INFO] [Thread-129854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:34:16.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:34:16.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:34:17.144 [DEBUG] [Thread-129856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:34:17.186 [DEBUG] [Thread-129854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:34:17.186 [DEBUG] [Thread-129854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:34:17.234 [DEBUG] [Thread-129854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:34:17.235 [DEBUG] [Thread-129854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:34:17.244 [DEBUG] [Thread-129854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:34:17.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:34:17.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:34:17.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:34:17.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:34:17.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:34:17.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:34:17.279 [DEBUG] [Thread-129854] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:34:17.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:34:17.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:34:22.497 [DEBUG] [Thread-129857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:34:37.550 [DEBUG] [Thread-129858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:34:47.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:34:47.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:34:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:34:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 34, 41), 16.81, 34.33, 0.0, 27.03, 25.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:34:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:34:41
2026-02-11T13:34:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:34:49.634 [DEBUG] [Thread-129859] [transport.py] [_log()] starting thread (client mode): 0xa2d3d690
2026-02-11T13:34:49.634 [DEBUG] [Thread-129859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:34:49.656 [DEBUG] [Thread-129859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:34:49.656 [INFO] [Thread-129859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] client lang: <none>
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] server lang: <none>
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] kex follows: False
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:34:49.659 [DEBUG] [Thread-129859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:34:49.660 [DEBUG] [Thread-129859] [transport.py] [_log()] Compression: none
2026-02-11T13:34:49.660 [DEBUG] [Thread-129859] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:34:49.676 [DEBUG] [Thread-129859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:34:49.677 [DEBUG] [Thread-129859] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:34:49.677 [DEBUG] [Thread-129859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:34:49.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:34:49.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:34:49.679 [DEBUG] [Thread-129859] [transport.py] [_log()] userauth is OK
2026-02-11T13:34:49.679 [DEBUG] [Thread-129859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:34:49.680 [DEBUG] [Thread-129859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:34:49.680 [DEBUG] [Thread-129859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:34:49.680 [DEBUG] [Thread-129859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:34:49.704 [INFO] [Thread-129859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:34:49.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:34:50.321 [DEBUG] [Thread-129859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:34:50.321 [DEBUG] [Thread-129859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:34:50.321 [DEBUG] [Thread-129859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:34:50.362 [DEBUG] [Thread-129859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:34:50.363 [DEBUG] [Thread-129859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:34:50.366 [DEBUG] [Thread-129859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:34:50.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:34:50.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:34:50.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:34:50.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:34:50.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:34:50.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:34:50.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:34:50.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:34:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:34:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.482088 -999.00  +23.60  27.58     42  +10.10 1 2 1 1 1   888    0 15.19 57.89 ----- 31.8 27.6 280.4 30.5 29.3 -20.0 28.8 -17.7 28.4 -17.7 28.9 -18.8
2026-02-11T13:34:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:34:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:34:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.482088
2026-02-11T13:34:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:34:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:34:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:34:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:34:50.391 [DEBUG] [Thread-129859] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:34:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:34:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:34:41', tmtdew=16.81, humidity=34.33, cloud=0.0, wind=27.03, temperature=25.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:34:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:34:50.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:34:50.489 [DEBUG] [Thread-129862] [transport.py] [_log()] starting thread (client mode): 0xa2d7baf0
2026-02-11T13:34:50.489 [DEBUG] [Thread-129862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:34:50.504 [DEBUG] [Thread-129862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:34:50.504 [INFO] [Thread-129862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] client lang: <none>
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] server lang: <none>
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] kex follows: False
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:34:50.512 [DEBUG] [Thread-129862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:34:50.513 [DEBUG] [Thread-129862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:34:50.513 [DEBUG] [Thread-129862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:34:50.513 [DEBUG] [Thread-129862] [transport.py] [_log()] Compression: none
2026-02-11T13:34:50.513 [DEBUG] [Thread-129862] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:34:50.572 [DEBUG] [Thread-129862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:34:50.572 [DEBUG] [Thread-129862] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:34:50.573 [DEBUG] [Thread-129862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:34:50.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:34:50.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:34:50.628 [DEBUG] [Thread-129862] [transport.py] [_log()] userauth is OK
2026-02-11T13:34:50.628 [DEBUG] [Thread-129862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:34:50.628 [DEBUG] [Thread-129862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:34:50.628 [DEBUG] [Thread-129862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:34:50.628 [DEBUG] [Thread-129862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:34:50.648 [INFO] [Thread-129862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:34:50.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:34:50.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:34:51.480 [DEBUG] [Thread-129862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:34:51.480 [DEBUG] [Thread-129862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:34:51.528 [DEBUG] [Thread-129862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:34:51.529 [DEBUG] [Thread-129862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:34:51.538 [DEBUG] [Thread-129862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:34:51.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:34:51.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:34:51.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:34:51.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:34:51.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:34:51.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:34:51.575 [DEBUG] [Thread-129862] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:34:52.589 [DEBUG] [Thread-129864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:07.651 [DEBUG] [Thread-129865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:17.205 [DEBUG] [Thread-129866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:17.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:17.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:35:21.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:35:21.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:35:22.688 [DEBUG] [Thread-129867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 34, 41), 16.81, 34.33, 0.0, 27.03, 25.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:35:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:34:41
2026-02-11T13:35:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:35:24.319 [DEBUG] [Thread-129868] [transport.py] [_log()] starting thread (client mode): 0xa2db5c60
2026-02-11T13:35:24.320 [DEBUG] [Thread-129868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:35:24.341 [DEBUG] [Thread-129868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:35:24.341 [INFO] [Thread-129868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:35:24.344 [DEBUG] [Thread-129868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:35:24.344 [DEBUG] [Thread-129868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:35:24.344 [DEBUG] [Thread-129868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:35:24.344 [DEBUG] [Thread-129868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:24.344 [DEBUG] [Thread-129868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:24.344 [DEBUG] [Thread-129868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:24.344 [DEBUG] [Thread-129868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] client lang: <none>
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] server lang: <none>
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] kex follows: False
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] Compression: none
2026-02-11T13:35:24.345 [DEBUG] [Thread-129868] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:35:24.362 [DEBUG] [Thread-129868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:35:24.363 [DEBUG] [Thread-129868] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:35:24.363 [DEBUG] [Thread-129868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:35:24.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:35:24.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:35:24.365 [DEBUG] [Thread-129868] [transport.py] [_log()] userauth is OK
2026-02-11T13:35:24.366 [DEBUG] [Thread-129868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:35:24.366 [DEBUG] [Thread-129868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:35:24.366 [DEBUG] [Thread-129868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:35:24.366 [DEBUG] [Thread-129868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:35:24.387 [INFO] [Thread-129868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:35:24.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:35:25.046 [DEBUG] [Thread-129868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:35:25.046 [DEBUG] [Thread-129868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:35:25.046 [DEBUG] [Thread-129868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:35:25.087 [DEBUG] [Thread-129868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:35:25.088 [DEBUG] [Thread-129868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:35:25.091 [DEBUG] [Thread-129868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:35:25.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:35:25.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:35:25.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:35:25.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:35:25.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:35:25.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:35:25.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:35:25.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:35:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:35:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.482435 -999.00  +23.30  22.11     43  +10.00 1 2 1 1 1   888    0 14.66 51.34 ----- 23.9 22.1 279.0 36.2 28.8 -18.8 28.6 -14.0 27.8 -19.5 28.7 -14.1
2026-02-11T13:35:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:35:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:35:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.482435
2026-02-11T13:35:25.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:35:25.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:35:25.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:35:25.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:35:25.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:35:25.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:34:41', tmtdew=16.81, humidity=34.33, cloud=0.0, wind=27.03, temperature=25.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:34:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:35:25.116 [DEBUG] [Thread-129868] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:35:25.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:35:25.210 [DEBUG] [Thread-129871] [transport.py] [_log()] starting thread (client mode): 0xa2d03be0
2026-02-11T13:35:25.210 [DEBUG] [Thread-129871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:35:25.225 [DEBUG] [Thread-129871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:35:25.226 [INFO] [Thread-129871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:35:25.233 [DEBUG] [Thread-129871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:35:25.233 [DEBUG] [Thread-129871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:35:25.233 [DEBUG] [Thread-129871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] client lang: <none>
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] server lang: <none>
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] kex follows: False
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:35:25.234 [DEBUG] [Thread-129871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:35:25.235 [DEBUG] [Thread-129871] [transport.py] [_log()] Compression: none
2026-02-11T13:35:25.235 [DEBUG] [Thread-129871] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:35:25.292 [DEBUG] [Thread-129871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:35:25.292 [DEBUG] [Thread-129871] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:35:25.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:35:25.294 [DEBUG] [Thread-129871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:35:25.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:35:25.348 [DEBUG] [Thread-129871] [transport.py] [_log()] userauth is OK
2026-02-11T13:35:25.348 [DEBUG] [Thread-129871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:35:25.349 [DEBUG] [Thread-129871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:35:25.349 [DEBUG] [Thread-129871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:35:25.349 [DEBUG] [Thread-129871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:35:25.368 [INFO] [Thread-129871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:35:25.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:35:25.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:35:26.254 [DEBUG] [Thread-129871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:35:26.254 [DEBUG] [Thread-129871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:35:26.302 [DEBUG] [Thread-129871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:35:26.303 [DEBUG] [Thread-129871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:35:26.312 [DEBUG] [Thread-129871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:35:26.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:35:26.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:35:26.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:35:26.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:35:26.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:35:26.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:35:26.348 [DEBUG] [Thread-129871] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:35:37.725 [DEBUG] [Thread-129873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:52.773 [DEBUG] [Thread-129874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:35:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:35:56.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:35:56.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:35:58.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 35, 16), 15.84, 36.07, 0.0, 28.53, 23.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:35:58.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:35:16
2026-02-11T13:35:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:35:58.797 [DEBUG] [Thread-129875] [transport.py] [_log()] starting thread (client mode): 0xa2db5180
2026-02-11T13:35:58.797 [DEBUG] [Thread-129875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:35:58.817 [DEBUG] [Thread-129875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:35:58.817 [INFO] [Thread-129875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:35:58.820 [DEBUG] [Thread-129875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:35:58.820 [DEBUG] [Thread-129875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:35:58.820 [DEBUG] [Thread-129875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:35:58.820 [DEBUG] [Thread-129875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:58.820 [DEBUG] [Thread-129875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:58.820 [DEBUG] [Thread-129875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:58.820 [DEBUG] [Thread-129875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] client lang: <none>
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] server lang: <none>
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] kex follows: False
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] Compression: none
2026-02-11T13:35:58.821 [DEBUG] [Thread-129875] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:35:58.842 [DEBUG] [Thread-129875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:35:58.843 [DEBUG] [Thread-129875] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:35:58.843 [DEBUG] [Thread-129875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:35:58.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:35:58.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:35:58.846 [DEBUG] [Thread-129875] [transport.py] [_log()] userauth is OK
2026-02-11T13:35:58.847 [DEBUG] [Thread-129875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:35:58.847 [DEBUG] [Thread-129875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:35:58.847 [DEBUG] [Thread-129875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:35:58.847 [DEBUG] [Thread-129875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:35:58.872 [INFO] [Thread-129875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:35:58.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:35:59.522 [DEBUG] [Thread-129875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:35:59.522 [DEBUG] [Thread-129875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:35:59.523 [DEBUG] [Thread-129875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:35:59.563 [DEBUG] [Thread-129875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:35:59.564 [DEBUG] [Thread-129875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:35:59.567 [DEBUG] [Thread-129875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:35:59.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:35:59.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:35:59.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:35:59.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:35:59.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:35:59.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:35:59.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:35:59.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:35:59.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:35:59.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.483129 -999.00  +23.30  17.95     43  +10.00 1 2 1 1 1   888    0 14.34 44.49 ----- 17.9 17.9 263.2 26.2 29.1 -13.7 28.7 -15.9 28.1 -11.4 28.8 -17.0
2026-02-11T13:35:59.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:35:59.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:35:59.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.483129
2026-02-11T13:35:59.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:35:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:35:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:35:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:35:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:35:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:35:16', tmtdew=15.84, humidity=36.07, cloud=0.0, wind=28.53, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:35:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:35:59.596 [DEBUG] [Thread-129875] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:35:59.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:35:59.690 [DEBUG] [Thread-129878] [transport.py] [_log()] starting thread (client mode): 0xa2d798d0
2026-02-11T13:35:59.691 [DEBUG] [Thread-129878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:35:59.705 [DEBUG] [Thread-129878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:35:59.706 [INFO] [Thread-129878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:35:59.713 [DEBUG] [Thread-129878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:35:59.713 [DEBUG] [Thread-129878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] client lang: <none>
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] server lang: <none>
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] kex follows: False
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] Compression: none
2026-02-11T13:35:59.714 [DEBUG] [Thread-129878] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:35:59.772 [DEBUG] [Thread-129878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:35:59.772 [DEBUG] [Thread-129878] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:35:59.773 [DEBUG] [Thread-129878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:35:59.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:35:59.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:35:59.830 [DEBUG] [Thread-129878] [transport.py] [_log()] userauth is OK
2026-02-11T13:35:59.830 [DEBUG] [Thread-129878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:35:59.830 [DEBUG] [Thread-129878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:35:59.831 [DEBUG] [Thread-129878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:35:59.831 [DEBUG] [Thread-129878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:35:59.850 [INFO] [Thread-129878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:35:59.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:35:59.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:36:00.690 [DEBUG] [Thread-129878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:36:00.690 [DEBUG] [Thread-129878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:36:00.738 [DEBUG] [Thread-129878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:36:00.739 [DEBUG] [Thread-129878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:36:00.748 [DEBUG] [Thread-129878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:36:00.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:36:00.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:36:00.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:36:00.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:36:00.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:36:00.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:36:00.785 [DEBUG] [Thread-129878] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:36:07.807 [DEBUG] [Thread-129880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:36:17.250 [DEBUG] [Thread-129881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:36:17.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:36:17.587 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:36:22.856 [DEBUG] [Thread-129882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:36:30.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:36:30.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:36:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:36:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 35, 52), 15.52, 36.96, 0.0, 19.39, 23.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:36:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:35:52
2026-02-11T13:36:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:36:33.347 [DEBUG] [Thread-129883] [transport.py] [_log()] starting thread (client mode): 0xa575b0d0
2026-02-11T13:36:33.347 [DEBUG] [Thread-129883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:36:33.366 [DEBUG] [Thread-129883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:36:33.366 [INFO] [Thread-129883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] client lang: <none>
2026-02-11T13:36:33.369 [DEBUG] [Thread-129883] [transport.py] [_log()] server lang: <none>
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] kex follows: False
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] Compression: none
2026-02-11T13:36:33.370 [DEBUG] [Thread-129883] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:36:33.386 [DEBUG] [Thread-129883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:36:33.386 [DEBUG] [Thread-129883] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:36:33.387 [DEBUG] [Thread-129883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:36:33.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:36:33.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:36:33.389 [DEBUG] [Thread-129883] [transport.py] [_log()] userauth is OK
2026-02-11T13:36:33.389 [DEBUG] [Thread-129883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:36:33.389 [DEBUG] [Thread-129883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:36:33.389 [DEBUG] [Thread-129883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:36:33.389 [DEBUG] [Thread-129883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:36:33.416 [INFO] [Thread-129883] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:36:33.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:36:34.043 [DEBUG] [Thread-129883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:36:34.043 [DEBUG] [Thread-129883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:36:34.044 [DEBUG] [Thread-129883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:36:34.084 [DEBUG] [Thread-129883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:36:34.085 [DEBUG] [Thread-129883] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:36:34.088 [DEBUG] [Thread-129883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:36:34.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:36:34.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:36:34.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:36:34.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:36:34.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:36:34.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:36:34.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:36:34.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:36:34.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:36:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.483476 -999.00  +23.40  21.48     42  +10.00 1 2 1 1 1   888    0 14.69 38.33 ----- 16.3 21.5 276.4 28.8 29.3 -15.3 28.8 -16.8 28.4 -14.0 28.9 -17.7
2026-02-11T13:36:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:36:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:36:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.483476
2026-02-11T13:36:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:36:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:36:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:36:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:36:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:36:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:35:52', tmtdew=15.52, humidity=36.96, cloud=0.0, wind=19.39, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:36:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:36:34.116 [DEBUG] [Thread-129883] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:36:34.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:36:34.206 [DEBUG] [Thread-129886] [transport.py] [_log()] starting thread (client mode): 0xa2d12f50
2026-02-11T13:36:34.206 [DEBUG] [Thread-129886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:36:34.224 [DEBUG] [Thread-129886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:36:34.224 [INFO] [Thread-129886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:36:34.232 [DEBUG] [Thread-129886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:36:34.232 [DEBUG] [Thread-129886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] client lang: <none>
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] server lang: <none>
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] kex follows: False
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:36:34.233 [DEBUG] [Thread-129886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:36:34.234 [DEBUG] [Thread-129886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:36:34.234 [DEBUG] [Thread-129886] [transport.py] [_log()] Compression: none
2026-02-11T13:36:34.234 [DEBUG] [Thread-129886] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:36:34.291 [DEBUG] [Thread-129886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:36:34.291 [DEBUG] [Thread-129886] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:36:34.292 [DEBUG] [Thread-129886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:36:34.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:36:34.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:36:34.348 [DEBUG] [Thread-129886] [transport.py] [_log()] userauth is OK
2026-02-11T13:36:34.348 [DEBUG] [Thread-129886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:36:34.348 [DEBUG] [Thread-129886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:36:34.348 [DEBUG] [Thread-129886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:36:34.348 [DEBUG] [Thread-129886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:36:34.370 [INFO] [Thread-129886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:36:34.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:36:34.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:36:35.240 [DEBUG] [Thread-129886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:36:35.240 [DEBUG] [Thread-129886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:36:35.288 [DEBUG] [Thread-129886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:36:35.289 [DEBUG] [Thread-129886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:36:35.298 [DEBUG] [Thread-129886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:36:35.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:36:35.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:36: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') -> 00000000
2026-02-11T13:36:35.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:36:35.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:36:35.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:36:35.335 [DEBUG] [Thread-129886] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:36:37.893 [DEBUG] [Thread-129888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:36:52.945 [DEBUG] [Thread-129889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:37:05.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:37:05.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:37:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:37:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 36, 27), 15.92, 36.12, 0.0, 22.16, 23.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:37:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:36:27
2026-02-11T13:37:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:37:07.701 [DEBUG] [Thread-129890] [transport.py] [_log()] starting thread (client mode): 0xa2d781f0
2026-02-11T13:37:07.701 [DEBUG] [Thread-129890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:37:07.723 [DEBUG] [Thread-129890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:37:07.723 [INFO] [Thread-129890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:37:07.726 [DEBUG] [Thread-129890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:37:07.726 [DEBUG] [Thread-129890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:37:07.726 [DEBUG] [Thread-129890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:37:07.726 [DEBUG] [Thread-129890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:07.726 [DEBUG] [Thread-129890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] client lang: <none>
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] server lang: <none>
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] kex follows: False
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] Compression: none
2026-02-11T13:37:07.727 [DEBUG] [Thread-129890] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:37:07.744 [DEBUG] [Thread-129890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:37:07.744 [DEBUG] [Thread-129890] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:37:07.745 [DEBUG] [Thread-129890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:37:07.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:37:07.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:37:07.747 [DEBUG] [Thread-129890] [transport.py] [_log()] userauth is OK
2026-02-11T13:37:07.748 [DEBUG] [Thread-129890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:37:07.748 [DEBUG] [Thread-129890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:37:07.748 [DEBUG] [Thread-129890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:37:07.748 [DEBUG] [Thread-129890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:37:07.769 [INFO] [Thread-129890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:37:07.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:37:07.984 [DEBUG] [Thread-129892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:37:08.393 [DEBUG] [Thread-129890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:37:08.393 [DEBUG] [Thread-129890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:37:08.393 [DEBUG] [Thread-129890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:37:08.434 [DEBUG] [Thread-129890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:37:08.434 [DEBUG] [Thread-129890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:37:08.437 [DEBUG] [Thread-129890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:37:08.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:37:08.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:37:08.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:37:08.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:37:08.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:37:08.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:37:08.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:37:08.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:37:08.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:37:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.483824 -999.00  +22.90  20.74     43   +9.80 1 2 1 1 1   888    0 14.18 31.25 ----- 21.3 20.7 273.4 25.7 28.6 -20.4 28.3 -18.7 27.4 -18.6 28.2 -20.5
2026-02-11T13:37:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:37:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:37:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.483824
2026-02-11T13:37:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:37:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:37:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:37:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:37:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:37:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:36:27', tmtdew=15.92, humidity=36.12, cloud=0.0, wind=22.16, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:36:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:37:08.463 [DEBUG] [Thread-129890] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:37:08.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:37:08.565 [DEBUG] [Thread-129894] [transport.py] [_log()] starting thread (client mode): 0xa57598a0
2026-02-11T13:37:08.566 [DEBUG] [Thread-129894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:37:08.580 [DEBUG] [Thread-129894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:37:08.581 [INFO] [Thread-129894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:37:08.588 [DEBUG] [Thread-129894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:37:08.588 [DEBUG] [Thread-129894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:37:08.588 [DEBUG] [Thread-129894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:37:08.588 [DEBUG] [Thread-129894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:08.588 [DEBUG] [Thread-129894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] client lang: <none>
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] server lang: <none>
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] kex follows: False
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] Compression: none
2026-02-11T13:37:08.589 [DEBUG] [Thread-129894] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:37:08.648 [DEBUG] [Thread-129894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:37:08.649 [DEBUG] [Thread-129894] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:37:08.649 [DEBUG] [Thread-129894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:37:08.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:37:08.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:37:08.708 [DEBUG] [Thread-129894] [transport.py] [_log()] userauth is OK
2026-02-11T13:37:08.708 [DEBUG] [Thread-129894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:37:08.708 [DEBUG] [Thread-129894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:37:08.708 [DEBUG] [Thread-129894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:37:08.708 [DEBUG] [Thread-129894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:37:08.730 [INFO] [Thread-129894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:37:08.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:37:08.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:37:09.622 [DEBUG] [Thread-129894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:37:09.622 [DEBUG] [Thread-129894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:37:09.670 [DEBUG] [Thread-129894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:37:09.670 [DEBUG] [Thread-129894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:37:09.679 [DEBUG] [Thread-129894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:37:09.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:37: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')
2026-02-11T13:37:09.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:37:09.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:37:09.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:37:09.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:37:09.716 [DEBUG] [Thread-129894] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:37:17.294 [DEBUG] [Thread-129896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:37:17.726 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:37:17.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:37:23.019 [DEBUG] [Thread-129897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:37:38.077 [DEBUG] [Thread-129898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:37:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:37:39.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:37:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:37:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 37, 3), 16.13, 35.71, 0.0, 23.84, 24.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:37:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:37:03
2026-02-11T13:37:42.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:37:42.177 [DEBUG] [Thread-129899] [transport.py] [_log()] starting thread (client mode): 0xa5742320
2026-02-11T13:37:42.177 [DEBUG] [Thread-129899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:37:42.192 [DEBUG] [Thread-129899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:37:42.192 [INFO] [Thread-129899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] client lang: <none>
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] server lang: <none>
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] kex follows: False
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] Compression: none
2026-02-11T13:37:42.195 [DEBUG] [Thread-129899] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:37:42.214 [DEBUG] [Thread-129899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:37:42.215 [DEBUG] [Thread-129899] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:37:42.215 [DEBUG] [Thread-129899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:37:42.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:37:42.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:37:42.217 [DEBUG] [Thread-129899] [transport.py] [_log()] userauth is OK
2026-02-11T13:37:42.217 [DEBUG] [Thread-129899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:37:42.217 [DEBUG] [Thread-129899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:37:42.217 [DEBUG] [Thread-129899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:37:42.217 [DEBUG] [Thread-129899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:37:42.236 [INFO] [Thread-129899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:37:42.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:37:43.046 [DEBUG] [Thread-129899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:37:43.047 [DEBUG] [Thread-129899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:37:43.047 [DEBUG] [Thread-129899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:37:43.088 [DEBUG] [Thread-129899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:37:43.088 [DEBUG] [Thread-129899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:37:43.090 [DEBUG] [Thread-129899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:37:43.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:37:43.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:37:43.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:37:43.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:37:43.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:37:43.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:37:43.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:37:43.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:37:43.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:37:43.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.484171 -999.00  +23.10  16.28     43  +10.00 1 2 1 1 1   888    0 14.01 24.59 ----- 17.5 16.3 301.7 19.8 28.9 -13.5 28.6 -13.2 27.6 -14.2 28.6 -13.0
2026-02-11T13:37:43.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:37:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:37:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.484171
2026-02-11T13:37:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:37:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:37:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:37:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:37:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:37:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:37:03', tmtdew=16.13, humidity=35.71, cloud=0.0, wind=23.84, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:37:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:37:43.113 [DEBUG] [Thread-129899] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:37:43.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:37:43.217 [DEBUG] [Thread-129902] [transport.py] [_log()] starting thread (client mode): 0xa2d03e80
2026-02-11T13:37:43.217 [DEBUG] [Thread-129902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:37:43.230 [DEBUG] [Thread-129902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:37:43.231 [INFO] [Thread-129902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:37:43.238 [DEBUG] [Thread-129902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:37:43.238 [DEBUG] [Thread-129902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:37:43.238 [DEBUG] [Thread-129902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:37:43.238 [DEBUG] [Thread-129902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:43.238 [DEBUG] [Thread-129902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] client lang: <none>
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] server lang: <none>
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] kex follows: False
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:37:43.239 [DEBUG] [Thread-129902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:37:43.240 [DEBUG] [Thread-129902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:37:43.240 [DEBUG] [Thread-129902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:37:43.240 [DEBUG] [Thread-129902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:37:43.240 [DEBUG] [Thread-129902] [transport.py] [_log()] Compression: none
2026-02-11T13:37:43.240 [DEBUG] [Thread-129902] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:37:43.295 [DEBUG] [Thread-129902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:37:43.295 [DEBUG] [Thread-129902] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:37:43.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:37:43.296 [DEBUG] [Thread-129902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:37:43.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:37:43.355 [DEBUG] [Thread-129902] [transport.py] [_log()] userauth is OK
2026-02-11T13:37:43.355 [DEBUG] [Thread-129902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:37:43.355 [DEBUG] [Thread-129902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:37:43.356 [DEBUG] [Thread-129902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:37:43.356 [DEBUG] [Thread-129902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:37:43.378 [INFO] [Thread-129902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:37:43.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:37:43.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:37:44.197 [DEBUG] [Thread-129902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:37:44.198 [DEBUG] [Thread-129902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:37:44.246 [DEBUG] [Thread-129902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:37:44.246 [DEBUG] [Thread-129902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:37:44.254 [DEBUG] [Thread-129902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:37:44.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:37:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:37:44.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:37:44.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:37:44.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:37:44.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:37:44.289 [DEBUG] [Thread-129902] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:37:53.109 [DEBUG] [Thread-129904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:08.158 [DEBUG] [Thread-129905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:14.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:38:14.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:38:14.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:38:16.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 37, 38), 18.12, 31.68, 0.0, 29.6, 26.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:38:16.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:37:38
2026-02-11T13:38:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:38:17.115 [DEBUG] [Thread-129906] [transport.py] [_log()] starting thread (client mode): 0xa575b100
2026-02-11T13:38:17.115 [DEBUG] [Thread-129906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:38:17.135 [DEBUG] [Thread-129906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:38:17.135 [INFO] [Thread-129906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:38:17.138 [DEBUG] [Thread-129906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:38:17.138 [DEBUG] [Thread-129906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:38:17.138 [DEBUG] [Thread-129906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:38:17.138 [DEBUG] [Thread-129906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:17.138 [DEBUG] [Thread-129906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:17.138 [DEBUG] [Thread-129906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] client lang: <none>
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] server lang: <none>
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] kex follows: False
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] Compression: none
2026-02-11T13:38:17.139 [DEBUG] [Thread-129906] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:38:17.158 [DEBUG] [Thread-129906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:38:17.159 [DEBUG] [Thread-129906] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:38:17.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:38:17.160 [DEBUG] [Thread-129906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:38:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:38:17.162 [DEBUG] [Thread-129906] [transport.py] [_log()] userauth is OK
2026-02-11T13:38:17.162 [DEBUG] [Thread-129906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:38:17.163 [DEBUG] [Thread-129906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:38:17.163 [DEBUG] [Thread-129906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:38:17.163 [DEBUG] [Thread-129906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:38:17.178 [INFO] [Thread-129906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:38:17.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:38:17.326 [DEBUG] [Thread-129908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:17.827 [DEBUG] [Thread-129906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:38:17.827 [DEBUG] [Thread-129906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:38:17.828 [DEBUG] [Thread-129906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:38:17.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:17.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:17.868 [DEBUG] [Thread-129906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:38:17.868 [DEBUG] [Thread-129906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:38:17.871 [DEBUG] [Thread-129906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:38:17.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:38:17.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:38:17.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:38:17.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:38:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:38:17.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:38:17.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:38:17.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:38:17.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:38:17.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.484518 -999.00  +23.50  23.08     42  +10.10 1 2 1 1 1   888    0 13.95 20.56 ----- 23.2 23.1 292.0 27.2 28.9 -14.6 28.6 -13.7 27.8 -15.1 28.8 -13.3
2026-02-11T13:38:17.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:38:17.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:38:17.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.484518
2026-02-11T13:38:17.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:38:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:38:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:38:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:38:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:38:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:37:38', tmtdew=18.12, humidity=31.68, cloud=0.0, wind=29.6, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:37:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:38:17.896 [DEBUG] [Thread-129906] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:38:17.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:38:17.993 [DEBUG] [Thread-129910] [transport.py] [_log()] starting thread (client mode): 0xa2d12710
2026-02-11T13:38:17.993 [DEBUG] [Thread-129910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:38:18.007 [DEBUG] [Thread-129910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:38:18.008 [INFO] [Thread-129910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:38:18.015 [DEBUG] [Thread-129910] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] client lang: <none>
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] server lang: <none>
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] kex follows: False
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:38:18.016 [DEBUG] [Thread-129910] [transport.py] [_log()] Compression: none
2026-02-11T13:38:18.017 [DEBUG] [Thread-129910] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:38:18.080 [DEBUG] [Thread-129910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:38:18.081 [DEBUG] [Thread-129910] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:38:18.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:38:18.082 [DEBUG] [Thread-129910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:38:18.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:38:18.144 [DEBUG] [Thread-129910] [transport.py] [_log()] userauth is OK
2026-02-11T13:38:18.144 [DEBUG] [Thread-129910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:38:18.145 [DEBUG] [Thread-129910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:38:18.145 [DEBUG] [Thread-129910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:38:18.145 [DEBUG] [Thread-129910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:38:18.163 [INFO] [Thread-129910] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:38:18.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:38:18.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:38:19.003 [DEBUG] [Thread-129910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:38:19.003 [DEBUG] [Thread-129910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:38:19.051 [DEBUG] [Thread-129910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:38:19.052 [DEBUG] [Thread-129910] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:38:19.061 [DEBUG] [Thread-129910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:38:19.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:38:19.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:38:19.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:38:19.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:38:19.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:38:19.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:38:19.098 [DEBUG] [Thread-129910] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:38:23.192 [DEBUG] [Thread-129912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:38.235 [DEBUG] [Thread-129913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:49.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:38:49.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:38:49.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
2026-02-11T13:38:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 38, 14), 16.31, 35.54, 0.0, 21.38, 24.31, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:38:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:38:14
2026-02-11T13:38:51.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:38:51.461 [DEBUG] [Thread-129914] [transport.py] [_log()] starting thread (client mode): 0xa2d03610
2026-02-11T13:38:51.462 [DEBUG] [Thread-129914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:38:51.481 [DEBUG] [Thread-129914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:38:51.482 [INFO] [Thread-129914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:51.485 [DEBUG] [Thread-129914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] client lang: <none>
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] server lang: <none>
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] kex follows: False
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] Compression: none
2026-02-11T13:38:51.486 [DEBUG] [Thread-129914] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:38:51.505 [DEBUG] [Thread-129914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:38:51.506 [DEBUG] [Thread-129914] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:38:51.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:38:51.507 [DEBUG] [Thread-129914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:38:51.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:38:51.509 [DEBUG] [Thread-129914] [transport.py] [_log()] userauth is OK
2026-02-11T13:38:51.510 [DEBUG] [Thread-129914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:38:51.510 [DEBUG] [Thread-129914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:38:51.510 [DEBUG] [Thread-129914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:38:51.510 [DEBUG] [Thread-129914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:38:51.545 [INFO] [Thread-129914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:38:51.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:38:52.207 [DEBUG] [Thread-129914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:38:52.207 [DEBUG] [Thread-129914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:38:52.208 [DEBUG] [Thread-129914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:38:52.248 [DEBUG] [Thread-129914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:38:52.249 [DEBUG] [Thread-129914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:38:52.252 [DEBUG] [Thread-129914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:38:52.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:38:52.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:38:52.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:38:52.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:38:52.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:38:52.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:38:52.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:38:52.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:38:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:38:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.484865 -999.00  +23.60  30.07     42  +10.10 1 2 2 1 1   888    0 13.84 16.44 ----- 33.1 30.1 288.4 35.1 29.4 -15.0 28.9 -14.0 28.1 -12.6 29.1 -13.6
2026-02-11T13:38:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:38:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:38:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.484865
2026-02-11T13:38:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:38:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:38:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:38:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:38:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:38:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:38:14', tmtdew=16.31, humidity=35.54, cloud=0.0, wind=21.38, temperature=24.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:38:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:38:52.278 [DEBUG] [Thread-129914] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:38:52.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:38:52.373 [DEBUG] [Thread-129917] [transport.py] [_log()] starting thread (client mode): 0xa2d12d40
2026-02-11T13:38:52.373 [DEBUG] [Thread-129917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:38:52.388 [DEBUG] [Thread-129917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:38:52.388 [INFO] [Thread-129917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:38:52.396 [DEBUG] [Thread-129917] [transport.py] [_log()] client lang: <none>
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] server lang: <none>
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] kex follows: False
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] Compression: none
2026-02-11T13:38:52.397 [DEBUG] [Thread-129917] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:38:52.455 [DEBUG] [Thread-129917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:38:52.456 [DEBUG] [Thread-129917] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:38:52.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:38:52.457 [DEBUG] [Thread-129917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:38:52.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:38:52.516 [DEBUG] [Thread-129917] [transport.py] [_log()] userauth is OK
2026-02-11T13:38:52.516 [DEBUG] [Thread-129917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:38:52.516 [DEBUG] [Thread-129917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:38:52.516 [DEBUG] [Thread-129917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:38:52.517 [DEBUG] [Thread-129917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:38:52.537 [INFO] [Thread-129917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:38:52.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:38:52.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:38:53.272 [DEBUG] [Thread-129919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:38:53.343 [DEBUG] [Thread-129917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:38:53.343 [DEBUG] [Thread-129917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:38:53.391 [DEBUG] [Thread-129917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:38:53.391 [DEBUG] [Thread-129917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:38:53.400 [DEBUG] [Thread-129917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:38:53.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:38:53.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:38:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:38:53.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:38:53.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:38:53.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:38:53.441 [DEBUG] [Thread-129917] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:39:08.319 [DEBUG] [Thread-129920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:39:17.376 [DEBUG] [Thread-129921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:39:18.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:39:18.007 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:39:23.356 [DEBUG] [Thread-129922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:39:23.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:39:23.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:39:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:39:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 38, 49), 16.45, 34.95, 0.0, 29.24, 24.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:39:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:38:49
2026-02-11T13:39:25.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:39:26.023 [DEBUG] [Thread-129923] [transport.py] [_log()] starting thread (client mode): 0xa57420b0
2026-02-11T13:39:26.024 [DEBUG] [Thread-129923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:39:26.046 [DEBUG] [Thread-129923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:39:26.046 [INFO] [Thread-129923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] client lang: <none>
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] server lang: <none>
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] kex follows: False
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:39:26.050 [DEBUG] [Thread-129923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:39:26.051 [DEBUG] [Thread-129923] [transport.py] [_log()] Compression: none
2026-02-11T13:39:26.051 [DEBUG] [Thread-129923] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:39:26.071 [DEBUG] [Thread-129923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:39:26.071 [DEBUG] [Thread-129923] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:39:26.072 [DEBUG] [Thread-129923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:39:26.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:39:26.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:39:26.076 [DEBUG] [Thread-129923] [transport.py] [_log()] userauth is OK
2026-02-11T13:39:26.076 [DEBUG] [Thread-129923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:39:26.076 [DEBUG] [Thread-129923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:39:26.076 [DEBUG] [Thread-129923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:39:26.076 [DEBUG] [Thread-129923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:39:26.102 [INFO] [Thread-129923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:39:26.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:39:26.753 [DEBUG] [Thread-129923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:39:26.753 [DEBUG] [Thread-129923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:39:26.754 [DEBUG] [Thread-129923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:39:26.794 [DEBUG] [Thread-129923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:39:26.795 [DEBUG] [Thread-129923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:39:26.798 [DEBUG] [Thread-129923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:39:26.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:39:26.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:39:26.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:39:26.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:39:26.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:39:26.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:39:26.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:39:26.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:39:26.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:39:26.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.485213 -999.00  +23.60  31.23     42  +10.10 1 2 2 1 1   888    0 13.77 13.37 ----- 21.1 31.2 289.4 37.0 29.5 -15.4 29.0 -15.1 28.5 -14.3 29.3 -14.9
2026-02-11T13:39:26.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:39:26.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:39:26.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.485213
2026-02-11T13:39:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:39:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:39:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:39:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:39:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:39:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:38:49', tmtdew=16.45, humidity=34.95, cloud=0.0, wind=29.24, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:38:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:39:26.827 [DEBUG] [Thread-129923] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:39:26.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:39:26.924 [DEBUG] [Thread-129926] [transport.py] [_log()] starting thread (client mode): 0xa2d7b370
2026-02-11T13:39:26.924 [DEBUG] [Thread-129926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:39:26.939 [DEBUG] [Thread-129926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:39:26.939 [INFO] [Thread-129926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] client lang: <none>
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] server lang: <none>
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] kex follows: False
2026-02-11T13:39:26.947 [DEBUG] [Thread-129926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:39:26.948 [DEBUG] [Thread-129926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:39:26.948 [DEBUG] [Thread-129926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:39:26.948 [DEBUG] [Thread-129926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:39:26.948 [DEBUG] [Thread-129926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:39:26.948 [DEBUG] [Thread-129926] [transport.py] [_log()] Compression: none
2026-02-11T13:39:26.948 [DEBUG] [Thread-129926] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:39:27.006 [DEBUG] [Thread-129926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:39:27.006 [DEBUG] [Thread-129926] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:39:27.006 [DEBUG] [Thread-129926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:39:27.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:39:27.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:39:27.067 [DEBUG] [Thread-129926] [transport.py] [_log()] userauth is OK
2026-02-11T13:39:27.067 [DEBUG] [Thread-129926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:39:27.067 [DEBUG] [Thread-129926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:39:27.067 [DEBUG] [Thread-129926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:39:27.067 [DEBUG] [Thread-129926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:39:27.081 [INFO] [Thread-129926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:39:27.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:39:27.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:39:27.927 [DEBUG] [Thread-129926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:39:27.927 [DEBUG] [Thread-129926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:39:27.976 [DEBUG] [Thread-129926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:39:27.976 [DEBUG] [Thread-129926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:39:27.986 [DEBUG] [Thread-129926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:39:27.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:39: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')
2026-02-11T13:39: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
2026-02-11T13:39:28.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:39:28.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:39:28.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:39:28.022 [DEBUG] [Thread-129926] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:39:38.394 [DEBUG] [Thread-129928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:39:53.446 [DEBUG] [Thread-129929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:39:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:39:58.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:39:58.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:39:59.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 39, 25), 16.57, 34.74, 0.0, 31.39, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:39:59.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:39:25
2026-02-11T13:40:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:40:00.418 [DEBUG] [Thread-129930] [transport.py] [_log()] starting thread (client mode): 0xa2d7a5c0
2026-02-11T13:40:00.418 [DEBUG] [Thread-129930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:40:00.437 [DEBUG] [Thread-129930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:40:00.437 [INFO] [Thread-129930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] client lang: <none>
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] server lang: <none>
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] kex follows: False
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] Compression: none
2026-02-11T13:40:00.440 [DEBUG] [Thread-129930] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:40:00.448 [DEBUG] [Thread-129930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:40:00.449 [DEBUG] [Thread-129930] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:40:00.449 [DEBUG] [Thread-129930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:40:00.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:40:00.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:40:00.451 [DEBUG] [Thread-129930] [transport.py] [_log()] userauth is OK
2026-02-11T13:40:00.451 [DEBUG] [Thread-129930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:40:00.451 [DEBUG] [Thread-129930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:40:00.451 [DEBUG] [Thread-129930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:40:00.451 [DEBUG] [Thread-129930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:40:00.468 [INFO] [Thread-129930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:40:00.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:40:01.122 [DEBUG] [Thread-129930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:40:01.122 [DEBUG] [Thread-129930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:40:01.123 [DEBUG] [Thread-129930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:40:01.163 [DEBUG] [Thread-129930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:40:01.163 [DEBUG] [Thread-129930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:40:01.166 [DEBUG] [Thread-129930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:40:01.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:40:01.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:40:01.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:40:01.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:40:01.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:40:01.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:40:01.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:40:01.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:40:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:40:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.485560 -999.00  +23.80  30.67     42  +10.10 1 2 2 1 1   888    0 13.72 12.09 ----- 35.5 30.7 297.0 41.6 29.6 -17.5 29.1 -15.4 28.6 -15.6 29.4 -15.3
2026-02-11T13:40:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:40:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:40:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.485560
2026-02-11T13:40:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:40:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:40:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:40:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:40:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:40:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:39:25', tmtdew=16.57, humidity=34.74, cloud=0.0, wind=31.39, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:39:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:40:01.193 [DEBUG] [Thread-129930] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:40:01.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:40:01.288 [DEBUG] [Thread-129933] [transport.py] [_log()] starting thread (client mode): 0xa2d7ab30
2026-02-11T13:40:01.288 [DEBUG] [Thread-129933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:40:01.303 [DEBUG] [Thread-129933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:40:01.303 [INFO] [Thread-129933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] client lang: <none>
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] server lang: <none>
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] kex follows: False
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] Compression: none
2026-02-11T13:40:01.310 [DEBUG] [Thread-129933] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:40:01.366 [DEBUG] [Thread-129933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:40:01.366 [DEBUG] [Thread-129933] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:40:01.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:40:01.366 [DEBUG] [Thread-129933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:40:01.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:40:01.423 [DEBUG] [Thread-129933] [transport.py] [_log()] userauth is OK
2026-02-11T13:40:01.423 [DEBUG] [Thread-129933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:40:01.423 [DEBUG] [Thread-129933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:40:01.423 [DEBUG] [Thread-129933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:40:01.423 [DEBUG] [Thread-129933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:40:01.441 [INFO] [Thread-129933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:40:01.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:40:01.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:40:02.318 [DEBUG] [Thread-129933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:40:02.319 [DEBUG] [Thread-129933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:40:02.366 [DEBUG] [Thread-129933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:40:02.367 [DEBUG] [Thread-129933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:40:02.376 [DEBUG] [Thread-129933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:40:02.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:40:02.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:40:02.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:40:02.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:40:02.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:40:02.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:40:02.413 [DEBUG] [Thread-129933] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:40:08.483 [DEBUG] [Thread-129935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:40:17.409 [DEBUG] [Thread-129936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:40:18.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:40:18.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:40:23.535 [DEBUG] [Thread-129937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:40:32.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:40:32.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:40:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:40:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 40), 16.77, 34.26, 0.0, 32.78, 24.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:40:34.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:40:00
2026-02-11T13:40:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:40:34.749 [DEBUG] [Thread-129938] [transport.py] [_log()] starting thread (client mode): 0xa5759840
2026-02-11T13:40:34.750 [DEBUG] [Thread-129938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:40:34.763 [DEBUG] [Thread-129938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:40:34.763 [INFO] [Thread-129938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] client lang: <none>
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] server lang: <none>
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] kex follows: False
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:40:34.766 [DEBUG] [Thread-129938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:40:34.767 [DEBUG] [Thread-129938] [transport.py] [_log()] Compression: none
2026-02-11T13:40:34.767 [DEBUG] [Thread-129938] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:40:34.784 [DEBUG] [Thread-129938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:40:34.785 [DEBUG] [Thread-129938] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:40:34.786 [DEBUG] [Thread-129938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:40:34.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:40:34.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:40:34.788 [DEBUG] [Thread-129938] [transport.py] [_log()] userauth is OK
2026-02-11T13:40:34.789 [DEBUG] [Thread-129938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:40:34.789 [DEBUG] [Thread-129938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:40:34.789 [DEBUG] [Thread-129938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:40:34.789 [DEBUG] [Thread-129938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:40:34.812 [INFO] [Thread-129938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:40:34.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:40:35.604 [DEBUG] [Thread-129938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:40:35.605 [DEBUG] [Thread-129938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:40:35.605 [DEBUG] [Thread-129938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:40:35.646 [DEBUG] [Thread-129938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:40:35.646 [DEBUG] [Thread-129938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:40:35.650 [DEBUG] [Thread-129938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:40:35.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:40:35.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:40:35.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:40:35.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:40:35.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:40:35.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:40:35.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:40:35.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:40:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:40:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.485907 -999.00  +23.50  26.60     42   +9.80 1 2 1 1 1   888    0 13.72 14.12 ----- 25.6 26.6 299.0 41.4 29.7 -18.0 29.1 -16.6 28.7 -16.0 29.4 -16.8
2026-02-11T13:40:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:40:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:40:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.485907
2026-02-11T13:40:35.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:40:35.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:40:35.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:40:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:40:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:40:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:40:00', tmtdew=16.77, humidity=34.26, cloud=0.0, wind=32.78, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:39:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:40:35.676 [DEBUG] [Thread-129938] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:40:35.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:40:35.772 [DEBUG] [Thread-129941] [transport.py] [_log()] starting thread (client mode): 0xa5741510
2026-02-11T13:40:35.772 [DEBUG] [Thread-129941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:40:35.787 [DEBUG] [Thread-129941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:40:35.787 [INFO] [Thread-129941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:40:35.795 [DEBUG] [Thread-129941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:40:35.795 [DEBUG] [Thread-129941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:40:35.795 [DEBUG] [Thread-129941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:40:35.795 [DEBUG] [Thread-129941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:35.795 [DEBUG] [Thread-129941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] client lang: <none>
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] server lang: <none>
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] kex follows: False
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:40:35.796 [DEBUG] [Thread-129941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:40:35.797 [DEBUG] [Thread-129941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:40:35.797 [DEBUG] [Thread-129941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:40:35.797 [DEBUG] [Thread-129941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:40:35.797 [DEBUG] [Thread-129941] [transport.py] [_log()] Compression: none
2026-02-11T13:40:35.797 [DEBUG] [Thread-129941] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:40:35.856 [DEBUG] [Thread-129941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:40:35.857 [DEBUG] [Thread-129941] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:40:35.857 [DEBUG] [Thread-129941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:40:35.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:40:35.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:40:35.912 [DEBUG] [Thread-129941] [transport.py] [_log()] userauth is OK
2026-02-11T13:40:35.912 [DEBUG] [Thread-129941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:40:35.912 [DEBUG] [Thread-129941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:40:35.912 [DEBUG] [Thread-129941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:40:35.912 [DEBUG] [Thread-129941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:40:35.931 [INFO] [Thread-129941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:40:35.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:40:35.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:40:36.768 [DEBUG] [Thread-129941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:40:36.768 [DEBUG] [Thread-129941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:40:36.816 [DEBUG] [Thread-129941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:40:36.816 [DEBUG] [Thread-129941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:40:36.825 [DEBUG] [Thread-129941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:40:36.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:40:36.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:40:36.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:40:36.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:40:36.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:40:36.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:40:36.861 [DEBUG] [Thread-129941] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:40:38.571 [DEBUG] [Thread-129943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:40:53.620 [DEBUG] [Thread-129944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:41:06.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:41:06.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:41:06.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
2026-02-11T13:41:08.659 [DEBUG] [Thread-129945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:41:08.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 40, 36), 18.35, 31.29, 0.0, 31.61, 26.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:41:08.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:40:36
2026-02-11T13:41:09.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:41:09.208 [DEBUG] [Thread-129946] [transport.py] [_log()] starting thread (client mode): 0xa2d02590
2026-02-11T13:41:09.208 [DEBUG] [Thread-129946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:41:09.229 [DEBUG] [Thread-129946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:41:09.229 [INFO] [Thread-129946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:41:09.232 [DEBUG] [Thread-129946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:41:09.232 [DEBUG] [Thread-129946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] client lang: <none>
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] server lang: <none>
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] kex follows: False
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:41:09.233 [DEBUG] [Thread-129946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:41:09.234 [DEBUG] [Thread-129946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:41:09.234 [DEBUG] [Thread-129946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:41:09.234 [DEBUG] [Thread-129946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:41:09.234 [DEBUG] [Thread-129946] [transport.py] [_log()] Compression: none
2026-02-11T13:41:09.234 [DEBUG] [Thread-129946] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:41:09.253 [DEBUG] [Thread-129946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:41:09.254 [DEBUG] [Thread-129946] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:41:09.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:41:09.255 [DEBUG] [Thread-129946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:41:09.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:41:09.257 [DEBUG] [Thread-129946] [transport.py] [_log()] userauth is OK
2026-02-11T13:41:09.257 [DEBUG] [Thread-129946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:41:09.257 [DEBUG] [Thread-129946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:41:09.257 [DEBUG] [Thread-129946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:41:09.258 [DEBUG] [Thread-129946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:41:09.275 [INFO] [Thread-129946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:41:09.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:41:09.925 [DEBUG] [Thread-129946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:41:09.926 [DEBUG] [Thread-129946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:41:09.926 [DEBUG] [Thread-129946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:41:09.966 [DEBUG] [Thread-129946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:41:09.967 [DEBUG] [Thread-129946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:41:09.970 [DEBUG] [Thread-129946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:41:09.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:41:09.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:41:09.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:41:09.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:41:09.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:41:09.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:41:09.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:41:09.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:41:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:41:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.486601 -999.00  +23.50  26.35     43  +10.20 1 2 1 1 1   888    0 13.64 6.99 ----- 28.8 26.4 297.2 36.1 29.8 -19.2 29.2 -16.1 28.9 -16.1 29.7 -16.4
2026-02-11T13:41:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:41:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:41:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.486601
2026-02-11T13:41:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:41:09.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:41:09.999 [DEBUG] [Thread-129946] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:41:09.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:41:10.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:41:10.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:41:10.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:40:36', tmtdew=18.35, humidity=31.29, cloud=0.0, wind=31.61, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:40:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:41:10.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:41:17.455 [DEBUG] [Thread-129949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:41:18.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:41:18.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:41:23.700 [DEBUG] [Thread-129950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:41:38.754 [DEBUG] [Thread-129951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:41:53.788 [DEBUG] [Thread-129952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:42:08.820 [DEBUG] [Thread-129953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:42:17.515 [DEBUG] [Thread-129954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:42:18.432 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:42:18.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:42:23.860 [DEBUG] [Thread-129955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:42:38.897 [DEBUG] [Thread-129956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:42:53.933 [DEBUG] [Thread-129957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:08.971 [DEBUG] [Thread-129958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:17.547 [DEBUG] [Thread-129959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:18.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:18.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:22.168 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T13:43:24.010 [DEBUG] [Thread-129960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:39.048 [DEBUG] [Thread-129961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:52.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:43:52.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:43:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:43:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 43, 34), 17.84, 32.15, 0.0, 21.28, 25.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:43:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:43:34
2026-02-11T13:43:54.084 [DEBUG] [Thread-129962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:43:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:43:54.564 [DEBUG] [Thread-129963] [transport.py] [_log()] starting thread (client mode): 0xa2db64a0
2026-02-11T13:43:54.564 [DEBUG] [Thread-129963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:43:54.583 [DEBUG] [Thread-129963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:43:54.584 [INFO] [Thread-129963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:43:54.586 [DEBUG] [Thread-129963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] client lang: <none>
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] server lang: <none>
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] kex follows: False
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] Compression: none
2026-02-11T13:43:54.587 [DEBUG] [Thread-129963] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:43:54.603 [DEBUG] [Thread-129963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:43:54.604 [DEBUG] [Thread-129963] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:43:54.604 [DEBUG] [Thread-129963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:43:54.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:43:54.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:43:54.606 [DEBUG] [Thread-129963] [transport.py] [_log()] userauth is OK
2026-02-11T13:43:54.607 [DEBUG] [Thread-129963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:43:54.607 [DEBUG] [Thread-129963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:43:54.607 [DEBUG] [Thread-129963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:43:54.607 [DEBUG] [Thread-129963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:43:54.626 [INFO] [Thread-129963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:43:54.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:43:55.436 [DEBUG] [Thread-129963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:43:55.436 [DEBUG] [Thread-129963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:43:55.437 [DEBUG] [Thread-129963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:43:55.477 [DEBUG] [Thread-129963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:43:55.478 [DEBUG] [Thread-129963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:43:55.481 [DEBUG] [Thread-129963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:43:55.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:43:55.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:43:55.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:43:55.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:43:55.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:43:55.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:43:55.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:43:55.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:43:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:43:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.488337 -999.00  +23.60  21.12     39   +9.10 1 2 1 1 1   888    0 13.77 8.85 ----- 18.5 21.1 295.4 36.0 30.3 -19.3 29.6 -17.2 29.4 -18.8 30.2 -17.3
2026-02-11T13:43:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:43:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:43:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.488337
2026-02-11T13:43:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:43:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:43:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:43:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:43:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:43:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:43:34', tmtdew=17.84, humidity=32.15, cloud=0.0, wind=21.28, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:43:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:43:55.507 [DEBUG] [Thread-129963] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:43:55.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:43:55.603 [DEBUG] [Thread-129966] [transport.py] [_log()] starting thread (client mode): 0xa2d79270
2026-02-11T13:43:55.603 [DEBUG] [Thread-129966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:43:55.617 [DEBUG] [Thread-129966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:43:55.618 [INFO] [Thread-129966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] client lang: <none>
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] server lang: <none>
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] kex follows: False
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] Compression: none
2026-02-11T13:43:55.625 [DEBUG] [Thread-129966] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:43:55.683 [DEBUG] [Thread-129966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:43:55.684 [DEBUG] [Thread-129966] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:43:55.684 [DEBUG] [Thread-129966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:43:55.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:43:55.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:43:55.740 [DEBUG] [Thread-129966] [transport.py] [_log()] userauth is OK
2026-02-11T13:43:55.740 [DEBUG] [Thread-129966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:43:55.740 [DEBUG] [Thread-129966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:43:55.740 [DEBUG] [Thread-129966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:43:55.740 [DEBUG] [Thread-129966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:43:55.759 [INFO] [Thread-129966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:43:55.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:43:55.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:43:56.591 [DEBUG] [Thread-129966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:43:56.592 [DEBUG] [Thread-129966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:43:56.639 [DEBUG] [Thread-129966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:43:56.639 [DEBUG] [Thread-129966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:43:56.649 [DEBUG] [Thread-129966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:43:56.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:43: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')
2026-02-11T13:43:56.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:43:56.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:43:56.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:43:56.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:43:56.685 [DEBUG] [Thread-129966] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:44:09.119 [DEBUG] [Thread-129968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:44:17.598 [DEBUG] [Thread-129969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:44:18.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:44:18.716 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:44:24.169 [DEBUG] [Thread-129970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:44:26.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:44:26.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:44:26.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:44:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 44, 9), 16.85, 34.11, 0.0, 24.74, 24.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:44:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:44:09
2026-02-11T13:44:28.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:44:29.132 [DEBUG] [Thread-129971] [transport.py] [_log()] starting thread (client mode): 0xa57414e0
2026-02-11T13:44:29.132 [DEBUG] [Thread-129971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:44:29.152 [DEBUG] [Thread-129971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:44:29.152 [INFO] [Thread-129971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] client lang: <none>
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] server lang: <none>
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] kex follows: False
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] Compression: none
2026-02-11T13:44:29.155 [DEBUG] [Thread-129971] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:44:29.173 [DEBUG] [Thread-129971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:44:29.173 [DEBUG] [Thread-129971] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:44:29.174 [DEBUG] [Thread-129971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:44:29.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:44:29.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:44:29.176 [DEBUG] [Thread-129971] [transport.py] [_log()] userauth is OK
2026-02-11T13:44:29.176 [DEBUG] [Thread-129971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:44:29.176 [DEBUG] [Thread-129971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:44:29.176 [DEBUG] [Thread-129971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:44:29.176 [DEBUG] [Thread-129971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:44:29.199 [INFO] [Thread-129971] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:44:29.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:44:29.851 [DEBUG] [Thread-129971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:44:29.852 [DEBUG] [Thread-129971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:44:29.852 [DEBUG] [Thread-129971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:44:29.892 [DEBUG] [Thread-129971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:44:29.892 [DEBUG] [Thread-129971] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:44:29.896 [DEBUG] [Thread-129971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:44:29.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:44:29.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:44:29.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:44:29.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:44:29.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:44:29.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:44:29.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:44:29.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:44:29.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:44:29.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.488685 -999.00  +23.70  17.99     40   +9.60 1 2 1 1 1   888    0 13.96 10.73 ----- 15.5 18.0 292.6 21.8 30.2 -23.9 29.5 -21.7 29.4 -18.4 29.9 -23.4
2026-02-11T13:44:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:44:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:44:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.488685
2026-02-11T13:44:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:44:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:44:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:44:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:44:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:44:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:44:09', tmtdew=16.85, humidity=34.11, cloud=0.0, wind=24.74, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:43:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:44:29.922 [DEBUG] [Thread-129971] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:44:30.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:44:30.017 [DEBUG] [Thread-129974] [transport.py] [_log()] starting thread (client mode): 0xa5740760
2026-02-11T13:44:30.017 [DEBUG] [Thread-129974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:44:30.033 [DEBUG] [Thread-129974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:44:30.033 [INFO] [Thread-129974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] client lang: <none>
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] server lang: <none>
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] kex follows: False
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:44:30.041 [DEBUG] [Thread-129974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:44:30.042 [DEBUG] [Thread-129974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:44:30.042 [DEBUG] [Thread-129974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:44:30.042 [DEBUG] [Thread-129974] [transport.py] [_log()] Compression: none
2026-02-11T13:44:30.042 [DEBUG] [Thread-129974] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:44:30.100 [DEBUG] [Thread-129974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:44:30.101 [DEBUG] [Thread-129974] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:44:30.102 [DEBUG] [Thread-129974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:44:30.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:44:30.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:44:30.159 [DEBUG] [Thread-129974] [transport.py] [_log()] userauth is OK
2026-02-11T13:44:30.160 [DEBUG] [Thread-129974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:44:30.160 [DEBUG] [Thread-129974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:44:30.160 [DEBUG] [Thread-129974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:44:30.160 [DEBUG] [Thread-129974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:44:30.178 [INFO] [Thread-129974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:44:30.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:44:30.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:44:31.023 [DEBUG] [Thread-129974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:44:31.024 [DEBUG] [Thread-129974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:44:31.071 [DEBUG] [Thread-129974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:44:31.071 [DEBUG] [Thread-129974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:44:31.081 [DEBUG] [Thread-129974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:44:31.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:44:31.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:44:31.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:44:31.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:44:31.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:44:31.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:44:31.118 [DEBUG] [Thread-129974] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:44:39.208 [DEBUG] [Thread-129976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:44:54.258 [DEBUG] [Thread-129977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:45:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:45:01.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:45:01.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:45:03.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 44, 44), 16.07, 35.87, 0.0, 18.97, 23.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:45:03.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:44:44
2026-02-11T13:45:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:45:03.715 [DEBUG] [Thread-129978] [transport.py] [_log()] starting thread (client mode): 0xa2d3c4f0
2026-02-11T13:45:03.715 [DEBUG] [Thread-129978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:45:03.735 [DEBUG] [Thread-129978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:45:03.735 [INFO] [Thread-129978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:45:03.736 [DEBUG] [Thread-129978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] client lang: <none>
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] server lang: <none>
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] kex follows: False
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] Compression: none
2026-02-11T13:45:03.737 [DEBUG] [Thread-129978] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:45:03.745 [DEBUG] [Thread-129978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:45:03.745 [DEBUG] [Thread-129978] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:45:03.745 [DEBUG] [Thread-129978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:45:03.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:45:03.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:45:03.747 [DEBUG] [Thread-129978] [transport.py] [_log()] userauth is OK
2026-02-11T13:45:03.747 [DEBUG] [Thread-129978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:45:03.747 [DEBUG] [Thread-129978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:45:03.747 [DEBUG] [Thread-129978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:45:03.747 [DEBUG] [Thread-129978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:45:03.764 [INFO] [Thread-129978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:45:03.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:45:04.485 [DEBUG] [Thread-129978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:45:04.486 [DEBUG] [Thread-129978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:45:04.486 [DEBUG] [Thread-129978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:45:04.526 [DEBUG] [Thread-129978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:45:04.527 [DEBUG] [Thread-129978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:45:04.530 [DEBUG] [Thread-129978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:45:04.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:45:04.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:45:04.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:45:04.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:45:04.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:45:04.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:45:04.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:45:04.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:45:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:45:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.489032 -999.00  +23.80  22.51     41   +9.80 1 2 1 1 1   888    0 13.99 13.22 ----- 20.7 22.5 306.8 25.0 29.8 -23.1 29.2 -20.5 28.9 -19.5 29.6 -22.3
2026-02-11T13:45:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:45:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:45:04.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.489032
2026-02-11T13:45:04.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:45:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:45:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:45:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:45:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:45:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:44:44', tmtdew=16.07, humidity=35.87, cloud=0.0, wind=18.97, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:44:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:45:04.558 [DEBUG] [Thread-129978] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:45:04.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:45:04.659 [DEBUG] [Thread-129981] [transport.py] [_log()] starting thread (client mode): 0xa2d13220
2026-02-11T13:45:04.660 [DEBUG] [Thread-129981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:45:04.679 [DEBUG] [Thread-129981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:45:04.679 [INFO] [Thread-129981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] client lang: <none>
2026-02-11T13:45:04.692 [DEBUG] [Thread-129981] [transport.py] [_log()] server lang: <none>
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] kex follows: False
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] Compression: none
2026-02-11T13:45:04.693 [DEBUG] [Thread-129981] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:45:04.756 [DEBUG] [Thread-129981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:45:04.756 [DEBUG] [Thread-129981] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:45:04.757 [DEBUG] [Thread-129981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:45:04.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:45:04.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:45:04.825 [DEBUG] [Thread-129981] [transport.py] [_log()] userauth is OK
2026-02-11T13:45:04.825 [DEBUG] [Thread-129981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:45:04.825 [DEBUG] [Thread-129981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:45:04.825 [DEBUG] [Thread-129981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:45:04.825 [DEBUG] [Thread-129981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:45:04.845 [INFO] [Thread-129981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:45:04.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:45:04.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:45:05.674 [DEBUG] [Thread-129981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:45:05.674 [DEBUG] [Thread-129981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:45:05.722 [DEBUG] [Thread-129981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:45:05.722 [DEBUG] [Thread-129981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:45:05.732 [DEBUG] [Thread-129981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:45:05.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:45:05.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:45:05.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:45:05.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:45:05.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:45:05.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:45:05.768 [DEBUG] [Thread-129981] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:45:09.295 [DEBUG] [Thread-129983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:45:17.647 [DEBUG] [Thread-129984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:45:18.859 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:45:18.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:45:24.349 [DEBUG] [Thread-129985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:45:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:45:35.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:45:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:45:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 45, 20), 15.68, 36.67, 0.0, 18.63, 23.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:45:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:45:20
2026-02-11T13:45:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:45:38.254 [DEBUG] [Thread-129986] [transport.py] [_log()] starting thread (client mode): 0xa5740340
2026-02-11T13:45:38.254 [DEBUG] [Thread-129986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:45:38.274 [DEBUG] [Thread-129986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:45:38.274 [INFO] [Thread-129986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:45:38.277 [DEBUG] [Thread-129986] [transport.py] [_log()] client lang: <none>
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] server lang: <none>
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] kex follows: False
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] Compression: none
2026-02-11T13:45:38.278 [DEBUG] [Thread-129986] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:45:38.296 [DEBUG] [Thread-129986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:45:38.297 [DEBUG] [Thread-129986] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:45:38.297 [DEBUG] [Thread-129986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:45:38.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:45:38.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:45:38.299 [DEBUG] [Thread-129986] [transport.py] [_log()] userauth is OK
2026-02-11T13:45:38.300 [DEBUG] [Thread-129986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:45:38.300 [DEBUG] [Thread-129986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:45:38.300 [DEBUG] [Thread-129986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:45:38.300 [DEBUG] [Thread-129986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:45:38.323 [INFO] [Thread-129986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:45:38.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:45:38.965 [DEBUG] [Thread-129986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:45:38.965 [DEBUG] [Thread-129986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:45:38.966 [DEBUG] [Thread-129986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:45:39.006 [DEBUG] [Thread-129986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:45:39.007 [DEBUG] [Thread-129986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:45:39.010 [DEBUG] [Thread-129986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:45:39.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:45:39.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:45:39.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:45:39.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:45:39.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:45:39.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:45:39.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:45:39.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:45:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:45:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.489379 -999.00  +23.90  15.53     41   +9.90 1 2 1 1 1   888    0 13.79 16.59 ----- 16.1 15.5 313.8 19.8 29.6 -22.9 29.1 -20.7 28.8 -19.1 29.4 -21.7
2026-02-11T13:45:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:45:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:45:39.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.489379
2026-02-11T13:45:39.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:45:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:45:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:45:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:45:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:45:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:45:20', tmtdew=15.68, humidity=36.67, cloud=0.0, wind=18.63, temperature=23.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:44:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:45:39.036 [DEBUG] [Thread-129986] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:45:39.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:45:39.133 [DEBUG] [Thread-129989] [transport.py] [_log()] starting thread (client mode): 0xa2d7b370
2026-02-11T13:45:39.133 [DEBUG] [Thread-129989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:45:39.148 [DEBUG] [Thread-129989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:45:39.148 [INFO] [Thread-129989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:45:39.155 [DEBUG] [Thread-129989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:45:39.156 [DEBUG] [Thread-129989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] client lang: <none>
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] server lang: <none>
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] kex follows: False
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:45:39.157 [DEBUG] [Thread-129989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:45:39.158 [DEBUG] [Thread-129989] [transport.py] [_log()] Compression: none
2026-02-11T13:45:39.158 [DEBUG] [Thread-129989] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:45:39.215 [DEBUG] [Thread-129989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:45:39.216 [DEBUG] [Thread-129989] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:45:39.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:45:39.217 [DEBUG] [Thread-129989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:45:39.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:45:39.272 [DEBUG] [Thread-129989] [transport.py] [_log()] userauth is OK
2026-02-11T13:45:39.272 [DEBUG] [Thread-129989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:45:39.272 [DEBUG] [Thread-129989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:45:39.272 [DEBUG] [Thread-129989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:45:39.272 [DEBUG] [Thread-129989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:45:39.291 [INFO] [Thread-129989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:45:39.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:45:39.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:45:39.385 [DEBUG] [Thread-129991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:45:40.138 [DEBUG] [Thread-129989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:45:40.138 [DEBUG] [Thread-129989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:45:40.186 [DEBUG] [Thread-129989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:45:40.187 [DEBUG] [Thread-129989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:45:40.196 [DEBUG] [Thread-129989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:45:40.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:45:40.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')
2026-02-11T13:45:40.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:45:40.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:45:40.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:45:40.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:45:40.232 [DEBUG] [Thread-129989] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:45:54.437 [DEBUG] [Thread-129992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:46:09.473 [DEBUG] [Thread-129993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:46:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:46:10.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:46:10.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:46:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 45, 55), 16.02, 35.93, 0.0, 17.66, 23.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:46:12.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:45:55
2026-02-11T13:46:12.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:46:12.653 [DEBUG] [Thread-129994] [transport.py] [_log()] starting thread (client mode): 0xa5740220
2026-02-11T13:46:12.653 [DEBUG] [Thread-129994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:46:12.672 [DEBUG] [Thread-129994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:46:12.672 [INFO] [Thread-129994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:46:12.674 [DEBUG] [Thread-129994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] client lang: <none>
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] server lang: <none>
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] kex follows: False
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] Compression: none
2026-02-11T13:46:12.675 [DEBUG] [Thread-129994] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:46:12.687 [DEBUG] [Thread-129994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:46:12.688 [DEBUG] [Thread-129994] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:46:12.688 [DEBUG] [Thread-129994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:46:12.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:46:12.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:46:12.689 [DEBUG] [Thread-129994] [transport.py] [_log()] userauth is OK
2026-02-11T13:46:12.689 [DEBUG] [Thread-129994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:46:12.689 [DEBUG] [Thread-129994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:46:12.689 [DEBUG] [Thread-129994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:46:12.689 [DEBUG] [Thread-129994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:46:12.701 [INFO] [Thread-129994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:46:12.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:46:13.334 [DEBUG] [Thread-129994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:46:13.334 [DEBUG] [Thread-129994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:46:13.335 [DEBUG] [Thread-129994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:46:13.375 [DEBUG] [Thread-129994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:46:13.375 [DEBUG] [Thread-129994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:46:13.378 [DEBUG] [Thread-129994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:46:13.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:46:13.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:46:13.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:46:13.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:46:13.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:46:13.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:46:13.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:46:13.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:46:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:46:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.489726 -999.00  +23.80  18.84     41  +10.00 1 2 1 1 1   888    0 14.29 18.85 ----- 18.8 18.8 282.8 22.6 29.4 -22.3 28.9 -19.8 28.6 -18.6 29.2 -21.1
2026-02-11T13:46:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:46:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:46:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.489726
2026-02-11T13:46:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:46:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:46:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:46:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:46:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:46:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:45:55', tmtdew=16.02, humidity=35.93, cloud=0.0, wind=17.66, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:45:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:46:13.402 [DEBUG] [Thread-129994] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:46:13.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:46:13.498 [DEBUG] [Thread-129997] [transport.py] [_log()] starting thread (client mode): 0xa5741e10
2026-02-11T13:46:13.498 [DEBUG] [Thread-129997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:46:13.512 [DEBUG] [Thread-129997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:46:13.513 [INFO] [Thread-129997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:46:13.520 [DEBUG] [Thread-129997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:46:13.520 [DEBUG] [Thread-129997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:46:13.520 [DEBUG] [Thread-129997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:46:13.520 [DEBUG] [Thread-129997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:13.520 [DEBUG] [Thread-129997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] client lang: <none>
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] server lang: <none>
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] kex follows: False
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:46:13.521 [DEBUG] [Thread-129997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:46:13.522 [DEBUG] [Thread-129997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:46:13.522 [DEBUG] [Thread-129997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:46:13.522 [DEBUG] [Thread-129997] [transport.py] [_log()] Compression: none
2026-02-11T13:46:13.522 [DEBUG] [Thread-129997] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:46:13.584 [DEBUG] [Thread-129997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:46:13.585 [DEBUG] [Thread-129997] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:46:13.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:46:13.587 [DEBUG] [Thread-129997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:46:13.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:46:13.643 [DEBUG] [Thread-129997] [transport.py] [_log()] userauth is OK
2026-02-11T13:46:13.643 [DEBUG] [Thread-129997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:46:13.644 [DEBUG] [Thread-129997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:46:13.644 [DEBUG] [Thread-129997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:46:13.644 [DEBUG] [Thread-129997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:46:13.666 [INFO] [Thread-129997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:46:13.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:46:13.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:46:14.495 [DEBUG] [Thread-129997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:46:14.495 [DEBUG] [Thread-129997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:46:14.544 [DEBUG] [Thread-129997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:46:14.544 [DEBUG] [Thread-129997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:46:14.553 [DEBUG] [Thread-129997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:46:14.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:46:14.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:46:14.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:46:14.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:46:14.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:46:14.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:46:14.587 [DEBUG] [Thread-129997] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:46:17.708 [DEBUG] [Thread-129999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:46:18.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:46:18.999 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:46:24.514 [DEBUG] [Thread-130000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:46:39.565 [DEBUG] [Thread-130001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:46:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:46:44.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:46:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:46:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 46, 30), 16.1, 35.78, 0.0, 22.18, 23.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:46:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:46:30
2026-02-11T13:46:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:46:46.963 [DEBUG] [Thread-130002] [transport.py] [_log()] starting thread (client mode): 0xa2d10c40
2026-02-11T13:46:46.963 [DEBUG] [Thread-130002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:46:46.982 [DEBUG] [Thread-130002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:46:46.982 [INFO] [Thread-130002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:46.985 [DEBUG] [Thread-130002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] client lang: <none>
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] server lang: <none>
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] kex follows: False
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] Compression: none
2026-02-11T13:46:46.986 [DEBUG] [Thread-130002] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:46:47.001 [DEBUG] [Thread-130002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:46:47.002 [DEBUG] [Thread-130002] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:46:47.002 [DEBUG] [Thread-130002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:46:47.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:46:47.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:46:47.003 [DEBUG] [Thread-130002] [transport.py] [_log()] userauth is OK
2026-02-11T13:46:47.003 [DEBUG] [Thread-130002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:46:47.003 [DEBUG] [Thread-130002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:46:47.003 [DEBUG] [Thread-130002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:46:47.003 [DEBUG] [Thread-130002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:46:47.016 [INFO] [Thread-130002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:46:47.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:46:47.772 [DEBUG] [Thread-130002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:46:47.773 [DEBUG] [Thread-130002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:46:47.773 [DEBUG] [Thread-130002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:46:47.813 [DEBUG] [Thread-130002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:46:47.813 [DEBUG] [Thread-130002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:46:47.817 [DEBUG] [Thread-130002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:46:47.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:46:47.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:46:47.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:46:47.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:46:47.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:46:47.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:46:47.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:46:47.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:46:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:46:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.490421 -999.00  +23.60  26.86     42  +10.10 1 2 1 1 1   888    0 14.28 17.49 ----- 32.8 26.9 305.4 30.4 28.8 -21.4 28.5 -19.5 28.2 -19.3 28.6 -20.1
2026-02-11T13:46:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:46:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:46:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.490421
2026-02-11T13:46:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:46:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:46:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:46:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:46:47.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:46:47.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:46:30', tmtdew=16.1, humidity=35.78, cloud=0.0, wind=22.18, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:46:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:46:47.846 [DEBUG] [Thread-130002] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:46:47.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:46:47.954 [DEBUG] [Thread-130005] [transport.py] [_log()] starting thread (client mode): 0xa5742290
2026-02-11T13:46:47.954 [DEBUG] [Thread-130005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:46:47.969 [DEBUG] [Thread-130005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:46:47.969 [INFO] [Thread-130005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] client lang: <none>
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] server lang: <none>
2026-02-11T13:46:47.977 [DEBUG] [Thread-130005] [transport.py] [_log()] kex follows: False
2026-02-11T13:46:47.978 [DEBUG] [Thread-130005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:46:47.978 [DEBUG] [Thread-130005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:46:47.978 [DEBUG] [Thread-130005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:46:47.978 [DEBUG] [Thread-130005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:46:47.978 [DEBUG] [Thread-130005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:46:47.978 [DEBUG] [Thread-130005] [transport.py] [_log()] Compression: none
2026-02-11T13:46:47.978 [DEBUG] [Thread-130005] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:46:48.035 [DEBUG] [Thread-130005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:46:48.036 [DEBUG] [Thread-130005] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:46:48.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:46:48.037 [DEBUG] [Thread-130005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:46:48.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:46:48.091 [DEBUG] [Thread-130005] [transport.py] [_log()] userauth is OK
2026-02-11T13:46:48.091 [DEBUG] [Thread-130005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:46:48.092 [DEBUG] [Thread-130005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:46:48.092 [DEBUG] [Thread-130005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:46:48.092 [DEBUG] [Thread-130005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:46:48.110 [INFO] [Thread-130005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:46:48.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:46:48.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:46:48.924 [DEBUG] [Thread-130005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:46:48.924 [DEBUG] [Thread-130005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:46:48.972 [DEBUG] [Thread-130005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:46:48.972 [DEBUG] [Thread-130005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:46:48.981 [DEBUG] [Thread-130005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:46:48.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:46: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')
2026-02-11T13:46: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
2026-02-11T13:46:49.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:46:49.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:46:49.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:46:49.018 [DEBUG] [Thread-130005] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:46:54.605 [DEBUG] [Thread-130007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:09.665 [DEBUG] [Thread-130008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:17.767 [DEBUG] [Thread-130009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:47:19.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:47:19.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:47:19.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:19.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:21.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 47, 6), 16.38, 35.22, 0.0, 25.83, 24.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:47:21.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:47:06
2026-02-11T13:47:21.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:47:21.555 [DEBUG] [Thread-130010] [transport.py] [_log()] starting thread (client mode): 0xa2d005b0
2026-02-11T13:47:21.555 [DEBUG] [Thread-130010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:47:21.572 [DEBUG] [Thread-130010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:47:21.572 [INFO] [Thread-130010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] client lang: <none>
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] server lang: <none>
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] kex follows: False
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] Compression: none
2026-02-11T13:47:21.575 [DEBUG] [Thread-130010] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:47:21.592 [DEBUG] [Thread-130010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:47:21.593 [DEBUG] [Thread-130010] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:47:21.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:47:21.594 [DEBUG] [Thread-130010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:47:21.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:47:21.637 [DEBUG] [Thread-130010] [transport.py] [_log()] userauth is OK
2026-02-11T13:47:21.637 [DEBUG] [Thread-130010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:47:21.637 [DEBUG] [Thread-130010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:47:21.637 [DEBUG] [Thread-130010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:47:21.637 [DEBUG] [Thread-130010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:47:21.657 [INFO] [Thread-130010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:47:21.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:47:22.298 [DEBUG] [Thread-130010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:47:22.299 [DEBUG] [Thread-130010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:47:22.299 [DEBUG] [Thread-130010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:47:22.339 [DEBUG] [Thread-130010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:47:22.339 [DEBUG] [Thread-130010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:47:22.342 [DEBUG] [Thread-130010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:47:22.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:47:22.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:47:22.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:47:22.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:47:22.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:47:22.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:47:22.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:47:22.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:47:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:47:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.491115 -999.00  +23.50  28.97     42  +10.00 1 2 1 1 1   888    0 14.10 15.62 ----- 36.4 29.0 294.4 38.2 29.2 -14.8 28.9 -13.6 28.4 -11.5 29.2 -13.7
2026-02-11T13:47:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:47:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:47:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.491115
2026-02-11T13:47:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:47:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:47:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:47:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:47:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:47:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:47:06', tmtdew=16.38, humidity=35.22, cloud=0.0, wind=25.83, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:47:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:47:22.361 [DEBUG] [Thread-130010] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:47:22.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:47:22.456 [DEBUG] [Thread-130013] [transport.py] [_log()] starting thread (client mode): 0xa2d00c40
2026-02-11T13:47:22.456 [DEBUG] [Thread-130013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:47:22.471 [DEBUG] [Thread-130013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:47:22.471 [INFO] [Thread-130013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] client lang: <none>
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] server lang: <none>
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] kex follows: False
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] Compression: none
2026-02-11T13:47:22.479 [DEBUG] [Thread-130013] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:47:22.534 [DEBUG] [Thread-130013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:47:22.534 [DEBUG] [Thread-130013] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:47:22.534 [DEBUG] [Thread-130013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:47:22.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:47:22.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:47:22.596 [DEBUG] [Thread-130013] [transport.py] [_log()] userauth is OK
2026-02-11T13:47:22.596 [DEBUG] [Thread-130013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:47:22.596 [DEBUG] [Thread-130013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:47:22.596 [DEBUG] [Thread-130013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:47:22.596 [DEBUG] [Thread-130013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:47:22.615 [INFO] [Thread-130013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:47:22.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:47:22.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:47:23.445 [DEBUG] [Thread-130013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:47:23.445 [DEBUG] [Thread-130013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:47:23.494 [DEBUG] [Thread-130013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:47:23.495 [DEBUG] [Thread-130013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:47:23.507 [DEBUG] [Thread-130013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:47:23.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:47:23.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:47:23.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:47:23.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:47:23.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:47:23.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:47:23.544 [DEBUG] [Thread-130013] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:47:24.706 [DEBUG] [Thread-130015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:39.760 [DEBUG] [Thread-130016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:53.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:47:53.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:47:53.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:47:54.797 [DEBUG] [Thread-130017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:47:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 47, 41), 17.86, 32.08, 0.0, 36.02, 25.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:47:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:47:41
2026-02-11T13:47:55.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:47:55.951 [DEBUG] [Thread-130018] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-11T13:47:55.952 [DEBUG] [Thread-130018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:47:55.964 [DEBUG] [Thread-130018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:47:55.964 [INFO] [Thread-130018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:47:55.965 [DEBUG] [Thread-130018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] client lang: <none>
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] server lang: <none>
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] kex follows: False
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] Compression: none
2026-02-11T13:47:55.966 [DEBUG] [Thread-130018] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:47:55.973 [DEBUG] [Thread-130018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:47:55.973 [DEBUG] [Thread-130018] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:47:55.974 [DEBUG] [Thread-130018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:47:55.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:47:55.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:47:55.975 [DEBUG] [Thread-130018] [transport.py] [_log()] userauth is OK
2026-02-11T13:47:55.975 [DEBUG] [Thread-130018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:47:55.975 [DEBUG] [Thread-130018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:47:55.975 [DEBUG] [Thread-130018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:47:55.975 [DEBUG] [Thread-130018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:47:55.993 [INFO] [Thread-130018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:47:55.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:47:56.644 [DEBUG] [Thread-130018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:47:56.644 [DEBUG] [Thread-130018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:47:56.644 [DEBUG] [Thread-130018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:47:56.685 [DEBUG] [Thread-130018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:47:56.686 [DEBUG] [Thread-130018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:47:56.689 [DEBUG] [Thread-130018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:47:56.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:47:56.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:47:56.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:47:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:47:56.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:47:56.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:47:56.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:47:56.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:47:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:47:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.491462 -999.00  +23.70  27.50     42  +10.00 1 2 1 1 1   888    0 13.97 14.31 ----- 22.7 27.5 314.0 33.2 29.4 -15.6 29.0 -13.6 28.7 -12.5 29.4 -13.9
2026-02-11T13:47:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:47:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:47:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.491462
2026-02-11T13:47:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:47:41', tmtdew=17.86, humidity=32.08, cloud=0.0, wind=36.02, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:47:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:47:56.715 [DEBUG] [Thread-130018] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:47:56.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:47:56.811 [DEBUG] [Thread-130021] [transport.py] [_log()] starting thread (client mode): 0xa2db51b0
2026-02-11T13:47:56.811 [DEBUG] [Thread-130021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:47:56.825 [DEBUG] [Thread-130021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:47:56.826 [INFO] [Thread-130021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:47:56.833 [DEBUG] [Thread-130021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:47:56.833 [DEBUG] [Thread-130021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:47:56.833 [DEBUG] [Thread-130021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:47:56.833 [DEBUG] [Thread-130021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] client lang: <none>
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] server lang: <none>
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] kex follows: False
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] Compression: none
2026-02-11T13:47:56.834 [DEBUG] [Thread-130021] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:47:56.891 [DEBUG] [Thread-130021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:47:56.892 [DEBUG] [Thread-130021] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:47:56.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:47:56.893 [DEBUG] [Thread-130021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:47:56.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:47:56.947 [DEBUG] [Thread-130021] [transport.py] [_log()] userauth is OK
2026-02-11T13:47:56.948 [DEBUG] [Thread-130021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:47:56.948 [DEBUG] [Thread-130021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:47:56.948 [DEBUG] [Thread-130021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:47:56.948 [DEBUG] [Thread-130021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:47:56.971 [INFO] [Thread-130021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:47:56.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:47:56.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:47:57.808 [DEBUG] [Thread-130021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:47:57.808 [DEBUG] [Thread-130021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:47:57.856 [DEBUG] [Thread-130021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:47:57.856 [DEBUG] [Thread-130021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:47:57.865 [DEBUG] [Thread-130021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:47:57.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:47:57.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')
2026-02-11T13:47: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') -> 00000000
2026-02-11T13:47:57.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:47:57.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:47:57.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:47:57.902 [DEBUG] [Thread-130021] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:48:09.832 [DEBUG] [Thread-130023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:48:17.818 [DEBUG] [Thread-130024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:48:19.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:48:19.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:48:24.886 [DEBUG] [Thread-130025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:48:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:48:27.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:48:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:48:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 48, 16), 16.17, 35.66, 0.0, 18.49, 24.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:48:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:48:16
2026-02-11T13:48:30.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:48:30.317 [DEBUG] [Thread-130026] [transport.py] [_log()] starting thread (client mode): 0xa2d03250
2026-02-11T13:48:30.317 [DEBUG] [Thread-130026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:48:30.338 [DEBUG] [Thread-130026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:48:30.338 [INFO] [Thread-130026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:48:30.341 [DEBUG] [Thread-130026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] client lang: <none>
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] server lang: <none>
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] kex follows: False
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] Compression: none
2026-02-11T13:48:30.342 [DEBUG] [Thread-130026] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:48:30.362 [DEBUG] [Thread-130026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:48:30.362 [DEBUG] [Thread-130026] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:48:30.363 [DEBUG] [Thread-130026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:48:30.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:48:30.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:48:30.365 [DEBUG] [Thread-130026] [transport.py] [_log()] userauth is OK
2026-02-11T13:48:30.365 [DEBUG] [Thread-130026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:48:30.366 [DEBUG] [Thread-130026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:48:30.366 [DEBUG] [Thread-130026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:48:30.366 [DEBUG] [Thread-130026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:48:30.398 [INFO] [Thread-130026] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:48:30.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:48:31.040 [DEBUG] [Thread-130026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:48:31.040 [DEBUG] [Thread-130026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:48:31.040 [DEBUG] [Thread-130026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:48:31.081 [DEBUG] [Thread-130026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:48:31.081 [DEBUG] [Thread-130026] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:48:31.084 [DEBUG] [Thread-130026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:48:31.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:48:31.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:48:31.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:48:31.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:48:31.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:48:31.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:48:31.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:48:31.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:48:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:48:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.491810 -999.00  +23.60  25.66     42  +10.30 1 2 1 1 1   888    0 13.77 11.31 ----- 28.9 25.7 317.5 37.0 29.6 -15.8 29.1 -13.9 28.9 -14.5 29.6 -14.2
2026-02-11T13:48:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:48:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:48:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.491810
2026-02-11T13:48:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:48:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:48:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:48:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:48:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:48:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:48:16', tmtdew=16.17, humidity=35.66, cloud=0.0, wind=18.49, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:48:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:48:31.111 [DEBUG] [Thread-130026] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:48:31.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:48:31.204 [DEBUG] [Thread-130029] [transport.py] [_log()] starting thread (client mode): 0xa57424d0
2026-02-11T13:48:31.205 [DEBUG] [Thread-130029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:48:31.219 [DEBUG] [Thread-130029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:48:31.220 [INFO] [Thread-130029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:48:31.227 [DEBUG] [Thread-130029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] client lang: <none>
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] server lang: <none>
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] kex follows: False
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:48:31.228 [DEBUG] [Thread-130029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:48:31.229 [DEBUG] [Thread-130029] [transport.py] [_log()] Compression: none
2026-02-11T13:48:31.229 [DEBUG] [Thread-130029] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:48:31.288 [DEBUG] [Thread-130029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:48:31.288 [DEBUG] [Thread-130029] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:48:31.289 [DEBUG] [Thread-130029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:48:31.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:48:31.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:48:31.344 [DEBUG] [Thread-130029] [transport.py] [_log()] userauth is OK
2026-02-11T13:48:31.344 [DEBUG] [Thread-130029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:48:31.344 [DEBUG] [Thread-130029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:48:31.344 [DEBUG] [Thread-130029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:48:31.344 [DEBUG] [Thread-130029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:48:31.370 [INFO] [Thread-130029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:48:31.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:48:31.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:48:32.243 [DEBUG] [Thread-130029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:48:32.244 [DEBUG] [Thread-130029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:48:32.291 [DEBUG] [Thread-130029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:48:32.291 [DEBUG] [Thread-130029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:48:32.301 [DEBUG] [Thread-130029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:48:32.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:48:32.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:48:32.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
2026-02-11T13:48:32.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:48:32.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:48:32.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:48:32.336 [DEBUG] [Thread-130029] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:48:39.921 [DEBUG] [Thread-130031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:48:54.970 [DEBUG] [Thread-130032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:49:02.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:49:02.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:49:02.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:49:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 48, 51), 16.34, 35.34, 0.0, 33.77, 24.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:49:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:48:51
2026-02-11T13:49:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:49:04.735 [DEBUG] [Thread-130033] [transport.py] [_log()] starting thread (client mode): 0xa2d12fe0
2026-02-11T13:49:04.735 [DEBUG] [Thread-130033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:49:04.754 [DEBUG] [Thread-130033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:49:04.754 [INFO] [Thread-130033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] client lang: <none>
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] server lang: <none>
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] kex follows: False
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] Compression: none
2026-02-11T13:49:04.757 [DEBUG] [Thread-130033] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:49:04.771 [DEBUG] [Thread-130033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:49:04.771 [DEBUG] [Thread-130033] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:49:04.772 [DEBUG] [Thread-130033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:49:04.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:49:04.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:49:04.772 [DEBUG] [Thread-130033] [transport.py] [_log()] userauth is OK
2026-02-11T13:49:04.772 [DEBUG] [Thread-130033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:49:04.772 [DEBUG] [Thread-130033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:49:04.772 [DEBUG] [Thread-130033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:49:04.773 [DEBUG] [Thread-130033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:49:04.788 [INFO] [Thread-130033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:49:04.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:49:05.432 [DEBUG] [Thread-130033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:49:05.432 [DEBUG] [Thread-130033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:49:05.433 [DEBUG] [Thread-130033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:49:05.474 [DEBUG] [Thread-130033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:49:05.474 [DEBUG] [Thread-130033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:49:05.477 [DEBUG] [Thread-130033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:49:05.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:49:05.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:49:05.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:49:05.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:49:05.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:49:05.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:49:05.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:49:05.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:49:05.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:49:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.492157 -999.00  +23.60  31.33     43  +10.50 1 2 2 1 1   888    0 13.83 7.99 ----- 27.9 31.3 290.2 45.0 29.6 -16.3 29.2 -14.1 28.9 -13.9 29.6 -15.0
2026-02-11T13:49:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:49:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:49:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.492157
2026-02-11T13:49:05.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:49:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:49:05.509 [DEBUG] [Thread-130033] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:49:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:49:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:48:51', tmtdew=16.34, humidity=35.34, cloud=0.0, wind=33.77, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:48:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:49:05.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:49:05.607 [DEBUG] [Thread-130036] [transport.py] [_log()] starting thread (client mode): 0xa2d13f70
2026-02-11T13:49:05.607 [DEBUG] [Thread-130036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:49:05.621 [DEBUG] [Thread-130036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:49:05.621 [INFO] [Thread-130036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] client lang: <none>
2026-02-11T13:49:05.629 [DEBUG] [Thread-130036] [transport.py] [_log()] server lang: <none>
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] kex follows: False
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] Compression: none
2026-02-11T13:49:05.630 [DEBUG] [Thread-130036] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:49:05.689 [DEBUG] [Thread-130036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:49:05.690 [DEBUG] [Thread-130036] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:49:05.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:49:05.691 [DEBUG] [Thread-130036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:49:05.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:49:05.748 [DEBUG] [Thread-130036] [transport.py] [_log()] userauth is OK
2026-02-11T13:49:05.748 [DEBUG] [Thread-130036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:49:05.748 [DEBUG] [Thread-130036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:49:05.749 [DEBUG] [Thread-130036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:49:05.749 [DEBUG] [Thread-130036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:49:05.767 [INFO] [Thread-130036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:49:05.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:49:05.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:49:06.645 [DEBUG] [Thread-130036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:49:06.645 [DEBUG] [Thread-130036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:49:06.694 [DEBUG] [Thread-130036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:49:06.694 [DEBUG] [Thread-130036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:49:06.704 [DEBUG] [Thread-130036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:49:06.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:49:06.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')
2026-02-11T13:49:06.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:49:06.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:49:06.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:49:06.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:49:06.741 [DEBUG] [Thread-130036] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:49:10.007 [DEBUG] [Thread-130038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:49:17.868 [DEBUG] [Thread-130039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:49:19.442 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:49:19.443 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:49:25.058 [DEBUG] [Thread-130040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:49:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:49:36.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:49:36.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:49:38.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 49, 27), 16.34, 35.35, 0.0, 27.7, 24.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:49:38.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:49:27
2026-02-11T13:49:39.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:49:39.323 [DEBUG] [Thread-130041] [transport.py] [_log()] starting thread (client mode): 0xa2db69b0
2026-02-11T13:49:39.324 [DEBUG] [Thread-130041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:49:39.345 [DEBUG] [Thread-130041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:49:39.345 [INFO] [Thread-130041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:49:39.349 [DEBUG] [Thread-130041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:49:39.349 [DEBUG] [Thread-130041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:49:39.349 [DEBUG] [Thread-130041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:49:39.349 [DEBUG] [Thread-130041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:39.349 [DEBUG] [Thread-130041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] client lang: <none>
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] server lang: <none>
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] kex follows: False
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] Compression: none
2026-02-11T13:49:39.350 [DEBUG] [Thread-130041] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:49:39.372 [DEBUG] [Thread-130041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:49:39.372 [DEBUG] [Thread-130041] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:49:39.373 [DEBUG] [Thread-130041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:49:39.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:49:39.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:49:39.376 [DEBUG] [Thread-130041] [transport.py] [_log()] userauth is OK
2026-02-11T13:49:39.376 [DEBUG] [Thread-130041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:49:39.376 [DEBUG] [Thread-130041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:49:39.376 [DEBUG] [Thread-130041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:49:39.376 [DEBUG] [Thread-130041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:49:39.401 [INFO] [Thread-130041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:49:39.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:49:40.009 [DEBUG] [Thread-130041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:49:40.010 [DEBUG] [Thread-130041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:49:40.010 [DEBUG] [Thread-130041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:49:40.050 [DEBUG] [Thread-130041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:49:40.051 [DEBUG] [Thread-130041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:49:40.053 [DEBUG] [Thread-130041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:49:40.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:49:40.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:49:40.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:49:40.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:49:40.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:49:40.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:49:40.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:49:40.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:49:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:49:40.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.492504 -999.00  +23.70  25.97     43  +10.50 1 2 1 1 1   888    0 13.36 2.49 ----- 29.2 26.0 296.0 38.6 29.7 -15.9 29.2 -14.2 28.9 -13.0 29.8 -14.9
2026-02-11T13:49:40.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:49:40.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:49:40.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.492504
2026-02-11T13:49:40.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:49:40.080 [DEBUG] [Thread-130041] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:49:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:49:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:49:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:49:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:49:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:49:27', tmtdew=16.34, humidity=35.35, cloud=0.0, wind=27.7, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:49:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:49:40.095 [DEBUG] [Thread-130044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:49:40.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:49:40.179 [DEBUG] [Thread-130045] [transport.py] [_log()] starting thread (client mode): 0xa2d10e50
2026-02-11T13:49:40.179 [DEBUG] [Thread-130045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:49:40.195 [DEBUG] [Thread-130045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:49:40.196 [INFO] [Thread-130045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:49:40.203 [DEBUG] [Thread-130045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:49:40.203 [DEBUG] [Thread-130045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:49:40.203 [DEBUG] [Thread-130045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] client lang: <none>
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] server lang: <none>
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] kex follows: False
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] Compression: none
2026-02-11T13:49:40.204 [DEBUG] [Thread-130045] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:49:40.266 [DEBUG] [Thread-130045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:49:40.266 [DEBUG] [Thread-130045] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:49:40.267 [DEBUG] [Thread-130045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:49:40.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:49:40.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:49:40.323 [DEBUG] [Thread-130045] [transport.py] [_log()] userauth is OK
2026-02-11T13:49:40.324 [DEBUG] [Thread-130045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:49:40.324 [DEBUG] [Thread-130045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:49:40.324 [DEBUG] [Thread-130045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:49:40.324 [DEBUG] [Thread-130045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:49:40.343 [INFO] [Thread-130045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:49:40.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:49:40.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:49:41.322 [DEBUG] [Thread-130045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:49:41.322 [DEBUG] [Thread-130045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:49:41.369 [DEBUG] [Thread-130045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:49:41.370 [DEBUG] [Thread-130045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:49:41.379 [DEBUG] [Thread-130045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:49:41.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:49:41.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:49:41.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:49:41.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:49:41.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:49:41.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:49:41.416 [DEBUG] [Thread-130045] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:49:55.135 [DEBUG] [Thread-130047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:50:10.173 [DEBUG] [Thread-130048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:50:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:50:11.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:50:11.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
2026-02-11T13:50:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 50, 2), 16.18, 35.67, 0.0, 28.39, 24.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:50:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:50:02
2026-02-11T13:50:13.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:50:13.769 [DEBUG] [Thread-130049] [transport.py] [_log()] starting thread (client mode): 0xa5758b80
2026-02-11T13:50:13.769 [DEBUG] [Thread-130049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:50:13.789 [DEBUG] [Thread-130049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:50:13.789 [INFO] [Thread-130049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:50:13.792 [DEBUG] [Thread-130049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] client lang: <none>
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] server lang: <none>
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] kex follows: False
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] Compression: none
2026-02-11T13:50:13.793 [DEBUG] [Thread-130049] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:50:13.812 [DEBUG] [Thread-130049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:50:13.813 [DEBUG] [Thread-130049] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:50:13.813 [DEBUG] [Thread-130049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:50:13.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:50:13.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:50:13.815 [DEBUG] [Thread-130049] [transport.py] [_log()] userauth is OK
2026-02-11T13:50:13.815 [DEBUG] [Thread-130049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:50:13.815 [DEBUG] [Thread-130049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:50:13.816 [DEBUG] [Thread-130049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:50:13.816 [DEBUG] [Thread-130049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:50:13.837 [INFO] [Thread-130049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:50:13.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:50:14.568 [DEBUG] [Thread-130049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:50:14.568 [DEBUG] [Thread-130049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:50:14.568 [DEBUG] [Thread-130049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:50:14.609 [DEBUG] [Thread-130049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:50:14.610 [DEBUG] [Thread-130049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:50:14.613 [DEBUG] [Thread-130049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:50:14.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:50:14.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:50:14.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:50:14.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:50:14.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:50:14.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:50:14.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:50:14.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:50:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:50:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.492851 -999.00  +23.90  20.38     42  +10.40 1 2 1 1 1   888    0 13.46 0.46 ----- 16.0 20.4 308.0 30.2 30.1 -15.1 29.5 -12.8 29.1 -13.5 30.0 -13.9
2026-02-11T13:50:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:50:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:50:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.492851
2026-02-11T13:50:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:50:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:50:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:50:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:50:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:50:14.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:50:02', tmtdew=16.18, humidity=35.67, cloud=0.0, wind=28.39, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:49:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:50:14.642 [DEBUG] [Thread-130049] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:50:14.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:50:14.737 [DEBUG] [Thread-130052] [transport.py] [_log()] starting thread (client mode): 0xa81d6ad0
2026-02-11T13:50:14.738 [DEBUG] [Thread-130052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:50:14.752 [DEBUG] [Thread-130052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:50:14.752 [INFO] [Thread-130052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:50:14.760 [DEBUG] [Thread-130052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] client lang: <none>
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] server lang: <none>
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] kex follows: False
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:50:14.761 [DEBUG] [Thread-130052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:50:14.762 [DEBUG] [Thread-130052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:50:14.762 [DEBUG] [Thread-130052] [transport.py] [_log()] Compression: none
2026-02-11T13:50:14.762 [DEBUG] [Thread-130052] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:50:14.820 [DEBUG] [Thread-130052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:50:14.820 [DEBUG] [Thread-130052] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:50:14.821 [DEBUG] [Thread-130052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:50:14.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:50:14.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:50:14.876 [DEBUG] [Thread-130052] [transport.py] [_log()] userauth is OK
2026-02-11T13:50:14.876 [DEBUG] [Thread-130052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:50:14.876 [DEBUG] [Thread-130052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:50:14.877 [DEBUG] [Thread-130052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:50:14.877 [DEBUG] [Thread-130052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:50:14.895 [INFO] [Thread-130052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:50:14.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:50:14.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:50:15.759 [DEBUG] [Thread-130052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:50:15.759 [DEBUG] [Thread-130052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:50:15.807 [DEBUG] [Thread-130052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:50:15.808 [DEBUG] [Thread-130052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:50:15.817 [DEBUG] [Thread-130052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:50:15.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:50:15.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:50:15.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:50:15.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:50:15.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:50:15.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:50:15.854 [DEBUG] [Thread-130052] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:50:17.923 [DEBUG] [Thread-130054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:50:19.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:50:19.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:50:25.210 [DEBUG] [Thread-130055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:50:40.268 [DEBUG] [Thread-130056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:50:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:50:45.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:50:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:50:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 50, 37), 17.45, 33.01, 0.0, 27.1, 25.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:50:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:50:37
2026-02-11T13:50:48.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:50:48.232 [DEBUG] [Thread-130057] [transport.py] [_log()] starting thread (client mode): 0xa2d6c400
2026-02-11T13:50:48.232 [DEBUG] [Thread-130057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:50:48.255 [DEBUG] [Thread-130057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:50:48.256 [INFO] [Thread-130057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] client lang: <none>
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] server lang: <none>
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] kex follows: False
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:50:48.259 [DEBUG] [Thread-130057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:50:48.260 [DEBUG] [Thread-130057] [transport.py] [_log()] Compression: none
2026-02-11T13:50:48.260 [DEBUG] [Thread-130057] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:50:48.270 [DEBUG] [Thread-130057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:50:48.270 [DEBUG] [Thread-130057] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:50:48.271 [DEBUG] [Thread-130057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:50:48.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:50:48.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:50:48.273 [DEBUG] [Thread-130057] [transport.py] [_log()] userauth is OK
2026-02-11T13:50:48.273 [DEBUG] [Thread-130057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:50:48.273 [DEBUG] [Thread-130057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:50:48.273 [DEBUG] [Thread-130057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:50:48.273 [DEBUG] [Thread-130057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:50:48.292 [INFO] [Thread-130057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:50:48.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:50:48.942 [DEBUG] [Thread-130057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:50:48.942 [DEBUG] [Thread-130057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:50:48.942 [DEBUG] [Thread-130057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:50:48.983 [DEBUG] [Thread-130057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:50:48.984 [DEBUG] [Thread-130057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:50:48.987 [DEBUG] [Thread-130057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:50:48.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:50:48.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:50:49.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:50:49.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:50:49.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:50:49.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:50:49.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:50:49.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:50:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:50:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.493198 -999.00  +24.30  30.38     41  +10.40 1 2 2 1 1   888    0 13.46 -0.60 ----- 31.9 30.4 298.6 33.0 30.3 -14.7 29.6 -13.4 29.4 -13.3 30.3 -14.7
2026-02-11T13:50:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:50:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:50:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.493198
2026-02-11T13:50:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:50:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:50:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:50:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:50:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:50:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:50:37', tmtdew=17.45, humidity=33.01, cloud=0.0, wind=27.1, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:50:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:50:49.014 [DEBUG] [Thread-130057] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:50:49.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:50:49.101 [DEBUG] [Thread-130060] [transport.py] [_log()] starting thread (client mode): 0xa2d6f970
2026-02-11T13:50:49.101 [DEBUG] [Thread-130060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:50:49.118 [DEBUG] [Thread-130060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:50:49.118 [INFO] [Thread-130060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] client lang: <none>
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] server lang: <none>
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] kex follows: False
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:50:49.126 [DEBUG] [Thread-130060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:50:49.127 [DEBUG] [Thread-130060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:50:49.127 [DEBUG] [Thread-130060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:50:49.127 [DEBUG] [Thread-130060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:50:49.127 [DEBUG] [Thread-130060] [transport.py] [_log()] Compression: none
2026-02-11T13:50:49.127 [DEBUG] [Thread-130060] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:50:49.184 [DEBUG] [Thread-130060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:50:49.185 [DEBUG] [Thread-130060] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:50:49.185 [DEBUG] [Thread-130060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:50:49.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:50:49.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:50:49.244 [DEBUG] [Thread-130060] [transport.py] [_log()] userauth is OK
2026-02-11T13:50:49.244 [DEBUG] [Thread-130060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:50:49.244 [DEBUG] [Thread-130060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:50:49.245 [DEBUG] [Thread-130060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:50:49.245 [DEBUG] [Thread-130060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:50:49.263 [INFO] [Thread-130060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:50:49.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:50:49.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:50:50.117 [DEBUG] [Thread-130060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:50:50.118 [DEBUG] [Thread-130060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:50:50.165 [DEBUG] [Thread-130060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:50:50.166 [DEBUG] [Thread-130060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:50:50.175 [DEBUG] [Thread-130060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:50:50.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:50:50.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:50:50.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:50:50.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:50:50.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:50:50.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:50:50.215 [DEBUG] [Thread-130060] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:50:55.311 [DEBUG] [Thread-130062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:10.365 [DEBUG] [Thread-130063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:17.975 [DEBUG] [Thread-130064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:19.725 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:19.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:20.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:51:20.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:51:20.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:51:22.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 51, 13), 16.15, 35.62, 0.0, 26.47, 24.34, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:51:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:51:13
2026-02-11T13:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:51:22.752 [DEBUG] [Thread-130065] [transport.py] [_log()] starting thread (client mode): 0xa5758be0
2026-02-11T13:51:22.752 [DEBUG] [Thread-130065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:51:22.772 [DEBUG] [Thread-130065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:51:22.773 [INFO] [Thread-130065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] client lang: <none>
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] server lang: <none>
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] kex follows: False
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] Compression: none
2026-02-11T13:51:22.776 [DEBUG] [Thread-130065] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:51:22.791 [DEBUG] [Thread-130065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:51:22.792 [DEBUG] [Thread-130065] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:51:22.792 [DEBUG] [Thread-130065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:51:22.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:51:22.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:51:22.794 [DEBUG] [Thread-130065] [transport.py] [_log()] userauth is OK
2026-02-11T13:51:22.795 [DEBUG] [Thread-130065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:51:22.795 [DEBUG] [Thread-130065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:51:22.795 [DEBUG] [Thread-130065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:51:22.795 [DEBUG] [Thread-130065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:51:22.821 [INFO] [Thread-130065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:51:22.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:51:23.459 [DEBUG] [Thread-130065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:51:23.459 [DEBUG] [Thread-130065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:51:23.459 [DEBUG] [Thread-130065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:51:23.500 [DEBUG] [Thread-130065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:51:23.501 [DEBUG] [Thread-130065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:51:23.504 [DEBUG] [Thread-130065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:51:23.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:51:23.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:51:23.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:51:23.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:51:23.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:51:23.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:51:23.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:51:23.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:51:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:51:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.493546 -999.00  +24.00  27.35     41  +10.10 1 2 1 1 1   888    0 13.51 2.73 ----- 24.9 27.4 295.4 34.9 30.2 -15.6 29.7 -14.2 29.4 -13.3 30.2 -14.8
2026-02-11T13:51:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:51:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:51:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.493546
2026-02-11T13:51:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:51:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:51:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:51:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:51:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:51:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:51:13', tmtdew=16.15, humidity=35.62, cloud=0.0, wind=26.47, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:50:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:51:23.532 [DEBUG] [Thread-130065] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:51:23.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:51:23.626 [DEBUG] [Thread-130068] [transport.py] [_log()] starting thread (client mode): 0xa575b6d0
2026-02-11T13:51:23.627 [DEBUG] [Thread-130068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:51:23.640 [DEBUG] [Thread-130068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:51:23.640 [INFO] [Thread-130068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:51:23.647 [DEBUG] [Thread-130068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:51:23.647 [DEBUG] [Thread-130068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] client lang: <none>
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] server lang: <none>
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] kex follows: False
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:51:23.648 [DEBUG] [Thread-130068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:51:23.649 [DEBUG] [Thread-130068] [transport.py] [_log()] Compression: none
2026-02-11T13:51:23.649 [DEBUG] [Thread-130068] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:51:23.708 [DEBUG] [Thread-130068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:51:23.709 [DEBUG] [Thread-130068] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:51:23.710 [DEBUG] [Thread-130068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:51:23.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:51:23.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:51:23.764 [DEBUG] [Thread-130068] [transport.py] [_log()] userauth is OK
2026-02-11T13:51:23.765 [DEBUG] [Thread-130068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:51:23.765 [DEBUG] [Thread-130068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:51:23.765 [DEBUG] [Thread-130068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:51:23.765 [DEBUG] [Thread-130068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:51:23.783 [INFO] [Thread-130068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:51:23.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:51:23.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:51:24.682 [DEBUG] [Thread-130068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:51:24.682 [DEBUG] [Thread-130068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:51:24.730 [DEBUG] [Thread-130068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:51:24.730 [DEBUG] [Thread-130068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:51:24.739 [DEBUG] [Thread-130068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:51:24.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:51:24.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:51:24.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
2026-02-11T13:51:24.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:51:24.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:51:24.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:51:24.775 [DEBUG] [Thread-130068] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:51:25.407 [DEBUG] [Thread-130070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:40.467 [DEBUG] [Thread-130071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:51:54.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:51:54.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:51:55.503 [DEBUG] [Thread-130072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:51:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 51, 49), 16.17, 35.42, 0.0, 23.64, 23.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:51:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:51:49
2026-02-11T13:51:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:51:57.046 [DEBUG] [Thread-130073] [transport.py] [_log()] starting thread (client mode): 0xa2d3cd90
2026-02-11T13:51:57.047 [DEBUG] [Thread-130073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:51:57.068 [DEBUG] [Thread-130073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:51:57.068 [INFO] [Thread-130073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] client lang: <none>
2026-02-11T13:51:57.071 [DEBUG] [Thread-130073] [transport.py] [_log()] server lang: <none>
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] kex follows: False
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] Compression: none
2026-02-11T13:51:57.072 [DEBUG] [Thread-130073] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:51:57.089 [DEBUG] [Thread-130073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:51:57.089 [DEBUG] [Thread-130073] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:51:57.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:51:57.090 [DEBUG] [Thread-130073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:51:57.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:51:57.092 [DEBUG] [Thread-130073] [transport.py] [_log()] userauth is OK
2026-02-11T13:51:57.092 [DEBUG] [Thread-130073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:51:57.092 [DEBUG] [Thread-130073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:51:57.092 [DEBUG] [Thread-130073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:51:57.093 [DEBUG] [Thread-130073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:51:57.127 [INFO] [Thread-130073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:51:57.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:51:57.769 [DEBUG] [Thread-130073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:51:57.770 [DEBUG] [Thread-130073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:51:57.770 [DEBUG] [Thread-130073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:51:57.811 [DEBUG] [Thread-130073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:51:57.811 [DEBUG] [Thread-130073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:51:57.814 [DEBUG] [Thread-130073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:51:57.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:51:57.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:51:57.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:51:57.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:51:57.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:51:57.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:51:57.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:51:57.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:51:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:51:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.494240 -999.00  +23.30  28.61     42  +10.00 1 2 1 1 1   888    0 13.54 4.75 ----- 26.0 28.6 308.6 31.0 30.4 -15.0 29.7 -13.8 29.7 -13.7 30.4 -15.0
2026-02-11T13:51:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:51:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:51:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.494240
2026-02-11T13:51:57.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:51:57.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:51:57.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:51:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:51:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:51:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:51:49', tmtdew=16.17, humidity=35.42, cloud=0.0, wind=23.64, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:51:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:51:57.840 [DEBUG] [Thread-130073] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:51:57.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:51:57.934 [DEBUG] [Thread-130076] [transport.py] [_log()] starting thread (client mode): 0xa2d6eec0
2026-02-11T13:51:57.934 [DEBUG] [Thread-130076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:51:57.948 [DEBUG] [Thread-130076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:51:57.949 [INFO] [Thread-130076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:51:57.956 [DEBUG] [Thread-130076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:51:57.957 [DEBUG] [Thread-130076] [transport.py] [_log()] client lang: <none>
2026-02-11T13:51:57.958 [DEBUG] [Thread-130076] [transport.py] [_log()] server lang: <none>
2026-02-11T13:51:57.958 [DEBUG] [Thread-130076] [transport.py] [_log()] kex follows: False
2026-02-11T13:51:57.958 [DEBUG] [Thread-130076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:51:57.958 [DEBUG] [Thread-130076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:51:57.958 [DEBUG] [Thread-130076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:51:57.958 [DEBUG] [Thread-130076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:51:57.958 [DEBUG] [Thread-130076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:51:57.959 [DEBUG] [Thread-130076] [transport.py] [_log()] Compression: none
2026-02-11T13:51:57.959 [DEBUG] [Thread-130076] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:51:58.017 [DEBUG] [Thread-130076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:51:58.018 [DEBUG] [Thread-130076] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:51:58.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:51:58.020 [DEBUG] [Thread-130076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:51:58.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:51:58.076 [DEBUG] [Thread-130076] [transport.py] [_log()] userauth is OK
2026-02-11T13:51:58.076 [DEBUG] [Thread-130076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:51:58.076 [DEBUG] [Thread-130076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:51:58.077 [DEBUG] [Thread-130076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:51:58.077 [DEBUG] [Thread-130076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:51:58.101 [INFO] [Thread-130076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:51:58.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:51:58.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:51:58.937 [DEBUG] [Thread-130076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:51:58.937 [DEBUG] [Thread-130076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:51:58.986 [DEBUG] [Thread-130076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:51:58.986 [DEBUG] [Thread-130076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:51:58.995 [DEBUG] [Thread-130076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:51:59.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:51:59.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:51:59.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:51:59.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:51:59.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:51:59.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:51:59.033 [DEBUG] [Thread-130076] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:52:10.543 [DEBUG] [Thread-130078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:52:18.026 [DEBUG] [Thread-130079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:52:19.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:52:19.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:52:25.595 [DEBUG] [Thread-130080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:52:29.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:52:29.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:52:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:52:30.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 51, 49), 16.17, 35.42, 0.0, 23.64, 23.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:52:30.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:51:49
2026-02-11T13:52:31.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:52:31.513 [DEBUG] [Thread-130081] [transport.py] [_log()] starting thread (client mode): 0xa2d12410
2026-02-11T13:52:31.513 [DEBUG] [Thread-130081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:52:31.534 [DEBUG] [Thread-130081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:52:31.534 [INFO] [Thread-130081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:52:31.537 [DEBUG] [Thread-130081] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] client lang: <none>
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] server lang: <none>
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] kex follows: False
2026-02-11T13:52:31.538 [DEBUG] [Thread-130081] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:52:31.539 [DEBUG] [Thread-130081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:52:31.539 [DEBUG] [Thread-130081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:52:31.539 [DEBUG] [Thread-130081] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:52:31.539 [DEBUG] [Thread-130081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:52:31.539 [DEBUG] [Thread-130081] [transport.py] [_log()] Compression: none
2026-02-11T13:52:31.539 [DEBUG] [Thread-130081] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:52:31.558 [DEBUG] [Thread-130081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:52:31.558 [DEBUG] [Thread-130081] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:52:31.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:52:31.559 [DEBUG] [Thread-130081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:52:31.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:52:31.561 [DEBUG] [Thread-130081] [transport.py] [_log()] userauth is OK
2026-02-11T13:52:31.561 [DEBUG] [Thread-130081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:52:31.562 [DEBUG] [Thread-130081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:52:31.562 [DEBUG] [Thread-130081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:52:31.562 [DEBUG] [Thread-130081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:52:31.586 [INFO] [Thread-130081] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:52:31.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:52:32.235 [DEBUG] [Thread-130081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:52:32.235 [DEBUG] [Thread-130081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:52:32.236 [DEBUG] [Thread-130081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:52:32.276 [DEBUG] [Thread-130081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:52:32.277 [DEBUG] [Thread-130081] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:52:32.279 [DEBUG] [Thread-130081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:52:32.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:52:32.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:52:32.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:52:32.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:52:32.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:52:32.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:52:32.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:52:32.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:52:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:52:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.494587 -999.00  +23.50  23.31     42  +10.00 1 2 1 1 1   888    0 13.69 4.84 ----- 22.6 23.3 298.4 32.3 30.5 -14.3 29.8 -13.1 29.7 -12.9 30.6 -14.4
2026-02-11T13:52:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:52:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:52:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.494587
2026-02-11T13:52:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:52:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:52:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:52:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:52:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:52:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:51:49', tmtdew=16.17, humidity=35.42, cloud=0.0, wind=23.64, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:52:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:52:32.305 [DEBUG] [Thread-130081] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:52:32.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:52:32.402 [DEBUG] [Thread-130084] [transport.py] [_log()] starting thread (client mode): 0xa2d10370
2026-02-11T13:52:32.403 [DEBUG] [Thread-130084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:52:32.420 [DEBUG] [Thread-130084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:52:32.420 [INFO] [Thread-130084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:52:32.428 [DEBUG] [Thread-130084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:52:32.428 [DEBUG] [Thread-130084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] client lang: <none>
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] server lang: <none>
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] kex follows: False
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:52:32.429 [DEBUG] [Thread-130084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:52:32.430 [DEBUG] [Thread-130084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:52:32.430 [DEBUG] [Thread-130084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:52:32.430 [DEBUG] [Thread-130084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:52:32.430 [DEBUG] [Thread-130084] [transport.py] [_log()] Compression: none
2026-02-11T13:52:32.430 [DEBUG] [Thread-130084] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:52:32.488 [DEBUG] [Thread-130084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:52:32.489 [DEBUG] [Thread-130084] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:52:32.490 [DEBUG] [Thread-130084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:52:32.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:52:32.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:52:32.544 [DEBUG] [Thread-130084] [transport.py] [_log()] userauth is OK
2026-02-11T13:52:32.545 [DEBUG] [Thread-130084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:52:32.545 [DEBUG] [Thread-130084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:52:32.545 [DEBUG] [Thread-130084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:52:32.545 [DEBUG] [Thread-130084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:52:32.563 [INFO] [Thread-130084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:52:32.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:52:32.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:52:33.406 [DEBUG] [Thread-130084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:52:33.406 [DEBUG] [Thread-130084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:52:33.455 [DEBUG] [Thread-130084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:52:33.455 [DEBUG] [Thread-130084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:52:33.464 [DEBUG] [Thread-130084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:52:33.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:52:33.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:52:33.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:52:33.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:52:33.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:52:33.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:52:33.500 [DEBUG] [Thread-130084] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:52:40.632 [DEBUG] [Thread-130086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:52:55.680 [DEBUG] [Thread-130087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:53:03.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:53:03.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:53:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:53:05.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 52, 24), 15.98, 35.85, 0.0, 18.17, 23.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:53:05.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:52:24
2026-02-11T13:53:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:53:06.589 [DEBUG] [Thread-130088] [transport.py] [_log()] starting thread (client mode): 0xa2d100a0
2026-02-11T13:53:06.590 [DEBUG] [Thread-130088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:53:06.610 [DEBUG] [Thread-130088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:53:06.610 [INFO] [Thread-130088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] client lang: <none>
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] server lang: <none>
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] kex follows: False
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] Compression: none
2026-02-11T13:53:06.613 [DEBUG] [Thread-130088] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:53:06.632 [DEBUG] [Thread-130088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:53:06.633 [DEBUG] [Thread-130088] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:53:06.633 [DEBUG] [Thread-130088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:53:06.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:53:06.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:53:06.635 [DEBUG] [Thread-130088] [transport.py] [_log()] userauth is OK
2026-02-11T13:53:06.636 [DEBUG] [Thread-130088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:53:06.636 [DEBUG] [Thread-130088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:53:06.636 [DEBUG] [Thread-130088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:53:06.636 [DEBUG] [Thread-130088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:53:06.650 [INFO] [Thread-130088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:53:06.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:53:07.298 [DEBUG] [Thread-130088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:53:07.298 [DEBUG] [Thread-130088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:53:07.299 [DEBUG] [Thread-130088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:53:07.340 [DEBUG] [Thread-130088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:53:07.340 [DEBUG] [Thread-130088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:53:07.343 [DEBUG] [Thread-130088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:53:07.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:53:07.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:53:07.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:53:07.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:53:07.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:53:07.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:53:07.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:53:07.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:53:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:53:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.494935 -999.00  +23.40  21.69     43  +10.30 1 2 1 1 1   888    0 13.64 4.05 ----- 19.5 21.7 308.8 27.7 30.6 -15.2 29.8 -13.4 29.8 -15.7 30.7 -14.8
2026-02-11T13:53:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:53:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:53:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.494935
2026-02-11T13:53:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:53:07.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:53:07.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:53:07.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:53:07.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:53:07.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:52:24', tmtdew=15.98, humidity=35.85, cloud=0.0, wind=18.17, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:52:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:53:07.372 [DEBUG] [Thread-130088] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:53:07.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:53:07.460 [DEBUG] [Thread-130091] [transport.py] [_log()] starting thread (client mode): 0xa2d00220
2026-02-11T13:53:07.460 [DEBUG] [Thread-130091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:53:07.479 [DEBUG] [Thread-130091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:53:07.479 [INFO] [Thread-130091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:53:07.487 [DEBUG] [Thread-130091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:53:07.487 [DEBUG] [Thread-130091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:53:07.487 [DEBUG] [Thread-130091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:53:07.487 [DEBUG] [Thread-130091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:07.487 [DEBUG] [Thread-130091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:07.487 [DEBUG] [Thread-130091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:07.487 [DEBUG] [Thread-130091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] client lang: <none>
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] server lang: <none>
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] kex follows: False
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] Compression: none
2026-02-11T13:53:07.488 [DEBUG] [Thread-130091] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:53:07.544 [DEBUG] [Thread-130091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:53:07.545 [DEBUG] [Thread-130091] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:53:07.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:53:07.546 [DEBUG] [Thread-130091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:53:07.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:53:07.600 [DEBUG] [Thread-130091] [transport.py] [_log()] userauth is OK
2026-02-11T13:53:07.601 [DEBUG] [Thread-130091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:53:07.601 [DEBUG] [Thread-130091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:53:07.601 [DEBUG] [Thread-130091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:53:07.601 [DEBUG] [Thread-130091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:53:07.619 [INFO] [Thread-130091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:53:07.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:53:07.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:53:08.463 [DEBUG] [Thread-130091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:53:08.464 [DEBUG] [Thread-130091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:53:08.511 [DEBUG] [Thread-130091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:53:08.511 [DEBUG] [Thread-130091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:53:08.521 [DEBUG] [Thread-130091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:53:08.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:53:08.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:53:08.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:53:08.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:53:08.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:53:08.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:53:08.555 [DEBUG] [Thread-130091] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:53:10.720 [DEBUG] [Thread-130093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:53:18.079 [DEBUG] [Thread-130094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:53:20.006 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:53:20.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:53:25.779 [DEBUG] [Thread-130095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:53:38.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:53:38.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:53:38.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:53:40.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 52, 59), 16.11, 35.8, 0.0, 19.66, 23.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:53:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:52:59
2026-02-11T13:53:40.818 [DEBUG] [Thread-130096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:53:41.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:53:41.401 [DEBUG] [Thread-130097] [transport.py] [_log()] starting thread (client mode): 0xa81d5a50
2026-02-11T13:53:41.401 [DEBUG] [Thread-130097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:53:41.422 [DEBUG] [Thread-130097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:53:41.422 [INFO] [Thread-130097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] client lang: <none>
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] server lang: <none>
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] kex follows: False
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] Compression: none
2026-02-11T13:53:41.423 [DEBUG] [Thread-130097] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:53:41.443 [DEBUG] [Thread-130097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:53:41.443 [DEBUG] [Thread-130097] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:53:41.444 [DEBUG] [Thread-130097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:53:41.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:53:41.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:53:41.446 [DEBUG] [Thread-130097] [transport.py] [_log()] userauth is OK
2026-02-11T13:53:41.446 [DEBUG] [Thread-130097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:53:41.446 [DEBUG] [Thread-130097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:53:41.446 [DEBUG] [Thread-130097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:53:41.446 [DEBUG] [Thread-130097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:53:41.470 [INFO] [Thread-130097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:53:41.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:53:42.092 [DEBUG] [Thread-130097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:53:42.093 [DEBUG] [Thread-130097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:53:42.093 [DEBUG] [Thread-130097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:53:42.133 [DEBUG] [Thread-130097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:53:42.134 [DEBUG] [Thread-130097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:53:42.137 [DEBUG] [Thread-130097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:53:42.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:53:42.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:53:42.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:53:42.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:53:42.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:53:42.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:53:42.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:53:42.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:53:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:53:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.495282 -999.00  +23.90  22.52     42  +10.30 1 2 1 1 1   888    0 13.43 2.03 ----- 18.9 22.5 316.4 24.1 30.8 -15.0 30.0 -13.7 29.9 -12.4 30.9 -14.5
2026-02-11T13:53:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:53:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:53:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.495282
2026-02-11T13:53:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:53:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:53:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:53:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:53:42.161 [DEBUG] [Thread-130097] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:53:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:53:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:52:59', tmtdew=16.11, humidity=35.8, cloud=0.0, wind=19.66, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:53:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:53:42.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:53:42.257 [DEBUG] [Thread-130100] [transport.py] [_log()] starting thread (client mode): 0xa2d03340
2026-02-11T13:53:42.257 [DEBUG] [Thread-130100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:53:42.276 [DEBUG] [Thread-130100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:53:42.276 [INFO] [Thread-130100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:53:42.283 [DEBUG] [Thread-130100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] client lang: <none>
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] server lang: <none>
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] kex follows: False
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:53:42.284 [DEBUG] [Thread-130100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:53:42.285 [DEBUG] [Thread-130100] [transport.py] [_log()] Compression: none
2026-02-11T13:53:42.285 [DEBUG] [Thread-130100] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:53:42.340 [DEBUG] [Thread-130100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:53:42.341 [DEBUG] [Thread-130100] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:53:42.341 [DEBUG] [Thread-130100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:53:42.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:53:42.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:53:42.400 [DEBUG] [Thread-130100] [transport.py] [_log()] userauth is OK
2026-02-11T13:53:42.400 [DEBUG] [Thread-130100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:53:42.400 [DEBUG] [Thread-130100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:53:42.401 [DEBUG] [Thread-130100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:53:42.401 [DEBUG] [Thread-130100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:53:42.424 [INFO] [Thread-130100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:53:42.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:53:42.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:53:43.253 [DEBUG] [Thread-130100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:53:43.253 [DEBUG] [Thread-130100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:53:43.301 [DEBUG] [Thread-130100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:53:43.301 [DEBUG] [Thread-130100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:53:43.310 [DEBUG] [Thread-130100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:53:43.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:53:43.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:53:43.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:53:43.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:53:43.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:53:43.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:53:43.343 [DEBUG] [Thread-130100] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:53:55.855 [DEBUG] [Thread-130102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:54:10.904 [DEBUG] [Thread-130103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:54:13.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:54:13.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:54:13.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
2026-02-11T13:54:15.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 53, 36), 16.95, 34.0, 0.0, 16.94, 25.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:54:15.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:53:36
2026-02-11T13:54:16.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:54:16.496 [DEBUG] [Thread-130104] [transport.py] [_log()] starting thread (client mode): 0xa57591e0
2026-02-11T13:54:16.497 [DEBUG] [Thread-130104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:54:16.517 [DEBUG] [Thread-130104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:54:16.517 [INFO] [Thread-130104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] client lang: <none>
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] server lang: <none>
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] kex follows: False
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] Compression: none
2026-02-11T13:54:16.520 [DEBUG] [Thread-130104] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:54:16.537 [DEBUG] [Thread-130104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:54:16.537 [DEBUG] [Thread-130104] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:54:16.538 [DEBUG] [Thread-130104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:54:16.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:54:16.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:54:16.540 [DEBUG] [Thread-130104] [transport.py] [_log()] userauth is OK
2026-02-11T13:54:16.540 [DEBUG] [Thread-130104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:54:16.540 [DEBUG] [Thread-130104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:54:16.540 [DEBUG] [Thread-130104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:54:16.540 [DEBUG] [Thread-130104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:54:16.561 [INFO] [Thread-130104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:54:16.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:54:17.200 [DEBUG] [Thread-130104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:54:17.200 [DEBUG] [Thread-130104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:54:17.201 [DEBUG] [Thread-130104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:54:17.242 [DEBUG] [Thread-130104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:54:17.242 [DEBUG] [Thread-130104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:54:17.246 [DEBUG] [Thread-130104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:54:17.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:54:17.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:54:17.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:54:17.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:54:17.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:54:17.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:54:17.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:54:17.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.495629 -999.00  +23.90  17.79     42  +10.30 1 2 1 1 1   888    0 13.61 1.22 ----- 28.6 17.8 317.8 27.7 30.9 -15.7 30.0 -13.8 30.1 -13.9 30.9 -14.4
2026-02-11T13:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.495629
2026-02-11T13:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:54:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:54:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:54:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:54:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:54:17.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:53:36', tmtdew=16.95, humidity=34.0, cloud=0.0, wind=16.94, temperature=25.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:53:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:54:17.273 [DEBUG] [Thread-130104] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:54:17.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:54:17.368 [DEBUG] [Thread-130107] [transport.py] [_log()] starting thread (client mode): 0xa57730a0
2026-02-11T13:54:17.369 [DEBUG] [Thread-130107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:54:17.384 [DEBUG] [Thread-130107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:54:17.384 [INFO] [Thread-130107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:54:17.391 [DEBUG] [Thread-130107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:54:17.392 [DEBUG] [Thread-130107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:54:17.392 [DEBUG] [Thread-130107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:54:17.392 [DEBUG] [Thread-130107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:17.392 [DEBUG] [Thread-130107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:17.392 [DEBUG] [Thread-130107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:17.392 [DEBUG] [Thread-130107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:17.392 [DEBUG] [Thread-130107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] client lang: <none>
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] server lang: <none>
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] kex follows: False
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:54:17.393 [DEBUG] [Thread-130107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:54:17.394 [DEBUG] [Thread-130107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:54:17.395 [DEBUG] [Thread-130107] [transport.py] [_log()] Compression: none
2026-02-11T13:54:17.395 [DEBUG] [Thread-130107] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:54:17.457 [DEBUG] [Thread-130107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:54:17.458 [DEBUG] [Thread-130107] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:54:17.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:54:17.459 [DEBUG] [Thread-130107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:54:17.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:54:17.516 [DEBUG] [Thread-130107] [transport.py] [_log()] userauth is OK
2026-02-11T13:54:17.516 [DEBUG] [Thread-130107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:54:17.517 [DEBUG] [Thread-130107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:54:17.517 [DEBUG] [Thread-130107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:54:17.517 [DEBUG] [Thread-130107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:54:17.535 [INFO] [Thread-130107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:54:17.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:54:17.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:54:18.141 [DEBUG] [Thread-130109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:54:18.384 [DEBUG] [Thread-130107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:54:18.385 [DEBUG] [Thread-130107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:54:18.432 [DEBUG] [Thread-130107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:54:18.432 [DEBUG] [Thread-130107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:54:18.442 [DEBUG] [Thread-130107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:54:18.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:54:18.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:54:18.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
2026-02-11T13:54:18.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:54:18.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:54:18.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:54:18.479 [DEBUG] [Thread-130107] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:54:20.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:54:20.157 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:54:25.940 [DEBUG] [Thread-130110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:54:40.992 [DEBUG] [Thread-130111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:54:48.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:54:48.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:54:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:54:50.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 54, 12), 16.23, 35.64, 0.0, 28.23, 24.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:54:50.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:54:12
2026-02-11T13:54:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:54:51.546 [DEBUG] [Thread-130112] [transport.py] [_log()] starting thread (client mode): 0xa2d03460
2026-02-11T13:54:51.546 [DEBUG] [Thread-130112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:54:51.567 [DEBUG] [Thread-130112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:54:51.567 [INFO] [Thread-130112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:54:51.570 [DEBUG] [Thread-130112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:54:51.570 [DEBUG] [Thread-130112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:54:51.570 [DEBUG] [Thread-130112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:54:51.570 [DEBUG] [Thread-130112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] client lang: <none>
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] server lang: <none>
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] kex follows: False
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:54:51.571 [DEBUG] [Thread-130112] [transport.py] [_log()] Compression: none
2026-02-11T13:54:51.572 [DEBUG] [Thread-130112] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:54:51.590 [DEBUG] [Thread-130112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:54:51.591 [DEBUG] [Thread-130112] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:54:51.591 [DEBUG] [Thread-130112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:54:51.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:54:51.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:54:51.593 [DEBUG] [Thread-130112] [transport.py] [_log()] userauth is OK
2026-02-11T13:54:51.593 [DEBUG] [Thread-130112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:54:51.593 [DEBUG] [Thread-130112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:54:51.593 [DEBUG] [Thread-130112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:54:51.593 [DEBUG] [Thread-130112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:54:51.627 [INFO] [Thread-130112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:54:51.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:54:52.268 [DEBUG] [Thread-130112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:54:52.269 [DEBUG] [Thread-130112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:54:52.269 [DEBUG] [Thread-130112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:54:52.310 [DEBUG] [Thread-130112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:54:52.310 [DEBUG] [Thread-130112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:54:52.312 [DEBUG] [Thread-130112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:54:52.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:54:52.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:54:52.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:54:52.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:54:52.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:54:52.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:54:52.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:54:52.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:54:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:54:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.495976 -999.00  +24.30  26.52     42  +10.60 1 2 1 1 1   888    0 13.77 2.01 ----- 32.3 26.5 310.5 34.5 30.9 -17.3 30.1 -14.9 30.2 -13.6 31.0 -15.1
2026-02-11T13:54:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:54:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:54:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.495976
2026-02-11T13:54:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:54:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:54:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:54:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:54:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:54:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:54:12', tmtdew=16.23, humidity=35.64, cloud=0.0, wind=28.23, temperature=24.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:54:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:54:52.335 [DEBUG] [Thread-130112] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:54:52.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:54:52.419 [DEBUG] [Thread-130115] [transport.py] [_log()] starting thread (client mode): 0xa2d00970
2026-02-11T13:54:52.419 [DEBUG] [Thread-130115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:54:52.433 [DEBUG] [Thread-130115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:54:52.434 [INFO] [Thread-130115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:54:52.441 [DEBUG] [Thread-130115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] client lang: <none>
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] server lang: <none>
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] kex follows: False
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] Compression: none
2026-02-11T13:54:52.442 [DEBUG] [Thread-130115] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:54:52.499 [DEBUG] [Thread-130115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:54:52.500 [DEBUG] [Thread-130115] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:54:52.500 [DEBUG] [Thread-130115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:54:52.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:54:52.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:54:52.558 [DEBUG] [Thread-130115] [transport.py] [_log()] userauth is OK
2026-02-11T13:54:52.558 [DEBUG] [Thread-130115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:54:52.558 [DEBUG] [Thread-130115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:54:52.558 [DEBUG] [Thread-130115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:54:52.558 [DEBUG] [Thread-130115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:54:52.577 [INFO] [Thread-130115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:54:52.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:54:52.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:54:53.435 [DEBUG] [Thread-130115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:54:53.435 [DEBUG] [Thread-130115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:54:53.483 [DEBUG] [Thread-130115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:54:53.483 [DEBUG] [Thread-130115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:54:53.493 [DEBUG] [Thread-130115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:54:53.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:54:53.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:54:53.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:54:53.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:54:53.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:54:53.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:54:53.527 [DEBUG] [Thread-130115] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:54:56.024 [DEBUG] [Thread-130117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:11.077 [DEBUG] [Thread-130118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:18.189 [DEBUG] [Thread-130119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:20.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:20.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:55:23.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:55:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:55:25.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 54, 48), 16.17, 35.51, 0.0, 28.71, 24.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:55:25.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:54:48
2026-02-11T13:55:25.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:55:26.036 [DEBUG] [Thread-130120] [transport.py] [_log()] starting thread (client mode): 0xa2d01060
2026-02-11T13:55:26.036 [DEBUG] [Thread-130120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:55:26.057 [DEBUG] [Thread-130120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:55:26.058 [INFO] [Thread-130120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] client lang: <none>
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] server lang: <none>
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] kex follows: False
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:55:26.061 [DEBUG] [Thread-130120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:55:26.062 [DEBUG] [Thread-130120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:55:26.062 [DEBUG] [Thread-130120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:55:26.062 [DEBUG] [Thread-130120] [transport.py] [_log()] Compression: none
2026-02-11T13:55:26.062 [DEBUG] [Thread-130120] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:55:26.083 [DEBUG] [Thread-130120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:55:26.083 [DEBUG] [Thread-130120] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:55:26.084 [DEBUG] [Thread-130120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:55:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:55:26.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:55:26.086 [DEBUG] [Thread-130120] [transport.py] [_log()] userauth is OK
2026-02-11T13:55:26.086 [DEBUG] [Thread-130120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:55:26.086 [DEBUG] [Thread-130120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:55:26.087 [DEBUG] [Thread-130120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:55:26.087 [DEBUG] [Thread-130120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:55:26.108 [INFO] [Thread-130120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:55:26.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:55:26.115 [DEBUG] [Thread-130122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:26.863 [DEBUG] [Thread-130120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:55:26.863 [DEBUG] [Thread-130120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:55:26.864 [DEBUG] [Thread-130120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:55:26.904 [DEBUG] [Thread-130120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:55:26.904 [DEBUG] [Thread-130120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:55:26.908 [DEBUG] [Thread-130120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:55:26.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:55:26.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:55:26.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:55:26.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:55:26.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:55:26.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:55:26.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:55:26.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:55:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:55:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.496323 -999.00  +24.50  26.36     42  +10.70 1 2 1 1 1   888    0 13.60 3.52 ----- 30.1 26.4 299.0 34.3 30.9 -16.2 30.1 -14.3 30.0 -16.7 31.1 -15.2
2026-02-11T13:55:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:55:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:55:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.496323
2026-02-11T13:55:26.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:55:26.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:55:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:55:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:55:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:55:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:54:48', tmtdew=16.17, humidity=35.51, cloud=0.0, wind=28.71, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:54:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:55:26.944 [DEBUG] [Thread-130120] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:55:27.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:55:27.043 [DEBUG] [Thread-130124] [transport.py] [_log()] starting thread (client mode): 0xa2d00af0
2026-02-11T13:55:27.044 [DEBUG] [Thread-130124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:55:27.059 [DEBUG] [Thread-130124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:55:27.059 [INFO] [Thread-130124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] client lang: <none>
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] server lang: <none>
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] kex follows: False
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:55:27.067 [DEBUG] [Thread-130124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:55:27.068 [DEBUG] [Thread-130124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:55:27.068 [DEBUG] [Thread-130124] [transport.py] [_log()] Compression: none
2026-02-11T13:55:27.068 [DEBUG] [Thread-130124] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:55:27.124 [DEBUG] [Thread-130124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:55:27.125 [DEBUG] [Thread-130124] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:55:27.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:55:27.126 [DEBUG] [Thread-130124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:55:27.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:55:27.180 [DEBUG] [Thread-130124] [transport.py] [_log()] userauth is OK
2026-02-11T13:55:27.180 [DEBUG] [Thread-130124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:55:27.180 [DEBUG] [Thread-130124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:55:27.181 [DEBUG] [Thread-130124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:55:27.181 [DEBUG] [Thread-130124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:55:27.201 [INFO] [Thread-130124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:55:27.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:55:27.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:55:28.004 [DEBUG] [Thread-130124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:55:28.004 [DEBUG] [Thread-130124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:55:28.052 [DEBUG] [Thread-130124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:55:28.053 [DEBUG] [Thread-130124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:55:28.062 [DEBUG] [Thread-130124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:55:28.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:55:28.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:55: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
2026-02-11T13:55:28.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:55:28.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:55:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:55:28.097 [DEBUG] [Thread-130124] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:55:41.152 [DEBUG] [Thread-130126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:56.212 [DEBUG] [Thread-130127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:55:58.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:55:58.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:55:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:55:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 55, 24), 16.05, 35.76, 0.0, 26.15, 24.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:55:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:55:24
2026-02-11T13:56:00.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:56:00.502 [DEBUG] [Thread-130128] [transport.py] [_log()] starting thread (client mode): 0xa2d6d060
2026-02-11T13:56:00.502 [DEBUG] [Thread-130128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:56:00.521 [DEBUG] [Thread-130128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:56:00.522 [INFO] [Thread-130128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] client lang: <none>
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] server lang: <none>
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] kex follows: False
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] Compression: none
2026-02-11T13:56:00.525 [DEBUG] [Thread-130128] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:56:00.534 [DEBUG] [Thread-130128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:56:00.534 [DEBUG] [Thread-130128] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:56:00.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:56:00.534 [DEBUG] [Thread-130128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:56:00.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:56:00.535 [DEBUG] [Thread-130128] [transport.py] [_log()] userauth is OK
2026-02-11T13:56:00.535 [DEBUG] [Thread-130128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:56:00.535 [DEBUG] [Thread-130128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:56:00.535 [DEBUG] [Thread-130128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:56:00.536 [DEBUG] [Thread-130128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:56:00.548 [INFO] [Thread-130128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:56:00.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:56:01.180 [DEBUG] [Thread-130128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:56:01.180 [DEBUG] [Thread-130128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:56:01.181 [DEBUG] [Thread-130128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:56:01.221 [DEBUG] [Thread-130128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:56:01.222 [DEBUG] [Thread-130128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:56:01.225 [DEBUG] [Thread-130128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:56:01.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:56:01.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:56:01.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:56:01.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:56:01.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:56:01.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:56:01.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:56:01.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:56:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:56:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.496671 -999.00  +24.60  30.75     42  +10.80 1 2 2 1 1   888    0 13.95 4.69 ----- 36.0 30.8 313.2 41.9 30.8 -15.4 30.1 -14.4 29.9 -20.1 31.0 -14.9
2026-02-11T13:56:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:56:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:56:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.496671
2026-02-11T13:56:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:56:01.252 [DEBUG] [Thread-130128] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:56:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:56:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:56:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:56:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:56:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:55:24', tmtdew=16.05, humidity=35.76, cloud=0.0, wind=26.15, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:55:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:56:01.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:56:01.338 [DEBUG] [Thread-130131] [transport.py] [_log()] starting thread (client mode): 0xa2d6dab0
2026-02-11T13:56:01.338 [DEBUG] [Thread-130131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:56:01.355 [DEBUG] [Thread-130131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:56:01.356 [INFO] [Thread-130131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:56:01.363 [DEBUG] [Thread-130131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:56:01.363 [DEBUG] [Thread-130131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] client lang: <none>
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] server lang: <none>
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] kex follows: False
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] Compression: none
2026-02-11T13:56:01.364 [DEBUG] [Thread-130131] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:56:01.424 [DEBUG] [Thread-130131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:56:01.425 [DEBUG] [Thread-130131] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:56:01.426 [DEBUG] [Thread-130131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:56:01.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:56:01.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:56:01.480 [DEBUG] [Thread-130131] [transport.py] [_log()] userauth is OK
2026-02-11T13:56:01.480 [DEBUG] [Thread-130131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:56:01.481 [DEBUG] [Thread-130131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:56:01.481 [DEBUG] [Thread-130131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:56:01.481 [DEBUG] [Thread-130131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:56:01.500 [INFO] [Thread-130131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:56:01.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:56:01.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:56:02.344 [DEBUG] [Thread-130131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:56:02.344 [DEBUG] [Thread-130131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:56:02.395 [DEBUG] [Thread-130131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:56:02.395 [DEBUG] [Thread-130131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:56:02.404 [DEBUG] [Thread-130131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:56:02.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:56:02.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:56: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') -> 00000000
2026-02-11T13:56:02.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:56:02.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:56:02.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:56:02.443 [DEBUG] [Thread-130131] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:56:11.250 [DEBUG] [Thread-130133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:56:18.247 [DEBUG] [Thread-130134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:56:20.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:56:20.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:56:26.301 [DEBUG] [Thread-130135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:56:32.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:56:32.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:56:32.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:56:34.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 56, 1), 15.95, 36.03, 0.0, 24.23, 24.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:56:34.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:56:01
2026-02-11T13:56:34.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:56:34.736 [DEBUG] [Thread-130136] [transport.py] [_log()] starting thread (client mode): 0xa57723b0
2026-02-11T13:56:34.736 [DEBUG] [Thread-130136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:56:34.755 [DEBUG] [Thread-130136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:56:34.755 [INFO] [Thread-130136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:56:34.758 [DEBUG] [Thread-130136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:56:34.758 [DEBUG] [Thread-130136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:56:34.758 [DEBUG] [Thread-130136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] client lang: <none>
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] server lang: <none>
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] kex follows: False
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:56:34.759 [DEBUG] [Thread-130136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:56:34.760 [DEBUG] [Thread-130136] [transport.py] [_log()] Compression: none
2026-02-11T13:56:34.760 [DEBUG] [Thread-130136] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:56:34.778 [DEBUG] [Thread-130136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:56:34.779 [DEBUG] [Thread-130136] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:56:34.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:56:34.780 [DEBUG] [Thread-130136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:56:34.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:56:34.792 [DEBUG] [Thread-130136] [transport.py] [_log()] userauth is OK
2026-02-11T13:56:34.792 [DEBUG] [Thread-130136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:56:34.792 [DEBUG] [Thread-130136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:56:34.792 [DEBUG] [Thread-130136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:56:34.792 [DEBUG] [Thread-130136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:56:34.811 [INFO] [Thread-130136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:56:34.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:56:35.450 [DEBUG] [Thread-130136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:56:35.450 [DEBUG] [Thread-130136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:56:35.451 [DEBUG] [Thread-130136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:56:35.491 [DEBUG] [Thread-130136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:56:35.491 [DEBUG] [Thread-130136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:56:35.495 [DEBUG] [Thread-130136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:56:35.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:56:35.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:56:35.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:56:35.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:56:35.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:56:35.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:56:35.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:56:35.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:56:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:56:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.497018 -999.00  +24.50  27.60     41  +10.50 1 2 1 1 1   888    0 13.64 6.48 ----- 25.6 27.6 288.2 35.8 31.0 -15.3 30.2 -14.3 30.2 -14.3 31.1 -15.3
2026-02-11T13:56:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:56:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:56:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.497018
2026-02-11T13:56:35.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:56:35.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:56:35.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:56:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:56:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:56:35.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:56:01', tmtdew=15.95, humidity=36.03, cloud=0.0, wind=24.23, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:55:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:56:35.523 [DEBUG] [Thread-130136] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:56:35.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:56:35.629 [DEBUG] [Thread-130139] [transport.py] [_log()] starting thread (client mode): 0xa5771ff0
2026-02-11T13:56:35.629 [DEBUG] [Thread-130139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:56:35.648 [DEBUG] [Thread-130139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:56:35.648 [INFO] [Thread-130139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] client lang: <none>
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] server lang: <none>
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] kex follows: False
2026-02-11T13:56:35.657 [DEBUG] [Thread-130139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:56:35.658 [DEBUG] [Thread-130139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:56:35.658 [DEBUG] [Thread-130139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:56:35.658 [DEBUG] [Thread-130139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:56:35.658 [DEBUG] [Thread-130139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:56:35.658 [DEBUG] [Thread-130139] [transport.py] [_log()] Compression: none
2026-02-11T13:56:35.658 [DEBUG] [Thread-130139] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:56:35.716 [DEBUG] [Thread-130139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:56:35.717 [DEBUG] [Thread-130139] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:56:35.718 [DEBUG] [Thread-130139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:56:35.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:56:35.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:56:35.772 [DEBUG] [Thread-130139] [transport.py] [_log()] userauth is OK
2026-02-11T13:56:35.773 [DEBUG] [Thread-130139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:56:35.773 [DEBUG] [Thread-130139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:56:35.773 [DEBUG] [Thread-130139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:56:35.773 [DEBUG] [Thread-130139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:56:35.792 [INFO] [Thread-130139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:56:35.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:56:35.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:56:36.691 [DEBUG] [Thread-130139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:56:36.691 [DEBUG] [Thread-130139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:56:36.743 [DEBUG] [Thread-130139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:56:36.743 [DEBUG] [Thread-130139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:56:36.757 [DEBUG] [Thread-130139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:56:36.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:56:36.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:56:36.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:56:36.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:56:36.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:56:36.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:56:36.797 [DEBUG] [Thread-130139] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:56:41.337 [DEBUG] [Thread-130141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:56:56.387 [DEBUG] [Thread-130142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:57:06.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:57:06.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:57:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:57:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 56, 36), 16.61, 34.93, 0.0, 28.79, 25.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:57:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:56:36
2026-02-11T13:57:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:57:09.094 [DEBUG] [Thread-130143] [transport.py] [_log()] starting thread (client mode): 0xa57730a0
2026-02-11T13:57:09.094 [DEBUG] [Thread-130143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:57:09.114 [DEBUG] [Thread-130143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:57:09.115 [INFO] [Thread-130143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] client lang: <none>
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] server lang: <none>
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] kex follows: False
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] Compression: none
2026-02-11T13:57:09.118 [DEBUG] [Thread-130143] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:57:09.135 [DEBUG] [Thread-130143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:57:09.136 [DEBUG] [Thread-130143] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:57:09.137 [DEBUG] [Thread-130143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:57:09.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:57:09.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:57:09.138 [DEBUG] [Thread-130143] [transport.py] [_log()] userauth is OK
2026-02-11T13:57:09.139 [DEBUG] [Thread-130143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:57:09.139 [DEBUG] [Thread-130143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:57:09.139 [DEBUG] [Thread-130143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:57:09.139 [DEBUG] [Thread-130143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:57:09.155 [INFO] [Thread-130143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:57:09.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:57:09.775 [DEBUG] [Thread-130143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:57:09.775 [DEBUG] [Thread-130143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:57:09.776 [DEBUG] [Thread-130143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:57:09.816 [DEBUG] [Thread-130143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:57:09.817 [DEBUG] [Thread-130143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:57:09.819 [DEBUG] [Thread-130143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:57:09.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:57:09.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:57:09.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:57:09.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:57:09.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:57:09.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:57:09.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:57:09.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:57:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:57:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.497712 -999.00  +24.30  18.27     41  +10.50 1 2 1 1 1   888    0 14.02 12.33 ----- 23.9 18.3 268.2 28.1 30.9 -16.8 30.3 -15.1 29.9 -17.6 31.1 -16.7
2026-02-11T13:57:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:57:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:57:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.497712
2026-02-11T13:57:09.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:57:09.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:57:09.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:57:09.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:57:09.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:57:09.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:56:36', tmtdew=16.61, humidity=34.93, cloud=0.0, wind=28.79, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:56:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:57:09.844 [DEBUG] [Thread-130143] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:57:09.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:57:09.938 [DEBUG] [Thread-130146] [transport.py] [_log()] starting thread (client mode): 0xa2d6d6f0
2026-02-11T13:57:09.938 [DEBUG] [Thread-130146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:57:09.953 [DEBUG] [Thread-130146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:57:09.953 [INFO] [Thread-130146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:57:09.960 [DEBUG] [Thread-130146] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:57:09.960 [DEBUG] [Thread-130146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:57:09.960 [DEBUG] [Thread-130146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] client lang: <none>
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] server lang: <none>
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] kex follows: False
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] Compression: none
2026-02-11T13:57:09.961 [DEBUG] [Thread-130146] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:57:10.019 [DEBUG] [Thread-130146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:57:10.020 [DEBUG] [Thread-130146] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:57:10.020 [DEBUG] [Thread-130146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:57:10.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:57:10.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:57:10.077 [DEBUG] [Thread-130146] [transport.py] [_log()] userauth is OK
2026-02-11T13:57:10.077 [DEBUG] [Thread-130146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:57:10.077 [DEBUG] [Thread-130146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:57:10.078 [DEBUG] [Thread-130146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:57:10.078 [DEBUG] [Thread-130146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:57:10.099 [INFO] [Thread-130146] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:57:10.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:57:10.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:57:10.954 [DEBUG] [Thread-130146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:57:10.954 [DEBUG] [Thread-130146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:57:11.006 [DEBUG] [Thread-130146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:57:11.006 [DEBUG] [Thread-130146] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:57:11.020 [DEBUG] [Thread-130146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:57:11.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:57:11.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')
2026-02-11T13:57:11.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:57:11.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:57:11.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:57:11.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:57:11.069 [DEBUG] [Thread-130146] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:57:11.422 [DEBUG] [Thread-130148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:57:18.296 [DEBUG] [Thread-130149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:57:20.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:57:20.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:57:26.484 [DEBUG] [Thread-130150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:57:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:57:41.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:57:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:57:41.523 [DEBUG] [Thread-130151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:57:43.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 57, 11), 15.46, 37.16, 0.0, 20.4, 23.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:57:43.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:57:11
2026-02-11T13:57:43.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:57:43.655 [DEBUG] [Thread-130152] [transport.py] [_log()] starting thread (client mode): 0xa2d02260
2026-02-11T13:57:43.655 [DEBUG] [Thread-130152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:57:43.671 [DEBUG] [Thread-130152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:57:43.671 [INFO] [Thread-130152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:57:43.673 [DEBUG] [Thread-130152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] client lang: <none>
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] server lang: <none>
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] kex follows: False
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] Compression: none
2026-02-11T13:57:43.674 [DEBUG] [Thread-130152] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:57:43.689 [DEBUG] [Thread-130152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:57:43.690 [DEBUG] [Thread-130152] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:57:43.690 [DEBUG] [Thread-130152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:57:43.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:57:43.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:57:43.692 [DEBUG] [Thread-130152] [transport.py] [_log()] userauth is OK
2026-02-11T13:57:43.692 [DEBUG] [Thread-130152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:57:43.692 [DEBUG] [Thread-130152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:57:43.692 [DEBUG] [Thread-130152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:57:43.693 [DEBUG] [Thread-130152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:57:43.727 [INFO] [Thread-130152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:57:43.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:57:44.364 [DEBUG] [Thread-130152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:57:44.365 [DEBUG] [Thread-130152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:57:44.365 [DEBUG] [Thread-130152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:57:44.406 [DEBUG] [Thread-130152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:57:44.406 [DEBUG] [Thread-130152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:57:44.409 [DEBUG] [Thread-130152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:57:44.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:57:44.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:57:44.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:57:44.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:57:44.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:57:44.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:57:44.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:57:44.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:57:44.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:57:44.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.498060 -999.00  +24.10  22.74     42  +10.50 1 2 1 1 1   888    0 14.15 15.93 ----- 25.4 22.7 305.6 28.6 31.1 -15.8 30.4 -14.6 30.1 -14.7 31.2 -14.7
2026-02-11T13:57:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:57:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:57:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.498060
2026-02-11T13:57:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:57:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:57:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:57:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:57:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:57:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:57:11', tmtdew=15.46, humidity=37.16, cloud=0.0, wind=20.4, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:57:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:57:44.438 [DEBUG] [Thread-130152] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:57:44.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:57:44.536 [DEBUG] [Thread-130155] [transport.py] [_log()] starting thread (client mode): 0xa2d6e740
2026-02-11T13:57:44.536 [DEBUG] [Thread-130155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:57:44.551 [DEBUG] [Thread-130155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:57:44.551 [INFO] [Thread-130155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:57:44.559 [DEBUG] [Thread-130155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:57:44.559 [DEBUG] [Thread-130155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] client lang: <none>
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] server lang: <none>
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] kex follows: False
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:57:44.560 [DEBUG] [Thread-130155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:57:44.561 [DEBUG] [Thread-130155] [transport.py] [_log()] Compression: none
2026-02-11T13:57:44.561 [DEBUG] [Thread-130155] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:57:44.616 [DEBUG] [Thread-130155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:57:44.617 [DEBUG] [Thread-130155] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:57:44.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:57:44.618 [DEBUG] [Thread-130155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:57:44.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:57:44.675 [DEBUG] [Thread-130155] [transport.py] [_log()] userauth is OK
2026-02-11T13:57:44.675 [DEBUG] [Thread-130155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:57:44.675 [DEBUG] [Thread-130155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:57:44.675 [DEBUG] [Thread-130155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:57:44.676 [DEBUG] [Thread-130155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:57:44.694 [INFO] [Thread-130155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:57:44.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:57:44.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:57:45.538 [DEBUG] [Thread-130155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:57:45.538 [DEBUG] [Thread-130155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:57:45.586 [DEBUG] [Thread-130155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:57:45.586 [DEBUG] [Thread-130155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:57:45.595 [DEBUG] [Thread-130155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:57:45.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:57:45.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:57:45.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:57:45.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:57:45.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:57:45.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:57:45.631 [DEBUG] [Thread-130155] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:57:56.562 [DEBUG] [Thread-130157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:58:11.614 [DEBUG] [Thread-130158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:58:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:58:15.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:58:15.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
2026-02-11T13:58:17.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 57, 46), 16.0, 36.27, 0.0, 27.07, 24.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:58:17.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:57:46
2026-02-11T13:58:17.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:58:17.915 [DEBUG] [Thread-130159] [transport.py] [_log()] starting thread (client mode): 0xa2d6eef0
2026-02-11T13:58:17.915 [DEBUG] [Thread-130159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:58:17.937 [DEBUG] [Thread-130159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:58:17.937 [INFO] [Thread-130159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:58:17.940 [DEBUG] [Thread-130159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:58:17.940 [DEBUG] [Thread-130159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] client lang: <none>
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] server lang: <none>
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] kex follows: False
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] Compression: none
2026-02-11T13:58:17.941 [DEBUG] [Thread-130159] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:58:17.959 [DEBUG] [Thread-130159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:58:17.959 [DEBUG] [Thread-130159] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:58:17.960 [DEBUG] [Thread-130159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:58:17.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:58:17.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:58:17.964 [DEBUG] [Thread-130159] [transport.py] [_log()] userauth is OK
2026-02-11T13:58:17.965 [DEBUG] [Thread-130159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:58:17.965 [DEBUG] [Thread-130159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:58:17.965 [DEBUG] [Thread-130159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:58:17.965 [DEBUG] [Thread-130159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:58:17.979 [INFO] [Thread-130159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:58:17.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:58:18.348 [DEBUG] [Thread-130161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:58:18.750 [DEBUG] [Thread-130159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:58:18.750 [DEBUG] [Thread-130159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:58:18.751 [DEBUG] [Thread-130159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:58:18.791 [DEBUG] [Thread-130159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:58:18.791 [DEBUG] [Thread-130159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:58:18.795 [DEBUG] [Thread-130159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:58:18.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:58:18.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:58:18.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:58:18.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:58:18.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:58:18.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:58:18.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:58:18.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:58:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:58:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.498407 -999.00  +24.40  28.57     41  +10.60 1 2 1 1 1   888    0 14.00 18.76 ----- 31.1 28.6 293.2 39.6 31.2 -16.1 30.5 -14.8 30.3 -14.3 31.3 -15.6
2026-02-11T13:58:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:58:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:58:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.498407
2026-02-11T13:58:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:58:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:58:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:58:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:58:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:58:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:57:46', tmtdew=16.0, humidity=36.27, cloud=0.0, wind=27.07, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:57:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:58:18.822 [DEBUG] [Thread-130159] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:58:18.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:58:18.916 [DEBUG] [Thread-130163] [transport.py] [_log()] starting thread (client mode): 0xa2d101f0
2026-02-11T13:58:18.917 [DEBUG] [Thread-130163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:58:18.932 [DEBUG] [Thread-130163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:58:18.933 [INFO] [Thread-130163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:58:18.941 [DEBUG] [Thread-130163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] client lang: <none>
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] server lang: <none>
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] kex follows: False
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] Compression: none
2026-02-11T13:58:18.942 [DEBUG] [Thread-130163] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:58:19.000 [DEBUG] [Thread-130163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:58:19.001 [DEBUG] [Thread-130163] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:58:19.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:58:19.002 [DEBUG] [Thread-130163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:58:19.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:58:19.057 [DEBUG] [Thread-130163] [transport.py] [_log()] userauth is OK
2026-02-11T13:58:19.057 [DEBUG] [Thread-130163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:58:19.057 [DEBUG] [Thread-130163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:58:19.057 [DEBUG] [Thread-130163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:58:19.057 [DEBUG] [Thread-130163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:58:19.076 [INFO] [Thread-130163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:58:19.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:58:19.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:58:19.912 [DEBUG] [Thread-130163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:58:19.912 [DEBUG] [Thread-130163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:58:19.960 [DEBUG] [Thread-130163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:58:19.960 [DEBUG] [Thread-130163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:58:19.969 [DEBUG] [Thread-130163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:58:19.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:58: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')
2026-02-11T13:58:19.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:58:19.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:58:19.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:58:19.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:58:20.006 [DEBUG] [Thread-130163] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:58:20.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:58:20.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:58:26.650 [DEBUG] [Thread-130165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:58:41.695 [DEBUG] [Thread-130166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:58:50.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:58:50.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:58:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:58:52.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 58, 22), 16.26, 35.75, 0.0, 31.97, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:58:52.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:58:22
2026-02-11T13:58:52.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:58:52.543 [DEBUG] [Thread-130167] [transport.py] [_log()] starting thread (client mode): 0xa2d6df00
2026-02-11T13:58:52.544 [DEBUG] [Thread-130167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:58:52.565 [DEBUG] [Thread-130167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:58:52.565 [INFO] [Thread-130167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:58:52.568 [DEBUG] [Thread-130167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:58:52.568 [DEBUG] [Thread-130167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:58:52.568 [DEBUG] [Thread-130167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:58:52.568 [DEBUG] [Thread-130167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:52.568 [DEBUG] [Thread-130167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:52.568 [DEBUG] [Thread-130167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] client lang: <none>
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] server lang: <none>
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] kex follows: False
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] Compression: none
2026-02-11T13:58:52.569 [DEBUG] [Thread-130167] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:58:52.586 [DEBUG] [Thread-130167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:58:52.587 [DEBUG] [Thread-130167] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:58:52.587 [DEBUG] [Thread-130167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:58:52.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:58:52.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:58:52.589 [DEBUG] [Thread-130167] [transport.py] [_log()] userauth is OK
2026-02-11T13:58:52.590 [DEBUG] [Thread-130167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:58:52.590 [DEBUG] [Thread-130167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:58:52.590 [DEBUG] [Thread-130167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:58:52.590 [DEBUG] [Thread-130167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:58:52.628 [INFO] [Thread-130167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:58:52.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:58:53.272 [DEBUG] [Thread-130167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:58:53.272 [DEBUG] [Thread-130167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:58:53.272 [DEBUG] [Thread-130167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:58:53.314 [DEBUG] [Thread-130167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:58:53.314 [DEBUG] [Thread-130167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:58:53.317 [DEBUG] [Thread-130167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:58:53.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:58:53.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:58:53.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:58:53.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:58:53.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:58:53.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:58:53.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:58:53.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:58:53.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:58:53.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.498754 -999.00  +24.30  33.50     41  +10.30 1 2 2 1 1   888    0 14.22 24.69 ----- 32.4 33.5 277.4 40.4 30.9 -19.3 30.4 -17.2 30.0 -23.1 31.0 -18.0
2026-02-11T13:58:53.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:58:53.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:58:53.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.498754
2026-02-11T13:58:53.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:58:53.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:58:53.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:58:53.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:58:53.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:58:53.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:58:22', tmtdew=16.26, humidity=35.75, cloud=0.0, wind=31.97, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:58:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:58:53.343 [DEBUG] [Thread-130167] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:58:53.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:58:53.435 [DEBUG] [Thread-130170] [transport.py] [_log()] starting thread (client mode): 0xa81d7af0
2026-02-11T13:58:53.435 [DEBUG] [Thread-130170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:58:53.450 [DEBUG] [Thread-130170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:58:53.450 [INFO] [Thread-130170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:58:53.458 [DEBUG] [Thread-130170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:58:53.458 [DEBUG] [Thread-130170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:58:53.458 [DEBUG] [Thread-130170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:58:53.458 [DEBUG] [Thread-130170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] client lang: <none>
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] server lang: <none>
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] kex follows: False
2026-02-11T13:58:53.459 [DEBUG] [Thread-130170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:58:53.460 [DEBUG] [Thread-130170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:58:53.460 [DEBUG] [Thread-130170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:58:53.460 [DEBUG] [Thread-130170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:58:53.460 [DEBUG] [Thread-130170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:58:53.460 [DEBUG] [Thread-130170] [transport.py] [_log()] Compression: none
2026-02-11T13:58:53.460 [DEBUG] [Thread-130170] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:58:53.517 [DEBUG] [Thread-130170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:58:53.518 [DEBUG] [Thread-130170] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:58:53.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:58:53.520 [DEBUG] [Thread-130170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:58:53.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:58:53.572 [DEBUG] [Thread-130170] [transport.py] [_log()] userauth is OK
2026-02-11T13:58:53.573 [DEBUG] [Thread-130170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:58:53.573 [DEBUG] [Thread-130170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:58:53.573 [DEBUG] [Thread-130170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:58:53.573 [DEBUG] [Thread-130170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:58:53.598 [INFO] [Thread-130170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:58:53.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:58:53.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:58:54.436 [DEBUG] [Thread-130170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:58:54.437 [DEBUG] [Thread-130170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:58:54.484 [DEBUG] [Thread-130170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:58:54.485 [DEBUG] [Thread-130170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:58:54.494 [DEBUG] [Thread-130170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:58:54.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:58:54.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:58:54.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:58:54.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:58:54.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:58:54.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:58:54.534 [DEBUG] [Thread-130170] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:58:56.731 [DEBUG] [Thread-130172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:11.785 [DEBUG] [Thread-130173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:18.413 [DEBUG] [Thread-130174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:20.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:20.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:59:24.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:59:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T13:59:26.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 58, 57), 17.08, 33.58, 0.0, 37.92, 25.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T13:59:26.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:58:57
2026-02-11T13:59:26.822 [DEBUG] [Thread-130175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:26.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T13:59:27.048 [DEBUG] [Thread-130176] [transport.py] [_log()] starting thread (client mode): 0xa81d5a50
2026-02-11T13:59:27.048 [DEBUG] [Thread-130176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:59:27.069 [DEBUG] [Thread-130176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T13:59:27.069 [INFO] [Thread-130176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T13:59:27.072 [DEBUG] [Thread-130176] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:59:27.072 [DEBUG] [Thread-130176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T13:59:27.072 [DEBUG] [Thread-130176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:59:27.072 [DEBUG] [Thread-130176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] client lang: <none>
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] server lang: <none>
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] kex follows: False
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:59:27.073 [DEBUG] [Thread-130176] [transport.py] [_log()] Compression: none
2026-02-11T13:59:27.074 [DEBUG] [Thread-130176] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:59:27.091 [DEBUG] [Thread-130176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:59:27.092 [DEBUG] [Thread-130176] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:59:27.092 [DEBUG] [Thread-130176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T13:59:27.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T13:59:27.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:59:27.094 [DEBUG] [Thread-130176] [transport.py] [_log()] userauth is OK
2026-02-11T13:59:27.095 [DEBUG] [Thread-130176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:59:27.095 [DEBUG] [Thread-130176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:59:27.095 [DEBUG] [Thread-130176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T13:59:27.095 [DEBUG] [Thread-130176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:59:27.120 [INFO] [Thread-130176] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:59:27.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:59:27.741 [DEBUG] [Thread-130176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:59:27.741 [DEBUG] [Thread-130176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:59:27.741 [DEBUG] [Thread-130176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T13:59:27.782 [DEBUG] [Thread-130176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:59:27.783 [DEBUG] [Thread-130176] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:59:27.786 [DEBUG] [Thread-130176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:59:27.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:59:27.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T13:59:27.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T13:59:27.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T13:59:27.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:59:27.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T13:59:27.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:59:27.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:59:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T13:59:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.499101 -999.00  +24.10  29.09     42  +10.50 1 2 1 1 1   888    0 14.11 24.54 ----- 26.4 29.1 282.8 44.4 30.7 -17.7 30.2 -16.1 29.6 -19.6 30.9 -16.1
2026-02-11T13:59:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T13:59:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T13:59:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.499101
2026-02-11T13:59:27.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T13:59:27.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T13:59:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T13:59:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T13:59:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T13:59:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:58:57', tmtdew=17.08, humidity=33.58, cloud=0.0, wind=37.92, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:58:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T13:59:27.813 [DEBUG] [Thread-130176] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:59:27.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T13:59:27.908 [DEBUG] [Thread-130179] [transport.py] [_log()] starting thread (client mode): 0xa5758100
2026-02-11T13:59:27.908 [DEBUG] [Thread-130179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T13:59:27.923 [DEBUG] [Thread-130179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T13:59:27.923 [INFO] [Thread-130179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T13:59:27.930 [DEBUG] [Thread-130179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T13:59:27.930 [DEBUG] [Thread-130179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T13:59:27.930 [DEBUG] [Thread-130179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T13:59:27.930 [DEBUG] [Thread-130179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:59:27.930 [DEBUG] [Thread-130179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T13:59:27.930 [DEBUG] [Thread-130179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:59:27.930 [DEBUG] [Thread-130179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] client lang: <none>
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] server lang: <none>
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] kex follows: False
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] Compression: none
2026-02-11T13:59:27.931 [DEBUG] [Thread-130179] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T13:59:27.992 [DEBUG] [Thread-130179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T13:59:27.993 [DEBUG] [Thread-130179] [transport.py] [_log()] Switch to new keys ...
2026-02-11T13:59:27.993 [DEBUG] [Thread-130179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T13:59:27.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T13:59:27.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T13:59:28.054 [DEBUG] [Thread-130179] [transport.py] [_log()] userauth is OK
2026-02-11T13:59:28.055 [DEBUG] [Thread-130179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T13:59:28.055 [DEBUG] [Thread-130179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T13:59:28.055 [DEBUG] [Thread-130179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T13:59:28.055 [DEBUG] [Thread-130179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T13:59:28.076 [INFO] [Thread-130179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T13:59:28.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T13:59:28.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T13:59:28.971 [DEBUG] [Thread-130179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T13:59:28.971 [DEBUG] [Thread-130179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T13:59:29.019 [DEBUG] [Thread-130179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T13:59:29.019 [DEBUG] [Thread-130179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T13:59:29.028 [DEBUG] [Thread-130179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T13:59:29.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T13:59:29.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T13:59:29.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T13:59:29.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T13:59:29.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T13:59:29.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T13:59:29.065 [DEBUG] [Thread-130179] [transport.py] [_log()] EOF in transport thread
2026-02-11T13:59:41.859 [DEBUG] [Thread-130181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:56.917 [DEBUG] [Thread-130182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T13:59:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T13:59:59.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T13:59:59.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
2026-02-11T14:00:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 13, 59, 32), 17.2, 33.34, 0.0, 42.1, 25.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:00:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 13:59:32
2026-02-11T14:00:01.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:00:01.508 [DEBUG] [Thread-130183] [transport.py] [_log()] starting thread (client mode): 0xa57719f0
2026-02-11T14:00:01.508 [DEBUG] [Thread-130183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:00:01.530 [DEBUG] [Thread-130183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:00:01.530 [INFO] [Thread-130183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] client lang: <none>
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] server lang: <none>
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] kex follows: False
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] Compression: none
2026-02-11T14:00:01.532 [DEBUG] [Thread-130183] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:00:01.548 [DEBUG] [Thread-130183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:00:01.548 [DEBUG] [Thread-130183] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:00:01.548 [DEBUG] [Thread-130183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:00:01.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:00:01.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:00:01.549 [DEBUG] [Thread-130183] [transport.py] [_log()] userauth is OK
2026-02-11T14:00:01.549 [DEBUG] [Thread-130183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:00:01.549 [DEBUG] [Thread-130183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:00:01.549 [DEBUG] [Thread-130183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:00:01.549 [DEBUG] [Thread-130183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:00:01.559 [INFO] [Thread-130183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:00:01.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:00:02.177 [DEBUG] [Thread-130183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:00:02.177 [DEBUG] [Thread-130183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:00:02.177 [DEBUG] [Thread-130183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:00:02.218 [DEBUG] [Thread-130183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:00:02.219 [DEBUG] [Thread-130183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:00:02.222 [DEBUG] [Thread-130183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:00:02.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:00:02.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:00:02.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:00:02.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:00:02.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:00:02.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:00:02.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:00:02.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:00:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:00:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.499448 -999.00  +23.80  26.50     42  +10.30 1 2 1 1 1   888    0 14.33 28.83 ----- 30.1 26.5 284.6 43.9 30.5 -20.3 30.1 -17.3 29.4 -21.2 30.7 -16.5
2026-02-11T14:00:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:00:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:00:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.499448
2026-02-11T14:00:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:00:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:00:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:00:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:00:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:00:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T13:59:32', tmtdew=17.2, humidity=33.34, cloud=0.0, wind=42.1, temperature=25.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T11:59:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:00:02.248 [DEBUG] [Thread-130183] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:00:02.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:00:02.348 [DEBUG] [Thread-130186] [transport.py] [_log()] starting thread (client mode): 0xa2d13b50
2026-02-11T14:00:02.348 [DEBUG] [Thread-130186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:00:02.363 [DEBUG] [Thread-130186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:00:02.363 [INFO] [Thread-130186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] client lang: <none>
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] server lang: <none>
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] kex follows: False
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:00:02.371 [DEBUG] [Thread-130186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:00:02.372 [DEBUG] [Thread-130186] [transport.py] [_log()] Compression: none
2026-02-11T14:00:02.372 [DEBUG] [Thread-130186] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:00:02.426 [DEBUG] [Thread-130186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:00:02.426 [DEBUG] [Thread-130186] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:00:02.426 [DEBUG] [Thread-130186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:00:02.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:00:02.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:00:02.484 [DEBUG] [Thread-130186] [transport.py] [_log()] userauth is OK
2026-02-11T14:00:02.484 [DEBUG] [Thread-130186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:00:02.484 [DEBUG] [Thread-130186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:00:02.484 [DEBUG] [Thread-130186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:00:02.484 [DEBUG] [Thread-130186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:00:02.500 [INFO] [Thread-130186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:00:02.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:00:02.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:00:03.348 [DEBUG] [Thread-130186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:00:03.348 [DEBUG] [Thread-130186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:00:03.396 [DEBUG] [Thread-130186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:00:03.396 [DEBUG] [Thread-130186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:00:03.406 [DEBUG] [Thread-130186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:00:03.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:00:03.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:00:03.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:00:03.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:00:03.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:00:03.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:00:03.443 [DEBUG] [Thread-130186] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:00:11.953 [DEBUG] [Thread-130188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:00:18.469 [DEBUG] [Thread-130189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:00:21.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:00:21.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:00:27.006 [DEBUG] [Thread-130190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:00:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:00:33.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:00:33.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
2026-02-11T14:00:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 0, 7), 16.83, 34.04, 0.0, 35.47, 24.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:00:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:00:07
2026-02-11T14:00:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:00:35.876 [DEBUG] [Thread-130191] [transport.py] [_log()] starting thread (client mode): 0xa5770760
2026-02-11T14:00:35.876 [DEBUG] [Thread-130191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:00:35.896 [DEBUG] [Thread-130191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:00:35.896 [INFO] [Thread-130191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:00:35.897 [DEBUG] [Thread-130191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:00:35.897 [DEBUG] [Thread-130191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:00:35.897 [DEBUG] [Thread-130191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] client lang: <none>
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] server lang: <none>
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] kex follows: False
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] Compression: none
2026-02-11T14:00:35.898 [DEBUG] [Thread-130191] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:00:35.907 [DEBUG] [Thread-130191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:00:35.907 [DEBUG] [Thread-130191] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:00:35.908 [DEBUG] [Thread-130191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:00:35.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:00:35.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:00:35.909 [DEBUG] [Thread-130191] [transport.py] [_log()] userauth is OK
2026-02-11T14:00:35.909 [DEBUG] [Thread-130191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:00:35.909 [DEBUG] [Thread-130191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:00:35.909 [DEBUG] [Thread-130191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:00:35.909 [DEBUG] [Thread-130191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:00:35.920 [INFO] [Thread-130191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:00:35.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:00:36.486 [DEBUG] [Thread-130191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:00:36.486 [DEBUG] [Thread-130191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:00:36.487 [DEBUG] [Thread-130191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:00:36.527 [DEBUG] [Thread-130191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:00:36.527 [DEBUG] [Thread-130191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:00:36.530 [DEBUG] [Thread-130191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:00:36.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:00:36.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:00:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:00:36.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:00:36.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:00:36.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:00:36.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:00:36.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:00:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:00:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.500143 -999.00  +23.90  31.13     42  +10.50 1 2 2 1 1   888    0 14.50 29.38 ----- 25.8 31.1 285.0 39.6 30.8 -19.2 30.1 -17.9 29.7 -18.0 30.8 -18.1
2026-02-11T14:00:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:00:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:00:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.500143
2026-02-11T14:00:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:00:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:00:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:00:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:00:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:00:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:00:07', tmtdew=16.83, humidity=34.04, cloud=0.0, wind=35.47, temperature=24.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:00:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:00:36.561 [DEBUG] [Thread-130191] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:00:36.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:00:36.657 [DEBUG] [Thread-130194] [transport.py] [_log()] starting thread (client mode): 0xa5770fd0
2026-02-11T14:00:36.657 [DEBUG] [Thread-130194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:00:36.672 [DEBUG] [Thread-130194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:00:36.672 [INFO] [Thread-130194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:00:36.680 [DEBUG] [Thread-130194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:00:36.680 [DEBUG] [Thread-130194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:00:36.680 [DEBUG] [Thread-130194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:00:36.680 [DEBUG] [Thread-130194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:36.680 [DEBUG] [Thread-130194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] client lang: <none>
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] server lang: <none>
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] kex follows: False
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:00:36.681 [DEBUG] [Thread-130194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:00:36.682 [DEBUG] [Thread-130194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:00:36.682 [DEBUG] [Thread-130194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:00:36.682 [DEBUG] [Thread-130194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:00:36.682 [DEBUG] [Thread-130194] [transport.py] [_log()] Compression: none
2026-02-11T14:00:36.682 [DEBUG] [Thread-130194] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:00:36.740 [DEBUG] [Thread-130194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:00:36.741 [DEBUG] [Thread-130194] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:00:36.741 [DEBUG] [Thread-130194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:00:36.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:00:36.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:00:36.801 [DEBUG] [Thread-130194] [transport.py] [_log()] userauth is OK
2026-02-11T14:00:36.801 [DEBUG] [Thread-130194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:00:36.801 [DEBUG] [Thread-130194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:00:36.801 [DEBUG] [Thread-130194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:00:36.801 [DEBUG] [Thread-130194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:00:36.820 [INFO] [Thread-130194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:00:36.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:00:36.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:00:37.672 [DEBUG] [Thread-130194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:00:37.672 [DEBUG] [Thread-130194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:00:37.720 [DEBUG] [Thread-130194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:00:37.721 [DEBUG] [Thread-130194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:00:37.730 [DEBUG] [Thread-130194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:00:37.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:00:37.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:00:37.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:00:37.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:00:37.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:00:37.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:00:37.767 [DEBUG] [Thread-130194] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:00:42.042 [DEBUG] [Thread-130196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:00:57.093 [DEBUG] [Thread-130197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:01:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:01:07.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:01:07.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:01:09.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 0, 43), 16.47, 35.35, 0.0, 29.89, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:01:09.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:00:43
2026-02-11T14:01:10.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:01:10.452 [DEBUG] [Thread-130198] [transport.py] [_log()] starting thread (client mode): 0xa2db5600
2026-02-11T14:01:10.452 [DEBUG] [Thread-130198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:01:10.464 [DEBUG] [Thread-130198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:01:10.464 [INFO] [Thread-130198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] client lang: <none>
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] server lang: <none>
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] kex follows: False
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:01:10.467 [DEBUG] [Thread-130198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:01:10.468 [DEBUG] [Thread-130198] [transport.py] [_log()] Compression: none
2026-02-11T14:01:10.468 [DEBUG] [Thread-130198] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:01:10.484 [DEBUG] [Thread-130198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:01:10.484 [DEBUG] [Thread-130198] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:01:10.485 [DEBUG] [Thread-130198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:01:10.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:01:10.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:01:10.487 [DEBUG] [Thread-130198] [transport.py] [_log()] userauth is OK
2026-02-11T14:01:10.488 [DEBUG] [Thread-130198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:01:10.488 [DEBUG] [Thread-130198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:01:10.488 [DEBUG] [Thread-130198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:01:10.488 [DEBUG] [Thread-130198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:01:10.513 [INFO] [Thread-130198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:01:10.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:01:11.146 [DEBUG] [Thread-130198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:01:11.146 [DEBUG] [Thread-130198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:01:11.146 [DEBUG] [Thread-130198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:01:11.187 [DEBUG] [Thread-130198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:01:11.187 [DEBUG] [Thread-130198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:01:11.190 [DEBUG] [Thread-130198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:01:11.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:01:11.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:01:11.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:01:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:01:11.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:01:11.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:01:11.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:01:11.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:01:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:01:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.500490 -999.00  +23.90  30.34     42  +10.50 1 2 2 1 1   888    0 14.44 27.98 ----- 26.7 30.3 287.3 41.6 30.7 -19.2 30.1 -19.1 29.7 -19.1 30.8 -18.6
2026-02-11T14:01:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:01:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:01:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.500490
2026-02-11T14:01:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:01:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:01:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:01:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:01:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:01:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:00:43', tmtdew=16.47, humidity=35.35, cloud=0.0, wind=29.89, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:00:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:01:11.211 [DEBUG] [Thread-130198] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:01:11.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:01:11.304 [DEBUG] [Thread-130201] [transport.py] [_log()] starting thread (client mode): 0xa2db6f50
2026-02-11T14:01:11.304 [DEBUG] [Thread-130201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:01:11.320 [DEBUG] [Thread-130201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:01:11.320 [INFO] [Thread-130201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] client lang: <none>
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] server lang: <none>
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] kex follows: False
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] Compression: none
2026-02-11T14:01:11.328 [DEBUG] [Thread-130201] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:01:11.387 [DEBUG] [Thread-130201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:01:11.388 [DEBUG] [Thread-130201] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:01:11.388 [DEBUG] [Thread-130201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:01:11.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:01:11.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:01:11.444 [DEBUG] [Thread-130201] [transport.py] [_log()] userauth is OK
2026-02-11T14:01:11.444 [DEBUG] [Thread-130201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:01:11.444 [DEBUG] [Thread-130201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:01:11.444 [DEBUG] [Thread-130201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:01:11.444 [DEBUG] [Thread-130201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:01:11.467 [INFO] [Thread-130201] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:01:11.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:01:11.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:01:12.128 [DEBUG] [Thread-130203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:01:12.303 [DEBUG] [Thread-130201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:01:12.303 [DEBUG] [Thread-130201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:01:12.352 [DEBUG] [Thread-130201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:01:12.352 [DEBUG] [Thread-130201] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:01:12.361 [DEBUG] [Thread-130201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:01:12.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:01:12.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:01:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:01:12.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:01:12.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:01:12.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:01:12.398 [DEBUG] [Thread-130201] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:01:18.505 [DEBUG] [Thread-130204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:01:21.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:01:21.146 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:01:27.175 [DEBUG] [Thread-130205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:01:42.214 [DEBUG] [Thread-130206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:01:42.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:01:42.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:01:42.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:01:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 1, 18), 16.29, 35.73, 0.0, 31.74, 24.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:01:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:01:18
2026-02-11T14:01:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:01:44.974 [DEBUG] [Thread-130207] [transport.py] [_log()] starting thread (client mode): 0xa2d122f0
2026-02-11T14:01:44.974 [DEBUG] [Thread-130207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:01:44.995 [DEBUG] [Thread-130207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:01:44.995 [INFO] [Thread-130207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:01:44.998 [DEBUG] [Thread-130207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] client lang: <none>
2026-02-11T14:01:44.999 [DEBUG] [Thread-130207] [transport.py] [_log()] server lang: <none>
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] kex follows: False
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] Compression: none
2026-02-11T14:01:45.000 [DEBUG] [Thread-130207] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:01:45.017 [DEBUG] [Thread-130207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:01:45.017 [DEBUG] [Thread-130207] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:01:45.018 [DEBUG] [Thread-130207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:01:45.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:01:45.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:01:45.020 [DEBUG] [Thread-130207] [transport.py] [_log()] userauth is OK
2026-02-11T14:01:45.020 [DEBUG] [Thread-130207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:01:45.020 [DEBUG] [Thread-130207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:01:45.020 [DEBUG] [Thread-130207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:01:45.020 [DEBUG] [Thread-130207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:01:45.036 [INFO] [Thread-130207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:01:45.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:01:45.653 [DEBUG] [Thread-130207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:01:45.654 [DEBUG] [Thread-130207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:01:45.654 [DEBUG] [Thread-130207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:01:45.696 [DEBUG] [Thread-130207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:01:45.696 [DEBUG] [Thread-130207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:01:45.699 [DEBUG] [Thread-130207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:01:45.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:01:45.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:01:45.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:01:45.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:01:45.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:01:45.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:01:45.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:01:45.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:01:45.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:01:45.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.500837 -999.00  +23.50  29.22     43  +10.20 1 2 1 1 1   888    0 14.26 23.86 ----- 24.7 29.2 302.4 43.6 30.7 -20.9 30.0 -19.4 29.8 -19.9 30.7 -18.4
2026-02-11T14:01:45.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:01:45.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:01:45.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.500837
2026-02-11T14:01:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:01:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:01:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:01:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:01:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:01:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:01:18', tmtdew=16.29, humidity=35.73, cloud=0.0, wind=31.74, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:01:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:01:45.728 [DEBUG] [Thread-130207] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:01:45.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:01:45.825 [DEBUG] [Thread-130210] [transport.py] [_log()] starting thread (client mode): 0xa5773700
2026-02-11T14:01:45.825 [DEBUG] [Thread-130210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:01:45.841 [DEBUG] [Thread-130210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:01:45.841 [INFO] [Thread-130210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:01:45.848 [DEBUG] [Thread-130210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] client lang: <none>
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] server lang: <none>
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] kex follows: False
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:01:45.849 [DEBUG] [Thread-130210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:01:45.850 [DEBUG] [Thread-130210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:01:45.850 [DEBUG] [Thread-130210] [transport.py] [_log()] Compression: none
2026-02-11T14:01:45.850 [DEBUG] [Thread-130210] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:01:45.908 [DEBUG] [Thread-130210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:01:45.909 [DEBUG] [Thread-130210] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:01:45.909 [DEBUG] [Thread-130210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:01:45.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:01:45.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:01:45.964 [DEBUG] [Thread-130210] [transport.py] [_log()] userauth is OK
2026-02-11T14:01:45.965 [DEBUG] [Thread-130210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:01:45.965 [DEBUG] [Thread-130210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:01:45.965 [DEBUG] [Thread-130210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:01:45.965 [DEBUG] [Thread-130210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:01:45.983 [INFO] [Thread-130210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:01:45.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:01:45.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:01:46.853 [DEBUG] [Thread-130210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:01:46.853 [DEBUG] [Thread-130210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:01:46.901 [DEBUG] [Thread-130210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:01:46.902 [DEBUG] [Thread-130210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:01:46.911 [DEBUG] [Thread-130210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:01:46.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:01:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:01:46.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
2026-02-11T14:01:46.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:01:46.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:01:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:01:46.946 [DEBUG] [Thread-130210] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:01:57.253 [DEBUG] [Thread-130212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:02:12.307 [DEBUG] [Thread-130213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:02:16.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:02:16.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:02:16.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:02:18.564 [DEBUG] [Thread-130214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:02:18.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 1, 54), 16.48, 34.96, 0.0, 41.29, 24.75, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:02:18.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:01:54
2026-02-11T14:02:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:02:19.390 [DEBUG] [Thread-130215] [transport.py] [_log()] starting thread (client mode): 0xa2d122f0
2026-02-11T14:02:19.390 [DEBUG] [Thread-130215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:02:19.410 [DEBUG] [Thread-130215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:02:19.410 [INFO] [Thread-130215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:02:19.412 [DEBUG] [Thread-130215] [transport.py] [_log()] client lang: <none>
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] server lang: <none>
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] kex follows: False
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] Compression: none
2026-02-11T14:02:19.413 [DEBUG] [Thread-130215] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:02:19.425 [DEBUG] [Thread-130215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:02:19.426 [DEBUG] [Thread-130215] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:02:19.427 [DEBUG] [Thread-130215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:02:19.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:02:19.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:02:19.429 [DEBUG] [Thread-130215] [transport.py] [_log()] userauth is OK
2026-02-11T14:02:19.429 [DEBUG] [Thread-130215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:02:19.429 [DEBUG] [Thread-130215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:02:19.430 [DEBUG] [Thread-130215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:02:19.430 [DEBUG] [Thread-130215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:02:19.455 [INFO] [Thread-130215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:02:19.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:02:20.096 [DEBUG] [Thread-130215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:02:20.096 [DEBUG] [Thread-130215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:02:20.096 [DEBUG] [Thread-130215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:02:20.138 [DEBUG] [Thread-130215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:02:20.138 [DEBUG] [Thread-130215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:02:20.141 [DEBUG] [Thread-130215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:02:20.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:02:20.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:02:20.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:02:20.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:02:20.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:02:20.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:02:20.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:02:20.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:02:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:02:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.501532 -999.00  +24.00  27.15     42  +10.50 1 2 1 1 1   888    0 14.13 18.89 ----- 27.6 27.1 298.4 40.2 30.7 -20.7 30.0 -19.9 29.8 -19.0 30.8 -19.1
2026-02-11T14:02:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:02:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:02:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.501532
2026-02-11T14:02:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:02:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:02:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:02:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:02:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:02:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:01:54', tmtdew=16.48, humidity=34.96, cloud=0.0, wind=41.29, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:02:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:02:20.171 [DEBUG] [Thread-130215] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:02:20.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:02:20.278 [DEBUG] [Thread-130218] [transport.py] [_log()] starting thread (client mode): 0xa81d5c00
2026-02-11T14:02:20.279 [DEBUG] [Thread-130218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:02:20.293 [DEBUG] [Thread-130218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:02:20.294 [INFO] [Thread-130218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:02:20.301 [DEBUG] [Thread-130218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:02:20.301 [DEBUG] [Thread-130218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:02:20.301 [DEBUG] [Thread-130218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:02:20.301 [DEBUG] [Thread-130218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] client lang: <none>
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] server lang: <none>
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] kex follows: False
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] Compression: none
2026-02-11T14:02:20.302 [DEBUG] [Thread-130218] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:02:20.358 [DEBUG] [Thread-130218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:02:20.359 [DEBUG] [Thread-130218] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:02:20.359 [DEBUG] [Thread-130218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:02:20.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:02:20.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:02:20.415 [DEBUG] [Thread-130218] [transport.py] [_log()] userauth is OK
2026-02-11T14:02:20.415 [DEBUG] [Thread-130218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:02:20.415 [DEBUG] [Thread-130218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:02:20.415 [DEBUG] [Thread-130218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:02:20.415 [DEBUG] [Thread-130218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:02:20.429 [INFO] [Thread-130218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:02:20.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:02:20.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:02:21.257 [DEBUG] [Thread-130218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:02:21.258 [DEBUG] [Thread-130218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:02:21.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:02:21.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:02:21.306 [DEBUG] [Thread-130218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:02:21.307 [DEBUG] [Thread-130218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:02:21.316 [DEBUG] [Thread-130218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:02:21.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:02:21.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')
2026-02-11T14:02:21.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:02:21.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:02:21.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:02:21.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:02:21.353 [DEBUG] [Thread-130218] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:02:27.343 [DEBUG] [Thread-130220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:02:42.403 [DEBUG] [Thread-130221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:02:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:02:51.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:02:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:02:53.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 2, 29), 16.44, 35.04, 0.0, 39.03, 24.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:02:53.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:02:29
2026-02-11T14:02:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:02:54.059 [DEBUG] [Thread-130222] [transport.py] [_log()] starting thread (client mode): 0xa5773f10
2026-02-11T14:02:54.059 [DEBUG] [Thread-130222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:02:54.080 [DEBUG] [Thread-130222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:02:54.080 [INFO] [Thread-130222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] client lang: <none>
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] server lang: <none>
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] kex follows: False
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] Compression: none
2026-02-11T14:02:54.083 [DEBUG] [Thread-130222] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:02:54.100 [DEBUG] [Thread-130222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:02:54.100 [DEBUG] [Thread-130222] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:02:54.101 [DEBUG] [Thread-130222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:02:54.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:02:54.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:02:54.145 [DEBUG] [Thread-130222] [transport.py] [_log()] userauth is OK
2026-02-11T14:02:54.145 [DEBUG] [Thread-130222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:02:54.145 [DEBUG] [Thread-130222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:02:54.146 [DEBUG] [Thread-130222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:02:54.146 [DEBUG] [Thread-130222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:02:54.168 [INFO] [Thread-130222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:02:54.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:02:54.807 [DEBUG] [Thread-130222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:02:54.808 [DEBUG] [Thread-130222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:02:54.808 [DEBUG] [Thread-130222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:02:54.848 [DEBUG] [Thread-130222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:02:54.849 [DEBUG] [Thread-130222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:02:54.851 [DEBUG] [Thread-130222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:02:54.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:02:54.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:02:54.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:02:54.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:02:54.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:02:54.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:02:54.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:02:54.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:02:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:02:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.501879 -999.00  +24.00  33.70     42  +10.60 1 2 2 1 1   888    0 14.05 14.32 ----- 33.9 33.7 300.6 43.1 30.6 -22.2 30.0 -21.1 29.7 -20.9 30.6 -19.2
2026-02-11T14:02:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:02:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:02:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.501879
2026-02-11T14:02:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:02:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:02:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:02:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:02:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:02:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:02:29', tmtdew=16.44, humidity=35.04, cloud=0.0, wind=39.03, temperature=24.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:02:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:02:54.879 [DEBUG] [Thread-130222] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:02:54.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:02:54.974 [DEBUG] [Thread-130225] [transport.py] [_log()] starting thread (client mode): 0xa575a830
2026-02-11T14:02:54.974 [DEBUG] [Thread-130225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:02:54.989 [DEBUG] [Thread-130225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:02:54.989 [INFO] [Thread-130225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] client lang: <none>
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] server lang: <none>
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] kex follows: False
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:02:54.997 [DEBUG] [Thread-130225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:02:54.998 [DEBUG] [Thread-130225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:02:54.998 [DEBUG] [Thread-130225] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:02:54.998 [DEBUG] [Thread-130225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:02:54.998 [DEBUG] [Thread-130225] [transport.py] [_log()] Compression: none
2026-02-11T14:02:54.998 [DEBUG] [Thread-130225] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:02:55.056 [DEBUG] [Thread-130225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:02:55.057 [DEBUG] [Thread-130225] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:02:55.058 [DEBUG] [Thread-130225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:02:55.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:02:55.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:02:55.112 [DEBUG] [Thread-130225] [transport.py] [_log()] userauth is OK
2026-02-11T14:02:55.113 [DEBUG] [Thread-130225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:02:55.113 [DEBUG] [Thread-130225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:02:55.113 [DEBUG] [Thread-130225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:02:55.113 [DEBUG] [Thread-130225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:02:55.132 [INFO] [Thread-130225] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:02:55.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:02:55.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:02:56.009 [DEBUG] [Thread-130225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:02:56.010 [DEBUG] [Thread-130225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:02:56.058 [DEBUG] [Thread-130225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:02:56.058 [DEBUG] [Thread-130225] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:02:56.067 [DEBUG] [Thread-130225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:02:56.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:02:56.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:02:56.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:02:56.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:02:56.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:02:56.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:02:56.105 [DEBUG] [Thread-130225] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:02:57.437 [DEBUG] [Thread-130227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:03:12.492 [DEBUG] [Thread-130228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:03:18.606 [DEBUG] [Thread-130229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:03:21.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:03:21.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:03:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:03:26.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:03:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:03:27.526 [DEBUG] [Thread-130230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:03:28.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 3, 5), 16.32, 35.27, 0.0, 37.76, 24.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:03:28.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:03:05
2026-02-11T14:03:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:03:28.739 [DEBUG] [Thread-130231] [transport.py] [_log()] starting thread (client mode): 0xa5741000
2026-02-11T14:03:28.739 [DEBUG] [Thread-130231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:03:28.759 [DEBUG] [Thread-130231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:03:28.759 [INFO] [Thread-130231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:03:28.762 [DEBUG] [Thread-130231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:03:28.762 [DEBUG] [Thread-130231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:03:28.762 [DEBUG] [Thread-130231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:03:28.762 [DEBUG] [Thread-130231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:03:28.762 [DEBUG] [Thread-130231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:03:28.762 [DEBUG] [Thread-130231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] client lang: <none>
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] server lang: <none>
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] kex follows: False
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:03:28.763 [DEBUG] [Thread-130231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:03:28.764 [DEBUG] [Thread-130231] [transport.py] [_log()] Compression: none
2026-02-11T14:03:28.764 [DEBUG] [Thread-130231] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:03:28.780 [DEBUG] [Thread-130231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:03:28.780 [DEBUG] [Thread-130231] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:03:28.781 [DEBUG] [Thread-130231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:03:28.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:03:28.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:03:28.783 [DEBUG] [Thread-130231] [transport.py] [_log()] userauth is OK
2026-02-11T14:03:28.783 [DEBUG] [Thread-130231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:03:28.783 [DEBUG] [Thread-130231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:03:28.783 [DEBUG] [Thread-130231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:03:28.783 [DEBUG] [Thread-130231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:03:28.816 [INFO] [Thread-130231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:03:28.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:03:29.453 [DEBUG] [Thread-130231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:03:29.453 [DEBUG] [Thread-130231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:03:29.453 [DEBUG] [Thread-130231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:03:29.493 [DEBUG] [Thread-130231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:03:29.493 [DEBUG] [Thread-130231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:03:29.497 [DEBUG] [Thread-130231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:03:29.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:03:29.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:03:29.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:03:29.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:03:29.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:03:29.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:03:29.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:03:29.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:03:29.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:03:29.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.502226 -999.00  +24.40  31.12     42  +10.70 1 2 2 1 1   888    0 13.79 12.48 ----- 26.5 31.1 316.8 43.6 30.6 -19.9 30.0 -19.1 29.8 -18.5 30.8 -17.5
2026-02-11T14:03:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:03:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:03:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.502226
2026-02-11T14:03:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:03:29.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:03:29.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:03:29.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:03:29.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:03:29.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:03:05', tmtdew=16.32, humidity=35.27, cloud=0.0, wind=37.76, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:03:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:03:29.524 [DEBUG] [Thread-130231] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:03:29.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:03:29.619 [DEBUG] [Thread-130234] [transport.py] [_log()] starting thread (client mode): 0xa5740a30
2026-02-11T14:03:29.619 [DEBUG] [Thread-130234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:03:29.633 [DEBUG] [Thread-130234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:03:29.633 [INFO] [Thread-130234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:03:29.641 [DEBUG] [Thread-130234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:03:29.641 [DEBUG] [Thread-130234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:03:29.641 [DEBUG] [Thread-130234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:03:29.641 [DEBUG] [Thread-130234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:03:29.641 [DEBUG] [Thread-130234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] client lang: <none>
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] server lang: <none>
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] kex follows: False
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] Compression: none
2026-02-11T14:03:29.642 [DEBUG] [Thread-130234] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:03:29.704 [DEBUG] [Thread-130234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:03:29.705 [DEBUG] [Thread-130234] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:03:29.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:03:29.706 [DEBUG] [Thread-130234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:03:29.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:03:29.765 [DEBUG] [Thread-130234] [transport.py] [_log()] userauth is OK
2026-02-11T14:03:29.766 [DEBUG] [Thread-130234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:03:29.766 [DEBUG] [Thread-130234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:03:29.766 [DEBUG] [Thread-130234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:03:29.766 [DEBUG] [Thread-130234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:03:29.795 [INFO] [Thread-130234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:03:29.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:03:29.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:03:30.609 [DEBUG] [Thread-130234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:03:30.609 [DEBUG] [Thread-130234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:03:30.657 [DEBUG] [Thread-130234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:03:30.657 [DEBUG] [Thread-130234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:03:30.665 [DEBUG] [Thread-130234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:03:30.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:03:30.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:03:30.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:03:30.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:03:30.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:03:30.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:03:30.700 [DEBUG] [Thread-130234] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:03:42.562 [DEBUG] [Thread-130236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:03:57.615 [DEBUG] [Thread-130237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:04:00.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:04:00.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:04:00.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:04:02.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 3, 41), 17.78, 32.41, 0.0, 32.14, 26.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:04:02.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:03:41
2026-02-11T14:04:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:04:03.068 [DEBUG] [Thread-130238] [transport.py] [_log()] starting thread (client mode): 0xa5771d50
2026-02-11T14:04:03.069 [DEBUG] [Thread-130238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:04:03.084 [DEBUG] [Thread-130238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:04:03.084 [INFO] [Thread-130238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] client lang: <none>
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] server lang: <none>
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] kex follows: False
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] Compression: none
2026-02-11T14:04:03.087 [DEBUG] [Thread-130238] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:04:03.104 [DEBUG] [Thread-130238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:04:03.105 [DEBUG] [Thread-130238] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:04:03.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:04:03.105 [DEBUG] [Thread-130238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:04:03.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:04:03.107 [DEBUG] [Thread-130238] [transport.py] [_log()] userauth is OK
2026-02-11T14:04:03.107 [DEBUG] [Thread-130238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:04:03.108 [DEBUG] [Thread-130238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:04:03.108 [DEBUG] [Thread-130238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:04:03.108 [DEBUG] [Thread-130238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:04:03.125 [INFO] [Thread-130238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:04:03.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:04:03.762 [DEBUG] [Thread-130238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:04:03.762 [DEBUG] [Thread-130238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:04:03.762 [DEBUG] [Thread-130238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:04:03.803 [DEBUG] [Thread-130238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:04:03.803 [DEBUG] [Thread-130238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:04:03.807 [DEBUG] [Thread-130238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:04:03.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:04:03.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:04:03.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:04:03.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:04:03.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:04:03.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:04:03.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:04:03.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:04:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:04:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.502573 -999.00  +24.70  25.77     41  +10.70 1 2 1 1 1   888    0 13.85 10.96 ----- 29.5 25.8 303.3 30.3 30.7 -21.0 30.1 -19.3 29.9 -19.5 30.9 -18.3
2026-02-11T14:04:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:04:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:04:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.502573
2026-02-11T14:04:03.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:04:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:04:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:04:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:04:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:04:03.831 [DEBUG] [Thread-130238] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:04:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:03:41', tmtdew=17.78, humidity=32.41, cloud=0.0, wind=32.14, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:03:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:04:03.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:04:03.925 [DEBUG] [Thread-130241] [transport.py] [_log()] starting thread (client mode): 0xa5742da0
2026-02-11T14:04:03.926 [DEBUG] [Thread-130241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:04:03.939 [DEBUG] [Thread-130241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:04:03.940 [INFO] [Thread-130241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:04:03.947 [DEBUG] [Thread-130241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:04:03.947 [DEBUG] [Thread-130241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:04:03.947 [DEBUG] [Thread-130241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:04:03.947 [DEBUG] [Thread-130241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] client lang: <none>
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] server lang: <none>
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] kex follows: False
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] Compression: none
2026-02-11T14:04:03.948 [DEBUG] [Thread-130241] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:04:04.004 [DEBUG] [Thread-130241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:04:04.005 [DEBUG] [Thread-130241] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:04:04.005 [DEBUG] [Thread-130241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:04:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:04:04.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:04:04.060 [DEBUG] [Thread-130241] [transport.py] [_log()] userauth is OK
2026-02-11T14:04:04.061 [DEBUG] [Thread-130241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:04:04.061 [DEBUG] [Thread-130241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:04:04.061 [DEBUG] [Thread-130241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:04:04.061 [DEBUG] [Thread-130241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:04:04.080 [INFO] [Thread-130241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:04:04.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:04:04.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:04:04.918 [DEBUG] [Thread-130241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:04:04.918 [DEBUG] [Thread-130241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:04:04.966 [DEBUG] [Thread-130241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:04:04.966 [DEBUG] [Thread-130241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:04:04.976 [DEBUG] [Thread-130241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:04:04.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:04:04.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:04:04.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:04:05.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:04:05.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:04:05.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:04:05.013 [DEBUG] [Thread-130241] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:04:12.652 [DEBUG] [Thread-130243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:04:18.639 [DEBUG] [Thread-130244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:04:21.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:04:21.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:04:27.704 [DEBUG] [Thread-130245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:04:35.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:04:35.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:04:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:04:36.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 4, 16), 16.15, 35.92, 0.0, 31.21, 24.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:04:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:04:16
2026-02-11T14:04:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:04:37.395 [DEBUG] [Thread-130246] [transport.py] [_log()] starting thread (client mode): 0xa5771510
2026-02-11T14:04:37.395 [DEBUG] [Thread-130246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:04:37.415 [DEBUG] [Thread-130246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:04:37.415 [INFO] [Thread-130246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:04:37.418 [DEBUG] [Thread-130246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:04:37.418 [DEBUG] [Thread-130246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:04:37.418 [DEBUG] [Thread-130246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:04:37.418 [DEBUG] [Thread-130246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:37.418 [DEBUG] [Thread-130246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] client lang: <none>
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] server lang: <none>
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] kex follows: False
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] Compression: none
2026-02-11T14:04:37.419 [DEBUG] [Thread-130246] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:04:37.434 [DEBUG] [Thread-130246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:04:37.435 [DEBUG] [Thread-130246] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:04:37.435 [DEBUG] [Thread-130246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:04:37.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:04:37.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:04:37.477 [DEBUG] [Thread-130246] [transport.py] [_log()] userauth is OK
2026-02-11T14:04:37.477 [DEBUG] [Thread-130246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:04:37.477 [DEBUG] [Thread-130246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:04:37.477 [DEBUG] [Thread-130246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:04:37.477 [DEBUG] [Thread-130246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:04:37.509 [INFO] [Thread-130246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:04:37.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:04:38.158 [DEBUG] [Thread-130246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:04:38.158 [DEBUG] [Thread-130246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:04:38.158 [DEBUG] [Thread-130246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:04:38.199 [DEBUG] [Thread-130246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:04:38.200 [DEBUG] [Thread-130246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:04:38.203 [DEBUG] [Thread-130246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:04:38.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:04:38.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:04:38.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:04:38.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:04:38.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:04:38.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:04:38.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:04:38.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:04:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:04:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.502921 -999.00  +24.50  18.41     42  +10.90 1 2 1 1 1   888    0 13.97 8.59 ----- 27.3 18.4 310.6 36.0 30.8 -20.1 30.2 -18.9 30.1 -17.2 31.0 -17.6
2026-02-11T14:04:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:04:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:04:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.502921
2026-02-11T14:04:38.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:04:38.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:04:38.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:04:38.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:04:38.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:04:38.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:04:16', tmtdew=16.15, humidity=35.92, cloud=0.0, wind=31.21, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:04:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:04:38.228 [DEBUG] [Thread-130246] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:04:38.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:04:38.320 [DEBUG] [Thread-130249] [transport.py] [_log()] starting thread (client mode): 0xa2db6aa0
2026-02-11T14:04:38.321 [DEBUG] [Thread-130249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:04:38.334 [DEBUG] [Thread-130249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:04:38.335 [INFO] [Thread-130249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:04:38.342 [DEBUG] [Thread-130249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:04:38.342 [DEBUG] [Thread-130249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] client lang: <none>
2026-02-11T14:04:38.343 [DEBUG] [Thread-130249] [transport.py] [_log()] server lang: <none>
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] kex follows: False
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] Compression: none
2026-02-11T14:04:38.344 [DEBUG] [Thread-130249] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:04:38.401 [DEBUG] [Thread-130249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:04:38.402 [DEBUG] [Thread-130249] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:04:38.402 [DEBUG] [Thread-130249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:04:38.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:04:38.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:04:38.460 [DEBUG] [Thread-130249] [transport.py] [_log()] userauth is OK
2026-02-11T14:04:38.460 [DEBUG] [Thread-130249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:04:38.461 [DEBUG] [Thread-130249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:04:38.461 [DEBUG] [Thread-130249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:04:38.461 [DEBUG] [Thread-130249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:04:38.480 [INFO] [Thread-130249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:04:38.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:04:38.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:04:39.319 [DEBUG] [Thread-130249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:04:39.319 [DEBUG] [Thread-130249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:04:39.367 [DEBUG] [Thread-130249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:04:39.368 [DEBUG] [Thread-130249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:04:39.376 [DEBUG] [Thread-130249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:04:39.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:04:39.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:04:39.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:04:39.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:04:39.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:04:39.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:04:39.413 [DEBUG] [Thread-130249] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:04:42.743 [DEBUG] [Thread-130251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:04:57.794 [DEBUG] [Thread-130252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:05:09.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:05:09.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:05:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:05:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 4, 52), 16.11, 36.34, 0.0, 24.12, 24.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:05:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:04:52
2026-02-11T14:05:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:05:11.771 [DEBUG] [Thread-130253] [transport.py] [_log()] starting thread (client mode): 0xa2db4d60
2026-02-11T14:05:11.771 [DEBUG] [Thread-130253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:05:11.789 [DEBUG] [Thread-130253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:05:11.789 [INFO] [Thread-130253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] client lang: <none>
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] server lang: <none>
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] kex follows: False
2026-02-11T14:05:11.790 [DEBUG] [Thread-130253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:05:11.791 [DEBUG] [Thread-130253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:05:11.791 [DEBUG] [Thread-130253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:05:11.791 [DEBUG] [Thread-130253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:05:11.791 [DEBUG] [Thread-130253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:05:11.791 [DEBUG] [Thread-130253] [transport.py] [_log()] Compression: none
2026-02-11T14:05:11.791 [DEBUG] [Thread-130253] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:05:11.800 [DEBUG] [Thread-130253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:05:11.800 [DEBUG] [Thread-130253] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:05:11.801 [DEBUG] [Thread-130253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:05:11.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:05:11.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:05:11.802 [DEBUG] [Thread-130253] [transport.py] [_log()] userauth is OK
2026-02-11T14:05:11.802 [DEBUG] [Thread-130253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:05:11.802 [DEBUG] [Thread-130253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:05:11.802 [DEBUG] [Thread-130253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:05:11.802 [DEBUG] [Thread-130253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:05:11.818 [INFO] [Thread-130253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:05:11.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:05:12.609 [DEBUG] [Thread-130253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:05:12.609 [DEBUG] [Thread-130253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:05:12.610 [DEBUG] [Thread-130253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:05:12.650 [DEBUG] [Thread-130253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:05:12.650 [DEBUG] [Thread-130253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:05:12.653 [DEBUG] [Thread-130253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:05:12.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:05:12.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:05:12.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:05:12.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:05:12.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:05:12.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:05:12.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:05:12.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:05:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:05:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.503268 -999.00  +25.10  22.47     42  +11.30 1 2 1 1 1   888    0 13.75 8.25 ----- 24.9 22.5 317.6 32.2 30.9 -20.7 30.2 -20.2 30.1 -18.6 31.1 -18.1
2026-02-11T14:05:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:05:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:05:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.503268
2026-02-11T14:05:12.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:05:12.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:05:12.686 [DEBUG] [Thread-130253] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:04:52', tmtdew=16.11, humidity=36.34, cloud=0.0, wind=24.12, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:04:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:05:12.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:05:12.779 [DEBUG] [Thread-130256] [transport.py] [_log()] starting thread (client mode): 0xa2db6e30
2026-02-11T14:05:12.779 [DEBUG] [Thread-130256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:05:12.794 [DEBUG] [Thread-130256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:05:12.794 [INFO] [Thread-130256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:05:12.802 [DEBUG] [Thread-130256] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:05:12.802 [DEBUG] [Thread-130256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:05:12.802 [DEBUG] [Thread-130256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] client lang: <none>
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] server lang: <none>
2026-02-11T14:05:12.803 [DEBUG] [Thread-130256] [transport.py] [_log()] kex follows: False
2026-02-11T14:05:12.804 [DEBUG] [Thread-130256] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:05:12.804 [DEBUG] [Thread-130256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:05:12.804 [DEBUG] [Thread-130256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:05:12.804 [DEBUG] [Thread-130256] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:05:12.804 [DEBUG] [Thread-130256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:05:12.804 [DEBUG] [Thread-130256] [transport.py] [_log()] Compression: none
2026-02-11T14:05:12.804 [DEBUG] [Thread-130256] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:05:12.830 [DEBUG] [Thread-130258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:05:12.860 [DEBUG] [Thread-130256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:05:12.861 [DEBUG] [Thread-130256] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:05:12.862 [DEBUG] [Thread-130256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:05:12.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:05:12.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:05:12.916 [DEBUG] [Thread-130256] [transport.py] [_log()] userauth is OK
2026-02-11T14:05:12.916 [DEBUG] [Thread-130256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:05:12.916 [DEBUG] [Thread-130256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:05:12.916 [DEBUG] [Thread-130256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:05:12.916 [DEBUG] [Thread-130256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:05:12.935 [INFO] [Thread-130256] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:05:12.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:05:12.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:05:13.782 [DEBUG] [Thread-130256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:05:13.783 [DEBUG] [Thread-130256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:05:13.830 [DEBUG] [Thread-130256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:05:13.830 [DEBUG] [Thread-130256] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:05:13.840 [DEBUG] [Thread-130256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:05:13.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:05:13.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:05:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:05:13.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:05:13.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:05:13.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:05:13.877 [DEBUG] [Thread-130256] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:05:18.673 [DEBUG] [Thread-130259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:05:21.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:05:21.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:05:27.878 [DEBUG] [Thread-130260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:05:42.910 [DEBUG] [Thread-130261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:05:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:05:43.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:05:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:05:45.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 5, 27), 16.14, 36.25, 0.0, 18.44, 24.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:05:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:05:27
2026-02-11T14:05:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:05:46.325 [DEBUG] [Thread-130262] [transport.py] [_log()] starting thread (client mode): 0xa57d7760
2026-02-11T14:05:46.326 [DEBUG] [Thread-130262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:05:46.345 [DEBUG] [Thread-130262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:05:46.346 [INFO] [Thread-130262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:05:46.349 [DEBUG] [Thread-130262] [transport.py] [_log()] client lang: <none>
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] server lang: <none>
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] kex follows: False
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] Compression: none
2026-02-11T14:05:46.350 [DEBUG] [Thread-130262] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:05:46.367 [DEBUG] [Thread-130262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:05:46.368 [DEBUG] [Thread-130262] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:05:46.368 [DEBUG] [Thread-130262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:05:46.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:05:46.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:05:46.370 [DEBUG] [Thread-130262] [transport.py] [_log()] userauth is OK
2026-02-11T14:05:46.371 [DEBUG] [Thread-130262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:05:46.371 [DEBUG] [Thread-130262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:05:46.371 [DEBUG] [Thread-130262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:05:46.371 [DEBUG] [Thread-130262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:05:46.407 [INFO] [Thread-130262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:05:46.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:05:47.024 [DEBUG] [Thread-130262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:05:47.024 [DEBUG] [Thread-130262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:05:47.024 [DEBUG] [Thread-130262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:05:47.065 [DEBUG] [Thread-130262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:05:47.065 [DEBUG] [Thread-130262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:05:47.068 [DEBUG] [Thread-130262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:05:47.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:05:47.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:05:47.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:05:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:05:47.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:05:47.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:05:47.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:05:47.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:05:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:05:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.503615 -999.00  +24.60  22.73     41  +10.80 1 2 1 1 1   888    0 13.89 7.76 ----- 23.1 22.7 321.6 26.9 31.0 -20.4 30.2 -19.8 30.3 -16.3 31.1 -16.8
2026-02-11T14:05:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:05:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:05:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.503615
2026-02-11T14:05:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:05:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:05:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:05:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:05:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:05:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:05:27', tmtdew=16.14, humidity=36.25, cloud=0.0, wind=18.44, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:05:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:05:47.096 [DEBUG] [Thread-130262] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:05:47.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:05:47.193 [DEBUG] [Thread-130265] [transport.py] [_log()] starting thread (client mode): 0xa57d4670
2026-02-11T14:05:47.194 [DEBUG] [Thread-130265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:05:47.209 [DEBUG] [Thread-130265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:05:47.209 [INFO] [Thread-130265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] client lang: <none>
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] server lang: <none>
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] kex follows: False
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:05:47.217 [DEBUG] [Thread-130265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:05:47.218 [DEBUG] [Thread-130265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:05:47.218 [DEBUG] [Thread-130265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:05:47.218 [DEBUG] [Thread-130265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:05:47.218 [DEBUG] [Thread-130265] [transport.py] [_log()] Compression: none
2026-02-11T14:05:47.218 [DEBUG] [Thread-130265] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:05:47.275 [DEBUG] [Thread-130265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:05:47.276 [DEBUG] [Thread-130265] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:05:47.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:05:47.277 [DEBUG] [Thread-130265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:05:47.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:05:47.332 [DEBUG] [Thread-130265] [transport.py] [_log()] userauth is OK
2026-02-11T14:05:47.333 [DEBUG] [Thread-130265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:05:47.333 [DEBUG] [Thread-130265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:05:47.333 [DEBUG] [Thread-130265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:05:47.333 [DEBUG] [Thread-130265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:05:47.352 [INFO] [Thread-130265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:05:47.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:05:47.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:05:48.236 [DEBUG] [Thread-130265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:05:48.236 [DEBUG] [Thread-130265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:05:48.285 [DEBUG] [Thread-130265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:05:48.285 [DEBUG] [Thread-130265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:05:48.295 [DEBUG] [Thread-130265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:05:48.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:05:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:05:48.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
2026-02-11T14:05:48.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:05:48.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:05:48.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:05:48.331 [DEBUG] [Thread-130265] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:05:57.947 [DEBUG] [Thread-130267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:06:12.997 [DEBUG] [Thread-130268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:06:18.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:06:18.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:06:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:06:18.700 [DEBUG] [Thread-130269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:06:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 6, 4), 15.75, 37.05, 0.0, 21.37, 24.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:06:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:06:04
2026-02-11T14:06:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:06:20.726 [DEBUG] [Thread-130270] [transport.py] [_log()] starting thread (client mode): 0xa2db59f0
2026-02-11T14:06:20.727 [DEBUG] [Thread-130270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:06:20.747 [DEBUG] [Thread-130270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:06:20.747 [INFO] [Thread-130270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] client lang: <none>
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] server lang: <none>
2026-02-11T14:06:20.750 [DEBUG] [Thread-130270] [transport.py] [_log()] kex follows: False
2026-02-11T14:06:20.751 [DEBUG] [Thread-130270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:06:20.751 [DEBUG] [Thread-130270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:06:20.751 [DEBUG] [Thread-130270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:06:20.751 [DEBUG] [Thread-130270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:06:20.751 [DEBUG] [Thread-130270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:06:20.751 [DEBUG] [Thread-130270] [transport.py] [_log()] Compression: none
2026-02-11T14:06:20.751 [DEBUG] [Thread-130270] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:06:20.771 [DEBUG] [Thread-130270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:06:20.771 [DEBUG] [Thread-130270] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:06:20.772 [DEBUG] [Thread-130270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:06:20.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:06:20.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:06:20.774 [DEBUG] [Thread-130270] [transport.py] [_log()] userauth is OK
2026-02-11T14:06:20.774 [DEBUG] [Thread-130270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:06:20.774 [DEBUG] [Thread-130270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:06:20.774 [DEBUG] [Thread-130270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:06:20.774 [DEBUG] [Thread-130270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:06:20.809 [INFO] [Thread-130270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:06:20.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:06:21.452 [DEBUG] [Thread-130270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:06:21.452 [DEBUG] [Thread-130270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:06:21.453 [DEBUG] [Thread-130270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:06:21.493 [DEBUG] [Thread-130270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:06:21.494 [DEBUG] [Thread-130270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:06:21.497 [DEBUG] [Thread-130270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:06:21.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:06:21.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:06:21.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:06:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:06:21.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:06:21.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:06:21.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:06:21.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:06:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:06:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.503962 -999.00  +24.10  16.60     42  +10.60 1 2 1 1 1   888    0 14.01 5.43 ----- 15.4 16.6 308.4 24.2 31.1 -20.1 30.4 -18.9 30.3 -18.2 31.3 -16.7
2026-02-11T14:06:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:06:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:06:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.503962
2026-02-11T14:06:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:06:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:06:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:06:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:06:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:06:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:06:04', tmtdew=15.75, humidity=37.05, cloud=0.0, wind=21.37, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:05:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:06:21.525 [DEBUG] [Thread-130270] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:06:21.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:06:21.620 [DEBUG] [Thread-130273] [transport.py] [_log()] starting thread (client mode): 0xa5771030
2026-02-11T14:06:21.620 [DEBUG] [Thread-130273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:06:21.635 [DEBUG] [Thread-130273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:06:21.635 [INFO] [Thread-130273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:06:21.642 [DEBUG] [Thread-130273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:06:21.643 [DEBUG] [Thread-130273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:06:21.643 [DEBUG] [Thread-130273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:06:21.643 [DEBUG] [Thread-130273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:21.643 [DEBUG] [Thread-130273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] client lang: <none>
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] server lang: <none>
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] kex follows: False
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] Compression: none
2026-02-11T14:06:21.644 [DEBUG] [Thread-130273] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:06:21.700 [DEBUG] [Thread-130273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:06:21.700 [DEBUG] [Thread-130273] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:06:21.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:06:21.701 [DEBUG] [Thread-130273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:06:21.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:06:21.755 [DEBUG] [Thread-130273] [transport.py] [_log()] userauth is OK
2026-02-11T14:06:21.756 [DEBUG] [Thread-130273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:06:21.756 [DEBUG] [Thread-130273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:06:21.756 [DEBUG] [Thread-130273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:06:21.756 [DEBUG] [Thread-130273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:06:21.773 [INFO] [Thread-130273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:06:21.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:06:21.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:06:21.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:06:21.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:06:22.628 [DEBUG] [Thread-130273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:06:22.628 [DEBUG] [Thread-130273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:06:22.676 [DEBUG] [Thread-130273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:06:22.676 [DEBUG] [Thread-130273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:06:22.685 [DEBUG] [Thread-130273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:06:22.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:06:22.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:06:22.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:06:22.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:06:22.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:06:22.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:06:22.944 [DEBUG] [Thread-130273] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:06:28.033 [DEBUG] [Thread-130275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:06:43.085 [DEBUG] [Thread-130276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:06:52.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:06:52.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:06:52.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
2026-02-11T14:06:54.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 6, 40), 16.25, 35.65, 0.0, 33.94, 25.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:06:54.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:06:40
2026-02-11T14:06:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:06:55.285 [DEBUG] [Thread-130277] [transport.py] [_log()] starting thread (client mode): 0xa57432e0
2026-02-11T14:06:55.285 [DEBUG] [Thread-130277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:06:55.301 [DEBUG] [Thread-130277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:06:55.301 [INFO] [Thread-130277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:06:55.306 [DEBUG] [Thread-130277] [transport.py] [_log()] client lang: <none>
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] server lang: <none>
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] kex follows: False
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] Compression: none
2026-02-11T14:06:55.307 [DEBUG] [Thread-130277] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:06:55.324 [DEBUG] [Thread-130277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:06:55.325 [DEBUG] [Thread-130277] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:06:55.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:06:55.326 [DEBUG] [Thread-130277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:06:55.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:06:55.328 [DEBUG] [Thread-130277] [transport.py] [_log()] userauth is OK
2026-02-11T14:06:55.328 [DEBUG] [Thread-130277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:06:55.328 [DEBUG] [Thread-130277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:06:55.328 [DEBUG] [Thread-130277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:06:55.328 [DEBUG] [Thread-130277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:06:55.353 [INFO] [Thread-130277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:06:55.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:06:56.018 [DEBUG] [Thread-130277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:06:56.018 [DEBUG] [Thread-130277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:06:56.019 [DEBUG] [Thread-130277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:06:56.059 [DEBUG] [Thread-130277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:06:56.060 [DEBUG] [Thread-130277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:06:56.063 [DEBUG] [Thread-130277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:06:56.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:06:56.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:06:56.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:06:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:06:56.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:06:56.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:06:56.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:06:56.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:06:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:06:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.504310 -999.00  +24.30  16.75     43  +11.10 1 2 1 1 1   888    0 13.60 2.89 ----- 16.7 16.8 302.6 20.2 31.2 -17.9 30.5 -16.8 30.4 -16.4 31.5 -15.5
2026-02-11T14:06:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:06:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:06:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.504310
2026-02-11T14:06:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:06:56.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:06:56.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:06:56.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:06:56.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:06:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:06:40', tmtdew=16.25, humidity=35.65, cloud=0.0, wind=33.94, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:06:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:06:56.092 [DEBUG] [Thread-130277] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:06:56.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:06:56.185 [DEBUG] [Thread-130280] [transport.py] [_log()] starting thread (client mode): 0xa57d6980
2026-02-11T14:06:56.186 [DEBUG] [Thread-130280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:06:56.202 [DEBUG] [Thread-130280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:06:56.203 [INFO] [Thread-130280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:06:56.210 [DEBUG] [Thread-130280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:06:56.210 [DEBUG] [Thread-130280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:06:56.211 [DEBUG] [Thread-130280] [transport.py] [_log()] client lang: <none>
2026-02-11T14:06:56.212 [DEBUG] [Thread-130280] [transport.py] [_log()] server lang: <none>
2026-02-11T14:06:56.212 [DEBUG] [Thread-130280] [transport.py] [_log()] kex follows: False
2026-02-11T14:06:56.212 [DEBUG] [Thread-130280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:06:56.212 [DEBUG] [Thread-130280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:06:56.212 [DEBUG] [Thread-130280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:06:56.212 [DEBUG] [Thread-130280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:06:56.212 [DEBUG] [Thread-130280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:06:56.213 [DEBUG] [Thread-130280] [transport.py] [_log()] Compression: none
2026-02-11T14:06:56.213 [DEBUG] [Thread-130280] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:06:56.269 [DEBUG] [Thread-130280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:06:56.270 [DEBUG] [Thread-130280] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:06:56.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:06:56.271 [DEBUG] [Thread-130280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:06:56.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:06:56.328 [DEBUG] [Thread-130280] [transport.py] [_log()] userauth is OK
2026-02-11T14:06:56.329 [DEBUG] [Thread-130280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:06:56.329 [DEBUG] [Thread-130280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:06:56.329 [DEBUG] [Thread-130280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:06:56.329 [DEBUG] [Thread-130280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:06:56.349 [INFO] [Thread-130280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:06:56.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:06:56.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:06:57.198 [DEBUG] [Thread-130280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:06:57.198 [DEBUG] [Thread-130280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:06:57.247 [DEBUG] [Thread-130280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:06:57.247 [DEBUG] [Thread-130280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:06:57.256 [DEBUG] [Thread-130280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:06:57.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:06:57.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:06:57.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:06:57.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:06:57.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:06:57.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:06:57.295 [DEBUG] [Thread-130280] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:06:58.117 [DEBUG] [Thread-130282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:07:13.165 [DEBUG] [Thread-130283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:07:18.734 [DEBUG] [Thread-130284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:07:22.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:07:22.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:07:27.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:07:27.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:07:27.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:07:28.199 [DEBUG] [Thread-130285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:07:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 7, 17), 15.3, 37.66, 0.0, 29.43, 24.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:07:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:07:17
2026-02-11T14:07:29.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:07:29.867 [DEBUG] [Thread-130286] [transport.py] [_log()] starting thread (client mode): 0xa57d7bb0
2026-02-11T14:07:29.868 [DEBUG] [Thread-130286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:07:29.886 [DEBUG] [Thread-130286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:07:29.886 [INFO] [Thread-130286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:07:29.890 [DEBUG] [Thread-130286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] client lang: <none>
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] server lang: <none>
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] kex follows: False
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] Compression: none
2026-02-11T14:07:29.891 [DEBUG] [Thread-130286] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:07:29.907 [DEBUG] [Thread-130286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:07:29.908 [DEBUG] [Thread-130286] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:07:29.908 [DEBUG] [Thread-130286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:07:29.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:07:29.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:07:29.953 [DEBUG] [Thread-130286] [transport.py] [_log()] userauth is OK
2026-02-11T14:07:29.953 [DEBUG] [Thread-130286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:07:29.954 [DEBUG] [Thread-130286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:07:29.954 [DEBUG] [Thread-130286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:07:29.954 [DEBUG] [Thread-130286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:07:29.986 [INFO] [Thread-130286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:07:29.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:07:30.625 [DEBUG] [Thread-130286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:07:30.625 [DEBUG] [Thread-130286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:07:30.626 [DEBUG] [Thread-130286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:07:30.667 [DEBUG] [Thread-130286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:07:30.667 [DEBUG] [Thread-130286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:07:30.670 [DEBUG] [Thread-130286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:07:30.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:07:30.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:07:30.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:07:30.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:07:30.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:07:30.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:07:30.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:07:30.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:07:30.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:07:30.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.505004 -999.00  +23.90  33.36     43  +10.50 1 2 2 1 1   888    0 13.61 -0.83 ----- 24.6 33.4 272.3 39.4 30.7 -23.4 30.3 -20.6 29.7 -21.0 31.1 -17.0
2026-02-11T14:07:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:07:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:07:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.505004
2026-02-11T14:07:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:07:30.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:07:30.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:07:30.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:07:30.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:07:30.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:07:17', tmtdew=15.3, humidity=37.66, cloud=0.0, wind=29.43, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:07:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:07:30.697 [DEBUG] [Thread-130286] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:07:30.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:07:30.801 [DEBUG] [Thread-130289] [transport.py] [_log()] starting thread (client mode): 0xa57d7d30
2026-02-11T14:07:30.801 [DEBUG] [Thread-130289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:07:30.816 [DEBUG] [Thread-130289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:07:30.816 [INFO] [Thread-130289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:07:30.823 [DEBUG] [Thread-130289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] client lang: <none>
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] server lang: <none>
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] kex follows: False
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] Compression: none
2026-02-11T14:07:30.824 [DEBUG] [Thread-130289] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:07:30.880 [DEBUG] [Thread-130289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:07:30.881 [DEBUG] [Thread-130289] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:07:30.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:07:30.882 [DEBUG] [Thread-130289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:07:30.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:07:30.936 [DEBUG] [Thread-130289] [transport.py] [_log()] userauth is OK
2026-02-11T14:07:30.937 [DEBUG] [Thread-130289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:07:30.937 [DEBUG] [Thread-130289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:07:30.937 [DEBUG] [Thread-130289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:07:30.937 [DEBUG] [Thread-130289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:07:30.956 [INFO] [Thread-130289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:07:30.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:07:30.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:07:31.761 [DEBUG] [Thread-130289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:07:31.762 [DEBUG] [Thread-130289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:07:31.810 [DEBUG] [Thread-130289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:07:31.810 [DEBUG] [Thread-130289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:07:31.818 [DEBUG] [Thread-130289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:07:31.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:07:31.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:07:31.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:07:31.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:07:31.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:07:31.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:07:31.852 [DEBUG] [Thread-130289] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:07:43.228 [DEBUG] [Thread-130291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:07:58.278 [DEBUG] [Thread-130292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:08:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:08:01.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:08:01.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:08:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 7, 52), 15.92, 36.32, 0.0, 33.56, 24.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:08:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:07:52
2026-02-11T14:08:04.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:08:04.202 [DEBUG] [Thread-130293] [transport.py] [_log()] starting thread (client mode): 0xa2db6b60
2026-02-11T14:08:04.203 [DEBUG] [Thread-130293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:08:04.222 [DEBUG] [Thread-130293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:08:04.222 [INFO] [Thread-130293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] client lang: <none>
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] server lang: <none>
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] kex follows: False
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] Compression: none
2026-02-11T14:08:04.226 [DEBUG] [Thread-130293] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:08:04.244 [DEBUG] [Thread-130293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:08:04.245 [DEBUG] [Thread-130293] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:08:04.245 [DEBUG] [Thread-130293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:08:04.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:08:04.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:08:04.247 [DEBUG] [Thread-130293] [transport.py] [_log()] userauth is OK
2026-02-11T14:08:04.248 [DEBUG] [Thread-130293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:08:04.248 [DEBUG] [Thread-130293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:08:04.248 [DEBUG] [Thread-130293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:08:04.248 [DEBUG] [Thread-130293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:08:04.272 [INFO] [Thread-130293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:08:04.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:08:05.011 [DEBUG] [Thread-130293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:08:05.011 [DEBUG] [Thread-130293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:08:05.011 [DEBUG] [Thread-130293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:08:05.053 [DEBUG] [Thread-130293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:08:05.053 [DEBUG] [Thread-130293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:08:05.056 [DEBUG] [Thread-130293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:08:05.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:08:05.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:08:05.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:08:05.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:08:05.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:08:05.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:08:05.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:08:05.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:08:05.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:08:05.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.505351 -999.00  +24.10  21.27     43  +10.70 1 2 1 1 1   888    0 13.73 -3.44 ----- 19.5 21.3 289.8 34.4 30.7 -24.4 30.2 -22.0 29.9 -20.8 30.9 -19.1
2026-02-11T14:08:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:08:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:08:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.505351
2026-02-11T14:08:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:08:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:08:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:08:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:08:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:08:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:07:52', tmtdew=15.92, humidity=36.32, cloud=0.0, wind=33.56, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:07:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:08:05.080 [DEBUG] [Thread-130293] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:08:05.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:08:05.175 [DEBUG] [Thread-130296] [transport.py] [_log()] starting thread (client mode): 0xa57d4e80
2026-02-11T14:08:05.176 [DEBUG] [Thread-130296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:08:05.190 [DEBUG] [Thread-130296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:08:05.190 [INFO] [Thread-130296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] client lang: <none>
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] server lang: <none>
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] kex follows: False
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:08:05.198 [DEBUG] [Thread-130296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:08:05.199 [DEBUG] [Thread-130296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:08:05.199 [DEBUG] [Thread-130296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:08:05.199 [DEBUG] [Thread-130296] [transport.py] [_log()] Compression: none
2026-02-11T14:08:05.199 [DEBUG] [Thread-130296] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:08:05.260 [DEBUG] [Thread-130296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:08:05.261 [DEBUG] [Thread-130296] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:08:05.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:08:05.262 [DEBUG] [Thread-130296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:08:05.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:08:05.316 [DEBUG] [Thread-130296] [transport.py] [_log()] userauth is OK
2026-02-11T14:08:05.316 [DEBUG] [Thread-130296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:08:05.316 [DEBUG] [Thread-130296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:08:05.317 [DEBUG] [Thread-130296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:08:05.317 [DEBUG] [Thread-130296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:08:05.335 [INFO] [Thread-130296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:08:05.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:08:05.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:08:06.189 [DEBUG] [Thread-130296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:08:06.190 [DEBUG] [Thread-130296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:08:06.237 [DEBUG] [Thread-130296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:08:06.238 [DEBUG] [Thread-130296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:08:06.247 [DEBUG] [Thread-130296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:08:06.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:08:06.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:08:06.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:08:06.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:08:06.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:08:06.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:08:06.284 [DEBUG] [Thread-130296] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:08:13.313 [DEBUG] [Thread-130298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:08:18.777 [DEBUG] [Thread-130299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:08:22.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:08:22.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:08:28.368 [DEBUG] [Thread-130300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:08:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:08:36.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:08:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:08:38.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 8, 27), 15.76, 36.65, 0.0, 34.56, 24.35, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:08:38.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:08:27
2026-02-11T14:08:38.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:08:38.638 [DEBUG] [Thread-130301] [transport.py] [_log()] starting thread (client mode): 0xa57d58d0
2026-02-11T14:08:38.638 [DEBUG] [Thread-130301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:08:38.658 [DEBUG] [Thread-130301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:08:38.658 [INFO] [Thread-130301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] client lang: <none>
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] server lang: <none>
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] kex follows: False
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] Compression: none
2026-02-11T14:08:38.661 [DEBUG] [Thread-130301] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:08:38.679 [DEBUG] [Thread-130301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:08:38.680 [DEBUG] [Thread-130301] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:08:38.680 [DEBUG] [Thread-130301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:08:38.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:08:38.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:08:38.682 [DEBUG] [Thread-130301] [transport.py] [_log()] userauth is OK
2026-02-11T14:08:38.682 [DEBUG] [Thread-130301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:08:38.683 [DEBUG] [Thread-130301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:08:38.683 [DEBUG] [Thread-130301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:08:38.683 [DEBUG] [Thread-130301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:08:38.708 [INFO] [Thread-130301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:08:38.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:08:39.356 [DEBUG] [Thread-130301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:08:39.357 [DEBUG] [Thread-130301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:08:39.357 [DEBUG] [Thread-130301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:08:39.397 [DEBUG] [Thread-130301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:08:39.398 [DEBUG] [Thread-130301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:08:39.401 [DEBUG] [Thread-130301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:08:39.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:08:39.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:08:39.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:08:39.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:08:39.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:08:39.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:08:39.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:08:39.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:08:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:08:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.505698 -999.00  +24.40  26.28     43  +11.00 1 2 1 1 1   888    0 13.59 -5.39 ----- 26.9 26.3 302.6 31.1 31.1 -17.8 30.4 -17.3 30.1 -17.6 31.2 -15.9
2026-02-11T14:08:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:08:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:08:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.505698
2026-02-11T14:08:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:08:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:08:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:08:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:08:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:08:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:08:27', tmtdew=15.76, humidity=36.65, cloud=0.0, wind=34.56, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:08:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:08:39.429 [DEBUG] [Thread-130301] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:08:39.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:08:39.523 [DEBUG] [Thread-130304] [transport.py] [_log()] starting thread (client mode): 0xa57d69e0
2026-02-11T14:08:39.524 [DEBUG] [Thread-130304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:08:39.538 [DEBUG] [Thread-130304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:08:39.538 [INFO] [Thread-130304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:08:39.546 [DEBUG] [Thread-130304] [transport.py] [_log()] client lang: <none>
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] server lang: <none>
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] kex follows: False
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] Compression: none
2026-02-11T14:08:39.547 [DEBUG] [Thread-130304] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:08:39.604 [DEBUG] [Thread-130304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:08:39.605 [DEBUG] [Thread-130304] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:08:39.606 [DEBUG] [Thread-130304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:08:39.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:08:39.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:08:39.660 [DEBUG] [Thread-130304] [transport.py] [_log()] userauth is OK
2026-02-11T14:08:39.661 [DEBUG] [Thread-130304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:08:39.661 [DEBUG] [Thread-130304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:08:39.661 [DEBUG] [Thread-130304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:08:39.661 [DEBUG] [Thread-130304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:08:39.680 [INFO] [Thread-130304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:08:39.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:08:39.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:08:40.520 [DEBUG] [Thread-130304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:08:40.521 [DEBUG] [Thread-130304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:08:40.568 [DEBUG] [Thread-130304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:08:40.568 [DEBUG] [Thread-130304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:08:40.577 [DEBUG] [Thread-130304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:08:40.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:08:40.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:08:40.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
2026-02-11T14:08:40.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:08:40.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:08:40.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:08:40.614 [DEBUG] [Thread-130304] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:08:43.404 [DEBUG] [Thread-130306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:08:58.463 [DEBUG] [Thread-130307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:09:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:09:10.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:09:10.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
2026-02-11T14:09:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 9, 3), 15.54, 37.11, 0.0, 33.54, 24.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:09:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:09:03
2026-02-11T14:09:12.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:09:13.054 [DEBUG] [Thread-130308] [transport.py] [_log()] starting thread (client mode): 0xa2db64d0
2026-02-11T14:09:13.054 [DEBUG] [Thread-130308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:09:13.074 [DEBUG] [Thread-130308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:09:13.074 [INFO] [Thread-130308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:09:13.076 [DEBUG] [Thread-130308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:09:13.076 [DEBUG] [Thread-130308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:09:13.076 [DEBUG] [Thread-130308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:09:13.076 [DEBUG] [Thread-130308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] client lang: <none>
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] server lang: <none>
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] kex follows: False
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] Compression: none
2026-02-11T14:09:13.077 [DEBUG] [Thread-130308] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:09:13.087 [DEBUG] [Thread-130308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:09:13.088 [DEBUG] [Thread-130308] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:09:13.088 [DEBUG] [Thread-130308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:09:13.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:09:13.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:09:13.089 [DEBUG] [Thread-130308] [transport.py] [_log()] userauth is OK
2026-02-11T14:09:13.090 [DEBUG] [Thread-130308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:09:13.090 [DEBUG] [Thread-130308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:09:13.090 [DEBUG] [Thread-130308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:09:13.090 [DEBUG] [Thread-130308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:09:13.103 [INFO] [Thread-130308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:09:13.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:09:13.499 [DEBUG] [Thread-130310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:09:13.755 [DEBUG] [Thread-130308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:09:13.756 [DEBUG] [Thread-130308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:09:13.756 [DEBUG] [Thread-130308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:09:13.796 [DEBUG] [Thread-130308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:09:13.796 [DEBUG] [Thread-130308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:09:13.800 [DEBUG] [Thread-130308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:09:13.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:09:13.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:09:13.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:09:13.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:09:13.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:09:13.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:09:13.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:09:13.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:09:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:09:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.506046 -999.00  +24.80  36.38     42  +11.30 1 2 2 1 1   888    0 13.50 -7.38 ----- 34.2 36.4 311.4 45.9 31.1 -19.5 30.4 -18.0 30.2 -18.0 31.2 -16.3
2026-02-11T14:09:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:09:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:09:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.506046
2026-02-11T14:09:13.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:09:13.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:09:13.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:09:13.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:09:13.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:09:13.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:09:03', tmtdew=15.54, humidity=37.11, cloud=0.0, wind=33.54, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:08:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:09:13.828 [DEBUG] [Thread-130308] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:09:13.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:09:13.924 [DEBUG] [Thread-130312] [transport.py] [_log()] starting thread (client mode): 0xa2db7fa0
2026-02-11T14:09:13.924 [DEBUG] [Thread-130312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:09:13.939 [DEBUG] [Thread-130312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:09:13.939 [INFO] [Thread-130312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:09:13.947 [DEBUG] [Thread-130312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:09:13.947 [DEBUG] [Thread-130312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:09:13.947 [DEBUG] [Thread-130312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:09:13.947 [DEBUG] [Thread-130312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:13.947 [DEBUG] [Thread-130312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] client lang: <none>
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] server lang: <none>
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] kex follows: False
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:09:13.948 [DEBUG] [Thread-130312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:09:13.949 [DEBUG] [Thread-130312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:09:13.949 [DEBUG] [Thread-130312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:09:13.949 [DEBUG] [Thread-130312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:09:13.949 [DEBUG] [Thread-130312] [transport.py] [_log()] Compression: none
2026-02-11T14:09:13.949 [DEBUG] [Thread-130312] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:09:14.004 [DEBUG] [Thread-130312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:09:14.005 [DEBUG] [Thread-130312] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:09:14.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:09:14.006 [DEBUG] [Thread-130312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:09:14.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:09:14.061 [DEBUG] [Thread-130312] [transport.py] [_log()] userauth is OK
2026-02-11T14:09:14.061 [DEBUG] [Thread-130312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:09:14.061 [DEBUG] [Thread-130312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:09:14.061 [DEBUG] [Thread-130312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:09:14.062 [DEBUG] [Thread-130312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:09:14.080 [INFO] [Thread-130312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:09:14.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:09:14.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:09:14.934 [DEBUG] [Thread-130312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:09:14.934 [DEBUG] [Thread-130312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:09:14.982 [DEBUG] [Thread-130312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:09:14.982 [DEBUG] [Thread-130312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:09:14.991 [DEBUG] [Thread-130312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:09:14.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:09:14.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:09:15.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:09:15.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:09:15.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:09:15.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:09:15.024 [DEBUG] [Thread-130312] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:09:18.813 [DEBUG] [Thread-130314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:09:22.308 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:09:22.309 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:09:28.539 [DEBUG] [Thread-130315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:09:43.589 [DEBUG] [Thread-130316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:09:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:09:45.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:09:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:09:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 9, 38), 17.23, 33.73, 0.0, 39.73, 26.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:09:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:09:38
2026-02-11T14:09:47.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:09:47.385 [DEBUG] [Thread-130317] [transport.py] [_log()] starting thread (client mode): 0xa57419c0
2026-02-11T14:09:47.385 [DEBUG] [Thread-130317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:09:47.400 [DEBUG] [Thread-130317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:09:47.400 [INFO] [Thread-130317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] client lang: <none>
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] server lang: <none>
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] kex follows: False
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] Compression: none
2026-02-11T14:09:47.403 [DEBUG] [Thread-130317] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:09:47.421 [DEBUG] [Thread-130317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:09:47.421 [DEBUG] [Thread-130317] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:09:47.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:09:47.423 [DEBUG] [Thread-130317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:09:47.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:09:47.424 [DEBUG] [Thread-130317] [transport.py] [_log()] userauth is OK
2026-02-11T14:09:47.424 [DEBUG] [Thread-130317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:09:47.424 [DEBUG] [Thread-130317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:09:47.424 [DEBUG] [Thread-130317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:09:47.425 [DEBUG] [Thread-130317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:09:47.442 [INFO] [Thread-130317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:09:47.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:09:48.098 [DEBUG] [Thread-130317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:09:48.099 [DEBUG] [Thread-130317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:09:48.099 [DEBUG] [Thread-130317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:09:48.140 [DEBUG] [Thread-130317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:09:48.140 [DEBUG] [Thread-130317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:09:48.143 [DEBUG] [Thread-130317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:09:48.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:09:48.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:09:48.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:09:48.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:09:48.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:09:48.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:09:48.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:09:48.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:09:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:09:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.506393 -999.00  +24.50  37.96     43  +11.10 1 2 2 1 1   888    0 13.58 -7.25 ----- 37.9 38.0 315.2 42.4 30.9 -18.5 30.2 -18.5 30.2 -17.3 31.1 -16.4
2026-02-11T14:09:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:09:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:09:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.506393
2026-02-11T14:09:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:09:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:09:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:09:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:09:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:09:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:09:38', tmtdew=17.23, humidity=33.73, cloud=0.0, wind=39.73, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:09:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:09:48.170 [DEBUG] [Thread-130317] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:09:48.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:09:48.262 [DEBUG] [Thread-130320] [transport.py] [_log()] starting thread (client mode): 0xa5743e50
2026-02-11T14:09:48.262 [DEBUG] [Thread-130320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:09:48.276 [DEBUG] [Thread-130320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:09:48.276 [INFO] [Thread-130320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:09:48.283 [DEBUG] [Thread-130320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] client lang: <none>
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] server lang: <none>
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] kex follows: False
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:09:48.284 [DEBUG] [Thread-130320] [transport.py] [_log()] Compression: none
2026-02-11T14:09:48.285 [DEBUG] [Thread-130320] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:09:48.345 [DEBUG] [Thread-130320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:09:48.346 [DEBUG] [Thread-130320] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:09:48.346 [DEBUG] [Thread-130320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:09:48.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:09:48.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:09:48.405 [DEBUG] [Thread-130320] [transport.py] [_log()] userauth is OK
2026-02-11T14:09:48.405 [DEBUG] [Thread-130320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:09:48.405 [DEBUG] [Thread-130320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:09:48.405 [DEBUG] [Thread-130320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:09:48.405 [DEBUG] [Thread-130320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:09:48.424 [INFO] [Thread-130320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:09:48.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:09:48.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:09:49.278 [DEBUG] [Thread-130320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:09:49.279 [DEBUG] [Thread-130320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:09:49.326 [DEBUG] [Thread-130320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:09:49.326 [DEBUG] [Thread-130320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:09:49.334 [DEBUG] [Thread-130320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:09:49.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:09:49.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:09:49.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:09:49.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:09:49.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:09:49.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:09:49.369 [DEBUG] [Thread-130320] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:09:58.623 [DEBUG] [Thread-130322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:10:13.674 [DEBUG] [Thread-130323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:10:18.860 [DEBUG] [Thread-130324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:10:19.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:10:19.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:10:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:10:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 9, 38), 17.23, 33.73, 0.0, 39.73, 26.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:10:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:09:38
2026-02-11T14:10:21.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:10:21.735 [DEBUG] [Thread-130325] [transport.py] [_log()] starting thread (client mode): 0xa2db5930
2026-02-11T14:10:21.735 [DEBUG] [Thread-130325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:10:21.758 [DEBUG] [Thread-130325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:10:21.758 [INFO] [Thread-130325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:10:21.761 [DEBUG] [Thread-130325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:10:21.761 [DEBUG] [Thread-130325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:10:21.761 [DEBUG] [Thread-130325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] client lang: <none>
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] server lang: <none>
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] kex follows: False
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:10:21.762 [DEBUG] [Thread-130325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:10:21.763 [DEBUG] [Thread-130325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:10:21.763 [DEBUG] [Thread-130325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:10:21.763 [DEBUG] [Thread-130325] [transport.py] [_log()] Compression: none
2026-02-11T14:10:21.763 [DEBUG] [Thread-130325] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:10:21.776 [DEBUG] [Thread-130325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:10:21.776 [DEBUG] [Thread-130325] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:10:21.776 [DEBUG] [Thread-130325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:10:21.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:10:21.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:10:21.779 [DEBUG] [Thread-130325] [transport.py] [_log()] userauth is OK
2026-02-11T14:10:21.780 [DEBUG] [Thread-130325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:10:21.780 [DEBUG] [Thread-130325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:10:21.780 [DEBUG] [Thread-130325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:10:21.780 [DEBUG] [Thread-130325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:10:21.812 [INFO] [Thread-130325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:10:21.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:10:22.449 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:10:22.450 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:10:22.458 [DEBUG] [Thread-130325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:10:22.458 [DEBUG] [Thread-130325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:10:22.458 [DEBUG] [Thread-130325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:10:22.499 [DEBUG] [Thread-130325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:10:22.500 [DEBUG] [Thread-130325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:10:22.503 [DEBUG] [Thread-130325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:10:22.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:10:22.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:10:22.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:10:22.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:10:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:10:22.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:10:22.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:10:22.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:10:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:10:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.506740 -999.00  +24.40  30.44     43  +11.20 1 2 2 1 1   888    0 13.38 -8.72 ----- 36.1 30.4 300.7 50.4 31.1 -17.6 30.3 -17.0 30.4 -15.8 31.1 -17.2
2026-02-11T14:10:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:10:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:10:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.506740
2026-02-11T14:10:22.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:10:22.527 [DEBUG] [Thread-130325] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:10:22.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:10:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:10:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:10:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:10:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:09:38', tmtdew=17.23, humidity=33.73, cloud=0.0, wind=39.73, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:09:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:10:22.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:10:22.622 [DEBUG] [Thread-130328] [transport.py] [_log()] starting thread (client mode): 0xa2d11150
2026-02-11T14:10:22.622 [DEBUG] [Thread-130328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:10:22.636 [DEBUG] [Thread-130328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:10:22.636 [INFO] [Thread-130328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:10:22.643 [DEBUG] [Thread-130328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] client lang: <none>
2026-02-11T14:10:22.644 [DEBUG] [Thread-130328] [transport.py] [_log()] server lang: <none>
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] kex follows: False
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] Compression: none
2026-02-11T14:10:22.645 [DEBUG] [Thread-130328] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:10:22.704 [DEBUG] [Thread-130328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:10:22.704 [DEBUG] [Thread-130328] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:10:22.705 [DEBUG] [Thread-130328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:10:22.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:10:22.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:10:22.760 [DEBUG] [Thread-130328] [transport.py] [_log()] userauth is OK
2026-02-11T14:10:22.761 [DEBUG] [Thread-130328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:10:22.761 [DEBUG] [Thread-130328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:10:22.761 [DEBUG] [Thread-130328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:10:22.761 [DEBUG] [Thread-130328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:10:22.780 [INFO] [Thread-130328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:10:22.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:10:22.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:10:23.606 [DEBUG] [Thread-130328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:10:23.606 [DEBUG] [Thread-130328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:10:23.654 [DEBUG] [Thread-130328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:10:23.655 [DEBUG] [Thread-130328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:10:23.664 [DEBUG] [Thread-130328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:10:23.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:10:23.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:10:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:10:23.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:10:23.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:10:23.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:10:23.700 [DEBUG] [Thread-130328] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:10:28.713 [DEBUG] [Thread-130330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:10:43.767 [DEBUG] [Thread-130331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:10:53.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:10:53.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:10:53.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:10:55.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 10, 13), 16.22, 35.93, 0.0, 35.89, 25.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:10:55.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:10:13
2026-02-11T14:10:56.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:10:56.401 [DEBUG] [Thread-130332] [transport.py] [_log()] starting thread (client mode): 0xa57d7cd0
2026-02-11T14:10:56.401 [DEBUG] [Thread-130332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:10:56.421 [DEBUG] [Thread-130332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:10:56.421 [INFO] [Thread-130332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:10:56.424 [DEBUG] [Thread-130332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] client lang: <none>
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] server lang: <none>
2026-02-11T14:10:56.425 [DEBUG] [Thread-130332] [transport.py] [_log()] kex follows: False
2026-02-11T14:10:56.426 [DEBUG] [Thread-130332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:10:56.426 [DEBUG] [Thread-130332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:10:56.426 [DEBUG] [Thread-130332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:10:56.426 [DEBUG] [Thread-130332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:10:56.426 [DEBUG] [Thread-130332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:10:56.426 [DEBUG] [Thread-130332] [transport.py] [_log()] Compression: none
2026-02-11T14:10:56.426 [DEBUG] [Thread-130332] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:10:56.444 [DEBUG] [Thread-130332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:10:56.445 [DEBUG] [Thread-130332] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:10:56.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:10:56.446 [DEBUG] [Thread-130332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:10:56.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:10:56.449 [DEBUG] [Thread-130332] [transport.py] [_log()] userauth is OK
2026-02-11T14:10:56.449 [DEBUG] [Thread-130332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:10:56.449 [DEBUG] [Thread-130332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:10:56.449 [DEBUG] [Thread-130332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:10:56.449 [DEBUG] [Thread-130332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:10:56.474 [INFO] [Thread-130332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:10:56.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:10:57.187 [DEBUG] [Thread-130332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:10:57.187 [DEBUG] [Thread-130332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:10:57.187 [DEBUG] [Thread-130332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:10:57.228 [DEBUG] [Thread-130332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:10:57.228 [DEBUG] [Thread-130332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:10:57.232 [DEBUG] [Thread-130332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:10:57.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:10:57.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:10:57.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:10:57.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:10:57.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:10:57.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:10:57.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:10:57.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:10:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:10:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.507087 -999.00  +24.50  30.56     42  +10.90 1 2 2 1 1   888    0 13.26 -9.74 ----- 34.2 30.6 299.4 49.6 30.8 -19.1 30.2 -18.6 30.0 -20.6 31.1 -17.3
2026-02-11T14:10:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:10:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:10:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.507087
2026-02-11T14:10:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:10:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:10:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:10:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:10:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:10:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:10:13', tmtdew=16.22, humidity=35.93, cloud=0.0, wind=35.89, temperature=25.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:10:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:10:57.257 [DEBUG] [Thread-130332] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:10:57.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:10:57.352 [DEBUG] [Thread-130335] [transport.py] [_log()] starting thread (client mode): 0xa57d63b0
2026-02-11T14:10:57.353 [DEBUG] [Thread-130335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:10:57.367 [DEBUG] [Thread-130335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:10:57.367 [INFO] [Thread-130335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] client lang: <none>
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] server lang: <none>
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] kex follows: False
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:10:57.375 [DEBUG] [Thread-130335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:10:57.376 [DEBUG] [Thread-130335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:10:57.376 [DEBUG] [Thread-130335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:10:57.376 [DEBUG] [Thread-130335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:10:57.376 [DEBUG] [Thread-130335] [transport.py] [_log()] Compression: none
2026-02-11T14:10:57.376 [DEBUG] [Thread-130335] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:10:57.433 [DEBUG] [Thread-130335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:10:57.433 [DEBUG] [Thread-130335] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:10:57.434 [DEBUG] [Thread-130335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:10:57.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:10:57.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:10:57.492 [DEBUG] [Thread-130335] [transport.py] [_log()] userauth is OK
2026-02-11T14:10:57.493 [DEBUG] [Thread-130335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:10:57.493 [DEBUG] [Thread-130335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:10:57.493 [DEBUG] [Thread-130335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:10:57.493 [DEBUG] [Thread-130335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:10:57.511 [INFO] [Thread-130335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:10:57.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:10:57.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:10:58.342 [DEBUG] [Thread-130335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:10:58.342 [DEBUG] [Thread-130335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:10:58.390 [DEBUG] [Thread-130335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:10:58.390 [DEBUG] [Thread-130335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:10:58.400 [DEBUG] [Thread-130335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:10:58.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:10:58.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:10:58.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:10:58.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:10:58.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:10:58.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:10:58.438 [DEBUG] [Thread-130335] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:10:58.808 [DEBUG] [Thread-130337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:11:13.859 [DEBUG] [Thread-130338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:11:18.904 [DEBUG] [Thread-130339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:11:22.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:11:22.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:11:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:11:28.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:11:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:11:28.895 [DEBUG] [Thread-130340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:11:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 10, 49), 15.86, 36.23, 0.0, 33.47, 24.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:11:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:10:49
2026-02-11T14:11:30.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:11:30.994 [DEBUG] [Thread-130341] [transport.py] [_log()] starting thread (client mode): 0xa57d7e50
2026-02-11T14:11:30.994 [DEBUG] [Thread-130341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:11:31.015 [DEBUG] [Thread-130341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:11:31.015 [INFO] [Thread-130341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:11:31.018 [DEBUG] [Thread-130341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:11:31.018 [DEBUG] [Thread-130341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:11:31.018 [DEBUG] [Thread-130341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] client lang: <none>
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] server lang: <none>
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] kex follows: False
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] Compression: none
2026-02-11T14:11:31.019 [DEBUG] [Thread-130341] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:11:31.036 [DEBUG] [Thread-130341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:11:31.037 [DEBUG] [Thread-130341] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:11:31.037 [DEBUG] [Thread-130341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:11:31.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:11:31.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:11:31.040 [DEBUG] [Thread-130341] [transport.py] [_log()] userauth is OK
2026-02-11T14:11:31.040 [DEBUG] [Thread-130341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:11:31.040 [DEBUG] [Thread-130341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:11:31.040 [DEBUG] [Thread-130341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:11:31.040 [DEBUG] [Thread-130341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:11:31.066 [INFO] [Thread-130341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:11:31.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:11:31.694 [DEBUG] [Thread-130341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:11:31.695 [DEBUG] [Thread-130341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:11:31.695 [DEBUG] [Thread-130341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:11:31.735 [DEBUG] [Thread-130341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:11:31.736 [DEBUG] [Thread-130341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:11:31.738 [DEBUG] [Thread-130341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:11:31.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:11:31.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:11:31.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:11:31.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:11:31.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:11:31.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:11:31.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:11:31.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:11:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:11:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.507434 -999.00  +23.80  34.81     43  +10.70 1 2 2 1 1   888    0 13.33 -11.54 ----- 32.2 34.8 311.0 40.1 30.9 -18.5 30.2 -17.8 30.3 -17.8 31.1 -18.1
2026-02-11T14:11:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:11:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:11:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.507434
2026-02-11T14:11:31.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:11:31.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:11:31.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:11:31.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:11:31.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:11:31.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:10:49', tmtdew=15.86, humidity=36.23, cloud=0.0, wind=33.47, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:10:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:11:31.766 [DEBUG] [Thread-130341] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:11:31.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:11:31.861 [DEBUG] [Thread-130344] [transport.py] [_log()] starting thread (client mode): 0xa5741600
2026-02-11T14:11:31.861 [DEBUG] [Thread-130344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:11:31.877 [DEBUG] [Thread-130344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:11:31.877 [INFO] [Thread-130344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:11:31.884 [DEBUG] [Thread-130344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:11:31.884 [DEBUG] [Thread-130344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:11:31.884 [DEBUG] [Thread-130344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] client lang: <none>
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] server lang: <none>
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] kex follows: False
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] Compression: none
2026-02-11T14:11:31.885 [DEBUG] [Thread-130344] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:11:31.944 [DEBUG] [Thread-130344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:11:31.945 [DEBUG] [Thread-130344] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:11:31.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:11:31.946 [DEBUG] [Thread-130344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:11:31.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:11:32.000 [DEBUG] [Thread-130344] [transport.py] [_log()] userauth is OK
2026-02-11T14:11:32.001 [DEBUG] [Thread-130344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:11:32.001 [DEBUG] [Thread-130344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:11:32.001 [DEBUG] [Thread-130344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:11:32.001 [DEBUG] [Thread-130344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:11:32.020 [INFO] [Thread-130344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:11:32.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:11:32.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:11:32.860 [DEBUG] [Thread-130344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:11:32.860 [DEBUG] [Thread-130344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:11:32.909 [DEBUG] [Thread-130344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:11:32.909 [DEBUG] [Thread-130344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:11:32.917 [DEBUG] [Thread-130344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:11:32.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:11:32.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:11:32.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:11:32.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:11:32.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:11:32.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:11:32.951 [DEBUG] [Thread-130344] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:11:43.931 [DEBUG] [Thread-130346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:11:58.978 [DEBUG] [Thread-130347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:12:02.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:12:02.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:12:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:12:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 11, 25), 15.74, 36.46, 0.0, 32.31, 24.42, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:12:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:11:25
2026-02-11T14:12:05.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:12:05.734 [DEBUG] [Thread-130348] [transport.py] [_log()] starting thread (client mode): 0xa2d108b0
2026-02-11T14:12:05.734 [DEBUG] [Thread-130348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:12:05.755 [DEBUG] [Thread-130348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:12:05.755 [INFO] [Thread-130348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] client lang: <none>
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] server lang: <none>
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] kex follows: False
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:12:05.758 [DEBUG] [Thread-130348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:12:05.759 [DEBUG] [Thread-130348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:12:05.759 [DEBUG] [Thread-130348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:12:05.759 [DEBUG] [Thread-130348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:12:05.759 [DEBUG] [Thread-130348] [transport.py] [_log()] Compression: none
2026-02-11T14:12:05.759 [DEBUG] [Thread-130348] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:12:05.778 [DEBUG] [Thread-130348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:12:05.779 [DEBUG] [Thread-130348] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:12:05.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:12:05.780 [DEBUG] [Thread-130348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:12:05.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:12:05.782 [DEBUG] [Thread-130348] [transport.py] [_log()] userauth is OK
2026-02-11T14:12:05.783 [DEBUG] [Thread-130348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:12:05.783 [DEBUG] [Thread-130348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:12:05.783 [DEBUG] [Thread-130348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:12:05.783 [DEBUG] [Thread-130348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:12:05.806 [INFO] [Thread-130348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:12:05.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:12:06.451 [DEBUG] [Thread-130348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:12:06.451 [DEBUG] [Thread-130348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:12:06.452 [DEBUG] [Thread-130348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:12:06.492 [DEBUG] [Thread-130348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:12:06.492 [DEBUG] [Thread-130348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:12:06.495 [DEBUG] [Thread-130348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:12:06.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:12:06.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:12:06.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:12:06.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:12:06.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:12:06.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:12:06.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:12:06.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:12:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:12:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.507782 -999.00  +23.80  38.33     43  +10.60 1 2 2 1 1   888    0 12.98 -13.83 ----- 36.5 38.3 323.4 41.1 31.0 -19.4 30.2 -19.3 30.4 -17.5 31.1 -18.3
2026-02-11T14:12:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:12:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:12:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.507782
2026-02-11T14:12:06.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:12:06.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:12:06.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:12:06.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:12:06.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:12:06.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:11:25', tmtdew=15.74, humidity=36.46, cloud=0.0, wind=32.31, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:11:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:12:06.524 [DEBUG] [Thread-130348] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:12:06.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:12:06.631 [DEBUG] [Thread-130351] [transport.py] [_log()] starting thread (client mode): 0xa5740e50
2026-02-11T14:12:06.631 [DEBUG] [Thread-130351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:12:06.646 [DEBUG] [Thread-130351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:12:06.646 [INFO] [Thread-130351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:12:06.653 [DEBUG] [Thread-130351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:12:06.653 [DEBUG] [Thread-130351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:12:06.653 [DEBUG] [Thread-130351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:12:06.653 [DEBUG] [Thread-130351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:06.653 [DEBUG] [Thread-130351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:06.653 [DEBUG] [Thread-130351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:06.653 [DEBUG] [Thread-130351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] client lang: <none>
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] server lang: <none>
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] kex follows: False
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] Compression: none
2026-02-11T14:12:06.654 [DEBUG] [Thread-130351] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:12:06.711 [DEBUG] [Thread-130351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:12:06.712 [DEBUG] [Thread-130351] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:12:06.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:12:06.712 [DEBUG] [Thread-130351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:12:06.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:12:06.768 [DEBUG] [Thread-130351] [transport.py] [_log()] userauth is OK
2026-02-11T14:12:06.768 [DEBUG] [Thread-130351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:12:06.768 [DEBUG] [Thread-130351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:12:06.769 [DEBUG] [Thread-130351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:12:06.769 [DEBUG] [Thread-130351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:12:06.787 [INFO] [Thread-130351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:12:06.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:12:06.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:12:07.621 [DEBUG] [Thread-130351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:12:07.621 [DEBUG] [Thread-130351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:12:07.670 [DEBUG] [Thread-130351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:12:07.670 [DEBUG] [Thread-130351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:12:07.681 [DEBUG] [Thread-130351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:12:07.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:12:07.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:12:07.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
2026-02-11T14:12:07.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:12:07.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:12:07.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:12:07.724 [DEBUG] [Thread-130351] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:12:14.014 [DEBUG] [Thread-130353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:12:18.938 [DEBUG] [Thread-130354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:12:22.735 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:12:22.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:12:29.063 [DEBUG] [Thread-130355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:12:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:12:37.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:12:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:12:39.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 12, 1), 15.63, 37.09, 0.0, 23.68, 24.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:12:39.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:12:01
2026-02-11T14:12:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:12:40.508 [DEBUG] [Thread-130356] [transport.py] [_log()] starting thread (client mode): 0xa2d03610
2026-02-11T14:12:40.508 [DEBUG] [Thread-130356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:12:40.529 [DEBUG] [Thread-130356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:12:40.529 [INFO] [Thread-130356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] client lang: <none>
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] server lang: <none>
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] kex follows: False
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] Compression: none
2026-02-11T14:12:40.533 [DEBUG] [Thread-130356] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:12:40.549 [DEBUG] [Thread-130356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:12:40.550 [DEBUG] [Thread-130356] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:12:40.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:12:40.551 [DEBUG] [Thread-130356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:12:40.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:12:40.553 [DEBUG] [Thread-130356] [transport.py] [_log()] userauth is OK
2026-02-11T14:12:40.553 [DEBUG] [Thread-130356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:12:40.553 [DEBUG] [Thread-130356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:12:40.553 [DEBUG] [Thread-130356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:12:40.553 [DEBUG] [Thread-130356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:12:40.573 [INFO] [Thread-130356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:12:40.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:12:41.194 [DEBUG] [Thread-130356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:12:41.194 [DEBUG] [Thread-130356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:12:41.195 [DEBUG] [Thread-130356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:12:41.236 [DEBUG] [Thread-130356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:12:41.236 [DEBUG] [Thread-130356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:12:41.239 [DEBUG] [Thread-130356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:12:41.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:12:41.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:12:41.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:12:41.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:12:41.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:12:41.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:12:41.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:12:41.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:12:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:12:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.508129 -999.00  +24.10  31.40     43  +10.80 1 2 2 1 1   888    0 13.22 -16.03 ----- 26.8 31.4 298.0 34.4 31.0 -19.4 30.3 -18.2 30.3 -18.4 31.1 -19.7
2026-02-11T14:12:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:12:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:12:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.508129
2026-02-11T14:12:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:12:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:12:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:12:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:12:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:12:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:12:01', tmtdew=15.63, humidity=37.09, cloud=0.0, wind=23.68, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:11:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:12:41.264 [DEBUG] [Thread-130356] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:12:41.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:12:41.360 [DEBUG] [Thread-130359] [transport.py] [_log()] starting thread (client mode): 0xa2d6fac0
2026-02-11T14:12:41.360 [DEBUG] [Thread-130359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:12:41.374 [DEBUG] [Thread-130359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:12:41.375 [INFO] [Thread-130359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:12:41.383 [DEBUG] [Thread-130359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:12:41.383 [DEBUG] [Thread-130359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:12:41.383 [DEBUG] [Thread-130359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:12:41.383 [DEBUG] [Thread-130359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:41.383 [DEBUG] [Thread-130359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:12:41.383 [DEBUG] [Thread-130359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] client lang: <none>
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] server lang: <none>
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] kex follows: False
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:12:41.384 [DEBUG] [Thread-130359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:12:41.385 [DEBUG] [Thread-130359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:12:41.385 [DEBUG] [Thread-130359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:12:41.385 [DEBUG] [Thread-130359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:12:41.385 [DEBUG] [Thread-130359] [transport.py] [_log()] Compression: none
2026-02-11T14:12:41.385 [DEBUG] [Thread-130359] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:12:41.441 [DEBUG] [Thread-130359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:12:41.442 [DEBUG] [Thread-130359] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:12:41.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:12:41.444 [DEBUG] [Thread-130359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:12:41.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:12:41.501 [DEBUG] [Thread-130359] [transport.py] [_log()] userauth is OK
2026-02-11T14:12:41.501 [DEBUG] [Thread-130359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:12:41.502 [DEBUG] [Thread-130359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:12:41.502 [DEBUG] [Thread-130359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:12:41.502 [DEBUG] [Thread-130359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:12:41.521 [INFO] [Thread-130359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:12:41.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:12:41.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:12:42.365 [DEBUG] [Thread-130359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:12:42.366 [DEBUG] [Thread-130359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:12:42.414 [DEBUG] [Thread-130359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:12:42.414 [DEBUG] [Thread-130359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:12:42.424 [DEBUG] [Thread-130359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:12:42.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:12:42.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')
2026-02-11T14:12:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:12:42.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:12:42.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:12:42.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:12:42.463 [DEBUG] [Thread-130359] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:12:44.097 [DEBUG] [Thread-130361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:12:59.149 [DEBUG] [Thread-130362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:13:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:13:12.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:13:12.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:13:14.181 [DEBUG] [Thread-130363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:13:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 12, 37), 16.7, 34.69, 0.0, 30.41, 25.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:13:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:12:37
2026-02-11T14:13:14.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:13:15.013 [DEBUG] [Thread-130364] [transport.py] [_log()] starting thread (client mode): 0xa2d6e140
2026-02-11T14:13:15.013 [DEBUG] [Thread-130364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:13:15.033 [DEBUG] [Thread-130364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:13:15.033 [INFO] [Thread-130364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:13:15.036 [DEBUG] [Thread-130364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] client lang: <none>
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] server lang: <none>
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] kex follows: False
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] Compression: none
2026-02-11T14:13:15.037 [DEBUG] [Thread-130364] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:13:15.058 [DEBUG] [Thread-130364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:13:15.059 [DEBUG] [Thread-130364] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:13:15.059 [DEBUG] [Thread-130364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:13:15.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:13:15.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:13:15.061 [DEBUG] [Thread-130364] [transport.py] [_log()] userauth is OK
2026-02-11T14:13:15.061 [DEBUG] [Thread-130364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:13:15.062 [DEBUG] [Thread-130364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:13:15.062 [DEBUG] [Thread-130364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:13:15.062 [DEBUG] [Thread-130364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:13:15.086 [INFO] [Thread-130364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:13:15.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:13:15.718 [DEBUG] [Thread-130364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:13:15.718 [DEBUG] [Thread-130364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:13:15.718 [DEBUG] [Thread-130364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:13:15.759 [DEBUG] [Thread-130364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:13:15.760 [DEBUG] [Thread-130364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:13:15.763 [DEBUG] [Thread-130364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:13:15.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:13:15.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:13:15.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:13:15.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:13:15.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:13:15.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:13:15.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:13:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:13:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:13:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.508823 -999.00  +24.40  34.92     41  +10.40 1 2 2 1 1   888    0 12.98 -15.87 ----- 36.9 34.9 299.8 41.4 30.7 -19.9 30.2 -19.9 29.9 -19.3 31.0 -20.1
2026-02-11T14:13:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:13:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:13:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.508823
2026-02-11T14:13:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:13:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:13:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:13:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:13:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:13:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:12:37', tmtdew=16.7, humidity=34.69, cloud=0.0, wind=30.41, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:12:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:13:15.788 [DEBUG] [Thread-130364] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:13:15.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:13:15.883 [DEBUG] [Thread-130367] [transport.py] [_log()] starting thread (client mode): 0xa2d6d060
2026-02-11T14:13:15.883 [DEBUG] [Thread-130367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:13:15.897 [DEBUG] [Thread-130367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:13:15.897 [INFO] [Thread-130367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:13:15.905 [DEBUG] [Thread-130367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:13:15.905 [DEBUG] [Thread-130367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:13:15.905 [DEBUG] [Thread-130367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] client lang: <none>
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] server lang: <none>
2026-02-11T14:13:15.906 [DEBUG] [Thread-130367] [transport.py] [_log()] kex follows: False
2026-02-11T14:13:15.907 [DEBUG] [Thread-130367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:13:15.907 [DEBUG] [Thread-130367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:13:15.907 [DEBUG] [Thread-130367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:13:15.907 [DEBUG] [Thread-130367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:13:15.907 [DEBUG] [Thread-130367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:13:15.907 [DEBUG] [Thread-130367] [transport.py] [_log()] Compression: none
2026-02-11T14:13:15.907 [DEBUG] [Thread-130367] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:13:15.963 [DEBUG] [Thread-130367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:13:15.964 [DEBUG] [Thread-130367] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:13:15.964 [DEBUG] [Thread-130367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:13:15.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:13:15.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:13:16.020 [DEBUG] [Thread-130367] [transport.py] [_log()] userauth is OK
2026-02-11T14:13:16.020 [DEBUG] [Thread-130367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:13:16.021 [DEBUG] [Thread-130367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:13:16.021 [DEBUG] [Thread-130367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:13:16.021 [DEBUG] [Thread-130367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:13:16.042 [INFO] [Thread-130367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:13:16.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:13:16.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:13:16.859 [DEBUG] [Thread-130367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:13:16.859 [DEBUG] [Thread-130367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:13:16.907 [DEBUG] [Thread-130367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:13:16.907 [DEBUG] [Thread-130367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:13:16.916 [DEBUG] [Thread-130367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:13:16.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:13:16.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:13:16.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:13:16.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:13:16.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:13:16.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:13:16.948 [DEBUG] [Thread-130367] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:13:18.982 [DEBUG] [Thread-130369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:13:22.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:13:22.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:13:29.217 [DEBUG] [Thread-130370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:13:44.268 [DEBUG] [Thread-130371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:13:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:13:46.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:13:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:13:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 13, 12), 16.36, 35.57, 0.0, 34.95, 24.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:13:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:13:12
2026-02-11T14:13:49.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:13:49.268 [DEBUG] [Thread-130372] [transport.py] [_log()] starting thread (client mode): 0xa57d4fa0
2026-02-11T14:13:49.268 [DEBUG] [Thread-130372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:13:49.289 [DEBUG] [Thread-130372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:13:49.289 [INFO] [Thread-130372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] client lang: <none>
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] server lang: <none>
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] kex follows: False
2026-02-11T14:13:49.292 [DEBUG] [Thread-130372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:13:49.293 [DEBUG] [Thread-130372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:13:49.293 [DEBUG] [Thread-130372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:13:49.293 [DEBUG] [Thread-130372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:13:49.293 [DEBUG] [Thread-130372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:13:49.293 [DEBUG] [Thread-130372] [transport.py] [_log()] Compression: none
2026-02-11T14:13:49.293 [DEBUG] [Thread-130372] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:13:49.314 [DEBUG] [Thread-130372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:13:49.314 [DEBUG] [Thread-130372] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:13:49.315 [DEBUG] [Thread-130372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:13:49.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:13:49.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:13:49.317 [DEBUG] [Thread-130372] [transport.py] [_log()] userauth is OK
2026-02-11T14:13:49.318 [DEBUG] [Thread-130372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:13:49.318 [DEBUG] [Thread-130372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:13:49.318 [DEBUG] [Thread-130372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:13:49.318 [DEBUG] [Thread-130372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:13:49.353 [INFO] [Thread-130372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:13:49.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:13:50.167 [DEBUG] [Thread-130372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:13:50.168 [DEBUG] [Thread-130372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:13:50.168 [DEBUG] [Thread-130372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:13:50.208 [DEBUG] [Thread-130372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:13:50.208 [DEBUG] [Thread-130372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:13:50.211 [DEBUG] [Thread-130372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:13:50.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:13:50.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:13:50.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:13:50.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:13:50.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:13:50.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:13:50.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:13:50.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:13:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:13:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.509171 -999.00  +24.40  21.35     41  +10.60 1 2 1 1 1   888    0 13.20 -10.89 ----- 24.2 21.4 292.4 35.0 30.8 -20.1 30.2 -19.0 30.0 -20.0 31.1 -19.1
2026-02-11T14:13:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:13:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:13:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.509171
2026-02-11T14:13:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:13:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:13:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:13:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:13:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:13:50.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:13:12', tmtdew=16.36, humidity=35.57, cloud=0.0, wind=34.95, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:13:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:13:50.238 [DEBUG] [Thread-130372] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:13:50.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:13:50.334 [DEBUG] [Thread-130375] [transport.py] [_log()] starting thread (client mode): 0xa57733d0
2026-02-11T14:13:50.334 [DEBUG] [Thread-130375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:13:50.349 [DEBUG] [Thread-130375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:13:50.349 [INFO] [Thread-130375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:13:50.357 [DEBUG] [Thread-130375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:13:50.357 [DEBUG] [Thread-130375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:13:50.357 [DEBUG] [Thread-130375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:13:50.357 [DEBUG] [Thread-130375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:50.357 [DEBUG] [Thread-130375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:13:50.357 [DEBUG] [Thread-130375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] client lang: <none>
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] server lang: <none>
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] kex follows: False
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:13:50.358 [DEBUG] [Thread-130375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:13:50.359 [DEBUG] [Thread-130375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:13:50.359 [DEBUG] [Thread-130375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:13:50.359 [DEBUG] [Thread-130375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:13:50.359 [DEBUG] [Thread-130375] [transport.py] [_log()] Compression: none
2026-02-11T14:13:50.359 [DEBUG] [Thread-130375] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:13:50.416 [DEBUG] [Thread-130375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:13:50.417 [DEBUG] [Thread-130375] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:13:50.418 [DEBUG] [Thread-130375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:13:50.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:13:50.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:13:50.473 [DEBUG] [Thread-130375] [transport.py] [_log()] userauth is OK
2026-02-11T14:13:50.473 [DEBUG] [Thread-130375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:13:50.473 [DEBUG] [Thread-130375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:13:50.473 [DEBUG] [Thread-130375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:13:50.473 [DEBUG] [Thread-130375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:13:50.492 [INFO] [Thread-130375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:13:50.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:13:50.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:13:51.359 [DEBUG] [Thread-130375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:13:51.359 [DEBUG] [Thread-130375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:13:51.408 [DEBUG] [Thread-130375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:13:51.408 [DEBUG] [Thread-130375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:13:51.417 [DEBUG] [Thread-130375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:13:51.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:13: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')
2026-02-11T14:13:51.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:13:51.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:13:51.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:13:51.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:13:51.454 [DEBUG] [Thread-130375] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:13:59.302 [DEBUG] [Thread-130377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:14:14.352 [DEBUG] [Thread-130378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:14:19.025 [DEBUG] [Thread-130379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:14:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:14:21.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:14:21.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:14:23.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:14:23.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:14:23.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 13, 48), 16.33, 35.33, 0.0, 31.14, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:14:23.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:13:48
2026-02-11T14:14:23.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:14:23.798 [DEBUG] [Thread-130380] [transport.py] [_log()] starting thread (client mode): 0xa57d6e00
2026-02-11T14:14:23.798 [DEBUG] [Thread-130380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:14:23.818 [DEBUG] [Thread-130380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:14:23.819 [INFO] [Thread-130380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:14:23.820 [DEBUG] [Thread-130380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:14:23.820 [DEBUG] [Thread-130380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:14:23.820 [DEBUG] [Thread-130380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:14:23.820 [DEBUG] [Thread-130380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:23.820 [DEBUG] [Thread-130380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:23.820 [DEBUG] [Thread-130380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:23.820 [DEBUG] [Thread-130380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] client lang: <none>
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] server lang: <none>
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] kex follows: False
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] Compression: none
2026-02-11T14:14:23.821 [DEBUG] [Thread-130380] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:14:23.829 [DEBUG] [Thread-130380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:14:23.830 [DEBUG] [Thread-130380] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:14:23.830 [DEBUG] [Thread-130380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:14:23.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:14:23.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:14:23.831 [DEBUG] [Thread-130380] [transport.py] [_log()] userauth is OK
2026-02-11T14:14:23.832 [DEBUG] [Thread-130380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:14:23.832 [DEBUG] [Thread-130380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:14:23.832 [DEBUG] [Thread-130380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:14:23.832 [DEBUG] [Thread-130380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:14:23.846 [INFO] [Thread-130380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:14:23.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:14:24.477 [DEBUG] [Thread-130380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:14:24.477 [DEBUG] [Thread-130380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:14:24.477 [DEBUG] [Thread-130380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:14:24.517 [DEBUG] [Thread-130380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:14:24.517 [DEBUG] [Thread-130380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:14:24.520 [DEBUG] [Thread-130380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:14:24.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:14:24.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:14:24.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:14:24.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:14:24.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:14:24.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:14:24.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:14:24.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:14:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:14:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.509865 -999.00  +24.30  33.62     41  +10.50 1 2 2 1 1   888    0 13.36 -3.68 ----- 24.3 33.6 283.8 46.1 30.7 -22.7 30.1 -20.0 29.9 -18.6 30.9 -20.4
2026-02-11T14:14:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:14:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:14:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.509865
2026-02-11T14:14:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:14:24.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:14:24.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:14:24.546 [DEBUG] [Thread-130380] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:14:24.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:14:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:14:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:13:48', tmtdew=16.33, humidity=35.33, cloud=0.0, wind=31.14, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:14:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:14:24.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:14:24.653 [DEBUG] [Thread-130383] [transport.py] [_log()] starting thread (client mode): 0xa57595a0
2026-02-11T14:14:24.653 [DEBUG] [Thread-130383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:14:24.667 [DEBUG] [Thread-130383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:14:24.668 [INFO] [Thread-130383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:14:24.675 [DEBUG] [Thread-130383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] client lang: <none>
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] server lang: <none>
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] kex follows: False
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:14:24.676 [DEBUG] [Thread-130383] [transport.py] [_log()] Compression: none
2026-02-11T14:14:24.677 [DEBUG] [Thread-130383] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:14:24.740 [DEBUG] [Thread-130383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:14:24.741 [DEBUG] [Thread-130383] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:14:24.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:14:24.742 [DEBUG] [Thread-130383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:14:24.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:14:24.797 [DEBUG] [Thread-130383] [transport.py] [_log()] userauth is OK
2026-02-11T14:14:24.797 [DEBUG] [Thread-130383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:14:24.797 [DEBUG] [Thread-130383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:14:24.797 [DEBUG] [Thread-130383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:14:24.797 [DEBUG] [Thread-130383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:14:24.816 [INFO] [Thread-130383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:14:24.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:14:24.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:14:25.664 [DEBUG] [Thread-130383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:14:25.665 [DEBUG] [Thread-130383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:14:25.712 [DEBUG] [Thread-130383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:14:25.713 [DEBUG] [Thread-130383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:14:25.722 [DEBUG] [Thread-130383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:14:25.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:14:25.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:14:25.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:14:25.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:14:25.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:14:25.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:14:25.760 [DEBUG] [Thread-130383] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:14:29.390 [DEBUG] [Thread-130385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:14:44.442 [DEBUG] [Thread-130386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:14:55.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:14:55.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:14:55.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:14:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 14, 24), 16.47, 35.04, 0.0, 32.66, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:14:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:14:24
2026-02-11T14:14:58.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:14:58.378 [DEBUG] [Thread-130387] [transport.py] [_log()] starting thread (client mode): 0xa2d02dd0
2026-02-11T14:14:58.379 [DEBUG] [Thread-130387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:14:58.397 [DEBUG] [Thread-130387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:14:58.397 [INFO] [Thread-130387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] client lang: <none>
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] server lang: <none>
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] kex follows: False
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] Compression: none
2026-02-11T14:14:58.400 [DEBUG] [Thread-130387] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:14:58.419 [DEBUG] [Thread-130387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:14:58.420 [DEBUG] [Thread-130387] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:14:58.420 [DEBUG] [Thread-130387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:14:58.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:14:58.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:14:58.423 [DEBUG] [Thread-130387] [transport.py] [_log()] userauth is OK
2026-02-11T14:14:58.423 [DEBUG] [Thread-130387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:14:58.423 [DEBUG] [Thread-130387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:14:58.423 [DEBUG] [Thread-130387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:14:58.423 [DEBUG] [Thread-130387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:14:58.448 [INFO] [Thread-130387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:14:58.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:14:59.036 [DEBUG] [Thread-130387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:14:59.036 [DEBUG] [Thread-130387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:14:59.037 [DEBUG] [Thread-130387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:14:59.076 [DEBUG] [Thread-130387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:14:59.077 [DEBUG] [Thread-130387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:14:59.080 [DEBUG] [Thread-130387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:14:59.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:14:59.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:14:59.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:14:59.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:14:59.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:14:59.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:14:59.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:14:59.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:14:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:14:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.510212 -999.00  +24.20  33.69     41  +10.30 1 2 2 1 1   888    0 13.87 -0.65 ----- 26.7 33.7 277.6 37.9 30.4 -23.0 29.9 -21.1 29.6 -20.1 30.6 -21.1
2026-02-11T14:14:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:14:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:14:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.510212
2026-02-11T14:14:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:14:59.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:14:59.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:14:59.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:14:59.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:14:59.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:14:24', tmtdew=16.47, humidity=35.04, cloud=0.0, wind=32.66, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:14:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:14:59.106 [DEBUG] [Thread-130387] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:14:59.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:14:59.201 [DEBUG] [Thread-130390] [transport.py] [_log()] starting thread (client mode): 0xa5740280
2026-02-11T14:14:59.201 [DEBUG] [Thread-130390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:14:59.218 [DEBUG] [Thread-130390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:14:59.219 [INFO] [Thread-130390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:14:59.229 [DEBUG] [Thread-130390] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:14:59.229 [DEBUG] [Thread-130390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:14:59.229 [DEBUG] [Thread-130390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:14:59.229 [DEBUG] [Thread-130390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:59.229 [DEBUG] [Thread-130390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] client lang: <none>
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] server lang: <none>
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] kex follows: False
2026-02-11T14:14:59.230 [DEBUG] [Thread-130390] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:14:59.231 [DEBUG] [Thread-130390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:14:59.231 [DEBUG] [Thread-130390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:14:59.231 [DEBUG] [Thread-130390] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:14:59.231 [DEBUG] [Thread-130390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:14:59.231 [DEBUG] [Thread-130390] [transport.py] [_log()] Compression: none
2026-02-11T14:14:59.231 [DEBUG] [Thread-130390] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:14:59.291 [DEBUG] [Thread-130390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:14:59.292 [DEBUG] [Thread-130390] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:14:59.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:14:59.293 [DEBUG] [Thread-130390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:14:59.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:14:59.348 [DEBUG] [Thread-130390] [transport.py] [_log()] userauth is OK
2026-02-11T14:14:59.348 [DEBUG] [Thread-130390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:14:59.348 [DEBUG] [Thread-130390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:14:59.349 [DEBUG] [Thread-130390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:14:59.349 [DEBUG] [Thread-130390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:14:59.369 [INFO] [Thread-130390] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:14:59.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:14:59.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:14:59.478 [DEBUG] [Thread-130392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:15:00.205 [DEBUG] [Thread-130390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:15:00.205 [DEBUG] [Thread-130390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:15:00.253 [DEBUG] [Thread-130390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:15:00.253 [DEBUG] [Thread-130390] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:15:00.262 [DEBUG] [Thread-130390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:15:00.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:15:00.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:15:00.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:15:00.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:15:00.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:15:00.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:15:00.301 [DEBUG] [Thread-130390] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:15:14.538 [DEBUG] [Thread-130393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:15:19.059 [DEBUG] [Thread-130394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:15:23.159 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:15:23.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:15:29.579 [DEBUG] [Thread-130395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:15:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:15:30.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:15:30.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:15:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 14, 59), 16.0, 36.17, 0.0, 36.84, 24.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:15:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:14:59
2026-02-11T14:15:32.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:15:32.864 [DEBUG] [Thread-130396] [transport.py] [_log()] starting thread (client mode): 0xa2d03dc0
2026-02-11T14:15:32.864 [DEBUG] [Thread-130396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:15:32.884 [DEBUG] [Thread-130396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:15:32.884 [INFO] [Thread-130396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] client lang: <none>
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] server lang: <none>
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] kex follows: False
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] Compression: none
2026-02-11T14:15:32.887 [DEBUG] [Thread-130396] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:15:32.903 [DEBUG] [Thread-130396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:15:32.904 [DEBUG] [Thread-130396] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:15:32.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:15:32.905 [DEBUG] [Thread-130396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:15:32.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:15:32.906 [DEBUG] [Thread-130396] [transport.py] [_log()] userauth is OK
2026-02-11T14:15:32.907 [DEBUG] [Thread-130396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:15:32.907 [DEBUG] [Thread-130396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:15:32.907 [DEBUG] [Thread-130396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:15:32.907 [DEBUG] [Thread-130396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:15:32.931 [INFO] [Thread-130396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:15:32.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:15:33.603 [DEBUG] [Thread-130396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:15:33.603 [DEBUG] [Thread-130396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:15:33.604 [DEBUG] [Thread-130396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:15:33.644 [DEBUG] [Thread-130396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:15:33.645 [DEBUG] [Thread-130396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:15:33.648 [DEBUG] [Thread-130396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:15:33.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:15:33.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:15:33.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:15:33.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:15:33.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:15:33.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:15:33.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:15:33.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:15:33.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:15:33.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.510559 -999.00  +23.90  28.38     42  +10.20 1 2 1 1 1   888    0 13.72 1.92 ----- 25.2 28.4 292.4 40.5 30.4 -21.6 29.8 -20.8 29.4 -22.4 30.6 -20.8
2026-02-11T14:15:33.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:15:33.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:15:33.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.510559
2026-02-11T14:15:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:15:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:15:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:15:33.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:15:33.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:15:33.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:14:59', tmtdew=16.0, humidity=36.17, cloud=0.0, wind=36.84, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:15:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:15:33.678 [DEBUG] [Thread-130396] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:15:33.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:15:33.776 [DEBUG] [Thread-130399] [transport.py] [_log()] starting thread (client mode): 0xa81d7ca0
2026-02-11T14:15:33.777 [DEBUG] [Thread-130399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:15:33.792 [DEBUG] [Thread-130399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:15:33.792 [INFO] [Thread-130399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] client lang: <none>
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] server lang: <none>
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] kex follows: False
2026-02-11T14:15:33.802 [DEBUG] [Thread-130399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:15:33.803 [DEBUG] [Thread-130399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:15:33.803 [DEBUG] [Thread-130399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:15:33.803 [DEBUG] [Thread-130399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:15:33.803 [DEBUG] [Thread-130399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:15:33.803 [DEBUG] [Thread-130399] [transport.py] [_log()] Compression: none
2026-02-11T14:15:33.803 [DEBUG] [Thread-130399] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:15:33.861 [DEBUG] [Thread-130399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:15:33.862 [DEBUG] [Thread-130399] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:15:33.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:15:33.863 [DEBUG] [Thread-130399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:15:33.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:15:33.920 [DEBUG] [Thread-130399] [transport.py] [_log()] userauth is OK
2026-02-11T14:15:33.920 [DEBUG] [Thread-130399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:15:33.921 [DEBUG] [Thread-130399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:15:33.921 [DEBUG] [Thread-130399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:15:33.921 [DEBUG] [Thread-130399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:15:33.939 [INFO] [Thread-130399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:15:33.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:15:33.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:15:34.757 [DEBUG] [Thread-130399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:15:34.757 [DEBUG] [Thread-130399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:15:34.806 [DEBUG] [Thread-130399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:15:34.806 [DEBUG] [Thread-130399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:15:34.815 [DEBUG] [Thread-130399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:15:34.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:15:34.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:15:34.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:15:34.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:15:34.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:15:34.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:15:34.856 [DEBUG] [Thread-130399] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:15:44.617 [DEBUG] [Thread-130401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:15:59.667 [DEBUG] [Thread-130402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:16:04.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:16:04.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:16:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:16:06.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 15, 34), 17.6, 32.71, 0.0, 29.04, 25.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:16:06.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:15:34
2026-02-11T14:16:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:16:07.192 [DEBUG] [Thread-130403] [transport.py] [_log()] starting thread (client mode): 0xa57732b0
2026-02-11T14:16:07.192 [DEBUG] [Thread-130403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:16:07.212 [DEBUG] [Thread-130403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:16:07.212 [INFO] [Thread-130403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:16:07.215 [DEBUG] [Thread-130403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:16:07.215 [DEBUG] [Thread-130403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:16:07.215 [DEBUG] [Thread-130403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] client lang: <none>
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] server lang: <none>
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] kex follows: False
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:16:07.216 [DEBUG] [Thread-130403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:16:07.217 [DEBUG] [Thread-130403] [transport.py] [_log()] Compression: none
2026-02-11T14:16:07.217 [DEBUG] [Thread-130403] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:16:07.237 [DEBUG] [Thread-130403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:16:07.237 [DEBUG] [Thread-130403] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:16:07.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:16:07.238 [DEBUG] [Thread-130403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:16:07.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:16:07.240 [DEBUG] [Thread-130403] [transport.py] [_log()] userauth is OK
2026-02-11T14:16:07.240 [DEBUG] [Thread-130403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:16:07.241 [DEBUG] [Thread-130403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:16:07.241 [DEBUG] [Thread-130403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:16:07.241 [DEBUG] [Thread-130403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:16:07.265 [INFO] [Thread-130403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:16:07.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:16:07.862 [DEBUG] [Thread-130403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:16:07.862 [DEBUG] [Thread-130403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:16:07.863 [DEBUG] [Thread-130403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:16:07.903 [DEBUG] [Thread-130403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:16:07.903 [DEBUG] [Thread-130403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:16:07.905 [DEBUG] [Thread-130403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:16:07.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:16:07.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:16:07.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:16:07.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:16:07.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:16:07.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:16:07.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.510907 -999.00  +24.00  22.56     42  +10.40 1 2 1 1 1   888    0 13.71 2.89 ----- 25.5 22.6 290.7 30.9 30.4 -21.8 29.9 -20.9 29.5 -20.6 30.6 -19.8
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.510907
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:16:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:15:34', tmtdew=17.6, humidity=32.71, cloud=0.0, wind=29.04, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:15:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:16:07.926 [DEBUG] [Thread-130403] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:16:08.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:16:08.017 [DEBUG] [Thread-130406] [transport.py] [_log()] starting thread (client mode): 0xa5772650
2026-02-11T14:16:08.017 [DEBUG] [Thread-130406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:16:08.032 [DEBUG] [Thread-130406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:16:08.032 [INFO] [Thread-130406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:16:08.040 [DEBUG] [Thread-130406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:16:08.040 [DEBUG] [Thread-130406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:16:08.040 [DEBUG] [Thread-130406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:16:08.040 [DEBUG] [Thread-130406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:08.040 [DEBUG] [Thread-130406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] client lang: <none>
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] server lang: <none>
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] kex follows: False
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] Compression: none
2026-02-11T14:16:08.041 [DEBUG] [Thread-130406] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:16:08.099 [DEBUG] [Thread-130406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:16:08.099 [DEBUG] [Thread-130406] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:16:08.100 [DEBUG] [Thread-130406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:16:08.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:16:08.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:16:08.155 [DEBUG] [Thread-130406] [transport.py] [_log()] userauth is OK
2026-02-11T14:16:08.156 [DEBUG] [Thread-130406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:16:08.156 [DEBUG] [Thread-130406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:16:08.156 [DEBUG] [Thread-130406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:16:08.156 [DEBUG] [Thread-130406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:16:08.174 [INFO] [Thread-130406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:16:08.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:16:08.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:16:09.000 [DEBUG] [Thread-130406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:16:09.000 [DEBUG] [Thread-130406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:16:09.048 [DEBUG] [Thread-130406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:16:09.048 [DEBUG] [Thread-130406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:16:09.057 [DEBUG] [Thread-130406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:16:09.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:16:09.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:16:09.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:16:09.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:16:09.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:16:09.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:16:09.092 [DEBUG] [Thread-130406] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:16:14.702 [DEBUG] [Thread-130408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:16:19.101 [DEBUG] [Thread-130409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:16:23.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:16:23.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:16:29.755 [DEBUG] [Thread-130410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:16:39.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:16:39.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:16:39.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:16:40.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 16, 10), 15.99, 35.8, 0.0, 28.14, 24.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:16:40.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:16:10
2026-02-11T14:16:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:16:41.395 [DEBUG] [Thread-130411] [transport.py] [_log()] starting thread (client mode): 0xa57703a0
2026-02-11T14:16:41.395 [DEBUG] [Thread-130411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:16:41.415 [DEBUG] [Thread-130411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:16:41.415 [INFO] [Thread-130411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:16:41.418 [DEBUG] [Thread-130411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] client lang: <none>
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] server lang: <none>
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] kex follows: False
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] Compression: none
2026-02-11T14:16:41.419 [DEBUG] [Thread-130411] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:16:41.436 [DEBUG] [Thread-130411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:16:41.436 [DEBUG] [Thread-130411] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:16:41.437 [DEBUG] [Thread-130411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:16:41.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:16:41.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:16:41.439 [DEBUG] [Thread-130411] [transport.py] [_log()] userauth is OK
2026-02-11T14:16:41.439 [DEBUG] [Thread-130411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:16:41.439 [DEBUG] [Thread-130411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:16:41.439 [DEBUG] [Thread-130411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:16:41.440 [DEBUG] [Thread-130411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:16:41.456 [INFO] [Thread-130411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:16:41.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:16:42.104 [DEBUG] [Thread-130411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:16:42.104 [DEBUG] [Thread-130411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:16:42.104 [DEBUG] [Thread-130411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:16:42.145 [DEBUG] [Thread-130411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:16:42.146 [DEBUG] [Thread-130411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:16:42.149 [DEBUG] [Thread-130411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:16:42.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:16:42.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:16:42.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:16:42.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:16:42.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:16:42.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:16:42.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:16:42.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:16:42.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:16:42.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.511254 -999.00  +24.30  27.81     41  +10.40 1 2 1 1 1   888    0 13.57 2.63 ----- 34.2 27.8 277.5 36.2 30.4 -23.2 29.9 -21.0 29.7 -18.6 30.6 -20.6
2026-02-11T14:16:42.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:16:42.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:16:42.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.511254
2026-02-11T14:16:42.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:16:42.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:16:42.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:16:42.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:16:42.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:16:42.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:16:10', tmtdew=15.99, humidity=35.8, cloud=0.0, wind=28.14, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:16:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:16:42.172 [DEBUG] [Thread-130411] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:16:42.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:16:42.267 [DEBUG] [Thread-130414] [transport.py] [_log()] starting thread (client mode): 0xa2d00fa0
2026-02-11T14:16:42.267 [DEBUG] [Thread-130414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:16:42.282 [DEBUG] [Thread-130414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:16:42.282 [INFO] [Thread-130414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:16:42.289 [DEBUG] [Thread-130414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:16:42.290 [DEBUG] [Thread-130414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] client lang: <none>
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] server lang: <none>
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] kex follows: False
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:16:42.291 [DEBUG] [Thread-130414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:16:42.292 [DEBUG] [Thread-130414] [transport.py] [_log()] Compression: none
2026-02-11T14:16:42.292 [DEBUG] [Thread-130414] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:16:42.349 [DEBUG] [Thread-130414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:16:42.350 [DEBUG] [Thread-130414] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:16:42.350 [DEBUG] [Thread-130414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:16:42.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:16:42.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:16:42.408 [DEBUG] [Thread-130414] [transport.py] [_log()] userauth is OK
2026-02-11T14:16:42.408 [DEBUG] [Thread-130414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:16:42.409 [DEBUG] [Thread-130414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:16:42.409 [DEBUG] [Thread-130414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:16:42.409 [DEBUG] [Thread-130414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:16:42.427 [INFO] [Thread-130414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:16:42.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:16:42.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:16:43.242 [DEBUG] [Thread-130414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:16:43.242 [DEBUG] [Thread-130414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:16:43.290 [DEBUG] [Thread-130414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:16:43.290 [DEBUG] [Thread-130414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:16:43.299 [DEBUG] [Thread-130414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:16:43.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:16: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')
2026-02-11T14:16:43.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:16:43.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:16:43.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:16:43.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:16:43.333 [DEBUG] [Thread-130414] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:16:44.795 [DEBUG] [Thread-130416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:16:59.836 [DEBUG] [Thread-130417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:17:13.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:17:13.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:17:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:17:14.872 [DEBUG] [Thread-130418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:17:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 16, 46), 16.37, 35.24, 0.0, 28.46, 24.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:17:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:16:46
2026-02-11T14:17:15.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:17:15.850 [DEBUG] [Thread-130419] [transport.py] [_log()] starting thread (client mode): 0xa5771570
2026-02-11T14:17:15.851 [DEBUG] [Thread-130419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:17:15.885 [DEBUG] [Thread-130419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:17:15.886 [INFO] [Thread-130419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] client lang: <none>
2026-02-11T14:17:15.887 [DEBUG] [Thread-130419] [transport.py] [_log()] server lang: <none>
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] kex follows: False
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] Compression: none
2026-02-11T14:17:15.888 [DEBUG] [Thread-130419] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:17:15.897 [DEBUG] [Thread-130419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:17:15.898 [DEBUG] [Thread-130419] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:17:15.898 [DEBUG] [Thread-130419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:17:15.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:17:15.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:17:15.901 [DEBUG] [Thread-130419] [transport.py] [_log()] userauth is OK
2026-02-11T14:17:15.901 [DEBUG] [Thread-130419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:17:15.901 [DEBUG] [Thread-130419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:17:15.901 [DEBUG] [Thread-130419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:17:15.901 [DEBUG] [Thread-130419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:17:15.926 [INFO] [Thread-130419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:17:15.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:17:16.569 [DEBUG] [Thread-130419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:17:16.569 [DEBUG] [Thread-130419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:17:16.570 [DEBUG] [Thread-130419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:17:16.610 [DEBUG] [Thread-130419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:17:16.610 [DEBUG] [Thread-130419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:17:16.613 [DEBUG] [Thread-130419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:17:16.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:17:16.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:17:16.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:17:16.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:17:16.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:17:16.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:17:16.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:17:16.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:17:16.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.511601 -999.00  +24.00  24.29     41  +10.20 1 2 1 1 1   888    0 13.92 4.55 ----- 30.1 24.3 301.2 37.7 30.4 -22.6 29.8 -20.7 29.8 -18.9 30.6 -19.9
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.511601
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:17:16.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:16:46', tmtdew=16.37, humidity=35.24, cloud=0.0, wind=28.46, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:16:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:17:16.632 [DEBUG] [Thread-130419] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:17:16.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:17:16.717 [DEBUG] [Thread-130422] [transport.py] [_log()] starting thread (client mode): 0xa2d6c220
2026-02-11T14:17:16.717 [DEBUG] [Thread-130422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:17:16.732 [DEBUG] [Thread-130422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:17:16.733 [INFO] [Thread-130422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:17:16.740 [DEBUG] [Thread-130422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:17:16.740 [DEBUG] [Thread-130422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] client lang: <none>
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] server lang: <none>
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] kex follows: False
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:17:16.741 [DEBUG] [Thread-130422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:17:16.742 [DEBUG] [Thread-130422] [transport.py] [_log()] Compression: none
2026-02-11T14:17:16.742 [DEBUG] [Thread-130422] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:17:16.800 [DEBUG] [Thread-130422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:17:16.801 [DEBUG] [Thread-130422] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:17:16.801 [DEBUG] [Thread-130422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:17:16.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:17:16.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:17:16.856 [DEBUG] [Thread-130422] [transport.py] [_log()] userauth is OK
2026-02-11T14:17:16.856 [DEBUG] [Thread-130422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:17:16.857 [DEBUG] [Thread-130422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:17:16.857 [DEBUG] [Thread-130422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:17:16.857 [DEBUG] [Thread-130422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:17:16.876 [INFO] [Thread-130422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:17:16.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:17:16.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:17:17.727 [DEBUG] [Thread-130422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:17:17.727 [DEBUG] [Thread-130422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:17:17.776 [DEBUG] [Thread-130422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:17:17.776 [DEBUG] [Thread-130422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:17:17.784 [DEBUG] [Thread-130422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:17:17.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:17:17.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:17:17.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:17:17.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:17:17.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:17:17.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:17:17.816 [DEBUG] [Thread-130422] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:17:19.149 [DEBUG] [Thread-130424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:17:23.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:17:23.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:17:29.912 [DEBUG] [Thread-130425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:17:44.975 [DEBUG] [Thread-130426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:17:47.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:17:47.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:17:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:17:49.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 17, 21), 16.29, 35.39, 0.0, 30.63, 24.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:17:49.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:17:21
2026-02-11T14:17:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:17:50.200 [DEBUG] [Thread-130427] [transport.py] [_log()] starting thread (client mode): 0xa2d6fbb0
2026-02-11T14:17:50.200 [DEBUG] [Thread-130427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:17:50.221 [DEBUG] [Thread-130427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:17:50.221 [INFO] [Thread-130427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:17:50.225 [DEBUG] [Thread-130427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:17:50.225 [DEBUG] [Thread-130427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:17:50.225 [DEBUG] [Thread-130427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:17:50.225 [DEBUG] [Thread-130427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:50.225 [DEBUG] [Thread-130427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] client lang: <none>
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] server lang: <none>
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] kex follows: False
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:17:50.226 [DEBUG] [Thread-130427] [transport.py] [_log()] Compression: none
2026-02-11T14:17:50.227 [DEBUG] [Thread-130427] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:17:50.243 [DEBUG] [Thread-130427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:17:50.244 [DEBUG] [Thread-130427] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:17:50.244 [DEBUG] [Thread-130427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:17:50.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:17:50.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:17:50.246 [DEBUG] [Thread-130427] [transport.py] [_log()] userauth is OK
2026-02-11T14:17:50.246 [DEBUG] [Thread-130427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:17:50.247 [DEBUG] [Thread-130427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:17:50.247 [DEBUG] [Thread-130427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:17:50.247 [DEBUG] [Thread-130427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:17:50.270 [INFO] [Thread-130427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:17:50.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:17:50.917 [DEBUG] [Thread-130427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:17:50.917 [DEBUG] [Thread-130427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:17:50.917 [DEBUG] [Thread-130427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:17:50.957 [DEBUG] [Thread-130427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:17:50.958 [DEBUG] [Thread-130427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:17:50.961 [DEBUG] [Thread-130427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:17:50.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:17:50.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:17:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:17:50.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:17:50.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:17:50.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:17:50.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:17:50.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:17:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:17:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.511948 -999.00  +24.60  32.81     40  +10.50 1 2 2 1 1   888    0 13.74 5.54 ----- 30.8 32.8 280.5 40.0 30.4 -22.1 29.9 -21.4 29.7 -21.2 30.6 -20.1
2026-02-11T14:17:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:17:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:17:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.511948
2026-02-11T14:17:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:17:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:17:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:17:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:17:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:17:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:17:21', tmtdew=16.29, humidity=35.39, cloud=0.0, wind=30.63, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:17:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:17:50.990 [DEBUG] [Thread-130427] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:17:51.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:17:51.086 [DEBUG] [Thread-130430] [transport.py] [_log()] starting thread (client mode): 0xa57d5ab0
2026-02-11T14:17:51.086 [DEBUG] [Thread-130430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:17:51.101 [DEBUG] [Thread-130430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:17:51.101 [INFO] [Thread-130430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:17:51.109 [DEBUG] [Thread-130430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:17:51.110 [DEBUG] [Thread-130430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:17:51.110 [DEBUG] [Thread-130430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:17:51.110 [DEBUG] [Thread-130430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:51.110 [DEBUG] [Thread-130430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:17:51.110 [DEBUG] [Thread-130430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:51.110 [DEBUG] [Thread-130430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] client lang: <none>
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] server lang: <none>
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] kex follows: False
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] Compression: none
2026-02-11T14:17:51.111 [DEBUG] [Thread-130430] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:17:51.168 [DEBUG] [Thread-130430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:17:51.169 [DEBUG] [Thread-130430] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:17:51.170 [DEBUG] [Thread-130430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:17:51.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:17:51.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:17:51.225 [DEBUG] [Thread-130430] [transport.py] [_log()] userauth is OK
2026-02-11T14:17:51.225 [DEBUG] [Thread-130430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:17:51.225 [DEBUG] [Thread-130430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:17:51.225 [DEBUG] [Thread-130430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:17:51.225 [DEBUG] [Thread-130430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:17:51.244 [INFO] [Thread-130430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:17:51.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:17:51.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:17:52.119 [DEBUG] [Thread-130430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:17:52.119 [DEBUG] [Thread-130430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:17:52.167 [DEBUG] [Thread-130430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:17:52.167 [DEBUG] [Thread-130430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:17:52.176 [DEBUG] [Thread-130430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:17:52.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:17: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')
2026-02-11T14:17:52.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:17:52.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:17:52.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:17:52.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:17:52.217 [DEBUG] [Thread-130430] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:18:00.012 [DEBUG] [Thread-130432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:18:15.065 [DEBUG] [Thread-130433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:18:19.184 [DEBUG] [Thread-130434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:18:22.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:18:22.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:18:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:18:23.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:18:23.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:18:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 17, 57), 16.53, 34.8, 0.0, 37.12, 24.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:18:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:17:57
2026-02-11T14:18:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:18:24.579 [DEBUG] [Thread-130435] [transport.py] [_log()] starting thread (client mode): 0xa57d6e00
2026-02-11T14:18:24.579 [DEBUG] [Thread-130435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:18:24.599 [DEBUG] [Thread-130435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:18:24.599 [INFO] [Thread-130435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:18:24.602 [DEBUG] [Thread-130435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:18:24.602 [DEBUG] [Thread-130435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:18:24.602 [DEBUG] [Thread-130435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:18:24.602 [DEBUG] [Thread-130435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:24.602 [DEBUG] [Thread-130435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] client lang: <none>
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] server lang: <none>
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] kex follows: False
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] Compression: none
2026-02-11T14:18:24.603 [DEBUG] [Thread-130435] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:18:24.620 [DEBUG] [Thread-130435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:18:24.621 [DEBUG] [Thread-130435] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:18:24.621 [DEBUG] [Thread-130435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:18:24.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:18:24.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:18:24.665 [DEBUG] [Thread-130435] [transport.py] [_log()] userauth is OK
2026-02-11T14:18:24.666 [DEBUG] [Thread-130435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:18:24.666 [DEBUG] [Thread-130435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:18:24.666 [DEBUG] [Thread-130435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:18:24.666 [DEBUG] [Thread-130435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:18:24.704 [INFO] [Thread-130435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:18:24.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:18:25.299 [DEBUG] [Thread-130435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:18:25.299 [DEBUG] [Thread-130435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:18:25.299 [DEBUG] [Thread-130435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:18:25.340 [DEBUG] [Thread-130435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:18:25.341 [DEBUG] [Thread-130435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:18:25.344 [DEBUG] [Thread-130435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:18:25.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:18:25.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:18:25.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:18:25.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:18:25.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:18:25.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:18:25.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:18:25.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:18:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:18:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.512643 -999.00  +24.40  28.46     40  +10.20 1 2 1 1 1   888    0 13.96 10.47 ----- 30.6 28.5 295.8 32.7 30.4 -21.8 29.9 -21.6 29.6 -19.8 30.7 -20.6
2026-02-11T14:18:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:18:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:18:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.512643
2026-02-11T14:18:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:18:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:18:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:18:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:18:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:18:25.371 [DEBUG] [Thread-130435] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:18:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:17:57', tmtdew=16.53, humidity=34.8, cloud=0.0, wind=37.12, temperature=24.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:18:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:18:25.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:18:25.468 [DEBUG] [Thread-130438] [transport.py] [_log()] starting thread (client mode): 0xa2d00070
2026-02-11T14:18:25.469 [DEBUG] [Thread-130438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:18:25.483 [DEBUG] [Thread-130438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:18:25.483 [INFO] [Thread-130438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] client lang: <none>
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] server lang: <none>
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] kex follows: False
2026-02-11T14:18:25.492 [DEBUG] [Thread-130438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:18:25.493 [DEBUG] [Thread-130438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:18:25.493 [DEBUG] [Thread-130438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:18:25.493 [DEBUG] [Thread-130438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:18:25.493 [DEBUG] [Thread-130438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:18:25.493 [DEBUG] [Thread-130438] [transport.py] [_log()] Compression: none
2026-02-11T14:18:25.493 [DEBUG] [Thread-130438] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:18:25.552 [DEBUG] [Thread-130438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:18:25.553 [DEBUG] [Thread-130438] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:18:25.553 [DEBUG] [Thread-130438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:18:25.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:18:25.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:18:25.609 [DEBUG] [Thread-130438] [transport.py] [_log()] userauth is OK
2026-02-11T14:18:25.609 [DEBUG] [Thread-130438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:18:25.609 [DEBUG] [Thread-130438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:18:25.609 [DEBUG] [Thread-130438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:18:25.609 [DEBUG] [Thread-130438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:18:25.629 [INFO] [Thread-130438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:18:25.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:18:25.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:18:26.441 [DEBUG] [Thread-130438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:18:26.442 [DEBUG] [Thread-130438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:18:26.489 [DEBUG] [Thread-130438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:18:26.490 [DEBUG] [Thread-130438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:18:26.499 [DEBUG] [Thread-130438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:18:26.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:18:26.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:18:26.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:18:26.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:18:26.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:18:26.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:18:26.536 [DEBUG] [Thread-130438] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:18:30.099 [DEBUG] [Thread-130440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:18:45.149 [DEBUG] [Thread-130441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:18:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:18:56.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:18:56.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
2026-02-11T14:18:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 18, 33), 17.47, 32.94, 0.0, 23.04, 25.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:18:58.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:18:33
2026-02-11T14:18:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:18:58.904 [DEBUG] [Thread-130442] [transport.py] [_log()] starting thread (client mode): 0xa2d6e590
2026-02-11T14:18:58.904 [DEBUG] [Thread-130442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:18:58.925 [DEBUG] [Thread-130442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:18:58.925 [INFO] [Thread-130442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] client lang: <none>
2026-02-11T14:18:58.926 [DEBUG] [Thread-130442] [transport.py] [_log()] server lang: <none>
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] kex follows: False
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] Compression: none
2026-02-11T14:18:58.927 [DEBUG] [Thread-130442] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:18:58.944 [DEBUG] [Thread-130442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:18:58.945 [DEBUG] [Thread-130442] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:18:58.946 [DEBUG] [Thread-130442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:18:58.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:18:58.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:18:58.947 [DEBUG] [Thread-130442] [transport.py] [_log()] userauth is OK
2026-02-11T14:18:58.948 [DEBUG] [Thread-130442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:18:58.948 [DEBUG] [Thread-130442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:18:58.948 [DEBUG] [Thread-130442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:18:58.948 [DEBUG] [Thread-130442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:18:58.983 [INFO] [Thread-130442] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:18:58.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:18:59.631 [DEBUG] [Thread-130442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:18:59.631 [DEBUG] [Thread-130442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:18:59.632 [DEBUG] [Thread-130442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:18:59.672 [DEBUG] [Thread-130442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:18:59.672 [DEBUG] [Thread-130442] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:18:59.676 [DEBUG] [Thread-130442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:18:59.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:18:59.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:18:59.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:18:59.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:18:59.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:18:59.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:18:59.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:18:59.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:18:59.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:18:59.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.512990 -999.00  +24.00  20.02     41  +10.10 1 2 1 1 1   888    0 14.01 11.03 ----- 18.4 20.0 272.0 29.9 30.4 -22.7 29.9 -21.0 29.9 -19.7 30.7 -20.6
2026-02-11T14:18:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:18:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:18:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.512990
2026-02-11T14:18:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:18:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:18:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:18:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:18:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:18:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:18:33', tmtdew=17.47, humidity=32.94, cloud=0.0, wind=23.04, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:18:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:18:59.705 [DEBUG] [Thread-130442] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:18:59.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:18:59.801 [DEBUG] [Thread-130445] [transport.py] [_log()] starting thread (client mode): 0xa2d6db10
2026-02-11T14:18:59.801 [DEBUG] [Thread-130445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:18:59.816 [DEBUG] [Thread-130445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:18:59.816 [INFO] [Thread-130445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] client lang: <none>
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] server lang: <none>
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] kex follows: False
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:18:59.824 [DEBUG] [Thread-130445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:18:59.825 [DEBUG] [Thread-130445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:18:59.825 [DEBUG] [Thread-130445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:18:59.825 [DEBUG] [Thread-130445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:18:59.825 [DEBUG] [Thread-130445] [transport.py] [_log()] Compression: none
2026-02-11T14:18:59.825 [DEBUG] [Thread-130445] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:18:59.884 [DEBUG] [Thread-130445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:18:59.884 [DEBUG] [Thread-130445] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:18:59.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:18:59.886 [DEBUG] [Thread-130445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:18:59.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:18:59.940 [DEBUG] [Thread-130445] [transport.py] [_log()] userauth is OK
2026-02-11T14:18:59.940 [DEBUG] [Thread-130445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:18:59.940 [DEBUG] [Thread-130445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:18:59.940 [DEBUG] [Thread-130445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:18:59.940 [DEBUG] [Thread-130445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:18:59.959 [INFO] [Thread-130445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:18:59.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:18:59.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:19:00.186 [DEBUG] [Thread-130447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:19:00.798 [DEBUG] [Thread-130445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:19:00.799 [DEBUG] [Thread-130445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:19:00.846 [DEBUG] [Thread-130445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:19:00.846 [DEBUG] [Thread-130445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:19:00.855 [DEBUG] [Thread-130445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:19:00.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:19:00.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')
2026-02-11T14:19:00.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:19:00.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:19:00.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:19:00.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:19:00.889 [DEBUG] [Thread-130445] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:19:15.239 [DEBUG] [Thread-130448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:19:19.225 [DEBUG] [Thread-130449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:19:23.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:19:23.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:19:30.278 [DEBUG] [Thread-130450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:19:30.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:19:30.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:19:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:19:33.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 19, 9), 16.12, 36.03, 0.0, 24.0, 24.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:19:33.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:19:09
2026-02-11T14:19:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:19:33.778 [DEBUG] [Thread-130451] [transport.py] [_log()] starting thread (client mode): 0xa2d568c0
2026-02-11T14:19:33.778 [DEBUG] [Thread-130451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:19:33.798 [DEBUG] [Thread-130451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:19:33.798 [INFO] [Thread-130451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:19:33.801 [DEBUG] [Thread-130451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:19:33.801 [DEBUG] [Thread-130451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:19:33.801 [DEBUG] [Thread-130451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:19:33.801 [DEBUG] [Thread-130451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:19:33.801 [DEBUG] [Thread-130451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] client lang: <none>
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] server lang: <none>
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] kex follows: False
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] Compression: none
2026-02-11T14:19:33.802 [DEBUG] [Thread-130451] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:19:33.820 [DEBUG] [Thread-130451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:19:33.821 [DEBUG] [Thread-130451] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:19:33.821 [DEBUG] [Thread-130451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:19:33.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:19:33.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:19:33.823 [DEBUG] [Thread-130451] [transport.py] [_log()] userauth is OK
2026-02-11T14:19:33.823 [DEBUG] [Thread-130451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:19:33.824 [DEBUG] [Thread-130451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:19:33.824 [DEBUG] [Thread-130451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:19:33.824 [DEBUG] [Thread-130451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:19:33.849 [INFO] [Thread-130451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:19:33.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:19:34.479 [DEBUG] [Thread-130451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:19:34.479 [DEBUG] [Thread-130451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:19:34.480 [DEBUG] [Thread-130451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:19:34.520 [DEBUG] [Thread-130451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:19:34.520 [DEBUG] [Thread-130451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:19:34.524 [DEBUG] [Thread-130451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:19:34.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:19:34.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:19:34.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:19:34.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:19:34.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:19:34.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:19:34.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:19:34.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:19:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:19:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.513337 -999.00  +24.00  18.49     41  +10.10 1 2 1 1 1   888    0 14.03 9.61 ----- 17.3 18.5 289.8 24.1 30.4 -22.7 29.9 -20.8 29.7 -20.6 30.6 -21.9
2026-02-11T14:19:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:19:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:19:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.513337
2026-02-11T14:19:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:19:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:19:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:19:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:19:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:19:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:19:09', tmtdew=16.12, humidity=36.03, cloud=0.0, wind=24.0, temperature=24.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:19:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:19:34.552 [DEBUG] [Thread-130451] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:19:34.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:19:34.650 [DEBUG] [Thread-130454] [transport.py] [_log()] starting thread (client mode): 0xa2d12890
2026-02-11T14:19:34.650 [DEBUG] [Thread-130454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:19:34.665 [DEBUG] [Thread-130454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:19:34.665 [INFO] [Thread-130454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] client lang: <none>
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] server lang: <none>
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] kex follows: False
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:19:34.673 [DEBUG] [Thread-130454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:19:34.674 [DEBUG] [Thread-130454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:19:34.674 [DEBUG] [Thread-130454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:19:34.674 [DEBUG] [Thread-130454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:19:34.674 [DEBUG] [Thread-130454] [transport.py] [_log()] Compression: none
2026-02-11T14:19:34.674 [DEBUG] [Thread-130454] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:19:34.736 [DEBUG] [Thread-130454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:19:34.737 [DEBUG] [Thread-130454] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:19:34.738 [DEBUG] [Thread-130454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:19:34.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:19:34.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:19:34.796 [DEBUG] [Thread-130454] [transport.py] [_log()] userauth is OK
2026-02-11T14:19:34.796 [DEBUG] [Thread-130454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:19:34.797 [DEBUG] [Thread-130454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:19:34.797 [DEBUG] [Thread-130454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:19:34.797 [DEBUG] [Thread-130454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:19:34.815 [INFO] [Thread-130454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:19:34.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:19:34.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:19:35.636 [DEBUG] [Thread-130454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:19:35.636 [DEBUG] [Thread-130454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:19:35.684 [DEBUG] [Thread-130454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:19:35.684 [DEBUG] [Thread-130454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:19:35.693 [DEBUG] [Thread-130454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:19:35.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:19:35.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:19:35.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:19:35.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:19:35.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:19:35.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:19:35.728 [DEBUG] [Thread-130454] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:19:45.314 [DEBUG] [Thread-130456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:20:00.370 [DEBUG] [Thread-130457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:20:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:20:05.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:20:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:20:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 19, 44), 16.0, 35.93, 0.0, 17.95, 23.87, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:20:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:19:44
2026-02-11T14:20:07.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:20:08.151 [DEBUG] [Thread-130458] [transport.py] [_log()] starting thread (client mode): 0xa2d57eb0
2026-02-11T14:20:08.151 [DEBUG] [Thread-130458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:20:08.171 [DEBUG] [Thread-130458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:20:08.171 [INFO] [Thread-130458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:20:08.174 [DEBUG] [Thread-130458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] client lang: <none>
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] server lang: <none>
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] kex follows: False
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] Compression: none
2026-02-11T14:20:08.175 [DEBUG] [Thread-130458] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:20:08.191 [DEBUG] [Thread-130458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:20:08.191 [DEBUG] [Thread-130458] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:20:08.192 [DEBUG] [Thread-130458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:20:08.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:20:08.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:20:08.233 [DEBUG] [Thread-130458] [transport.py] [_log()] userauth is OK
2026-02-11T14:20:08.233 [DEBUG] [Thread-130458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:20:08.233 [DEBUG] [Thread-130458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:20:08.234 [DEBUG] [Thread-130458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:20:08.234 [DEBUG] [Thread-130458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:20:08.253 [INFO] [Thread-130458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:20:08.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:20:09.227 [DEBUG] [Thread-130458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:20:09.227 [DEBUG] [Thread-130458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:20:09.227 [DEBUG] [Thread-130458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:20:09.268 [DEBUG] [Thread-130458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:20:09.268 [DEBUG] [Thread-130458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:20:09.272 [DEBUG] [Thread-130458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:20:09.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:20:09.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:20:09.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:20:09.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:20:09.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:20:09.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:20:09.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:20:09.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:20:09.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:20:09.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.513684 -999.00  +24.00  18.47     41  +10.10 1 2 1 1 1   888    0 14.16 9.51 ----- 15.7 18.5 277.5 24.3 30.4 -21.6 30.0 -20.8 29.7 -21.2 30.7 -19.9
2026-02-11T14:20:09.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:20:09.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:20:09.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.513684
2026-02-11T14:20:09.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:20:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:20:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:20:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:20:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:20:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:19:44', tmtdew=16.0, humidity=35.93, cloud=0.0, wind=17.95, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:19:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:20:09.304 [DEBUG] [Thread-130458] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:20:09.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:20:09.393 [DEBUG] [Thread-130461] [transport.py] [_log()] starting thread (client mode): 0xa2d57ee0
2026-02-11T14:20:09.393 [DEBUG] [Thread-130461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:20:09.407 [DEBUG] [Thread-130461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:20:09.408 [INFO] [Thread-130461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:20:09.415 [DEBUG] [Thread-130461] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] client lang: <none>
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] server lang: <none>
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] kex follows: False
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:20:09.416 [DEBUG] [Thread-130461] [transport.py] [_log()] Compression: none
2026-02-11T14:20:09.417 [DEBUG] [Thread-130461] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:20:09.476 [DEBUG] [Thread-130461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:20:09.477 [DEBUG] [Thread-130461] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:20:09.478 [DEBUG] [Thread-130461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:20:09.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:20:09.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:20:09.536 [DEBUG] [Thread-130461] [transport.py] [_log()] userauth is OK
2026-02-11T14:20:09.537 [DEBUG] [Thread-130461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:20:09.537 [DEBUG] [Thread-130461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:20:09.537 [DEBUG] [Thread-130461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:20:09.537 [DEBUG] [Thread-130461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:20:09.555 [INFO] [Thread-130461] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:20:09.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:20:09.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:20:10.395 [DEBUG] [Thread-130461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:20:10.395 [DEBUG] [Thread-130461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:20:10.443 [DEBUG] [Thread-130461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:20:10.443 [DEBUG] [Thread-130461] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:20:10.453 [DEBUG] [Thread-130461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:20:10.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:20: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')
2026-02-11T14:20:10.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:20:10.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:20:10.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:20:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:20:10.491 [DEBUG] [Thread-130461] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:20:15.406 [DEBUG] [Thread-130463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:20:19.269 [DEBUG] [Thread-130464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:20:23.886 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:20:23.887 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:20:30.459 [DEBUG] [Thread-130465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:20:40.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:20:40.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:20:40.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
2026-02-11T14:20:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 20, 20), 15.93, 36.1, 0.0, 23.17, 23.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:20:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:20:20
2026-02-11T14:20:42.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:20:42.907 [DEBUG] [Thread-130466] [transport.py] [_log()] starting thread (client mode): 0xa2d13fa0
2026-02-11T14:20:42.907 [DEBUG] [Thread-130466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:20:42.921 [DEBUG] [Thread-130466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:20:42.922 [INFO] [Thread-130466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] client lang: <none>
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] server lang: <none>
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] kex follows: False
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] Compression: none
2026-02-11T14:20:42.925 [DEBUG] [Thread-130466] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:20:42.937 [DEBUG] [Thread-130466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:20:42.938 [DEBUG] [Thread-130466] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:20:42.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:20:42.938 [DEBUG] [Thread-130466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:20:42.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:20:42.940 [DEBUG] [Thread-130466] [transport.py] [_log()] userauth is OK
2026-02-11T14:20:42.940 [DEBUG] [Thread-130466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:20:42.940 [DEBUG] [Thread-130466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:20:42.940 [DEBUG] [Thread-130466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:20:42.940 [DEBUG] [Thread-130466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:20:42.955 [INFO] [Thread-130466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:20:42.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:20:43.541 [DEBUG] [Thread-130466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:20:43.541 [DEBUG] [Thread-130466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:20:43.541 [DEBUG] [Thread-130466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:20:43.581 [DEBUG] [Thread-130466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:20:43.582 [DEBUG] [Thread-130466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:20:43.585 [DEBUG] [Thread-130466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:20:43.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:20:43.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:20:43.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:20:43.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:20:43.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:20:43.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:20:43.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:20:43.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:20:43.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:20:43.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.514032 -999.00  +24.20  23.75     41  +10.20 1 2 1 1 1   888    0 14.10 10.03 ----- 25.4 23.8 293.2 29.1 30.6 -21.4 30.0 -20.7 29.9 -21.8 30.8 -20.1
2026-02-11T14:20:43.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:20:43.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:20:43.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.514032
2026-02-11T14:20:43.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:20:43.610 [DEBUG] [Thread-130466] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:20:43.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:20:43.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:20:43.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:20:43.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:20:43.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:20:20', tmtdew=15.93, humidity=36.1, cloud=0.0, wind=23.17, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:20:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:20:43.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:20:43.700 [DEBUG] [Thread-130469] [transport.py] [_log()] starting thread (client mode): 0xa2d03e50
2026-02-11T14:20:43.700 [DEBUG] [Thread-130469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:20:43.715 [DEBUG] [Thread-130469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:20:43.715 [INFO] [Thread-130469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:20:43.722 [DEBUG] [Thread-130469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:20:43.722 [DEBUG] [Thread-130469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:20:43.722 [DEBUG] [Thread-130469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:20:43.722 [DEBUG] [Thread-130469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:43.722 [DEBUG] [Thread-130469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:20:43.722 [DEBUG] [Thread-130469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] client lang: <none>
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] server lang: <none>
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] kex follows: False
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] Compression: none
2026-02-11T14:20:43.723 [DEBUG] [Thread-130469] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:20:43.780 [DEBUG] [Thread-130469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:20:43.781 [DEBUG] [Thread-130469] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:20:43.782 [DEBUG] [Thread-130469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:20:43.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:20:43.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:20:43.835 [DEBUG] [Thread-130469] [transport.py] [_log()] userauth is OK
2026-02-11T14:20:43.836 [DEBUG] [Thread-130469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:20:43.836 [DEBUG] [Thread-130469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:20:43.836 [DEBUG] [Thread-130469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:20:43.836 [DEBUG] [Thread-130469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:20:43.855 [INFO] [Thread-130469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:20:43.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:20:43.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:20:44.688 [DEBUG] [Thread-130469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:20:44.689 [DEBUG] [Thread-130469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:20:44.736 [DEBUG] [Thread-130469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:20:44.737 [DEBUG] [Thread-130469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:20:44.749 [DEBUG] [Thread-130469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:20:44.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:20:44.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:20:44.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
2026-02-11T14:20:44.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:20:44.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:20:44.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:20:44.785 [DEBUG] [Thread-130469] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:20:45.497 [DEBUG] [Thread-130471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:00.547 [DEBUG] [Thread-130472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:21:14.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:21:14.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:21:15.584 [DEBUG] [Thread-130473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:17.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 20, 56), 16.41, 35.4, 0.0, 31.99, 24.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:21:17.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:20:56
2026-02-11T14:21:17.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:21:17.689 [DEBUG] [Thread-130474] [transport.py] [_log()] starting thread (client mode): 0xa2d6d060
2026-02-11T14:21:17.690 [DEBUG] [Thread-130474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:21:17.710 [DEBUG] [Thread-130474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:21:17.710 [INFO] [Thread-130474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:21:17.712 [DEBUG] [Thread-130474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] client lang: <none>
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] server lang: <none>
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] kex follows: False
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] Compression: none
2026-02-11T14:21:17.713 [DEBUG] [Thread-130474] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:21:17.733 [DEBUG] [Thread-130474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:21:17.733 [DEBUG] [Thread-130474] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:21:17.734 [DEBUG] [Thread-130474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:21:17.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:21:17.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:21:17.736 [DEBUG] [Thread-130474] [transport.py] [_log()] userauth is OK
2026-02-11T14:21:17.736 [DEBUG] [Thread-130474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:21:17.736 [DEBUG] [Thread-130474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:21:17.736 [DEBUG] [Thread-130474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:21:17.736 [DEBUG] [Thread-130474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:21:17.761 [INFO] [Thread-130474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:21:17.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:21:18.386 [DEBUG] [Thread-130474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:21:18.387 [DEBUG] [Thread-130474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:21:18.387 [DEBUG] [Thread-130474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:21:18.427 [DEBUG] [Thread-130474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:21:18.427 [DEBUG] [Thread-130474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:21:18.430 [DEBUG] [Thread-130474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:21:18.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:21:18.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:21:18.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:21:18.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:21:18.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:21:18.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:21:18.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:21:18.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:21:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:21:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.514379 -999.00  +24.20  24.43     42  +10.40 1 2 1 1 1   888    0 13.97 12.58 ----- 21.7 24.4 297.8 33.5 30.7 -20.9 30.0 -20.5 30.0 -19.4 30.9 -20.2
2026-02-11T14:21:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:21:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:21:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.514379
2026-02-11T14:21:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:21:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:21:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:21:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:21:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:21:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:20:56', tmtdew=16.41, humidity=35.4, cloud=0.0, wind=31.99, temperature=24.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:20:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:21:18.457 [DEBUG] [Thread-130474] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:21:18.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:21:18.561 [DEBUG] [Thread-130477] [transport.py] [_log()] starting thread (client mode): 0xa81d7160
2026-02-11T14:21:18.561 [DEBUG] [Thread-130477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:21:18.576 [DEBUG] [Thread-130477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:21:18.576 [INFO] [Thread-130477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:21:18.583 [DEBUG] [Thread-130477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] client lang: <none>
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] server lang: <none>
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] kex follows: False
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:21:18.584 [DEBUG] [Thread-130477] [transport.py] [_log()] Compression: none
2026-02-11T14:21:18.585 [DEBUG] [Thread-130477] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:21:18.644 [DEBUG] [Thread-130477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:21:18.644 [DEBUG] [Thread-130477] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:21:18.645 [DEBUG] [Thread-130477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:21:18.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:21:18.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:21:18.701 [DEBUG] [Thread-130477] [transport.py] [_log()] userauth is OK
2026-02-11T14:21:18.701 [DEBUG] [Thread-130477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:21:18.702 [DEBUG] [Thread-130477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:21:18.702 [DEBUG] [Thread-130477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:21:18.702 [DEBUG] [Thread-130477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:21:18.721 [INFO] [Thread-130477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:21:18.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:21:18.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:21:19.300 [DEBUG] [Thread-130479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:19.560 [DEBUG] [Thread-130477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:21:19.560 [DEBUG] [Thread-130477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:21:19.609 [DEBUG] [Thread-130477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:21:19.609 [DEBUG] [Thread-130477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:21:19.618 [DEBUG] [Thread-130477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:21:19.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:21: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')
2026-02-11T14:21: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
2026-02-11T14:21:19.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:21:19.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:21:19.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:21:19.653 [DEBUG] [Thread-130477] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:21:24.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:24.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:30.621 [DEBUG] [Thread-130480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:45.671 [DEBUG] [Thread-130481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:21:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:21:49.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:21:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:21:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 21, 32), 16.34, 35.55, 0.0, 35.59, 24.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:21:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:21:32
2026-02-11T14:21:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:21:52.001 [DEBUG] [Thread-130482] [transport.py] [_log()] starting thread (client mode): 0xa81d5c00
2026-02-11T14:21:52.001 [DEBUG] [Thread-130482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:21:52.022 [DEBUG] [Thread-130482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:21:52.022 [INFO] [Thread-130482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:21:52.024 [DEBUG] [Thread-130482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:21:52.024 [DEBUG] [Thread-130482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] client lang: <none>
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] server lang: <none>
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] kex follows: False
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] Compression: none
2026-02-11T14:21:52.025 [DEBUG] [Thread-130482] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:21:52.041 [DEBUG] [Thread-130482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:21:52.041 [DEBUG] [Thread-130482] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:21:52.042 [DEBUG] [Thread-130482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:21:52.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:21:52.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:21:52.044 [DEBUG] [Thread-130482] [transport.py] [_log()] userauth is OK
2026-02-11T14:21:52.044 [DEBUG] [Thread-130482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:21:52.044 [DEBUG] [Thread-130482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:21:52.044 [DEBUG] [Thread-130482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:21:52.045 [DEBUG] [Thread-130482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:21:52.070 [INFO] [Thread-130482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:21:52.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:21:52.725 [DEBUG] [Thread-130482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:21:52.726 [DEBUG] [Thread-130482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:21:52.726 [DEBUG] [Thread-130482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:21:52.767 [DEBUG] [Thread-130482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:21:52.767 [DEBUG] [Thread-130482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:21:52.770 [DEBUG] [Thread-130482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:21:52.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:21:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:21:52.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:21:52.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:21:52.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:21:52.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:21:52.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:21:52.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:21:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:21:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.514726 -999.00  +24.60  37.85     42  +10.80 1 2 2 1 1   888    0 14.02 13.75 ----- 32.0 37.9 306.6 40.1 30.6 -21.9 30.1 -21.9 30.2 -19.5 30.9 -19.1
2026-02-11T14:21:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:21:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:21:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.514726
2026-02-11T14:21:52.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:21:52.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:21:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:21:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:21:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:21:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:21:32', tmtdew=16.34, humidity=35.55, cloud=0.0, wind=35.59, temperature=24.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:21:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:21:52.796 [DEBUG] [Thread-130482] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:21:52.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:21:52.894 [DEBUG] [Thread-130485] [transport.py] [_log()] starting thread (client mode): 0xa2d54100
2026-02-11T14:21:52.894 [DEBUG] [Thread-130485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:21:52.908 [DEBUG] [Thread-130485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:21:52.908 [INFO] [Thread-130485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] client lang: <none>
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] server lang: <none>
2026-02-11T14:21:52.916 [DEBUG] [Thread-130485] [transport.py] [_log()] kex follows: False
2026-02-11T14:21:52.917 [DEBUG] [Thread-130485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:21:52.917 [DEBUG] [Thread-130485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:21:52.917 [DEBUG] [Thread-130485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:21:52.917 [DEBUG] [Thread-130485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:21:52.917 [DEBUG] [Thread-130485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:21:52.917 [DEBUG] [Thread-130485] [transport.py] [_log()] Compression: none
2026-02-11T14:21:52.917 [DEBUG] [Thread-130485] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:21:52.971 [DEBUG] [Thread-130485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:21:52.972 [DEBUG] [Thread-130485] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:21:52.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:21:52.972 [DEBUG] [Thread-130485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:21:52.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:21:53.027 [DEBUG] [Thread-130485] [transport.py] [_log()] userauth is OK
2026-02-11T14:21:53.027 [DEBUG] [Thread-130485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:21:53.027 [DEBUG] [Thread-130485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:21:53.027 [DEBUG] [Thread-130485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:21:53.027 [DEBUG] [Thread-130485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:21:53.042 [INFO] [Thread-130485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:21:53.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:21:53.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:21:53.865 [DEBUG] [Thread-130485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:21:53.865 [DEBUG] [Thread-130485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:21:53.913 [DEBUG] [Thread-130485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:21:53.913 [DEBUG] [Thread-130485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:21:53.922 [DEBUG] [Thread-130485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:21:53.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:21:53.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:21:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:21:53.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:21:53.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:21:53.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:21:53.959 [DEBUG] [Thread-130485] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:22:00.707 [DEBUG] [Thread-130487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:22:15.770 [DEBUG] [Thread-130488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:22:19.328 [DEBUG] [Thread-130489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:22:23.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:22:23.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:22:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:22:24.168 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:22:24.169 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:22:25.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 22, 9), 16.16, 35.91, 0.0, 34.39, 24.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:22:25.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:22:09
2026-02-11T14:22:26.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:22:26.284 [DEBUG] [Thread-130490] [transport.py] [_log()] starting thread (client mode): 0xa2d57040
2026-02-11T14:22:26.284 [DEBUG] [Thread-130490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:22:26.304 [DEBUG] [Thread-130490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:22:26.305 [INFO] [Thread-130490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] client lang: <none>
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] server lang: <none>
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] kex follows: False
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:22:26.308 [DEBUG] [Thread-130490] [transport.py] [_log()] Compression: none
2026-02-11T14:22:26.309 [DEBUG] [Thread-130490] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:22:26.325 [DEBUG] [Thread-130490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:22:26.326 [DEBUG] [Thread-130490] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:22:26.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:22:26.327 [DEBUG] [Thread-130490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:22:26.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:22:26.329 [DEBUG] [Thread-130490] [transport.py] [_log()] userauth is OK
2026-02-11T14:22:26.329 [DEBUG] [Thread-130490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:22:26.330 [DEBUG] [Thread-130490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:22:26.330 [DEBUG] [Thread-130490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:22:26.330 [DEBUG] [Thread-130490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:22:26.354 [INFO] [Thread-130490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:22:26.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:22:27.163 [DEBUG] [Thread-130490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:22:27.163 [DEBUG] [Thread-130490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:22:27.163 [DEBUG] [Thread-130490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:22:27.204 [DEBUG] [Thread-130490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:22:27.204 [DEBUG] [Thread-130490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:22:27.207 [DEBUG] [Thread-130490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:22:27.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:22:27.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:22:27.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:22:27.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:22:27.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:22:27.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:22:27.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:22:27.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:22:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:22:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.515073 -999.00  +24.70  33.98     41  +10.70 1 2 2 1 1   888    0 14.17 14.77 ----- 31.7 34.0 318.4 40.0 30.5 -22.1 29.9 -22.3 30.0 -22.4 30.9 -20.1
2026-02-11T14:22:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:22:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:22:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.515073
2026-02-11T14:22:27.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:22:27.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:22:27.229 [DEBUG] [Thread-130490] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:22:27.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:22:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:22:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:22:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:22:09', tmtdew=16.16, humidity=35.91, cloud=0.0, wind=34.39, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:21:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:22:27.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:22:27.326 [DEBUG] [Thread-130493] [transport.py] [_log()] starting thread (client mode): 0xa5772fb0
2026-02-11T14:22:27.326 [DEBUG] [Thread-130493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:22:27.341 [DEBUG] [Thread-130493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:22:27.341 [INFO] [Thread-130493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:22:27.348 [DEBUG] [Thread-130493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] client lang: <none>
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] server lang: <none>
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] kex follows: False
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:22:27.349 [DEBUG] [Thread-130493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:22:27.350 [DEBUG] [Thread-130493] [transport.py] [_log()] Compression: none
2026-02-11T14:22:27.350 [DEBUG] [Thread-130493] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:22:27.407 [DEBUG] [Thread-130493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:22:27.408 [DEBUG] [Thread-130493] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:22:27.408 [DEBUG] [Thread-130493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:22:27.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:22:27.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:22:27.468 [DEBUG] [Thread-130493] [transport.py] [_log()] userauth is OK
2026-02-11T14:22:27.468 [DEBUG] [Thread-130493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:22:27.468 [DEBUG] [Thread-130493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:22:27.468 [DEBUG] [Thread-130493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:22:27.468 [DEBUG] [Thread-130493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:22:27.490 [INFO] [Thread-130493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:22:27.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:22:27.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:22:28.306 [DEBUG] [Thread-130493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:22:28.306 [DEBUG] [Thread-130493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:22:28.354 [DEBUG] [Thread-130493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:22:28.354 [DEBUG] [Thread-130493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:22:28.368 [DEBUG] [Thread-130493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:22:28.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:22:28.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:22:28.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:22:28.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:22:28.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:22:28.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:22:28.403 [DEBUG] [Thread-130493] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:22:30.807 [DEBUG] [Thread-130495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:22:45.855 [DEBUG] [Thread-130496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:22:58.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:22:58.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:22:58.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
2026-02-11T14:23:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 22, 44), 15.74, 36.68, 0.0, 30.17, 24.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:23:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:22:44
2026-02-11T14:23:00.893 [DEBUG] [Thread-130497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:23:00.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:23:01.079 [DEBUG] [Thread-130498] [transport.py] [_log()] starting thread (client mode): 0xa2d11630
2026-02-11T14:23:01.080 [DEBUG] [Thread-130498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:23:01.098 [DEBUG] [Thread-130498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:23:01.098 [INFO] [Thread-130498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] client lang: <none>
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] server lang: <none>
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] kex follows: False
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] Compression: none
2026-02-11T14:23:01.101 [DEBUG] [Thread-130498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:23:01.116 [DEBUG] [Thread-130498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:23:01.116 [DEBUG] [Thread-130498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:23:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:23:01.117 [DEBUG] [Thread-130498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:23:01.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:23:01.117 [DEBUG] [Thread-130498] [transport.py] [_log()] userauth is OK
2026-02-11T14:23:01.117 [DEBUG] [Thread-130498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:23:01.118 [DEBUG] [Thread-130498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:23:01.118 [DEBUG] [Thread-130498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:23:01.118 [DEBUG] [Thread-130498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:23:01.132 [INFO] [Thread-130498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:23:01.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:23:01.703 [DEBUG] [Thread-130498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:23:01.703 [DEBUG] [Thread-130498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:23:01.703 [DEBUG] [Thread-130498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:23:01.744 [DEBUG] [Thread-130498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:23:01.745 [DEBUG] [Thread-130498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:23:01.748 [DEBUG] [Thread-130498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:23:01.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:23:01.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:23:01.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:23:01.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:23:01.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:23:01.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:23:01.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:23:01.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:23:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:23:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.515420 -999.00  +25.10  31.02     40  +10.80 1 2 2 1 1   888    0 14.21 14.64 ----- 35.3 31.0 324.6 36.6 30.7 -22.0 30.1 -20.7 30.2 -20.3 30.9 -20.2
2026-02-11T14:23:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:23:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:23:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.515420
2026-02-11T14:23:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:23:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:23:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:23:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:23:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:23:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:22:44', tmtdew=15.74, humidity=36.68, cloud=0.0, wind=30.17, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:22:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:23:01.772 [DEBUG] [Thread-130498] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:23:01.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:23:01.869 [DEBUG] [Thread-130501] [transport.py] [_log()] starting thread (client mode): 0xa5772920
2026-02-11T14:23:01.869 [DEBUG] [Thread-130501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:23:01.887 [DEBUG] [Thread-130501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:23:01.887 [INFO] [Thread-130501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:23:01.895 [DEBUG] [Thread-130501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] client lang: <none>
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] server lang: <none>
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] kex follows: False
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] Compression: none
2026-02-11T14:23:01.896 [DEBUG] [Thread-130501] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:23:01.952 [DEBUG] [Thread-130501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:23:01.953 [DEBUG] [Thread-130501] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:23:01.953 [DEBUG] [Thread-130501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:23:01.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:23:01.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:23:02.008 [DEBUG] [Thread-130501] [transport.py] [_log()] userauth is OK
2026-02-11T14:23:02.008 [DEBUG] [Thread-130501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:23:02.008 [DEBUG] [Thread-130501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:23:02.008 [DEBUG] [Thread-130501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:23:02.008 [DEBUG] [Thread-130501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:23:02.027 [INFO] [Thread-130501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:23:02.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:23:02.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:23:02.881 [DEBUG] [Thread-130501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:23:02.882 [DEBUG] [Thread-130501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:23:02.929 [DEBUG] [Thread-130501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:23:02.929 [DEBUG] [Thread-130501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:23:02.938 [DEBUG] [Thread-130501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:23:02.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:23:02.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:23:02.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
2026-02-11T14:23:02.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:23:02.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:23:02.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:23:02.971 [DEBUG] [Thread-130501] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:23:15.928 [DEBUG] [Thread-130503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:23:19.374 [DEBUG] [Thread-130504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:23:24.309 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:23:24.310 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:23:30.979 [DEBUG] [Thread-130505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:23:32.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:23:32.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:23: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
2026-02-11T14:23:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 23, 21), 16.03, 36.05, 0.0, 23.36, 24.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:23:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:23:21
2026-02-11T14:23:35.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:23:35.569 [DEBUG] [Thread-130506] [transport.py] [_log()] starting thread (client mode): 0xa2d6c610
2026-02-11T14:23:35.569 [DEBUG] [Thread-130506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:23:35.589 [DEBUG] [Thread-130506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:23:35.589 [INFO] [Thread-130506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:23:35.592 [DEBUG] [Thread-130506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:23:35.592 [DEBUG] [Thread-130506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:23:35.592 [DEBUG] [Thread-130506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:23:35.592 [DEBUG] [Thread-130506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] client lang: <none>
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] server lang: <none>
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] kex follows: False
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] Compression: none
2026-02-11T14:23:35.593 [DEBUG] [Thread-130506] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:23:35.609 [DEBUG] [Thread-130506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:23:35.609 [DEBUG] [Thread-130506] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:23:35.609 [DEBUG] [Thread-130506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:23:35.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:23:35.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:23:35.611 [DEBUG] [Thread-130506] [transport.py] [_log()] userauth is OK
2026-02-11T14:23:35.611 [DEBUG] [Thread-130506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:23:35.611 [DEBUG] [Thread-130506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:23:35.611 [DEBUG] [Thread-130506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:23:35.611 [DEBUG] [Thread-130506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:23:35.635 [INFO] [Thread-130506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:23:35.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:23:36.289 [DEBUG] [Thread-130506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:23:36.289 [DEBUG] [Thread-130506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:23:36.290 [DEBUG] [Thread-130506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:23:36.331 [DEBUG] [Thread-130506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:23:36.331 [DEBUG] [Thread-130506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:23:36.334 [DEBUG] [Thread-130506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:23:36.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:23:36.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:23:36.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:23:36.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:23:36.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:23:36.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:23:36.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:23:36.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:23:36.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:23:36.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.516115 -999.00  +24.80  22.77     42  +11.00 1 2 1 1 1   888    0 14.20 11.63 ----- 20.8 22.8 309.0 30.4 30.8 -20.9 30.1 -20.5 30.2 -19.9 31.1 -19.6
2026-02-11T14:23:36.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:23:36.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:23:36.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.516115
2026-02-11T14:23:36.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:23:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:23:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:23:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:23:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:23:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:23:21', tmtdew=16.03, humidity=36.05, cloud=0.0, wind=23.36, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:23:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:23:36.363 [DEBUG] [Thread-130506] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:23:36.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:23:36.456 [DEBUG] [Thread-130509] [transport.py] [_log()] starting thread (client mode): 0xa81d7070
2026-02-11T14:23:36.457 [DEBUG] [Thread-130509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:23:36.471 [DEBUG] [Thread-130509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:23:36.471 [INFO] [Thread-130509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:23:36.479 [DEBUG] [Thread-130509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:23:36.479 [DEBUG] [Thread-130509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:23:36.479 [DEBUG] [Thread-130509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] client lang: <none>
2026-02-11T14:23:36.480 [DEBUG] [Thread-130509] [transport.py] [_log()] server lang: <none>
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] kex follows: False
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] Compression: none
2026-02-11T14:23:36.481 [DEBUG] [Thread-130509] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:23:36.542 [DEBUG] [Thread-130509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:23:36.543 [DEBUG] [Thread-130509] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:23:36.543 [DEBUG] [Thread-130509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:23:36.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:23:36.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:23:36.608 [DEBUG] [Thread-130509] [transport.py] [_log()] userauth is OK
2026-02-11T14:23:36.608 [DEBUG] [Thread-130509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:23:36.608 [DEBUG] [Thread-130509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:23:36.608 [DEBUG] [Thread-130509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:23:36.608 [DEBUG] [Thread-130509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:23:36.626 [INFO] [Thread-130509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:23:36.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:23:36.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:23:37.460 [DEBUG] [Thread-130509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:23:37.461 [DEBUG] [Thread-130509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:23:37.510 [DEBUG] [Thread-130509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:23:37.510 [DEBUG] [Thread-130509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:23:37.523 [DEBUG] [Thread-130509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:23:37.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:23:37.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:23:37.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:23:37.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:23:37.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:23:37.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:23:37.561 [DEBUG] [Thread-130509] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:23:46.022 [DEBUG] [Thread-130511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:01.077 [DEBUG] [Thread-130512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:24:07.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:24:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:24:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 23, 57), 16.01, 36.09, 0.0, 23.27, 24.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:24:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:23:57
2026-02-11T14:24:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:24:09.936 [DEBUG] [Thread-130513] [transport.py] [_log()] starting thread (client mode): 0xa81d5c00
2026-02-11T14:24:09.936 [DEBUG] [Thread-130513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:24:09.958 [DEBUG] [Thread-130513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:24:09.958 [INFO] [Thread-130513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:09.961 [DEBUG] [Thread-130513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] client lang: <none>
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] server lang: <none>
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] kex follows: False
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] Compression: none
2026-02-11T14:24:09.962 [DEBUG] [Thread-130513] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:24:09.980 [DEBUG] [Thread-130513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:24:09.980 [DEBUG] [Thread-130513] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:24:09.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:24:09.981 [DEBUG] [Thread-130513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:24:09.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:24:09.983 [DEBUG] [Thread-130513] [transport.py] [_log()] userauth is OK
2026-02-11T14:24:09.984 [DEBUG] [Thread-130513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:24:09.984 [DEBUG] [Thread-130513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:24:09.984 [DEBUG] [Thread-130513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:24:09.984 [DEBUG] [Thread-130513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:24:10.007 [INFO] [Thread-130513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:24:10.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:24:10.626 [DEBUG] [Thread-130513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:24:10.626 [DEBUG] [Thread-130513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:24:10.627 [DEBUG] [Thread-130513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:24:10.667 [DEBUG] [Thread-130513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:24:10.668 [DEBUG] [Thread-130513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:24:10.671 [DEBUG] [Thread-130513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:24:10.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:24:10.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:24:10.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:24:10.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:24:10.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:24:10.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:24:10.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:24:10.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:24:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:24:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.516462 -999.00  +25.30  16.81     41  +11.10 1 2 1 1 1   888    0 14.18 13.54 ----- 23.9 16.8 317.2 28.9 30.9 -21.5 30.2 -19.1 30.5 -17.9 31.1 -19.6
2026-02-11T14:24:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:24:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:24:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.516462
2026-02-11T14:24:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:24:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:24:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:24:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:24:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:24:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:23:57', tmtdew=16.01, humidity=36.09, cloud=0.0, wind=23.27, temperature=24.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:23:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:24:10.697 [DEBUG] [Thread-130513] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:24:10.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:24:10.791 [DEBUG] [Thread-130516] [transport.py] [_log()] starting thread (client mode): 0xa575be50
2026-02-11T14:24:10.792 [DEBUG] [Thread-130516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:24:10.806 [DEBUG] [Thread-130516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:24:10.806 [INFO] [Thread-130516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] client lang: <none>
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] server lang: <none>
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] kex follows: False
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:24:10.814 [DEBUG] [Thread-130516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:24:10.815 [DEBUG] [Thread-130516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:24:10.815 [DEBUG] [Thread-130516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:24:10.815 [DEBUG] [Thread-130516] [transport.py] [_log()] Compression: none
2026-02-11T14:24:10.815 [DEBUG] [Thread-130516] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:24:10.872 [DEBUG] [Thread-130516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:24:10.873 [DEBUG] [Thread-130516] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:24:10.874 [DEBUG] [Thread-130516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:24:10.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:24:10.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:24:10.928 [DEBUG] [Thread-130516] [transport.py] [_log()] userauth is OK
2026-02-11T14:24:10.928 [DEBUG] [Thread-130516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:24:10.928 [DEBUG] [Thread-130516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:24:10.928 [DEBUG] [Thread-130516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:24:10.928 [DEBUG] [Thread-130516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:24:10.942 [INFO] [Thread-130516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:24:10.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:24:10.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:24:11.822 [DEBUG] [Thread-130516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:24:11.822 [DEBUG] [Thread-130516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:24:11.870 [DEBUG] [Thread-130516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:24:11.870 [DEBUG] [Thread-130516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:24:11.879 [DEBUG] [Thread-130516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:24:11.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:24: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')
2026-02-11T14:24:11.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:24:11.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:24:11.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:24:11.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:24:11.919 [DEBUG] [Thread-130516] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:24:16.115 [DEBUG] [Thread-130518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:19.408 [DEBUG] [Thread-130519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:24.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:24.454 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:31.165 [DEBUG] [Thread-130520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:41.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:24:41.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:24:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:24:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 24, 32), 15.73, 36.71, 0.0, 27.07, 24.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:24:43.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:24:32
2026-02-11T14:24:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:24:44.304 [DEBUG] [Thread-130521] [transport.py] [_log()] starting thread (client mode): 0xa57586a0
2026-02-11T14:24:44.304 [DEBUG] [Thread-130521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:24:44.327 [DEBUG] [Thread-130521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:24:44.327 [INFO] [Thread-130521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:24:44.331 [DEBUG] [Thread-130521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:24:44.331 [DEBUG] [Thread-130521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:24:44.331 [DEBUG] [Thread-130521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:24:44.331 [DEBUG] [Thread-130521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:44.331 [DEBUG] [Thread-130521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:44.331 [DEBUG] [Thread-130521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:44.331 [DEBUG] [Thread-130521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] client lang: <none>
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] server lang: <none>
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] kex follows: False
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:24:44.332 [DEBUG] [Thread-130521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:24:44.333 [DEBUG] [Thread-130521] [transport.py] [_log()] Compression: none
2026-02-11T14:24:44.333 [DEBUG] [Thread-130521] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:24:44.353 [DEBUG] [Thread-130521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:24:44.354 [DEBUG] [Thread-130521] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:24:44.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:24:44.356 [DEBUG] [Thread-130521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:24:44.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:24:44.358 [DEBUG] [Thread-130521] [transport.py] [_log()] userauth is OK
2026-02-11T14:24:44.358 [DEBUG] [Thread-130521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:24:44.358 [DEBUG] [Thread-130521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:24:44.358 [DEBUG] [Thread-130521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:24:44.358 [DEBUG] [Thread-130521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:24:44.389 [INFO] [Thread-130521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:24:44.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:24:45.061 [DEBUG] [Thread-130521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:24:45.061 [DEBUG] [Thread-130521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:24:45.062 [DEBUG] [Thread-130521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:24:45.102 [DEBUG] [Thread-130521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:24:45.103 [DEBUG] [Thread-130521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:24:45.106 [DEBUG] [Thread-130521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:24:45.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:24:45.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:24:45.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:24:45.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:24:45.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:24:45.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:24:45.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:24:45.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:24:45.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:24:45.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.516809 -999.00  +25.40  23.37     40  +10.90 1 2 1 1 1   888    0 14.20 16.31 ----- 23.3 23.4 307.0 27.5 31.0 -21.9 30.3 -19.5 30.5 -18.6 31.3 -20.0
2026-02-11T14:24:45.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:24:45.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:24:45.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.516809
2026-02-11T14:24:45.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:24:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:24:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:24:45.133 [DEBUG] [Thread-130521] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:24:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:24:45.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:24:45.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:24:32', tmtdew=15.73, humidity=36.71, cloud=0.0, wind=27.07, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:24:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:24:45.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:24:45.230 [DEBUG] [Thread-130524] [transport.py] [_log()] starting thread (client mode): 0xa81d6ad0
2026-02-11T14:24:45.231 [DEBUG] [Thread-130524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:24:45.245 [DEBUG] [Thread-130524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:24:45.246 [INFO] [Thread-130524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:24:45.253 [DEBUG] [Thread-130524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:24:45.253 [DEBUG] [Thread-130524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:24:45.253 [DEBUG] [Thread-130524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:24:45.253 [DEBUG] [Thread-130524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:45.253 [DEBUG] [Thread-130524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:24:45.253 [DEBUG] [Thread-130524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:45.253 [DEBUG] [Thread-130524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] client lang: <none>
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] server lang: <none>
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] kex follows: False
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] Compression: none
2026-02-11T14:24:45.254 [DEBUG] [Thread-130524] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:24:45.311 [DEBUG] [Thread-130524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:24:45.312 [DEBUG] [Thread-130524] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:24:45.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:24:45.313 [DEBUG] [Thread-130524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:24:45.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:24:45.368 [DEBUG] [Thread-130524] [transport.py] [_log()] userauth is OK
2026-02-11T14:24:45.368 [DEBUG] [Thread-130524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:24:45.368 [DEBUG] [Thread-130524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:24:45.368 [DEBUG] [Thread-130524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:24:45.368 [DEBUG] [Thread-130524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:24:45.389 [INFO] [Thread-130524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:24:45.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:24:45.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:24:46.201 [DEBUG] [Thread-130526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:24:46.216 [DEBUG] [Thread-130524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:24:46.216 [DEBUG] [Thread-130524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:24:46.264 [DEBUG] [Thread-130524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:24:46.264 [DEBUG] [Thread-130524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:24:46.273 [DEBUG] [Thread-130524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:24:46.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:24:46.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:24:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:24:46.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:24:46.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:24:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:24:46.307 [DEBUG] [Thread-130524] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:25:01.256 [DEBUG] [Thread-130527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:25:16.290 [DEBUG] [Thread-130528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:25:16.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:25:16.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:25:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:25:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 25, 7), 15.91, 36.28, 0.0, 30.24, 24.34, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:25:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:25:07
2026-02-11T14:25:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:25:19.068 [DEBUG] [Thread-130529] [transport.py] [_log()] starting thread (client mode): 0xa57725c0
2026-02-11T14:25:19.069 [DEBUG] [Thread-130529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:25:19.089 [DEBUG] [Thread-130529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:25:19.089 [INFO] [Thread-130529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:25:19.092 [DEBUG] [Thread-130529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:25:19.092 [DEBUG] [Thread-130529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:25:19.092 [DEBUG] [Thread-130529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:25:19.092 [DEBUG] [Thread-130529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:19.092 [DEBUG] [Thread-130529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:19.092 [DEBUG] [Thread-130529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:19.092 [DEBUG] [Thread-130529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] client lang: <none>
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] server lang: <none>
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] kex follows: False
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] Compression: none
2026-02-11T14:25:19.093 [DEBUG] [Thread-130529] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:25:19.112 [DEBUG] [Thread-130529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:25:19.112 [DEBUG] [Thread-130529] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:25:19.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:25:19.113 [DEBUG] [Thread-130529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:25:19.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:25:19.115 [DEBUG] [Thread-130529] [transport.py] [_log()] userauth is OK
2026-02-11T14:25:19.115 [DEBUG] [Thread-130529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:25:19.115 [DEBUG] [Thread-130529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:25:19.115 [DEBUG] [Thread-130529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:25:19.115 [DEBUG] [Thread-130529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:25:19.133 [INFO] [Thread-130529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:25:19.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:25:19.450 [DEBUG] [Thread-130531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:25:19.949 [DEBUG] [Thread-130529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:25:19.950 [DEBUG] [Thread-130529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:25:19.950 [DEBUG] [Thread-130529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:25:19.990 [DEBUG] [Thread-130529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:25:19.990 [DEBUG] [Thread-130529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:25:19.993 [DEBUG] [Thread-130529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:25:20.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:25:20.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:25:20.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:25:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:25:20.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:25:20.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:25:20.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:25:20.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:25:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:25:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.517157 -999.00  +25.20  38.21     39  +10.40 1 2 2 1 1   888    0 14.42 20.35 ----- 40.4 38.2 298.8 45.2 30.9 -22.8 30.3 -21.4 30.4 -22.7 31.4 -19.4
2026-02-11T14:25:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:25:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:25:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.517157
2026-02-11T14:25:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:25:20.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:25:20.015 [DEBUG] [Thread-130529] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:25:20.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:25:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:25:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:25:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:25:07', tmtdew=15.91, humidity=36.28, cloud=0.0, wind=30.24, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:24:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:25:20.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:25:20.111 [DEBUG] [Thread-130533] [transport.py] [_log()] starting thread (client mode): 0xa57418d0
2026-02-11T14:25:20.111 [DEBUG] [Thread-130533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:25:20.126 [DEBUG] [Thread-130533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:25:20.126 [INFO] [Thread-130533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:25:20.134 [DEBUG] [Thread-130533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:25:20.134 [DEBUG] [Thread-130533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] client lang: <none>
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] server lang: <none>
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] kex follows: False
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:25:20.135 [DEBUG] [Thread-130533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:25:20.136 [DEBUG] [Thread-130533] [transport.py] [_log()] Compression: none
2026-02-11T14:25:20.136 [DEBUG] [Thread-130533] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:25:20.192 [DEBUG] [Thread-130533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:25:20.193 [DEBUG] [Thread-130533] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:25:20.194 [DEBUG] [Thread-130533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:25:20.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:25:20.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:25:20.248 [DEBUG] [Thread-130533] [transport.py] [_log()] userauth is OK
2026-02-11T14:25:20.249 [DEBUG] [Thread-130533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:25:20.249 [DEBUG] [Thread-130533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:25:20.249 [DEBUG] [Thread-130533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:25:20.249 [DEBUG] [Thread-130533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:25:20.268 [INFO] [Thread-130533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:25:20.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:25:20.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:25:21.097 [DEBUG] [Thread-130533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:25:21.097 [DEBUG] [Thread-130533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:25:21.145 [DEBUG] [Thread-130533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:25:21.146 [DEBUG] [Thread-130533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:25:21.154 [DEBUG] [Thread-130533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:25:21.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:25:21.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:25:21.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:25:21.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:25:21.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:25:21.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:25:21.194 [DEBUG] [Thread-130533] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:25:24.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:25:24.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:25:31.327 [DEBUG] [Thread-130535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:25:46.387 [DEBUG] [Thread-130536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:25:51.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:25:51.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:25:51.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
2026-02-11T14:25:53.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 25, 43), 16.21, 35.43, 0.0, 31.25, 23.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:25:53.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:25:43
2026-02-11T14:25:53.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:25:53.630 [DEBUG] [Thread-130537] [transport.py] [_log()] starting thread (client mode): 0xa2d03e80
2026-02-11T14:25:53.630 [DEBUG] [Thread-130537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:25:53.651 [DEBUG] [Thread-130537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:25:53.651 [INFO] [Thread-130537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:25:53.654 [DEBUG] [Thread-130537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] client lang: <none>
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] server lang: <none>
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] kex follows: False
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] Compression: none
2026-02-11T14:25:53.655 [DEBUG] [Thread-130537] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:25:53.675 [DEBUG] [Thread-130537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:25:53.676 [DEBUG] [Thread-130537] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:25:53.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:25:53.677 [DEBUG] [Thread-130537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:25:53.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:25:53.679 [DEBUG] [Thread-130537] [transport.py] [_log()] userauth is OK
2026-02-11T14:25:53.680 [DEBUG] [Thread-130537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:25:53.680 [DEBUG] [Thread-130537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:25:53.680 [DEBUG] [Thread-130537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:25:53.680 [DEBUG] [Thread-130537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:25:53.704 [INFO] [Thread-130537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:25:53.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:25:54.339 [DEBUG] [Thread-130537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:25:54.339 [DEBUG] [Thread-130537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:25:54.340 [DEBUG] [Thread-130537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:25:54.380 [DEBUG] [Thread-130537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:25:54.381 [DEBUG] [Thread-130537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:25:54.384 [DEBUG] [Thread-130537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:25:54.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:25:54.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:25:54.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:25:54.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:25:54.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:25:54.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:25:54.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:25:54.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:25:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:25:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.517504 -999.00  +24.40  31.41     40  +10.00 1 2 2 1 1   888    0 14.44 25.36 ----- 31.1 31.4 291.0 44.9 30.6 -22.5 30.1 -21.3 30.2 -21.7 31.2 -21.3
2026-02-11T14:25:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:25:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:25:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.517504
2026-02-11T14:25:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:25:54.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:25:54.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:25:54.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:25:54.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:25:54.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:25:43', tmtdew=16.21, humidity=35.43, cloud=0.0, wind=31.25, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:25:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:25:54.408 [DEBUG] [Thread-130537] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:25:54.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:25:54.503 [DEBUG] [Thread-130540] [transport.py] [_log()] starting thread (client mode): 0xa5772f20
2026-02-11T14:25:54.503 [DEBUG] [Thread-130540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:25:54.518 [DEBUG] [Thread-130540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:25:54.518 [INFO] [Thread-130540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:25:54.526 [DEBUG] [Thread-130540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:25:54.526 [DEBUG] [Thread-130540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:25:54.526 [DEBUG] [Thread-130540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:25:54.526 [DEBUG] [Thread-130540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:54.526 [DEBUG] [Thread-130540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:25:54.526 [DEBUG] [Thread-130540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:54.526 [DEBUG] [Thread-130540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] client lang: <none>
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] server lang: <none>
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] kex follows: False
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] Compression: none
2026-02-11T14:25:54.527 [DEBUG] [Thread-130540] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:25:54.584 [DEBUG] [Thread-130540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:25:54.584 [DEBUG] [Thread-130540] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:25:54.585 [DEBUG] [Thread-130540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:25:54.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:25:54.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:25:54.640 [DEBUG] [Thread-130540] [transport.py] [_log()] userauth is OK
2026-02-11T14:25:54.641 [DEBUG] [Thread-130540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:25:54.641 [DEBUG] [Thread-130540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:25:54.641 [DEBUG] [Thread-130540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:25:54.641 [DEBUG] [Thread-130540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:25:54.661 [INFO] [Thread-130540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:25:54.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:25:54.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:25:55.521 [DEBUG] [Thread-130540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:25:55.522 [DEBUG] [Thread-130540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:25:55.569 [DEBUG] [Thread-130540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:25:55.570 [DEBUG] [Thread-130540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:25:55.579 [DEBUG] [Thread-130540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:25:55.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:25:55.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:25:55.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:25:55.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:25:55.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:25:55.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:25:55.616 [DEBUG] [Thread-130540] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:26:01.423 [DEBUG] [Thread-130542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:26:16.478 [DEBUG] [Thread-130543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:26:19.498 [DEBUG] [Thread-130544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:26:24.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:26:24.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:26:25.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:26:25.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:26:25.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
2026-02-11T14:26:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 26, 19), 16.56, 34.7, 0.0, 30.97, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:26:27.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:26:19
2026-02-11T14:26:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:26:28.069 [DEBUG] [Thread-130545] [transport.py] [_log()] starting thread (client mode): 0xa57700a0
2026-02-11T14:26:28.069 [DEBUG] [Thread-130545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:26:28.090 [DEBUG] [Thread-130545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:26:28.090 [INFO] [Thread-130545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:26:28.093 [DEBUG] [Thread-130545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] client lang: <none>
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] server lang: <none>
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] kex follows: False
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:26:28.094 [DEBUG] [Thread-130545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:26:28.095 [DEBUG] [Thread-130545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:26:28.095 [DEBUG] [Thread-130545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:26:28.095 [DEBUG] [Thread-130545] [transport.py] [_log()] Compression: none
2026-02-11T14:26:28.095 [DEBUG] [Thread-130545] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:26:28.108 [DEBUG] [Thread-130545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:26:28.108 [DEBUG] [Thread-130545] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:26:28.109 [DEBUG] [Thread-130545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:26:28.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:26:28.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:26:28.111 [DEBUG] [Thread-130545] [transport.py] [_log()] userauth is OK
2026-02-11T14:26:28.111 [DEBUG] [Thread-130545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:26:28.111 [DEBUG] [Thread-130545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:26:28.111 [DEBUG] [Thread-130545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:26:28.111 [DEBUG] [Thread-130545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:26:28.134 [INFO] [Thread-130545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:26:28.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:26:28.800 [DEBUG] [Thread-130545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:26:28.800 [DEBUG] [Thread-130545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:26:28.801 [DEBUG] [Thread-130545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:26:28.841 [DEBUG] [Thread-130545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:26:28.842 [DEBUG] [Thread-130545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:26:28.845 [DEBUG] [Thread-130545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:26:28.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:26:28.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:26:28.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:26:28.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:26:28.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:26:28.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:26:28.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:26:28.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:26:28.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:26:28.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.517851 -999.00  +24.30  25.60     41  +10.30 1 2 1 1 1   888    0 14.30 27.62 ----- 30.1 25.6 296.0 34.6 30.8 -21.2 30.2 -19.6 30.4 -18.7 31.1 -20.7
2026-02-11T14:26:28.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:26:28.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:26:28.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.517851
2026-02-11T14:26:28.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:26:28.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:26:28.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:26:28.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:26:28.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:26:28.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:26:19', tmtdew=16.56, humidity=34.7, cloud=0.0, wind=30.97, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:25:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:26:28.871 [DEBUG] [Thread-130545] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:26:28.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:26:28.966 [DEBUG] [Thread-130548] [transport.py] [_log()] starting thread (client mode): 0xa5758d60
2026-02-11T14:26:28.967 [DEBUG] [Thread-130548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:26:28.982 [DEBUG] [Thread-130548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:26:28.982 [INFO] [Thread-130548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:26:28.989 [DEBUG] [Thread-130548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:26:28.990 [DEBUG] [Thread-130548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:26:28.990 [DEBUG] [Thread-130548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:26:28.990 [DEBUG] [Thread-130548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:26:28.990 [DEBUG] [Thread-130548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:26:28.990 [DEBUG] [Thread-130548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:26:28.990 [DEBUG] [Thread-130548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:26:28.990 [DEBUG] [Thread-130548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:26:28.991 [DEBUG] [Thread-130548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:26:28.991 [DEBUG] [Thread-130548] [transport.py] [_log()] client lang: <none>
2026-02-11T14:26:28.991 [DEBUG] [Thread-130548] [transport.py] [_log()] server lang: <none>
2026-02-11T14:26:28.991 [DEBUG] [Thread-130548] [transport.py] [_log()] kex follows: False
2026-02-11T14:26:28.991 [DEBUG] [Thread-130548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:26:28.991 [DEBUG] [Thread-130548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:26:28.991 [DEBUG] [Thread-130548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:26:28.992 [DEBUG] [Thread-130548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:26:28.992 [DEBUG] [Thread-130548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:26:28.992 [DEBUG] [Thread-130548] [transport.py] [_log()] Compression: none
2026-02-11T14:26:28.992 [DEBUG] [Thread-130548] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:26:29.049 [DEBUG] [Thread-130548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:26:29.050 [DEBUG] [Thread-130548] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:26:29.050 [DEBUG] [Thread-130548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:26:29.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:26:29.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:26:29.109 [DEBUG] [Thread-130548] [transport.py] [_log()] userauth is OK
2026-02-11T14:26:29.109 [DEBUG] [Thread-130548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:26:29.109 [DEBUG] [Thread-130548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:26:29.109 [DEBUG] [Thread-130548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:26:29.109 [DEBUG] [Thread-130548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:26:29.128 [INFO] [Thread-130548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:26:29.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:26:29.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:26:29.974 [DEBUG] [Thread-130548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:26:29.975 [DEBUG] [Thread-130548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:26:30.022 [DEBUG] [Thread-130548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:26:30.022 [DEBUG] [Thread-130548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:26:30.031 [DEBUG] [Thread-130548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:26:30.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:26:30.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')
2026-02-11T14:26:30.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:26:30.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:26:30.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:26:30.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:26:30.067 [DEBUG] [Thread-130548] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:26:31.518 [DEBUG] [Thread-130550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:26:46.569 [DEBUG] [Thread-130551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:27:00.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:27:00.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:27:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:27:01.603 [DEBUG] [Thread-130552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:27:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 26, 19), 16.56, 34.7, 0.0, 30.97, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:27:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:26:19
2026-02-11T14:27:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:27:02.439 [DEBUG] [Thread-130553] [transport.py] [_log()] starting thread (client mode): 0xa2db5c60
2026-02-11T14:27:02.440 [DEBUG] [Thread-130553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:27:02.463 [DEBUG] [Thread-130553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:27:02.463 [INFO] [Thread-130553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:27:02.466 [DEBUG] [Thread-130553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:27:02.467 [DEBUG] [Thread-130553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:27:02.467 [DEBUG] [Thread-130553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:27:02.467 [DEBUG] [Thread-130553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:27:02.467 [DEBUG] [Thread-130553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:27:02.467 [DEBUG] [Thread-130553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:27:02.467 [DEBUG] [Thread-130553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] client lang: <none>
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] server lang: <none>
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] kex follows: False
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] Compression: none
2026-02-11T14:27:02.468 [DEBUG] [Thread-130553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:27:02.487 [DEBUG] [Thread-130553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:27:02.487 [DEBUG] [Thread-130553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:27:02.488 [DEBUG] [Thread-130553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:27:02.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:27:02.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:27:02.529 [DEBUG] [Thread-130553] [transport.py] [_log()] userauth is OK
2026-02-11T14:27:02.530 [DEBUG] [Thread-130553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:27:02.530 [DEBUG] [Thread-130553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:27:02.530 [DEBUG] [Thread-130553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:27:02.530 [DEBUG] [Thread-130553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:27:02.562 [INFO] [Thread-130553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:27:02.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:27:03.170 [DEBUG] [Thread-130553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:27:03.170 [DEBUG] [Thread-130553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:27:03.170 [DEBUG] [Thread-130553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:27:03.212 [DEBUG] [Thread-130553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:27:03.212 [DEBUG] [Thread-130553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:27:03.214 [DEBUG] [Thread-130553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:27:03.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:27:03.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:27:03.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:27:03.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:27:03.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:27:03.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:27:03.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:27:03.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:27:03.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:27:03.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.518198 -999.00  +24.20  38.08     41  +10.20 1 2 2 1 1   888    0 14.70 29.23 ----- 42.7 38.1 301.4 51.4 30.5 -22.8 30.0 -21.2 30.0 -22.9 31.1 -21.1
2026-02-11T14:27:03.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:27:03.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:27:03.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.518198
2026-02-11T14:27:03.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:27:03.239 [DEBUG] [Thread-130553] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:27:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:27:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:27:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:27:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:27:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:26:19', tmtdew=16.56, humidity=34.7, cloud=0.0, wind=30.97, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:26:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:27:03.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:27:03.332 [DEBUG] [Thread-130556] [transport.py] [_log()] starting thread (client mode): 0xa81d77c0
2026-02-11T14:27:03.332 [DEBUG] [Thread-130556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:27:03.347 [DEBUG] [Thread-130556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:27:03.347 [INFO] [Thread-130556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:27:03.354 [DEBUG] [Thread-130556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:27:03.354 [DEBUG] [Thread-130556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:27:03.354 [DEBUG] [Thread-130556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:27:03.354 [DEBUG] [Thread-130556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:27:03.354 [DEBUG] [Thread-130556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:27:03.354 [DEBUG] [Thread-130556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] client lang: <none>
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] server lang: <none>
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] kex follows: False
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] Compression: none
2026-02-11T14:27:03.355 [DEBUG] [Thread-130556] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:27:03.413 [DEBUG] [Thread-130556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:27:03.413 [DEBUG] [Thread-130556] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:27:03.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:27:03.414 [DEBUG] [Thread-130556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:27:03.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:27:03.468 [DEBUG] [Thread-130556] [transport.py] [_log()] userauth is OK
2026-02-11T14:27:03.468 [DEBUG] [Thread-130556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:27:03.468 [DEBUG] [Thread-130556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:27:03.468 [DEBUG] [Thread-130556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:27:03.468 [DEBUG] [Thread-130556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:27:03.483 [INFO] [Thread-130556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:27:03.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:27:03.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:27:04.358 [DEBUG] [Thread-130556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:27:04.358 [DEBUG] [Thread-130556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:27:04.406 [DEBUG] [Thread-130556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:27:04.406 [DEBUG] [Thread-130556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:27:04.415 [DEBUG] [Thread-130556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:27:04.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:27:04.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:27: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') -> 00000000
2026-02-11T14:27:04.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:27:04.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:27:04.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:27:04.449 [DEBUG] [Thread-130556] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:27:16.639 [DEBUG] [Thread-130558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:27:19.549 [DEBUG] [Thread-130559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:27:24.877 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:27:24.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:27:31.701 [DEBUG] [Thread-130560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:27:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:27:34.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:27:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:27:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 26, 54), 17.05, 33.94, 0.0, 32.36, 24.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:27:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:26:54
2026-02-11T14:27:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:27:37.295 [DEBUG] [Thread-130561] [transport.py] [_log()] starting thread (client mode): 0xa2db7580
2026-02-11T14:27:37.295 [DEBUG] [Thread-130561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:27:37.315 [DEBUG] [Thread-130561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:27:37.315 [INFO] [Thread-130561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:27:37.318 [DEBUG] [Thread-130561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] client lang: <none>
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] server lang: <none>
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] kex follows: False
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] Compression: none
2026-02-11T14:27:37.319 [DEBUG] [Thread-130561] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:27:37.336 [DEBUG] [Thread-130561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:27:37.337 [DEBUG] [Thread-130561] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:27:37.337 [DEBUG] [Thread-130561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:27:37.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:27:37.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:27:37.381 [DEBUG] [Thread-130561] [transport.py] [_log()] userauth is OK
2026-02-11T14:27:37.381 [DEBUG] [Thread-130561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:27:37.381 [DEBUG] [Thread-130561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:27:37.381 [DEBUG] [Thread-130561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:27:37.382 [DEBUG] [Thread-130561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:27:37.418 [INFO] [Thread-130561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:27:37.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:27:38.047 [DEBUG] [Thread-130561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:27:38.047 [DEBUG] [Thread-130561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:27:38.047 [DEBUG] [Thread-130561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:27:38.089 [DEBUG] [Thread-130561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:27:38.089 [DEBUG] [Thread-130561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:27:38.092 [DEBUG] [Thread-130561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:27:38.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:27:38.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:27:38.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:27:38.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:27:38.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:27:38.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:27:38.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:27:38.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:27:38.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:27:38.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.518545 -999.00  +24.00  29.84     41  +10.20 1 2 1 1 1   888    0 14.46 32.10 ----- 29.7 29.8 296.4 44.1 30.4 -22.0 29.9 -20.2 30.1 -21.7 30.9 -21.2
2026-02-11T14:27:38.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:27:38.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:27:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.518545
2026-02-11T14:27:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:27:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:27:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:27:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:27:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:27:38.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:26:54', tmtdew=17.05, humidity=33.94, cloud=0.0, wind=32.36, temperature=24.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:26:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:27:38.111 [DEBUG] [Thread-130561] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:27:38.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:27:46.738 [DEBUG] [Thread-130564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:28:01.790 [DEBUG] [Thread-130565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:28:16.831 [DEBUG] [Thread-130566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:28:19.603 [DEBUG] [Thread-130567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:28:25.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:28:25.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:28:31.868 [DEBUG] [Thread-130568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:28:46.904 [DEBUG] [Thread-130569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:01.937 [DEBUG] [Thread-130570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:16.974 [DEBUG] [Thread-130571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:19.669 [DEBUG] [Thread-130572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:25.157 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:25.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:32.010 [DEBUG] [Thread-130573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:47.048 [DEBUG] [Thread-130574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:29:51.544 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T14:30:02.082 [DEBUG] [Thread-130575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:30:17.115 [DEBUG] [Thread-130576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:30:19.729 [DEBUG] [Thread-130577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:30:21.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:30:21.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:30:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:30:23.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 29, 52), 15.97, 36.11, 0.0, 23.57, 23.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:30:23.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:29:52
2026-02-11T14:30:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:30:24.134 [DEBUG] [Thread-130578] [transport.py] [_log()] starting thread (client mode): 0xa57404c0
2026-02-11T14:30:24.134 [DEBUG] [Thread-130578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:30:24.154 [DEBUG] [Thread-130578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:30:24.155 [INFO] [Thread-130578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] client lang: <none>
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] server lang: <none>
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] kex follows: False
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] Compression: none
2026-02-11T14:30:24.158 [DEBUG] [Thread-130578] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:30:24.174 [DEBUG] [Thread-130578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:30:24.174 [DEBUG] [Thread-130578] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:30:24.175 [DEBUG] [Thread-130578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:30:24.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:30:24.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:30:24.176 [DEBUG] [Thread-130578] [transport.py] [_log()] userauth is OK
2026-02-11T14:30:24.177 [DEBUG] [Thread-130578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:30:24.177 [DEBUG] [Thread-130578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:30:24.177 [DEBUG] [Thread-130578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:30:24.177 [DEBUG] [Thread-130578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:30:24.209 [INFO] [Thread-130578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:30:24.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:30:24.826 [DEBUG] [Thread-130578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:30:24.827 [DEBUG] [Thread-130578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:30:24.827 [DEBUG] [Thread-130578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:30:24.867 [DEBUG] [Thread-130578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:30:24.868 [DEBUG] [Thread-130578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:30:24.871 [DEBUG] [Thread-130578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:30:24.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:30:24.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:30:24.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:30:24.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:30:24.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:30:24.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:30:24.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:30:24.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:30:24.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:30:24.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.520629 -999.00  +23.20  17.63     43  +10.00 1 2 1 1 1   888    0 14.64 30.72 ----- 22.7 17.6 290.2 24.8 29.2 -24.1 29.0 -21.8 28.9 -22.0 29.7 -23.7
2026-02-11T14:30:24.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:30:24.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:30:24.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.520629
2026-02-11T14:30:24.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:30:24.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:30:24.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:30:24.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:30:24.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:30:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:29:52', tmtdew=15.97, humidity=36.11, cloud=0.0, wind=23.57, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:29:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:30:24.897 [DEBUG] [Thread-130578] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:30:24.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:30:24.993 [DEBUG] [Thread-130581] [transport.py] [_log()] starting thread (client mode): 0xa5743d00
2026-02-11T14:30:24.993 [DEBUG] [Thread-130581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:30:25.008 [DEBUG] [Thread-130581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:30:25.008 [INFO] [Thread-130581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:30:25.015 [DEBUG] [Thread-130581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] client lang: <none>
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] server lang: <none>
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] kex follows: False
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] Compression: none
2026-02-11T14:30:25.016 [DEBUG] [Thread-130581] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:30:25.073 [DEBUG] [Thread-130581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:30:25.073 [DEBUG] [Thread-130581] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:30:25.074 [DEBUG] [Thread-130581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:30:25.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:30:25.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:30:25.129 [DEBUG] [Thread-130581] [transport.py] [_log()] userauth is OK
2026-02-11T14:30:25.129 [DEBUG] [Thread-130581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:30:25.129 [DEBUG] [Thread-130581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:30:25.129 [DEBUG] [Thread-130581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:30:25.129 [DEBUG] [Thread-130581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:30:25.147 [INFO] [Thread-130581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:30:25.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:30:25.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:30:25.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:30:25.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:30:25.953 [DEBUG] [Thread-130581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:30:25.953 [DEBUG] [Thread-130581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:30:26.001 [DEBUG] [Thread-130581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:30:26.001 [DEBUG] [Thread-130581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:30:26.010 [DEBUG] [Thread-130581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:30:26.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:30:26.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:30:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:30:26.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:30:26.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:30:26.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:30:26.047 [DEBUG] [Thread-130581] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:30:32.151 [DEBUG] [Thread-130583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:30:47.203 [DEBUG] [Thread-130584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:30:56.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:30:56.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:30:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:30:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 30, 28), 16.14, 35.75, 0.0, 26.13, 23.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:30:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:30:28
2026-02-11T14:30:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:30:59.220 [DEBUG] [Thread-130585] [transport.py] [_log()] starting thread (client mode): 0xa57405e0
2026-02-11T14:30:59.221 [DEBUG] [Thread-130585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:30:59.240 [DEBUG] [Thread-130585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:30:59.240 [INFO] [Thread-130585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] client lang: <none>
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] server lang: <none>
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] kex follows: False
2026-02-11T14:30:59.243 [DEBUG] [Thread-130585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:30:59.244 [DEBUG] [Thread-130585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:30:59.244 [DEBUG] [Thread-130585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:30:59.244 [DEBUG] [Thread-130585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:30:59.244 [DEBUG] [Thread-130585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:30:59.244 [DEBUG] [Thread-130585] [transport.py] [_log()] Compression: none
2026-02-11T14:30:59.244 [DEBUG] [Thread-130585] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:30:59.259 [DEBUG] [Thread-130585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:30:59.260 [DEBUG] [Thread-130585] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:30:59.260 [DEBUG] [Thread-130585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:30:59.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:30:59.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:30:59.262 [DEBUG] [Thread-130585] [transport.py] [_log()] userauth is OK
2026-02-11T14:30:59.262 [DEBUG] [Thread-130585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:30:59.263 [DEBUG] [Thread-130585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:30:59.263 [DEBUG] [Thread-130585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:30:59.263 [DEBUG] [Thread-130585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:30:59.286 [INFO] [Thread-130585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:30:59.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:30:59.904 [DEBUG] [Thread-130585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:30:59.904 [DEBUG] [Thread-130585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:30:59.905 [DEBUG] [Thread-130585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:30:59.945 [DEBUG] [Thread-130585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:30:59.945 [DEBUG] [Thread-130585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:30:59.950 [DEBUG] [Thread-130585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:30:59.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:30:59.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:30:59.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:30:59.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:30:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:30:59.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:30:59.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:30:59.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:30:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:30:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.521323 -999.00  +23.30  25.29     43  +10.10 1 2 1 1 1   888    0 14.44 22.46 ----- 23.7 25.3 316.4 29.3 29.0 -22.9 28.8 -21.9 28.6 -20.9 29.4 -21.8
2026-02-11T14:30:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:30:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:30:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.521323
2026-02-11T14:30:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:30:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:30:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:30:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:30:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:30:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:30:28', tmtdew=16.14, humidity=35.75, cloud=0.0, wind=26.13, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:30:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:30:59.981 [DEBUG] [Thread-130585] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:31:00.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:31:00.079 [DEBUG] [Thread-130588] [transport.py] [_log()] starting thread (client mode): 0xa2d573a0
2026-02-11T14:31:00.080 [DEBUG] [Thread-130588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:31:00.093 [DEBUG] [Thread-130588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:31:00.094 [INFO] [Thread-130588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:31:00.101 [DEBUG] [Thread-130588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:31:00.101 [DEBUG] [Thread-130588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:31:00.101 [DEBUG] [Thread-130588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:31:00.101 [DEBUG] [Thread-130588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:31:00.101 [DEBUG] [Thread-130588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] client lang: <none>
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] server lang: <none>
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] kex follows: False
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:31:00.102 [DEBUG] [Thread-130588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:31:00.103 [DEBUG] [Thread-130588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:31:00.103 [DEBUG] [Thread-130588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:31:00.103 [DEBUG] [Thread-130588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:31:00.103 [DEBUG] [Thread-130588] [transport.py] [_log()] Compression: none
2026-02-11T14:31:00.103 [DEBUG] [Thread-130588] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:31:00.160 [DEBUG] [Thread-130588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:31:00.160 [DEBUG] [Thread-130588] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:31:00.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:31:00.161 [DEBUG] [Thread-130588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:31:00.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:31:00.216 [DEBUG] [Thread-130588] [transport.py] [_log()] userauth is OK
2026-02-11T14:31:00.216 [DEBUG] [Thread-130588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:31:00.216 [DEBUG] [Thread-130588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:31:00.216 [DEBUG] [Thread-130588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:31:00.216 [DEBUG] [Thread-130588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:31:00.238 [INFO] [Thread-130588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:31:00.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:31:00.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:31:01.043 [DEBUG] [Thread-130588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:31:01.043 [DEBUG] [Thread-130588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:31:01.091 [DEBUG] [Thread-130588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:31:01.091 [DEBUG] [Thread-130588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:31:01.100 [DEBUG] [Thread-130588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:31:01.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:31:01.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')
2026-02-11T14:31:01.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:31:01.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:31:01.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:31:01.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:31:01.134 [DEBUG] [Thread-130588] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:31:02.237 [DEBUG] [Thread-130590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:31:17.285 [DEBUG] [Thread-130591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:31:19.779 [DEBUG] [Thread-130592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:31:25.448 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:31:25.449 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:31:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:31:31.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:31:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:31:32.323 [DEBUG] [Thread-130593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:31:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 31, 3), 16.1, 35.85, 0.0, 26.98, 24.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:31:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:31:03
2026-02-11T14:31:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:31:33.650 [DEBUG] [Thread-130594] [transport.py] [_log()] starting thread (client mode): 0xa81d7af0
2026-02-11T14:31:33.650 [DEBUG] [Thread-130594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:31:33.669 [DEBUG] [Thread-130594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:31:33.670 [INFO] [Thread-130594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] client lang: <none>
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] server lang: <none>
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] kex follows: False
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] Compression: none
2026-02-11T14:31:33.671 [DEBUG] [Thread-130594] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:31:33.681 [DEBUG] [Thread-130594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:31:33.682 [DEBUG] [Thread-130594] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:31:33.682 [DEBUG] [Thread-130594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:31:33.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:31:33.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:31:33.684 [DEBUG] [Thread-130594] [transport.py] [_log()] userauth is OK
2026-02-11T14:31:33.685 [DEBUG] [Thread-130594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:31:33.685 [DEBUG] [Thread-130594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:31:33.685 [DEBUG] [Thread-130594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:31:33.685 [DEBUG] [Thread-130594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:31:33.699 [INFO] [Thread-130594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:31:33.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:31:34.231 [DEBUG] [Thread-130594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:31:34.232 [DEBUG] [Thread-130594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:31:34.232 [DEBUG] [Thread-130594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:31:34.272 [DEBUG] [Thread-130594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:31:34.273 [DEBUG] [Thread-130594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:31:34.276 [DEBUG] [Thread-130594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:31:34.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:31:34.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:31:34.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:31:34.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:31:34.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:31:34.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:31:34.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:31:34.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:31:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:31:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.521670 -999.00  +23.80  24.47     42  +10.40 1 2 1 1 1   888    0 14.29 18.42 ----- 25.8 24.5 305.0 31.7 29.5 -18.0 29.1 -16.9 29.0 -15.4 29.1 -21.0
2026-02-11T14:31:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:31:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:31:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.521670
2026-02-11T14:31:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:31:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:31:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:31:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:31:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:31:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:31:03', tmtdew=16.1, humidity=35.85, cloud=0.0, wind=26.98, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:31:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:31:34.305 [DEBUG] [Thread-130594] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:31:34.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:31:34.400 [DEBUG] [Thread-130597] [transport.py] [_log()] starting thread (client mode): 0xa2d574f0
2026-02-11T14:31:34.400 [DEBUG] [Thread-130597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:31:34.414 [DEBUG] [Thread-130597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:31:34.414 [INFO] [Thread-130597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:31:34.422 [DEBUG] [Thread-130597] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:31:34.422 [DEBUG] [Thread-130597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:31:34.422 [DEBUG] [Thread-130597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:31:34.422 [DEBUG] [Thread-130597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] client lang: <none>
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] server lang: <none>
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] kex follows: False
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] Compression: none
2026-02-11T14:31:34.423 [DEBUG] [Thread-130597] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:31:34.481 [DEBUG] [Thread-130597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:31:34.481 [DEBUG] [Thread-130597] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:31:34.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:31:34.482 [DEBUG] [Thread-130597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:31:34.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:31:34.536 [DEBUG] [Thread-130597] [transport.py] [_log()] userauth is OK
2026-02-11T14:31:34.537 [DEBUG] [Thread-130597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:31:34.537 [DEBUG] [Thread-130597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:31:34.537 [DEBUG] [Thread-130597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:31:34.537 [DEBUG] [Thread-130597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:31:34.555 [INFO] [Thread-130597] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:31:34.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:31:34.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:31:35.372 [DEBUG] [Thread-130597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:31:35.372 [DEBUG] [Thread-130597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:31:35.420 [DEBUG] [Thread-130597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:31:35.421 [DEBUG] [Thread-130597] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:31:35.430 [DEBUG] [Thread-130597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:31:35.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:31:35.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:31:35.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:31:35.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:31:35.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:31:35.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:31:35.467 [DEBUG] [Thread-130597] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:31:47.357 [DEBUG] [Thread-130599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:32:02.408 [DEBUG] [Thread-130600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:32:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:32:05.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:32:05.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:32:07.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 31, 40), 17.03, 33.77, 0.0, 25.44, 24.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:32:07.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:31:40
2026-02-11T14:32:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:32:07.951 [DEBUG] [Thread-130601] [transport.py] [_log()] starting thread (client mode): 0xa57d5390
2026-02-11T14:32:07.951 [DEBUG] [Thread-130601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:32:07.971 [DEBUG] [Thread-130601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:32:07.971 [INFO] [Thread-130601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] client lang: <none>
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] server lang: <none>
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] kex follows: False
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] Compression: none
2026-02-11T14:32:07.975 [DEBUG] [Thread-130601] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:32:07.992 [DEBUG] [Thread-130601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:32:07.992 [DEBUG] [Thread-130601] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:32:07.993 [DEBUG] [Thread-130601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:32:07.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:32:07.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:32:08.037 [DEBUG] [Thread-130601] [transport.py] [_log()] userauth is OK
2026-02-11T14:32:08.037 [DEBUG] [Thread-130601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:32:08.038 [DEBUG] [Thread-130601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:32:08.038 [DEBUG] [Thread-130601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:32:08.038 [DEBUG] [Thread-130601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:32:08.070 [INFO] [Thread-130601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:32:08.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:32:08.735 [DEBUG] [Thread-130601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:32:08.735 [DEBUG] [Thread-130601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:32:08.735 [DEBUG] [Thread-130601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:32:08.775 [DEBUG] [Thread-130601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:32:08.776 [DEBUG] [Thread-130601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:32:08.779 [DEBUG] [Thread-130601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:32:08.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:32:08.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:32:08.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:32:08.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:32:08.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:32:08.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:32:08.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:32:08.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:32:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:32:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.522018 -999.00  +24.00  17.82     42  +10.30 1 2 1 1 1   888    0 14.25 16.26 ----- 27.8 17.8 307.8 36.5 29.7 -18.0 29.2 -16.6 29.3 -14.6 29.7 -16.2
2026-02-11T14:32:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:32:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:32:08.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.522018
2026-02-11T14:32:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:32:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:32:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:32:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:32:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:32:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:31:40', tmtdew=17.03, humidity=33.77, cloud=0.0, wind=25.44, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:31:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:32:08.806 [DEBUG] [Thread-130601] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:32:08.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:32:08.904 [DEBUG] [Thread-130604] [transport.py] [_log()] starting thread (client mode): 0xa57d5ab0
2026-02-11T14:32:08.904 [DEBUG] [Thread-130604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:32:08.919 [DEBUG] [Thread-130604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:32:08.919 [INFO] [Thread-130604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:32:08.926 [DEBUG] [Thread-130604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:32:08.927 [DEBUG] [Thread-130604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:32:08.927 [DEBUG] [Thread-130604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:32:08.927 [DEBUG] [Thread-130604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:08.927 [DEBUG] [Thread-130604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:08.927 [DEBUG] [Thread-130604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:08.927 [DEBUG] [Thread-130604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:08.927 [DEBUG] [Thread-130604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] client lang: <none>
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] server lang: <none>
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] kex follows: False
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] Compression: none
2026-02-11T14:32:08.928 [DEBUG] [Thread-130604] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:32:08.985 [DEBUG] [Thread-130604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:32:08.985 [DEBUG] [Thread-130604] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:32:08.986 [DEBUG] [Thread-130604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:32:08.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:32:08.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:32:09.041 [DEBUG] [Thread-130604] [transport.py] [_log()] userauth is OK
2026-02-11T14:32:09.043 [DEBUG] [Thread-130604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:32:09.043 [DEBUG] [Thread-130604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:32:09.043 [DEBUG] [Thread-130604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:32:09.043 [DEBUG] [Thread-130604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:32:09.063 [INFO] [Thread-130604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:32:09.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:32:09.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:32:09.904 [DEBUG] [Thread-130604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:32:09.905 [DEBUG] [Thread-130604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:32:09.952 [DEBUG] [Thread-130604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:32:09.953 [DEBUG] [Thread-130604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:32:09.962 [DEBUG] [Thread-130604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:32:09.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:32:09.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:32:09.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:32:09.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:32:09.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:32:09.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:32:09.997 [DEBUG] [Thread-130604] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:32:17.445 [DEBUG] [Thread-130606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:32:19.814 [DEBUG] [Thread-130607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:32:25.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:32:25.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:32:32.496 [DEBUG] [Thread-130608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:32:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:32:40.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:32:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:32:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 32, 15), 15.9, 36.25, 0.0, 27.44, 24.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:32:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:32:15
2026-02-11T14:32:42.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:32:42.535 [DEBUG] [Thread-130609] [transport.py] [_log()] starting thread (client mode): 0xa2d13f70
2026-02-11T14:32:42.535 [DEBUG] [Thread-130609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:32:42.551 [DEBUG] [Thread-130609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:32:42.551 [INFO] [Thread-130609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:32:42.554 [DEBUG] [Thread-130609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:32:42.554 [DEBUG] [Thread-130609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:32:42.554 [DEBUG] [Thread-130609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] client lang: <none>
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] server lang: <none>
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] kex follows: False
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] Compression: none
2026-02-11T14:32:42.555 [DEBUG] [Thread-130609] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:32:42.574 [DEBUG] [Thread-130609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:32:42.574 [DEBUG] [Thread-130609] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:32:42.575 [DEBUG] [Thread-130609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:32:42.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:32:42.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:32:42.577 [DEBUG] [Thread-130609] [transport.py] [_log()] userauth is OK
2026-02-11T14:32:42.577 [DEBUG] [Thread-130609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:32:42.577 [DEBUG] [Thread-130609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:32:42.578 [DEBUG] [Thread-130609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:32:42.578 [DEBUG] [Thread-130609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:32:42.604 [INFO] [Thread-130609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:32:42.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:32:43.234 [DEBUG] [Thread-130609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:32:43.234 [DEBUG] [Thread-130609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:32:43.234 [DEBUG] [Thread-130609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:32:43.275 [DEBUG] [Thread-130609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:32:43.275 [DEBUG] [Thread-130609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:32:43.278 [DEBUG] [Thread-130609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:32:43.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:32:43.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:32:43.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:32:43.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:32:43.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:32:43.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:32:43.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:32:43.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:32:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:32:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.522365 -999.00  +24.90  36.19     40  +10.60 1 2 2 1 1   888    0 14.19 16.61 ----- 41.6 36.2 288.8 46.5 29.8 -19.6 29.4 -18.5 29.6 -17.5 29.9 -15.4
2026-02-11T14:32:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:32:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:32:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.522365
2026-02-11T14:32:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:32:43.297 [DEBUG] [Thread-130609] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:32:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:32:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:32:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:32:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:32:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:32:15', tmtdew=15.9, humidity=36.25, cloud=0.0, wind=27.44, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:32:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:32:43.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:32:43.399 [DEBUG] [Thread-130612] [transport.py] [_log()] starting thread (client mode): 0xa2d00910
2026-02-11T14:32:43.400 [DEBUG] [Thread-130612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:32:43.414 [DEBUG] [Thread-130612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:32:43.414 [INFO] [Thread-130612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:32:43.422 [DEBUG] [Thread-130612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:32:43.422 [DEBUG] [Thread-130612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:32:43.422 [DEBUG] [Thread-130612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:32:43.422 [DEBUG] [Thread-130612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:43.422 [DEBUG] [Thread-130612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] client lang: <none>
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] server lang: <none>
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] kex follows: False
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] Compression: none
2026-02-11T14:32:43.423 [DEBUG] [Thread-130612] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:32:43.480 [DEBUG] [Thread-130612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:32:43.480 [DEBUG] [Thread-130612] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:32:43.481 [DEBUG] [Thread-130612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:32:43.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:32:43.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:32:43.537 [DEBUG] [Thread-130612] [transport.py] [_log()] userauth is OK
2026-02-11T14:32:43.537 [DEBUG] [Thread-130612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:32:43.537 [DEBUG] [Thread-130612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:32:43.537 [DEBUG] [Thread-130612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:32:43.537 [DEBUG] [Thread-130612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:32:43.557 [INFO] [Thread-130612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:32:43.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:32:43.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:32:44.409 [DEBUG] [Thread-130612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:32:44.410 [DEBUG] [Thread-130612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:32:44.457 [DEBUG] [Thread-130612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:32:44.457 [DEBUG] [Thread-130612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:32:44.467 [DEBUG] [Thread-130612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:32:44.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:32:44.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:32:44.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:32:44.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:32:44.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:32:44.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:32:44.502 [DEBUG] [Thread-130612] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:32:47.536 [DEBUG] [Thread-130614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:02.584 [DEBUG] [Thread-130615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:14.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:33:14.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:33:14.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:33:16.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 32, 51), 16.41, 35.35, 0.0, 33.26, 24.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:33:16.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:32:51
2026-02-11T14:33:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:33:16.893 [DEBUG] [Thread-130616] [transport.py] [_log()] starting thread (client mode): 0xa57d6aa0
2026-02-11T14:33:16.893 [DEBUG] [Thread-130616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:33:16.911 [DEBUG] [Thread-130616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:33:16.911 [INFO] [Thread-130616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] client lang: <none>
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] server lang: <none>
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] kex follows: False
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] Compression: none
2026-02-11T14:33:16.914 [DEBUG] [Thread-130616] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:33:16.929 [DEBUG] [Thread-130616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:33:16.929 [DEBUG] [Thread-130616] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:33:16.929 [DEBUG] [Thread-130616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:33:16.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:33:16.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:33:16.930 [DEBUG] [Thread-130616] [transport.py] [_log()] userauth is OK
2026-02-11T14:33:16.930 [DEBUG] [Thread-130616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:33:16.930 [DEBUG] [Thread-130616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:33:16.930 [DEBUG] [Thread-130616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:33:16.930 [DEBUG] [Thread-130616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:33:16.939 [INFO] [Thread-130616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:33:16.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:33:17.545 [DEBUG] [Thread-130616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:33:17.545 [DEBUG] [Thread-130616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:33:17.545 [DEBUG] [Thread-130616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:33:17.586 [DEBUG] [Thread-130616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:33:17.587 [DEBUG] [Thread-130616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:33:17.590 [DEBUG] [Thread-130616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:33:17.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:33:17.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:33:17.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:33:17.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:33:17.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:33:17.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:33:17.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:33:17.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:33:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:33:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.522712 -999.00  +24.40  25.65     41  +10.50 1 2 1 1 1   888    0 14.30 15.89 ----- 28.4 25.6 297.6 48.5 29.8 -18.7 29.3 -18.0 29.3 -16.9 30.1 -17.8
2026-02-11T14:33:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:33:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:33:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.522712
2026-02-11T14:33:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:33:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:33:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:33:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:33:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:33:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:32:51', tmtdew=16.41, humidity=35.35, cloud=0.0, wind=33.26, temperature=24.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:32:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:33:17.617 [DEBUG] [Thread-130616] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:33:17.619 [DEBUG] [Thread-130619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:17.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:33:17.713 [DEBUG] [Thread-130620] [transport.py] [_log()] starting thread (client mode): 0xa81d51e0
2026-02-11T14:33:17.713 [DEBUG] [Thread-130620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:33:17.729 [DEBUG] [Thread-130620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:33:17.729 [INFO] [Thread-130620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:33:17.736 [DEBUG] [Thread-130620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:33:17.738 [DEBUG] [Thread-130620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:33:17.738 [DEBUG] [Thread-130620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] client lang: <none>
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] server lang: <none>
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] kex follows: False
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] Compression: none
2026-02-11T14:33:17.739 [DEBUG] [Thread-130620] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:33:17.798 [DEBUG] [Thread-130620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:33:17.799 [DEBUG] [Thread-130620] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:33:17.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:33:17.800 [DEBUG] [Thread-130620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:33:17.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:33:17.857 [DEBUG] [Thread-130620] [transport.py] [_log()] userauth is OK
2026-02-11T14:33:17.857 [DEBUG] [Thread-130620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:33:17.857 [DEBUG] [Thread-130620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:33:17.857 [DEBUG] [Thread-130620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:33:17.858 [DEBUG] [Thread-130620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:33:17.883 [INFO] [Thread-130620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:33:17.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:33:17.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:33:18.770 [DEBUG] [Thread-130620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:33:18.779 [DEBUG] [Thread-130620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:33:18.818 [DEBUG] [Thread-130620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:33:18.819 [DEBUG] [Thread-130620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:33:18.829 [DEBUG] [Thread-130620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:33:18.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:33:18.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:33:18.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:33:18.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:33:18.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:33:18.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:33:18.865 [DEBUG] [Thread-130620] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:33:19.862 [DEBUG] [Thread-130622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:25.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:25.739 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:32.664 [DEBUG] [Thread-130623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:47.700 [DEBUG] [Thread-130624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:33:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:33:48.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:33:48.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:33:50.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 33, 26), 16.61, 34.95, 0.0, 33.44, 24.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:33:50.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:33:26
2026-02-11T14:33:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:33:51.219 [DEBUG] [Thread-130625] [transport.py] [_log()] starting thread (client mode): 0xa2d03fa0
2026-02-11T14:33:51.219 [DEBUG] [Thread-130625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:33:51.232 [DEBUG] [Thread-130625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:33:51.232 [INFO] [Thread-130625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] client lang: <none>
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] server lang: <none>
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] kex follows: False
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:33:51.235 [DEBUG] [Thread-130625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:33:51.236 [DEBUG] [Thread-130625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:33:51.236 [DEBUG] [Thread-130625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:33:51.236 [DEBUG] [Thread-130625] [transport.py] [_log()] Compression: none
2026-02-11T14:33:51.236 [DEBUG] [Thread-130625] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:33:51.254 [DEBUG] [Thread-130625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:33:51.254 [DEBUG] [Thread-130625] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:33:51.254 [DEBUG] [Thread-130625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:33:51.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:33:51.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:33:51.297 [DEBUG] [Thread-130625] [transport.py] [_log()] userauth is OK
2026-02-11T14:33:51.297 [DEBUG] [Thread-130625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:33:51.297 [DEBUG] [Thread-130625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:33:51.297 [DEBUG] [Thread-130625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:33:51.298 [DEBUG] [Thread-130625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:33:51.345 [INFO] [Thread-130625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:33:51.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:33:51.975 [DEBUG] [Thread-130625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:33:51.985 [DEBUG] [Thread-130625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:33:51.985 [DEBUG] [Thread-130625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:33:52.016 [DEBUG] [Thread-130625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:33:52.016 [DEBUG] [Thread-130625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:33:52.018 [DEBUG] [Thread-130625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:33:52.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:33:52.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:33:52.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:33:52.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:33:52.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:33:52.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:33:52.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.523406 -999.00  +24.20  32.28     42  +10.50 1 2 2 1 1   888    0 14.09 17.74 ----- 34.6 32.3 293.0 49.3 29.9 -19.0 29.4 -17.7 29.4 -15.7 30.1 -17.2
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.523406
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:33:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:33:26', tmtdew=16.61, humidity=34.95, cloud=0.0, wind=33.44, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:33:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:33:52.041 [DEBUG] [Thread-130625] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:33:52.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:33:52.127 [DEBUG] [Thread-130628] [transport.py] [_log()] starting thread (client mode): 0xa81d7d90
2026-02-11T14:33:52.128 [DEBUG] [Thread-130628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:33:52.149 [DEBUG] [Thread-130628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:33:52.149 [INFO] [Thread-130628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:33:52.156 [DEBUG] [Thread-130628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:33:52.156 [DEBUG] [Thread-130628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:33:52.156 [DEBUG] [Thread-130628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:33:52.156 [DEBUG] [Thread-130628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:52.156 [DEBUG] [Thread-130628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:33:52.156 [DEBUG] [Thread-130628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] client lang: <none>
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] server lang: <none>
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] kex follows: False
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] Compression: none
2026-02-11T14:33:52.157 [DEBUG] [Thread-130628] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:33:52.216 [DEBUG] [Thread-130628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:33:52.217 [DEBUG] [Thread-130628] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:33:52.217 [DEBUG] [Thread-130628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:33:52.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:33:52.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:33:52.273 [DEBUG] [Thread-130628] [transport.py] [_log()] userauth is OK
2026-02-11T14:33:52.273 [DEBUG] [Thread-130628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:33:52.273 [DEBUG] [Thread-130628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:33:52.273 [DEBUG] [Thread-130628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:33:52.273 [DEBUG] [Thread-130628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:33:52.298 [INFO] [Thread-130628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:33:52.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:33:52.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:33:53.152 [DEBUG] [Thread-130628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:33:53.154 [DEBUG] [Thread-130628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:33:53.201 [DEBUG] [Thread-130628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:33:53.201 [DEBUG] [Thread-130628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:33:53.211 [DEBUG] [Thread-130628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:33:53.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:33:53.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:33:53.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:33:53.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:33:53.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:33:53.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:33:53.245 [DEBUG] [Thread-130628] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:34:02.734 [DEBUG] [Thread-130630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:34:17.784 [DEBUG] [Thread-130631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:34:19.910 [DEBUG] [Thread-130632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:34:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:34:23.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:34: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
2026-02-11T14:34:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 34, 1), 16.59, 35.02, 0.0, 33.4, 24.94, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:34:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:34:01
2026-02-11T14:34:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:34:25.800 [DEBUG] [Thread-130633] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-11T14:34:25.800 [DEBUG] [Thread-130633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:34:25.820 [DEBUG] [Thread-130633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:34:25.821 [INFO] [Thread-130633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:34:25.824 [DEBUG] [Thread-130633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] client lang: <none>
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] server lang: <none>
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] kex follows: False
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] Compression: none
2026-02-11T14:34:25.825 [DEBUG] [Thread-130633] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:34:25.845 [DEBUG] [Thread-130633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:34:25.846 [DEBUG] [Thread-130633] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:34:25.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:34:25.848 [DEBUG] [Thread-130633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:34:25.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:34:25.849 [DEBUG] [Thread-130633] [transport.py] [_log()] userauth is OK
2026-02-11T14:34:25.850 [DEBUG] [Thread-130633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:34:25.850 [DEBUG] [Thread-130633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:34:25.850 [DEBUG] [Thread-130633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:34:25.850 [DEBUG] [Thread-130633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:34:25.874 [INFO] [Thread-130633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:34:25.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:34:25.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:34:25.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:34:26.459 [DEBUG] [Thread-130633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:34:26.459 [DEBUG] [Thread-130633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:34:26.460 [DEBUG] [Thread-130633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:34:26.500 [DEBUG] [Thread-130633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:34:26.501 [DEBUG] [Thread-130633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:34:26.504 [DEBUG] [Thread-130633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:34:26.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:34:26.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:34:26.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:34:26.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:34:26.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:34:26.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:34:26.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:34:26.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:34:26.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:34:26.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.523754 -999.00  +24.40  33.22     41  +10.60 1 2 2 1 1   888    0 14.38 18.84 ----- 31.3 33.2 289.8 37.1 30.0 -19.3 29.5 -17.0 29.6 -15.2 30.2 -16.5
2026-02-11T14:34:26.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:34:26.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:34:26.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.523754
2026-02-11T14:34:26.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:34:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:34:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:34:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:34:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:34:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:34:01', tmtdew=16.59, humidity=35.02, cloud=0.0, wind=33.4, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:34:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:34:26.536 [DEBUG] [Thread-130633] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:34:26.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:34:26.631 [DEBUG] [Thread-130636] [transport.py] [_log()] starting thread (client mode): 0xa5743be0
2026-02-11T14:34:26.632 [DEBUG] [Thread-130636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:34:26.646 [DEBUG] [Thread-130636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:34:26.647 [INFO] [Thread-130636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:34:26.654 [DEBUG] [Thread-130636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] client lang: <none>
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] server lang: <none>
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] kex follows: False
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] Compression: none
2026-02-11T14:34:26.655 [DEBUG] [Thread-130636] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:34:26.713 [DEBUG] [Thread-130636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:34:26.714 [DEBUG] [Thread-130636] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:34:26.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:34:26.715 [DEBUG] [Thread-130636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:34:26.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:34:26.773 [DEBUG] [Thread-130636] [transport.py] [_log()] userauth is OK
2026-02-11T14:34:26.773 [DEBUG] [Thread-130636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:34:26.774 [DEBUG] [Thread-130636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:34:26.774 [DEBUG] [Thread-130636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:34:26.774 [DEBUG] [Thread-130636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:34:26.799 [INFO] [Thread-130636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:34:26.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:34:26.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:34:27.671 [DEBUG] [Thread-130636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:34:27.672 [DEBUG] [Thread-130636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:34:27.719 [DEBUG] [Thread-130636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:34:27.720 [DEBUG] [Thread-130636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:34:27.729 [DEBUG] [Thread-130636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:34:27.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:34:27.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')
2026-02-11T14:34:27.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
2026-02-11T14:34:27.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:34:27.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:34:27.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:34:27.765 [DEBUG] [Thread-130636] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:34:32.821 [DEBUG] [Thread-130638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:34:47.871 [DEBUG] [Thread-130639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:34:57.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:34:57.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:34:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:35:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 34, 37), 17.97, 32.08, 0.0, 37.65, 26.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:35:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:34:37
2026-02-11T14:35:00.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:35:00.676 [DEBUG] [Thread-130640] [transport.py] [_log()] starting thread (client mode): 0xa57d6080
2026-02-11T14:35:00.677 [DEBUG] [Thread-130640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:35:00.697 [DEBUG] [Thread-130640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:35:00.697 [INFO] [Thread-130640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:35:00.700 [DEBUG] [Thread-130640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:35:00.700 [DEBUG] [Thread-130640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] client lang: <none>
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] server lang: <none>
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] kex follows: False
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:35:00.701 [DEBUG] [Thread-130640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:35:00.702 [DEBUG] [Thread-130640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:35:00.702 [DEBUG] [Thread-130640] [transport.py] [_log()] Compression: none
2026-02-11T14:35:00.702 [DEBUG] [Thread-130640] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:35:00.720 [DEBUG] [Thread-130640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:35:00.720 [DEBUG] [Thread-130640] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:35:00.721 [DEBUG] [Thread-130640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:35:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:35:00.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:35:00.723 [DEBUG] [Thread-130640] [transport.py] [_log()] userauth is OK
2026-02-11T14:35:00.723 [DEBUG] [Thread-130640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:35:00.723 [DEBUG] [Thread-130640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:35:00.723 [DEBUG] [Thread-130640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:35:00.723 [DEBUG] [Thread-130640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:35:00.748 [INFO] [Thread-130640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:35:00.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:35:01.389 [DEBUG] [Thread-130640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:35:01.389 [DEBUG] [Thread-130640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:35:01.390 [DEBUG] [Thread-130640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:35:01.430 [DEBUG] [Thread-130640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:35:01.430 [DEBUG] [Thread-130640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:35:01.433 [DEBUG] [Thread-130640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:35:01.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:35:01.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:35:01.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:35:01.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:35:01.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:35:01.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:35:01.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:35:01.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:35:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:35:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.524101 -999.00  +24.00  25.68     42  +10.30 1 2 1 1 1   888    0 14.62 21.67 ----- 24.4 25.7 294.6 36.2 29.5 -23.1 29.2 -21.4 29.2 -21.1 30.3 -19.3
2026-02-11T14:35:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:35:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:35:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.524101
2026-02-11T14:35:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:35:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:35:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:35:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:35:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:35:01.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:34:37', tmtdew=17.97, humidity=32.08, cloud=0.0, wind=37.65, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:34:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:35:01.458 [DEBUG] [Thread-130640] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:35:01.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:35:01.553 [DEBUG] [Thread-130643] [transport.py] [_log()] starting thread (client mode): 0xa2d12aa0
2026-02-11T14:35:01.553 [DEBUG] [Thread-130643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:35:01.567 [DEBUG] [Thread-130643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:35:01.567 [INFO] [Thread-130643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:35:01.575 [DEBUG] [Thread-130643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:35:01.575 [DEBUG] [Thread-130643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:35:01.575 [DEBUG] [Thread-130643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:35:01.575 [DEBUG] [Thread-130643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:01.575 [DEBUG] [Thread-130643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] client lang: <none>
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] server lang: <none>
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] kex follows: False
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:35:01.576 [DEBUG] [Thread-130643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:35:01.577 [DEBUG] [Thread-130643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:35:01.577 [DEBUG] [Thread-130643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:35:01.577 [DEBUG] [Thread-130643] [transport.py] [_log()] Compression: none
2026-02-11T14:35:01.577 [DEBUG] [Thread-130643] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:35:01.635 [DEBUG] [Thread-130643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:35:01.636 [DEBUG] [Thread-130643] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:35:01.636 [DEBUG] [Thread-130643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:35:01.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:35:01.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:35:01.693 [DEBUG] [Thread-130643] [transport.py] [_log()] userauth is OK
2026-02-11T14:35:01.693 [DEBUG] [Thread-130643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:35:01.693 [DEBUG] [Thread-130643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:35:01.693 [DEBUG] [Thread-130643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:35:01.693 [DEBUG] [Thread-130643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:35:01.712 [INFO] [Thread-130643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:35:01.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:35:01.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:35:02.553 [DEBUG] [Thread-130643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:35:02.554 [DEBUG] [Thread-130643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:35:02.601 [DEBUG] [Thread-130643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:35:02.601 [DEBUG] [Thread-130643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:35:02.611 [DEBUG] [Thread-130643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:35:02.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:35:02.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:35:02.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
2026-02-11T14:35:02.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:35:02.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:35:02.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:35:02.648 [DEBUG] [Thread-130643] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:35:02.909 [DEBUG] [Thread-130645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:35:17.953 [DEBUG] [Thread-130646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:35:19.956 [DEBUG] [Thread-130647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:35:26.021 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:35:26.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:35:32.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:35:32.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:35:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:35:32.987 [DEBUG] [Thread-130648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:35:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 35, 12), 15.95, 36.28, 0.0, 26.34, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:35:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:35:12
2026-02-11T14:35:34.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:35:35.104 [DEBUG] [Thread-130649] [transport.py] [_log()] starting thread (client mode): 0xa81d5870
2026-02-11T14:35:35.104 [DEBUG] [Thread-130649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:35:35.124 [DEBUG] [Thread-130649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:35:35.125 [INFO] [Thread-130649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] client lang: <none>
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] server lang: <none>
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] kex follows: False
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] Compression: none
2026-02-11T14:35:35.128 [DEBUG] [Thread-130649] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:35:35.145 [DEBUG] [Thread-130649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:35:35.146 [DEBUG] [Thread-130649] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:35:35.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:35:35.147 [DEBUG] [Thread-130649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:35:35.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:35:35.149 [DEBUG] [Thread-130649] [transport.py] [_log()] userauth is OK
2026-02-11T14:35:35.149 [DEBUG] [Thread-130649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:35:35.150 [DEBUG] [Thread-130649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:35:35.150 [DEBUG] [Thread-130649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:35:35.150 [DEBUG] [Thread-130649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:35:35.186 [INFO] [Thread-130649] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:35:35.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:35:35.839 [DEBUG] [Thread-130649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:35:35.839 [DEBUG] [Thread-130649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:35:35.839 [DEBUG] [Thread-130649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:35:35.879 [DEBUG] [Thread-130649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:35:35.880 [DEBUG] [Thread-130649] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:35:35.883 [DEBUG] [Thread-130649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:35:35.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:35:35.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:35:35.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:35:35.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:35:35.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:35:35.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:35:35.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:35:35.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:35:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:35:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.524448 -999.00  +23.70  21.00     43  +10.30 1 2 1 1 1   888    0 14.73 20.24 ----- 19.5 21.0 283.2 27.7 29.1 -22.6 28.9 -20.9 28.8 -22.5 29.8 -22.4
2026-02-11T14:35:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:35:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:35:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.524448
2026-02-11T14:35:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:35:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:35:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:35:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:35:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:35:35.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:35:12', tmtdew=15.95, humidity=36.28, cloud=0.0, wind=26.34, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:35:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:35:35.911 [DEBUG] [Thread-130649] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:35:35.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:35:36.007 [DEBUG] [Thread-130652] [transport.py] [_log()] starting thread (client mode): 0xa2d13fa0
2026-02-11T14:35:36.007 [DEBUG] [Thread-130652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:35:36.022 [DEBUG] [Thread-130652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:35:36.023 [INFO] [Thread-130652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] client lang: <none>
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] server lang: <none>
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] kex follows: False
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:35:36.031 [DEBUG] [Thread-130652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:35:36.032 [DEBUG] [Thread-130652] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:35:36.032 [DEBUG] [Thread-130652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:35:36.032 [DEBUG] [Thread-130652] [transport.py] [_log()] Compression: none
2026-02-11T14:35:36.032 [DEBUG] [Thread-130652] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:35:36.092 [DEBUG] [Thread-130652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:35:36.093 [DEBUG] [Thread-130652] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:35:36.094 [DEBUG] [Thread-130652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:35:36.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:35:36.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:35:36.148 [DEBUG] [Thread-130652] [transport.py] [_log()] userauth is OK
2026-02-11T14:35:36.149 [DEBUG] [Thread-130652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:35:36.149 [DEBUG] [Thread-130652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:35:36.149 [DEBUG] [Thread-130652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:35:36.149 [DEBUG] [Thread-130652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:35:36.172 [INFO] [Thread-130652] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:35:36.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:35:36.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:35:36.981 [DEBUG] [Thread-130652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:35:36.982 [DEBUG] [Thread-130652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:35:37.029 [DEBUG] [Thread-130652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:35:37.029 [DEBUG] [Thread-130652] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:35:37.038 [DEBUG] [Thread-130652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:35:37.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:35:37.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:35:37.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:35:37.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:35:37.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:35:37.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:35:37.074 [DEBUG] [Thread-130652] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:35:48.025 [DEBUG] [Thread-130654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:36:03.085 [DEBUG] [Thread-130655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:36:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:36:07.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:36:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:36:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 35, 47), 15.85, 36.47, 0.0, 24.88, 24.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:36:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:35:47
2026-02-11T14:36:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:36:09.406 [DEBUG] [Thread-130656] [transport.py] [_log()] starting thread (client mode): 0xa57d4670
2026-02-11T14:36:09.406 [DEBUG] [Thread-130656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:36:09.422 [DEBUG] [Thread-130656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:36:09.422 [INFO] [Thread-130656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] client lang: <none>
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] server lang: <none>
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] kex follows: False
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] Compression: none
2026-02-11T14:36:09.425 [DEBUG] [Thread-130656] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:36:09.442 [DEBUG] [Thread-130656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:36:09.443 [DEBUG] [Thread-130656] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:36:09.443 [DEBUG] [Thread-130656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:36:09.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:36:09.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:36:09.445 [DEBUG] [Thread-130656] [transport.py] [_log()] userauth is OK
2026-02-11T14:36:09.446 [DEBUG] [Thread-130656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:36:09.446 [DEBUG] [Thread-130656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:36:09.446 [DEBUG] [Thread-130656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:36:09.446 [DEBUG] [Thread-130656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:36:09.480 [INFO] [Thread-130656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:36:09.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:36:10.161 [DEBUG] [Thread-130656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:36:10.161 [DEBUG] [Thread-130656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:36:10.162 [DEBUG] [Thread-130656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:36:10.203 [DEBUG] [Thread-130656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:36:10.203 [DEBUG] [Thread-130656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:36:10.206 [DEBUG] [Thread-130656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:36:10.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:36:10.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:36:10.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:36:10.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:36:10.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:36:10.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:36:10.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:36:10.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:36:10.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:36:10.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.524795 -999.00  +23.80  24.52     42  +10.40 1 2 1 1 1   888    0 14.49 17.23 ----- 21.8 24.5 279.4 35.5 28.8 -24.2 28.6 -21.3 28.2 -23.1 29.4 -23.0
2026-02-11T14:36:10.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:36:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:36:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.524795
2026-02-11T14:36:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:36:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:36:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:36:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:36:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:36:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:35:47', tmtdew=15.85, humidity=36.47, cloud=0.0, wind=24.88, temperature=24.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:35:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:36:10.235 [DEBUG] [Thread-130656] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:36:10.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:36:10.335 [DEBUG] [Thread-130659] [transport.py] [_log()] starting thread (client mode): 0xa81d7790
2026-02-11T14:36:10.335 [DEBUG] [Thread-130659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:36:10.349 [DEBUG] [Thread-130659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:36:10.349 [INFO] [Thread-130659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:36:10.357 [DEBUG] [Thread-130659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:36:10.357 [DEBUG] [Thread-130659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:36:10.357 [DEBUG] [Thread-130659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:36:10.357 [DEBUG] [Thread-130659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:10.357 [DEBUG] [Thread-130659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] client lang: <none>
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] server lang: <none>
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] kex follows: False
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] Compression: none
2026-02-11T14:36:10.358 [DEBUG] [Thread-130659] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:36:10.416 [DEBUG] [Thread-130659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:36:10.417 [DEBUG] [Thread-130659] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:36:10.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:36:10.418 [DEBUG] [Thread-130659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:36:10.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:36:10.473 [DEBUG] [Thread-130659] [transport.py] [_log()] userauth is OK
2026-02-11T14:36:10.473 [DEBUG] [Thread-130659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:36:10.473 [DEBUG] [Thread-130659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:36:10.474 [DEBUG] [Thread-130659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:36:10.474 [DEBUG] [Thread-130659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:36:10.492 [INFO] [Thread-130659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:36:10.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:36:10.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:36:11.310 [DEBUG] [Thread-130659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:36:11.310 [DEBUG] [Thread-130659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:36:11.358 [DEBUG] [Thread-130659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:36:11.359 [DEBUG] [Thread-130659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:36:11.368 [DEBUG] [Thread-130659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:36:11.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:36:11.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:36:11.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:36:11.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:36:11.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:36:11.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:36:11.404 [DEBUG] [Thread-130659] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:36:18.118 [DEBUG] [Thread-130661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:36:20.013 [DEBUG] [Thread-130662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:36:26.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:36:26.166 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:36:33.168 [DEBUG] [Thread-130663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:36:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:36:41.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:36:41.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:36:43.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 36, 23), 15.74, 36.73, 0.0, 28.32, 24.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:36:43.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:36:23
2026-02-11T14:36:43.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:36:43.919 [DEBUG] [Thread-130664] [transport.py] [_log()] starting thread (client mode): 0xa81d7ca0
2026-02-11T14:36:43.919 [DEBUG] [Thread-130664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:36:43.940 [DEBUG] [Thread-130664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:36:43.940 [INFO] [Thread-130664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] client lang: <none>
2026-02-11T14:36:43.943 [DEBUG] [Thread-130664] [transport.py] [_log()] server lang: <none>
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] kex follows: False
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] Compression: none
2026-02-11T14:36:43.944 [DEBUG] [Thread-130664] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:36:43.963 [DEBUG] [Thread-130664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:36:43.964 [DEBUG] [Thread-130664] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:36:43.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:36:43.966 [DEBUG] [Thread-130664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:36:43.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:36:44.005 [DEBUG] [Thread-130664] [transport.py] [_log()] userauth is OK
2026-02-11T14:36:44.005 [DEBUG] [Thread-130664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:36:44.006 [DEBUG] [Thread-130664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:36:44.006 [DEBUG] [Thread-130664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:36:44.006 [DEBUG] [Thread-130664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:36:44.040 [INFO] [Thread-130664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:36:44.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:36:44.654 [DEBUG] [Thread-130664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:36:44.664 [DEBUG] [Thread-130664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:36:44.664 [DEBUG] [Thread-130664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:36:44.695 [DEBUG] [Thread-130664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:36:44.696 [DEBUG] [Thread-130664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:36:44.699 [DEBUG] [Thread-130664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:36:44.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:36:44.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:36:44.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:36:44.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:36:44.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:36:44.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:36:44.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:36:44.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:36:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:36:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.525143 -999.00  +23.60  22.77     42  +10.20 1 2 1 1 1   888    0 14.01 10.90 ----- 27.4 22.8 293.4 35.4 28.4 -21.4 28.2 -21.1 27.6 -20.0 28.9 -23.3
2026-02-11T14:36:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:36:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:36:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.525143
2026-02-11T14:36:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:36:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:36:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:36:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:36:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:36:44.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:36:23', tmtdew=15.74, humidity=36.73, cloud=0.0, wind=28.32, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:36:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:36:44.727 [DEBUG] [Thread-130664] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:36:44.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:36:44.822 [DEBUG] [Thread-130667] [transport.py] [_log()] starting thread (client mode): 0xa2d13f70
2026-02-11T14:36:44.823 [DEBUG] [Thread-130667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:36:44.837 [DEBUG] [Thread-130667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:36:44.837 [INFO] [Thread-130667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] client lang: <none>
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] server lang: <none>
2026-02-11T14:36:44.845 [DEBUG] [Thread-130667] [transport.py] [_log()] kex follows: False
2026-02-11T14:36:44.846 [DEBUG] [Thread-130667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:36:44.846 [DEBUG] [Thread-130667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:36:44.846 [DEBUG] [Thread-130667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:36:44.846 [DEBUG] [Thread-130667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:36:44.846 [DEBUG] [Thread-130667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:36:44.846 [DEBUG] [Thread-130667] [transport.py] [_log()] Compression: none
2026-02-11T14:36:44.846 [DEBUG] [Thread-130667] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:36:44.905 [DEBUG] [Thread-130667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:36:44.905 [DEBUG] [Thread-130667] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:36:44.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:36:44.907 [DEBUG] [Thread-130667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:36:44.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:36:44.961 [DEBUG] [Thread-130667] [transport.py] [_log()] userauth is OK
2026-02-11T14:36:44.961 [DEBUG] [Thread-130667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:36:44.962 [DEBUG] [Thread-130667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:36:44.962 [DEBUG] [Thread-130667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:36:44.962 [DEBUG] [Thread-130667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:36:44.980 [INFO] [Thread-130667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:36:44.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:36:45.821 [DEBUG] [Thread-130667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:36:45.821 [DEBUG] [Thread-130667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:36:45.869 [DEBUG] [Thread-130667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:36:45.870 [DEBUG] [Thread-130667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:36:45.879 [DEBUG] [Thread-130667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:36:45.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:36:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:36:45.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:36:45.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:36:45.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:36:45.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:36:45.916 [DEBUG] [Thread-130667] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:36:48.202 [DEBUG] [Thread-130669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:03.253 [DEBUG] [Thread-130670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:37:15.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:37:15.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:37:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 36, 58), 16.31, 35.57, 0.0, 30.3, 24.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:37:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:36:58
2026-02-11T14:37:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:37:18.287 [DEBUG] [Thread-130671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:18.307 [DEBUG] [Thread-130672] [transport.py] [_log()] starting thread (client mode): 0xa5773940
2026-02-11T14:37:18.307 [DEBUG] [Thread-130672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:37:18.329 [DEBUG] [Thread-130672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:37:18.329 [INFO] [Thread-130672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] client lang: <none>
2026-02-11T14:37:18.332 [DEBUG] [Thread-130672] [transport.py] [_log()] server lang: <none>
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] kex follows: False
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] Compression: none
2026-02-11T14:37:18.333 [DEBUG] [Thread-130672] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:37:18.352 [DEBUG] [Thread-130672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:37:18.352 [DEBUG] [Thread-130672] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:37:18.353 [DEBUG] [Thread-130672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:37:18.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:37:18.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:37:18.355 [DEBUG] [Thread-130672] [transport.py] [_log()] userauth is OK
2026-02-11T14:37:18.355 [DEBUG] [Thread-130672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:37:18.356 [DEBUG] [Thread-130672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:37:18.356 [DEBUG] [Thread-130672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:37:18.356 [DEBUG] [Thread-130672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:37:18.375 [INFO] [Thread-130672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:37:18.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:37:19.172 [DEBUG] [Thread-130672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:37:19.172 [DEBUG] [Thread-130672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:37:19.173 [DEBUG] [Thread-130672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:37:19.213 [DEBUG] [Thread-130672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:37:19.214 [DEBUG] [Thread-130672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:37:19.217 [DEBUG] [Thread-130672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:37:19.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:37:19.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:37:19.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:37:19.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:37:19.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:37:19.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:37:19.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:37:19.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:37:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:37:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.525490 -999.00  +23.60  28.84     42  +10.00 1 2 1 1 1   888    0 14.02 6.83 ----- 28.0 28.8 276.4 35.9 28.1 -21.8 28.1 -20.5 27.5 -24.6 28.6 -21.9
2026-02-11T14:37:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:37:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:37:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.525490
2026-02-11T14:37:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:37:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:37:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:37:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:37:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:37:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:36:58', tmtdew=16.31, humidity=35.57, cloud=0.0, wind=30.3, temperature=24.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:36:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:37:19.243 [DEBUG] [Thread-130672] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:37:19.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:37:19.336 [DEBUG] [Thread-130675] [transport.py] [_log()] starting thread (client mode): 0xa5772cb0
2026-02-11T14:37:19.337 [DEBUG] [Thread-130675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:37:19.351 [DEBUG] [Thread-130675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:37:19.351 [INFO] [Thread-130675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:37:19.359 [DEBUG] [Thread-130675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:37:19.359 [DEBUG] [Thread-130675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:37:19.359 [DEBUG] [Thread-130675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:37:19.359 [DEBUG] [Thread-130675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] client lang: <none>
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] server lang: <none>
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] kex follows: False
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] Compression: none
2026-02-11T14:37:19.360 [DEBUG] [Thread-130675] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:37:19.421 [DEBUG] [Thread-130675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:37:19.421 [DEBUG] [Thread-130675] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:37:19.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:37:19.422 [DEBUG] [Thread-130675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:37:19.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:37:19.476 [DEBUG] [Thread-130675] [transport.py] [_log()] userauth is OK
2026-02-11T14:37:19.476 [DEBUG] [Thread-130675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:37:19.476 [DEBUG] [Thread-130675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:37:19.476 [DEBUG] [Thread-130675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:37:19.476 [DEBUG] [Thread-130675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:37:19.495 [INFO] [Thread-130675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:37:19.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:37:19.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:37:20.065 [DEBUG] [Thread-130677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:20.330 [DEBUG] [Thread-130675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:37:20.330 [DEBUG] [Thread-130675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:37:20.378 [DEBUG] [Thread-130675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:37:20.378 [DEBUG] [Thread-130675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:37:20.386 [DEBUG] [Thread-130675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:37:20.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:37:20.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:37:20.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:37:20.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:37:20.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:37:20.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:37:20.418 [DEBUG] [Thread-130675] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:37:26.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:26.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:33.315 [DEBUG] [Thread-130678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:48.367 [DEBUG] [Thread-130679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:37:50.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:37:50.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:37:50.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
2026-02-11T14:37:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 37, 33), 18.09, 31.81, 0.0, 27.7, 26.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:37:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:37:33
2026-02-11T14:37:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:37:52.852 [DEBUG] [Thread-130680] [transport.py] [_log()] starting thread (client mode): 0xa57d7c70
2026-02-11T14:37:52.852 [DEBUG] [Thread-130680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:37:52.873 [DEBUG] [Thread-130680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:37:52.873 [INFO] [Thread-130680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:37:52.876 [DEBUG] [Thread-130680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:37:52.876 [DEBUG] [Thread-130680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:37:52.876 [DEBUG] [Thread-130680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:37:52.876 [DEBUG] [Thread-130680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] client lang: <none>
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] server lang: <none>
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] kex follows: False
2026-02-11T14:37:52.877 [DEBUG] [Thread-130680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:37:52.878 [DEBUG] [Thread-130680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:37:52.878 [DEBUG] [Thread-130680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:37:52.878 [DEBUG] [Thread-130680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:37:52.878 [DEBUG] [Thread-130680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:37:52.878 [DEBUG] [Thread-130680] [transport.py] [_log()] Compression: none
2026-02-11T14:37:52.878 [DEBUG] [Thread-130680] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:37:52.899 [DEBUG] [Thread-130680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:37:52.900 [DEBUG] [Thread-130680] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:37:52.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:37:52.901 [DEBUG] [Thread-130680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:37:52.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:37:52.902 [DEBUG] [Thread-130680] [transport.py] [_log()] userauth is OK
2026-02-11T14:37:52.903 [DEBUG] [Thread-130680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:37:52.903 [DEBUG] [Thread-130680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:37:52.903 [DEBUG] [Thread-130680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:37:52.903 [DEBUG] [Thread-130680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:37:52.925 [INFO] [Thread-130680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:37:52.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:37:53.554 [DEBUG] [Thread-130680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:37:53.554 [DEBUG] [Thread-130680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:37:53.554 [DEBUG] [Thread-130680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:37:53.594 [DEBUG] [Thread-130680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:37:53.595 [DEBUG] [Thread-130680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:37:53.598 [DEBUG] [Thread-130680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:37:53.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:37:53.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:37:53.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:37:53.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:37:53.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:37:53.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:37:53.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:37:53.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:37:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:37:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.525837 -999.00  +23.50  24.91     42  +10.10 1 2 1 1 1   888    0 13.89 4.64 ----- 21.7 24.9 272.6 30.2 28.7 -21.8 28.4 -16.5 27.9 -15.2 28.3 -18.5
2026-02-11T14:37:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:37:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:37:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.525837
2026-02-11T14:37:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:37:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:37:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:37:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:37:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:37:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:37:33', tmtdew=18.09, humidity=31.81, cloud=0.0, wind=27.7, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:37:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:37:53.623 [DEBUG] [Thread-130680] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:37:53.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:37:53.732 [DEBUG] [Thread-130683] [transport.py] [_log()] starting thread (client mode): 0xa57d4a60
2026-02-11T14:37:53.732 [DEBUG] [Thread-130683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:37:53.746 [DEBUG] [Thread-130683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:37:53.746 [INFO] [Thread-130683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:37:53.754 [DEBUG] [Thread-130683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:37:53.754 [DEBUG] [Thread-130683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:37:53.754 [DEBUG] [Thread-130683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:37:53.754 [DEBUG] [Thread-130683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] client lang: <none>
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] server lang: <none>
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] kex follows: False
2026-02-11T14:37:53.755 [DEBUG] [Thread-130683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:37:53.756 [DEBUG] [Thread-130683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:37:53.756 [DEBUG] [Thread-130683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:37:53.756 [DEBUG] [Thread-130683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:37:53.756 [DEBUG] [Thread-130683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:37:53.756 [DEBUG] [Thread-130683] [transport.py] [_log()] Compression: none
2026-02-11T14:37:53.756 [DEBUG] [Thread-130683] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:37:53.813 [DEBUG] [Thread-130683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:37:53.814 [DEBUG] [Thread-130683] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:37:53.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:37:53.815 [DEBUG] [Thread-130683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:37:53.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:37:53.868 [DEBUG] [Thread-130683] [transport.py] [_log()] userauth is OK
2026-02-11T14:37:53.869 [DEBUG] [Thread-130683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:37:53.869 [DEBUG] [Thread-130683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:37:53.869 [DEBUG] [Thread-130683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:37:53.869 [DEBUG] [Thread-130683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:37:53.887 [INFO] [Thread-130683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:37:53.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:37:53.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:37:54.720 [DEBUG] [Thread-130683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:37:54.720 [DEBUG] [Thread-130683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:37:54.768 [DEBUG] [Thread-130683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:37:54.769 [DEBUG] [Thread-130683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:37:54.779 [DEBUG] [Thread-130683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:37:54.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:37:54.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:37:54.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:37:54.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:37:54.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:37:54.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:37:54.817 [DEBUG] [Thread-130683] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:38:03.404 [DEBUG] [Thread-130685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:38:18.464 [DEBUG] [Thread-130686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:38:20.098 [DEBUG] [Thread-130687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:38:24.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:38:24.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:38:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:38:26.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:38:26.466 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:38:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 38, 9), 17.0, 34.14, 0.0, 30.84, 25.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:38:27.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:38:09
2026-02-11T14:38:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:38:27.656 [DEBUG] [Thread-130688] [transport.py] [_log()] starting thread (client mode): 0xa2d11b10
2026-02-11T14:38:27.656 [DEBUG] [Thread-130688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:38:27.675 [DEBUG] [Thread-130688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:38:27.675 [INFO] [Thread-130688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:38:27.678 [DEBUG] [Thread-130688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] client lang: <none>
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] server lang: <none>
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] kex follows: False
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:38:27.679 [DEBUG] [Thread-130688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:38:27.680 [DEBUG] [Thread-130688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:38:27.680 [DEBUG] [Thread-130688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:38:27.680 [DEBUG] [Thread-130688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:38:27.680 [DEBUG] [Thread-130688] [transport.py] [_log()] Compression: none
2026-02-11T14:38:27.680 [DEBUG] [Thread-130688] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:38:27.698 [DEBUG] [Thread-130688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:38:27.699 [DEBUG] [Thread-130688] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:38:27.699 [DEBUG] [Thread-130688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:38:27.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:38:27.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:38:27.702 [DEBUG] [Thread-130688] [transport.py] [_log()] userauth is OK
2026-02-11T14:38:27.702 [DEBUG] [Thread-130688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:38:27.702 [DEBUG] [Thread-130688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:38:27.702 [DEBUG] [Thread-130688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:38:27.702 [DEBUG] [Thread-130688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:38:27.718 [INFO] [Thread-130688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:38:27.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:38:28.383 [DEBUG] [Thread-130688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:38:28.383 [DEBUG] [Thread-130688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:38:28.384 [DEBUG] [Thread-130688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:38:28.425 [DEBUG] [Thread-130688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:38:28.425 [DEBUG] [Thread-130688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:38:28.429 [DEBUG] [Thread-130688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:38:28.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:38:28.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:38:28.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:38:28.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:38:28.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:38:28.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:38:28.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:38:28.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:38:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:38:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.526184 -999.00  +24.20  34.20     41  +10.40 1 2 2 1 1   888    0 14.24 1.11 ----- 30.1 34.2 281.8 41.5 28.7 -16.8 28.6 -16.4 28.4 -16.6 28.8 -14.7
2026-02-11T14:38:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:38:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:38:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.526184
2026-02-11T14:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:38:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:38:09', tmtdew=17.0, humidity=34.14, cloud=0.0, wind=30.84, temperature=25.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:37:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:38:28.455 [DEBUG] [Thread-130688] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:38:28.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:38:28.550 [DEBUG] [Thread-130691] [transport.py] [_log()] starting thread (client mode): 0xa81d68f0
2026-02-11T14:38:28.550 [DEBUG] [Thread-130691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:38:28.564 [DEBUG] [Thread-130691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:38:28.564 [INFO] [Thread-130691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:38:28.572 [DEBUG] [Thread-130691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:38:28.573 [DEBUG] [Thread-130691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:38:28.573 [DEBUG] [Thread-130691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:38:28.573 [DEBUG] [Thread-130691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:38:28.573 [DEBUG] [Thread-130691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] client lang: <none>
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] server lang: <none>
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] kex follows: False
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] Compression: none
2026-02-11T14:38:28.574 [DEBUG] [Thread-130691] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:38:28.633 [DEBUG] [Thread-130691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:38:28.633 [DEBUG] [Thread-130691] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:38:28.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:38:28.634 [DEBUG] [Thread-130691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:38:28.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:38:28.688 [DEBUG] [Thread-130691] [transport.py] [_log()] userauth is OK
2026-02-11T14:38:28.689 [DEBUG] [Thread-130691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:38:28.689 [DEBUG] [Thread-130691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:38:28.689 [DEBUG] [Thread-130691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:38:28.689 [DEBUG] [Thread-130691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:38:28.715 [INFO] [Thread-130691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:38:28.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:38:28.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:38:29.582 [DEBUG] [Thread-130691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:38:29.583 [DEBUG] [Thread-130691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:38:29.630 [DEBUG] [Thread-130691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:38:29.630 [DEBUG] [Thread-130691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:38:29.639 [DEBUG] [Thread-130691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:38:29.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:38:29.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:38:29.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:38:29.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:38:29.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:38:29.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:38:29.675 [DEBUG] [Thread-130691] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:38:33.501 [DEBUG] [Thread-130693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:38:48.555 [DEBUG] [Thread-130694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:38:59.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:38:59.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:38:59.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:39:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 38, 45), 17.35, 33.06, 0.0, 32.61, 25.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:39:02.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:38:45
2026-02-11T14:39:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:39:02.849 [DEBUG] [Thread-130695] [transport.py] [_log()] starting thread (client mode): 0xa5758a30
2026-02-11T14:39:02.849 [DEBUG] [Thread-130695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:39:02.869 [DEBUG] [Thread-130695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:39:02.869 [INFO] [Thread-130695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] client lang: <none>
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] server lang: <none>
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] kex follows: False
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:39:02.870 [DEBUG] [Thread-130695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:39:02.871 [DEBUG] [Thread-130695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:39:02.871 [DEBUG] [Thread-130695] [transport.py] [_log()] Compression: none
2026-02-11T14:39:02.871 [DEBUG] [Thread-130695] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:39:02.878 [DEBUG] [Thread-130695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:39:02.879 [DEBUG] [Thread-130695] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:39:02.879 [DEBUG] [Thread-130695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:39:02.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:39:02.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:39:02.879 [DEBUG] [Thread-130695] [transport.py] [_log()] userauth is OK
2026-02-11T14:39:02.879 [DEBUG] [Thread-130695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:39:02.879 [DEBUG] [Thread-130695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:39:02.879 [DEBUG] [Thread-130695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:39:02.880 [DEBUG] [Thread-130695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:39:02.890 [INFO] [Thread-130695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:39:02.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:39:03.516 [DEBUG] [Thread-130695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:39:03.516 [DEBUG] [Thread-130695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:39:03.516 [DEBUG] [Thread-130695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:39:03.557 [DEBUG] [Thread-130695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:39:03.557 [DEBUG] [Thread-130695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:39:03.559 [DEBUG] [Thread-130695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:39:03.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:39:03.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:39:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:39:03.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:39:03.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:39:03.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:39:03.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.526531 -999.00  +24.60  24.12     40  +10.10 1 2 1 1 1   888    0 13.81 1.67 ----- 24.8 24.1 279.0 32.3 29.0 -17.0 28.8 -17.2 28.5 -18.5 29.1 -15.0
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.526531
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:39:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:39:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:39:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:39:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:39:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:38:45', tmtdew=17.35, humidity=33.06, cloud=0.0, wind=32.61, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:38:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:39:03.579 [DEBUG] [Thread-130695] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:39:03.589 [DEBUG] [Thread-130698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:39:03.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:39:03.667 [DEBUG] [Thread-130699] [transport.py] [_log()] starting thread (client mode): 0xa5741cf0
2026-02-11T14:39:03.667 [DEBUG] [Thread-130699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:39:03.681 [DEBUG] [Thread-130699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:39:03.681 [INFO] [Thread-130699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:03.689 [DEBUG] [Thread-130699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] client lang: <none>
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] server lang: <none>
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] kex follows: False
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] Compression: none
2026-02-11T14:39:03.690 [DEBUG] [Thread-130699] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:39:03.749 [DEBUG] [Thread-130699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:39:03.750 [DEBUG] [Thread-130699] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:39:03.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:39:03.751 [DEBUG] [Thread-130699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:39:03.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:39:03.805 [DEBUG] [Thread-130699] [transport.py] [_log()] userauth is OK
2026-02-11T14:39:03.805 [DEBUG] [Thread-130699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:39:03.805 [DEBUG] [Thread-130699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:39:03.805 [DEBUG] [Thread-130699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:39:03.805 [DEBUG] [Thread-130699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:39:03.824 [INFO] [Thread-130699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:39:03.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:39:03.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:39:04.689 [DEBUG] [Thread-130699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:39:04.689 [DEBUG] [Thread-130699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:39:04.737 [DEBUG] [Thread-130699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:39:04.738 [DEBUG] [Thread-130699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:39:04.747 [DEBUG] [Thread-130699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:39:04.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:39:04.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:39:04.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:39:04.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:39:04.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:39:04.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:39:04.790 [DEBUG] [Thread-130699] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:39:18.630 [DEBUG] [Thread-130701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:39:20.149 [DEBUG] [Thread-130702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:39:26.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:39:26.606 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:39:33.664 [DEBUG] [Thread-130703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:39:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:39:34.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:39:34.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:39:36.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 39, 20), 17.29, 33.14, 0.0, 30.28, 24.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:39:36.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:39:20
2026-02-11T14:39:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:39:37.325 [DEBUG] [Thread-130704] [transport.py] [_log()] starting thread (client mode): 0xa5742b00
2026-02-11T14:39:37.326 [DEBUG] [Thread-130704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:39:37.348 [DEBUG] [Thread-130704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:39:37.348 [INFO] [Thread-130704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:39:37.351 [DEBUG] [Thread-130704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:39:37.351 [DEBUG] [Thread-130704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:39:37.351 [DEBUG] [Thread-130704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:39:37.351 [DEBUG] [Thread-130704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:37.351 [DEBUG] [Thread-130704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] client lang: <none>
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] server lang: <none>
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] kex follows: False
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:39:37.352 [DEBUG] [Thread-130704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:39:37.353 [DEBUG] [Thread-130704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:39:37.353 [DEBUG] [Thread-130704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:39:37.353 [DEBUG] [Thread-130704] [transport.py] [_log()] Compression: none
2026-02-11T14:39:37.353 [DEBUG] [Thread-130704] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:39:37.372 [DEBUG] [Thread-130704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:39:37.372 [DEBUG] [Thread-130704] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:39:37.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:39:37.374 [DEBUG] [Thread-130704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:39:37.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:39:37.376 [DEBUG] [Thread-130704] [transport.py] [_log()] userauth is OK
2026-02-11T14:39:37.376 [DEBUG] [Thread-130704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:39:37.376 [DEBUG] [Thread-130704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:39:37.376 [DEBUG] [Thread-130704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:39:37.376 [DEBUG] [Thread-130704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:39:37.390 [INFO] [Thread-130704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:39:37.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:39:38.055 [DEBUG] [Thread-130704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:39:38.055 [DEBUG] [Thread-130704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:39:38.064 [DEBUG] [Thread-130704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:39:38.095 [DEBUG] [Thread-130704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:39:38.095 [DEBUG] [Thread-130704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:39:38.098 [DEBUG] [Thread-130704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:39:38.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:39:38.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:39:38.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:39:38.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:39:38.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:39:38.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:39:38.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:39:38.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:39:38.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:39:38.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.527226 -999.00  +24.00  20.04     41  +10.10 1 2 1 1 1   888    0 13.96 2.83 ----- 20.1 20.0 310.4 47.7 29.3 -18.4 28.9 -16.6 28.8 -14.6 29.5 -18.0
2026-02-11T14:39:38.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:39:38.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:39:38.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.527226
2026-02-11T14:39:38.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:39:38.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:39:38.125 [DEBUG] [Thread-130704] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:39:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:39:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:39:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:39:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:39:20', tmtdew=17.29, humidity=33.14, cloud=0.0, wind=30.28, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:39:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:39:38.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:39:38.222 [DEBUG] [Thread-130707] [transport.py] [_log()] starting thread (client mode): 0xa5771840
2026-02-11T14:39:38.222 [DEBUG] [Thread-130707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:39:38.239 [DEBUG] [Thread-130707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:39:38.239 [INFO] [Thread-130707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:39:38.246 [DEBUG] [Thread-130707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:39:38.247 [DEBUG] [Thread-130707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:39:38.247 [DEBUG] [Thread-130707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:39:38.247 [DEBUG] [Thread-130707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:38.247 [DEBUG] [Thread-130707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:39:38.247 [DEBUG] [Thread-130707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] client lang: <none>
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] server lang: <none>
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] kex follows: False
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:39:38.248 [DEBUG] [Thread-130707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:39:38.249 [DEBUG] [Thread-130707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:39:38.249 [DEBUG] [Thread-130707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:39:38.249 [DEBUG] [Thread-130707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:39:38.249 [DEBUG] [Thread-130707] [transport.py] [_log()] Compression: none
2026-02-11T14:39:38.249 [DEBUG] [Thread-130707] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:39:38.305 [DEBUG] [Thread-130707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:39:38.306 [DEBUG] [Thread-130707] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:39:38.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:39:38.307 [DEBUG] [Thread-130707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:39:38.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:39:38.365 [DEBUG] [Thread-130707] [transport.py] [_log()] userauth is OK
2026-02-11T14:39:38.365 [DEBUG] [Thread-130707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:39:38.366 [DEBUG] [Thread-130707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:39:38.366 [DEBUG] [Thread-130707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:39:38.366 [DEBUG] [Thread-130707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:39:38.385 [INFO] [Thread-130707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:39:38.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:39:38.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:39:39.239 [DEBUG] [Thread-130707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:39:39.248 [DEBUG] [Thread-130707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:39:39.287 [DEBUG] [Thread-130707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:39:39.287 [DEBUG] [Thread-130707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:39:39.296 [DEBUG] [Thread-130707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:39:39.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:39:39.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:39:39.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:39:39.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:39:39.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:39:39.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:39:39.332 [DEBUG] [Thread-130707] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:39:48.701 [DEBUG] [Thread-130709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:03.752 [DEBUG] [Thread-130710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:40:09.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:40:09.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:40:11.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 39, 56), 17.15, 33.41, 0.0, 30.08, 24.95, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:40:11.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:39:56
2026-02-11T14:40:11.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:40:11.693 [DEBUG] [Thread-130711] [transport.py] [_log()] starting thread (client mode): 0xa57738e0
2026-02-11T14:40:11.694 [DEBUG] [Thread-130711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:40:11.716 [DEBUG] [Thread-130711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:40:11.716 [INFO] [Thread-130711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] client lang: <none>
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] server lang: <none>
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] kex follows: False
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] Compression: none
2026-02-11T14:40:11.718 [DEBUG] [Thread-130711] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:40:11.736 [DEBUG] [Thread-130711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:40:11.736 [DEBUG] [Thread-130711] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:40:11.737 [DEBUG] [Thread-130711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:40:11.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:40:11.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:40:11.739 [DEBUG] [Thread-130711] [transport.py] [_log()] userauth is OK
2026-02-11T14:40:11.739 [DEBUG] [Thread-130711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:40:11.739 [DEBUG] [Thread-130711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:40:11.739 [DEBUG] [Thread-130711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:40:11.739 [DEBUG] [Thread-130711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:40:11.764 [INFO] [Thread-130711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:40:11.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:40:13.310 [DEBUG] [Thread-130711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:40:13.310 [DEBUG] [Thread-130711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:40:13.311 [DEBUG] [Thread-130711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:40:13.352 [DEBUG] [Thread-130711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:40:13.352 [DEBUG] [Thread-130711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:40:13.355 [DEBUG] [Thread-130711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:40:13.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:40:13.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:40:13.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:40:13.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:40:13.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:40:13.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:40:13.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:40:13.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:40:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.527573 -999.00  +24.70  21.79     40  +10.30 1 2 1 1 1   888    0 14.00 1.89 ----- 18.8 21.8 313.0 31.0 29.4 -17.7 29.1 -17.1 29.2 -15.1 29.7 -16.3
2026-02-11T14:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.527573
2026-02-11T14:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:40:13.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:40:13.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:40:13.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:40:13.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:40:13.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:39:56', tmtdew=17.15, humidity=33.41, cloud=0.0, wind=30.08, temperature=24.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:39:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:40:13.379 [DEBUG] [Thread-130711] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:40:13.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:40:13.477 [DEBUG] [Thread-130714] [transport.py] [_log()] starting thread (client mode): 0xa81d7070
2026-02-11T14:40:13.477 [DEBUG] [Thread-130714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:40:13.492 [DEBUG] [Thread-130714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:40:13.492 [INFO] [Thread-130714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] client lang: <none>
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] server lang: <none>
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] kex follows: False
2026-02-11T14:40:13.500 [DEBUG] [Thread-130714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:40:13.501 [DEBUG] [Thread-130714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:40:13.501 [DEBUG] [Thread-130714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:40:13.501 [DEBUG] [Thread-130714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:40:13.501 [DEBUG] [Thread-130714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:40:13.501 [DEBUG] [Thread-130714] [transport.py] [_log()] Compression: none
2026-02-11T14:40:13.501 [DEBUG] [Thread-130714] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:40:13.557 [DEBUG] [Thread-130714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:40:13.557 [DEBUG] [Thread-130714] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:40:13.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:40:13.559 [DEBUG] [Thread-130714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:40:13.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:40:13.613 [DEBUG] [Thread-130714] [transport.py] [_log()] userauth is OK
2026-02-11T14:40:13.613 [DEBUG] [Thread-130714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:40:13.613 [DEBUG] [Thread-130714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:40:13.613 [DEBUG] [Thread-130714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:40:13.613 [DEBUG] [Thread-130714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:40:13.632 [INFO] [Thread-130714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:40:13.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:40:13.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:40:14.462 [DEBUG] [Thread-130714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:40:14.462 [DEBUG] [Thread-130714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:40:14.511 [DEBUG] [Thread-130714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:40:14.511 [DEBUG] [Thread-130714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:40:14.520 [DEBUG] [Thread-130714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:40:14.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:40:14.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:40:14.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:40:14.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:40:14.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:40:14.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:40:14.556 [DEBUG] [Thread-130714] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:40:18.792 [DEBUG] [Thread-130716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:20.199 [DEBUG] [Thread-130717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:26.746 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:26.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:33.847 [DEBUG] [Thread-130718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:40:44.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:40:44.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:40:46.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 40, 33), 16.93, 33.81, 0.0, 25.41, 24.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:40:46.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:40:33
2026-02-11T14:40:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:40:47.130 [DEBUG] [Thread-130719] [transport.py] [_log()] starting thread (client mode): 0xa5771cc0
2026-02-11T14:40:47.130 [DEBUG] [Thread-130719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:40:47.151 [DEBUG] [Thread-130719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:40:47.152 [INFO] [Thread-130719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:40:47.155 [DEBUG] [Thread-130719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:40:47.155 [DEBUG] [Thread-130719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:40:47.155 [DEBUG] [Thread-130719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:40:47.155 [DEBUG] [Thread-130719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] client lang: <none>
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] server lang: <none>
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] kex follows: False
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] Compression: none
2026-02-11T14:40:47.156 [DEBUG] [Thread-130719] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:40:47.173 [DEBUG] [Thread-130719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:40:47.174 [DEBUG] [Thread-130719] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:40:47.174 [DEBUG] [Thread-130719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:40:47.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:40:47.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:40:47.176 [DEBUG] [Thread-130719] [transport.py] [_log()] userauth is OK
2026-02-11T14:40:47.176 [DEBUG] [Thread-130719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:40:47.177 [DEBUG] [Thread-130719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:40:47.177 [DEBUG] [Thread-130719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:40:47.177 [DEBUG] [Thread-130719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:40:47.200 [INFO] [Thread-130719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:40:47.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:40:47.831 [DEBUG] [Thread-130719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:40:47.832 [DEBUG] [Thread-130719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:40:47.832 [DEBUG] [Thread-130719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:40:47.872 [DEBUG] [Thread-130719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:40:47.873 [DEBUG] [Thread-130719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:40:47.876 [DEBUG] [Thread-130719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:40:47.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:40:47.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:40:47.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:40:47.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:40:47.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:40:47.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:40:47.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:40:47.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:40:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:40:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.527920 -999.00  +24.80  27.91     39  +10.10 1 2 1 1 1   888    0 13.85 3.82 ----- 23.2 27.9 273.8 33.9 29.7 -19.2 29.1 -19.4 28.7 -22.7 29.9 -16.8
2026-02-11T14:40:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:40:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:40:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.527920
2026-02-11T14:40:47.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:40:47.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:40:47.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:40:47.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:40:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:40:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:40:33', tmtdew=16.93, humidity=33.81, cloud=0.0, wind=25.41, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:40:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:40:47.903 [DEBUG] [Thread-130719] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:40:47.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:40:47.999 [DEBUG] [Thread-130722] [transport.py] [_log()] starting thread (client mode): 0xa81d7d90
2026-02-11T14:40:48.000 [DEBUG] [Thread-130722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:40:48.015 [DEBUG] [Thread-130722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:40:48.015 [INFO] [Thread-130722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:40:48.022 [DEBUG] [Thread-130722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:40:48.023 [DEBUG] [Thread-130722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:40:48.023 [DEBUG] [Thread-130722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:40:48.023 [DEBUG] [Thread-130722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:48.023 [DEBUG] [Thread-130722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:40:48.023 [DEBUG] [Thread-130722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:48.023 [DEBUG] [Thread-130722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:40:48.023 [DEBUG] [Thread-130722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:40:48.024 [DEBUG] [Thread-130722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:40:48.024 [DEBUG] [Thread-130722] [transport.py] [_log()] client lang: <none>
2026-02-11T14:40:48.024 [DEBUG] [Thread-130722] [transport.py] [_log()] server lang: <none>
2026-02-11T14:40:48.024 [DEBUG] [Thread-130722] [transport.py] [_log()] kex follows: False
2026-02-11T14:40:48.024 [DEBUG] [Thread-130722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:40:48.024 [DEBUG] [Thread-130722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:40:48.024 [DEBUG] [Thread-130722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:40:48.025 [DEBUG] [Thread-130722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:40:48.025 [DEBUG] [Thread-130722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:40:48.025 [DEBUG] [Thread-130722] [transport.py] [_log()] Compression: none
2026-02-11T14:40:48.025 [DEBUG] [Thread-130722] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:40:48.082 [DEBUG] [Thread-130722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:40:48.083 [DEBUG] [Thread-130722] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:40:48.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:40:48.084 [DEBUG] [Thread-130722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:40:48.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:40:48.145 [DEBUG] [Thread-130722] [transport.py] [_log()] userauth is OK
2026-02-11T14:40:48.145 [DEBUG] [Thread-130722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:40:48.145 [DEBUG] [Thread-130722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:40:48.145 [DEBUG] [Thread-130722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:40:48.146 [DEBUG] [Thread-130722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:40:48.165 [INFO] [Thread-130722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:40:48.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:40:48.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:40:48.885 [DEBUG] [Thread-130724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:40:49.012 [DEBUG] [Thread-130722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:40:49.012 [DEBUG] [Thread-130722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:40:49.059 [DEBUG] [Thread-130722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:40:49.059 [DEBUG] [Thread-130722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:40:49.068 [DEBUG] [Thread-130722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:40:49.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:40:49.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:40:49.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:40:49.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:40:49.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:40:49.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:40:49.102 [DEBUG] [Thread-130722] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:41:03.938 [DEBUG] [Thread-130725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:41:18.973 [DEBUG] [Thread-130726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:41:19.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:41:19.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:41:19.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
2026-02-11T14:41:20.255 [DEBUG] [Thread-130727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:41:20.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 41, 8), 16.82, 34.02, 0.0, 26.96, 24.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:41:20.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:41:08
2026-02-11T14:41:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:41:21.454 [DEBUG] [Thread-130728] [transport.py] [_log()] starting thread (client mode): 0xa81d7a30
2026-02-11T14:41:21.454 [DEBUG] [Thread-130728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:41:21.477 [DEBUG] [Thread-130728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:41:21.478 [INFO] [Thread-130728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:41:21.481 [DEBUG] [Thread-130728] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:41:21.481 [DEBUG] [Thread-130728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:41:21.481 [DEBUG] [Thread-130728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:41:21.481 [DEBUG] [Thread-130728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:21.481 [DEBUG] [Thread-130728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:21.481 [DEBUG] [Thread-130728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] client lang: <none>
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] server lang: <none>
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] kex follows: False
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:41:21.482 [DEBUG] [Thread-130728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:41:21.483 [DEBUG] [Thread-130728] [transport.py] [_log()] Compression: none
2026-02-11T14:41:21.483 [DEBUG] [Thread-130728] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:41:21.492 [DEBUG] [Thread-130728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:41:21.493 [DEBUG] [Thread-130728] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:41:21.493 [DEBUG] [Thread-130728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:41:21.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:41:21.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:41:21.495 [DEBUG] [Thread-130728] [transport.py] [_log()] userauth is OK
2026-02-11T14:41:21.495 [DEBUG] [Thread-130728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:41:21.495 [DEBUG] [Thread-130728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:41:21.496 [DEBUG] [Thread-130728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:41:21.496 [DEBUG] [Thread-130728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:41:21.532 [INFO] [Thread-130728] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:41:21.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:41:22.170 [DEBUG] [Thread-130728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:41:22.170 [DEBUG] [Thread-130728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:41:22.170 [DEBUG] [Thread-130728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:41:22.211 [DEBUG] [Thread-130728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:41:22.211 [DEBUG] [Thread-130728] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:41:22.215 [DEBUG] [Thread-130728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:41:22.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:41:22.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:41:22.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:41:22.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:41:22.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:41:22.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:41:22.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:41:22.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:41:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:41:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.528268 -999.00  +24.00  17.74     41   +9.90 1 2 1 1 1   888    0 13.93 4.70 ----- 17.7 17.7 285.6 25.3 29.5 -21.2 29.2 -17.4 29.1 -16.6 29.9 -18.4
2026-02-11T14:41:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:41:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:41:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.528268
2026-02-11T14:41:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:41:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:41:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:41:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:41:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:41:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:41:08', tmtdew=16.82, humidity=34.02, cloud=0.0, wind=26.96, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:40:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:41:22.237 [DEBUG] [Thread-130728] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:41:22.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:41:22.332 [DEBUG] [Thread-130731] [transport.py] [_log()] starting thread (client mode): 0xa57425f0
2026-02-11T14:41:22.332 [DEBUG] [Thread-130731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:41:22.347 [DEBUG] [Thread-130731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:41:22.347 [INFO] [Thread-130731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] client lang: <none>
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] server lang: <none>
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] kex follows: False
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:41:22.355 [DEBUG] [Thread-130731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:41:22.356 [DEBUG] [Thread-130731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:41:22.356 [DEBUG] [Thread-130731] [transport.py] [_log()] Compression: none
2026-02-11T14:41:22.356 [DEBUG] [Thread-130731] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:41:22.413 [DEBUG] [Thread-130731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:41:22.413 [DEBUG] [Thread-130731] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:41:22.414 [DEBUG] [Thread-130731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:41:22.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:41:22.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:41:22.468 [DEBUG] [Thread-130731] [transport.py] [_log()] userauth is OK
2026-02-11T14:41:22.469 [DEBUG] [Thread-130731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:41:22.469 [DEBUG] [Thread-130731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:41:22.469 [DEBUG] [Thread-130731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:41:22.469 [DEBUG] [Thread-130731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:41:22.489 [INFO] [Thread-130731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:41:22.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:41:22.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:41:23.325 [DEBUG] [Thread-130731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:41:23.325 [DEBUG] [Thread-130731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:41:23.373 [DEBUG] [Thread-130731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:41:23.373 [DEBUG] [Thread-130731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:41:23.382 [DEBUG] [Thread-130731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:41:23.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:41:23.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:41:23.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:41:23.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:41:23.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:41:23.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:41:23.419 [DEBUG] [Thread-130731] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:41:26.889 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:41:26.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:41:34.009 [DEBUG] [Thread-130733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:41:49.058 [DEBUG] [Thread-130734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:41:53.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:41:53.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:41:53.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
2026-02-11T14:41:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 41, 43), 16.63, 34.82, 0.0, 24.37, 24.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:41:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:41:43
2026-02-11T14:41:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:41:55.745 [DEBUG] [Thread-130735] [transport.py] [_log()] starting thread (client mode): 0xa57d7c10
2026-02-11T14:41:55.746 [DEBUG] [Thread-130735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:41:55.767 [DEBUG] [Thread-130735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:41:55.767 [INFO] [Thread-130735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:41:55.770 [DEBUG] [Thread-130735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] client lang: <none>
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] server lang: <none>
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] kex follows: False
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] Compression: none
2026-02-11T14:41:55.771 [DEBUG] [Thread-130735] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:41:55.788 [DEBUG] [Thread-130735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:41:55.789 [DEBUG] [Thread-130735] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:41:55.789 [DEBUG] [Thread-130735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:41:55.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:41:55.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:41:55.791 [DEBUG] [Thread-130735] [transport.py] [_log()] userauth is OK
2026-02-11T14:41:55.791 [DEBUG] [Thread-130735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:41:55.792 [DEBUG] [Thread-130735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:41:55.792 [DEBUG] [Thread-130735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:41:55.792 [DEBUG] [Thread-130735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:41:55.817 [INFO] [Thread-130735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:41:55.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:41:56.443 [DEBUG] [Thread-130735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:41:56.443 [DEBUG] [Thread-130735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:41:56.444 [DEBUG] [Thread-130735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:41:56.484 [DEBUG] [Thread-130735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:41:56.485 [DEBUG] [Thread-130735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:41:56.488 [DEBUG] [Thread-130735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:41:56.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:41:56.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:41:56.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:41:56.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:41:56.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:41:56.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:41:56.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:41:56.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:41:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:41:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.528615 -999.00  +24.40  19.48     41  +10.30 1 2 1 1 1   888    0 13.83 1.51 ----- 23.6 19.5 273.4 24.1 29.7 -19.2 29.4 -17.1 29.2 -21.1 30.2 -16.8
2026-02-11T14:41:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:41:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:41:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.528615
2026-02-11T14:41:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:41:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:41:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:41:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:41:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:41:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:41:43', tmtdew=16.63, humidity=34.82, cloud=0.0, wind=24.37, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:41:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:41:56.515 [DEBUG] [Thread-130735] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:41:56.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:41:56.610 [DEBUG] [Thread-130738] [transport.py] [_log()] starting thread (client mode): 0xa5770c70
2026-02-11T14:41:56.610 [DEBUG] [Thread-130738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:41:56.625 [DEBUG] [Thread-130738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:41:56.625 [INFO] [Thread-130738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] client lang: <none>
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] server lang: <none>
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] kex follows: False
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:41:56.633 [DEBUG] [Thread-130738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:41:56.634 [DEBUG] [Thread-130738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:41:56.634 [DEBUG] [Thread-130738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:41:56.634 [DEBUG] [Thread-130738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:41:56.634 [DEBUG] [Thread-130738] [transport.py] [_log()] Compression: none
2026-02-11T14:41:56.634 [DEBUG] [Thread-130738] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:41:56.695 [DEBUG] [Thread-130738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:41:56.695 [DEBUG] [Thread-130738] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:41:56.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:41:56.697 [DEBUG] [Thread-130738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:41:56.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:41:56.752 [DEBUG] [Thread-130738] [transport.py] [_log()] userauth is OK
2026-02-11T14:41:56.753 [DEBUG] [Thread-130738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:41:56.753 [DEBUG] [Thread-130738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:41:56.753 [DEBUG] [Thread-130738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:41:56.753 [DEBUG] [Thread-130738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:41:56.771 [INFO] [Thread-130738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:41:56.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:41:56.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:41:57.599 [DEBUG] [Thread-130738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:41:57.600 [DEBUG] [Thread-130738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:41:57.647 [DEBUG] [Thread-130738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:41:57.648 [DEBUG] [Thread-130738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:41:57.657 [DEBUG] [Thread-130738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:41:57.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:41:57.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')
2026-02-11T14:41:57.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
2026-02-11T14:41:57.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:41:57.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:41:57.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:41:57.694 [DEBUG] [Thread-130738] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:42:04.098 [DEBUG] [Thread-130740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:42:19.152 [DEBUG] [Thread-130741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:42:20.312 [DEBUG] [Thread-130742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:42:27.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:42:27.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:42:27.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:42:27.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:42:27.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:42:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 42, 18), 16.79, 34.47, 0.0, 23.82, 24.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:42:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:42:18
2026-02-11T14:42:30.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:42:30.281 [DEBUG] [Thread-130743] [transport.py] [_log()] starting thread (client mode): 0xa57700a0
2026-02-11T14:42:30.281 [DEBUG] [Thread-130743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:42:30.300 [DEBUG] [Thread-130743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:42:30.300 [INFO] [Thread-130743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:42:30.303 [DEBUG] [Thread-130743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:42:30.303 [DEBUG] [Thread-130743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:42:30.303 [DEBUG] [Thread-130743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:42:30.303 [DEBUG] [Thread-130743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:42:30.303 [DEBUG] [Thread-130743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:42:30.303 [DEBUG] [Thread-130743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:42:30.303 [DEBUG] [Thread-130743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] client lang: <none>
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] server lang: <none>
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] kex follows: False
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] Compression: none
2026-02-11T14:42:30.304 [DEBUG] [Thread-130743] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:42:30.321 [DEBUG] [Thread-130743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:42:30.321 [DEBUG] [Thread-130743] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:42:30.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:42:30.322 [DEBUG] [Thread-130743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:42:30.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:42:30.324 [DEBUG] [Thread-130743] [transport.py] [_log()] userauth is OK
2026-02-11T14:42:30.325 [DEBUG] [Thread-130743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:42:30.325 [DEBUG] [Thread-130743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:42:30.325 [DEBUG] [Thread-130743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:42:30.325 [DEBUG] [Thread-130743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:42:30.343 [INFO] [Thread-130743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:42:30.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:42:30.989 [DEBUG] [Thread-130743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:42:30.989 [DEBUG] [Thread-130743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:42:30.989 [DEBUG] [Thread-130743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:42:31.030 [DEBUG] [Thread-130743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:42:31.030 [DEBUG] [Thread-130743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:42:31.032 [DEBUG] [Thread-130743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:42:31.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:42:31.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:42:31.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:42:31.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:42:31.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:42:31.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:42:31.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.528962 -999.00  +24.60  31.13     40  +10.30 1 2 2 1 1   888    0 13.75 -0.37 ----- 36.3 31.1 293.0 39.4 29.8 -19.6 29.5 -16.1 29.5 -16.4 30.3 -17.1
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.528962
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:42:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:42:18', tmtdew=16.79, humidity=34.47, cloud=0.0, wind=23.82, temperature=24.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:41:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:42:31.051 [DEBUG] [Thread-130743] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:42:31.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:42:31.137 [DEBUG] [Thread-130746] [transport.py] [_log()] starting thread (client mode): 0xa2d57460
2026-02-11T14:42:31.137 [DEBUG] [Thread-130746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:42:31.152 [DEBUG] [Thread-130746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:42:31.153 [INFO] [Thread-130746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] client lang: <none>
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] server lang: <none>
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] kex follows: False
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] Compression: none
2026-02-11T14:42:31.160 [DEBUG] [Thread-130746] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:42:31.219 [DEBUG] [Thread-130746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:42:31.219 [DEBUG] [Thread-130746] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:42:31.219 [DEBUG] [Thread-130746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:42:31.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:42:31.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:42:31.276 [DEBUG] [Thread-130746] [transport.py] [_log()] userauth is OK
2026-02-11T14:42:31.276 [DEBUG] [Thread-130746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:42:31.276 [DEBUG] [Thread-130746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:42:31.276 [DEBUG] [Thread-130746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:42:31.276 [DEBUG] [Thread-130746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:42:31.291 [INFO] [Thread-130746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:42:31.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:42:31.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:42:32.115 [DEBUG] [Thread-130746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:42:32.115 [DEBUG] [Thread-130746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:42:32.162 [DEBUG] [Thread-130746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:42:32.163 [DEBUG] [Thread-130746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:42:32.172 [DEBUG] [Thread-130746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:42:32.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:42:32.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:42:32.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:42:32.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:42:32.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:42:32.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:42:32.208 [DEBUG] [Thread-130746] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:42:34.191 [DEBUG] [Thread-130748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:42:49.251 [DEBUG] [Thread-130749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:43:02.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:43:02.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:43:02.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:43:04.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 42, 55), 17.35, 32.96, 0.0, 24.86, 25.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:43:04.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:42:55
2026-02-11T14:43:04.288 [DEBUG] [Thread-130750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:43:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:43:04.686 [DEBUG] [Thread-130751] [transport.py] [_log()] starting thread (client mode): 0xa2d57fd0
2026-02-11T14:43:04.686 [DEBUG] [Thread-130751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:43:04.706 [DEBUG] [Thread-130751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:43:04.706 [INFO] [Thread-130751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:43:04.709 [DEBUG] [Thread-130751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:43:04.709 [DEBUG] [Thread-130751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] client lang: <none>
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] server lang: <none>
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] kex follows: False
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] Compression: none
2026-02-11T14:43:04.710 [DEBUG] [Thread-130751] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:43:04.726 [DEBUG] [Thread-130751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:43:04.727 [DEBUG] [Thread-130751] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:43:04.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:43:04.728 [DEBUG] [Thread-130751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:43:04.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:43:04.730 [DEBUG] [Thread-130751] [transport.py] [_log()] userauth is OK
2026-02-11T14:43:04.730 [DEBUG] [Thread-130751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:43:04.730 [DEBUG] [Thread-130751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:43:04.730 [DEBUG] [Thread-130751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:43:04.730 [DEBUG] [Thread-130751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:43:04.754 [INFO] [Thread-130751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:43:04.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:43:05.482 [DEBUG] [Thread-130751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:43:05.482 [DEBUG] [Thread-130751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:43:05.482 [DEBUG] [Thread-130751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:43:05.523 [DEBUG] [Thread-130751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:43:05.524 [DEBUG] [Thread-130751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:43:05.527 [DEBUG] [Thread-130751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:43:05.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:43:05.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:43:05.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:43:05.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:43:05.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:43:05.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:43:05.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:43:05.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:43:05.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:43:05.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.529309 -999.00  +24.00  28.60     41  +10.00 1 2 1 1 1   888    0 14.12 -0.13 ----- 24.5 28.6 298.4 32.1 30.0 -19.4 29.5 -16.6 29.7 -13.9 30.4 -17.2
2026-02-11T14:43:05.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:43:05.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:43:05.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.529309
2026-02-11T14:43:05.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:43:05.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:43:05.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:43:05.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:43:05.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:43:05.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:42:55', tmtdew=17.35, humidity=32.96, cloud=0.0, wind=24.86, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:42:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:43:05.549 [DEBUG] [Thread-130751] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:43:05.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:43:05.645 [DEBUG] [Thread-130754] [transport.py] [_log()] starting thread (client mode): 0xa575a590
2026-02-11T14:43:05.645 [DEBUG] [Thread-130754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:43:05.660 [DEBUG] [Thread-130754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:43:05.660 [INFO] [Thread-130754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:43:05.668 [DEBUG] [Thread-130754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] client lang: <none>
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] server lang: <none>
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] kex follows: False
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:43:05.669 [DEBUG] [Thread-130754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:43:05.670 [DEBUG] [Thread-130754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:43:05.670 [DEBUG] [Thread-130754] [transport.py] [_log()] Compression: none
2026-02-11T14:43:05.670 [DEBUG] [Thread-130754] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:43:05.730 [DEBUG] [Thread-130754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:43:05.730 [DEBUG] [Thread-130754] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:43:05.730 [DEBUG] [Thread-130754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:43:05.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:43:05.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:43:05.792 [DEBUG] [Thread-130754] [transport.py] [_log()] userauth is OK
2026-02-11T14:43:05.792 [DEBUG] [Thread-130754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:43:05.792 [DEBUG] [Thread-130754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:43:05.792 [DEBUG] [Thread-130754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:43:05.792 [DEBUG] [Thread-130754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:43:05.812 [INFO] [Thread-130754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:43:05.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:43:05.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:43:06.648 [DEBUG] [Thread-130754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:43:06.649 [DEBUG] [Thread-130754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:43:06.696 [DEBUG] [Thread-130754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:43:06.696 [DEBUG] [Thread-130754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:43:06.705 [DEBUG] [Thread-130754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:43:06.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:43:06.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:43:06.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:43:06.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:43:06.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:43:06.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:43:06.742 [DEBUG] [Thread-130754] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:43:19.323 [DEBUG] [Thread-130756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:43:20.355 [DEBUG] [Thread-130757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:43:27.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:43:27.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:43:34.382 [DEBUG] [Thread-130758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:43:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:43:36.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:43:36.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
2026-02-11T14:43:38.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 42, 55), 17.35, 32.96, 0.0, 24.86, 25.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:43:38.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:42:55
2026-02-11T14:43:39.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:43:39.311 [DEBUG] [Thread-130759] [transport.py] [_log()] starting thread (client mode): 0xa2d57400
2026-02-11T14:43:39.311 [DEBUG] [Thread-130759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:43:39.331 [DEBUG] [Thread-130759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:43:39.331 [INFO] [Thread-130759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] client lang: <none>
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] server lang: <none>
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] kex follows: False
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] Compression: none
2026-02-11T14:43:39.333 [DEBUG] [Thread-130759] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:43:39.343 [DEBUG] [Thread-130759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:43:39.343 [DEBUG] [Thread-130759] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:43:39.344 [DEBUG] [Thread-130759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:43:39.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:43:39.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:43:39.346 [DEBUG] [Thread-130759] [transport.py] [_log()] userauth is OK
2026-02-11T14:43:39.346 [DEBUG] [Thread-130759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:43:39.346 [DEBUG] [Thread-130759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:43:39.346 [DEBUG] [Thread-130759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:43:39.346 [DEBUG] [Thread-130759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:43:39.383 [INFO] [Thread-130759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:43:39.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:43:39.965 [DEBUG] [Thread-130759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:43:39.965 [DEBUG] [Thread-130759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:43:39.966 [DEBUG] [Thread-130759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:43:40.006 [DEBUG] [Thread-130759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:43:40.007 [DEBUG] [Thread-130759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:43:40.010 [DEBUG] [Thread-130759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:43:40.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:43:40.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:43:40.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:43:40.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:43:40.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:43:40.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:43:40.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:43:40.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:43:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:43:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.530004 -999.00  +24.90  33.28     40  +10.30 1 2 2 1 1   888    0 14.20 1.91 ----- 30.9 33.3 314.4 43.4 30.2 -17.9 29.7 -15.7 30.0 -14.0 30.7 -16.0
2026-02-11T14:43:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:43:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:43:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.530004
2026-02-11T14:43:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:43:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:43:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:43:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:43:40.038 [DEBUG] [Thread-130759] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:43:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:43:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:42:55', tmtdew=17.35, humidity=32.96, cloud=0.0, wind=24.86, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:43:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:43:40.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:43:40.147 [DEBUG] [Thread-130762] [transport.py] [_log()] starting thread (client mode): 0xa5742680
2026-02-11T14:43:40.147 [DEBUG] [Thread-130762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:43:40.161 [DEBUG] [Thread-130762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:43:40.162 [INFO] [Thread-130762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] client lang: <none>
2026-02-11T14:43:40.169 [DEBUG] [Thread-130762] [transport.py] [_log()] server lang: <none>
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] kex follows: False
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] Compression: none
2026-02-11T14:43:40.170 [DEBUG] [Thread-130762] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:43:40.229 [DEBUG] [Thread-130762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:43:40.229 [DEBUG] [Thread-130762] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:43:40.230 [DEBUG] [Thread-130762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:43:40.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:43:40.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:43:40.285 [DEBUG] [Thread-130762] [transport.py] [_log()] userauth is OK
2026-02-11T14:43:40.285 [DEBUG] [Thread-130762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:43:40.285 [DEBUG] [Thread-130762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:43:40.285 [DEBUG] [Thread-130762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:43:40.285 [DEBUG] [Thread-130762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:43:40.306 [INFO] [Thread-130762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:43:40.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:43:40.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:43:41.161 [DEBUG] [Thread-130762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:43:41.162 [DEBUG] [Thread-130762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:43:41.210 [DEBUG] [Thread-130762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:43:41.211 [DEBUG] [Thread-130762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:43:41.224 [DEBUG] [Thread-130762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:43:41.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:43:41.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:43:41.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:43:41.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:43:41.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:43:41.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:43:41.261 [DEBUG] [Thread-130762] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:43:49.415 [DEBUG] [Thread-130764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:44:04.452 [DEBUG] [Thread-130765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:44:11.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:44:11.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:44:11.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:44:13.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 43, 31), 17.59, 32.44, 0.0, 27.44, 25.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:44:13.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:43:31
2026-02-11T14:44:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:44:14.000 [DEBUG] [Thread-130766] [transport.py] [_log()] starting thread (client mode): 0xa2d03e20
2026-02-11T14:44:14.000 [DEBUG] [Thread-130766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:44:14.022 [DEBUG] [Thread-130766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:44:14.022 [INFO] [Thread-130766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] client lang: <none>
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] server lang: <none>
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] kex follows: False
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:44:14.025 [DEBUG] [Thread-130766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:44:14.026 [DEBUG] [Thread-130766] [transport.py] [_log()] Compression: none
2026-02-11T14:44:14.026 [DEBUG] [Thread-130766] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:44:14.043 [DEBUG] [Thread-130766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:44:14.043 [DEBUG] [Thread-130766] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:44:14.044 [DEBUG] [Thread-130766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:44:14.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:44:14.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:44:14.046 [DEBUG] [Thread-130766] [transport.py] [_log()] userauth is OK
2026-02-11T14:44:14.046 [DEBUG] [Thread-130766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:44:14.046 [DEBUG] [Thread-130766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:44:14.046 [DEBUG] [Thread-130766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:44:14.046 [DEBUG] [Thread-130766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:44:14.065 [INFO] [Thread-130766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:44:14.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:44:14.633 [DEBUG] [Thread-130766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:44:14.633 [DEBUG] [Thread-130766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:44:14.633 [DEBUG] [Thread-130766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:44:14.673 [DEBUG] [Thread-130766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:44:14.674 [DEBUG] [Thread-130766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:44:14.677 [DEBUG] [Thread-130766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:44:14.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:44:14.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:44:14.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:44:14.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:44:14.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:44:14.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:44:14.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:44:14.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:44:14.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:44:14.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.530351 -999.00  +24.80  32.34     39  +10.10 1 2 2 1 1   888    0 13.93 5.70 ----- 39.0 32.3 309.0 42.6 30.2 -18.9 29.3 -17.4 29.5 -18.4 30.6 -18.7
2026-02-11T14:44:14.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:44:14.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:44:14.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.530351
2026-02-11T14:44:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:44:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:44:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:44:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:44:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:44:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:43:31', tmtdew=17.59, humidity=32.44, cloud=0.0, wind=27.44, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:43:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:44:14.707 [DEBUG] [Thread-130766] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:44:14.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:44:19.493 [DEBUG] [Thread-130769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:44:20.387 [DEBUG] [Thread-130770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:44:27.313 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:44:27.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:44:34.541 [DEBUG] [Thread-130771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:44:49.584 [DEBUG] [Thread-130772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:45:04.623 [DEBUG] [Thread-130773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:45:19.660 [DEBUG] [Thread-130774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:45:20.437 [DEBUG] [Thread-130775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:45:27.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:45:27.461 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:45:34.699 [DEBUG] [Thread-130776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:45:49.736 [DEBUG] [Thread-130777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:04.773 [DEBUG] [Thread-130778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:19.810 [DEBUG] [Thread-130779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:20.487 [DEBUG] [Thread-130780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:26.872 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T14:46:27.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:27.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:34.847 [DEBUG] [Thread-130781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:49.883 [DEBUG] [Thread-130782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:46:56.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:46:56.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:46:56.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:46:59.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 46, 29), 17.65, 32.61, 0.0, 31.76, 24.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:46:59.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:46:29
2026-02-11T14:46:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:46:59.748 [DEBUG] [Thread-130783] [transport.py] [_log()] starting thread (client mode): 0xa2d015d0
2026-02-11T14:46:59.748 [DEBUG] [Thread-130783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:46:59.763 [DEBUG] [Thread-130783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:46:59.763 [INFO] [Thread-130783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] client lang: <none>
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] server lang: <none>
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] kex follows: False
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:46:59.764 [DEBUG] [Thread-130783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:46:59.765 [DEBUG] [Thread-130783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:46:59.765 [DEBUG] [Thread-130783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:46:59.765 [DEBUG] [Thread-130783] [transport.py] [_log()] Compression: none
2026-02-11T14:46:59.765 [DEBUG] [Thread-130783] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:46:59.773 [DEBUG] [Thread-130783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:46:59.773 [DEBUG] [Thread-130783] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:46:59.773 [DEBUG] [Thread-130783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:46:59.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:46:59.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:46:59.774 [DEBUG] [Thread-130783] [transport.py] [_log()] userauth is OK
2026-02-11T14:46:59.774 [DEBUG] [Thread-130783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:46:59.774 [DEBUG] [Thread-130783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:46:59.774 [DEBUG] [Thread-130783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:46:59.774 [DEBUG] [Thread-130783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:46:59.788 [INFO] [Thread-130783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:46:59.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:47:00.391 [DEBUG] [Thread-130783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:47:00.392 [DEBUG] [Thread-130783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:47:00.392 [DEBUG] [Thread-130783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:47:00.432 [DEBUG] [Thread-130783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:47:00.433 [DEBUG] [Thread-130783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:47:00.436 [DEBUG] [Thread-130783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:47:00.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:47:00.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:47:00.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:47:00.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:47:00.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:47:00.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:47:00.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:47:00.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:47:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:47:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.532434 -999.00  +24.30  38.30     39   +9.70 1 2 2 1 1   888    0 14.79 23.67 ----- 37.9 38.3 313.6 43.5 30.4 -17.0 29.8 -16.1 30.2 -15.6 30.9 -17.0
2026-02-11T14:47:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:47:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:47:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.532434
2026-02-11T14:47:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:47:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:47:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:47:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:47:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:47:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:46:29', tmtdew=17.65, humidity=32.61, cloud=0.0, wind=31.76, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:46:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:47:00.460 [DEBUG] [Thread-130783] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:47:00.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:47:00.554 [DEBUG] [Thread-130786] [transport.py] [_log()] starting thread (client mode): 0xa2d13fa0
2026-02-11T14:47:00.555 [DEBUG] [Thread-130786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:47:00.569 [DEBUG] [Thread-130786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:47:00.569 [INFO] [Thread-130786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] client lang: <none>
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] server lang: <none>
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] kex follows: False
2026-02-11T14:47:00.577 [DEBUG] [Thread-130786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:47:00.578 [DEBUG] [Thread-130786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:47:00.578 [DEBUG] [Thread-130786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:47:00.578 [DEBUG] [Thread-130786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:47:00.578 [DEBUG] [Thread-130786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:47:00.578 [DEBUG] [Thread-130786] [transport.py] [_log()] Compression: none
2026-02-11T14:47:00.578 [DEBUG] [Thread-130786] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:47:00.638 [DEBUG] [Thread-130786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:47:00.639 [DEBUG] [Thread-130786] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:47:00.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:47:00.640 [DEBUG] [Thread-130786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:47:00.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:47:00.697 [DEBUG] [Thread-130786] [transport.py] [_log()] userauth is OK
2026-02-11T14:47:00.697 [DEBUG] [Thread-130786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:47:00.697 [DEBUG] [Thread-130786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:47:00.697 [DEBUG] [Thread-130786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:47:00.697 [DEBUG] [Thread-130786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:47:00.714 [INFO] [Thread-130786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:47:00.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:47:00.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:47:01.535 [DEBUG] [Thread-130786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:47:01.536 [DEBUG] [Thread-130786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:47:01.583 [DEBUG] [Thread-130786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:47:01.583 [DEBUG] [Thread-130786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:47:01.592 [DEBUG] [Thread-130786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:47:01.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:47:01.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:47:01.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:47:01.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:47:01.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:47:01.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:47:01.628 [DEBUG] [Thread-130786] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:47:04.921 [DEBUG] [Thread-130788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:47:19.971 [DEBUG] [Thread-130789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:47:20.514 [DEBUG] [Thread-130790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:47:27.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:47:27.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:47:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:47:31.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:47:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:47:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 47, 5), 17.46, 32.96, 0.0, 33.01, 24.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:47:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:47:05
2026-02-11T14:47:33.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:47:34.078 [DEBUG] [Thread-130791] [transport.py] [_log()] starting thread (client mode): 0xa2d6d1b0
2026-02-11T14:47:34.078 [DEBUG] [Thread-130791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:47:34.098 [DEBUG] [Thread-130791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:47:34.098 [INFO] [Thread-130791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] client lang: <none>
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] server lang: <none>
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] kex follows: False
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] Compression: none
2026-02-11T14:47:34.101 [DEBUG] [Thread-130791] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:47:34.110 [DEBUG] [Thread-130791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:47:34.110 [DEBUG] [Thread-130791] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:47:34.111 [DEBUG] [Thread-130791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:47:34.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:47:34.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:47:34.112 [DEBUG] [Thread-130791] [transport.py] [_log()] userauth is OK
2026-02-11T14:47:34.112 [DEBUG] [Thread-130791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:47:34.112 [DEBUG] [Thread-130791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:47:34.113 [DEBUG] [Thread-130791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:47:34.113 [DEBUG] [Thread-130791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:47:34.148 [INFO] [Thread-130791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:47:34.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:47:34.809 [DEBUG] [Thread-130791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:47:34.810 [DEBUG] [Thread-130791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:47:34.810 [DEBUG] [Thread-130791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:47:34.850 [DEBUG] [Thread-130791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:47:34.851 [DEBUG] [Thread-130791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:47:34.854 [DEBUG] [Thread-130791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:47:34.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:47:34.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:47:34.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:47:34.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:47:34.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:47:34.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:47:34.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:47:34.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:47:34.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:47:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.532781 -999.00  +24.20  29.76     41  +10.20 1 2 1 1 1   888    0 14.81 22.54 ----- 30.6 29.8 322.2 40.4 30.3 -18.3 29.7 -15.4 30.0 -17.3 30.9 -17.5
2026-02-11T14:47:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:47:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:47:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.532781
2026-02-11T14:47:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:47:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:47:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:47:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:47:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:47:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:47:05', tmtdew=17.46, humidity=32.96, cloud=0.0, wind=33.01, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:47:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:47:34.881 [DEBUG] [Thread-130791] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:47:34.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:47:34.976 [DEBUG] [Thread-130794] [transport.py] [_log()] starting thread (client mode): 0xa2d6d120
2026-02-11T14:47:34.977 [DEBUG] [Thread-130794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:47:34.996 [DEBUG] [Thread-130794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:47:34.996 [INFO] [Thread-130794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] client lang: <none>
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] server lang: <none>
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] kex follows: False
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:47:35.003 [DEBUG] [Thread-130794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:47:35.004 [DEBUG] [Thread-130794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:47:35.004 [DEBUG] [Thread-130794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:47:35.004 [DEBUG] [Thread-130794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:47:35.004 [DEBUG] [Thread-130794] [transport.py] [_log()] Compression: none
2026-02-11T14:47:35.004 [DEBUG] [Thread-130794] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:47:35.007 [DEBUG] [Thread-130796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:47:35.059 [DEBUG] [Thread-130794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:47:35.060 [DEBUG] [Thread-130794] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:47:35.060 [DEBUG] [Thread-130794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:47:35.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:47:35.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:47:35.116 [DEBUG] [Thread-130794] [transport.py] [_log()] userauth is OK
2026-02-11T14:47:35.116 [DEBUG] [Thread-130794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:47:35.116 [DEBUG] [Thread-130794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:47:35.116 [DEBUG] [Thread-130794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:47:35.116 [DEBUG] [Thread-130794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:47:35.130 [INFO] [Thread-130794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:47:35.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:47:35.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:47:35.947 [DEBUG] [Thread-130794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:47:35.948 [DEBUG] [Thread-130794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:47:35.995 [DEBUG] [Thread-130794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:47:35.995 [DEBUG] [Thread-130794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:47:36.004 [DEBUG] [Thread-130794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:47:36.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:47:36.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')
2026-02-11T14:47:36.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
2026-02-11T14:47:36.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:47:36.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:47:36.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:47:36.039 [DEBUG] [Thread-130794] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:47:50.058 [DEBUG] [Thread-130797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:48:05.093 [DEBUG] [Thread-130798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:48:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:48:06.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:48:06.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
2026-02-11T14:48:08.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 47, 41), 19.08, 29.76, 0.0, 31.65, 26.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:48:08.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:47:41
2026-02-11T14:48:09.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:48:09.199 [DEBUG] [Thread-130799] [transport.py] [_log()] starting thread (client mode): 0xa2d12aa0
2026-02-11T14:48:09.199 [DEBUG] [Thread-130799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:48:09.219 [DEBUG] [Thread-130799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:48:09.219 [INFO] [Thread-130799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:48:09.222 [DEBUG] [Thread-130799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:48:09.222 [DEBUG] [Thread-130799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:48:09.222 [DEBUG] [Thread-130799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:48:09.222 [DEBUG] [Thread-130799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] client lang: <none>
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] server lang: <none>
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] kex follows: False
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:48:09.223 [DEBUG] [Thread-130799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:48:09.224 [DEBUG] [Thread-130799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:48:09.224 [DEBUG] [Thread-130799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:48:09.224 [DEBUG] [Thread-130799] [transport.py] [_log()] Compression: none
2026-02-11T14:48:09.224 [DEBUG] [Thread-130799] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:48:09.242 [DEBUG] [Thread-130799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:48:09.242 [DEBUG] [Thread-130799] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:48:09.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:48:09.243 [DEBUG] [Thread-130799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:48:09.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:48:09.245 [DEBUG] [Thread-130799] [transport.py] [_log()] userauth is OK
2026-02-11T14:48:09.246 [DEBUG] [Thread-130799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:48:09.246 [DEBUG] [Thread-130799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:48:09.246 [DEBUG] [Thread-130799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:48:09.246 [DEBUG] [Thread-130799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:48:09.270 [INFO] [Thread-130799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:48:09.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:48:09.917 [DEBUG] [Thread-130799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:48:09.917 [DEBUG] [Thread-130799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:48:09.918 [DEBUG] [Thread-130799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:48:09.958 [DEBUG] [Thread-130799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:48:09.959 [DEBUG] [Thread-130799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:48:09.962 [DEBUG] [Thread-130799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:48:09.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:48:09.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:48:09.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:48:09.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:48:09.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:48:09.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:48:09.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:48:09.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:48:09.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:48:09.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.533129 -999.00  +24.70  21.49     40  +10.40 1 2 1 1 1   888    0 14.84 25.04 ----- 23.5 21.5 324.2 33.7 30.2 -18.2 29.7 -14.8 30.1 -14.9 30.8 -17.6
2026-02-11T14:48:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:48:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:48:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.533129
2026-02-11T14:48:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:48:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:48:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:48:09.992 [DEBUG] [Thread-130799] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:48:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:48:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:48:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:47:41', tmtdew=19.08, humidity=29.76, cloud=0.0, wind=31.65, temperature=26.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:47:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:48:10.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:48:10.100 [DEBUG] [Thread-130802] [transport.py] [_log()] starting thread (client mode): 0xa2d6ef80
2026-02-11T14:48:10.100 [DEBUG] [Thread-130802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:48:10.118 [DEBUG] [Thread-130802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:48:10.118 [INFO] [Thread-130802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:48:10.125 [DEBUG] [Thread-130802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:48:10.125 [DEBUG] [Thread-130802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] client lang: <none>
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] server lang: <none>
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] kex follows: False
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:48:10.126 [DEBUG] [Thread-130802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:48:10.127 [DEBUG] [Thread-130802] [transport.py] [_log()] Compression: none
2026-02-11T14:48:10.127 [DEBUG] [Thread-130802] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:48:10.191 [DEBUG] [Thread-130802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:48:10.191 [DEBUG] [Thread-130802] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:48:10.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:48:10.192 [DEBUG] [Thread-130802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:48:10.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:48:10.249 [DEBUG] [Thread-130802] [transport.py] [_log()] userauth is OK
2026-02-11T14:48:10.249 [DEBUG] [Thread-130802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:48:10.250 [DEBUG] [Thread-130802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:48:10.250 [DEBUG] [Thread-130802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:48:10.250 [DEBUG] [Thread-130802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:48:10.273 [INFO] [Thread-130802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:48:10.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:48:10.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:48:11.137 [DEBUG] [Thread-130802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:48:11.137 [DEBUG] [Thread-130802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:48:11.185 [DEBUG] [Thread-130802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:48:11.186 [DEBUG] [Thread-130802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:48:11.195 [DEBUG] [Thread-130802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:48:11.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:48:11.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:48:11.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:48:11.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:48:11.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:48:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:48:11.231 [DEBUG] [Thread-130802] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:48:20.125 [DEBUG] [Thread-130804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:48:20.546 [DEBUG] [Thread-130805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:48:27.887 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:48:27.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:48:35.177 [DEBUG] [Thread-130806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:48:41.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:48:41.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:48:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:48:43.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 48, 17), 16.87, 33.86, 0.0, 26.91, 24.42, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:48:43.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:48:17
2026-02-11T14:48:43.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:48:43.701 [DEBUG] [Thread-130807] [transport.py] [_log()] starting thread (client mode): 0xa81d7160
2026-02-11T14:48:43.701 [DEBUG] [Thread-130807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:48:43.722 [DEBUG] [Thread-130807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:48:43.722 [INFO] [Thread-130807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:48:43.725 [DEBUG] [Thread-130807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:48:43.725 [DEBUG] [Thread-130807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:48:43.725 [DEBUG] [Thread-130807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] client lang: <none>
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] server lang: <none>
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] kex follows: False
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] Compression: none
2026-02-11T14:48:43.726 [DEBUG] [Thread-130807] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:48:43.743 [DEBUG] [Thread-130807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:48:43.744 [DEBUG] [Thread-130807] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:48:43.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:48:43.745 [DEBUG] [Thread-130807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:48:43.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:48:43.747 [DEBUG] [Thread-130807] [transport.py] [_log()] userauth is OK
2026-02-11T14:48:43.748 [DEBUG] [Thread-130807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:48:43.748 [DEBUG] [Thread-130807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:48:43.748 [DEBUG] [Thread-130807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:48:43.748 [DEBUG] [Thread-130807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:48:43.772 [INFO] [Thread-130807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:48:43.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:48:44.409 [DEBUG] [Thread-130807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:48:44.409 [DEBUG] [Thread-130807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:48:44.409 [DEBUG] [Thread-130807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:48:44.450 [DEBUG] [Thread-130807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:48:44.451 [DEBUG] [Thread-130807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:48:44.454 [DEBUG] [Thread-130807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:48:44.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:48:44.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:48:44.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:48:44.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:48:44.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:48:44.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:48:44.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:48:44.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:48:44.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:48:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.533476 -999.00  +24.60  27.58     40  +10.30 1 2 1 1 1   888    0 14.95 28.56 ----- 29.7 27.6 323.8 31.5 30.3 -18.3 29.7 -16.0 30.2 -15.4 30.8 -17.8
2026-02-11T14:48:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:48:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:48:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.533476
2026-02-11T14:48:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:48:44.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:48:44.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:48:44.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:48:44.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:48:44.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:48:17', tmtdew=16.87, humidity=33.86, cloud=0.0, wind=26.91, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:48:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:48:44.482 [DEBUG] [Thread-130807] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:48:44.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:48:44.590 [DEBUG] [Thread-130810] [transport.py] [_log()] starting thread (client mode): 0xa81d51e0
2026-02-11T14:48:44.590 [DEBUG] [Thread-130810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:48:44.604 [DEBUG] [Thread-130810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:48:44.604 [INFO] [Thread-130810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:48:44.612 [DEBUG] [Thread-130810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:48:44.612 [DEBUG] [Thread-130810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:48:44.612 [DEBUG] [Thread-130810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:48:44.612 [DEBUG] [Thread-130810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] client lang: <none>
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] server lang: <none>
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] kex follows: False
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:48:44.613 [DEBUG] [Thread-130810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:48:44.614 [DEBUG] [Thread-130810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:48:44.614 [DEBUG] [Thread-130810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:48:44.614 [DEBUG] [Thread-130810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:48:44.614 [DEBUG] [Thread-130810] [transport.py] [_log()] Compression: none
2026-02-11T14:48:44.614 [DEBUG] [Thread-130810] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:48:44.672 [DEBUG] [Thread-130810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:48:44.673 [DEBUG] [Thread-130810] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:48:44.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:48:44.675 [DEBUG] [Thread-130810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:48:44.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:48:44.728 [DEBUG] [Thread-130810] [transport.py] [_log()] userauth is OK
2026-02-11T14:48:44.729 [DEBUG] [Thread-130810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:48:44.729 [DEBUG] [Thread-130810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:48:44.729 [DEBUG] [Thread-130810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:48:44.729 [DEBUG] [Thread-130810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:48:44.752 [INFO] [Thread-130810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:48:44.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:48:44.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:48:45.588 [DEBUG] [Thread-130810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:48:45.588 [DEBUG] [Thread-130810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:48:45.636 [DEBUG] [Thread-130810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:48:45.637 [DEBUG] [Thread-130810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:48:45.646 [DEBUG] [Thread-130810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:48:45.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:48:45.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:48:45.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:48:45.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:48:45.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:48:45.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:48:45.680 [DEBUG] [Thread-130810] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:48:50.213 [DEBUG] [Thread-130812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:05.266 [DEBUG] [Thread-130813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:49:15.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:49:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:49:17.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 48, 53), 16.9, 34.26, 29.3, 19.07, 24.88, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:49:17.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:48:53
2026-02-11T14:49:17.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:49:18.121 [DEBUG] [Thread-130814] [transport.py] [_log()] starting thread (client mode): 0xa2d6e740
2026-02-11T14:49:18.121 [DEBUG] [Thread-130814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:49:18.141 [DEBUG] [Thread-130814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:49:18.141 [INFO] [Thread-130814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] client lang: <none>
2026-02-11T14:49:18.142 [DEBUG] [Thread-130814] [transport.py] [_log()] server lang: <none>
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] kex follows: False
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] Compression: none
2026-02-11T14:49:18.143 [DEBUG] [Thread-130814] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:49:18.155 [DEBUG] [Thread-130814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:49:18.155 [DEBUG] [Thread-130814] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:49:18.156 [DEBUG] [Thread-130814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:49:18.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:49:18.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:49:18.158 [DEBUG] [Thread-130814] [transport.py] [_log()] userauth is OK
2026-02-11T14:49:18.158 [DEBUG] [Thread-130814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:49:18.158 [DEBUG] [Thread-130814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:49:18.158 [DEBUG] [Thread-130814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:49:18.158 [DEBUG] [Thread-130814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:49:18.193 [INFO] [Thread-130814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:49:18.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:49:18.847 [DEBUG] [Thread-130814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:49:18.847 [DEBUG] [Thread-130814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:49:18.848 [DEBUG] [Thread-130814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:49:18.888 [DEBUG] [Thread-130814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:49:18.889 [DEBUG] [Thread-130814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:49:18.892 [DEBUG] [Thread-130814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:49:18.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:49:18.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:49:18.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:49:18.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:49:18.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:49:18.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:49:18.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:49:18.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:49:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:49:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.533823 -999.00  +24.50  24.06     40  +10.30 1 2 1 1 1   888    0 14.93 29.29 ----- 30.4 24.1 315.8 29.1 30.4 -18.4 29.9 -16.8 30.3 -17.4 30.9 -17.6
2026-02-11T14:49:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:49:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:49:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.533823
2026-02-11T14:49:18.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:49:18.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:49:18.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:49:18.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:49:18.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:49:18.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:48:53', tmtdew=16.9, humidity=34.26, cloud=29.3, wind=19.07, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:48:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:49:18.913 [DEBUG] [Thread-130814] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:49:18.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:49:19.009 [DEBUG] [Thread-130817] [transport.py] [_log()] starting thread (client mode): 0xa57709a0
2026-02-11T14:49:19.009 [DEBUG] [Thread-130817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:49:19.023 [DEBUG] [Thread-130817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:49:19.024 [INFO] [Thread-130817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:49:19.031 [DEBUG] [Thread-130817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:49:19.031 [DEBUG] [Thread-130817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:49:19.031 [DEBUG] [Thread-130817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:49:19.031 [DEBUG] [Thread-130817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:19.031 [DEBUG] [Thread-130817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:19.031 [DEBUG] [Thread-130817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] client lang: <none>
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] server lang: <none>
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] kex follows: False
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] Compression: none
2026-02-11T14:49:19.032 [DEBUG] [Thread-130817] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:49:19.090 [DEBUG] [Thread-130817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:49:19.091 [DEBUG] [Thread-130817] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:49:19.091 [DEBUG] [Thread-130817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:49:19.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:49:19.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:49:19.149 [DEBUG] [Thread-130817] [transport.py] [_log()] userauth is OK
2026-02-11T14:49:19.149 [DEBUG] [Thread-130817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:49:19.149 [DEBUG] [Thread-130817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:49:19.149 [DEBUG] [Thread-130817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:49:19.150 [DEBUG] [Thread-130817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:49:19.168 [INFO] [Thread-130817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:49:19.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:49:19.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:49:20.001 [DEBUG] [Thread-130817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:49:20.001 [DEBUG] [Thread-130817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:49:20.049 [DEBUG] [Thread-130817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:49:20.049 [DEBUG] [Thread-130817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:49:20.058 [DEBUG] [Thread-130817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:49:20.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:49:20.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:49:20.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:49:20.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:49:20.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:49:20.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:49:20.094 [DEBUG] [Thread-130817] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:49:20.303 [DEBUG] [Thread-130819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:20.594 [DEBUG] [Thread-130820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:28.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:28.034 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:35.398 [DEBUG] [Thread-130821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:49:50.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:49:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:49:50.438 [DEBUG] [Thread-130822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:49:51.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 49, 30), 16.72, 34.62, 29.3, 19.8, 24.73, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:49:51.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:49:30
2026-02-11T14:49:52.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:49:52.487 [DEBUG] [Thread-130823] [transport.py] [_log()] starting thread (client mode): 0xa2d10d30
2026-02-11T14:49:52.487 [DEBUG] [Thread-130823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:49:52.506 [DEBUG] [Thread-130823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:49:52.507 [INFO] [Thread-130823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] client lang: <none>
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] server lang: <none>
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] kex follows: False
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] Compression: none
2026-02-11T14:49:52.510 [DEBUG] [Thread-130823] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:49:52.520 [DEBUG] [Thread-130823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:49:52.520 [DEBUG] [Thread-130823] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:49:52.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:49:52.522 [DEBUG] [Thread-130823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:49:52.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:49:52.524 [DEBUG] [Thread-130823] [transport.py] [_log()] userauth is OK
2026-02-11T14:49:52.524 [DEBUG] [Thread-130823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:49:52.524 [DEBUG] [Thread-130823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:49:52.524 [DEBUG] [Thread-130823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:49:52.525 [DEBUG] [Thread-130823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:49:52.552 [INFO] [Thread-130823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:49:52.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:49:53.178 [DEBUG] [Thread-130823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:49:53.178 [DEBUG] [Thread-130823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:49:53.178 [DEBUG] [Thread-130823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:49:53.220 [DEBUG] [Thread-130823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:49:53.220 [DEBUG] [Thread-130823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:49:53.223 [DEBUG] [Thread-130823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:49:53.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:49:53.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:49:53.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:49:53.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:49:53.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:49:53.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:49:53.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:49:53.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:49:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:49:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.534517 -999.00  +24.50  25.60     40  +10.20 1 2 1 1 1   888    0 14.94 29.37 ----- 25.9 25.6 300.6 33.3 30.5 -17.8 30.1 -17.1 30.4 -17.3 31.1 -17.2
2026-02-11T14:49:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:49:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:49:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.534517
2026-02-11T14:49:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:49:53.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:49:53.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:49:53.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:49:53.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:49:53.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:49:30', tmtdew=16.72, humidity=34.62, cloud=29.3, wind=19.8, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:49:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:49:53.246 [DEBUG] [Thread-130823] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:49:53.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:49:53.344 [DEBUG] [Thread-130826] [transport.py] [_log()] starting thread (client mode): 0xa2d6e9b0
2026-02-11T14:49:53.344 [DEBUG] [Thread-130826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:49:53.359 [DEBUG] [Thread-130826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:49:53.359 [INFO] [Thread-130826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:49:53.366 [DEBUG] [Thread-130826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:49:53.366 [DEBUG] [Thread-130826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:49:53.366 [DEBUG] [Thread-130826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] client lang: <none>
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] server lang: <none>
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] kex follows: False
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] Compression: none
2026-02-11T14:49:53.367 [DEBUG] [Thread-130826] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:49:53.425 [DEBUG] [Thread-130826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:49:53.425 [DEBUG] [Thread-130826] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:49:53.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:49:53.427 [DEBUG] [Thread-130826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:49:53.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:49:53.481 [DEBUG] [Thread-130826] [transport.py] [_log()] userauth is OK
2026-02-11T14:49:53.481 [DEBUG] [Thread-130826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:49:53.481 [DEBUG] [Thread-130826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:49:53.481 [DEBUG] [Thread-130826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:49:53.482 [DEBUG] [Thread-130826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:49:53.506 [INFO] [Thread-130826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:49:53.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:49:53.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:49:54.329 [DEBUG] [Thread-130826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:49:54.329 [DEBUG] [Thread-130826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:49:54.377 [DEBUG] [Thread-130826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:49:54.377 [DEBUG] [Thread-130826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:49:54.386 [DEBUG] [Thread-130826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:49:54.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:49:54.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')
2026-02-11T14:49:54.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:49:54.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:49:54.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:49:54.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:49:54.428 [DEBUG] [Thread-130826] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:50:05.476 [DEBUG] [Thread-130828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:50:20.534 [DEBUG] [Thread-130829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:50:20.637 [DEBUG] [Thread-130830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:50:24.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:50:24.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:50:24.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:50:26.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 50, 5), 16.87, 34.31, 29.3, 22.73, 24.83, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:50:26.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:50:05
2026-02-11T14:50:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:50:26.965 [DEBUG] [Thread-130831] [transport.py] [_log()] starting thread (client mode): 0xa2d6ecb0
2026-02-11T14:50:26.965 [DEBUG] [Thread-130831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:50:26.985 [DEBUG] [Thread-130831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:50:26.985 [INFO] [Thread-130831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:50:26.988 [DEBUG] [Thread-130831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:50:26.988 [DEBUG] [Thread-130831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:50:26.988 [DEBUG] [Thread-130831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:50:26.988 [DEBUG] [Thread-130831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:50:26.988 [DEBUG] [Thread-130831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:50:26.988 [DEBUG] [Thread-130831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:50:26.988 [DEBUG] [Thread-130831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] client lang: <none>
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] server lang: <none>
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] kex follows: False
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] Compression: none
2026-02-11T14:50:26.989 [DEBUG] [Thread-130831] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:50:27.005 [DEBUG] [Thread-130831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:50:27.005 [DEBUG] [Thread-130831] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:50:27.005 [DEBUG] [Thread-130831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:50:27.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:50:27.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:50:27.006 [DEBUG] [Thread-130831] [transport.py] [_log()] userauth is OK
2026-02-11T14:50:27.006 [DEBUG] [Thread-130831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:50:27.006 [DEBUG] [Thread-130831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:50:27.006 [DEBUG] [Thread-130831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:50:27.006 [DEBUG] [Thread-130831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:50:27.021 [INFO] [Thread-130831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:50:27.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:50:27.681 [DEBUG] [Thread-130831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:50:27.681 [DEBUG] [Thread-130831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:50:27.682 [DEBUG] [Thread-130831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:50:27.722 [DEBUG] [Thread-130831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:50:27.723 [DEBUG] [Thread-130831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:50:27.726 [DEBUG] [Thread-130831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:50:27.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:50:27.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:50:27.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:50:27.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:50:27.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:50:27.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:50:27.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:50:27.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:50:27.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:50:27.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.534865 -999.00  +25.10  38.05     38   +9.80 1 2 2 1 1   888    0 14.86 32.84 ----- 31.8 38.0 305.2 43.8 30.7 -17.0 30.1 -20.0 30.4 -22.6 31.4 -16.9
2026-02-11T14:50:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:50:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:50:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.534865
2026-02-11T14:50:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:50:27.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:50:27.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:50:27.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:50:27.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:50:27.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:50:05', tmtdew=16.87, humidity=34.31, cloud=29.3, wind=22.73, temperature=24.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:50:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:50:27.750 [DEBUG] [Thread-130831] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:50:27.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:50:27.836 [DEBUG] [Thread-130834] [transport.py] [_log()] starting thread (client mode): 0xa2d6ddb0
2026-02-11T14:50:27.837 [DEBUG] [Thread-130834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:50:27.851 [DEBUG] [Thread-130834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:50:27.852 [INFO] [Thread-130834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:50:27.859 [DEBUG] [Thread-130834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:50:27.859 [DEBUG] [Thread-130834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:50:27.859 [DEBUG] [Thread-130834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:50:27.859 [DEBUG] [Thread-130834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:50:27.859 [DEBUG] [Thread-130834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:50:27.859 [DEBUG] [Thread-130834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] client lang: <none>
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] server lang: <none>
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] kex follows: False
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] Compression: none
2026-02-11T14:50:27.860 [DEBUG] [Thread-130834] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:50:27.916 [DEBUG] [Thread-130834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:50:27.917 [DEBUG] [Thread-130834] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:50:27.917 [DEBUG] [Thread-130834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:50:27.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:50:27.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:50:27.973 [DEBUG] [Thread-130834] [transport.py] [_log()] userauth is OK
2026-02-11T14:50:27.973 [DEBUG] [Thread-130834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:50:27.973 [DEBUG] [Thread-130834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:50:27.973 [DEBUG] [Thread-130834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:50:27.973 [DEBUG] [Thread-130834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:50:27.993 [INFO] [Thread-130834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:50:27.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:50:27.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:50:28.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:50:28.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:50:28.846 [DEBUG] [Thread-130834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:50:28.846 [DEBUG] [Thread-130834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:50:28.894 [DEBUG] [Thread-130834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:50:28.894 [DEBUG] [Thread-130834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:50:28.903 [DEBUG] [Thread-130834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:50:28.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:50:28.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:50:28.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:50:28.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:50:28.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:50:28.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:50:28.939 [DEBUG] [Thread-130834] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:50:35.574 [DEBUG] [Thread-130836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:50:50.639 [DEBUG] [Thread-130837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:50:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:50:58.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:50: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
2026-02-11T14:51:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 50, 40), 18.27, 31.35, 29.3, 35.57, 26.13, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:51:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:50:40
2026-02-11T14:51:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:51:01.808 [DEBUG] [Thread-130838] [transport.py] [_log()] starting thread (client mode): 0xa81d4d00
2026-02-11T14:51:01.808 [DEBUG] [Thread-130838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:51:01.828 [DEBUG] [Thread-130838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:51:01.828 [INFO] [Thread-130838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:51:01.831 [DEBUG] [Thread-130838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] client lang: <none>
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] server lang: <none>
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] kex follows: False
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] Compression: none
2026-02-11T14:51:01.832 [DEBUG] [Thread-130838] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:51:01.849 [DEBUG] [Thread-130838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:51:01.849 [DEBUG] [Thread-130838] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:51:01.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:51:01.850 [DEBUG] [Thread-130838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:51:01.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:51:01.852 [DEBUG] [Thread-130838] [transport.py] [_log()] userauth is OK
2026-02-11T14:51:01.852 [DEBUG] [Thread-130838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:51:01.853 [DEBUG] [Thread-130838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:51:01.853 [DEBUG] [Thread-130838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:51:01.853 [DEBUG] [Thread-130838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:51:01.871 [INFO] [Thread-130838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:51:01.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:51:02.478 [DEBUG] [Thread-130838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:51:02.478 [DEBUG] [Thread-130838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:51:02.479 [DEBUG] [Thread-130838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:51:02.519 [DEBUG] [Thread-130838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:51:02.519 [DEBUG] [Thread-130838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:51:02.523 [DEBUG] [Thread-130838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:51:02.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:51:02.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:51:02.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:51:02.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:51:02.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:51:02.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:51:02.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:51:02.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:51:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:51:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.535212 -999.00  +25.00  35.22     38  +10.10 1 2 2 1 1   888    0 15.22 37.30 ----- 38.1 35.2 313.0 38.4 30.6 -20.2 30.1 -18.6 30.4 -20.3 31.3 -18.7
2026-02-11T14:51:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:51:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:51:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.535212
2026-02-11T14:51:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:51:02.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:51:02.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:51:02.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:51:02.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:51:02.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:50:40', tmtdew=18.27, humidity=31.35, cloud=29.3, wind=35.57, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:50:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:51:02.547 [DEBUG] [Thread-130838] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:51:02.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:51:02.642 [DEBUG] [Thread-130841] [transport.py] [_log()] starting thread (client mode): 0xa57732b0
2026-02-11T14:51:02.642 [DEBUG] [Thread-130841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:51:02.656 [DEBUG] [Thread-130841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:51:02.656 [INFO] [Thread-130841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:51:02.664 [DEBUG] [Thread-130841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:51:02.664 [DEBUG] [Thread-130841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:51:02.664 [DEBUG] [Thread-130841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:51:02.664 [DEBUG] [Thread-130841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:02.664 [DEBUG] [Thread-130841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:02.664 [DEBUG] [Thread-130841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:02.664 [DEBUG] [Thread-130841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] client lang: <none>
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] server lang: <none>
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] kex follows: False
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] Compression: none
2026-02-11T14:51:02.665 [DEBUG] [Thread-130841] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:51:02.724 [DEBUG] [Thread-130841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:51:02.725 [DEBUG] [Thread-130841] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:51:02.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:51:02.726 [DEBUG] [Thread-130841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:51:02.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:51:02.782 [DEBUG] [Thread-130841] [transport.py] [_log()] userauth is OK
2026-02-11T14:51:02.782 [DEBUG] [Thread-130841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:51:02.782 [DEBUG] [Thread-130841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:51:02.782 [DEBUG] [Thread-130841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:51:02.782 [DEBUG] [Thread-130841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:51:02.800 [INFO] [Thread-130841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:51:02.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:51:02.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:51:03.652 [DEBUG] [Thread-130841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:51:03.652 [DEBUG] [Thread-130841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:51:03.700 [DEBUG] [Thread-130841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:51:03.701 [DEBUG] [Thread-130841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:51:03.711 [DEBUG] [Thread-130841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:51:03.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:51:03.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:51: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
2026-02-11T14:51:03.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:51:03.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:51:03.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:51:03.750 [DEBUG] [Thread-130841] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:51:05.678 [DEBUG] [Thread-130843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:51:20.672 [DEBUG] [Thread-130844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:51:20.740 [DEBUG] [Thread-130845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:51:28.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:51:28.315 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:51:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:51:33.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:51:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:51:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 51, 15), 17.59, 32.76, 29.3, 33.12, 25.0, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:51:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:51:15
2026-02-11T14:51:35.777 [DEBUG] [Thread-130846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:51:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:51:36.197 [DEBUG] [Thread-130847] [transport.py] [_log()] starting thread (client mode): 0xa81d7160
2026-02-11T14:51:36.198 [DEBUG] [Thread-130847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:51:36.217 [DEBUG] [Thread-130847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:51:36.217 [INFO] [Thread-130847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:51:36.220 [DEBUG] [Thread-130847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] client lang: <none>
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] server lang: <none>
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] kex follows: False
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] Compression: none
2026-02-11T14:51:36.221 [DEBUG] [Thread-130847] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:51:36.240 [DEBUG] [Thread-130847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:51:36.241 [DEBUG] [Thread-130847] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:51:36.241 [DEBUG] [Thread-130847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:51:36.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:51:36.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:51:36.243 [DEBUG] [Thread-130847] [transport.py] [_log()] userauth is OK
2026-02-11T14:51:36.244 [DEBUG] [Thread-130847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:51:36.244 [DEBUG] [Thread-130847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:51:36.244 [DEBUG] [Thread-130847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:51:36.244 [DEBUG] [Thread-130847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:51:36.265 [INFO] [Thread-130847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:51:36.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:51:36.908 [DEBUG] [Thread-130847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:51:36.908 [DEBUG] [Thread-130847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:51:36.908 [DEBUG] [Thread-130847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:51:36.949 [DEBUG] [Thread-130847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:51:36.949 [DEBUG] [Thread-130847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:51:36.952 [DEBUG] [Thread-130847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:51:36.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:51:36.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:51:36.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:51:36.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:51:36.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:51:36.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:51:36.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:51:36.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:51:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:51:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.535559 -999.00  +24.40  23.54     39   +9.80 1 2 1 1 1   888    0 15.33 40.15 ----- 25.9 23.5 304.1 41.1 30.7 -19.7 30.2 -18.5 30.7 -17.3 31.3 -18.5
2026-02-11T14:51:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:51:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:51:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.535559
2026-02-11T14:51:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:51:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:51:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:51:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:51:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:51:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:51:15', tmtdew=17.59, humidity=32.76, cloud=29.3, wind=33.12, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:51:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:51:36.978 [DEBUG] [Thread-130847] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:51:37.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:51:37.072 [DEBUG] [Thread-130850] [transport.py] [_log()] starting thread (client mode): 0xa5773940
2026-02-11T14:51:37.073 [DEBUG] [Thread-130850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:51:37.087 [DEBUG] [Thread-130850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:51:37.087 [INFO] [Thread-130850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:51:37.094 [DEBUG] [Thread-130850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:51:37.095 [DEBUG] [Thread-130850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:51:37.095 [DEBUG] [Thread-130850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:51:37.095 [DEBUG] [Thread-130850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:37.095 [DEBUG] [Thread-130850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:51:37.095 [DEBUG] [Thread-130850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:37.095 [DEBUG] [Thread-130850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] client lang: <none>
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] server lang: <none>
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] kex follows: False
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] Compression: none
2026-02-11T14:51:37.096 [DEBUG] [Thread-130850] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:51:37.152 [DEBUG] [Thread-130850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:51:37.152 [DEBUG] [Thread-130850] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:51:37.153 [DEBUG] [Thread-130850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:51:37.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:51:37.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:51:37.208 [DEBUG] [Thread-130850] [transport.py] [_log()] userauth is OK
2026-02-11T14:51:37.208 [DEBUG] [Thread-130850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:51:37.208 [DEBUG] [Thread-130850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:51:37.209 [DEBUG] [Thread-130850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:51:37.209 [DEBUG] [Thread-130850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:51:37.227 [INFO] [Thread-130850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:51:37.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:51:37.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:51:38.045 [DEBUG] [Thread-130850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:51:38.046 [DEBUG] [Thread-130850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:51:38.093 [DEBUG] [Thread-130850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:51:38.093 [DEBUG] [Thread-130850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:51:38.103 [DEBUG] [Thread-130850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:51:38.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:51: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')
2026-02-11T14:51: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
2026-02-11T14:51:38.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:51:38.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:51:38.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:51:38.139 [DEBUG] [Thread-130850] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:51:50.818 [DEBUG] [Thread-130852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:52:05.872 [DEBUG] [Thread-130853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:52:08.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:52:08.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:52:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:52:10.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 51, 52), 17.59, 32.71, 29.3, 22.39, 24.97, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:52:10.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:51:52
2026-02-11T14:52:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:52:11.148 [DEBUG] [Thread-130854] [transport.py] [_log()] starting thread (client mode): 0xa2d556c0
2026-02-11T14:52:11.148 [DEBUG] [Thread-130854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:52:11.168 [DEBUG] [Thread-130854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:52:11.168 [INFO] [Thread-130854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] client lang: <none>
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] server lang: <none>
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] kex follows: False
2026-02-11T14:52:11.172 [DEBUG] [Thread-130854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:52:11.173 [DEBUG] [Thread-130854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:52:11.173 [DEBUG] [Thread-130854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:52:11.173 [DEBUG] [Thread-130854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:52:11.173 [DEBUG] [Thread-130854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:52:11.173 [DEBUG] [Thread-130854] [transport.py] [_log()] Compression: none
2026-02-11T14:52:11.173 [DEBUG] [Thread-130854] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:52:11.191 [DEBUG] [Thread-130854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:52:11.191 [DEBUG] [Thread-130854] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:52:11.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:52:11.192 [DEBUG] [Thread-130854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:52:11.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:52:11.195 [DEBUG] [Thread-130854] [transport.py] [_log()] userauth is OK
2026-02-11T14:52:11.195 [DEBUG] [Thread-130854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:52:11.195 [DEBUG] [Thread-130854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:52:11.195 [DEBUG] [Thread-130854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:52:11.195 [DEBUG] [Thread-130854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:52:11.219 [INFO] [Thread-130854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:52:11.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:52:11.877 [DEBUG] [Thread-130854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:52:11.877 [DEBUG] [Thread-130854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:52:11.877 [DEBUG] [Thread-130854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:52:11.918 [DEBUG] [Thread-130854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:52:11.918 [DEBUG] [Thread-130854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:52:11.922 [DEBUG] [Thread-130854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:52:11.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:52:11.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:52:11.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:52:11.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:52:11.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:52:11.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:52:11.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:52:11.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:52:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:52:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.535906 -999.00  +24.00  22.34     40   +9.80 1 2 1 1 1   888    0 15.30 41.08 ----- 24.8 22.3 300.4 27.7 30.8 -20.6 30.1 -20.1 30.5 -18.1 31.4 -19.2
2026-02-11T14:52:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:52:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:52:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.535906
2026-02-11T14:52:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:52:11.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:52:11.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:52:11.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:52:11.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:52:11.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:51:52', tmtdew=17.59, humidity=32.71, cloud=29.3, wind=22.39, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:51:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:52:11.946 [DEBUG] [Thread-130854] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:52:12.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:52:12.040 [DEBUG] [Thread-130857] [transport.py] [_log()] starting thread (client mode): 0xa575a2f0
2026-02-11T14:52:12.040 [DEBUG] [Thread-130857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:52:12.055 [DEBUG] [Thread-130857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:52:12.055 [INFO] [Thread-130857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:52:12.063 [DEBUG] [Thread-130857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:52:12.063 [DEBUG] [Thread-130857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:52:12.063 [DEBUG] [Thread-130857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:52:12.063 [DEBUG] [Thread-130857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] client lang: <none>
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] server lang: <none>
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] kex follows: False
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] Compression: none
2026-02-11T14:52:12.064 [DEBUG] [Thread-130857] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:52:12.120 [DEBUG] [Thread-130857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:52:12.121 [DEBUG] [Thread-130857] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:52:12.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:52:12.122 [DEBUG] [Thread-130857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:52:12.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:52:12.177 [DEBUG] [Thread-130857] [transport.py] [_log()] userauth is OK
2026-02-11T14:52:12.177 [DEBUG] [Thread-130857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:52:12.177 [DEBUG] [Thread-130857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:52:12.177 [DEBUG] [Thread-130857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:52:12.178 [DEBUG] [Thread-130857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:52:12.196 [INFO] [Thread-130857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:52:12.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:52:12.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:52:13.015 [DEBUG] [Thread-130857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:52:13.015 [DEBUG] [Thread-130857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:52:13.063 [DEBUG] [Thread-130857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:52:13.063 [DEBUG] [Thread-130857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:52:13.072 [DEBUG] [Thread-130857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:52:13.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:52:13.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:52:13.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:52:13.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:52:13.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:52:13.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:52:13.105 [DEBUG] [Thread-130857] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:52:20.715 [DEBUG] [Thread-130859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:52:20.905 [DEBUG] [Thread-130860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:52:28.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:52:28.457 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:52:35.954 [DEBUG] [Thread-130861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:52:43.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:52:43.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:52:43.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:52:45.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 52, 27), 17.14, 33.54, 29.3, 22.04, 24.63, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:52:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:52:27
2026-02-11T14:52:45.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:52:45.651 [DEBUG] [Thread-130862] [transport.py] [_log()] starting thread (client mode): 0xa575a020
2026-02-11T14:52:45.652 [DEBUG] [Thread-130862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:52:45.672 [DEBUG] [Thread-130862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:52:45.673 [INFO] [Thread-130862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] client lang: <none>
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] server lang: <none>
2026-02-11T14:52:45.676 [DEBUG] [Thread-130862] [transport.py] [_log()] kex follows: False
2026-02-11T14:52:45.677 [DEBUG] [Thread-130862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:52:45.677 [DEBUG] [Thread-130862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:52:45.677 [DEBUG] [Thread-130862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:52:45.677 [DEBUG] [Thread-130862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:52:45.677 [DEBUG] [Thread-130862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:52:45.677 [DEBUG] [Thread-130862] [transport.py] [_log()] Compression: none
2026-02-11T14:52:45.677 [DEBUG] [Thread-130862] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:52:45.696 [DEBUG] [Thread-130862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:52:45.697 [DEBUG] [Thread-130862] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:52:45.697 [DEBUG] [Thread-130862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:52:45.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:52:45.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:52:45.700 [DEBUG] [Thread-130862] [transport.py] [_log()] userauth is OK
2026-02-11T14:52:45.700 [DEBUG] [Thread-130862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:52:45.700 [DEBUG] [Thread-130862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:52:45.700 [DEBUG] [Thread-130862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:52:45.700 [DEBUG] [Thread-130862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:52:45.721 [INFO] [Thread-130862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:52:45.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:52:46.327 [DEBUG] [Thread-130862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:52:46.327 [DEBUG] [Thread-130862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:52:46.328 [DEBUG] [Thread-130862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:52:46.369 [DEBUG] [Thread-130862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:52:46.369 [DEBUG] [Thread-130862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:52:46.372 [DEBUG] [Thread-130862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:52:46.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:52:46.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:52:46.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:52:46.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:52:46.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:52:46.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:52:46.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:52:46.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:52:46.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:52:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.536254 -999.00  +24.30  30.52     41  +10.30 1 2 2 1 1   888    0 15.46 41.11 ----- 27.8 30.5 298.6 34.2 30.7 -20.5 30.2 -20.4 30.6 -18.0 31.4 -18.2
2026-02-11T14:52:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:52:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:52:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.536254
2026-02-11T14:52:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:52:46.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:52:46.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:52:46.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:52:46.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:52:46.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:52:27', tmtdew=17.14, humidity=33.54, cloud=29.3, wind=22.04, temperature=24.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:52:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:52:46.400 [DEBUG] [Thread-130862] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:52:46.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:52:46.497 [DEBUG] [Thread-130865] [transport.py] [_log()] starting thread (client mode): 0xa57d6020
2026-02-11T14:52:46.498 [DEBUG] [Thread-130865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:52:46.512 [DEBUG] [Thread-130865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:52:46.512 [INFO] [Thread-130865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:52:46.519 [DEBUG] [Thread-130865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] client lang: <none>
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] server lang: <none>
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] kex follows: False
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] Compression: none
2026-02-11T14:52:46.520 [DEBUG] [Thread-130865] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:52:46.581 [DEBUG] [Thread-130865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:52:46.581 [DEBUG] [Thread-130865] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:52:46.582 [DEBUG] [Thread-130865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:52:46.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:52:46.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:52:46.637 [DEBUG] [Thread-130865] [transport.py] [_log()] userauth is OK
2026-02-11T14:52:46.637 [DEBUG] [Thread-130865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:52:46.637 [DEBUG] [Thread-130865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:52:46.638 [DEBUG] [Thread-130865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:52:46.638 [DEBUG] [Thread-130865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:52:46.656 [INFO] [Thread-130865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:52:46.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:52:46.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:52:47.505 [DEBUG] [Thread-130865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:52:47.505 [DEBUG] [Thread-130865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:52:47.553 [DEBUG] [Thread-130865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:52:47.553 [DEBUG] [Thread-130865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:52:47.561 [DEBUG] [Thread-130865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:52:47.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:52:47.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:52:47.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:52:47.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:52:47.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:52:47.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:52:47.595 [DEBUG] [Thread-130865] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:52:50.990 [DEBUG] [Thread-130867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:06.053 [DEBUG] [Thread-130868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:53:17.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:53:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:53:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 53, 3), 17.05, 33.72, 29.3, 24.74, 24.58, 0, 0, 0, 0, 0, 0),)
2026-02-11T14:53:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:53:03
2026-02-11T14:53:19.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:53:20.046 [DEBUG] [Thread-130869] [transport.py] [_log()] starting thread (client mode): 0xa57d5270
2026-02-11T14:53:20.047 [DEBUG] [Thread-130869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:53:20.066 [DEBUG] [Thread-130869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:53:20.066 [INFO] [Thread-130869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] client lang: <none>
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] server lang: <none>
2026-02-11T14:53:20.069 [DEBUG] [Thread-130869] [transport.py] [_log()] kex follows: False
2026-02-11T14:53:20.070 [DEBUG] [Thread-130869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:53:20.070 [DEBUG] [Thread-130869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:53:20.070 [DEBUG] [Thread-130869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:53:20.070 [DEBUG] [Thread-130869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:53:20.070 [DEBUG] [Thread-130869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:53:20.070 [DEBUG] [Thread-130869] [transport.py] [_log()] Compression: none
2026-02-11T14:53:20.070 [DEBUG] [Thread-130869] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:53:20.086 [DEBUG] [Thread-130869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:53:20.087 [DEBUG] [Thread-130869] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:53:20.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:53:20.088 [DEBUG] [Thread-130869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:53:20.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:53:20.090 [DEBUG] [Thread-130869] [transport.py] [_log()] userauth is OK
2026-02-11T14:53:20.090 [DEBUG] [Thread-130869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:53:20.090 [DEBUG] [Thread-130869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:53:20.090 [DEBUG] [Thread-130869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:53:20.090 [DEBUG] [Thread-130869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:53:20.114 [INFO] [Thread-130869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:53:20.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:53:20.715 [DEBUG] [Thread-130869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:53:20.715 [DEBUG] [Thread-130869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:53:20.715 [DEBUG] [Thread-130869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:53:20.749 [DEBUG] [Thread-130871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:20.756 [DEBUG] [Thread-130869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:53:20.756 [DEBUG] [Thread-130869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:53:20.758 [DEBUG] [Thread-130869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:53:20.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:53:20.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:53:20.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:53:20.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:53:20.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:53:20.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:53:20.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:53:20.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:53:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:53:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.536600 -999.00  +24.80  34.80     40  +10.50 1 2 2 1 1   888    0 15.65 42.59 ----- 35.3 34.8 313.4 40.4 30.8 -21.1 30.2 -18.9 30.6 -19.1 31.5 -19.2
2026-02-11T14:53:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:53:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:53:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.536600
2026-02-11T14:53:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:53:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:53:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:53:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:53:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:53:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:53:03', tmtdew=17.05, humidity=33.72, cloud=29.3, wind=24.74, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:52:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:53:20.785 [DEBUG] [Thread-130869] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:53:20.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:53:20.880 [DEBUG] [Thread-130873] [transport.py] [_log()] starting thread (client mode): 0xa5742ef0
2026-02-11T14:53:20.880 [DEBUG] [Thread-130873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:53:20.895 [DEBUG] [Thread-130873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:53:20.895 [INFO] [Thread-130873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] client lang: <none>
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] server lang: <none>
2026-02-11T14:53:20.903 [DEBUG] [Thread-130873] [transport.py] [_log()] kex follows: False
2026-02-11T14:53:20.904 [DEBUG] [Thread-130873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:53:20.904 [DEBUG] [Thread-130873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:53:20.904 [DEBUG] [Thread-130873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:53:20.904 [DEBUG] [Thread-130873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:53:20.904 [DEBUG] [Thread-130873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:53:20.904 [DEBUG] [Thread-130873] [transport.py] [_log()] Compression: none
2026-02-11T14:53:20.904 [DEBUG] [Thread-130873] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:53:20.960 [DEBUG] [Thread-130873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:53:20.960 [DEBUG] [Thread-130873] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:53:20.960 [DEBUG] [Thread-130873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:53:20.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:53:20.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:53:21.017 [DEBUG] [Thread-130873] [transport.py] [_log()] userauth is OK
2026-02-11T14:53:21.017 [DEBUG] [Thread-130873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:53:21.017 [DEBUG] [Thread-130873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:53:21.017 [DEBUG] [Thread-130873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:53:21.017 [DEBUG] [Thread-130873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:53:21.036 [INFO] [Thread-130873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:53:21.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:53:21.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:53:21.091 [DEBUG] [Thread-130875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:21.826 [DEBUG] [Thread-130873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:53:21.827 [DEBUG] [Thread-130873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:53:21.874 [DEBUG] [Thread-130873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:53:21.874 [DEBUG] [Thread-130873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:53:21.884 [DEBUG] [Thread-130873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:53:21.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:53:21.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:53:21.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:53:21.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:53:21.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:53:21.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:53:21.920 [DEBUG] [Thread-130873] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:53:28.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:28.597 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:36.144 [DEBUG] [Thread-130876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:51.182 [DEBUG] [Thread-130877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:53:51.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:53:51.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:53:51.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
2026-02-11T14:53:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 53, 38), 18.08, 31.74, 0.0, 24.81, 26.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:53:54.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:53:38
2026-02-11T14:53:54.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:53:54.818 [DEBUG] [Thread-130878] [transport.py] [_log()] starting thread (client mode): 0xa2d558a0
2026-02-11T14:53:54.819 [DEBUG] [Thread-130878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:53:54.840 [DEBUG] [Thread-130878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:53:54.840 [INFO] [Thread-130878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] client lang: <none>
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] server lang: <none>
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] kex follows: False
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] Compression: none
2026-02-11T14:53:54.843 [DEBUG] [Thread-130878] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:53:54.861 [DEBUG] [Thread-130878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:53:54.861 [DEBUG] [Thread-130878] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:53:54.862 [DEBUG] [Thread-130878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:53:54.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:53:54.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:53:54.864 [DEBUG] [Thread-130878] [transport.py] [_log()] userauth is OK
2026-02-11T14:53:54.864 [DEBUG] [Thread-130878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:53:54.864 [DEBUG] [Thread-130878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:53:54.864 [DEBUG] [Thread-130878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:53:54.864 [DEBUG] [Thread-130878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:53:54.883 [INFO] [Thread-130878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:53:54.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:53:55.662 [DEBUG] [Thread-130878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:53:55.663 [DEBUG] [Thread-130878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:53:55.663 [DEBUG] [Thread-130878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:53:55.703 [DEBUG] [Thread-130878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:53:55.704 [DEBUG] [Thread-130878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:53:55.707 [DEBUG] [Thread-130878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:53:55.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:53:55.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:53:55.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:53:55.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:53:55.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:53:55.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:53:55.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:53:55.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:53:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:53:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.536948 -999.00  +24.50  26.83     40  +10.30 1 2 1 1 1   888    0 15.65 42.60 ----- 26.6 26.8 300.0 36.6 30.8 -21.3 30.2 -20.6 30.5 -20.2 31.4 -20.6
2026-02-11T14:53:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:53:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:53:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.536948
2026-02-11T14:53:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:53:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:53:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:53:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:53:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:53:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:53:38', tmtdew=18.08, humidity=31.74, cloud=0.0, wind=24.81, temperature=26.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:53:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:53:55.736 [DEBUG] [Thread-130878] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:53:55.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:53:55.832 [DEBUG] [Thread-130881] [transport.py] [_log()] starting thread (client mode): 0xa2d57a60
2026-02-11T14:53:55.832 [DEBUG] [Thread-130881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:53:55.846 [DEBUG] [Thread-130881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:53:55.846 [INFO] [Thread-130881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:53:55.854 [DEBUG] [Thread-130881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] client lang: <none>
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] server lang: <none>
2026-02-11T14:53:55.855 [DEBUG] [Thread-130881] [transport.py] [_log()] kex follows: False
2026-02-11T14:53:55.856 [DEBUG] [Thread-130881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:53:55.856 [DEBUG] [Thread-130881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:53:55.856 [DEBUG] [Thread-130881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:53:55.856 [DEBUG] [Thread-130881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:53:55.856 [DEBUG] [Thread-130881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:53:55.856 [DEBUG] [Thread-130881] [transport.py] [_log()] Compression: none
2026-02-11T14:53:55.856 [DEBUG] [Thread-130881] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:53:55.913 [DEBUG] [Thread-130881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:53:55.913 [DEBUG] [Thread-130881] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:53:55.914 [DEBUG] [Thread-130881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:53:55.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:53:55.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:53:55.968 [DEBUG] [Thread-130881] [transport.py] [_log()] userauth is OK
2026-02-11T14:53:55.969 [DEBUG] [Thread-130881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:53:55.969 [DEBUG] [Thread-130881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:53:55.969 [DEBUG] [Thread-130881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:53:55.969 [DEBUG] [Thread-130881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:53:55.989 [INFO] [Thread-130881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:53:55.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:53:55.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:53:56.819 [DEBUG] [Thread-130881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:53:56.819 [DEBUG] [Thread-130881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:53:56.866 [DEBUG] [Thread-130881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:53:56.866 [DEBUG] [Thread-130881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:53:56.876 [DEBUG] [Thread-130881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:53:56.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:53:56.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:53:56.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
2026-02-11T14:53:56.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:53:56.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:53:56.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:53:56.912 [DEBUG] [Thread-130881] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:54:06.218 [DEBUG] [Thread-130883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:54:20.781 [DEBUG] [Thread-130884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:54:21.272 [DEBUG] [Thread-130885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:54:26.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:54:26.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:54:26.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
2026-02-11T14:54:28.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:54:28.739 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:54:28.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 54, 15), 17.13, 33.49, 0.0, 24.19, 25.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:54:28.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:54:15
2026-02-11T14:54:29.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:54:29.281 [DEBUG] [Thread-130886] [transport.py] [_log()] starting thread (client mode): 0xa5758040
2026-02-11T14:54:29.281 [DEBUG] [Thread-130886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:54:29.302 [DEBUG] [Thread-130886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:54:29.302 [INFO] [Thread-130886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:54:29.305 [DEBUG] [Thread-130886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] client lang: <none>
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] server lang: <none>
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] kex follows: False
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] Compression: none
2026-02-11T14:54:29.306 [DEBUG] [Thread-130886] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:54:29.322 [DEBUG] [Thread-130886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:54:29.323 [DEBUG] [Thread-130886] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:54:29.323 [DEBUG] [Thread-130886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:54:29.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:54:29.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:54:29.325 [DEBUG] [Thread-130886] [transport.py] [_log()] userauth is OK
2026-02-11T14:54:29.326 [DEBUG] [Thread-130886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:54:29.326 [DEBUG] [Thread-130886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:54:29.326 [DEBUG] [Thread-130886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:54:29.326 [DEBUG] [Thread-130886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:54:29.347 [INFO] [Thread-130886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:54:29.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:54:30.021 [DEBUG] [Thread-130886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:54:30.021 [DEBUG] [Thread-130886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:54:30.022 [DEBUG] [Thread-130886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:54:30.062 [DEBUG] [Thread-130886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:54:30.062 [DEBUG] [Thread-130886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:54:30.064 [DEBUG] [Thread-130886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:54:30.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:54:30.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:54:30.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:54:30.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:54:30.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:54:30.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:54:30.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:54:30.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:54:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:54:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.537296 -999.00  +24.00  22.93     42  +10.40 1 2 1 1 1   888    0 15.20 42.64 ----- 19.8 22.9 307.0 28.5 30.7 -21.9 30.2 -19.9 30.6 -19.8 31.4 -19.7
2026-02-11T14:54:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:54:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:54:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.537296
2026-02-11T14:54:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:54:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:54:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:54:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:54:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:54:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:54:15', tmtdew=17.13, humidity=33.49, cloud=0.0, wind=24.19, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:53:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:54:30.083 [DEBUG] [Thread-130886] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:54:30.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:54:30.180 [DEBUG] [Thread-130889] [transport.py] [_log()] starting thread (client mode): 0xa57d69e0
2026-02-11T14:54:30.180 [DEBUG] [Thread-130889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:54:30.198 [DEBUG] [Thread-130889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:54:30.198 [INFO] [Thread-130889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:54:30.205 [DEBUG] [Thread-130889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] client lang: <none>
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] server lang: <none>
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] kex follows: False
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:54:30.206 [DEBUG] [Thread-130889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:54:30.207 [DEBUG] [Thread-130889] [transport.py] [_log()] Compression: none
2026-02-11T14:54:30.207 [DEBUG] [Thread-130889] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:54:30.267 [DEBUG] [Thread-130889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:54:30.267 [DEBUG] [Thread-130889] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:54:30.268 [DEBUG] [Thread-130889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:54:30.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:54:30.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:54:30.324 [DEBUG] [Thread-130889] [transport.py] [_log()] userauth is OK
2026-02-11T14:54:30.325 [DEBUG] [Thread-130889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:54:30.325 [DEBUG] [Thread-130889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:54:30.325 [DEBUG] [Thread-130889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:54:30.325 [DEBUG] [Thread-130889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:54:30.347 [INFO] [Thread-130889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:54:30.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:54:30.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:54:31.178 [DEBUG] [Thread-130889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:54:31.179 [DEBUG] [Thread-130889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:54:31.227 [DEBUG] [Thread-130889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:54:31.227 [DEBUG] [Thread-130889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:54:31.237 [DEBUG] [Thread-130889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:54:31.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:54:31.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:54:31.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:54:31.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:54:31.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:54:31.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:54:31.272 [DEBUG] [Thread-130889] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:54:36.306 [DEBUG] [Thread-130891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:54:51.354 [DEBUG] [Thread-130892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:55:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:55:01.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:55:01.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:55:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 54, 51), 16.99, 34.04, 0.0, 18.49, 25.12, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:55:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:54:51
2026-02-11T14:55:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:55:03.664 [DEBUG] [Thread-130893] [transport.py] [_log()] starting thread (client mode): 0xa57431f0
2026-02-11T14:55:03.664 [DEBUG] [Thread-130893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:55:03.681 [DEBUG] [Thread-130893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:55:03.681 [INFO] [Thread-130893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:55:03.682 [DEBUG] [Thread-130893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] client lang: <none>
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] server lang: <none>
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] kex follows: False
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] Compression: none
2026-02-11T14:55:03.683 [DEBUG] [Thread-130893] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:55:03.691 [DEBUG] [Thread-130893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:55:03.691 [DEBUG] [Thread-130893] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:55:03.692 [DEBUG] [Thread-130893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:55:03.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:55:03.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:55:03.693 [DEBUG] [Thread-130893] [transport.py] [_log()] userauth is OK
2026-02-11T14:55:03.693 [DEBUG] [Thread-130893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:55:03.693 [DEBUG] [Thread-130893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:55:03.693 [DEBUG] [Thread-130893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:55:03.693 [DEBUG] [Thread-130893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:55:03.708 [INFO] [Thread-130893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:55:03.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:55:04.391 [DEBUG] [Thread-130893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:55:04.391 [DEBUG] [Thread-130893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:55:04.392 [DEBUG] [Thread-130893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:55:04.433 [DEBUG] [Thread-130893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:55:04.433 [DEBUG] [Thread-130893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:55:04.436 [DEBUG] [Thread-130893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:55:04.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:55:04.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:55:04.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:55:04.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:55:04.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:55:04.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:55:04.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:55:04.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:55:04.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:55:04.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.537990 -999.00  +24.30  21.87     41  +10.30 1 2 1 1 1   888    0 15.56 52.46 ----- 22.4 21.9 293.4 25.4 30.9 -21.2 30.2 -20.4 30.6 -18.6 31.5 -20.9
2026-02-11T14:55:04.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:55:04.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:55:04.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.537990
2026-02-11T14:55:04.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:55:04.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:55:04.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:55:04.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:55:04.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:55:04.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:54:51', tmtdew=16.99, humidity=34.04, cloud=0.0, wind=18.49, temperature=25.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:54:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:55:04.467 [DEBUG] [Thread-130893] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:55:04.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:55:04.565 [DEBUG] [Thread-130896] [transport.py] [_log()] starting thread (client mode): 0xa2db6e30
2026-02-11T14:55:04.565 [DEBUG] [Thread-130896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:55:04.587 [DEBUG] [Thread-130896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:55:04.587 [INFO] [Thread-130896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:55:04.595 [DEBUG] [Thread-130896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:55:04.595 [DEBUG] [Thread-130896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:55:04.595 [DEBUG] [Thread-130896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:55:04.595 [DEBUG] [Thread-130896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] client lang: <none>
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] server lang: <none>
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] kex follows: False
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] Compression: none
2026-02-11T14:55:04.596 [DEBUG] [Thread-130896] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:55:04.659 [DEBUG] [Thread-130896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:55:04.660 [DEBUG] [Thread-130896] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:55:04.661 [DEBUG] [Thread-130896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:55:04.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:55:04.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:55:04.721 [DEBUG] [Thread-130896] [transport.py] [_log()] userauth is OK
2026-02-11T14:55:04.722 [DEBUG] [Thread-130896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:55:04.722 [DEBUG] [Thread-130896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:55:04.722 [DEBUG] [Thread-130896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:55:04.722 [DEBUG] [Thread-130896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:55:04.741 [INFO] [Thread-130896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:55:04.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:55:04.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:55:05.585 [DEBUG] [Thread-130896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:55:05.585 [DEBUG] [Thread-130896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:55:05.633 [DEBUG] [Thread-130896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:55:05.634 [DEBUG] [Thread-130896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:55:05.643 [DEBUG] [Thread-130896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:55:05.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:55:05.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:55:05.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
2026-02-11T14:55:05.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:55:05.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:55:05.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:55:05.680 [DEBUG] [Thread-130896] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:55:06.391 [DEBUG] [Thread-130898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:55:20.814 [DEBUG] [Thread-130899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:55:21.443 [DEBUG] [Thread-130900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:55:28.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:55:28.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:55:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:55:35.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:55:35.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:55:36.479 [DEBUG] [Thread-130901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:55:37.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 55, 26), 16.78, 34.47, 0.0, 18.0, 24.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:55:37.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:55:26
2026-02-11T14:55:38.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:55:38.348 [DEBUG] [Thread-130902] [transport.py] [_log()] starting thread (client mode): 0xa5759030
2026-02-11T14:55:38.348 [DEBUG] [Thread-130902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:55:38.368 [DEBUG] [Thread-130902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:55:38.368 [INFO] [Thread-130902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:55:38.372 [DEBUG] [Thread-130902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:55:38.372 [DEBUG] [Thread-130902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:55:38.372 [DEBUG] [Thread-130902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:55:38.372 [DEBUG] [Thread-130902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:38.372 [DEBUG] [Thread-130902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:38.372 [DEBUG] [Thread-130902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:38.372 [DEBUG] [Thread-130902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:38.373 [DEBUG] [Thread-130902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:55:38.373 [DEBUG] [Thread-130902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:55:38.373 [DEBUG] [Thread-130902] [transport.py] [_log()] client lang: <none>
2026-02-11T14:55:38.373 [DEBUG] [Thread-130902] [transport.py] [_log()] server lang: <none>
2026-02-11T14:55:38.373 [DEBUG] [Thread-130902] [transport.py] [_log()] kex follows: False
2026-02-11T14:55:38.373 [DEBUG] [Thread-130902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:55:38.373 [DEBUG] [Thread-130902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:55:38.374 [DEBUG] [Thread-130902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:55:38.374 [DEBUG] [Thread-130902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:55:38.374 [DEBUG] [Thread-130902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:55:38.374 [DEBUG] [Thread-130902] [transport.py] [_log()] Compression: none
2026-02-11T14:55:38.374 [DEBUG] [Thread-130902] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:55:38.394 [DEBUG] [Thread-130902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:55:38.395 [DEBUG] [Thread-130902] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:55:38.395 [DEBUG] [Thread-130902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:55:38.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:55:38.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:55:38.397 [DEBUG] [Thread-130902] [transport.py] [_log()] userauth is OK
2026-02-11T14:55:38.397 [DEBUG] [Thread-130902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:55:38.397 [DEBUG] [Thread-130902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:55:38.397 [DEBUG] [Thread-130902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:55:38.397 [DEBUG] [Thread-130902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:55:38.419 [INFO] [Thread-130902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:55:38.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:55:39.085 [DEBUG] [Thread-130902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:55:39.085 [DEBUG] [Thread-130902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:55:39.086 [DEBUG] [Thread-130902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:55:39.126 [DEBUG] [Thread-130902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:55:39.126 [DEBUG] [Thread-130902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:55:39.130 [DEBUG] [Thread-130902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:55:39.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:55:39.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:55:39.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:55:39.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:55:39.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:55:39.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:55:39.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:55:39.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:55:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:55:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.538337 -999.00  +24.50  36.27     41  +10.40 1 2 2 1 1   888    0 15.44 49.94 ----- 30.3 36.3 289.2 39.6 30.9 -21.3 30.3 -20.0 30.6 -19.1 31.5 -21.0
2026-02-11T14:55:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:55:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:55:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.538337
2026-02-11T14:55:39.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:55:39.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:55:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:55:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:55:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:55:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:55:26', tmtdew=16.78, humidity=34.47, cloud=0.0, wind=18.0, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:55:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:55:39.157 [DEBUG] [Thread-130902] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:55:39.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:55:39.251 [DEBUG] [Thread-130905] [transport.py] [_log()] starting thread (client mode): 0xa81d49a0
2026-02-11T14:55:39.252 [DEBUG] [Thread-130905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:55:39.266 [DEBUG] [Thread-130905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:55:39.266 [INFO] [Thread-130905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:55:39.273 [DEBUG] [Thread-130905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] client lang: <none>
2026-02-11T14:55:39.274 [DEBUG] [Thread-130905] [transport.py] [_log()] server lang: <none>
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] kex follows: False
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] Compression: none
2026-02-11T14:55:39.275 [DEBUG] [Thread-130905] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:55:39.333 [DEBUG] [Thread-130905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:55:39.333 [DEBUG] [Thread-130905] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:55:39.334 [DEBUG] [Thread-130905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:55:39.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:55:39.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:55:39.389 [DEBUG] [Thread-130905] [transport.py] [_log()] userauth is OK
2026-02-11T14:55:39.390 [DEBUG] [Thread-130905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:55:39.390 [DEBUG] [Thread-130905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:55:39.390 [DEBUG] [Thread-130905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:55:39.390 [DEBUG] [Thread-130905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:55:39.408 [INFO] [Thread-130905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:55:39.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:55:39.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:55:40.288 [DEBUG] [Thread-130905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:55:40.288 [DEBUG] [Thread-130905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:55:40.336 [DEBUG] [Thread-130905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:55:40.336 [DEBUG] [Thread-130905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:55:40.346 [DEBUG] [Thread-130905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:55:40.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:55:40.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:55:40.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:55:40.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:55:40.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:55:40.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:55:40.383 [DEBUG] [Thread-130905] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:55:51.517 [DEBUG] [Thread-130907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:56:06.569 [DEBUG] [Thread-130908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:56:10.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:56:10.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:56:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:56:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 56, 2), 16.8, 34.44, 0.0, 22.5, 25.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:56:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:56:02
2026-02-11T14:56:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:56:13.382 [DEBUG] [Thread-130909] [transport.py] [_log()] starting thread (client mode): 0xa57d5d50
2026-02-11T14:56:13.383 [DEBUG] [Thread-130909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:56:13.404 [DEBUG] [Thread-130909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:56:13.404 [INFO] [Thread-130909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] client lang: <none>
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] server lang: <none>
2026-02-11T14:56:13.407 [DEBUG] [Thread-130909] [transport.py] [_log()] kex follows: False
2026-02-11T14:56:13.408 [DEBUG] [Thread-130909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:56:13.408 [DEBUG] [Thread-130909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:56:13.408 [DEBUG] [Thread-130909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:56:13.408 [DEBUG] [Thread-130909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:56:13.408 [DEBUG] [Thread-130909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:56:13.408 [DEBUG] [Thread-130909] [transport.py] [_log()] Compression: none
2026-02-11T14:56:13.408 [DEBUG] [Thread-130909] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:56:13.425 [DEBUG] [Thread-130909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:56:13.425 [DEBUG] [Thread-130909] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:56:13.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:56:13.427 [DEBUG] [Thread-130909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:56:13.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:56:13.429 [DEBUG] [Thread-130909] [transport.py] [_log()] userauth is OK
2026-02-11T14:56:13.429 [DEBUG] [Thread-130909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:56:13.429 [DEBUG] [Thread-130909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:56:13.429 [DEBUG] [Thread-130909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:56:13.429 [DEBUG] [Thread-130909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:56:13.448 [INFO] [Thread-130909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:56:13.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:56:14.071 [DEBUG] [Thread-130909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:56:14.072 [DEBUG] [Thread-130909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:56:14.072 [DEBUG] [Thread-130909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:56:14.112 [DEBUG] [Thread-130909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:56:14.112 [DEBUG] [Thread-130909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:56:14.115 [DEBUG] [Thread-130909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:56:14.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:56:14.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:56:14.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:56:14.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:56:14.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:56:14.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:56:14.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:56:14.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:56:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:56:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.538684 -999.00  +24.60  32.16     40  +10.30 1 1 2 1 1   888    0 15.63 50.61 ----- 27.8 32.2 279.8 45.8 30.8 -22.5 30.2 -22.5 30.0 -24.4 31.4 -21.2
2026-02-11T14:56:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:56:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:56:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.538684
2026-02-11T14:56:14.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:56:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:56:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:56:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:56:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T14:56:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:56:02', tmtdew=16.8, humidity=34.44, cloud=0.0, wind=22.5, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:55:42.298', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:56:14.141 [DEBUG] [Thread-130909] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:56:14.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:56:14.239 [DEBUG] [Thread-130912] [transport.py] [_log()] starting thread (client mode): 0xa57c0490
2026-02-11T14:56:14.239 [DEBUG] [Thread-130912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:56:14.254 [DEBUG] [Thread-130912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:56:14.254 [INFO] [Thread-130912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:56:14.261 [DEBUG] [Thread-130912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] client lang: <none>
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] server lang: <none>
2026-02-11T14:56:14.262 [DEBUG] [Thread-130912] [transport.py] [_log()] kex follows: False
2026-02-11T14:56:14.263 [DEBUG] [Thread-130912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:56:14.263 [DEBUG] [Thread-130912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:56:14.263 [DEBUG] [Thread-130912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:56:14.263 [DEBUG] [Thread-130912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:56:14.263 [DEBUG] [Thread-130912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:56:14.263 [DEBUG] [Thread-130912] [transport.py] [_log()] Compression: none
2026-02-11T14:56:14.263 [DEBUG] [Thread-130912] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:56:14.321 [DEBUG] [Thread-130912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:56:14.322 [DEBUG] [Thread-130912] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:56:14.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:56:14.323 [DEBUG] [Thread-130912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:56:14.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:56:14.382 [DEBUG] [Thread-130912] [transport.py] [_log()] userauth is OK
2026-02-11T14:56:14.382 [DEBUG] [Thread-130912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:56:14.382 [DEBUG] [Thread-130912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:56:14.382 [DEBUG] [Thread-130912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:56:14.382 [DEBUG] [Thread-130912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:56:14.401 [INFO] [Thread-130912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:56:14.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:56:14.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:56:15.218 [DEBUG] [Thread-130912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:56:15.218 [DEBUG] [Thread-130912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:56:15.271 [DEBUG] [Thread-130912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:56:15.271 [DEBUG] [Thread-130912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:56:15.280 [DEBUG] [Thread-130912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:56:15.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:56:15.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:56:15.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:56:15.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:56:15.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:56:15.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:56:15.317 [DEBUG] [Thread-130912] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:56:20.848 [DEBUG] [Thread-130914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:56:21.608 [DEBUG] [Thread-130915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:56:29.021 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:56:29.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:56:36.667 [DEBUG] [Thread-130916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:56:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:56:45.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:56:45.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:56:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 56, 37), 18.27, 31.41, 0.0, 25.23, 26.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:56:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:56:37
2026-02-11T14:56:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:56:47.692 [DEBUG] [Thread-130917] [transport.py] [_log()] starting thread (client mode): 0xa57d5a20
2026-02-11T14:56:47.692 [DEBUG] [Thread-130917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:56:47.712 [DEBUG] [Thread-130917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:56:47.712 [INFO] [Thread-130917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] client lang: <none>
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] server lang: <none>
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] kex follows: False
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] Compression: none
2026-02-11T14:56:47.715 [DEBUG] [Thread-130917] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:56:47.732 [DEBUG] [Thread-130917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:56:47.733 [DEBUG] [Thread-130917] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:56:47.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:56:47.734 [DEBUG] [Thread-130917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:56:47.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:56:47.736 [DEBUG] [Thread-130917] [transport.py] [_log()] userauth is OK
2026-02-11T14:56:47.736 [DEBUG] [Thread-130917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:56:47.737 [DEBUG] [Thread-130917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:56:47.737 [DEBUG] [Thread-130917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:56:47.737 [DEBUG] [Thread-130917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:56:47.773 [INFO] [Thread-130917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:56:47.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:56:48.596 [DEBUG] [Thread-130917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:56:48.597 [DEBUG] [Thread-130917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:56:48.597 [DEBUG] [Thread-130917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:56:48.637 [DEBUG] [Thread-130917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:56:48.637 [DEBUG] [Thread-130917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:56:48.641 [DEBUG] [Thread-130917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:56:48.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:56:48.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:56:48.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:56:48.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:56:48.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:56:48.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:56:48.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:56:48.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:56:48.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:56:48.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.539031 -999.00  +24.50  35.05     40  +10.20 1 2 2 1 1   888    0 15.93 50.23 ----- 33.3 35.0 271.2 37.8 30.4 -22.8 30.0 -21.6 29.8 -23.4 31.1 -21.1
2026-02-11T14:56:48.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:56:48.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:56:48.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.539031
2026-02-11T14:56:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:56:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:56:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:56:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:56:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:56:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:56:37', tmtdew=18.27, humidity=31.41, cloud=0.0, wind=25.23, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:56:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:56:48.667 [DEBUG] [Thread-130917] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:56:48.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:56:48.764 [DEBUG] [Thread-130920] [transport.py] [_log()] starting thread (client mode): 0xa57729b0
2026-02-11T14:56:48.764 [DEBUG] [Thread-130920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:56:48.778 [DEBUG] [Thread-130920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:56:48.778 [INFO] [Thread-130920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:56:48.786 [DEBUG] [Thread-130920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:56:48.786 [DEBUG] [Thread-130920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:56:48.787 [DEBUG] [Thread-130920] [transport.py] [_log()] client lang: <none>
2026-02-11T14:56:48.788 [DEBUG] [Thread-130920] [transport.py] [_log()] server lang: <none>
2026-02-11T14:56:48.788 [DEBUG] [Thread-130920] [transport.py] [_log()] kex follows: False
2026-02-11T14:56:48.788 [DEBUG] [Thread-130920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:56:48.788 [DEBUG] [Thread-130920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:56:48.788 [DEBUG] [Thread-130920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:56:48.788 [DEBUG] [Thread-130920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:56:48.788 [DEBUG] [Thread-130920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:56:48.789 [DEBUG] [Thread-130920] [transport.py] [_log()] Compression: none
2026-02-11T14:56:48.789 [DEBUG] [Thread-130920] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:56:48.845 [DEBUG] [Thread-130920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:56:48.846 [DEBUG] [Thread-130920] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:56:48.846 [DEBUG] [Thread-130920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:56:48.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:56:48.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:56:48.904 [DEBUG] [Thread-130920] [transport.py] [_log()] userauth is OK
2026-02-11T14:56:48.905 [DEBUG] [Thread-130920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:56:48.905 [DEBUG] [Thread-130920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:56:48.905 [DEBUG] [Thread-130920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:56:48.905 [DEBUG] [Thread-130920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:56:48.924 [INFO] [Thread-130920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:56:48.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:56:48.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:56:49.746 [DEBUG] [Thread-130920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:56:49.747 [DEBUG] [Thread-130920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:56:49.794 [DEBUG] [Thread-130920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:56:49.795 [DEBUG] [Thread-130920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:56:49.804 [DEBUG] [Thread-130920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:56:49.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:56:49.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:56:49.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:56:49.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:56:49.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:56:49.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:56:49.841 [DEBUG] [Thread-130920] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:56:51.702 [DEBUG] [Thread-130922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:06.760 [DEBUG] [Thread-130923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:19.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:57:19.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:57:19.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
2026-02-11T14:57:20.883 [DEBUG] [Thread-130924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:21.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 57, 12), 17.36, 33.38, 0.0, 29.98, 25.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:57:21.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:57:12
2026-02-11T14:57:21.796 [DEBUG] [Thread-130925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:22.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:57:22.276 [DEBUG] [Thread-130926] [transport.py] [_log()] starting thread (client mode): 0xa5771a80
2026-02-11T14:57:22.277 [DEBUG] [Thread-130926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:57:22.297 [DEBUG] [Thread-130926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:57:22.297 [INFO] [Thread-130926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] client lang: <none>
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] server lang: <none>
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] kex follows: False
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] Compression: none
2026-02-11T14:57:22.300 [DEBUG] [Thread-130926] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:57:22.316 [DEBUG] [Thread-130926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:57:22.316 [DEBUG] [Thread-130926] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:57:22.316 [DEBUG] [Thread-130926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:57:22.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:57:22.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:57:22.317 [DEBUG] [Thread-130926] [transport.py] [_log()] userauth is OK
2026-02-11T14:57:22.317 [DEBUG] [Thread-130926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:57:22.317 [DEBUG] [Thread-130926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:57:22.317 [DEBUG] [Thread-130926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:57:22.317 [DEBUG] [Thread-130926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:57:22.332 [INFO] [Thread-130926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:57:22.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:57:22.934 [DEBUG] [Thread-130926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:57:22.934 [DEBUG] [Thread-130926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:57:22.934 [DEBUG] [Thread-130926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:57:22.976 [DEBUG] [Thread-130926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:57:22.976 [DEBUG] [Thread-130926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:57:22.978 [DEBUG] [Thread-130926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:57:22.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:57:22.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:57:22.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:57:22.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:57:22.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:57:23.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:57:23.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:57:23.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:57:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:57:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.539378 -999.00  +24.30  30.12     41  +10.30 1 2 2 1 1   888    0 15.53 53.08 ----- 29.2 30.1 272.6 38.6 30.2 -23.1 29.9 -20.7 29.7 -19.5 30.9 -22.2
2026-02-11T14:57:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:57:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:57:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.539378
2026-02-11T14:57:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:57:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:57:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:57:23.003 [DEBUG] [Thread-130926] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:57:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:57:23.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:57:23.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:57:12', tmtdew=17.36, humidity=33.38, cloud=0.0, wind=29.98, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:56:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:57:23.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:57:23.111 [DEBUG] [Thread-130929] [transport.py] [_log()] starting thread (client mode): 0xa2d57760
2026-02-11T14:57:23.111 [DEBUG] [Thread-130929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:57:23.125 [DEBUG] [Thread-130929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:57:23.125 [INFO] [Thread-130929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] client lang: <none>
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] server lang: <none>
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] kex follows: False
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] Compression: none
2026-02-11T14:57:23.133 [DEBUG] [Thread-130929] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:57:23.192 [DEBUG] [Thread-130929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:57:23.192 [DEBUG] [Thread-130929] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:57:23.193 [DEBUG] [Thread-130929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:57:23.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:57:23.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:57:23.248 [DEBUG] [Thread-130929] [transport.py] [_log()] userauth is OK
2026-02-11T14:57:23.249 [DEBUG] [Thread-130929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:57:23.249 [DEBUG] [Thread-130929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:57:23.249 [DEBUG] [Thread-130929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:57:23.249 [DEBUG] [Thread-130929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:57:23.267 [INFO] [Thread-130929] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:57:23.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:57:23.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:57:24.111 [DEBUG] [Thread-130929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:57:24.112 [DEBUG] [Thread-130929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:57:24.160 [DEBUG] [Thread-130929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:57:24.160 [DEBUG] [Thread-130929] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:57:24.170 [DEBUG] [Thread-130929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:57:24.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:57: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')
2026-02-11T14:57:24.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:57:24.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:57:24.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:57:24.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:57:24.205 [DEBUG] [Thread-130929] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:57:29.163 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:29.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:36.833 [DEBUG] [Thread-130931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:51.886 [DEBUG] [Thread-130932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:57:54.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:57:54.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:57:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:57:56.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 57, 12), 17.36, 33.38, 0.0, 29.98, 25.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:57:56.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:57:12
2026-02-11T14:57:56.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:57:56.854 [DEBUG] [Thread-130933] [transport.py] [_log()] starting thread (client mode): 0xa57c0df0
2026-02-11T14:57:56.854 [DEBUG] [Thread-130933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:57:56.875 [DEBUG] [Thread-130933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:57:56.875 [INFO] [Thread-130933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:57:56.878 [DEBUG] [Thread-130933] [transport.py] [_log()] client lang: <none>
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] server lang: <none>
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] kex follows: False
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] Compression: none
2026-02-11T14:57:56.879 [DEBUG] [Thread-130933] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:57:56.896 [DEBUG] [Thread-130933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:57:56.896 [DEBUG] [Thread-130933] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:57:56.897 [DEBUG] [Thread-130933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:57:56.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:57:56.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:57:56.899 [DEBUG] [Thread-130933] [transport.py] [_log()] userauth is OK
2026-02-11T14:57:56.899 [DEBUG] [Thread-130933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:57:56.899 [DEBUG] [Thread-130933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:57:56.899 [DEBUG] [Thread-130933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:57:56.899 [DEBUG] [Thread-130933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:57:56.925 [INFO] [Thread-130933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:57:56.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:57:57.566 [DEBUG] [Thread-130933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:57:57.567 [DEBUG] [Thread-130933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:57:57.567 [DEBUG] [Thread-130933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:57:57.607 [DEBUG] [Thread-130933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:57:57.607 [DEBUG] [Thread-130933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:57:57.610 [DEBUG] [Thread-130933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:57:57.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:57:57.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:57:57.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:57:57.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:57:57.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:57:57.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:57:57.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:57:57.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:57:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:57:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.539726 -999.00  +24.40  27.91     40  +10.20 1 2 1 1 1   888    0 15.37 47.17 ----- 24.3 27.9 287.4 37.9 30.3 -22.3 29.9 -20.6 29.7 -23.2 30.9 -21.1
2026-02-11T14:57:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:57:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:57:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.539726
2026-02-11T14:57:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:57:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:57:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:57:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:57:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:57:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:57:12', tmtdew=17.36, humidity=33.38, cloud=0.0, wind=29.98, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:57:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:57:57.638 [DEBUG] [Thread-130933] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:57:57.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:57:57.733 [DEBUG] [Thread-130936] [transport.py] [_log()] starting thread (client mode): 0xa2d02200
2026-02-11T14:57:57.733 [DEBUG] [Thread-130936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:57:57.747 [DEBUG] [Thread-130936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:57:57.747 [INFO] [Thread-130936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:57:57.755 [DEBUG] [Thread-130936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:57:57.755 [DEBUG] [Thread-130936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:57:57.755 [DEBUG] [Thread-130936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] client lang: <none>
2026-02-11T14:57:57.756 [DEBUG] [Thread-130936] [transport.py] [_log()] server lang: <none>
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] kex follows: False
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] Compression: none
2026-02-11T14:57:57.757 [DEBUG] [Thread-130936] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:57:57.813 [DEBUG] [Thread-130936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:57:57.814 [DEBUG] [Thread-130936] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:57:57.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:57:57.816 [DEBUG] [Thread-130936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:57:57.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:57:57.874 [DEBUG] [Thread-130936] [transport.py] [_log()] userauth is OK
2026-02-11T14:57:57.874 [DEBUG] [Thread-130936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:57:57.875 [DEBUG] [Thread-130936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:57:57.875 [DEBUG] [Thread-130936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:57:57.875 [DEBUG] [Thread-130936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:57:57.894 [INFO] [Thread-130936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:57:57.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:57:57.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:57:58.701 [DEBUG] [Thread-130936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:57:58.701 [DEBUG] [Thread-130936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:57:58.749 [DEBUG] [Thread-130936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:57:58.749 [DEBUG] [Thread-130936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:57:58.758 [DEBUG] [Thread-130936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:57:58.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:57:58.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:57:58.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:57:58.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:57:58.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:57:58.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:57:58.794 [DEBUG] [Thread-130936] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:58:06.924 [DEBUG] [Thread-130938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:58:20.916 [DEBUG] [Thread-130939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:58:21.974 [DEBUG] [Thread-130940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:58:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:58:28.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:58:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:58:29.305 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:58:29.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:58:30.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 57, 48), 17.08, 34.11, 0.0, 27.1, 24.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:58:30.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:57:48
2026-02-11T14:58:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:58:31.494 [DEBUG] [Thread-130941] [transport.py] [_log()] starting thread (client mode): 0xa57c0d60
2026-02-11T14:58:31.494 [DEBUG] [Thread-130941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:58:31.514 [DEBUG] [Thread-130941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:58:31.514 [INFO] [Thread-130941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:58:31.517 [DEBUG] [Thread-130941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:58:31.517 [DEBUG] [Thread-130941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:58:31.517 [DEBUG] [Thread-130941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:58:31.517 [DEBUG] [Thread-130941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] client lang: <none>
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] server lang: <none>
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] kex follows: False
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] Compression: none
2026-02-11T14:58:31.518 [DEBUG] [Thread-130941] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:58:31.536 [DEBUG] [Thread-130941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:58:31.536 [DEBUG] [Thread-130941] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:58:31.537 [DEBUG] [Thread-130941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:58:31.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:58:31.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:58:31.540 [DEBUG] [Thread-130941] [transport.py] [_log()] userauth is OK
2026-02-11T14:58:31.540 [DEBUG] [Thread-130941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:58:31.540 [DEBUG] [Thread-130941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:58:31.540 [DEBUG] [Thread-130941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:58:31.540 [DEBUG] [Thread-130941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:58:31.565 [INFO] [Thread-130941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:58:31.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:58:32.174 [DEBUG] [Thread-130941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:58:32.174 [DEBUG] [Thread-130941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:58:32.174 [DEBUG] [Thread-130941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:58:32.215 [DEBUG] [Thread-130941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:58:32.215 [DEBUG] [Thread-130941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:58:32.218 [DEBUG] [Thread-130941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:58:32.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:58:32.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:58:32.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:58:32.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:58:32.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:58:32.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:58:32.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:58:32.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:58:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:58:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.540073 -999.00  +24.10  19.42     41  +10.10 1 2 1 1 1   888    0 15.13 43.26 ----- 21.4 19.4 275.6 26.0 30.2 -24.1 29.9 -20.8 29.9 -21.7 30.8 -21.4
2026-02-11T14:58:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:58:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:58:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.540073
2026-02-11T14:58:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:58:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:58:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:58:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:58:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:58:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:57:48', tmtdew=17.08, humidity=34.11, cloud=0.0, wind=27.1, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:57:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:58:32.240 [DEBUG] [Thread-130941] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:58:32.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:58:32.337 [DEBUG] [Thread-130944] [transport.py] [_log()] starting thread (client mode): 0xa57c1510
2026-02-11T14:58:32.337 [DEBUG] [Thread-130944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:58:32.352 [DEBUG] [Thread-130944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:58:32.352 [INFO] [Thread-130944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] client lang: <none>
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] server lang: <none>
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] kex follows: False
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:58:32.360 [DEBUG] [Thread-130944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:58:32.361 [DEBUG] [Thread-130944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:58:32.361 [DEBUG] [Thread-130944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:58:32.361 [DEBUG] [Thread-130944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:58:32.361 [DEBUG] [Thread-130944] [transport.py] [_log()] Compression: none
2026-02-11T14:58:32.361 [DEBUG] [Thread-130944] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:58:32.421 [DEBUG] [Thread-130944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:58:32.422 [DEBUG] [Thread-130944] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:58:32.422 [DEBUG] [Thread-130944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:58:32.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:58:32.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:58:32.480 [DEBUG] [Thread-130944] [transport.py] [_log()] userauth is OK
2026-02-11T14:58:32.481 [DEBUG] [Thread-130944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:58:32.481 [DEBUG] [Thread-130944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:58:32.481 [DEBUG] [Thread-130944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:58:32.481 [DEBUG] [Thread-130944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:58:32.503 [INFO] [Thread-130944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:58:32.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:58:32.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:58:33.332 [DEBUG] [Thread-130944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:58:33.333 [DEBUG] [Thread-130944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:58:33.381 [DEBUG] [Thread-130944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:58:33.381 [DEBUG] [Thread-130944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:58:33.391 [DEBUG] [Thread-130944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:58:33.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:58:33.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:58:33.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:58:33.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:58:33.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:58:33.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:58:33.428 [DEBUG] [Thread-130944] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:58:37.011 [DEBUG] [Thread-130946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:58:52.066 [DEBUG] [Thread-130947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:59:03.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:59:03.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:59:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:59:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 58, 24), 17.16, 33.93, 0.0, 26.13, 24.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:59:05.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:58:24
2026-02-11T14:59:06.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:59:06.363 [DEBUG] [Thread-130948] [transport.py] [_log()] starting thread (client mode): 0xa57c0d30
2026-02-11T14:59:06.363 [DEBUG] [Thread-130948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:59:06.384 [DEBUG] [Thread-130948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:59:06.384 [INFO] [Thread-130948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:59:06.387 [DEBUG] [Thread-130948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:59:06.387 [DEBUG] [Thread-130948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:59:06.387 [DEBUG] [Thread-130948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] client lang: <none>
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] server lang: <none>
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] kex follows: False
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:59:06.388 [DEBUG] [Thread-130948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:59:06.389 [DEBUG] [Thread-130948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:59:06.389 [DEBUG] [Thread-130948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:59:06.389 [DEBUG] [Thread-130948] [transport.py] [_log()] Compression: none
2026-02-11T14:59:06.389 [DEBUG] [Thread-130948] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:59:06.406 [DEBUG] [Thread-130948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:59:06.406 [DEBUG] [Thread-130948] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:59:06.407 [DEBUG] [Thread-130948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:59:06.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:59:06.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:59:06.408 [DEBUG] [Thread-130948] [transport.py] [_log()] userauth is OK
2026-02-11T14:59:06.409 [DEBUG] [Thread-130948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:59:06.409 [DEBUG] [Thread-130948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:59:06.409 [DEBUG] [Thread-130948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:59:06.409 [DEBUG] [Thread-130948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:59:06.434 [INFO] [Thread-130948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:59:06.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:59:07.061 [DEBUG] [Thread-130948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:59:07.061 [DEBUG] [Thread-130948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:59:07.062 [DEBUG] [Thread-130948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:59:07.102 [DEBUG] [Thread-130948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:59:07.102 [DEBUG] [Thread-130948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:59:07.104 [DEBUG] [Thread-130950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:59:07.105 [DEBUG] [Thread-130948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:59:07.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:59:07.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:59:07.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:59:07.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:59:07.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:59:07.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:59:07.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:59:07.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:59:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:59:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.540420 -999.00  +24.20  11.72     41  +10.20 1 2 1 1 1   888    0 15.51 41.82 ----- 14.5 11.7 286.6 27.7 30.2 -23.2 30.0 -20.3 30.1 -20.0 30.9 -19.8
2026-02-11T14:59:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:59:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:59:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.540420
2026-02-11T14:59:07.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:59:07.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:59:07.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:59:07.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:59:07.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:59:07.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:58:24', tmtdew=17.16, humidity=33.93, cloud=0.0, wind=26.13, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:58:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:59:07.133 [DEBUG] [Thread-130948] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:59:07.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:59:07.236 [DEBUG] [Thread-130952] [transport.py] [_log()] starting thread (client mode): 0xa2db6170
2026-02-11T14:59:07.236 [DEBUG] [Thread-130952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:59:07.255 [DEBUG] [Thread-130952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:59:07.256 [INFO] [Thread-130952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:59:07.264 [DEBUG] [Thread-130952] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] client lang: <none>
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] server lang: <none>
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] kex follows: False
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:59:07.265 [DEBUG] [Thread-130952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:59:07.266 [DEBUG] [Thread-130952] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:59:07.266 [DEBUG] [Thread-130952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:59:07.266 [DEBUG] [Thread-130952] [transport.py] [_log()] Compression: none
2026-02-11T14:59:07.266 [DEBUG] [Thread-130952] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:59:07.327 [DEBUG] [Thread-130952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:59:07.328 [DEBUG] [Thread-130952] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:59:07.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:59:07.329 [DEBUG] [Thread-130952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:59:07.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:59:07.392 [DEBUG] [Thread-130952] [transport.py] [_log()] userauth is OK
2026-02-11T14:59:07.392 [DEBUG] [Thread-130952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:59:07.393 [DEBUG] [Thread-130952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:59:07.393 [DEBUG] [Thread-130952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:59:07.393 [DEBUG] [Thread-130952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:59:07.418 [INFO] [Thread-130952] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:59:07.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:59:07.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:59:08.262 [DEBUG] [Thread-130952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:59:08.263 [DEBUG] [Thread-130952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:59:08.315 [DEBUG] [Thread-130952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:59:08.316 [DEBUG] [Thread-130952] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:59:08.333 [DEBUG] [Thread-130952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:59:08.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:59:08.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:59:08.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:59:08.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:59:08.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:59:08.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:59:08.390 [DEBUG] [Thread-130952] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:59:20.947 [DEBUG] [Thread-130954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:59:22.133 [DEBUG] [Thread-130955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:59:29.450 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:59:29.451 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:59:37.185 [DEBUG] [Thread-130956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T14:59:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T14:59:38.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T14:59:38.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T14:59:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 58, 59), 16.83, 34.34, 0.0, 27.37, 24.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T14:59:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:58:59
2026-02-11T14:59:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T14:59:40.978 [DEBUG] [Thread-130957] [transport.py] [_log()] starting thread (client mode): 0xa57c3880
2026-02-11T14:59:40.979 [DEBUG] [Thread-130957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:59:40.989 [DEBUG] [Thread-130957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T14:59:40.989 [INFO] [Thread-130957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T14:59:40.990 [DEBUG] [Thread-130957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:59:40.990 [DEBUG] [Thread-130957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T14:59:40.990 [DEBUG] [Thread-130957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:59:40.990 [DEBUG] [Thread-130957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:40.990 [DEBUG] [Thread-130957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:40.990 [DEBUG] [Thread-130957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:40.990 [DEBUG] [Thread-130957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] client lang: <none>
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] server lang: <none>
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] kex follows: False
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] Compression: none
2026-02-11T14:59:40.991 [DEBUG] [Thread-130957] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:59:41.001 [DEBUG] [Thread-130957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:59:41.002 [DEBUG] [Thread-130957] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:59:41.002 [DEBUG] [Thread-130957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T14:59:41.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T14:59:41.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:59:41.003 [DEBUG] [Thread-130957] [transport.py] [_log()] userauth is OK
2026-02-11T14:59:41.003 [DEBUG] [Thread-130957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:59:41.003 [DEBUG] [Thread-130957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:59:41.003 [DEBUG] [Thread-130957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T14:59:41.003 [DEBUG] [Thread-130957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:59:41.015 [INFO] [Thread-130957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:59:41.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:59:41.578 [DEBUG] [Thread-130957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:59:41.578 [DEBUG] [Thread-130957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:59:41.579 [DEBUG] [Thread-130957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T14:59:41.619 [DEBUG] [Thread-130957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:59:41.619 [DEBUG] [Thread-130957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:59:41.622 [DEBUG] [Thread-130957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:59:41.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:59:41.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T14:59:41.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T14:59:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T14:59:41.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:59:41.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T14:59:41.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:59:41.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:59:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T14:59:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.541115 -999.00  +25.10  33.44     40  +10.70 1 2 2 1 1   888    0 15.18 39.98 ----- 29.5 33.4 293.2 43.1 30.7 -20.5 30.1 -20.5 30.5 -19.5 31.2 -19.6
2026-02-11T14:59:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T14:59:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T14:59:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.541115
2026-02-11T14:59:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T14:59:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T14:59:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T14:59:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T14:59:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T14:59:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:58:59', tmtdew=16.83, humidity=34.34, cloud=0.0, wind=27.37, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T12:59:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T14:59:41.648 [DEBUG] [Thread-130957] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:59:41.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T14:59:41.741 [DEBUG] [Thread-130960] [transport.py] [_log()] starting thread (client mode): 0xa57c3550
2026-02-11T14:59:41.741 [DEBUG] [Thread-130960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T14:59:41.756 [DEBUG] [Thread-130960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T14:59:41.756 [INFO] [Thread-130960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T14:59:41.763 [DEBUG] [Thread-130960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T14:59:41.763 [DEBUG] [Thread-130960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T14:59:41.763 [DEBUG] [Thread-130960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] client lang: <none>
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] server lang: <none>
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] kex follows: False
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] Compression: none
2026-02-11T14:59:41.764 [DEBUG] [Thread-130960] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T14:59:41.825 [DEBUG] [Thread-130960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T14:59:41.826 [DEBUG] [Thread-130960] [transport.py] [_log()] Switch to new keys ...
2026-02-11T14:59:41.827 [DEBUG] [Thread-130960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T14:59:41.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T14:59:41.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T14:59:41.881 [DEBUG] [Thread-130960] [transport.py] [_log()] userauth is OK
2026-02-11T14:59:41.882 [DEBUG] [Thread-130960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T14:59:41.882 [DEBUG] [Thread-130960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T14:59:41.882 [DEBUG] [Thread-130960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T14:59:41.882 [DEBUG] [Thread-130960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T14:59:41.901 [INFO] [Thread-130960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T14:59:41.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T14:59:41.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T14:59:42.716 [DEBUG] [Thread-130960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T14:59:42.717 [DEBUG] [Thread-130960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T14:59:42.764 [DEBUG] [Thread-130960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T14:59:42.765 [DEBUG] [Thread-130960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T14:59:42.774 [DEBUG] [Thread-130960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T14:59:42.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T14:59:42.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T14:59:42.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T14:59:42.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T14:59:42.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T14:59:42.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T14:59:42.812 [DEBUG] [Thread-130960] [transport.py] [_log()] EOF in transport thread
2026-02-11T14:59:52.221 [DEBUG] [Thread-130962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:00:07.274 [DEBUG] [Thread-130963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:00:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:00:12.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:00:12.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:00:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 14, 59, 36), 18.52, 31.02, 0.0, 31.47, 26.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:00:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 14:59:36
2026-02-11T15:00:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:00:15.484 [DEBUG] [Thread-130964] [transport.py] [_log()] starting thread (client mode): 0xa5743b80
2026-02-11T15:00:15.484 [DEBUG] [Thread-130964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:00:15.503 [DEBUG] [Thread-130964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:00:15.504 [INFO] [Thread-130964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] client lang: <none>
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] server lang: <none>
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] kex follows: False
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] Compression: none
2026-02-11T15:00:15.506 [DEBUG] [Thread-130964] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:00:15.521 [DEBUG] [Thread-130964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:00:15.522 [DEBUG] [Thread-130964] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:00:15.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:00:15.523 [DEBUG] [Thread-130964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:00:15.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:00:15.525 [DEBUG] [Thread-130964] [transport.py] [_log()] userauth is OK
2026-02-11T15:00:15.525 [DEBUG] [Thread-130964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:00:15.526 [DEBUG] [Thread-130964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:00:15.526 [DEBUG] [Thread-130964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:00:15.526 [DEBUG] [Thread-130964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:00:15.556 [INFO] [Thread-130964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:00:15.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:00:16.108 [DEBUG] [Thread-130964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:00:16.109 [DEBUG] [Thread-130964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:00:16.109 [DEBUG] [Thread-130964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:00:16.149 [DEBUG] [Thread-130964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:00:16.149 [DEBUG] [Thread-130964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:00:16.152 [DEBUG] [Thread-130964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:00:16.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:00:16.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:00:16.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:00:16.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:00:16.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:00:16.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:00:16.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:00:16.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:00:16.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:00:16.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.541809 -999.00  +25.50  30.41     39  +10.70 1 2 2 1 1   888    0 15.18 35.55 ----- 24.6 30.4 307.4 33.6 30.8 -20.3 30.4 -20.6 30.8 -17.7 31.4 -19.2
2026-02-11T15:00:16.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:00:16.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:00:16.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.541809
2026-02-11T15:00:16.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:00:16.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:00:16.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:00:16.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:00:16.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:00:16.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T14:59:36', tmtdew=18.52, humidity=31.02, cloud=0.0, wind=31.47, temperature=26.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:00:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:00:16.178 [DEBUG] [Thread-130964] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:00:16.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:00:16.288 [DEBUG] [Thread-130967] [transport.py] [_log()] starting thread (client mode): 0xa57420b0
2026-02-11T15:00:16.288 [DEBUG] [Thread-130967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:00:16.303 [DEBUG] [Thread-130967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:00:16.303 [INFO] [Thread-130967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] client lang: <none>
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] server lang: <none>
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] kex follows: False
2026-02-11T15:00:16.311 [DEBUG] [Thread-130967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:00:16.312 [DEBUG] [Thread-130967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:00:16.312 [DEBUG] [Thread-130967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:00:16.312 [DEBUG] [Thread-130967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:00:16.312 [DEBUG] [Thread-130967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:00:16.312 [DEBUG] [Thread-130967] [transport.py] [_log()] Compression: none
2026-02-11T15:00:16.312 [DEBUG] [Thread-130967] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:00:16.368 [DEBUG] [Thread-130967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:00:16.369 [DEBUG] [Thread-130967] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:00:16.370 [DEBUG] [Thread-130967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:00:16.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:00:16.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:00:16.425 [DEBUG] [Thread-130967] [transport.py] [_log()] userauth is OK
2026-02-11T15:00:16.426 [DEBUG] [Thread-130967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:00:16.426 [DEBUG] [Thread-130967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:00:16.426 [DEBUG] [Thread-130967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:00:16.426 [DEBUG] [Thread-130967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:00:16.450 [INFO] [Thread-130967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:00:16.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:00:16.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:00:17.254 [DEBUG] [Thread-130967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:00:17.254 [DEBUG] [Thread-130967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:00:17.301 [DEBUG] [Thread-130967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:00:17.301 [DEBUG] [Thread-130967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:00:17.311 [DEBUG] [Thread-130967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:00:17.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:00:17.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')
2026-02-11T15:00:17.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:00:17.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:00:17.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:00:17.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:00:17.349 [DEBUG] [Thread-130967] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:00:21.012 [DEBUG] [Thread-130969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:00:22.312 [DEBUG] [Thread-130970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:00:29.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:00:29.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:00:37.364 [DEBUG] [Thread-130971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:00:47.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:00:47.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:00:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:00:49.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 0, 11), 16.95, 34.19, 0.0, 34.97, 25.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:00:49.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:00:11
2026-02-11T15:00:49.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:00:49.956 [DEBUG] [Thread-130972] [transport.py] [_log()] starting thread (client mode): 0xa5740220
2026-02-11T15:00:49.956 [DEBUG] [Thread-130972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:00:49.976 [DEBUG] [Thread-130972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:00:49.976 [INFO] [Thread-130972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] client lang: <none>
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] server lang: <none>
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] kex follows: False
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:00:49.978 [DEBUG] [Thread-130972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:00:49.979 [DEBUG] [Thread-130972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:00:49.979 [DEBUG] [Thread-130972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:00:49.979 [DEBUG] [Thread-130972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:00:49.979 [DEBUG] [Thread-130972] [transport.py] [_log()] Compression: none
2026-02-11T15:00:49.979 [DEBUG] [Thread-130972] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:00:49.987 [DEBUG] [Thread-130972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:00:49.987 [DEBUG] [Thread-130972] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:00:49.988 [DEBUG] [Thread-130972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:00:49.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:00:49.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:00:49.989 [DEBUG] [Thread-130972] [transport.py] [_log()] userauth is OK
2026-02-11T15:00:49.989 [DEBUG] [Thread-130972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:00:49.990 [DEBUG] [Thread-130972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:00:49.990 [DEBUG] [Thread-130972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:00:49.990 [DEBUG] [Thread-130972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:00:50.007 [INFO] [Thread-130972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:00:50.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:00:50.669 [DEBUG] [Thread-130972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:00:50.669 [DEBUG] [Thread-130972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:00:50.669 [DEBUG] [Thread-130972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:00:50.710 [DEBUG] [Thread-130972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:00:50.710 [DEBUG] [Thread-130972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:00:50.713 [DEBUG] [Thread-130972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:00:50.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:00:50.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:00:50.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:00:50.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:00:50.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:00:50.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:00:50.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.542156 -999.00  +25.40  33.79     39  +10.60 1 2 2 1 1   888    0 15.16 33.43 ----- 31.1 33.8 296.4 39.5 30.9 -22.0 30.2 -21.6 30.8 -17.7 31.5 -20.0
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.542156
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:00:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:00:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:00:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:00:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:00:11', tmtdew=16.95, humidity=34.19, cloud=0.0, wind=34.97, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:00:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:00:50.734 [DEBUG] [Thread-130972] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:00:50.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:00:50.822 [DEBUG] [Thread-130975] [transport.py] [_log()] starting thread (client mode): 0xa57599f0
2026-02-11T15:00:50.822 [DEBUG] [Thread-130975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:00:50.837 [DEBUG] [Thread-130975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:00:50.838 [INFO] [Thread-130975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:00:50.846 [DEBUG] [Thread-130975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:00:50.846 [DEBUG] [Thread-130975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:00:50.846 [DEBUG] [Thread-130975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] client lang: <none>
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] server lang: <none>
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] kex follows: False
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] Compression: none
2026-02-11T15:00:50.847 [DEBUG] [Thread-130975] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:00:50.904 [DEBUG] [Thread-130975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:00:50.904 [DEBUG] [Thread-130975] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:00:50.905 [DEBUG] [Thread-130975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:00:50.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:00:50.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:00:50.960 [DEBUG] [Thread-130975] [transport.py] [_log()] userauth is OK
2026-02-11T15:00:50.960 [DEBUG] [Thread-130975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:00:50.961 [DEBUG] [Thread-130975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:00:50.961 [DEBUG] [Thread-130975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:00:50.961 [DEBUG] [Thread-130975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:00:50.980 [INFO] [Thread-130975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:00:50.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:00:50.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:00:51.864 [DEBUG] [Thread-130975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:00:51.864 [DEBUG] [Thread-130975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:00:51.912 [DEBUG] [Thread-130975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:00:51.912 [DEBUG] [Thread-130975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:00:51.920 [DEBUG] [Thread-130975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:00:51.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:00:51.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:00:51.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:00:51.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:00:51.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:00:51.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:00:51.954 [DEBUG] [Thread-130975] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:00:52.398 [DEBUG] [Thread-130977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:07.455 [DEBUG] [Thread-130978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:21.064 [DEBUG] [Thread-130979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:01:21.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:01:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:01:22.493 [DEBUG] [Thread-130980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:23.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 0, 48), 16.85, 34.38, 0.0, 34.67, 25.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:01:23.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:00:48
2026-02-11T15:01:24.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:01:24.382 [DEBUG] [Thread-130981] [transport.py] [_log()] starting thread (client mode): 0xa5743580
2026-02-11T15:01:24.382 [DEBUG] [Thread-130981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:01:24.401 [DEBUG] [Thread-130981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:01:24.401 [INFO] [Thread-130981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:01:24.405 [DEBUG] [Thread-130981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] client lang: <none>
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] server lang: <none>
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] kex follows: False
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] Compression: none
2026-02-11T15:01:24.406 [DEBUG] [Thread-130981] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:01:24.426 [DEBUG] [Thread-130981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:01:24.427 [DEBUG] [Thread-130981] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:01:24.428 [DEBUG] [Thread-130981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:01:24.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:01:24.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:01:24.430 [DEBUG] [Thread-130981] [transport.py] [_log()] userauth is OK
2026-02-11T15:01:24.430 [DEBUG] [Thread-130981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:01:24.430 [DEBUG] [Thread-130981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:01:24.430 [DEBUG] [Thread-130981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:01:24.430 [DEBUG] [Thread-130981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:01:24.451 [INFO] [Thread-130981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:01:24.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:01:25.086 [DEBUG] [Thread-130981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:01:25.087 [DEBUG] [Thread-130981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:01:25.087 [DEBUG] [Thread-130981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:01:25.127 [DEBUG] [Thread-130981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:01:25.128 [DEBUG] [Thread-130981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:01:25.131 [DEBUG] [Thread-130981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:01:25.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:01:25.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:01:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:01:25.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:01:25.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:01:25.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:01:25.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:01:25.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:01:25.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:01:25.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.542503 -999.00  +25.10  19.62     40  +10.70 1 2 1 1 1   888    0 14.88 28.61 ----- 21.0 19.6 288.8 33.0 30.7 -22.4 30.3 -20.3 30.5 -21.1 31.4 -19.8
2026-02-11T15:01:25.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:01:25.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:01:25.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.542503
2026-02-11T15:01:25.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:01:25.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:01:25.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:01:25.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:01:25.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:01:25.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:00:48', tmtdew=16.85, humidity=34.38, cloud=0.0, wind=34.67, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:01:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:01:25.158 [DEBUG] [Thread-130981] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:01:25.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:01:25.254 [DEBUG] [Thread-130984] [transport.py] [_log()] starting thread (client mode): 0xa5740730
2026-02-11T15:01:25.254 [DEBUG] [Thread-130984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:01:25.268 [DEBUG] [Thread-130984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:01:25.268 [INFO] [Thread-130984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] client lang: <none>
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] server lang: <none>
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] kex follows: False
2026-02-11T15:01:25.276 [DEBUG] [Thread-130984] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:01:25.277 [DEBUG] [Thread-130984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:01:25.277 [DEBUG] [Thread-130984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:01:25.277 [DEBUG] [Thread-130984] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:01:25.277 [DEBUG] [Thread-130984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:01:25.277 [DEBUG] [Thread-130984] [transport.py] [_log()] Compression: none
2026-02-11T15:01:25.277 [DEBUG] [Thread-130984] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:01:25.337 [DEBUG] [Thread-130984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:01:25.337 [DEBUG] [Thread-130984] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:01:25.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:01:25.338 [DEBUG] [Thread-130984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:01:25.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:01:25.393 [DEBUG] [Thread-130984] [transport.py] [_log()] userauth is OK
2026-02-11T15:01:25.393 [DEBUG] [Thread-130984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:01:25.393 [DEBUG] [Thread-130984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:01:25.394 [DEBUG] [Thread-130984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:01:25.394 [DEBUG] [Thread-130984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:01:25.412 [INFO] [Thread-130984] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:01:25.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:01:25.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:01:26.339 [DEBUG] [Thread-130984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:01:26.340 [DEBUG] [Thread-130984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:01:26.388 [DEBUG] [Thread-130984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:01:26.388 [DEBUG] [Thread-130984] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:01:26.397 [DEBUG] [Thread-130984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:01:26.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:01:26.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:01:26.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:01:26.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:01:26.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:01:26.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:01:26.434 [DEBUG] [Thread-130984] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:01:29.734 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:29.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:37.531 [DEBUG] [Thread-130986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:52.592 [DEBUG] [Thread-130987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:01:56.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:01:56.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:01:56.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:01:58.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 1, 23), 17.14, 33.81, 0.0, 32.15, 25.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:01:58.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:01:23
2026-02-11T15:01:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:01:59.275 [DEBUG] [Thread-130988] [transport.py] [_log()] starting thread (client mode): 0xa2d03e80
2026-02-11T15:01:59.275 [DEBUG] [Thread-130988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:01:59.296 [DEBUG] [Thread-130988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:01:59.296 [INFO] [Thread-130988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:01:59.299 [DEBUG] [Thread-130988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:01:59.299 [DEBUG] [Thread-130988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:01:59.299 [DEBUG] [Thread-130988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] client lang: <none>
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] server lang: <none>
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] kex follows: False
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] Compression: none
2026-02-11T15:01:59.300 [DEBUG] [Thread-130988] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:01:59.316 [DEBUG] [Thread-130988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:01:59.317 [DEBUG] [Thread-130988] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:01:59.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:01:59.318 [DEBUG] [Thread-130988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:01:59.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:01:59.320 [DEBUG] [Thread-130988] [transport.py] [_log()] userauth is OK
2026-02-11T15:01:59.320 [DEBUG] [Thread-130988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:01:59.320 [DEBUG] [Thread-130988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:01:59.320 [DEBUG] [Thread-130988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:01:59.320 [DEBUG] [Thread-130988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:01:59.342 [INFO] [Thread-130988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:01:59.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:01:59.987 [DEBUG] [Thread-130988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:01:59.987 [DEBUG] [Thread-130988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:01:59.988 [DEBUG] [Thread-130988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:02:00.028 [DEBUG] [Thread-130988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:02:00.028 [DEBUG] [Thread-130988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:02:00.031 [DEBUG] [Thread-130988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:02:00.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:02:00.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:02:00.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:02:00.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:02:00.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:02:00.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:02:00.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:02:00.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:02:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:02:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.542851 -999.00  +25.40  21.59     39  +10.60 1 2 1 1 1   888    0 14.85 26.89 ----- 29.7 21.6 284.6 33.7 30.8 -22.6 30.3 -20.2 30.8 -18.2 31.4 -21.7
2026-02-11T15:02:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:02:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:02:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.542851
2026-02-11T15:02:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:02:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:02:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:02:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:02:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:02:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:01:23', tmtdew=17.14, humidity=33.81, cloud=0.0, wind=32.15, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:01:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:02:00.057 [DEBUG] [Thread-130988] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:02:00.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:02:00.155 [DEBUG] [Thread-130991] [transport.py] [_log()] starting thread (client mode): 0xa2d6eaa0
2026-02-11T15:02:00.155 [DEBUG] [Thread-130991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:02:00.170 [DEBUG] [Thread-130991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:02:00.170 [INFO] [Thread-130991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:02:00.177 [DEBUG] [Thread-130991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:02:00.178 [DEBUG] [Thread-130991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:02:00.178 [DEBUG] [Thread-130991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:02:00.178 [DEBUG] [Thread-130991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:02:00.178 [DEBUG] [Thread-130991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:02:00.178 [DEBUG] [Thread-130991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:02:00.178 [DEBUG] [Thread-130991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:02:00.178 [DEBUG] [Thread-130991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] client lang: <none>
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] server lang: <none>
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] kex follows: False
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:02:00.179 [DEBUG] [Thread-130991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:02:00.180 [DEBUG] [Thread-130991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:02:00.180 [DEBUG] [Thread-130991] [transport.py] [_log()] Compression: none
2026-02-11T15:02:00.180 [DEBUG] [Thread-130991] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:02:00.237 [DEBUG] [Thread-130991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:02:00.237 [DEBUG] [Thread-130991] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:02:00.237 [DEBUG] [Thread-130991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:02:00.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:02:00.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:02:00.293 [DEBUG] [Thread-130991] [transport.py] [_log()] userauth is OK
2026-02-11T15:02:00.293 [DEBUG] [Thread-130991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:02:00.293 [DEBUG] [Thread-130991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:02:00.294 [DEBUG] [Thread-130991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:02:00.294 [DEBUG] [Thread-130991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:02:00.316 [INFO] [Thread-130991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:02:00.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:02:00.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:02:01.129 [DEBUG] [Thread-130991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:02:01.130 [DEBUG] [Thread-130991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:02:01.177 [DEBUG] [Thread-130991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:02:01.178 [DEBUG] [Thread-130991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:02:01.187 [DEBUG] [Thread-130991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:02:01.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:02:01.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:02:01.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
2026-02-11T15:02:01.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:02:01.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:02:01.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:02:01.222 [DEBUG] [Thread-130991] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:02:07.630 [DEBUG] [Thread-130993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:02:21.098 [DEBUG] [Thread-130994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:02:22.683 [DEBUG] [Thread-130995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:02:29.875 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:02:29.876 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:02:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:02:31.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:02:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:02:33.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 1, 59), 17.43, 32.88, 0.0, 32.04, 25.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:02:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:01:59
2026-02-11T15:02:33.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:02:33.607 [DEBUG] [Thread-130996] [transport.py] [_log()] starting thread (client mode): 0xa5741570
2026-02-11T15:02:33.607 [DEBUG] [Thread-130996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:02:33.622 [DEBUG] [Thread-130996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:02:33.622 [INFO] [Thread-130996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] client lang: <none>
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] server lang: <none>
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] kex follows: False
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:02:33.626 [DEBUG] [Thread-130996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:02:33.627 [DEBUG] [Thread-130996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:02:33.627 [DEBUG] [Thread-130996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:02:33.627 [DEBUG] [Thread-130996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:02:33.627 [DEBUG] [Thread-130996] [transport.py] [_log()] Compression: none
2026-02-11T15:02:33.627 [DEBUG] [Thread-130996] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:02:33.646 [DEBUG] [Thread-130996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:02:33.647 [DEBUG] [Thread-130996] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:02:33.647 [DEBUG] [Thread-130996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:02:33.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:02:33.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:02:33.649 [DEBUG] [Thread-130996] [transport.py] [_log()] userauth is OK
2026-02-11T15:02:33.649 [DEBUG] [Thread-130996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:02:33.649 [DEBUG] [Thread-130996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:02:33.649 [DEBUG] [Thread-130996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:02:33.649 [DEBUG] [Thread-130996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:02:33.673 [INFO] [Thread-130996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:02:33.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:02:34.353 [DEBUG] [Thread-130996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:02:34.353 [DEBUG] [Thread-130996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:02:34.354 [DEBUG] [Thread-130996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:02:34.394 [DEBUG] [Thread-130996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:02:34.395 [DEBUG] [Thread-130996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:02:34.398 [DEBUG] [Thread-130996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:02:34.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:02:34.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:02:34.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:02:34.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:02:34.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:02:34.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:02:34.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:02:34.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:02:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:02:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.543198 -999.00  +24.80  46.67     40  +10.50 1 2 2 1 1   888    0 15.11 28.88 ----- 39.1 46.7 291.2 51.3 30.8 -21.9 30.1 -23.5 30.5 -21.4 31.6 -21.4
2026-02-11T15:02:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:02:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:02:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.543198
2026-02-11T15:02:34.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:02:34.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:02:34.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:02:34.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:02:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:02:34.424 [DEBUG] [Thread-130996] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:02:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:01:59', tmtdew=17.43, humidity=32.88, cloud=0.0, wind=32.04, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:02:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:02:34.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:02:34.519 [DEBUG] [Thread-130999] [transport.py] [_log()] starting thread (client mode): 0xa5741cf0
2026-02-11T15:02:34.519 [DEBUG] [Thread-130999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:02:34.535 [DEBUG] [Thread-130999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:02:34.535 [INFO] [Thread-130999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:02:34.542 [DEBUG] [Thread-130999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:02:34.543 [DEBUG] [Thread-130999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:02:34.543 [DEBUG] [Thread-130999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:02:34.543 [DEBUG] [Thread-130999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:02:34.543 [DEBUG] [Thread-130999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] client lang: <none>
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] server lang: <none>
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] kex follows: False
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] Compression: none
2026-02-11T15:02:34.544 [DEBUG] [Thread-130999] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:02:34.602 [DEBUG] [Thread-130999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:02:34.602 [DEBUG] [Thread-130999] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:02:34.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:02:34.604 [DEBUG] [Thread-130999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:02:34.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:02:34.661 [DEBUG] [Thread-130999] [transport.py] [_log()] userauth is OK
2026-02-11T15:02:34.661 [DEBUG] [Thread-130999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:02:34.661 [DEBUG] [Thread-130999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:02:34.661 [DEBUG] [Thread-130999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:02:34.661 [DEBUG] [Thread-130999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:02:34.686 [INFO] [Thread-130999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:02:34.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:02:34.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:02:35.492 [DEBUG] [Thread-130999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:02:35.492 [DEBUG] [Thread-130999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:02:35.540 [DEBUG] [Thread-130999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:02:35.541 [DEBUG] [Thread-130999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:02:35.550 [DEBUG] [Thread-130999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:02:35.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:02:35.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')
2026-02-11T15:02:35.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
2026-02-11T15:02:35.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:02:35.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:02:35.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:02:35.586 [DEBUG] [Thread-130999] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:02:37.720 [DEBUG] [Thread-131001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:02:52.773 [DEBUG] [Thread-131002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:03:05.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:03:05.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:03:05.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:03:07.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 2, 36), 18.21, 31.61, 0.0, 37.54, 26.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:03:07.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:02:36
2026-02-11T15:03:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:03:07.809 [DEBUG] [Thread-131003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:03:07.968 [DEBUG] [Thread-131004] [transport.py] [_log()] starting thread (client mode): 0xa5758b80
2026-02-11T15:03:07.968 [DEBUG] [Thread-131004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:03:07.989 [DEBUG] [Thread-131004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:03:07.989 [INFO] [Thread-131004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:03:07.992 [DEBUG] [Thread-131004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] client lang: <none>
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] server lang: <none>
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] kex follows: False
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] Compression: none
2026-02-11T15:03:07.993 [DEBUG] [Thread-131004] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:03:08.012 [DEBUG] [Thread-131004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:03:08.013 [DEBUG] [Thread-131004] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:03:08.013 [DEBUG] [Thread-131004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:03:08.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:03:08.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:03:08.016 [DEBUG] [Thread-131004] [transport.py] [_log()] userauth is OK
2026-02-11T15:03:08.016 [DEBUG] [Thread-131004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:03:08.016 [DEBUG] [Thread-131004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:03:08.016 [DEBUG] [Thread-131004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:03:08.016 [DEBUG] [Thread-131004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:03:08.041 [INFO] [Thread-131004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:03:08.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:03:08.683 [DEBUG] [Thread-131004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:03:08.683 [DEBUG] [Thread-131004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:03:08.684 [DEBUG] [Thread-131004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:03:08.724 [DEBUG] [Thread-131004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:03:08.724 [DEBUG] [Thread-131004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:03:08.727 [DEBUG] [Thread-131004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:03:08.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:03:08.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:03:08.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:03:08.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:03:08.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:03:08.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:03:08.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:03:08.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:03:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:03:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.543545 -999.00  +24.60  30.42     42  +10.80 1 2 2 1 1   888    0 15.06 26.84 ----- 31.0 30.4 297.0 49.2 30.5 -22.6 30.0 -23.0 30.3 -22.2 31.1 -22.3
2026-02-11T15:03:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:03:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:03:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.543545
2026-02-11T15:03:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:03:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:03:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:03:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:03:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:03:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:02:36', tmtdew=18.21, humidity=31.61, cloud=0.0, wind=37.54, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:02:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:03:08.753 [DEBUG] [Thread-131004] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:03:08.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:03:08.847 [DEBUG] [Thread-131007] [transport.py] [_log()] starting thread (client mode): 0xa57422f0
2026-02-11T15:03:08.847 [DEBUG] [Thread-131007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:03:08.862 [DEBUG] [Thread-131007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:03:08.863 [INFO] [Thread-131007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] client lang: <none>
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] server lang: <none>
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] kex follows: False
2026-02-11T15:03:08.870 [DEBUG] [Thread-131007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:03:08.871 [DEBUG] [Thread-131007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:03:08.871 [DEBUG] [Thread-131007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:03:08.871 [DEBUG] [Thread-131007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:03:08.871 [DEBUG] [Thread-131007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:03:08.871 [DEBUG] [Thread-131007] [transport.py] [_log()] Compression: none
2026-02-11T15:03:08.871 [DEBUG] [Thread-131007] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:03:08.928 [DEBUG] [Thread-131007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:03:08.929 [DEBUG] [Thread-131007] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:03:08.930 [DEBUG] [Thread-131007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:03:08.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:03:08.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:03:08.986 [DEBUG] [Thread-131007] [transport.py] [_log()] userauth is OK
2026-02-11T15:03:08.986 [DEBUG] [Thread-131007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:03:08.986 [DEBUG] [Thread-131007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:03:08.986 [DEBUG] [Thread-131007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:03:08.987 [DEBUG] [Thread-131007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:03:09.007 [INFO] [Thread-131007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:03:09.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:03:09.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:03:09.834 [DEBUG] [Thread-131007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:03:09.835 [DEBUG] [Thread-131007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:03:09.882 [DEBUG] [Thread-131007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:03:09.883 [DEBUG] [Thread-131007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:03:09.892 [DEBUG] [Thread-131007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:03:09.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:03: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')
2026-02-11T15:03:09.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:03:09.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:03:09.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:03:09.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:03:09.928 [DEBUG] [Thread-131007] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:03:21.134 [DEBUG] [Thread-131009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:03:22.844 [DEBUG] [Thread-131010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:03:30.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:03:30.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:03:37.893 [DEBUG] [Thread-131011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:03:39.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:03:39.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:03:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:03:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 3, 12), 16.62, 34.75, 0.0, 35.17, 25.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:03:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:03:12
2026-02-11T15:03:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:03:43.089 [DEBUG] [Thread-131012] [transport.py] [_log()] starting thread (client mode): 0xa57586d0
2026-02-11T15:03:43.089 [DEBUG] [Thread-131012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:03:43.110 [DEBUG] [Thread-131012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:03:43.110 [INFO] [Thread-131012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:03:43.113 [DEBUG] [Thread-131012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:03:43.113 [DEBUG] [Thread-131012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:03:43.113 [DEBUG] [Thread-131012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:03:43.113 [DEBUG] [Thread-131012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:43.113 [DEBUG] [Thread-131012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:43.113 [DEBUG] [Thread-131012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] client lang: <none>
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] server lang: <none>
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] kex follows: False
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] Compression: none
2026-02-11T15:03:43.114 [DEBUG] [Thread-131012] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:03:43.133 [DEBUG] [Thread-131012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:03:43.133 [DEBUG] [Thread-131012] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:03:43.134 [DEBUG] [Thread-131012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:03:43.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:03:43.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:03:43.136 [DEBUG] [Thread-131012] [transport.py] [_log()] userauth is OK
2026-02-11T15:03:43.136 [DEBUG] [Thread-131012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:03:43.136 [DEBUG] [Thread-131012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:03:43.136 [DEBUG] [Thread-131012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:03:43.136 [DEBUG] [Thread-131012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:03:43.157 [INFO] [Thread-131012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:03:43.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:03:43.787 [DEBUG] [Thread-131012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:03:43.787 [DEBUG] [Thread-131012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:03:43.787 [DEBUG] [Thread-131012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:03:43.828 [DEBUG] [Thread-131012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:03:43.828 [DEBUG] [Thread-131012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:03:43.832 [DEBUG] [Thread-131012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:03:43.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:03:43.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:03:43.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:03:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:03:43.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:03:43.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:03:43.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:03:43.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:03:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:03:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.543892 -999.00  +24.40  31.30     42  +10.80 1 2 2 1 1   888    0 15.10 25.30 ----- 34.7 31.3 294.2 44.5 30.3 -25.6 29.8 -22.1 30.2 -20.4 30.9 -21.8
2026-02-11T15:03:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:03:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:03:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.543892
2026-02-11T15:03:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:03:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:03:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:03:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:03:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:03:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:03:12', tmtdew=16.62, humidity=34.75, cloud=0.0, wind=35.17, temperature=25.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:03:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:03:43.856 [DEBUG] [Thread-131012] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:03:43.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:03:43.953 [DEBUG] [Thread-131015] [transport.py] [_log()] starting thread (client mode): 0xa57d7df0
2026-02-11T15:03:43.953 [DEBUG] [Thread-131015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:03:43.973 [DEBUG] [Thread-131015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:03:43.974 [INFO] [Thread-131015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:03:43.981 [DEBUG] [Thread-131015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] client lang: <none>
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] server lang: <none>
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] kex follows: False
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:03:43.982 [DEBUG] [Thread-131015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:03:43.983 [DEBUG] [Thread-131015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:03:43.983 [DEBUG] [Thread-131015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:03:43.983 [DEBUG] [Thread-131015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:03:43.983 [DEBUG] [Thread-131015] [transport.py] [_log()] Compression: none
2026-02-11T15:03:43.983 [DEBUG] [Thread-131015] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:03:44.040 [DEBUG] [Thread-131015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:03:44.041 [DEBUG] [Thread-131015] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:03:44.041 [DEBUG] [Thread-131015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:03:44.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:03:44.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:03:44.096 [DEBUG] [Thread-131015] [transport.py] [_log()] userauth is OK
2026-02-11T15:03:44.096 [DEBUG] [Thread-131015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:03:44.097 [DEBUG] [Thread-131015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:03:44.097 [DEBUG] [Thread-131015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:03:44.097 [DEBUG] [Thread-131015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:03:44.120 [INFO] [Thread-131015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:03:44.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:03:44.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:03:44.965 [DEBUG] [Thread-131015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:03:44.965 [DEBUG] [Thread-131015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:03:45.013 [DEBUG] [Thread-131015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:03:45.014 [DEBUG] [Thread-131015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:03:45.022 [DEBUG] [Thread-131015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:03:45.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:03:45.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')
2026-02-11T15:03:45.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:03:45.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:03:45.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:03:45.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:03:45.058 [DEBUG] [Thread-131015] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:03:52.927 [DEBUG] [Thread-131017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:07.974 [DEBUG] [Thread-131018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:04:15.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:04:15.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:04:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 3, 48), 16.35, 35.1, 0.0, 34.25, 24.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:04:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:03:48
2026-02-11T15:04:17.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:04:17.815 [DEBUG] [Thread-131019] [transport.py] [_log()] starting thread (client mode): 0xa5758610
2026-02-11T15:04:17.815 [DEBUG] [Thread-131019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:04:17.835 [DEBUG] [Thread-131019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:04:17.836 [INFO] [Thread-131019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:17.839 [DEBUG] [Thread-131019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] client lang: <none>
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] server lang: <none>
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] kex follows: False
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] Compression: none
2026-02-11T15:04:17.840 [DEBUG] [Thread-131019] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:04:17.863 [DEBUG] [Thread-131019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:04:17.863 [DEBUG] [Thread-131019] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:04:17.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:04:17.864 [DEBUG] [Thread-131019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:04:17.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:04:17.867 [DEBUG] [Thread-131019] [transport.py] [_log()] userauth is OK
2026-02-11T15:04:17.867 [DEBUG] [Thread-131019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:04:17.867 [DEBUG] [Thread-131019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:04:17.867 [DEBUG] [Thread-131019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:04:17.867 [DEBUG] [Thread-131019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:04:17.893 [INFO] [Thread-131019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:04:17.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:04:18.544 [DEBUG] [Thread-131019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:04:18.545 [DEBUG] [Thread-131019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:04:18.545 [DEBUG] [Thread-131019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:04:18.585 [DEBUG] [Thread-131019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:04:18.586 [DEBUG] [Thread-131019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:04:18.589 [DEBUG] [Thread-131019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:04:18.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:04:18.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:04:18.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:04:18.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:04:18.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:04:18.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:04:18.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:04:18.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:04:18.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:04:18.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.544240 -999.00  +24.00  35.81     42  +10.50 1 2 2 1 1   888    0 14.81 19.97 ----- 33.8 35.8 299.0 43.6 30.2 -22.2 29.6 -22.2 30.0 -21.0 30.9 -20.3
2026-02-11T15:04:18.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:04:18.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:04:18.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.544240
2026-02-11T15:04:18.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:04:18.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:04:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:04:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:04:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:04:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:03:48', tmtdew=16.35, humidity=35.1, cloud=0.0, wind=34.25, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:03:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:04:18.616 [DEBUG] [Thread-131019] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:04:18.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:04:18.711 [DEBUG] [Thread-131022] [transport.py] [_log()] starting thread (client mode): 0xa575a2c0
2026-02-11T15:04:18.712 [DEBUG] [Thread-131022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:04:18.726 [DEBUG] [Thread-131022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:04:18.726 [INFO] [Thread-131022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] client lang: <none>
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] server lang: <none>
2026-02-11T15:04:18.734 [DEBUG] [Thread-131022] [transport.py] [_log()] kex follows: False
2026-02-11T15:04:18.735 [DEBUG] [Thread-131022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:04:18.735 [DEBUG] [Thread-131022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:04:18.735 [DEBUG] [Thread-131022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:04:18.735 [DEBUG] [Thread-131022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:04:18.735 [DEBUG] [Thread-131022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:04:18.735 [DEBUG] [Thread-131022] [transport.py] [_log()] Compression: none
2026-02-11T15:04:18.735 [DEBUG] [Thread-131022] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:04:18.793 [DEBUG] [Thread-131022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:04:18.794 [DEBUG] [Thread-131022] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:04:18.794 [DEBUG] [Thread-131022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:04:18.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:04:18.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:04:18.849 [DEBUG] [Thread-131022] [transport.py] [_log()] userauth is OK
2026-02-11T15:04:18.849 [DEBUG] [Thread-131022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:04:18.849 [DEBUG] [Thread-131022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:04:18.849 [DEBUG] [Thread-131022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:04:18.849 [DEBUG] [Thread-131022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:04:18.868 [INFO] [Thread-131022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:04:18.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:04:18.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:04:19.704 [DEBUG] [Thread-131022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:04:19.705 [DEBUG] [Thread-131022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:04:19.752 [DEBUG] [Thread-131022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:04:19.752 [DEBUG] [Thread-131022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:04:19.761 [DEBUG] [Thread-131022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:04:19.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:04: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')
2026-02-11T15:04:19.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:04:19.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:04:19.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:04:19.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:04:19.796 [DEBUG] [Thread-131022] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:04:21.168 [DEBUG] [Thread-131024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:23.010 [DEBUG] [Thread-131025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:30.157 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:30.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:38.059 [DEBUG] [Thread-131026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:49.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:04:49.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:04:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:04:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 4, 23), 16.33, 35.13, 0.0, 30.12, 24.7, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:04:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:04:23
2026-02-11T15:04:52.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:04:52.185 [DEBUG] [Thread-131027] [transport.py] [_log()] starting thread (client mode): 0xa5742cb0
2026-02-11T15:04:52.185 [DEBUG] [Thread-131027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:04:52.205 [DEBUG] [Thread-131027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:04:52.205 [INFO] [Thread-131027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:04:52.208 [DEBUG] [Thread-131027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:04:52.208 [DEBUG] [Thread-131027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:04:52.208 [DEBUG] [Thread-131027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] client lang: <none>
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] server lang: <none>
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] kex follows: False
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] Compression: none
2026-02-11T15:04:52.209 [DEBUG] [Thread-131027] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:04:52.228 [DEBUG] [Thread-131027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:04:52.229 [DEBUG] [Thread-131027] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:04:52.229 [DEBUG] [Thread-131027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:04:52.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:04:52.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:04:52.231 [DEBUG] [Thread-131027] [transport.py] [_log()] userauth is OK
2026-02-11T15:04:52.232 [DEBUG] [Thread-131027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:04:52.232 [DEBUG] [Thread-131027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:04:52.232 [DEBUG] [Thread-131027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:04:52.232 [DEBUG] [Thread-131027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:04:52.248 [INFO] [Thread-131027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:04:52.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:04:52.897 [DEBUG] [Thread-131027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:04:52.897 [DEBUG] [Thread-131027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:04:52.897 [DEBUG] [Thread-131027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:04:52.938 [DEBUG] [Thread-131027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:04:52.938 [DEBUG] [Thread-131027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:04:52.941 [DEBUG] [Thread-131027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:04:52.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:04:52.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:04:52.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:04:52.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:04:52.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:04:52.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:04:52.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:04:52.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:04:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:04:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.544587 -999.00  +24.10  23.92     42  +10.70 1 2 1 1 1   888    0 14.72 13.57 ----- 32.7 23.9 306.8 36.7 30.1 -25.7 29.6 -20.6 29.8 -19.4 30.4 -24.9
2026-02-11T15:04:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:04:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:04:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.544587
2026-02-11T15:04:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:04:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:04:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:04:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:04:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:04:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:04:23', tmtdew=16.33, humidity=35.13, cloud=0.0, wind=30.12, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:04:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:04:52.963 [DEBUG] [Thread-131027] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:04:53.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:04:53.057 [DEBUG] [Thread-131030] [transport.py] [_log()] starting thread (client mode): 0xa575ae30
2026-02-11T15:04:53.057 [DEBUG] [Thread-131030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:04:53.072 [DEBUG] [Thread-131030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:04:53.072 [INFO] [Thread-131030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] client lang: <none>
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] server lang: <none>
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] kex follows: False
2026-02-11T15:04:53.079 [DEBUG] [Thread-131030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:04:53.080 [DEBUG] [Thread-131030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:04:53.080 [DEBUG] [Thread-131030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:04:53.080 [DEBUG] [Thread-131030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:04:53.080 [DEBUG] [Thread-131030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:04:53.080 [DEBUG] [Thread-131030] [transport.py] [_log()] Compression: none
2026-02-11T15:04:53.080 [DEBUG] [Thread-131030] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:04:53.094 [DEBUG] [Thread-131032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:04:53.136 [DEBUG] [Thread-131030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:04:53.137 [DEBUG] [Thread-131030] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:04:53.138 [DEBUG] [Thread-131030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:04:53.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:04:53.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:04:53.192 [DEBUG] [Thread-131030] [transport.py] [_log()] userauth is OK
2026-02-11T15:04:53.192 [DEBUG] [Thread-131030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:04:53.193 [DEBUG] [Thread-131030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:04:53.193 [DEBUG] [Thread-131030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:04:53.193 [DEBUG] [Thread-131030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:04:53.212 [INFO] [Thread-131030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:04:53.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:04:53.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:04:54.097 [DEBUG] [Thread-131030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:04:54.097 [DEBUG] [Thread-131030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:04:54.146 [DEBUG] [Thread-131030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:04:54.147 [DEBUG] [Thread-131030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:04:54.156 [DEBUG] [Thread-131030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:04:54.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:04:54.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:04:54.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:04:54.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:04:54.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:04:54.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:04:54.191 [DEBUG] [Thread-131030] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:05:08.146 [DEBUG] [Thread-131033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:05:21.197 [DEBUG] [Thread-131034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:05:23.178 [DEBUG] [Thread-131035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:05:24.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:05:24.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:05:24.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
2026-02-11T15:05:26.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 4, 59), 16.66, 34.58, 0.0, 27.98, 25.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:05:26.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:04:59
2026-02-11T15:05:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:05:26.690 [DEBUG] [Thread-131036] [transport.py] [_log()] starting thread (client mode): 0xa2d6d840
2026-02-11T15:05:26.690 [DEBUG] [Thread-131036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:05:26.711 [DEBUG] [Thread-131036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:05:26.711 [INFO] [Thread-131036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] client lang: <none>
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] server lang: <none>
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] kex follows: False
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:05:26.714 [DEBUG] [Thread-131036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:05:26.715 [DEBUG] [Thread-131036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:05:26.715 [DEBUG] [Thread-131036] [transport.py] [_log()] Compression: none
2026-02-11T15:05:26.715 [DEBUG] [Thread-131036] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:05:26.731 [DEBUG] [Thread-131036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:05:26.731 [DEBUG] [Thread-131036] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:05:26.732 [DEBUG] [Thread-131036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:05:26.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:05:26.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:05:26.733 [DEBUG] [Thread-131036] [transport.py] [_log()] userauth is OK
2026-02-11T15:05:26.733 [DEBUG] [Thread-131036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:05:26.733 [DEBUG] [Thread-131036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:05:26.734 [DEBUG] [Thread-131036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:05:26.734 [DEBUG] [Thread-131036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:05:26.756 [INFO] [Thread-131036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:05:26.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:05:27.546 [DEBUG] [Thread-131036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:05:27.546 [DEBUG] [Thread-131036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:05:27.546 [DEBUG] [Thread-131036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:05:27.587 [DEBUG] [Thread-131036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:05:27.587 [DEBUG] [Thread-131036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:05:27.590 [DEBUG] [Thread-131036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:05:27.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:05:27.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:05:27.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:05:27.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:05:27.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:05:27.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:05:27.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:05:27.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:05:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:05:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.544934 -999.00  +24.40  28.33     42  +10.60 1 2 1 1 1   888    0 14.46 8.90 ----- 24.7 28.3 297.4 38.1 30.1 -22.0 29.7 -21.2 29.9 -19.3 30.7 -20.2
2026-02-11T15:05:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:05:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:05:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.544934
2026-02-11T15:05:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:05:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:05:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:05:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:05:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:05:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:04:59', tmtdew=16.66, humidity=34.58, cloud=0.0, wind=27.98, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:04:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:05:27.618 [DEBUG] [Thread-131036] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:05:27.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:05:27.715 [DEBUG] [Thread-131039] [transport.py] [_log()] starting thread (client mode): 0xa57d5870
2026-02-11T15:05:27.716 [DEBUG] [Thread-131039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:05:27.731 [DEBUG] [Thread-131039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:05:27.731 [INFO] [Thread-131039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:05:27.740 [DEBUG] [Thread-131039] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] client lang: <none>
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] server lang: <none>
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] kex follows: False
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:05:27.741 [DEBUG] [Thread-131039] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:05:27.742 [DEBUG] [Thread-131039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:05:27.742 [DEBUG] [Thread-131039] [transport.py] [_log()] Compression: none
2026-02-11T15:05:27.742 [DEBUG] [Thread-131039] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:05:27.808 [DEBUG] [Thread-131039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:05:27.809 [DEBUG] [Thread-131039] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:05:27.810 [DEBUG] [Thread-131039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:05:27.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:05:27.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:05:27.865 [DEBUG] [Thread-131039] [transport.py] [_log()] userauth is OK
2026-02-11T15:05:27.865 [DEBUG] [Thread-131039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:05:27.865 [DEBUG] [Thread-131039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:05:27.865 [DEBUG] [Thread-131039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:05:27.866 [DEBUG] [Thread-131039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:05:27.884 [INFO] [Thread-131039] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:05:27.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:05:27.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:05:28.695 [DEBUG] [Thread-131039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:05:28.695 [DEBUG] [Thread-131039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:05:28.743 [DEBUG] [Thread-131039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:05:28.744 [DEBUG] [Thread-131039] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:05:28.753 [DEBUG] [Thread-131039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:05:28.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:05:28.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:05:28.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:05:28.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:05:28.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:05:28.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:05:28.791 [DEBUG] [Thread-131039] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:05:30.302 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:05:30.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:05:38.215 [DEBUG] [Thread-131041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:05:53.265 [DEBUG] [Thread-131042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:05:58.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:05:58.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:05:58.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:06:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 5, 35), 16.71, 34.62, 0.0, 23.32, 25.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:06:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:05:35
2026-02-11T15:06:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:06:01.733 [DEBUG] [Thread-131043] [transport.py] [_log()] starting thread (client mode): 0xa57d6350
2026-02-11T15:06:01.733 [DEBUG] [Thread-131043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:06:01.753 [DEBUG] [Thread-131043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:06:01.753 [INFO] [Thread-131043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:06:01.756 [DEBUG] [Thread-131043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:06:01.756 [DEBUG] [Thread-131043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] client lang: <none>
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] server lang: <none>
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] kex follows: False
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:06:01.757 [DEBUG] [Thread-131043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:06:01.758 [DEBUG] [Thread-131043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:06:01.758 [DEBUG] [Thread-131043] [transport.py] [_log()] Compression: none
2026-02-11T15:06:01.758 [DEBUG] [Thread-131043] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:06:01.776 [DEBUG] [Thread-131043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:06:01.776 [DEBUG] [Thread-131043] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:06:01.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:06:01.777 [DEBUG] [Thread-131043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:06:01.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:06:01.779 [DEBUG] [Thread-131043] [transport.py] [_log()] userauth is OK
2026-02-11T15:06:01.779 [DEBUG] [Thread-131043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:06:01.779 [DEBUG] [Thread-131043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:06:01.779 [DEBUG] [Thread-131043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:06:01.780 [DEBUG] [Thread-131043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:06:01.797 [INFO] [Thread-131043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:06:01.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:06:02.436 [DEBUG] [Thread-131043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:06:02.436 [DEBUG] [Thread-131043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:06:02.437 [DEBUG] [Thread-131043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:06:02.477 [DEBUG] [Thread-131043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:06:02.477 [DEBUG] [Thread-131043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:06:02.481 [DEBUG] [Thread-131043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:06:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:06:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:06:02.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:06:02.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:06:02.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:06:02.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:06:02.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:06:02.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:06:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:06:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.545628 -999.00  +24.20  23.46     42  +10.60 1 2 1 1 1   888    0 14.05 -5.01 ----- 20.4 23.5 288.8 28.5 30.1 -24.6 29.8 -21.1 30.1 -19.7 30.6 -21.4
2026-02-11T15:06:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:06:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:06:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.545628
2026-02-11T15:06:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:06:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:06:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:06:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:06:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:06:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:05:35', tmtdew=16.71, humidity=34.62, cloud=0.0, wind=23.32, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:05:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:06:02.507 [DEBUG] [Thread-131043] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:06:02.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:06:02.602 [DEBUG] [Thread-131046] [transport.py] [_log()] starting thread (client mode): 0xa57422f0
2026-02-11T15:06:02.602 [DEBUG] [Thread-131046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:06:02.621 [DEBUG] [Thread-131046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:06:02.622 [INFO] [Thread-131046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:06:02.629 [DEBUG] [Thread-131046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:06:02.630 [DEBUG] [Thread-131046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:06:02.630 [DEBUG] [Thread-131046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:06:02.630 [DEBUG] [Thread-131046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:02.630 [DEBUG] [Thread-131046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:02.630 [DEBUG] [Thread-131046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:02.630 [DEBUG] [Thread-131046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:02.631 [DEBUG] [Thread-131046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:06:02.631 [DEBUG] [Thread-131046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:06:02.631 [DEBUG] [Thread-131046] [transport.py] [_log()] client lang: <none>
2026-02-11T15:06:02.631 [DEBUG] [Thread-131046] [transport.py] [_log()] server lang: <none>
2026-02-11T15:06:02.631 [DEBUG] [Thread-131046] [transport.py] [_log()] kex follows: False
2026-02-11T15:06:02.631 [DEBUG] [Thread-131046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:06:02.631 [DEBUG] [Thread-131046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:06:02.632 [DEBUG] [Thread-131046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:06:02.632 [DEBUG] [Thread-131046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:06:02.632 [DEBUG] [Thread-131046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:06:02.632 [DEBUG] [Thread-131046] [transport.py] [_log()] Compression: none
2026-02-11T15:06:02.632 [DEBUG] [Thread-131046] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:06:02.690 [DEBUG] [Thread-131046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:06:02.691 [DEBUG] [Thread-131046] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:06:02.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:06:02.692 [DEBUG] [Thread-131046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:06:02.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:06:02.749 [DEBUG] [Thread-131046] [transport.py] [_log()] userauth is OK
2026-02-11T15:06:02.749 [DEBUG] [Thread-131046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:06:02.749 [DEBUG] [Thread-131046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:06:02.749 [DEBUG] [Thread-131046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:06:02.750 [DEBUG] [Thread-131046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:06:02.768 [INFO] [Thread-131046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:06:02.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:06:02.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:06:03.588 [DEBUG] [Thread-131046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:06:03.589 [DEBUG] [Thread-131046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:06:03.638 [DEBUG] [Thread-131046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:06:03.638 [DEBUG] [Thread-131046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:06:03.648 [DEBUG] [Thread-131046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:06:03.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:06:03.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:06:03.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:06:03.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:06:03.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:06:03.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:06:03.686 [DEBUG] [Thread-131046] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:06:08.301 [DEBUG] [Thread-131048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:06:21.241 [DEBUG] [Thread-131049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:06:23.354 [DEBUG] [Thread-131050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:06:30.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:06:30.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:06:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:06:33.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:06:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:06:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 6, 10), 16.24, 35.71, 0.0, 24.0, 24.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:06:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:06:10
2026-02-11T15:06:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:06:36.113 [DEBUG] [Thread-131051] [transport.py] [_log()] starting thread (client mode): 0xa5742470
2026-02-11T15:06:36.114 [DEBUG] [Thread-131051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:06:36.134 [DEBUG] [Thread-131051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:06:36.135 [INFO] [Thread-131051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:06:36.137 [DEBUG] [Thread-131051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:06:36.137 [DEBUG] [Thread-131051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] client lang: <none>
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] server lang: <none>
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] kex follows: False
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] Compression: none
2026-02-11T15:06:36.138 [DEBUG] [Thread-131051] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:06:36.155 [DEBUG] [Thread-131051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:06:36.156 [DEBUG] [Thread-131051] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:06:36.157 [DEBUG] [Thread-131051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:06:36.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:06:36.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:06:36.159 [DEBUG] [Thread-131051] [transport.py] [_log()] userauth is OK
2026-02-11T15:06:36.159 [DEBUG] [Thread-131051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:06:36.159 [DEBUG] [Thread-131051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:06:36.159 [DEBUG] [Thread-131051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:06:36.159 [DEBUG] [Thread-131051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:06:36.176 [INFO] [Thread-131051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:06:36.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:06:36.809 [DEBUG] [Thread-131051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:06:36.809 [DEBUG] [Thread-131051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:06:36.810 [DEBUG] [Thread-131051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:06:36.850 [DEBUG] [Thread-131051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:06:36.851 [DEBUG] [Thread-131051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:06:36.854 [DEBUG] [Thread-131051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:06:36.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:06:36.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:06:36.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:06:36.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:06:36.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:06:36.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:06:36.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:06:36.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:06:36.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:06:36.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.545976 -999.00  +24.10  20.04     43  +10.80 1 2 1 1 1   888    0 13.83 -12.64 ----- 16.2 20.0 288.2 27.6 30.2 -22.2 29.9 -19.9 30.0 -19.1 30.8 -20.0
2026-02-11T15:06:36.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:06:36.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:06:36.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.545976
2026-02-11T15:06:36.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:06:36.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:06:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:06:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:06:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:06:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:06:10', tmtdew=16.24, humidity=35.71, cloud=0.0, wind=24.0, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:06:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:06:36.880 [DEBUG] [Thread-131051] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:06:36.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:06:36.977 [DEBUG] [Thread-131054] [transport.py] [_log()] starting thread (client mode): 0xa5740b50
2026-02-11T15:06:36.977 [DEBUG] [Thread-131054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:06:36.992 [DEBUG] [Thread-131054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:06:36.992 [INFO] [Thread-131054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:06:37.000 [DEBUG] [Thread-131054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:06:37.000 [DEBUG] [Thread-131054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:06:37.000 [DEBUG] [Thread-131054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:06:37.000 [DEBUG] [Thread-131054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:37.000 [DEBUG] [Thread-131054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:06:37.000 [DEBUG] [Thread-131054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] client lang: <none>
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] server lang: <none>
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] kex follows: False
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:06:37.001 [DEBUG] [Thread-131054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:06:37.002 [DEBUG] [Thread-131054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:06:37.002 [DEBUG] [Thread-131054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:06:37.002 [DEBUG] [Thread-131054] [transport.py] [_log()] Compression: none
2026-02-11T15:06:37.002 [DEBUG] [Thread-131054] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:06:37.062 [DEBUG] [Thread-131054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:06:37.062 [DEBUG] [Thread-131054] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:06:37.063 [DEBUG] [Thread-131054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:06:37.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:06:37.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:06:37.124 [DEBUG] [Thread-131054] [transport.py] [_log()] userauth is OK
2026-02-11T15:06:37.124 [DEBUG] [Thread-131054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:06:37.124 [DEBUG] [Thread-131054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:06:37.124 [DEBUG] [Thread-131054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:06:37.125 [DEBUG] [Thread-131054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:06:37.151 [INFO] [Thread-131054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:06:37.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:06:37.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:06:37.960 [DEBUG] [Thread-131054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:06:37.960 [DEBUG] [Thread-131054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:06:38.008 [DEBUG] [Thread-131054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:06:38.008 [DEBUG] [Thread-131054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:06:38.017 [DEBUG] [Thread-131054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:06:38.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:06:38.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:06:38.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:06:38.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:06:38.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:06:38.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:06:38.063 [DEBUG] [Thread-131054] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:06:38.395 [DEBUG] [Thread-131056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:06:53.456 [DEBUG] [Thread-131057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:07:08.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:07:08.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:07:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:07:08.494 [DEBUG] [Thread-131058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:07:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 6, 45), 16.3, 35.36, 0.0, 15.26, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:07:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:06:45
2026-02-11T15:07:10.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:07:10.466 [DEBUG] [Thread-131059] [transport.py] [_log()] starting thread (client mode): 0xa575a3b0
2026-02-11T15:07:10.466 [DEBUG] [Thread-131059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:07:10.486 [DEBUG] [Thread-131059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:07:10.486 [INFO] [Thread-131059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:07:10.489 [DEBUG] [Thread-131059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:07:10.489 [DEBUG] [Thread-131059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:07:10.489 [DEBUG] [Thread-131059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] client lang: <none>
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] server lang: <none>
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] kex follows: False
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:07:10.490 [DEBUG] [Thread-131059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:07:10.491 [DEBUG] [Thread-131059] [transport.py] [_log()] Compression: none
2026-02-11T15:07:10.491 [DEBUG] [Thread-131059] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:07:10.508 [DEBUG] [Thread-131059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:07:10.509 [DEBUG] [Thread-131059] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:07:10.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:07:10.511 [DEBUG] [Thread-131059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:07:10.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:07:10.513 [DEBUG] [Thread-131059] [transport.py] [_log()] userauth is OK
2026-02-11T15:07:10.513 [DEBUG] [Thread-131059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:07:10.513 [DEBUG] [Thread-131059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:07:10.513 [DEBUG] [Thread-131059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:07:10.513 [DEBUG] [Thread-131059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:07:10.531 [INFO] [Thread-131059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:07:10.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:07:11.176 [DEBUG] [Thread-131059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:07:11.176 [DEBUG] [Thread-131059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:07:11.176 [DEBUG] [Thread-131059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:07:11.217 [DEBUG] [Thread-131059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:07:11.217 [DEBUG] [Thread-131059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:07:11.220 [DEBUG] [Thread-131059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:07:11.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:07:11.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:07:11.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:07:11.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:07:11.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:07:11.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:07:11.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:07:11.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:07:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:07:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.546323 -999.00  +24.40  14.31     40  +10.20 1 2 1 1 1   888    0 13.45 -18.78 ----- 16.1 14.3 286.4 20.7 30.3 -22.7 30.0 -21.1 30.2 -20.3 30.9 -20.2
2026-02-11T15:07:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:07:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:07:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.546323
2026-02-11T15:07:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:07:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:07:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:07:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:07:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:07:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:06:45', tmtdew=16.3, humidity=35.36, cloud=0.0, wind=15.26, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:06:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:07:11.248 [DEBUG] [Thread-131059] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:07:11.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:07:11.347 [DEBUG] [Thread-131062] [transport.py] [_log()] starting thread (client mode): 0xa81d78e0
2026-02-11T15:07:11.347 [DEBUG] [Thread-131062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:07:11.361 [DEBUG] [Thread-131062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:07:11.362 [INFO] [Thread-131062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:07:11.370 [DEBUG] [Thread-131062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] client lang: <none>
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] server lang: <none>
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] kex follows: False
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] Compression: none
2026-02-11T15:07:11.371 [DEBUG] [Thread-131062] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:07:11.432 [DEBUG] [Thread-131062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:07:11.432 [DEBUG] [Thread-131062] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:07:11.433 [DEBUG] [Thread-131062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:07:11.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:07:11.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:07:11.489 [DEBUG] [Thread-131062] [transport.py] [_log()] userauth is OK
2026-02-11T15:07:11.489 [DEBUG] [Thread-131062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:07:11.489 [DEBUG] [Thread-131062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:07:11.489 [DEBUG] [Thread-131062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:07:11.489 [DEBUG] [Thread-131062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:07:11.511 [INFO] [Thread-131062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:07:11.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:07:11.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:07:12.339 [DEBUG] [Thread-131062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:07:12.339 [DEBUG] [Thread-131062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:07:12.387 [DEBUG] [Thread-131062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:07:12.387 [DEBUG] [Thread-131062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:07:12.396 [DEBUG] [Thread-131062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:07:12.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:07:12.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:07: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
2026-02-11T15:07:12.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:07:12.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:07:12.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:07:12.430 [DEBUG] [Thread-131062] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:07:21.281 [DEBUG] [Thread-131064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:07:23.527 [DEBUG] [Thread-131065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:07:30.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:07:30.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:07:38.586 [DEBUG] [Thread-131066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:07:42.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:07:42.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:07:42.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:07:44.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 7, 21), 16.46, 35.02, 0.0, 13.73, 24.3, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:07:44.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:07:21
2026-02-11T15:07:45.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:07:45.153 [DEBUG] [Thread-131067] [transport.py] [_log()] starting thread (client mode): 0xa2d57940
2026-02-11T15:07:45.153 [DEBUG] [Thread-131067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:07:45.174 [DEBUG] [Thread-131067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:07:45.174 [INFO] [Thread-131067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:07:45.177 [DEBUG] [Thread-131067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:07:45.177 [DEBUG] [Thread-131067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:07:45.177 [DEBUG] [Thread-131067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:07:45.177 [DEBUG] [Thread-131067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:45.177 [DEBUG] [Thread-131067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:45.177 [DEBUG] [Thread-131067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] client lang: <none>
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] server lang: <none>
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] kex follows: False
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] Compression: none
2026-02-11T15:07:45.178 [DEBUG] [Thread-131067] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:07:45.195 [DEBUG] [Thread-131067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:07:45.195 [DEBUG] [Thread-131067] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:07:45.196 [DEBUG] [Thread-131067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:07:45.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:07:45.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:07:45.198 [DEBUG] [Thread-131067] [transport.py] [_log()] userauth is OK
2026-02-11T15:07:45.198 [DEBUG] [Thread-131067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:07:45.198 [DEBUG] [Thread-131067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:07:45.198 [DEBUG] [Thread-131067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:07:45.198 [DEBUG] [Thread-131067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:07:45.217 [INFO] [Thread-131067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:07:45.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:07:45.881 [DEBUG] [Thread-131067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:07:45.882 [DEBUG] [Thread-131067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:07:45.882 [DEBUG] [Thread-131067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:07:45.922 [DEBUG] [Thread-131067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:07:45.923 [DEBUG] [Thread-131067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:07:45.926 [DEBUG] [Thread-131067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:07:45.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:07:45.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:07:45.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:07:45.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:07:45.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:07:45.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:07:45.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:07:45.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:07:45.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:07:45.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.546670 -999.00  +24.30  28.54     41  +10.20 1 2 1 1 1   888    0 13.64 -23.22 ----- 27.6 28.5 279.2 30.8 30.3 -22.1 29.9 -20.9 30.2 -19.3 31.1 -21.2
2026-02-11T15:07:45.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:07:45.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:07:45.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.546670
2026-02-11T15:07:45.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:07:45.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:07:45.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:07:45.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:07:45.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:07:45.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:07:21', tmtdew=16.46, humidity=35.02, cloud=0.0, wind=13.73, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:07:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:07:45.953 [DEBUG] [Thread-131067] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:07:46.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:07:46.054 [DEBUG] [Thread-131070] [transport.py] [_log()] starting thread (client mode): 0xa57719f0
2026-02-11T15:07:46.054 [DEBUG] [Thread-131070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:07:46.069 [DEBUG] [Thread-131070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:07:46.069 [INFO] [Thread-131070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:07:46.076 [DEBUG] [Thread-131070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:07:46.077 [DEBUG] [Thread-131070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:07:46.077 [DEBUG] [Thread-131070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:07:46.077 [DEBUG] [Thread-131070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] client lang: <none>
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] server lang: <none>
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] kex follows: False
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:07:46.078 [DEBUG] [Thread-131070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:07:46.079 [DEBUG] [Thread-131070] [transport.py] [_log()] Compression: none
2026-02-11T15:07:46.079 [DEBUG] [Thread-131070] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:07:46.137 [DEBUG] [Thread-131070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:07:46.137 [DEBUG] [Thread-131070] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:07:46.138 [DEBUG] [Thread-131070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:07:46.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:07:46.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:07:46.195 [DEBUG] [Thread-131070] [transport.py] [_log()] userauth is OK
2026-02-11T15:07:46.196 [DEBUG] [Thread-131070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:07:46.196 [DEBUG] [Thread-131070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:07:46.196 [DEBUG] [Thread-131070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:07:46.196 [DEBUG] [Thread-131070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:07:46.219 [INFO] [Thread-131070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:07:46.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:07:46.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:07:47.045 [DEBUG] [Thread-131070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:07:47.046 [DEBUG] [Thread-131070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:07:47.093 [DEBUG] [Thread-131070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:07:47.093 [DEBUG] [Thread-131070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:07:47.106 [DEBUG] [Thread-131070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:07:47.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:07: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')
2026-02-11T15:07:47.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:07:47.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:07:47.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:07:47.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:07:47.142 [DEBUG] [Thread-131070] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:07:53.622 [DEBUG] [Thread-131072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:08.674 [DEBUG] [Thread-131073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:08:17.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:08:17.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:08:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 7, 56), 16.6, 34.75, 0.0, 23.72, 24.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:08:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:07:56
2026-02-11T15:08:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:08:19.570 [DEBUG] [Thread-131074] [transport.py] [_log()] starting thread (client mode): 0xa5772c80
2026-02-11T15:08:19.570 [DEBUG] [Thread-131074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:08:19.590 [DEBUG] [Thread-131074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:08:19.591 [INFO] [Thread-131074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] client lang: <none>
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] server lang: <none>
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] kex follows: False
2026-02-11T15:08:19.594 [DEBUG] [Thread-131074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:08:19.595 [DEBUG] [Thread-131074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:08:19.595 [DEBUG] [Thread-131074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:08:19.595 [DEBUG] [Thread-131074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:08:19.595 [DEBUG] [Thread-131074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:08:19.595 [DEBUG] [Thread-131074] [transport.py] [_log()] Compression: none
2026-02-11T15:08:19.595 [DEBUG] [Thread-131074] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:08:19.603 [DEBUG] [Thread-131074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:08:19.604 [DEBUG] [Thread-131074] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:08:19.604 [DEBUG] [Thread-131074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:08:19.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:08:19.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:08:19.606 [DEBUG] [Thread-131074] [transport.py] [_log()] userauth is OK
2026-02-11T15:08:19.606 [DEBUG] [Thread-131074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:08:19.606 [DEBUG] [Thread-131074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:08:19.606 [DEBUG] [Thread-131074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:08:19.606 [DEBUG] [Thread-131074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:08:19.630 [INFO] [Thread-131074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:08:19.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:08:20.326 [DEBUG] [Thread-131074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:08:20.326 [DEBUG] [Thread-131074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:08:20.327 [DEBUG] [Thread-131074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:08:20.367 [DEBUG] [Thread-131074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:08:20.368 [DEBUG] [Thread-131074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:08:20.371 [DEBUG] [Thread-131074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:08:20.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:08:20.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:08:20.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:08:20.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:08:20.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:08:20.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:08:20.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:08:20.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:08:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:08:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.547017 -999.00  +24.30  25.20     41  +10.20 1 2 1 1 1   888    0 13.35 -26.97 ----- 30.1 25.2 283.3 41.3 30.2 -25.2 29.8 -21.7 29.9 -21.2 30.9 -21.2
2026-02-11T15:08:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:08:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:08:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.547017
2026-02-11T15:08:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:08:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:08:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:08:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:08:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:08:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:07:56', tmtdew=16.6, humidity=34.75, cloud=0.0, wind=23.72, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:07:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:08:20.387 [DEBUG] [Thread-131074] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:08:20.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:08:20.471 [DEBUG] [Thread-131077] [transport.py] [_log()] starting thread (client mode): 0xa2d57040
2026-02-11T15:08:20.471 [DEBUG] [Thread-131077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:08:20.490 [DEBUG] [Thread-131077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:08:20.490 [INFO] [Thread-131077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:08:20.497 [DEBUG] [Thread-131077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:08:20.497 [DEBUG] [Thread-131077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:08:20.497 [DEBUG] [Thread-131077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] client lang: <none>
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] server lang: <none>
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] kex follows: False
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] Compression: none
2026-02-11T15:08:20.498 [DEBUG] [Thread-131077] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:08:20.557 [DEBUG] [Thread-131077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:08:20.557 [DEBUG] [Thread-131077] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:08:20.558 [DEBUG] [Thread-131077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:08:20.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:08:20.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:08:20.618 [DEBUG] [Thread-131077] [transport.py] [_log()] userauth is OK
2026-02-11T15:08:20.618 [DEBUG] [Thread-131077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:08:20.619 [DEBUG] [Thread-131077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:08:20.619 [DEBUG] [Thread-131077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:08:20.619 [DEBUG] [Thread-131077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:08:20.638 [INFO] [Thread-131077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:08:20.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:08:20.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:08:21.309 [DEBUG] [Thread-131079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:21.448 [DEBUG] [Thread-131077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:08:21.449 [DEBUG] [Thread-131077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:08:21.496 [DEBUG] [Thread-131077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:08:21.496 [DEBUG] [Thread-131077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:08:21.506 [DEBUG] [Thread-131077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:08:21.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:08:21.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:08:21.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:08:21.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:08:21.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:08:21.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:08:21.542 [DEBUG] [Thread-131077] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:08:23.712 [DEBUG] [Thread-131080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:30.734 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:30.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:38.765 [DEBUG] [Thread-131081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:51.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:08:51.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:08:51.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
2026-02-11T15:08:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 8, 31), 17.09, 33.77, 0.0, 33.45, 25.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:08:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:08:31
2026-02-11T15:08:53.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:08:53.799 [DEBUG] [Thread-131082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:08:53.928 [DEBUG] [Thread-131083] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff10
2026-02-11T15:08:53.928 [DEBUG] [Thread-131083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:08:53.948 [DEBUG] [Thread-131083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:08:53.949 [INFO] [Thread-131083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] client lang: <none>
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] server lang: <none>
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] kex follows: False
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] Compression: none
2026-02-11T15:08:53.952 [DEBUG] [Thread-131083] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:08:53.969 [DEBUG] [Thread-131083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:08:53.970 [DEBUG] [Thread-131083] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:08:53.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:08:53.971 [DEBUG] [Thread-131083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:08:53.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:08:53.973 [DEBUG] [Thread-131083] [transport.py] [_log()] userauth is OK
2026-02-11T15:08:53.973 [DEBUG] [Thread-131083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:08:53.973 [DEBUG] [Thread-131083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:08:53.973 [DEBUG] [Thread-131083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:08:53.973 [DEBUG] [Thread-131083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:08:54.010 [INFO] [Thread-131083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:08:54.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:08:54.637 [DEBUG] [Thread-131083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:08:54.637 [DEBUG] [Thread-131083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:08:54.638 [DEBUG] [Thread-131083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:08:54.678 [DEBUG] [Thread-131083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:08:54.678 [DEBUG] [Thread-131083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:08:54.682 [DEBUG] [Thread-131083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:08:54.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:08:54.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:08:54.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:08:54.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:08:54.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:08:54.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:08:54.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:08:54.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:08:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:08:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.547365 -999.00  +24.40  34.41     40   +9.90 1 2 2 1 1   888    0 13.38 -27.11 ----- 29.8 34.4 286.4 39.9 30.2 -22.6 29.8 -22.2 29.9 -19.9 31.0 -20.7
2026-02-11T15:08:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:08:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:08:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.547365
2026-02-11T15:08:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:08:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:08:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:08:54.707 [DEBUG] [Thread-131083] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:08:54.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:08:54.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:08:54.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:08:31', tmtdew=17.09, humidity=33.77, cloud=0.0, wind=33.45, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:08:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:08:54.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:08:54.803 [DEBUG] [Thread-131086] [transport.py] [_log()] starting thread (client mode): 0xa2db4f10
2026-02-11T15:08:54.803 [DEBUG] [Thread-131086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:08:54.818 [DEBUG] [Thread-131086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:08:54.819 [INFO] [Thread-131086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:08:54.826 [DEBUG] [Thread-131086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:08:54.827 [DEBUG] [Thread-131086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:08:54.827 [DEBUG] [Thread-131086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:08:54.827 [DEBUG] [Thread-131086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:54.827 [DEBUG] [Thread-131086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:08:54.827 [DEBUG] [Thread-131086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:54.827 [DEBUG] [Thread-131086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:08:54.828 [DEBUG] [Thread-131086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:08:54.828 [DEBUG] [Thread-131086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:08:54.828 [DEBUG] [Thread-131086] [transport.py] [_log()] client lang: <none>
2026-02-11T15:08:54.828 [DEBUG] [Thread-131086] [transport.py] [_log()] server lang: <none>
2026-02-11T15:08:54.828 [DEBUG] [Thread-131086] [transport.py] [_log()] kex follows: False
2026-02-11T15:08:54.828 [DEBUG] [Thread-131086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:08:54.828 [DEBUG] [Thread-131086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:08:54.829 [DEBUG] [Thread-131086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:08:54.829 [DEBUG] [Thread-131086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:08:54.829 [DEBUG] [Thread-131086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:08:54.829 [DEBUG] [Thread-131086] [transport.py] [_log()] Compression: none
2026-02-11T15:08:54.829 [DEBUG] [Thread-131086] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:08:54.884 [DEBUG] [Thread-131086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:08:54.885 [DEBUG] [Thread-131086] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:08:54.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:08:54.886 [DEBUG] [Thread-131086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:08:54.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:08:54.941 [DEBUG] [Thread-131086] [transport.py] [_log()] userauth is OK
2026-02-11T15:08:54.941 [DEBUG] [Thread-131086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:08:54.941 [DEBUG] [Thread-131086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:08:54.941 [DEBUG] [Thread-131086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:08:54.941 [DEBUG] [Thread-131086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:08:54.961 [INFO] [Thread-131086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:08:54.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:08:54.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:08:55.785 [DEBUG] [Thread-131086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:08:55.786 [DEBUG] [Thread-131086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:08:55.833 [DEBUG] [Thread-131086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:08:55.834 [DEBUG] [Thread-131086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:08:55.843 [DEBUG] [Thread-131086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:08:55.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:08:55.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:08:55.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:08:55.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:08:55.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:08:55.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:08:55.878 [DEBUG] [Thread-131086] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:09:08.830 [DEBUG] [Thread-131088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:09:21.347 [DEBUG] [Thread-131089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:09:23.879 [DEBUG] [Thread-131090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:09:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:09:25.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:09:25.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:09:27.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 9, 8), 17.0, 33.95, 0.0, 23.79, 24.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:09:27.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:09:08
2026-02-11T15:09:28.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:09:28.480 [DEBUG] [Thread-131091] [transport.py] [_log()] starting thread (client mode): 0xa57719c0
2026-02-11T15:09:28.480 [DEBUG] [Thread-131091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:09:28.499 [DEBUG] [Thread-131091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:09:28.499 [INFO] [Thread-131091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:09:28.502 [DEBUG] [Thread-131091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] client lang: <none>
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] server lang: <none>
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] kex follows: False
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] Compression: none
2026-02-11T15:09:28.503 [DEBUG] [Thread-131091] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:09:28.519 [DEBUG] [Thread-131091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:09:28.519 [DEBUG] [Thread-131091] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:09:28.519 [DEBUG] [Thread-131091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:09:28.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:09:28.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:09:28.520 [DEBUG] [Thread-131091] [transport.py] [_log()] userauth is OK
2026-02-11T15:09:28.521 [DEBUG] [Thread-131091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:09:28.521 [DEBUG] [Thread-131091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:09:28.521 [DEBUG] [Thread-131091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:09:28.521 [DEBUG] [Thread-131091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:09:28.529 [INFO] [Thread-131091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:09:28.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:09:29.157 [DEBUG] [Thread-131091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:09:29.158 [DEBUG] [Thread-131091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:09:29.158 [DEBUG] [Thread-131091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:09:29.198 [DEBUG] [Thread-131091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:09:29.199 [DEBUG] [Thread-131091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:09:29.202 [DEBUG] [Thread-131091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:09:29.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:09:29.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:09:29.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:09:29.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:09:29.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:09:29.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:09:29.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:09:29.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:09:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:09:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.547712 -999.00  +23.90  23.19     41   +9.90 1 1 1 1 1   888    0 13.40 -27.93 ----- 20.7 23.2 292.4 29.4 30.2 -22.0 29.8 -21.3 29.9 -27.5 30.9 -21.5
2026-02-11T15:09:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:09:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:09:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.547712
2026-02-11T15:09:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:09:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:09:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:09:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:09:29.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T15:09:29.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:09:08', tmtdew=17.0, humidity=33.95, cloud=0.0, wind=23.79, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:08:42.317', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:09:29.230 [DEBUG] [Thread-131091] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:09:29.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:09:29.327 [DEBUG] [Thread-131094] [transport.py] [_log()] starting thread (client mode): 0xa2db50f0
2026-02-11T15:09:29.327 [DEBUG] [Thread-131094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:09:29.343 [DEBUG] [Thread-131094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:09:29.343 [INFO] [Thread-131094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:09:29.351 [DEBUG] [Thread-131094] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:09:29.351 [DEBUG] [Thread-131094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:09:29.351 [DEBUG] [Thread-131094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:09:29.351 [DEBUG] [Thread-131094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:09:29.351 [DEBUG] [Thread-131094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] client lang: <none>
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] server lang: <none>
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] kex follows: False
2026-02-11T15:09:29.352 [DEBUG] [Thread-131094] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:09:29.353 [DEBUG] [Thread-131094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:09:29.353 [DEBUG] [Thread-131094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:09:29.353 [DEBUG] [Thread-131094] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:09:29.353 [DEBUG] [Thread-131094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:09:29.353 [DEBUG] [Thread-131094] [transport.py] [_log()] Compression: none
2026-02-11T15:09:29.353 [DEBUG] [Thread-131094] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:09:29.409 [DEBUG] [Thread-131094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:09:29.410 [DEBUG] [Thread-131094] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:09:29.411 [DEBUG] [Thread-131094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:09:29.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:09:29.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:09:29.468 [DEBUG] [Thread-131094] [transport.py] [_log()] userauth is OK
2026-02-11T15:09:29.469 [DEBUG] [Thread-131094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:09:29.469 [DEBUG] [Thread-131094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:09:29.469 [DEBUG] [Thread-131094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:09:29.469 [DEBUG] [Thread-131094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:09:29.488 [INFO] [Thread-131094] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:09:29.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:09:29.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:09:30.331 [DEBUG] [Thread-131094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:09:30.331 [DEBUG] [Thread-131094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:09:30.379 [DEBUG] [Thread-131094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:09:30.380 [DEBUG] [Thread-131094] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:09:30.389 [DEBUG] [Thread-131094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:09:30.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:09:30.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:09:30.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:09:30.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:09:30.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:09:30.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:09:30.429 [DEBUG] [Thread-131094] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:09:30.877 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:09:30.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:09:38.916 [DEBUG] [Thread-131096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:09:53.971 [DEBUG] [Thread-131097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:00.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:10:00.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:10:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:10:02.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 9, 44), 17.1, 33.86, 0.0, 24.3, 25.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:10:02.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:09:44
2026-02-11T15:10:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:10:03.207 [DEBUG] [Thread-131098] [transport.py] [_log()] starting thread (client mode): 0xa2db4250
2026-02-11T15:10:03.207 [DEBUG] [Thread-131098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:10:03.228 [DEBUG] [Thread-131098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:10:03.228 [INFO] [Thread-131098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:10:03.231 [DEBUG] [Thread-131098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:10:03.231 [DEBUG] [Thread-131098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:10:03.231 [DEBUG] [Thread-131098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:10:03.231 [DEBUG] [Thread-131098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:10:03.231 [DEBUG] [Thread-131098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:10:03.231 [DEBUG] [Thread-131098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] client lang: <none>
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] server lang: <none>
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] kex follows: False
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] Compression: none
2026-02-11T15:10:03.232 [DEBUG] [Thread-131098] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:10:03.240 [DEBUG] [Thread-131098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:10:03.240 [DEBUG] [Thread-131098] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:10:03.241 [DEBUG] [Thread-131098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:10:03.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:10:03.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:10:03.242 [DEBUG] [Thread-131098] [transport.py] [_log()] userauth is OK
2026-02-11T15:10:03.242 [DEBUG] [Thread-131098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:10:03.242 [DEBUG] [Thread-131098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:10:03.243 [DEBUG] [Thread-131098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:10:03.243 [DEBUG] [Thread-131098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:10:03.261 [INFO] [Thread-131098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:10:03.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:10:04.030 [DEBUG] [Thread-131098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:10:04.030 [DEBUG] [Thread-131098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:10:04.031 [DEBUG] [Thread-131098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:10:04.072 [DEBUG] [Thread-131098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:10:04.072 [DEBUG] [Thread-131098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:10:04.076 [DEBUG] [Thread-131098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:10:04.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:10:04.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:10:04.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:10:04.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:10:04.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:10:04.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:10:04.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:10:04.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:10:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:10:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.548059 -999.00  +24.20  14.75     41  +10.30 1 2 1 1 1   888    0 13.05 -31.65 ----- 19.2 14.8 285.4 27.8 30.2 -21.5 29.9 -20.7 30.1 -21.5 30.9 -20.4
2026-02-11T15:10:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:10:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:10:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.548059
2026-02-11T15:10:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:10:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:10:04.102 [DEBUG] [Thread-131098] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:10:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:10:04.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:10:04.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:10:04.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:09:44', tmtdew=17.1, humidity=33.86, cloud=0.0, wind=24.3, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:09:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:10:04.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:10:09.008 [DEBUG] [Thread-131101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:21.383 [DEBUG] [Thread-131102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:24.060 [DEBUG] [Thread-131103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:31.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:31.020 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:39.098 [DEBUG] [Thread-131105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:54.135 [DEBUG] [Thread-131106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:10:56.640 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:09.173 [DEBUG] [Thread-131107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:21.420 [DEBUG] [Thread-131108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:24.213 [DEBUG] [Thread-131109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:31.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:31.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:37.194 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:39.247 [DEBUG] [Thread-131110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:11:54.286 [DEBUG] [Thread-131111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:09.322 [DEBUG] [Thread-131112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:19.256 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T15:12:21.475 [DEBUG] [Thread-131113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:24.365 [DEBUG] [Thread-131114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:31.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:31.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:38.544 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:39.401 [DEBUG] [Thread-131115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:12:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:12:49.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:12:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:12:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 12, 42), 18.87, 30.25, 0.0, 20.85, 26.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:12:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:12:42
2026-02-11T15:12:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:12:51.793 [DEBUG] [Thread-131116] [transport.py] [_log()] starting thread (client mode): 0xa5770430
2026-02-11T15:12:51.794 [DEBUG] [Thread-131116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:12:51.815 [DEBUG] [Thread-131116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:12:51.815 [INFO] [Thread-131116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] client lang: <none>
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] server lang: <none>
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] kex follows: False
2026-02-11T15:12:51.818 [DEBUG] [Thread-131116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:12:51.819 [DEBUG] [Thread-131116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:12:51.819 [DEBUG] [Thread-131116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:12:51.819 [DEBUG] [Thread-131116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:12:51.819 [DEBUG] [Thread-131116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:12:51.819 [DEBUG] [Thread-131116] [transport.py] [_log()] Compression: none
2026-02-11T15:12:51.819 [DEBUG] [Thread-131116] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:12:51.836 [DEBUG] [Thread-131116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:12:51.837 [DEBUG] [Thread-131116] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:12:51.837 [DEBUG] [Thread-131116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:12:51.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:12:51.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:12:51.839 [DEBUG] [Thread-131116] [transport.py] [_log()] userauth is OK
2026-02-11T15:12:51.839 [DEBUG] [Thread-131116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:12:51.839 [DEBUG] [Thread-131116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:12:51.839 [DEBUG] [Thread-131116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:12:51.840 [DEBUG] [Thread-131116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:12:51.861 [INFO] [Thread-131116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:12:51.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:12:52.502 [DEBUG] [Thread-131116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:12:52.502 [DEBUG] [Thread-131116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:12:52.502 [DEBUG] [Thread-131116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:12:52.543 [DEBUG] [Thread-131116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:12:52.543 [DEBUG] [Thread-131116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:12:52.546 [DEBUG] [Thread-131116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:12:52.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:12:52.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:12:52.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:12:52.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:12:52.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:12:52.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:12:52.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:12:52.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:12:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:12:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.550142 -999.00  +24.40  16.48     39   +9.70 1 2 1 1 1   888    0 13.55 -20.04 ----- 16.8 16.5 319.0 25.9 30.5 -22.6 30.1 -20.8 30.5 -20.2 31.3 -20.8
2026-02-11T15:12:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:12:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:12:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.550142
2026-02-11T15:12:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:12:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:12:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:12:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:12:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:12:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:12:42', tmtdew=18.87, humidity=30.25, cloud=0.0, wind=20.85, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:12:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:12:52.574 [DEBUG] [Thread-131116] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:12:52.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:12:52.670 [DEBUG] [Thread-131119] [transport.py] [_log()] starting thread (client mode): 0xa2d6e740
2026-02-11T15:12:52.670 [DEBUG] [Thread-131119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:12:52.685 [DEBUG] [Thread-131119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:12:52.685 [INFO] [Thread-131119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:12:52.693 [DEBUG] [Thread-131119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:12:52.693 [DEBUG] [Thread-131119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:12:52.693 [DEBUG] [Thread-131119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:12:52.693 [DEBUG] [Thread-131119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] client lang: <none>
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] server lang: <none>
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] kex follows: False
2026-02-11T15:12:52.694 [DEBUG] [Thread-131119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:12:52.695 [DEBUG] [Thread-131119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:12:52.695 [DEBUG] [Thread-131119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:12:52.695 [DEBUG] [Thread-131119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:12:52.695 [DEBUG] [Thread-131119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:12:52.695 [DEBUG] [Thread-131119] [transport.py] [_log()] Compression: none
2026-02-11T15:12:52.696 [DEBUG] [Thread-131119] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:12:52.752 [DEBUG] [Thread-131119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:12:52.753 [DEBUG] [Thread-131119] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:12:52.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:12:52.754 [DEBUG] [Thread-131119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:12:52.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:12:52.809 [DEBUG] [Thread-131119] [transport.py] [_log()] userauth is OK
2026-02-11T15:12:52.809 [DEBUG] [Thread-131119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:12:52.809 [DEBUG] [Thread-131119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:12:52.809 [DEBUG] [Thread-131119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:12:52.809 [DEBUG] [Thread-131119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:12:52.836 [INFO] [Thread-131119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:12:52.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:12:52.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:12:53.681 [DEBUG] [Thread-131119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:12:53.681 [DEBUG] [Thread-131119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:12:53.730 [DEBUG] [Thread-131119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:12:53.730 [DEBUG] [Thread-131119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:12:53.739 [DEBUG] [Thread-131119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:12:53.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:12:53.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:12:53.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:12:53.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:12:53.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:12:53.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:12:53.776 [DEBUG] [Thread-131119] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:12:54.440 [DEBUG] [Thread-131121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:03.110 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:09.494 [DEBUG] [Thread-131122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:21.529 [DEBUG] [Thread-131123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:13:23.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:13:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:13:24.531 [DEBUG] [Thread-131124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:25.593 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:26.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 12, 42), 18.87, 30.25, 0.0, 20.85, 26.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:13:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:12:42
2026-02-11T15:13:26.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:13:26.679 [DEBUG] [Thread-131125] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff10
2026-02-11T15:13:26.679 [DEBUG] [Thread-131125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:13:26.697 [DEBUG] [Thread-131125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:13:26.697 [INFO] [Thread-131125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] client lang: <none>
2026-02-11T15:13:26.700 [DEBUG] [Thread-131125] [transport.py] [_log()] server lang: <none>
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] kex follows: False
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] Compression: none
2026-02-11T15:13:26.701 [DEBUG] [Thread-131125] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:13:26.713 [DEBUG] [Thread-131125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:13:26.714 [DEBUG] [Thread-131125] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:13:26.714 [DEBUG] [Thread-131125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:13:26.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:13:26.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:13:26.716 [DEBUG] [Thread-131125] [transport.py] [_log()] userauth is OK
2026-02-11T15:13:26.716 [DEBUG] [Thread-131125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:13:26.716 [DEBUG] [Thread-131125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:13:26.716 [DEBUG] [Thread-131125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:13:26.716 [DEBUG] [Thread-131125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:13:26.740 [INFO] [Thread-131125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:13:26.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:13:27.382 [DEBUG] [Thread-131125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:13:27.382 [DEBUG] [Thread-131125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:13:27.382 [DEBUG] [Thread-131125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:13:27.423 [DEBUG] [Thread-131125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:13:27.424 [DEBUG] [Thread-131125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:13:27.427 [DEBUG] [Thread-131125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:13:27.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:13:27.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:13:27.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:13:27.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:13:27.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:13:27.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:13:27.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:13:27.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:13:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:13:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.550489 -999.00  +24.60  16.85     39  +10.00 1 2 1 1 1   888    0 13.68 -19.21 ----- 22.2 16.9 313.2 22.0 30.6 -22.6 30.2 -20.2 30.7 -19.2 31.4 -20.8
2026-02-11T15:13:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:13:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:13:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.550489
2026-02-11T15:13:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:13:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:13:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:13:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:13:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:13:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:12:42', tmtdew=18.87, humidity=30.25, cloud=0.0, wind=20.85, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:12:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:13:27.455 [DEBUG] [Thread-131125] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:13:27.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:13:27.550 [DEBUG] [Thread-131128] [transport.py] [_log()] starting thread (client mode): 0xa5771840
2026-02-11T15:13:27.551 [DEBUG] [Thread-131128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:13:27.565 [DEBUG] [Thread-131128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:13:27.566 [INFO] [Thread-131128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:13:27.574 [DEBUG] [Thread-131128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:13:27.575 [DEBUG] [Thread-131128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:13:27.575 [DEBUG] [Thread-131128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:13:27.575 [DEBUG] [Thread-131128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:13:27.575 [DEBUG] [Thread-131128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:13:27.575 [DEBUG] [Thread-131128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:13:27.575 [DEBUG] [Thread-131128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:13:27.575 [DEBUG] [Thread-131128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] client lang: <none>
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] server lang: <none>
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] kex follows: False
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:13:27.576 [DEBUG] [Thread-131128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:13:27.577 [DEBUG] [Thread-131128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:13:27.577 [DEBUG] [Thread-131128] [transport.py] [_log()] Compression: none
2026-02-11T15:13:27.577 [DEBUG] [Thread-131128] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:13:27.638 [DEBUG] [Thread-131128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:13:27.639 [DEBUG] [Thread-131128] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:13:27.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:13:27.640 [DEBUG] [Thread-131128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:13:27.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:13:27.697 [DEBUG] [Thread-131128] [transport.py] [_log()] userauth is OK
2026-02-11T15:13:27.698 [DEBUG] [Thread-131128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:13:27.698 [DEBUG] [Thread-131128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:13:27.698 [DEBUG] [Thread-131128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:13:27.698 [DEBUG] [Thread-131128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:13:27.716 [INFO] [Thread-131128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:13:27.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:13:27.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:13:28.552 [DEBUG] [Thread-131128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:13:28.552 [DEBUG] [Thread-131128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:13:28.599 [DEBUG] [Thread-131128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:13:28.599 [DEBUG] [Thread-131128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:13:28.608 [DEBUG] [Thread-131128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:13:28.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:13:28.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:13:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:13:28.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:13:28.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:13:28.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:13:28.642 [DEBUG] [Thread-131128] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:13:31.458 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:31.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:39.567 [DEBUG] [Thread-131130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:48.225 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:54.626 [DEBUG] [Thread-131131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:13:58.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:13:58.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:13:58.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:14:00.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 13, 17), 17.26, 33.44, 0.0, 19.43, 24.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:14:00.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:13:17
2026-02-11T15:14:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:14:01.378 [DEBUG] [Thread-131132] [transport.py] [_log()] starting thread (client mode): 0xa5770640
2026-02-11T15:14:01.378 [DEBUG] [Thread-131132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:14:01.397 [DEBUG] [Thread-131132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:14:01.398 [INFO] [Thread-131132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:14:01.401 [DEBUG] [Thread-131132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:14:01.401 [DEBUG] [Thread-131132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:14:01.401 [DEBUG] [Thread-131132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:14:01.401 [DEBUG] [Thread-131132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:01.401 [DEBUG] [Thread-131132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:01.401 [DEBUG] [Thread-131132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:01.401 [DEBUG] [Thread-131132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] client lang: <none>
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] server lang: <none>
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] kex follows: False
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] Compression: none
2026-02-11T15:14:01.402 [DEBUG] [Thread-131132] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:14:01.421 [DEBUG] [Thread-131132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:14:01.422 [DEBUG] [Thread-131132] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:14:01.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:14:01.423 [DEBUG] [Thread-131132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:14:01.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:14:01.425 [DEBUG] [Thread-131132] [transport.py] [_log()] userauth is OK
2026-02-11T15:14:01.426 [DEBUG] [Thread-131132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:14:01.426 [DEBUG] [Thread-131132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:14:01.426 [DEBUG] [Thread-131132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:14:01.426 [DEBUG] [Thread-131132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:14:01.447 [INFO] [Thread-131132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:14:01.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:14:02.071 [DEBUG] [Thread-131132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:14:02.071 [DEBUG] [Thread-131132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:14:02.071 [DEBUG] [Thread-131132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:14:02.113 [DEBUG] [Thread-131132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:14:02.113 [DEBUG] [Thread-131132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:14:02.116 [DEBUG] [Thread-131132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:14:02.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:14:02.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:14:02.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:14:02.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:14:02.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:14:02.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:14:02.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:14:02.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:14:02.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:14:02.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.550837 -999.00  +24.70  17.95     39  +10.10 1 2 1 1 1   888    0 13.84 -16.68 ----- 16.9 17.9 296.6 28.8 30.6 -23.4 30.2 -21.3 30.8 -21.6 31.4 -21.1
2026-02-11T15:14:02.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:14:02.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:14:02.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.550837
2026-02-11T15:14:02.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:14:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:14:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:14:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:14:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:14:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:13:17', tmtdew=17.26, humidity=33.44, cloud=0.0, wind=19.43, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:13:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:14:02.141 [DEBUG] [Thread-131132] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:14:02.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:14:02.236 [DEBUG] [Thread-131135] [transport.py] [_log()] starting thread (client mode): 0xa2db7640
2026-02-11T15:14:02.236 [DEBUG] [Thread-131135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:14:02.252 [DEBUG] [Thread-131135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:14:02.252 [INFO] [Thread-131135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:14:02.259 [DEBUG] [Thread-131135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:14:02.259 [DEBUG] [Thread-131135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] client lang: <none>
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] server lang: <none>
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] kex follows: False
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] Compression: none
2026-02-11T15:14:02.260 [DEBUG] [Thread-131135] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:14:02.318 [DEBUG] [Thread-131135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:14:02.318 [DEBUG] [Thread-131135] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:14:02.319 [DEBUG] [Thread-131135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:14:02.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:14:02.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:14:02.378 [DEBUG] [Thread-131135] [transport.py] [_log()] userauth is OK
2026-02-11T15:14:02.378 [DEBUG] [Thread-131135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:14:02.378 [DEBUG] [Thread-131135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:14:02.379 [DEBUG] [Thread-131135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:14:02.379 [DEBUG] [Thread-131135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:14:02.398 [INFO] [Thread-131135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:14:02.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:14:02.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:14:03.226 [DEBUG] [Thread-131135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:14:03.227 [DEBUG] [Thread-131135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:14:03.275 [DEBUG] [Thread-131135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:14:03.275 [DEBUG] [Thread-131135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:14:03.284 [DEBUG] [Thread-131135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:14:03.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:14:03.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')
2026-02-11T15:14:03.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:14:03.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:14:03.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:14:03.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:14:03.318 [DEBUG] [Thread-131135] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:14:09.665 [DEBUG] [Thread-131137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:10.885 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:21.570 [DEBUG] [Thread-131138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:24.726 [DEBUG] [Thread-131139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:31.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:31.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:33.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:14:33.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:14:33.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:14:33.477 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:35.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 13, 54), 17.37, 33.06, 0.0, 19.22, 25.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:14:35.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:13:54
2026-02-11T15:14:36.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:14:36.421 [DEBUG] [Thread-131140] [transport.py] [_log()] starting thread (client mode): 0xa5771330
2026-02-11T15:14:36.421 [DEBUG] [Thread-131140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:14:36.433 [DEBUG] [Thread-131140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:14:36.433 [INFO] [Thread-131140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] client lang: <none>
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] server lang: <none>
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] kex follows: False
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] Compression: none
2026-02-11T15:14:36.434 [DEBUG] [Thread-131140] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:14:36.441 [DEBUG] [Thread-131140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:14:36.442 [DEBUG] [Thread-131140] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:14:36.442 [DEBUG] [Thread-131140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:14:36.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:14:36.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:14:36.443 [DEBUG] [Thread-131140] [transport.py] [_log()] userauth is OK
2026-02-11T15:14:36.443 [DEBUG] [Thread-131140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:14:36.443 [DEBUG] [Thread-131140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:14:36.443 [DEBUG] [Thread-131140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:14:36.443 [DEBUG] [Thread-131140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:14:36.454 [INFO] [Thread-131140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:14:36.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:14:37.078 [DEBUG] [Thread-131140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:14:37.078 [DEBUG] [Thread-131140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:14:37.078 [DEBUG] [Thread-131140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:14:37.119 [DEBUG] [Thread-131140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:14:37.119 [DEBUG] [Thread-131140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:14:37.122 [DEBUG] [Thread-131140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:14:37.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:14:37.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:14:37.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:14:37.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:14:37.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:14:37.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:14:37.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:14:37.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:14:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:14:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.551531 -999.00  +24.50  28.16     41  +10.50 1 2 1 1 1   888    0 14.11 -11.30 ----- 29.0 28.2 290.2 36.6 30.7 -23.0 30.3 -21.3 30.7 -20.2 31.6 -20.6
2026-02-11T15:14:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:14:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:14:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.551531
2026-02-11T15:14:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:14:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:14:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:14:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:14:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:14:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:13:54', tmtdew=17.37, humidity=33.06, cloud=0.0, wind=19.22, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:14:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:14:37.149 [DEBUG] [Thread-131140] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:14:37.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:14:37.243 [DEBUG] [Thread-131143] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff10
2026-02-11T15:14:37.243 [DEBUG] [Thread-131143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:14:37.258 [DEBUG] [Thread-131143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:14:37.258 [INFO] [Thread-131143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] client lang: <none>
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] server lang: <none>
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] kex follows: False
2026-02-11T15:14:37.266 [DEBUG] [Thread-131143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:14:37.267 [DEBUG] [Thread-131143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:14:37.267 [DEBUG] [Thread-131143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:14:37.267 [DEBUG] [Thread-131143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:14:37.267 [DEBUG] [Thread-131143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:14:37.267 [DEBUG] [Thread-131143] [transport.py] [_log()] Compression: none
2026-02-11T15:14:37.267 [DEBUG] [Thread-131143] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:14:37.325 [DEBUG] [Thread-131143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:14:37.326 [DEBUG] [Thread-131143] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:14:37.326 [DEBUG] [Thread-131143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:14:37.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:14:37.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:14:37.381 [DEBUG] [Thread-131143] [transport.py] [_log()] userauth is OK
2026-02-11T15:14:37.382 [DEBUG] [Thread-131143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:14:37.382 [DEBUG] [Thread-131143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:14:37.382 [DEBUG] [Thread-131143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:14:37.382 [DEBUG] [Thread-131143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:14:37.400 [INFO] [Thread-131143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:14:37.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:14:37.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:14:38.225 [DEBUG] [Thread-131143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:14:38.225 [DEBUG] [Thread-131143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:14:38.273 [DEBUG] [Thread-131143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:14:38.273 [DEBUG] [Thread-131143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:14:38.282 [DEBUG] [Thread-131143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:14:38.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:14:38.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:14:38.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:14:38.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:14:38.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:14:38.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:14:38.320 [DEBUG] [Thread-131143] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:14:39.766 [DEBUG] [Thread-131145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:54.811 [DEBUG] [Thread-131146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:14:56.106 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:15:08.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:15:08.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:15:09.848 [DEBUG] [Thread-131147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 14, 30), 17.12, 33.56, 0.0, 21.37, 25.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:15:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:14:30
2026-02-11T15:15:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:15:10.993 [DEBUG] [Thread-131148] [transport.py] [_log()] starting thread (client mode): 0xa2db5150
2026-02-11T15:15:10.993 [DEBUG] [Thread-131148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:15:11.008 [DEBUG] [Thread-131148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:15:11.008 [INFO] [Thread-131148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:15:11.010 [DEBUG] [Thread-131148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:15:11.010 [DEBUG] [Thread-131148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:15:11.010 [DEBUG] [Thread-131148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] client lang: <none>
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] server lang: <none>
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] kex follows: False
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] Compression: none
2026-02-11T15:15:11.011 [DEBUG] [Thread-131148] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:15:11.024 [DEBUG] [Thread-131148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:15:11.024 [DEBUG] [Thread-131148] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:15:11.024 [DEBUG] [Thread-131148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:15:11.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:15:11.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:15:11.026 [DEBUG] [Thread-131148] [transport.py] [_log()] userauth is OK
2026-02-11T15:15:11.026 [DEBUG] [Thread-131148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:15:11.026 [DEBUG] [Thread-131148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:15:11.026 [DEBUG] [Thread-131148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:15:11.026 [DEBUG] [Thread-131148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:15:11.046 [INFO] [Thread-131148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:15:11.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:15:11.641 [DEBUG] [Thread-131148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:15:11.641 [DEBUG] [Thread-131148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:15:11.642 [DEBUG] [Thread-131148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:15:11.682 [DEBUG] [Thread-131148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:15:11.682 [DEBUG] [Thread-131148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:15:11.685 [DEBUG] [Thread-131148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:15:11.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:15:11.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:15:11.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:15:11.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:15:11.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:15:11.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:15:11.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:15:11.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:15:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:15:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.551878 -999.00  +25.00  29.82     40  +10.60 1 2 1 1 1   888    0 14.30 -7.77 ----- 29.7 29.8 296.8 35.3 30.7 -22.3 30.2 -21.0 30.8 -18.8 31.5 -21.7
2026-02-11T15:15:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:15:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:15:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.551878
2026-02-11T15:15:11.712 [DEBUG] [Thread-131148] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:15:11.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:15:11.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:15:11.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:15:11.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:15:11.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:15:11.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:14:30', tmtdew=17.12, humidity=33.56, cloud=0.0, wind=21.37, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:14:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:15:11.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:15:11.820 [DEBUG] [Thread-131151] [transport.py] [_log()] starting thread (client mode): 0xa2db50f0
2026-02-11T15:15:11.820 [DEBUG] [Thread-131151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:15:11.836 [DEBUG] [Thread-131151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:15:11.836 [INFO] [Thread-131151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:15:11.844 [DEBUG] [Thread-131151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:15:11.844 [DEBUG] [Thread-131151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:15:11.844 [DEBUG] [Thread-131151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:15:11.844 [DEBUG] [Thread-131151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:11.844 [DEBUG] [Thread-131151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] client lang: <none>
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] server lang: <none>
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] kex follows: False
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] Compression: none
2026-02-11T15:15:11.845 [DEBUG] [Thread-131151] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:15:11.904 [DEBUG] [Thread-131151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:15:11.905 [DEBUG] [Thread-131151] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:15:11.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:15:11.906 [DEBUG] [Thread-131151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:15:11.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:15:11.965 [DEBUG] [Thread-131151] [transport.py] [_log()] userauth is OK
2026-02-11T15:15:11.965 [DEBUG] [Thread-131151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:15:11.965 [DEBUG] [Thread-131151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:15:11.965 [DEBUG] [Thread-131151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:15:11.965 [DEBUG] [Thread-131151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:15:11.985 [INFO] [Thread-131151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:15:11.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:15:11.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:15:12.807 [DEBUG] [Thread-131151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:15:12.807 [DEBUG] [Thread-131151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:15:12.857 [DEBUG] [Thread-131151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:15:12.858 [DEBUG] [Thread-131151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:15:12.871 [DEBUG] [Thread-131151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:15:12.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:15:12.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:15:12.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:15:12.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:15:12.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:15:12.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:15:12.916 [DEBUG] [Thread-131151] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:15:18.741 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:21.605 [DEBUG] [Thread-131153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:24.882 [DEBUG] [Thread-131154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:31.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:31.755 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:39.944 [DEBUG] [Thread-131155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:41.351 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:15:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:15:42.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:15:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:15:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 15, 6), 16.85, 34.1, 0.0, 24.01, 24.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:15:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:15:06
2026-02-11T15:15:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:15:45.530 [DEBUG] [Thread-131156] [transport.py] [_log()] starting thread (client mode): 0xa2d13b50
2026-02-11T15:15:45.531 [DEBUG] [Thread-131156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:15:45.551 [DEBUG] [Thread-131156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:15:45.551 [INFO] [Thread-131156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:45.552 [DEBUG] [Thread-131156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] client lang: <none>
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] server lang: <none>
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] kex follows: False
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] Compression: none
2026-02-11T15:15:45.553 [DEBUG] [Thread-131156] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:15:45.562 [DEBUG] [Thread-131156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:15:45.562 [DEBUG] [Thread-131156] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:15:45.562 [DEBUG] [Thread-131156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:15:45.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:15:45.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:15:45.564 [DEBUG] [Thread-131156] [transport.py] [_log()] userauth is OK
2026-02-11T15:15:45.564 [DEBUG] [Thread-131156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:15:45.564 [DEBUG] [Thread-131156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:15:45.564 [DEBUG] [Thread-131156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:15:45.564 [DEBUG] [Thread-131156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:15:45.587 [INFO] [Thread-131156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:15:45.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:15:46.240 [DEBUG] [Thread-131156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:15:46.240 [DEBUG] [Thread-131156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:15:46.241 [DEBUG] [Thread-131156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:15:46.282 [DEBUG] [Thread-131156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:15:46.282 [DEBUG] [Thread-131156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:15:46.284 [DEBUG] [Thread-131156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:15:46.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:15:46.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:15:46.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:15:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:15:46.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:15:46.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:15:46.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:15:46.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:15:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:15:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.552226 -999.00  +24.80  26.83     40  +10.50 1 2 1 1 1   888    0 13.76 -4.22 ----- 28.0 26.8 295.4 35.3 30.7 -22.2 30.2 -20.6 30.6 -19.2 31.6 -20.5
2026-02-11T15:15:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:15:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:15:46.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.552226
2026-02-11T15:15:46.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:15:46.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:15:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:15:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:15:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:15:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:15:06', tmtdew=16.85, humidity=34.1, cloud=0.0, wind=24.01, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:15:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:15:46.307 [DEBUG] [Thread-131156] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:15:46.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:15:46.404 [DEBUG] [Thread-131159] [transport.py] [_log()] starting thread (client mode): 0xa2d01f00
2026-02-11T15:15:46.404 [DEBUG] [Thread-131159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:15:46.419 [DEBUG] [Thread-131159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:15:46.419 [INFO] [Thread-131159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:15:46.429 [DEBUG] [Thread-131159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:15:46.429 [DEBUG] [Thread-131159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:15:46.429 [DEBUG] [Thread-131159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] client lang: <none>
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] server lang: <none>
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] kex follows: False
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] Compression: none
2026-02-11T15:15:46.430 [DEBUG] [Thread-131159] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:15:46.484 [DEBUG] [Thread-131159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:15:46.484 [DEBUG] [Thread-131159] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:15:46.485 [DEBUG] [Thread-131159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:15:46.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:15:46.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:15:46.540 [DEBUG] [Thread-131159] [transport.py] [_log()] userauth is OK
2026-02-11T15:15:46.540 [DEBUG] [Thread-131159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:15:46.540 [DEBUG] [Thread-131159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:15:46.541 [DEBUG] [Thread-131159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:15:46.541 [DEBUG] [Thread-131159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:15:46.559 [INFO] [Thread-131159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:15:46.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:15:46.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:15:47.470 [DEBUG] [Thread-131159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:15:47.470 [DEBUG] [Thread-131159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:15:47.518 [DEBUG] [Thread-131159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:15:47.518 [DEBUG] [Thread-131159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:15:47.527 [DEBUG] [Thread-131159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:15:47.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:15:47.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:15:47.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:15:47.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:15:47.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:15:47.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:15:47.559 [DEBUG] [Thread-131159] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:15:54.978 [DEBUG] [Thread-131161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:03.923 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:10.040 [DEBUG] [Thread-131162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:16:17.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:16:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:16:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 15, 42), 17.1, 33.7, 0.0, 33.86, 25.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:16:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:15:42
2026-02-11T15:16:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:16:20.064 [DEBUG] [Thread-131163] [transport.py] [_log()] starting thread (client mode): 0xa2d55180
2026-02-11T15:16:20.064 [DEBUG] [Thread-131163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:16:20.084 [DEBUG] [Thread-131163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:16:20.085 [INFO] [Thread-131163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:16:20.086 [DEBUG] [Thread-131163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:16:20.086 [DEBUG] [Thread-131163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] client lang: <none>
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] server lang: <none>
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] kex follows: False
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:16:20.087 [DEBUG] [Thread-131163] [transport.py] [_log()] Compression: none
2026-02-11T15:16:20.088 [DEBUG] [Thread-131163] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:16:20.104 [DEBUG] [Thread-131163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:16:20.105 [DEBUG] [Thread-131163] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:16:20.105 [DEBUG] [Thread-131163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:16:20.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:16:20.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:16:20.108 [DEBUG] [Thread-131163] [transport.py] [_log()] userauth is OK
2026-02-11T15:16:20.108 [DEBUG] [Thread-131163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:16:20.108 [DEBUG] [Thread-131163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:16:20.108 [DEBUG] [Thread-131163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:16:20.108 [DEBUG] [Thread-131163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:16:20.126 [INFO] [Thread-131163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:16:20.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:16:20.776 [DEBUG] [Thread-131163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:16:20.777 [DEBUG] [Thread-131163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:16:20.777 [DEBUG] [Thread-131163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:16:20.817 [DEBUG] [Thread-131163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:16:20.817 [DEBUG] [Thread-131163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:16:20.820 [DEBUG] [Thread-131163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:16:20.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:16:20.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:16:20.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:16:20.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:16:20.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:16:20.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:16:20.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:16:20.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:16:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:16:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.552920 -999.00  +25.80  32.13     38  +10.70 1 2 2 1 1   888    0 14.38 2.37 ----- 28.6 32.1 312.0 37.1 30.9 -21.3 30.5 -20.4 30.9 -19.7 31.8 -20.9
2026-02-11T15:16:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:16:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:16:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.552920
2026-02-11T15:16:20.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:16:20.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:16:20.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:16:20.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:16:20.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:16:20.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:15:42', tmtdew=17.1, humidity=33.7, cloud=0.0, wind=33.86, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:16:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:16:20.848 [DEBUG] [Thread-131163] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:16:20.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:16:20.942 [DEBUG] [Thread-131166] [transport.py] [_log()] starting thread (client mode): 0xa2d55510
2026-02-11T15:16:20.942 [DEBUG] [Thread-131166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:16:20.957 [DEBUG] [Thread-131166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:16:20.957 [INFO] [Thread-131166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:16:20.965 [DEBUG] [Thread-131166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:16:20.965 [DEBUG] [Thread-131166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:16:20.965 [DEBUG] [Thread-131166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:16:20.965 [DEBUG] [Thread-131166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:20.965 [DEBUG] [Thread-131166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] client lang: <none>
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] server lang: <none>
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] kex follows: False
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:16:20.966 [DEBUG] [Thread-131166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:16:20.967 [DEBUG] [Thread-131166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:16:20.967 [DEBUG] [Thread-131166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:16:20.967 [DEBUG] [Thread-131166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:16:20.967 [DEBUG] [Thread-131166] [transport.py] [_log()] Compression: none
2026-02-11T15:16:20.967 [DEBUG] [Thread-131166] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:16:21.025 [DEBUG] [Thread-131166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:16:21.026 [DEBUG] [Thread-131166] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:16:21.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:16:21.027 [DEBUG] [Thread-131166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:16:21.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:16:21.085 [DEBUG] [Thread-131166] [transport.py] [_log()] userauth is OK
2026-02-11T15:16:21.085 [DEBUG] [Thread-131166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:16:21.086 [DEBUG] [Thread-131166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:16:21.086 [DEBUG] [Thread-131166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:16:21.086 [DEBUG] [Thread-131166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:16:21.104 [INFO] [Thread-131166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:16:21.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:16:21.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:16:21.671 [DEBUG] [Thread-131168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:21.926 [DEBUG] [Thread-131166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:16:21.926 [DEBUG] [Thread-131166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:16:21.974 [DEBUG] [Thread-131166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:16:21.975 [DEBUG] [Thread-131166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:16:21.984 [DEBUG] [Thread-131166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:16:21.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:16:21.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:16:22.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:16:22.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:16:22.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:16:22.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:16:22.021 [DEBUG] [Thread-131166] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:16:25.074 [DEBUG] [Thread-131169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:26.484 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:27.247 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:29.717 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:31.201 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:31.896 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:31.897 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:32.620 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:34.091 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:35.571 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:37.063 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:37.482 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:38.984 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:40.133 [DEBUG] [Thread-131170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:40.488 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:41.995 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:42.780 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:51.308 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:52.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:16:52.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:16:52.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:16:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 16, 18), 17.45, 33.02, 0.0, 31.46, 25.75, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:16:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:16:18
2026-02-11T15:16:54.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:16:54.448 [DEBUG] [Thread-131171] [transport.py] [_log()] starting thread (client mode): 0xa2d6e6b0
2026-02-11T15:16:54.448 [DEBUG] [Thread-131171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:16:54.467 [DEBUG] [Thread-131171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:16:54.467 [INFO] [Thread-131171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] client lang: <none>
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] server lang: <none>
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] kex follows: False
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] Compression: none
2026-02-11T15:16:54.471 [DEBUG] [Thread-131171] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:16:54.480 [DEBUG] [Thread-131171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:16:54.480 [DEBUG] [Thread-131171] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:16:54.480 [DEBUG] [Thread-131171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:16:54.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:16:54.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:16:54.482 [DEBUG] [Thread-131171] [transport.py] [_log()] userauth is OK
2026-02-11T15:16:54.482 [DEBUG] [Thread-131171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:16:54.482 [DEBUG] [Thread-131171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:16:54.482 [DEBUG] [Thread-131171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:16:54.482 [DEBUG] [Thread-131171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:16:54.501 [INFO] [Thread-131171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:16:54.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:16:55.142 [DEBUG] [Thread-131171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:16:55.143 [DEBUG] [Thread-131171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:16:55.143 [DEBUG] [Thread-131171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:16:55.168 [DEBUG] [Thread-131173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:16:55.183 [DEBUG] [Thread-131171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:16:55.184 [DEBUG] [Thread-131171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:16:55.187 [DEBUG] [Thread-131171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:16:55.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:16:55.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:16:55.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:16:55.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:16:55.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:16:55.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:16:55.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:16:55.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:16:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:16:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.553267 -999.00  +26.20  29.40     37  +10.40 1 2 1 1 1   888    0 14.44 9.87 ----- 26.7 29.4 301.6 36.2 31.1 -21.8 30.6 -21.0 31.1 -18.4 31.9 -20.8
2026-02-11T15:16:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:16:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:16:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.553267
2026-02-11T15:16:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:16:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:16:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:16:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:16:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:16:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:16:18', tmtdew=17.45, humidity=33.02, cloud=0.0, wind=31.46, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:16:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:16:55.214 [DEBUG] [Thread-131171] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:16:55.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:16:55.310 [DEBUG] [Thread-131175] [transport.py] [_log()] starting thread (client mode): 0xa57712d0
2026-02-11T15:16:55.310 [DEBUG] [Thread-131175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:16:55.326 [DEBUG] [Thread-131175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:16:55.326 [INFO] [Thread-131175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] client lang: <none>
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] server lang: <none>
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] kex follows: False
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:16:55.335 [DEBUG] [Thread-131175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:16:55.336 [DEBUG] [Thread-131175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:16:55.336 [DEBUG] [Thread-131175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:16:55.336 [DEBUG] [Thread-131175] [transport.py] [_log()] Compression: none
2026-02-11T15:16:55.336 [DEBUG] [Thread-131175] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:16:55.396 [DEBUG] [Thread-131175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:16:55.397 [DEBUG] [Thread-131175] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:16:55.398 [DEBUG] [Thread-131175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:16:55.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:16:55.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:16:55.453 [DEBUG] [Thread-131175] [transport.py] [_log()] userauth is OK
2026-02-11T15:16:55.453 [DEBUG] [Thread-131175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:16:55.453 [DEBUG] [Thread-131175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:16:55.453 [DEBUG] [Thread-131175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:16:55.453 [DEBUG] [Thread-131175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:16:55.473 [INFO] [Thread-131175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:16:55.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:16:55.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:16:56.306 [DEBUG] [Thread-131175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:16:56.306 [DEBUG] [Thread-131175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:16:56.354 [DEBUG] [Thread-131175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:16:56.355 [DEBUG] [Thread-131175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:16:56.364 [DEBUG] [Thread-131175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:16:56.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:16:56.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')
2026-02-11T15:16:56.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:16:56.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:16:56.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:16:56.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:16:56.401 [DEBUG] [Thread-131175] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:16:57.809 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:04.310 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:10.206 [DEBUG] [Thread-131177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:10.810 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:17.322 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:21.716 [DEBUG] [Thread-131178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:23.829 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:25.258 [DEBUG] [Thread-131179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:17:26.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:17:26.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:17:28.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 16, 54), 17.67, 32.32, 0.0, 33.79, 25.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:17:28.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:16:54
2026-02-11T15:17:29.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:17:29.440 [DEBUG] [Thread-131180] [transport.py] [_log()] starting thread (client mode): 0xa5771fc0
2026-02-11T15:17:29.440 [DEBUG] [Thread-131180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:17:29.463 [DEBUG] [Thread-131180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:17:29.463 [INFO] [Thread-131180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:17:29.466 [DEBUG] [Thread-131180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] client lang: <none>
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] server lang: <none>
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] kex follows: False
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] Compression: none
2026-02-11T15:17:29.467 [DEBUG] [Thread-131180] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:17:29.482 [DEBUG] [Thread-131180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:17:29.483 [DEBUG] [Thread-131180] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:17:29.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:17:29.484 [DEBUG] [Thread-131180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:17:29.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:17:29.486 [DEBUG] [Thread-131180] [transport.py] [_log()] userauth is OK
2026-02-11T15:17:29.487 [DEBUG] [Thread-131180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:17:29.487 [DEBUG] [Thread-131180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:17:29.487 [DEBUG] [Thread-131180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:17:29.487 [DEBUG] [Thread-131180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:17:29.522 [INFO] [Thread-131180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:17:29.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:17:30.163 [DEBUG] [Thread-131180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:17:30.163 [DEBUG] [Thread-131180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:17:30.164 [DEBUG] [Thread-131180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:17:30.204 [DEBUG] [Thread-131180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:17:30.204 [DEBUG] [Thread-131180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:17:30.207 [DEBUG] [Thread-131180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:17:30.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:17:30.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:17:30.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:17:30.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:17:30.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:17:30.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:17:30.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:17:30.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:17:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:17:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.553615 -999.00  +25.30  31.05     38  +10.30 1 2 2 1 1   888    0 14.58 14.37 ----- 31.3 31.1 291.4 42.6 30.9 -24.2 30.4 -21.3 31.1 -20.2 31.7 -22.3
2026-02-11T15:17:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:17:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:17:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.553615
2026-02-11T15:17:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:17:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:17:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:17:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:17:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:17:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:16:54', tmtdew=17.67, humidity=32.32, cloud=0.0, wind=33.79, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:17:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:17:30.234 [DEBUG] [Thread-131180] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:17:30.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:17:30.328 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:30.332 [DEBUG] [Thread-131183] [transport.py] [_log()] starting thread (client mode): 0xa2d57430
2026-02-11T15:17:30.332 [DEBUG] [Thread-131183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:17:30.346 [DEBUG] [Thread-131183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:17:30.346 [INFO] [Thread-131183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:17:30.353 [DEBUG] [Thread-131183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:17:30.353 [DEBUG] [Thread-131183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] client lang: <none>
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] server lang: <none>
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] kex follows: False
2026-02-11T15:17:30.354 [DEBUG] [Thread-131183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:17:30.355 [DEBUG] [Thread-131183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:17:30.355 [DEBUG] [Thread-131183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:17:30.355 [DEBUG] [Thread-131183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:17:30.355 [DEBUG] [Thread-131183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:17:30.355 [DEBUG] [Thread-131183] [transport.py] [_log()] Compression: none
2026-02-11T15:17:30.355 [DEBUG] [Thread-131183] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:17:30.412 [DEBUG] [Thread-131183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:17:30.413 [DEBUG] [Thread-131183] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:17:30.414 [DEBUG] [Thread-131183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:17:30.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:17:30.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:17:30.468 [DEBUG] [Thread-131183] [transport.py] [_log()] userauth is OK
2026-02-11T15:17:30.469 [DEBUG] [Thread-131183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:17:30.469 [DEBUG] [Thread-131183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:17:30.469 [DEBUG] [Thread-131183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:17:30.469 [DEBUG] [Thread-131183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:17:30.488 [INFO] [Thread-131183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:17:30.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:17:30.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:17:31.331 [DEBUG] [Thread-131183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:17:31.332 [DEBUG] [Thread-131183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:17:31.379 [DEBUG] [Thread-131183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:17:31.379 [DEBUG] [Thread-131183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:17:31.389 [DEBUG] [Thread-131183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:17:31.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:17:31.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:17:31.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
2026-02-11T15:17:31.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:17:31.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:17:31.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:17:31.426 [DEBUG] [Thread-131183] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:17:32.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:32.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:36.828 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:40.297 [DEBUG] [Thread-131185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:43.368 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:49.885 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:50.428 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:51.887 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:52.357 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:52.900 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:53.373 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:53.861 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:54.351 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:54.882 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:55.355 [DEBUG] [Thread-131186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:55.416 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:55.895 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:17:56.346 [DEBUG] [Thread-131104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:18:01.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:18:01.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:18:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:18:03.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 17, 29), 17.96, 31.76, 0.0, 33.54, 25.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:18:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:17:29
2026-02-11T15:18:03.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:18:03.782 [DEBUG] [Thread-131187] [transport.py] [_log()] starting thread (client mode): 0xa2d03dc0
2026-02-11T15:18:03.783 [DEBUG] [Thread-131187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:18:03.795 [DEBUG] [Thread-131187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:18:03.796 [INFO] [Thread-131187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] client lang: <none>
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] server lang: <none>
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] kex follows: False
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:18:03.799 [DEBUG] [Thread-131187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:18:03.800 [DEBUG] [Thread-131187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:18:03.800 [DEBUG] [Thread-131187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:18:03.800 [DEBUG] [Thread-131187] [transport.py] [_log()] Compression: none
2026-02-11T15:18:03.800 [DEBUG] [Thread-131187] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:18:03.816 [DEBUG] [Thread-131187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:18:03.816 [DEBUG] [Thread-131187] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:18:03.816 [DEBUG] [Thread-131187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:18:03.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:18:03.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:18:03.818 [DEBUG] [Thread-131187] [transport.py] [_log()] userauth is OK
2026-02-11T15:18:03.818 [DEBUG] [Thread-131187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:18:03.819 [DEBUG] [Thread-131187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:18:03.819 [DEBUG] [Thread-131187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:18:03.819 [DEBUG] [Thread-131187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:18:03.840 [INFO] [Thread-131187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:18:03.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:18:04.498 [DEBUG] [Thread-131187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:18:04.498 [DEBUG] [Thread-131187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:18:04.499 [DEBUG] [Thread-131187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:18:04.539 [DEBUG] [Thread-131187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:18:04.540 [DEBUG] [Thread-131187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:18:04.543 [DEBUG] [Thread-131187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:18:04.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:18:04.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:18:04.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:18:04.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:18:04.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:18:04.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:18:04.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:18:04.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:18:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:18:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.553962 -999.00  +25.40  29.35     39  +10.70 1 2 1 1 1   888    0 14.97 15.40 ----- 29.4 29.4 297.5 41.0 30.9 -21.5 30.5 -22.0 31.0 -19.5 31.8 -21.2
2026-02-11T15:18:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:18:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:18:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.553962
2026-02-11T15:18:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:18:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:18:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:18:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:18:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:18:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:17:29', tmtdew=17.96, humidity=31.76, cloud=0.0, wind=33.54, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:17:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:18:04.567 [DEBUG] [Thread-131187] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:18:04.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:18:04.666 [DEBUG] [Thread-131190] [transport.py] [_log()] starting thread (client mode): 0xa2d57940
2026-02-11T15:18:04.666 [DEBUG] [Thread-131190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:18:04.681 [DEBUG] [Thread-131190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:18:04.681 [INFO] [Thread-131190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:18:04.689 [DEBUG] [Thread-131190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] client lang: <none>
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] server lang: <none>
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] kex follows: False
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:18:04.690 [DEBUG] [Thread-131190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:18:04.691 [DEBUG] [Thread-131190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:18:04.691 [DEBUG] [Thread-131190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:18:04.691 [DEBUG] [Thread-131190] [transport.py] [_log()] Compression: none
2026-02-11T15:18:04.691 [DEBUG] [Thread-131190] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:18:04.753 [DEBUG] [Thread-131190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:18:04.754 [DEBUG] [Thread-131190] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:18:04.755 [DEBUG] [Thread-131190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:18:04.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:18:04.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:18:04.813 [DEBUG] [Thread-131190] [transport.py] [_log()] userauth is OK
2026-02-11T15:18:04.814 [DEBUG] [Thread-131190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:18:04.814 [DEBUG] [Thread-131190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:18:04.814 [DEBUG] [Thread-131190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:18:04.814 [DEBUG] [Thread-131190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:18:04.832 [INFO] [Thread-131190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:18:04.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:18:04.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:18:05.635 [DEBUG] [Thread-131190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:18:05.635 [DEBUG] [Thread-131190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:18:05.683 [DEBUG] [Thread-131190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:18:05.683 [DEBUG] [Thread-131190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:18:05.692 [DEBUG] [Thread-131190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:18:05.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:18:05.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:18:05.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:18:05.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:18:05.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:18:05.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:18:05.729 [DEBUG] [Thread-131190] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:18:10.392 [DEBUG] [Thread-131192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:18:21.762 [DEBUG] [Thread-131193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:18:25.444 [DEBUG] [Thread-131194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:18:32.179 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:18:32.180 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:18:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:18:35.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:18:35.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:18:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 18, 5), 17.96, 31.78, 0.0, 34.42, 25.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:18:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:18:05
2026-02-11T15:18:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:18:38.115 [DEBUG] [Thread-131195] [transport.py] [_log()] starting thread (client mode): 0xa2d574c0
2026-02-11T15:18:38.115 [DEBUG] [Thread-131195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:18:38.128 [DEBUG] [Thread-131195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:18:38.128 [INFO] [Thread-131195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] client lang: <none>
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] server lang: <none>
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] kex follows: False
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:18:38.130 [DEBUG] [Thread-131195] [transport.py] [_log()] Compression: none
2026-02-11T15:18:38.131 [DEBUG] [Thread-131195] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:18:38.148 [DEBUG] [Thread-131195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:18:38.149 [DEBUG] [Thread-131195] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:18:38.149 [DEBUG] [Thread-131195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:18:38.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:18:38.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:18:38.151 [DEBUG] [Thread-131195] [transport.py] [_log()] userauth is OK
2026-02-11T15:18:38.151 [DEBUG] [Thread-131195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:18:38.152 [DEBUG] [Thread-131195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:18:38.152 [DEBUG] [Thread-131195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:18:38.152 [DEBUG] [Thread-131195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:18:38.172 [INFO] [Thread-131195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:18:38.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:18:38.781 [DEBUG] [Thread-131195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:18:38.781 [DEBUG] [Thread-131195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:18:38.781 [DEBUG] [Thread-131195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:18:38.821 [DEBUG] [Thread-131195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:18:38.821 [DEBUG] [Thread-131195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:18:38.825 [DEBUG] [Thread-131195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:18:38.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:18:38.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:18:38.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:18:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:18:38.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:18:38.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:18:38.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:18:38.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.554309 -999.00  +25.40  26.40     39  +10.70 1 2 1 1 1   888    0 14.89 17.86 ----- 28.1 26.4 312.4 38.4 30.9 -23.8 30.4 -20.9 30.9 -21.0 31.7 -21.8
2026-02-11T15:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.554309
2026-02-11T15:18:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:18:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:18:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:18:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:18:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:18:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:18:05', tmtdew=17.96, humidity=31.78, cloud=0.0, wind=34.42, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:18:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:18:38.853 [DEBUG] [Thread-131195] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:18:38.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:18:38.951 [DEBUG] [Thread-131198] [transport.py] [_log()] starting thread (client mode): 0xa81d76d0
2026-02-11T15:18:38.951 [DEBUG] [Thread-131198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:18:38.973 [DEBUG] [Thread-131198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:18:38.974 [INFO] [Thread-131198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:18:38.983 [DEBUG] [Thread-131198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] client lang: <none>
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] server lang: <none>
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] kex follows: False
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] Compression: none
2026-02-11T15:18:38.984 [DEBUG] [Thread-131198] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:18:39.045 [DEBUG] [Thread-131198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:18:39.045 [DEBUG] [Thread-131198] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:18:39.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:18:39.046 [DEBUG] [Thread-131198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:18:39.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:18:39.101 [DEBUG] [Thread-131198] [transport.py] [_log()] userauth is OK
2026-02-11T15:18:39.101 [DEBUG] [Thread-131198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:18:39.101 [DEBUG] [Thread-131198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:18:39.101 [DEBUG] [Thread-131198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:18:39.101 [DEBUG] [Thread-131198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:18:39.120 [INFO] [Thread-131198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:18:39.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:18:39.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:18:39.956 [DEBUG] [Thread-131198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:18:39.956 [DEBUG] [Thread-131198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:18:40.005 [DEBUG] [Thread-131198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:18:40.006 [DEBUG] [Thread-131198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:18:40.017 [DEBUG] [Thread-131198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:18:40.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:18:40.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:18:40.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:18:40.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:18:40.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:18:40.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:18:40.054 [DEBUG] [Thread-131198] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:18:40.484 [DEBUG] [Thread-131200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:18:55.538 [DEBUG] [Thread-131201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:19:10.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:19:10.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:19:10.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:19:10.577 [DEBUG] [Thread-131202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:19:12.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 18, 41), 18.24, 31.51, 0.0, 31.83, 26.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:19:12.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:18:41
2026-02-11T15:19:12.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:19:12.893 [DEBUG] [Thread-131203] [transport.py] [_log()] starting thread (client mode): 0xa2db6e30
2026-02-11T15:19:12.893 [DEBUG] [Thread-131203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:19:12.912 [DEBUG] [Thread-131203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:19:12.912 [INFO] [Thread-131203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:19:12.915 [DEBUG] [Thread-131203] [transport.py] [_log()] client lang: <none>
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] server lang: <none>
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] kex follows: False
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] Compression: none
2026-02-11T15:19:12.916 [DEBUG] [Thread-131203] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:19:12.930 [DEBUG] [Thread-131203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:19:12.930 [DEBUG] [Thread-131203] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:19:12.930 [DEBUG] [Thread-131203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:19:12.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:19:12.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:19:12.931 [DEBUG] [Thread-131203] [transport.py] [_log()] userauth is OK
2026-02-11T15:19:12.931 [DEBUG] [Thread-131203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:19:12.931 [DEBUG] [Thread-131203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:19:12.931 [DEBUG] [Thread-131203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:19:12.931 [DEBUG] [Thread-131203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:19:12.948 [INFO] [Thread-131203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:19:12.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:19:13.588 [DEBUG] [Thread-131203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:19:13.589 [DEBUG] [Thread-131203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:19:13.589 [DEBUG] [Thread-131203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:19:13.629 [DEBUG] [Thread-131203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:19:13.630 [DEBUG] [Thread-131203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:19:13.633 [DEBUG] [Thread-131203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:19:13.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:19:13.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:19:13.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:19:13.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:19:13.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:19:13.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:19:13.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:19:13.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:19:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:19:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.554656 -999.00  +25.20  32.13     39  +10.60 1 2 2 1 1   888    0 14.96 19.24 ----- 30.7 32.1 300.0 36.0 31.0 -23.2 30.4 -22.4 31.0 -21.3 31.7 -21.2
2026-02-11T15:19:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:19:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:19:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.554656
2026-02-11T15:19:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:19:13.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:19:13.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:19:13.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:19:13.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:19:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:18:41', tmtdew=18.24, humidity=31.51, cloud=0.0, wind=31.83, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:18:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:19:13.660 [DEBUG] [Thread-131203] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:19:13.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:19:13.753 [DEBUG] [Thread-131206] [transport.py] [_log()] starting thread (client mode): 0xa2db4100
2026-02-11T15:19:13.754 [DEBUG] [Thread-131206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:19:13.768 [DEBUG] [Thread-131206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:19:13.769 [INFO] [Thread-131206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:19:13.776 [DEBUG] [Thread-131206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] client lang: <none>
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] server lang: <none>
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] kex follows: False
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] Compression: none
2026-02-11T15:19:13.777 [DEBUG] [Thread-131206] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:19:13.837 [DEBUG] [Thread-131206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:19:13.837 [DEBUG] [Thread-131206] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:19:13.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:19:13.838 [DEBUG] [Thread-131206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:19:13.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:19:13.892 [DEBUG] [Thread-131206] [transport.py] [_log()] userauth is OK
2026-02-11T15:19:13.893 [DEBUG] [Thread-131206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:19:13.893 [DEBUG] [Thread-131206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:19:13.893 [DEBUG] [Thread-131206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:19:13.893 [DEBUG] [Thread-131206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:19:13.912 [INFO] [Thread-131206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:19:13.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:19:13.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:19:14.702 [DEBUG] [Thread-131206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:19:14.703 [DEBUG] [Thread-131206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:19:14.750 [DEBUG] [Thread-131206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:19:14.751 [DEBUG] [Thread-131206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:19:14.760 [DEBUG] [Thread-131206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:19:14.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:19:14.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:19:14.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:19:14.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:19:14.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:19:14.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:19:14.796 [DEBUG] [Thread-131206] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:19:21.807 [DEBUG] [Thread-131208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:19:25.613 [DEBUG] [Thread-131209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:19:32.322 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:19:32.323 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:19:40.665 [DEBUG] [Thread-131210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:19:44.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:19:44.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:19:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:19:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 19, 16), 16.94, 34.09, 0.0, 23.19, 25.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:19:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:19:16
2026-02-11T15:19:47.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:19:47.298 [DEBUG] [Thread-131211] [transport.py] [_log()] starting thread (client mode): 0xa57d5180
2026-02-11T15:19:47.299 [DEBUG] [Thread-131211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:19:47.320 [DEBUG] [Thread-131211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:19:47.320 [INFO] [Thread-131211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:19:47.321 [DEBUG] [Thread-131211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:19:47.321 [DEBUG] [Thread-131211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] client lang: <none>
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] server lang: <none>
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] kex follows: False
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:19:47.322 [DEBUG] [Thread-131211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:19:47.323 [DEBUG] [Thread-131211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:19:47.323 [DEBUG] [Thread-131211] [transport.py] [_log()] Compression: none
2026-02-11T15:19:47.323 [DEBUG] [Thread-131211] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:19:47.341 [DEBUG] [Thread-131211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:19:47.342 [DEBUG] [Thread-131211] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:19:47.343 [DEBUG] [Thread-131211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:19:47.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:19:47.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:19:47.345 [DEBUG] [Thread-131211] [transport.py] [_log()] userauth is OK
2026-02-11T15:19:47.345 [DEBUG] [Thread-131211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:19:47.345 [DEBUG] [Thread-131211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:19:47.346 [DEBUG] [Thread-131211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:19:47.346 [DEBUG] [Thread-131211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:19:47.372 [INFO] [Thread-131211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:19:47.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:19:48.019 [DEBUG] [Thread-131211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:19:48.019 [DEBUG] [Thread-131211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:19:48.020 [DEBUG] [Thread-131211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:19:48.060 [DEBUG] [Thread-131211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:19:48.061 [DEBUG] [Thread-131211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:19:48.063 [DEBUG] [Thread-131211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:19:48.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:19:48.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:19:48.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:19:48.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:19:48.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:19:48.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:19:48.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:19:48.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:19:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:19:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.555003 -999.00  +24.70  16.87     40  +10.40 1 2 1 1 1   888    0 14.95 20.92 ----- 23.7 16.9 308.2 34.7 30.7 -23.7 30.3 -21.5 30.8 -21.8 31.5 -21.7
2026-02-11T15:19:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:19:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:19:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.555003
2026-02-11T15:19:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:19:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:19:48.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:19:48.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:19:48.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:19:48.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:19:16', tmtdew=16.94, humidity=34.09, cloud=0.0, wind=23.19, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:19:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:19:48.091 [DEBUG] [Thread-131211] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:19:48.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:19:48.189 [DEBUG] [Thread-131214] [transport.py] [_log()] starting thread (client mode): 0xa5770d00
2026-02-11T15:19:48.189 [DEBUG] [Thread-131214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:19:48.206 [DEBUG] [Thread-131214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:19:48.206 [INFO] [Thread-131214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:19:48.216 [DEBUG] [Thread-131214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:19:48.216 [DEBUG] [Thread-131214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:19:48.225 [DEBUG] [Thread-131214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] client lang: <none>
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] server lang: <none>
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] kex follows: False
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:19:48.226 [DEBUG] [Thread-131214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:19:48.227 [DEBUG] [Thread-131214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:19:48.227 [DEBUG] [Thread-131214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:19:48.227 [DEBUG] [Thread-131214] [transport.py] [_log()] Compression: none
2026-02-11T15:19:48.227 [DEBUG] [Thread-131214] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:19:48.282 [DEBUG] [Thread-131214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:19:48.283 [DEBUG] [Thread-131214] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:19:48.284 [DEBUG] [Thread-131214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:19:48.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:19:48.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:19:48.347 [DEBUG] [Thread-131214] [transport.py] [_log()] userauth is OK
2026-02-11T15:19:48.348 [DEBUG] [Thread-131214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:19:48.348 [DEBUG] [Thread-131214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:19:48.348 [DEBUG] [Thread-131214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:19:48.348 [DEBUG] [Thread-131214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:19:48.370 [INFO] [Thread-131214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:19:48.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:19:48.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:19:49.202 [DEBUG] [Thread-131214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:19:49.202 [DEBUG] [Thread-131214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:19:49.253 [DEBUG] [Thread-131214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:19:49.253 [DEBUG] [Thread-131214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:19:49.267 [DEBUG] [Thread-131214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:19:49.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:19:49.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:19:49.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:19:49.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:19:49.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:19:49.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:19:49.308 [DEBUG] [Thread-131214] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:19:55.700 [DEBUG] [Thread-131216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:10.750 [DEBUG] [Thread-131217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:19.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:20:19.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:20:19.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:20:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 19, 52), 16.44, 35.18, 0.0, 21.84, 24.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:20:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:19:52
2026-02-11T15:20:21.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:20:21.707 [DEBUG] [Thread-131218] [transport.py] [_log()] starting thread (client mode): 0xa57d5390
2026-02-11T15:20:21.707 [DEBUG] [Thread-131218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:20:21.726 [DEBUG] [Thread-131218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:20:21.726 [INFO] [Thread-131218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] client lang: <none>
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] server lang: <none>
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] kex follows: False
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:20:21.730 [DEBUG] [Thread-131218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:20:21.731 [DEBUG] [Thread-131218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:20:21.731 [DEBUG] [Thread-131218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:20:21.731 [DEBUG] [Thread-131218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:20:21.731 [DEBUG] [Thread-131218] [transport.py] [_log()] Compression: none
2026-02-11T15:20:21.731 [DEBUG] [Thread-131218] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:20:21.748 [DEBUG] [Thread-131218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:20:21.749 [DEBUG] [Thread-131218] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:20:21.750 [DEBUG] [Thread-131218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:20:21.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:20:21.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:20:21.793 [DEBUG] [Thread-131218] [transport.py] [_log()] userauth is OK
2026-02-11T15:20:21.794 [DEBUG] [Thread-131218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:20:21.794 [DEBUG] [Thread-131218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:20:21.794 [DEBUG] [Thread-131218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:20:21.794 [DEBUG] [Thread-131218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:20:21.815 [INFO] [Thread-131218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:20:21.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:20:21.839 [DEBUG] [Thread-131220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:22.439 [DEBUG] [Thread-131218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:20:22.439 [DEBUG] [Thread-131218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:20:22.440 [DEBUG] [Thread-131218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:20:22.480 [DEBUG] [Thread-131218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:20:22.481 [DEBUG] [Thread-131218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:20:22.484 [DEBUG] [Thread-131218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:20:22.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:20:22.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:20:22.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:20:22.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:20:22.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:20:22.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:20:22.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:20:22.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:20:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:20:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.555351 -999.00  +24.20  27.81     41  +10.30 1 2 1 1 1   888    0 14.89 17.44 ----- 23.1 27.8 314.6 31.9 30.7 -23.6 30.2 -20.7 30.9 -22.3 31.5 -21.6
2026-02-11T15:20:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:20:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:20:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.555351
2026-02-11T15:20:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:20:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:20:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:20:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:20:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:20:22.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:19:52', tmtdew=16.44, humidity=35.18, cloud=0.0, wind=21.84, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:19:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:20:22.510 [DEBUG] [Thread-131218] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:20:22.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:20:22.605 [DEBUG] [Thread-131222] [transport.py] [_log()] starting thread (client mode): 0xa2d54760
2026-02-11T15:20:22.605 [DEBUG] [Thread-131222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:20:22.620 [DEBUG] [Thread-131222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:20:22.620 [INFO] [Thread-131222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:20:22.627 [DEBUG] [Thread-131222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] client lang: <none>
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] server lang: <none>
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] kex follows: False
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:20:22.628 [DEBUG] [Thread-131222] [transport.py] [_log()] Compression: none
2026-02-11T15:20:22.629 [DEBUG] [Thread-131222] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:20:22.688 [DEBUG] [Thread-131222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:20:22.689 [DEBUG] [Thread-131222] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:20:22.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:20:22.690 [DEBUG] [Thread-131222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:20:22.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:20:22.745 [DEBUG] [Thread-131222] [transport.py] [_log()] userauth is OK
2026-02-11T15:20:22.745 [DEBUG] [Thread-131222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:20:22.745 [DEBUG] [Thread-131222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:20:22.745 [DEBUG] [Thread-131222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:20:22.745 [DEBUG] [Thread-131222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:20:22.764 [INFO] [Thread-131222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:20:22.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:20:22.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:20:23.589 [DEBUG] [Thread-131222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:20:23.590 [DEBUG] [Thread-131222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:20:23.637 [DEBUG] [Thread-131222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:20:23.638 [DEBUG] [Thread-131222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:20:23.647 [DEBUG] [Thread-131222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:20:23.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:20:23.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')
2026-02-11T15:20:23.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:20:23.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:20:23.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:20:23.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:20:23.684 [DEBUG] [Thread-131222] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:20:25.791 [DEBUG] [Thread-131224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:32.464 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:32.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:40.853 [DEBUG] [Thread-131225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:20:53.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:20:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:20:55.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 20, 28), 16.59, 34.9, 0.0, 21.9, 24.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:20:55.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:20:28
2026-02-11T15:20:55.889 [DEBUG] [Thread-131226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:20:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:20:56.090 [DEBUG] [Thread-131227] [transport.py] [_log()] starting thread (client mode): 0xa2d03610
2026-02-11T15:20:56.090 [DEBUG] [Thread-131227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:20:56.111 [DEBUG] [Thread-131227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:20:56.111 [INFO] [Thread-131227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:20:56.112 [DEBUG] [Thread-131227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:20:56.112 [DEBUG] [Thread-131227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:20:56.112 [DEBUG] [Thread-131227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:20:56.112 [DEBUG] [Thread-131227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:56.112 [DEBUG] [Thread-131227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:56.112 [DEBUG] [Thread-131227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] client lang: <none>
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] server lang: <none>
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] kex follows: False
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] Compression: none
2026-02-11T15:20:56.113 [DEBUG] [Thread-131227] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:20:56.122 [DEBUG] [Thread-131227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:20:56.123 [DEBUG] [Thread-131227] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:20:56.123 [DEBUG] [Thread-131227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:20:56.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:20:56.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:20:56.128 [DEBUG] [Thread-131227] [transport.py] [_log()] userauth is OK
2026-02-11T15:20:56.128 [DEBUG] [Thread-131227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:20:56.128 [DEBUG] [Thread-131227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:20:56.129 [DEBUG] [Thread-131227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:20:56.129 [DEBUG] [Thread-131227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:20:56.165 [INFO] [Thread-131227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:20:56.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:20:56.937 [DEBUG] [Thread-131227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:20:56.938 [DEBUG] [Thread-131227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:20:56.938 [DEBUG] [Thread-131227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:20:56.978 [DEBUG] [Thread-131227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:20:56.979 [DEBUG] [Thread-131227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:20:56.982 [DEBUG] [Thread-131227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:20:56.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:20:56.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:20:56.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:20:56.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:20:57.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:20:57.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:20:57.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:20:57.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:20:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:20:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.555698 -999.00  +24.70  33.66     39  +10.10 1 2 2 1 1   888    0 14.85 18.62 ----- 30.3 33.7 287.4 37.6 30.6 -23.2 30.1 -22.6 30.8 -20.1 31.5 -22.7
2026-02-11T15:20:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:20:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:20:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.555698
2026-02-11T15:20:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:20:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:20:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:20:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:20:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:20:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:20:28', tmtdew=16.59, humidity=34.9, cloud=0.0, wind=21.9, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:20:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:20:57.012 [DEBUG] [Thread-131227] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:20:57.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:20:57.108 [DEBUG] [Thread-131230] [transport.py] [_log()] starting thread (client mode): 0xa2d11030
2026-02-11T15:20:57.108 [DEBUG] [Thread-131230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:20:57.127 [DEBUG] [Thread-131230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:20:57.128 [INFO] [Thread-131230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:20:57.135 [DEBUG] [Thread-131230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:20:57.135 [DEBUG] [Thread-131230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:20:57.135 [DEBUG] [Thread-131230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] client lang: <none>
2026-02-11T15:20:57.136 [DEBUG] [Thread-131230] [transport.py] [_log()] server lang: <none>
2026-02-11T15:20:57.137 [DEBUG] [Thread-131230] [transport.py] [_log()] kex follows: False
2026-02-11T15:20:57.137 [DEBUG] [Thread-131230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:20:57.137 [DEBUG] [Thread-131230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:20:57.137 [DEBUG] [Thread-131230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:20:57.137 [DEBUG] [Thread-131230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:20:57.137 [DEBUG] [Thread-131230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:20:57.137 [DEBUG] [Thread-131230] [transport.py] [_log()] Compression: none
2026-02-11T15:20:57.138 [DEBUG] [Thread-131230] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:20:57.193 [DEBUG] [Thread-131230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:20:57.194 [DEBUG] [Thread-131230] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:20:57.194 [DEBUG] [Thread-131230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:20:57.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:20:57.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:20:57.253 [DEBUG] [Thread-131230] [transport.py] [_log()] userauth is OK
2026-02-11T15:20:57.253 [DEBUG] [Thread-131230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:20:57.253 [DEBUG] [Thread-131230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:20:57.254 [DEBUG] [Thread-131230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:20:57.254 [DEBUG] [Thread-131230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:20:57.273 [INFO] [Thread-131230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:20:57.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:20:57.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:20:58.086 [DEBUG] [Thread-131230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:20:58.087 [DEBUG] [Thread-131230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:20:58.134 [DEBUG] [Thread-131230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:20:58.134 [DEBUG] [Thread-131230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:20:58.143 [DEBUG] [Thread-131230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:20:58.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:20:58.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:20:58.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:20:58.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:20:58.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:20:58.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:20:58.180 [DEBUG] [Thread-131230] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:21:10.926 [DEBUG] [Thread-131232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:21:21.875 [DEBUG] [Thread-131233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:21:25.976 [DEBUG] [Thread-131234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:21:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:21:28.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:21:28.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:21:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 21, 4), 16.65, 34.82, 0.0, 21.3, 24.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:21:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:21:04
2026-02-11T15:21:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:21:30.535 [DEBUG] [Thread-131235] [transport.py] [_log()] starting thread (client mode): 0xa5770be0
2026-02-11T15:21:30.535 [DEBUG] [Thread-131235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:21:30.559 [DEBUG] [Thread-131235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:21:30.560 [INFO] [Thread-131235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:21:30.563 [DEBUG] [Thread-131235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:21:30.563 [DEBUG] [Thread-131235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] client lang: <none>
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] server lang: <none>
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] kex follows: False
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] Compression: none
2026-02-11T15:21:30.564 [DEBUG] [Thread-131235] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:21:30.583 [DEBUG] [Thread-131235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:21:30.584 [DEBUG] [Thread-131235] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:21:30.585 [DEBUG] [Thread-131235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:21:30.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:21:30.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:21:30.586 [DEBUG] [Thread-131235] [transport.py] [_log()] userauth is OK
2026-02-11T15:21:30.587 [DEBUG] [Thread-131235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:21:30.587 [DEBUG] [Thread-131235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:21:30.587 [DEBUG] [Thread-131235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:21:30.587 [DEBUG] [Thread-131235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:21:30.614 [INFO] [Thread-131235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:21:30.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:21:31.283 [DEBUG] [Thread-131235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:21:31.283 [DEBUG] [Thread-131235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:21:31.284 [DEBUG] [Thread-131235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:21:31.324 [DEBUG] [Thread-131235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:21:31.325 [DEBUG] [Thread-131235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:21:31.328 [DEBUG] [Thread-131235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:21:31.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:21:31.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:21:31.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:21:31.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:21:31.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:21:31.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:21:31.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:21:31.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:21:31.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:21:31.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.556392 -999.00  +24.60  25.11     39   +9.90 1 1 1 1 1   888    0 15.32 25.89 ----- 30.6 25.1 279.8 32.3 30.4 -23.9 30.1 -21.6 30.6 -26.2 31.3 -21.6
2026-02-11T15:21:31.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:21:31.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:21:31.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.556392
2026-02-11T15:21:31.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:21:31.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:21:31.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:21:31.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:21:31.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T15:21:31.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:21:04', tmtdew=16.65, humidity=34.82, cloud=0.0, wind=21.3, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:21:12.269', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:21:31.354 [DEBUG] [Thread-131235] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:21:31.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:21:31.448 [DEBUG] [Thread-131238] [transport.py] [_log()] starting thread (client mode): 0xa57713f0
2026-02-11T15:21:31.448 [DEBUG] [Thread-131238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:21:31.463 [DEBUG] [Thread-131238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:21:31.463 [INFO] [Thread-131238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:21:31.471 [DEBUG] [Thread-131238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:21:31.471 [DEBUG] [Thread-131238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:21:31.471 [DEBUG] [Thread-131238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:21:31.471 [DEBUG] [Thread-131238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:21:31.471 [DEBUG] [Thread-131238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:21:31.471 [DEBUG] [Thread-131238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] client lang: <none>
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] server lang: <none>
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] kex follows: False
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] Compression: none
2026-02-11T15:21:31.472 [DEBUG] [Thread-131238] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:21:31.528 [DEBUG] [Thread-131238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:21:31.529 [DEBUG] [Thread-131238] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:21:31.530 [DEBUG] [Thread-131238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:21:31.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:21:31.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:21:31.585 [DEBUG] [Thread-131238] [transport.py] [_log()] userauth is OK
2026-02-11T15:21:31.585 [DEBUG] [Thread-131238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:21:31.585 [DEBUG] [Thread-131238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:21:31.585 [DEBUG] [Thread-131238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:21:31.585 [DEBUG] [Thread-131238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:21:31.604 [INFO] [Thread-131238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:21:31.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:21:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:21:32.463 [DEBUG] [Thread-131238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:21:32.464 [DEBUG] [Thread-131238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:21:32.512 [DEBUG] [Thread-131238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:21:32.512 [DEBUG] [Thread-131238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:21:32.521 [DEBUG] [Thread-131238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:21:32.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:21:32.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:21:32.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:21:32.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:21:32.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:21:32.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:21:32.558 [DEBUG] [Thread-131238] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:21:32.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:21:32.606 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:21:41.013 [DEBUG] [Thread-131240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:21:56.052 [DEBUG] [Thread-131241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:22:02.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:22:02.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:22:02.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:22:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 21, 40), 18.15, 31.78, 0.0, 22.23, 26.79, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:22:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:21:40
2026-02-11T15:22:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:22:05.035 [DEBUG] [Thread-131242] [transport.py] [_log()] starting thread (client mode): 0xa2d57bb0
2026-02-11T15:22:05.035 [DEBUG] [Thread-131242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:22:05.048 [DEBUG] [Thread-131242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:22:05.048 [INFO] [Thread-131242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:22:05.051 [DEBUG] [Thread-131242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:22:05.051 [DEBUG] [Thread-131242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:22:05.051 [DEBUG] [Thread-131242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:22:05.051 [DEBUG] [Thread-131242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:05.051 [DEBUG] [Thread-131242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] client lang: <none>
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] server lang: <none>
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] kex follows: False
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] Compression: none
2026-02-11T15:22:05.052 [DEBUG] [Thread-131242] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:22:05.071 [DEBUG] [Thread-131242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:22:05.071 [DEBUG] [Thread-131242] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:22:05.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:22:05.072 [DEBUG] [Thread-131242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:22:05.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:22:05.074 [DEBUG] [Thread-131242] [transport.py] [_log()] userauth is OK
2026-02-11T15:22:05.075 [DEBUG] [Thread-131242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:22:05.075 [DEBUG] [Thread-131242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:22:05.075 [DEBUG] [Thread-131242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:22:05.075 [DEBUG] [Thread-131242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:22:05.099 [INFO] [Thread-131242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:22:05.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:22:05.699 [DEBUG] [Thread-131242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:22:05.699 [DEBUG] [Thread-131242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:22:05.699 [DEBUG] [Thread-131242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:22:05.740 [DEBUG] [Thread-131242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:22:05.740 [DEBUG] [Thread-131242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:22:05.743 [DEBUG] [Thread-131242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:22:05.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:22:05.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:22:05.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:22:05.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:22:05.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:22:05.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:22:05.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:22:05.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:22:05.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:22:05.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.556739 -999.00  +25.10  37.06     38  +10.10 1 2 2 1 1   888    0 15.29 28.71 ----- 42.0 37.1 298.2 43.1 30.6 -21.7 30.1 -22.8 30.3 -19.2 31.4 -20.8
2026-02-11T15:22:05.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:22:05.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:22:05.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.556739
2026-02-11T15:22:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:22:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:22:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:22:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:22:05.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:22:05.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:21:40', tmtdew=18.15, humidity=31.78, cloud=0.0, wind=22.23, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:21:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:22:05.768 [DEBUG] [Thread-131242] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:22:05.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:22:05.865 [DEBUG] [Thread-131245] [transport.py] [_log()] starting thread (client mode): 0xa57c0a30
2026-02-11T15:22:05.865 [DEBUG] [Thread-131245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:22:05.879 [DEBUG] [Thread-131245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:22:05.879 [INFO] [Thread-131245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] client lang: <none>
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] server lang: <none>
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] kex follows: False
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:22:05.889 [DEBUG] [Thread-131245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:22:05.890 [DEBUG] [Thread-131245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:22:05.890 [DEBUG] [Thread-131245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:22:05.890 [DEBUG] [Thread-131245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:22:05.890 [DEBUG] [Thread-131245] [transport.py] [_log()] Compression: none
2026-02-11T15:22:05.890 [DEBUG] [Thread-131245] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:22:05.943 [DEBUG] [Thread-131245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:22:05.944 [DEBUG] [Thread-131245] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:22:05.944 [DEBUG] [Thread-131245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:22:05.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:22:05.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:22:06.000 [DEBUG] [Thread-131245] [transport.py] [_log()] userauth is OK
2026-02-11T15:22:06.000 [DEBUG] [Thread-131245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:22:06.000 [DEBUG] [Thread-131245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:22:06.000 [DEBUG] [Thread-131245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:22:06.000 [DEBUG] [Thread-131245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:22:06.020 [INFO] [Thread-131245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:22:06.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:22:06.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:22:06.857 [DEBUG] [Thread-131245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:22:06.857 [DEBUG] [Thread-131245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:22:06.905 [DEBUG] [Thread-131245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:22:06.905 [DEBUG] [Thread-131245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:22:06.920 [DEBUG] [Thread-131245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:22:06.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:22:06.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:22:06.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:22:06.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:22:06.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:22:06.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:22:06.961 [DEBUG] [Thread-131245] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:22:11.083 [DEBUG] [Thread-131247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:22:21.909 [DEBUG] [Thread-131248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:22:26.141 [DEBUG] [Thread-131249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:22:32.746 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:22:32.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:22:36.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:22:36.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:22:36.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
2026-02-11T15:22:38.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 22, 15), 17.33, 33.29, 0.0, 24.62, 25.35, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:22:38.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:22:15
2026-02-11T15:22:39.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:22:39.377 [DEBUG] [Thread-131250] [transport.py] [_log()] starting thread (client mode): 0xa2d023e0
2026-02-11T15:22:39.377 [DEBUG] [Thread-131250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:22:39.396 [DEBUG] [Thread-131250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:22:39.396 [INFO] [Thread-131250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] client lang: <none>
2026-02-11T15:22:39.400 [DEBUG] [Thread-131250] [transport.py] [_log()] server lang: <none>
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] kex follows: False
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] Compression: none
2026-02-11T15:22:39.401 [DEBUG] [Thread-131250] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:22:39.417 [DEBUG] [Thread-131250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:22:39.417 [DEBUG] [Thread-131250] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:22:39.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:22:39.418 [DEBUG] [Thread-131250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:22:39.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:22:39.420 [DEBUG] [Thread-131250] [transport.py] [_log()] userauth is OK
2026-02-11T15:22:39.420 [DEBUG] [Thread-131250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:22:39.421 [DEBUG] [Thread-131250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:22:39.421 [DEBUG] [Thread-131250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:22:39.421 [DEBUG] [Thread-131250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:22:39.444 [INFO] [Thread-131250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:22:39.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:22:40.106 [DEBUG] [Thread-131250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:22:40.106 [DEBUG] [Thread-131250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:22:40.106 [DEBUG] [Thread-131250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:22:40.148 [DEBUG] [Thread-131250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:22:40.148 [DEBUG] [Thread-131250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:22:40.151 [DEBUG] [Thread-131250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:22:40.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:22:40.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:22:40.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:22:40.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:22:40.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:22:40.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:22:40.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:22:40.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:22:40.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:22:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.557087 -999.00  +24.40  23.41     39   +9.90 1 2 1 1 1   888    0 15.13 31.24 ----- 28.4 23.4 274.6 42.7 30.4 -23.3 29.9 -22.8 30.4 -22.3 31.1 -21.5
2026-02-11T15:22:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:22:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:22:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.557087
2026-02-11T15:22:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:22:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:22:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:22:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:22:40.179 [DEBUG] [Thread-131250] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:22:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:22:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:22:15', tmtdew=17.33, humidity=33.29, cloud=0.0, wind=24.62, temperature=25.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:22:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:22:40.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:22:40.276 [DEBUG] [Thread-131253] [transport.py] [_log()] starting thread (client mode): 0xa2d57400
2026-02-11T15:22:40.276 [DEBUG] [Thread-131253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:22:40.298 [DEBUG] [Thread-131253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:22:40.298 [INFO] [Thread-131253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:22:40.308 [DEBUG] [Thread-131253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:22:40.308 [DEBUG] [Thread-131253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:22:40.308 [DEBUG] [Thread-131253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:22:40.308 [DEBUG] [Thread-131253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:40.308 [DEBUG] [Thread-131253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] client lang: <none>
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] server lang: <none>
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] kex follows: False
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] Compression: none
2026-02-11T15:22:40.309 [DEBUG] [Thread-131253] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:22:40.365 [DEBUG] [Thread-131253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:22:40.365 [DEBUG] [Thread-131253] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:22:40.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:22:40.367 [DEBUG] [Thread-131253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:22:40.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:22:40.424 [DEBUG] [Thread-131253] [transport.py] [_log()] userauth is OK
2026-02-11T15:22:40.425 [DEBUG] [Thread-131253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:22:40.425 [DEBUG] [Thread-131253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:22:40.425 [DEBUG] [Thread-131253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:22:40.425 [DEBUG] [Thread-131253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:22:40.451 [INFO] [Thread-131253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:22:40.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:22:40.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:22:41.178 [DEBUG] [Thread-131255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:22:41.262 [DEBUG] [Thread-131253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:22:41.263 [DEBUG] [Thread-131253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:22:41.311 [DEBUG] [Thread-131253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:22:41.312 [DEBUG] [Thread-131253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:22:41.321 [DEBUG] [Thread-131253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:22:41.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:22:41.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:22:41.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:22:41.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:22:41.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:22:41.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:22:41.358 [DEBUG] [Thread-131253] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:22:56.242 [DEBUG] [Thread-131256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:23:11.276 [DEBUG] [Thread-131257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:23:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:23:11.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:23:11.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:23:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 22, 51), 17.52, 32.93, 0.0, 29.54, 25.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:23:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:22:51
2026-02-11T15:23:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:23:13.858 [DEBUG] [Thread-131258] [transport.py] [_log()] starting thread (client mode): 0xa2d57c70
2026-02-11T15:23:13.858 [DEBUG] [Thread-131258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:23:13.877 [DEBUG] [Thread-131258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:23:13.877 [INFO] [Thread-131258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] client lang: <none>
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] server lang: <none>
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] kex follows: False
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] Compression: none
2026-02-11T15:23:13.879 [DEBUG] [Thread-131258] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:23:13.895 [DEBUG] [Thread-131258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:23:13.895 [DEBUG] [Thread-131258] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:23:13.896 [DEBUG] [Thread-131258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:23:13.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:23:13.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:23:13.897 [DEBUG] [Thread-131258] [transport.py] [_log()] userauth is OK
2026-02-11T15:23:13.898 [DEBUG] [Thread-131258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:23:13.898 [DEBUG] [Thread-131258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:23:13.898 [DEBUG] [Thread-131258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:23:13.898 [DEBUG] [Thread-131258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:23:13.911 [INFO] [Thread-131258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:23:13.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:23:14.563 [DEBUG] [Thread-131258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:23:14.563 [DEBUG] [Thread-131258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:23:14.564 [DEBUG] [Thread-131258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:23:14.604 [DEBUG] [Thread-131258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:23:14.605 [DEBUG] [Thread-131258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:23:14.608 [DEBUG] [Thread-131258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:23:14.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:23:14.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:23:14.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:23:14.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:23:14.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:23:14.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:23:14.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:23:14.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:23:14.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:23:14.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.557434 -999.00  +24.70  28.48     39  +10.10 1 2 1 1 1   888    0 15.20 31.88 ----- 34.4 28.5 291.6 36.0 30.3 -21.8 30.0 -22.1 29.9 -20.8 31.2 -20.6
2026-02-11T15:23:14.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:23:14.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:23:14.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.557434
2026-02-11T15:23:14.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:23:14.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:23:14.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:23:14.633 [DEBUG] [Thread-131258] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:23:14.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:23:14.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:23:14.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:22:51', tmtdew=17.52, humidity=32.93, cloud=0.0, wind=29.54, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:22:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:23:14.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:23:14.729 [DEBUG] [Thread-131261] [transport.py] [_log()] starting thread (client mode): 0xa57c22f0
2026-02-11T15:23:14.729 [DEBUG] [Thread-131261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:23:14.744 [DEBUG] [Thread-131261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:23:14.744 [INFO] [Thread-131261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:23:14.752 [DEBUG] [Thread-131261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:23:14.752 [DEBUG] [Thread-131261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:23:14.752 [DEBUG] [Thread-131261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:23:14.752 [DEBUG] [Thread-131261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:14.752 [DEBUG] [Thread-131261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:14.752 [DEBUG] [Thread-131261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:14.752 [DEBUG] [Thread-131261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] client lang: <none>
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] server lang: <none>
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] kex follows: False
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] Compression: none
2026-02-11T15:23:14.753 [DEBUG] [Thread-131261] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:23:14.814 [DEBUG] [Thread-131261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:23:14.815 [DEBUG] [Thread-131261] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:23:14.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:23:14.816 [DEBUG] [Thread-131261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:23:14.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:23:14.873 [DEBUG] [Thread-131261] [transport.py] [_log()] userauth is OK
2026-02-11T15:23:14.874 [DEBUG] [Thread-131261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:23:14.874 [DEBUG] [Thread-131261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:23:14.874 [DEBUG] [Thread-131261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:23:14.874 [DEBUG] [Thread-131261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:23:14.896 [INFO] [Thread-131261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:23:14.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:23:14.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:23:15.695 [DEBUG] [Thread-131261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:23:15.695 [DEBUG] [Thread-131261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:23:15.744 [DEBUG] [Thread-131261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:23:15.745 [DEBUG] [Thread-131261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:23:15.755 [DEBUG] [Thread-131261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:23:15.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:23:15.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:23:15.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:23:15.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:23:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:23:15.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:23:15.796 [DEBUG] [Thread-131261] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:23:21.951 [DEBUG] [Thread-131263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:23:26.316 [DEBUG] [Thread-131264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:23:32.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:23:32.893 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:23:41.366 [DEBUG] [Thread-131265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:23:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:23:45.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:23:45.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:23:47.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 23, 26), 17.51, 32.91, 0.0, 26.63, 25.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:23:47.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:23:26
2026-02-11T15:23:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:23:48.257 [DEBUG] [Thread-131266] [transport.py] [_log()] starting thread (client mode): 0xa2d10b80
2026-02-11T15:23:48.257 [DEBUG] [Thread-131266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:23:48.279 [DEBUG] [Thread-131266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:23:48.279 [INFO] [Thread-131266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:23:48.281 [DEBUG] [Thread-131266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:23:48.281 [DEBUG] [Thread-131266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] client lang: <none>
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] server lang: <none>
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] kex follows: False
2026-02-11T15:23:48.282 [DEBUG] [Thread-131266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:23:48.283 [DEBUG] [Thread-131266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:23:48.283 [DEBUG] [Thread-131266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:23:48.283 [DEBUG] [Thread-131266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:23:48.283 [DEBUG] [Thread-131266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:23:48.283 [DEBUG] [Thread-131266] [transport.py] [_log()] Compression: none
2026-02-11T15:23:48.283 [DEBUG] [Thread-131266] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:23:48.302 [DEBUG] [Thread-131266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:23:48.303 [DEBUG] [Thread-131266] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:23:48.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:23:48.305 [DEBUG] [Thread-131266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:23:48.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:23:48.308 [DEBUG] [Thread-131266] [transport.py] [_log()] userauth is OK
2026-02-11T15:23:48.308 [DEBUG] [Thread-131266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:23:48.308 [DEBUG] [Thread-131266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:23:48.308 [DEBUG] [Thread-131266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:23:48.308 [DEBUG] [Thread-131266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:23:48.336 [INFO] [Thread-131266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:23:48.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:23:48.998 [DEBUG] [Thread-131266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:23:48.998 [DEBUG] [Thread-131266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:23:48.999 [DEBUG] [Thread-131266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:23:49.040 [DEBUG] [Thread-131266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:23:49.040 [DEBUG] [Thread-131266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:23:49.044 [DEBUG] [Thread-131266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:23:49.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:23:49.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:23:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:23:49.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:23:49.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:23:49.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:23:49.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:23:49.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:23:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:23:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.557781 -999.00  +24.40  25.25     40  +10.00 1 2 1 1 1   888    0 15.31 33.73 ----- 21.4 25.2 292.4 34.8 30.4 -23.0 30.0 -22.0 30.2 -23.8 31.1 -20.3
2026-02-11T15:23:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:23:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:23:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.557781
2026-02-11T15:23:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:23:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:23:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:23:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:23:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:23:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:23:26', tmtdew=17.51, humidity=32.91, cloud=0.0, wind=26.63, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:23:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:23:49.069 [DEBUG] [Thread-131266] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:23:49.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:23:49.172 [DEBUG] [Thread-131269] [transport.py] [_log()] starting thread (client mode): 0xa5758100
2026-02-11T15:23:49.172 [DEBUG] [Thread-131269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:23:49.186 [DEBUG] [Thread-131269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:23:49.186 [INFO] [Thread-131269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:23:49.194 [DEBUG] [Thread-131269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:23:49.194 [DEBUG] [Thread-131269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:23:49.194 [DEBUG] [Thread-131269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] client lang: <none>
2026-02-11T15:23:49.195 [DEBUG] [Thread-131269] [transport.py] [_log()] server lang: <none>
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] kex follows: False
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] Compression: none
2026-02-11T15:23:49.196 [DEBUG] [Thread-131269] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:23:49.253 [DEBUG] [Thread-131269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:23:49.254 [DEBUG] [Thread-131269] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:23:49.254 [DEBUG] [Thread-131269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:23:49.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:23:49.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:23:49.309 [DEBUG] [Thread-131269] [transport.py] [_log()] userauth is OK
2026-02-11T15:23:49.309 [DEBUG] [Thread-131269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:23:49.309 [DEBUG] [Thread-131269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:23:49.309 [DEBUG] [Thread-131269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:23:49.310 [DEBUG] [Thread-131269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:23:49.328 [INFO] [Thread-131269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:23:49.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:23:49.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:23:50.175 [DEBUG] [Thread-131269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:23:50.175 [DEBUG] [Thread-131269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:23:50.223 [DEBUG] [Thread-131269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:23:50.224 [DEBUG] [Thread-131269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:23:50.233 [DEBUG] [Thread-131269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:23:50.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:23:50.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:23:50.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:23:50.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:23:50.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:23:50.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:23:50.268 [DEBUG] [Thread-131269] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:23:56.401 [DEBUG] [Thread-131271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:11.456 [DEBUG] [Thread-131272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:20.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:24:20.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:24:20.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:24:22.003 [DEBUG] [Thread-131273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:22.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 24, 2), 17.51, 32.91, 0.0, 28.88, 25.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:24:22.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:24:02
2026-02-11T15:24:22.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:24:22.709 [DEBUG] [Thread-131274] [transport.py] [_log()] starting thread (client mode): 0xa2d100a0
2026-02-11T15:24:22.709 [DEBUG] [Thread-131274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:24:22.729 [DEBUG] [Thread-131274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:24:22.729 [INFO] [Thread-131274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] client lang: <none>
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] server lang: <none>
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] kex follows: False
2026-02-11T15:24:22.732 [DEBUG] [Thread-131274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:24:22.733 [DEBUG] [Thread-131274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:24:22.733 [DEBUG] [Thread-131274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:24:22.733 [DEBUG] [Thread-131274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:24:22.733 [DEBUG] [Thread-131274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:24:22.733 [DEBUG] [Thread-131274] [transport.py] [_log()] Compression: none
2026-02-11T15:24:22.733 [DEBUG] [Thread-131274] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:24:22.749 [DEBUG] [Thread-131274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:24:22.750 [DEBUG] [Thread-131274] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:24:22.750 [DEBUG] [Thread-131274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:24:22.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:24:22.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:24:22.753 [DEBUG] [Thread-131274] [transport.py] [_log()] userauth is OK
2026-02-11T15:24:22.753 [DEBUG] [Thread-131274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:24:22.753 [DEBUG] [Thread-131274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:24:22.753 [DEBUG] [Thread-131274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:24:22.753 [DEBUG] [Thread-131274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:24:22.776 [INFO] [Thread-131274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:24:22.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:24:23.437 [DEBUG] [Thread-131274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:24:23.438 [DEBUG] [Thread-131274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:24:23.438 [DEBUG] [Thread-131274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:24:23.478 [DEBUG] [Thread-131274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:24:23.479 [DEBUG] [Thread-131274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:24:23.482 [DEBUG] [Thread-131274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:24:23.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:24:23.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:24:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:24:23.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:24:23.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:24:23.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:24:23.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:24:23.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:24:23.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:24:23.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.558128 -999.00  +24.50  23.46     39   +9.90 1 2 1 1 1   888    0 15.36 33.36 ----- 22.8 23.5 311.3 29.4 30.4 -22.3 30.0 -21.7 30.1 -21.3 31.2 -21.0
2026-02-11T15:24:23.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:24:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:24:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.558128
2026-02-11T15:24:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:24:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:24:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:24:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:24:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:24:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:24:02', tmtdew=17.51, humidity=32.91, cloud=0.0, wind=28.88, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:23:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:24:23.510 [DEBUG] [Thread-131274] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:24:23.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:24:23.607 [DEBUG] [Thread-131277] [transport.py] [_log()] starting thread (client mode): 0xa2d12f80
2026-02-11T15:24:23.607 [DEBUG] [Thread-131277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:24:23.621 [DEBUG] [Thread-131277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:24:23.622 [INFO] [Thread-131277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:24:23.629 [DEBUG] [Thread-131277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] client lang: <none>
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] server lang: <none>
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] kex follows: False
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:24:23.630 [DEBUG] [Thread-131277] [transport.py] [_log()] Compression: none
2026-02-11T15:24:23.631 [DEBUG] [Thread-131277] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:24:23.689 [DEBUG] [Thread-131277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:24:23.689 [DEBUG] [Thread-131277] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:24:23.690 [DEBUG] [Thread-131277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:24:23.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:24:23.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:24:23.749 [DEBUG] [Thread-131277] [transport.py] [_log()] userauth is OK
2026-02-11T15:24:23.749 [DEBUG] [Thread-131277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:24:23.749 [DEBUG] [Thread-131277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:24:23.749 [DEBUG] [Thread-131277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:24:23.750 [DEBUG] [Thread-131277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:24:23.769 [INFO] [Thread-131277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:24:23.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:24:23.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:24:24.610 [DEBUG] [Thread-131277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:24:24.610 [DEBUG] [Thread-131277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:24:24.659 [DEBUG] [Thread-131277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:24:24.659 [DEBUG] [Thread-131277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:24:24.669 [DEBUG] [Thread-131277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:24:24.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:24:24.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:24:24.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:24:24.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:24:24.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:24:24.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:24:24.705 [DEBUG] [Thread-131277] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:24:26.491 [DEBUG] [Thread-131279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:33.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:33.035 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:41.542 [DEBUG] [Thread-131280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:24:54.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:24:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:24:56.579 [DEBUG] [Thread-131281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:24:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 24, 38), 19.32, 29.46, 0.0, 38.71, 27.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:24:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:24:38
2026-02-11T15:24:56.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:24:57.089 [DEBUG] [Thread-131282] [transport.py] [_log()] starting thread (client mode): 0xa81d59c0
2026-02-11T15:24:57.089 [DEBUG] [Thread-131282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:24:57.103 [DEBUG] [Thread-131282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:24:57.103 [INFO] [Thread-131282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:24:57.104 [DEBUG] [Thread-131282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:24:57.104 [DEBUG] [Thread-131282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:24:57.104 [DEBUG] [Thread-131282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] client lang: <none>
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] server lang: <none>
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] kex follows: False
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] Compression: none
2026-02-11T15:24:57.105 [DEBUG] [Thread-131282] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:24:57.113 [DEBUG] [Thread-131282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:24:57.114 [DEBUG] [Thread-131282] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:24:57.114 [DEBUG] [Thread-131282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:24:57.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:24:57.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:24:57.115 [DEBUG] [Thread-131282] [transport.py] [_log()] userauth is OK
2026-02-11T15:24:57.115 [DEBUG] [Thread-131282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:24:57.115 [DEBUG] [Thread-131282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:24:57.115 [DEBUG] [Thread-131282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:24:57.115 [DEBUG] [Thread-131282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:24:57.128 [INFO] [Thread-131282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:24:57.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:24:57.798 [DEBUG] [Thread-131282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:24:57.798 [DEBUG] [Thread-131282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:24:57.798 [DEBUG] [Thread-131282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:24:57.838 [DEBUG] [Thread-131282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:24:57.838 [DEBUG] [Thread-131282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:24:57.842 [DEBUG] [Thread-131282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:24:57.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:24:57.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:24:57.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:24:57.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:24:57.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:24:57.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:24:57.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:24:57.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:24:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:24:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.558475 -999.00  +24.40  31.12     40  +10.00 1 2 2 1 1   888    0 15.44 33.45 ----- 36.1 31.1 294.8 35.9 30.4 -23.4 30.0 -22.3 30.5 -19.6 31.1 -21.8
2026-02-11T15:24:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:24:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:24:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.558475
2026-02-11T15:24:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:24:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:24:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:24:57.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:24:57.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:24:57.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:24:38', tmtdew=19.32, humidity=29.46, cloud=0.0, wind=38.71, temperature=27.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:24:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:24:57.862 [DEBUG] [Thread-131282] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:24:57.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:24:57.954 [DEBUG] [Thread-131285] [transport.py] [_log()] starting thread (client mode): 0xa57c1600
2026-02-11T15:24:57.954 [DEBUG] [Thread-131285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:24:57.969 [DEBUG] [Thread-131285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:24:57.969 [INFO] [Thread-131285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] client lang: <none>
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] server lang: <none>
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] kex follows: False
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:24:57.977 [DEBUG] [Thread-131285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:24:57.978 [DEBUG] [Thread-131285] [transport.py] [_log()] Compression: none
2026-02-11T15:24:57.978 [DEBUG] [Thread-131285] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:24:58.038 [DEBUG] [Thread-131285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:24:58.039 [DEBUG] [Thread-131285] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:24:58.039 [DEBUG] [Thread-131285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:24:58.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:24:58.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:24:58.098 [DEBUG] [Thread-131285] [transport.py] [_log()] userauth is OK
2026-02-11T15:24:58.098 [DEBUG] [Thread-131285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:24:58.098 [DEBUG] [Thread-131285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:24:58.098 [DEBUG] [Thread-131285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:24:58.098 [DEBUG] [Thread-131285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:24:58.123 [INFO] [Thread-131285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:24:58.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:24:58.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:24:58.937 [DEBUG] [Thread-131285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:24:58.937 [DEBUG] [Thread-131285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:24:58.985 [DEBUG] [Thread-131285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:24:58.985 [DEBUG] [Thread-131285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:24:58.995 [DEBUG] [Thread-131285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:24:59.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:24:59.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:24:59.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:24:59.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:24:59.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:24:59.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:24:59.032 [DEBUG] [Thread-131285] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:25:11.616 [DEBUG] [Thread-131287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:25:22.037 [DEBUG] [Thread-131288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:25:26.666 [DEBUG] [Thread-131289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:25:29.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:25:29.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:25:29.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:25:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 25, 14), 17.67, 32.51, 0.0, 26.56, 25.3, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:25:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:25:14
2026-02-11T15:25:31.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:25:31.644 [DEBUG] [Thread-131290] [transport.py] [_log()] starting thread (client mode): 0xa2d12e30
2026-02-11T15:25:31.644 [DEBUG] [Thread-131290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:25:31.664 [DEBUG] [Thread-131290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:25:31.664 [INFO] [Thread-131290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:25:31.667 [DEBUG] [Thread-131290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] client lang: <none>
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] server lang: <none>
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] kex follows: False
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] Compression: none
2026-02-11T15:25:31.668 [DEBUG] [Thread-131290] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:25:31.686 [DEBUG] [Thread-131290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:25:31.686 [DEBUG] [Thread-131290] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:25:31.687 [DEBUG] [Thread-131290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:25:31.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:25:31.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:25:31.689 [DEBUG] [Thread-131290] [transport.py] [_log()] userauth is OK
2026-02-11T15:25:31.689 [DEBUG] [Thread-131290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:25:31.689 [DEBUG] [Thread-131290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:25:31.689 [DEBUG] [Thread-131290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:25:31.689 [DEBUG] [Thread-131290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:25:31.714 [INFO] [Thread-131290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:25:31.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:25:32.349 [DEBUG] [Thread-131290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:25:32.349 [DEBUG] [Thread-131290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:25:32.349 [DEBUG] [Thread-131290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:25:32.390 [DEBUG] [Thread-131290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:25:32.391 [DEBUG] [Thread-131290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:25:32.393 [DEBUG] [Thread-131290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:25:32.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:25:32.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:25:32.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:25:32.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:25:32.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:25:32.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:25:32.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:25:32.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:25:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:25:32.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.558823 -999.00  +24.20  24.02     40  +10.10 1 2 1 1 1   888    0 15.10 29.13 ----- 26.2 24.0 293.6 35.3 30.3 -23.8 30.0 -21.8 30.3 -21.8 31.1 -21.1
2026-02-11T15:25:32.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:25:32.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:25:32.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.558823
2026-02-11T15:25:32.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:25:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:25:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:25:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:25:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:25:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:25:14', tmtdew=17.67, humidity=32.51, cloud=0.0, wind=26.56, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:24:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:25:32.419 [DEBUG] [Thread-131290] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:25:32.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:25:32.523 [DEBUG] [Thread-131293] [transport.py] [_log()] starting thread (client mode): 0xa5759780
2026-02-11T15:25:32.523 [DEBUG] [Thread-131293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:25:32.538 [DEBUG] [Thread-131293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:25:32.538 [INFO] [Thread-131293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:25:32.546 [DEBUG] [Thread-131293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:25:32.546 [DEBUG] [Thread-131293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:25:32.546 [DEBUG] [Thread-131293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:25:32.546 [DEBUG] [Thread-131293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] client lang: <none>
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] server lang: <none>
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] kex follows: False
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] Compression: none
2026-02-11T15:25:32.547 [DEBUG] [Thread-131293] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:25:32.604 [DEBUG] [Thread-131293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:25:32.605 [DEBUG] [Thread-131293] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:25:32.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:25:32.606 [DEBUG] [Thread-131293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:25:32.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:25:32.661 [DEBUG] [Thread-131293] [transport.py] [_log()] userauth is OK
2026-02-11T15:25:32.661 [DEBUG] [Thread-131293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:25:32.662 [DEBUG] [Thread-131293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:25:32.662 [DEBUG] [Thread-131293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:25:32.662 [DEBUG] [Thread-131293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:25:32.681 [INFO] [Thread-131293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:25:32.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:25:32.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:25:33.177 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:25:33.178 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:25:33.537 [DEBUG] [Thread-131293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:25:33.538 [DEBUG] [Thread-131293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:25:33.585 [DEBUG] [Thread-131293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:25:33.585 [DEBUG] [Thread-131293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:25:33.593 [DEBUG] [Thread-131293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:25:33.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:25:33.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:25:33.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:25:33.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:25:33.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:25:33.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:25:33.629 [DEBUG] [Thread-131293] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:25:41.703 [DEBUG] [Thread-131295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:25:56.760 [DEBUG] [Thread-131296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:26:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:26:03.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:26:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:26:05.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 25, 50), 17.52, 33.01, 0.0, 26.18, 25.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:26:05.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:25:50
2026-02-11T15:26:05.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:26:06.057 [DEBUG] [Thread-131297] [transport.py] [_log()] starting thread (client mode): 0xa5758220
2026-02-11T15:26:06.057 [DEBUG] [Thread-131297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:26:06.077 [DEBUG] [Thread-131297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:26:06.077 [INFO] [Thread-131297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] client lang: <none>
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] server lang: <none>
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] kex follows: False
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:26:06.081 [DEBUG] [Thread-131297] [transport.py] [_log()] Compression: none
2026-02-11T15:26:06.082 [DEBUG] [Thread-131297] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:26:06.101 [DEBUG] [Thread-131297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:26:06.101 [DEBUG] [Thread-131297] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:26:06.102 [DEBUG] [Thread-131297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:26:06.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:26:06.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:26:06.104 [DEBUG] [Thread-131297] [transport.py] [_log()] userauth is OK
2026-02-11T15:26:06.104 [DEBUG] [Thread-131297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:26:06.104 [DEBUG] [Thread-131297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:26:06.104 [DEBUG] [Thread-131297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:26:06.104 [DEBUG] [Thread-131297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:26:06.129 [INFO] [Thread-131297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:26:06.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:26:06.758 [DEBUG] [Thread-131297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:26:06.758 [DEBUG] [Thread-131297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:26:06.759 [DEBUG] [Thread-131297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:26:06.799 [DEBUG] [Thread-131297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:26:06.800 [DEBUG] [Thread-131297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:26:06.803 [DEBUG] [Thread-131297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:26:06.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:26:06.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:26:06.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:26:06.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:26:06.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:26:06.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:26:06.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:26:06.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:26:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:26:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.559170 -999.00  +24.30  24.09     41  +10.30 1 2 1 1 1   888    0 15.34 26.90 ----- 20.8 24.1 287.8 32.5 30.3 -23.3 30.0 -21.4 30.4 -21.7 31.1 -20.8
2026-02-11T15:26:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:26:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:26:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.559170
2026-02-11T15:26:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:26:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:26:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:26:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:26:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:26:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:25:50', tmtdew=17.52, humidity=33.01, cloud=0.0, wind=26.18, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:25:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:26:06.831 [DEBUG] [Thread-131297] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:26:06.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:26:06.937 [DEBUG] [Thread-131300] [transport.py] [_log()] starting thread (client mode): 0xa57c0e80
2026-02-11T15:26:06.937 [DEBUG] [Thread-131300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:26:06.952 [DEBUG] [Thread-131300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:26:06.952 [INFO] [Thread-131300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:26:06.959 [DEBUG] [Thread-131300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] client lang: <none>
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] server lang: <none>
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] kex follows: False
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:26:06.960 [DEBUG] [Thread-131300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:26:06.961 [DEBUG] [Thread-131300] [transport.py] [_log()] Compression: none
2026-02-11T15:26:06.961 [DEBUG] [Thread-131300] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:26:07.021 [DEBUG] [Thread-131300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:26:07.021 [DEBUG] [Thread-131300] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:26:07.022 [DEBUG] [Thread-131300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:26:07.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:26:07.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:26:07.076 [DEBUG] [Thread-131300] [transport.py] [_log()] userauth is OK
2026-02-11T15:26:07.077 [DEBUG] [Thread-131300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:26:07.077 [DEBUG] [Thread-131300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:26:07.077 [DEBUG] [Thread-131300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:26:07.077 [DEBUG] [Thread-131300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:26:07.093 [INFO] [Thread-131300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:26:07.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:26:07.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:26:07.941 [DEBUG] [Thread-131300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:26:07.941 [DEBUG] [Thread-131300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:26:07.989 [DEBUG] [Thread-131300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:26:07.990 [DEBUG] [Thread-131300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:26:07.999 [DEBUG] [Thread-131300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:26:08.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:26:08.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:26:08.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:26:08.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:26:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:26:08.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:26:08.036 [DEBUG] [Thread-131300] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:26:11.800 [DEBUG] [Thread-131302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:26:22.076 [DEBUG] [Thread-131303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:26:26.858 [DEBUG] [Thread-131304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:26:33.322 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:26:33.323 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:26:38.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:26:38.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:26:38.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
2026-02-11T15:26:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 26, 26), 17.51, 33.11, 0.0, 30.1, 25.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:26:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:26:26
2026-02-11T15:26:40.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:26:40.456 [DEBUG] [Thread-131305] [transport.py] [_log()] starting thread (client mode): 0xa2d11030
2026-02-11T15:26:40.456 [DEBUG] [Thread-131305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:26:40.477 [DEBUG] [Thread-131305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:26:40.477 [INFO] [Thread-131305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] client lang: <none>
2026-02-11T15:26:40.480 [DEBUG] [Thread-131305] [transport.py] [_log()] server lang: <none>
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] kex follows: False
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] Compression: none
2026-02-11T15:26:40.481 [DEBUG] [Thread-131305] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:26:40.499 [DEBUG] [Thread-131305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:26:40.499 [DEBUG] [Thread-131305] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:26:40.500 [DEBUG] [Thread-131305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:26:40.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:26:40.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:26:40.503 [DEBUG] [Thread-131305] [transport.py] [_log()] userauth is OK
2026-02-11T15:26:40.503 [DEBUG] [Thread-131305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:26:40.504 [DEBUG] [Thread-131305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:26:40.504 [DEBUG] [Thread-131305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:26:40.504 [DEBUG] [Thread-131305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:26:40.528 [INFO] [Thread-131305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:26:40.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:26:41.170 [DEBUG] [Thread-131305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:26:41.170 [DEBUG] [Thread-131305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:26:41.171 [DEBUG] [Thread-131305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:26:41.210 [DEBUG] [Thread-131305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:26:41.211 [DEBUG] [Thread-131305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:26:41.214 [DEBUG] [Thread-131305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:26:41.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:26:41.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:26:41.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:26:41.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:26:41.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:26:41.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:26:41.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:26:41.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:26:41.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:26:41.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.559517 -999.00  +25.10  23.05     40  +10.60 1 2 1 1 1   888    0 15.04 27.81 ----- 25.2 23.1 295.2 32.7 30.4 -22.1 30.1 -21.2 30.4 -18.7 31.3 -20.3
2026-02-11T15:26:41.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:26:41.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:26:41.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.559517
2026-02-11T15:26:41.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:26:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:26:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:26:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:26:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:26:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:26:26', tmtdew=17.51, humidity=33.11, cloud=0.0, wind=30.1, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:25:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:26:41.241 [DEBUG] [Thread-131305] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:26:41.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:26:41.337 [DEBUG] [Thread-131308] [transport.py] [_log()] starting thread (client mode): 0xa57c3490
2026-02-11T15:26:41.337 [DEBUG] [Thread-131308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:26:41.351 [DEBUG] [Thread-131308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:26:41.352 [INFO] [Thread-131308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:26:41.359 [DEBUG] [Thread-131308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] client lang: <none>
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] server lang: <none>
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] kex follows: False
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:26:41.360 [DEBUG] [Thread-131308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:26:41.361 [DEBUG] [Thread-131308] [transport.py] [_log()] Compression: none
2026-02-11T15:26:41.361 [DEBUG] [Thread-131308] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:26:41.416 [DEBUG] [Thread-131308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:26:41.417 [DEBUG] [Thread-131308] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:26:41.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:26:41.418 [DEBUG] [Thread-131308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:26:41.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:26:41.473 [DEBUG] [Thread-131308] [transport.py] [_log()] userauth is OK
2026-02-11T15:26:41.473 [DEBUG] [Thread-131308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:26:41.473 [DEBUG] [Thread-131308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:26:41.473 [DEBUG] [Thread-131308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:26:41.473 [DEBUG] [Thread-131308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:26:41.492 [INFO] [Thread-131308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:26:41.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:26:41.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:26:41.893 [DEBUG] [Thread-131310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:26:42.297 [DEBUG] [Thread-131308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:26:42.297 [DEBUG] [Thread-131308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:26:42.345 [DEBUG] [Thread-131308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:26:42.346 [DEBUG] [Thread-131308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:26:42.355 [DEBUG] [Thread-131308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:26:42.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:26:42.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')
2026-02-11T15:26:42.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:26:42.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:26:42.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:26:42.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:26:42.391 [DEBUG] [Thread-131308] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:26:56.946 [DEBUG] [Thread-131311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:27:11.982 [DEBUG] [Thread-131312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:27:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:27:12.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:27:12.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:27:14.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 27, 1), 17.63, 32.91, 0.0, 25.3, 25.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:27:14.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:27:01
2026-02-11T15:27:14.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:27:15.154 [DEBUG] [Thread-131313] [transport.py] [_log()] starting thread (client mode): 0xa57d6140
2026-02-11T15:27:15.155 [DEBUG] [Thread-131313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:27:15.175 [DEBUG] [Thread-131313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:27:15.175 [INFO] [Thread-131313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:27:15.178 [DEBUG] [Thread-131313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] client lang: <none>
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] server lang: <none>
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] kex follows: False
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] Compression: none
2026-02-11T15:27:15.179 [DEBUG] [Thread-131313] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:27:15.197 [DEBUG] [Thread-131313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:27:15.197 [DEBUG] [Thread-131313] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:27:15.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:27:15.198 [DEBUG] [Thread-131313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:27:15.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:27:15.200 [DEBUG] [Thread-131313] [transport.py] [_log()] userauth is OK
2026-02-11T15:27:15.201 [DEBUG] [Thread-131313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:27:15.201 [DEBUG] [Thread-131313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:27:15.201 [DEBUG] [Thread-131313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:27:15.201 [DEBUG] [Thread-131313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:27:15.225 [INFO] [Thread-131313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:27:15.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:27:15.864 [DEBUG] [Thread-131313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:27:15.864 [DEBUG] [Thread-131313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:27:15.864 [DEBUG] [Thread-131313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:27:15.904 [DEBUG] [Thread-131313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:27:15.905 [DEBUG] [Thread-131313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:27:15.908 [DEBUG] [Thread-131313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:27:15.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:27:15.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:27:15.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:27:15.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:27:15.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:27:15.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:27:15.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:27:15.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:27:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:27:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.560212 -999.00  +24.80  34.62     39  +10.10 1 1 2 1 1   888    0 15.42 33.34 ----- 32.5 34.6 274.0 40.5 30.2 -23.9 29.8 -22.7 30.1 -25.7 31.1 -21.0
2026-02-11T15:27:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:27:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:27:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.560212
2026-02-11T15:27:15.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:27:15.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:27:15.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:27:15.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:27:15.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T15:27:15.931 [DEBUG] [Thread-131313] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:27:15.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:27:01', tmtdew=17.63, humidity=32.91, cloud=0.0, wind=25.3, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:26:42.317', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:27:16.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:27:16.026 [DEBUG] [Thread-131316] [transport.py] [_log()] starting thread (client mode): 0xa5742200
2026-02-11T15:27:16.026 [DEBUG] [Thread-131316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:27:16.040 [DEBUG] [Thread-131316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:27:16.040 [INFO] [Thread-131316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:27:16.048 [DEBUG] [Thread-131316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:27:16.048 [DEBUG] [Thread-131316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:27:16.048 [DEBUG] [Thread-131316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] client lang: <none>
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] server lang: <none>
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] kex follows: False
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] Compression: none
2026-02-11T15:27:16.049 [DEBUG] [Thread-131316] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:27:16.110 [DEBUG] [Thread-131316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:27:16.111 [DEBUG] [Thread-131316] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:27:16.112 [DEBUG] [Thread-131316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:27:16.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:27:16.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:27:16.169 [DEBUG] [Thread-131316] [transport.py] [_log()] userauth is OK
2026-02-11T15:27:16.169 [DEBUG] [Thread-131316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:27:16.169 [DEBUG] [Thread-131316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:27:16.169 [DEBUG] [Thread-131316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:27:16.169 [DEBUG] [Thread-131316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:27:16.187 [INFO] [Thread-131316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:27:16.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:27:16.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:27:17.024 [DEBUG] [Thread-131316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:27:17.024 [DEBUG] [Thread-131316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:27:17.071 [DEBUG] [Thread-131316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:27:17.072 [DEBUG] [Thread-131316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:27:17.081 [DEBUG] [Thread-131316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:27:17.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:27:17.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:27:17.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:27:17.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:27:17.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:27:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:27:17.115 [DEBUG] [Thread-131316] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:27:22.109 [DEBUG] [Thread-131318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:27:27.018 [DEBUG] [Thread-131319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:27:33.462 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:27:33.463 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:27:42.077 [DEBUG] [Thread-131320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:27:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:27:47.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:27:47.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:27:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 27, 37), 19.14, 29.96, 0.0, 29.78, 27.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:27:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:27:37
2026-02-11T15:27:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:27:49.462 [DEBUG] [Thread-131321] [transport.py] [_log()] starting thread (client mode): 0xa2d10b80
2026-02-11T15:27:49.462 [DEBUG] [Thread-131321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:27:49.482 [DEBUG] [Thread-131321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:27:49.482 [INFO] [Thread-131321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] client lang: <none>
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] server lang: <none>
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] kex follows: False
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:27:49.485 [DEBUG] [Thread-131321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:27:49.486 [DEBUG] [Thread-131321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:27:49.486 [DEBUG] [Thread-131321] [transport.py] [_log()] Compression: none
2026-02-11T15:27:49.486 [DEBUG] [Thread-131321] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:27:49.503 [DEBUG] [Thread-131321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:27:49.504 [DEBUG] [Thread-131321] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:27:49.504 [DEBUG] [Thread-131321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:27:49.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:27:49.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:27:49.506 [DEBUG] [Thread-131321] [transport.py] [_log()] userauth is OK
2026-02-11T15:27:49.507 [DEBUG] [Thread-131321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:27:49.507 [DEBUG] [Thread-131321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:27:49.507 [DEBUG] [Thread-131321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:27:49.507 [DEBUG] [Thread-131321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:27:49.526 [INFO] [Thread-131321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:27:49.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:27:50.288 [DEBUG] [Thread-131321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:27:50.288 [DEBUG] [Thread-131321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:27:50.288 [DEBUG] [Thread-131321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:27:50.329 [DEBUG] [Thread-131321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:27:50.330 [DEBUG] [Thread-131321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:27:50.333 [DEBUG] [Thread-131321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:27:50.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:27:50.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:27:50.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:27:50.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:27:50.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:27:50.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:27:50.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:27:50.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:27:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:27:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.560559 -999.00  +24.90  28.03     39  +10.20 1 2 1 1 1   888    0 15.84 33.89 ----- 27.7 28.0 264.4 33.5 30.1 -23.0 29.8 -21.7 29.7 -23.4 31.0 -22.4
2026-02-11T15:27:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:27:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:27:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.560559
2026-02-11T15:27:50.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:27:50.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:27:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:27:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:27:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:27:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:27:37', tmtdew=19.14, humidity=29.96, cloud=0.0, wind=29.78, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:27:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:27:50.359 [DEBUG] [Thread-131321] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:27:50.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:27:50.455 [DEBUG] [Thread-131324] [transport.py] [_log()] starting thread (client mode): 0xa2d126e0
2026-02-11T15:27:50.456 [DEBUG] [Thread-131324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:27:50.470 [DEBUG] [Thread-131324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:27:50.470 [INFO] [Thread-131324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:27:50.478 [DEBUG] [Thread-131324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:27:50.478 [DEBUG] [Thread-131324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:27:50.478 [DEBUG] [Thread-131324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:27:50.478 [DEBUG] [Thread-131324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:50.478 [DEBUG] [Thread-131324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] client lang: <none>
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] server lang: <none>
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] kex follows: False
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:27:50.479 [DEBUG] [Thread-131324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:27:50.480 [DEBUG] [Thread-131324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:27:50.480 [DEBUG] [Thread-131324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:27:50.480 [DEBUG] [Thread-131324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:27:50.480 [DEBUG] [Thread-131324] [transport.py] [_log()] Compression: none
2026-02-11T15:27:50.480 [DEBUG] [Thread-131324] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:27:50.536 [DEBUG] [Thread-131324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:27:50.537 [DEBUG] [Thread-131324] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:27:50.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:27:50.538 [DEBUG] [Thread-131324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:27:50.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:27:50.595 [DEBUG] [Thread-131324] [transport.py] [_log()] userauth is OK
2026-02-11T15:27:50.596 [DEBUG] [Thread-131324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:27:50.596 [DEBUG] [Thread-131324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:27:50.596 [DEBUG] [Thread-131324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:27:50.596 [DEBUG] [Thread-131324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:27:50.615 [INFO] [Thread-131324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:27:50.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:27:50.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:27:51.452 [DEBUG] [Thread-131324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:27:51.452 [DEBUG] [Thread-131324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:27:51.499 [DEBUG] [Thread-131324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:27:51.500 [DEBUG] [Thread-131324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:27:51.509 [DEBUG] [Thread-131324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:27:51.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:27:51.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')
2026-02-11T15:27: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
2026-02-11T15:27:51.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:27:51.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:27:51.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:27:51.545 [DEBUG] [Thread-131324] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:27:57.112 [DEBUG] [Thread-131326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:12.170 [DEBUG] [Thread-131327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:28:21.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:28:21.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:28:22.162 [DEBUG] [Thread-131328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 28, 12), 17.48, 33.03, 0.0, 31.09, 25.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:28:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:28:12
2026-02-11T15:28:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:28:23.920 [DEBUG] [Thread-131329] [transport.py] [_log()] starting thread (client mode): 0xa2d133a0
2026-02-11T15:28:23.920 [DEBUG] [Thread-131329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:28:23.939 [DEBUG] [Thread-131329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:28:23.939 [INFO] [Thread-131329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:28:23.942 [DEBUG] [Thread-131329] [transport.py] [_log()] client lang: <none>
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] server lang: <none>
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] kex follows: False
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] Compression: none
2026-02-11T15:28:23.943 [DEBUG] [Thread-131329] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:28:23.960 [DEBUG] [Thread-131329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:28:23.960 [DEBUG] [Thread-131329] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:28:23.960 [DEBUG] [Thread-131329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:28:23.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:28:23.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:28:23.961 [DEBUG] [Thread-131329] [transport.py] [_log()] userauth is OK
2026-02-11T15:28:23.961 [DEBUG] [Thread-131329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:28:23.961 [DEBUG] [Thread-131329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:28:23.961 [DEBUG] [Thread-131329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:28:23.961 [DEBUG] [Thread-131329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:28:23.970 [INFO] [Thread-131329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:28:23.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:28:24.575 [DEBUG] [Thread-131329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:28:24.575 [DEBUG] [Thread-131329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:28:24.575 [DEBUG] [Thread-131329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:28:24.616 [DEBUG] [Thread-131329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:28:24.616 [DEBUG] [Thread-131329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:28:24.621 [DEBUG] [Thread-131329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:28:24.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:28:24.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:28:24.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:28:24.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:28:24.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:28:24.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:28:24.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:28:24.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:28:24.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:28:24.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.560906 -999.00  +25.00  32.29     39  +10.30 1 2 2 1 1   888    0 15.34 33.57 ----- 33.7 32.3 294.6 39.3 30.2 -23.1 29.9 -21.6 30.0 -22.2 30.9 -21.2
2026-02-11T15:28:24.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:28:24.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:28:24.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.560906
2026-02-11T15:28:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:28:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:28:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:28:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:28:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:28:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:28:12', tmtdew=17.48, humidity=33.03, cloud=0.0, wind=31.09, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:27:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:28:24.641 [DEBUG] [Thread-131329] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:28:24.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:28:24.737 [DEBUG] [Thread-131332] [transport.py] [_log()] starting thread (client mode): 0xa2d10d30
2026-02-11T15:28:24.737 [DEBUG] [Thread-131332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:28:24.751 [DEBUG] [Thread-131332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:28:24.751 [INFO] [Thread-131332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] client lang: <none>
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] server lang: <none>
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] kex follows: False
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:28:24.759 [DEBUG] [Thread-131332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:28:24.760 [DEBUG] [Thread-131332] [transport.py] [_log()] Compression: none
2026-02-11T15:28:24.760 [DEBUG] [Thread-131332] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:28:24.817 [DEBUG] [Thread-131332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:28:24.818 [DEBUG] [Thread-131332] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:28:24.818 [DEBUG] [Thread-131332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:28:24.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:28:24.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:28:24.877 [DEBUG] [Thread-131332] [transport.py] [_log()] userauth is OK
2026-02-11T15:28:24.877 [DEBUG] [Thread-131332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:28:24.878 [DEBUG] [Thread-131332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:28:24.878 [DEBUG] [Thread-131332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:28:24.878 [DEBUG] [Thread-131332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:28:24.897 [INFO] [Thread-131332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:28:24.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:28:24.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:28:25.757 [DEBUG] [Thread-131332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:28:25.757 [DEBUG] [Thread-131332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:28:25.805 [DEBUG] [Thread-131332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:28:25.806 [DEBUG] [Thread-131332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:28:25.815 [DEBUG] [Thread-131332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:28:25.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:28:25.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:28:25.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:28:25.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:28:25.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:28:25.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:28:25.851 [DEBUG] [Thread-131332] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:28:27.211 [DEBUG] [Thread-131334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:33.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:33.606 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:42.260 [DEBUG] [Thread-131335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:55.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:28:55.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:28:55.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:28:57.298 [DEBUG] [Thread-131336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:28:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 28, 48), 18.07, 31.91, 0.0, 30.1, 26.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:28:57.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:28:48
2026-02-11T15:28:58.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:28:58.537 [DEBUG] [Thread-131337] [transport.py] [_log()] starting thread (client mode): 0xa57d60e0
2026-02-11T15:28:58.537 [DEBUG] [Thread-131337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:28:58.550 [DEBUG] [Thread-131337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:28:58.550 [INFO] [Thread-131337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:28:58.552 [DEBUG] [Thread-131337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] client lang: <none>
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] server lang: <none>
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] kex follows: False
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] Compression: none
2026-02-11T15:28:58.553 [DEBUG] [Thread-131337] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:28:58.563 [DEBUG] [Thread-131337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:28:58.564 [DEBUG] [Thread-131337] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:28:58.564 [DEBUG] [Thread-131337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:28:58.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:28:58.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:28:58.565 [DEBUG] [Thread-131337] [transport.py] [_log()] userauth is OK
2026-02-11T15:28:58.565 [DEBUG] [Thread-131337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:28:58.565 [DEBUG] [Thread-131337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:28:58.565 [DEBUG] [Thread-131337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:28:58.565 [DEBUG] [Thread-131337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:28:58.583 [INFO] [Thread-131337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:28:58.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:28:59.151 [DEBUG] [Thread-131337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:28:59.151 [DEBUG] [Thread-131337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:28:59.152 [DEBUG] [Thread-131337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:28:59.192 [DEBUG] [Thread-131337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:28:59.192 [DEBUG] [Thread-131337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:28:59.194 [DEBUG] [Thread-131337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:28:59.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:28:59.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:28:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:28:59.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:28:59.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:28:59.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:28:59.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:28:59.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:28:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:28:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.561600 -999.00  +24.60  25.98     40  +10.20 1 2 1 1 1   888    0 15.63 33.09 ----- 33.7 26.0 298.0 36.5 30.2 -21.9 29.8 -21.8 30.1 -21.9 31.0 -20.8
2026-02-11T15:28:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:28:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:28:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.561600
2026-02-11T15:28:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:28:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:28:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:28:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:28:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:28:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:28:48', tmtdew=18.07, humidity=31.91, cloud=0.0, wind=30.1, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:28:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:28:59.218 [DEBUG] [Thread-131337] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:28:59.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:28:59.308 [DEBUG] [Thread-131340] [transport.py] [_log()] starting thread (client mode): 0xa57c03a0
2026-02-11T15:28:59.309 [DEBUG] [Thread-131340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:28:59.323 [DEBUG] [Thread-131340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:28:59.323 [INFO] [Thread-131340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:28:59.330 [DEBUG] [Thread-131340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:28:59.330 [DEBUG] [Thread-131340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] client lang: <none>
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] server lang: <none>
2026-02-11T15:28:59.331 [DEBUG] [Thread-131340] [transport.py] [_log()] kex follows: False
2026-02-11T15:28:59.332 [DEBUG] [Thread-131340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:28:59.332 [DEBUG] [Thread-131340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:28:59.332 [DEBUG] [Thread-131340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:28:59.332 [DEBUG] [Thread-131340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:28:59.332 [DEBUG] [Thread-131340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:28:59.332 [DEBUG] [Thread-131340] [transport.py] [_log()] Compression: none
2026-02-11T15:28:59.333 [DEBUG] [Thread-131340] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:28:59.388 [DEBUG] [Thread-131340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:28:59.389 [DEBUG] [Thread-131340] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:28:59.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:28:59.390 [DEBUG] [Thread-131340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:28:59.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:28:59.446 [DEBUG] [Thread-131340] [transport.py] [_log()] userauth is OK
2026-02-11T15:28:59.446 [DEBUG] [Thread-131340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:28:59.446 [DEBUG] [Thread-131340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:28:59.446 [DEBUG] [Thread-131340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:28:59.446 [DEBUG] [Thread-131340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:28:59.465 [INFO] [Thread-131340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:28:59.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:28:59.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:29:00.299 [DEBUG] [Thread-131340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:29:00.300 [DEBUG] [Thread-131340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:29:00.347 [DEBUG] [Thread-131340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:29:00.348 [DEBUG] [Thread-131340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:29:00.357 [DEBUG] [Thread-131340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:29:00.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:29:00.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:29:00.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:29:00.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:29:00.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:29:00.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:29:00.394 [DEBUG] [Thread-131340] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:29:12.337 [DEBUG] [Thread-131342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:29:22.203 [DEBUG] [Thread-131343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:29:27.389 [DEBUG] [Thread-131344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:29:30.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:29:30.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:29:30.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
2026-02-11T15:29:32.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 29, 23), 17.99, 32.06, 0.0, 30.07, 26.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:29:32.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:29:23
2026-02-11T15:29:33.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:29:33.180 [DEBUG] [Thread-131345] [transport.py] [_log()] starting thread (client mode): 0xa57c2e60
2026-02-11T15:29:33.180 [DEBUG] [Thread-131345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:29:33.199 [DEBUG] [Thread-131345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:29:33.199 [INFO] [Thread-131345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:29:33.203 [DEBUG] [Thread-131345] [transport.py] [_log()] client lang: <none>
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] server lang: <none>
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] kex follows: False
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] Compression: none
2026-02-11T15:29:33.204 [DEBUG] [Thread-131345] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:29:33.221 [DEBUG] [Thread-131345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:29:33.221 [DEBUG] [Thread-131345] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:29:33.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:29:33.222 [DEBUG] [Thread-131345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:29:33.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:29:33.224 [DEBUG] [Thread-131345] [transport.py] [_log()] userauth is OK
2026-02-11T15:29:33.225 [DEBUG] [Thread-131345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:29:33.225 [DEBUG] [Thread-131345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:29:33.225 [DEBUG] [Thread-131345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:29:33.225 [DEBUG] [Thread-131345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:29:33.249 [INFO] [Thread-131345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:29:33.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:29:33.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:29:33.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:29:33.846 [DEBUG] [Thread-131345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:29:33.846 [DEBUG] [Thread-131345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:29:33.846 [DEBUG] [Thread-131345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:29:33.887 [DEBUG] [Thread-131345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:29:33.887 [DEBUG] [Thread-131345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:29:33.890 [DEBUG] [Thread-131345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:29:33.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:29:33.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:29:33.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:29:33.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:29:33.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:29:33.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:29:33.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:29:33.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:29:33.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:29:33.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.561948 -999.00  +24.70  27.13     40  +10.20 1 1 1 1 1   888    0 15.70 33.36 ----- 27.8 27.1 276.6 37.0 29.9 -23.8 29.7 -23.2 30.1 -28.3 30.8 -21.9
2026-02-11T15:29:33.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:29:33.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:29:33.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.561948
2026-02-11T15:29:33.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:29:33.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:29:33.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:29:33.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:29:33.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T15:29:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:29:23', tmtdew=17.99, humidity=32.06, cloud=0.0, wind=30.07, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:29:12.307', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:29:33.915 [DEBUG] [Thread-131345] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:29:33.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:29:34.010 [DEBUG] [Thread-131348] [transport.py] [_log()] starting thread (client mode): 0xa5773d00
2026-02-11T15:29:34.010 [DEBUG] [Thread-131348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:29:34.028 [DEBUG] [Thread-131348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:29:34.028 [INFO] [Thread-131348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:29:34.038 [DEBUG] [Thread-131348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] client lang: <none>
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] server lang: <none>
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] kex follows: False
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] Compression: none
2026-02-11T15:29:34.039 [DEBUG] [Thread-131348] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:29:34.100 [DEBUG] [Thread-131348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:29:34.100 [DEBUG] [Thread-131348] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:29:34.101 [DEBUG] [Thread-131348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:29:34.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:29:34.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:29:34.163 [DEBUG] [Thread-131348] [transport.py] [_log()] userauth is OK
2026-02-11T15:29:34.163 [DEBUG] [Thread-131348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:29:34.163 [DEBUG] [Thread-131348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:29:34.163 [DEBUG] [Thread-131348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:29:34.163 [DEBUG] [Thread-131348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:29:34.183 [INFO] [Thread-131348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:29:34.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:29:34.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:29:35.011 [DEBUG] [Thread-131348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:29:35.011 [DEBUG] [Thread-131348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:29:35.059 [DEBUG] [Thread-131348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:29:35.059 [DEBUG] [Thread-131348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:29:35.069 [DEBUG] [Thread-131348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:29:35.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:29:35.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:29:35.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:29:35.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:29:35.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:29:35.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:29:35.107 [DEBUG] [Thread-131348] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:29:42.427 [DEBUG] [Thread-131350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:29:57.478 [DEBUG] [Thread-131351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:30:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:30:05.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:30:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:30:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 29, 59), 17.34, 33.42, 0.0, 30.45, 25.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:30:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:29:59
2026-02-11T15:30:07.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:30:07.648 [DEBUG] [Thread-131352] [transport.py] [_log()] starting thread (client mode): 0xa575b4f0
2026-02-11T15:30:07.649 [DEBUG] [Thread-131352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:30:07.670 [DEBUG] [Thread-131352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:30:07.670 [INFO] [Thread-131352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] client lang: <none>
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] server lang: <none>
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] kex follows: False
2026-02-11T15:30:07.672 [DEBUG] [Thread-131352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:30:07.673 [DEBUG] [Thread-131352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:30:07.673 [DEBUG] [Thread-131352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:30:07.673 [DEBUG] [Thread-131352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:30:07.673 [DEBUG] [Thread-131352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:30:07.673 [DEBUG] [Thread-131352] [transport.py] [_log()] Compression: none
2026-02-11T15:30:07.673 [DEBUG] [Thread-131352] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:30:07.683 [DEBUG] [Thread-131352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:30:07.684 [DEBUG] [Thread-131352] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:30:07.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:30:07.685 [DEBUG] [Thread-131352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:30:07.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:30:07.686 [DEBUG] [Thread-131352] [transport.py] [_log()] userauth is OK
2026-02-11T15:30:07.686 [DEBUG] [Thread-131352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:30:07.686 [DEBUG] [Thread-131352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:30:07.686 [DEBUG] [Thread-131352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:30:07.686 [DEBUG] [Thread-131352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:30:07.699 [INFO] [Thread-131352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:30:07.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:30:08.514 [DEBUG] [Thread-131352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:30:08.514 [DEBUG] [Thread-131352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:30:08.514 [DEBUG] [Thread-131352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:30:08.554 [DEBUG] [Thread-131352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:30:08.554 [DEBUG] [Thread-131352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:30:08.558 [DEBUG] [Thread-131352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:30:08.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:30:08.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:30:08.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:30:08.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:30:08.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:30:08.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:30:08.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:30:08.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:30:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:30:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.562295 -999.00  +24.30  30.43     39   +9.70 1 1 2 1 1   888    0 15.39 37.94 ----- 28.3 30.4 279.6 39.4 29.8 -24.0 29.6 -22.8 29.5 -27.7 30.7 -21.7
2026-02-11T15:30:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:30:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:30:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.562295
2026-02-11T15:30:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:30:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:30:08.625 [DEBUG] [Thread-131352] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:30:08.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:30:08.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:30:08.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T15:30:08.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:29:59', tmtdew=17.34, humidity=33.42, cloud=0.0, wind=30.45, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:29:42.288', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:30:08.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:30:08.717 [DEBUG] [Thread-131355] [transport.py] [_log()] starting thread (client mode): 0xa2db6a70
2026-02-11T15:30:08.717 [DEBUG] [Thread-131355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:30:08.731 [DEBUG] [Thread-131355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:30:08.732 [INFO] [Thread-131355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:30:08.739 [DEBUG] [Thread-131355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:30:08.739 [DEBUG] [Thread-131355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:30:08.739 [DEBUG] [Thread-131355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:30:08.739 [DEBUG] [Thread-131355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:08.739 [DEBUG] [Thread-131355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] client lang: <none>
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] server lang: <none>
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] kex follows: False
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] Compression: none
2026-02-11T15:30:08.740 [DEBUG] [Thread-131355] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:30:08.797 [DEBUG] [Thread-131355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:30:08.798 [DEBUG] [Thread-131355] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:30:08.798 [DEBUG] [Thread-131355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:30:08.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:30:08.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:30:08.853 [DEBUG] [Thread-131355] [transport.py] [_log()] userauth is OK
2026-02-11T15:30:08.853 [DEBUG] [Thread-131355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:30:08.854 [DEBUG] [Thread-131355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:30:08.854 [DEBUG] [Thread-131355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:30:08.854 [DEBUG] [Thread-131355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:30:08.873 [INFO] [Thread-131355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:30:08.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:30:08.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:30:09.688 [DEBUG] [Thread-131355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:30:09.688 [DEBUG] [Thread-131355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:30:09.736 [DEBUG] [Thread-131355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:30:09.737 [DEBUG] [Thread-131355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:30:09.745 [DEBUG] [Thread-131355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:30:09.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:30:09.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')
2026-02-11T15:30: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') -> 00000000
2026-02-11T15:30:09.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:30:09.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:30:09.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:30:09.782 [DEBUG] [Thread-131355] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:30:12.517 [DEBUG] [Thread-131357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:30:22.246 [DEBUG] [Thread-131358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:30:27.571 [DEBUG] [Thread-131359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:30:33.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:30:33.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:30:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:30:39.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:30:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:30:41.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 29, 59), 17.34, 33.42, 0.0, 30.45, 25.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:30:41.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:29:59
2026-02-11T15:30:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:30:42.261 [DEBUG] [Thread-131360] [transport.py] [_log()] starting thread (client mode): 0xa57c3a00
2026-02-11T15:30:42.261 [DEBUG] [Thread-131360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:30:42.281 [DEBUG] [Thread-131360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:30:42.281 [INFO] [Thread-131360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] client lang: <none>
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] server lang: <none>
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] kex follows: False
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] Compression: none
2026-02-11T15:30:42.284 [DEBUG] [Thread-131360] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:30:42.302 [DEBUG] [Thread-131360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:30:42.302 [DEBUG] [Thread-131360] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:30:42.303 [DEBUG] [Thread-131360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:30:42.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:30:42.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:30:42.305 [DEBUG] [Thread-131360] [transport.py] [_log()] userauth is OK
2026-02-11T15:30:42.305 [DEBUG] [Thread-131360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:30:42.305 [DEBUG] [Thread-131360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:30:42.305 [DEBUG] [Thread-131360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:30:42.305 [DEBUG] [Thread-131360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:30:42.327 [INFO] [Thread-131360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:30:42.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:30:42.606 [DEBUG] [Thread-131362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:30:42.967 [DEBUG] [Thread-131360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:30:42.967 [DEBUG] [Thread-131360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:30:42.967 [DEBUG] [Thread-131360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:30:43.008 [DEBUG] [Thread-131360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:30:43.008 [DEBUG] [Thread-131360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:30:43.011 [DEBUG] [Thread-131360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:30:43.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:30:43.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:30:43.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:30:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:30:43.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:30:43.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:30:43.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:30:43.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:30:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:30:43.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.562643 -999.00  +24.30  21.28     39   +9.80 1 2 1 1 1   888    0 16.01 42.00 ----- 20.0 21.3 298.0 31.8 29.8 -24.0 29.6 -21.2 29.4 -24.4 30.6 -20.9
2026-02-11T15:30:43.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:30:43.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:30:43.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.562643
2026-02-11T15:30:43.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:30:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:30:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:30:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:30:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:30:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:29:59', tmtdew=17.34, humidity=33.42, cloud=0.0, wind=30.45, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:30:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:30:43.032 [DEBUG] [Thread-131360] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:30:43.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:30:43.138 [DEBUG] [Thread-131364] [transport.py] [_log()] starting thread (client mode): 0xa57d4d00
2026-02-11T15:30:43.138 [DEBUG] [Thread-131364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:30:43.154 [DEBUG] [Thread-131364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:30:43.154 [INFO] [Thread-131364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] client lang: <none>
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] server lang: <none>
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] kex follows: False
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] Compression: none
2026-02-11T15:30:43.162 [DEBUG] [Thread-131364] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:30:43.219 [DEBUG] [Thread-131364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:30:43.220 [DEBUG] [Thread-131364] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:30:43.220 [DEBUG] [Thread-131364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:30:43.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:30:43.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:30:43.276 [DEBUG] [Thread-131364] [transport.py] [_log()] userauth is OK
2026-02-11T15:30:43.276 [DEBUG] [Thread-131364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:30:43.276 [DEBUG] [Thread-131364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:30:43.276 [DEBUG] [Thread-131364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:30:43.276 [DEBUG] [Thread-131364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:30:43.294 [INFO] [Thread-131364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:30:43.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:30:43.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:30:44.112 [DEBUG] [Thread-131364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:30:44.112 [DEBUG] [Thread-131364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:30:44.160 [DEBUG] [Thread-131364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:30:44.160 [DEBUG] [Thread-131364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:30:44.169 [DEBUG] [Thread-131364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:30:44.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:30:44.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:30:44.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:30:44.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:30:44.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:30:44.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:30:44.213 [DEBUG] [Thread-131364] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:30:57.642 [DEBUG] [Thread-131366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:31:12.696 [DEBUG] [Thread-131367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:31:14.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:31:14.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:31:14.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:31:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 30, 34), 19.15, 29.72, 0.0, 31.86, 26.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:31:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:30:34
2026-02-11T15:31:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:31:16.915 [DEBUG] [Thread-131368] [transport.py] [_log()] starting thread (client mode): 0xa81d5a50
2026-02-11T15:31:16.915 [DEBUG] [Thread-131368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:31:16.935 [DEBUG] [Thread-131368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:31:16.935 [INFO] [Thread-131368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:31:16.938 [DEBUG] [Thread-131368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:31:16.938 [DEBUG] [Thread-131368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:31:16.938 [DEBUG] [Thread-131368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:31:16.938 [DEBUG] [Thread-131368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:16.938 [DEBUG] [Thread-131368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:16.938 [DEBUG] [Thread-131368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:16.938 [DEBUG] [Thread-131368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] client lang: <none>
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] server lang: <none>
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] kex follows: False
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] Compression: none
2026-02-11T15:31:16.939 [DEBUG] [Thread-131368] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:31:16.958 [DEBUG] [Thread-131368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:31:16.959 [DEBUG] [Thread-131368] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:31:16.959 [DEBUG] [Thread-131368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:31:16.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:31:16.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:31:17.000 [DEBUG] [Thread-131368] [transport.py] [_log()] userauth is OK
2026-02-11T15:31:17.001 [DEBUG] [Thread-131368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:31:17.001 [DEBUG] [Thread-131368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:31:17.001 [DEBUG] [Thread-131368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:31:17.001 [DEBUG] [Thread-131368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:31:17.020 [INFO] [Thread-131368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:31:17.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:31:17.658 [DEBUG] [Thread-131368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:31:17.659 [DEBUG] [Thread-131368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:31:17.659 [DEBUG] [Thread-131368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:31:17.699 [DEBUG] [Thread-131368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:31:17.699 [DEBUG] [Thread-131368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:31:17.702 [DEBUG] [Thread-131368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:31:17.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:31:17.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:31:17.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:31:17.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:31:17.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:31:17.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:31:17.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:31:17.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:31:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:31:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.562989 -999.00  +24.20  22.91     40   +9.90 1 2 1 1 1   888    0 15.96 43.12 ----- 26.4 22.9 308.0 33.5 29.9 -22.8 29.6 -21.2 29.9 -23.0 30.7 -20.8
2026-02-11T15:31:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:31:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:31:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.562989
2026-02-11T15:31:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:31:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:31:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:31:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:31:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:31:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:30:34', tmtdew=19.15, humidity=29.72, cloud=0.0, wind=31.86, temperature=26.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:30:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:31:17.732 [DEBUG] [Thread-131368] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:31:17.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:31:17.853 [DEBUG] [Thread-131371] [transport.py] [_log()] starting thread (client mode): 0xa57c0190
2026-02-11T15:31:17.853 [DEBUG] [Thread-131371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:31:17.867 [DEBUG] [Thread-131371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:31:17.867 [INFO] [Thread-131371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:31:17.874 [DEBUG] [Thread-131371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] client lang: <none>
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] server lang: <none>
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] kex follows: False
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:31:17.875 [DEBUG] [Thread-131371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:31:17.876 [DEBUG] [Thread-131371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:31:17.876 [DEBUG] [Thread-131371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:31:17.876 [DEBUG] [Thread-131371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:31:17.876 [DEBUG] [Thread-131371] [transport.py] [_log()] Compression: none
2026-02-11T15:31:17.876 [DEBUG] [Thread-131371] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:31:17.933 [DEBUG] [Thread-131371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:31:17.933 [DEBUG] [Thread-131371] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:31:17.934 [DEBUG] [Thread-131371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:31:17.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:31:17.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:31:17.988 [DEBUG] [Thread-131371] [transport.py] [_log()] userauth is OK
2026-02-11T15:31:17.989 [DEBUG] [Thread-131371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:31:17.989 [DEBUG] [Thread-131371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:31:17.989 [DEBUG] [Thread-131371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:31:17.989 [DEBUG] [Thread-131371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:31:18.008 [INFO] [Thread-131371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:31:18.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:31:18.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:31:18.839 [DEBUG] [Thread-131371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:31:18.839 [DEBUG] [Thread-131371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:31:18.887 [DEBUG] [Thread-131371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:31:18.888 [DEBUG] [Thread-131371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:31:18.897 [DEBUG] [Thread-131371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:31:18.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:31:18.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:31:18.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:31:18.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:31:18.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:31:18.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:31:18.938 [DEBUG] [Thread-131371] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:31:22.289 [DEBUG] [Thread-131373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:31:27.732 [DEBUG] [Thread-131374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:31:34.044 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:31:34.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:31:42.794 [DEBUG] [Thread-131375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:31:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:31:48.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:31:48.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:31:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 31, 10), 17.77, 32.46, 0.0, 26.08, 25.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:31:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:31:10
2026-02-11T15:31:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:31:51.659 [DEBUG] [Thread-131376] [transport.py] [_log()] starting thread (client mode): 0xa5740730
2026-02-11T15:31:51.660 [DEBUG] [Thread-131376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:31:51.681 [DEBUG] [Thread-131376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:31:51.681 [INFO] [Thread-131376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] client lang: <none>
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] server lang: <none>
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] kex follows: False
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] Compression: none
2026-02-11T15:31:51.684 [DEBUG] [Thread-131376] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:31:51.701 [DEBUG] [Thread-131376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:31:51.701 [DEBUG] [Thread-131376] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:31:51.701 [DEBUG] [Thread-131376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:31:51.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:31:51.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:31:51.703 [DEBUG] [Thread-131376] [transport.py] [_log()] userauth is OK
2026-02-11T15:31:51.703 [DEBUG] [Thread-131376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:31:51.703 [DEBUG] [Thread-131376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:31:51.703 [DEBUG] [Thread-131376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:31:51.703 [DEBUG] [Thread-131376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:31:51.739 [INFO] [Thread-131376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:31:51.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:31:52.350 [DEBUG] [Thread-131376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:31:52.350 [DEBUG] [Thread-131376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:31:52.350 [DEBUG] [Thread-131376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:31:52.390 [DEBUG] [Thread-131376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:31:52.391 [DEBUG] [Thread-131376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:31:52.394 [DEBUG] [Thread-131376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:31:52.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:31:52.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:31:52.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:31:52.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:31:52.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:31:52.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:31:52.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:31:52.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:31:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:31:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.563684 -999.00  +24.60  12.88     39   +9.90 1 2 1 1 1   888    0 16.15 49.71 ----- 15.1 12.9 294.6 22.4 30.0 -22.9 29.8 -20.7 30.2 -20.2 30.9 -20.2
2026-02-11T15:31:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:31:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:31:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.563684
2026-02-11T15:31:52.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:31:52.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:31:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:31:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:31:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:31:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:31:10', tmtdew=17.77, humidity=32.46, cloud=0.0, wind=26.08, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:31:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:31:52.421 [DEBUG] [Thread-131376] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:31:52.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:31:52.518 [DEBUG] [Thread-131379] [transport.py] [_log()] starting thread (client mode): 0xa575a890
2026-02-11T15:31:52.518 [DEBUG] [Thread-131379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:31:52.537 [DEBUG] [Thread-131379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:31:52.538 [INFO] [Thread-131379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:31:52.545 [DEBUG] [Thread-131379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] client lang: <none>
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] server lang: <none>
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] kex follows: False
2026-02-11T15:31:52.546 [DEBUG] [Thread-131379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:31:52.547 [DEBUG] [Thread-131379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:31:52.547 [DEBUG] [Thread-131379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:31:52.547 [DEBUG] [Thread-131379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:31:52.547 [DEBUG] [Thread-131379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:31:52.547 [DEBUG] [Thread-131379] [transport.py] [_log()] Compression: none
2026-02-11T15:31:52.547 [DEBUG] [Thread-131379] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:31:52.604 [DEBUG] [Thread-131379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:31:52.605 [DEBUG] [Thread-131379] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:31:52.605 [DEBUG] [Thread-131379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:31:52.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:31:52.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:31:52.660 [DEBUG] [Thread-131379] [transport.py] [_log()] userauth is OK
2026-02-11T15:31:52.661 [DEBUG] [Thread-131379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:31:52.661 [DEBUG] [Thread-131379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:31:52.661 [DEBUG] [Thread-131379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:31:52.661 [DEBUG] [Thread-131379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:31:52.680 [INFO] [Thread-131379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:31:52.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:31:52.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:31:53.528 [DEBUG] [Thread-131379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:31:53.528 [DEBUG] [Thread-131379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:31:53.576 [DEBUG] [Thread-131379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:31:53.576 [DEBUG] [Thread-131379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:31:53.586 [DEBUG] [Thread-131379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:31:53.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:31:53.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:31:53.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:31:53.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:31:53.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:31:53.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:31:53.622 [DEBUG] [Thread-131379] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:31:57.833 [DEBUG] [Thread-131381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:12.883 [DEBUG] [Thread-131382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:22.332 [DEBUG] [Thread-131383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:32:23.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:32:23.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
2026-02-11T15:32:25.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 31, 46), 17.75, 32.41, 0.0, 17.12, 25.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:32:25.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:31:46
2026-02-11T15:32:26.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:32:26.541 [DEBUG] [Thread-131384] [transport.py] [_log()] starting thread (client mode): 0xa2db4f10
2026-02-11T15:32:26.541 [DEBUG] [Thread-131384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:32:26.562 [DEBUG] [Thread-131384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:32:26.562 [INFO] [Thread-131384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:32:26.565 [DEBUG] [Thread-131384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] client lang: <none>
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] server lang: <none>
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] kex follows: False
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] Compression: none
2026-02-11T15:32:26.566 [DEBUG] [Thread-131384] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:32:26.585 [DEBUG] [Thread-131384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:32:26.585 [DEBUG] [Thread-131384] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:32:26.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:32:26.586 [DEBUG] [Thread-131384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:32:26.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:32:26.589 [DEBUG] [Thread-131384] [transport.py] [_log()] userauth is OK
2026-02-11T15:32:26.589 [DEBUG] [Thread-131384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:32:26.589 [DEBUG] [Thread-131384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:32:26.589 [DEBUG] [Thread-131384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:32:26.589 [DEBUG] [Thread-131384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:32:26.623 [INFO] [Thread-131384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:32:26.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:32:27.256 [DEBUG] [Thread-131384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:32:27.256 [DEBUG] [Thread-131384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:32:27.256 [DEBUG] [Thread-131384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:32:27.297 [DEBUG] [Thread-131384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:32:27.297 [DEBUG] [Thread-131384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:32:27.301 [DEBUG] [Thread-131384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:32:27.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:32:27.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:32:27.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:32:27.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:32:27.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:32:27.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:32:27.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:32:27.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:32:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:32:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.564031 -999.00  +24.80  26.31     39  +10.20 1 2 1 1 1   888    0 15.80 50.27 ----- 25.3 26.3 286.0 30.4 30.3 -22.3 29.9 -20.7 30.4 -19.4 31.1 -20.7
2026-02-11T15:32:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:32:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:32:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.564031
2026-02-11T15:32:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:32:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:32:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:32:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:32:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:32:27.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:31:46', tmtdew=17.75, humidity=32.41, cloud=0.0, wind=17.12, temperature=25.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:32:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:32:27.328 [DEBUG] [Thread-131384] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:32:27.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:32:27.434 [DEBUG] [Thread-131387] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-11T15:32:27.434 [DEBUG] [Thread-131387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:32:27.461 [DEBUG] [Thread-131387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:32:27.462 [INFO] [Thread-131387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:32:27.472 [DEBUG] [Thread-131387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:32:27.473 [DEBUG] [Thread-131387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:32:27.473 [DEBUG] [Thread-131387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:32:27.473 [DEBUG] [Thread-131387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:32:27.473 [DEBUG] [Thread-131387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:32:27.473 [DEBUG] [Thread-131387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:32:27.473 [DEBUG] [Thread-131387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:32:27.473 [DEBUG] [Thread-131387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:32:27.474 [DEBUG] [Thread-131387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:32:27.474 [DEBUG] [Thread-131387] [transport.py] [_log()] client lang: <none>
2026-02-11T15:32:27.474 [DEBUG] [Thread-131387] [transport.py] [_log()] server lang: <none>
2026-02-11T15:32:27.474 [DEBUG] [Thread-131387] [transport.py] [_log()] kex follows: False
2026-02-11T15:32:27.474 [DEBUG] [Thread-131387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:32:27.475 [DEBUG] [Thread-131387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:32:27.475 [DEBUG] [Thread-131387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:32:27.475 [DEBUG] [Thread-131387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:32:27.475 [DEBUG] [Thread-131387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:32:27.475 [DEBUG] [Thread-131387] [transport.py] [_log()] Compression: none
2026-02-11T15:32:27.475 [DEBUG] [Thread-131387] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:32:27.529 [DEBUG] [Thread-131387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:32:27.529 [DEBUG] [Thread-131387] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:32:27.530 [DEBUG] [Thread-131387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:32:27.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:32:27.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:32:27.584 [DEBUG] [Thread-131387] [transport.py] [_log()] userauth is OK
2026-02-11T15:32:27.585 [DEBUG] [Thread-131387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:32:27.585 [DEBUG] [Thread-131387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:32:27.585 [DEBUG] [Thread-131387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:32:27.585 [DEBUG] [Thread-131387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:32:27.605 [INFO] [Thread-131387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:32:27.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:32:27.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:32:27.915 [DEBUG] [Thread-131389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:28.437 [DEBUG] [Thread-131387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:32:28.437 [DEBUG] [Thread-131387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:32:28.485 [DEBUG] [Thread-131387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:32:28.486 [DEBUG] [Thread-131387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:32:28.495 [DEBUG] [Thread-131387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:32:28.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:32:28.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:32:28.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:32:28.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:32:28.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:32:28.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:32:28.752 [DEBUG] [Thread-131387] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:32:34.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:34.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:42.969 [DEBUG] [Thread-131390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:58.002 [DEBUG] [Thread-131391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:32:58.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:32:58.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:32:58.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:33:00.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 32, 22), 17.76, 32.36, 0.0, 15.74, 25.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:33:00.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:32:22
2026-02-11T15:33:01.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:33:01.284 [DEBUG] [Thread-131392] [transport.py] [_log()] starting thread (client mode): 0xa57c1b10
2026-02-11T15:33:01.284 [DEBUG] [Thread-131392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:33:01.304 [DEBUG] [Thread-131392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:33:01.304 [INFO] [Thread-131392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:33:01.306 [DEBUG] [Thread-131392] [transport.py] [_log()] client lang: <none>
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] server lang: <none>
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] kex follows: False
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] Compression: none
2026-02-11T15:33:01.307 [DEBUG] [Thread-131392] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:33:01.324 [DEBUG] [Thread-131392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:33:01.324 [DEBUG] [Thread-131392] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:33:01.324 [DEBUG] [Thread-131392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:33:01.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:33:01.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:33:01.325 [DEBUG] [Thread-131392] [transport.py] [_log()] userauth is OK
2026-02-11T15:33:01.325 [DEBUG] [Thread-131392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:33:01.325 [DEBUG] [Thread-131392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:33:01.325 [DEBUG] [Thread-131392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:33:01.325 [DEBUG] [Thread-131392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:33:01.334 [INFO] [Thread-131392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:33:01.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:33:01.979 [DEBUG] [Thread-131392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:33:01.979 [DEBUG] [Thread-131392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:33:01.980 [DEBUG] [Thread-131392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:33:02.020 [DEBUG] [Thread-131392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:33:02.021 [DEBUG] [Thread-131392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:33:02.024 [DEBUG] [Thread-131392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:33:02.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:33:02.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:33:02.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:33:02.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:33:02.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:33:02.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:33:02.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:33:02.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:33:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:33:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.564378 -999.00  +25.70  24.57     39  +10.70 1 2 1 1 1   888    0 16.22 46.20 ----- 22.6 24.6 299.4 28.6 30.4 -21.2 30.1 -20.9 30.5 -18.7 31.3 -19.6
2026-02-11T15:33:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:33:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:33:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.564378
2026-02-11T15:33:02.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:33:02.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:33:02.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:33:02.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:33:02.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:33:02.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:32:22', tmtdew=17.76, humidity=32.36, cloud=0.0, wind=15.74, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:32:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:33:02.052 [DEBUG] [Thread-131392] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:33:02.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:33:02.144 [DEBUG] [Thread-131395] [transport.py] [_log()] starting thread (client mode): 0xa2d6c460
2026-02-11T15:33:02.144 [DEBUG] [Thread-131395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:33:02.159 [DEBUG] [Thread-131395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:33:02.159 [INFO] [Thread-131395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:33:02.166 [DEBUG] [Thread-131395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] client lang: <none>
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] server lang: <none>
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] kex follows: False
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] Compression: none
2026-02-11T15:33:02.167 [DEBUG] [Thread-131395] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:33:02.230 [DEBUG] [Thread-131395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:33:02.230 [DEBUG] [Thread-131395] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:33:02.231 [DEBUG] [Thread-131395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:33:02.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:33:02.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:33:02.289 [DEBUG] [Thread-131395] [transport.py] [_log()] userauth is OK
2026-02-11T15:33:02.289 [DEBUG] [Thread-131395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:33:02.289 [DEBUG] [Thread-131395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:33:02.289 [DEBUG] [Thread-131395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:33:02.289 [DEBUG] [Thread-131395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:33:02.313 [INFO] [Thread-131395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:33:02.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:33:02.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:33:03.186 [DEBUG] [Thread-131395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:33:03.187 [DEBUG] [Thread-131395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:33:03.234 [DEBUG] [Thread-131395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:33:03.234 [DEBUG] [Thread-131395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:33:03.243 [DEBUG] [Thread-131395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:33:03.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:33:03.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:33:03.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:33:03.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:33:03.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:33:03.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:33:03.276 [DEBUG] [Thread-131395] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:33:13.037 [DEBUG] [Thread-131397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:33:22.391 [DEBUG] [Thread-131398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:33:28.084 [DEBUG] [Thread-131399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:33:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:33:33.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:33:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:33:34.330 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:33:34.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:33:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 32, 58), 17.37, 33.46, 0.0, 28.34, 25.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:33:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:32:58
2026-02-11T15:33:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:33:36.016 [DEBUG] [Thread-131400] [transport.py] [_log()] starting thread (client mode): 0xa2d56ec0
2026-02-11T15:33:36.016 [DEBUG] [Thread-131400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:33:36.038 [DEBUG] [Thread-131400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:33:36.038 [INFO] [Thread-131400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:33:36.040 [DEBUG] [Thread-131400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] client lang: <none>
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] server lang: <none>
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] kex follows: False
2026-02-11T15:33:36.041 [DEBUG] [Thread-131400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:33:36.042 [DEBUG] [Thread-131400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:33:36.042 [DEBUG] [Thread-131400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:33:36.042 [DEBUG] [Thread-131400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:33:36.042 [DEBUG] [Thread-131400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:33:36.042 [DEBUG] [Thread-131400] [transport.py] [_log()] Compression: none
2026-02-11T15:33:36.042 [DEBUG] [Thread-131400] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:33:36.065 [DEBUG] [Thread-131400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:33:36.065 [DEBUG] [Thread-131400] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:33:36.066 [DEBUG] [Thread-131400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:33:36.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:33:36.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:33:36.068 [DEBUG] [Thread-131400] [transport.py] [_log()] userauth is OK
2026-02-11T15:33:36.068 [DEBUG] [Thread-131400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:33:36.068 [DEBUG] [Thread-131400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:33:36.068 [DEBUG] [Thread-131400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:33:36.068 [DEBUG] [Thread-131400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:33:36.085 [INFO] [Thread-131400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:33:36.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:33:36.770 [DEBUG] [Thread-131400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:33:36.779 [DEBUG] [Thread-131400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:33:36.780 [DEBUG] [Thread-131400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:33:36.812 [DEBUG] [Thread-131400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:33:36.812 [DEBUG] [Thread-131400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:33:36.815 [DEBUG] [Thread-131400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:33:36.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:33:36.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:33:36.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:33:36.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:33:36.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:33:36.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:33:36.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:33:36.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:33:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:33:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.564725 -999.00  +25.60  24.38     38  +10.30 1 2 1 1 1   888    0 15.65 45.45 ----- 26.4 24.4 285.2 32.8 30.4 -25.6 29.9 -22.6 30.6 -19.0 31.1 -24.1
2026-02-11T15:33:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:33:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:33:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.564725
2026-02-11T15:33:36.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:33:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:33:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:33:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:33:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:33:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:32:58', tmtdew=17.37, humidity=33.46, cloud=0.0, wind=28.34, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:33:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:33:36.843 [DEBUG] [Thread-131400] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:33:36.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:33:36.936 [DEBUG] [Thread-131403] [transport.py] [_log()] starting thread (client mode): 0xa5770910
2026-02-11T15:33:36.936 [DEBUG] [Thread-131403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:33:36.954 [DEBUG] [Thread-131403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:33:36.954 [INFO] [Thread-131403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:33:36.962 [DEBUG] [Thread-131403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:33:36.962 [DEBUG] [Thread-131403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:33:36.962 [DEBUG] [Thread-131403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:33:36.962 [DEBUG] [Thread-131403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] client lang: <none>
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] server lang: <none>
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] kex follows: False
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] Compression: none
2026-02-11T15:33:36.963 [DEBUG] [Thread-131403] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:33:37.022 [DEBUG] [Thread-131403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:33:37.022 [DEBUG] [Thread-131403] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:33:37.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:33:37.024 [DEBUG] [Thread-131403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:33:37.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:33:37.084 [DEBUG] [Thread-131403] [transport.py] [_log()] userauth is OK
2026-02-11T15:33:37.084 [DEBUG] [Thread-131403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:33:37.084 [DEBUG] [Thread-131403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:33:37.084 [DEBUG] [Thread-131403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:33:37.085 [DEBUG] [Thread-131403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:33:37.106 [INFO] [Thread-131403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:33:37.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:33:37.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:33:37.961 [DEBUG] [Thread-131403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:33:37.962 [DEBUG] [Thread-131403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:33:38.009 [DEBUG] [Thread-131403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:33:38.010 [DEBUG] [Thread-131403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:33:38.019 [DEBUG] [Thread-131403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:33:38.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:33:38.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:33:38.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:33:38.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:33:38.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:33:38.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:33:38.056 [DEBUG] [Thread-131403] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:33:43.118 [DEBUG] [Thread-131405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:33:58.165 [DEBUG] [Thread-131406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:34:08.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:34:08.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:34:08.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
2026-02-11T15:34:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 33, 33), 18.74, 30.52, 0.0, 38.81, 26.72, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:34:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:33:33
2026-02-11T15:34:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:34:10.396 [DEBUG] [Thread-131407] [transport.py] [_log()] starting thread (client mode): 0xa2d54190
2026-02-11T15:34:10.397 [DEBUG] [Thread-131407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:34:10.416 [DEBUG] [Thread-131407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:34:10.416 [INFO] [Thread-131407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] client lang: <none>
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] server lang: <none>
2026-02-11T15:34:10.420 [DEBUG] [Thread-131407] [transport.py] [_log()] kex follows: False
2026-02-11T15:34:10.421 [DEBUG] [Thread-131407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:34:10.421 [DEBUG] [Thread-131407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:34:10.421 [DEBUG] [Thread-131407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:34:10.421 [DEBUG] [Thread-131407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:34:10.421 [DEBUG] [Thread-131407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:34:10.421 [DEBUG] [Thread-131407] [transport.py] [_log()] Compression: none
2026-02-11T15:34:10.421 [DEBUG] [Thread-131407] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:34:10.435 [DEBUG] [Thread-131407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:34:10.435 [DEBUG] [Thread-131407] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:34:10.436 [DEBUG] [Thread-131407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:34:10.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:34:10.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:34:10.436 [DEBUG] [Thread-131407] [transport.py] [_log()] userauth is OK
2026-02-11T15:34:10.436 [DEBUG] [Thread-131407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:34:10.437 [DEBUG] [Thread-131407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:34:10.437 [DEBUG] [Thread-131407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:34:10.437 [DEBUG] [Thread-131407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:34:10.448 [INFO] [Thread-131407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:34:10.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:34:11.099 [DEBUG] [Thread-131407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:34:11.099 [DEBUG] [Thread-131407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:34:11.100 [DEBUG] [Thread-131407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:34:11.140 [DEBUG] [Thread-131407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:34:11.140 [DEBUG] [Thread-131407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:34:11.144 [DEBUG] [Thread-131407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:34:11.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:34:11.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:34:11.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:34:11.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:34:11.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:34:11.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:34:11.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:34:11.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:34:11.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:34:11.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.565073 -999.00  +25.30  21.64     39  +10.50 1 2 1 1 1   888    0 15.52 44.90 ----- 20.9 21.6 280.2 33.9 30.2 -23.3 30.0 -21.1 30.0 -23.1 31.2 -20.9
2026-02-11T15:34:11.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:34:11.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:34:11.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.565073
2026-02-11T15:34:11.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:34:11.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:34:11.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:34:11.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:34:11.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:34:11.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:33:33', tmtdew=18.74, humidity=30.52, cloud=0.0, wind=38.81, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:33:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:34:11.171 [DEBUG] [Thread-131407] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:34:11.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:34:11.267 [DEBUG] [Thread-131410] [transport.py] [_log()] starting thread (client mode): 0x9eb050f0
2026-02-11T15:34:11.267 [DEBUG] [Thread-131410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:34:11.281 [DEBUG] [Thread-131410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:34:11.281 [INFO] [Thread-131410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:34:11.289 [DEBUG] [Thread-131410] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:34:11.289 [DEBUG] [Thread-131410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:34:11.289 [DEBUG] [Thread-131410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:34:11.289 [DEBUG] [Thread-131410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:11.289 [DEBUG] [Thread-131410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:11.289 [DEBUG] [Thread-131410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] client lang: <none>
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] server lang: <none>
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] kex follows: False
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] Compression: none
2026-02-11T15:34:11.290 [DEBUG] [Thread-131410] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:34:11.347 [DEBUG] [Thread-131410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:34:11.347 [DEBUG] [Thread-131410] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:34:11.347 [DEBUG] [Thread-131410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:34:11.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:34:11.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:34:11.405 [DEBUG] [Thread-131410] [transport.py] [_log()] userauth is OK
2026-02-11T15:34:11.405 [DEBUG] [Thread-131410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:34:11.405 [DEBUG] [Thread-131410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:34:11.405 [DEBUG] [Thread-131410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:34:11.405 [DEBUG] [Thread-131410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:34:11.424 [INFO] [Thread-131410] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:34:11.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:34:11.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:34:12.232 [DEBUG] [Thread-131410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:34:12.232 [DEBUG] [Thread-131410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:34:12.280 [DEBUG] [Thread-131410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:34:12.281 [DEBUG] [Thread-131410] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:34:12.290 [DEBUG] [Thread-131410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:34:12.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:34:12.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:34:12.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:34:12.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:34:12.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:34:12.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:34:12.327 [DEBUG] [Thread-131410] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:34:13.201 [DEBUG] [Thread-131412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:34:22.423 [DEBUG] [Thread-131413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:34:28.262 [DEBUG] [Thread-131414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:34:34.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:34:34.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:34:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:34:42.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:34:42.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:34:43.301 [DEBUG] [Thread-131415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:34:44.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 34, 10), 16.95, 33.9, 0.0, 30.37, 25.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:34:44.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:34:10
2026-02-11T15:34:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:34:44.671 [DEBUG] [Thread-131416] [transport.py] [_log()] starting thread (client mode): 0x9eb07e80
2026-02-11T15:34:44.671 [DEBUG] [Thread-131416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:34:44.691 [DEBUG] [Thread-131416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:34:44.692 [INFO] [Thread-131416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:34:44.694 [DEBUG] [Thread-131416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] client lang: <none>
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] server lang: <none>
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] kex follows: False
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] Compression: none
2026-02-11T15:34:44.695 [DEBUG] [Thread-131416] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:34:44.711 [DEBUG] [Thread-131416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:34:44.711 [DEBUG] [Thread-131416] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:34:44.712 [DEBUG] [Thread-131416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:34:44.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:34:44.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:34:44.753 [DEBUG] [Thread-131416] [transport.py] [_log()] userauth is OK
2026-02-11T15:34:44.753 [DEBUG] [Thread-131416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:34:44.753 [DEBUG] [Thread-131416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:34:44.753 [DEBUG] [Thread-131416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:34:44.754 [DEBUG] [Thread-131416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:34:44.785 [INFO] [Thread-131416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:34:44.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:34:45.432 [DEBUG] [Thread-131416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:34:45.432 [DEBUG] [Thread-131416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:34:45.433 [DEBUG] [Thread-131416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:34:45.474 [DEBUG] [Thread-131416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:34:45.474 [DEBUG] [Thread-131416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:34:45.478 [DEBUG] [Thread-131416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:34:45.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:34:45.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:34:45.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:34:45.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:34:45.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:34:45.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:34:45.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:34:45.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:34:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:34:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.565420 -999.00  +25.60  33.48     39  +10.70 1 2 2 1 1   888    0 16.15 42.45 ----- 38.1 33.5 300.4 40.6 30.4 -22.6 29.9 -23.2 30.3 -22.2 31.3 -22.0
2026-02-11T15:34:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:34:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:34:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.565420
2026-02-11T15:34:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:34:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:34:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:34:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:34:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:34:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:34:10', tmtdew=16.95, humidity=33.9, cloud=0.0, wind=30.37, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:34:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:34:45.506 [DEBUG] [Thread-131416] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:34:45.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:34:45.600 [DEBUG] [Thread-131419] [transport.py] [_log()] starting thread (client mode): 0x9eb07f70
2026-02-11T15:34:45.600 [DEBUG] [Thread-131419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:34:45.617 [DEBUG] [Thread-131419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:34:45.618 [INFO] [Thread-131419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:34:45.625 [DEBUG] [Thread-131419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:34:45.625 [DEBUG] [Thread-131419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:34:45.625 [DEBUG] [Thread-131419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:34:45.625 [DEBUG] [Thread-131419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:45.625 [DEBUG] [Thread-131419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:34:45.625 [DEBUG] [Thread-131419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] client lang: <none>
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] server lang: <none>
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] kex follows: False
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] Compression: none
2026-02-11T15:34:45.626 [DEBUG] [Thread-131419] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:34:45.684 [DEBUG] [Thread-131419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:34:45.685 [DEBUG] [Thread-131419] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:34:45.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:34:45.686 [DEBUG] [Thread-131419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:34:45.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:34:45.741 [DEBUG] [Thread-131419] [transport.py] [_log()] userauth is OK
2026-02-11T15:34:45.741 [DEBUG] [Thread-131419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:34:45.741 [DEBUG] [Thread-131419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:34:45.741 [DEBUG] [Thread-131419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:34:45.741 [DEBUG] [Thread-131419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:34:45.779 [INFO] [Thread-131419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:34:45.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:34:45.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:34:46.595 [DEBUG] [Thread-131419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:34:46.596 [DEBUG] [Thread-131419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:34:46.646 [DEBUG] [Thread-131419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:34:46.646 [DEBUG] [Thread-131419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:34:46.655 [DEBUG] [Thread-131419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:34:46.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:34:46.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:34:46.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:34:46.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:34:46.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:34:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:34:46.691 [DEBUG] [Thread-131419] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:34:58.335 [DEBUG] [Thread-131421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:35:13.393 [DEBUG] [Thread-131422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:35:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:35:16.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:35:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:35:19.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 34, 45), 17.45, 32.92, 0.0, 32.48, 25.7, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:35:19.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:34:45
2026-02-11T15:35:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:35:19.803 [DEBUG] [Thread-131423] [transport.py] [_log()] starting thread (client mode): 0xa2d138b0
2026-02-11T15:35:19.803 [DEBUG] [Thread-131423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:35:19.823 [DEBUG] [Thread-131423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:35:19.823 [INFO] [Thread-131423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] client lang: <none>
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] server lang: <none>
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] kex follows: False
2026-02-11T15:35:19.826 [DEBUG] [Thread-131423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:35:19.827 [DEBUG] [Thread-131423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:35:19.827 [DEBUG] [Thread-131423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:35:19.827 [DEBUG] [Thread-131423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:35:19.827 [DEBUG] [Thread-131423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:35:19.827 [DEBUG] [Thread-131423] [transport.py] [_log()] Compression: none
2026-02-11T15:35:19.827 [DEBUG] [Thread-131423] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:35:19.843 [DEBUG] [Thread-131423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:35:19.844 [DEBUG] [Thread-131423] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:35:19.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:35:19.845 [DEBUG] [Thread-131423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:35:19.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:35:19.846 [DEBUG] [Thread-131423] [transport.py] [_log()] userauth is OK
2026-02-11T15:35:19.847 [DEBUG] [Thread-131423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:35:19.847 [DEBUG] [Thread-131423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:35:19.847 [DEBUG] [Thread-131423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:35:19.847 [DEBUG] [Thread-131423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:35:19.878 [INFO] [Thread-131423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:35:19.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:35:20.523 [DEBUG] [Thread-131423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:35:20.523 [DEBUG] [Thread-131423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:35:20.523 [DEBUG] [Thread-131423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:35:20.564 [DEBUG] [Thread-131423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:35:20.564 [DEBUG] [Thread-131423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:35:20.566 [DEBUG] [Thread-131423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:35:20.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:35:20.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:35:20.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:35:20.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:35:20.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:35:20.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:35:20.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:35:20.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:35:20.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:35:20.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.565767 -999.00  +24.70  27.50     40  +10.40 1 2 1 1 1   888    0 15.62 33.56 ----- 24.8 27.5 294.9 41.6 30.2 -23.2 29.8 -22.2 30.2 -22.5 31.1 -21.4
2026-02-11T15:35:20.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:35:20.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:35:20.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.565767
2026-02-11T15:35:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:35:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:35:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:35:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:35:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:35:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:34:45', tmtdew=17.45, humidity=32.92, cloud=0.0, wind=32.48, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:34:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:35:20.591 [DEBUG] [Thread-131423] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:35:20.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:35:20.680 [DEBUG] [Thread-131426] [transport.py] [_log()] starting thread (client mode): 0xa81d5e40
2026-02-11T15:35:20.681 [DEBUG] [Thread-131426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:35:20.695 [DEBUG] [Thread-131426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:35:20.695 [INFO] [Thread-131426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:35:20.702 [DEBUG] [Thread-131426] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:35:20.703 [DEBUG] [Thread-131426] [transport.py] [_log()] client lang: <none>
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] server lang: <none>
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] kex follows: False
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:35:20.704 [DEBUG] [Thread-131426] [transport.py] [_log()] Compression: none
2026-02-11T15:35:20.705 [DEBUG] [Thread-131426] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:35:20.760 [DEBUG] [Thread-131426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:35:20.760 [DEBUG] [Thread-131426] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:35:20.761 [DEBUG] [Thread-131426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:35:20.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:35:20.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:35:20.816 [DEBUG] [Thread-131426] [transport.py] [_log()] userauth is OK
2026-02-11T15:35:20.816 [DEBUG] [Thread-131426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:35:20.816 [DEBUG] [Thread-131426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:35:20.817 [DEBUG] [Thread-131426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:35:20.817 [DEBUG] [Thread-131426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:35:20.836 [INFO] [Thread-131426] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:35:20.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:35:20.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:35:21.705 [DEBUG] [Thread-131426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:35:21.706 [DEBUG] [Thread-131426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:35:21.753 [DEBUG] [Thread-131426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:35:21.754 [DEBUG] [Thread-131426] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:35:21.762 [DEBUG] [Thread-131426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:35:21.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:35:21.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:35:21.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:35:21.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:35:21.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:35:21.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:35:21.799 [DEBUG] [Thread-131426] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:35:22.472 [DEBUG] [Thread-131428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:35:28.431 [DEBUG] [Thread-131429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:35:34.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:35:34.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:35:43.482 [DEBUG] [Thread-131430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:35:51.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:35:51.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:35:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:35:53.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 35, 20), 17.37, 33.09, 0.0, 30.67, 25.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:35:53.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:35:20
2026-02-11T15:35:54.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:35:54.616 [DEBUG] [Thread-131431] [transport.py] [_log()] starting thread (client mode): 0x9eb05900
2026-02-11T15:35:54.616 [DEBUG] [Thread-131431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:35:54.637 [DEBUG] [Thread-131431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:35:54.637 [INFO] [Thread-131431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:35:54.640 [DEBUG] [Thread-131431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:35:54.640 [DEBUG] [Thread-131431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:35:54.640 [DEBUG] [Thread-131431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:35:54.640 [DEBUG] [Thread-131431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] client lang: <none>
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] server lang: <none>
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] kex follows: False
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:35:54.641 [DEBUG] [Thread-131431] [transport.py] [_log()] Compression: none
2026-02-11T15:35:54.642 [DEBUG] [Thread-131431] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:35:54.659 [DEBUG] [Thread-131431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:35:54.660 [DEBUG] [Thread-131431] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:35:54.660 [DEBUG] [Thread-131431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:35:54.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:35:54.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:35:54.662 [DEBUG] [Thread-131431] [transport.py] [_log()] userauth is OK
2026-02-11T15:35:54.663 [DEBUG] [Thread-131431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:35:54.663 [DEBUG] [Thread-131431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:35:54.663 [DEBUG] [Thread-131431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:35:54.663 [DEBUG] [Thread-131431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:35:54.698 [INFO] [Thread-131431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:35:54.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:35:55.334 [DEBUG] [Thread-131431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:35:55.334 [DEBUG] [Thread-131431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:35:55.335 [DEBUG] [Thread-131431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:35:55.376 [DEBUG] [Thread-131431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:35:55.376 [DEBUG] [Thread-131431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:35:55.380 [DEBUG] [Thread-131431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:35:55.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:35:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:35:55.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:35:55.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:35:55.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:35:55.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:35:55.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:35:55.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:35:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:35:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.566114 -999.00  +24.60  30.05     41  +10.50 1 2 2 1 1   888    0 15.03 26.18 ----- 21.0 30.1 289.4 32.0 30.2 -22.0 29.9 -21.6 30.3 -20.4 31.1 -21.2
2026-02-11T15:35:55.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:35:55.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:35:55.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.566114
2026-02-11T15:35:55.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:35:55.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:35:55.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:35:55.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:35:55.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:35:55.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:35:20', tmtdew=17.37, humidity=33.09, cloud=0.0, wind=30.67, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:35:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:35:55.409 [DEBUG] [Thread-131431] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:35:55.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:35:55.504 [DEBUG] [Thread-131434] [transport.py] [_log()] starting thread (client mode): 0xa2d6d060
2026-02-11T15:35:55.505 [DEBUG] [Thread-131434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:35:55.519 [DEBUG] [Thread-131434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:35:55.519 [INFO] [Thread-131434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:35:55.527 [DEBUG] [Thread-131434] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:35:55.527 [DEBUG] [Thread-131434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:35:55.527 [DEBUG] [Thread-131434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:35:55.527 [DEBUG] [Thread-131434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] client lang: <none>
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] server lang: <none>
2026-02-11T15:35:55.528 [DEBUG] [Thread-131434] [transport.py] [_log()] kex follows: False
2026-02-11T15:35:55.529 [DEBUG] [Thread-131434] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:35:55.529 [DEBUG] [Thread-131434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:35:55.529 [DEBUG] [Thread-131434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:35:55.529 [DEBUG] [Thread-131434] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:35:55.529 [DEBUG] [Thread-131434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:35:55.529 [DEBUG] [Thread-131434] [transport.py] [_log()] Compression: none
2026-02-11T15:35:55.530 [DEBUG] [Thread-131434] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:35:55.585 [DEBUG] [Thread-131434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:35:55.586 [DEBUG] [Thread-131434] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:35:55.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:35:55.587 [DEBUG] [Thread-131434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:35:55.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:35:55.641 [DEBUG] [Thread-131434] [transport.py] [_log()] userauth is OK
2026-02-11T15:35:55.641 [DEBUG] [Thread-131434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:35:55.641 [DEBUG] [Thread-131434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:35:55.641 [DEBUG] [Thread-131434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:35:55.641 [DEBUG] [Thread-131434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:35:55.660 [INFO] [Thread-131434] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:35:55.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:35:55.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:35:56.486 [DEBUG] [Thread-131434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:35:56.486 [DEBUG] [Thread-131434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:35:56.534 [DEBUG] [Thread-131434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:35:56.535 [DEBUG] [Thread-131434] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:35:56.545 [DEBUG] [Thread-131434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:35:56.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:35:56.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:35:56.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:35:56.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:35:56.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:35:56.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:35:56.579 [DEBUG] [Thread-131434] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:35:58.522 [DEBUG] [Thread-131436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:36:13.574 [DEBUG] [Thread-131437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:36:22.520 [DEBUG] [Thread-131438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:36:26.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:36:26.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:36:26.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:36:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 35, 57), 16.62, 34.81, 0.0, 23.56, 24.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:36:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:35:57
2026-02-11T15:36:28.611 [DEBUG] [Thread-131439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:36:28.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:36:28.980 [DEBUG] [Thread-131440] [transport.py] [_log()] starting thread (client mode): 0xa2d01900
2026-02-11T15:36:28.980 [DEBUG] [Thread-131440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:36:28.990 [DEBUG] [Thread-131440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:36:28.990 [INFO] [Thread-131440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:36:28.992 [DEBUG] [Thread-131440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] client lang: <none>
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] server lang: <none>
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] kex follows: False
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] Compression: none
2026-02-11T15:36:28.993 [DEBUG] [Thread-131440] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:36:29.004 [DEBUG] [Thread-131440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:36:29.005 [DEBUG] [Thread-131440] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:36:29.005 [DEBUG] [Thread-131440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:36:29.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:36:29.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:36:29.006 [DEBUG] [Thread-131440] [transport.py] [_log()] userauth is OK
2026-02-11T15:36:29.006 [DEBUG] [Thread-131440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:36:29.006 [DEBUG] [Thread-131440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:36:29.006 [DEBUG] [Thread-131440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:36:29.006 [DEBUG] [Thread-131440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:36:29.025 [INFO] [Thread-131440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:36:29.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:36:29.624 [DEBUG] [Thread-131440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:36:29.624 [DEBUG] [Thread-131440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:36:29.624 [DEBUG] [Thread-131440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:36:29.664 [DEBUG] [Thread-131440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:36:29.665 [DEBUG] [Thread-131440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:36:29.668 [DEBUG] [Thread-131440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:36:29.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:36:29.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:36:29.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:36:29.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:36:29.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:36:29.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:36:29.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:36:29.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:36:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:36:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.566462 -999.00  +24.60  20.88     41  +10.50 1 2 1 1 1   888    0 15.44 22.18 ----- 21.5 20.9 305.8 27.2 30.4 -22.8 29.9 -21.3 30.5 -22.2 31.2 -20.7
2026-02-11T15:36:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:36:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:36:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.566462
2026-02-11T15:36:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:36:29.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:36:29.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:36:29.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:36:29.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:36:29.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:35:57', tmtdew=16.62, humidity=34.81, cloud=0.0, wind=23.56, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:35:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:36:29.694 [DEBUG] [Thread-131440] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:36:29.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:36:29.789 [DEBUG] [Thread-131443] [transport.py] [_log()] starting thread (client mode): 0xa81d7ca0
2026-02-11T15:36:29.790 [DEBUG] [Thread-131443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:36:29.806 [DEBUG] [Thread-131443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:36:29.806 [INFO] [Thread-131443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:36:29.813 [DEBUG] [Thread-131443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:36:29.814 [DEBUG] [Thread-131443] [transport.py] [_log()] client lang: <none>
2026-02-11T15:36:29.815 [DEBUG] [Thread-131443] [transport.py] [_log()] server lang: <none>
2026-02-11T15:36:29.815 [DEBUG] [Thread-131443] [transport.py] [_log()] kex follows: False
2026-02-11T15:36:29.815 [DEBUG] [Thread-131443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:36:29.815 [DEBUG] [Thread-131443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:36:29.815 [DEBUG] [Thread-131443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:36:29.815 [DEBUG] [Thread-131443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:36:29.816 [DEBUG] [Thread-131443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:36:29.816 [DEBUG] [Thread-131443] [transport.py] [_log()] Compression: none
2026-02-11T15:36:29.816 [DEBUG] [Thread-131443] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:36:29.877 [DEBUG] [Thread-131443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:36:29.877 [DEBUG] [Thread-131443] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:36:29.878 [DEBUG] [Thread-131443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:36:29.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:36:29.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:36:29.933 [DEBUG] [Thread-131443] [transport.py] [_log()] userauth is OK
2026-02-11T15:36:29.933 [DEBUG] [Thread-131443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:36:29.933 [DEBUG] [Thread-131443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:36:29.934 [DEBUG] [Thread-131443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:36:29.934 [DEBUG] [Thread-131443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:36:29.954 [INFO] [Thread-131443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:36:29.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:36:29.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:36:30.868 [DEBUG] [Thread-131443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:36:30.868 [DEBUG] [Thread-131443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:36:30.915 [DEBUG] [Thread-131443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:36:30.916 [DEBUG] [Thread-131443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:36:30.925 [DEBUG] [Thread-131443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:36:30.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:36:30.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:36:30.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:36:30.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:36:30.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:36:30.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:36:30.964 [DEBUG] [Thread-131443] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:36:34.771 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:36:34.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:36:43.646 [DEBUG] [Thread-131445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:36:58.692 [DEBUG] [Thread-131446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:37:00.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:37:00.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:37:00.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:37:03.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 36, 33), 16.55, 34.9, 0.0, 22.13, 24.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:37:03.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:36:33
2026-02-11T15:37:03.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:37:03.641 [DEBUG] [Thread-131447] [transport.py] [_log()] starting thread (client mode): 0xa2d6d7e0
2026-02-11T15:37:03.641 [DEBUG] [Thread-131447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:37:03.660 [DEBUG] [Thread-131447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:37:03.660 [INFO] [Thread-131447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] client lang: <none>
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] server lang: <none>
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] kex follows: False
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:37:03.664 [DEBUG] [Thread-131447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:37:03.665 [DEBUG] [Thread-131447] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:37:03.665 [DEBUG] [Thread-131447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:37:03.665 [DEBUG] [Thread-131447] [transport.py] [_log()] Compression: none
2026-02-11T15:37:03.665 [DEBUG] [Thread-131447] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:37:03.682 [DEBUG] [Thread-131447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:37:03.682 [DEBUG] [Thread-131447] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:37:03.683 [DEBUG] [Thread-131447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:37:03.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:37:03.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:37:03.685 [DEBUG] [Thread-131447] [transport.py] [_log()] userauth is OK
2026-02-11T15:37:03.685 [DEBUG] [Thread-131447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:37:03.685 [DEBUG] [Thread-131447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:37:03.686 [DEBUG] [Thread-131447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:37:03.686 [DEBUG] [Thread-131447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:37:03.709 [INFO] [Thread-131447] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:37:03.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:37:04.336 [DEBUG] [Thread-131447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:37:04.336 [DEBUG] [Thread-131447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:37:04.336 [DEBUG] [Thread-131447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:37:04.378 [DEBUG] [Thread-131447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:37:04.378 [DEBUG] [Thread-131447] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:37:04.384 [DEBUG] [Thread-131447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:37:04.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:37:04.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:37:04.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:37:04.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:37:04.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:37:04.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:37:04.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:37:04.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:37:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:37:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.566809 -999.00  +24.80  26.94     40  +10.30 1 2 1 1 1   888    0 14.76 12.96 ----- 24.5 26.9 290.2 30.2 30.4 -22.9 30.0 -21.3 30.5 -20.9 31.3 -21.1
2026-02-11T15:37:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:37:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:37:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.566809
2026-02-11T15:37:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:37:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:37:04.401 [DEBUG] [Thread-131447] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:37:04.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:37:04.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:37:04.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:37:04.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:36:33', tmtdew=16.55, humidity=34.9, cloud=0.0, wind=22.13, temperature=24.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:36:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:37:04.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:37:04.496 [DEBUG] [Thread-131450] [transport.py] [_log()] starting thread (client mode): 0xa2d57c10
2026-02-11T15:37:04.496 [DEBUG] [Thread-131450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:37:04.511 [DEBUG] [Thread-131450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:37:04.511 [INFO] [Thread-131450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:04.519 [DEBUG] [Thread-131450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] client lang: <none>
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] server lang: <none>
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] kex follows: False
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:37:04.520 [DEBUG] [Thread-131450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:37:04.521 [DEBUG] [Thread-131450] [transport.py] [_log()] Compression: none
2026-02-11T15:37:04.521 [DEBUG] [Thread-131450] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:37:04.576 [DEBUG] [Thread-131450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:37:04.577 [DEBUG] [Thread-131450] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:37:04.577 [DEBUG] [Thread-131450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:37:04.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:37:04.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:37:04.632 [DEBUG] [Thread-131450] [transport.py] [_log()] userauth is OK
2026-02-11T15:37:04.632 [DEBUG] [Thread-131450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:37:04.633 [DEBUG] [Thread-131450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:37:04.633 [DEBUG] [Thread-131450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:37:04.633 [DEBUG] [Thread-131450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:37:04.654 [INFO] [Thread-131450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:37:04.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:37:04.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:37:05.468 [DEBUG] [Thread-131450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:37:05.469 [DEBUG] [Thread-131450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:37:05.516 [DEBUG] [Thread-131450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:37:05.516 [DEBUG] [Thread-131450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:37:05.524 [DEBUG] [Thread-131450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:37:05.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:37:05.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:37:05.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
2026-02-11T15:37:05.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:37:05.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:37:05.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:37:05.562 [DEBUG] [Thread-131450] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:37:13.727 [DEBUG] [Thread-131452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:37:22.572 [DEBUG] [Thread-131453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:37:28.778 [DEBUG] [Thread-131454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:37:34.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:37:34.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:37:35.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:37:35.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:37:35.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:37:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 37, 10), 16.85, 34.32, 0.0, 28.37, 25.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:37:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:37:10
2026-02-11T15:37:37.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:37:37.918 [DEBUG] [Thread-131455] [transport.py] [_log()] starting thread (client mode): 0xa81d49a0
2026-02-11T15:37:37.919 [DEBUG] [Thread-131455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:37:37.939 [DEBUG] [Thread-131455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:37:37.939 [INFO] [Thread-131455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:37.942 [DEBUG] [Thread-131455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] client lang: <none>
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] server lang: <none>
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] kex follows: False
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] Compression: none
2026-02-11T15:37:37.943 [DEBUG] [Thread-131455] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:37:37.961 [DEBUG] [Thread-131455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:37:37.962 [DEBUG] [Thread-131455] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:37:37.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:37:37.963 [DEBUG] [Thread-131455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:37:37.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:37:37.965 [DEBUG] [Thread-131455] [transport.py] [_log()] userauth is OK
2026-02-11T15:37:37.965 [DEBUG] [Thread-131455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:37:37.966 [DEBUG] [Thread-131455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:37:37.966 [DEBUG] [Thread-131455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:37:37.966 [DEBUG] [Thread-131455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:37:37.989 [INFO] [Thread-131455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:37:37.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:37:38.660 [DEBUG] [Thread-131455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:37:38.660 [DEBUG] [Thread-131455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:37:38.661 [DEBUG] [Thread-131455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:37:38.701 [DEBUG] [Thread-131455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:37:38.701 [DEBUG] [Thread-131455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:37:38.704 [DEBUG] [Thread-131455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:37:38.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:37:38.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:37:38.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:37:38.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:37:38.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:37:38.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:37:38.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:37:38.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:37:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:37:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.567503 -999.00  +24.70  26.55     40  +10.50 1 2 1 1 1   888    0 14.55 4.02 ----- 27.0 26.6 303.6 34.5 30.4 -21.5 30.0 -21.9 30.6 -21.9 31.4 -20.7
2026-02-11T15:37:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:37:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:37:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.567503
2026-02-11T15:37:38.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:37:38.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:37:38.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:37:38.729 [DEBUG] [Thread-131455] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:37:38.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:37:38.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:37:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:37:10', tmtdew=16.85, humidity=34.32, cloud=0.0, wind=28.37, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:37:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:37:38.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:37:38.827 [DEBUG] [Thread-131458] [transport.py] [_log()] starting thread (client mode): 0xa2d11120
2026-02-11T15:37:38.828 [DEBUG] [Thread-131458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:37:38.843 [DEBUG] [Thread-131458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:37:38.843 [INFO] [Thread-131458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:37:38.851 [DEBUG] [Thread-131458] [transport.py] [_log()] client lang: <none>
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] server lang: <none>
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] kex follows: False
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] Compression: none
2026-02-11T15:37:38.852 [DEBUG] [Thread-131458] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:37:38.909 [DEBUG] [Thread-131458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:37:38.909 [DEBUG] [Thread-131458] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:37:38.910 [DEBUG] [Thread-131458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:37:38.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:37:38.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:37:38.965 [DEBUG] [Thread-131458] [transport.py] [_log()] userauth is OK
2026-02-11T15:37:38.965 [DEBUG] [Thread-131458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:37:38.966 [DEBUG] [Thread-131458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:37:38.966 [DEBUG] [Thread-131458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:37:38.966 [DEBUG] [Thread-131458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:37:38.985 [INFO] [Thread-131458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:37:38.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:37:38.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:37:39.819 [DEBUG] [Thread-131458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:37:39.819 [DEBUG] [Thread-131458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:37:39.868 [DEBUG] [Thread-131458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:37:39.868 [DEBUG] [Thread-131458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:37:39.877 [DEBUG] [Thread-131458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:37:39.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:37:39.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:37:39.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:37:39.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:37:39.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:37:39.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:37:39.915 [DEBUG] [Thread-131458] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:37:43.819 [DEBUG] [Thread-131460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:37:58.872 [DEBUG] [Thread-131461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:38:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:38:09.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:38:09.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:38:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 37, 45), 16.8, 34.53, 0.0, 27.37, 25.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:38:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:37:45
2026-02-11T15:38:12.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:38:12.207 [DEBUG] [Thread-131462] [transport.py] [_log()] starting thread (client mode): 0xa81d7d90
2026-02-11T15:38:12.207 [DEBUG] [Thread-131462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:38:12.227 [DEBUG] [Thread-131462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:38:12.227 [INFO] [Thread-131462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] client lang: <none>
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] server lang: <none>
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] kex follows: False
2026-02-11T15:38:12.229 [DEBUG] [Thread-131462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:38:12.230 [DEBUG] [Thread-131462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:38:12.230 [DEBUG] [Thread-131462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:38:12.230 [DEBUG] [Thread-131462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:38:12.230 [DEBUG] [Thread-131462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:38:12.230 [DEBUG] [Thread-131462] [transport.py] [_log()] Compression: none
2026-02-11T15:38:12.230 [DEBUG] [Thread-131462] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:38:12.239 [DEBUG] [Thread-131462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:38:12.240 [DEBUG] [Thread-131462] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:38:12.241 [DEBUG] [Thread-131462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:38:12.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:38:12.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:38:12.243 [DEBUG] [Thread-131462] [transport.py] [_log()] userauth is OK
2026-02-11T15:38:12.243 [DEBUG] [Thread-131462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:38:12.243 [DEBUG] [Thread-131462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:38:12.244 [DEBUG] [Thread-131462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:38:12.244 [DEBUG] [Thread-131462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:38:12.259 [INFO] [Thread-131462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:38:12.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:38:12.837 [DEBUG] [Thread-131462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:38:12.837 [DEBUG] [Thread-131462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:38:12.837 [DEBUG] [Thread-131462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:38:12.878 [DEBUG] [Thread-131462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:38:12.878 [DEBUG] [Thread-131462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:38:12.880 [DEBUG] [Thread-131462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:38:12.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:38:12.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:38:12.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:38:12.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:38:12.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:38:12.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:38:12.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:38:12.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:38:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.567850 -999.00  +25.40  21.25     40  +10.90 1 2 1 1 1   888    0 14.67 0.25 ----- 24.1 21.2 300.5 29.8 30.6 -22.6 30.2 -21.8 30.7 -20.0 31.5 -19.9
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.567850
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:38:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:37:45', tmtdew=16.8, humidity=34.53, cloud=0.0, wind=27.37, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:37:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:38:12.901 [DEBUG] [Thread-131462] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:38:12.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:38:12.988 [DEBUG] [Thread-131465] [transport.py] [_log()] starting thread (client mode): 0xa2d6c340
2026-02-11T15:38:12.988 [DEBUG] [Thread-131465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:38:13.005 [DEBUG] [Thread-131465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:38:13.006 [INFO] [Thread-131465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:38:13.014 [DEBUG] [Thread-131465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:38:13.015 [DEBUG] [Thread-131465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:38:13.015 [DEBUG] [Thread-131465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:38:13.015 [DEBUG] [Thread-131465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:13.015 [DEBUG] [Thread-131465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:13.015 [DEBUG] [Thread-131465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:13.015 [DEBUG] [Thread-131465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:13.015 [DEBUG] [Thread-131465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] client lang: <none>
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] server lang: <none>
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] kex follows: False
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:38:13.016 [DEBUG] [Thread-131465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:38:13.017 [DEBUG] [Thread-131465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:38:13.017 [DEBUG] [Thread-131465] [transport.py] [_log()] Compression: none
2026-02-11T15:38:13.017 [DEBUG] [Thread-131465] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:38:13.073 [DEBUG] [Thread-131465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:38:13.080 [DEBUG] [Thread-131465] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:38:13.081 [DEBUG] [Thread-131465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:38:13.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:38:13.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:38:13.137 [DEBUG] [Thread-131465] [transport.py] [_log()] userauth is OK
2026-02-11T15:38:13.137 [DEBUG] [Thread-131465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:38:13.137 [DEBUG] [Thread-131465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:38:13.137 [DEBUG] [Thread-131465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:38:13.137 [DEBUG] [Thread-131465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:38:13.168 [INFO] [Thread-131465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:38:13.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:38:13.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:38:13.908 [DEBUG] [Thread-131467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:38:13.992 [DEBUG] [Thread-131465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:38:13.992 [DEBUG] [Thread-131465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:38:14.040 [DEBUG] [Thread-131465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:38:14.041 [DEBUG] [Thread-131465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:38:14.050 [DEBUG] [Thread-131465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:38:14.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:38:14.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:38:14.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:38:14.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:38:14.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:38:14.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:38:14.089 [DEBUG] [Thread-131465] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:38:22.636 [DEBUG] [Thread-131468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:38:28.959 [DEBUG] [Thread-131469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:38:35.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:38:35.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:38:43.997 [DEBUG] [Thread-131470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:38:44.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:38:44.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:38:44.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:38:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 38, 21), 16.81, 34.5, 0.0, 27.56, 25.26, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:38:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:38:21
2026-02-11T15:38:46.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:38:46.469 [DEBUG] [Thread-131471] [transport.py] [_log()] starting thread (client mode): 0xa2d101f0
2026-02-11T15:38:46.469 [DEBUG] [Thread-131471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:38:46.490 [DEBUG] [Thread-131471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:38:46.490 [INFO] [Thread-131471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] client lang: <none>
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] server lang: <none>
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] kex follows: False
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] Compression: none
2026-02-11T15:38:46.494 [DEBUG] [Thread-131471] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:38:46.513 [DEBUG] [Thread-131471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:38:46.513 [DEBUG] [Thread-131471] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:38:46.514 [DEBUG] [Thread-131471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:38:46.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:38:46.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:38:46.516 [DEBUG] [Thread-131471] [transport.py] [_log()] userauth is OK
2026-02-11T15:38:46.516 [DEBUG] [Thread-131471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:38:46.516 [DEBUG] [Thread-131471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:38:46.517 [DEBUG] [Thread-131471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:38:46.517 [DEBUG] [Thread-131471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:38:46.552 [INFO] [Thread-131471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:38:46.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:38:47.178 [DEBUG] [Thread-131471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:38:47.178 [DEBUG] [Thread-131471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:38:47.179 [DEBUG] [Thread-131471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:38:47.219 [DEBUG] [Thread-131471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:38:47.219 [DEBUG] [Thread-131471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:38:47.222 [DEBUG] [Thread-131471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:38:47.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:38:47.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:38:47.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:38:47.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:38:47.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:38:47.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:38:47.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:38:47.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:38:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:38:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.568198 -999.00  +24.80  17.88     40  +10.40 1 2 1 1 1   888    0 14.25 -0.35 ----- 13.9 17.9 299.4 30.1 30.6 -22.7 30.2 -21.0 30.8 -20.8 31.5 -21.2
2026-02-11T15:38:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:38:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:38:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.568198
2026-02-11T15:38:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:38:47.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:38:47.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:38:47.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:38:47.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:38:47.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:38:21', tmtdew=16.81, humidity=34.5, cloud=0.0, wind=27.56, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:38:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:38:47.248 [DEBUG] [Thread-131471] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:38:47.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:38:47.345 [DEBUG] [Thread-131474] [transport.py] [_log()] starting thread (client mode): 0xa2db6aa0
2026-02-11T15:38:47.345 [DEBUG] [Thread-131474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:38:47.360 [DEBUG] [Thread-131474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:38:47.360 [INFO] [Thread-131474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:38:47.367 [DEBUG] [Thread-131474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] client lang: <none>
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] server lang: <none>
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] kex follows: False
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] Compression: none
2026-02-11T15:38:47.368 [DEBUG] [Thread-131474] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:38:47.425 [DEBUG] [Thread-131474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:38:47.425 [DEBUG] [Thread-131474] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:38:47.426 [DEBUG] [Thread-131474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:38:47.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:38:47.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:38:47.480 [DEBUG] [Thread-131474] [transport.py] [_log()] userauth is OK
2026-02-11T15:38:47.480 [DEBUG] [Thread-131474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:38:47.481 [DEBUG] [Thread-131474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:38:47.481 [DEBUG] [Thread-131474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:38:47.481 [DEBUG] [Thread-131474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:38:47.495 [INFO] [Thread-131474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:38:47.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:38:47.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:38:48.407 [DEBUG] [Thread-131474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:38:48.408 [DEBUG] [Thread-131474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:38:48.456 [DEBUG] [Thread-131474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:38:48.456 [DEBUG] [Thread-131474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:38:48.464 [DEBUG] [Thread-131474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:38:48.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:38:48.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:38:48.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:38:48.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:38:48.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:38:48.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:38:48.496 [DEBUG] [Thread-131474] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:38:59.034 [DEBUG] [Thread-131476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:39:14.092 [DEBUG] [Thread-131477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:39:18.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:39:18.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:39:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:39:20.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 38, 56), 16.77, 34.27, 0.0, 17.1, 25.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:39:20.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:38:56
2026-02-11T15:39:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:39:21.157 [DEBUG] [Thread-131478] [transport.py] [_log()] starting thread (client mode): 0xa2d6cd00
2026-02-11T15:39:21.158 [DEBUG] [Thread-131478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:39:21.178 [DEBUG] [Thread-131478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:39:21.178 [INFO] [Thread-131478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] client lang: <none>
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] server lang: <none>
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] kex follows: False
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] Compression: none
2026-02-11T15:39:21.181 [DEBUG] [Thread-131478] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:39:21.199 [DEBUG] [Thread-131478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:39:21.200 [DEBUG] [Thread-131478] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:39:21.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:39:21.201 [DEBUG] [Thread-131478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:39:21.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:39:21.203 [DEBUG] [Thread-131478] [transport.py] [_log()] userauth is OK
2026-02-11T15:39:21.203 [DEBUG] [Thread-131478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:39:21.203 [DEBUG] [Thread-131478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:39:21.203 [DEBUG] [Thread-131478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:39:21.203 [DEBUG] [Thread-131478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:39:21.228 [INFO] [Thread-131478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:39:21.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:39:21.987 [DEBUG] [Thread-131478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:39:21.987 [DEBUG] [Thread-131478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:39:21.987 [DEBUG] [Thread-131478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:39:22.028 [DEBUG] [Thread-131478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:39:22.028 [DEBUG] [Thread-131478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:39:22.031 [DEBUG] [Thread-131478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:39:22.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:39:22.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:39:22.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:39:22.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:39:22.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:39:22.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:39:22.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:39:22.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:39:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:39:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.568545 -999.00  +24.60  15.79     40  +10.40 1 2 1 1 1   888    0 14.23 -3.19 ----- 18.7 15.8 303.0 17.7 30.7 -22.2 30.3 -21.5 30.9 -19.1 31.7 -20.7
2026-02-11T15:39:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:39:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:39:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.568545
2026-02-11T15:39:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:39:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:39:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:39:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:39:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:39:22.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:38:56', tmtdew=16.77, humidity=34.27, cloud=0.0, wind=17.1, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:38:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:39:22.053 [DEBUG] [Thread-131478] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:39:22.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:39:22.149 [DEBUG] [Thread-131481] [transport.py] [_log()] starting thread (client mode): 0xa2db7730
2026-02-11T15:39:22.150 [DEBUG] [Thread-131481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:39:22.164 [DEBUG] [Thread-131481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:39:22.165 [INFO] [Thread-131481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:39:22.172 [DEBUG] [Thread-131481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:39:22.172 [DEBUG] [Thread-131481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:39:22.172 [DEBUG] [Thread-131481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:39:22.172 [DEBUG] [Thread-131481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] client lang: <none>
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] server lang: <none>
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] kex follows: False
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] Compression: none
2026-02-11T15:39:22.173 [DEBUG] [Thread-131481] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:39:22.232 [DEBUG] [Thread-131481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:39:22.232 [DEBUG] [Thread-131481] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:39:22.233 [DEBUG] [Thread-131481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:39:22.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:39:22.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:39:22.291 [DEBUG] [Thread-131481] [transport.py] [_log()] userauth is OK
2026-02-11T15:39:22.291 [DEBUG] [Thread-131481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:39:22.291 [DEBUG] [Thread-131481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:39:22.291 [DEBUG] [Thread-131481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:39:22.291 [DEBUG] [Thread-131481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:39:22.316 [INFO] [Thread-131481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:39:22.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:39:22.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:39:22.686 [DEBUG] [Thread-131483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:39:23.138 [DEBUG] [Thread-131481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:39:23.139 [DEBUG] [Thread-131481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:39:23.186 [DEBUG] [Thread-131481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:39:23.186 [DEBUG] [Thread-131481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:39:23.195 [DEBUG] [Thread-131481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:39:23.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:39:23.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:39:23.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:39:23.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:39:23.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:39:23.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:39:23.229 [DEBUG] [Thread-131481] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:39:29.127 [DEBUG] [Thread-131484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:39:35.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:39:35.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:39:44.179 [DEBUG] [Thread-131485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:39:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:39:53.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:39:53.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
2026-02-11T15:39:55.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 39, 31), 16.91, 33.99, 0.0, 24.82, 25.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:39:55.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:39:31
2026-02-11T15:39:55.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:39:56.015 [DEBUG] [Thread-131486] [transport.py] [_log()] starting thread (client mode): 0xa2d54700
2026-02-11T15:39:56.015 [DEBUG] [Thread-131486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:39:56.036 [DEBUG] [Thread-131486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:39:56.036 [INFO] [Thread-131486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] client lang: <none>
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] server lang: <none>
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] kex follows: False
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:39:56.039 [DEBUG] [Thread-131486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:39:56.040 [DEBUG] [Thread-131486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:39:56.040 [DEBUG] [Thread-131486] [transport.py] [_log()] Compression: none
2026-02-11T15:39:56.040 [DEBUG] [Thread-131486] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:39:56.056 [DEBUG] [Thread-131486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:39:56.057 [DEBUG] [Thread-131486] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:39:56.057 [DEBUG] [Thread-131486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:39:56.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:39:56.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:39:56.058 [DEBUG] [Thread-131486] [transport.py] [_log()] userauth is OK
2026-02-11T15:39:56.058 [DEBUG] [Thread-131486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:39:56.059 [DEBUG] [Thread-131486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:39:56.059 [DEBUG] [Thread-131486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:39:56.059 [DEBUG] [Thread-131486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:39:56.081 [INFO] [Thread-131486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:39:56.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:39:56.715 [DEBUG] [Thread-131486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:39:56.715 [DEBUG] [Thread-131486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:39:56.715 [DEBUG] [Thread-131486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:39:56.756 [DEBUG] [Thread-131486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:39:56.756 [DEBUG] [Thread-131486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:39:56.760 [DEBUG] [Thread-131486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:39:56.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:39:56.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:39:56.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:39:56.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:39:56.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:39:56.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:39:56.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:39:56.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:39:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:39:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.568892 -999.00  +24.80  21.77     41  +10.80 1 2 1 1 1   888    0 14.44 -8.66 ----- 17.9 21.8 302.9 32.5 30.7 -22.6 30.3 -20.7 30.9 -23.6 31.7 -20.6
2026-02-11T15:39:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:39:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:39:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.568892
2026-02-11T15:39:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:39:56.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:39:56.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:39:56.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:39:56.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:39:56.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:39:31', tmtdew=16.91, humidity=33.99, cloud=0.0, wind=24.82, temperature=25.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:39:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:39:56.786 [DEBUG] [Thread-131486] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:39:56.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:39:56.889 [DEBUG] [Thread-131489] [transport.py] [_log()] starting thread (client mode): 0xa2d6df00
2026-02-11T15:39:56.889 [DEBUG] [Thread-131489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:39:56.904 [DEBUG] [Thread-131489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:39:56.904 [INFO] [Thread-131489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:39:56.912 [DEBUG] [Thread-131489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:39:56.912 [DEBUG] [Thread-131489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] client lang: <none>
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] server lang: <none>
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] kex follows: False
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] Compression: none
2026-02-11T15:39:56.913 [DEBUG] [Thread-131489] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:39:56.972 [DEBUG] [Thread-131489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:39:56.973 [DEBUG] [Thread-131489] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:39:56.973 [DEBUG] [Thread-131489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:39:56.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:39:56.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:39:57.029 [DEBUG] [Thread-131489] [transport.py] [_log()] userauth is OK
2026-02-11T15:39:57.030 [DEBUG] [Thread-131489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:39:57.030 [DEBUG] [Thread-131489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:39:57.030 [DEBUG] [Thread-131489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:39:57.030 [DEBUG] [Thread-131489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:39:57.050 [INFO] [Thread-131489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:39:57.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:39:57.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:39:57.868 [DEBUG] [Thread-131489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:39:57.869 [DEBUG] [Thread-131489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:39:57.916 [DEBUG] [Thread-131489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:39:57.917 [DEBUG] [Thread-131489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:39:57.926 [DEBUG] [Thread-131489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:39:57.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:39:57.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:39:57.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
2026-02-11T15:39:57.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:39:57.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:39:57.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:39:57.963 [DEBUG] [Thread-131489] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:39:59.216 [DEBUG] [Thread-131491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:40:14.278 [DEBUG] [Thread-131492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:40:22.738 [DEBUG] [Thread-131493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:40:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:40:27.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:40:27.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:40:29.315 [DEBUG] [Thread-131494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:40:29.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 40, 7), 16.98, 33.84, 0.0, 21.51, 25.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:40:29.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:40:07
2026-02-11T15:40:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:40:30.339 [DEBUG] [Thread-131495] [transport.py] [_log()] starting thread (client mode): 0xa5770280
2026-02-11T15:40:30.339 [DEBUG] [Thread-131495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:40:30.358 [DEBUG] [Thread-131495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:40:30.359 [INFO] [Thread-131495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] client lang: <none>
2026-02-11T15:40:30.362 [DEBUG] [Thread-131495] [transport.py] [_log()] server lang: <none>
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] kex follows: False
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] Compression: none
2026-02-11T15:40:30.363 [DEBUG] [Thread-131495] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:40:30.379 [DEBUG] [Thread-131495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:40:30.379 [DEBUG] [Thread-131495] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:40:30.380 [DEBUG] [Thread-131495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:40:30.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:40:30.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:40:30.382 [DEBUG] [Thread-131495] [transport.py] [_log()] userauth is OK
2026-02-11T15:40:30.382 [DEBUG] [Thread-131495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:40:30.382 [DEBUG] [Thread-131495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:40:30.382 [DEBUG] [Thread-131495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:40:30.382 [DEBUG] [Thread-131495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:40:30.403 [INFO] [Thread-131495] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:40:30.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:40:31.046 [DEBUG] [Thread-131495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:40:31.046 [DEBUG] [Thread-131495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:40:31.047 [DEBUG] [Thread-131495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:40:31.087 [DEBUG] [Thread-131495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:40:31.088 [DEBUG] [Thread-131495] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:40:31.091 [DEBUG] [Thread-131495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:40:31.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:40:31.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:40:31.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:40:31.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:40:31.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:40:31.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:40:31.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:40:31.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:40:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:40:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.569239 -999.00  +25.20  34.22     39  +10.60 1 2 2 1 1   888    0 14.32 -11.72 ----- 31.2 34.2 296.8 38.0 30.8 -23.7 30.3 -21.8 31.1 -18.2 31.7 -21.5
2026-02-11T15:40:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:40:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:40:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.569239
2026-02-11T15:40:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:40:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:40:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:40:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:40:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:40:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:40:07', tmtdew=16.98, humidity=33.84, cloud=0.0, wind=21.51, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:39:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:40:31.118 [DEBUG] [Thread-131495] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:40:31.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:40:31.214 [DEBUG] [Thread-131498] [transport.py] [_log()] starting thread (client mode): 0xa2d558d0
2026-02-11T15:40:31.214 [DEBUG] [Thread-131498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:40:31.229 [DEBUG] [Thread-131498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:40:31.229 [INFO] [Thread-131498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] client lang: <none>
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] server lang: <none>
2026-02-11T15:40:31.237 [DEBUG] [Thread-131498] [transport.py] [_log()] kex follows: False
2026-02-11T15:40:31.238 [DEBUG] [Thread-131498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:40:31.238 [DEBUG] [Thread-131498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:40:31.238 [DEBUG] [Thread-131498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:40:31.238 [DEBUG] [Thread-131498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:40:31.238 [DEBUG] [Thread-131498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:40:31.238 [DEBUG] [Thread-131498] [transport.py] [_log()] Compression: none
2026-02-11T15:40:31.238 [DEBUG] [Thread-131498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:40:31.299 [DEBUG] [Thread-131498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:40:31.300 [DEBUG] [Thread-131498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:40:31.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:40:31.301 [DEBUG] [Thread-131498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:40:31.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:40:31.357 [DEBUG] [Thread-131498] [transport.py] [_log()] userauth is OK
2026-02-11T15:40:31.357 [DEBUG] [Thread-131498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:40:31.358 [DEBUG] [Thread-131498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:40:31.358 [DEBUG] [Thread-131498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:40:31.358 [DEBUG] [Thread-131498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:40:31.377 [INFO] [Thread-131498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:40:31.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:40:31.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:40:32.202 [DEBUG] [Thread-131498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:40:32.202 [DEBUG] [Thread-131498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:40:32.250 [DEBUG] [Thread-131498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:40:32.251 [DEBUG] [Thread-131498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:40:32.261 [DEBUG] [Thread-131498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:40:32.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:40:32.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:40:32.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:40:32.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:40:32.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:40:32.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:40:32.298 [DEBUG] [Thread-131498] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:40:35.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:40:35.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:40:44.346 [DEBUG] [Thread-131500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:40:59.398 [DEBUG] [Thread-131501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:41:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:41:02.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:41:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:41:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 40, 43), 17.07, 33.87, 0.0, 23.29, 25.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:41:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:40:43
2026-02-11T15:41:04.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:41:05.044 [DEBUG] [Thread-131502] [transport.py] [_log()] starting thread (client mode): 0xa2db6ef0
2026-02-11T15:41:05.044 [DEBUG] [Thread-131502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:41:05.064 [DEBUG] [Thread-131502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:41:05.064 [INFO] [Thread-131502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] client lang: <none>
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] server lang: <none>
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] kex follows: False
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] Compression: none
2026-02-11T15:41:05.067 [DEBUG] [Thread-131502] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:41:05.087 [DEBUG] [Thread-131502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:41:05.088 [DEBUG] [Thread-131502] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:41:05.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:41:05.089 [DEBUG] [Thread-131502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:41:05.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:41:05.091 [DEBUG] [Thread-131502] [transport.py] [_log()] userauth is OK
2026-02-11T15:41:05.091 [DEBUG] [Thread-131502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:41:05.091 [DEBUG] [Thread-131502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:41:05.091 [DEBUG] [Thread-131502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:41:05.092 [DEBUG] [Thread-131502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:41:05.127 [INFO] [Thread-131502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:41:05.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:41:05.767 [DEBUG] [Thread-131502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:41:05.768 [DEBUG] [Thread-131502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:41:05.768 [DEBUG] [Thread-131502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:41:05.809 [DEBUG] [Thread-131502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:41:05.809 [DEBUG] [Thread-131502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:41:05.812 [DEBUG] [Thread-131502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:41:05.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:41:05.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:41:05.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:41:05.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:41:05.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:41:05.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:41:05.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:41:05.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:41:05.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:41:05.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.569587 -999.00  +24.70  28.46     40  +10.50 1 2 1 1 1   888    0 14.36 -14.81 ----- 24.8 28.5 309.8 33.9 30.6 -22.7 30.2 -21.7 30.9 -22.8 31.6 -20.9
2026-02-11T15:41:05.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:41:05.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:41:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.569587
2026-02-11T15:41:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:41:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:41:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:41:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:41:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:41:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:40:43', tmtdew=17.07, humidity=33.87, cloud=0.0, wind=23.29, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:40:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:41:05.839 [DEBUG] [Thread-131502] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:41:05.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:41:05.935 [DEBUG] [Thread-131505] [transport.py] [_log()] starting thread (client mode): 0xa2d11030
2026-02-11T15:41:05.935 [DEBUG] [Thread-131505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:41:05.956 [DEBUG] [Thread-131505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:41:05.957 [INFO] [Thread-131505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:41:05.964 [DEBUG] [Thread-131505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:41:05.964 [DEBUG] [Thread-131505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:41:05.965 [DEBUG] [Thread-131505] [transport.py] [_log()] client lang: <none>
2026-02-11T15:41:05.966 [DEBUG] [Thread-131505] [transport.py] [_log()] server lang: <none>
2026-02-11T15:41:05.966 [DEBUG] [Thread-131505] [transport.py] [_log()] kex follows: False
2026-02-11T15:41:05.966 [DEBUG] [Thread-131505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:41:05.966 [DEBUG] [Thread-131505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:41:05.966 [DEBUG] [Thread-131505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:41:05.966 [DEBUG] [Thread-131505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:41:05.966 [DEBUG] [Thread-131505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:41:05.967 [DEBUG] [Thread-131505] [transport.py] [_log()] Compression: none
2026-02-11T15:41:05.967 [DEBUG] [Thread-131505] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:41:06.025 [DEBUG] [Thread-131505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:41:06.026 [DEBUG] [Thread-131505] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:41:06.026 [DEBUG] [Thread-131505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:41:06.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:41:06.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:41:06.081 [DEBUG] [Thread-131505] [transport.py] [_log()] userauth is OK
2026-02-11T15:41:06.081 [DEBUG] [Thread-131505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:41:06.081 [DEBUG] [Thread-131505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:41:06.081 [DEBUG] [Thread-131505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:41:06.081 [DEBUG] [Thread-131505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:41:06.100 [INFO] [Thread-131505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:41:06.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:41:06.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:41:06.960 [DEBUG] [Thread-131505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:41:06.960 [DEBUG] [Thread-131505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:41:07.008 [DEBUG] [Thread-131505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:41:07.008 [DEBUG] [Thread-131505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:41:07.018 [DEBUG] [Thread-131505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:41:07.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:41:07.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:41:07.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:41:07.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:41:07.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:41:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:41:07.054 [DEBUG] [Thread-131505] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:41:14.435 [DEBUG] [Thread-131507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:41:22.799 [DEBUG] [Thread-131508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:41:29.483 [DEBUG] [Thread-131509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:41:35.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:41:35.486 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:41:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:41:37.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:41:37.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
2026-02-11T15:41:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 41, 19), 16.96, 34.07, 0.0, 18.79, 25.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:41:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:41:19
2026-02-11T15:41:39.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:41:39.480 [DEBUG] [Thread-131510] [transport.py] [_log()] starting thread (client mode): 0xa5740850
2026-02-11T15:41:39.481 [DEBUG] [Thread-131510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:41:39.501 [DEBUG] [Thread-131510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:41:39.501 [INFO] [Thread-131510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:41:39.505 [DEBUG] [Thread-131510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:41:39.505 [DEBUG] [Thread-131510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:41:39.505 [DEBUG] [Thread-131510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:41:39.505 [DEBUG] [Thread-131510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:39.505 [DEBUG] [Thread-131510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] client lang: <none>
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] server lang: <none>
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] kex follows: False
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:41:39.506 [DEBUG] [Thread-131510] [transport.py] [_log()] Compression: none
2026-02-11T15:41:39.507 [DEBUG] [Thread-131510] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:41:39.527 [DEBUG] [Thread-131510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:41:39.528 [DEBUG] [Thread-131510] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:41:39.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:41:39.529 [DEBUG] [Thread-131510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:41:39.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:41:39.531 [DEBUG] [Thread-131510] [transport.py] [_log()] userauth is OK
2026-02-11T15:41:39.531 [DEBUG] [Thread-131510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:41:39.531 [DEBUG] [Thread-131510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:41:39.531 [DEBUG] [Thread-131510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:41:39.531 [DEBUG] [Thread-131510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:41:39.552 [INFO] [Thread-131510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:41:39.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:41:40.162 [DEBUG] [Thread-131510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:41:40.163 [DEBUG] [Thread-131510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:41:40.163 [DEBUG] [Thread-131510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:41:40.203 [DEBUG] [Thread-131510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:41:40.204 [DEBUG] [Thread-131510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:41:40.207 [DEBUG] [Thread-131510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:41:40.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:41:40.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:41:40.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:41:40.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:41:40.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:41:40.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:41:40.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:41:40.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:41:40.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:41:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.569934 -999.00  +24.90  13.23     40  +10.50 1 2 1 1 1   888    0 13.85 -15.73 ----- 13.2 13.2 279.4 22.4 30.8 -21.7 30.4 -20.3 31.0 -18.9 31.8 -20.0
2026-02-11T15:41:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:41:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:41:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.569934
2026-02-11T15:41:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:41:40.235 [DEBUG] [Thread-131510] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:41:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:41:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:41:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:41:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:41:40.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:41:19', tmtdew=16.96, humidity=34.07, cloud=0.0, wind=18.79, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:40:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:41:40.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:41:40.333 [DEBUG] [Thread-131513] [transport.py] [_log()] starting thread (client mode): 0xa57584c0
2026-02-11T15:41:40.334 [DEBUG] [Thread-131513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:41:40.348 [DEBUG] [Thread-131513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:41:40.348 [INFO] [Thread-131513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:41:40.356 [DEBUG] [Thread-131513] [transport.py] [_log()] client lang: <none>
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] server lang: <none>
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] kex follows: False
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] Compression: none
2026-02-11T15:41:40.357 [DEBUG] [Thread-131513] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:41:40.411 [DEBUG] [Thread-131513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:41:40.411 [DEBUG] [Thread-131513] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:41:40.411 [DEBUG] [Thread-131513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:41:40.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:41:40.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:41:40.469 [DEBUG] [Thread-131513] [transport.py] [_log()] userauth is OK
2026-02-11T15:41:40.469 [DEBUG] [Thread-131513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:41:40.469 [DEBUG] [Thread-131513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:41:40.469 [DEBUG] [Thread-131513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:41:40.469 [DEBUG] [Thread-131513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:41:40.488 [INFO] [Thread-131513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:41:40.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:41:40.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:41:41.311 [DEBUG] [Thread-131513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:41:41.311 [DEBUG] [Thread-131513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:41:41.360 [DEBUG] [Thread-131513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:41:41.360 [DEBUG] [Thread-131513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:41:41.372 [DEBUG] [Thread-131513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:41:41.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:41:41.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')
2026-02-11T15:41:41.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:41:41.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:41:41.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:41:41.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:41:41.414 [DEBUG] [Thread-131513] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:41:44.521 [DEBUG] [Thread-131515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:41:59.574 [DEBUG] [Thread-131516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:42:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:42:11.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:42:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:42:13.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 41, 54), 16.84, 34.45, 0.0, 29.15, 25.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:42:13.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:41:54
2026-02-11T15:42:13.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:42:13.864 [DEBUG] [Thread-131517] [transport.py] [_log()] starting thread (client mode): 0xa575a020
2026-02-11T15:42:13.864 [DEBUG] [Thread-131517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:42:13.883 [DEBUG] [Thread-131517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:42:13.883 [INFO] [Thread-131517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:42:13.885 [DEBUG] [Thread-131517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] client lang: <none>
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] server lang: <none>
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] kex follows: False
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] Compression: none
2026-02-11T15:42:13.886 [DEBUG] [Thread-131517] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:42:13.898 [DEBUG] [Thread-131517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:42:13.899 [DEBUG] [Thread-131517] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:42:13.899 [DEBUG] [Thread-131517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:42:13.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:42:13.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:42:13.900 [DEBUG] [Thread-131517] [transport.py] [_log()] userauth is OK
2026-02-11T15:42:13.900 [DEBUG] [Thread-131517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:42:13.900 [DEBUG] [Thread-131517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:42:13.900 [DEBUG] [Thread-131517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:42:13.900 [DEBUG] [Thread-131517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:42:13.913 [INFO] [Thread-131517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:42:13.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:42:14.528 [DEBUG] [Thread-131517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:42:14.528 [DEBUG] [Thread-131517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:42:14.528 [DEBUG] [Thread-131517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:42:14.569 [DEBUG] [Thread-131517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:42:14.570 [DEBUG] [Thread-131517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:42:14.572 [DEBUG] [Thread-131517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:42:14.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:42:14.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:42:14.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:42:14.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:42:14.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:42:14.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:42:14.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:42:14.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:42:14.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:42:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.570975 -999.00  +26.10  24.47     38  +11.00 1 2 1 1 1   888    0 14.17 -13.04 ----- 25.4 24.5 301.6 36.1 31.0 -20.7 30.7 -19.5 31.3 -19.1 32.0 -18.4
2026-02-11T15:42:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:42:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:42:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.570975
2026-02-11T15:42:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:42:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:42:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:42:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:42:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:42:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:41:54', tmtdew=16.84, humidity=34.45, cloud=0.0, wind=29.15, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:42:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:42:14.598 [DEBUG] [Thread-131517] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:42:14.609 [DEBUG] [Thread-131520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:42:14.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:42:14.693 [DEBUG] [Thread-131521] [transport.py] [_log()] starting thread (client mode): 0xa2d01ea0
2026-02-11T15:42:14.694 [DEBUG] [Thread-131521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:42:14.708 [DEBUG] [Thread-131521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:42:14.709 [INFO] [Thread-131521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:42:14.716 [DEBUG] [Thread-131521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:42:14.717 [DEBUG] [Thread-131521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:42:14.718 [DEBUG] [Thread-131521] [transport.py] [_log()] client lang: <none>
2026-02-11T15:42:14.718 [DEBUG] [Thread-131521] [transport.py] [_log()] server lang: <none>
2026-02-11T15:42:14.718 [DEBUG] [Thread-131521] [transport.py] [_log()] kex follows: False
2026-02-11T15:42:14.718 [DEBUG] [Thread-131521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:42:14.718 [DEBUG] [Thread-131521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:42:14.718 [DEBUG] [Thread-131521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:42:14.718 [DEBUG] [Thread-131521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:42:14.719 [DEBUG] [Thread-131521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:42:14.719 [DEBUG] [Thread-131521] [transport.py] [_log()] Compression: none
2026-02-11T15:42:14.719 [DEBUG] [Thread-131521] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:42:14.776 [DEBUG] [Thread-131521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:42:14.777 [DEBUG] [Thread-131521] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:42:14.778 [DEBUG] [Thread-131521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:42:14.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:42:14.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:42:14.833 [DEBUG] [Thread-131521] [transport.py] [_log()] userauth is OK
2026-02-11T15:42:14.833 [DEBUG] [Thread-131521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:42:14.833 [DEBUG] [Thread-131521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:42:14.833 [DEBUG] [Thread-131521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:42:14.833 [DEBUG] [Thread-131521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:42:14.852 [INFO] [Thread-131521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:42:14.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:42:14.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:42:15.673 [DEBUG] [Thread-131521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:42:15.673 [DEBUG] [Thread-131521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:42:15.722 [DEBUG] [Thread-131521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:42:15.722 [DEBUG] [Thread-131521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:42:15.731 [DEBUG] [Thread-131521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:42:15.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:42:15.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:42:15.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:42:15.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:42:15.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:42:15.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:42:15.769 [DEBUG] [Thread-131521] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:42:22.848 [DEBUG] [Thread-131523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:42:29.650 [DEBUG] [Thread-131524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:42:35.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:42:35.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:42:44.687 [DEBUG] [Thread-131525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:42:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:42:45.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:42:45.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
2026-02-11T15:42:47.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 42, 29), 17.17, 33.79, 0.0, 30.45, 25.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:42:47.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:42:29
2026-02-11T15:42:48.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:42:48.277 [DEBUG] [Thread-131526] [transport.py] [_log()] starting thread (client mode): 0xa2d55ea0
2026-02-11T15:42:48.277 [DEBUG] [Thread-131526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:42:48.297 [DEBUG] [Thread-131526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:42:48.297 [INFO] [Thread-131526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] client lang: <none>
2026-02-11T15:42:48.300 [DEBUG] [Thread-131526] [transport.py] [_log()] server lang: <none>
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] kex follows: False
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] Compression: none
2026-02-11T15:42:48.301 [DEBUG] [Thread-131526] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:42:48.317 [DEBUG] [Thread-131526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:42:48.317 [DEBUG] [Thread-131526] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:42:48.318 [DEBUG] [Thread-131526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:42:48.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:42:48.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:42:48.319 [DEBUG] [Thread-131526] [transport.py] [_log()] userauth is OK
2026-02-11T15:42:48.320 [DEBUG] [Thread-131526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:42:48.320 [DEBUG] [Thread-131526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:42:48.320 [DEBUG] [Thread-131526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:42:48.320 [DEBUG] [Thread-131526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:42:48.337 [INFO] [Thread-131526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:42:48.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:42:48.959 [DEBUG] [Thread-131526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:42:48.959 [DEBUG] [Thread-131526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:42:48.960 [DEBUG] [Thread-131526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:42:49.000 [DEBUG] [Thread-131526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:42:49.000 [DEBUG] [Thread-131526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:42:49.004 [DEBUG] [Thread-131526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:42:49.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:42:49.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:42:49.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:42:49.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:42:49.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:42:49.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:42:49.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:42:49.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:42:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:42:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.571323 -999.00  +25.70  26.10     39  +10.70 1 2 1 1 1   888    0 14.50 -9.45 ----- 30.5 26.1 325.7 37.9 30.9 -22.1 30.5 -22.3 31.4 -18.7 32.0 -19.2
2026-02-11T15:42:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:42:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:42:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.571323
2026-02-11T15:42:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:42:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:42:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:42:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:42:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:42:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:42:29', tmtdew=17.17, humidity=33.79, cloud=0.0, wind=30.45, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:42:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:42:49.028 [DEBUG] [Thread-131526] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:42:49.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:42:49.126 [DEBUG] [Thread-131529] [transport.py] [_log()] starting thread (client mode): 0xa2d54f10
2026-02-11T15:42:49.126 [DEBUG] [Thread-131529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:42:49.142 [DEBUG] [Thread-131529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:42:49.142 [INFO] [Thread-131529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:42:49.150 [DEBUG] [Thread-131529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:42:49.150 [DEBUG] [Thread-131529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] client lang: <none>
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] server lang: <none>
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] kex follows: False
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] Compression: none
2026-02-11T15:42:49.151 [DEBUG] [Thread-131529] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:42:49.209 [DEBUG] [Thread-131529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:42:49.210 [DEBUG] [Thread-131529] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:42:49.210 [DEBUG] [Thread-131529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:42:49.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:42:49.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:42:49.265 [DEBUG] [Thread-131529] [transport.py] [_log()] userauth is OK
2026-02-11T15:42:49.265 [DEBUG] [Thread-131529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:42:49.265 [DEBUG] [Thread-131529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:42:49.265 [DEBUG] [Thread-131529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:42:49.265 [DEBUG] [Thread-131529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:42:49.284 [INFO] [Thread-131529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:42:49.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:42:49.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:42:50.128 [DEBUG] [Thread-131529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:42:50.128 [DEBUG] [Thread-131529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:42:50.176 [DEBUG] [Thread-131529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:42:50.176 [DEBUG] [Thread-131529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:42:50.184 [DEBUG] [Thread-131529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:42:50.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:42:50.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')
2026-02-11T15:42:50.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
2026-02-11T15:42:50.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:42:50.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:42:50.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:42:50.221 [DEBUG] [Thread-131529] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:42:59.724 [DEBUG] [Thread-131531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:43:14.778 [DEBUG] [Thread-131532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:43:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:43:20.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:43:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:43:22.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 43, 6), 17.27, 33.61, 0.0, 31.09, 25.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:43:22.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:43:06
2026-02-11T15:43:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:43:22.893 [DEBUG] [Thread-131533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:43:22.951 [DEBUG] [Thread-131534] [transport.py] [_log()] starting thread (client mode): 0xa575aa10
2026-02-11T15:43:22.951 [DEBUG] [Thread-131534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:43:22.971 [DEBUG] [Thread-131534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:43:22.971 [INFO] [Thread-131534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:43:22.974 [DEBUG] [Thread-131534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:43:22.974 [DEBUG] [Thread-131534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:43:22.974 [DEBUG] [Thread-131534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:43:22.974 [DEBUG] [Thread-131534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:22.974 [DEBUG] [Thread-131534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:22.974 [DEBUG] [Thread-131534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] client lang: <none>
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] server lang: <none>
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] kex follows: False
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] Compression: none
2026-02-11T15:43:22.975 [DEBUG] [Thread-131534] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:43:22.993 [DEBUG] [Thread-131534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:43:22.993 [DEBUG] [Thread-131534] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:43:22.993 [DEBUG] [Thread-131534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:43:22.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:43:22.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:43:23.036 [DEBUG] [Thread-131534] [transport.py] [_log()] userauth is OK
2026-02-11T15:43:23.037 [DEBUG] [Thread-131534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:43:23.037 [DEBUG] [Thread-131534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:43:23.037 [DEBUG] [Thread-131534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:43:23.037 [DEBUG] [Thread-131534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:43:23.056 [INFO] [Thread-131534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:43:23.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:43:23.688 [DEBUG] [Thread-131534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:43:23.689 [DEBUG] [Thread-131534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:43:23.689 [DEBUG] [Thread-131534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:43:23.729 [DEBUG] [Thread-131534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:43:23.730 [DEBUG] [Thread-131534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:43:23.733 [DEBUG] [Thread-131534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:43:23.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:43:23.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:43:23.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:43:23.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:43:23.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:43:23.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:43:23.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:43:23.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:43:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:43:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.571670 -999.00  +25.10  25.54     40  +10.70 1 2 1 1 1   888    0 14.47 -7.69 ----- 25.3 25.5 305.1 39.2 30.9 -19.7 30.5 -19.3 30.9 -19.1 31.9 -18.6
2026-02-11T15:43:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:43:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:43:23.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.571670
2026-02-11T15:43:23.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:43:23.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:43:23.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:43:23.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:43:23.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:43:23.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:43:06', tmtdew=17.27, humidity=33.61, cloud=0.0, wind=31.09, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:43:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:43:23.763 [DEBUG] [Thread-131534] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:43:23.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:43:23.857 [DEBUG] [Thread-131537] [transport.py] [_log()] starting thread (client mode): 0xa57419c0
2026-02-11T15:43:23.857 [DEBUG] [Thread-131537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:43:23.872 [DEBUG] [Thread-131537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:43:23.872 [INFO] [Thread-131537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] client lang: <none>
2026-02-11T15:43:23.879 [DEBUG] [Thread-131537] [transport.py] [_log()] server lang: <none>
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] kex follows: False
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] Compression: none
2026-02-11T15:43:23.880 [DEBUG] [Thread-131537] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:43:23.936 [DEBUG] [Thread-131537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:43:23.936 [DEBUG] [Thread-131537] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:43:23.937 [DEBUG] [Thread-131537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:43:23.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:43:23.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:43:23.992 [DEBUG] [Thread-131537] [transport.py] [_log()] userauth is OK
2026-02-11T15:43:23.993 [DEBUG] [Thread-131537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:43:23.993 [DEBUG] [Thread-131537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:43:23.993 [DEBUG] [Thread-131537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:43:23.993 [DEBUG] [Thread-131537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:43:24.017 [INFO] [Thread-131537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:43:24.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:43:24.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:43:24.878 [DEBUG] [Thread-131537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:43:24.879 [DEBUG] [Thread-131537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:43:24.926 [DEBUG] [Thread-131537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:43:24.926 [DEBUG] [Thread-131537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:43:24.935 [DEBUG] [Thread-131537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:43:24.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:43:24.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:43:24.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
2026-02-11T15:43:24.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:43:24.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:43:24.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:43:24.969 [DEBUG] [Thread-131537] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:43:29.812 [DEBUG] [Thread-131539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:43:35.770 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:43:35.771 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:43:44.863 [DEBUG] [Thread-131540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:43:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:43:54.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:43:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:43:57.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 43, 41), 18.28, 31.51, 0.0, 34.47, 26.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:43:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:43:41
2026-02-11T15:43:57.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:43:57.653 [DEBUG] [Thread-131541] [transport.py] [_log()] starting thread (client mode): 0xa2d03fa0
2026-02-11T15:43:57.654 [DEBUG] [Thread-131541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:43:57.674 [DEBUG] [Thread-131541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:43:57.675 [INFO] [Thread-131541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] client lang: <none>
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] server lang: <none>
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] kex follows: False
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] Compression: none
2026-02-11T15:43:57.678 [DEBUG] [Thread-131541] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:43:57.698 [DEBUG] [Thread-131541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:43:57.698 [DEBUG] [Thread-131541] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:43:57.699 [DEBUG] [Thread-131541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:43:57.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:43:57.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:43:57.702 [DEBUG] [Thread-131541] [transport.py] [_log()] userauth is OK
2026-02-11T15:43:57.702 [DEBUG] [Thread-131541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:43:57.702 [DEBUG] [Thread-131541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:43:57.702 [DEBUG] [Thread-131541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:43:57.702 [DEBUG] [Thread-131541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:43:57.725 [INFO] [Thread-131541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:43:57.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:43:58.374 [DEBUG] [Thread-131541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:43:58.374 [DEBUG] [Thread-131541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:43:58.375 [DEBUG] [Thread-131541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:43:58.415 [DEBUG] [Thread-131541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:43:58.416 [DEBUG] [Thread-131541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:43:58.419 [DEBUG] [Thread-131541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:43:58.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:43:58.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:43:58.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:43:58.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:43:58.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:43:58.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:43:58.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:43:58.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:43:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:43:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.572017 -999.00  +25.10  40.00     39  +10.30 1 2 2 1 1   888    0 14.15 -7.69 ----- 35.2 40.0 314.4 46.1 30.9 -20.6 30.4 -19.4 31.3 -21.7 31.9 -18.7
2026-02-11T15:43:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:43:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:43:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.572017
2026-02-11T15:43:58.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:43:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:43:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:43:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:43:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:43:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:43:41', tmtdew=18.28, humidity=31.51, cloud=0.0, wind=34.47, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:43:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:43:58.443 [DEBUG] [Thread-131541] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:43:58.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:43:58.535 [DEBUG] [Thread-131544] [transport.py] [_log()] starting thread (client mode): 0xa5743010
2026-02-11T15:43:58.535 [DEBUG] [Thread-131544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:43:58.550 [DEBUG] [Thread-131544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:43:58.550 [INFO] [Thread-131544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:43:58.557 [DEBUG] [Thread-131544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] client lang: <none>
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] server lang: <none>
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] kex follows: False
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] Compression: none
2026-02-11T15:43:58.558 [DEBUG] [Thread-131544] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:43:58.616 [DEBUG] [Thread-131544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:43:58.617 [DEBUG] [Thread-131544] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:43:58.617 [DEBUG] [Thread-131544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:43:58.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:43:58.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:43:58.672 [DEBUG] [Thread-131544] [transport.py] [_log()] userauth is OK
2026-02-11T15:43:58.673 [DEBUG] [Thread-131544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:43:58.673 [DEBUG] [Thread-131544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:43:58.673 [DEBUG] [Thread-131544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:43:58.673 [DEBUG] [Thread-131544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:43:58.697 [INFO] [Thread-131544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:43:58.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:43:58.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:43:59.576 [DEBUG] [Thread-131544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:43:59.576 [DEBUG] [Thread-131544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:43:59.624 [DEBUG] [Thread-131544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:43:59.625 [DEBUG] [Thread-131544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:43:59.636 [DEBUG] [Thread-131544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:43:59.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:43:59.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:43:59.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:43:59.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:43:59.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:43:59.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:43:59.674 [DEBUG] [Thread-131544] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:43:59.900 [DEBUG] [Thread-131546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:44:14.959 [DEBUG] [Thread-131547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:44:22.934 [DEBUG] [Thread-131548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:44:29.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:44:29.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:44:29.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:44:29.997 [DEBUG] [Thread-131549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:44:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 44, 16), 17.23, 33.45, 0.0, 28.6, 25.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:44:31.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:44:16
2026-02-11T15:44:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:44:32.090 [DEBUG] [Thread-131550] [transport.py] [_log()] starting thread (client mode): 0xa2d56380
2026-02-11T15:44:32.091 [DEBUG] [Thread-131550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:44:32.111 [DEBUG] [Thread-131550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:44:32.111 [INFO] [Thread-131550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:44:32.114 [DEBUG] [Thread-131550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:44:32.114 [DEBUG] [Thread-131550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:44:32.114 [DEBUG] [Thread-131550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:44:32.114 [DEBUG] [Thread-131550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:44:32.114 [DEBUG] [Thread-131550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:44:32.114 [DEBUG] [Thread-131550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] client lang: <none>
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] server lang: <none>
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] kex follows: False
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] Compression: none
2026-02-11T15:44:32.115 [DEBUG] [Thread-131550] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:44:32.131 [DEBUG] [Thread-131550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:44:32.131 [DEBUG] [Thread-131550] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:44:32.132 [DEBUG] [Thread-131550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:44:32.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:44:32.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:44:32.134 [DEBUG] [Thread-131550] [transport.py] [_log()] userauth is OK
2026-02-11T15:44:32.134 [DEBUG] [Thread-131550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:44:32.134 [DEBUG] [Thread-131550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:44:32.134 [DEBUG] [Thread-131550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:44:32.134 [DEBUG] [Thread-131550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:44:32.161 [INFO] [Thread-131550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:44:32.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:44:32.780 [DEBUG] [Thread-131550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:44:32.780 [DEBUG] [Thread-131550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:44:32.780 [DEBUG] [Thread-131550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:44:32.821 [DEBUG] [Thread-131550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:44:32.821 [DEBUG] [Thread-131550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:44:32.824 [DEBUG] [Thread-131550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:44:32.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:44:32.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:44:32.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:44:32.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:44:32.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:44:32.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:44:32.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.572364 -999.00  +25.10  41.05     39  +10.30 1 2 2 1 1   888    0 14.47 -8.45 ----- 28.2 41.0 306.4 44.8 30.9 -20.3 30.4 -19.0 31.2 -16.8 31.9 -18.7
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.572364
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:44:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:44:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:44:16', tmtdew=17.23, humidity=33.45, cloud=0.0, wind=28.6, temperature=25.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:44:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:44:32.852 [DEBUG] [Thread-131550] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:44:32.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:44:32.951 [DEBUG] [Thread-131553] [transport.py] [_log()] starting thread (client mode): 0xa57c20e0
2026-02-11T15:44:32.951 [DEBUG] [Thread-131553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:44:32.965 [DEBUG] [Thread-131553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:44:32.965 [INFO] [Thread-131553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:44:32.972 [DEBUG] [Thread-131553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:44:32.972 [DEBUG] [Thread-131553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:44:32.972 [DEBUG] [Thread-131553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] client lang: <none>
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] server lang: <none>
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] kex follows: False
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] Compression: none
2026-02-11T15:44:32.973 [DEBUG] [Thread-131553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:44:33.032 [DEBUG] [Thread-131553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:44:33.032 [DEBUG] [Thread-131553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:44:33.033 [DEBUG] [Thread-131553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:44:33.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:44:33.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:44:33.088 [DEBUG] [Thread-131553] [transport.py] [_log()] userauth is OK
2026-02-11T15:44:33.088 [DEBUG] [Thread-131553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:44:33.088 [DEBUG] [Thread-131553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:44:33.088 [DEBUG] [Thread-131553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:44:33.088 [DEBUG] [Thread-131553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:44:33.104 [INFO] [Thread-131553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:44:33.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:44:33.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:44:33.934 [DEBUG] [Thread-131553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:44:33.934 [DEBUG] [Thread-131553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:44:33.984 [DEBUG] [Thread-131553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:44:33.984 [DEBUG] [Thread-131553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:44:33.994 [DEBUG] [Thread-131553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:44:34.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:44:34.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:44:34.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:44:34.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:44:34.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:44:34.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:44:34.032 [DEBUG] [Thread-131553] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:44:35.909 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:44:35.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:44:45.034 [DEBUG] [Thread-131555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:45:00.085 [DEBUG] [Thread-131556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:45:04.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:45:04.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:45:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:45:06.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 44, 52), 17.71, 32.51, 0.0, 28.72, 25.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:45:06.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:44:52
2026-02-11T15:45:06.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:45:06.646 [DEBUG] [Thread-131557] [transport.py] [_log()] starting thread (client mode): 0xa2db5f60
2026-02-11T15:45:06.647 [DEBUG] [Thread-131557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:45:06.665 [DEBUG] [Thread-131557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:45:06.666 [INFO] [Thread-131557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] client lang: <none>
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] server lang: <none>
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] kex follows: False
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] Compression: none
2026-02-11T15:45:06.669 [DEBUG] [Thread-131557] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:45:06.678 [DEBUG] [Thread-131557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:45:06.678 [DEBUG] [Thread-131557] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:45:06.679 [DEBUG] [Thread-131557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:45:06.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:45:06.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:45:06.680 [DEBUG] [Thread-131557] [transport.py] [_log()] userauth is OK
2026-02-11T15:45:06.681 [DEBUG] [Thread-131557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:45:06.681 [DEBUG] [Thread-131557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:45:06.681 [DEBUG] [Thread-131557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:45:06.681 [DEBUG] [Thread-131557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:45:06.699 [INFO] [Thread-131557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:45:06.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:45:07.584 [DEBUG] [Thread-131557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:45:07.584 [DEBUG] [Thread-131557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:45:07.585 [DEBUG] [Thread-131557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:45:07.625 [DEBUG] [Thread-131557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:45:07.626 [DEBUG] [Thread-131557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:45:07.631 [DEBUG] [Thread-131557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:45:07.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:45:07.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:45:07.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:45:07.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:45:07.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:45:07.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:45:07.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:45:07.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:45:07.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:45:07.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.572711 -999.00  +25.40  23.16     39  +10.50 1 2 1 1 1   888    0 14.35 -9.79 ----- 19.1 23.2 309.6 31.1 31.1 -18.5 30.6 -18.0 31.2 -15.5 32.0 -18.0
2026-02-11T15:45:07.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:45:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:45:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.572711
2026-02-11T15:45:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:45:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:45:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:45:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:45:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:45:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:44:52', tmtdew=17.71, humidity=32.51, cloud=0.0, wind=28.72, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:44:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:45:07.662 [DEBUG] [Thread-131557] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:45:07.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:45:07.758 [DEBUG] [Thread-131560] [transport.py] [_log()] starting thread (client mode): 0xa5759ea0
2026-02-11T15:45:07.758 [DEBUG] [Thread-131560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:45:07.774 [DEBUG] [Thread-131560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:45:07.774 [INFO] [Thread-131560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:45:07.782 [DEBUG] [Thread-131560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:45:07.782 [DEBUG] [Thread-131560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] client lang: <none>
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] server lang: <none>
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] kex follows: False
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:45:07.783 [DEBUG] [Thread-131560] [transport.py] [_log()] Compression: none
2026-02-11T15:45:07.784 [DEBUG] [Thread-131560] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:45:07.844 [DEBUG] [Thread-131560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:45:07.845 [DEBUG] [Thread-131560] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:45:07.846 [DEBUG] [Thread-131560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:45:07.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:45:07.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:45:07.900 [DEBUG] [Thread-131560] [transport.py] [_log()] userauth is OK
2026-02-11T15:45:07.901 [DEBUG] [Thread-131560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:45:07.901 [DEBUG] [Thread-131560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:45:07.901 [DEBUG] [Thread-131560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:45:07.901 [DEBUG] [Thread-131560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:45:07.920 [INFO] [Thread-131560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:45:07.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:45:07.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:45:08.742 [DEBUG] [Thread-131560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:45:08.742 [DEBUG] [Thread-131560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:45:08.790 [DEBUG] [Thread-131560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:45:08.791 [DEBUG] [Thread-131560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:45:08.800 [DEBUG] [Thread-131560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:45:08.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:45:08.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:45:08.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:45:08.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:45:08.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:45:08.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:45:08.837 [DEBUG] [Thread-131560] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:45:15.121 [DEBUG] [Thread-131562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:45:22.993 [DEBUG] [Thread-131563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:45:30.172 [DEBUG] [Thread-131564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:45:36.052 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:45:36.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:45:38.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:45:38.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:45: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
2026-02-11T15:45:40.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 45, 28), 17.63, 32.66, 0.0, 27.74, 25.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:45:40.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:45:28
2026-02-11T15:45:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:45:41.426 [DEBUG] [Thread-131565] [transport.py] [_log()] starting thread (client mode): 0xa2db56f0
2026-02-11T15:45:41.426 [DEBUG] [Thread-131565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:45:41.446 [DEBUG] [Thread-131565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:45:41.446 [INFO] [Thread-131565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:45:41.449 [DEBUG] [Thread-131565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:45:41.449 [DEBUG] [Thread-131565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] client lang: <none>
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] server lang: <none>
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] kex follows: False
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] Compression: none
2026-02-11T15:45:41.450 [DEBUG] [Thread-131565] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:45:41.467 [DEBUG] [Thread-131565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:45:41.467 [DEBUG] [Thread-131565] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:45:41.468 [DEBUG] [Thread-131565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:45:41.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:45:41.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:45:41.470 [DEBUG] [Thread-131565] [transport.py] [_log()] userauth is OK
2026-02-11T15:45:41.470 [DEBUG] [Thread-131565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:45:41.470 [DEBUG] [Thread-131565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:45:41.470 [DEBUG] [Thread-131565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:45:41.470 [DEBUG] [Thread-131565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:45:41.484 [INFO] [Thread-131565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:45:41.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:45:42.104 [DEBUG] [Thread-131565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:45:42.105 [DEBUG] [Thread-131565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:45:42.105 [DEBUG] [Thread-131565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:45:42.145 [DEBUG] [Thread-131565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:45:42.145 [DEBUG] [Thread-131565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:45:42.149 [DEBUG] [Thread-131565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:45:42.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:45:42.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:45:42.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:45:42.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:45:42.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:45:42.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:45:42.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:45:42.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:45:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:45:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.573059 -999.00  +25.20  20.57     39  +10.50 1 2 1 1 1   888    0 14.38 -8.87 ----- 17.6 20.6 294.2 24.6 31.1 -19.1 30.7 -17.4 31.3 -16.5 32.1 -17.6
2026-02-11T15:45:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:45:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:45:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.573059
2026-02-11T15:45:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:45:42.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:45:42.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:45:42.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:45:42.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:45:42.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:45:28', tmtdew=17.63, humidity=32.66, cloud=0.0, wind=27.74, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:45:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:45:42.174 [DEBUG] [Thread-131565] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:45:42.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:45:42.270 [DEBUG] [Thread-131568] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-11T15:45:42.271 [DEBUG] [Thread-131568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:45:42.285 [DEBUG] [Thread-131568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:45:42.286 [INFO] [Thread-131568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:45:42.293 [DEBUG] [Thread-131568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:45:42.294 [DEBUG] [Thread-131568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] client lang: <none>
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] server lang: <none>
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] kex follows: False
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] Compression: none
2026-02-11T15:45:42.295 [DEBUG] [Thread-131568] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:45:42.352 [DEBUG] [Thread-131568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:45:42.353 [DEBUG] [Thread-131568] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:45:42.354 [DEBUG] [Thread-131568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:45:42.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:45:42.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:45:42.409 [DEBUG] [Thread-131568] [transport.py] [_log()] userauth is OK
2026-02-11T15:45:42.409 [DEBUG] [Thread-131568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:45:42.410 [DEBUG] [Thread-131568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:45:42.410 [DEBUG] [Thread-131568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:45:42.410 [DEBUG] [Thread-131568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:45:42.429 [INFO] [Thread-131568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:45:42.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:45:42.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:45:43.264 [DEBUG] [Thread-131568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:45:43.265 [DEBUG] [Thread-131568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:45:43.312 [DEBUG] [Thread-131568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:45:43.312 [DEBUG] [Thread-131568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:45:43.321 [DEBUG] [Thread-131568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:45:43.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:45: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')
2026-02-11T15:45:43.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
2026-02-11T15:45:43.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:45:43.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:45:43.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:45:43.354 [DEBUG] [Thread-131568] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:45:45.206 [DEBUG] [Thread-131570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:00.261 [DEBUG] [Thread-131571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:13.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:46:13.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:46:13.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:46:15.297 [DEBUG] [Thread-131572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 46, 3), 17.55, 32.82, 0.0, 27.33, 25.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:46:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:46:03
2026-02-11T15:46:15.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:46:15.850 [DEBUG] [Thread-131573] [transport.py] [_log()] starting thread (client mode): 0xa2db5930
2026-02-11T15:46:15.850 [DEBUG] [Thread-131573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:46:15.870 [DEBUG] [Thread-131573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:46:15.871 [INFO] [Thread-131573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:46:15.873 [DEBUG] [Thread-131573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] client lang: <none>
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] server lang: <none>
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] kex follows: False
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] Compression: none
2026-02-11T15:46:15.874 [DEBUG] [Thread-131573] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:46:15.893 [DEBUG] [Thread-131573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:46:15.893 [DEBUG] [Thread-131573] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:46:15.894 [DEBUG] [Thread-131573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:46:15.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:46:15.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:46:15.896 [DEBUG] [Thread-131573] [transport.py] [_log()] userauth is OK
2026-02-11T15:46:15.896 [DEBUG] [Thread-131573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:46:15.896 [DEBUG] [Thread-131573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:46:15.896 [DEBUG] [Thread-131573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:46:15.896 [DEBUG] [Thread-131573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:46:15.930 [INFO] [Thread-131573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:46:15.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:46:16.548 [DEBUG] [Thread-131573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:46:16.549 [DEBUG] [Thread-131573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:46:16.550 [DEBUG] [Thread-131573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:46:16.589 [DEBUG] [Thread-131573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:46:16.590 [DEBUG] [Thread-131573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:46:16.593 [DEBUG] [Thread-131573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:46:16.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:46:16.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:46:16.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:46:16.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:46:16.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:46:16.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:46:16.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:46:16.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:46:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:46:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.573406 -999.00  +25.60  29.22     39  +10.60 1 2 1 1 1   888    0 14.17 -8.83 ----- 29.2 29.2 281.6 32.7 31.2 -20.5 30.7 -19.4 31.5 -15.5 32.1 -19.1
2026-02-11T15:46:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:46:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:46:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.573406
2026-02-11T15:46:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:46:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:46:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:46:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:46:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:46:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:46:03', tmtdew=17.55, humidity=32.82, cloud=0.0, wind=27.33, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:45:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:46:16.618 [DEBUG] [Thread-131573] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:46:16.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:46:16.711 [DEBUG] [Thread-131576] [transport.py] [_log()] starting thread (client mode): 0xa57d5690
2026-02-11T15:46:16.712 [DEBUG] [Thread-131576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:46:16.727 [DEBUG] [Thread-131576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:46:16.727 [INFO] [Thread-131576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] client lang: <none>
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] server lang: <none>
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] kex follows: False
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:46:16.735 [DEBUG] [Thread-131576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:46:16.736 [DEBUG] [Thread-131576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:46:16.736 [DEBUG] [Thread-131576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:46:16.736 [DEBUG] [Thread-131576] [transport.py] [_log()] Compression: none
2026-02-11T15:46:16.736 [DEBUG] [Thread-131576] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:46:16.792 [DEBUG] [Thread-131576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:46:16.793 [DEBUG] [Thread-131576] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:46:16.794 [DEBUG] [Thread-131576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:46:16.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:46:16.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:46:16.849 [DEBUG] [Thread-131576] [transport.py] [_log()] userauth is OK
2026-02-11T15:46:16.849 [DEBUG] [Thread-131576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:46:16.849 [DEBUG] [Thread-131576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:46:16.849 [DEBUG] [Thread-131576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:46:16.849 [DEBUG] [Thread-131576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:46:16.868 [INFO] [Thread-131576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:46:16.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:46:16.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:46:17.681 [DEBUG] [Thread-131576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:46:17.681 [DEBUG] [Thread-131576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:46:17.728 [DEBUG] [Thread-131576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:46:17.728 [DEBUG] [Thread-131576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:46:17.738 [DEBUG] [Thread-131576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:46:17.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:46:17.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:46:17.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:46:17.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:46:17.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:46:17.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:46:17.775 [DEBUG] [Thread-131576] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:46:23.037 [DEBUG] [Thread-131578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:30.339 [DEBUG] [Thread-131579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:36.192 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:36.194 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:45.394 [DEBUG] [Thread-131580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:46:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:46:47.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:46:47.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
2026-02-11T15:46:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 46, 38), 18.59, 30.88, 0.0, 37.86, 26.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:46:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:46:38
2026-02-11T15:46:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:46:50.718 [DEBUG] [Thread-131581] [transport.py] [_log()] starting thread (client mode): 0xa2d6c550
2026-02-11T15:46:50.718 [DEBUG] [Thread-131581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:46:50.739 [DEBUG] [Thread-131581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:46:50.740 [INFO] [Thread-131581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:46:50.742 [DEBUG] [Thread-131581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] client lang: <none>
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] server lang: <none>
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] kex follows: False
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] Compression: none
2026-02-11T15:46:50.743 [DEBUG] [Thread-131581] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:46:50.763 [DEBUG] [Thread-131581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:46:50.763 [DEBUG] [Thread-131581] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:46:50.764 [DEBUG] [Thread-131581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:46:50.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:46:50.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:46:50.766 [DEBUG] [Thread-131581] [transport.py] [_log()] userauth is OK
2026-02-11T15:46:50.766 [DEBUG] [Thread-131581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:46:50.766 [DEBUG] [Thread-131581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:46:50.766 [DEBUG] [Thread-131581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:46:50.767 [DEBUG] [Thread-131581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:46:50.794 [INFO] [Thread-131581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:46:50.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:46:51.461 [DEBUG] [Thread-131581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:46:51.462 [DEBUG] [Thread-131581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:46:51.462 [DEBUG] [Thread-131581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:46:51.502 [DEBUG] [Thread-131581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:46:51.502 [DEBUG] [Thread-131581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:46:51.506 [DEBUG] [Thread-131581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:46:51.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:46:51.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:46:51.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:46:51.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:46:51.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:46:51.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:46:51.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:46:51.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:46:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:46:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.573753 -999.00  +25.20  28.45     40  +10.70 1 2 1 1 1   888    0 14.24 -5.88 ----- 27.3 28.4 279.6 36.6 30.9 -20.2 30.7 -17.7 31.0 -19.6 32.1 -18.2
2026-02-11T15:46:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:46:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:46:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.573753
2026-02-11T15:46:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:46:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:46:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:46:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:46:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:46:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:46:38', tmtdew=18.59, humidity=30.88, cloud=0.0, wind=37.86, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:46:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:46:51.533 [DEBUG] [Thread-131581] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:46:51.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:46:51.628 [DEBUG] [Thread-131584] [transport.py] [_log()] starting thread (client mode): 0xa2d6e740
2026-02-11T15:46:51.628 [DEBUG] [Thread-131584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:46:51.642 [DEBUG] [Thread-131584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:46:51.642 [INFO] [Thread-131584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:46:51.650 [DEBUG] [Thread-131584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:46:51.650 [DEBUG] [Thread-131584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:46:51.650 [DEBUG] [Thread-131584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:46:51.650 [DEBUG] [Thread-131584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:51.650 [DEBUG] [Thread-131584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:46:51.650 [DEBUG] [Thread-131584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:51.650 [DEBUG] [Thread-131584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] client lang: <none>
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] server lang: <none>
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] kex follows: False
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:46:51.651 [DEBUG] [Thread-131584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:46:51.652 [DEBUG] [Thread-131584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:46:51.652 [DEBUG] [Thread-131584] [transport.py] [_log()] Compression: none
2026-02-11T15:46:51.652 [DEBUG] [Thread-131584] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:46:51.709 [DEBUG] [Thread-131584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:46:51.709 [DEBUG] [Thread-131584] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:46:51.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:46:51.710 [DEBUG] [Thread-131584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:46:51.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:46:51.765 [DEBUG] [Thread-131584] [transport.py] [_log()] userauth is OK
2026-02-11T15:46:51.765 [DEBUG] [Thread-131584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:46:51.765 [DEBUG] [Thread-131584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:46:51.765 [DEBUG] [Thread-131584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:46:51.765 [DEBUG] [Thread-131584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:46:51.784 [INFO] [Thread-131584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:46:51.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:46:51.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:46:52.615 [DEBUG] [Thread-131584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:46:52.615 [DEBUG] [Thread-131584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:46:52.663 [DEBUG] [Thread-131584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:46:52.663 [DEBUG] [Thread-131584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:46:52.673 [DEBUG] [Thread-131584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:46:52.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:46:52.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:46:52.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:46:52.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:46:52.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:46:52.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:46:52.710 [DEBUG] [Thread-131584] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:47:00.431 [DEBUG] [Thread-131586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:47:15.483 [DEBUG] [Thread-131587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:47:22.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:47:22.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:47:22.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:47:23.096 [DEBUG] [Thread-131588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:47:24.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 47, 14), 17.44, 33.27, 0.0, 27.21, 25.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:47:24.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:47:14
2026-02-11T15:47:24.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:47:25.106 [DEBUG] [Thread-131589] [transport.py] [_log()] starting thread (client mode): 0xa2d10b80
2026-02-11T15:47:25.107 [DEBUG] [Thread-131589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:47:25.129 [DEBUG] [Thread-131589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:47:25.129 [INFO] [Thread-131589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] client lang: <none>
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] server lang: <none>
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] kex follows: False
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:47:25.132 [DEBUG] [Thread-131589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:47:25.133 [DEBUG] [Thread-131589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:47:25.133 [DEBUG] [Thread-131589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:47:25.133 [DEBUG] [Thread-131589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:47:25.133 [DEBUG] [Thread-131589] [transport.py] [_log()] Compression: none
2026-02-11T15:47:25.133 [DEBUG] [Thread-131589] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:47:25.151 [DEBUG] [Thread-131589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:47:25.152 [DEBUG] [Thread-131589] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:47:25.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:47:25.153 [DEBUG] [Thread-131589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:47:25.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:47:25.155 [DEBUG] [Thread-131589] [transport.py] [_log()] userauth is OK
2026-02-11T15:47:25.155 [DEBUG] [Thread-131589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:47:25.155 [DEBUG] [Thread-131589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:47:25.155 [DEBUG] [Thread-131589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:47:25.155 [DEBUG] [Thread-131589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:47:25.181 [INFO] [Thread-131589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:47:25.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:47:25.814 [DEBUG] [Thread-131589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:47:25.814 [DEBUG] [Thread-131589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:47:25.815 [DEBUG] [Thread-131589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:47:25.855 [DEBUG] [Thread-131589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:47:25.856 [DEBUG] [Thread-131589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:47:25.859 [DEBUG] [Thread-131589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:47:25.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:47:25.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:47:25.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:47:25.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:47:25.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:47:25.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:47:25.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:47:25.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:47:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:47:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.574100 -999.00  +25.30  24.45     39  +10.70 1 2 1 1 1   888    0 14.48 -2.14 ----- 22.0 24.4 282.4 38.2 31.1 -19.3 30.8 -17.3 31.2 -17.0 32.1 -19.0
2026-02-11T15:47:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:47:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:47:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.574100
2026-02-11T15:47:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:47:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:47:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:47:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:47:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:47:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:47:14', tmtdew=17.44, humidity=33.27, cloud=0.0, wind=27.21, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:46:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:47:25.888 [DEBUG] [Thread-131589] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:47:25.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:47:25.983 [DEBUG] [Thread-131592] [transport.py] [_log()] starting thread (client mode): 0xa2d101f0
2026-02-11T15:47:25.983 [DEBUG] [Thread-131592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:47:25.998 [DEBUG] [Thread-131592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:47:25.998 [INFO] [Thread-131592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:47:26.005 [DEBUG] [Thread-131592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] client lang: <none>
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] server lang: <none>
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] kex follows: False
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:47:26.006 [DEBUG] [Thread-131592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:47:26.007 [DEBUG] [Thread-131592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:47:26.007 [DEBUG] [Thread-131592] [transport.py] [_log()] Compression: none
2026-02-11T15:47:26.007 [DEBUG] [Thread-131592] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:47:26.064 [DEBUG] [Thread-131592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:47:26.065 [DEBUG] [Thread-131592] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:47:26.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:47:26.066 [DEBUG] [Thread-131592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:47:26.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:47:26.121 [DEBUG] [Thread-131592] [transport.py] [_log()] userauth is OK
2026-02-11T15:47:26.121 [DEBUG] [Thread-131592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:47:26.121 [DEBUG] [Thread-131592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:47:26.121 [DEBUG] [Thread-131592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:47:26.122 [DEBUG] [Thread-131592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:47:26.140 [INFO] [Thread-131592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:47:26.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:47:26.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:47:26.975 [DEBUG] [Thread-131592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:47:26.975 [DEBUG] [Thread-131592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:47:27.024 [DEBUG] [Thread-131592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:47:27.025 [DEBUG] [Thread-131592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:47:27.034 [DEBUG] [Thread-131592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:47:27.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:47:27.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:47:27.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:47:27.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:47:27.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:47:27.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:47:27.071 [DEBUG] [Thread-131592] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:47:30.520 [DEBUG] [Thread-131594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:47:36.336 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:47:36.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:47:45.568 [DEBUG] [Thread-131595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:47:57.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:47:57.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:47:57.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:47:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 47, 49), 17.39, 33.14, 0.0, 26.41, 25.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:47:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:47:49
2026-02-11T15:47:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:47:59.809 [DEBUG] [Thread-131596] [transport.py] [_log()] starting thread (client mode): 0xa57d7910
2026-02-11T15:47:59.809 [DEBUG] [Thread-131596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:47:59.828 [DEBUG] [Thread-131596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:47:59.828 [INFO] [Thread-131596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:47:59.829 [DEBUG] [Thread-131596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:47:59.829 [DEBUG] [Thread-131596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:47:59.829 [DEBUG] [Thread-131596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] client lang: <none>
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] server lang: <none>
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] kex follows: False
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] Compression: none
2026-02-11T15:47:59.830 [DEBUG] [Thread-131596] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:47:59.848 [DEBUG] [Thread-131596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:47:59.848 [DEBUG] [Thread-131596] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:47:59.849 [DEBUG] [Thread-131596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:47:59.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:47:59.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:47:59.851 [DEBUG] [Thread-131596] [transport.py] [_log()] userauth is OK
2026-02-11T15:47:59.851 [DEBUG] [Thread-131596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:47:59.851 [DEBUG] [Thread-131596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:47:59.851 [DEBUG] [Thread-131596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:47:59.851 [DEBUG] [Thread-131596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:47:59.872 [INFO] [Thread-131596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:47:59.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:48:00.606 [DEBUG] [Thread-131598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:48:00.645 [DEBUG] [Thread-131596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:48:00.645 [DEBUG] [Thread-131596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:48:00.645 [DEBUG] [Thread-131596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:48:00.685 [DEBUG] [Thread-131596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:48:00.686 [DEBUG] [Thread-131596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:48:00.689 [DEBUG] [Thread-131596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:48:00.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:48:00.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:48:00.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:48:00.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:48:00.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:48:00.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:48:00.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:48:00.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:48:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:48:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.574795 -999.00  +25.40  30.50     40  +10.80 1 2 2 1 1   888    0 14.70 6.42 ----- 23.1 30.5 293.2 42.3 31.2 -19.9 30.7 -18.1 31.4 -17.1 32.1 -19.6
2026-02-11T15:48:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:48:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:48:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.574795
2026-02-11T15:48:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:48:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:48:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:48:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:48:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:48:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:47:49', tmtdew=17.39, humidity=33.14, cloud=0.0, wind=26.41, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:47:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:48:00.714 [DEBUG] [Thread-131596] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:48:00.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:48:15.645 [DEBUG] [Thread-131600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:48:23.141 [DEBUG] [Thread-131601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:48:30.707 [DEBUG] [Thread-131602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:48:36.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:48:36.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:48:45.744 [DEBUG] [Thread-131603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:49:00.784 [DEBUG] [Thread-131604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:49:15.821 [DEBUG] [Thread-131605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:49:23.212 [DEBUG] [Thread-131606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:49:30.859 [DEBUG] [Thread-131607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:49:36.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:49:36.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:49:45.895 [DEBUG] [Thread-131608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:00.930 [DEBUG] [Thread-131609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:12.536 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T15:50:15.965 [DEBUG] [Thread-131610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:23.242 [DEBUG] [Thread-131611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:31.004 [DEBUG] [Thread-131612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:36.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:36.786 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:50:42.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:50:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:50:44.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 50, 12), 17.48, 33.26, 0.0, 25.3, 25.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:50:44.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:50:12
2026-02-11T15:50:45.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:50:45.498 [DEBUG] [Thread-131613] [transport.py] [_log()] starting thread (client mode): 0xa2d6dde0
2026-02-11T15:50:45.499 [DEBUG] [Thread-131613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:50:45.518 [DEBUG] [Thread-131613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:50:45.518 [INFO] [Thread-131613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] client lang: <none>
2026-02-11T15:50:45.522 [DEBUG] [Thread-131613] [transport.py] [_log()] server lang: <none>
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] kex follows: False
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] Compression: none
2026-02-11T15:50:45.523 [DEBUG] [Thread-131613] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:50:45.542 [DEBUG] [Thread-131613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:50:45.543 [DEBUG] [Thread-131613] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:50:45.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:50:45.545 [DEBUG] [Thread-131613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:50:45.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:50:45.547 [DEBUG] [Thread-131613] [transport.py] [_log()] userauth is OK
2026-02-11T15:50:45.547 [DEBUG] [Thread-131613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:50:45.547 [DEBUG] [Thread-131613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:50:45.548 [DEBUG] [Thread-131613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:50:45.548 [DEBUG] [Thread-131613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:50:45.568 [INFO] [Thread-131613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:50:45.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:50:46.042 [DEBUG] [Thread-131615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:50:46.208 [DEBUG] [Thread-131613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:50:46.209 [DEBUG] [Thread-131613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:50:46.209 [DEBUG] [Thread-131613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:50:46.250 [DEBUG] [Thread-131613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:50:46.250 [DEBUG] [Thread-131613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:50:46.253 [DEBUG] [Thread-131613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:50:46.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:50:46.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:50:46.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:50:46.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:50:46.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:50:46.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:50:46.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:50:46.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:50:46.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:50:46.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.576531 -999.00  +26.00  29.31     38  +10.80 1 2 1 1 1   888    0 15.00 17.73 ----- 34.6 29.3 303.6 40.0 31.4 -19.9 31.0 -18.3 31.7 -17.7 32.4 -19.5
2026-02-11T15:50:46.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:50:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:50:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.576531
2026-02-11T15:50:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:50:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:50:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:50:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:50:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:50:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:50:12', tmtdew=17.48, humidity=33.26, cloud=0.0, wind=25.3, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:50:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:50:46.286 [DEBUG] [Thread-131613] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:50:46.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:50:46.381 [DEBUG] [Thread-131617] [transport.py] [_log()] starting thread (client mode): 0xa2d6cd00
2026-02-11T15:50:46.381 [DEBUG] [Thread-131617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:50:46.399 [DEBUG] [Thread-131617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:50:46.399 [INFO] [Thread-131617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] client lang: <none>
2026-02-11T15:50:46.407 [DEBUG] [Thread-131617] [transport.py] [_log()] server lang: <none>
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] kex follows: False
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] Compression: none
2026-02-11T15:50:46.408 [DEBUG] [Thread-131617] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:50:46.464 [DEBUG] [Thread-131617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:50:46.465 [DEBUG] [Thread-131617] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:50:46.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:50:46.466 [DEBUG] [Thread-131617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:50:46.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:50:46.521 [DEBUG] [Thread-131617] [transport.py] [_log()] userauth is OK
2026-02-11T15:50:46.521 [DEBUG] [Thread-131617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:50:46.521 [DEBUG] [Thread-131617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:50:46.522 [DEBUG] [Thread-131617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:50:46.522 [DEBUG] [Thread-131617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:50:46.541 [INFO] [Thread-131617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:50:46.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:50:46.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:50:47.449 [DEBUG] [Thread-131617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:50:47.450 [DEBUG] [Thread-131617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:50:47.498 [DEBUG] [Thread-131617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:50:47.498 [DEBUG] [Thread-131617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:50:47.508 [DEBUG] [Thread-131617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:50:47.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:50:47.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:50:47.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:50:47.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:50:47.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:50:47.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:50:47.552 [DEBUG] [Thread-131617] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:51:01.076 [DEBUG] [Thread-131619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:51:16.119 [DEBUG] [Thread-131620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:51:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:51:17.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:51:17.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:51:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 50, 47), 17.08, 33.77, 0.0, 21.14, 25.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:51:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:50:47
2026-02-11T15:51:20.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:51:20.589 [DEBUG] [Thread-131621] [transport.py] [_log()] starting thread (client mode): 0xa57c1b70
2026-02-11T15:51:20.589 [DEBUG] [Thread-131621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:51:20.602 [DEBUG] [Thread-131621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:51:20.602 [INFO] [Thread-131621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] client lang: <none>
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] server lang: <none>
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] kex follows: False
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:51:20.603 [DEBUG] [Thread-131621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:51:20.604 [DEBUG] [Thread-131621] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:51:20.604 [DEBUG] [Thread-131621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:51:20.604 [DEBUG] [Thread-131621] [transport.py] [_log()] Compression: none
2026-02-11T15:51:20.604 [DEBUG] [Thread-131621] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:51:20.611 [DEBUG] [Thread-131621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:51:20.611 [DEBUG] [Thread-131621] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:51:20.611 [DEBUG] [Thread-131621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:51:20.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:51:20.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:51:20.612 [DEBUG] [Thread-131621] [transport.py] [_log()] userauth is OK
2026-02-11T15:51:20.612 [DEBUG] [Thread-131621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:51:20.612 [DEBUG] [Thread-131621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:51:20.612 [DEBUG] [Thread-131621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:51:20.613 [DEBUG] [Thread-131621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:51:20.625 [INFO] [Thread-131621] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:51:20.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:51:21.244 [DEBUG] [Thread-131621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:51:21.244 [DEBUG] [Thread-131621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:51:21.245 [DEBUG] [Thread-131621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:51:21.285 [DEBUG] [Thread-131621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:51:21.286 [DEBUG] [Thread-131621] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:51:21.289 [DEBUG] [Thread-131621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:51:21.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:51:21.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:51:21.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:51:21.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:51:21.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:51:21.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:51:21.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:51:21.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:51:21.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:51:21.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.576878 -999.00  +24.80  26.65     40  +10.70 1 2 1 1 1   888    0 15.18 18.89 ----- 23.2 26.6 296.4 31.2 31.3 -19.5 31.0 -17.2 31.6 -15.9 32.3 -18.8
2026-02-11T15:51:21.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:51:21.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:51:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.576878
2026-02-11T15:51:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:51:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:51:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:51:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:51:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:51:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:50:47', tmtdew=17.08, humidity=33.77, cloud=0.0, wind=21.14, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:50:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:51:21.317 [DEBUG] [Thread-131621] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:51:21.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:51:21.414 [DEBUG] [Thread-131624] [transport.py] [_log()] starting thread (client mode): 0xa57c1a50
2026-02-11T15:51:21.414 [DEBUG] [Thread-131624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:51:21.430 [DEBUG] [Thread-131624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:51:21.430 [INFO] [Thread-131624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] client lang: <none>
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] server lang: <none>
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] kex follows: False
2026-02-11T15:51:21.438 [DEBUG] [Thread-131624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:51:21.439 [DEBUG] [Thread-131624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:51:21.439 [DEBUG] [Thread-131624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:51:21.439 [DEBUG] [Thread-131624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:51:21.439 [DEBUG] [Thread-131624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:51:21.439 [DEBUG] [Thread-131624] [transport.py] [_log()] Compression: none
2026-02-11T15:51:21.439 [DEBUG] [Thread-131624] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:51:21.498 [DEBUG] [Thread-131624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:51:21.499 [DEBUG] [Thread-131624] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:51:21.499 [DEBUG] [Thread-131624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:51:21.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:51:21.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:51:21.557 [DEBUG] [Thread-131624] [transport.py] [_log()] userauth is OK
2026-02-11T15:51:21.557 [DEBUG] [Thread-131624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:51:21.557 [DEBUG] [Thread-131624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:51:21.557 [DEBUG] [Thread-131624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:51:21.557 [DEBUG] [Thread-131624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:51:21.577 [INFO] [Thread-131624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:51:21.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:51:21.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:51:22.415 [DEBUG] [Thread-131624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:51:22.415 [DEBUG] [Thread-131624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:51:22.463 [DEBUG] [Thread-131624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:51:22.463 [DEBUG] [Thread-131624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:51:22.473 [DEBUG] [Thread-131624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:51:22.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:51:22.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:51:22.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:51:22.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:51:22.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:51:22.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:51:22.509 [DEBUG] [Thread-131624] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:51:23.302 [DEBUG] [Thread-131626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:51:31.157 [DEBUG] [Thread-131627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:51:36.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:51:36.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:51:46.218 [DEBUG] [Thread-131628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:51:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:51:52.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:51:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:51:54.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 51, 23), 17.17, 33.62, 0.0, 20.24, 25.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:51:54.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:51:23
2026-02-11T15:51:54.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:51:54.961 [DEBUG] [Thread-131629] [transport.py] [_log()] starting thread (client mode): 0xa57c26b0
2026-02-11T15:51:54.962 [DEBUG] [Thread-131629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:51:54.982 [DEBUG] [Thread-131629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:51:54.982 [INFO] [Thread-131629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] client lang: <none>
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] server lang: <none>
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] kex follows: False
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:51:54.985 [DEBUG] [Thread-131629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:51:54.986 [DEBUG] [Thread-131629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:51:54.986 [DEBUG] [Thread-131629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:51:54.986 [DEBUG] [Thread-131629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:51:54.986 [DEBUG] [Thread-131629] [transport.py] [_log()] Compression: none
2026-02-11T15:51:54.986 [DEBUG] [Thread-131629] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:51:55.002 [DEBUG] [Thread-131629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:51:55.002 [DEBUG] [Thread-131629] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:51:55.003 [DEBUG] [Thread-131629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:51:55.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:51:55.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:51:55.005 [DEBUG] [Thread-131629] [transport.py] [_log()] userauth is OK
2026-02-11T15:51:55.005 [DEBUG] [Thread-131629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:51:55.005 [DEBUG] [Thread-131629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:51:55.005 [DEBUG] [Thread-131629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:51:55.005 [DEBUG] [Thread-131629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:51:55.041 [INFO] [Thread-131629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:51:55.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:51:55.670 [DEBUG] [Thread-131629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:51:55.670 [DEBUG] [Thread-131629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:51:55.670 [DEBUG] [Thread-131629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:51:55.712 [DEBUG] [Thread-131629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:51:55.712 [DEBUG] [Thread-131629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:51:55.715 [DEBUG] [Thread-131629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:51:55.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:51:55.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:51:55.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:51:55.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:51:55.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:51:55.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:51:55.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:51:55.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:51:55.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:51:55.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.577225 -999.00  +24.80  25.75     40  +10.60 1 2 1 1 1   888    0 15.00 15.03 ----- 18.1 25.8 301.2 37.2 31.2 -19.2 31.0 -16.3 31.5 -18.8 32.3 -17.7
2026-02-11T15:51:55.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:51:55.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:51:55.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.577225
2026-02-11T15:51:55.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:51:55.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:51:55.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:51:55.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:51:55.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:51:55.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:51:23', tmtdew=17.17, humidity=33.62, cloud=0.0, wind=20.24, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:51:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:51:55.739 [DEBUG] [Thread-131629] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:51:55.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:51:55.836 [DEBUG] [Thread-131632] [transport.py] [_log()] starting thread (client mode): 0xa5743130
2026-02-11T15:51:55.836 [DEBUG] [Thread-131632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:51:55.854 [DEBUG] [Thread-131632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:51:55.855 [INFO] [Thread-131632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] client lang: <none>
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] server lang: <none>
2026-02-11T15:51:55.862 [DEBUG] [Thread-131632] [transport.py] [_log()] kex follows: False
2026-02-11T15:51:55.863 [DEBUG] [Thread-131632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:51:55.863 [DEBUG] [Thread-131632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:51:55.863 [DEBUG] [Thread-131632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:51:55.863 [DEBUG] [Thread-131632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:51:55.863 [DEBUG] [Thread-131632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:51:55.863 [DEBUG] [Thread-131632] [transport.py] [_log()] Compression: none
2026-02-11T15:51:55.863 [DEBUG] [Thread-131632] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:51:55.920 [DEBUG] [Thread-131632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:51:55.920 [DEBUG] [Thread-131632] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:51:55.920 [DEBUG] [Thread-131632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:51:55.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:51:55.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:51:55.976 [DEBUG] [Thread-131632] [transport.py] [_log()] userauth is OK
2026-02-11T15:51:55.976 [DEBUG] [Thread-131632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:51:55.976 [DEBUG] [Thread-131632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:51:55.976 [DEBUG] [Thread-131632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:51:55.976 [DEBUG] [Thread-131632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:51:55.998 [INFO] [Thread-131632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:51:55.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:51:55.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:51:56.786 [DEBUG] [Thread-131632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:51:56.786 [DEBUG] [Thread-131632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:51:56.834 [DEBUG] [Thread-131632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:51:56.834 [DEBUG] [Thread-131632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:51:56.842 [DEBUG] [Thread-131632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:51:56.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:51:56.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:51:56.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:51:56.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:51:56.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:51:56.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:51:56.877 [DEBUG] [Thread-131632] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:52:01.252 [DEBUG] [Thread-131634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:52:16.304 [DEBUG] [Thread-131635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:52:23.367 [DEBUG] [Thread-131636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:52:26.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:52:26.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:52:26.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:52:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 51, 59), 17.66, 32.61, 0.0, 28.65, 26.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:52:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:51:59
2026-02-11T15:52:29.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:52:29.906 [DEBUG] [Thread-131637] [transport.py] [_log()] starting thread (client mode): 0xa57c1240
2026-02-11T15:52:29.906 [DEBUG] [Thread-131637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:52:29.926 [DEBUG] [Thread-131637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:52:29.926 [INFO] [Thread-131637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:52:29.929 [DEBUG] [Thread-131637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] client lang: <none>
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] server lang: <none>
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] kex follows: False
2026-02-11T15:52:29.930 [DEBUG] [Thread-131637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:52:29.931 [DEBUG] [Thread-131637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:52:29.931 [DEBUG] [Thread-131637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:52:29.931 [DEBUG] [Thread-131637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:52:29.931 [DEBUG] [Thread-131637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:52:29.931 [DEBUG] [Thread-131637] [transport.py] [_log()] Compression: none
2026-02-11T15:52:29.931 [DEBUG] [Thread-131637] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:52:29.949 [DEBUG] [Thread-131637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:52:29.949 [DEBUG] [Thread-131637] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:52:29.950 [DEBUG] [Thread-131637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:52:29.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:52:29.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:52:29.951 [DEBUG] [Thread-131637] [transport.py] [_log()] userauth is OK
2026-02-11T15:52:29.952 [DEBUG] [Thread-131637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:52:29.952 [DEBUG] [Thread-131637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:52:29.952 [DEBUG] [Thread-131637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:52:29.952 [DEBUG] [Thread-131637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:52:29.987 [INFO] [Thread-131637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:52:29.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:52:30.670 [DEBUG] [Thread-131637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:52:30.671 [DEBUG] [Thread-131637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:52:30.671 [DEBUG] [Thread-131637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:52:30.711 [DEBUG] [Thread-131637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:52:30.712 [DEBUG] [Thread-131637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:52:30.715 [DEBUG] [Thread-131637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:52:30.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:52:30.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:52:30.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:52:30.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:52:30.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:52:30.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:52:30.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:52:30.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:52:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:52:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.577573 -999.00  +25.50  22.51     39  +10.70 1 2 1 1 1   888    0 15.12 15.93 ----- 32.1 22.5 298.2 35.6 31.4 -18.6 31.1 -16.3 31.7 -15.1 32.4 -18.8
2026-02-11T15:52:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:52:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:52:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.577573
2026-02-11T15:52:30.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:52:30.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:52:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:52:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:52:30.742 [DEBUG] [Thread-131637] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:52:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:52:30.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:51:59', tmtdew=17.66, humidity=32.61, cloud=0.0, wind=28.65, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:51:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:52:30.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:52:30.841 [DEBUG] [Thread-131640] [transport.py] [_log()] starting thread (client mode): 0xa57c19c0
2026-02-11T15:52:30.841 [DEBUG] [Thread-131640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:52:30.855 [DEBUG] [Thread-131640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:52:30.856 [INFO] [Thread-131640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] client lang: <none>
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] server lang: <none>
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] kex follows: False
2026-02-11T15:52:30.863 [DEBUG] [Thread-131640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:52:30.864 [DEBUG] [Thread-131640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:52:30.864 [DEBUG] [Thread-131640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:52:30.864 [DEBUG] [Thread-131640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:52:30.864 [DEBUG] [Thread-131640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:52:30.864 [DEBUG] [Thread-131640] [transport.py] [_log()] Compression: none
2026-02-11T15:52:30.864 [DEBUG] [Thread-131640] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:52:30.920 [DEBUG] [Thread-131640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:52:30.920 [DEBUG] [Thread-131640] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:52:30.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:52:30.921 [DEBUG] [Thread-131640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:52:30.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:52:30.976 [DEBUG] [Thread-131640] [transport.py] [_log()] userauth is OK
2026-02-11T15:52:30.977 [DEBUG] [Thread-131640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:52:30.977 [DEBUG] [Thread-131640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:52:30.977 [DEBUG] [Thread-131640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:52:30.977 [DEBUG] [Thread-131640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:52:30.998 [INFO] [Thread-131640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:52:30.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:52:31.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:52:31.341 [DEBUG] [Thread-131642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:52:31.812 [DEBUG] [Thread-131640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:52:31.812 [DEBUG] [Thread-131640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:52:31.860 [DEBUG] [Thread-131640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:52:31.861 [DEBUG] [Thread-131640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:52:31.870 [DEBUG] [Thread-131640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:52:31.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:52:31.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:52:31.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:52:31.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:52:31.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:52:31.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:52:31.907 [DEBUG] [Thread-131640] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:52:37.068 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:52:37.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:52:46.393 [DEBUG] [Thread-131643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:53:01.431 [DEBUG] [Thread-131644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:53:01.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:53:01.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:53:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:53:03.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 52, 35), 19.96, 28.43, 0.0, 39.23, 28.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:53:03.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:52:35
2026-02-11T15:53:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:53:04.398 [DEBUG] [Thread-131645] [transport.py] [_log()] starting thread (client mode): 0xa2d6dc00
2026-02-11T15:53:04.398 [DEBUG] [Thread-131645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:53:04.420 [DEBUG] [Thread-131645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:53:04.420 [INFO] [Thread-131645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:53:04.421 [DEBUG] [Thread-131645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] client lang: <none>
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] server lang: <none>
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] kex follows: False
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] Compression: none
2026-02-11T15:53:04.422 [DEBUG] [Thread-131645] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:53:04.431 [DEBUG] [Thread-131645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:53:04.432 [DEBUG] [Thread-131645] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:53:04.433 [DEBUG] [Thread-131645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:53:04.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:53:04.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:53:04.434 [DEBUG] [Thread-131645] [transport.py] [_log()] userauth is OK
2026-02-11T15:53:04.434 [DEBUG] [Thread-131645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:53:04.435 [DEBUG] [Thread-131645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:53:04.435 [DEBUG] [Thread-131645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:53:04.435 [DEBUG] [Thread-131645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:53:04.448 [INFO] [Thread-131645] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:53:04.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:53:05.219 [DEBUG] [Thread-131645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:53:05.219 [DEBUG] [Thread-131645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:53:05.219 [DEBUG] [Thread-131645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:53:05.260 [DEBUG] [Thread-131645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:53:05.261 [DEBUG] [Thread-131645] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:53:05.264 [DEBUG] [Thread-131645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:53:05.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:53:05.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:53:05.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:53:05.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:53:05.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:53:05.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:53:05.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:53:05.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:53:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:53:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.577920 -999.00  +25.40  33.72     38  +10.40 1 2 2 1 1   888    0 15.22 18.33 ----- 35.2 33.7 291.2 41.2 31.3 -19.6 31.1 -17.3 31.5 -18.7 32.2 -18.5
2026-02-11T15:53:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:53:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:53:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.577920
2026-02-11T15:53:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:53:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:53:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:53:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:53:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:53:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:52:35', tmtdew=19.96, humidity=28.43, cloud=0.0, wind=39.23, temperature=28.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:52:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:53:05.292 [DEBUG] [Thread-131645] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:53:05.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:53:05.385 [DEBUG] [Thread-131648] [transport.py] [_log()] starting thread (client mode): 0xa57c07f0
2026-02-11T15:53:05.386 [DEBUG] [Thread-131648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:53:05.400 [DEBUG] [Thread-131648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:53:05.400 [INFO] [Thread-131648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] client lang: <none>
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] server lang: <none>
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] kex follows: False
2026-02-11T15:53:05.408 [DEBUG] [Thread-131648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:53:05.409 [DEBUG] [Thread-131648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:53:05.409 [DEBUG] [Thread-131648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:53:05.409 [DEBUG] [Thread-131648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:53:05.409 [DEBUG] [Thread-131648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:53:05.409 [DEBUG] [Thread-131648] [transport.py] [_log()] Compression: none
2026-02-11T15:53:05.409 [DEBUG] [Thread-131648] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:53:05.469 [DEBUG] [Thread-131648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:53:05.469 [DEBUG] [Thread-131648] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:53:05.470 [DEBUG] [Thread-131648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:53:05.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:53:05.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:53:05.525 [DEBUG] [Thread-131648] [transport.py] [_log()] userauth is OK
2026-02-11T15:53:05.525 [DEBUG] [Thread-131648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:53:05.525 [DEBUG] [Thread-131648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:53:05.525 [DEBUG] [Thread-131648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:53:05.525 [DEBUG] [Thread-131648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:53:05.543 [INFO] [Thread-131648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:53:05.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:53:05.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:53:06.346 [DEBUG] [Thread-131648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:53:06.347 [DEBUG] [Thread-131648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:53:06.396 [DEBUG] [Thread-131648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:53:06.396 [DEBUG] [Thread-131648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:53:06.405 [DEBUG] [Thread-131648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:53:06.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:53:06.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')
2026-02-11T15:53:06.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:53:06.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:53:06.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:53:06.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:53:06.443 [DEBUG] [Thread-131648] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:53:16.465 [DEBUG] [Thread-131650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:53:23.404 [DEBUG] [Thread-131651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:53:31.520 [DEBUG] [Thread-131652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:53:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:53:36.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:53:36.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
2026-02-11T15:53:37.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:53:37.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:53:38.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 53, 10), 18.79, 30.33, 0.0, 33.31, 26.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:53:38.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:53:10
2026-02-11T15:53:38.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:53:38.900 [DEBUG] [Thread-131653] [transport.py] [_log()] starting thread (client mode): 0xa2d6ef80
2026-02-11T15:53:38.900 [DEBUG] [Thread-131653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:53:38.922 [DEBUG] [Thread-131653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:53:38.923 [INFO] [Thread-131653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:53:38.926 [DEBUG] [Thread-131653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:53:38.926 [DEBUG] [Thread-131653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:53:38.926 [DEBUG] [Thread-131653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:53:38.926 [DEBUG] [Thread-131653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:38.926 [DEBUG] [Thread-131653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] client lang: <none>
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] server lang: <none>
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] kex follows: False
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] Compression: none
2026-02-11T15:53:38.927 [DEBUG] [Thread-131653] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:53:38.944 [DEBUG] [Thread-131653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:53:38.945 [DEBUG] [Thread-131653] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:53:38.945 [DEBUG] [Thread-131653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:53:38.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:53:38.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:53:38.947 [DEBUG] [Thread-131653] [transport.py] [_log()] userauth is OK
2026-02-11T15:53:38.948 [DEBUG] [Thread-131653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:53:38.948 [DEBUG] [Thread-131653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:53:38.948 [DEBUG] [Thread-131653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:53:38.948 [DEBUG] [Thread-131653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:53:38.963 [INFO] [Thread-131653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:53:38.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:53:39.602 [DEBUG] [Thread-131653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:53:39.602 [DEBUG] [Thread-131653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:53:39.603 [DEBUG] [Thread-131653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:53:39.643 [DEBUG] [Thread-131653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:53:39.644 [DEBUG] [Thread-131653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:53:39.647 [DEBUG] [Thread-131653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:53:39.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:53:39.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:53:39.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:53:39.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:53:39.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:53:39.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:53:39.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:53:39.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:53:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:53:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.578614 -999.00  +26.20  26.87     37  +10.40 1 2 1 1 1   888    0 15.56 24.91 ----- 33.8 26.9 317.8 38.1 31.5 -17.9 31.1 -16.9 31.7 -15.8 32.5 -17.3
2026-02-11T15:53:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:53:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:53:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.578614
2026-02-11T15:53:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:53:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:53:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:53:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:53:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:53:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:53:10', tmtdew=18.79, humidity=30.33, cloud=0.0, wind=33.31, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:53:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:53:39.674 [DEBUG] [Thread-131653] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:53:39.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:53:39.770 [DEBUG] [Thread-131656] [transport.py] [_log()] starting thread (client mode): 0xa57703a0
2026-02-11T15:53:39.770 [DEBUG] [Thread-131656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:53:39.784 [DEBUG] [Thread-131656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:53:39.784 [INFO] [Thread-131656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:53:39.792 [DEBUG] [Thread-131656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] client lang: <none>
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] server lang: <none>
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] kex follows: False
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] Compression: none
2026-02-11T15:53:39.793 [DEBUG] [Thread-131656] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:53:39.853 [DEBUG] [Thread-131656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:53:39.853 [DEBUG] [Thread-131656] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:53:39.854 [DEBUG] [Thread-131656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:53:39.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:53:39.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:53:39.908 [DEBUG] [Thread-131656] [transport.py] [_log()] userauth is OK
2026-02-11T15:53:39.909 [DEBUG] [Thread-131656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:53:39.909 [DEBUG] [Thread-131656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:53:39.909 [DEBUG] [Thread-131656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:53:39.909 [DEBUG] [Thread-131656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:53:39.927 [INFO] [Thread-131656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:53:39.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:53:39.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:53:40.811 [DEBUG] [Thread-131656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:53:40.812 [DEBUG] [Thread-131656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:53:40.859 [DEBUG] [Thread-131656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:53:40.859 [DEBUG] [Thread-131656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:53:40.870 [DEBUG] [Thread-131656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:53:40.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:53:40.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:53:40.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:53:40.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:53:40.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:53:40.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:53:40.905 [DEBUG] [Thread-131656] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:53:46.559 [DEBUG] [Thread-131658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:01.613 [DEBUG] [Thread-131659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:10.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:54:10.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:54:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:54:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 53, 46), 18.94, 29.88, 0.0, 35.29, 26.34, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:54:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:53:46
2026-02-11T15:54:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:54:13.444 [DEBUG] [Thread-131660] [transport.py] [_log()] starting thread (client mode): 0xa57d4790
2026-02-11T15:54:13.444 [DEBUG] [Thread-131660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:54:13.464 [DEBUG] [Thread-131660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:54:13.464 [INFO] [Thread-131660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:54:13.465 [DEBUG] [Thread-131660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] client lang: <none>
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] server lang: <none>
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] kex follows: False
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:54:13.466 [DEBUG] [Thread-131660] [transport.py] [_log()] Compression: none
2026-02-11T15:54:13.467 [DEBUG] [Thread-131660] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:54:13.476 [DEBUG] [Thread-131660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:54:13.477 [DEBUG] [Thread-131660] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:54:13.477 [DEBUG] [Thread-131660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:54:13.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:54:13.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:54:13.479 [DEBUG] [Thread-131660] [transport.py] [_log()] userauth is OK
2026-02-11T15:54:13.479 [DEBUG] [Thread-131660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:54:13.479 [DEBUG] [Thread-131660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:54:13.479 [DEBUG] [Thread-131660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:54:13.479 [DEBUG] [Thread-131660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:54:13.498 [INFO] [Thread-131660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:54:13.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:54:14.090 [DEBUG] [Thread-131660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:54:14.090 [DEBUG] [Thread-131660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:54:14.090 [DEBUG] [Thread-131660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:54:14.131 [DEBUG] [Thread-131660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:54:14.132 [DEBUG] [Thread-131660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:54:14.135 [DEBUG] [Thread-131660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:54:14.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:54:14.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:54:14.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:54:14.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:54:14.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:54:14.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:54:14.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:54:14.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:54:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:54:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.578961 -999.00  +26.10  32.03     37  +10.40 1 2 2 1 1   888    0 15.32 28.16 ----- 35.0 32.0 314.4 38.3 31.5 -19.5 31.1 -17.6 31.8 -17.4 32.4 -17.9
2026-02-11T15:54:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:54:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:54:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.578961
2026-02-11T15:54:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:54:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:54:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:54:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:54:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:54:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:53:46', tmtdew=18.94, humidity=29.88, cloud=0.0, wind=35.29, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:53:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:54:14.162 [DEBUG] [Thread-131660] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:54:14.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:54:14.258 [DEBUG] [Thread-131663] [transport.py] [_log()] starting thread (client mode): 0xa2d6e9b0
2026-02-11T15:54:14.258 [DEBUG] [Thread-131663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:54:14.273 [DEBUG] [Thread-131663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:54:14.274 [INFO] [Thread-131663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:54:14.282 [DEBUG] [Thread-131663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:54:14.282 [DEBUG] [Thread-131663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] client lang: <none>
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] server lang: <none>
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] kex follows: False
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:54:14.283 [DEBUG] [Thread-131663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:54:14.284 [DEBUG] [Thread-131663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:54:14.284 [DEBUG] [Thread-131663] [transport.py] [_log()] Compression: none
2026-02-11T15:54:14.284 [DEBUG] [Thread-131663] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:54:14.340 [DEBUG] [Thread-131663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:54:14.341 [DEBUG] [Thread-131663] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:54:14.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:54:14.342 [DEBUG] [Thread-131663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:54:14.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:54:14.397 [DEBUG] [Thread-131663] [transport.py] [_log()] userauth is OK
2026-02-11T15:54:14.397 [DEBUG] [Thread-131663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:54:14.397 [DEBUG] [Thread-131663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:54:14.397 [DEBUG] [Thread-131663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:54:14.397 [DEBUG] [Thread-131663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:54:14.415 [INFO] [Thread-131663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:54:14.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:54:14.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:54:15.240 [DEBUG] [Thread-131663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:54:15.240 [DEBUG] [Thread-131663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:54:15.288 [DEBUG] [Thread-131663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:54:15.289 [DEBUG] [Thread-131663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:54:15.298 [DEBUG] [Thread-131663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:54:15.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:54:15.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:54:15.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:54:15.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:54:15.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:54:15.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:54:15.334 [DEBUG] [Thread-131663] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:54:16.646 [DEBUG] [Thread-131665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:23.453 [DEBUG] [Thread-131666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:31.700 [DEBUG] [Thread-131667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:37.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:37.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:54:45.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:54:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:54:46.737 [DEBUG] [Thread-131668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:54:47.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 54, 22), 18.87, 30.02, 0.0, 33.68, 26.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:54:47.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:54:22
2026-02-11T15:54:47.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:54:47.804 [DEBUG] [Thread-131669] [transport.py] [_log()] starting thread (client mode): 0xa2d6fa00
2026-02-11T15:54:47.804 [DEBUG] [Thread-131669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:54:47.823 [DEBUG] [Thread-131669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:54:47.823 [INFO] [Thread-131669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:54:47.827 [DEBUG] [Thread-131669] [transport.py] [_log()] client lang: <none>
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] server lang: <none>
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] kex follows: False
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] Compression: none
2026-02-11T15:54:47.828 [DEBUG] [Thread-131669] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:54:47.846 [DEBUG] [Thread-131669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:54:47.847 [DEBUG] [Thread-131669] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:54:47.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:54:47.848 [DEBUG] [Thread-131669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:54:47.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:54:47.850 [DEBUG] [Thread-131669] [transport.py] [_log()] userauth is OK
2026-02-11T15:54:47.850 [DEBUG] [Thread-131669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:54:47.850 [DEBUG] [Thread-131669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:54:47.851 [DEBUG] [Thread-131669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:54:47.851 [DEBUG] [Thread-131669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:54:47.875 [INFO] [Thread-131669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:54:47.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:54:48.525 [DEBUG] [Thread-131669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:54:48.525 [DEBUG] [Thread-131669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:54:48.525 [DEBUG] [Thread-131669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:54:48.566 [DEBUG] [Thread-131669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:54:48.566 [DEBUG] [Thread-131669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:54:48.569 [DEBUG] [Thread-131669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:54:48.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:54:48.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:54:48.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:54:48.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:54:48.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:54:48.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:54:48.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:54:48.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:54:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:54:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.579309 -999.00  +25.50  28.21     38  +10.30 1 2 1 1 1   888    0 15.57 28.53 ----- 28.5 28.2 288.8 44.8 31.4 -18.9 31.1 -18.2 31.7 -18.5 32.3 -17.6
2026-02-11T15:54:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:54:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:54:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.579309
2026-02-11T15:54:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:54:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:54:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:54:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:54:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:54:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:54:22', tmtdew=18.87, humidity=30.02, cloud=0.0, wind=33.68, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:54:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:54:48.596 [DEBUG] [Thread-131669] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:54:48.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:54:48.692 [DEBUG] [Thread-131672] [transport.py] [_log()] starting thread (client mode): 0xa5758940
2026-02-11T15:54:48.692 [DEBUG] [Thread-131672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:54:48.707 [DEBUG] [Thread-131672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:54:48.707 [INFO] [Thread-131672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:54:48.714 [DEBUG] [Thread-131672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:54:48.714 [DEBUG] [Thread-131672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:54:48.714 [DEBUG] [Thread-131672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] client lang: <none>
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] server lang: <none>
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] kex follows: False
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] Compression: none
2026-02-11T15:54:48.715 [DEBUG] [Thread-131672] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:54:48.777 [DEBUG] [Thread-131672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:54:48.777 [DEBUG] [Thread-131672] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:54:48.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:54:48.778 [DEBUG] [Thread-131672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:54:48.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:54:48.833 [DEBUG] [Thread-131672] [transport.py] [_log()] userauth is OK
2026-02-11T15:54:48.833 [DEBUG] [Thread-131672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:54:48.833 [DEBUG] [Thread-131672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:54:48.833 [DEBUG] [Thread-131672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:54:48.833 [DEBUG] [Thread-131672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:54:48.852 [INFO] [Thread-131672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:54:48.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:54:48.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:54:49.672 [DEBUG] [Thread-131672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:54:49.672 [DEBUG] [Thread-131672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:54:49.720 [DEBUG] [Thread-131672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:54:49.720 [DEBUG] [Thread-131672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:54:49.730 [DEBUG] [Thread-131672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:54:49.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:54:49.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:54:49.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:54:49.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:54:49.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:54:49.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:54:49.767 [DEBUG] [Thread-131672] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:55:01.774 [DEBUG] [Thread-131674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:55:16.834 [DEBUG] [Thread-131675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:55:19.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:55:19.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:55:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:55:21.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 54, 57), 17.9, 32.23, 0.0, 29.06, 25.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:55:21.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:54:57
2026-02-11T15:55:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:55:22.410 [DEBUG] [Thread-131676] [transport.py] [_log()] starting thread (client mode): 0xa57d5b10
2026-02-11T15:55:22.410 [DEBUG] [Thread-131676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:55:22.430 [DEBUG] [Thread-131676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:55:22.430 [INFO] [Thread-131676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] client lang: <none>
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] server lang: <none>
2026-02-11T15:55:22.434 [DEBUG] [Thread-131676] [transport.py] [_log()] kex follows: False
2026-02-11T15:55:22.435 [DEBUG] [Thread-131676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:55:22.435 [DEBUG] [Thread-131676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:55:22.435 [DEBUG] [Thread-131676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:55:22.435 [DEBUG] [Thread-131676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:55:22.435 [DEBUG] [Thread-131676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:55:22.435 [DEBUG] [Thread-131676] [transport.py] [_log()] Compression: none
2026-02-11T15:55:22.435 [DEBUG] [Thread-131676] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:55:22.451 [DEBUG] [Thread-131676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:55:22.452 [DEBUG] [Thread-131676] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:55:22.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:55:22.452 [DEBUG] [Thread-131676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:55:22.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:55:22.455 [DEBUG] [Thread-131676] [transport.py] [_log()] userauth is OK
2026-02-11T15:55:22.455 [DEBUG] [Thread-131676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:55:22.455 [DEBUG] [Thread-131676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:55:22.455 [DEBUG] [Thread-131676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:55:22.455 [DEBUG] [Thread-131676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:55:22.478 [INFO] [Thread-131676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:55:22.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:55:23.085 [DEBUG] [Thread-131676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:55:23.085 [DEBUG] [Thread-131676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:55:23.085 [DEBUG] [Thread-131676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:55:23.127 [DEBUG] [Thread-131676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:55:23.127 [DEBUG] [Thread-131676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:55:23.130 [DEBUG] [Thread-131676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:55:23.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:55:23.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:55:23.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:55:23.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:55:23.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:55:23.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:55:23.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:55:23.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:55:23.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:55:23.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.579656 -999.00  +25.00  29.48     39  +10.20 1 2 1 1 1   888    0 15.68 29.64 ----- 26.9 29.5 296.6 38.2 31.2 -20.0 31.1 -17.8 31.5 -18.9 32.2 -18.7
2026-02-11T15:55:23.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:55:23.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:55:23.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.579656
2026-02-11T15:55:23.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:55:23.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:55:23.150 [DEBUG] [Thread-131676] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:55:23.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:54:57', tmtdew=17.9, humidity=32.23, cloud=0.0, wind=29.06, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:54:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:55:23.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:55:23.248 [DEBUG] [Thread-131679] [transport.py] [_log()] starting thread (client mode): 0xa5770b50
2026-02-11T15:55:23.249 [DEBUG] [Thread-131679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:55:23.263 [DEBUG] [Thread-131679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:55:23.264 [INFO] [Thread-131679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:55:23.271 [DEBUG] [Thread-131679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] client lang: <none>
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] server lang: <none>
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] kex follows: False
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] Compression: none
2026-02-11T15:55:23.272 [DEBUG] [Thread-131679] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:55:23.328 [DEBUG] [Thread-131679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:55:23.329 [DEBUG] [Thread-131679] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:55:23.330 [DEBUG] [Thread-131679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:55:23.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:55:23.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:55:23.385 [DEBUG] [Thread-131679] [transport.py] [_log()] userauth is OK
2026-02-11T15:55:23.385 [DEBUG] [Thread-131679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:55:23.385 [DEBUG] [Thread-131679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:55:23.385 [DEBUG] [Thread-131679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:55:23.385 [DEBUG] [Thread-131679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:55:23.404 [INFO] [Thread-131679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:55:23.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:55:23.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:55:23.492 [DEBUG] [Thread-131681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:55:24.258 [DEBUG] [Thread-131679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:55:24.258 [DEBUG] [Thread-131679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:55:24.306 [DEBUG] [Thread-131679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:55:24.306 [DEBUG] [Thread-131679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:55:24.316 [DEBUG] [Thread-131679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:55:24.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:55:24.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:55:24.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:55:24.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:55:24.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:55:24.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:55:24.356 [DEBUG] [Thread-131679] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:55:31.873 [DEBUG] [Thread-131682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:55:37.494 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:55:37.495 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:55:46.921 [DEBUG] [Thread-131683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:55:54.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:55:54.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:55:54.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:55:56.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 55, 33), 19.06, 29.89, 0.0, 20.89, 26.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:55:56.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:55:33
2026-02-11T15:55:56.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:55:56.826 [DEBUG] [Thread-131684] [transport.py] [_log()] starting thread (client mode): 0xa57c0c70
2026-02-11T15:55:56.826 [DEBUG] [Thread-131684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:55:56.847 [DEBUG] [Thread-131684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:55:56.848 [INFO] [Thread-131684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:55:56.851 [DEBUG] [Thread-131684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:55:56.851 [DEBUG] [Thread-131684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:55:56.851 [DEBUG] [Thread-131684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:55:56.851 [DEBUG] [Thread-131684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:56.851 [DEBUG] [Thread-131684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:56.851 [DEBUG] [Thread-131684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] client lang: <none>
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] server lang: <none>
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] kex follows: False
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:55:56.852 [DEBUG] [Thread-131684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:55:56.853 [DEBUG] [Thread-131684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:55:56.853 [DEBUG] [Thread-131684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:55:56.853 [DEBUG] [Thread-131684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:55:56.853 [DEBUG] [Thread-131684] [transport.py] [_log()] Compression: none
2026-02-11T15:55:56.853 [DEBUG] [Thread-131684] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:55:56.871 [DEBUG] [Thread-131684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:55:56.871 [DEBUG] [Thread-131684] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:55:56.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:55:56.873 [DEBUG] [Thread-131684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:55:56.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:55:56.874 [DEBUG] [Thread-131684] [transport.py] [_log()] userauth is OK
2026-02-11T15:55:56.875 [DEBUG] [Thread-131684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:55:56.875 [DEBUG] [Thread-131684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:55:56.875 [DEBUG] [Thread-131684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:55:56.875 [DEBUG] [Thread-131684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:55:56.899 [INFO] [Thread-131684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:55:56.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:55:57.526 [DEBUG] [Thread-131684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:55:57.527 [DEBUG] [Thread-131684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:55:57.527 [DEBUG] [Thread-131684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:55:57.567 [DEBUG] [Thread-131684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:55:57.567 [DEBUG] [Thread-131684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:55:57.570 [DEBUG] [Thread-131684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:55:57.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:55:57.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:55:57.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:55:57.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:55:57.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:55:57.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:55:57.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:55:57.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:55:57.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:55:57.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.580003 -999.00  +24.40  23.81     40  +10.10 1 2 1 1 1   888    0 15.54 26.78 ----- 21.6 23.8 303.4 27.8 31.3 -19.2 30.9 -18.5 31.6 -16.5 32.2 -18.0
2026-02-11T15:55:57.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:55:57.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:55:57.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.580003
2026-02-11T15:55:57.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:55:33', tmtdew=19.06, humidity=29.89, cloud=0.0, wind=20.89, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:55:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:55:57.598 [DEBUG] [Thread-131684] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:55:57.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:55:57.693 [DEBUG] [Thread-131687] [transport.py] [_log()] starting thread (client mode): 0xa5770bb0
2026-02-11T15:55:57.694 [DEBUG] [Thread-131687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:55:57.708 [DEBUG] [Thread-131687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:55:57.709 [INFO] [Thread-131687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:55:57.716 [DEBUG] [Thread-131687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:55:57.717 [DEBUG] [Thread-131687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:55:57.717 [DEBUG] [Thread-131687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:55:57.717 [DEBUG] [Thread-131687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:57.717 [DEBUG] [Thread-131687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] client lang: <none>
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] server lang: <none>
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] kex follows: False
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] Compression: none
2026-02-11T15:55:57.718 [DEBUG] [Thread-131687] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:55:57.782 [DEBUG] [Thread-131687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:55:57.783 [DEBUG] [Thread-131687] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:55:57.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:55:57.784 [DEBUG] [Thread-131687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:55:57.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:55:57.841 [DEBUG] [Thread-131687] [transport.py] [_log()] userauth is OK
2026-02-11T15:55:57.841 [DEBUG] [Thread-131687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:55:57.841 [DEBUG] [Thread-131687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:55:57.841 [DEBUG] [Thread-131687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:55:57.841 [DEBUG] [Thread-131687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:55:57.860 [INFO] [Thread-131687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:55:57.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:55:57.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:55:58.658 [DEBUG] [Thread-131687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:55:58.658 [DEBUG] [Thread-131687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:55:58.708 [DEBUG] [Thread-131687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:55:58.708 [DEBUG] [Thread-131687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:55:58.719 [DEBUG] [Thread-131687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:55:58.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:55:58.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:55:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:55:58.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:55:58.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:55:58.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:55:58.759 [DEBUG] [Thread-131687] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:56:01.957 [DEBUG] [Thread-131689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:56:17.006 [DEBUG] [Thread-131690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:56:23.538 [DEBUG] [Thread-131691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:56:28.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:56:28.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:56:28.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
2026-02-11T15:56:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 56, 9), 17.39, 33.22, 0.0, 17.73, 25.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:56:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:56:09
2026-02-11T15:56:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:56:31.993 [DEBUG] [Thread-131692] [transport.py] [_log()] starting thread (client mode): 0xa5740610
2026-02-11T15:56:31.993 [DEBUG] [Thread-131692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:56:32.014 [DEBUG] [Thread-131692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:56:32.014 [INFO] [Thread-131692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:56:32.017 [DEBUG] [Thread-131692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] client lang: <none>
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] server lang: <none>
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] kex follows: False
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:56:32.018 [DEBUG] [Thread-131692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:56:32.019 [DEBUG] [Thread-131692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:56:32.019 [DEBUG] [Thread-131692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:56:32.019 [DEBUG] [Thread-131692] [transport.py] [_log()] Compression: none
2026-02-11T15:56:32.019 [DEBUG] [Thread-131692] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:56:32.038 [DEBUG] [Thread-131692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:56:32.038 [DEBUG] [Thread-131692] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:56:32.039 [DEBUG] [Thread-131692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:56:32.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:56:32.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:56:32.041 [DEBUG] [Thread-131694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:56:32.042 [DEBUG] [Thread-131692] [transport.py] [_log()] userauth is OK
2026-02-11T15:56:32.043 [DEBUG] [Thread-131692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:56:32.043 [DEBUG] [Thread-131692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:56:32.043 [DEBUG] [Thread-131692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:56:32.043 [DEBUG] [Thread-131692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:56:32.068 [INFO] [Thread-131692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:56:32.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:56:32.729 [DEBUG] [Thread-131692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:56:32.729 [DEBUG] [Thread-131692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:56:32.729 [DEBUG] [Thread-131692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:56:32.769 [DEBUG] [Thread-131692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:56:32.770 [DEBUG] [Thread-131692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:56:32.773 [DEBUG] [Thread-131692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:56:32.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:56:32.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:56:32.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:56:32.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:56:32.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:56:32.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:56:32.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:56:32.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:56:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:56:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.580350 -999.00  +24.70  20.27     40  +10.40 1 2 1 1 1   888    0 15.27 23.57 ----- 27.0 20.3 314.4 28.1 31.3 -18.9 31.1 -17.6 31.6 -16.3 32.2 -19.1
2026-02-11T15:56:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:56:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:56:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.580350
2026-02-11T15:56:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:56:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:56:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:56:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:56:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:56:32.801 [DEBUG] [Thread-131692] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:56:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:56:09', tmtdew=17.39, humidity=33.22, cloud=0.0, wind=17.73, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:55:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:56:32.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:56:32.911 [DEBUG] [Thread-131696] [transport.py] [_log()] starting thread (client mode): 0xa2db64d0
2026-02-11T15:56:32.911 [DEBUG] [Thread-131696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:56:32.925 [DEBUG] [Thread-131696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:56:32.925 [INFO] [Thread-131696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] client lang: <none>
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] server lang: <none>
2026-02-11T15:56:32.932 [DEBUG] [Thread-131696] [transport.py] [_log()] kex follows: False
2026-02-11T15:56:32.933 [DEBUG] [Thread-131696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:56:32.933 [DEBUG] [Thread-131696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:56:32.933 [DEBUG] [Thread-131696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:56:32.933 [DEBUG] [Thread-131696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:56:32.933 [DEBUG] [Thread-131696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:56:32.933 [DEBUG] [Thread-131696] [transport.py] [_log()] Compression: none
2026-02-11T15:56:32.933 [DEBUG] [Thread-131696] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:56:32.992 [DEBUG] [Thread-131696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:56:32.992 [DEBUG] [Thread-131696] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:56:32.993 [DEBUG] [Thread-131696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:56:32.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:56:32.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:56:33.048 [DEBUG] [Thread-131696] [transport.py] [_log()] userauth is OK
2026-02-11T15:56:33.048 [DEBUG] [Thread-131696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:56:33.049 [DEBUG] [Thread-131696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:56:33.049 [DEBUG] [Thread-131696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:56:33.049 [DEBUG] [Thread-131696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:56:33.070 [INFO] [Thread-131696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:56:33.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:56:33.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:56:33.909 [DEBUG] [Thread-131696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:56:33.910 [DEBUG] [Thread-131696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:56:33.964 [DEBUG] [Thread-131696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:56:33.964 [DEBUG] [Thread-131696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:56:33.982 [DEBUG] [Thread-131696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:56:33.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:56:33.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:56:34.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:56:34.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:56:34.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:56:34.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:56:34.020 [DEBUG] [Thread-131696] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:56:37.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:56:37.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:56:47.077 [DEBUG] [Thread-131698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:57:02.128 [DEBUG] [Thread-131699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:57:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:57:04.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:57:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:57:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 56, 44), 18.22, 31.37, 0.0, 29.48, 26.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:57:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:56:44
2026-02-11T15:57:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:57:06.543 [DEBUG] [Thread-131700] [transport.py] [_log()] starting thread (client mode): 0xa2db7e80
2026-02-11T15:57:06.543 [DEBUG] [Thread-131700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:57:06.564 [DEBUG] [Thread-131700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:57:06.564 [INFO] [Thread-131700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:57:06.565 [DEBUG] [Thread-131700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:57:06.565 [DEBUG] [Thread-131700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] client lang: <none>
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] server lang: <none>
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] kex follows: False
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:57:06.566 [DEBUG] [Thread-131700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:57:06.567 [DEBUG] [Thread-131700] [transport.py] [_log()] Compression: none
2026-02-11T15:57:06.567 [DEBUG] [Thread-131700] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:57:06.580 [DEBUG] [Thread-131700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:57:06.581 [DEBUG] [Thread-131700] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:57:06.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:57:06.582 [DEBUG] [Thread-131700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:57:06.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:57:06.585 [DEBUG] [Thread-131700] [transport.py] [_log()] userauth is OK
2026-02-11T15:57:06.585 [DEBUG] [Thread-131700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:57:06.585 [DEBUG] [Thread-131700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:57:06.586 [DEBUG] [Thread-131700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:57:06.586 [DEBUG] [Thread-131700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:57:06.603 [INFO] [Thread-131700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:57:06.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:57:07.206 [DEBUG] [Thread-131700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:57:07.206 [DEBUG] [Thread-131700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:57:07.207 [DEBUG] [Thread-131700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:57:07.247 [DEBUG] [Thread-131700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:57:07.248 [DEBUG] [Thread-131700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:57:07.251 [DEBUG] [Thread-131700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:57:07.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:57:07.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:57:07.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:57:07.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:57:07.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:57:07.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:57:07.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:57:07.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:57:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:57:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.580698 -999.00  +25.00  33.84     39  +10.20 1 2 2 1 1   888    0 15.38 21.84 ----- 30.9 33.8 316.8 38.8 31.1 -19.1 30.9 -19.0 31.3 -20.1 32.1 -18.1
2026-02-11T15:57:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:57:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:57:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.580698
2026-02-11T15:57:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:57:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:57:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:57:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:57:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:57:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:56:44', tmtdew=18.22, humidity=31.37, cloud=0.0, wind=29.48, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:56:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:57:07.270 [DEBUG] [Thread-131700] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:57:07.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:57:07.364 [DEBUG] [Thread-131703] [transport.py] [_log()] starting thread (client mode): 0x9eb046d0
2026-02-11T15:57:07.364 [DEBUG] [Thread-131703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:57:07.378 [DEBUG] [Thread-131703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:57:07.379 [INFO] [Thread-131703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:57:07.386 [DEBUG] [Thread-131703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:57:07.387 [DEBUG] [Thread-131703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:57:07.387 [DEBUG] [Thread-131703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:57:07.387 [DEBUG] [Thread-131703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] client lang: <none>
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] server lang: <none>
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] kex follows: False
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:57:07.388 [DEBUG] [Thread-131703] [transport.py] [_log()] Compression: none
2026-02-11T15:57:07.389 [DEBUG] [Thread-131703] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:57:07.449 [DEBUG] [Thread-131703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:57:07.449 [DEBUG] [Thread-131703] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:57:07.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:57:07.451 [DEBUG] [Thread-131703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:57:07.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:57:07.505 [DEBUG] [Thread-131703] [transport.py] [_log()] userauth is OK
2026-02-11T15:57:07.505 [DEBUG] [Thread-131703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:57:07.505 [DEBUG] [Thread-131703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:57:07.505 [DEBUG] [Thread-131703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:57:07.505 [DEBUG] [Thread-131703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:57:07.530 [INFO] [Thread-131703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:57:07.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:57:07.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:57:08.346 [DEBUG] [Thread-131703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:57:08.346 [DEBUG] [Thread-131703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:57:08.394 [DEBUG] [Thread-131703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:57:08.394 [DEBUG] [Thread-131703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:57:08.403 [DEBUG] [Thread-131703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:57:08.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:57:08.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:57:08.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:57:08.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:57:08.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:57:08.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:57:08.438 [DEBUG] [Thread-131703] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:57:17.165 [DEBUG] [Thread-131705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:57:23.583 [DEBUG] [Thread-131706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:57:32.215 [DEBUG] [Thread-131707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:57:37.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:57:37.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:57:38.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:57:38.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:57:38.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:57:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 57, 20), 18.37, 31.13, 0.0, 29.15, 26.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:57:40.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:57:20
2026-02-11T15:57:40.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:57:40.805 [DEBUG] [Thread-131708] [transport.py] [_log()] starting thread (client mode): 0x9eb05db0
2026-02-11T15:57:40.805 [DEBUG] [Thread-131708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:57:40.825 [DEBUG] [Thread-131708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:57:40.825 [INFO] [Thread-131708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] client lang: <none>
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] server lang: <none>
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] kex follows: False
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:57:40.827 [DEBUG] [Thread-131708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:57:40.828 [DEBUG] [Thread-131708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:57:40.828 [DEBUG] [Thread-131708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:57:40.828 [DEBUG] [Thread-131708] [transport.py] [_log()] Compression: none
2026-02-11T15:57:40.828 [DEBUG] [Thread-131708] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:57:40.835 [DEBUG] [Thread-131708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:57:40.835 [DEBUG] [Thread-131708] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:57:40.836 [DEBUG] [Thread-131708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:57:40.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:57:40.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:57:40.837 [DEBUG] [Thread-131708] [transport.py] [_log()] userauth is OK
2026-02-11T15:57:40.837 [DEBUG] [Thread-131708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:57:40.837 [DEBUG] [Thread-131708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:57:40.837 [DEBUG] [Thread-131708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:57:40.837 [DEBUG] [Thread-131708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:57:40.854 [INFO] [Thread-131708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:57:40.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:57:41.489 [DEBUG] [Thread-131708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:57:41.489 [DEBUG] [Thread-131708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:57:41.489 [DEBUG] [Thread-131708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:57:41.530 [DEBUG] [Thread-131708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:57:41.531 [DEBUG] [Thread-131708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:57:41.534 [DEBUG] [Thread-131708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:57:41.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:57:41.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:57:41.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:57:41.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:57:41.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:57:41.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:57:41.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:57:41.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:57:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:57:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.581392 -999.00  +25.30  25.14     39  +10.50 1 2 1 1 1   888    0 15.55 24.68 ----- 25.9 25.1 296.6 32.4 31.3 -18.9 30.9 -17.1 31.4 -17.9 32.2 -17.4
2026-02-11T15:57:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:57:41.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:57:41.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.581392
2026-02-11T15:57:41.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:57:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:57:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:57:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:57:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:57:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:57:20', tmtdew=18.37, humidity=31.13, cloud=0.0, wind=29.15, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:57:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:57:41.559 [DEBUG] [Thread-131708] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:57:41.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:57:41.649 [DEBUG] [Thread-131711] [transport.py] [_log()] starting thread (client mode): 0xa2d6d390
2026-02-11T15:57:41.649 [DEBUG] [Thread-131711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:57:41.663 [DEBUG] [Thread-131711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:57:41.664 [INFO] [Thread-131711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:57:41.671 [DEBUG] [Thread-131711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] client lang: <none>
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] server lang: <none>
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] kex follows: False
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:57:41.672 [DEBUG] [Thread-131711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:57:41.673 [DEBUG] [Thread-131711] [transport.py] [_log()] Compression: none
2026-02-11T15:57:41.673 [DEBUG] [Thread-131711] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:57:41.728 [DEBUG] [Thread-131711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:57:41.728 [DEBUG] [Thread-131711] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:57:41.729 [DEBUG] [Thread-131711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:57:41.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:57:41.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:57:41.785 [DEBUG] [Thread-131711] [transport.py] [_log()] userauth is OK
2026-02-11T15:57:41.785 [DEBUG] [Thread-131711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:57:41.785 [DEBUG] [Thread-131711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:57:41.785 [DEBUG] [Thread-131711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:57:41.786 [DEBUG] [Thread-131711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:57:41.804 [INFO] [Thread-131711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:57:41.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:57:41.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:57:42.606 [DEBUG] [Thread-131711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:57:42.606 [DEBUG] [Thread-131711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:57:42.653 [DEBUG] [Thread-131711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:57:42.653 [DEBUG] [Thread-131711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:57:42.662 [DEBUG] [Thread-131711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:57:42.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:57:42.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:57:42.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:57:42.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:57:42.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:57:42.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:57:42.699 [DEBUG] [Thread-131711] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:57:47.253 [DEBUG] [Thread-131713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:02.304 [DEBUG] [Thread-131714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:12.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:58:12.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:58:12.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:58:14.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 57, 56), 18.28, 31.46, 0.0, 28.23, 26.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:58:14.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:57:56
2026-02-11T15:58:15.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:58:15.227 [DEBUG] [Thread-131715] [transport.py] [_log()] starting thread (client mode): 0x9eb06770
2026-02-11T15:58:15.227 [DEBUG] [Thread-131715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:58:15.247 [DEBUG] [Thread-131715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:58:15.247 [INFO] [Thread-131715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:58:15.250 [DEBUG] [Thread-131715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] client lang: <none>
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] server lang: <none>
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] kex follows: False
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:58:15.251 [DEBUG] [Thread-131715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:58:15.252 [DEBUG] [Thread-131715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:58:15.252 [DEBUG] [Thread-131715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:58:15.252 [DEBUG] [Thread-131715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:58:15.252 [DEBUG] [Thread-131715] [transport.py] [_log()] Compression: none
2026-02-11T15:58:15.252 [DEBUG] [Thread-131715] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:58:15.270 [DEBUG] [Thread-131715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:58:15.271 [DEBUG] [Thread-131715] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:58:15.271 [DEBUG] [Thread-131715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:58:15.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:58:15.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:58:15.313 [DEBUG] [Thread-131715] [transport.py] [_log()] userauth is OK
2026-02-11T15:58:15.313 [DEBUG] [Thread-131715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:58:15.313 [DEBUG] [Thread-131715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:58:15.314 [DEBUG] [Thread-131715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:58:15.314 [DEBUG] [Thread-131715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:58:15.348 [INFO] [Thread-131715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:58:15.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:58:15.980 [DEBUG] [Thread-131715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:58:15.980 [DEBUG] [Thread-131715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:58:15.981 [DEBUG] [Thread-131715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:58:16.021 [DEBUG] [Thread-131715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:58:16.022 [DEBUG] [Thread-131715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:58:16.025 [DEBUG] [Thread-131715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:58:16.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:58:16.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:58:16.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:58:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:58:16.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:58:16.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:58:16.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:58:16.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:58:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:58:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.581739 -999.00  +25.60  24.78     38  +10.40 1 2 1 1 1   888    0 15.38 24.07 ----- 31.2 24.8 320.8 34.2 31.3 -18.6 30.9 -16.2 31.6 -15.9 32.3 -16.9
2026-02-11T15:58:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:58:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:58:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.581739
2026-02-11T15:58:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:58:16.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:58:16.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:58:16.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:58:16.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:58:16.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:57:56', tmtdew=18.28, humidity=31.46, cloud=0.0, wind=28.23, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:57:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:58:16.053 [DEBUG] [Thread-131715] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:58:16.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:58:16.150 [DEBUG] [Thread-131718] [transport.py] [_log()] starting thread (client mode): 0xa57c21a0
2026-02-11T15:58:16.150 [DEBUG] [Thread-131718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:58:16.166 [DEBUG] [Thread-131718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:58:16.166 [INFO] [Thread-131718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:58:16.173 [DEBUG] [Thread-131718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:58:16.173 [DEBUG] [Thread-131718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] client lang: <none>
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] server lang: <none>
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] kex follows: False
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] Compression: none
2026-02-11T15:58:16.174 [DEBUG] [Thread-131718] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:58:16.233 [DEBUG] [Thread-131718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:58:16.234 [DEBUG] [Thread-131718] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:58:16.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:58:16.235 [DEBUG] [Thread-131718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:58:16.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:58:16.289 [DEBUG] [Thread-131718] [transport.py] [_log()] userauth is OK
2026-02-11T15:58:16.289 [DEBUG] [Thread-131718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:58:16.290 [DEBUG] [Thread-131718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:58:16.290 [DEBUG] [Thread-131718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:58:16.290 [DEBUG] [Thread-131718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:58:16.315 [INFO] [Thread-131718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:58:16.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:58:16.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:58:17.126 [DEBUG] [Thread-131718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:58:17.126 [DEBUG] [Thread-131718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:58:17.174 [DEBUG] [Thread-131718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:58:17.174 [DEBUG] [Thread-131718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:58:17.183 [DEBUG] [Thread-131718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:58:17.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:58:17.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:58:17.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:58:17.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:58:17.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:58:17.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:58:17.217 [DEBUG] [Thread-131718] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:58:17.342 [DEBUG] [Thread-131720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:23.626 [DEBUG] [Thread-131721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:32.388 [DEBUG] [Thread-131722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:37.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:37.917 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:58:47.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:58:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:58:47.423 [DEBUG] [Thread-131723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:58:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 58, 32), 18.16, 31.71, 0.0, 31.78, 26.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:58:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:58:32
2026-02-11T15:58:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:58:49.826 [DEBUG] [Thread-131724] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-11T15:58:49.826 [DEBUG] [Thread-131724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:58:49.846 [DEBUG] [Thread-131724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:58:49.846 [INFO] [Thread-131724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:58:49.849 [DEBUG] [Thread-131724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:58:49.849 [DEBUG] [Thread-131724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:58:49.849 [DEBUG] [Thread-131724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:58:49.849 [DEBUG] [Thread-131724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:49.849 [DEBUG] [Thread-131724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:49.849 [DEBUG] [Thread-131724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] client lang: <none>
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] server lang: <none>
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] kex follows: False
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] Compression: none
2026-02-11T15:58:49.850 [DEBUG] [Thread-131724] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:58:49.867 [DEBUG] [Thread-131724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:58:49.868 [DEBUG] [Thread-131724] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:58:49.868 [DEBUG] [Thread-131724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:58:49.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:58:49.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:58:49.871 [DEBUG] [Thread-131724] [transport.py] [_log()] userauth is OK
2026-02-11T15:58:49.871 [DEBUG] [Thread-131724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:58:49.871 [DEBUG] [Thread-131724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:58:49.871 [DEBUG] [Thread-131724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:58:49.871 [DEBUG] [Thread-131724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:58:49.893 [INFO] [Thread-131724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:58:49.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:58:50.490 [DEBUG] [Thread-131724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:58:50.490 [DEBUG] [Thread-131724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:58:50.490 [DEBUG] [Thread-131724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:58:50.532 [DEBUG] [Thread-131724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:58:50.532 [DEBUG] [Thread-131724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:58:50.535 [DEBUG] [Thread-131724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:58:50.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:58:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:58:50.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:58:50.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:58:50.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:58:50.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:58:50.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:58:50.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:58:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:58:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.582434 -999.00  +26.20  22.77     37  +10.60 1 2 1 1 1   888    0 15.62 30.46 ----- 36.4 22.8 313.8 34.7 31.4 -17.4 31.1 -16.9 31.6 -14.2 32.4 -17.3
2026-02-11T15:58:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:58:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:58:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.582434
2026-02-11T15:58:50.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:58:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:58:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:58:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:58:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:58:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:58:32', tmtdew=18.16, humidity=31.71, cloud=0.0, wind=31.78, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:58:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:58:50.561 [DEBUG] [Thread-131724] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:58:50.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:58:50.658 [DEBUG] [Thread-131727] [transport.py] [_log()] starting thread (client mode): 0xa2db6c80
2026-02-11T15:58:50.658 [DEBUG] [Thread-131727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:58:50.673 [DEBUG] [Thread-131727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:58:50.673 [INFO] [Thread-131727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] client lang: <none>
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] server lang: <none>
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] kex follows: False
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:58:50.681 [DEBUG] [Thread-131727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:58:50.682 [DEBUG] [Thread-131727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:58:50.682 [DEBUG] [Thread-131727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:58:50.682 [DEBUG] [Thread-131727] [transport.py] [_log()] Compression: none
2026-02-11T15:58:50.682 [DEBUG] [Thread-131727] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:58:50.744 [DEBUG] [Thread-131727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:58:50.745 [DEBUG] [Thread-131727] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:58:50.746 [DEBUG] [Thread-131727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:58:50.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:58:50.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:58:50.801 [DEBUG] [Thread-131727] [transport.py] [_log()] userauth is OK
2026-02-11T15:58:50.801 [DEBUG] [Thread-131727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:58:50.801 [DEBUG] [Thread-131727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:58:50.801 [DEBUG] [Thread-131727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:58:50.802 [DEBUG] [Thread-131727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:58:50.820 [INFO] [Thread-131727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:58:50.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:58:50.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:58:51.729 [DEBUG] [Thread-131727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:58:51.730 [DEBUG] [Thread-131727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:58:51.777 [DEBUG] [Thread-131727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:58:51.777 [DEBUG] [Thread-131727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:58:51.787 [DEBUG] [Thread-131727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:58:51.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:58:51.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T15:58:51.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:58:51.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:58:51.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:58:51.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:58:51.823 [DEBUG] [Thread-131727] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:59:02.459 [DEBUG] [Thread-131729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:59:17.504 [DEBUG] [Thread-131730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:59:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:59:21.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:59:21.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:59:23.671 [DEBUG] [Thread-131731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:59:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 59, 7), 17.95, 32.04, 0.0, 28.18, 25.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:59:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:59:07
2026-02-11T15:59:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:59:24.385 [DEBUG] [Thread-131732] [transport.py] [_log()] starting thread (client mode): 0xa5770df0
2026-02-11T15:59:24.385 [DEBUG] [Thread-131732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:59:24.404 [DEBUG] [Thread-131732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:59:24.405 [INFO] [Thread-131732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:59:24.407 [DEBUG] [Thread-131732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:59:24.407 [DEBUG] [Thread-131732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] client lang: <none>
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] server lang: <none>
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] kex follows: False
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:59:24.408 [DEBUG] [Thread-131732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:59:24.409 [DEBUG] [Thread-131732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:59:24.409 [DEBUG] [Thread-131732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:59:24.409 [DEBUG] [Thread-131732] [transport.py] [_log()] Compression: none
2026-02-11T15:59:24.409 [DEBUG] [Thread-131732] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:59:24.430 [DEBUG] [Thread-131732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:59:24.431 [DEBUG] [Thread-131732] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:59:24.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:59:24.433 [DEBUG] [Thread-131732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:59:24.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:59:24.434 [DEBUG] [Thread-131732] [transport.py] [_log()] userauth is OK
2026-02-11T15:59:24.434 [DEBUG] [Thread-131732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:59:24.434 [DEBUG] [Thread-131732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:59:24.434 [DEBUG] [Thread-131732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:59:24.434 [DEBUG] [Thread-131732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:59:24.471 [INFO] [Thread-131732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:59:24.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:59:25.082 [DEBUG] [Thread-131732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:59:25.082 [DEBUG] [Thread-131732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:59:25.082 [DEBUG] [Thread-131732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:59:25.122 [DEBUG] [Thread-131732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:59:25.123 [DEBUG] [Thread-131732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:59:25.126 [DEBUG] [Thread-131732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:59:25.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:59:25.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:59:25.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:59:25.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:59:25.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:59:25.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:59:25.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:59:25.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:59:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:59:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.582781 -999.00  +25.50  32.99     37  +10.10 1 2 2 1 1   888    0 15.89 31.18 ----- 29.5 33.0 322.4 37.9 31.4 -18.1 31.0 -16.6 31.6 -16.9 32.3 -16.7
2026-02-11T15:59:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:59:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:59:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.582781
2026-02-11T15:59:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:59:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:59:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:59:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:59:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:59:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:59:07', tmtdew=17.95, humidity=32.04, cloud=0.0, wind=28.18, temperature=25.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:59:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:59:25.143 [DEBUG] [Thread-131732] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:59:25.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:59:25.229 [DEBUG] [Thread-131735] [transport.py] [_log()] starting thread (client mode): 0xa81d7b80
2026-02-11T15:59:25.229 [DEBUG] [Thread-131735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:59:25.244 [DEBUG] [Thread-131735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T15:59:25.244 [INFO] [Thread-131735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] client lang: <none>
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] server lang: <none>
2026-02-11T15:59:25.255 [DEBUG] [Thread-131735] [transport.py] [_log()] kex follows: False
2026-02-11T15:59:25.256 [DEBUG] [Thread-131735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:59:25.256 [DEBUG] [Thread-131735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:59:25.256 [DEBUG] [Thread-131735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:59:25.256 [DEBUG] [Thread-131735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:59:25.256 [DEBUG] [Thread-131735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:59:25.256 [DEBUG] [Thread-131735] [transport.py] [_log()] Compression: none
2026-02-11T15:59:25.256 [DEBUG] [Thread-131735] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:59:25.315 [DEBUG] [Thread-131735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:59:25.315 [DEBUG] [Thread-131735] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:59:25.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T15:59:25.316 [DEBUG] [Thread-131735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T15:59:25.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:59:25.373 [DEBUG] [Thread-131735] [transport.py] [_log()] userauth is OK
2026-02-11T15:59:25.373 [DEBUG] [Thread-131735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:59:25.373 [DEBUG] [Thread-131735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:59:25.373 [DEBUG] [Thread-131735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T15:59:25.373 [DEBUG] [Thread-131735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:59:25.392 [INFO] [Thread-131735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:59:25.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T15:59:25.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:59:26.224 [DEBUG] [Thread-131735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:59:26.224 [DEBUG] [Thread-131735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:59:26.273 [DEBUG] [Thread-131735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:59:26.274 [DEBUG] [Thread-131735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:59:26.283 [DEBUG] [Thread-131735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:59:26.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:59: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')
2026-02-11T15:59:26.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T15:59:26.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:59:26.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:59:26.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:59:26.324 [DEBUG] [Thread-131735] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:59:32.541 [DEBUG] [Thread-131737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:59:38.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:59:38.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:59:47.601 [DEBUG] [Thread-131738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T15:59:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T15:59:56.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T15:59:56.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T15:59:58.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 15, 59, 43), 18.05, 31.74, 0.0, 23.41, 26.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T15:59:58.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 15:59:43
2026-02-11T15:59:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T15:59:59.133 [DEBUG] [Thread-131739] [transport.py] [_log()] starting thread (client mode): 0xa57d7fa0
2026-02-11T15:59:59.133 [DEBUG] [Thread-131739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T15:59:59.152 [DEBUG] [Thread-131739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T15:59:59.153 [INFO] [Thread-131739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] client lang: <none>
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] server lang: <none>
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] kex follows: False
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T15:59:59.154 [DEBUG] [Thread-131739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T15:59:59.155 [DEBUG] [Thread-131739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T15:59:59.155 [DEBUG] [Thread-131739] [transport.py] [_log()] Compression: none
2026-02-11T15:59:59.155 [DEBUG] [Thread-131739] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T15:59:59.163 [DEBUG] [Thread-131739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T15:59:59.163 [DEBUG] [Thread-131739] [transport.py] [_log()] Switch to new keys ...
2026-02-11T15:59:59.163 [DEBUG] [Thread-131739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T15:59:59.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T15:59:59.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T15:59:59.165 [DEBUG] [Thread-131739] [transport.py] [_log()] userauth is OK
2026-02-11T15:59:59.165 [DEBUG] [Thread-131739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T15:59:59.165 [DEBUG] [Thread-131739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T15:59:59.165 [DEBUG] [Thread-131739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T15:59:59.165 [DEBUG] [Thread-131739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T15:59:59.177 [INFO] [Thread-131739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T15:59:59.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T15:59:59.822 [DEBUG] [Thread-131739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T15:59:59.831 [DEBUG] [Thread-131739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T15:59:59.832 [DEBUG] [Thread-131739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T15:59:59.863 [DEBUG] [Thread-131739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T15:59:59.864 [DEBUG] [Thread-131739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T15:59:59.867 [DEBUG] [Thread-131739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T15:59:59.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T15:59:59.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T15:59:59.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T15:59:59.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T15:59:59.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T15:59:59.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T15:59:59.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T15:59:59.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T15:59:59.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T15:59:59.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.583128 -999.00  +25.40  25.40     38  +10.30 1 2 1 1 1   888    0 15.62 33.26 ----- 20.4 25.4 310.2 30.4 31.4 -17.6 30.9 -15.8 31.9 -14.1 32.4 -16.1
2026-02-11T15:59:59.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T15:59:59.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T15:59:59.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.583128
2026-02-11T15:59:59.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T15:59:59.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T15:59:59.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T15:59:59.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T15:59:59.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T15:59:59.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T15:59:43', tmtdew=18.05, humidity=31.74, cloud=0.0, wind=23.41, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T13:59:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T15:59:59.896 [DEBUG] [Thread-131739] [transport.py] [_log()] EOF in transport thread
2026-02-11T15:59:59.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T15:59:59.991 [DEBUG] [Thread-131742] [transport.py] [_log()] starting thread (client mode): 0xa2d546a0
2026-02-11T15:59:59.991 [DEBUG] [Thread-131742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:00:00.006 [DEBUG] [Thread-131742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:00:00.006 [INFO] [Thread-131742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:00:00.013 [DEBUG] [Thread-131742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:00:00.013 [DEBUG] [Thread-131742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] client lang: <none>
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] server lang: <none>
2026-02-11T16:00:00.014 [DEBUG] [Thread-131742] [transport.py] [_log()] kex follows: False
2026-02-11T16:00:00.015 [DEBUG] [Thread-131742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:00:00.015 [DEBUG] [Thread-131742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:00:00.015 [DEBUG] [Thread-131742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:00:00.015 [DEBUG] [Thread-131742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:00:00.015 [DEBUG] [Thread-131742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:00:00.015 [DEBUG] [Thread-131742] [transport.py] [_log()] Compression: none
2026-02-11T16:00:00.015 [DEBUG] [Thread-131742] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:00:00.071 [DEBUG] [Thread-131742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:00:00.072 [DEBUG] [Thread-131742] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:00:00.072 [DEBUG] [Thread-131742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:00:00.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:00:00.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:00:00.128 [DEBUG] [Thread-131742] [transport.py] [_log()] userauth is OK
2026-02-11T16:00:00.128 [DEBUG] [Thread-131742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:00:00.128 [DEBUG] [Thread-131742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:00:00.128 [DEBUG] [Thread-131742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:00:00.128 [DEBUG] [Thread-131742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:00:00.148 [INFO] [Thread-131742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:00:00.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:00:00.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:00:01.033 [DEBUG] [Thread-131742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:00:01.033 [DEBUG] [Thread-131742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:00:01.081 [DEBUG] [Thread-131742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:00:01.081 [DEBUG] [Thread-131742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:00:01.090 [DEBUG] [Thread-131742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:00:01.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:00:01.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:00:01.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:00:01.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:00:01.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:00:01.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:00:01.126 [DEBUG] [Thread-131742] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:00:02.633 [DEBUG] [Thread-131744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:00:17.684 [DEBUG] [Thread-131745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:00:23.704 [DEBUG] [Thread-131746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:00:31.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:00:31.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:00: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
2026-02-11T16:00:32.716 [DEBUG] [Thread-131747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:00:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 0, 19), 18.01, 31.8, 0.0, 20.87, 25.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:00:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:00:19
2026-02-11T16:00:33.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:00:34.014 [DEBUG] [Thread-131748] [transport.py] [_log()] starting thread (client mode): 0xa57712d0
2026-02-11T16:00:34.014 [DEBUG] [Thread-131748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:00:34.034 [DEBUG] [Thread-131748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:00:34.034 [INFO] [Thread-131748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:00:34.037 [DEBUG] [Thread-131748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:00:34.037 [DEBUG] [Thread-131748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] client lang: <none>
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] server lang: <none>
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] kex follows: False
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:00:34.038 [DEBUG] [Thread-131748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:00:34.039 [DEBUG] [Thread-131748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:00:34.039 [DEBUG] [Thread-131748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:00:34.039 [DEBUG] [Thread-131748] [transport.py] [_log()] Compression: none
2026-02-11T16:00:34.039 [DEBUG] [Thread-131748] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:00:34.058 [DEBUG] [Thread-131748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:00:34.059 [DEBUG] [Thread-131748] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:00:34.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:00:34.060 [DEBUG] [Thread-131748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:00:34.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:00:34.062 [DEBUG] [Thread-131748] [transport.py] [_log()] userauth is OK
2026-02-11T16:00:34.062 [DEBUG] [Thread-131748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:00:34.063 [DEBUG] [Thread-131748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:00:34.063 [DEBUG] [Thread-131748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:00:34.063 [DEBUG] [Thread-131748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:00:34.097 [INFO] [Thread-131748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:00:34.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:00:34.728 [DEBUG] [Thread-131748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:00:34.728 [DEBUG] [Thread-131748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:00:34.728 [DEBUG] [Thread-131748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:00:34.770 [DEBUG] [Thread-131748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:00:34.770 [DEBUG] [Thread-131748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:00:34.773 [DEBUG] [Thread-131748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:00:34.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:00:34.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:00:34.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:00:34.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:00:34.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:00:34.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:00:34.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:00:34.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:00:34.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:00:34.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.583475 -999.00  +26.00  19.76     37  +10.50 1 2 1 1 1   888    0 15.75 36.61 ----- 28.1 19.8 319.0 31.0 31.5 -17.0 31.0 -15.8 31.8 -17.1 32.5 -17.5
2026-02-11T16:00:34.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:00:34.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:00:34.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.583475
2026-02-11T16:00:34.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:00:34.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:00:34.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:00:34.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:00:34.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:00:34.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:00:19', tmtdew=18.01, humidity=31.8, cloud=0.0, wind=20.87, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:00:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:00:34.797 [DEBUG] [Thread-131748] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:00:34.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:00:34.892 [DEBUG] [Thread-131751] [transport.py] [_log()] starting thread (client mode): 0xa2d6c0d0
2026-02-11T16:00:34.892 [DEBUG] [Thread-131751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:00:34.907 [DEBUG] [Thread-131751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:00:34.907 [INFO] [Thread-131751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:00:34.915 [DEBUG] [Thread-131751] [transport.py] [_log()] client lang: <none>
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] server lang: <none>
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] kex follows: False
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] Compression: none
2026-02-11T16:00:34.916 [DEBUG] [Thread-131751] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:00:34.972 [DEBUG] [Thread-131751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:00:34.973 [DEBUG] [Thread-131751] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:00:34.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:00:34.974 [DEBUG] [Thread-131751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:00:34.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:00:35.028 [DEBUG] [Thread-131751] [transport.py] [_log()] userauth is OK
2026-02-11T16:00:35.029 [DEBUG] [Thread-131751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:00:35.029 [DEBUG] [Thread-131751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:00:35.029 [DEBUG] [Thread-131751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:00:35.029 [DEBUG] [Thread-131751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:00:35.048 [INFO] [Thread-131751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:00:35.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:00:35.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:00:35.869 [DEBUG] [Thread-131751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:00:35.869 [DEBUG] [Thread-131751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:00:35.917 [DEBUG] [Thread-131751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:00:35.918 [DEBUG] [Thread-131751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:00:35.927 [DEBUG] [Thread-131751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:00:35.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:00:35.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')
2026-02-11T16:00:35.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:00:35.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:00:35.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:00:35.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:00:35.965 [DEBUG] [Thread-131751] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:00:38.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:00:38.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:00:47.753 [DEBUG] [Thread-131753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:01:02.806 [DEBUG] [Thread-131754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:01:05.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:01:05.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:01:05.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:01:07.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 0, 54), 17.8, 32.12, 0.0, 22.92, 25.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:01:07.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:00:54
2026-02-11T16:01:08.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:01:08.407 [DEBUG] [Thread-131755] [transport.py] [_log()] starting thread (client mode): 0xa2d6dd20
2026-02-11T16:01:08.407 [DEBUG] [Thread-131755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:01:08.426 [DEBUG] [Thread-131755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:01:08.426 [INFO] [Thread-131755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:01:08.429 [DEBUG] [Thread-131755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] client lang: <none>
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] server lang: <none>
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] kex follows: False
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:01:08.430 [DEBUG] [Thread-131755] [transport.py] [_log()] Compression: none
2026-02-11T16:01:08.431 [DEBUG] [Thread-131755] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:01:08.448 [DEBUG] [Thread-131755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:01:08.449 [DEBUG] [Thread-131755] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:01:08.449 [DEBUG] [Thread-131755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:01:08.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:01:08.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:01:08.451 [DEBUG] [Thread-131755] [transport.py] [_log()] userauth is OK
2026-02-11T16:01:08.451 [DEBUG] [Thread-131755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:01:08.452 [DEBUG] [Thread-131755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:01:08.452 [DEBUG] [Thread-131755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:01:08.452 [DEBUG] [Thread-131755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:01:08.469 [INFO] [Thread-131755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:01:08.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:01:09.054 [DEBUG] [Thread-131755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:01:09.055 [DEBUG] [Thread-131755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:01:09.055 [DEBUG] [Thread-131755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:01:09.095 [DEBUG] [Thread-131755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:01:09.095 [DEBUG] [Thread-131755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:01:09.099 [DEBUG] [Thread-131755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:01:09.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:01:09.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:01:09.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:01:09.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:01:09.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:01:09.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:01:09.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:01:09.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:01:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:01:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.583823 -999.00  +25.30  24.53     38  +10.10 1 2 1 1 1   888    0 15.72 39.23 ----- 24.9 24.5 302.4 34.1 31.3 -19.0 31.1 -16.2 31.5 -19.5 32.4 -17.2
2026-02-11T16:01:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:01:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:01:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.583823
2026-02-11T16:01:09.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:01:09.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:01:09.124 [DEBUG] [Thread-131755] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:01:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:01:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:01:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:01:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:00:54', tmtdew=17.8, humidity=32.12, cloud=0.0, wind=22.92, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:00:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:01:09.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:01:09.220 [DEBUG] [Thread-131758] [transport.py] [_log()] starting thread (client mode): 0xa2d573d0
2026-02-11T16:01:09.220 [DEBUG] [Thread-131758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:01:09.235 [DEBUG] [Thread-131758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:01:09.235 [INFO] [Thread-131758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:01:09.243 [DEBUG] [Thread-131758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] client lang: <none>
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] server lang: <none>
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] kex follows: False
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:01:09.244 [DEBUG] [Thread-131758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:01:09.245 [DEBUG] [Thread-131758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:01:09.245 [DEBUG] [Thread-131758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:01:09.245 [DEBUG] [Thread-131758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:01:09.245 [DEBUG] [Thread-131758] [transport.py] [_log()] Compression: none
2026-02-11T16:01:09.245 [DEBUG] [Thread-131758] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:01:09.303 [DEBUG] [Thread-131758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:01:09.304 [DEBUG] [Thread-131758] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:01:09.304 [DEBUG] [Thread-131758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:01:09.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:01:09.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:01:09.361 [DEBUG] [Thread-131758] [transport.py] [_log()] userauth is OK
2026-02-11T16:01:09.361 [DEBUG] [Thread-131758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:01:09.361 [DEBUG] [Thread-131758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:01:09.361 [DEBUG] [Thread-131758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:01:09.361 [DEBUG] [Thread-131758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:01:09.380 [INFO] [Thread-131758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:01:09.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:01:09.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:01:10.235 [DEBUG] [Thread-131758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:01:10.236 [DEBUG] [Thread-131758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:01:10.283 [DEBUG] [Thread-131758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:01:10.284 [DEBUG] [Thread-131758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:01:10.293 [DEBUG] [Thread-131758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:01:10.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:01:10.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:01:10.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:01:10.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:01:10.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:01:10.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:01:10.330 [DEBUG] [Thread-131758] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:01:17.841 [DEBUG] [Thread-131760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:01:23.737 [DEBUG] [Thread-131761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:01:32.890 [DEBUG] [Thread-131762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:01:38.336 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:01:38.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:01:40.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:01:40.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:01:40.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:01:42.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 1, 29), 17.8, 32.13, 0.0, 23.56, 25.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:01:42.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:01:29
2026-02-11T16:01:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:01:42.699 [DEBUG] [Thread-131763] [transport.py] [_log()] starting thread (client mode): 0xa2d575b0
2026-02-11T16:01:42.699 [DEBUG] [Thread-131763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:01:42.719 [DEBUG] [Thread-131763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:01:42.719 [INFO] [Thread-131763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:01:42.723 [DEBUG] [Thread-131763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] client lang: <none>
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] server lang: <none>
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] kex follows: False
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] Compression: none
2026-02-11T16:01:42.724 [DEBUG] [Thread-131763] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:01:42.739 [DEBUG] [Thread-131763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:01:42.739 [DEBUG] [Thread-131763] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:01:42.739 [DEBUG] [Thread-131763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:01:42.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:01:42.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:01:42.741 [DEBUG] [Thread-131763] [transport.py] [_log()] userauth is OK
2026-02-11T16:01:42.741 [DEBUG] [Thread-131763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:01:42.741 [DEBUG] [Thread-131763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:01:42.742 [DEBUG] [Thread-131763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:01:42.742 [DEBUG] [Thread-131763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:01:42.760 [INFO] [Thread-131763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:01:42.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:01:43.322 [DEBUG] [Thread-131763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:01:43.322 [DEBUG] [Thread-131763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:01:43.323 [DEBUG] [Thread-131763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:01:43.363 [DEBUG] [Thread-131763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:01:43.363 [DEBUG] [Thread-131763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:01:43.365 [DEBUG] [Thread-131763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:01:43.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:01:43.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:01:43.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:01:43.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:01:43.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:01:43.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:01:43.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:01:43.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:01:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:01:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.584170 -999.00  +25.50  22.38     38  +10.20 1 2 1 1 1   888    0 15.76 37.98 ----- 22.9 22.4 286.4 33.6 31.4 -18.7 30.9 -15.6 31.6 -18.4 32.4 -18.2
2026-02-11T16:01:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:01:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:01:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.584170
2026-02-11T16:01:43.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:01:43.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:01:43.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:01:43.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:01:43.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:01:43.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:01:29', tmtdew=17.8, humidity=32.13, cloud=0.0, wind=23.56, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:01:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:01:43.389 [DEBUG] [Thread-131763] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:01:43.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:01:43.487 [DEBUG] [Thread-131766] [transport.py] [_log()] starting thread (client mode): 0xa2d56410
2026-02-11T16:01:43.488 [DEBUG] [Thread-131766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:01:43.502 [DEBUG] [Thread-131766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:01:43.503 [INFO] [Thread-131766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:01:43.510 [DEBUG] [Thread-131766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:01:43.510 [DEBUG] [Thread-131766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:01:43.510 [DEBUG] [Thread-131766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] client lang: <none>
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] server lang: <none>
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] kex follows: False
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] Compression: none
2026-02-11T16:01:43.511 [DEBUG] [Thread-131766] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:01:43.569 [DEBUG] [Thread-131766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:01:43.569 [DEBUG] [Thread-131766] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:01:43.570 [DEBUG] [Thread-131766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:01:43.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:01:43.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:01:43.625 [DEBUG] [Thread-131766] [transport.py] [_log()] userauth is OK
2026-02-11T16:01:43.625 [DEBUG] [Thread-131766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:01:43.625 [DEBUG] [Thread-131766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:01:43.625 [DEBUG] [Thread-131766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:01:43.625 [DEBUG] [Thread-131766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:01:43.644 [INFO] [Thread-131766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:01:43.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:01:43.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:01:44.513 [DEBUG] [Thread-131766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:01:44.514 [DEBUG] [Thread-131766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:01:44.562 [DEBUG] [Thread-131766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:01:44.562 [DEBUG] [Thread-131766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:01:44.571 [DEBUG] [Thread-131766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:01:44.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:01:44.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:01:44.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:01:44.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:01:44.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:01:44.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:01:44.611 [DEBUG] [Thread-131766] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:01:47.924 [DEBUG] [Thread-131768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:02.986 [DEBUG] [Thread-131769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:14.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:02:14.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:02:14.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:02:16.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 2, 4), 17.95, 31.85, 0.0, 28.95, 25.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:02:16.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:02:04
2026-02-11T16:02:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:02:17.207 [DEBUG] [Thread-131770] [transport.py] [_log()] starting thread (client mode): 0xa2db5d80
2026-02-11T16:02:17.207 [DEBUG] [Thread-131770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:02:17.227 [DEBUG] [Thread-131770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:02:17.228 [INFO] [Thread-131770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:02:17.231 [DEBUG] [Thread-131770] [transport.py] [_log()] client lang: <none>
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] server lang: <none>
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] kex follows: False
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] Compression: none
2026-02-11T16:02:17.232 [DEBUG] [Thread-131770] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:02:17.251 [DEBUG] [Thread-131770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:02:17.252 [DEBUG] [Thread-131770] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:02:17.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:02:17.253 [DEBUG] [Thread-131770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:02:17.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:02:17.293 [DEBUG] [Thread-131770] [transport.py] [_log()] userauth is OK
2026-02-11T16:02:17.293 [DEBUG] [Thread-131770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:02:17.293 [DEBUG] [Thread-131770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:02:17.293 [DEBUG] [Thread-131770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:02:17.293 [DEBUG] [Thread-131770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:02:17.330 [INFO] [Thread-131770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:02:17.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:02:17.987 [DEBUG] [Thread-131770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:02:17.987 [DEBUG] [Thread-131770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:02:17.988 [DEBUG] [Thread-131770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:02:18.024 [DEBUG] [Thread-131772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:18.029 [DEBUG] [Thread-131770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:02:18.029 [DEBUG] [Thread-131770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:02:18.032 [DEBUG] [Thread-131770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:02:18.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:02:18.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:02:18.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:02:18.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:02:18.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:02:18.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:02:18.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:02:18.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:02:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:02:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.584517 -999.00  +25.80  17.76     37  +10.30 1 2 1 1 1   888    0 15.94 40.53 ----- 22.0 17.8 303.7 25.9 31.4 -17.9 31.0 -16.7 31.6 -14.9 32.5 -17.8
2026-02-11T16:02:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:02:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:02:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.584517
2026-02-11T16:02:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:02:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:02:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:02:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:02:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:02:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:02:04', tmtdew=17.95, humidity=31.85, cloud=0.0, wind=28.95, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:01:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:02:18.056 [DEBUG] [Thread-131770] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:02:18.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:02:18.150 [DEBUG] [Thread-131774] [transport.py] [_log()] starting thread (client mode): 0x9eb04a60
2026-02-11T16:02:18.150 [DEBUG] [Thread-131774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:02:18.168 [DEBUG] [Thread-131774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:02:18.169 [INFO] [Thread-131774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] client lang: <none>
2026-02-11T16:02:18.176 [DEBUG] [Thread-131774] [transport.py] [_log()] server lang: <none>
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] kex follows: False
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] Compression: none
2026-02-11T16:02:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:02:18.239 [DEBUG] [Thread-131774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:02:18.240 [DEBUG] [Thread-131774] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:02:18.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:02:18.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:02:18.242 [DEBUG] [Thread-131774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:02:18.300 [DEBUG] [Thread-131774] [transport.py] [_log()] userauth is OK
2026-02-11T16:02:18.300 [DEBUG] [Thread-131774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:02:18.301 [DEBUG] [Thread-131774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:02:18.301 [DEBUG] [Thread-131774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:02:18.301 [DEBUG] [Thread-131774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:02:18.319 [INFO] [Thread-131774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:02:18.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:02:18.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:02:19.123 [DEBUG] [Thread-131774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:02:19.123 [DEBUG] [Thread-131774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:02:19.171 [DEBUG] [Thread-131774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:02:19.172 [DEBUG] [Thread-131774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:02:19.181 [DEBUG] [Thread-131774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:02:19.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:02:19.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')
2026-02-11T16:02:19.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:02:19.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:02:19.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:02:19.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:02:19.217 [DEBUG] [Thread-131774] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:02:23.770 [DEBUG] [Thread-131776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:33.060 [DEBUG] [Thread-131777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:38.478 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:38.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:48.107 [DEBUG] [Thread-131778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:02:49.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:02:49.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:02:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:02:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 2, 41), 18.65, 30.65, 0.0, 36.77, 26.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:02:51.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:02:41
2026-02-11T16:02:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:02:51.732 [DEBUG] [Thread-131779] [transport.py] [_log()] starting thread (client mode): 0xa2db7e80
2026-02-11T16:02:51.733 [DEBUG] [Thread-131779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:02:51.753 [DEBUG] [Thread-131779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:02:51.753 [INFO] [Thread-131779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:02:51.756 [DEBUG] [Thread-131779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:02:51.756 [DEBUG] [Thread-131779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:02:51.756 [DEBUG] [Thread-131779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:02:51.756 [DEBUG] [Thread-131779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:51.756 [DEBUG] [Thread-131779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:51.756 [DEBUG] [Thread-131779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:51.756 [DEBUG] [Thread-131779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] client lang: <none>
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] server lang: <none>
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] kex follows: False
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] Compression: none
2026-02-11T16:02:51.757 [DEBUG] [Thread-131779] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:02:51.775 [DEBUG] [Thread-131779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:02:51.776 [DEBUG] [Thread-131779] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:02:51.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:02:51.777 [DEBUG] [Thread-131779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:02:51.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:02:51.779 [DEBUG] [Thread-131779] [transport.py] [_log()] userauth is OK
2026-02-11T16:02:51.779 [DEBUG] [Thread-131779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:02:51.779 [DEBUG] [Thread-131779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:02:51.780 [DEBUG] [Thread-131779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:02:51.780 [DEBUG] [Thread-131779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:02:51.804 [INFO] [Thread-131779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:02:51.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:02:52.414 [DEBUG] [Thread-131779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:02:52.414 [DEBUG] [Thread-131779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:02:52.415 [DEBUG] [Thread-131779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:02:52.455 [DEBUG] [Thread-131779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:02:52.456 [DEBUG] [Thread-131779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:02:52.459 [DEBUG] [Thread-131779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:02:52.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:02:52.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:02:52.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:02:52.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:02:52.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:02:52.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:02:52.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:02:52.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:02:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:02:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.584864 -999.00  +26.30  27.86     36  +10.30 1 2 1 1 1   888    0 15.94 43.02 ----- 29.4 27.9 305.8 36.1 31.4 -18.8 31.1 -15.9 31.7 -17.0 32.5 -19.8
2026-02-11T16:02:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:02:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:02:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.584864
2026-02-11T16:02:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:02:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:02:52.483 [DEBUG] [Thread-131779] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:02:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:02:52.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:02:52.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:02:52.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:02:41', tmtdew=18.65, humidity=30.65, cloud=0.0, wind=36.77, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:02:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:02:52.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:02:52.583 [DEBUG] [Thread-131782] [transport.py] [_log()] starting thread (client mode): 0xa2d54040
2026-02-11T16:02:52.583 [DEBUG] [Thread-131782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:02:52.598 [DEBUG] [Thread-131782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:02:52.598 [INFO] [Thread-131782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] client lang: <none>
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] server lang: <none>
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] kex follows: False
2026-02-11T16:02:52.606 [DEBUG] [Thread-131782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:02:52.607 [DEBUG] [Thread-131782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:02:52.607 [DEBUG] [Thread-131782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:02:52.607 [DEBUG] [Thread-131782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:02:52.607 [DEBUG] [Thread-131782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:02:52.607 [DEBUG] [Thread-131782] [transport.py] [_log()] Compression: none
2026-02-11T16:02:52.607 [DEBUG] [Thread-131782] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:02:52.666 [DEBUG] [Thread-131782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:02:52.667 [DEBUG] [Thread-131782] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:02:52.667 [DEBUG] [Thread-131782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:02:52.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:02:52.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:02:52.726 [DEBUG] [Thread-131782] [transport.py] [_log()] userauth is OK
2026-02-11T16:02:52.727 [DEBUG] [Thread-131782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:02:52.727 [DEBUG] [Thread-131782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:02:52.727 [DEBUG] [Thread-131782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:02:52.727 [DEBUG] [Thread-131782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:02:52.748 [INFO] [Thread-131782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:02:52.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:02:52.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:02:53.568 [DEBUG] [Thread-131782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:02:53.568 [DEBUG] [Thread-131782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:02:53.619 [DEBUG] [Thread-131782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:02:53.620 [DEBUG] [Thread-131782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:02:53.630 [DEBUG] [Thread-131782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:02:53.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:02:53.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:02:53.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:02:53.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:02:53.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:02:53.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:02:53.675 [DEBUG] [Thread-131782] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:03:03.140 [DEBUG] [Thread-131784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:03:18.191 [DEBUG] [Thread-131785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:03:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:03:23.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:03:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:03:23.816 [DEBUG] [Thread-131786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:03:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 3, 17), 18.12, 31.76, 0.0, 32.02, 25.83, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:03:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:03:17
2026-02-11T16:03:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:03:26.740 [DEBUG] [Thread-131787] [transport.py] [_log()] starting thread (client mode): 0xa2d55510
2026-02-11T16:03:26.740 [DEBUG] [Thread-131787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:03:26.758 [DEBUG] [Thread-131787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:03:26.758 [INFO] [Thread-131787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:03:26.761 [DEBUG] [Thread-131787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] client lang: <none>
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] server lang: <none>
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] kex follows: False
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:03:26.762 [DEBUG] [Thread-131787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:03:26.763 [DEBUG] [Thread-131787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:03:26.763 [DEBUG] [Thread-131787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:03:26.763 [DEBUG] [Thread-131787] [transport.py] [_log()] Compression: none
2026-02-11T16:03:26.763 [DEBUG] [Thread-131787] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:03:26.782 [DEBUG] [Thread-131787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:03:26.783 [DEBUG] [Thread-131787] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:03:26.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:03:26.785 [DEBUG] [Thread-131787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:03:26.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:03:26.787 [DEBUG] [Thread-131787] [transport.py] [_log()] userauth is OK
2026-02-11T16:03:26.787 [DEBUG] [Thread-131787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:03:26.788 [DEBUG] [Thread-131787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:03:26.788 [DEBUG] [Thread-131787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:03:26.788 [DEBUG] [Thread-131787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:03:26.811 [INFO] [Thread-131787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:03:26.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:03:27.617 [DEBUG] [Thread-131787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:03:27.617 [DEBUG] [Thread-131787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:03:27.618 [DEBUG] [Thread-131787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:03:27.658 [DEBUG] [Thread-131787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:03:27.659 [DEBUG] [Thread-131787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:03:27.662 [DEBUG] [Thread-131787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:03:27.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:03:27.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:03:27.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:03:27.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:03:27.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:03:27.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:03:27.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:03:27.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:03:27.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:03:27.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.585211 -999.00  +26.40  18.78     36  +10.30 1 2 1 1 1   888    0 16.37 47.96 ----- 31.0 18.8 302.4 34.2 31.3 -19.2 31.1 -17.2 31.5 -20.7 32.2 -19.9
2026-02-11T16:03:27.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:03:27.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:03:27.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.585211
2026-02-11T16:03:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:03:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:03:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:03:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:03:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:03:27.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:03:17', tmtdew=18.12, humidity=31.76, cloud=0.0, wind=32.02, temperature=25.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:02:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:03:27.688 [DEBUG] [Thread-131787] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:03:27.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:03:27.784 [DEBUG] [Thread-131790] [transport.py] [_log()] starting thread (client mode): 0xa81d7ac0
2026-02-11T16:03:27.784 [DEBUG] [Thread-131790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:03:27.801 [DEBUG] [Thread-131790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:03:27.801 [INFO] [Thread-131790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:03:27.809 [DEBUG] [Thread-131790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:03:27.809 [DEBUG] [Thread-131790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] client lang: <none>
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] server lang: <none>
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] kex follows: False
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] Compression: none
2026-02-11T16:03:27.810 [DEBUG] [Thread-131790] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:03:27.867 [DEBUG] [Thread-131790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:03:27.868 [DEBUG] [Thread-131790] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:03:27.869 [DEBUG] [Thread-131790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:03:27.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:03:27.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:03:27.923 [DEBUG] [Thread-131790] [transport.py] [_log()] userauth is OK
2026-02-11T16:03:27.923 [DEBUG] [Thread-131790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:03:27.924 [DEBUG] [Thread-131790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:03:27.924 [DEBUG] [Thread-131790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:03:27.924 [DEBUG] [Thread-131790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:03:27.943 [INFO] [Thread-131790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:03:27.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:03:27.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:03:28.772 [DEBUG] [Thread-131790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:03:28.772 [DEBUG] [Thread-131790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:03:28.821 [DEBUG] [Thread-131790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:03:28.821 [DEBUG] [Thread-131790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:03:28.830 [DEBUG] [Thread-131790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:03:28.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:03:28.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:03:28.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:03:28.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:03:28.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:03:28.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:03:28.863 [DEBUG] [Thread-131790] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:03:33.226 [DEBUG] [Thread-131792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:03:38.617 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:03:38.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:03:48.276 [DEBUG] [Thread-131793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:03:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:03:58.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:03:58.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:04:00.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 3, 53), 18.6, 30.76, 0.0, 28.8, 26.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:04:00.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:03:53
2026-02-11T16:04:01.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:04:01.477 [DEBUG] [Thread-131794] [transport.py] [_log()] starting thread (client mode): 0xa2d574c0
2026-02-11T16:04:01.477 [DEBUG] [Thread-131794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:04:01.497 [DEBUG] [Thread-131794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:04:01.497 [INFO] [Thread-131794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:04:01.498 [DEBUG] [Thread-131794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:04:01.498 [DEBUG] [Thread-131794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] client lang: <none>
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] server lang: <none>
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] kex follows: False
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] Compression: none
2026-02-11T16:04:01.499 [DEBUG] [Thread-131794] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:04:01.512 [DEBUG] [Thread-131794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:04:01.513 [DEBUG] [Thread-131794] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:04:01.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:04:01.514 [DEBUG] [Thread-131794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:04:01.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:04:01.516 [DEBUG] [Thread-131794] [transport.py] [_log()] userauth is OK
2026-02-11T16:04:01.516 [DEBUG] [Thread-131794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:04:01.516 [DEBUG] [Thread-131794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:04:01.516 [DEBUG] [Thread-131794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:04:01.516 [DEBUG] [Thread-131794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:04:01.542 [INFO] [Thread-131794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:04:01.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:04:02.171 [DEBUG] [Thread-131794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:04:02.172 [DEBUG] [Thread-131794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:04:02.172 [DEBUG] [Thread-131794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:04:02.213 [DEBUG] [Thread-131794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:04:02.213 [DEBUG] [Thread-131794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:04:02.216 [DEBUG] [Thread-131794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:04:02.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:04:02.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:04:02.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:04:02.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:04:02.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:04:02.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:04:02.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:04:02.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:04:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:04:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.585906 -999.00  +25.30  31.77     38  +10.10 1 2 2 1 1   888    0 16.48 53.34 ----- 26.9 31.8 308.6 38.0 31.3 -19.7 31.0 -18.5 31.5 -18.4 32.2 -19.3
2026-02-11T16:04:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:04:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:04:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.585906
2026-02-11T16:04:02.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:04:02.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:04:02.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:04:02.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:04:02.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:04:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:03:53', tmtdew=18.6, humidity=30.76, cloud=0.0, wind=28.8, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:03:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:04:02.245 [DEBUG] [Thread-131794] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:04:02.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:04:02.350 [DEBUG] [Thread-131797] [transport.py] [_log()] starting thread (client mode): 0xa2db68c0
2026-02-11T16:04:02.350 [DEBUG] [Thread-131797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:04:02.365 [DEBUG] [Thread-131797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:04:02.365 [INFO] [Thread-131797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] client lang: <none>
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] server lang: <none>
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] kex follows: False
2026-02-11T16:04:02.373 [DEBUG] [Thread-131797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:04:02.374 [DEBUG] [Thread-131797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:04:02.374 [DEBUG] [Thread-131797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:04:02.374 [DEBUG] [Thread-131797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:04:02.374 [DEBUG] [Thread-131797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:04:02.374 [DEBUG] [Thread-131797] [transport.py] [_log()] Compression: none
2026-02-11T16:04:02.374 [DEBUG] [Thread-131797] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:04:02.435 [DEBUG] [Thread-131797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:04:02.436 [DEBUG] [Thread-131797] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:04:02.436 [DEBUG] [Thread-131797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:04:02.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:04:02.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:04:02.495 [DEBUG] [Thread-131797] [transport.py] [_log()] userauth is OK
2026-02-11T16:04:02.495 [DEBUG] [Thread-131797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:04:02.496 [DEBUG] [Thread-131797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:04:02.496 [DEBUG] [Thread-131797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:04:02.496 [DEBUG] [Thread-131797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:04:02.521 [INFO] [Thread-131797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:04:02.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:04:02.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:04:03.314 [DEBUG] [Thread-131799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:04:03.325 [DEBUG] [Thread-131797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:04:03.325 [DEBUG] [Thread-131797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:04:03.373 [DEBUG] [Thread-131797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:04:03.373 [DEBUG] [Thread-131797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:04:03.382 [DEBUG] [Thread-131797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:04:03.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:04:03.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:04:03.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:04:03.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:04:03.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:04:03.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:04:03.417 [DEBUG] [Thread-131797] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:04:18.368 [DEBUG] [Thread-131800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:04:23.849 [DEBUG] [Thread-131801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:04:33.403 [DEBUG] [Thread-131802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:04:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:04:33.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:04:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:04:35.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 3, 53), 18.6, 30.76, 0.0, 28.8, 26.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:04:35.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:03:53
2026-02-11T16:04:35.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:04:35.939 [DEBUG] [Thread-131803] [transport.py] [_log()] starting thread (client mode): 0xa2d6dd20
2026-02-11T16:04:35.940 [DEBUG] [Thread-131803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:04:35.953 [DEBUG] [Thread-131803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:04:35.954 [INFO] [Thread-131803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] client lang: <none>
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] server lang: <none>
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] kex follows: False
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] Compression: none
2026-02-11T16:04:35.955 [DEBUG] [Thread-131803] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:04:35.963 [DEBUG] [Thread-131803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:04:35.964 [DEBUG] [Thread-131803] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:04:35.964 [DEBUG] [Thread-131803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:04:35.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:04:35.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:04:35.965 [DEBUG] [Thread-131803] [transport.py] [_log()] userauth is OK
2026-02-11T16:04:35.965 [DEBUG] [Thread-131803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:04:35.965 [DEBUG] [Thread-131803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:04:35.965 [DEBUG] [Thread-131803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:04:35.966 [DEBUG] [Thread-131803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:04:35.977 [INFO] [Thread-131803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:04:35.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:04:36.615 [DEBUG] [Thread-131803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:04:36.615 [DEBUG] [Thread-131803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:04:36.616 [DEBUG] [Thread-131803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:04:36.656 [DEBUG] [Thread-131803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:04:36.657 [DEBUG] [Thread-131803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:04:36.660 [DEBUG] [Thread-131803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:04:36.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:04:36.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:04:36.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:04:36.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:04:36.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:04:36.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:04:36.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:04:36.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:04:36.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:04:36.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.586253 -999.00  +25.20  31.20     38   +9.90 1 2 2 1 1   888    0 16.68 58.15 ----- 32.7 31.2 308.4 39.9 31.2 -19.8 30.9 -17.1 31.6 -16.8 32.2 -19.7
2026-02-11T16:04:36.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:04:36.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:04:36.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.586253
2026-02-11T16:04:36.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:04:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:04:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:04:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:04:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:04:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:03:53', tmtdew=18.6, humidity=30.76, cloud=0.0, wind=28.8, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:04:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:04:36.687 [DEBUG] [Thread-131803] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:04:36.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:04:36.794 [DEBUG] [Thread-131806] [transport.py] [_log()] starting thread (client mode): 0x9eb048e0
2026-02-11T16:04:36.794 [DEBUG] [Thread-131806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:04:36.808 [DEBUG] [Thread-131806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:04:36.808 [INFO] [Thread-131806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:04:36.816 [DEBUG] [Thread-131806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:04:36.816 [DEBUG] [Thread-131806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:04:36.816 [DEBUG] [Thread-131806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:04:36.816 [DEBUG] [Thread-131806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:36.816 [DEBUG] [Thread-131806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] client lang: <none>
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] server lang: <none>
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] kex follows: False
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:04:36.817 [DEBUG] [Thread-131806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:04:36.818 [DEBUG] [Thread-131806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:04:36.818 [DEBUG] [Thread-131806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:04:36.818 [DEBUG] [Thread-131806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:04:36.818 [DEBUG] [Thread-131806] [transport.py] [_log()] Compression: none
2026-02-11T16:04:36.818 [DEBUG] [Thread-131806] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:04:36.875 [DEBUG] [Thread-131806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:04:36.876 [DEBUG] [Thread-131806] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:04:36.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:04:36.878 [DEBUG] [Thread-131806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:04:36.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:04:36.935 [DEBUG] [Thread-131806] [transport.py] [_log()] userauth is OK
2026-02-11T16:04:36.936 [DEBUG] [Thread-131806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:04:36.936 [DEBUG] [Thread-131806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:04:36.936 [DEBUG] [Thread-131806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:04:36.936 [DEBUG] [Thread-131806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:04:36.955 [INFO] [Thread-131806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:04:36.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:04:36.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:04:37.793 [DEBUG] [Thread-131806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:04:37.793 [DEBUG] [Thread-131806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:04:37.842 [DEBUG] [Thread-131806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:04:37.842 [DEBUG] [Thread-131806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:04:37.851 [DEBUG] [Thread-131806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:04:37.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:04:37.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:04:37.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
2026-02-11T16:04:37.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:04:37.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:04:37.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:04:37.888 [DEBUG] [Thread-131806] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:04:38.758 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:04:38.759 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:04:48.441 [DEBUG] [Thread-131808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:03.489 [DEBUG] [Thread-131809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:07.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:05:07.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:05:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:05:10.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 4, 28), 18.59, 30.76, 0.0, 32.08, 26.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:05:10.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:04:28
2026-02-11T16:05:10.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:05:10.862 [DEBUG] [Thread-131810] [transport.py] [_log()] starting thread (client mode): 0xa2d55120
2026-02-11T16:05:10.862 [DEBUG] [Thread-131810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:05:10.882 [DEBUG] [Thread-131810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:05:10.882 [INFO] [Thread-131810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:05:10.885 [DEBUG] [Thread-131810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:05:10.885 [DEBUG] [Thread-131810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:05:10.885 [DEBUG] [Thread-131810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:05:10.885 [DEBUG] [Thread-131810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:10.885 [DEBUG] [Thread-131810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:10.885 [DEBUG] [Thread-131810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] client lang: <none>
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] server lang: <none>
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] kex follows: False
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] Compression: none
2026-02-11T16:05:10.886 [DEBUG] [Thread-131810] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:05:10.904 [DEBUG] [Thread-131810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:05:10.905 [DEBUG] [Thread-131810] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:05:10.906 [DEBUG] [Thread-131810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:05:10.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:05:10.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:05:10.908 [DEBUG] [Thread-131810] [transport.py] [_log()] userauth is OK
2026-02-11T16:05:10.909 [DEBUG] [Thread-131810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:05:10.909 [DEBUG] [Thread-131810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:05:10.909 [DEBUG] [Thread-131810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:05:10.909 [DEBUG] [Thread-131810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:05:10.931 [INFO] [Thread-131810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:05:10.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:05:15.518 [DEBUG] [Thread-131810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:05:15.518 [DEBUG] [Thread-131810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:05:15.519 [DEBUG] [Thread-131810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:05:15.559 [DEBUG] [Thread-131810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:05:15.560 [DEBUG] [Thread-131810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:05:15.563 [DEBUG] [Thread-131810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:05:15.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:05:15.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:05:15.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:05:15.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:05:15.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:05:15.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:05:15.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:05:15.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:05:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:05:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.586600 -999.00  +25.60  31.02     38  +10.20 1 2 2 1 1   888    0 16.90 61.92 ----- 42.2 31.0 299.0 40.5 31.1 -20.7 30.9 -17.9 31.4 -18.5 32.0 -20.2
2026-02-11T16:05:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:05:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:05:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.586600
2026-02-11T16:05:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:05:15.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:05:15.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:05:15.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:05:15.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:05:15.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:04:28', tmtdew=18.59, humidity=30.76, cloud=0.0, wind=32.08, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:04:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:05:15.640 [DEBUG] [Thread-131810] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:05:15.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:05:15.733 [DEBUG] [Thread-131813] [transport.py] [_log()] starting thread (client mode): 0xa2d6ef80
2026-02-11T16:05:15.734 [DEBUG] [Thread-131813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:05:15.749 [DEBUG] [Thread-131813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:05:15.749 [INFO] [Thread-131813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:05:15.756 [DEBUG] [Thread-131813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] client lang: <none>
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] server lang: <none>
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] kex follows: False
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] Compression: none
2026-02-11T16:05:15.757 [DEBUG] [Thread-131813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:05:15.817 [DEBUG] [Thread-131813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:05:15.817 [DEBUG] [Thread-131813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:05:15.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:05:15.819 [DEBUG] [Thread-131813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:05:15.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:05:15.877 [DEBUG] [Thread-131813] [transport.py] [_log()] userauth is OK
2026-02-11T16:05:15.878 [DEBUG] [Thread-131813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:05:15.878 [DEBUG] [Thread-131813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:05:15.878 [DEBUG] [Thread-131813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:05:15.878 [DEBUG] [Thread-131813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:05:15.901 [INFO] [Thread-131813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:05:15.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:05:15.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:05:16.732 [DEBUG] [Thread-131813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:05:16.732 [DEBUG] [Thread-131813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:05:16.780 [DEBUG] [Thread-131813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:05:16.781 [DEBUG] [Thread-131813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:05:16.790 [DEBUG] [Thread-131813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:05:16.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:05:16.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')
2026-02-11T16:05:16.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
2026-02-11T16:05:16.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:05:16.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:05:16.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:05:16.833 [DEBUG] [Thread-131813] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:05:18.528 [DEBUG] [Thread-131815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:23.883 [DEBUG] [Thread-131816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:33.578 [DEBUG] [Thread-131817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:38.900 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:38.901 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:05:46.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:05:46.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
2026-02-11T16:05:48.614 [DEBUG] [Thread-131818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:05:48.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 5, 40), 19.34, 29.42, 0.0, 27.24, 27.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:05:48.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:05:40
2026-02-11T16:05:49.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:05:49.232 [DEBUG] [Thread-131819] [transport.py] [_log()] starting thread (client mode): 0xa2db76d0
2026-02-11T16:05:49.232 [DEBUG] [Thread-131819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:05:49.252 [DEBUG] [Thread-131819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:05:49.252 [INFO] [Thread-131819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:05:49.255 [DEBUG] [Thread-131819] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] client lang: <none>
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] server lang: <none>
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] kex follows: False
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:05:49.256 [DEBUG] [Thread-131819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:05:49.257 [DEBUG] [Thread-131819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:05:49.257 [DEBUG] [Thread-131819] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:05:49.257 [DEBUG] [Thread-131819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:05:49.257 [DEBUG] [Thread-131819] [transport.py] [_log()] Compression: none
2026-02-11T16:05:49.257 [DEBUG] [Thread-131819] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:05:49.275 [DEBUG] [Thread-131819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:05:49.275 [DEBUG] [Thread-131819] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:05:49.276 [DEBUG] [Thread-131819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:05:49.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:05:49.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:05:49.278 [DEBUG] [Thread-131819] [transport.py] [_log()] userauth is OK
2026-02-11T16:05:49.278 [DEBUG] [Thread-131819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:05:49.278 [DEBUG] [Thread-131819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:05:49.278 [DEBUG] [Thread-131819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:05:49.278 [DEBUG] [Thread-131819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:05:49.300 [INFO] [Thread-131819] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:05:49.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:05:49.953 [DEBUG] [Thread-131819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:05:49.953 [DEBUG] [Thread-131819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:05:49.954 [DEBUG] [Thread-131819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:05:49.994 [DEBUG] [Thread-131819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:05:49.995 [DEBUG] [Thread-131819] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:05:49.998 [DEBUG] [Thread-131819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:05:50.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:05:50.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:05:50.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:05:50.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:05:50.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:05:50.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:05:50.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:05:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:05:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:05:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.586947 -999.00  +25.10  37.76     38   +9.90 1 2 2 1 1   888    0 16.66 61.03 ----- 34.1 37.8 288.4 42.3 31.0 -20.9 30.8 -18.2 31.5 -20.1 31.9 -20.1
2026-02-11T16:05:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:05:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:05:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.586947
2026-02-11T16:05:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:05:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:05:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:05:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:05:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:05:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:05:40', tmtdew=19.34, humidity=29.42, cloud=0.0, wind=27.24, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:05:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:05:50.025 [DEBUG] [Thread-131819] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:05:50.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:05:50.122 [DEBUG] [Thread-131822] [transport.py] [_log()] starting thread (client mode): 0x9eb07af0
2026-02-11T16:05:50.122 [DEBUG] [Thread-131822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:05:50.139 [DEBUG] [Thread-131822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:05:50.139 [INFO] [Thread-131822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:05:50.150 [DEBUG] [Thread-131822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] client lang: <none>
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] server lang: <none>
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] kex follows: False
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:05:50.151 [DEBUG] [Thread-131822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:05:50.152 [DEBUG] [Thread-131822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:05:50.152 [DEBUG] [Thread-131822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:05:50.152 [DEBUG] [Thread-131822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:05:50.152 [DEBUG] [Thread-131822] [transport.py] [_log()] Compression: none
2026-02-11T16:05:50.152 [DEBUG] [Thread-131822] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:05:50.208 [DEBUG] [Thread-131822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:05:50.208 [DEBUG] [Thread-131822] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:05:50.209 [DEBUG] [Thread-131822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:05:50.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:05:50.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:05:50.269 [DEBUG] [Thread-131822] [transport.py] [_log()] userauth is OK
2026-02-11T16:05:50.269 [DEBUG] [Thread-131822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:05:50.269 [DEBUG] [Thread-131822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:05:50.269 [DEBUG] [Thread-131822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:05:50.269 [DEBUG] [Thread-131822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:05:50.289 [INFO] [Thread-131822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:05:50.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:05:50.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:05:51.156 [DEBUG] [Thread-131822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:05:51.157 [DEBUG] [Thread-131822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:05:51.204 [DEBUG] [Thread-131822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:05:51.204 [DEBUG] [Thread-131822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:05:51.213 [DEBUG] [Thread-131822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:05:51.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:05:51.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:05:51.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:05:51.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:05:51.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:05:51.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:05:51.253 [DEBUG] [Thread-131822] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:06:03.653 [DEBUG] [Thread-131824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:06:18.707 [DEBUG] [Thread-131825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:06:21.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:06:21.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:06:21.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:06:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 5, 40), 19.34, 29.42, 0.0, 27.24, 27.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:06:23.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:05:40
2026-02-11T16:06:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:06:23.596 [DEBUG] [Thread-131826] [transport.py] [_log()] starting thread (client mode): 0xa57717e0
2026-02-11T16:06:23.596 [DEBUG] [Thread-131826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:06:23.616 [DEBUG] [Thread-131826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:06:23.616 [INFO] [Thread-131826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:06:23.619 [DEBUG] [Thread-131826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:06:23.619 [DEBUG] [Thread-131826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:06:23.619 [DEBUG] [Thread-131826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:06:23.619 [DEBUG] [Thread-131826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:23.619 [DEBUG] [Thread-131826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] client lang: <none>
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] server lang: <none>
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] kex follows: False
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:06:23.620 [DEBUG] [Thread-131826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:06:23.621 [DEBUG] [Thread-131826] [transport.py] [_log()] Compression: none
2026-02-11T16:06:23.621 [DEBUG] [Thread-131826] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:06:23.638 [DEBUG] [Thread-131826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:06:23.638 [DEBUG] [Thread-131826] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:06:23.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:06:23.639 [DEBUG] [Thread-131826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:06:23.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:06:23.642 [DEBUG] [Thread-131826] [transport.py] [_log()] userauth is OK
2026-02-11T16:06:23.642 [DEBUG] [Thread-131826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:06:23.642 [DEBUG] [Thread-131826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:06:23.642 [DEBUG] [Thread-131826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:06:23.643 [DEBUG] [Thread-131826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:06:23.668 [INFO] [Thread-131826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:06:23.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:06:23.916 [DEBUG] [Thread-131828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:06:24.299 [DEBUG] [Thread-131826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:06:24.299 [DEBUG] [Thread-131826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:06:24.299 [DEBUG] [Thread-131826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:06:24.339 [DEBUG] [Thread-131826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:06:24.340 [DEBUG] [Thread-131826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:06:24.343 [DEBUG] [Thread-131826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:06:24.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:06:24.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:06:24.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:06:24.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:06:24.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:06:24.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:06:24.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:06:24.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:06:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:06:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.587295 -999.00  +24.90  31.10     38  +10.00 1 2 2 1 1   888    0 16.69 59.48 ----- 28.9 31.1 280.7 36.6 30.7 -20.6 30.7 -17.8 30.7 -25.4 31.9 -20.1
2026-02-11T16:06:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:06:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:06:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.587295
2026-02-11T16:06:24.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:06:24.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:06:24.369 [DEBUG] [Thread-131826] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:06:24.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:06:24.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:06:24.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:06:24.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:05:40', tmtdew=19.34, humidity=29.42, cloud=0.0, wind=27.24, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:05:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:06:24.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:06:24.466 [DEBUG] [Thread-131830] [transport.py] [_log()] starting thread (client mode): 0xa81d70a0
2026-02-11T16:06:24.466 [DEBUG] [Thread-131830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:06:24.480 [DEBUG] [Thread-131830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:06:24.481 [INFO] [Thread-131830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:06:24.488 [DEBUG] [Thread-131830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:06:24.488 [DEBUG] [Thread-131830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:06:24.488 [DEBUG] [Thread-131830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:06:24.488 [DEBUG] [Thread-131830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] client lang: <none>
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] server lang: <none>
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] kex follows: False
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] Compression: none
2026-02-11T16:06:24.489 [DEBUG] [Thread-131830] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:06:24.552 [DEBUG] [Thread-131830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:06:24.553 [DEBUG] [Thread-131830] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:06:24.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:06:24.554 [DEBUG] [Thread-131830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:06:24.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:06:24.608 [DEBUG] [Thread-131830] [transport.py] [_log()] userauth is OK
2026-02-11T16:06:24.609 [DEBUG] [Thread-131830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:06:24.609 [DEBUG] [Thread-131830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:06:24.609 [DEBUG] [Thread-131830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:06:24.609 [DEBUG] [Thread-131830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:06:24.628 [INFO] [Thread-131830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:06:24.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:06:24.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:06:25.477 [DEBUG] [Thread-131830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:06:25.477 [DEBUG] [Thread-131830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:06:25.527 [DEBUG] [Thread-131830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:06:25.527 [DEBUG] [Thread-131830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:06:25.537 [DEBUG] [Thread-131830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:06:25.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:06:25.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:06:25.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:06:25.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:06:25.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:06:25.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:06:25.573 [DEBUG] [Thread-131830] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:06:33.743 [DEBUG] [Thread-131832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:06:39.044 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:06:39.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:06:48.793 [DEBUG] [Thread-131833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:06:55.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:06:55.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:06:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:06:57.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 6, 15), 18.84, 30.2, 0.0, 36.33, 26.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:06:57.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:06:15
2026-02-11T16:06:58.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:06:58.315 [DEBUG] [Thread-131834] [transport.py] [_log()] starting thread (client mode): 0xa57734c0
2026-02-11T16:06:58.315 [DEBUG] [Thread-131834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:06:58.335 [DEBUG] [Thread-131834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:06:58.335 [INFO] [Thread-131834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:06:58.338 [DEBUG] [Thread-131834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:06:58.338 [DEBUG] [Thread-131834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:06:58.338 [DEBUG] [Thread-131834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:06:58.338 [DEBUG] [Thread-131834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:58.338 [DEBUG] [Thread-131834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:58.338 [DEBUG] [Thread-131834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] client lang: <none>
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] server lang: <none>
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] kex follows: False
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] Compression: none
2026-02-11T16:06:58.339 [DEBUG] [Thread-131834] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:06:58.359 [DEBUG] [Thread-131834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:06:58.359 [DEBUG] [Thread-131834] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:06:58.360 [DEBUG] [Thread-131834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:06:58.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:06:58.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:06:58.362 [DEBUG] [Thread-131834] [transport.py] [_log()] userauth is OK
2026-02-11T16:06:58.363 [DEBUG] [Thread-131834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:06:58.363 [DEBUG] [Thread-131834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:06:58.363 [DEBUG] [Thread-131834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:06:58.363 [DEBUG] [Thread-131834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:06:58.382 [INFO] [Thread-131834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:06:58.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:06:59.027 [DEBUG] [Thread-131834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:06:59.027 [DEBUG] [Thread-131834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:06:59.027 [DEBUG] [Thread-131834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:06:59.069 [DEBUG] [Thread-131834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:06:59.069 [DEBUG] [Thread-131834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:06:59.071 [DEBUG] [Thread-131834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:06:59.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:06:59.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:06:59.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:06:59.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:06:59.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:06:59.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:06:59.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:06:59.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:06:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:06:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.587642 -999.00  +25.30  32.47     38  +10.00 1 2 2 1 1   888    0 16.71 61.02 ----- 35.0 32.5 291.0 45.0 30.7 -21.0 30.6 -18.2 30.8 -24.0 31.7 -20.9
2026-02-11T16:06:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:06:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:06:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.587642
2026-02-11T16:06:59.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:06:59.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:06:59.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:06:59.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:06:59.097 [DEBUG] [Thread-131834] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:06:59.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:06:59.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:06:15', tmtdew=18.84, humidity=30.2, cloud=0.0, wind=36.33, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:06:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:06:59.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:06:59.204 [DEBUG] [Thread-131837] [transport.py] [_log()] starting thread (client mode): 0xa2d54eb0
2026-02-11T16:06:59.204 [DEBUG] [Thread-131837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:06:59.219 [DEBUG] [Thread-131837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:06:59.219 [INFO] [Thread-131837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:06:59.227 [DEBUG] [Thread-131837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:06:59.227 [DEBUG] [Thread-131837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:06:59.227 [DEBUG] [Thread-131837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:06:59.227 [DEBUG] [Thread-131837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:59.227 [DEBUG] [Thread-131837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:06:59.227 [DEBUG] [Thread-131837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:59.227 [DEBUG] [Thread-131837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] client lang: <none>
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] server lang: <none>
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] kex follows: False
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] Compression: none
2026-02-11T16:06:59.228 [DEBUG] [Thread-131837] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:06:59.285 [DEBUG] [Thread-131837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:06:59.286 [DEBUG] [Thread-131837] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:06:59.286 [DEBUG] [Thread-131837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:06:59.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:06:59.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:06:59.341 [DEBUG] [Thread-131837] [transport.py] [_log()] userauth is OK
2026-02-11T16:06:59.342 [DEBUG] [Thread-131837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:06:59.342 [DEBUG] [Thread-131837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:06:59.342 [DEBUG] [Thread-131837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:06:59.342 [DEBUG] [Thread-131837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:06:59.361 [INFO] [Thread-131837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:06:59.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:06:59.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:07:00.177 [DEBUG] [Thread-131837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:07:00.177 [DEBUG] [Thread-131837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:07:00.226 [DEBUG] [Thread-131837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:07:00.226 [DEBUG] [Thread-131837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:07:00.234 [DEBUG] [Thread-131837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:07:00.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:07:00.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:07:00.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:07:00.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:07:00.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:07:00.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:07:00.266 [DEBUG] [Thread-131837] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:07:03.828 [DEBUG] [Thread-131839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:07:18.879 [DEBUG] [Thread-131840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:07:23.950 [DEBUG] [Thread-131841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:07:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:07:30.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:07:30.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:07:32.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 6, 51), 18.51, 30.78, 0.0, 33.4, 25.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:07:32.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:06:51
2026-02-11T16:07:32.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:07:32.820 [DEBUG] [Thread-131842] [transport.py] [_log()] starting thread (client mode): 0xa5773ca0
2026-02-11T16:07:32.820 [DEBUG] [Thread-131842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:07:32.839 [DEBUG] [Thread-131842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:07:32.839 [INFO] [Thread-131842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] client lang: <none>
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] server lang: <none>
2026-02-11T16:07:32.843 [DEBUG] [Thread-131842] [transport.py] [_log()] kex follows: False
2026-02-11T16:07:32.844 [DEBUG] [Thread-131842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:07:32.844 [DEBUG] [Thread-131842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:07:32.844 [DEBUG] [Thread-131842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:07:32.844 [DEBUG] [Thread-131842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:07:32.844 [DEBUG] [Thread-131842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:07:32.844 [DEBUG] [Thread-131842] [transport.py] [_log()] Compression: none
2026-02-11T16:07:32.844 [DEBUG] [Thread-131842] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:07:32.859 [DEBUG] [Thread-131842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:07:32.859 [DEBUG] [Thread-131842] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:07:32.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:07:32.860 [DEBUG] [Thread-131842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:07:32.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:07:32.861 [DEBUG] [Thread-131842] [transport.py] [_log()] userauth is OK
2026-02-11T16:07:32.861 [DEBUG] [Thread-131842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:07:32.861 [DEBUG] [Thread-131842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:07:32.862 [DEBUG] [Thread-131842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:07:32.862 [DEBUG] [Thread-131842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:07:32.875 [INFO] [Thread-131842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:07:32.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:07:33.504 [DEBUG] [Thread-131842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:07:33.504 [DEBUG] [Thread-131842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:07:33.504 [DEBUG] [Thread-131842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:07:33.545 [DEBUG] [Thread-131842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:07:33.546 [DEBUG] [Thread-131842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:07:33.549 [DEBUG] [Thread-131842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:07:33.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:07:33.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:07:33.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:07:33.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:07:33.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:07:33.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:07:33.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:07:33.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:07:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:07:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.587989 -999.00  +25.00  30.83     38   +9.90 1 2 2 1 1   888    0 16.72 56.41 ----- 28.2 30.8 303.2 38.5 30.7 -21.4 30.6 -18.6 30.8 -18.3 31.7 -19.9
2026-02-11T16:07:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:07:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:07:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.587989
2026-02-11T16:07:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:07:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:07:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:07:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:07:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:07:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:06:51', tmtdew=18.51, humidity=30.78, cloud=0.0, wind=33.4, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:06:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:07:33.575 [DEBUG] [Thread-131842] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:07:33.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:07:33.668 [DEBUG] [Thread-131845] [transport.py] [_log()] starting thread (client mode): 0xa57c3d00
2026-02-11T16:07:33.668 [DEBUG] [Thread-131845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:07:33.684 [DEBUG] [Thread-131845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:07:33.684 [INFO] [Thread-131845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:07:33.692 [DEBUG] [Thread-131845] [transport.py] [_log()] client lang: <none>
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] server lang: <none>
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] kex follows: False
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] Compression: none
2026-02-11T16:07:33.693 [DEBUG] [Thread-131845] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:07:33.751 [DEBUG] [Thread-131845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:07:33.752 [DEBUG] [Thread-131845] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:07:33.752 [DEBUG] [Thread-131845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:07:33.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:07:33.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:07:33.807 [DEBUG] [Thread-131845] [transport.py] [_log()] userauth is OK
2026-02-11T16:07:33.807 [DEBUG] [Thread-131845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:07:33.807 [DEBUG] [Thread-131845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:07:33.807 [DEBUG] [Thread-131845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:07:33.807 [DEBUG] [Thread-131845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:07:33.826 [INFO] [Thread-131845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:07:33.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:07:33.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:07:33.913 [DEBUG] [Thread-131847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:07:34.634 [DEBUG] [Thread-131845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:07:34.635 [DEBUG] [Thread-131845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:07:34.682 [DEBUG] [Thread-131845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:07:34.682 [DEBUG] [Thread-131845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:07:34.691 [DEBUG] [Thread-131845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:07:34.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:07:34.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:07:34.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:07:34.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:07:34.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:07:34.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:07:34.726 [DEBUG] [Thread-131845] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:07:39.188 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:07:39.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:07:48.964 [DEBUG] [Thread-131848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:08:04.001 [DEBUG] [Thread-131849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:08:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:08:04.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:08:04.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:08:07.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 7, 27), 18.2, 31.33, 0.0, 33.89, 25.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:08:07.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:07:27
2026-02-11T16:08:07.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:08:07.687 [DEBUG] [Thread-131850] [transport.py] [_log()] starting thread (client mode): 0xa5740220
2026-02-11T16:08:07.687 [DEBUG] [Thread-131850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:08:07.703 [DEBUG] [Thread-131850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:08:07.703 [INFO] [Thread-131850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] client lang: <none>
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] server lang: <none>
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] kex follows: False
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] Compression: none
2026-02-11T16:08:07.704 [DEBUG] [Thread-131850] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:08:07.721 [DEBUG] [Thread-131850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:08:07.722 [DEBUG] [Thread-131850] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:08:07.722 [DEBUG] [Thread-131850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:08:07.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:08:07.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:08:07.724 [DEBUG] [Thread-131850] [transport.py] [_log()] userauth is OK
2026-02-11T16:08:07.724 [DEBUG] [Thread-131850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:08:07.724 [DEBUG] [Thread-131850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:08:07.724 [DEBUG] [Thread-131850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:08:07.724 [DEBUG] [Thread-131850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:08:07.743 [INFO] [Thread-131850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:08:07.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:08:08.439 [DEBUG] [Thread-131850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:08:08.439 [DEBUG] [Thread-131850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:08:08.440 [DEBUG] [Thread-131850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:08:08.480 [DEBUG] [Thread-131850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:08:08.480 [DEBUG] [Thread-131850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:08:08.482 [DEBUG] [Thread-131850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:08:08.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:08:08.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:08:08.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:08:08.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:08:08.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:08:08.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:08:08.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:08:08.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:08:08.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:08:08.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.588336 -999.00  +24.90  30.51     39  +10.10 1 2 2 1 1   888    0 16.33 51.90 ----- 27.8 30.5 290.8 35.8 30.7 -21.1 30.4 -18.4 30.9 -17.3 31.5 -19.9
2026-02-11T16:08:08.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:08:08.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:08:08.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.588336
2026-02-11T16:08:08.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:08:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:08:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:08:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:08:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:08:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:07:27', tmtdew=18.2, humidity=31.33, cloud=0.0, wind=33.89, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:07:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:08:08.504 [DEBUG] [Thread-131850] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:08:08.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:08:08.601 [DEBUG] [Thread-131853] [transport.py] [_log()] starting thread (client mode): 0xa81d5de0
2026-02-11T16:08:08.601 [DEBUG] [Thread-131853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:08:08.616 [DEBUG] [Thread-131853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:08:08.616 [INFO] [Thread-131853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:08:08.623 [DEBUG] [Thread-131853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:08:08.624 [DEBUG] [Thread-131853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:08:08.624 [DEBUG] [Thread-131853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:08:08.624 [DEBUG] [Thread-131853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:08.624 [DEBUG] [Thread-131853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:08.624 [DEBUG] [Thread-131853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:08.624 [DEBUG] [Thread-131853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:08.624 [DEBUG] [Thread-131853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] client lang: <none>
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] server lang: <none>
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] kex follows: False
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] Compression: none
2026-02-11T16:08:08.625 [DEBUG] [Thread-131853] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:08:08.684 [DEBUG] [Thread-131853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:08:08.684 [DEBUG] [Thread-131853] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:08:08.685 [DEBUG] [Thread-131853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:08:08.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:08:08.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:08:08.741 [DEBUG] [Thread-131853] [transport.py] [_log()] userauth is OK
2026-02-11T16:08:08.741 [DEBUG] [Thread-131853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:08:08.741 [DEBUG] [Thread-131853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:08:08.742 [DEBUG] [Thread-131853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:08:08.742 [DEBUG] [Thread-131853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:08:08.761 [INFO] [Thread-131853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:08:08.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:08:08.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:08:09.563 [DEBUG] [Thread-131853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:08:09.563 [DEBUG] [Thread-131853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:08:09.612 [DEBUG] [Thread-131853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:08:09.612 [DEBUG] [Thread-131853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:08:09.622 [DEBUG] [Thread-131853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:08:09.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:08:09.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')
2026-02-11T16:08:09.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:08:09.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:08:09.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:08:09.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:08:09.660 [DEBUG] [Thread-131853] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:08:19.042 [DEBUG] [Thread-131855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:08:23.982 [DEBUG] [Thread-131856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:08:34.093 [DEBUG] [Thread-131857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:08:39.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:08:39.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:08:39.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:08:39.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:08:39.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
2026-02-11T16:08:41.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 8, 2), 18.15, 31.41, 0.0, 32.92, 25.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:08:41.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:08:02
2026-02-11T16:08:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:08:42.426 [DEBUG] [Thread-131858] [transport.py] [_log()] starting thread (client mode): 0xa5771fc0
2026-02-11T16:08:42.427 [DEBUG] [Thread-131858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:08:42.446 [DEBUG] [Thread-131858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:08:42.446 [INFO] [Thread-131858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:08:42.449 [DEBUG] [Thread-131858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] client lang: <none>
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] server lang: <none>
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] kex follows: False
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:08:42.450 [DEBUG] [Thread-131858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:08:42.451 [DEBUG] [Thread-131858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:08:42.451 [DEBUG] [Thread-131858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:08:42.451 [DEBUG] [Thread-131858] [transport.py] [_log()] Compression: none
2026-02-11T16:08:42.451 [DEBUG] [Thread-131858] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:08:42.469 [DEBUG] [Thread-131858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:08:42.470 [DEBUG] [Thread-131858] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:08:42.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:08:42.472 [DEBUG] [Thread-131858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:08:42.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:08:42.474 [DEBUG] [Thread-131858] [transport.py] [_log()] userauth is OK
2026-02-11T16:08:42.474 [DEBUG] [Thread-131858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:08:42.474 [DEBUG] [Thread-131858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:08:42.475 [DEBUG] [Thread-131858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:08:42.475 [DEBUG] [Thread-131858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:08:42.497 [INFO] [Thread-131858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:08:42.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:08:43.136 [DEBUG] [Thread-131858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:08:43.136 [DEBUG] [Thread-131858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:08:43.136 [DEBUG] [Thread-131858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:08:43.178 [DEBUG] [Thread-131858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:08:43.178 [DEBUG] [Thread-131858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:08:43.180 [DEBUG] [Thread-131858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:08:43.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:08:43.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:08:43.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:08:43.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:08:43.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:08:43.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:08:43.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:08:43.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:08:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:08:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.588684 -999.00  +25.30  25.44     38  +10.20 1 2 1 1 1   888    0 16.31 47.18 ----- 32.6 25.4 288.8 30.9 30.8 -20.6 30.5 -17.9 31.1 -15.7 31.6 -19.3
2026-02-11T16:08:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:08:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:08:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.588684
2026-02-11T16:08:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:08:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:08:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:08:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:08:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:08:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:08:02', tmtdew=18.15, humidity=31.41, cloud=0.0, wind=32.92, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:07:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:08:43.198 [DEBUG] [Thread-131858] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:08:43.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:08:43.295 [DEBUG] [Thread-131861] [transport.py] [_log()] starting thread (client mode): 0xa575aa10
2026-02-11T16:08:43.295 [DEBUG] [Thread-131861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:08:43.312 [DEBUG] [Thread-131861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:08:43.312 [INFO] [Thread-131861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:08:43.320 [DEBUG] [Thread-131861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:08:43.320 [DEBUG] [Thread-131861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] client lang: <none>
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] server lang: <none>
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] kex follows: False
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:08:43.321 [DEBUG] [Thread-131861] [transport.py] [_log()] Compression: none
2026-02-11T16:08:43.322 [DEBUG] [Thread-131861] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:08:43.378 [DEBUG] [Thread-131861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:08:43.379 [DEBUG] [Thread-131861] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:08:43.379 [DEBUG] [Thread-131861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:08:43.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:08:43.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:08:43.441 [DEBUG] [Thread-131861] [transport.py] [_log()] userauth is OK
2026-02-11T16:08:43.442 [DEBUG] [Thread-131861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:08:43.442 [DEBUG] [Thread-131861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:08:43.442 [DEBUG] [Thread-131861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:08:43.442 [DEBUG] [Thread-131861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:08:43.464 [INFO] [Thread-131861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:08:43.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:08:43.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:08:44.273 [DEBUG] [Thread-131861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:08:44.274 [DEBUG] [Thread-131861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:08:44.322 [DEBUG] [Thread-131861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:08:44.322 [DEBUG] [Thread-131861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:08:44.331 [DEBUG] [Thread-131861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:08:44.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:08:44.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:08:44.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:08:44.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:08:44.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:08:44.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:08:44.370 [DEBUG] [Thread-131861] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:08:49.131 [DEBUG] [Thread-131863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:04.180 [DEBUG] [Thread-131864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:09:14.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:09:14.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:09:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 8, 39), 19.1, 29.85, 0.0, 27.84, 27.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:09:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:08:39
2026-02-11T16:09:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:09:16.919 [DEBUG] [Thread-131865] [transport.py] [_log()] starting thread (client mode): 0xa57d60b0
2026-02-11T16:09:16.920 [DEBUG] [Thread-131865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:09:16.940 [DEBUG] [Thread-131865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:09:16.940 [INFO] [Thread-131865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] client lang: <none>
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] server lang: <none>
2026-02-11T16:09:16.941 [DEBUG] [Thread-131865] [transport.py] [_log()] kex follows: False
2026-02-11T16:09:16.942 [DEBUG] [Thread-131865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:09:16.942 [DEBUG] [Thread-131865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:09:16.942 [DEBUG] [Thread-131865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:09:16.942 [DEBUG] [Thread-131865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:09:16.942 [DEBUG] [Thread-131865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:09:16.942 [DEBUG] [Thread-131865] [transport.py] [_log()] Compression: none
2026-02-11T16:09:16.942 [DEBUG] [Thread-131865] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:09:16.952 [DEBUG] [Thread-131865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:09:16.952 [DEBUG] [Thread-131865] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:09:16.953 [DEBUG] [Thread-131865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:09:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:09:16.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:09:16.955 [DEBUG] [Thread-131865] [transport.py] [_log()] userauth is OK
2026-02-11T16:09:16.955 [DEBUG] [Thread-131865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:09:16.955 [DEBUG] [Thread-131865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:09:16.955 [DEBUG] [Thread-131865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:09:16.955 [DEBUG] [Thread-131865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:09:16.989 [INFO] [Thread-131865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:09:16.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:09:17.606 [DEBUG] [Thread-131865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:09:17.606 [DEBUG] [Thread-131865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:09:17.606 [DEBUG] [Thread-131865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:09:17.647 [DEBUG] [Thread-131865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:09:17.647 [DEBUG] [Thread-131865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:09:17.651 [DEBUG] [Thread-131865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:09:17.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:09:17.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:09:17.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:09:17.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:09:17.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:09:17.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:09:17.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:09:17.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:09:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:09:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.589725 -999.00  +24.80  21.82     40  +10.40 1 2 1 1 1   888    0 16.00 39.92 ----- 21.8 21.8 299.9 28.3 30.8 -18.5 30.5 -17.2 31.1 -16.5 31.6 -18.6
2026-02-11T16:09:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:09:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:09:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.589725
2026-02-11T16:09:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:09:17.682 [DEBUG] [Thread-131865] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:09:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:09:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:09:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:09:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:09:17.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:08:39', tmtdew=19.1, humidity=29.85, cloud=0.0, wind=27.84, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:09:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:09:17.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:09:17.776 [DEBUG] [Thread-131868] [transport.py] [_log()] starting thread (client mode): 0xa57723e0
2026-02-11T16:09:17.776 [DEBUG] [Thread-131868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:09:17.790 [DEBUG] [Thread-131868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:09:17.791 [INFO] [Thread-131868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:09:17.798 [DEBUG] [Thread-131868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:09:17.799 [DEBUG] [Thread-131868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:09:17.799 [DEBUG] [Thread-131868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:09:17.799 [DEBUG] [Thread-131868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:17.799 [DEBUG] [Thread-131868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] client lang: <none>
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] server lang: <none>
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] kex follows: False
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] Compression: none
2026-02-11T16:09:17.800 [DEBUG] [Thread-131868] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:09:17.859 [DEBUG] [Thread-131868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:09:17.859 [DEBUG] [Thread-131868] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:09:17.860 [DEBUG] [Thread-131868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:09:17.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:09:17.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:09:17.915 [DEBUG] [Thread-131868] [transport.py] [_log()] userauth is OK
2026-02-11T16:09:17.915 [DEBUG] [Thread-131868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:09:17.915 [DEBUG] [Thread-131868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:09:17.915 [DEBUG] [Thread-131868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:09:17.915 [DEBUG] [Thread-131868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:09:17.934 [INFO] [Thread-131868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:09:17.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:09:17.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:09:18.772 [DEBUG] [Thread-131868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:09:18.772 [DEBUG] [Thread-131868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:09:18.821 [DEBUG] [Thread-131868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:09:18.821 [DEBUG] [Thread-131868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:09:18.831 [DEBUG] [Thread-131868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:09:18.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:09:18.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:09:18.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:09:18.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:09:18.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:09:18.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:09:18.870 [DEBUG] [Thread-131868] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:09:19.216 [DEBUG] [Thread-131870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:24.018 [DEBUG] [Thread-131871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:34.274 [DEBUG] [Thread-131872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:39.476 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:39.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:09:48.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:09:48.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:09:49.308 [DEBUG] [Thread-131873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:09:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 9, 15), 18.72, 30.28, 0.0, 24.44, 26.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:09:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:09:15
2026-02-11T16:09:51.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:09:51.220 [DEBUG] [Thread-131874] [transport.py] [_log()] starting thread (client mode): 0xa2d6d840
2026-02-11T16:09:51.221 [DEBUG] [Thread-131874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:09:51.231 [DEBUG] [Thread-131874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:09:51.231 [INFO] [Thread-131874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] client lang: <none>
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] server lang: <none>
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] kex follows: False
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:09:51.234 [DEBUG] [Thread-131874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:09:51.235 [DEBUG] [Thread-131874] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:09:51.235 [DEBUG] [Thread-131874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:09:51.235 [DEBUG] [Thread-131874] [transport.py] [_log()] Compression: none
2026-02-11T16:09:51.235 [DEBUG] [Thread-131874] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:09:51.250 [DEBUG] [Thread-131874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:09:51.250 [DEBUG] [Thread-131874] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:09:51.251 [DEBUG] [Thread-131874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:09:51.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:09:51.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:09:51.252 [DEBUG] [Thread-131874] [transport.py] [_log()] userauth is OK
2026-02-11T16:09:51.252 [DEBUG] [Thread-131874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:09:51.253 [DEBUG] [Thread-131874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:09:51.253 [DEBUG] [Thread-131874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:09:51.253 [DEBUG] [Thread-131874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:09:51.270 [INFO] [Thread-131874] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:09:51.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:09:51.878 [DEBUG] [Thread-131874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:09:51.878 [DEBUG] [Thread-131874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:09:51.878 [DEBUG] [Thread-131874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:09:51.918 [DEBUG] [Thread-131874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:09:51.919 [DEBUG] [Thread-131874] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:09:51.922 [DEBUG] [Thread-131874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:09:51.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:09:51.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:09:51.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:09:51.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:09:51.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:09:51.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:09:51.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:09:51.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:09:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:09:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.590072 -999.00  +25.20  30.61     40  +10.70 1 2 2 1 1   888    0 16.15 35.23 ----- 32.6 30.6 291.8 35.9 30.9 -18.4 30.6 -16.7 31.2 -18.4 31.7 -17.9
2026-02-11T16:09:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:09:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:09:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.590072
2026-02-11T16:09:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:09:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:09:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:09:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:09:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:09:51.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:09:15', tmtdew=18.72, humidity=30.28, cloud=0.0, wind=24.44, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:09:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:09:51.949 [DEBUG] [Thread-131874] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:09:52.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:09:52.045 [DEBUG] [Thread-131877] [transport.py] [_log()] starting thread (client mode): 0xa2d579d0
2026-02-11T16:09:52.045 [DEBUG] [Thread-131877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:09:52.060 [DEBUG] [Thread-131877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:09:52.060 [INFO] [Thread-131877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:09:52.067 [DEBUG] [Thread-131877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] client lang: <none>
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] server lang: <none>
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] kex follows: False
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] Compression: none
2026-02-11T16:09:52.068 [DEBUG] [Thread-131877] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:09:52.343 [DEBUG] [Thread-131877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:09:52.343 [DEBUG] [Thread-131877] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:09:52.344 [DEBUG] [Thread-131877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:09:52.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:09:52.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:09:52.399 [DEBUG] [Thread-131877] [transport.py] [_log()] userauth is OK
2026-02-11T16:09:52.400 [DEBUG] [Thread-131877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:09:52.400 [DEBUG] [Thread-131877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:09:52.400 [DEBUG] [Thread-131877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:09:52.400 [DEBUG] [Thread-131877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:09:52.420 [INFO] [Thread-131877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:09:52.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:09:52.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:09:53.269 [DEBUG] [Thread-131877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:09:53.270 [DEBUG] [Thread-131877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:09:53.319 [DEBUG] [Thread-131877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:09:53.319 [DEBUG] [Thread-131877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:09:53.327 [DEBUG] [Thread-131877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:09:53.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:09:53.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:09:53.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:09:53.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:09:53.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:09:53.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:09:53.360 [DEBUG] [Thread-131877] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:10:04.348 [DEBUG] [Thread-131879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:10:19.397 [DEBUG] [Thread-131880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:10:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:10:23.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:10:23.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:10:24.066 [DEBUG] [Thread-131881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:10:25.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 9, 51), 17.66, 32.41, 0.0, 29.31, 25.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:10:25.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:09:51
2026-02-11T16:10:25.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:10:25.701 [DEBUG] [Thread-131882] [transport.py] [_log()] starting thread (client mode): 0xa81d5c00
2026-02-11T16:10:25.701 [DEBUG] [Thread-131882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:10:25.721 [DEBUG] [Thread-131882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:10:25.722 [INFO] [Thread-131882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] client lang: <none>
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] server lang: <none>
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] kex follows: False
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:10:25.725 [DEBUG] [Thread-131882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:10:25.726 [DEBUG] [Thread-131882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:10:25.726 [DEBUG] [Thread-131882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:10:25.726 [DEBUG] [Thread-131882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:10:25.726 [DEBUG] [Thread-131882] [transport.py] [_log()] Compression: none
2026-02-11T16:10:25.726 [DEBUG] [Thread-131882] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:10:25.734 [DEBUG] [Thread-131882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:10:25.735 [DEBUG] [Thread-131882] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:10:25.735 [DEBUG] [Thread-131882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:10:25.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:10:25.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:10:25.738 [DEBUG] [Thread-131882] [transport.py] [_log()] userauth is OK
2026-02-11T16:10:25.738 [DEBUG] [Thread-131882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:10:25.738 [DEBUG] [Thread-131882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:10:25.738 [DEBUG] [Thread-131882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:10:25.738 [DEBUG] [Thread-131882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:10:25.763 [INFO] [Thread-131882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:10:25.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:10:26.427 [DEBUG] [Thread-131882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:10:26.427 [DEBUG] [Thread-131882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:10:26.428 [DEBUG] [Thread-131882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:10:26.468 [DEBUG] [Thread-131882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:10:26.469 [DEBUG] [Thread-131882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:10:26.472 [DEBUG] [Thread-131882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:10:26.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:10:26.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:10:26.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:10:26.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:10:26.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:10:26.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:10:26.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:10:26.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:10:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:10:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.590420 -999.00  +25.50  36.94     39  +10.70 1 2 2 1 1   888    0 15.96 31.50 ----- 38.2 36.9 295.2 47.6 30.8 -18.9 30.6 -16.5 31.1 -17.8 31.8 -18.0
2026-02-11T16:10:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:10:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:10:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.590420
2026-02-11T16:10:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:10:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:10:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:10:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:10:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:10:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:09:51', tmtdew=17.66, humidity=32.41, cloud=0.0, wind=29.31, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:10:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:10:26.501 [DEBUG] [Thread-131882] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:10:26.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:10:26.597 [DEBUG] [Thread-131885] [transport.py] [_log()] starting thread (client mode): 0xa81d77f0
2026-02-11T16:10:26.597 [DEBUG] [Thread-131885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:10:26.612 [DEBUG] [Thread-131885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:10:26.613 [INFO] [Thread-131885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:10:26.621 [DEBUG] [Thread-131885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] client lang: <none>
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] server lang: <none>
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] kex follows: False
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:10:26.622 [DEBUG] [Thread-131885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:10:26.623 [DEBUG] [Thread-131885] [transport.py] [_log()] Compression: none
2026-02-11T16:10:26.623 [DEBUG] [Thread-131885] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:10:26.687 [DEBUG] [Thread-131885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:10:26.687 [DEBUG] [Thread-131885] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:10:26.688 [DEBUG] [Thread-131885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:10:26.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:10:26.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:10:26.745 [DEBUG] [Thread-131885] [transport.py] [_log()] userauth is OK
2026-02-11T16:10:26.746 [DEBUG] [Thread-131885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:10:26.746 [DEBUG] [Thread-131885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:10:26.746 [DEBUG] [Thread-131885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:10:26.746 [DEBUG] [Thread-131885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:10:26.765 [INFO] [Thread-131885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:10:26.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:10:26.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:10:27.615 [DEBUG] [Thread-131885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:10:27.616 [DEBUG] [Thread-131885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:10:27.663 [DEBUG] [Thread-131885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:10:27.664 [DEBUG] [Thread-131885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:10:27.673 [DEBUG] [Thread-131885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:10:27.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:10:27.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:10:27.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:10:27.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:10:27.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:10:27.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:10:27.708 [DEBUG] [Thread-131885] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:10:34.430 [DEBUG] [Thread-131887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:10:39.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:10:39.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:10:49.483 [DEBUG] [Thread-131888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:10:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:10:57.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:10:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:10:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 10, 27), 17.81, 32.17, 0.0, 28.02, 25.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:10:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:10:27
2026-02-11T16:11:00.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:11:00.301 [DEBUG] [Thread-131889] [transport.py] [_log()] starting thread (client mode): 0xa5759fc0
2026-02-11T16:11:00.301 [DEBUG] [Thread-131889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:11:00.317 [DEBUG] [Thread-131889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:11:00.317 [INFO] [Thread-131889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] client lang: <none>
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] server lang: <none>
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] kex follows: False
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:11:00.320 [DEBUG] [Thread-131889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:11:00.321 [DEBUG] [Thread-131889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:11:00.321 [DEBUG] [Thread-131889] [transport.py] [_log()] Compression: none
2026-02-11T16:11:00.321 [DEBUG] [Thread-131889] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:11:00.338 [DEBUG] [Thread-131889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:11:00.338 [DEBUG] [Thread-131889] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:11:00.339 [DEBUG] [Thread-131889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:11:00.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:11:00.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:11:00.341 [DEBUG] [Thread-131889] [transport.py] [_log()] userauth is OK
2026-02-11T16:11:00.341 [DEBUG] [Thread-131889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:11:00.341 [DEBUG] [Thread-131889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:11:00.341 [DEBUG] [Thread-131889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:11:00.341 [DEBUG] [Thread-131889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:11:00.359 [INFO] [Thread-131889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:11:00.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:11:01.000 [DEBUG] [Thread-131889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:11:01.001 [DEBUG] [Thread-131889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:11:01.001 [DEBUG] [Thread-131889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:11:01.041 [DEBUG] [Thread-131889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:11:01.042 [DEBUG] [Thread-131889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:11:01.045 [DEBUG] [Thread-131889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:11:01.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:11:01.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:11:01.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:11:01.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:11:01.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:11:01.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:11:01.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:11:01.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:11:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:11:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.590767 -999.00  +25.40  27.47     39  +10.80 1 2 1 1 1   888    0 15.86 27.79 ----- 31.8 27.5 300.2 36.2 30.7 -19.9 30.6 -17.1 31.1 -16.3 31.6 -18.9
2026-02-11T16:11:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:11:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:11:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.590767
2026-02-11T16:11:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:11:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:11:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:11:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:11:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:11:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:10:27', tmtdew=17.81, humidity=32.17, cloud=0.0, wind=28.02, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:10:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:11:01.073 [DEBUG] [Thread-131889] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:11:01.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:11:01.168 [DEBUG] [Thread-131892] [transport.py] [_log()] starting thread (client mode): 0xa81d77f0
2026-02-11T16:11:01.168 [DEBUG] [Thread-131892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:11:01.183 [DEBUG] [Thread-131892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:11:01.183 [INFO] [Thread-131892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:11:01.190 [DEBUG] [Thread-131892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] client lang: <none>
2026-02-11T16:11:01.191 [DEBUG] [Thread-131892] [transport.py] [_log()] server lang: <none>
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] kex follows: False
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] Compression: none
2026-02-11T16:11:01.192 [DEBUG] [Thread-131892] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:11:01.258 [DEBUG] [Thread-131892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:11:01.259 [DEBUG] [Thread-131892] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:11:01.260 [DEBUG] [Thread-131892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:11:01.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:11:01.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:11:01.317 [DEBUG] [Thread-131892] [transport.py] [_log()] userauth is OK
2026-02-11T16:11:01.318 [DEBUG] [Thread-131892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:11:01.318 [DEBUG] [Thread-131892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:11:01.318 [DEBUG] [Thread-131892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:11:01.318 [DEBUG] [Thread-131892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:11:01.341 [INFO] [Thread-131892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:11:01.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:11:01.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:11:02.175 [DEBUG] [Thread-131892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:11:02.176 [DEBUG] [Thread-131892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:11:02.223 [DEBUG] [Thread-131892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:11:02.224 [DEBUG] [Thread-131892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:11:02.233 [DEBUG] [Thread-131892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:11:02.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:11:02.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:11:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:11:02.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:11:02.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:11:02.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:11:02.270 [DEBUG] [Thread-131892] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:11:04.520 [DEBUG] [Thread-131894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:11:19.568 [DEBUG] [Thread-131895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:11:24.102 [DEBUG] [Thread-131896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:11:32.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:11:32.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:11:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:11:34.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 11, 2), 18.0, 31.81, 0.0, 28.46, 26.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:11:34.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:11:02
2026-02-11T16:11:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:11:34.602 [DEBUG] [Thread-131897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:11:34.634 [DEBUG] [Thread-131898] [transport.py] [_log()] starting thread (client mode): 0xa2d03dc0
2026-02-11T16:11:34.634 [DEBUG] [Thread-131898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:11:34.655 [DEBUG] [Thread-131898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:11:34.655 [INFO] [Thread-131898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] client lang: <none>
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] server lang: <none>
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] kex follows: False
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] Compression: none
2026-02-11T16:11:34.658 [DEBUG] [Thread-131898] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:11:34.676 [DEBUG] [Thread-131898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:11:34.677 [DEBUG] [Thread-131898] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:11:34.677 [DEBUG] [Thread-131898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:11:34.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:11:34.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:11:34.679 [DEBUG] [Thread-131898] [transport.py] [_log()] userauth is OK
2026-02-11T16:11:34.679 [DEBUG] [Thread-131898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:11:34.679 [DEBUG] [Thread-131898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:11:34.679 [DEBUG] [Thread-131898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:11:34.679 [DEBUG] [Thread-131898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:11:34.705 [INFO] [Thread-131898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:11:34.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:11:35.353 [DEBUG] [Thread-131898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:11:35.353 [DEBUG] [Thread-131898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:11:35.354 [DEBUG] [Thread-131898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:11:35.394 [DEBUG] [Thread-131898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:11:35.395 [DEBUG] [Thread-131898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:11:35.398 [DEBUG] [Thread-131898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:11:35.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:11:35.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:11:35.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:11:35.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:11:35.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:11:35.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:11:35.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:11:35.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:11:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:11:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.591114 -999.00  +25.30  32.64     40  +10.90 1 2 2 1 1   888    0 15.40 20.70 ----- 31.3 32.6 304.8 41.1 30.6 -20.6 30.5 -17.5 30.9 -19.6 31.6 -19.3
2026-02-11T16:11:35.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:11:35.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:11:35.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.591114
2026-02-11T16:11:35.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:11:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:11:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:11:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:11:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:11:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:11:02', tmtdew=18.0, humidity=31.81, cloud=0.0, wind=28.46, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:11:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:11:35.425 [DEBUG] [Thread-131898] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:11:35.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:11:35.521 [DEBUG] [Thread-131901] [transport.py] [_log()] starting thread (client mode): 0xa57c3e80
2026-02-11T16:11:35.522 [DEBUG] [Thread-131901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:11:35.536 [DEBUG] [Thread-131901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:11:35.536 [INFO] [Thread-131901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:11:35.545 [DEBUG] [Thread-131901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:11:35.545 [DEBUG] [Thread-131901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:11:35.545 [DEBUG] [Thread-131901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:11:35.545 [DEBUG] [Thread-131901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:35.545 [DEBUG] [Thread-131901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:11:35.545 [DEBUG] [Thread-131901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:35.545 [DEBUG] [Thread-131901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] client lang: <none>
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] server lang: <none>
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] kex follows: False
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] Compression: none
2026-02-11T16:11:35.546 [DEBUG] [Thread-131901] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:11:35.602 [DEBUG] [Thread-131901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:11:35.603 [DEBUG] [Thread-131901] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:11:35.604 [DEBUG] [Thread-131901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:11:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:11:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:11:35.658 [DEBUG] [Thread-131901] [transport.py] [_log()] userauth is OK
2026-02-11T16:11:35.659 [DEBUG] [Thread-131901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:11:35.659 [DEBUG] [Thread-131901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:11:35.659 [DEBUG] [Thread-131901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:11:35.659 [DEBUG] [Thread-131901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:11:35.677 [INFO] [Thread-131901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:11:35.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:11:35.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:11:36.494 [DEBUG] [Thread-131901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:11:36.494 [DEBUG] [Thread-131901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:11:36.542 [DEBUG] [Thread-131901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:11:36.543 [DEBUG] [Thread-131901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:11:36.552 [DEBUG] [Thread-131901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:11:36.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:11:36.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:11:36.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:11:36.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:11:36.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:11:36.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:11:36.589 [DEBUG] [Thread-131901] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:11:39.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:11:39.762 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:11:49.636 [DEBUG] [Thread-131903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:12:04.686 [DEBUG] [Thread-131904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:12:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:12:06.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:12: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
2026-02-11T16:12:08.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 11, 38), 18.33, 31.44, 0.0, 38.64, 26.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:12:08.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:11:38
2026-02-11T16:12:08.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:12:09.023 [DEBUG] [Thread-131905] [transport.py] [_log()] starting thread (client mode): 0xa2dc0490
2026-02-11T16:12:09.024 [DEBUG] [Thread-131905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:12:09.043 [DEBUG] [Thread-131905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:12:09.043 [INFO] [Thread-131905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:12:09.044 [DEBUG] [Thread-131905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] client lang: <none>
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] server lang: <none>
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] kex follows: False
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:12:09.045 [DEBUG] [Thread-131905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:12:09.046 [DEBUG] [Thread-131905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:12:09.046 [DEBUG] [Thread-131905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:12:09.046 [DEBUG] [Thread-131905] [transport.py] [_log()] Compression: none
2026-02-11T16:12:09.046 [DEBUG] [Thread-131905] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:12:09.065 [DEBUG] [Thread-131905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:12:09.066 [DEBUG] [Thread-131905] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:12:09.066 [DEBUG] [Thread-131905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:12:09.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:12:09.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:12:09.068 [DEBUG] [Thread-131905] [transport.py] [_log()] userauth is OK
2026-02-11T16:12:09.068 [DEBUG] [Thread-131905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:12:09.068 [DEBUG] [Thread-131905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:12:09.069 [DEBUG] [Thread-131905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:12:09.069 [DEBUG] [Thread-131905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:12:09.093 [INFO] [Thread-131905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:12:09.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:12:09.711 [DEBUG] [Thread-131905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:12:09.711 [DEBUG] [Thread-131905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:12:09.712 [DEBUG] [Thread-131905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:12:09.753 [DEBUG] [Thread-131905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:12:09.753 [DEBUG] [Thread-131905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:12:09.759 [DEBUG] [Thread-131905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:12:09.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:12:09.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:12:09.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:12:09.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:12:09.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:12:09.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:12:09.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:12:09.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:12:09.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:12:09.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.591461 -999.00  +25.20  32.72     40  +10.70 1 2 2 1 1   888    0 15.34 12.09 ----- 26.3 32.7 290.8 47.4 30.6 -20.0 30.4 -18.5 30.9 -17.3 31.5 -20.0
2026-02-11T16:12:09.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:12:09.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:12:09.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.591461
2026-02-11T16:12:09.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:12:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:12:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:12:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:12:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:12:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:11:38', tmtdew=18.33, humidity=31.44, cloud=0.0, wind=38.64, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:11:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:12:09.782 [DEBUG] [Thread-131905] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:12:09.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:12:09.876 [DEBUG] [Thread-131908] [transport.py] [_log()] starting thread (client mode): 0xa81d6ad0
2026-02-11T16:12:09.876 [DEBUG] [Thread-131908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:12:09.890 [DEBUG] [Thread-131908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:12:09.891 [INFO] [Thread-131908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:12:09.900 [DEBUG] [Thread-131908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:12:09.900 [DEBUG] [Thread-131908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:12:09.900 [DEBUG] [Thread-131908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:12:09.900 [DEBUG] [Thread-131908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:09.900 [DEBUG] [Thread-131908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:09.900 [DEBUG] [Thread-131908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:09.900 [DEBUG] [Thread-131908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] client lang: <none>
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] server lang: <none>
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] kex follows: False
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] Compression: none
2026-02-11T16:12:09.901 [DEBUG] [Thread-131908] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:12:09.958 [DEBUG] [Thread-131908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:12:09.959 [DEBUG] [Thread-131908] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:12:09.960 [DEBUG] [Thread-131908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:12:09.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:12:09.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:12:10.016 [DEBUG] [Thread-131908] [transport.py] [_log()] userauth is OK
2026-02-11T16:12:10.017 [DEBUG] [Thread-131908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:12:10.017 [DEBUG] [Thread-131908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:12:10.017 [DEBUG] [Thread-131908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:12:10.017 [DEBUG] [Thread-131908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:12:10.035 [INFO] [Thread-131908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:12:10.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:12:10.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:12:10.883 [DEBUG] [Thread-131908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:12:10.884 [DEBUG] [Thread-131908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:12:10.932 [DEBUG] [Thread-131908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:12:10.932 [DEBUG] [Thread-131908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:12:10.942 [DEBUG] [Thread-131908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:12:10.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:12:10.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:12:10.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:12:10.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:12:10.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:12:10.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:12:10.984 [DEBUG] [Thread-131908] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:12:19.722 [DEBUG] [Thread-131910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:12:24.154 [DEBUG] [Thread-131911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:12:34.773 [DEBUG] [Thread-131912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:12:39.922 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:12:39.924 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:12:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:12:41.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:12:41.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
2026-02-11T16:12:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 12, 13), 17.73, 32.59, 0.0, 38.08, 26.26, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:12:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:12:13
2026-02-11T16:12:43.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:12:44.123 [DEBUG] [Thread-131913] [transport.py] [_log()] starting thread (client mode): 0xa2dc3610
2026-02-11T16:12:44.124 [DEBUG] [Thread-131913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:12:44.144 [DEBUG] [Thread-131913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:12:44.144 [INFO] [Thread-131913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] client lang: <none>
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] server lang: <none>
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] kex follows: False
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] Compression: none
2026-02-11T16:12:44.147 [DEBUG] [Thread-131913] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:12:44.164 [DEBUG] [Thread-131913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:12:44.165 [DEBUG] [Thread-131913] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:12:44.165 [DEBUG] [Thread-131913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:12:44.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:12:44.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:12:44.167 [DEBUG] [Thread-131913] [transport.py] [_log()] userauth is OK
2026-02-11T16:12:44.167 [DEBUG] [Thread-131913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:12:44.168 [DEBUG] [Thread-131913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:12:44.168 [DEBUG] [Thread-131913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:12:44.168 [DEBUG] [Thread-131913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:12:44.199 [INFO] [Thread-131913] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:12:44.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:12:44.813 [DEBUG] [Thread-131913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:12:44.813 [DEBUG] [Thread-131913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:12:44.814 [DEBUG] [Thread-131913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:12:44.854 [DEBUG] [Thread-131913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:12:44.855 [DEBUG] [Thread-131913] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:12:44.858 [DEBUG] [Thread-131913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:12:44.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:12:44.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:12:44.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:12:44.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:12:44.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:12:44.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:12:44.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:12:44.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:12:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:12:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.591809 -999.00  +25.40  36.19     40  +10.80 1 2 2 1 1   888    0 15.47 10.01 ----- 32.8 36.2 295.8 39.6 30.6 -20.8 30.4 -18.4 30.6 -20.6 31.4 -20.6
2026-02-11T16:12:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:12:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:12:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.591809
2026-02-11T16:12:44.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:12:44.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:12:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:12:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:12:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:12:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:12:13', tmtdew=17.73, humidity=32.59, cloud=0.0, wind=38.08, temperature=26.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:12:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:12:44.886 [DEBUG] [Thread-131913] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:12:44.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:12:44.988 [DEBUG] [Thread-131916] [transport.py] [_log()] starting thread (client mode): 0xa2dc2560
2026-02-11T16:12:44.988 [DEBUG] [Thread-131916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:12:45.002 [DEBUG] [Thread-131916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:12:45.002 [INFO] [Thread-131916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:12:45.010 [DEBUG] [Thread-131916] [transport.py] [_log()] client lang: <none>
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] server lang: <none>
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] kex follows: False
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] Compression: none
2026-02-11T16:12:45.011 [DEBUG] [Thread-131916] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:12:45.069 [DEBUG] [Thread-131916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:12:45.069 [DEBUG] [Thread-131916] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:12:45.070 [DEBUG] [Thread-131916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:12:45.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:12:45.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:12:45.124 [DEBUG] [Thread-131916] [transport.py] [_log()] userauth is OK
2026-02-11T16:12:45.124 [DEBUG] [Thread-131916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:12:45.124 [DEBUG] [Thread-131916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:12:45.125 [DEBUG] [Thread-131916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:12:45.125 [DEBUG] [Thread-131916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:12:45.142 [INFO] [Thread-131916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:12:45.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:12:45.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:12:45.967 [DEBUG] [Thread-131916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:12:45.968 [DEBUG] [Thread-131916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:12:46.015 [DEBUG] [Thread-131916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:12:46.015 [DEBUG] [Thread-131916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:12:46.024 [DEBUG] [Thread-131916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:12:46.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:12:46.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')
2026-02-11T16:12:46.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:12:46.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:12:46.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:12:46.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:12:46.061 [DEBUG] [Thread-131916] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:12:49.810 [DEBUG] [Thread-131918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:04.867 [DEBUG] [Thread-131919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:13:16.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:13:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:13:18.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 12, 48), 17.26, 33.49, 0.0, 32.43, 25.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:13:18.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:12:48
2026-02-11T16:13:18.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:13:18.636 [DEBUG] [Thread-131920] [transport.py] [_log()] starting thread (client mode): 0xa2dc2c80
2026-02-11T16:13:18.636 [DEBUG] [Thread-131920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:13:18.657 [DEBUG] [Thread-131920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:13:18.657 [INFO] [Thread-131920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:13:18.661 [DEBUG] [Thread-131920] [transport.py] [_log()] client lang: <none>
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] server lang: <none>
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] kex follows: False
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] Compression: none
2026-02-11T16:13:18.662 [DEBUG] [Thread-131920] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:13:18.683 [DEBUG] [Thread-131920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:13:18.683 [DEBUG] [Thread-131920] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:13:18.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:13:18.684 [DEBUG] [Thread-131920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:13:18.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:13:18.686 [DEBUG] [Thread-131920] [transport.py] [_log()] userauth is OK
2026-02-11T16:13:18.686 [DEBUG] [Thread-131920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:13:18.686 [DEBUG] [Thread-131920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:13:18.686 [DEBUG] [Thread-131920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:13:18.686 [DEBUG] [Thread-131920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:13:18.710 [INFO] [Thread-131920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:13:18.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:13:19.351 [DEBUG] [Thread-131920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:13:19.351 [DEBUG] [Thread-131920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:13:19.351 [DEBUG] [Thread-131920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:13:19.392 [DEBUG] [Thread-131920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:13:19.392 [DEBUG] [Thread-131920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:13:19.394 [DEBUG] [Thread-131920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:13:19.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:13:19.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:13:19.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:13:19.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:13:19.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:13:19.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:13:19.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:13:19.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:13:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:13:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.592156 -999.00  +25.10  27.97     40  +10.70 1 2 1 1 1   888    0 15.14 9.51 ----- 31.7 28.0 298.6 42.8 30.5 -21.8 30.4 -19.7 30.6 -19.8 31.4 -21.1
2026-02-11T16:13:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:13:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:13:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.592156
2026-02-11T16:13:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:13:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:13:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:13:19.419 [DEBUG] [Thread-131920] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:13:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:13:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:13:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:12:48', tmtdew=17.26, humidity=33.49, cloud=0.0, wind=32.43, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:12:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:13:19.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:13:19.515 [DEBUG] [Thread-131923] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fa0
2026-02-11T16:13:19.515 [DEBUG] [Thread-131923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:13:19.532 [DEBUG] [Thread-131923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:13:19.532 [INFO] [Thread-131923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:13:19.540 [DEBUG] [Thread-131923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:13:19.540 [DEBUG] [Thread-131923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:13:19.540 [DEBUG] [Thread-131923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] client lang: <none>
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] server lang: <none>
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] kex follows: False
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] Compression: none
2026-02-11T16:13:19.541 [DEBUG] [Thread-131923] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:13:19.595 [DEBUG] [Thread-131923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:13:19.596 [DEBUG] [Thread-131923] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:13:19.596 [DEBUG] [Thread-131923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:13:19.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:13:19.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:13:19.653 [DEBUG] [Thread-131923] [transport.py] [_log()] userauth is OK
2026-02-11T16:13:19.653 [DEBUG] [Thread-131923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:13:19.653 [DEBUG] [Thread-131923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:13:19.653 [DEBUG] [Thread-131923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:13:19.653 [DEBUG] [Thread-131923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:13:19.673 [INFO] [Thread-131923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:13:19.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:13:19.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:13:19.901 [DEBUG] [Thread-131925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:20.499 [DEBUG] [Thread-131923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:13:20.499 [DEBUG] [Thread-131923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:13:20.547 [DEBUG] [Thread-131923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:13:20.547 [DEBUG] [Thread-131923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:13:20.555 [DEBUG] [Thread-131923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:13:20.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:13:20.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:13:20.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:13:20.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:13:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:13:20.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:13:20.594 [DEBUG] [Thread-131923] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:13:24.189 [DEBUG] [Thread-131926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:34.949 [DEBUG] [Thread-131927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:40.065 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:40.066 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:49.987 [DEBUG] [Thread-131928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:13:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:13:50.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:13:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:13:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 13, 24), 17.39, 33.22, 0.0, 28.5, 25.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:13:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:13:24
2026-02-11T16:13:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:13:52.979 [DEBUG] [Thread-131929] [transport.py] [_log()] starting thread (client mode): 0xa81d7790
2026-02-11T16:13:52.979 [DEBUG] [Thread-131929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:13:52.999 [DEBUG] [Thread-131929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:13:52.999 [INFO] [Thread-131929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:13:53.002 [DEBUG] [Thread-131929] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:13:53.002 [DEBUG] [Thread-131929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:13:53.002 [DEBUG] [Thread-131929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:13:53.002 [DEBUG] [Thread-131929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:53.002 [DEBUG] [Thread-131929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:53.002 [DEBUG] [Thread-131929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:53.002 [DEBUG] [Thread-131929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] client lang: <none>
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] server lang: <none>
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] kex follows: False
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] Compression: none
2026-02-11T16:13:53.003 [DEBUG] [Thread-131929] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:13:53.019 [DEBUG] [Thread-131929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:13:53.020 [DEBUG] [Thread-131929] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:13:53.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:13:53.021 [DEBUG] [Thread-131929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:13:53.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:13:53.022 [DEBUG] [Thread-131929] [transport.py] [_log()] userauth is OK
2026-02-11T16:13:53.022 [DEBUG] [Thread-131929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:13:53.023 [DEBUG] [Thread-131929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:13:53.023 [DEBUG] [Thread-131929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:13:53.023 [DEBUG] [Thread-131929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:13:53.039 [INFO] [Thread-131929] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:13:53.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:13:53.656 [DEBUG] [Thread-131929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:13:53.657 [DEBUG] [Thread-131929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:13:53.657 [DEBUG] [Thread-131929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:13:53.697 [DEBUG] [Thread-131929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:13:53.697 [DEBUG] [Thread-131929] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:13:53.700 [DEBUG] [Thread-131929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:13:53.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:13:53.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:13:53.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:13:53.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:13:53.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:13:53.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:13:53.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:13:53.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:13:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:13:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.592503 -999.00  +25.20  32.71     40  +10.70 1 2 2 1 1   888    0 15.32 5.84 ----- 34.1 32.7 289.4 40.1 30.4 -20.9 30.3 -19.3 30.6 -19.0 31.4 -20.6
2026-02-11T16:13:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:13:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:13:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.592503
2026-02-11T16:13:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:13:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:13:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:13:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:13:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:13:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:13:24', tmtdew=17.39, humidity=33.22, cloud=0.0, wind=28.5, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:13:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:13:53.727 [DEBUG] [Thread-131929] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:13:53.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:13:53.834 [DEBUG] [Thread-131932] [transport.py] [_log()] starting thread (client mode): 0xa57d57b0
2026-02-11T16:13:53.834 [DEBUG] [Thread-131932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:13:53.848 [DEBUG] [Thread-131932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:13:53.848 [INFO] [Thread-131932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:13:53.855 [DEBUG] [Thread-131932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] client lang: <none>
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] server lang: <none>
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] kex follows: False
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] Compression: none
2026-02-11T16:13:53.856 [DEBUG] [Thread-131932] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:13:53.913 [DEBUG] [Thread-131932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:13:53.914 [DEBUG] [Thread-131932] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:13:53.914 [DEBUG] [Thread-131932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:13:53.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:13:53.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:13:53.970 [DEBUG] [Thread-131932] [transport.py] [_log()] userauth is OK
2026-02-11T16:13:53.970 [DEBUG] [Thread-131932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:13:53.971 [DEBUG] [Thread-131932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:13:53.971 [DEBUG] [Thread-131932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:13:53.971 [DEBUG] [Thread-131932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:13:53.990 [INFO] [Thread-131932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:13:53.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:13:53.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:13:54.806 [DEBUG] [Thread-131932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:13:54.807 [DEBUG] [Thread-131932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:13:54.854 [DEBUG] [Thread-131932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:13:54.854 [DEBUG] [Thread-131932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:13:54.864 [DEBUG] [Thread-131932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:13:54.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:13:54.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')
2026-02-11T16:13: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
2026-02-11T16:13:54.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:13:54.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:13:54.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:13:54.900 [DEBUG] [Thread-131932] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:14:05.024 [DEBUG] [Thread-131934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:14:20.084 [DEBUG] [Thread-131935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:14:24.226 [DEBUG] [Thread-131936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:14:24.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:14:24.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:14:24.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:14:26.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 13, 24), 17.44, 33.22, 0.0, 26.7, 25.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:14:26.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:13:24
2026-02-11T16:14:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:14:27.327 [DEBUG] [Thread-131937] [transport.py] [_log()] starting thread (client mode): 0xa2dc26e0
2026-02-11T16:14:27.327 [DEBUG] [Thread-131937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:14:27.348 [DEBUG] [Thread-131937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:14:27.348 [INFO] [Thread-131937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:14:27.351 [DEBUG] [Thread-131937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] client lang: <none>
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] server lang: <none>
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] kex follows: False
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] Compression: none
2026-02-11T16:14:27.352 [DEBUG] [Thread-131937] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:14:27.370 [DEBUG] [Thread-131937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:14:27.370 [DEBUG] [Thread-131937] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:14:27.371 [DEBUG] [Thread-131937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:14:27.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:14:27.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:14:27.373 [DEBUG] [Thread-131937] [transport.py] [_log()] userauth is OK
2026-02-11T16:14:27.373 [DEBUG] [Thread-131937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:14:27.373 [DEBUG] [Thread-131937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:14:27.373 [DEBUG] [Thread-131937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:14:27.374 [DEBUG] [Thread-131937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:14:27.411 [INFO] [Thread-131937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:14:27.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:14:28.061 [DEBUG] [Thread-131937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:14:28.061 [DEBUG] [Thread-131937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:14:28.061 [DEBUG] [Thread-131937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:14:28.102 [DEBUG] [Thread-131937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:14:28.102 [DEBUG] [Thread-131937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:14:28.106 [DEBUG] [Thread-131937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:14:28.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:14:28.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:14:28.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:14:28.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:14:28.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:14:28.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:14:28.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:14:28.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:14:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:14:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.593197 -999.00  +25.00  22.41     40  +10.70 1 2 1 1 1   888    0 15.07 -4.97 ----- 27.1 22.4 281.8 28.3 30.5 -21.1 30.1 -18.9 30.9 -18.0 31.2 -20.0
2026-02-11T16:14:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:14:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:14:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.593197
2026-02-11T16:14:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:14:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:14:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:14:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:14:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:14:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:13:24', tmtdew=17.44, humidity=33.22, cloud=0.0, wind=26.7, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:14:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:14:28.139 [DEBUG] [Thread-131937] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:14:28.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:14:28.241 [DEBUG] [Thread-131940] [transport.py] [_log()] starting thread (client mode): 0xa2dc3a90
2026-02-11T16:14:28.242 [DEBUG] [Thread-131940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:14:28.256 [DEBUG] [Thread-131940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:14:28.256 [INFO] [Thread-131940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:14:28.265 [DEBUG] [Thread-131940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:14:28.265 [DEBUG] [Thread-131940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] client lang: <none>
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] server lang: <none>
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] kex follows: False
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:14:28.266 [DEBUG] [Thread-131940] [transport.py] [_log()] Compression: none
2026-02-11T16:14:28.267 [DEBUG] [Thread-131940] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:14:28.323 [DEBUG] [Thread-131940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:14:28.324 [DEBUG] [Thread-131940] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:14:28.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:14:28.325 [DEBUG] [Thread-131940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:14:28.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:14:28.385 [DEBUG] [Thread-131940] [transport.py] [_log()] userauth is OK
2026-02-11T16:14:28.386 [DEBUG] [Thread-131940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:14:28.386 [DEBUG] [Thread-131940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:14:28.386 [DEBUG] [Thread-131940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:14:28.386 [DEBUG] [Thread-131940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:14:28.406 [INFO] [Thread-131940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:14:28.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:14:28.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:14:29.254 [DEBUG] [Thread-131940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:14:29.255 [DEBUG] [Thread-131940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:14:29.302 [DEBUG] [Thread-131940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:14:29.303 [DEBUG] [Thread-131940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:14:29.313 [DEBUG] [Thread-131940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:14:29.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:14:29.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:14:29.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:14:29.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:14:29.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:14:29.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:14:29.353 [DEBUG] [Thread-131940] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:14:35.119 [DEBUG] [Thread-131942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:14:40.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:14:40.207 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:14:50.167 [DEBUG] [Thread-131943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:14:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:14:59.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:14:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:15:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 14, 36), 18.05, 31.87, 0.0, 23.96, 26.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:15:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:14:36
2026-02-11T16:15:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:15:02.238 [DEBUG] [Thread-131944] [transport.py] [_log()] starting thread (client mode): 0xa2dc0220
2026-02-11T16:15:02.238 [DEBUG] [Thread-131944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:15:02.258 [DEBUG] [Thread-131944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:15:02.258 [INFO] [Thread-131944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:15:02.261 [DEBUG] [Thread-131944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:15:02.261 [DEBUG] [Thread-131944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:15:02.261 [DEBUG] [Thread-131944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] client lang: <none>
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] server lang: <none>
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] kex follows: False
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] Compression: none
2026-02-11T16:15:02.262 [DEBUG] [Thread-131944] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:15:02.277 [DEBUG] [Thread-131944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:15:02.277 [DEBUG] [Thread-131944] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:15:02.277 [DEBUG] [Thread-131944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:15:02.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:15:02.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:15:02.278 [DEBUG] [Thread-131944] [transport.py] [_log()] userauth is OK
2026-02-11T16:15:02.278 [DEBUG] [Thread-131944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:15:02.278 [DEBUG] [Thread-131944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:15:02.278 [DEBUG] [Thread-131944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:15:02.278 [DEBUG] [Thread-131944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:15:02.298 [INFO] [Thread-131944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:15:02.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:15:02.950 [DEBUG] [Thread-131944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:15:02.950 [DEBUG] [Thread-131944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:15:02.951 [DEBUG] [Thread-131944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:15:02.992 [DEBUG] [Thread-131944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:15:02.992 [DEBUG] [Thread-131944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:15:02.994 [DEBUG] [Thread-131944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:15:03.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:15:03.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:15:03.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:15:03.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:15:03.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:15:03.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:15:03.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:15:03.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:15:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:15:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.593545 -999.00  +24.80  23.31     40  +10.50 1 2 1 1 1   888    0 14.56 -8.49 ----- 22.7 23.3 294.2 29.3 30.4 -22.2 30.3 -19.7 30.8 -20.5 31.4 -20.2
2026-02-11T16:15:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:15:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:15:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.593545
2026-02-11T16:15:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:15:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:15:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:15:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:15:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:15:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:14:36', tmtdew=18.05, humidity=31.87, cloud=0.0, wind=23.96, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:14:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:15:03.042 [DEBUG] [Thread-131944] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:15:03.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:15:03.135 [DEBUG] [Thread-131947] [transport.py] [_log()] starting thread (client mode): 0xa575ba00
2026-02-11T16:15:03.136 [DEBUG] [Thread-131947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:15:03.150 [DEBUG] [Thread-131947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:15:03.150 [INFO] [Thread-131947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:15:03.157 [DEBUG] [Thread-131947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:15:03.158 [DEBUG] [Thread-131947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:15:03.159 [DEBUG] [Thread-131947] [transport.py] [_log()] client lang: <none>
2026-02-11T16:15:03.159 [DEBUG] [Thread-131947] [transport.py] [_log()] server lang: <none>
2026-02-11T16:15:03.159 [DEBUG] [Thread-131947] [transport.py] [_log()] kex follows: False
2026-02-11T16:15:03.159 [DEBUG] [Thread-131947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:15:03.159 [DEBUG] [Thread-131947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:15:03.159 [DEBUG] [Thread-131947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:15:03.160 [DEBUG] [Thread-131947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:15:03.160 [DEBUG] [Thread-131947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:15:03.160 [DEBUG] [Thread-131947] [transport.py] [_log()] Compression: none
2026-02-11T16:15:03.160 [DEBUG] [Thread-131947] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:15:03.217 [DEBUG] [Thread-131947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:15:03.217 [DEBUG] [Thread-131947] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:15:03.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:15:03.218 [DEBUG] [Thread-131947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:15:03.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:15:03.279 [DEBUG] [Thread-131947] [transport.py] [_log()] userauth is OK
2026-02-11T16:15:03.279 [DEBUG] [Thread-131947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:15:03.279 [DEBUG] [Thread-131947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:15:03.279 [DEBUG] [Thread-131947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:15:03.279 [DEBUG] [Thread-131947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:15:03.295 [INFO] [Thread-131947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:15:03.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:15:03.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:15:04.154 [DEBUG] [Thread-131947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:15:04.155 [DEBUG] [Thread-131947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:15:04.202 [DEBUG] [Thread-131947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:15:04.203 [DEBUG] [Thread-131947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:15:04.212 [DEBUG] [Thread-131947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:15:04.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:15:04.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:15:04.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:15:04.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:15:04.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:15:04.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:15:04.250 [DEBUG] [Thread-131947] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:15:05.205 [DEBUG] [Thread-131949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:15:20.257 [DEBUG] [Thread-131950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:15:24.264 [DEBUG] [Thread-131951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:15:34.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:15:34.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:15:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:15:35.294 [DEBUG] [Thread-131952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:15:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 15, 11), 16.8, 34.4, 0.0, 23.03, 25.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:15:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:15:11
2026-02-11T16:15:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:15:36.718 [DEBUG] [Thread-131953] [transport.py] [_log()] starting thread (client mode): 0xa2dc3370
2026-02-11T16:15:36.718 [DEBUG] [Thread-131953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:15:36.739 [DEBUG] [Thread-131953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:15:36.740 [INFO] [Thread-131953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:15:36.742 [DEBUG] [Thread-131953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] client lang: <none>
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] server lang: <none>
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] kex follows: False
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] Compression: none
2026-02-11T16:15:36.743 [DEBUG] [Thread-131953] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:15:36.760 [DEBUG] [Thread-131953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:15:36.761 [DEBUG] [Thread-131953] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:15:36.761 [DEBUG] [Thread-131953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:15:36.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:15:36.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:15:36.763 [DEBUG] [Thread-131953] [transport.py] [_log()] userauth is OK
2026-02-11T16:15:36.763 [DEBUG] [Thread-131953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:15:36.763 [DEBUG] [Thread-131953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:15:36.764 [DEBUG] [Thread-131953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:15:36.764 [DEBUG] [Thread-131953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:15:36.788 [INFO] [Thread-131953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:15:36.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:15:37.417 [DEBUG] [Thread-131953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:15:37.417 [DEBUG] [Thread-131953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:15:37.418 [DEBUG] [Thread-131953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:15:37.459 [DEBUG] [Thread-131953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:15:37.459 [DEBUG] [Thread-131953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:15:37.462 [DEBUG] [Thread-131953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:15:37.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:15:37.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:15:37.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:15:37.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:15:37.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:15:37.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:15:37.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:15:37.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:15:37.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:15:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.593892 -999.00  +24.80  31.45     41  +10.90 1 2 2 1 1   888    0 14.44 -12.45 ----- 38.2 31.4 298.8 42.8 30.4 -22.0 30.2 -20.1 30.6 -19.6 31.3 -20.6
2026-02-11T16:15:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:15:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:15:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.593892
2026-02-11T16:15:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:15:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:15:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:15:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:15:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:15:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:15:11', tmtdew=16.8, humidity=34.4, cloud=0.0, wind=23.03, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:15:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:15:37.491 [DEBUG] [Thread-131953] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:15:37.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:15:37.586 [DEBUG] [Thread-131956] [transport.py] [_log()] starting thread (client mode): 0xa57586a0
2026-02-11T16:15:37.586 [DEBUG] [Thread-131956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:15:37.601 [DEBUG] [Thread-131956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:15:37.601 [INFO] [Thread-131956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] client lang: <none>
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] server lang: <none>
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] kex follows: False
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:15:37.609 [DEBUG] [Thread-131956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:15:37.610 [DEBUG] [Thread-131956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:15:37.610 [DEBUG] [Thread-131956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:15:37.610 [DEBUG] [Thread-131956] [transport.py] [_log()] Compression: none
2026-02-11T16:15:37.610 [DEBUG] [Thread-131956] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:15:37.668 [DEBUG] [Thread-131956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:15:37.669 [DEBUG] [Thread-131956] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:15:37.669 [DEBUG] [Thread-131956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:15:37.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:15:37.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:15:37.725 [DEBUG] [Thread-131956] [transport.py] [_log()] userauth is OK
2026-02-11T16:15:37.725 [DEBUG] [Thread-131956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:15:37.725 [DEBUG] [Thread-131956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:15:37.725 [DEBUG] [Thread-131956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:15:37.725 [DEBUG] [Thread-131956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:15:37.744 [INFO] [Thread-131956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:15:37.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:15:37.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:15:38.549 [DEBUG] [Thread-131956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:15:38.549 [DEBUG] [Thread-131956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:15:38.596 [DEBUG] [Thread-131956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:15:38.597 [DEBUG] [Thread-131956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:15:38.606 [DEBUG] [Thread-131956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:15:38.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:15:38.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')
2026-02-11T16:15:38.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:15:38.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:15:38.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:15:38.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:15:38.650 [DEBUG] [Thread-131956] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:15:40.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:15:40.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:15:50.326 [DEBUG] [Thread-131958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:16:05.385 [DEBUG] [Thread-131959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:16:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:16:08.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:16:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:16:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 15, 47), 16.7, 34.83, 0.0, 36.03, 25.26, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:16:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:15:47
2026-02-11T16:16:11.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:16:11.162 [DEBUG] [Thread-131960] [transport.py] [_log()] starting thread (client mode): 0xa57d7460
2026-02-11T16:16:11.162 [DEBUG] [Thread-131960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:16:11.182 [DEBUG] [Thread-131960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:16:11.183 [INFO] [Thread-131960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] client lang: <none>
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] server lang: <none>
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] kex follows: False
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] Compression: none
2026-02-11T16:16:11.186 [DEBUG] [Thread-131960] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:16:11.202 [DEBUG] [Thread-131960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:16:11.202 [DEBUG] [Thread-131960] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:16:11.203 [DEBUG] [Thread-131960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:16:11.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:16:11.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:16:11.204 [DEBUG] [Thread-131960] [transport.py] [_log()] userauth is OK
2026-02-11T16:16:11.204 [DEBUG] [Thread-131960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:16:11.204 [DEBUG] [Thread-131960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:16:11.204 [DEBUG] [Thread-131960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:16:11.204 [DEBUG] [Thread-131960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:16:11.224 [INFO] [Thread-131960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:16:11.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:16:11.792 [DEBUG] [Thread-131960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:16:11.792 [DEBUG] [Thread-131960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:16:11.793 [DEBUG] [Thread-131960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:16:11.833 [DEBUG] [Thread-131960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:16:11.833 [DEBUG] [Thread-131960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:16:11.837 [DEBUG] [Thread-131960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:16:11.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:16:11.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:16:11.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:16:11.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:16:11.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:16:11.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:16:11.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:16:11.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:16:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:16:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.594240 -999.00  +24.80  35.78     41  +10.80 1 2 2 1 1   888    0 14.33 -17.43 ----- 31.6 35.8 301.2 41.2 30.3 -22.1 30.2 -20.1 30.7 -21.9 31.3 -20.3
2026-02-11T16:16:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:16:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:16:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.594240
2026-02-11T16:16:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:16:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:16:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:16:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:16:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:16:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:15:47', tmtdew=16.7, humidity=34.83, cloud=0.0, wind=36.03, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:15:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:16:11.865 [DEBUG] [Thread-131960] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:16:11.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:16:11.959 [DEBUG] [Thread-131963] [transport.py] [_log()] starting thread (client mode): 0xa57d5720
2026-02-11T16:16:11.959 [DEBUG] [Thread-131963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:16:11.973 [DEBUG] [Thread-131963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:16:11.973 [INFO] [Thread-131963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:16:11.981 [DEBUG] [Thread-131963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:16:11.981 [DEBUG] [Thread-131963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:16:11.981 [DEBUG] [Thread-131963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:16:11.981 [DEBUG] [Thread-131963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:11.981 [DEBUG] [Thread-131963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:11.982 [DEBUG] [Thread-131963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:11.982 [DEBUG] [Thread-131963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:11.982 [DEBUG] [Thread-131963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:16:11.982 [DEBUG] [Thread-131963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:16:11.982 [DEBUG] [Thread-131963] [transport.py] [_log()] client lang: <none>
2026-02-11T16:16:11.982 [DEBUG] [Thread-131963] [transport.py] [_log()] server lang: <none>
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] kex follows: False
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] Compression: none
2026-02-11T16:16:11.983 [DEBUG] [Thread-131963] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:16:12.041 [DEBUG] [Thread-131963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:16:12.042 [DEBUG] [Thread-131963] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:16:12.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:16:12.043 [DEBUG] [Thread-131963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:16:12.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:16:12.101 [DEBUG] [Thread-131963] [transport.py] [_log()] userauth is OK
2026-02-11T16:16:12.101 [DEBUG] [Thread-131963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:16:12.101 [DEBUG] [Thread-131963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:16:12.101 [DEBUG] [Thread-131963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:16:12.102 [DEBUG] [Thread-131963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:16:12.121 [INFO] [Thread-131963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:16:12.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:16:12.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:16:12.922 [DEBUG] [Thread-131963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:16:12.922 [DEBUG] [Thread-131963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:16:12.970 [DEBUG] [Thread-131963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:16:12.970 [DEBUG] [Thread-131963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:16:12.979 [DEBUG] [Thread-131963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:16:12.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:16:12.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:16:12.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:16:13.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:16:13.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:16:13.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:16:13.012 [DEBUG] [Thread-131963] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:16:20.422 [DEBUG] [Thread-131965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:16:24.298 [DEBUG] [Thread-131966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:16:35.472 [DEBUG] [Thread-131967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:16:40.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:16:40.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:16:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:16:43.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:16:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:16:45.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 16, 23), 16.84, 34.57, 0.0, 37.65, 25.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:16:45.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:16:23
2026-02-11T16:16:45.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:16:45.637 [DEBUG] [Thread-131968] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ce0
2026-02-11T16:16:45.637 [DEBUG] [Thread-131968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:16:45.652 [DEBUG] [Thread-131968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:16:45.652 [INFO] [Thread-131968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] client lang: <none>
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] server lang: <none>
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] kex follows: False
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] Compression: none
2026-02-11T16:16:45.655 [DEBUG] [Thread-131968] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:16:45.672 [DEBUG] [Thread-131968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:16:45.672 [DEBUG] [Thread-131968] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:16:45.673 [DEBUG] [Thread-131968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:16:45.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:16:45.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:16:45.675 [DEBUG] [Thread-131968] [transport.py] [_log()] userauth is OK
2026-02-11T16:16:45.675 [DEBUG] [Thread-131968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:16:45.675 [DEBUG] [Thread-131968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:16:45.675 [DEBUG] [Thread-131968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:16:45.675 [DEBUG] [Thread-131968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:16:45.695 [INFO] [Thread-131968] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:16:45.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:16:46.521 [DEBUG] [Thread-131968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:16:46.521 [DEBUG] [Thread-131968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:16:46.521 [DEBUG] [Thread-131968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:16:46.562 [DEBUG] [Thread-131968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:16:46.563 [DEBUG] [Thread-131968] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:16:46.566 [DEBUG] [Thread-131968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:16:46.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:16:46.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:16:46.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:16:46.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:16:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:16:46.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:16:46.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:16:46.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:16:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:16:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.594586 -999.00  +24.90  37.35     41  +10.80 1 2 2 1 1   888    0 14.09 -23.80 ----- 39.0 37.4 297.4 41.3 30.2 -23.4 30.2 -19.8 30.7 -20.9 31.3 -20.2
2026-02-11T16:16:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:16:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:16:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.594586
2026-02-11T16:16:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:16:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:16:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:16:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:16:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:16:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:16:23', tmtdew=16.84, humidity=34.57, cloud=0.0, wind=37.65, temperature=25.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:16:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:16:46.593 [DEBUG] [Thread-131968] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:16:46.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:16:46.689 [DEBUG] [Thread-131971] [transport.py] [_log()] starting thread (client mode): 0xa5771ba0
2026-02-11T16:16:46.690 [DEBUG] [Thread-131971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:16:46.705 [DEBUG] [Thread-131971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:16:46.705 [INFO] [Thread-131971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:16:46.717 [DEBUG] [Thread-131971] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:16:46.718 [DEBUG] [Thread-131971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:16:46.718 [DEBUG] [Thread-131971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:16:46.718 [DEBUG] [Thread-131971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:46.718 [DEBUG] [Thread-131971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:16:46.718 [DEBUG] [Thread-131971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:46.718 [DEBUG] [Thread-131971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:16:46.719 [DEBUG] [Thread-131971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:16:46.719 [DEBUG] [Thread-131971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:16:46.719 [DEBUG] [Thread-131971] [transport.py] [_log()] client lang: <none>
2026-02-11T16:16:46.719 [DEBUG] [Thread-131971] [transport.py] [_log()] server lang: <none>
2026-02-11T16:16:46.719 [DEBUG] [Thread-131971] [transport.py] [_log()] kex follows: False
2026-02-11T16:16:46.719 [DEBUG] [Thread-131971] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:16:46.720 [DEBUG] [Thread-131971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:16:46.720 [DEBUG] [Thread-131971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:16:46.720 [DEBUG] [Thread-131971] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:16:46.720 [DEBUG] [Thread-131971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:16:46.720 [DEBUG] [Thread-131971] [transport.py] [_log()] Compression: none
2026-02-11T16:16:46.720 [DEBUG] [Thread-131971] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:16:46.773 [DEBUG] [Thread-131971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:16:46.773 [DEBUG] [Thread-131971] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:16:46.773 [DEBUG] [Thread-131971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:16:46.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:16:46.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:16:46.829 [DEBUG] [Thread-131971] [transport.py] [_log()] userauth is OK
2026-02-11T16:16:46.829 [DEBUG] [Thread-131971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:16:46.829 [DEBUG] [Thread-131971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:16:46.829 [DEBUG] [Thread-131971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:16:46.829 [DEBUG] [Thread-131971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:16:46.847 [INFO] [Thread-131971] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:16:46.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:16:46.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:16:47.673 [DEBUG] [Thread-131971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:16:47.673 [DEBUG] [Thread-131971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:16:47.721 [DEBUG] [Thread-131971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:16:47.721 [DEBUG] [Thread-131971] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:16:47.730 [DEBUG] [Thread-131971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:16:47.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:16:47.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')
2026-02-11T16:16:47.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:16:47.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:16:47.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:16:47.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:16:47.762 [DEBUG] [Thread-131971] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:16:50.509 [DEBUG] [Thread-131973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:05.562 [DEBUG] [Thread-131974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:17:17.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:17:17.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
2026-02-11T16:17:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 16, 58), 16.79, 34.33, 0.0, 32.43, 25.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:17:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:16:58
2026-02-11T16:17:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:17:20.138 [DEBUG] [Thread-131975] [transport.py] [_log()] starting thread (client mode): 0xa57d6080
2026-02-11T16:17:20.138 [DEBUG] [Thread-131975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:17:20.158 [DEBUG] [Thread-131975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:17:20.158 [INFO] [Thread-131975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:17:20.161 [DEBUG] [Thread-131975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:17:20.161 [DEBUG] [Thread-131975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] client lang: <none>
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] server lang: <none>
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] kex follows: False
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:17:20.162 [DEBUG] [Thread-131975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:17:20.163 [DEBUG] [Thread-131975] [transport.py] [_log()] Compression: none
2026-02-11T16:17:20.163 [DEBUG] [Thread-131975] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:17:20.182 [DEBUG] [Thread-131975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:17:20.183 [DEBUG] [Thread-131975] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:17:20.183 [DEBUG] [Thread-131975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:17:20.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:17:20.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:17:20.186 [DEBUG] [Thread-131975] [transport.py] [_log()] userauth is OK
2026-02-11T16:17:20.186 [DEBUG] [Thread-131975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:17:20.186 [DEBUG] [Thread-131975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:17:20.186 [DEBUG] [Thread-131975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:17:20.187 [DEBUG] [Thread-131975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:17:20.220 [INFO] [Thread-131975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:17:20.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:17:20.597 [DEBUG] [Thread-131977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:20.866 [DEBUG] [Thread-131975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:17:20.867 [DEBUG] [Thread-131975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:17:20.867 [DEBUG] [Thread-131975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:17:20.907 [DEBUG] [Thread-131975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:17:20.907 [DEBUG] [Thread-131975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:17:20.910 [DEBUG] [Thread-131975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:17:20.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:17:20.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:17:20.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:17:20.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:17:20.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:17:20.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:17:20.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:17:20.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:17:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:17:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.594933 -999.00  +25.00  33.44     41  +10.90 1 2 2 1 1   888    0 14.17 -26.10 ----- 29.2 33.4 292.4 41.6 30.3 -22.2 30.1 -20.7 30.7 -18.4 31.1 -21.1
2026-02-11T16:17:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:17:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:17:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.594933
2026-02-11T16:17:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:17:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:17:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:17:20.935 [DEBUG] [Thread-131975] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:17:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:17:20.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:17:20.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:16:58', tmtdew=16.79, humidity=34.33, cloud=0.0, wind=32.43, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:16:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:17:21.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:17:21.040 [DEBUG] [Thread-131979] [transport.py] [_log()] starting thread (client mode): 0xa5758040
2026-02-11T16:17:21.040 [DEBUG] [Thread-131979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:17:21.055 [DEBUG] [Thread-131979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:17:21.055 [INFO] [Thread-131979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:17:21.063 [DEBUG] [Thread-131979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] client lang: <none>
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] server lang: <none>
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] kex follows: False
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] Compression: none
2026-02-11T16:17:21.064 [DEBUG] [Thread-131979] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:17:21.123 [DEBUG] [Thread-131979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:17:21.123 [DEBUG] [Thread-131979] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:17:21.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:17:21.124 [DEBUG] [Thread-131979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:17:21.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:17:21.178 [DEBUG] [Thread-131979] [transport.py] [_log()] userauth is OK
2026-02-11T16:17:21.179 [DEBUG] [Thread-131979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:17:21.179 [DEBUG] [Thread-131979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:17:21.179 [DEBUG] [Thread-131979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:17:21.179 [DEBUG] [Thread-131979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:17:21.198 [INFO] [Thread-131979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:17:21.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:17:21.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:17:22.015 [DEBUG] [Thread-131979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:17:22.016 [DEBUG] [Thread-131979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:17:22.068 [DEBUG] [Thread-131979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:17:22.068 [DEBUG] [Thread-131979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:17:22.077 [DEBUG] [Thread-131979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:17:22.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:17:22.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:17:22.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:17:22.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:17:22.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:17:22.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:17:22.113 [DEBUG] [Thread-131979] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:17:24.332 [DEBUG] [Thread-131981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:35.632 [DEBUG] [Thread-131982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:40.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:40.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:50.680 [DEBUG] [Thread-131983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:17:52.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:17:52.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:17:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:17:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 17, 34), 17.29, 33.43, 0.0, 25.26, 25.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:17:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:17:34
2026-02-11T16:17:54.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:17:54.480 [DEBUG] [Thread-131984] [transport.py] [_log()] starting thread (client mode): 0xa57420e0
2026-02-11T16:17:54.480 [DEBUG] [Thread-131984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:17:54.499 [DEBUG] [Thread-131984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:17:54.499 [INFO] [Thread-131984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] client lang: <none>
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] server lang: <none>
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] kex follows: False
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] Compression: none
2026-02-11T16:17:54.502 [DEBUG] [Thread-131984] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:17:54.519 [DEBUG] [Thread-131984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:17:54.519 [DEBUG] [Thread-131984] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:17:54.520 [DEBUG] [Thread-131984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:17:54.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:17:54.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:17:54.522 [DEBUG] [Thread-131984] [transport.py] [_log()] userauth is OK
2026-02-11T16:17:54.522 [DEBUG] [Thread-131984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:17:54.522 [DEBUG] [Thread-131984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:17:54.522 [DEBUG] [Thread-131984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:17:54.522 [DEBUG] [Thread-131984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:17:54.547 [INFO] [Thread-131984] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:17:54.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:17:55.164 [DEBUG] [Thread-131984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:17:55.164 [DEBUG] [Thread-131984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:17:55.165 [DEBUG] [Thread-131984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:17:55.205 [DEBUG] [Thread-131984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:17:55.206 [DEBUG] [Thread-131984] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:17:55.209 [DEBUG] [Thread-131984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:17:55.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:17:55.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:17:55.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:17:55.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:17:55.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:17:55.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:17:55.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:17:55.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:17:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:17:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.595281 -999.00  +25.20  28.81     40  +10.90 1 2 1 1 1   888    0 13.80 -30.82 ----- 32.2 28.8 286.2 38.5 30.2 -23.4 30.1 -20.0 30.6 -19.7 31.2 -20.5
2026-02-11T16:17:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:17:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:17:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.595281
2026-02-11T16:17:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:17:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:17:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:17:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:17:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:17:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:17:34', tmtdew=17.29, humidity=33.43, cloud=0.0, wind=25.26, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:17:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:17:55.235 [DEBUG] [Thread-131984] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:17:55.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:17:55.332 [DEBUG] [Thread-131987] [transport.py] [_log()] starting thread (client mode): 0xa57400d0
2026-02-11T16:17:55.332 [DEBUG] [Thread-131987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:17:55.346 [DEBUG] [Thread-131987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:17:55.346 [INFO] [Thread-131987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] client lang: <none>
2026-02-11T16:17:55.354 [DEBUG] [Thread-131987] [transport.py] [_log()] server lang: <none>
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] kex follows: False
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] Compression: none
2026-02-11T16:17:55.355 [DEBUG] [Thread-131987] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:17:55.410 [DEBUG] [Thread-131987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:17:55.411 [DEBUG] [Thread-131987] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:17:55.412 [DEBUG] [Thread-131987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:17:55.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:17:55.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:17:55.467 [DEBUG] [Thread-131987] [transport.py] [_log()] userauth is OK
2026-02-11T16:17:55.467 [DEBUG] [Thread-131987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:17:55.467 [DEBUG] [Thread-131987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:17:55.467 [DEBUG] [Thread-131987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:17:55.467 [DEBUG] [Thread-131987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:17:55.486 [INFO] [Thread-131987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:17:55.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:17:55.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:17:56.342 [DEBUG] [Thread-131987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:17:56.342 [DEBUG] [Thread-131987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:17:56.390 [DEBUG] [Thread-131987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:17:56.391 [DEBUG] [Thread-131987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:17:56.400 [DEBUG] [Thread-131987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:17:56.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:17:56.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:17:56.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:17:56.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:17:56.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:17:56.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:17:56.436 [DEBUG] [Thread-131987] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:18:05.716 [DEBUG] [Thread-131989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:18:20.771 [DEBUG] [Thread-131990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:18:24.363 [DEBUG] [Thread-131991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:18:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:18:26.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:18:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:18:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 18, 11), 16.9, 34.05, 0.0, 41.13, 25.41, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:18:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:18:11
2026-02-11T16:18:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:18:29.220 [DEBUG] [Thread-131992] [transport.py] [_log()] starting thread (client mode): 0xa575a140
2026-02-11T16:18:29.220 [DEBUG] [Thread-131992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:18:29.241 [DEBUG] [Thread-131992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:18:29.241 [INFO] [Thread-131992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:18:29.244 [DEBUG] [Thread-131992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:18:29.244 [DEBUG] [Thread-131992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:18:29.244 [DEBUG] [Thread-131992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:18:29.244 [DEBUG] [Thread-131992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:18:29.244 [DEBUG] [Thread-131992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:18:29.244 [DEBUG] [Thread-131992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] client lang: <none>
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] server lang: <none>
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] kex follows: False
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] Compression: none
2026-02-11T16:18:29.245 [DEBUG] [Thread-131992] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:18:29.263 [DEBUG] [Thread-131992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:18:29.263 [DEBUG] [Thread-131992] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:18:29.264 [DEBUG] [Thread-131992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:18:29.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:18:29.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:18:29.266 [DEBUG] [Thread-131992] [transport.py] [_log()] userauth is OK
2026-02-11T16:18:29.266 [DEBUG] [Thread-131992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:18:29.266 [DEBUG] [Thread-131992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:18:29.266 [DEBUG] [Thread-131992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:18:29.266 [DEBUG] [Thread-131992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:18:29.292 [INFO] [Thread-131992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:18:29.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:18:29.919 [DEBUG] [Thread-131992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:18:29.919 [DEBUG] [Thread-131992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:18:29.920 [DEBUG] [Thread-131992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:18:29.960 [DEBUG] [Thread-131992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:18:29.961 [DEBUG] [Thread-131992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:18:29.964 [DEBUG] [Thread-131992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:18:29.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:18:29.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:18:29.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:18:29.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:18:29.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:18:29.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:18:29.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:18:29.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:18:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:18:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.595628 -999.00  +25.20  34.12     40  +10.90 1 2 2 1 1   888    0 13.95 -31.42 ----- 31.2 34.1 284.8 42.8 29.9 -24.5 30.1 -20.3 30.2 -21.7 31.1 -20.4
2026-02-11T16:18:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:18:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:18:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.595628
2026-02-11T16:18:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:18:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:18:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:18:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:18:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:18:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:18:11', tmtdew=16.9, humidity=34.05, cloud=0.0, wind=41.13, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:17:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:18:29.992 [DEBUG] [Thread-131992] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:18:30.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:18:30.088 [DEBUG] [Thread-131995] [transport.py] [_log()] starting thread (client mode): 0xa57d4f10
2026-02-11T16:18:30.088 [DEBUG] [Thread-131995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:18:30.102 [DEBUG] [Thread-131995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:18:30.102 [INFO] [Thread-131995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:18:30.110 [DEBUG] [Thread-131995] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:18:30.111 [DEBUG] [Thread-131995] [transport.py] [_log()] client lang: <none>
2026-02-11T16:18:30.112 [DEBUG] [Thread-131995] [transport.py] [_log()] server lang: <none>
2026-02-11T16:18:30.112 [DEBUG] [Thread-131995] [transport.py] [_log()] kex follows: False
2026-02-11T16:18:30.112 [DEBUG] [Thread-131995] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:18:30.112 [DEBUG] [Thread-131995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:18:30.112 [DEBUG] [Thread-131995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:18:30.112 [DEBUG] [Thread-131995] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:18:30.112 [DEBUG] [Thread-131995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:18:30.113 [DEBUG] [Thread-131995] [transport.py] [_log()] Compression: none
2026-02-11T16:18:30.113 [DEBUG] [Thread-131995] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:18:30.172 [DEBUG] [Thread-131995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:18:30.172 [DEBUG] [Thread-131995] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:18:30.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:18:30.174 [DEBUG] [Thread-131995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:18:30.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:18:30.228 [DEBUG] [Thread-131995] [transport.py] [_log()] userauth is OK
2026-02-11T16:18:30.228 [DEBUG] [Thread-131995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:18:30.229 [DEBUG] [Thread-131995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:18:30.229 [DEBUG] [Thread-131995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:18:30.229 [DEBUG] [Thread-131995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:18:30.252 [INFO] [Thread-131995] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:18:30.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:18:30.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:18:31.102 [DEBUG] [Thread-131995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:18:31.102 [DEBUG] [Thread-131995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:18:31.150 [DEBUG] [Thread-131995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:18:31.151 [DEBUG] [Thread-131995] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:18:31.160 [DEBUG] [Thread-131995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:18:31.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:18:31.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:18:31.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:18:31.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:18:31.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:18:31.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:18:31.195 [DEBUG] [Thread-131995] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:18:35.810 [DEBUG] [Thread-131997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:18:40.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:18:40.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:18:50.873 [DEBUG] [Thread-131998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:19:01.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:19:01.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:19:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:19:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 18, 46), 16.99, 34.3, 0.0, 40.3, 25.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:19:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:18:46
2026-02-11T16:19:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:19:03.628 [DEBUG] [Thread-131999] [transport.py] [_log()] starting thread (client mode): 0xa57727a0
2026-02-11T16:19:03.629 [DEBUG] [Thread-131999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:19:03.648 [DEBUG] [Thread-131999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:19:03.648 [INFO] [Thread-131999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] client lang: <none>
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] server lang: <none>
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] kex follows: False
2026-02-11T16:19:03.652 [DEBUG] [Thread-131999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:19:03.653 [DEBUG] [Thread-131999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:19:03.653 [DEBUG] [Thread-131999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:19:03.653 [DEBUG] [Thread-131999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:19:03.653 [DEBUG] [Thread-131999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:19:03.653 [DEBUG] [Thread-131999] [transport.py] [_log()] Compression: none
2026-02-11T16:19:03.653 [DEBUG] [Thread-131999] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:19:03.673 [DEBUG] [Thread-131999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:19:03.673 [DEBUG] [Thread-131999] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:19:03.674 [DEBUG] [Thread-131999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:19:03.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:19:03.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:19:03.676 [DEBUG] [Thread-131999] [transport.py] [_log()] userauth is OK
2026-02-11T16:19:03.676 [DEBUG] [Thread-131999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:19:03.676 [DEBUG] [Thread-131999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:19:03.676 [DEBUG] [Thread-131999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:19:03.677 [DEBUG] [Thread-131999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:19:03.699 [INFO] [Thread-131999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:19:03.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:19:04.314 [DEBUG] [Thread-131999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:19:04.315 [DEBUG] [Thread-131999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:19:04.315 [DEBUG] [Thread-131999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:19:04.356 [DEBUG] [Thread-131999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:19:04.356 [DEBUG] [Thread-131999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:19:04.360 [DEBUG] [Thread-131999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:19:04.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:19:04.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:19:04.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:19:04.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:19:04.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:19:04.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:19:04.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:19:04.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:19:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:19:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.595975 -999.00  +25.00  29.46     40  +10.80 1 2 1 1 1   888    0 13.82 -32.75 ----- 30.9 29.5 293.3 43.6 29.9 -22.1 29.8 -21.0 29.9 -21.5 30.9 -22.3
2026-02-11T16:19:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:19:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:19:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.595975
2026-02-11T16:19:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:19:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:19:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:19:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:19:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:19:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:18:46', tmtdew=16.99, humidity=34.3, cloud=0.0, wind=40.3, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:18:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:19:04.386 [DEBUG] [Thread-131999] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:19:04.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:19:04.488 [DEBUG] [Thread-132002] [transport.py] [_log()] starting thread (client mode): 0xa57720b0
2026-02-11T16:19:04.488 [DEBUG] [Thread-132002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:19:04.502 [DEBUG] [Thread-132002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:19:04.502 [INFO] [Thread-132002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:19:04.510 [DEBUG] [Thread-132002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:19:04.510 [DEBUG] [Thread-132002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:19:04.510 [DEBUG] [Thread-132002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:19:04.510 [DEBUG] [Thread-132002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:04.510 [DEBUG] [Thread-132002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:04.510 [DEBUG] [Thread-132002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] client lang: <none>
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] server lang: <none>
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] kex follows: False
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] Compression: none
2026-02-11T16:19:04.511 [DEBUG] [Thread-132002] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:19:04.568 [DEBUG] [Thread-132002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:19:04.569 [DEBUG] [Thread-132002] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:19:04.569 [DEBUG] [Thread-132002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:19:04.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:19:04.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:19:04.625 [DEBUG] [Thread-132002] [transport.py] [_log()] userauth is OK
2026-02-11T16:19:04.625 [DEBUG] [Thread-132002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:19:04.626 [DEBUG] [Thread-132002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:19:04.626 [DEBUG] [Thread-132002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:19:04.626 [DEBUG] [Thread-132002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:19:04.649 [INFO] [Thread-132002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:19:04.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:19:04.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:19:05.458 [DEBUG] [Thread-132002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:19:05.458 [DEBUG] [Thread-132002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:19:05.505 [DEBUG] [Thread-132002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:19:05.505 [DEBUG] [Thread-132002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:19:05.514 [DEBUG] [Thread-132002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:19:05.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:19:05.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:19:05.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
2026-02-11T16:19:05.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:19:05.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:19:05.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:19:05.551 [DEBUG] [Thread-132002] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:19:05.909 [DEBUG] [Thread-132004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:19:20.962 [DEBUG] [Thread-132005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:19:24.395 [DEBUG] [Thread-132006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:19:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:19:35.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:19:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:19:36.000 [DEBUG] [Thread-132007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:19:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 19, 22), 16.94, 34.39, 0.0, 36.1, 25.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:19:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:19:22
2026-02-11T16:19:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:19:37.955 [DEBUG] [Thread-132008] [transport.py] [_log()] starting thread (client mode): 0xa5759c90
2026-02-11T16:19:37.955 [DEBUG] [Thread-132008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:19:37.974 [DEBUG] [Thread-132008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:19:37.974 [INFO] [Thread-132008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] client lang: <none>
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] server lang: <none>
2026-02-11T16:19:37.978 [DEBUG] [Thread-132008] [transport.py] [_log()] kex follows: False
2026-02-11T16:19:37.979 [DEBUG] [Thread-132008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:19:37.979 [DEBUG] [Thread-132008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:19:37.979 [DEBUG] [Thread-132008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:19:37.979 [DEBUG] [Thread-132008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:19:37.979 [DEBUG] [Thread-132008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:19:37.979 [DEBUG] [Thread-132008] [transport.py] [_log()] Compression: none
2026-02-11T16:19:37.979 [DEBUG] [Thread-132008] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:19:37.997 [DEBUG] [Thread-132008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:19:37.998 [DEBUG] [Thread-132008] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:19:37.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:19:37.999 [DEBUG] [Thread-132008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:19:38.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:19:38.040 [DEBUG] [Thread-132008] [transport.py] [_log()] userauth is OK
2026-02-11T16:19:38.041 [DEBUG] [Thread-132008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:19:38.041 [DEBUG] [Thread-132008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:19:38.041 [DEBUG] [Thread-132008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:19:38.041 [DEBUG] [Thread-132008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:19:38.061 [INFO] [Thread-132008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:19:38.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:19:38.867 [DEBUG] [Thread-132008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:19:38.868 [DEBUG] [Thread-132008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:19:38.868 [DEBUG] [Thread-132008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:19:38.908 [DEBUG] [Thread-132008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:19:38.908 [DEBUG] [Thread-132008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:19:38.911 [DEBUG] [Thread-132008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:19:38.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:19:38.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:19:38.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:19:38.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:19:38.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:19:38.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:19:38.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:19:38.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:19:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:19:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.596322 -999.00  +24.60  36.72     41  +10.70 1 2 2 1 1   888    0 13.83 -37.14 ----- 34.8 36.7 301.6 50.4 29.8 -21.6 29.8 -19.1 30.0 -20.6 30.9 -19.6
2026-02-11T16:19:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:19:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:19:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.596322
2026-02-11T16:19:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:19:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:19:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:19:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:19:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:19:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:19:22', tmtdew=16.94, humidity=34.39, cloud=0.0, wind=36.1, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:18:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:19:38.940 [DEBUG] [Thread-132008] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:19:39.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:19:39.035 [DEBUG] [Thread-132011] [transport.py] [_log()] starting thread (client mode): 0xa57c24a0
2026-02-11T16:19:39.035 [DEBUG] [Thread-132011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:19:39.050 [DEBUG] [Thread-132011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:19:39.050 [INFO] [Thread-132011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:19:39.057 [DEBUG] [Thread-132011] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] client lang: <none>
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] server lang: <none>
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] kex follows: False
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] Compression: none
2026-02-11T16:19:39.058 [DEBUG] [Thread-132011] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:19:39.116 [DEBUG] [Thread-132011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:19:39.116 [DEBUG] [Thread-132011] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:19:39.117 [DEBUG] [Thread-132011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:19:39.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:19:39.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:19:39.172 [DEBUG] [Thread-132011] [transport.py] [_log()] userauth is OK
2026-02-11T16:19:39.173 [DEBUG] [Thread-132011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:19:39.173 [DEBUG] [Thread-132011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:19:39.173 [DEBUG] [Thread-132011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:19:39.173 [DEBUG] [Thread-132011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:19:39.195 [INFO] [Thread-132011] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:19:39.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:19:39.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:19:40.019 [DEBUG] [Thread-132011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:19:40.019 [DEBUG] [Thread-132011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:19:40.067 [DEBUG] [Thread-132011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:19:40.067 [DEBUG] [Thread-132011] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:19:40.076 [DEBUG] [Thread-132011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:19:40.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:19:40.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:19:40.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:19:40.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:19:40.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:19:40.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:19:40.110 [DEBUG] [Thread-132011] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:19:40.918 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:19:40.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:19:51.034 [DEBUG] [Thread-132013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:20:06.086 [DEBUG] [Thread-132014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:20:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:20:10.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:20:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:20:12.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 19, 57), 16.94, 34.07, 0.0, 33.26, 25.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:20:12.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:19:57
2026-02-11T16:20:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:20:12.758 [DEBUG] [Thread-132015] [transport.py] [_log()] starting thread (client mode): 0xa575b910
2026-02-11T16:20:12.758 [DEBUG] [Thread-132015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:20:12.781 [DEBUG] [Thread-132015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:20:12.781 [INFO] [Thread-132015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:20:12.785 [DEBUG] [Thread-132015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] client lang: <none>
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] server lang: <none>
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] kex follows: False
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] Compression: none
2026-02-11T16:20:12.786 [DEBUG] [Thread-132015] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:20:12.808 [DEBUG] [Thread-132015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:20:12.808 [DEBUG] [Thread-132015] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:20:12.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:20:12.809 [DEBUG] [Thread-132015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:20:12.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:20:12.811 [DEBUG] [Thread-132015] [transport.py] [_log()] userauth is OK
2026-02-11T16:20:12.811 [DEBUG] [Thread-132015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:20:12.811 [DEBUG] [Thread-132015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:20:12.812 [DEBUG] [Thread-132015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:20:12.812 [DEBUG] [Thread-132015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:20:12.839 [INFO] [Thread-132015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:20:12.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:20:13.687 [DEBUG] [Thread-132015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:20:13.688 [DEBUG] [Thread-132015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:20:13.688 [DEBUG] [Thread-132015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:20:13.728 [DEBUG] [Thread-132015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:20:13.728 [DEBUG] [Thread-132015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:20:13.731 [DEBUG] [Thread-132015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:20:13.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:20:13.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:20:13.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:20:13.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:20:13.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:20:13.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:20:13.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:20:13.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:20:13.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:20:13.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.597017 -999.00  +24.70  36.23     41  +10.90 1 2 2 1 1   888    0 13.28 -43.40 ----- 38.9 36.2 271.4 46.2 29.9 -20.7 29.7 -18.7 30.0 -24.9 30.8 -18.9
2026-02-11T16:20:13.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:20:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:20:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.597017
2026-02-11T16:20:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:20:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:20:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:20:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:20:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:20:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:19:57', tmtdew=16.94, humidity=34.07, cloud=0.0, wind=33.26, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:19:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:20:13.757 [DEBUG] [Thread-132015] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:20:13.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:20:13.852 [DEBUG] [Thread-132018] [transport.py] [_log()] starting thread (client mode): 0xa57705b0
2026-02-11T16:20:13.853 [DEBUG] [Thread-132018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:20:13.871 [DEBUG] [Thread-132018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:20:13.871 [INFO] [Thread-132018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:20:13.878 [DEBUG] [Thread-132018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:20:13.879 [DEBUG] [Thread-132018] [transport.py] [_log()] client lang: <none>
2026-02-11T16:20:13.880 [DEBUG] [Thread-132018] [transport.py] [_log()] server lang: <none>
2026-02-11T16:20:13.880 [DEBUG] [Thread-132018] [transport.py] [_log()] kex follows: False
2026-02-11T16:20:13.880 [DEBUG] [Thread-132018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:20:13.880 [DEBUG] [Thread-132018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:20:13.880 [DEBUG] [Thread-132018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:20:13.880 [DEBUG] [Thread-132018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:20:13.881 [DEBUG] [Thread-132018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:20:13.881 [DEBUG] [Thread-132018] [transport.py] [_log()] Compression: none
2026-02-11T16:20:13.881 [DEBUG] [Thread-132018] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:20:13.937 [DEBUG] [Thread-132018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:20:13.937 [DEBUG] [Thread-132018] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:20:13.937 [DEBUG] [Thread-132018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:20:13.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:20:13.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:20:13.993 [DEBUG] [Thread-132018] [transport.py] [_log()] userauth is OK
2026-02-11T16:20:13.993 [DEBUG] [Thread-132018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:20:13.993 [DEBUG] [Thread-132018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:20:13.993 [DEBUG] [Thread-132018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:20:13.993 [DEBUG] [Thread-132018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:20:14.011 [INFO] [Thread-132018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:20:14.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:20:14.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:20:14.898 [DEBUG] [Thread-132018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:20:14.899 [DEBUG] [Thread-132018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:20:14.946 [DEBUG] [Thread-132018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:20:14.946 [DEBUG] [Thread-132018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:20:14.958 [DEBUG] [Thread-132018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:20:14.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:20:14.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:20:14.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:20:14.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:20:14.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:20:14.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:20:15.002 [DEBUG] [Thread-132018] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:20:21.124 [DEBUG] [Thread-132020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:20:24.432 [DEBUG] [Thread-132021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:20:36.176 [DEBUG] [Thread-132022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:20:41.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:20:41.062 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:20:45.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:20:45.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:20:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:20:46.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 20, 33), 18.33, 31.47, 0.0, 41.46, 27.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:20:46.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:20:33
2026-02-11T16:20:47.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:20:47.529 [DEBUG] [Thread-132023] [transport.py] [_log()] starting thread (client mode): 0xa57704c0
2026-02-11T16:20:47.529 [DEBUG] [Thread-132023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:20:47.548 [DEBUG] [Thread-132023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:20:47.548 [INFO] [Thread-132023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] client lang: <none>
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] server lang: <none>
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] kex follows: False
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] Compression: none
2026-02-11T16:20:47.551 [DEBUG] [Thread-132023] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:20:47.568 [DEBUG] [Thread-132023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:20:47.568 [DEBUG] [Thread-132023] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:20:47.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:20:47.569 [DEBUG] [Thread-132023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:20:47.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:20:47.569 [DEBUG] [Thread-132023] [transport.py] [_log()] userauth is OK
2026-02-11T16:20:47.569 [DEBUG] [Thread-132023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:20:47.569 [DEBUG] [Thread-132023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:20:47.570 [DEBUG] [Thread-132023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:20:47.570 [DEBUG] [Thread-132023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:20:47.579 [INFO] [Thread-132023] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:20:47.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:20:48.200 [DEBUG] [Thread-132023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:20:48.200 [DEBUG] [Thread-132023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:20:48.200 [DEBUG] [Thread-132023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:20:48.240 [DEBUG] [Thread-132023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:20:48.241 [DEBUG] [Thread-132023] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:20:48.244 [DEBUG] [Thread-132023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:20:48.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:20:48.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:20:48.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:20:48.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:20:48.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:20:48.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:20:48.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:20:48.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:20:48.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:20:48.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.597364 -999.00  +24.60  27.42     41  +10.80 1 2 1 1 1   888    0 13.50 -45.24 ----- 26.0 27.4 278.2 39.8 29.5 -22.6 29.6 -20.1 29.6 -23.4 30.6 -20.1
2026-02-11T16:20:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:20:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:20:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.597364
2026-02-11T16:20:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:20:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:20:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:20:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:20:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:20:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:20:33', tmtdew=18.33, humidity=31.47, cloud=0.0, wind=41.46, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:20:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:20:48.273 [DEBUG] [Thread-132023] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:20:48.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:20:48.366 [DEBUG] [Thread-132026] [transport.py] [_log()] starting thread (client mode): 0x9eb06950
2026-02-11T16:20:48.366 [DEBUG] [Thread-132026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:20:48.380 [DEBUG] [Thread-132026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:20:48.380 [INFO] [Thread-132026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:20:48.387 [DEBUG] [Thread-132026] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:20:48.387 [DEBUG] [Thread-132026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:20:48.387 [DEBUG] [Thread-132026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:20:48.387 [DEBUG] [Thread-132026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:48.387 [DEBUG] [Thread-132026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:20:48.387 [DEBUG] [Thread-132026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] client lang: <none>
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] server lang: <none>
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] kex follows: False
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] Compression: none
2026-02-11T16:20:48.388 [DEBUG] [Thread-132026] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:20:48.449 [DEBUG] [Thread-132026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:20:48.450 [DEBUG] [Thread-132026] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:20:48.450 [DEBUG] [Thread-132026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:20:48.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:20:48.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:20:48.506 [DEBUG] [Thread-132026] [transport.py] [_log()] userauth is OK
2026-02-11T16:20:48.506 [DEBUG] [Thread-132026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:20:48.506 [DEBUG] [Thread-132026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:20:48.506 [DEBUG] [Thread-132026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:20:48.506 [DEBUG] [Thread-132026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:20:48.525 [INFO] [Thread-132026] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:20:48.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:20:48.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:20:49.364 [DEBUG] [Thread-132026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:20:49.364 [DEBUG] [Thread-132026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:20:49.411 [DEBUG] [Thread-132026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:20:49.412 [DEBUG] [Thread-132026] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:20:49.421 [DEBUG] [Thread-132026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:20:49.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:20:49.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:20:49.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:20:49.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:20:49.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:20:49.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:20:49.458 [DEBUG] [Thread-132026] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:20:51.213 [DEBUG] [Thread-132028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:06.277 [DEBUG] [Thread-132029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:19.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:21:19.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:21:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:21:21.314 [DEBUG] [Thread-132030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 21, 9), 16.55, 35.23, 0.0, 30.77, 25.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:21:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:21:09
2026-02-11T16:21:21.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:21:21.840 [DEBUG] [Thread-132031] [transport.py] [_log()] starting thread (client mode): 0xa57593c0
2026-02-11T16:21:21.840 [DEBUG] [Thread-132031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:21:21.861 [DEBUG] [Thread-132031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:21:21.861 [INFO] [Thread-132031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] client lang: <none>
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] server lang: <none>
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] kex follows: False
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] Compression: none
2026-02-11T16:21:21.865 [DEBUG] [Thread-132031] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:21:21.883 [DEBUG] [Thread-132031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:21:21.884 [DEBUG] [Thread-132031] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:21:21.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:21:21.885 [DEBUG] [Thread-132031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:21:21.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:21:21.887 [DEBUG] [Thread-132031] [transport.py] [_log()] userauth is OK
2026-02-11T16:21:21.887 [DEBUG] [Thread-132031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:21:21.887 [DEBUG] [Thread-132031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:21:21.887 [DEBUG] [Thread-132031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:21:21.887 [DEBUG] [Thread-132031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:21:21.911 [INFO] [Thread-132031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:21:21.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:21:22.530 [DEBUG] [Thread-132031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:21:22.530 [DEBUG] [Thread-132031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:21:22.530 [DEBUG] [Thread-132031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:21:22.571 [DEBUG] [Thread-132031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:21:22.571 [DEBUG] [Thread-132031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:21:22.574 [DEBUG] [Thread-132031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:21:22.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:21:22.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:21:22.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:21:22.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:21:22.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:21:22.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:21:22.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:21:22.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:21:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:21:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.597711 -999.00  +24.90  37.02     41  +10.90 1 2 2 1 1   888    0 13.25 -49.57 ----- 32.3 37.0 293.6 48.0 29.7 -19.4 29.6 -18.1 30.0 -17.6 30.6 -18.8
2026-02-11T16:21:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:21:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:21:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.597711
2026-02-11T16:21:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:21:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:21:22.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:21:22.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:21:22.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:21:22.599 [DEBUG] [Thread-132031] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:21:22.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:21:09', tmtdew=16.55, humidity=35.23, cloud=0.0, wind=30.77, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:20:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:21:22.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:21:22.698 [DEBUG] [Thread-132034] [transport.py] [_log()] starting thread (client mode): 0xa57d6590
2026-02-11T16:21:22.698 [DEBUG] [Thread-132034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:21:22.712 [DEBUG] [Thread-132034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:21:22.712 [INFO] [Thread-132034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:21:22.720 [DEBUG] [Thread-132034] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:21:22.720 [DEBUG] [Thread-132034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:21:22.720 [DEBUG] [Thread-132034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:21:22.720 [DEBUG] [Thread-132034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:22.720 [DEBUG] [Thread-132034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:22.720 [DEBUG] [Thread-132034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:22.720 [DEBUG] [Thread-132034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:22.721 [DEBUG] [Thread-132034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:21:22.721 [DEBUG] [Thread-132034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:21:22.721 [DEBUG] [Thread-132034] [transport.py] [_log()] client lang: <none>
2026-02-11T16:21:22.721 [DEBUG] [Thread-132034] [transport.py] [_log()] server lang: <none>
2026-02-11T16:21:22.721 [DEBUG] [Thread-132034] [transport.py] [_log()] kex follows: False
2026-02-11T16:21:22.721 [DEBUG] [Thread-132034] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:21:22.722 [DEBUG] [Thread-132034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:21:22.722 [DEBUG] [Thread-132034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:21:22.722 [DEBUG] [Thread-132034] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:21:22.722 [DEBUG] [Thread-132034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:21:22.722 [DEBUG] [Thread-132034] [transport.py] [_log()] Compression: none
2026-02-11T16:21:22.722 [DEBUG] [Thread-132034] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:21:22.778 [DEBUG] [Thread-132034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:21:22.778 [DEBUG] [Thread-132034] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:21:22.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:21:22.780 [DEBUG] [Thread-132034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:21:22.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:21:22.834 [DEBUG] [Thread-132034] [transport.py] [_log()] userauth is OK
2026-02-11T16:21:22.834 [DEBUG] [Thread-132034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:21:22.834 [DEBUG] [Thread-132034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:21:22.834 [DEBUG] [Thread-132034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:21:22.835 [DEBUG] [Thread-132034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:21:22.859 [INFO] [Thread-132034] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:21:22.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:21:22.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:21:23.674 [DEBUG] [Thread-132034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:21:23.675 [DEBUG] [Thread-132034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:21:23.722 [DEBUG] [Thread-132034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:21:23.723 [DEBUG] [Thread-132034] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:21:23.732 [DEBUG] [Thread-132034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:21:23.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:21:23.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:21:23.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:21:23.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:21:23.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:21:23.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:21:23.769 [DEBUG] [Thread-132034] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:21:24.487 [DEBUG] [Thread-132036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:36.357 [DEBUG] [Thread-132037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:41.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:41.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:51.412 [DEBUG] [Thread-132038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:21:53.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:21:53.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:21:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:21:55.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 21, 44), 16.37, 35.43, 0.0, 27.07, 25.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:21:55.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:21:44
2026-02-11T16:21:56.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:21:56.196 [DEBUG] [Thread-132039] [transport.py] [_log()] starting thread (client mode): 0xa575b8b0
2026-02-11T16:21:56.196 [DEBUG] [Thread-132039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:21:56.216 [DEBUG] [Thread-132039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:21:56.217 [INFO] [Thread-132039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] client lang: <none>
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] server lang: <none>
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] kex follows: False
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] Compression: none
2026-02-11T16:21:56.220 [DEBUG] [Thread-132039] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:21:56.238 [DEBUG] [Thread-132039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:21:56.238 [DEBUG] [Thread-132039] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:21:56.239 [DEBUG] [Thread-132039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:21:56.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:21:56.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:21:56.241 [DEBUG] [Thread-132039] [transport.py] [_log()] userauth is OK
2026-02-11T16:21:56.241 [DEBUG] [Thread-132039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:21:56.241 [DEBUG] [Thread-132039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:21:56.241 [DEBUG] [Thread-132039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:21:56.241 [DEBUG] [Thread-132039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:21:56.260 [INFO] [Thread-132039] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:21:56.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:21:56.908 [DEBUG] [Thread-132039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:21:56.908 [DEBUG] [Thread-132039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:21:56.908 [DEBUG] [Thread-132039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:21:56.948 [DEBUG] [Thread-132039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:21:56.949 [DEBUG] [Thread-132039] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:21:56.952 [DEBUG] [Thread-132039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:21:56.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:21:56.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:21:56.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:21:56.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:21:56.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:21:56.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:21:56.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:21:56.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:21:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:21:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.598058 -999.00  +24.60  29.22     42  +10.90 1 2 1 1 1   888    0 12.82 -62.37 ----- 26.3 29.2 296.4 37.4 29.7 -21.0 29.5 -19.7 30.0 -18.2 30.6 -19.2
2026-02-11T16:21:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:21:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:21:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.598058
2026-02-11T16:21:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:21:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:21:56.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:21:56.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:21:56.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:21:56.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:21:44', tmtdew=16.37, humidity=35.43, cloud=0.0, wind=27.07, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:21:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:21:56.979 [DEBUG] [Thread-132039] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:21:57.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:21:57.080 [DEBUG] [Thread-132042] [transport.py] [_log()] starting thread (client mode): 0xa57d4160
2026-02-11T16:21:57.080 [DEBUG] [Thread-132042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:21:57.094 [DEBUG] [Thread-132042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:21:57.094 [INFO] [Thread-132042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:21:57.104 [DEBUG] [Thread-132042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:21:57.104 [DEBUG] [Thread-132042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] client lang: <none>
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] server lang: <none>
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] kex follows: False
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] Compression: none
2026-02-11T16:21:57.105 [DEBUG] [Thread-132042] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:21:57.163 [DEBUG] [Thread-132042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:21:57.163 [DEBUG] [Thread-132042] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:21:57.164 [DEBUG] [Thread-132042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:21:57.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:21:57.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:21:57.218 [DEBUG] [Thread-132042] [transport.py] [_log()] userauth is OK
2026-02-11T16:21:57.219 [DEBUG] [Thread-132042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:21:57.219 [DEBUG] [Thread-132042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:21:57.219 [DEBUG] [Thread-132042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:21:57.219 [DEBUG] [Thread-132042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:21:57.244 [INFO] [Thread-132042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:21:57.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:21:57.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:21:58.044 [DEBUG] [Thread-132042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:21:58.044 [DEBUG] [Thread-132042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:21:58.092 [DEBUG] [Thread-132042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:21:58.092 [DEBUG] [Thread-132042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:21:58.101 [DEBUG] [Thread-132042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:21:58.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:21:58.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:21:58.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
2026-02-11T16:21:58.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:21:58.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:21:58.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:21:58.135 [DEBUG] [Thread-132042] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:22:06.449 [DEBUG] [Thread-132044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:22:21.504 [DEBUG] [Thread-132045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:22:24.538 [DEBUG] [Thread-132046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:22:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:22:28.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:22:28.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:22:30.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 22, 20), 16.36, 35.4, 0.0, 23.82, 24.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:22:30.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:22:20
2026-02-11T16:22:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:22:31.081 [DEBUG] [Thread-132047] [transport.py] [_log()] starting thread (client mode): 0xa57d5f30
2026-02-11T16:22:31.081 [DEBUG] [Thread-132047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:22:31.092 [DEBUG] [Thread-132047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:22:31.092 [INFO] [Thread-132047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:22:31.095 [DEBUG] [Thread-132047] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:22:31.095 [DEBUG] [Thread-132047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:22:31.095 [DEBUG] [Thread-132047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:22:31.095 [DEBUG] [Thread-132047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:22:31.095 [DEBUG] [Thread-132047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] client lang: <none>
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] server lang: <none>
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] kex follows: False
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] Compression: none
2026-02-11T16:22:31.096 [DEBUG] [Thread-132047] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:22:31.114 [DEBUG] [Thread-132047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:22:31.114 [DEBUG] [Thread-132047] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:22:31.115 [DEBUG] [Thread-132047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:22:31.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:22:31.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:22:31.117 [DEBUG] [Thread-132047] [transport.py] [_log()] userauth is OK
2026-02-11T16:22:31.117 [DEBUG] [Thread-132047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:22:31.117 [DEBUG] [Thread-132047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:22:31.117 [DEBUG] [Thread-132047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:22:31.117 [DEBUG] [Thread-132047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:22:31.136 [INFO] [Thread-132047] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:22:31.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:22:31.758 [DEBUG] [Thread-132047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:22:31.759 [DEBUG] [Thread-132047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:22:31.759 [DEBUG] [Thread-132047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:22:31.799 [DEBUG] [Thread-132047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:22:31.799 [DEBUG] [Thread-132047] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:22:31.803 [DEBUG] [Thread-132047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:22:31.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:22:31.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:22:31.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:22:31.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:22:31.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:22:31.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:22:31.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:22:31.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:22:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:22:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.598753 -999.00  +24.60  31.28     41  +10.70 1 2 2 1 1   888    0 12.60 -68.76 ----- 32.1 31.3 293.6 45.5 29.4 -23.1 29.2 -21.2 29.4 -22.4 30.2 -23.8
2026-02-11T16:22:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:22:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:22:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.598753
2026-02-11T16:22:31.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:22:31.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:22:31.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:22:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:22:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:22:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:22:20', tmtdew=16.36, humidity=35.4, cloud=0.0, wind=23.82, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:22:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:22:31.828 [DEBUG] [Thread-132047] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:22:31.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:22:31.930 [DEBUG] [Thread-132050] [transport.py] [_log()] starting thread (client mode): 0xa2d56fe0
2026-02-11T16:22:31.930 [DEBUG] [Thread-132050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:22:31.947 [DEBUG] [Thread-132050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:22:31.947 [INFO] [Thread-132050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] client lang: <none>
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] server lang: <none>
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] kex follows: False
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:22:31.955 [DEBUG] [Thread-132050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:22:31.956 [DEBUG] [Thread-132050] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:22:31.956 [DEBUG] [Thread-132050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:22:31.956 [DEBUG] [Thread-132050] [transport.py] [_log()] Compression: none
2026-02-11T16:22:31.956 [DEBUG] [Thread-132050] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:22:32.015 [DEBUG] [Thread-132050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:22:32.016 [DEBUG] [Thread-132050] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:22:32.016 [DEBUG] [Thread-132050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:22:32.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:22:32.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:22:32.075 [DEBUG] [Thread-132050] [transport.py] [_log()] userauth is OK
2026-02-11T16:22:32.076 [DEBUG] [Thread-132050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:22:32.076 [DEBUG] [Thread-132050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:22:32.076 [DEBUG] [Thread-132050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:22:32.076 [DEBUG] [Thread-132050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:22:32.095 [INFO] [Thread-132050] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:22:32.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:22:32.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:22:32.945 [DEBUG] [Thread-132050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:22:32.945 [DEBUG] [Thread-132050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:22:32.994 [DEBUG] [Thread-132050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:22:32.994 [DEBUG] [Thread-132050] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:22:33.005 [DEBUG] [Thread-132050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:22:33.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:22:33.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')
2026-02-11T16:22:33.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:22:33.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:22:33.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:22:33.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:22:33.046 [DEBUG] [Thread-132050] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:22:36.542 [DEBUG] [Thread-132052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:22:41.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:22:41.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:22:51.594 [DEBUG] [Thread-132053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:23:03.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:23:03.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:23:03.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
2026-02-11T16:23:04.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 22, 56), 16.25, 35.44, 0.0, 32.5, 24.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:23:04.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:22:56
2026-02-11T16:23:05.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:23:05.454 [DEBUG] [Thread-132054] [transport.py] [_log()] starting thread (client mode): 0xa2d55120
2026-02-11T16:23:05.455 [DEBUG] [Thread-132054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:23:05.476 [DEBUG] [Thread-132054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:23:05.476 [INFO] [Thread-132054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] client lang: <none>
2026-02-11T16:23:05.479 [DEBUG] [Thread-132054] [transport.py] [_log()] server lang: <none>
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] kex follows: False
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] Compression: none
2026-02-11T16:23:05.480 [DEBUG] [Thread-132054] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:23:05.498 [DEBUG] [Thread-132054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:23:05.498 [DEBUG] [Thread-132054] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:23:05.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:23:05.499 [DEBUG] [Thread-132054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:23:05.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:23:05.501 [DEBUG] [Thread-132054] [transport.py] [_log()] userauth is OK
2026-02-11T16:23:05.502 [DEBUG] [Thread-132054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:23:05.502 [DEBUG] [Thread-132054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:23:05.502 [DEBUG] [Thread-132054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:23:05.502 [DEBUG] [Thread-132054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:23:05.518 [INFO] [Thread-132054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:23:05.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:23:06.094 [DEBUG] [Thread-132054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:23:06.095 [DEBUG] [Thread-132054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:23:06.095 [DEBUG] [Thread-132054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:23:06.135 [DEBUG] [Thread-132054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:23:06.135 [DEBUG] [Thread-132054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:23:06.139 [DEBUG] [Thread-132054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:23:06.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:23:06.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:23:06.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:23:06.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:23:06.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:23:06.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:23:06.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:23:06.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:23:06.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:23:06.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.599100 -999.00  +24.40  24.39     42  +10.80 1 2 1 1 1   888    0 12.41 -77.18 ----- 23.8 24.4 285.2 36.5 29.0 -24.3 28.9 -22.6 29.0 -21.6 29.7 -23.7
2026-02-11T16:23:06.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:23:06.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:23:06.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.599100
2026-02-11T16:23:06.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:23:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:23:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:23:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:23:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:23:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:22:56', tmtdew=16.25, humidity=35.44, cloud=0.0, wind=32.5, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:22:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:23:06.166 [DEBUG] [Thread-132054] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:23:06.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:23:06.271 [DEBUG] [Thread-132057] [transport.py] [_log()] starting thread (client mode): 0xa57d4bb0
2026-02-11T16:23:06.271 [DEBUG] [Thread-132057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:23:06.286 [DEBUG] [Thread-132057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:23:06.286 [INFO] [Thread-132057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:23:06.294 [DEBUG] [Thread-132057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:23:06.294 [DEBUG] [Thread-132057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:23:06.294 [DEBUG] [Thread-132057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] client lang: <none>
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] server lang: <none>
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] kex follows: False
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] Compression: none
2026-02-11T16:23:06.295 [DEBUG] [Thread-132057] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:23:06.351 [DEBUG] [Thread-132057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:23:06.352 [DEBUG] [Thread-132057] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:23:06.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:23:06.353 [DEBUG] [Thread-132057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:23:06.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:23:06.407 [DEBUG] [Thread-132057] [transport.py] [_log()] userauth is OK
2026-02-11T16:23:06.408 [DEBUG] [Thread-132057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:23:06.408 [DEBUG] [Thread-132057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:23:06.408 [DEBUG] [Thread-132057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:23:06.408 [DEBUG] [Thread-132057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:23:06.426 [INFO] [Thread-132057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:23:06.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:23:06.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:23:06.633 [DEBUG] [Thread-132059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:23:07.262 [DEBUG] [Thread-132057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:23:07.263 [DEBUG] [Thread-132057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:23:07.310 [DEBUG] [Thread-132057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:23:07.310 [DEBUG] [Thread-132057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:23:07.320 [DEBUG] [Thread-132057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:23:07.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:23:07.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')
2026-02-11T16:23:07.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
2026-02-11T16:23:07.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:23:07.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:23:07.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:23:07.354 [DEBUG] [Thread-132057] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:23:21.686 [DEBUG] [Thread-132060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:23:24.594 [DEBUG] [Thread-132061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:23:36.720 [DEBUG] [Thread-132062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:23:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:23:37.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:23: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
2026-02-11T16:23:39.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 22, 56), 16.25, 35.44, 0.0, 32.5, 24.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:23:39.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:22:56
2026-02-11T16:23:39.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:23:39.812 [DEBUG] [Thread-132063] [transport.py] [_log()] starting thread (client mode): 0xa2d6ecb0
2026-02-11T16:23:39.812 [DEBUG] [Thread-132063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:23:39.832 [DEBUG] [Thread-132063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:23:39.832 [INFO] [Thread-132063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:23:39.833 [DEBUG] [Thread-132063] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] client lang: <none>
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] server lang: <none>
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] kex follows: False
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:23:39.834 [DEBUG] [Thread-132063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:23:39.835 [DEBUG] [Thread-132063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:23:39.835 [DEBUG] [Thread-132063] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:23:39.835 [DEBUG] [Thread-132063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:23:39.835 [DEBUG] [Thread-132063] [transport.py] [_log()] Compression: none
2026-02-11T16:23:39.835 [DEBUG] [Thread-132063] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:23:39.857 [DEBUG] [Thread-132063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:23:39.858 [DEBUG] [Thread-132063] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:23:39.858 [DEBUG] [Thread-132063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:23:39.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:23:39.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:23:39.860 [DEBUG] [Thread-132063] [transport.py] [_log()] userauth is OK
2026-02-11T16:23:39.860 [DEBUG] [Thread-132063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:23:39.860 [DEBUG] [Thread-132063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:23:39.861 [DEBUG] [Thread-132063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:23:39.861 [DEBUG] [Thread-132063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:23:39.884 [INFO] [Thread-132063] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:23:39.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:23:40.518 [DEBUG] [Thread-132063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:23:40.519 [DEBUG] [Thread-132063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:23:40.519 [DEBUG] [Thread-132063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:23:40.559 [DEBUG] [Thread-132063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:23:40.560 [DEBUG] [Thread-132063] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:23:40.563 [DEBUG] [Thread-132063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:23:40.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:23:40.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:23:40.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:23:40.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:23:40.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:23:40.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:23:40.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:23:40.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:23:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:23:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.599447 -999.00  +24.60  25.36     42  +10.90 1 2 1 1 1   888    0 12.09 -77.21 ----- 25.6 25.4 297.6 34.3 28.9 -22.9 28.8 -21.4 28.8 -21.3 29.4 -23.5
2026-02-11T16:23:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:23:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:23:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.599447
2026-02-11T16:23:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:23:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:23:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:23:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:23:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:23:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:22:56', tmtdew=16.25, humidity=35.44, cloud=0.0, wind=32.5, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:23:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:23:40.592 [DEBUG] [Thread-132063] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:23:40.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:23:40.688 [DEBUG] [Thread-132066] [transport.py] [_log()] starting thread (client mode): 0xa5740280
2026-02-11T16:23:40.689 [DEBUG] [Thread-132066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:23:40.703 [DEBUG] [Thread-132066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:23:40.703 [INFO] [Thread-132066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:23:40.710 [DEBUG] [Thread-132066] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:23:40.711 [DEBUG] [Thread-132066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] client lang: <none>
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] server lang: <none>
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] kex follows: False
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:23:40.712 [DEBUG] [Thread-132066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:23:40.713 [DEBUG] [Thread-132066] [transport.py] [_log()] Compression: none
2026-02-11T16:23:40.713 [DEBUG] [Thread-132066] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:23:40.768 [DEBUG] [Thread-132066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:23:40.769 [DEBUG] [Thread-132066] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:23:40.769 [DEBUG] [Thread-132066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:23:40.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:23:40.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:23:40.823 [DEBUG] [Thread-132066] [transport.py] [_log()] userauth is OK
2026-02-11T16:23:40.823 [DEBUG] [Thread-132066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:23:40.824 [DEBUG] [Thread-132066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:23:40.824 [DEBUG] [Thread-132066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:23:40.824 [DEBUG] [Thread-132066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:23:40.843 [INFO] [Thread-132066] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:23:40.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:23:40.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:23:41.486 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:23:41.487 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:23:41.646 [DEBUG] [Thread-132066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:23:41.647 [DEBUG] [Thread-132066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:23:41.695 [DEBUG] [Thread-132066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:23:41.695 [DEBUG] [Thread-132066] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:23:41.704 [DEBUG] [Thread-132066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:23:41.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:23:41.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')
2026-02-11T16:23:41.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:23:41.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:23:41.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:23:41.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:23:41.738 [DEBUG] [Thread-132066] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:23:51.759 [DEBUG] [Thread-132068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:24:06.808 [DEBUG] [Thread-132069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:24:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:24:11.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:24:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:24:13.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 23, 31), 16.24, 35.46, 0.0, 33.38, 24.94, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:24:13.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:23:31
2026-02-11T16:24:14.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:24:14.465 [DEBUG] [Thread-132070] [transport.py] [_log()] starting thread (client mode): 0xa2d565f0
2026-02-11T16:24:14.465 [DEBUG] [Thread-132070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:24:14.484 [DEBUG] [Thread-132070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:24:14.484 [INFO] [Thread-132070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] client lang: <none>
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] server lang: <none>
2026-02-11T16:24:14.488 [DEBUG] [Thread-132070] [transport.py] [_log()] kex follows: False
2026-02-11T16:24:14.489 [DEBUG] [Thread-132070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:24:14.489 [DEBUG] [Thread-132070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:24:14.489 [DEBUG] [Thread-132070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:24:14.489 [DEBUG] [Thread-132070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:24:14.489 [DEBUG] [Thread-132070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:24:14.489 [DEBUG] [Thread-132070] [transport.py] [_log()] Compression: none
2026-02-11T16:24:14.489 [DEBUG] [Thread-132070] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:24:14.505 [DEBUG] [Thread-132070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:24:14.505 [DEBUG] [Thread-132070] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:24:14.505 [DEBUG] [Thread-132070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:24:14.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:24:14.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:24:14.506 [DEBUG] [Thread-132070] [transport.py] [_log()] userauth is OK
2026-02-11T16:24:14.506 [DEBUG] [Thread-132070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:24:14.506 [DEBUG] [Thread-132070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:24:14.506 [DEBUG] [Thread-132070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:24:14.506 [DEBUG] [Thread-132070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:24:14.524 [INFO] [Thread-132070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:24:14.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:24:15.179 [DEBUG] [Thread-132070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:24:15.179 [DEBUG] [Thread-132070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:24:15.180 [DEBUG] [Thread-132070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:24:15.221 [DEBUG] [Thread-132070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:24:15.221 [DEBUG] [Thread-132070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:24:15.224 [DEBUG] [Thread-132070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:24:15.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:24:15.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:24:15.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:24:15.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:24:15.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:24:15.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:24:15.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:24:15.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:24:15.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:24:15.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.599795 -999.00  +24.30  31.26     42  +10.70 1 2 2 1 1   888    0 12.42 -76.09 ----- 29.6 31.3 304.4 39.1 28.7 -23.7 28.6 -22.9 28.4 -22.1 29.1 -23.2
2026-02-11T16:24:15.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:24:15.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:24:15.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.599795
2026-02-11T16:24:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:24:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:24:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:24:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:24:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:24:15.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:23:31', tmtdew=16.24, humidity=35.46, cloud=0.0, wind=33.38, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:23:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:24:15.250 [DEBUG] [Thread-132070] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:24:15.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:24:15.346 [DEBUG] [Thread-132073] [transport.py] [_log()] starting thread (client mode): 0xa2d56cb0
2026-02-11T16:24:15.346 [DEBUG] [Thread-132073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:24:15.360 [DEBUG] [Thread-132073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:24:15.360 [INFO] [Thread-132073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] client lang: <none>
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] server lang: <none>
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] kex follows: False
2026-02-11T16:24:15.368 [DEBUG] [Thread-132073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:24:15.369 [DEBUG] [Thread-132073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:24:15.369 [DEBUG] [Thread-132073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:24:15.369 [DEBUG] [Thread-132073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:24:15.369 [DEBUG] [Thread-132073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:24:15.369 [DEBUG] [Thread-132073] [transport.py] [_log()] Compression: none
2026-02-11T16:24:15.369 [DEBUG] [Thread-132073] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:24:15.430 [DEBUG] [Thread-132073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:24:15.431 [DEBUG] [Thread-132073] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:24:15.431 [DEBUG] [Thread-132073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:24:15.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:24:15.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:24:15.487 [DEBUG] [Thread-132073] [transport.py] [_log()] userauth is OK
2026-02-11T16:24:15.488 [DEBUG] [Thread-132073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:24:15.488 [DEBUG] [Thread-132073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:24:15.488 [DEBUG] [Thread-132073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:24:15.488 [DEBUG] [Thread-132073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:24:15.507 [INFO] [Thread-132073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:24:15.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:24:15.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:24:16.359 [DEBUG] [Thread-132073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:24:16.360 [DEBUG] [Thread-132073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:24:16.407 [DEBUG] [Thread-132073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:24:16.408 [DEBUG] [Thread-132073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:24:16.417 [DEBUG] [Thread-132073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:24:16.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:24:16.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:24:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:24:16.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:24:16.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:24:16.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:24:16.454 [DEBUG] [Thread-132073] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:24:21.846 [DEBUG] [Thread-132075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:24:24.645 [DEBUG] [Thread-132076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:24:36.897 [DEBUG] [Thread-132077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:24:41.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:24:41.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:24:46.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:24:46.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:24:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:24:48.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 24, 7), 16.09, 35.79, 0.0, 31.09, 24.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:24:48.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:24:07
2026-02-11T16:24:49.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:24:49.591 [DEBUG] [Thread-132078] [transport.py] [_log()] starting thread (client mode): 0x9eb06ce0
2026-02-11T16:24:49.591 [DEBUG] [Thread-132078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:24:49.612 [DEBUG] [Thread-132078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:24:49.612 [INFO] [Thread-132078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:24:49.615 [DEBUG] [Thread-132078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:24:49.615 [DEBUG] [Thread-132078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:24:49.615 [DEBUG] [Thread-132078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:24:49.615 [DEBUG] [Thread-132078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:49.615 [DEBUG] [Thread-132078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:49.615 [DEBUG] [Thread-132078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] client lang: <none>
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] server lang: <none>
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] kex follows: False
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] Compression: none
2026-02-11T16:24:49.616 [DEBUG] [Thread-132078] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:24:49.632 [DEBUG] [Thread-132078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:24:49.633 [DEBUG] [Thread-132078] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:24:49.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:24:49.634 [DEBUG] [Thread-132078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:24:49.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:24:49.636 [DEBUG] [Thread-132078] [transport.py] [_log()] userauth is OK
2026-02-11T16:24:49.637 [DEBUG] [Thread-132078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:24:49.637 [DEBUG] [Thread-132078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:24:49.637 [DEBUG] [Thread-132078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:24:49.637 [DEBUG] [Thread-132078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:24:49.661 [INFO] [Thread-132078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:24:49.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:24:50.305 [DEBUG] [Thread-132078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:24:50.306 [DEBUG] [Thread-132078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:24:50.306 [DEBUG] [Thread-132078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:24:50.346 [DEBUG] [Thread-132078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:24:50.346 [DEBUG] [Thread-132078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:24:50.350 [DEBUG] [Thread-132078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:24:50.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:24:50.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:24:50.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:24:50.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:24:50.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:24:50.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:24:50.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:24:50.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:24:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:24:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.600489 -999.00  +23.50  21.87     44  +10.70 1 2 1 1 1   888    0 11.84 -88.95 ----- 19.3 21.9 288.8 35.7 28.2 -23.8 28.2 -22.7 27.9 -21.5 28.4 -22.5
2026-02-11T16:24:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:24:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:24:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.600489
2026-02-11T16:24:50.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:24:50.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:24:50.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:24:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:24:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:24:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:24:07', tmtdew=16.09, humidity=35.79, cloud=0.0, wind=31.09, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:24:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:24:50.378 [DEBUG] [Thread-132078] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:24:50.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:24:50.474 [DEBUG] [Thread-132081] [transport.py] [_log()] starting thread (client mode): 0x9eb049a0
2026-02-11T16:24:50.474 [DEBUG] [Thread-132081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:24:50.488 [DEBUG] [Thread-132081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:24:50.488 [INFO] [Thread-132081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] client lang: <none>
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] server lang: <none>
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] kex follows: False
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:24:50.496 [DEBUG] [Thread-132081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:24:50.497 [DEBUG] [Thread-132081] [transport.py] [_log()] Compression: none
2026-02-11T16:24:50.497 [DEBUG] [Thread-132081] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:24:50.561 [DEBUG] [Thread-132081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:24:50.561 [DEBUG] [Thread-132081] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:24:50.562 [DEBUG] [Thread-132081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:24:50.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:24:50.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:24:50.616 [DEBUG] [Thread-132081] [transport.py] [_log()] userauth is OK
2026-02-11T16:24:50.617 [DEBUG] [Thread-132081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:24:50.617 [DEBUG] [Thread-132081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:24:50.617 [DEBUG] [Thread-132081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:24:50.617 [DEBUG] [Thread-132081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:24:50.636 [INFO] [Thread-132081] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:24:50.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:24:50.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:24:51.448 [DEBUG] [Thread-132081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:24:51.448 [DEBUG] [Thread-132081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:24:51.496 [DEBUG] [Thread-132081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:24:51.496 [DEBUG] [Thread-132081] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:24:51.505 [DEBUG] [Thread-132081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:24:51.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:24:51.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:24:51.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:24:51.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:24:51.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:24:51.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:24:51.542 [DEBUG] [Thread-132081] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:24:51.934 [DEBUG] [Thread-132083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:06.986 [DEBUG] [Thread-132084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:21.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:25:21.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:25:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:25:22.025 [DEBUG] [Thread-132085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 24, 43), 15.74, 36.79, 0.0, 29.62, 24.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:25:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:24:43
2026-02-11T16:25:24.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:25:24.467 [DEBUG] [Thread-132086] [transport.py] [_log()] starting thread (client mode): 0xa2d57e20
2026-02-11T16:25:24.467 [DEBUG] [Thread-132086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:25:24.488 [DEBUG] [Thread-132086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:25:24.488 [INFO] [Thread-132086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] client lang: <none>
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] server lang: <none>
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] kex follows: False
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] Compression: none
2026-02-11T16:25:24.491 [DEBUG] [Thread-132086] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:25:24.507 [DEBUG] [Thread-132086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:25:24.507 [DEBUG] [Thread-132086] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:25:24.507 [DEBUG] [Thread-132086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:25:24.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:25:24.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:25:24.554 [DEBUG] [Thread-132086] [transport.py] [_log()] userauth is OK
2026-02-11T16:25:24.554 [DEBUG] [Thread-132086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:25:24.554 [DEBUG] [Thread-132086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:25:24.554 [DEBUG] [Thread-132086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:25:24.554 [DEBUG] [Thread-132086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:25:24.574 [INFO] [Thread-132086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:25:24.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:25:24.706 [DEBUG] [Thread-132088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:25.225 [DEBUG] [Thread-132086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:25:25.225 [DEBUG] [Thread-132086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:25:25.225 [DEBUG] [Thread-132086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:25:25.266 [DEBUG] [Thread-132086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:25:25.267 [DEBUG] [Thread-132086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:25:25.270 [DEBUG] [Thread-132086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:25:25.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:25:25.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:25:25.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:25:25.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:25:25.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:25:25.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:25:25.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:25:25.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:25:25.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:25:25.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.600836 -999.00  +23.60  22.30     44  +10.90 1 2 1 1 1   888    0 10.97 -104.46 ----- 24.4 22.3 302.3 27.6 27.9 -23.5 28.0 -22.2 27.6 -23.0 28.2 -21.3
2026-02-11T16:25:25.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:25:25.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:25:25.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.600836
2026-02-11T16:25:25.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:25:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:25:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:25:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:25:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:25:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:24:43', tmtdew=15.74, humidity=36.79, cloud=0.0, wind=29.62, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:25:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:25:25.296 [DEBUG] [Thread-132086] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:25:25.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:25:25.392 [DEBUG] [Thread-132090] [transport.py] [_log()] starting thread (client mode): 0xa5740b50
2026-02-11T16:25:25.392 [DEBUG] [Thread-132090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:25:25.406 [DEBUG] [Thread-132090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:25:25.407 [INFO] [Thread-132090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:25:25.414 [DEBUG] [Thread-132090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:25:25.414 [DEBUG] [Thread-132090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:25:25.414 [DEBUG] [Thread-132090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:25:25.414 [DEBUG] [Thread-132090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:25:25.414 [DEBUG] [Thread-132090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:25:25.414 [DEBUG] [Thread-132090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] client lang: <none>
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] server lang: <none>
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] kex follows: False
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] Compression: none
2026-02-11T16:25:25.415 [DEBUG] [Thread-132090] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:25:25.473 [DEBUG] [Thread-132090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:25:25.473 [DEBUG] [Thread-132090] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:25:25.474 [DEBUG] [Thread-132090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:25:25.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:25:25.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:25:25.529 [DEBUG] [Thread-132090] [transport.py] [_log()] userauth is OK
2026-02-11T16:25:25.529 [DEBUG] [Thread-132090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:25:25.529 [DEBUG] [Thread-132090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:25:25.529 [DEBUG] [Thread-132090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:25:25.529 [DEBUG] [Thread-132090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:25:25.547 [INFO] [Thread-132090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:25:25.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:25:25.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:25:26.379 [DEBUG] [Thread-132090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:25:26.380 [DEBUG] [Thread-132090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:25:26.429 [DEBUG] [Thread-132090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:25:26.429 [DEBUG] [Thread-132090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:25:26.447 [DEBUG] [Thread-132090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:25:26.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:25:26.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:25:26.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
2026-02-11T16:25:26.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:25:26.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:25:26.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:25:26.487 [DEBUG] [Thread-132090] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:25:37.062 [DEBUG] [Thread-132092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:41.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:41.780 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:52.111 [DEBUG] [Thread-132093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:25:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:25:56.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:25:56.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:25:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 25, 19), 15.46, 37.35, 0.0, 27.3, 24.35, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:25:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:25:19
2026-02-11T16:25:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:25:59.252 [DEBUG] [Thread-132094] [transport.py] [_log()] starting thread (client mode): 0x9eb06c50
2026-02-11T16:25:59.252 [DEBUG] [Thread-132094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:25:59.274 [DEBUG] [Thread-132094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:25:59.274 [INFO] [Thread-132094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:25:59.277 [DEBUG] [Thread-132094] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:25:59.277 [DEBUG] [Thread-132094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:25:59.277 [DEBUG] [Thread-132094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:25:59.277 [DEBUG] [Thread-132094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:25:59.277 [DEBUG] [Thread-132094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] client lang: <none>
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] server lang: <none>
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] kex follows: False
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:25:59.278 [DEBUG] [Thread-132094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:25:59.279 [DEBUG] [Thread-132094] [transport.py] [_log()] Compression: none
2026-02-11T16:25:59.279 [DEBUG] [Thread-132094] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:25:59.296 [DEBUG] [Thread-132094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:25:59.297 [DEBUG] [Thread-132094] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:25:59.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:25:59.299 [DEBUG] [Thread-132094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:25:59.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:25:59.301 [DEBUG] [Thread-132094] [transport.py] [_log()] userauth is OK
2026-02-11T16:25:59.301 [DEBUG] [Thread-132094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:25:59.301 [DEBUG] [Thread-132094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:25:59.301 [DEBUG] [Thread-132094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:25:59.302 [DEBUG] [Thread-132094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:25:59.338 [INFO] [Thread-132094] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:25:59.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:26:00.017 [DEBUG] [Thread-132094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:26:00.017 [DEBUG] [Thread-132094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:26:00.017 [DEBUG] [Thread-132094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:26:00.058 [DEBUG] [Thread-132094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:26:00.058 [DEBUG] [Thread-132094] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:26:00.061 [DEBUG] [Thread-132094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:26:00.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:26:00.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:26:00.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:26:00.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:26:00.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:26:00.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:26:00.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:26:00.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:26:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:26:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.601183 -999.00  +23.60  20.78     45  +11.00 1 2 1 1 1   888    0 10.94 -120.62 ----- 26.5 20.8 301.2 28.0 27.9 -22.0 27.9 -21.6 27.7 -19.0 28.1 -20.5
2026-02-11T16:26:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:26:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:26:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.601183
2026-02-11T16:26:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:26:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:26:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:26:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:26:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:26:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:25:19', tmtdew=15.46, humidity=37.35, cloud=0.0, wind=27.3, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:25:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:26:00.087 [DEBUG] [Thread-132094] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:26:00.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:26:00.182 [DEBUG] [Thread-132097] [transport.py] [_log()] starting thread (client mode): 0x9eb04160
2026-02-11T16:26:00.182 [DEBUG] [Thread-132097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:26:00.197 [DEBUG] [Thread-132097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:26:00.197 [INFO] [Thread-132097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] client lang: <none>
2026-02-11T16:26:00.205 [DEBUG] [Thread-132097] [transport.py] [_log()] server lang: <none>
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] kex follows: False
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] Compression: none
2026-02-11T16:26:00.206 [DEBUG] [Thread-132097] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:26:00.265 [DEBUG] [Thread-132097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:26:00.266 [DEBUG] [Thread-132097] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:26:00.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:26:00.267 [DEBUG] [Thread-132097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:26:00.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:26:00.321 [DEBUG] [Thread-132097] [transport.py] [_log()] userauth is OK
2026-02-11T16:26:00.321 [DEBUG] [Thread-132097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:26:00.322 [DEBUG] [Thread-132097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:26:00.322 [DEBUG] [Thread-132097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:26:00.322 [DEBUG] [Thread-132097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:26:00.346 [INFO] [Thread-132097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:26:00.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:26:00.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:26:01.146 [DEBUG] [Thread-132097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:26:01.147 [DEBUG] [Thread-132097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:26:01.194 [DEBUG] [Thread-132097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:26:01.194 [DEBUG] [Thread-132097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:26:01.204 [DEBUG] [Thread-132097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:26:01.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:26:01.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:26:01.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:26:01.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:26:01.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:26:01.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:26:01.241 [DEBUG] [Thread-132097] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:26:07.144 [DEBUG] [Thread-132099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:26:22.183 [DEBUG] [Thread-132100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:26:24.757 [DEBUG] [Thread-132101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:26:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:26:31.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:26:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:26:33.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 25, 55), 15.29, 37.94, 0.0, 26.5, 24.35, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:26:33.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:25:55
2026-02-11T16:26:33.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:26:33.941 [DEBUG] [Thread-132102] [transport.py] [_log()] starting thread (client mode): 0xa57c1660
2026-02-11T16:26:33.941 [DEBUG] [Thread-132102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:26:33.961 [DEBUG] [Thread-132102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:26:33.962 [INFO] [Thread-132102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:26:33.965 [DEBUG] [Thread-132102] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:26:33.965 [DEBUG] [Thread-132102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:26:33.965 [DEBUG] [Thread-132102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:26:33.965 [DEBUG] [Thread-132102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] client lang: <none>
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] server lang: <none>
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] kex follows: False
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] Compression: none
2026-02-11T16:26:33.966 [DEBUG] [Thread-132102] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:26:33.984 [DEBUG] [Thread-132102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:26:33.985 [DEBUG] [Thread-132102] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:26:33.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:26:33.986 [DEBUG] [Thread-132102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:26:33.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:26:33.988 [DEBUG] [Thread-132102] [transport.py] [_log()] userauth is OK
2026-02-11T16:26:33.988 [DEBUG] [Thread-132102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:26:33.988 [DEBUG] [Thread-132102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:26:33.988 [DEBUG] [Thread-132102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:26:33.988 [DEBUG] [Thread-132102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:26:34.024 [INFO] [Thread-132102] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:26:34.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:26:34.625 [DEBUG] [Thread-132102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:26:34.625 [DEBUG] [Thread-132102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:26:34.625 [DEBUG] [Thread-132102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:26:34.665 [DEBUG] [Thread-132102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:26:34.666 [DEBUG] [Thread-132102] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:26:34.669 [DEBUG] [Thread-132102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:26:34.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:26:34.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:26:34.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:26:34.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:26:34.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:26:34.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:26:34.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:26:34.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:26:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:26:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.601531 -999.00  +23.90  22.79     45  +11.30 1 2 1 1 1   888    0 10.49 -123.56 ----- 23.3 22.8 270.4 35.1 27.8 -21.5 27.9 -21.2 27.5 -19.4 27.9 -20.1
2026-02-11T16:26:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:26:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:26:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.601531
2026-02-11T16:26:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:26:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:26:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:26:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:26:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:26:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:25:55', tmtdew=15.29, humidity=37.94, cloud=0.0, wind=26.5, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:26:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:26:34.696 [DEBUG] [Thread-132102] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:26:34.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:26:34.790 [DEBUG] [Thread-132105] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-11T16:26:34.790 [DEBUG] [Thread-132105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:26:34.805 [DEBUG] [Thread-132105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:26:34.805 [INFO] [Thread-132105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:26:34.815 [DEBUG] [Thread-132105] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] client lang: <none>
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] server lang: <none>
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] kex follows: False
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:26:34.816 [DEBUG] [Thread-132105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:26:34.817 [DEBUG] [Thread-132105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:26:34.817 [DEBUG] [Thread-132105] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:26:34.817 [DEBUG] [Thread-132105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:26:34.817 [DEBUG] [Thread-132105] [transport.py] [_log()] Compression: none
2026-02-11T16:26:34.817 [DEBUG] [Thread-132105] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:26:34.870 [DEBUG] [Thread-132105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:26:34.870 [DEBUG] [Thread-132105] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:26:34.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:26:34.872 [DEBUG] [Thread-132105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:26:34.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:26:34.933 [DEBUG] [Thread-132105] [transport.py] [_log()] userauth is OK
2026-02-11T16:26:34.934 [DEBUG] [Thread-132105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:26:34.934 [DEBUG] [Thread-132105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:26:34.934 [DEBUG] [Thread-132105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:26:34.934 [DEBUG] [Thread-132105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:26:34.959 [INFO] [Thread-132105] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:26:34.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:26:34.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:26:35.826 [DEBUG] [Thread-132105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:26:35.826 [DEBUG] [Thread-132105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:26:35.874 [DEBUG] [Thread-132105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:26:35.875 [DEBUG] [Thread-132105] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:26:35.884 [DEBUG] [Thread-132105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:26:35.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:26:35.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:26:35.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:26:35.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:26:35.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:26:35.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:26:35.919 [DEBUG] [Thread-132105] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:26:37.219 [DEBUG] [Thread-132107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:26:41.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:26:41.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:26:52.279 [DEBUG] [Thread-132108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:27:05.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:27:05.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:27:05.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:27:07.316 [DEBUG] [Thread-132109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:27:07.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 26, 31), 15.14, 38.29, 0.0, 24.35, 24.26, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:27:07.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:26:31
2026-02-11T16:27:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:27:08.319 [DEBUG] [Thread-132110] [transport.py] [_log()] starting thread (client mode): 0xa2db6b90
2026-02-11T16:27:08.319 [DEBUG] [Thread-132110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:27:08.339 [DEBUG] [Thread-132110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:27:08.340 [INFO] [Thread-132110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:27:08.342 [DEBUG] [Thread-132110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] client lang: <none>
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] server lang: <none>
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] kex follows: False
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:27:08.343 [DEBUG] [Thread-132110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:27:08.344 [DEBUG] [Thread-132110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:27:08.344 [DEBUG] [Thread-132110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:27:08.344 [DEBUG] [Thread-132110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:27:08.344 [DEBUG] [Thread-132110] [transport.py] [_log()] Compression: none
2026-02-11T16:27:08.344 [DEBUG] [Thread-132110] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:27:08.363 [DEBUG] [Thread-132110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:27:08.363 [DEBUG] [Thread-132110] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:27:08.364 [DEBUG] [Thread-132110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:27:08.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:27:08.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:27:08.404 [DEBUG] [Thread-132110] [transport.py] [_log()] userauth is OK
2026-02-11T16:27:08.405 [DEBUG] [Thread-132110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:27:08.405 [DEBUG] [Thread-132110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:27:08.405 [DEBUG] [Thread-132110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:27:08.405 [DEBUG] [Thread-132110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:27:08.427 [INFO] [Thread-132110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:27:08.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:27:09.033 [DEBUG] [Thread-132110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:27:09.034 [DEBUG] [Thread-132110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:27:09.034 [DEBUG] [Thread-132110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:27:09.074 [DEBUG] [Thread-132110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:27:09.074 [DEBUG] [Thread-132110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:27:09.078 [DEBUG] [Thread-132110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:27:09.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:27:09.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:27:09.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:27:09.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:27:09.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:27:09.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:27:09.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:27:09.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:27:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:27:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.601878 -999.00  +23.70  29.32     45  +11.10 1 2 1 1 1   888    0 10.75 -120.91 ----- 29.6 29.3 280.6 44.4 27.7 -22.2 27.8 -21.2 27.1 -22.2 27.9 -19.6
2026-02-11T16:27:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:27:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:27:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.601878
2026-02-11T16:27:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:27:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:27:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:27:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:27:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:27:09.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:26:31', tmtdew=15.14, humidity=38.29, cloud=0.0, wind=24.35, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:26:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:27:09.106 [DEBUG] [Thread-132110] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:27:09.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:27:09.201 [DEBUG] [Thread-132113] [transport.py] [_log()] starting thread (client mode): 0xa2d57be0
2026-02-11T16:27:09.201 [DEBUG] [Thread-132113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:27:09.218 [DEBUG] [Thread-132113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:27:09.218 [INFO] [Thread-132113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:27:09.226 [DEBUG] [Thread-132113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:27:09.226 [DEBUG] [Thread-132113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:27:09.226 [DEBUG] [Thread-132113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:27:09.226 [DEBUG] [Thread-132113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] client lang: <none>
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] server lang: <none>
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] kex follows: False
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] Compression: none
2026-02-11T16:27:09.227 [DEBUG] [Thread-132113] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:27:09.287 [DEBUG] [Thread-132113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:27:09.287 [DEBUG] [Thread-132113] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:27:09.288 [DEBUG] [Thread-132113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:27:09.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:27:09.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:27:09.346 [DEBUG] [Thread-132113] [transport.py] [_log()] userauth is OK
2026-02-11T16:27:09.346 [DEBUG] [Thread-132113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:27:09.347 [DEBUG] [Thread-132113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:27:09.347 [DEBUG] [Thread-132113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:27:09.347 [DEBUG] [Thread-132113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:27:09.366 [INFO] [Thread-132113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:27:09.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:27:09.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:27:10.232 [DEBUG] [Thread-132113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:27:10.233 [DEBUG] [Thread-132113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:27:10.280 [DEBUG] [Thread-132113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:27:10.281 [DEBUG] [Thread-132113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:27:10.290 [DEBUG] [Thread-132113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:27:10.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:27:10.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:27:10.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
2026-02-11T16:27:10.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:27:10.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:27:10.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:27:10.327 [DEBUG] [Thread-132113] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:27:22.357 [DEBUG] [Thread-132115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:27:24.805 [DEBUG] [Thread-132116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:27:37.408 [DEBUG] [Thread-132117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:27:40.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:27:40.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:27:40.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:27:42.066 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:27:42.067 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:27:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 27, 7), 15.27, 38.02, 0.0, 26.15, 24.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:27:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:27:07
2026-02-11T16:27:42.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:27:42.743 [DEBUG] [Thread-132118] [transport.py] [_log()] starting thread (client mode): 0xa5740280
2026-02-11T16:27:42.743 [DEBUG] [Thread-132118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:27:42.763 [DEBUG] [Thread-132118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:27:42.763 [INFO] [Thread-132118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:27:42.766 [DEBUG] [Thread-132118] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] client lang: <none>
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] server lang: <none>
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] kex follows: False
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] Compression: none
2026-02-11T16:27:42.767 [DEBUG] [Thread-132118] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:27:42.784 [DEBUG] [Thread-132118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:27:42.785 [DEBUG] [Thread-132118] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:27:42.785 [DEBUG] [Thread-132118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:27:42.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:27:42.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:27:42.829 [DEBUG] [Thread-132118] [transport.py] [_log()] userauth is OK
2026-02-11T16:27:42.829 [DEBUG] [Thread-132118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:27:42.829 [DEBUG] [Thread-132118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:27:42.829 [DEBUG] [Thread-132118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:27:42.830 [DEBUG] [Thread-132118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:27:42.864 [INFO] [Thread-132118] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:27:42.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:27:43.512 [DEBUG] [Thread-132118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:27:43.513 [DEBUG] [Thread-132118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:27:43.513 [DEBUG] [Thread-132118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:27:43.553 [DEBUG] [Thread-132118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:27:43.554 [DEBUG] [Thread-132118] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:27:43.557 [DEBUG] [Thread-132118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:27:43.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:27:43.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:27:43.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:27:43.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:27:43.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:27:43.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:27:43.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.602225 -999.00  +23.30  34.02     46  +11.10 1 2 2 1 1   888    0 10.61 -121.04 ----- 31.7 34.0 272.6 45.1 27.6 -19.6 27.7 -19.0 26.8 -23.5 27.8 -17.2
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.602225
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:27:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:27:43.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:27:43.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:27:43.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:27:43.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:27:07', tmtdew=15.27, humidity=38.02, cloud=0.0, wind=26.15, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:27:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:27:43.580 [DEBUG] [Thread-132118] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:27:43.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:27:43.669 [DEBUG] [Thread-132121] [transport.py] [_log()] starting thread (client mode): 0x9eb07940
2026-02-11T16:27:43.669 [DEBUG] [Thread-132121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:27:43.683 [DEBUG] [Thread-132121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:27:43.683 [INFO] [Thread-132121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:27:43.691 [DEBUG] [Thread-132121] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:27:43.691 [DEBUG] [Thread-132121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] client lang: <none>
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] server lang: <none>
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] kex follows: False
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] Compression: none
2026-02-11T16:27:43.692 [DEBUG] [Thread-132121] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:27:43.750 [DEBUG] [Thread-132121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:27:43.751 [DEBUG] [Thread-132121] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:27:43.751 [DEBUG] [Thread-132121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:27:43.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:27:43.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:27:43.810 [DEBUG] [Thread-132121] [transport.py] [_log()] userauth is OK
2026-02-11T16:27:43.810 [DEBUG] [Thread-132121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:27:43.810 [DEBUG] [Thread-132121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:27:43.810 [DEBUG] [Thread-132121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:27:43.810 [DEBUG] [Thread-132121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:27:43.828 [INFO] [Thread-132121] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:27:43.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:27:43.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:27:44.642 [DEBUG] [Thread-132121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:27:44.643 [DEBUG] [Thread-132121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:27:44.690 [DEBUG] [Thread-132121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:27:44.691 [DEBUG] [Thread-132121] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:27:44.700 [DEBUG] [Thread-132121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:27:44.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:27:44.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')
2026-02-11T16:27: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') -> 00000000
2026-02-11T16:27:44.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:27:44.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:27:44.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:27:44.734 [DEBUG] [Thread-132121] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:27:52.450 [DEBUG] [Thread-132123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:07.505 [DEBUG] [Thread-132124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:28:14.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:28:14.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:28:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 27, 43), 15.18, 38.39, 0.0, 25.6, 24.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:28:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:27:43
2026-02-11T16:28:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:28:17.221 [DEBUG] [Thread-132125] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-11T16:28:17.221 [DEBUG] [Thread-132125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:28:17.241 [DEBUG] [Thread-132125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:28:17.241 [INFO] [Thread-132125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:28:17.242 [DEBUG] [Thread-132125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:28:17.242 [DEBUG] [Thread-132125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] client lang: <none>
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] server lang: <none>
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] kex follows: False
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:28:17.243 [DEBUG] [Thread-132125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:28:17.244 [DEBUG] [Thread-132125] [transport.py] [_log()] Compression: none
2026-02-11T16:28:17.244 [DEBUG] [Thread-132125] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:28:17.262 [DEBUG] [Thread-132125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:28:17.262 [DEBUG] [Thread-132125] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:28:17.263 [DEBUG] [Thread-132125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:28:17.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:28:17.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:28:17.265 [DEBUG] [Thread-132125] [transport.py] [_log()] userauth is OK
2026-02-11T16:28:17.265 [DEBUG] [Thread-132125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:28:17.265 [DEBUG] [Thread-132125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:28:17.266 [DEBUG] [Thread-132125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:28:17.266 [DEBUG] [Thread-132125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:28:17.285 [INFO] [Thread-132125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:28:17.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:28:17.978 [DEBUG] [Thread-132125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:28:17.979 [DEBUG] [Thread-132125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:28:17.979 [DEBUG] [Thread-132125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:28:18.019 [DEBUG] [Thread-132125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:28:18.019 [DEBUG] [Thread-132125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:28:18.022 [DEBUG] [Thread-132125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:28:18.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:28:18.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:28:18.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:28:18.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:28:18.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:28:18.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:28:18.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:28:18.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:28:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:28:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.602572 -999.00  +23.40  24.49     46  +11.30 1 2 1 1 1   888    0 10.16 -133.18 ----- 27.0 24.5 265.4 28.1 27.2 -20.4 27.4 -19.9 -999.0 -999.0 27.5 -16.3
2026-02-11T16:28:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:28:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:28:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.602572
2026-02-11T16:28:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:28:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:28:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:28:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:28:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:28:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:27:43', tmtdew=15.18, humidity=38.39, cloud=0.0, wind=25.6, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:27:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:28:18.045 [DEBUG] [Thread-132125] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:28:18.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:28:18.133 [DEBUG] [Thread-132128] [transport.py] [_log()] starting thread (client mode): 0xa5772c20
2026-02-11T16:28:18.133 [DEBUG] [Thread-132128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:28:18.151 [DEBUG] [Thread-132128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:28:18.151 [INFO] [Thread-132128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:28:18.158 [DEBUG] [Thread-132128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:28:18.159 [DEBUG] [Thread-132128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:28:18.159 [DEBUG] [Thread-132128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:28:18.159 [DEBUG] [Thread-132128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:18.159 [DEBUG] [Thread-132128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] client lang: <none>
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] server lang: <none>
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] kex follows: False
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] Compression: none
2026-02-11T16:28:18.160 [DEBUG] [Thread-132128] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:28:18.217 [DEBUG] [Thread-132128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:28:18.218 [DEBUG] [Thread-132128] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:28:18.218 [DEBUG] [Thread-132128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:28:18.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:28:18.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:28:18.274 [DEBUG] [Thread-132128] [transport.py] [_log()] userauth is OK
2026-02-11T16:28:18.274 [DEBUG] [Thread-132128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:28:18.274 [DEBUG] [Thread-132128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:28:18.274 [DEBUG] [Thread-132128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:28:18.275 [DEBUG] [Thread-132128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:28:18.297 [INFO] [Thread-132128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:28:18.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:28:18.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:28:19.101 [DEBUG] [Thread-132128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:28:19.101 [DEBUG] [Thread-132128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:28:19.149 [DEBUG] [Thread-132128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:28:19.150 [DEBUG] [Thread-132128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:28:19.159 [DEBUG] [Thread-132128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:28:19.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:28:19.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:28:19.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:28:19.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:28:19.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:28:19.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:28:19.196 [DEBUG] [Thread-132128] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:28:22.540 [DEBUG] [Thread-132130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:24.869 [DEBUG] [Thread-132131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:37.604 [DEBUG] [Thread-132132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:42.209 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:42.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:49.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:28:49.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:28:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:28:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 28, 19), 15.49, 37.76, 0.0, 29.57, 24.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:28:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:28:19
2026-02-11T16:28:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:28:52.320 [DEBUG] [Thread-132133] [transport.py] [_log()] starting thread (client mode): 0xa5740e50
2026-02-11T16:28:52.321 [DEBUG] [Thread-132133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:28:52.341 [DEBUG] [Thread-132133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:28:52.341 [INFO] [Thread-132133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:28:52.344 [DEBUG] [Thread-132133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] client lang: <none>
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] server lang: <none>
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] kex follows: False
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:28:52.345 [DEBUG] [Thread-132133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:28:52.346 [DEBUG] [Thread-132133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:28:52.346 [DEBUG] [Thread-132133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:28:52.346 [DEBUG] [Thread-132133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:28:52.346 [DEBUG] [Thread-132133] [transport.py] [_log()] Compression: none
2026-02-11T16:28:52.346 [DEBUG] [Thread-132133] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:28:52.365 [DEBUG] [Thread-132133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:28:52.366 [DEBUG] [Thread-132133] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:28:52.367 [DEBUG] [Thread-132133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:28:52.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:28:52.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:28:52.369 [DEBUG] [Thread-132133] [transport.py] [_log()] userauth is OK
2026-02-11T16:28:52.370 [DEBUG] [Thread-132133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:28:52.370 [DEBUG] [Thread-132133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:28:52.370 [DEBUG] [Thread-132133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:28:52.370 [DEBUG] [Thread-132133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:28:52.390 [INFO] [Thread-132133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:28:52.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:28:52.641 [DEBUG] [Thread-132135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:28:53.024 [DEBUG] [Thread-132133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:28:53.024 [DEBUG] [Thread-132133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:28:53.025 [DEBUG] [Thread-132133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:28:53.065 [DEBUG] [Thread-132133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:28:53.065 [DEBUG] [Thread-132133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:28:53.068 [DEBUG] [Thread-132133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:28:53.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:28:53.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:28:53.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:28:53.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:28:53.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:28:53.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:28:53.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:28:53.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:28:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:28:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.602919 -999.00  +23.50  23.12     46  +11.20 1 2 1 1 1   888    0 9.85 -141.94 ----- 27.9 23.1 278.2 32.1 27.8 -18.5 27.7 -18.3 27.2 -17.8 27.9 -17.8
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.602919
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:28:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:28:19', tmtdew=15.49, humidity=37.76, cloud=0.0, wind=29.57, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:28:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:28:53.091 [DEBUG] [Thread-132133] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:28:53.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:28:53.182 [DEBUG] [Thread-132137] [transport.py] [_log()] starting thread (client mode): 0x9eb06ad0
2026-02-11T16:28:53.182 [DEBUG] [Thread-132137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:28:53.201 [DEBUG] [Thread-132137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:28:53.201 [INFO] [Thread-132137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:28:53.209 [DEBUG] [Thread-132137] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:28:53.209 [DEBUG] [Thread-132137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:28:53.209 [DEBUG] [Thread-132137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] client lang: <none>
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] server lang: <none>
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] kex follows: False
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] Compression: none
2026-02-11T16:28:53.210 [DEBUG] [Thread-132137] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:28:53.267 [DEBUG] [Thread-132137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:28:53.268 [DEBUG] [Thread-132137] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:28:53.268 [DEBUG] [Thread-132137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:28:53.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:28:53.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:28:53.323 [DEBUG] [Thread-132137] [transport.py] [_log()] userauth is OK
2026-02-11T16:28:53.323 [DEBUG] [Thread-132137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:28:53.324 [DEBUG] [Thread-132137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:28:53.324 [DEBUG] [Thread-132137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:28:53.324 [DEBUG] [Thread-132137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:28:53.342 [INFO] [Thread-132137] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:28:53.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:28:53.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:28:54.137 [DEBUG] [Thread-132137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:28:54.137 [DEBUG] [Thread-132137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:28:54.186 [DEBUG] [Thread-132137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:28:54.186 [DEBUG] [Thread-132137] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:28:54.195 [DEBUG] [Thread-132137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:28:54.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:28:54.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:28:54.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:28:54.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:28:54.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:28:54.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:28:54.233 [DEBUG] [Thread-132137] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:29:07.678 [DEBUG] [Thread-132139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:29:22.732 [DEBUG] [Thread-132140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:29:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:29:24.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:29:24.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:29:24.921 [DEBUG] [Thread-132141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:29:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 28, 54), 15.46, 37.52, 0.0, 26.93, 24.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:29:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:28:54
2026-02-11T16:29:26.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:29:26.745 [DEBUG] [Thread-132142] [transport.py] [_log()] starting thread (client mode): 0x9eb078b0
2026-02-11T16:29:26.745 [DEBUG] [Thread-132142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:29:26.767 [DEBUG] [Thread-132142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:29:26.767 [INFO] [Thread-132142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:29:26.770 [DEBUG] [Thread-132142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:29:26.770 [DEBUG] [Thread-132142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:29:26.770 [DEBUG] [Thread-132142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] client lang: <none>
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] server lang: <none>
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] kex follows: False
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] Compression: none
2026-02-11T16:29:26.771 [DEBUG] [Thread-132142] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:29:26.788 [DEBUG] [Thread-132142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:29:26.788 [DEBUG] [Thread-132142] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:29:26.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:29:26.790 [DEBUG] [Thread-132142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:29:26.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:29:26.792 [DEBUG] [Thread-132142] [transport.py] [_log()] userauth is OK
2026-02-11T16:29:26.792 [DEBUG] [Thread-132142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:29:26.792 [DEBUG] [Thread-132142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:29:26.792 [DEBUG] [Thread-132142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:29:26.792 [DEBUG] [Thread-132142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:29:26.828 [INFO] [Thread-132142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:29:26.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:29:27.494 [DEBUG] [Thread-132142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:29:27.494 [DEBUG] [Thread-132142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:29:27.495 [DEBUG] [Thread-132142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:29:27.535 [DEBUG] [Thread-132142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:29:27.536 [DEBUG] [Thread-132142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:29:27.539 [DEBUG] [Thread-132142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:29:27.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:29:27.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:29:27.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:29:27.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:29:27.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:29:27.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:29:27.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:29:27.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:29:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:29:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.603267 -999.00  +23.60  25.41     46  +11.30 1 2 1 1 1   888    0 9.18 -157.83 ----- 22.4 25.4 286.0 31.1 27.6 -18.7 27.6 -18.2 27.5 -17.2 28.0 -17.6
2026-02-11T16:29:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:29:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:29:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.603267
2026-02-11T16:29:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:29:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:29:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:29:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:29:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:29:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:28:54', tmtdew=15.46, humidity=37.52, cloud=0.0, wind=26.93, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:28:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:29:27.568 [DEBUG] [Thread-132142] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:29:27.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:29:27.666 [DEBUG] [Thread-132145] [transport.py] [_log()] starting thread (client mode): 0x9eb05240
2026-02-11T16:29:27.666 [DEBUG] [Thread-132145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:29:27.680 [DEBUG] [Thread-132145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:29:27.680 [INFO] [Thread-132145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] client lang: <none>
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] server lang: <none>
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] kex follows: False
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:29:27.688 [DEBUG] [Thread-132145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:29:27.689 [DEBUG] [Thread-132145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:29:27.689 [DEBUG] [Thread-132145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:29:27.689 [DEBUG] [Thread-132145] [transport.py] [_log()] Compression: none
2026-02-11T16:29:27.689 [DEBUG] [Thread-132145] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:29:27.752 [DEBUG] [Thread-132145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:29:27.753 [DEBUG] [Thread-132145] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:29:27.753 [DEBUG] [Thread-132145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:29:27.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:29:27.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:29:27.808 [DEBUG] [Thread-132145] [transport.py] [_log()] userauth is OK
2026-02-11T16:29:27.808 [DEBUG] [Thread-132145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:29:27.808 [DEBUG] [Thread-132145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:29:27.809 [DEBUG] [Thread-132145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:29:27.809 [DEBUG] [Thread-132145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:29:27.827 [INFO] [Thread-132145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:29:27.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:29:27.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:29:28.692 [DEBUG] [Thread-132145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:29:28.692 [DEBUG] [Thread-132145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:29:28.740 [DEBUG] [Thread-132145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:29:28.741 [DEBUG] [Thread-132145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:29:28.750 [DEBUG] [Thread-132145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:29:28.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:29:28.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:29:28.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:29:28.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:29:28.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:29:28.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:29:28.788 [DEBUG] [Thread-132145] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:29:37.772 [DEBUG] [Thread-132147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:29:42.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:29:42.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:29:52.827 [DEBUG] [Thread-132148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:29:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:29:58.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:29:58.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:30:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 29, 31), 15.21, 38.04, 0.0, 27.9, 24.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:30:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:29:31
2026-02-11T16:30:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:30:01.141 [DEBUG] [Thread-132149] [transport.py] [_log()] starting thread (client mode): 0xa2db6a70
2026-02-11T16:30:01.141 [DEBUG] [Thread-132149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:30:01.161 [DEBUG] [Thread-132149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:30:01.161 [INFO] [Thread-132149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:30:01.164 [DEBUG] [Thread-132149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] client lang: <none>
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] server lang: <none>
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] kex follows: False
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] Compression: none
2026-02-11T16:30:01.165 [DEBUG] [Thread-132149] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:30:01.185 [DEBUG] [Thread-132149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:30:01.186 [DEBUG] [Thread-132149] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:30:01.186 [DEBUG] [Thread-132149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:30:01.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:30:01.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:30:01.188 [DEBUG] [Thread-132149] [transport.py] [_log()] userauth is OK
2026-02-11T16:30:01.188 [DEBUG] [Thread-132149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:30:01.189 [DEBUG] [Thread-132149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:30:01.189 [DEBUG] [Thread-132149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:30:01.189 [DEBUG] [Thread-132149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:30:01.208 [INFO] [Thread-132149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:30:01.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:30:01.824 [DEBUG] [Thread-132149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:30:01.824 [DEBUG] [Thread-132149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:30:01.825 [DEBUG] [Thread-132149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:30:01.866 [DEBUG] [Thread-132149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:30:01.866 [DEBUG] [Thread-132149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:30:01.868 [DEBUG] [Thread-132149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:30:01.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:30:01.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:30:01.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:30:01.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:30:01.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:30:01.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:30:01.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:30:01.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.603614 -999.00  +24.10  19.12     45  +11.50 1 2 1 1 1   888    0 9.39 -164.58 ----- 22.0 19.1 280.4 27.3 27.8 -18.9 27.7 -18.2 27.9 -16.0 28.2 -16.5
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.603614
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:30:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:29:31', tmtdew=15.21, humidity=38.04, cloud=0.0, wind=27.9, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:29:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:30:01.879 [DEBUG] [Thread-132149] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:30:01.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:30:01.963 [DEBUG] [Thread-132152] [transport.py] [_log()] starting thread (client mode): 0xa57422f0
2026-02-11T16:30:01.963 [DEBUG] [Thread-132152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:30:01.978 [DEBUG] [Thread-132152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:30:01.978 [INFO] [Thread-132152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] client lang: <none>
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] server lang: <none>
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] kex follows: False
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] Compression: none
2026-02-11T16:30:01.986 [DEBUG] [Thread-132152] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:30:02.042 [DEBUG] [Thread-132152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:30:02.042 [DEBUG] [Thread-132152] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:30:02.042 [DEBUG] [Thread-132152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:30:02.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:30:02.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:30:02.099 [DEBUG] [Thread-132152] [transport.py] [_log()] userauth is OK
2026-02-11T16:30:02.099 [DEBUG] [Thread-132152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:30:02.099 [DEBUG] [Thread-132152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:30:02.100 [DEBUG] [Thread-132152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:30:02.100 [DEBUG] [Thread-132152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:30:02.121 [INFO] [Thread-132152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:30:02.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:30:02.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:30:02.946 [DEBUG] [Thread-132152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:30:02.946 [DEBUG] [Thread-132152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:30:02.995 [DEBUG] [Thread-132152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:30:02.995 [DEBUG] [Thread-132152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:30:03.003 [DEBUG] [Thread-132152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:30:03.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:30:03.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:30:03.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:30:03.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:30:03.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:30:03.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:30:03.037 [DEBUG] [Thread-132152] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:30:07.865 [DEBUG] [Thread-132154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:30:22.913 [DEBUG] [Thread-132155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:30:24.973 [DEBUG] [Thread-132156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:30:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:30:33.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:30:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:30:35.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 30, 7), 15.51, 37.42, 0.0, 29.77, 24.94, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:30:35.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:30:07
2026-02-11T16:30:35.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:30:35.573 [DEBUG] [Thread-132157] [transport.py] [_log()] starting thread (client mode): 0xa2d55240
2026-02-11T16:30:35.574 [DEBUG] [Thread-132157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:30:35.594 [DEBUG] [Thread-132157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:30:35.594 [INFO] [Thread-132157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:30:35.597 [DEBUG] [Thread-132157] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:30:35.597 [DEBUG] [Thread-132157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] client lang: <none>
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] server lang: <none>
2026-02-11T16:30:35.598 [DEBUG] [Thread-132157] [transport.py] [_log()] kex follows: False
2026-02-11T16:30:35.599 [DEBUG] [Thread-132157] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:30:35.599 [DEBUG] [Thread-132157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:30:35.599 [DEBUG] [Thread-132157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:30:35.599 [DEBUG] [Thread-132157] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:30:35.599 [DEBUG] [Thread-132157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:30:35.599 [DEBUG] [Thread-132157] [transport.py] [_log()] Compression: none
2026-02-11T16:30:35.599 [DEBUG] [Thread-132157] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:30:35.616 [DEBUG] [Thread-132157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:30:35.616 [DEBUG] [Thread-132157] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:30:35.617 [DEBUG] [Thread-132157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:30:35.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:30:35.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:30:35.619 [DEBUG] [Thread-132157] [transport.py] [_log()] userauth is OK
2026-02-11T16:30:35.619 [DEBUG] [Thread-132157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:30:35.619 [DEBUG] [Thread-132157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:30:35.619 [DEBUG] [Thread-132157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:30:35.619 [DEBUG] [Thread-132157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:30:35.643 [INFO] [Thread-132157] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:30:35.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:30:36.298 [DEBUG] [Thread-132157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:30:36.299 [DEBUG] [Thread-132157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:30:36.299 [DEBUG] [Thread-132157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:30:36.339 [DEBUG] [Thread-132157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:30:36.340 [DEBUG] [Thread-132157] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:30:36.343 [DEBUG] [Thread-132157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:30:36.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:30:36.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:30:36.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:30:36.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:30:36.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:30:36.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:30:36.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:30:36.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:30:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:30:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.604308 -999.00  +24.00  27.55     44  +11.20 1 2 1 1 1   888    0 8.26 -179.75 ----- 34.3 27.6 279.8 38.0 27.9 -20.8 27.9 -19.8 27.8 -18.5 28.4 -19.1
2026-02-11T16:30:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:30:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:30:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.604308
2026-02-11T16:30:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:30:07', tmtdew=15.51, humidity=37.42, cloud=0.0, wind=29.77, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:30:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:30:36.369 [DEBUG] [Thread-132157] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:30:36.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:30:36.464 [DEBUG] [Thread-132160] [transport.py] [_log()] starting thread (client mode): 0xa5758ca0
2026-02-11T16:30:36.464 [DEBUG] [Thread-132160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:30:36.479 [DEBUG] [Thread-132160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:30:36.479 [INFO] [Thread-132160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:30:36.486 [DEBUG] [Thread-132160] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] client lang: <none>
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] server lang: <none>
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] kex follows: False
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] Compression: none
2026-02-11T16:30:36.487 [DEBUG] [Thread-132160] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:30:36.543 [DEBUG] [Thread-132160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:30:36.544 [DEBUG] [Thread-132160] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:30:36.544 [DEBUG] [Thread-132160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:30:36.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:30:36.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:30:36.600 [DEBUG] [Thread-132160] [transport.py] [_log()] userauth is OK
2026-02-11T16:30:36.600 [DEBUG] [Thread-132160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:30:36.601 [DEBUG] [Thread-132160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:30:36.601 [DEBUG] [Thread-132160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:30:36.601 [DEBUG] [Thread-132160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:30:36.619 [INFO] [Thread-132160] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:30:36.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:30:36.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:30:37.431 [DEBUG] [Thread-132160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:30:37.432 [DEBUG] [Thread-132160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:30:37.479 [DEBUG] [Thread-132160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:30:37.479 [DEBUG] [Thread-132160] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:30:37.488 [DEBUG] [Thread-132160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:30:37.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:30:37.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:30:37.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:30:37.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:30:37.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:30:37.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:30:37.522 [DEBUG] [Thread-132160] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:30:37.947 [DEBUG] [Thread-132162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:30:42.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:30:42.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:30:52.997 [DEBUG] [Thread-132163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:31:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:31:07.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:31:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:31:08.032 [DEBUG] [Thread-132164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:31:09.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 30, 43), 16.04, 36.44, 0.0, 30.79, 25.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:31:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:30:43
2026-02-11T16:31:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:31:09.919 [DEBUG] [Thread-132165] [transport.py] [_log()] starting thread (client mode): 0x9eb05330
2026-02-11T16:31:09.920 [DEBUG] [Thread-132165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:31:09.934 [DEBUG] [Thread-132165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:31:09.935 [INFO] [Thread-132165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] client lang: <none>
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] server lang: <none>
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] kex follows: False
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:31:09.938 [DEBUG] [Thread-132165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:31:09.939 [DEBUG] [Thread-132165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:31:09.939 [DEBUG] [Thread-132165] [transport.py] [_log()] Compression: none
2026-02-11T16:31:09.939 [DEBUG] [Thread-132165] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:31:09.955 [DEBUG] [Thread-132165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:31:09.956 [DEBUG] [Thread-132165] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:31:09.956 [DEBUG] [Thread-132165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:31:09.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:31:09.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:31:09.958 [DEBUG] [Thread-132165] [transport.py] [_log()] userauth is OK
2026-02-11T16:31:09.958 [DEBUG] [Thread-132165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:31:09.958 [DEBUG] [Thread-132165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:31:09.958 [DEBUG] [Thread-132165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:31:09.959 [DEBUG] [Thread-132165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:31:09.976 [INFO] [Thread-132165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:31:09.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:31:10.811 [DEBUG] [Thread-132165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:31:10.811 [DEBUG] [Thread-132165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:31:10.811 [DEBUG] [Thread-132165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:31:10.852 [DEBUG] [Thread-132165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:31:10.853 [DEBUG] [Thread-132165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:31:10.856 [DEBUG] [Thread-132165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:31:10.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:31:10.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:31:10.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:31:10.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:31:10.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:31:10.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:31:10.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:31:10.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:31:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:31:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.604656 -999.00  +24.40  38.35     44  +11.30 1 2 2 1 1   888    0 8.43 -176.22 ----- 36.2 38.4 281.8 41.8 28.0 -20.6 27.9 -19.5 28.1 -17.4 28.7 -18.6
2026-02-11T16:31:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:31:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:31:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.604656
2026-02-11T16:31:10.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:31:10.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:31:10.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:31:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:31:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:31:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:30:43', tmtdew=16.04, humidity=36.44, cloud=0.0, wind=30.79, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:30:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:31:10.881 [DEBUG] [Thread-132165] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:31:10.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:31:10.976 [DEBUG] [Thread-132168] [transport.py] [_log()] starting thread (client mode): 0xa57d6350
2026-02-11T16:31:10.976 [DEBUG] [Thread-132168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:31:10.991 [DEBUG] [Thread-132168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:31:10.991 [INFO] [Thread-132168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] client lang: <none>
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] server lang: <none>
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] kex follows: False
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] Compression: none
2026-02-11T16:31:10.999 [DEBUG] [Thread-132168] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:31:11.057 [DEBUG] [Thread-132168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:31:11.057 [DEBUG] [Thread-132168] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:31:11.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:31:11.059 [DEBUG] [Thread-132168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:31:11.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:31:11.116 [DEBUG] [Thread-132168] [transport.py] [_log()] userauth is OK
2026-02-11T16:31:11.116 [DEBUG] [Thread-132168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:31:11.116 [DEBUG] [Thread-132168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:31:11.116 [DEBUG] [Thread-132168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:31:11.116 [DEBUG] [Thread-132168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:31:11.135 [INFO] [Thread-132168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:31:11.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:31:11.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:31:11.954 [DEBUG] [Thread-132168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:31:11.954 [DEBUG] [Thread-132168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:31:12.002 [DEBUG] [Thread-132168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:31:12.003 [DEBUG] [Thread-132168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:31:12.012 [DEBUG] [Thread-132168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:31:12.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:31:12.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')
2026-02-11T16:31:12.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:31:12.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:31:12.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:31:12.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:31:12.049 [DEBUG] [Thread-132168] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:31:23.067 [DEBUG] [Thread-132170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:31:25.029 [DEBUG] [Thread-132171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:31:38.118 [DEBUG] [Thread-132172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:31:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:31:42.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:31:42.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:31:42.643 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:31:42.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:31:43.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 31, 19), 16.39, 35.75, 0.0, 31.11, 25.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:31:43.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:31:19
2026-02-11T16:31:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:31:44.362 [DEBUG] [Thread-132173] [transport.py] [_log()] starting thread (client mode): 0xa2d57250
2026-02-11T16:31:44.362 [DEBUG] [Thread-132173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:31:44.382 [DEBUG] [Thread-132173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:31:44.382 [INFO] [Thread-132173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] client lang: <none>
2026-02-11T16:31:44.386 [DEBUG] [Thread-132173] [transport.py] [_log()] server lang: <none>
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] kex follows: False
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] Compression: none
2026-02-11T16:31:44.387 [DEBUG] [Thread-132173] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:31:44.405 [DEBUG] [Thread-132173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:31:44.406 [DEBUG] [Thread-132173] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:31:44.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:31:44.407 [DEBUG] [Thread-132173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:31:44.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:31:44.409 [DEBUG] [Thread-132173] [transport.py] [_log()] userauth is OK
2026-02-11T16:31:44.410 [DEBUG] [Thread-132173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:31:44.410 [DEBUG] [Thread-132173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:31:44.410 [DEBUG] [Thread-132173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:31:44.410 [DEBUG] [Thread-132173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:31:44.434 [INFO] [Thread-132173] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:31:44.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:31:45.077 [DEBUG] [Thread-132173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:31:45.077 [DEBUG] [Thread-132173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:31:45.078 [DEBUG] [Thread-132173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:31:45.118 [DEBUG] [Thread-132173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:31:45.119 [DEBUG] [Thread-132173] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:31:45.122 [DEBUG] [Thread-132173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:31:45.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:31:45.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:31:45.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:31:45.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:31:45.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:31:45.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:31:45.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:31:45.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:31:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:31:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.605003 -999.00  +24.70  34.47     43  +11.50 1 2 2 1 1   888    0 9.01 -159.26 ----- 35.5 34.5 302.6 37.6 28.2 -19.5 28.0 -18.8 28.4 -17.0 28.9 -18.7
2026-02-11T16:31:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:31:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:31:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.605003
2026-02-11T16:31:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:31:45.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:31:45.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:31:45.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:31:45.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:31:45.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:31:19', tmtdew=16.39, humidity=35.75, cloud=0.0, wind=31.11, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:31:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:31:45.149 [DEBUG] [Thread-132173] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:31:45.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:31:45.245 [DEBUG] [Thread-132176] [transport.py] [_log()] starting thread (client mode): 0xa5773fa0
2026-02-11T16:31:45.245 [DEBUG] [Thread-132176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:31:45.260 [DEBUG] [Thread-132176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:31:45.260 [INFO] [Thread-132176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] client lang: <none>
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] server lang: <none>
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] kex follows: False
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:31:45.268 [DEBUG] [Thread-132176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:31:45.269 [DEBUG] [Thread-132176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:31:45.269 [DEBUG] [Thread-132176] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:31:45.269 [DEBUG] [Thread-132176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:31:45.269 [DEBUG] [Thread-132176] [transport.py] [_log()] Compression: none
2026-02-11T16:31:45.269 [DEBUG] [Thread-132176] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:31:45.324 [DEBUG] [Thread-132176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:31:45.325 [DEBUG] [Thread-132176] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:31:45.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:31:45.326 [DEBUG] [Thread-132176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:31:45.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:31:45.381 [DEBUG] [Thread-132176] [transport.py] [_log()] userauth is OK
2026-02-11T16:31:45.381 [DEBUG] [Thread-132176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:31:45.381 [DEBUG] [Thread-132176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:31:45.381 [DEBUG] [Thread-132176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:31:45.381 [DEBUG] [Thread-132176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:31:45.399 [INFO] [Thread-132176] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:31:45.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:31:45.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:31:46.219 [DEBUG] [Thread-132176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:31:46.219 [DEBUG] [Thread-132176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:31:46.268 [DEBUG] [Thread-132176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:31:46.268 [DEBUG] [Thread-132176] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:31:46.277 [DEBUG] [Thread-132176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:31:46.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:31:46.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:31:46.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:31:46.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:31:46.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:31:46.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:31:46.316 [DEBUG] [Thread-132176] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:31:53.154 [DEBUG] [Thread-132178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:08.203 [DEBUG] [Thread-132179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:16.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:32:16.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:32:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:32:18.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 31, 55), 16.4, 35.75, 0.0, 40.72, 25.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:32:18.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:31:55
2026-02-11T16:32:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:32:18.987 [DEBUG] [Thread-132180] [transport.py] [_log()] starting thread (client mode): 0xa5773eb0
2026-02-11T16:32:18.987 [DEBUG] [Thread-132180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:32:19.001 [DEBUG] [Thread-132180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:32:19.001 [INFO] [Thread-132180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] client lang: <none>
2026-02-11T16:32:19.002 [DEBUG] [Thread-132180] [transport.py] [_log()] server lang: <none>
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] kex follows: False
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] Compression: none
2026-02-11T16:32:19.003 [DEBUG] [Thread-132180] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:32:19.012 [DEBUG] [Thread-132180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:32:19.013 [DEBUG] [Thread-132180] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:32:19.013 [DEBUG] [Thread-132180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:32:19.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:32:19.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:32:19.014 [DEBUG] [Thread-132180] [transport.py] [_log()] userauth is OK
2026-02-11T16:32:19.014 [DEBUG] [Thread-132180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:32:19.014 [DEBUG] [Thread-132180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:32:19.014 [DEBUG] [Thread-132180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:32:19.014 [DEBUG] [Thread-132180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:32:19.026 [INFO] [Thread-132180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:32:19.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:32:19.667 [DEBUG] [Thread-132180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:32:19.667 [DEBUG] [Thread-132180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:32:19.668 [DEBUG] [Thread-132180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:32:19.708 [DEBUG] [Thread-132180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:32:19.708 [DEBUG] [Thread-132180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:32:19.711 [DEBUG] [Thread-132180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:32:19.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:32:19.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:32:19.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:32:19.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:32:19.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:32:19.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:32:19.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:32:19.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:32:19.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:32:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.605350 -999.00  +24.10  34.60     44  +11.30 1 2 2 1 1   888    0 8.37 -182.04 ----- 34.6 34.6 299.0 44.0 28.3 -20.0 28.1 -19.4 28.4 -19.4 29.0 -19.1
2026-02-11T16:32:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:32:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:32:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.605350
2026-02-11T16:32:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:32:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:32:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:32:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:32:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:32:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:31:55', tmtdew=16.4, humidity=35.75, cloud=0.0, wind=40.72, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:31:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:32:19.737 [DEBUG] [Thread-132180] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:32:19.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:32:19.841 [DEBUG] [Thread-132183] [transport.py] [_log()] starting thread (client mode): 0xa5771d50
2026-02-11T16:32:19.841 [DEBUG] [Thread-132183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:32:19.856 [DEBUG] [Thread-132183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:32:19.856 [INFO] [Thread-132183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:32:19.863 [DEBUG] [Thread-132183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:32:19.863 [DEBUG] [Thread-132183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:32:19.863 [DEBUG] [Thread-132183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:32:19.863 [DEBUG] [Thread-132183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:19.863 [DEBUG] [Thread-132183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] client lang: <none>
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] server lang: <none>
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] kex follows: False
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] Compression: none
2026-02-11T16:32:19.864 [DEBUG] [Thread-132183] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:32:19.924 [DEBUG] [Thread-132183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:32:19.925 [DEBUG] [Thread-132183] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:32:19.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:32:19.926 [DEBUG] [Thread-132183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:32:19.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:32:19.985 [DEBUG] [Thread-132183] [transport.py] [_log()] userauth is OK
2026-02-11T16:32:19.986 [DEBUG] [Thread-132183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:32:19.986 [DEBUG] [Thread-132183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:32:19.986 [DEBUG] [Thread-132183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:32:19.986 [DEBUG] [Thread-132183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:32:20.004 [INFO] [Thread-132183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:32:20.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:32:20.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:32:20.816 [DEBUG] [Thread-132183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:32:20.816 [DEBUG] [Thread-132183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:32:20.864 [DEBUG] [Thread-132183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:32:20.864 [DEBUG] [Thread-132183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:32:20.873 [DEBUG] [Thread-132183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:32:20.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:32:20.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:32:20.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:32:20.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:32:20.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:32:20.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:32:20.914 [DEBUG] [Thread-132183] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:32:23.242 [DEBUG] [Thread-132185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:25.082 [DEBUG] [Thread-132186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:38.287 [DEBUG] [Thread-132187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:42.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:42.786 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:50.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:32:50.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:32:50.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:32:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 32, 31), 15.87, 36.79, 0.0, 39.1, 25.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:32:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:32:31
2026-02-11T16:32:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:32:53.323 [DEBUG] [Thread-132188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:32:53.331 [DEBUG] [Thread-132189] [transport.py] [_log()] starting thread (client mode): 0xa5740e50
2026-02-11T16:32:53.332 [DEBUG] [Thread-132189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:32:53.351 [DEBUG] [Thread-132189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:32:53.351 [INFO] [Thread-132189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:32:53.354 [DEBUG] [Thread-132189] [transport.py] [_log()] client lang: <none>
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] server lang: <none>
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] kex follows: False
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] Compression: none
2026-02-11T16:32:53.355 [DEBUG] [Thread-132189] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:32:53.370 [DEBUG] [Thread-132189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:32:53.370 [DEBUG] [Thread-132189] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:32:53.371 [DEBUG] [Thread-132189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:32:53.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:32:53.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:32:53.373 [DEBUG] [Thread-132189] [transport.py] [_log()] userauth is OK
2026-02-11T16:32:53.373 [DEBUG] [Thread-132189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:32:53.373 [DEBUG] [Thread-132189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:32:53.373 [DEBUG] [Thread-132189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:32:53.373 [DEBUG] [Thread-132189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:32:53.397 [INFO] [Thread-132189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:32:53.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:32:54.038 [DEBUG] [Thread-132189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:32:54.038 [DEBUG] [Thread-132189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:32:54.039 [DEBUG] [Thread-132189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:32:54.079 [DEBUG] [Thread-132189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:32:54.079 [DEBUG] [Thread-132189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:32:54.082 [DEBUG] [Thread-132189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:32:54.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:32:54.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:32:54.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:32:54.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:32:54.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:32:54.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:32:54.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:32:54.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:32:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:32:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.605697 -999.00  +23.60  33.01     45  +11.30 1 2 2 1 1   888    0 8.85 -163.43 ----- 31.4 33.0 298.2 39.6 28.2 -21.0 28.0 -20.1 28.5 -18.3 29.0 -19.5
2026-02-11T16:32:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:32:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:32:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.605697
2026-02-11T16:32:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:32:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:32:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:32:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:32:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:32:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:32:31', tmtdew=15.87, humidity=36.79, cloud=0.0, wind=39.1, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:32:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:32:54.108 [DEBUG] [Thread-132189] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:32:54.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:32:54.210 [DEBUG] [Thread-132192] [transport.py] [_log()] starting thread (client mode): 0x9eb061a0
2026-02-11T16:32:54.210 [DEBUG] [Thread-132192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:32:54.225 [DEBUG] [Thread-132192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:32:54.225 [INFO] [Thread-132192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:32:54.232 [DEBUG] [Thread-132192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] client lang: <none>
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] server lang: <none>
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] kex follows: False
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:32:54.233 [DEBUG] [Thread-132192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:32:54.234 [DEBUG] [Thread-132192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:32:54.234 [DEBUG] [Thread-132192] [transport.py] [_log()] Compression: none
2026-02-11T16:32:54.234 [DEBUG] [Thread-132192] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:32:54.293 [DEBUG] [Thread-132192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:32:54.294 [DEBUG] [Thread-132192] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:32:54.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:32:54.295 [DEBUG] [Thread-132192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:32:54.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:32:54.349 [DEBUG] [Thread-132192] [transport.py] [_log()] userauth is OK
2026-02-11T16:32:54.350 [DEBUG] [Thread-132192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:32:54.350 [DEBUG] [Thread-132192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:32:54.350 [DEBUG] [Thread-132192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:32:54.350 [DEBUG] [Thread-132192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:32:54.369 [INFO] [Thread-132192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:32:54.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:32:54.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:32:55.177 [DEBUG] [Thread-132192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:32:55.177 [DEBUG] [Thread-132192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:32:55.225 [DEBUG] [Thread-132192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:32:55.225 [DEBUG] [Thread-132192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:32:55.234 [DEBUG] [Thread-132192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:32:55.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:32:55.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:32:55.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:32:55.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:32:55.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:32:55.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:32:55.270 [DEBUG] [Thread-132192] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:33:08.355 [DEBUG] [Thread-132194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:33:23.399 [DEBUG] [Thread-132195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:33:25.135 [DEBUG] [Thread-132196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:33:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:33:25.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:33:25.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:33:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 33, 6), 15.62, 37.32, 0.0, 33.61, 24.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:33:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:33:06
2026-02-11T16:33:27.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:33:27.870 [DEBUG] [Thread-132197] [transport.py] [_log()] starting thread (client mode): 0xa57d5d20
2026-02-11T16:33:27.870 [DEBUG] [Thread-132197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:33:27.889 [DEBUG] [Thread-132197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:33:27.889 [INFO] [Thread-132197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:33:27.890 [DEBUG] [Thread-132197] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:33:27.890 [DEBUG] [Thread-132197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] client lang: <none>
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] server lang: <none>
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] kex follows: False
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] Compression: none
2026-02-11T16:33:27.891 [DEBUG] [Thread-132197] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:33:27.903 [DEBUG] [Thread-132197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:33:27.903 [DEBUG] [Thread-132197] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:33:27.904 [DEBUG] [Thread-132197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:33:27.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:33:27.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:33:27.906 [DEBUG] [Thread-132197] [transport.py] [_log()] userauth is OK
2026-02-11T16:33:27.906 [DEBUG] [Thread-132197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:33:27.906 [DEBUG] [Thread-132197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:33:27.906 [DEBUG] [Thread-132197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:33:27.906 [DEBUG] [Thread-132197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:33:27.930 [INFO] [Thread-132197] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:33:27.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:33:28.566 [DEBUG] [Thread-132197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:33:28.567 [DEBUG] [Thread-132197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:33:28.567 [DEBUG] [Thread-132197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:33:28.608 [DEBUG] [Thread-132197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:33:28.608 [DEBUG] [Thread-132197] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:33:28.611 [DEBUG] [Thread-132197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:33:28.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:33:28.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:33:28.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:33:28.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:33:28.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:33:28.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:33:28.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:33:28.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:33:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:33:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.606044 -999.00  +23.60  25.78     46  +11.30 1 2 1 1 1   888    0 9.00 -154.72 ----- 23.3 25.8 293.4 34.2 28.2 -21.3 28.0 -20.4 28.6 -18.3 29.1 -18.8
2026-02-11T16:33:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:33:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:33:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.606044
2026-02-11T16:33:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:33:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:33:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:33:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:33:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:33:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:33:06', tmtdew=15.62, humidity=37.32, cloud=0.0, wind=33.61, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:32:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:33:28.639 [DEBUG] [Thread-132197] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:33:28.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:33:28.735 [DEBUG] [Thread-132200] [transport.py] [_log()] starting thread (client mode): 0xa2db6f50
2026-02-11T16:33:28.735 [DEBUG] [Thread-132200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:33:28.750 [DEBUG] [Thread-132200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:33:28.750 [INFO] [Thread-132200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] client lang: <none>
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] server lang: <none>
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] kex follows: False
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:33:28.758 [DEBUG] [Thread-132200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:33:28.759 [DEBUG] [Thread-132200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:33:28.759 [DEBUG] [Thread-132200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:33:28.759 [DEBUG] [Thread-132200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:33:28.759 [DEBUG] [Thread-132200] [transport.py] [_log()] Compression: none
2026-02-11T16:33:28.759 [DEBUG] [Thread-132200] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:33:28.819 [DEBUG] [Thread-132200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:33:28.820 [DEBUG] [Thread-132200] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:33:28.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:33:28.821 [DEBUG] [Thread-132200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:33:28.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:33:28.878 [DEBUG] [Thread-132200] [transport.py] [_log()] userauth is OK
2026-02-11T16:33:28.878 [DEBUG] [Thread-132200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:33:28.879 [DEBUG] [Thread-132200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:33:28.879 [DEBUG] [Thread-132200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:33:28.879 [DEBUG] [Thread-132200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:33:28.898 [INFO] [Thread-132200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:33:28.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:33:28.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:33:29.733 [DEBUG] [Thread-132200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:33:29.733 [DEBUG] [Thread-132200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:33:29.781 [DEBUG] [Thread-132200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:33:29.781 [DEBUG] [Thread-132200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:33:29.791 [DEBUG] [Thread-132200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:33:29.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:33:29.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')
2026-02-11T16:33:29.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
2026-02-11T16:33:29.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:33:29.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:33:29.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:33:29.827 [DEBUG] [Thread-132200] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:33:38.436 [DEBUG] [Thread-132202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:33:42.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:33:42.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:33:53.489 [DEBUG] [Thread-132203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:33:59.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:33:59.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:33:59.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:34:01.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 33, 41), 16.37, 35.61, 0.0, 26.68, 26.05, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:34:01.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:33:41
2026-02-11T16:34:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:34:02.234 [DEBUG] [Thread-132204] [transport.py] [_log()] starting thread (client mode): 0xa57d43d0
2026-02-11T16:34:02.234 [DEBUG] [Thread-132204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:34:02.254 [DEBUG] [Thread-132204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:34:02.254 [INFO] [Thread-132204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] client lang: <none>
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] server lang: <none>
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] kex follows: False
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] Compression: none
2026-02-11T16:34:02.257 [DEBUG] [Thread-132204] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:34:02.274 [DEBUG] [Thread-132204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:34:02.274 [DEBUG] [Thread-132204] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:34:02.275 [DEBUG] [Thread-132204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:34:02.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:34:02.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:34:02.277 [DEBUG] [Thread-132204] [transport.py] [_log()] userauth is OK
2026-02-11T16:34:02.277 [DEBUG] [Thread-132204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:34:02.277 [DEBUG] [Thread-132204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:34:02.277 [DEBUG] [Thread-132204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:34:02.277 [DEBUG] [Thread-132204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:34:02.292 [INFO] [Thread-132204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:34:02.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:34:03.079 [DEBUG] [Thread-132204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:34:03.079 [DEBUG] [Thread-132204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:34:03.080 [DEBUG] [Thread-132204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:34:03.120 [DEBUG] [Thread-132204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:34:03.120 [DEBUG] [Thread-132204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:34:03.123 [DEBUG] [Thread-132204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:34:03.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:34:03.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:34:03.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:34:03.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:34:03.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:34:03.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:34:03.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:34:03.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:34:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:34:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.606392 -999.00  +23.90  18.78     45  +11.50 1 2 1 1 1   888    0 9.28 -148.61 ----- 19.9 18.8 297.8 24.7 28.2 -20.5 28.1 -19.3 28.8 -17.0 29.2 -18.4
2026-02-11T16:34:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:34:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:34:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.606392
2026-02-11T16:34:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:34:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:34:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:34:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:34:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:34:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:33:41', tmtdew=16.37, humidity=35.61, cloud=0.0, wind=26.68, temperature=26.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:33:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:34:03.145 [DEBUG] [Thread-132204] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:34:03.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:34:03.241 [DEBUG] [Thread-132207] [transport.py] [_log()] starting thread (client mode): 0xa2d54820
2026-02-11T16:34:03.241 [DEBUG] [Thread-132207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:34:03.255 [DEBUG] [Thread-132207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:34:03.256 [INFO] [Thread-132207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:34:03.263 [DEBUG] [Thread-132207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:34:03.263 [DEBUG] [Thread-132207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:34:03.263 [DEBUG] [Thread-132207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:34:03.263 [DEBUG] [Thread-132207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:03.263 [DEBUG] [Thread-132207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:03.263 [DEBUG] [Thread-132207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] client lang: <none>
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] server lang: <none>
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] kex follows: False
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:34:03.264 [DEBUG] [Thread-132207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:34:03.265 [DEBUG] [Thread-132207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:34:03.265 [DEBUG] [Thread-132207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:34:03.265 [DEBUG] [Thread-132207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:34:03.265 [DEBUG] [Thread-132207] [transport.py] [_log()] Compression: none
2026-02-11T16:34:03.265 [DEBUG] [Thread-132207] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:34:03.322 [DEBUG] [Thread-132207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:34:03.323 [DEBUG] [Thread-132207] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:34:03.323 [DEBUG] [Thread-132207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:34:03.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:34:03.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:34:03.378 [DEBUG] [Thread-132207] [transport.py] [_log()] userauth is OK
2026-02-11T16:34:03.379 [DEBUG] [Thread-132207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:34:03.379 [DEBUG] [Thread-132207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:34:03.379 [DEBUG] [Thread-132207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:34:03.379 [DEBUG] [Thread-132207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:34:03.398 [INFO] [Thread-132207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:34:03.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:34:03.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:34:04.271 [DEBUG] [Thread-132207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:34:04.271 [DEBUG] [Thread-132207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:34:04.319 [DEBUG] [Thread-132207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:34:04.319 [DEBUG] [Thread-132207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:34:04.328 [DEBUG] [Thread-132207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:34:04.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:34:04.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:34:04.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:34:04.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:34:04.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:34:04.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:34:04.366 [DEBUG] [Thread-132207] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:34:08.528 [DEBUG] [Thread-132209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:34:23.580 [DEBUG] [Thread-132210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:34:25.177 [DEBUG] [Thread-132211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:34:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:34:34.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:34:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:34:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 34, 18), 15.33, 37.94, 0.0, 29.38, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:34:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:34:18
2026-02-11T16:34:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:34:37.062 [DEBUG] [Thread-132212] [transport.py] [_log()] starting thread (client mode): 0xa2db69b0
2026-02-11T16:34:37.062 [DEBUG] [Thread-132212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:34:37.083 [DEBUG] [Thread-132212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:34:37.083 [INFO] [Thread-132212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:34:37.086 [DEBUG] [Thread-132212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:34:37.086 [DEBUG] [Thread-132212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:34:37.086 [DEBUG] [Thread-132212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:34:37.086 [DEBUG] [Thread-132212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:37.086 [DEBUG] [Thread-132212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:37.086 [DEBUG] [Thread-132212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:37.086 [DEBUG] [Thread-132212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] client lang: <none>
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] server lang: <none>
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] kex follows: False
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] Compression: none
2026-02-11T16:34:37.087 [DEBUG] [Thread-132212] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:34:37.099 [DEBUG] [Thread-132212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:34:37.099 [DEBUG] [Thread-132212] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:34:37.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:34:37.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:34:37.101 [DEBUG] [Thread-132212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:34:37.102 [DEBUG] [Thread-132212] [transport.py] [_log()] userauth is OK
2026-02-11T16:34:37.102 [DEBUG] [Thread-132212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:34:37.102 [DEBUG] [Thread-132212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:34:37.102 [DEBUG] [Thread-132212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:34:37.102 [DEBUG] [Thread-132212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:34:37.137 [INFO] [Thread-132212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:34:37.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:34:37.797 [DEBUG] [Thread-132212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:34:37.797 [DEBUG] [Thread-132212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:34:37.797 [DEBUG] [Thread-132212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:34:37.839 [DEBUG] [Thread-132212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:34:37.839 [DEBUG] [Thread-132212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:34:37.842 [DEBUG] [Thread-132212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:34:37.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:34:37.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:34:37.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:34:37.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:34:37.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:34:37.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:34:37.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:34:37.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:34:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:34:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.606739 -999.00  +24.20  17.60     45  +11.50 1 2 1 1 1   888    0 8.86 -155.62 ----- 20.3 17.6 291.4 27.9 28.4 -21.1 28.3 -20.0 28.8 -20.1 29.4 -19.4
2026-02-11T16:34:37.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:34:37.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:34:37.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.606739
2026-02-11T16:34:37.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:34:37.867 [DEBUG] [Thread-132212] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:34:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:34:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:34:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:34:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:34:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:34:18', tmtdew=15.33, humidity=37.94, cloud=0.0, wind=29.38, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:33:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:34:37.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:34:37.972 [DEBUG] [Thread-132215] [transport.py] [_log()] starting thread (client mode): 0x9eb066b0
2026-02-11T16:34:37.973 [DEBUG] [Thread-132215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:34:37.987 [DEBUG] [Thread-132215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:34:37.987 [INFO] [Thread-132215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:34:37.994 [DEBUG] [Thread-132215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:34:37.994 [DEBUG] [Thread-132215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:34:37.994 [DEBUG] [Thread-132215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:34:37.994 [DEBUG] [Thread-132215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:37.994 [DEBUG] [Thread-132215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] client lang: <none>
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] server lang: <none>
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] kex follows: False
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] Compression: none
2026-02-11T16:34:37.995 [DEBUG] [Thread-132215] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:34:38.053 [DEBUG] [Thread-132215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:34:38.053 [DEBUG] [Thread-132215] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:34:38.054 [DEBUG] [Thread-132215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:34:38.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:34:38.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:34:38.109 [DEBUG] [Thread-132215] [transport.py] [_log()] userauth is OK
2026-02-11T16:34:38.110 [DEBUG] [Thread-132215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:34:38.110 [DEBUG] [Thread-132215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:34:38.110 [DEBUG] [Thread-132215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:34:38.110 [DEBUG] [Thread-132215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:34:38.132 [INFO] [Thread-132215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:34:38.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:34:38.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:34:38.618 [DEBUG] [Thread-132217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:34:38.948 [DEBUG] [Thread-132215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:34:38.949 [DEBUG] [Thread-132215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:34:38.996 [DEBUG] [Thread-132215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:34:38.996 [DEBUG] [Thread-132215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:34:39.004 [DEBUG] [Thread-132215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:34:39.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:34:39.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')
2026-02-11T16:34:39.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:34:39.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:34:39.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:34:39.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:34:39.038 [DEBUG] [Thread-132215] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:34:43.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:34:43.065 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:34:53.667 [DEBUG] [Thread-132218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:35:08.703 [DEBUG] [Thread-132219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:35:09.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:35:09.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:35:09.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:35:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 34, 53), 15.26, 38.05, 0.0, 37.16, 24.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:35:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:34:53
2026-02-11T16:35:11.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:35:11.489 [DEBUG] [Thread-132220] [transport.py] [_log()] starting thread (client mode): 0x9eb06d40
2026-02-11T16:35:11.489 [DEBUG] [Thread-132220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:35:11.509 [DEBUG] [Thread-132220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:35:11.509 [INFO] [Thread-132220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] client lang: <none>
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] server lang: <none>
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] kex follows: False
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:35:11.512 [DEBUG] [Thread-132220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:35:11.513 [DEBUG] [Thread-132220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:35:11.513 [DEBUG] [Thread-132220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:35:11.513 [DEBUG] [Thread-132220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:35:11.513 [DEBUG] [Thread-132220] [transport.py] [_log()] Compression: none
2026-02-11T16:35:11.513 [DEBUG] [Thread-132220] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:35:11.532 [DEBUG] [Thread-132220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:35:11.532 [DEBUG] [Thread-132220] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:35:11.533 [DEBUG] [Thread-132220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:35:11.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:35:11.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:35:11.535 [DEBUG] [Thread-132220] [transport.py] [_log()] userauth is OK
2026-02-11T16:35:11.535 [DEBUG] [Thread-132220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:35:11.535 [DEBUG] [Thread-132220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:35:11.535 [DEBUG] [Thread-132220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:35:11.535 [DEBUG] [Thread-132220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:35:11.576 [INFO] [Thread-132220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:35:11.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:35:12.196 [DEBUG] [Thread-132220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:35:12.196 [DEBUG] [Thread-132220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:35:12.197 [DEBUG] [Thread-132220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:35:12.237 [DEBUG] [Thread-132220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:35:12.237 [DEBUG] [Thread-132220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:35:12.240 [DEBUG] [Thread-132220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:35:12.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:35:12.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:35:12.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:35:12.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:35:12.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:35:12.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:35:12.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:35:12.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:35:12.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:35:12.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.607086 -999.00  +24.40  25.90     44  +11.50 1 2 1 1 1   888    0 9.21 -142.88 ----- 24.9 25.9 288.6 32.7 28.5 -21.0 28.4 -20.2 28.9 -17.5 29.5 -19.3
2026-02-11T16:35:12.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:35:12.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:35:12.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.607086
2026-02-11T16:35:12.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:35:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:35:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:35:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:35:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:35:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:34:53', tmtdew=15.26, humidity=38.05, cloud=0.0, wind=37.16, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:34:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:35:12.261 [DEBUG] [Thread-132220] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:35:12.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:35:12.347 [DEBUG] [Thread-132223] [transport.py] [_log()] starting thread (client mode): 0xa2dc35b0
2026-02-11T16:35:12.347 [DEBUG] [Thread-132223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:35:12.361 [DEBUG] [Thread-132223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:35:12.361 [INFO] [Thread-132223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:35:12.369 [DEBUG] [Thread-132223] [transport.py] [_log()] client lang: <none>
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] server lang: <none>
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] kex follows: False
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] Compression: none
2026-02-11T16:35:12.370 [DEBUG] [Thread-132223] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:35:12.426 [DEBUG] [Thread-132223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:35:12.427 [DEBUG] [Thread-132223] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:35:12.427 [DEBUG] [Thread-132223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:35:12.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:35:12.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:35:12.482 [DEBUG] [Thread-132223] [transport.py] [_log()] userauth is OK
2026-02-11T16:35:12.483 [DEBUG] [Thread-132223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:35:12.483 [DEBUG] [Thread-132223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:35:12.483 [DEBUG] [Thread-132223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:35:12.483 [DEBUG] [Thread-132223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:35:12.501 [INFO] [Thread-132223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:35:12.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:35:12.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:35:13.313 [DEBUG] [Thread-132223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:35:13.313 [DEBUG] [Thread-132223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:35:13.361 [DEBUG] [Thread-132223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:35:13.361 [DEBUG] [Thread-132223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:35:13.370 [DEBUG] [Thread-132223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:35:13.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:35:13.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:35:13.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:35:13.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:35:13.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:35:13.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:35:13.410 [DEBUG] [Thread-132223] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:35:23.747 [DEBUG] [Thread-132225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:35:25.235 [DEBUG] [Thread-132226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:35:38.800 [DEBUG] [Thread-132227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:35:43.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:35:43.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:35:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:35:43.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:35:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:35:45.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 35, 28), 15.36, 37.86, 0.0, 34.04, 24.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:35:45.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:35:28
2026-02-11T16:35:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:35:45.744 [DEBUG] [Thread-132228] [transport.py] [_log()] starting thread (client mode): 0xa2dc26e0
2026-02-11T16:35:45.745 [DEBUG] [Thread-132228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:35:45.763 [DEBUG] [Thread-132228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:35:45.763 [INFO] [Thread-132228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] client lang: <none>
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] server lang: <none>
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] kex follows: False
2026-02-11T16:35:45.766 [DEBUG] [Thread-132228] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:35:45.767 [DEBUG] [Thread-132228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:35:45.767 [DEBUG] [Thread-132228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:35:45.767 [DEBUG] [Thread-132228] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:35:45.767 [DEBUG] [Thread-132228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:35:45.767 [DEBUG] [Thread-132228] [transport.py] [_log()] Compression: none
2026-02-11T16:35:45.767 [DEBUG] [Thread-132228] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:35:45.776 [DEBUG] [Thread-132228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:35:45.777 [DEBUG] [Thread-132228] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:35:45.777 [DEBUG] [Thread-132228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:35:45.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:35:45.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:35:45.779 [DEBUG] [Thread-132228] [transport.py] [_log()] userauth is OK
2026-02-11T16:35:45.779 [DEBUG] [Thread-132228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:35:45.779 [DEBUG] [Thread-132228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:35:45.779 [DEBUG] [Thread-132228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:35:45.779 [DEBUG] [Thread-132228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:35:45.798 [INFO] [Thread-132228] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:35:45.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:35:46.367 [DEBUG] [Thread-132228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:35:46.367 [DEBUG] [Thread-132228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:35:46.368 [DEBUG] [Thread-132228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:35:46.408 [DEBUG] [Thread-132228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:35:46.408 [DEBUG] [Thread-132228] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:35:46.412 [DEBUG] [Thread-132228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:35:46.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:35:46.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:35:46.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:35:46.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:35:46.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:35:46.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:35:46.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:35:46.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:35:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:35:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.608128 -999.00  +24.40  23.39     44  +11.40 1 2 1 1 1   888    0 9.88 -120.76 ----- 22.5 23.4 290.0 35.9 28.6 -23.8 28.4 -21.3 28.8 -20.5 29.6 -21.5
2026-02-11T16:35:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:35:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:35:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.608128
2026-02-11T16:35:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:35:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:35:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:35:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:35:46.439 [DEBUG] [Thread-132228] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:35:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:35:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:35:28', tmtdew=15.36, humidity=37.86, cloud=0.0, wind=34.04, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:35:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:35:46.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:35:46.535 [DEBUG] [Thread-132231] [transport.py] [_log()] starting thread (client mode): 0xa2dc2470
2026-02-11T16:35:46.536 [DEBUG] [Thread-132231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:35:46.550 [DEBUG] [Thread-132231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:35:46.551 [INFO] [Thread-132231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] client lang: <none>
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] server lang: <none>
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] kex follows: False
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:35:46.559 [DEBUG] [Thread-132231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:35:46.560 [DEBUG] [Thread-132231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:35:46.560 [DEBUG] [Thread-132231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:35:46.560 [DEBUG] [Thread-132231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:35:46.560 [DEBUG] [Thread-132231] [transport.py] [_log()] Compression: none
2026-02-11T16:35:46.560 [DEBUG] [Thread-132231] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:35:46.619 [DEBUG] [Thread-132231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:35:46.619 [DEBUG] [Thread-132231] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:35:46.620 [DEBUG] [Thread-132231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:35:46.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:35:46.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:35:46.676 [DEBUG] [Thread-132231] [transport.py] [_log()] userauth is OK
2026-02-11T16:35:46.676 [DEBUG] [Thread-132231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:35:46.676 [DEBUG] [Thread-132231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:35:46.676 [DEBUG] [Thread-132231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:35:46.676 [DEBUG] [Thread-132231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:35:46.700 [INFO] [Thread-132231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:35:46.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:35:46.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:35:47.553 [DEBUG] [Thread-132231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:35:47.554 [DEBUG] [Thread-132231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:35:47.601 [DEBUG] [Thread-132231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:35:47.601 [DEBUG] [Thread-132231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:35:47.610 [DEBUG] [Thread-132231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:35:47.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:35:47.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:35:47.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:35:47.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:35:47.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:35:47.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:35:47.644 [DEBUG] [Thread-132231] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:35:53.839 [DEBUG] [Thread-132233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:08.890 [DEBUG] [Thread-132234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:36:17.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:36:17.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
2026-02-11T16:36:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 36, 4), 15.35, 37.87, 0.0, 35.84, 24.79, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:36:19.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:36:04
2026-02-11T16:36:19.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:36:20.048 [DEBUG] [Thread-132235] [transport.py] [_log()] starting thread (client mode): 0xa2dc16c0
2026-02-11T16:36:20.048 [DEBUG] [Thread-132235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:36:20.068 [DEBUG] [Thread-132235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:36:20.068 [INFO] [Thread-132235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:36:20.071 [DEBUG] [Thread-132235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:36:20.071 [DEBUG] [Thread-132235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:36:20.071 [DEBUG] [Thread-132235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:36:20.071 [DEBUG] [Thread-132235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] client lang: <none>
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] server lang: <none>
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] kex follows: False
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] Compression: none
2026-02-11T16:36:20.072 [DEBUG] [Thread-132235] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:36:20.089 [DEBUG] [Thread-132235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:36:20.089 [DEBUG] [Thread-132235] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:36:20.090 [DEBUG] [Thread-132235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:36:20.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:36:20.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:36:20.091 [DEBUG] [Thread-132235] [transport.py] [_log()] userauth is OK
2026-02-11T16:36:20.091 [DEBUG] [Thread-132235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:36:20.092 [DEBUG] [Thread-132235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:36:20.092 [DEBUG] [Thread-132235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:36:20.092 [DEBUG] [Thread-132235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:36:20.110 [INFO] [Thread-132235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:36:20.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:36:20.684 [DEBUG] [Thread-132235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:36:20.684 [DEBUG] [Thread-132235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:36:20.685 [DEBUG] [Thread-132235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:36:20.725 [DEBUG] [Thread-132235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:36:20.725 [DEBUG] [Thread-132235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:36:20.727 [DEBUG] [Thread-132235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:36:20.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:36:20.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:36:20.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:36:20.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:36:20.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:36:20.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:36:20.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:36:20.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:36:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:36:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.608475 -999.00  +24.20  24.93     45  +11.50 1 2 1 1 1   888    0 9.79 -122.47 ----- 23.2 24.9 292.4 52.5 28.5 -22.5 28.4 -20.6 28.6 -21.3 29.4 -22.7
2026-02-11T16:36:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:36:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:36:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.608475
2026-02-11T16:36:20.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:36:20.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:36:20.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:36:20.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:36:20.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:36:20.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:36:04', tmtdew=15.35, humidity=37.87, cloud=0.0, wind=35.84, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:36:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:36:20.744 [DEBUG] [Thread-132235] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:36:20.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:36:20.837 [DEBUG] [Thread-132238] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-11T16:36:20.837 [DEBUG] [Thread-132238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:36:20.851 [DEBUG] [Thread-132238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:36:20.852 [INFO] [Thread-132238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:36:20.859 [DEBUG] [Thread-132238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:36:20.859 [DEBUG] [Thread-132238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:36:20.859 [DEBUG] [Thread-132238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:36:20.859 [DEBUG] [Thread-132238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:20.859 [DEBUG] [Thread-132238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] client lang: <none>
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] server lang: <none>
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] kex follows: False
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:36:20.860 [DEBUG] [Thread-132238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:36:20.861 [DEBUG] [Thread-132238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:36:20.861 [DEBUG] [Thread-132238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:36:20.861 [DEBUG] [Thread-132238] [transport.py] [_log()] Compression: none
2026-02-11T16:36:20.861 [DEBUG] [Thread-132238] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:36:20.919 [DEBUG] [Thread-132238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:36:20.919 [DEBUG] [Thread-132238] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:36:20.920 [DEBUG] [Thread-132238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:36:20.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:36:20.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:36:20.974 [DEBUG] [Thread-132238] [transport.py] [_log()] userauth is OK
2026-02-11T16:36:20.975 [DEBUG] [Thread-132238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:36:20.975 [DEBUG] [Thread-132238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:36:20.975 [DEBUG] [Thread-132238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:36:20.975 [DEBUG] [Thread-132238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:36:20.993 [INFO] [Thread-132238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:36:20.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:36:20.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:36:21.821 [DEBUG] [Thread-132238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:36:21.821 [DEBUG] [Thread-132238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:36:21.868 [DEBUG] [Thread-132238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:36:21.869 [DEBUG] [Thread-132238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:36:21.878 [DEBUG] [Thread-132238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:36:21.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:36:21.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:36:21.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:36:21.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:36:21.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:36:21.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:36:21.914 [DEBUG] [Thread-132238] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:36:23.929 [DEBUG] [Thread-132240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:25.289 [DEBUG] [Thread-132241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:38.978 [DEBUG] [Thread-132242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:43.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:43.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:51.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:36:51.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:36:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:36:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 36, 40), 16.16, 36.04, 0.0, 32.6, 25.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:36:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:36:40
2026-02-11T16:36:54.011 [DEBUG] [Thread-132243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:36:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:36:54.205 [DEBUG] [Thread-132244] [transport.py] [_log()] starting thread (client mode): 0xa2dc2bf0
2026-02-11T16:36:54.205 [DEBUG] [Thread-132244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:36:54.224 [DEBUG] [Thread-132244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:36:54.224 [INFO] [Thread-132244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] client lang: <none>
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] server lang: <none>
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] kex follows: False
2026-02-11T16:36:54.225 [DEBUG] [Thread-132244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:36:54.226 [DEBUG] [Thread-132244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:36:54.226 [DEBUG] [Thread-132244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:36:54.226 [DEBUG] [Thread-132244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:36:54.226 [DEBUG] [Thread-132244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:36:54.226 [DEBUG] [Thread-132244] [transport.py] [_log()] Compression: none
2026-02-11T16:36:54.226 [DEBUG] [Thread-132244] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:36:54.244 [DEBUG] [Thread-132244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:36:54.245 [DEBUG] [Thread-132244] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:36:54.245 [DEBUG] [Thread-132244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:36:54.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:36:54.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:36:54.248 [DEBUG] [Thread-132244] [transport.py] [_log()] userauth is OK
2026-02-11T16:36:54.248 [DEBUG] [Thread-132244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:36:54.248 [DEBUG] [Thread-132244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:36:54.248 [DEBUG] [Thread-132244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:36:54.248 [DEBUG] [Thread-132244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:36:54.269 [INFO] [Thread-132244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:36:54.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:36:54.877 [DEBUG] [Thread-132244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:36:54.878 [DEBUG] [Thread-132244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:36:54.878 [DEBUG] [Thread-132244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:36:54.918 [DEBUG] [Thread-132244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:36:54.918 [DEBUG] [Thread-132244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:36:54.921 [DEBUG] [Thread-132244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:36:54.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:36:54.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:36:54.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:36:54.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:36:54.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:36:54.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:36:54.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:36:54.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:36:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:36:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.608822 -999.00  +24.10  28.78     45  +11.40 1 2 1 1 1   888    0 9.95 -117.89 ----- 27.0 28.8 303.4 41.6 28.1 -22.8 28.1 -21.0 28.2 -19.4 29.0 -21.7
2026-02-11T16:36:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:36:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:36:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.608822
2026-02-11T16:36:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:36:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:36:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:36:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:36:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:36:54.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:36:40', tmtdew=16.16, humidity=36.04, cloud=0.0, wind=32.6, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:36:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:36:54.949 [DEBUG] [Thread-132244] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:36:55.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:36:55.047 [DEBUG] [Thread-132247] [transport.py] [_log()] starting thread (client mode): 0xa575a140
2026-02-11T16:36:55.047 [DEBUG] [Thread-132247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:36:55.068 [DEBUG] [Thread-132247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:36:55.068 [INFO] [Thread-132247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:36:55.078 [DEBUG] [Thread-132247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:36:55.078 [DEBUG] [Thread-132247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] client lang: <none>
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] server lang: <none>
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] kex follows: False
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] Compression: none
2026-02-11T16:36:55.079 [DEBUG] [Thread-132247] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:36:55.142 [DEBUG] [Thread-132247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:36:55.143 [DEBUG] [Thread-132247] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:36:55.143 [DEBUG] [Thread-132247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:36:55.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:36:55.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:36:55.199 [DEBUG] [Thread-132247] [transport.py] [_log()] userauth is OK
2026-02-11T16:36:55.199 [DEBUG] [Thread-132247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:36:55.199 [DEBUG] [Thread-132247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:36:55.199 [DEBUG] [Thread-132247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:36:55.199 [DEBUG] [Thread-132247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:36:55.213 [INFO] [Thread-132247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:36:55.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:36:55.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:36:56.039 [DEBUG] [Thread-132247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:36:56.040 [DEBUG] [Thread-132247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:36:56.087 [DEBUG] [Thread-132247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:36:56.087 [DEBUG] [Thread-132247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:36:56.095 [DEBUG] [Thread-132247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:36:56.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:36:56.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:36:56.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:36:56.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:36:56.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:36:56.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:36:56.128 [DEBUG] [Thread-132247] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:37:09.048 [DEBUG] [Thread-132249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:37:24.098 [DEBUG] [Thread-132250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:37:25.354 [DEBUG] [Thread-132251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:37:26.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:37:26.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:37:26.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:37:28.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 37, 16), 15.37, 37.94, 0.0, 35.68, 24.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:37:28.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:37:16
2026-02-11T16:37:28.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:37:29.033 [DEBUG] [Thread-132252] [transport.py] [_log()] starting thread (client mode): 0xa57d5ed0
2026-02-11T16:37:29.033 [DEBUG] [Thread-132252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:37:29.053 [DEBUG] [Thread-132252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:37:29.053 [INFO] [Thread-132252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:37:29.056 [DEBUG] [Thread-132252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:37:29.056 [DEBUG] [Thread-132252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:37:29.056 [DEBUG] [Thread-132252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:37:29.056 [DEBUG] [Thread-132252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:37:29.056 [DEBUG] [Thread-132252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] client lang: <none>
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] server lang: <none>
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] kex follows: False
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] Compression: none
2026-02-11T16:37:29.057 [DEBUG] [Thread-132252] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:37:29.075 [DEBUG] [Thread-132252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:37:29.075 [DEBUG] [Thread-132252] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:37:29.076 [DEBUG] [Thread-132252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:37:29.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:37:29.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:37:29.078 [DEBUG] [Thread-132252] [transport.py] [_log()] userauth is OK
2026-02-11T16:37:29.078 [DEBUG] [Thread-132252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:37:29.079 [DEBUG] [Thread-132252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:37:29.079 [DEBUG] [Thread-132252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:37:29.079 [DEBUG] [Thread-132252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:37:29.104 [INFO] [Thread-132252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:37:29.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:37:29.729 [DEBUG] [Thread-132252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:37:29.729 [DEBUG] [Thread-132252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:37:29.729 [DEBUG] [Thread-132252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:37:29.771 [DEBUG] [Thread-132252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:37:29.771 [DEBUG] [Thread-132252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:37:29.774 [DEBUG] [Thread-132252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:37:29.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:37:29.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:37:29.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:37:29.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:37:29.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:37:29.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:37:29.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:37:29.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:37:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:37:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.609169 -999.00  +24.20  29.20     44  +11.50 1 2 1 1 1   888    0 10.26 -109.40 ----- 24.5 29.2 304.4 38.4 28.1 -21.2 27.9 -20.4 28.1 -19.3 28.8 -20.3
2026-02-11T16:37:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:37:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:37:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.609169
2026-02-11T16:37:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:37:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:37:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:37:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:37:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:37:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:37:16', tmtdew=15.37, humidity=37.94, cloud=0.0, wind=35.68, temperature=24.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:37:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:37:29.800 [DEBUG] [Thread-132252] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:37:29.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:37:29.896 [DEBUG] [Thread-132255] [transport.py] [_log()] starting thread (client mode): 0xa57d62c0
2026-02-11T16:37:29.896 [DEBUG] [Thread-132255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:37:29.911 [DEBUG] [Thread-132255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:37:29.911 [INFO] [Thread-132255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] client lang: <none>
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] server lang: <none>
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] kex follows: False
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:37:29.919 [DEBUG] [Thread-132255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:37:29.920 [DEBUG] [Thread-132255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:37:29.920 [DEBUG] [Thread-132255] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:37:29.920 [DEBUG] [Thread-132255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:37:29.920 [DEBUG] [Thread-132255] [transport.py] [_log()] Compression: none
2026-02-11T16:37:29.920 [DEBUG] [Thread-132255] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:37:29.976 [DEBUG] [Thread-132255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:37:29.976 [DEBUG] [Thread-132255] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:37:29.977 [DEBUG] [Thread-132255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:37:29.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:37:29.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:37:30.031 [DEBUG] [Thread-132255] [transport.py] [_log()] userauth is OK
2026-02-11T16:37:30.031 [DEBUG] [Thread-132255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:37:30.032 [DEBUG] [Thread-132255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:37:30.032 [DEBUG] [Thread-132255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:37:30.032 [DEBUG] [Thread-132255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:37:30.054 [INFO] [Thread-132255] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:37:30.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:37:30.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:37:30.890 [DEBUG] [Thread-132255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:37:30.890 [DEBUG] [Thread-132255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:37:30.938 [DEBUG] [Thread-132255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:37:30.939 [DEBUG] [Thread-132255] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:37:30.948 [DEBUG] [Thread-132255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:37:30.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:37:30.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:37:30.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:37:30.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:37:30.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:37:30.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:37:30.985 [DEBUG] [Thread-132255] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:37:39.136 [DEBUG] [Thread-132257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:37:43.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:37:43.490 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:37:54.188 [DEBUG] [Thread-132258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:38:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:38:00.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:38:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:38:02.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 37, 51), 15.06, 38.67, 0.0, 25.34, 24.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:38:02.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:37:51
2026-02-11T16:38:03.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:38:03.514 [DEBUG] [Thread-132259] [transport.py] [_log()] starting thread (client mode): 0xa2dc37c0
2026-02-11T16:38:03.514 [DEBUG] [Thread-132259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:38:03.534 [DEBUG] [Thread-132259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:38:03.534 [INFO] [Thread-132259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:38:03.537 [DEBUG] [Thread-132259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:38:03.537 [DEBUG] [Thread-132259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] client lang: <none>
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] server lang: <none>
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] kex follows: False
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:38:03.538 [DEBUG] [Thread-132259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:38:03.539 [DEBUG] [Thread-132259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:38:03.539 [DEBUG] [Thread-132259] [transport.py] [_log()] Compression: none
2026-02-11T16:38:03.539 [DEBUG] [Thread-132259] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:38:03.557 [DEBUG] [Thread-132259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:38:03.557 [DEBUG] [Thread-132259] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:38:03.558 [DEBUG] [Thread-132259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:38:03.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:38:03.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:38:03.560 [DEBUG] [Thread-132259] [transport.py] [_log()] userauth is OK
2026-02-11T16:38:03.560 [DEBUG] [Thread-132259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:38:03.560 [DEBUG] [Thread-132259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:38:03.560 [DEBUG] [Thread-132259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:38:03.560 [DEBUG] [Thread-132259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:38:03.579 [INFO] [Thread-132259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:38:03.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:38:04.159 [DEBUG] [Thread-132259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:38:04.160 [DEBUG] [Thread-132259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:38:04.160 [DEBUG] [Thread-132259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:38:04.200 [DEBUG] [Thread-132259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:38:04.200 [DEBUG] [Thread-132259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:38:04.204 [DEBUG] [Thread-132259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:38:04.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:38:04.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:38:04.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:38:04.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:38:04.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:38:04.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:38:04.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:38:04.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:38:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:38:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.609517 -999.00  +24.10  22.95     45  +11.50 1 2 1 1 1   888    0 9.84 -118.20 ----- 23.5 22.9 303.6 36.6 27.9 -21.3 27.8 -20.2 27.9 -18.2 28.5 -20.5
2026-02-11T16:38:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:38:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:38:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.609517
2026-02-11T16:38:04.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:38:04.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:38:04.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:38:04.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:38:04.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:38:04.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:37:51', tmtdew=15.06, humidity=38.67, cloud=0.0, wind=25.34, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:37:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:38:04.230 [DEBUG] [Thread-132259] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:38:04.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:38:04.325 [DEBUG] [Thread-132262] [transport.py] [_log()] starting thread (client mode): 0xa2dc0d90
2026-02-11T16:38:04.325 [DEBUG] [Thread-132262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:38:04.341 [DEBUG] [Thread-132262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:38:04.341 [INFO] [Thread-132262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:38:04.349 [DEBUG] [Thread-132262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:38:04.349 [DEBUG] [Thread-132262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:38:04.349 [DEBUG] [Thread-132262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] client lang: <none>
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] server lang: <none>
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] kex follows: False
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] Compression: none
2026-02-11T16:38:04.350 [DEBUG] [Thread-132262] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:38:04.408 [DEBUG] [Thread-132262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:38:04.408 [DEBUG] [Thread-132262] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:38:04.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:38:04.409 [DEBUG] [Thread-132262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:38:04.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:38:04.463 [DEBUG] [Thread-132262] [transport.py] [_log()] userauth is OK
2026-02-11T16:38:04.464 [DEBUG] [Thread-132262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:38:04.464 [DEBUG] [Thread-132262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:38:04.464 [DEBUG] [Thread-132262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:38:04.464 [DEBUG] [Thread-132262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:38:04.483 [INFO] [Thread-132262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:38:04.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:38:04.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:38:05.303 [DEBUG] [Thread-132262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:38:05.304 [DEBUG] [Thread-132262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:38:05.351 [DEBUG] [Thread-132262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:38:05.352 [DEBUG] [Thread-132262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:38:05.361 [DEBUG] [Thread-132262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:38:05.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:38:05.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:38:05.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:38:05.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:38:05.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:38:05.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:38:05.397 [DEBUG] [Thread-132262] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:38:09.225 [DEBUG] [Thread-132264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:38:24.288 [DEBUG] [Thread-132265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:38:25.402 [DEBUG] [Thread-132266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:38:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:38:35.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:38:35.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:38:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 38, 28), 14.79, 39.27, 0.0, 28.9, 24.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:38:37.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:38:28
2026-02-11T16:38:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:38:38.334 [DEBUG] [Thread-132267] [transport.py] [_log()] starting thread (client mode): 0xa57d5b70
2026-02-11T16:38:38.335 [DEBUG] [Thread-132267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:38:38.354 [DEBUG] [Thread-132267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:38:38.355 [INFO] [Thread-132267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:38:38.357 [DEBUG] [Thread-132267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] client lang: <none>
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] server lang: <none>
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] kex follows: False
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] Compression: none
2026-02-11T16:38:38.358 [DEBUG] [Thread-132267] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:38:38.375 [DEBUG] [Thread-132267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:38:38.376 [DEBUG] [Thread-132267] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:38:38.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:38:38.377 [DEBUG] [Thread-132267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:38:38.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:38:38.379 [DEBUG] [Thread-132267] [transport.py] [_log()] userauth is OK
2026-02-11T16:38:38.379 [DEBUG] [Thread-132267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:38:38.379 [DEBUG] [Thread-132267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:38:38.380 [DEBUG] [Thread-132267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:38:38.380 [DEBUG] [Thread-132267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:38:38.394 [INFO] [Thread-132267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:38:38.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:38:39.023 [DEBUG] [Thread-132267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:38:39.023 [DEBUG] [Thread-132267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:38:39.023 [DEBUG] [Thread-132267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:38:39.064 [DEBUG] [Thread-132267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:38:39.064 [DEBUG] [Thread-132267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:38:39.069 [DEBUG] [Thread-132267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:38:39.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:38:39.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:38:39.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:38:39.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:38:39.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:38:39.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:38:39.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:38:39.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:38:39.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:38:39.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.609864 -999.00  +24.10  27.43     45  +11.40 1 2 1 1 1   888    0 10.26 -115.63 ----- 38.7 27.4 292.2 45.3 27.8 -21.2 27.7 -19.8 27.7 -19.3 28.3 -19.6
2026-02-11T16:38:39.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:38:39.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:38:39.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.609864
2026-02-11T16:38:39.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:38:39.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:38:39.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:38:39.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:38:39.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:38:39.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:38:28', tmtdew=14.79, humidity=39.27, cloud=0.0, wind=28.9, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:38:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:38:39.095 [DEBUG] [Thread-132267] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:38:39.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:38:39.195 [DEBUG] [Thread-132270] [transport.py] [_log()] starting thread (client mode): 0xa5759ea0
2026-02-11T16:38:39.195 [DEBUG] [Thread-132270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:38:39.210 [DEBUG] [Thread-132270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:38:39.211 [INFO] [Thread-132270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:38:39.218 [DEBUG] [Thread-132270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:38:39.218 [DEBUG] [Thread-132270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] client lang: <none>
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] server lang: <none>
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] kex follows: False
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] Compression: none
2026-02-11T16:38:39.219 [DEBUG] [Thread-132270] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:38:39.276 [DEBUG] [Thread-132270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:38:39.277 [DEBUG] [Thread-132270] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:38:39.277 [DEBUG] [Thread-132270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:38:39.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:38:39.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:38:39.325 [DEBUG] [Thread-132272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:38:39.332 [DEBUG] [Thread-132270] [transport.py] [_log()] userauth is OK
2026-02-11T16:38:39.332 [DEBUG] [Thread-132270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:38:39.332 [DEBUG] [Thread-132270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:38:39.332 [DEBUG] [Thread-132270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:38:39.332 [DEBUG] [Thread-132270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:38:39.347 [INFO] [Thread-132270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:38:39.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:38:39.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:38:40.230 [DEBUG] [Thread-132270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:38:40.231 [DEBUG] [Thread-132270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:38:40.278 [DEBUG] [Thread-132270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:38:40.278 [DEBUG] [Thread-132270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:38:40.290 [DEBUG] [Thread-132270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:38:40.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:38:40.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:38:40.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:38:40.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:38:40.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:38:40.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:38:40.329 [DEBUG] [Thread-132270] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:38:43.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:38:43.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:38:54.373 [DEBUG] [Thread-132273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:39:09.412 [DEBUG] [Thread-132274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:39:10.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:39:10.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:39:10.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:39:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 39, 3), 14.79, 39.27, 0.0, 27.58, 24.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:39:12.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:39:03
2026-02-11T16:39:12.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:39:12.701 [DEBUG] [Thread-132275] [transport.py] [_log()] starting thread (client mode): 0xa5758d60
2026-02-11T16:39:12.702 [DEBUG] [Thread-132275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:39:12.722 [DEBUG] [Thread-132275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:39:12.722 [INFO] [Thread-132275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:39:12.725 [DEBUG] [Thread-132275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:39:12.725 [DEBUG] [Thread-132275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] client lang: <none>
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] server lang: <none>
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] kex follows: False
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] Compression: none
2026-02-11T16:39:12.726 [DEBUG] [Thread-132275] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:39:12.745 [DEBUG] [Thread-132275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:39:12.745 [DEBUG] [Thread-132275] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:39:12.746 [DEBUG] [Thread-132275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:39:12.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:39:12.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:39:12.748 [DEBUG] [Thread-132275] [transport.py] [_log()] userauth is OK
2026-02-11T16:39:12.748 [DEBUG] [Thread-132275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:39:12.748 [DEBUG] [Thread-132275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:39:12.748 [DEBUG] [Thread-132275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:39:12.748 [DEBUG] [Thread-132275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:39:12.773 [INFO] [Thread-132275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:39:12.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:39:13.419 [DEBUG] [Thread-132275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:39:13.419 [DEBUG] [Thread-132275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:39:13.420 [DEBUG] [Thread-132275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:39:13.460 [DEBUG] [Thread-132275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:39:13.461 [DEBUG] [Thread-132275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:39:13.464 [DEBUG] [Thread-132275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:39:13.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:39:13.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:39:13.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:39:13.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:39:13.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:39:13.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:39:13.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:39:13.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:39:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:39:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.610211 -999.00  +23.80  38.83     45  +11.30 1 2 2 1 1   888    0 9.91 -114.55 ----- 30.8 38.8 290.8 47.0 27.6 -20.9 27.6 -19.5 27.4 -19.8 28.0 -20.0
2026-02-11T16:39:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:39:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:39:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.610211
2026-02-11T16:39:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:39:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:39:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:39:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:39:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:39:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:39:03', tmtdew=14.79, humidity=39.27, cloud=0.0, wind=27.58, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:38:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:39:13.490 [DEBUG] [Thread-132275] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:39:13.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:39:13.585 [DEBUG] [Thread-132278] [transport.py] [_log()] starting thread (client mode): 0xa57d4070
2026-02-11T16:39:13.585 [DEBUG] [Thread-132278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:39:13.601 [DEBUG] [Thread-132278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:39:13.601 [INFO] [Thread-132278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:39:13.611 [DEBUG] [Thread-132278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:39:13.611 [DEBUG] [Thread-132278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:39:13.611 [DEBUG] [Thread-132278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:39:13.611 [DEBUG] [Thread-132278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] client lang: <none>
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] server lang: <none>
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] kex follows: False
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] Compression: none
2026-02-11T16:39:13.612 [DEBUG] [Thread-132278] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:39:13.671 [DEBUG] [Thread-132278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:39:13.671 [DEBUG] [Thread-132278] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:39:13.672 [DEBUG] [Thread-132278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:39:13.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:39:13.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:39:13.729 [DEBUG] [Thread-132278] [transport.py] [_log()] userauth is OK
2026-02-11T16:39:13.729 [DEBUG] [Thread-132278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:39:13.729 [DEBUG] [Thread-132278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:39:13.729 [DEBUG] [Thread-132278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:39:13.729 [DEBUG] [Thread-132278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:39:13.747 [INFO] [Thread-132278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:39:13.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:39:13.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:39:14.630 [DEBUG] [Thread-132278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:39:14.630 [DEBUG] [Thread-132278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:39:14.678 [DEBUG] [Thread-132278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:39:14.679 [DEBUG] [Thread-132278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:39:14.688 [DEBUG] [Thread-132278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:39:14.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:39:14.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')
2026-02-11T16:39:14.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
2026-02-11T16:39:14.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:39:14.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:39:14.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:39:14.727 [DEBUG] [Thread-132278] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:39:24.449 [DEBUG] [Thread-132280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:39:25.462 [DEBUG] [Thread-132281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:39:39.509 [DEBUG] [Thread-132282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:39:43.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:39:43.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:39:44.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:39:44.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:39:44.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:39:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 39, 39), 15.82, 36.74, 0.0, 39.76, 25.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:39:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:39:39
2026-02-11T16:39:46.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:39:47.053 [DEBUG] [Thread-132283] [transport.py] [_log()] starting thread (client mode): 0xa57d5bd0
2026-02-11T16:39:47.053 [DEBUG] [Thread-132283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:39:47.068 [DEBUG] [Thread-132283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:39:47.069 [INFO] [Thread-132283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:39:47.070 [DEBUG] [Thread-132283] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:39:47.070 [DEBUG] [Thread-132283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:39:47.070 [DEBUG] [Thread-132283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:39:47.070 [DEBUG] [Thread-132283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:47.070 [DEBUG] [Thread-132283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] client lang: <none>
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] server lang: <none>
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] kex follows: False
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] Compression: none
2026-02-11T16:39:47.071 [DEBUG] [Thread-132283] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:39:47.089 [DEBUG] [Thread-132283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:39:47.090 [DEBUG] [Thread-132283] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:39:47.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:39:47.091 [DEBUG] [Thread-132283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:39:47.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:39:47.093 [DEBUG] [Thread-132283] [transport.py] [_log()] userauth is OK
2026-02-11T16:39:47.093 [DEBUG] [Thread-132283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:39:47.094 [DEBUG] [Thread-132283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:39:47.094 [DEBUG] [Thread-132283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:39:47.094 [DEBUG] [Thread-132283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:39:47.107 [INFO] [Thread-132283] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:39:47.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:39:47.696 [DEBUG] [Thread-132283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:39:47.696 [DEBUG] [Thread-132283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:39:47.696 [DEBUG] [Thread-132283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:39:47.737 [DEBUG] [Thread-132283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:39:47.737 [DEBUG] [Thread-132283] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:39:47.739 [DEBUG] [Thread-132283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:39:47.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:39:47.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:39:47.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:39:47.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:39:47.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:39:47.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:39:47.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:39:47.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:39:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:39:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.610558 -999.00  +23.60  32.27     45  +11.30 1 2 2 1 1   888    0 9.71 -112.40 ----- 32.9 32.3 296.0 38.7 27.4 -20.5 27.4 -19.9 27.2 -19.0 27.8 -19.1
2026-02-11T16:39:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:39:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:39:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.610558
2026-02-11T16:39:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:39:47.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:39:47.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:39:47.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:39:47.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:39:47.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:39:39', tmtdew=15.82, humidity=36.74, cloud=0.0, wind=39.76, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:39:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:39:47.755 [DEBUG] [Thread-132283] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:39:47.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:39:47.871 [DEBUG] [Thread-132286] [transport.py] [_log()] starting thread (client mode): 0xa2db69b0
2026-02-11T16:39:47.872 [DEBUG] [Thread-132286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:39:47.886 [DEBUG] [Thread-132286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:39:47.887 [INFO] [Thread-132286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:39:47.894 [DEBUG] [Thread-132286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] client lang: <none>
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] server lang: <none>
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] kex follows: False
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:39:47.895 [DEBUG] [Thread-132286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:39:47.896 [DEBUG] [Thread-132286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:39:47.896 [DEBUG] [Thread-132286] [transport.py] [_log()] Compression: none
2026-02-11T16:39:47.896 [DEBUG] [Thread-132286] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:39:47.952 [DEBUG] [Thread-132286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:39:47.953 [DEBUG] [Thread-132286] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:39:47.954 [DEBUG] [Thread-132286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:39:47.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:39:47.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:39:48.009 [DEBUG] [Thread-132286] [transport.py] [_log()] userauth is OK
2026-02-11T16:39:48.009 [DEBUG] [Thread-132286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:39:48.009 [DEBUG] [Thread-132286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:39:48.010 [DEBUG] [Thread-132286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:39:48.010 [DEBUG] [Thread-132286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:39:48.028 [INFO] [Thread-132286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:39:48.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:39:48.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:39:48.861 [DEBUG] [Thread-132286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:39:48.861 [DEBUG] [Thread-132286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:39:48.909 [DEBUG] [Thread-132286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:39:48.910 [DEBUG] [Thread-132286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:39:48.919 [DEBUG] [Thread-132286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:39:48.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:39:48.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:39:48.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:39:48.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:39:48.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:39:48.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:39:48.956 [DEBUG] [Thread-132286] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:39:54.545 [DEBUG] [Thread-132288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:09.595 [DEBUG] [Thread-132289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:18.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:40:18.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:40:18.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:40:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 39, 39), 15.82, 36.74, 0.0, 39.76, 25.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:40:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:39:39
2026-02-11T16:40:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:40:21.576 [DEBUG] [Thread-132290] [transport.py] [_log()] starting thread (client mode): 0xa57d6200
2026-02-11T16:40:21.576 [DEBUG] [Thread-132290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:40:21.596 [DEBUG] [Thread-132290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:40:21.596 [INFO] [Thread-132290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:40:21.599 [DEBUG] [Thread-132290] [transport.py] [_log()] client lang: <none>
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] server lang: <none>
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] kex follows: False
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] Compression: none
2026-02-11T16:40:21.600 [DEBUG] [Thread-132290] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:40:21.615 [DEBUG] [Thread-132290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:40:21.616 [DEBUG] [Thread-132290] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:40:21.616 [DEBUG] [Thread-132290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:40:21.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:40:21.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:40:21.618 [DEBUG] [Thread-132290] [transport.py] [_log()] userauth is OK
2026-02-11T16:40:21.618 [DEBUG] [Thread-132290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:40:21.619 [DEBUG] [Thread-132290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:40:21.619 [DEBUG] [Thread-132290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:40:21.619 [DEBUG] [Thread-132290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:40:21.642 [INFO] [Thread-132290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:40:21.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:40:22.289 [DEBUG] [Thread-132290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:40:22.289 [DEBUG] [Thread-132290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:40:22.289 [DEBUG] [Thread-132290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:40:22.329 [DEBUG] [Thread-132290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:40:22.329 [DEBUG] [Thread-132290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:40:22.332 [DEBUG] [Thread-132290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:40:22.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:40:22.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:40:22.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:40:22.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:40:22.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:40:22.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:40:22.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:40:22.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:40:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:40:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.610906 -999.00  +23.60  32.91     45  +11.30 1 2 2 1 1   888    0 9.59 -118.69 ----- 29.9 32.9 292.0 40.1 27.3 -20.6 27.3 -19.4 27.1 -20.5 27.6 -19.3
2026-02-11T16:40:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:40:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:40:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.610906
2026-02-11T16:40:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:40:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:40:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:40:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:40:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:40:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:39:39', tmtdew=15.82, humidity=36.74, cloud=0.0, wind=39.76, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:39:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:40:22.355 [DEBUG] [Thread-132290] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:40:22.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:40:22.449 [DEBUG] [Thread-132293] [transport.py] [_log()] starting thread (client mode): 0xa57726b0
2026-02-11T16:40:22.450 [DEBUG] [Thread-132293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:40:22.464 [DEBUG] [Thread-132293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:40:22.464 [INFO] [Thread-132293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:40:22.472 [DEBUG] [Thread-132293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:40:22.472 [DEBUG] [Thread-132293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:40:22.472 [DEBUG] [Thread-132293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:40:22.472 [DEBUG] [Thread-132293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:22.472 [DEBUG] [Thread-132293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:22.472 [DEBUG] [Thread-132293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] client lang: <none>
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] server lang: <none>
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] kex follows: False
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] Compression: none
2026-02-11T16:40:22.473 [DEBUG] [Thread-132293] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:40:22.528 [DEBUG] [Thread-132293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:40:22.529 [DEBUG] [Thread-132293] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:40:22.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:40:22.530 [DEBUG] [Thread-132293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:40:22.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:40:22.585 [DEBUG] [Thread-132293] [transport.py] [_log()] userauth is OK
2026-02-11T16:40:22.585 [DEBUG] [Thread-132293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:40:22.586 [DEBUG] [Thread-132293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:40:22.586 [DEBUG] [Thread-132293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:40:22.586 [DEBUG] [Thread-132293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:40:22.607 [INFO] [Thread-132293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:40:22.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:40:22.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:40:23.424 [DEBUG] [Thread-132293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:40:23.424 [DEBUG] [Thread-132293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:40:23.472 [DEBUG] [Thread-132293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:40:23.472 [DEBUG] [Thread-132293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:40:23.481 [DEBUG] [Thread-132293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:40:23.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:40:23.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:40: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') -> 00000000
2026-02-11T16:40:23.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:40:23.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:40:23.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:40:23.516 [DEBUG] [Thread-132293] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:40:24.635 [DEBUG] [Thread-132295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:25.505 [DEBUG] [Thread-132296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:39.686 [DEBUG] [Thread-132297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:43.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:43.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:53.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:40:53.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:40:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:40:54.726 [DEBUG] [Thread-132298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:40:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 40, 14), 14.93, 38.75, 0.0, 31.92, 24.26, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:40:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:40:14
2026-02-11T16:40:56.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:40:56.402 [DEBUG] [Thread-132299] [transport.py] [_log()] starting thread (client mode): 0xa2db7070
2026-02-11T16:40:56.402 [DEBUG] [Thread-132299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:40:56.425 [DEBUG] [Thread-132299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:40:56.426 [INFO] [Thread-132299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:40:56.428 [DEBUG] [Thread-132299] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:40:56.429 [DEBUG] [Thread-132299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:40:56.429 [DEBUG] [Thread-132299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:40:56.429 [DEBUG] [Thread-132299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:56.429 [DEBUG] [Thread-132299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:56.429 [DEBUG] [Thread-132299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] client lang: <none>
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] server lang: <none>
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] kex follows: False
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] Compression: none
2026-02-11T16:40:56.430 [DEBUG] [Thread-132299] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:40:56.451 [DEBUG] [Thread-132299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:40:56.452 [DEBUG] [Thread-132299] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:40:56.452 [DEBUG] [Thread-132299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:40:56.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:40:56.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:40:56.454 [DEBUG] [Thread-132299] [transport.py] [_log()] userauth is OK
2026-02-11T16:40:56.455 [DEBUG] [Thread-132299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:40:56.455 [DEBUG] [Thread-132299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:40:56.455 [DEBUG] [Thread-132299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:40:56.455 [DEBUG] [Thread-132299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:40:56.472 [INFO] [Thread-132299] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:40:56.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:40:57.051 [DEBUG] [Thread-132299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:40:57.052 [DEBUG] [Thread-132299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:40:57.052 [DEBUG] [Thread-132299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:40:57.092 [DEBUG] [Thread-132299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:40:57.093 [DEBUG] [Thread-132299] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:40:57.095 [DEBUG] [Thread-132299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:40:57.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:40:57.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:40:57.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:40:57.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:40:57.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:40:57.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:40:57.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:40:57.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:40:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:40:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.611600 -999.00  +23.70  35.37     44  +11.00 1 2 2 1 1   888    0 9.83 -110.00 ----- 27.5 35.4 290.2 38.8 27.1 -20.1 27.1 -18.9 26.8 -17.7 27.2 -18.4
2026-02-11T16:40:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:40:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:40:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.611600
2026-02-11T16:40:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:40:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:40:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:40:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:40:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:40:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:40:14', tmtdew=14.93, humidity=38.75, cloud=0.0, wind=31.92, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:40:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:40:57.128 [DEBUG] [Thread-132299] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:40:57.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:40:57.222 [DEBUG] [Thread-132302] [transport.py] [_log()] starting thread (client mode): 0xa57c3670
2026-02-11T16:40:57.222 [DEBUG] [Thread-132302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:40:57.236 [DEBUG] [Thread-132302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:40:57.236 [INFO] [Thread-132302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:40:57.244 [DEBUG] [Thread-132302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] client lang: <none>
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] server lang: <none>
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] kex follows: False
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] Compression: none
2026-02-11T16:40:57.245 [DEBUG] [Thread-132302] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:40:57.299 [DEBUG] [Thread-132302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:40:57.299 [DEBUG] [Thread-132302] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:40:57.299 [DEBUG] [Thread-132302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:40:57.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:40:57.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:40:57.362 [DEBUG] [Thread-132302] [transport.py] [_log()] userauth is OK
2026-02-11T16:40:57.362 [DEBUG] [Thread-132302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:40:57.362 [DEBUG] [Thread-132302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:40:57.362 [DEBUG] [Thread-132302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:40:57.362 [DEBUG] [Thread-132302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:40:57.385 [INFO] [Thread-132302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:40:57.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:40:57.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:40:58.225 [DEBUG] [Thread-132302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:40:58.226 [DEBUG] [Thread-132302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:40:58.273 [DEBUG] [Thread-132302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:40:58.273 [DEBUG] [Thread-132302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:40:58.281 [DEBUG] [Thread-132302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:40:58.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:40:58.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:40:58.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:40:58.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:40:58.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:40:58.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:40:58.315 [DEBUG] [Thread-132302] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:41:09.762 [DEBUG] [Thread-132304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:41:24.816 [DEBUG] [Thread-132305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:41:25.538 [DEBUG] [Thread-132306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:41:28.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:41:28.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:41:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:41:30.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 40, 50), 14.88, 38.73, 0.0, 33.49, 23.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:41:30.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:40:50
2026-02-11T16:41:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:41:31.070 [DEBUG] [Thread-132307] [transport.py] [_log()] starting thread (client mode): 0xa57733d0
2026-02-11T16:41:31.070 [DEBUG] [Thread-132307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:41:31.089 [DEBUG] [Thread-132307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:41:31.089 [INFO] [Thread-132307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:41:31.092 [DEBUG] [Thread-132307] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] client lang: <none>
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] server lang: <none>
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] kex follows: False
2026-02-11T16:41:31.093 [DEBUG] [Thread-132307] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:41:31.094 [DEBUG] [Thread-132307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:41:31.094 [DEBUG] [Thread-132307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:41:31.094 [DEBUG] [Thread-132307] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:41:31.094 [DEBUG] [Thread-132307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:41:31.094 [DEBUG] [Thread-132307] [transport.py] [_log()] Compression: none
2026-02-11T16:41:31.094 [DEBUG] [Thread-132307] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:41:31.112 [DEBUG] [Thread-132307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:41:31.113 [DEBUG] [Thread-132307] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:41:31.113 [DEBUG] [Thread-132307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:41:31.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:41:31.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:41:31.116 [DEBUG] [Thread-132307] [transport.py] [_log()] userauth is OK
2026-02-11T16:41:31.116 [DEBUG] [Thread-132307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:41:31.117 [DEBUG] [Thread-132307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:41:31.117 [DEBUG] [Thread-132307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:41:31.117 [DEBUG] [Thread-132307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:41:31.131 [INFO] [Thread-132307] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:41:31.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:41:31.792 [DEBUG] [Thread-132307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:41:31.792 [DEBUG] [Thread-132307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:41:31.792 [DEBUG] [Thread-132307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:41:31.833 [DEBUG] [Thread-132307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:41:31.834 [DEBUG] [Thread-132307] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:41:31.837 [DEBUG] [Thread-132307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:41:31.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:41:31.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:41:31.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:41:31.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:41:31.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:41:31.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:41:31.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:41:31.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:41:31.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:41:31.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.611947 -999.00  +23.60  29.86     45  +10.90 1 2 1 1 1   888    0 9.66 -107.12 ----- 28.2 29.9 296.8 32.8 27.0 -19.8 27.0 -18.6 26.7 -18.2 27.1 -18.3
2026-02-11T16:41:31.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:41:31.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:41:31.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.611947
2026-02-11T16:41:31.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:41:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:41:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:41:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:41:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:41:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:40:50', tmtdew=14.88, humidity=38.73, cloud=0.0, wind=33.49, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:41:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:41:31.862 [DEBUG] [Thread-132307] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:41:31.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:41:31.957 [DEBUG] [Thread-132310] [transport.py] [_log()] starting thread (client mode): 0xa57d5ed0
2026-02-11T16:41:31.957 [DEBUG] [Thread-132310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:41:31.972 [DEBUG] [Thread-132310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:41:31.972 [INFO] [Thread-132310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] client lang: <none>
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] server lang: <none>
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] kex follows: False
2026-02-11T16:41:31.980 [DEBUG] [Thread-132310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:41:31.981 [DEBUG] [Thread-132310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:41:31.981 [DEBUG] [Thread-132310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:41:31.981 [DEBUG] [Thread-132310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:41:31.981 [DEBUG] [Thread-132310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:41:31.981 [DEBUG] [Thread-132310] [transport.py] [_log()] Compression: none
2026-02-11T16:41:31.981 [DEBUG] [Thread-132310] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:41:32.037 [DEBUG] [Thread-132310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:41:32.038 [DEBUG] [Thread-132310] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:41:32.039 [DEBUG] [Thread-132310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:41:32.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:41:32.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:41:32.093 [DEBUG] [Thread-132310] [transport.py] [_log()] userauth is OK
2026-02-11T16:41:32.094 [DEBUG] [Thread-132310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:41:32.094 [DEBUG] [Thread-132310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:41:32.094 [DEBUG] [Thread-132310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:41:32.094 [DEBUG] [Thread-132310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:41:32.113 [INFO] [Thread-132310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:41:32.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:41:32.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:41:32.946 [DEBUG] [Thread-132310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:41:32.946 [DEBUG] [Thread-132310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:41:32.994 [DEBUG] [Thread-132310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:41:32.994 [DEBUG] [Thread-132310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:41:33.003 [DEBUG] [Thread-132310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:41:33.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:41:33.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:41:33.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:41:33.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:41:33.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:41:33.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:41:33.037 [DEBUG] [Thread-132310] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:41:39.853 [DEBUG] [Thread-132312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:41:44.059 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:41:44.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:41:54.903 [DEBUG] [Thread-132313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:42:03.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:42:03.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:42:03.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
2026-02-11T16:42:04.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 41, 26), 15.09, 38.24, 0.0, 31.07, 24.01, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:42:04.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:41:26
2026-02-11T16:42:05.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:42:05.538 [DEBUG] [Thread-132314] [transport.py] [_log()] starting thread (client mode): 0xa2dc1270
2026-02-11T16:42:05.538 [DEBUG] [Thread-132314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:42:05.559 [DEBUG] [Thread-132314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:42:05.560 [INFO] [Thread-132314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] client lang: <none>
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] server lang: <none>
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] kex follows: False
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] Compression: none
2026-02-11T16:42:05.563 [DEBUG] [Thread-132314] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:42:05.581 [DEBUG] [Thread-132314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:42:05.582 [DEBUG] [Thread-132314] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:42:05.582 [DEBUG] [Thread-132314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:42:05.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:42:05.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:42:05.585 [DEBUG] [Thread-132314] [transport.py] [_log()] userauth is OK
2026-02-11T16:42:05.585 [DEBUG] [Thread-132314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:42:05.585 [DEBUG] [Thread-132314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:42:05.586 [DEBUG] [Thread-132314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:42:05.586 [DEBUG] [Thread-132314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:42:05.609 [INFO] [Thread-132314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:42:05.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:42:06.246 [DEBUG] [Thread-132314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:42:06.247 [DEBUG] [Thread-132314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:42:06.247 [DEBUG] [Thread-132314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:42:06.287 [DEBUG] [Thread-132314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:42:06.288 [DEBUG] [Thread-132314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:42:06.291 [DEBUG] [Thread-132314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:42:06.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:42:06.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:42:06.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:42:06.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:42:06.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:42:06.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:42:06.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:42:06.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:42:06.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:42:06.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.612294 -999.00  +23.40  24.09     45  +11.10 1 2 1 1 1   888    0 9.97 -101.16 ----- 26.9 24.1 297.8 35.5 26.8 -20.1 26.9 -18.9 26.7 -16.9 26.9 -17.8
2026-02-11T16:42:06.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:42:06.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:42:06.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.612294
2026-02-11T16:42:06.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:42:06.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:42:06.321 [DEBUG] [Thread-132314] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:42:06.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:42:06.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:42:06.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:42:06.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:41:26', tmtdew=15.09, humidity=38.24, cloud=0.0, wind=31.07, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:41:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:42:06.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:42:06.421 [DEBUG] [Thread-132317] [transport.py] [_log()] starting thread (client mode): 0xa2db4970
2026-02-11T16:42:06.422 [DEBUG] [Thread-132317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:42:06.437 [DEBUG] [Thread-132317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:42:06.437 [INFO] [Thread-132317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:42:06.445 [DEBUG] [Thread-132317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:42:06.445 [DEBUG] [Thread-132317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:42:06.445 [DEBUG] [Thread-132317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:42:06.446 [DEBUG] [Thread-132317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:06.446 [DEBUG] [Thread-132317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:06.446 [DEBUG] [Thread-132317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:06.446 [DEBUG] [Thread-132317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:06.446 [DEBUG] [Thread-132317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:42:06.446 [DEBUG] [Thread-132317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:42:06.446 [DEBUG] [Thread-132317] [transport.py] [_log()] client lang: <none>
2026-02-11T16:42:06.447 [DEBUG] [Thread-132317] [transport.py] [_log()] server lang: <none>
2026-02-11T16:42:06.447 [DEBUG] [Thread-132317] [transport.py] [_log()] kex follows: False
2026-02-11T16:42:06.447 [DEBUG] [Thread-132317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:42:06.447 [DEBUG] [Thread-132317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:42:06.447 [DEBUG] [Thread-132317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:42:06.447 [DEBUG] [Thread-132317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:42:06.447 [DEBUG] [Thread-132317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:42:06.448 [DEBUG] [Thread-132317] [transport.py] [_log()] Compression: none
2026-02-11T16:42:06.448 [DEBUG] [Thread-132317] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:42:06.506 [DEBUG] [Thread-132317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:42:06.507 [DEBUG] [Thread-132317] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:42:06.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:42:06.508 [DEBUG] [Thread-132317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:42:06.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:42:06.566 [DEBUG] [Thread-132317] [transport.py] [_log()] userauth is OK
2026-02-11T16:42:06.567 [DEBUG] [Thread-132317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:42:06.567 [DEBUG] [Thread-132317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:42:06.567 [DEBUG] [Thread-132317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:42:06.567 [DEBUG] [Thread-132317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:42:06.586 [INFO] [Thread-132317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:42:06.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:42:06.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:42:07.417 [DEBUG] [Thread-132317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:42:07.417 [DEBUG] [Thread-132317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:42:07.465 [DEBUG] [Thread-132317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:42:07.466 [DEBUG] [Thread-132317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:42:07.475 [DEBUG] [Thread-132317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:42:07.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:42:07.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')
2026-02-11T16:42:07.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:42:07.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:42:07.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:42:07.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:42:07.515 [DEBUG] [Thread-132317] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:42:09.940 [DEBUG] [Thread-132319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:42:24.992 [DEBUG] [Thread-132320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:42:25.584 [DEBUG] [Thread-132321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:42:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:42:37.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:42:37.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:42:39.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 42, 2), 14.98, 38.48, 0.0, 32.11, 23.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:42:39.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:42:02
2026-02-11T16:42:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:42:40.029 [DEBUG] [Thread-132322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:42:40.132 [DEBUG] [Thread-132323] [transport.py] [_log()] starting thread (client mode): 0xa57d68f0
2026-02-11T16:42:40.132 [DEBUG] [Thread-132323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:42:40.150 [DEBUG] [Thread-132323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:42:40.151 [INFO] [Thread-132323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] client lang: <none>
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] server lang: <none>
2026-02-11T16:42:40.152 [DEBUG] [Thread-132323] [transport.py] [_log()] kex follows: False
2026-02-11T16:42:40.153 [DEBUG] [Thread-132323] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:42:40.153 [DEBUG] [Thread-132323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:42:40.153 [DEBUG] [Thread-132323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:42:40.153 [DEBUG] [Thread-132323] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:42:40.153 [DEBUG] [Thread-132323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:42:40.153 [DEBUG] [Thread-132323] [transport.py] [_log()] Compression: none
2026-02-11T16:42:40.153 [DEBUG] [Thread-132323] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:42:40.162 [DEBUG] [Thread-132323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:42:40.163 [DEBUG] [Thread-132323] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:42:40.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:42:40.164 [DEBUG] [Thread-132323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:42:40.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:42:40.165 [DEBUG] [Thread-132323] [transport.py] [_log()] userauth is OK
2026-02-11T16:42:40.166 [DEBUG] [Thread-132323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:42:40.166 [DEBUG] [Thread-132323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:42:40.166 [DEBUG] [Thread-132323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:42:40.166 [DEBUG] [Thread-132323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:42:40.190 [INFO] [Thread-132323] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:42:40.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:42:40.975 [DEBUG] [Thread-132323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:42:40.975 [DEBUG] [Thread-132323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:42:40.976 [DEBUG] [Thread-132323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:42:41.016 [DEBUG] [Thread-132323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:42:41.017 [DEBUG] [Thread-132323] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:42:41.020 [DEBUG] [Thread-132323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:42:41.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:42:41.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:42:41.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:42:41.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:42:41.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:42:41.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:42:41.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:42:41.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:42:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:42:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.612642 -999.00  +23.50  26.56     46  +11.20 1 2 1 1 1   888    0 9.57 -109.29 ----- 23.4 26.6 279.4 28.8 26.8 -19.1 26.8 -17.8 26.4 -18.4 26.9 -17.0
2026-02-11T16:42:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:42:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:42:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.612642
2026-02-11T16:42:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:42:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:42:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:42:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:42:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:42:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:42:02', tmtdew=14.98, humidity=38.48, cloud=0.0, wind=32.11, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:42:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:42:41.047 [DEBUG] [Thread-132323] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:42:41.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:42:41.155 [DEBUG] [Thread-132326] [transport.py] [_log()] starting thread (client mode): 0xa5743010
2026-02-11T16:42:41.156 [DEBUG] [Thread-132326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:42:41.177 [DEBUG] [Thread-132326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:42:41.177 [INFO] [Thread-132326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:42:41.187 [DEBUG] [Thread-132326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:42:41.188 [DEBUG] [Thread-132326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] client lang: <none>
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] server lang: <none>
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] kex follows: False
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] Compression: none
2026-02-11T16:42:41.189 [DEBUG] [Thread-132326] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:42:41.269 [DEBUG] [Thread-132326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:42:41.269 [DEBUG] [Thread-132326] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:42:41.270 [DEBUG] [Thread-132326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:42:41.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:42:41.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:42:41.332 [DEBUG] [Thread-132326] [transport.py] [_log()] userauth is OK
2026-02-11T16:42:41.332 [DEBUG] [Thread-132326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:42:41.332 [DEBUG] [Thread-132326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:42:41.332 [DEBUG] [Thread-132326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:42:41.332 [DEBUG] [Thread-132326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:42:41.352 [INFO] [Thread-132326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:42:41.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:42:41.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:42:42.157 [DEBUG] [Thread-132326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:42:42.158 [DEBUG] [Thread-132326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:42:42.209 [DEBUG] [Thread-132326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:42:42.209 [DEBUG] [Thread-132326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:42:42.221 [DEBUG] [Thread-132326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:42:42.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:42:42.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:42:42.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:42:42.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:42:42.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:42:42.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:42:42.270 [DEBUG] [Thread-132326] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:42:44.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:42:44.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:42:55.062 [DEBUG] [Thread-132328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:43:10.116 [DEBUG] [Thread-132329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:43:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:43:12.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:43:12.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:43:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 42, 38), 15.35, 37.73, 0.0, 30.24, 24.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:43:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:42:38
2026-02-11T16:43:14.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:43:14.749 [DEBUG] [Thread-132330] [transport.py] [_log()] starting thread (client mode): 0xa57c0a30
2026-02-11T16:43:14.749 [DEBUG] [Thread-132330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:43:14.768 [DEBUG] [Thread-132330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:43:14.768 [INFO] [Thread-132330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:43:14.771 [DEBUG] [Thread-132330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] client lang: <none>
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] server lang: <none>
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] kex follows: False
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:43:14.772 [DEBUG] [Thread-132330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:43:14.773 [DEBUG] [Thread-132330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:43:14.773 [DEBUG] [Thread-132330] [transport.py] [_log()] Compression: none
2026-02-11T16:43:14.773 [DEBUG] [Thread-132330] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:43:14.789 [DEBUG] [Thread-132330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:43:14.789 [DEBUG] [Thread-132330] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:43:14.790 [DEBUG] [Thread-132330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:43:14.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:43:14.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:43:14.792 [DEBUG] [Thread-132330] [transport.py] [_log()] userauth is OK
2026-02-11T16:43:14.792 [DEBUG] [Thread-132330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:43:14.792 [DEBUG] [Thread-132330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:43:14.792 [DEBUG] [Thread-132330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:43:14.792 [DEBUG] [Thread-132330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:43:14.816 [INFO] [Thread-132330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:43:14.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:43:15.434 [DEBUG] [Thread-132330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:43:15.434 [DEBUG] [Thread-132330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:43:15.434 [DEBUG] [Thread-132330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:43:15.475 [DEBUG] [Thread-132330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:43:15.476 [DEBUG] [Thread-132330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:43:15.479 [DEBUG] [Thread-132330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:43:15.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:43:15.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:43:15.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:43:15.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:43:15.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:43:15.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:43:15.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:43:15.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:43:15.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:43:15.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.612989 -999.00  +23.50  28.73     46  +11.20 1 2 1 1 1   888    0 9.61 -107.67 ----- 21.1 28.7 282.0 35.4 26.7 -19.1 26.7 -17.5 26.3 -16.4 26.8 -17.0
2026-02-11T16:43:15.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:43:15.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:43:15.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.612989
2026-02-11T16:43:15.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:43:15.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:43:15.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:43:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:43:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:43:15.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:42:38', tmtdew=15.35, humidity=37.73, cloud=0.0, wind=30.24, temperature=24.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:42:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:43:15.506 [DEBUG] [Thread-132330] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:43:15.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:43:15.603 [DEBUG] [Thread-132333] [transport.py] [_log()] starting thread (client mode): 0xa2db6b90
2026-02-11T16:43:15.603 [DEBUG] [Thread-132333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:43:15.618 [DEBUG] [Thread-132333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:43:15.618 [INFO] [Thread-132333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:43:15.625 [DEBUG] [Thread-132333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] client lang: <none>
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] server lang: <none>
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] kex follows: False
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:43:15.626 [DEBUG] [Thread-132333] [transport.py] [_log()] Compression: none
2026-02-11T16:43:15.627 [DEBUG] [Thread-132333] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:43:15.686 [DEBUG] [Thread-132333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:43:15.687 [DEBUG] [Thread-132333] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:43:15.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:43:15.688 [DEBUG] [Thread-132333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:43:15.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:43:15.742 [DEBUG] [Thread-132333] [transport.py] [_log()] userauth is OK
2026-02-11T16:43:15.743 [DEBUG] [Thread-132333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:43:15.743 [DEBUG] [Thread-132333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:43:15.743 [DEBUG] [Thread-132333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:43:15.743 [DEBUG] [Thread-132333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:43:15.762 [INFO] [Thread-132333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:43:15.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:43:15.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:43:16.571 [DEBUG] [Thread-132333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:43:16.572 [DEBUG] [Thread-132333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:43:16.619 [DEBUG] [Thread-132333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:43:16.620 [DEBUG] [Thread-132333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:43:16.629 [DEBUG] [Thread-132333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:43:16.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:43:16.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:43:16.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:43:16.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:43:16.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:43:16.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:43:16.663 [DEBUG] [Thread-132333] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:43:25.151 [DEBUG] [Thread-132335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:43:25.621 [DEBUG] [Thread-132336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:43:40.204 [DEBUG] [Thread-132337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:43:44.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:43:44.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:43:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:43:46.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:43:46.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:43:48.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 43, 14), 14.33, 40.31, 0.0, 28.57, 23.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:43:48.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:43:14
2026-02-11T16:43:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:43:49.043 [DEBUG] [Thread-132338] [transport.py] [_log()] starting thread (client mode): 0xa57c16f0
2026-02-11T16:43:49.043 [DEBUG] [Thread-132338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:43:49.059 [DEBUG] [Thread-132338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:43:49.059 [INFO] [Thread-132338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:43:49.062 [DEBUG] [Thread-132338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] client lang: <none>
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] server lang: <none>
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] kex follows: False
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] Compression: none
2026-02-11T16:43:49.063 [DEBUG] [Thread-132338] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:43:49.072 [DEBUG] [Thread-132338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:43:49.072 [DEBUG] [Thread-132338] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:43:49.072 [DEBUG] [Thread-132338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:43:49.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:43:49.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:43:49.074 [DEBUG] [Thread-132338] [transport.py] [_log()] userauth is OK
2026-02-11T16:43:49.074 [DEBUG] [Thread-132338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:43:49.074 [DEBUG] [Thread-132338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:43:49.074 [DEBUG] [Thread-132338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:43:49.074 [DEBUG] [Thread-132338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:43:49.088 [INFO] [Thread-132338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:43:49.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:43:49.722 [DEBUG] [Thread-132338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:43:49.723 [DEBUG] [Thread-132338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:43:49.723 [DEBUG] [Thread-132338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:43:49.763 [DEBUG] [Thread-132338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:43:49.764 [DEBUG] [Thread-132338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:43:49.767 [DEBUG] [Thread-132338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:43:49.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:43:49.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:43:49.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:43:49.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:43:49.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:43:49.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:43:49.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.613336 -999.00  +23.40  24.85     46  +11.20 1 2 1 1 1   888    0 9.73 -105.20 ----- 24.0 24.9 283.0 33.7 26.6 -18.6 26.7 -17.1 26.2 -15.6 26.7 -16.8
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.613336
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:43:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:43:14', tmtdew=14.33, humidity=40.31, cloud=0.0, wind=28.57, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:43:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:43:49.790 [DEBUG] [Thread-132338] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:43:49.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:43:49.881 [DEBUG] [Thread-132341] [transport.py] [_log()] starting thread (client mode): 0xa57c0a30
2026-02-11T16:43:49.881 [DEBUG] [Thread-132341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:43:49.896 [DEBUG] [Thread-132341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:43:49.896 [INFO] [Thread-132341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] client lang: <none>
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] server lang: <none>
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] kex follows: False
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] Compression: none
2026-02-11T16:43:49.904 [DEBUG] [Thread-132341] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:43:49.967 [DEBUG] [Thread-132341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:43:49.967 [DEBUG] [Thread-132341] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:43:49.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:43:49.969 [DEBUG] [Thread-132341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:43:49.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:43:50.026 [DEBUG] [Thread-132341] [transport.py] [_log()] userauth is OK
2026-02-11T16:43:50.027 [DEBUG] [Thread-132341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:43:50.027 [DEBUG] [Thread-132341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:43:50.027 [DEBUG] [Thread-132341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:43:50.027 [DEBUG] [Thread-132341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:43:50.052 [INFO] [Thread-132341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:43:50.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:43:50.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:43:50.889 [DEBUG] [Thread-132341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:43:50.890 [DEBUG] [Thread-132341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:43:50.937 [DEBUG] [Thread-132341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:43:50.937 [DEBUG] [Thread-132341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:43:50.947 [DEBUG] [Thread-132341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:43:50.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:43:50.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:43:50.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:43:50.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:43:50.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:43:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:43:50.985 [DEBUG] [Thread-132341] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:43:55.241 [DEBUG] [Thread-132343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:10.302 [DEBUG] [Thread-132344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:20.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:44:20.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:44:20.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:44:23.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 43, 49), 14.37, 39.98, 0.0, 25.04, 23.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:44:23.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:43:49
2026-02-11T16:44:23.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:44:23.543 [DEBUG] [Thread-132345] [transport.py] [_log()] starting thread (client mode): 0xa5770a60
2026-02-11T16:44:23.543 [DEBUG] [Thread-132345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:44:23.563 [DEBUG] [Thread-132345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:44:23.563 [INFO] [Thread-132345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:44:23.566 [DEBUG] [Thread-132345] [transport.py] [_log()] client lang: <none>
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] server lang: <none>
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] kex follows: False
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] Compression: none
2026-02-11T16:44:23.567 [DEBUG] [Thread-132345] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:44:23.586 [DEBUG] [Thread-132345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:44:23.586 [DEBUG] [Thread-132345] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:44:23.587 [DEBUG] [Thread-132345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:44:23.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:44:23.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:44:23.589 [DEBUG] [Thread-132345] [transport.py] [_log()] userauth is OK
2026-02-11T16:44:23.589 [DEBUG] [Thread-132345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:44:23.590 [DEBUG] [Thread-132345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:44:23.590 [DEBUG] [Thread-132345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:44:23.590 [DEBUG] [Thread-132345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:44:23.614 [INFO] [Thread-132345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:44:23.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:44:24.257 [DEBUG] [Thread-132345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:44:24.258 [DEBUG] [Thread-132345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:44:24.258 [DEBUG] [Thread-132345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:44:24.298 [DEBUG] [Thread-132345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:44:24.298 [DEBUG] [Thread-132345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:44:24.301 [DEBUG] [Thread-132345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:44:24.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:44:24.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:44:24.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:44:24.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:44:24.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:44:24.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:44:24.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:44:24.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:44:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:44:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.613683 -999.00  +23.50  26.11     46  +11.20 1 2 1 1 1   888    0 10.08 -94.23 ----- 28.7 26.1 276.4 33.3 26.5 -18.4 26.6 -17.0 26.1 -18.0 26.6 -15.7
2026-02-11T16:44:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:44:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:44:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.613683
2026-02-11T16:44:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:44:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:44:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:44:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:44:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:44:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:43:49', tmtdew=14.37, humidity=39.98, cloud=0.0, wind=25.04, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:43:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:44:24.325 [DEBUG] [Thread-132345] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:44:24.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:44:24.422 [DEBUG] [Thread-132348] [transport.py] [_log()] starting thread (client mode): 0x9eb04910
2026-02-11T16:44:24.422 [DEBUG] [Thread-132348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:44:24.440 [DEBUG] [Thread-132348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:44:24.441 [INFO] [Thread-132348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:44:24.448 [DEBUG] [Thread-132348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:44:24.448 [DEBUG] [Thread-132348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:44:24.448 [DEBUG] [Thread-132348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] client lang: <none>
2026-02-11T16:44:24.449 [DEBUG] [Thread-132348] [transport.py] [_log()] server lang: <none>
2026-02-11T16:44:24.450 [DEBUG] [Thread-132348] [transport.py] [_log()] kex follows: False
2026-02-11T16:44:24.450 [DEBUG] [Thread-132348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:44:24.450 [DEBUG] [Thread-132348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:44:24.450 [DEBUG] [Thread-132348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:44:24.450 [DEBUG] [Thread-132348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:44:24.450 [DEBUG] [Thread-132348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:44:24.450 [DEBUG] [Thread-132348] [transport.py] [_log()] Compression: none
2026-02-11T16:44:24.451 [DEBUG] [Thread-132348] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:44:24.508 [DEBUG] [Thread-132348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:44:24.509 [DEBUG] [Thread-132348] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:44:24.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:44:24.510 [DEBUG] [Thread-132348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:44:24.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:44:24.571 [DEBUG] [Thread-132348] [transport.py] [_log()] userauth is OK
2026-02-11T16:44:24.571 [DEBUG] [Thread-132348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:44:24.572 [DEBUG] [Thread-132348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:44:24.572 [DEBUG] [Thread-132348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:44:24.572 [DEBUG] [Thread-132348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:44:24.590 [INFO] [Thread-132348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:44:24.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:44:24.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:44:25.340 [DEBUG] [Thread-132350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:25.441 [DEBUG] [Thread-132348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:44:25.441 [DEBUG] [Thread-132348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:44:25.490 [DEBUG] [Thread-132348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:44:25.490 [DEBUG] [Thread-132348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:44:25.502 [DEBUG] [Thread-132348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:44:25.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:44:25.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:44: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') -> 00000000
2026-02-11T16:44:25.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:44:25.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:44:25.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:44:25.546 [DEBUG] [Thread-132348] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:44:25.666 [DEBUG] [Thread-132351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:40.393 [DEBUG] [Thread-132352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:44.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:44.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:55.432 [DEBUG] [Thread-132353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:44:55.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:44:55.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:44:55.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:44:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 44, 24), 14.4, 39.91, 0.0, 24.93, 23.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:44:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:44:24
2026-02-11T16:44:57.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:44:57.950 [DEBUG] [Thread-132354] [transport.py] [_log()] starting thread (client mode): 0xa57c1ba0
2026-02-11T16:44:57.950 [DEBUG] [Thread-132354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:44:57.970 [DEBUG] [Thread-132354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:44:57.970 [INFO] [Thread-132354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] client lang: <none>
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] server lang: <none>
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] kex follows: False
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:44:57.973 [DEBUG] [Thread-132354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:44:57.974 [DEBUG] [Thread-132354] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:44:57.974 [DEBUG] [Thread-132354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:44:57.974 [DEBUG] [Thread-132354] [transport.py] [_log()] Compression: none
2026-02-11T16:44:57.974 [DEBUG] [Thread-132354] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:44:57.995 [DEBUG] [Thread-132354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:44:57.996 [DEBUG] [Thread-132354] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:44:57.996 [DEBUG] [Thread-132354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:44:57.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:44:57.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:44:57.998 [DEBUG] [Thread-132354] [transport.py] [_log()] userauth is OK
2026-02-11T16:44:57.998 [DEBUG] [Thread-132354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:44:57.999 [DEBUG] [Thread-132354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:44:57.999 [DEBUG] [Thread-132354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:44:57.999 [DEBUG] [Thread-132354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:44:58.033 [INFO] [Thread-132354] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:44:58.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:44:58.681 [DEBUG] [Thread-132354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:44:58.681 [DEBUG] [Thread-132354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:44:58.682 [DEBUG] [Thread-132354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:44:58.722 [DEBUG] [Thread-132354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:44:58.723 [DEBUG] [Thread-132354] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:44:58.726 [DEBUG] [Thread-132354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:44:58.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:44:58.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:44:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:44:58.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:44:58.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:44:58.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:44:58.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:44:58.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:44:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:44:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.614030 -999.00  +23.60  19.92     45  +11.20 1 2 1 1 1   888    0 10.20 -88.33 ----- 24.8 19.9 286.0 30.2 26.4 -17.1 26.5 -16.7 26.1 -15.5 26.6 -15.3
2026-02-11T16:44:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:44:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:44:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.614030
2026-02-11T16:44:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:44:58.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:44:58.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:44:58.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:44:58.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:44:58.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:44:24', tmtdew=14.4, humidity=39.91, cloud=0.0, wind=24.93, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:44:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:44:58.753 [DEBUG] [Thread-132354] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:44:58.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:44:58.859 [DEBUG] [Thread-132357] [transport.py] [_log()] starting thread (client mode): 0xa5741060
2026-02-11T16:44:58.859 [DEBUG] [Thread-132357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:44:58.874 [DEBUG] [Thread-132357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:44:58.874 [INFO] [Thread-132357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] client lang: <none>
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] server lang: <none>
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] kex follows: False
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:44:58.882 [DEBUG] [Thread-132357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:44:58.883 [DEBUG] [Thread-132357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:44:58.883 [DEBUG] [Thread-132357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:44:58.883 [DEBUG] [Thread-132357] [transport.py] [_log()] Compression: none
2026-02-11T16:44:58.883 [DEBUG] [Thread-132357] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:44:58.939 [DEBUG] [Thread-132357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:44:58.940 [DEBUG] [Thread-132357] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:44:58.941 [DEBUG] [Thread-132357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:44:58.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:44:58.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:44:58.995 [DEBUG] [Thread-132357] [transport.py] [_log()] userauth is OK
2026-02-11T16:44:58.995 [DEBUG] [Thread-132357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:44:58.996 [DEBUG] [Thread-132357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:44:58.996 [DEBUG] [Thread-132357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:44:58.996 [DEBUG] [Thread-132357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:44:59.014 [INFO] [Thread-132357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:44:59.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:44:59.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:44:59.841 [DEBUG] [Thread-132357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:44:59.841 [DEBUG] [Thread-132357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:44:59.889 [DEBUG] [Thread-132357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:44:59.889 [DEBUG] [Thread-132357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:44:59.899 [DEBUG] [Thread-132357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:44:59.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:44:59.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:44:59.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:44:59.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:44:59.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:44:59.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:44:59.935 [DEBUG] [Thread-132357] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:45:10.471 [DEBUG] [Thread-132359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:45:25.520 [DEBUG] [Thread-132360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:45:25.711 [DEBUG] [Thread-132361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:45:29.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:45:29.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:45:29.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:45:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 44, 24), 14.4, 39.91, 0.0, 24.93, 23.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:45:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:44:24
2026-02-11T16:45:32.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:45:32.447 [DEBUG] [Thread-132362] [transport.py] [_log()] starting thread (client mode): 0xa57719f0
2026-02-11T16:45:32.447 [DEBUG] [Thread-132362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:45:32.466 [DEBUG] [Thread-132362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:45:32.466 [INFO] [Thread-132362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:45:32.469 [DEBUG] [Thread-132362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:45:32.469 [DEBUG] [Thread-132362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:45:32.469 [DEBUG] [Thread-132362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] client lang: <none>
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] server lang: <none>
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] kex follows: False
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] Compression: none
2026-02-11T16:45:32.470 [DEBUG] [Thread-132362] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:45:32.487 [DEBUG] [Thread-132362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:45:32.487 [DEBUG] [Thread-132362] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:45:32.488 [DEBUG] [Thread-132362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:45:32.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:45:32.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:45:32.490 [DEBUG] [Thread-132362] [transport.py] [_log()] userauth is OK
2026-02-11T16:45:32.490 [DEBUG] [Thread-132362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:45:32.490 [DEBUG] [Thread-132362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:45:32.490 [DEBUG] [Thread-132362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:45:32.490 [DEBUG] [Thread-132362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:45:32.515 [INFO] [Thread-132362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:45:32.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:45:33.120 [DEBUG] [Thread-132362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:45:33.120 [DEBUG] [Thread-132362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:45:33.121 [DEBUG] [Thread-132362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:45:33.161 [DEBUG] [Thread-132362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:45:33.161 [DEBUG] [Thread-132362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:45:33.164 [DEBUG] [Thread-132362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:45:33.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:45:33.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:45:33.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:45:33.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:45:33.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:45:33.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:45:33.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:45:33.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:45:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:45:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.614378 -999.00  +23.60  19.62     46  +11.50 1 2 1 1 1   888    0 10.36 -85.76 ----- 25.7 19.6 296.4 33.5 26.5 -17.1 26.5 -16.2 26.1 -14.9 26.5 -15.3
2026-02-11T16:45:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:45:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:45:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.614378
2026-02-11T16:45:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:45:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:45:33.186 [DEBUG] [Thread-132362] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:45:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:45:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:45:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:45:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:44:24', tmtdew=14.4, humidity=39.91, cloud=0.0, wind=24.93, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:44:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:45:33.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:45:33.284 [DEBUG] [Thread-132365] [transport.py] [_log()] starting thread (client mode): 0x9eb066b0
2026-02-11T16:45:33.284 [DEBUG] [Thread-132365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:45:33.298 [DEBUG] [Thread-132365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:45:33.298 [INFO] [Thread-132365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] client lang: <none>
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] server lang: <none>
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] kex follows: False
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] Compression: none
2026-02-11T16:45:33.306 [DEBUG] [Thread-132365] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:45:33.363 [DEBUG] [Thread-132365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:45:33.364 [DEBUG] [Thread-132365] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:45:33.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:45:33.365 [DEBUG] [Thread-132365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:45:33.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:45:33.419 [DEBUG] [Thread-132365] [transport.py] [_log()] userauth is OK
2026-02-11T16:45:33.420 [DEBUG] [Thread-132365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:45:33.420 [DEBUG] [Thread-132365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:45:33.420 [DEBUG] [Thread-132365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:45:33.420 [DEBUG] [Thread-132365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:45:33.439 [INFO] [Thread-132365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:45:33.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:45:33.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:45:34.254 [DEBUG] [Thread-132365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:45:34.254 [DEBUG] [Thread-132365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:45:34.302 [DEBUG] [Thread-132365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:45:34.303 [DEBUG] [Thread-132365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:45:34.312 [DEBUG] [Thread-132365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:45:34.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:45:34.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')
2026-02-11T16:45:34.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:45:34.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:45:34.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:45:34.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:45:34.349 [DEBUG] [Thread-132365] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:45:40.560 [DEBUG] [Thread-132367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:45:44.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:45:44.636 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:45:55.611 [DEBUG] [Thread-132368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:46:04.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:46:04.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:46:04.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:46:06.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 45, 36), 14.98, 38.66, 0.0, 28.93, 24.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:46:06.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:45:36
2026-02-11T16:46:07.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:46:07.192 [DEBUG] [Thread-132369] [transport.py] [_log()] starting thread (client mode): 0xa57c32b0
2026-02-11T16:46:07.192 [DEBUG] [Thread-132369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:46:07.212 [DEBUG] [Thread-132369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:46:07.212 [INFO] [Thread-132369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] client lang: <none>
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] server lang: <none>
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] kex follows: False
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:46:07.215 [DEBUG] [Thread-132369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:46:07.216 [DEBUG] [Thread-132369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:46:07.216 [DEBUG] [Thread-132369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:46:07.216 [DEBUG] [Thread-132369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:46:07.216 [DEBUG] [Thread-132369] [transport.py] [_log()] Compression: none
2026-02-11T16:46:07.216 [DEBUG] [Thread-132369] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:46:07.232 [DEBUG] [Thread-132369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:46:07.233 [DEBUG] [Thread-132369] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:46:07.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:46:07.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:46:07.234 [DEBUG] [Thread-132369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:46:07.234 [DEBUG] [Thread-132369] [transport.py] [_log()] userauth is OK
2026-02-11T16:46:07.235 [DEBUG] [Thread-132369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:46:07.235 [DEBUG] [Thread-132369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:46:07.235 [DEBUG] [Thread-132369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:46:07.235 [DEBUG] [Thread-132369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:46:07.266 [INFO] [Thread-132369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:46:07.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:46:07.886 [DEBUG] [Thread-132369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:46:07.886 [DEBUG] [Thread-132369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:46:07.887 [DEBUG] [Thread-132369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:46:07.927 [DEBUG] [Thread-132369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:46:07.928 [DEBUG] [Thread-132369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:46:07.931 [DEBUG] [Thread-132369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:46:07.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:46:07.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:46:07.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:46:07.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:46:07.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:46:07.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:46:07.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:46:07.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:46:07.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:46:07.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.614725 -999.00  +23.70  26.90     46  +11.50 1 2 1 1 1   888    0 10.10 -90.34 ----- 30.8 26.9 295.8 33.5 26.5 -16.8 26.4 -16.2 26.2 -15.4 26.5 -14.5
2026-02-11T16:46:07.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:46:07.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:46:07.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.614725
2026-02-11T16:46:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:46:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:46:07.958 [DEBUG] [Thread-132369] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:46:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:46:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:46:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:46:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:45:36', tmtdew=14.98, humidity=38.66, cloud=0.0, wind=28.93, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:45:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:46:08.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:46:08.054 [DEBUG] [Thread-132372] [transport.py] [_log()] starting thread (client mode): 0xa2d55750
2026-02-11T16:46:08.055 [DEBUG] [Thread-132372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:46:08.069 [DEBUG] [Thread-132372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:46:08.069 [INFO] [Thread-132372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:46:08.076 [DEBUG] [Thread-132372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:46:08.076 [DEBUG] [Thread-132372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:46:08.076 [DEBUG] [Thread-132372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] client lang: <none>
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] server lang: <none>
2026-02-11T16:46:08.077 [DEBUG] [Thread-132372] [transport.py] [_log()] kex follows: False
2026-02-11T16:46:08.078 [DEBUG] [Thread-132372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:46:08.078 [DEBUG] [Thread-132372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:46:08.078 [DEBUG] [Thread-132372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:46:08.078 [DEBUG] [Thread-132372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:46:08.078 [DEBUG] [Thread-132372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:46:08.078 [DEBUG] [Thread-132372] [transport.py] [_log()] Compression: none
2026-02-11T16:46:08.078 [DEBUG] [Thread-132372] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:46:08.136 [DEBUG] [Thread-132372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:46:08.136 [DEBUG] [Thread-132372] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:46:08.137 [DEBUG] [Thread-132372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:46:08.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:46:08.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:46:08.191 [DEBUG] [Thread-132372] [transport.py] [_log()] userauth is OK
2026-02-11T16:46:08.191 [DEBUG] [Thread-132372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:46:08.191 [DEBUG] [Thread-132372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:46:08.191 [DEBUG] [Thread-132372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:46:08.191 [DEBUG] [Thread-132372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:46:08.215 [INFO] [Thread-132372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:46:08.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:46:08.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:46:09.059 [DEBUG] [Thread-132372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:46:09.068 [DEBUG] [Thread-132372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:46:09.107 [DEBUG] [Thread-132372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:46:09.108 [DEBUG] [Thread-132372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:46:09.117 [DEBUG] [Thread-132372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:46:09.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:46:09.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:46:09.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:46:09.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:46:09.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:46:09.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:46:09.153 [DEBUG] [Thread-132372] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:46:10.648 [DEBUG] [Thread-132374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:46:25.698 [DEBUG] [Thread-132375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:46:25.745 [DEBUG] [Thread-132376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:46:39.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:46:39.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:46:39.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:46:40.734 [DEBUG] [Thread-132377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:46:41.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 46, 11), 14.17, 40.56, 0.0, 31.14, 23.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:46:41.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:46:11
2026-02-11T16:46:41.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:46:42.047 [DEBUG] [Thread-132378] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ef0
2026-02-11T16:46:42.047 [DEBUG] [Thread-132378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:46:42.064 [DEBUG] [Thread-132378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:46:42.064 [INFO] [Thread-132378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:46:42.067 [DEBUG] [Thread-132378] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:46:42.067 [DEBUG] [Thread-132378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:46:42.067 [DEBUG] [Thread-132378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:46:42.067 [DEBUG] [Thread-132378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] client lang: <none>
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] server lang: <none>
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] kex follows: False
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] Compression: none
2026-02-11T16:46:42.068 [DEBUG] [Thread-132378] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:46:42.086 [DEBUG] [Thread-132378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:46:42.086 [DEBUG] [Thread-132378] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:46:42.087 [DEBUG] [Thread-132378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:46:42.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:46:42.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:46:42.089 [DEBUG] [Thread-132378] [transport.py] [_log()] userauth is OK
2026-02-11T16:46:42.089 [DEBUG] [Thread-132378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:46:42.089 [DEBUG] [Thread-132378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:46:42.089 [DEBUG] [Thread-132378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:46:42.089 [DEBUG] [Thread-132378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:46:42.114 [INFO] [Thread-132378] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:46:42.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:46:42.765 [DEBUG] [Thread-132378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:46:42.766 [DEBUG] [Thread-132378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:46:42.766 [DEBUG] [Thread-132378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:46:42.807 [DEBUG] [Thread-132378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:46:42.807 [DEBUG] [Thread-132378] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:46:42.810 [DEBUG] [Thread-132378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:46:42.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:46:42.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:46:42.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:46:42.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:46:42.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:46:42.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:46:42.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:46:42.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:46:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:46:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.615419 -999.00  +23.50  26.91     47  +11.70 1 2 1 1 1   888    0 9.87 -96.69 ----- 24.1 26.9 293.6 34.8 26.8 -15.4 26.7 -14.4 26.9 -11.2 26.9 -11.8
2026-02-11T16:46:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:46:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:46:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.615419
2026-02-11T16:46:42.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:46:42.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:46:42.838 [DEBUG] [Thread-132378] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:46:42.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:46:42.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:46:42.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:46:42.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:46:11', tmtdew=14.17, humidity=40.56, cloud=0.0, wind=31.14, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:46:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:46:42.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:46:42.929 [DEBUG] [Thread-132381] [transport.py] [_log()] starting thread (client mode): 0xa2d57d00
2026-02-11T16:46:42.929 [DEBUG] [Thread-132381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:46:42.944 [DEBUG] [Thread-132381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:46:42.944 [INFO] [Thread-132381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] client lang: <none>
2026-02-11T16:46:42.951 [DEBUG] [Thread-132381] [transport.py] [_log()] server lang: <none>
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] kex follows: False
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] Compression: none
2026-02-11T16:46:42.952 [DEBUG] [Thread-132381] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:46:43.010 [DEBUG] [Thread-132381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:46:43.010 [DEBUG] [Thread-132381] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:46:43.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:46:43.011 [DEBUG] [Thread-132381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:46:43.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:46:43.070 [DEBUG] [Thread-132381] [transport.py] [_log()] userauth is OK
2026-02-11T16:46:43.070 [DEBUG] [Thread-132381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:46:43.070 [DEBUG] [Thread-132381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:46:43.070 [DEBUG] [Thread-132381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:46:43.070 [DEBUG] [Thread-132381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:46:43.093 [INFO] [Thread-132381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:46:43.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:46:43.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:46:43.960 [DEBUG] [Thread-132381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:46:43.960 [DEBUG] [Thread-132381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:46:44.008 [DEBUG] [Thread-132381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:46:44.008 [DEBUG] [Thread-132381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:46:44.017 [DEBUG] [Thread-132381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:46:44.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:46:44.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:46:44.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:46:44.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:46:44.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:46:44.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:46:44.052 [DEBUG] [Thread-132381] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:46:44.778 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:46:44.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:46:55.768 [DEBUG] [Thread-132383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:47:10.820 [DEBUG] [Thread-132384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:47:14.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:47:14.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:47:14.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:47:15.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 46, 47), 14.18, 40.78, 0.0, 26.47, 24.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:47:15.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:46:47
2026-02-11T16:47:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:47:16.503 [DEBUG] [Thread-132385] [transport.py] [_log()] starting thread (client mode): 0xa2d55a50
2026-02-11T16:47:16.504 [DEBUG] [Thread-132385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:47:16.531 [DEBUG] [Thread-132385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:47:16.531 [INFO] [Thread-132385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] client lang: <none>
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] server lang: <none>
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] kex follows: False
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] Compression: none
2026-02-11T16:47:16.534 [DEBUG] [Thread-132385] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:47:16.550 [DEBUG] [Thread-132385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:47:16.550 [DEBUG] [Thread-132385] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:47:16.550 [DEBUG] [Thread-132385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:47:16.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:47:16.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:47:16.551 [DEBUG] [Thread-132385] [transport.py] [_log()] userauth is OK
2026-02-11T16:47:16.552 [DEBUG] [Thread-132385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:47:16.552 [DEBUG] [Thread-132385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:47:16.552 [DEBUG] [Thread-132385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:47:16.552 [DEBUG] [Thread-132385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:47:16.563 [INFO] [Thread-132385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:47:16.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:47:17.248 [DEBUG] [Thread-132385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:47:17.248 [DEBUG] [Thread-132385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:47:17.249 [DEBUG] [Thread-132385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:47:17.289 [DEBUG] [Thread-132385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:47:17.289 [DEBUG] [Thread-132385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:47:17.292 [DEBUG] [Thread-132385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:47:17.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:47:17.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:47:17.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:47:17.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:47:17.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:47:17.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:47:17.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.615766 -999.00  +23.90  25.61     47  +11.90 1 2 1 1 1   888    0 9.90 -99.12 ----- 28.0 25.6 299.6 34.2 27.1 -14.4 26.9 -14.2 27.2 -11.7 27.4 -12.1
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.615766
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:47:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:46:47', tmtdew=14.18, humidity=40.78, cloud=0.0, wind=26.47, temperature=24.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:46:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:47:17.314 [DEBUG] [Thread-132385] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:47:17.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:47:17.402 [DEBUG] [Thread-132388] [transport.py] [_log()] starting thread (client mode): 0x9eb06200
2026-02-11T16:47:17.402 [DEBUG] [Thread-132388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:47:17.416 [DEBUG] [Thread-132388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:47:17.416 [INFO] [Thread-132388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] client lang: <none>
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] server lang: <none>
2026-02-11T16:47:17.424 [DEBUG] [Thread-132388] [transport.py] [_log()] kex follows: False
2026-02-11T16:47:17.425 [DEBUG] [Thread-132388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:47:17.425 [DEBUG] [Thread-132388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:47:17.425 [DEBUG] [Thread-132388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:47:17.425 [DEBUG] [Thread-132388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:47:17.425 [DEBUG] [Thread-132388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:47:17.425 [DEBUG] [Thread-132388] [transport.py] [_log()] Compression: none
2026-02-11T16:47:17.425 [DEBUG] [Thread-132388] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:47:17.484 [DEBUG] [Thread-132388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:47:17.485 [DEBUG] [Thread-132388] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:47:17.486 [DEBUG] [Thread-132388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:47:17.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:47:17.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:47:17.540 [DEBUG] [Thread-132388] [transport.py] [_log()] userauth is OK
2026-02-11T16:47:17.541 [DEBUG] [Thread-132388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:47:17.541 [DEBUG] [Thread-132388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:47:17.541 [DEBUG] [Thread-132388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:47:17.541 [DEBUG] [Thread-132388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:47:17.560 [INFO] [Thread-132388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:47:17.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:47:17.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:47:18.424 [DEBUG] [Thread-132388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:47:18.425 [DEBUG] [Thread-132388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:47:18.472 [DEBUG] [Thread-132388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:47:18.473 [DEBUG] [Thread-132388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:47:18.482 [DEBUG] [Thread-132388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:47:18.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:47:18.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')
2026-02-11T16:47:18.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:47:18.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:47:18.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:47:18.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:47:18.519 [DEBUG] [Thread-132388] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:47:25.788 [DEBUG] [Thread-132390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:47:25.859 [DEBUG] [Thread-132391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:47:40.910 [DEBUG] [Thread-132392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:47:44.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:47:44.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:47:48.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:47:48.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:47:48.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:47:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 47, 24), 14.0, 41.19, 0.0, 24.3, 23.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:47:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:47:24
2026-02-11T16:47:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:47:50.899 [DEBUG] [Thread-132393] [transport.py] [_log()] starting thread (client mode): 0xa57420b0
2026-02-11T16:47:50.899 [DEBUG] [Thread-132393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:47:50.920 [DEBUG] [Thread-132393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:47:50.920 [INFO] [Thread-132393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] client lang: <none>
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] server lang: <none>
2026-02-11T16:47:50.923 [DEBUG] [Thread-132393] [transport.py] [_log()] kex follows: False
2026-02-11T16:47:50.924 [DEBUG] [Thread-132393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:47:50.924 [DEBUG] [Thread-132393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:47:50.924 [DEBUG] [Thread-132393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:47:50.924 [DEBUG] [Thread-132393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:47:50.924 [DEBUG] [Thread-132393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:47:50.924 [DEBUG] [Thread-132393] [transport.py] [_log()] Compression: none
2026-02-11T16:47:50.924 [DEBUG] [Thread-132393] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:47:50.932 [DEBUG] [Thread-132393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:47:50.933 [DEBUG] [Thread-132393] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:47:50.933 [DEBUG] [Thread-132393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:47:50.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:47:50.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:47:50.935 [DEBUG] [Thread-132393] [transport.py] [_log()] userauth is OK
2026-02-11T16:47:50.935 [DEBUG] [Thread-132393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:47:50.935 [DEBUG] [Thread-132393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:47:50.935 [DEBUG] [Thread-132393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:47:50.935 [DEBUG] [Thread-132393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:47:50.959 [INFO] [Thread-132393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:47:50.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:47:51.577 [DEBUG] [Thread-132393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:47:51.577 [DEBUG] [Thread-132393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:47:51.578 [DEBUG] [Thread-132393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:47:51.618 [DEBUG] [Thread-132393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:47:51.618 [DEBUG] [Thread-132393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:47:51.621 [DEBUG] [Thread-132393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:47:51.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:47:51.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:47:51.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:47:51.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:47:51.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:47:51.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:47:51.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:47:51.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:47:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:47:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.616114 -999.00  +24.30  34.57     46  +11.90 1 2 2 1 1   888    0 9.77 -97.48 ----- 27.6 34.6 294.2 38.1 27.3 -14.6 27.1 -14.1 27.4 -14.6 27.8 -12.6
2026-02-11T16:47:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:47:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:47:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.616114
2026-02-11T16:47:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:47:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:47:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:47:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:47:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:47:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:47:24', tmtdew=14.0, humidity=41.19, cloud=0.0, wind=24.3, temperature=23.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:47:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:47:51.650 [DEBUG] [Thread-132393] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:47:51.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:47:51.755 [DEBUG] [Thread-132396] [transport.py] [_log()] starting thread (client mode): 0x9eb053c0
2026-02-11T16:47:51.755 [DEBUG] [Thread-132396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:47:51.771 [DEBUG] [Thread-132396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:47:51.771 [INFO] [Thread-132396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] client lang: <none>
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] server lang: <none>
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] kex follows: False
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:47:51.779 [DEBUG] [Thread-132396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:47:51.780 [DEBUG] [Thread-132396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:47:51.780 [DEBUG] [Thread-132396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:47:51.780 [DEBUG] [Thread-132396] [transport.py] [_log()] Compression: none
2026-02-11T16:47:51.780 [DEBUG] [Thread-132396] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:47:51.837 [DEBUG] [Thread-132396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:47:51.838 [DEBUG] [Thread-132396] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:47:51.838 [DEBUG] [Thread-132396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:47:51.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:47:51.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:47:51.897 [DEBUG] [Thread-132396] [transport.py] [_log()] userauth is OK
2026-02-11T16:47:51.897 [DEBUG] [Thread-132396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:47:51.897 [DEBUG] [Thread-132396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:47:51.897 [DEBUG] [Thread-132396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:47:51.898 [DEBUG] [Thread-132396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:47:51.923 [INFO] [Thread-132396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:47:51.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:47:51.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:47:52.726 [DEBUG] [Thread-132396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:47:52.726 [DEBUG] [Thread-132396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:47:52.774 [DEBUG] [Thread-132396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:47:52.774 [DEBUG] [Thread-132396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:47:52.783 [DEBUG] [Thread-132396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:47:52.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:47:52.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')
2026-02-11T16:47:52.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:47:52.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:47:52.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:47:52.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:47:52.820 [DEBUG] [Thread-132396] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:47:55.946 [DEBUG] [Thread-132398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:11.001 [DEBUG] [Thread-132399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:48:22.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:48: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
2026-02-11T16:48:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 48, 1), 13.89, 41.49, 0.0, 33.91, 23.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:48:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:48:01
2026-02-11T16:48:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:48:25.727 [DEBUG] [Thread-132400] [transport.py] [_log()] starting thread (client mode): 0xa2d55870
2026-02-11T16:48:25.727 [DEBUG] [Thread-132400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:48:25.748 [DEBUG] [Thread-132400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:48:25.748 [INFO] [Thread-132400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] client lang: <none>
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] server lang: <none>
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] kex follows: False
2026-02-11T16:48:25.751 [DEBUG] [Thread-132400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:48:25.752 [DEBUG] [Thread-132400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:48:25.752 [DEBUG] [Thread-132400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:48:25.752 [DEBUG] [Thread-132400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:48:25.752 [DEBUG] [Thread-132400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:48:25.752 [DEBUG] [Thread-132400] [transport.py] [_log()] Compression: none
2026-02-11T16:48:25.752 [DEBUG] [Thread-132400] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:48:25.770 [DEBUG] [Thread-132400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:48:25.771 [DEBUG] [Thread-132400] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:48:25.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:48:25.772 [DEBUG] [Thread-132400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:48:25.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:48:25.775 [DEBUG] [Thread-132400] [transport.py] [_log()] userauth is OK
2026-02-11T16:48:25.775 [DEBUG] [Thread-132400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:48:25.775 [DEBUG] [Thread-132400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:48:25.775 [DEBUG] [Thread-132400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:48:25.775 [DEBUG] [Thread-132400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:48:25.799 [INFO] [Thread-132400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:48:25.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:48:25.825 [DEBUG] [Thread-132402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:26.037 [DEBUG] [Thread-132403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:26.538 [DEBUG] [Thread-132400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:48:26.539 [DEBUG] [Thread-132400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:48:26.539 [DEBUG] [Thread-132400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:48:26.579 [DEBUG] [Thread-132400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:48:26.579 [DEBUG] [Thread-132400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:48:26.583 [DEBUG] [Thread-132400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:48:26.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:48:26.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:48:26.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:48:26.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:48:26.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:48:26.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:48:26.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:48:26.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:48:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:48:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.616461 -999.00  +24.00  33.31     46  +11.70 1 2 2 1 1   888    0 9.74 -89.20 ----- 33.1 33.3 297.2 39.2 27.4 -15.2 27.2 -14.7 27.2 -18.0 27.9 -14.1
2026-02-11T16:48:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:48:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:48:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.616461
2026-02-11T16:48:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:48:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:48:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:48:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:48:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:48:26.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:48:01', tmtdew=13.89, humidity=41.49, cloud=0.0, wind=33.91, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:47:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:48:26.609 [DEBUG] [Thread-132400] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:48:26.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:48:26.705 [DEBUG] [Thread-132405] [transport.py] [_log()] starting thread (client mode): 0xa57c10c0
2026-02-11T16:48:26.705 [DEBUG] [Thread-132405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:48:26.720 [DEBUG] [Thread-132405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:48:26.720 [INFO] [Thread-132405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:48:26.728 [DEBUG] [Thread-132405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:48:26.728 [DEBUG] [Thread-132405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:48:26.728 [DEBUG] [Thread-132405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:48:26.728 [DEBUG] [Thread-132405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:48:26.728 [DEBUG] [Thread-132405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:48:26.728 [DEBUG] [Thread-132405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:48:26.728 [DEBUG] [Thread-132405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] client lang: <none>
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] server lang: <none>
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] kex follows: False
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] Compression: none
2026-02-11T16:48:26.729 [DEBUG] [Thread-132405] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:48:26.789 [DEBUG] [Thread-132405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:48:26.789 [DEBUG] [Thread-132405] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:48:26.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:48:26.790 [DEBUG] [Thread-132405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:48:26.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:48:26.844 [DEBUG] [Thread-132405] [transport.py] [_log()] userauth is OK
2026-02-11T16:48:26.845 [DEBUG] [Thread-132405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:48:26.845 [DEBUG] [Thread-132405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:48:26.845 [DEBUG] [Thread-132405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:48:26.845 [DEBUG] [Thread-132405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:48:26.866 [INFO] [Thread-132405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:48:26.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:48:26.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:48:27.731 [DEBUG] [Thread-132405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:48:27.731 [DEBUG] [Thread-132405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:48:27.779 [DEBUG] [Thread-132405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:48:27.780 [DEBUG] [Thread-132405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:48:27.789 [DEBUG] [Thread-132405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:48:27.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:48:27.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:48:27.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:48:27.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:48:27.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:48:27.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:48:27.826 [DEBUG] [Thread-132405] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:48:41.075 [DEBUG] [Thread-132407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:45.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:45.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:56.130 [DEBUG] [Thread-132408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:48:57.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:48:57.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:48:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:48:59.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 48, 36), 14.82, 39.19, 0.0, 30.52, 25.0, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:48:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:48:36
2026-02-11T16:49:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:49:00.268 [DEBUG] [Thread-132409] [transport.py] [_log()] starting thread (client mode): 0xa5740760
2026-02-11T16:49:00.268 [DEBUG] [Thread-132409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:49:00.289 [DEBUG] [Thread-132409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:49:00.289 [INFO] [Thread-132409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:00.291 [DEBUG] [Thread-132409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] client lang: <none>
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] server lang: <none>
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] kex follows: False
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] Compression: none
2026-02-11T16:49:00.292 [DEBUG] [Thread-132409] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:49:00.300 [DEBUG] [Thread-132409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:49:00.300 [DEBUG] [Thread-132409] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:49:00.300 [DEBUG] [Thread-132409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:49:00.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:49:00.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:49:00.302 [DEBUG] [Thread-132409] [transport.py] [_log()] userauth is OK
2026-02-11T16:49:00.302 [DEBUG] [Thread-132409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:49:00.302 [DEBUG] [Thread-132409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:49:00.302 [DEBUG] [Thread-132409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:49:00.302 [DEBUG] [Thread-132409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:49:00.320 [INFO] [Thread-132409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:49:00.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:49:00.906 [DEBUG] [Thread-132409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:49:00.907 [DEBUG] [Thread-132409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:49:00.907 [DEBUG] [Thread-132409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:49:00.948 [DEBUG] [Thread-132409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:49:00.948 [DEBUG] [Thread-132409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:49:00.951 [DEBUG] [Thread-132409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:49:00.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:49:00.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:49:00.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:49:00.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:49:00.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:49:00.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:49:00.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:49:00.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:49:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:49:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.617155 -999.00  +23.60  21.95     47  +11.80 1 2 1 1 1   888    0 10.46 -78.69 ----- 21.5 21.9 275.0 27.0 27.1 -17.5 26.9 -16.8 26.7 -16.8 27.5 -15.7
2026-02-11T16:49:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:49:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:49:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.617155
2026-02-11T16:49:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:49:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:49:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:49:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:49:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:49:00.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:48:36', tmtdew=14.82, humidity=39.19, cloud=0.0, wind=30.52, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:48:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:49:00.979 [DEBUG] [Thread-132409] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:49:01.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:49:01.087 [DEBUG] [Thread-132412] [transport.py] [_log()] starting thread (client mode): 0xa2d557e0
2026-02-11T16:49:01.087 [DEBUG] [Thread-132412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:49:01.101 [DEBUG] [Thread-132412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:49:01.102 [INFO] [Thread-132412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:49:01.109 [DEBUG] [Thread-132412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] client lang: <none>
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] server lang: <none>
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] kex follows: False
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] Compression: none
2026-02-11T16:49:01.110 [DEBUG] [Thread-132412] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:49:01.169 [DEBUG] [Thread-132412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:49:01.170 [DEBUG] [Thread-132412] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:49:01.170 [DEBUG] [Thread-132412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:49:01.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:49:01.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:49:01.225 [DEBUG] [Thread-132412] [transport.py] [_log()] userauth is OK
2026-02-11T16:49:01.225 [DEBUG] [Thread-132412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:49:01.226 [DEBUG] [Thread-132412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:49:01.226 [DEBUG] [Thread-132412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:49:01.226 [DEBUG] [Thread-132412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:49:01.243 [INFO] [Thread-132412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:49:01.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:49:01.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:49:02.092 [DEBUG] [Thread-132412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:49:02.093 [DEBUG] [Thread-132412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:49:02.140 [DEBUG] [Thread-132412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:49:02.141 [DEBUG] [Thread-132412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:49:02.150 [DEBUG] [Thread-132412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:49:02.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:49:02.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:49:02.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:49:02.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:49:02.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:49:02.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:49:02.185 [DEBUG] [Thread-132412] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:49:11.167 [DEBUG] [Thread-132414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:49:25.875 [DEBUG] [Thread-132415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:49:26.219 [DEBUG] [Thread-132416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:49:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:49:32.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:49:32.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:49:34.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 49, 11), 14.3, 40.38, 0.0, 24.95, 24.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:49:34.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:49:11
2026-02-11T16:49:34.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:49:34.643 [DEBUG] [Thread-132417] [transport.py] [_log()] starting thread (client mode): 0xa2d56d70
2026-02-11T16:49:34.643 [DEBUG] [Thread-132417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:49:34.658 [DEBUG] [Thread-132417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:49:34.658 [INFO] [Thread-132417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] client lang: <none>
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] server lang: <none>
2026-02-11T16:49:34.659 [DEBUG] [Thread-132417] [transport.py] [_log()] kex follows: False
2026-02-11T16:49:34.660 [DEBUG] [Thread-132417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:49:34.660 [DEBUG] [Thread-132417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:49:34.660 [DEBUG] [Thread-132417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:49:34.660 [DEBUG] [Thread-132417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:49:34.660 [DEBUG] [Thread-132417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:49:34.660 [DEBUG] [Thread-132417] [transport.py] [_log()] Compression: none
2026-02-11T16:49:34.660 [DEBUG] [Thread-132417] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:49:34.668 [DEBUG] [Thread-132417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:49:34.669 [DEBUG] [Thread-132417] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:49:34.669 [DEBUG] [Thread-132417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:49:34.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:49:34.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:49:34.671 [DEBUG] [Thread-132417] [transport.py] [_log()] userauth is OK
2026-02-11T16:49:34.671 [DEBUG] [Thread-132417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:49:34.671 [DEBUG] [Thread-132417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:49:34.671 [DEBUG] [Thread-132417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:49:34.671 [DEBUG] [Thread-132417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:49:34.685 [INFO] [Thread-132417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:49:34.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:49:35.263 [DEBUG] [Thread-132417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:49:35.263 [DEBUG] [Thread-132417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:49:35.263 [DEBUG] [Thread-132417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:49:35.304 [DEBUG] [Thread-132417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:49:35.304 [DEBUG] [Thread-132417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:49:35.306 [DEBUG] [Thread-132417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:49:35.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:49:35.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:49:35.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:49:35.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:49:35.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:49:35.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:49:35.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:49:35.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:49:35.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:49:35.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.617503 -999.00  +23.30  23.82     48  +11.80 1 2 1 1 1   888    0 10.18 -85.53 ----- 31.9 23.8 282.1 30.8 26.8 -18.1 26.8 -17.5 26.4 -19.1 27.2 -15.8
2026-02-11T16:49:35.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:49:35.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:49:35.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.617503
2026-02-11T16:49:35.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:49:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:49:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:49:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:49:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:49:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:49:11', tmtdew=14.3, humidity=40.38, cloud=0.0, wind=24.95, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:49:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:49:35.324 [DEBUG] [Thread-132417] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:49:35.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:49:35.421 [DEBUG] [Thread-132420] [transport.py] [_log()] starting thread (client mode): 0x9eb05090
2026-02-11T16:49:35.421 [DEBUG] [Thread-132420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:49:35.435 [DEBUG] [Thread-132420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:49:35.435 [INFO] [Thread-132420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:49:35.443 [DEBUG] [Thread-132420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:49:35.443 [DEBUG] [Thread-132420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:49:35.443 [DEBUG] [Thread-132420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:49:35.443 [DEBUG] [Thread-132420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] client lang: <none>
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] server lang: <none>
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] kex follows: False
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] Compression: none
2026-02-11T16:49:35.444 [DEBUG] [Thread-132420] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:49:35.500 [DEBUG] [Thread-132420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:49:35.500 [DEBUG] [Thread-132420] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:49:35.501 [DEBUG] [Thread-132420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:49:35.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:49:35.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:49:35.556 [DEBUG] [Thread-132420] [transport.py] [_log()] userauth is OK
2026-02-11T16:49:35.557 [DEBUG] [Thread-132420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:49:35.557 [DEBUG] [Thread-132420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:49:35.557 [DEBUG] [Thread-132420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:49:35.557 [DEBUG] [Thread-132420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:49:35.575 [INFO] [Thread-132420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:49:35.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:49:35.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:49:36.421 [DEBUG] [Thread-132420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:49:36.421 [DEBUG] [Thread-132420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:49:36.471 [DEBUG] [Thread-132420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:49:36.471 [DEBUG] [Thread-132420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:49:36.483 [DEBUG] [Thread-132420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:49:36.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:49:36.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')
2026-02-11T16:49:36.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:49:36.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:49:36.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:49:36.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:49:36.518 [DEBUG] [Thread-132420] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:49:41.254 [DEBUG] [Thread-132422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:49:45.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:49:45.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:49:56.306 [DEBUG] [Thread-132423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:50:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:50:06.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:50:06.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:50:09.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 49, 47), 13.81, 41.59, 0.0, 24.99, 23.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:50:09.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:49:47
2026-02-11T16:50:09.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:50:09.571 [DEBUG] [Thread-132424] [transport.py] [_log()] starting thread (client mode): 0xa57431f0
2026-02-11T16:50:09.571 [DEBUG] [Thread-132424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:50:09.592 [DEBUG] [Thread-132424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:50:09.593 [INFO] [Thread-132424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] client lang: <none>
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] server lang: <none>
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] kex follows: False
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] Compression: none
2026-02-11T16:50:09.596 [DEBUG] [Thread-132424] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:50:09.614 [DEBUG] [Thread-132424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:50:09.615 [DEBUG] [Thread-132424] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:50:09.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:50:09.616 [DEBUG] [Thread-132424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:50:09.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:50:09.618 [DEBUG] [Thread-132424] [transport.py] [_log()] userauth is OK
2026-02-11T16:50:09.619 [DEBUG] [Thread-132424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:50:09.619 [DEBUG] [Thread-132424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:50:09.619 [DEBUG] [Thread-132424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:50:09.619 [DEBUG] [Thread-132424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:50:09.636 [INFO] [Thread-132424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:50:09.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:50:10.404 [DEBUG] [Thread-132424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:50:10.404 [DEBUG] [Thread-132424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:50:10.405 [DEBUG] [Thread-132424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:50:10.445 [DEBUG] [Thread-132424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:50:10.445 [DEBUG] [Thread-132424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:50:10.449 [DEBUG] [Thread-132424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:50:10.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:50:10.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:50:10.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:50:10.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:50:10.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:50:10.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:50:10.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:50:10.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:50:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:50:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.617850 -999.00  +23.30  30.77     48  +11.90 1 2 2 1 1   888    0 9.65 -91.57 ----- 29.2 30.8 278.4 35.6 26.7 -16.4 26.6 -17.3 26.2 -18.3 27.1 -15.2
2026-02-11T16:50:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:50:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:50:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.617850
2026-02-11T16:50:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:50:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:50:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:50:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:50:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:50:10.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:49:47', tmtdew=13.81, humidity=41.59, cloud=0.0, wind=24.99, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:49:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:50:10.477 [DEBUG] [Thread-132424] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:50:10.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:50:10.572 [DEBUG] [Thread-132427] [transport.py] [_log()] starting thread (client mode): 0xa5740b20
2026-02-11T16:50:10.572 [DEBUG] [Thread-132427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:50:10.587 [DEBUG] [Thread-132427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:50:10.587 [INFO] [Thread-132427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:50:10.594 [DEBUG] [Thread-132427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] client lang: <none>
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] server lang: <none>
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] kex follows: False
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:50:10.595 [DEBUG] [Thread-132427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:50:10.596 [DEBUG] [Thread-132427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:50:10.596 [DEBUG] [Thread-132427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:50:10.596 [DEBUG] [Thread-132427] [transport.py] [_log()] Compression: none
2026-02-11T16:50:10.596 [DEBUG] [Thread-132427] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:50:10.654 [DEBUG] [Thread-132427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:50:10.654 [DEBUG] [Thread-132427] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:50:10.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:50:10.655 [DEBUG] [Thread-132427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:50:10.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:50:10.712 [DEBUG] [Thread-132427] [transport.py] [_log()] userauth is OK
2026-02-11T16:50:10.712 [DEBUG] [Thread-132427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:50:10.713 [DEBUG] [Thread-132427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:50:10.713 [DEBUG] [Thread-132427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:50:10.713 [DEBUG] [Thread-132427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:50:10.731 [INFO] [Thread-132427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:50:10.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:50:10.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:50:11.344 [DEBUG] [Thread-132429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:50:11.578 [DEBUG] [Thread-132427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:50:11.579 [DEBUG] [Thread-132427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:50:11.627 [DEBUG] [Thread-132427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:50:11.627 [DEBUG] [Thread-132427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:50:11.635 [DEBUG] [Thread-132427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:50:11.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:50:11.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:50:11.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
2026-02-11T16:50:11.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:50:11.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:50:11.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:50:11.667 [DEBUG] [Thread-132427] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:50:25.913 [DEBUG] [Thread-132430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:50:26.398 [DEBUG] [Thread-132431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:50:41.436 [DEBUG] [Thread-132432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:50:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:50:41.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:50:41.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
2026-02-11T16:50:43.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 50, 22), 13.76, 41.71, 0.0, 27.44, 23.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:50:43.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:50:22
2026-02-11T16:50:44.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:50:44.163 [DEBUG] [Thread-132433] [transport.py] [_log()] starting thread (client mode): 0xa5740b80
2026-02-11T16:50:44.163 [DEBUG] [Thread-132433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:50:44.184 [DEBUG] [Thread-132433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:50:44.185 [INFO] [Thread-132433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:50:44.188 [DEBUG] [Thread-132433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:50:44.188 [DEBUG] [Thread-132433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:50:44.188 [DEBUG] [Thread-132433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:50:44.188 [DEBUG] [Thread-132433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:44.188 [DEBUG] [Thread-132433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:44.188 [DEBUG] [Thread-132433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:44.188 [DEBUG] [Thread-132433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] client lang: <none>
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] server lang: <none>
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] kex follows: False
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] Compression: none
2026-02-11T16:50:44.189 [DEBUG] [Thread-132433] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:50:44.207 [DEBUG] [Thread-132433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:50:44.208 [DEBUG] [Thread-132433] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:50:44.209 [DEBUG] [Thread-132433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:50:44.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:50:44.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:50:44.212 [DEBUG] [Thread-132433] [transport.py] [_log()] userauth is OK
2026-02-11T16:50:44.212 [DEBUG] [Thread-132433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:50:44.213 [DEBUG] [Thread-132433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:50:44.213 [DEBUG] [Thread-132433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:50:44.213 [DEBUG] [Thread-132433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:50:44.237 [INFO] [Thread-132433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:50:44.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:50:44.895 [DEBUG] [Thread-132433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:50:44.895 [DEBUG] [Thread-132433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:50:44.895 [DEBUG] [Thread-132433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:50:44.935 [DEBUG] [Thread-132433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:50:44.936 [DEBUG] [Thread-132433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:50:44.939 [DEBUG] [Thread-132433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:50:44.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:50:44.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:50:44.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:50:44.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:50:44.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:50:44.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:50:44.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:50:44.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:50:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:50:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.618197 -999.00  +23.20  23.64     49  +11.90 1 2 1 1 1   888    0 9.59 -93.68 ----- 23.1 23.6 277.0 35.2 26.6 -17.3 26.6 -17.2 26.1 -16.9 26.8 -16.2
2026-02-11T16:50:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:50:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:50:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.618197
2026-02-11T16:50:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:50:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:50:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:50:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:50:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:50:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:50:22', tmtdew=13.76, humidity=41.71, cloud=0.0, wind=27.44, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:50:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:50:44.966 [DEBUG] [Thread-132433] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:50:45.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:50:45.062 [DEBUG] [Thread-132436] [transport.py] [_log()] starting thread (client mode): 0xa57c3430
2026-02-11T16:50:45.062 [DEBUG] [Thread-132436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:50:45.077 [DEBUG] [Thread-132436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:50:45.077 [INFO] [Thread-132436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:50:45.085 [DEBUG] [Thread-132436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:50:45.085 [DEBUG] [Thread-132436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:50:45.085 [DEBUG] [Thread-132436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] client lang: <none>
2026-02-11T16:50:45.086 [DEBUG] [Thread-132436] [transport.py] [_log()] server lang: <none>
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] kex follows: False
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] Compression: none
2026-02-11T16:50:45.087 [DEBUG] [Thread-132436] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:50:45.149 [DEBUG] [Thread-132436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:50:45.150 [DEBUG] [Thread-132436] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:50:45.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:50:45.151 [DEBUG] [Thread-132436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:50:45.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:50:45.212 [DEBUG] [Thread-132436] [transport.py] [_log()] userauth is OK
2026-02-11T16:50:45.213 [DEBUG] [Thread-132436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:50:45.213 [DEBUG] [Thread-132436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:50:45.213 [DEBUG] [Thread-132436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:50:45.213 [DEBUG] [Thread-132436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:50:45.231 [INFO] [Thread-132436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:50:45.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:50:45.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:50:45.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:50:45.346 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:50:46.060 [DEBUG] [Thread-132436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:50:46.060 [DEBUG] [Thread-132436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:50:46.108 [DEBUG] [Thread-132436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:50:46.109 [DEBUG] [Thread-132436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:50:46.120 [DEBUG] [Thread-132436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:50:46.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:50:46.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:50:46.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:50:46.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:50:46.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:50:46.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:50:46.161 [DEBUG] [Thread-132436] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:50:56.468 [DEBUG] [Thread-132438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:51:11.529 [DEBUG] [Thread-132439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:51:16.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:51:16.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:51:16.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:51:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 50, 57), 13.73, 41.79, 0.0, 28.39, 23.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:51:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:50:57
2026-02-11T16:51:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:51:18.548 [DEBUG] [Thread-132440] [transport.py] [_log()] starting thread (client mode): 0xa57c0190
2026-02-11T16:51:18.548 [DEBUG] [Thread-132440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:51:18.568 [DEBUG] [Thread-132440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:51:18.568 [INFO] [Thread-132440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] client lang: <none>
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] server lang: <none>
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] kex follows: False
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] Compression: none
2026-02-11T16:51:18.571 [DEBUG] [Thread-132440] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:51:18.588 [DEBUG] [Thread-132440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:51:18.589 [DEBUG] [Thread-132440] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:51:18.589 [DEBUG] [Thread-132440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:51:18.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:51:18.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:51:18.591 [DEBUG] [Thread-132440] [transport.py] [_log()] userauth is OK
2026-02-11T16:51:18.591 [DEBUG] [Thread-132440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:51:18.591 [DEBUG] [Thread-132440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:51:18.591 [DEBUG] [Thread-132440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:51:18.591 [DEBUG] [Thread-132440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:51:18.607 [INFO] [Thread-132440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:51:18.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:51:19.229 [DEBUG] [Thread-132440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:51:19.229 [DEBUG] [Thread-132440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:51:19.230 [DEBUG] [Thread-132440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:51:19.270 [DEBUG] [Thread-132440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:51:19.271 [DEBUG] [Thread-132440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:51:19.274 [DEBUG] [Thread-132440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:51:19.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:51:19.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:51:19.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:51:19.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:51:19.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:51:19.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:51:19.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:51:19.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:51:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:51:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.618544 -999.00  +23.50  26.68     48  +12.00 1 2 1 1 1   888    0 9.25 -103.64 ----- 24.8 26.7 271.2 39.1 26.5 -17.0 26.4 -16.8 26.0 -16.1 26.7 -15.0
2026-02-11T16:51:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:51:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:51:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.618544
2026-02-11T16:51:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:51:19.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:51:19.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:51:19.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:51:19.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:51:19.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:50:57', tmtdew=13.73, humidity=41.79, cloud=0.0, wind=28.39, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:50:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:51:19.300 [DEBUG] [Thread-132440] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:51:19.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:51:19.394 [DEBUG] [Thread-132443] [transport.py] [_log()] starting thread (client mode): 0x9eb051e0
2026-02-11T16:51:19.394 [DEBUG] [Thread-132443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:51:19.409 [DEBUG] [Thread-132443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:51:19.409 [INFO] [Thread-132443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:51:19.418 [DEBUG] [Thread-132443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] client lang: <none>
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] server lang: <none>
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] kex follows: False
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:51:19.419 [DEBUG] [Thread-132443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:51:19.420 [DEBUG] [Thread-132443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:51:19.420 [DEBUG] [Thread-132443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:51:19.420 [DEBUG] [Thread-132443] [transport.py] [_log()] Compression: none
2026-02-11T16:51:19.420 [DEBUG] [Thread-132443] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:51:19.483 [DEBUG] [Thread-132443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:51:19.483 [DEBUG] [Thread-132443] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:51:19.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:51:19.484 [DEBUG] [Thread-132443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:51:19.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:51:19.542 [DEBUG] [Thread-132443] [transport.py] [_log()] userauth is OK
2026-02-11T16:51:19.543 [DEBUG] [Thread-132443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:51:19.543 [DEBUG] [Thread-132443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:51:19.543 [DEBUG] [Thread-132443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:51:19.543 [DEBUG] [Thread-132443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:51:19.562 [INFO] [Thread-132443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:51:19.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:51:19.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:51:20.391 [DEBUG] [Thread-132443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:51:20.391 [DEBUG] [Thread-132443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:51:20.442 [DEBUG] [Thread-132443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:51:20.443 [DEBUG] [Thread-132443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:51:20.458 [DEBUG] [Thread-132443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:51:20.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:51:20.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:51:20.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:51:20.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:51:20.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:51:20.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:51:20.504 [DEBUG] [Thread-132443] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:51:25.958 [DEBUG] [Thread-132445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:51:26.565 [DEBUG] [Thread-132446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:51:41.614 [DEBUG] [Thread-132447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:51:45.487 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:51:45.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:51:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:51:50.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:51:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:51:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 51, 34), 14.86, 39.12, 0.0, 41.07, 25.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:51:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:51:34
2026-02-11T16:51:52.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:51:52.990 [DEBUG] [Thread-132448] [transport.py] [_log()] starting thread (client mode): 0xa2db56f0
2026-02-11T16:51:52.990 [DEBUG] [Thread-132448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:51:53.010 [DEBUG] [Thread-132448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:51:53.010 [INFO] [Thread-132448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] client lang: <none>
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] server lang: <none>
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] kex follows: False
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:51:53.013 [DEBUG] [Thread-132448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:51:53.014 [DEBUG] [Thread-132448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:51:53.014 [DEBUG] [Thread-132448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:51:53.014 [DEBUG] [Thread-132448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:51:53.014 [DEBUG] [Thread-132448] [transport.py] [_log()] Compression: none
2026-02-11T16:51:53.014 [DEBUG] [Thread-132448] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:51:53.031 [DEBUG] [Thread-132448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:51:53.032 [DEBUG] [Thread-132448] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:51:53.032 [DEBUG] [Thread-132448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:51:53.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:51:53.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:51:53.035 [DEBUG] [Thread-132448] [transport.py] [_log()] userauth is OK
2026-02-11T16:51:53.035 [DEBUG] [Thread-132448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:51:53.035 [DEBUG] [Thread-132448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:51:53.035 [DEBUG] [Thread-132448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:51:53.035 [DEBUG] [Thread-132448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:51:53.060 [INFO] [Thread-132448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:51:53.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:51:53.673 [DEBUG] [Thread-132448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:51:53.674 [DEBUG] [Thread-132448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:51:53.674 [DEBUG] [Thread-132448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:51:53.714 [DEBUG] [Thread-132448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:51:53.715 [DEBUG] [Thread-132448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:51:53.718 [DEBUG] [Thread-132448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:51:53.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:51:53.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:51:53.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:51:53.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:51:53.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:51:53.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:51:53.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:51:53.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:51:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:51:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.619239 -999.00  +23.70  28.20     47  +12.00 1 2 1 1 1   888    0 9.80 -94.20 ----- 30.8 28.2 291.0 38.4 26.4 -16.6 26.3 -16.7 25.9 -17.2 26.4 -14.6
2026-02-11T16:51:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:51:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:51:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.619239
2026-02-11T16:51:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:51:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:51:53.748 [DEBUG] [Thread-132448] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:51:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:51:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:51:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:51:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:51:34', tmtdew=14.86, humidity=39.12, cloud=0.0, wind=41.07, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:51:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:51:53.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:51:53.846 [DEBUG] [Thread-132451] [transport.py] [_log()] starting thread (client mode): 0xa5772a40
2026-02-11T16:51:53.846 [DEBUG] [Thread-132451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:51:53.861 [DEBUG] [Thread-132451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:51:53.861 [INFO] [Thread-132451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] client lang: <none>
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] server lang: <none>
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] kex follows: False
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:51:53.869 [DEBUG] [Thread-132451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:51:53.870 [DEBUG] [Thread-132451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:51:53.870 [DEBUG] [Thread-132451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:51:53.870 [DEBUG] [Thread-132451] [transport.py] [_log()] Compression: none
2026-02-11T16:51:53.870 [DEBUG] [Thread-132451] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:51:53.926 [DEBUG] [Thread-132451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:51:53.927 [DEBUG] [Thread-132451] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:51:53.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:51:53.928 [DEBUG] [Thread-132451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:51:53.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:51:53.982 [DEBUG] [Thread-132451] [transport.py] [_log()] userauth is OK
2026-02-11T16:51:53.983 [DEBUG] [Thread-132451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:51:53.983 [DEBUG] [Thread-132451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:51:53.983 [DEBUG] [Thread-132451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:51:53.983 [DEBUG] [Thread-132451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:51:54.001 [INFO] [Thread-132451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:51:54.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:51:54.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:51:54.822 [DEBUG] [Thread-132451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:51:54.823 [DEBUG] [Thread-132451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:51:54.870 [DEBUG] [Thread-132451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:51:54.871 [DEBUG] [Thread-132451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:51:54.880 [DEBUG] [Thread-132451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:51:54.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:51:54.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:51:54.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:51:54.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:51:54.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:51:54.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:51:54.916 [DEBUG] [Thread-132451] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:51:56.652 [DEBUG] [Thread-132453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:11.704 [DEBUG] [Thread-132454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:24.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:52:24.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:52:24.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:52:25.992 [DEBUG] [Thread-132455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:26.743 [DEBUG] [Thread-132456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:27.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 52, 10), 13.96, 41.34, 0.0, 37.64, 24.12, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:52:27.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:52:10
2026-02-11T16:52:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:52:27.948 [DEBUG] [Thread-132457] [transport.py] [_log()] starting thread (client mode): 0xa5772770
2026-02-11T16:52:27.949 [DEBUG] [Thread-132457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:52:27.969 [DEBUG] [Thread-132457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:52:27.970 [INFO] [Thread-132457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] client lang: <none>
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] server lang: <none>
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] kex follows: False
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] Compression: none
2026-02-11T16:52:27.973 [DEBUG] [Thread-132457] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:52:27.991 [DEBUG] [Thread-132457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:52:27.991 [DEBUG] [Thread-132457] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:52:27.991 [DEBUG] [Thread-132457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:52:27.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:52:27.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:52:27.992 [DEBUG] [Thread-132457] [transport.py] [_log()] userauth is OK
2026-02-11T16:52:27.992 [DEBUG] [Thread-132457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:52:27.992 [DEBUG] [Thread-132457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:52:27.992 [DEBUG] [Thread-132457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:52:27.992 [DEBUG] [Thread-132457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:52:28.007 [INFO] [Thread-132457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:52:28.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:52:28.660 [DEBUG] [Thread-132457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:52:28.660 [DEBUG] [Thread-132457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:52:28.661 [DEBUG] [Thread-132457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:52:28.701 [DEBUG] [Thread-132457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:52:28.702 [DEBUG] [Thread-132457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:52:28.705 [DEBUG] [Thread-132457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:52:28.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:52:28.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:52:28.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:52:28.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:52:28.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:52:28.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:52:28.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:52:28.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:52:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:52:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.619586 -999.00  +23.60  29.04     48  +12.00 1 2 1 1 1   888    0 9.48 -88.23 ----- 34.5 29.0 292.6 38.2 26.4 -16.8 26.3 -16.7 25.9 -15.8 26.4 -15.0
2026-02-11T16:52:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:52:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:52:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.619586
2026-02-11T16:52:28.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:52:28.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:52:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:52:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:52:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:52:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:52:10', tmtdew=13.96, humidity=41.34, cloud=0.0, wind=37.64, temperature=24.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:52:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:52:28.734 [DEBUG] [Thread-132457] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:52:28.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:52:28.831 [DEBUG] [Thread-132460] [transport.py] [_log()] starting thread (client mode): 0xa57c37c0
2026-02-11T16:52:28.831 [DEBUG] [Thread-132460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:52:28.846 [DEBUG] [Thread-132460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:52:28.846 [INFO] [Thread-132460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:52:28.853 [DEBUG] [Thread-132460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] client lang: <none>
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] server lang: <none>
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] kex follows: False
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:52:28.854 [DEBUG] [Thread-132460] [transport.py] [_log()] Compression: none
2026-02-11T16:52:28.855 [DEBUG] [Thread-132460] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:52:28.918 [DEBUG] [Thread-132460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:52:28.919 [DEBUG] [Thread-132460] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:52:28.920 [DEBUG] [Thread-132460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:52:28.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:52:28.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:52:28.974 [DEBUG] [Thread-132460] [transport.py] [_log()] userauth is OK
2026-02-11T16:52:28.975 [DEBUG] [Thread-132460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:52:28.975 [DEBUG] [Thread-132460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:52:28.975 [DEBUG] [Thread-132460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:52:28.975 [DEBUG] [Thread-132460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:52:28.993 [INFO] [Thread-132460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:52:28.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:52:28.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:52:29.805 [DEBUG] [Thread-132460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:52:29.805 [DEBUG] [Thread-132460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:52:29.856 [DEBUG] [Thread-132460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:52:29.857 [DEBUG] [Thread-132460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:52:29.868 [DEBUG] [Thread-132460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:52:29.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:52:29.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:52:29.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:52:29.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:52:29.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:52:29.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:52:29.905 [DEBUG] [Thread-132460] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:52:41.777 [DEBUG] [Thread-132462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:45.630 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:45.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:56.835 [DEBUG] [Thread-132463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:52:59.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:52:59.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:52: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
2026-02-11T16:53:01.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 52, 46), 13.62, 42.33, 0.0, 29.33, 23.7, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:53:01.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:52:46
2026-02-11T16:53:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:53:02.318 [DEBUG] [Thread-132464] [transport.py] [_log()] starting thread (client mode): 0xa5772890
2026-02-11T16:53:02.318 [DEBUG] [Thread-132464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:53:02.338 [DEBUG] [Thread-132464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:53:02.338 [INFO] [Thread-132464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:53:02.341 [DEBUG] [Thread-132464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:53:02.341 [DEBUG] [Thread-132464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] client lang: <none>
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] server lang: <none>
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] kex follows: False
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] Compression: none
2026-02-11T16:53:02.342 [DEBUG] [Thread-132464] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:53:02.362 [DEBUG] [Thread-132464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:53:02.362 [DEBUG] [Thread-132464] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:53:02.363 [DEBUG] [Thread-132464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:53:02.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:53:02.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:53:02.364 [DEBUG] [Thread-132464] [transport.py] [_log()] userauth is OK
2026-02-11T16:53:02.365 [DEBUG] [Thread-132464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:53:02.365 [DEBUG] [Thread-132464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:53:02.365 [DEBUG] [Thread-132464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:53:02.365 [DEBUG] [Thread-132464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:53:02.385 [INFO] [Thread-132464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:53:02.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:53:03.006 [DEBUG] [Thread-132464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:53:03.006 [DEBUG] [Thread-132464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:53:03.006 [DEBUG] [Thread-132464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:53:03.047 [DEBUG] [Thread-132464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:53:03.047 [DEBUG] [Thread-132464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:53:03.050 [DEBUG] [Thread-132464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:53:03.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:53:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:53:03.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:53:03.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:53:03.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:53:03.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:53:03.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:53:03.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.619933 -999.00  +23.00  26.84     49  +11.80 1 2 1 1 1   888    0 9.95 -85.59 ----- 28.9 26.8 295.4 34.1 26.3 -17.2 26.2 -16.9 25.8 -15.0 26.2 -15.3
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.619933
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:53:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:53:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:53:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:53:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:52:46', tmtdew=13.62, humidity=42.33, cloud=0.0, wind=29.33, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:52:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:53:03.072 [DEBUG] [Thread-132464] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:53:03.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:53:03.169 [DEBUG] [Thread-132467] [transport.py] [_log()] starting thread (client mode): 0xa5771ab0
2026-02-11T16:53:03.170 [DEBUG] [Thread-132467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:53:03.184 [DEBUG] [Thread-132467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:53:03.184 [INFO] [Thread-132467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] client lang: <none>
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] server lang: <none>
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] kex follows: False
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:53:03.192 [DEBUG] [Thread-132467] [transport.py] [_log()] Compression: none
2026-02-11T16:53:03.193 [DEBUG] [Thread-132467] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:53:03.252 [DEBUG] [Thread-132467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:53:03.252 [DEBUG] [Thread-132467] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:53:03.253 [DEBUG] [Thread-132467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:53:03.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:53:03.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:53:03.311 [DEBUG] [Thread-132467] [transport.py] [_log()] userauth is OK
2026-02-11T16:53:03.311 [DEBUG] [Thread-132467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:53:03.311 [DEBUG] [Thread-132467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:53:03.311 [DEBUG] [Thread-132467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:53:03.311 [DEBUG] [Thread-132467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:53:03.330 [INFO] [Thread-132467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:53:03.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:53:03.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:53:04.153 [DEBUG] [Thread-132467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:53:04.153 [DEBUG] [Thread-132467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:53:04.201 [DEBUG] [Thread-132467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:53:04.201 [DEBUG] [Thread-132467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:53:04.209 [DEBUG] [Thread-132467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:53:04.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:53:04.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:53:04.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:53:04.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:53:04.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:53:04.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:53:04.245 [DEBUG] [Thread-132467] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:53:11.871 [DEBUG] [Thread-132469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:53:26.032 [DEBUG] [Thread-132470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:53:26.922 [DEBUG] [Thread-132471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:53:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:53:34.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:53:34.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
2026-02-11T16:53:36.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 53, 23), 13.66, 42.23, 0.0, 31.3, 23.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:53:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:53:23
2026-02-11T16:53:36.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:53:36.697 [DEBUG] [Thread-132472] [transport.py] [_log()] starting thread (client mode): 0xa5741c90
2026-02-11T16:53:36.697 [DEBUG] [Thread-132472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:53:36.718 [DEBUG] [Thread-132472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:53:36.718 [INFO] [Thread-132472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:53:36.721 [DEBUG] [Thread-132472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:53:36.721 [DEBUG] [Thread-132472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:53:36.721 [DEBUG] [Thread-132472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:53:36.721 [DEBUG] [Thread-132472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:36.721 [DEBUG] [Thread-132472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] client lang: <none>
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] server lang: <none>
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] kex follows: False
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] Compression: none
2026-02-11T16:53:36.722 [DEBUG] [Thread-132472] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:53:36.740 [DEBUG] [Thread-132472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:53:36.740 [DEBUG] [Thread-132472] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:53:36.741 [DEBUG] [Thread-132472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:53:36.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:53:36.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:53:36.743 [DEBUG] [Thread-132472] [transport.py] [_log()] userauth is OK
2026-02-11T16:53:36.743 [DEBUG] [Thread-132472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:53:36.744 [DEBUG] [Thread-132472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:53:36.744 [DEBUG] [Thread-132472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:53:36.744 [DEBUG] [Thread-132472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:53:36.767 [INFO] [Thread-132472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:53:36.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:53:37.415 [DEBUG] [Thread-132472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:53:37.415 [DEBUG] [Thread-132472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:53:37.415 [DEBUG] [Thread-132472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:53:37.456 [DEBUG] [Thread-132472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:53:37.457 [DEBUG] [Thread-132472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:53:37.460 [DEBUG] [Thread-132472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:53:37.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:53:37.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:53:37.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:53:37.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:53:37.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:53:37.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:53:37.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:53:37.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:53:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:53:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.620280 -999.00  +22.90  29.56     49  +11.90 1 2 1 1 1   888    0 9.84 -86.34 ----- 24.1 29.6 280.1 35.5 26.1 -16.4 26.1 -16.6 25.5 -15.1 26.1 -15.0
2026-02-11T16:53:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:53:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:53:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.620280
2026-02-11T16:53:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:53:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:53:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:53:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:53:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:53:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:53:23', tmtdew=13.66, humidity=42.23, cloud=0.0, wind=31.3, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:53:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:53:37.488 [DEBUG] [Thread-132472] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:53:37.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:53:37.595 [DEBUG] [Thread-132475] [transport.py] [_log()] starting thread (client mode): 0xa57c3640
2026-02-11T16:53:37.595 [DEBUG] [Thread-132475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:53:37.610 [DEBUG] [Thread-132475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:53:37.611 [INFO] [Thread-132475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:53:37.618 [DEBUG] [Thread-132475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] client lang: <none>
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] server lang: <none>
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] kex follows: False
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:53:37.619 [DEBUG] [Thread-132475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:53:37.620 [DEBUG] [Thread-132475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:53:37.620 [DEBUG] [Thread-132475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:53:37.620 [DEBUG] [Thread-132475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:53:37.620 [DEBUG] [Thread-132475] [transport.py] [_log()] Compression: none
2026-02-11T16:53:37.620 [DEBUG] [Thread-132475] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:53:37.680 [DEBUG] [Thread-132475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:53:37.680 [DEBUG] [Thread-132475] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:53:37.681 [DEBUG] [Thread-132475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:53:37.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:53:37.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:53:37.740 [DEBUG] [Thread-132475] [transport.py] [_log()] userauth is OK
2026-02-11T16:53:37.740 [DEBUG] [Thread-132475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:53:37.740 [DEBUG] [Thread-132475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:53:37.740 [DEBUG] [Thread-132475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:53:37.741 [DEBUG] [Thread-132475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:53:37.759 [INFO] [Thread-132475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:53:37.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:53:37.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:53:38.627 [DEBUG] [Thread-132475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:53:38.627 [DEBUG] [Thread-132475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:53:38.679 [DEBUG] [Thread-132475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:53:38.679 [DEBUG] [Thread-132475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:53:38.689 [DEBUG] [Thread-132475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:53:38.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:53:38.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:53:38.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:53:38.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:53:38.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:53:38.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:53:38.727 [DEBUG] [Thread-132475] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:53:41.962 [DEBUG] [Thread-132477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:53:45.772 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:53:45.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:53:57.009 [DEBUG] [Thread-132478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:54:08.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:54:08.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:54:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:54:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 53, 58), 13.48, 42.66, 0.0, 31.26, 23.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:54:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:53:58
2026-02-11T16:54:11.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:54:11.714 [DEBUG] [Thread-132479] [transport.py] [_log()] starting thread (client mode): 0xa57714b0
2026-02-11T16:54:11.714 [DEBUG] [Thread-132479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:54:11.735 [DEBUG] [Thread-132479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:54:11.735 [INFO] [Thread-132479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:54:11.736 [DEBUG] [Thread-132479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:54:11.736 [DEBUG] [Thread-132479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:54:11.736 [DEBUG] [Thread-132479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:54:11.736 [DEBUG] [Thread-132479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:11.736 [DEBUG] [Thread-132479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] client lang: <none>
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] server lang: <none>
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] kex follows: False
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] Compression: none
2026-02-11T16:54:11.737 [DEBUG] [Thread-132479] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:54:11.750 [DEBUG] [Thread-132479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:54:11.750 [DEBUG] [Thread-132479] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:54:11.751 [DEBUG] [Thread-132479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:54:11.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:54:11.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:54:11.753 [DEBUG] [Thread-132479] [transport.py] [_log()] userauth is OK
2026-02-11T16:54:11.753 [DEBUG] [Thread-132479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:54:11.753 [DEBUG] [Thread-132479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:54:11.753 [DEBUG] [Thread-132479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:54:11.753 [DEBUG] [Thread-132479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:54:11.772 [INFO] [Thread-132479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:54:11.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:54:12.047 [DEBUG] [Thread-132481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:54:12.588 [DEBUG] [Thread-132479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:54:12.588 [DEBUG] [Thread-132479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:54:12.589 [DEBUG] [Thread-132479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:54:12.629 [DEBUG] [Thread-132479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:54:12.630 [DEBUG] [Thread-132479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:54:12.633 [DEBUG] [Thread-132479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:54:12.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:54:12.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:54:12.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:54:12.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:54:12.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:54:12.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:54:12.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:54:12.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:54:12.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:54:12.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.620628 -999.00  +23.20  25.34     49  +12.00 1 2 1 1 1   888    0 9.72 -84.43 ----- 33.7 25.3 297.8 31.4 26.1 -15.8 26.0 -15.6 25.7 -13.8 26.1 -13.7
2026-02-11T16:54:12.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:54:12.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:54:12.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.620628
2026-02-11T16:54:12.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:54:12.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:54:12.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:54:12.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:54:12.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:54:12.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:53:58', tmtdew=13.48, humidity=42.66, cloud=0.0, wind=31.26, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:53:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:54:12.661 [DEBUG] [Thread-132479] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:54:12.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:54:12.757 [DEBUG] [Thread-132483] [transport.py] [_log()] starting thread (client mode): 0x9eb07700
2026-02-11T16:54:12.757 [DEBUG] [Thread-132483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:54:12.774 [DEBUG] [Thread-132483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:54:12.774 [INFO] [Thread-132483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:54:12.781 [DEBUG] [Thread-132483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:54:12.781 [DEBUG] [Thread-132483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:54:12.782 [DEBUG] [Thread-132483] [transport.py] [_log()] client lang: <none>
2026-02-11T16:54:12.783 [DEBUG] [Thread-132483] [transport.py] [_log()] server lang: <none>
2026-02-11T16:54:12.783 [DEBUG] [Thread-132483] [transport.py] [_log()] kex follows: False
2026-02-11T16:54:12.783 [DEBUG] [Thread-132483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:54:12.783 [DEBUG] [Thread-132483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:54:12.783 [DEBUG] [Thread-132483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:54:12.783 [DEBUG] [Thread-132483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:54:12.784 [DEBUG] [Thread-132483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:54:12.784 [DEBUG] [Thread-132483] [transport.py] [_log()] Compression: none
2026-02-11T16:54:12.784 [DEBUG] [Thread-132483] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:54:12.840 [DEBUG] [Thread-132483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:54:12.841 [DEBUG] [Thread-132483] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:54:12.841 [DEBUG] [Thread-132483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:54:12.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:54:12.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:54:12.900 [DEBUG] [Thread-132483] [transport.py] [_log()] userauth is OK
2026-02-11T16:54:12.900 [DEBUG] [Thread-132483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:54:12.900 [DEBUG] [Thread-132483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:54:12.900 [DEBUG] [Thread-132483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:54:12.900 [DEBUG] [Thread-132483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:54:12.923 [INFO] [Thread-132483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:54:12.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:54:12.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:54:13.769 [DEBUG] [Thread-132483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:54:13.770 [DEBUG] [Thread-132483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:54:13.817 [DEBUG] [Thread-132483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:54:13.818 [DEBUG] [Thread-132483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:54:13.828 [DEBUG] [Thread-132483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:54:13.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:54:13.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:54:13.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:54:13.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:54:13.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:54:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:54:13.871 [DEBUG] [Thread-132483] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:54:26.077 [DEBUG] [Thread-132485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:54:27.086 [DEBUG] [Thread-132486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:54:42.139 [DEBUG] [Thread-132487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:54:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:54:43.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:54:43.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:54:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 54, 35), 14.13, 40.88, 0.0, 34.05, 24.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:54:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:54:35
2026-02-11T16:54:45.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:54:45.917 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:54:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:54:46.249 [DEBUG] [Thread-132488] [transport.py] [_log()] starting thread (client mode): 0xa57d54b0
2026-02-11T16:54:46.249 [DEBUG] [Thread-132488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:54:46.270 [DEBUG] [Thread-132488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:54:46.270 [INFO] [Thread-132488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:46.273 [DEBUG] [Thread-132488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] client lang: <none>
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] server lang: <none>
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] kex follows: False
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] Compression: none
2026-02-11T16:54:46.274 [DEBUG] [Thread-132488] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:54:46.292 [DEBUG] [Thread-132488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:54:46.293 [DEBUG] [Thread-132488] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:54:46.293 [DEBUG] [Thread-132488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:54:46.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:54:46.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:54:46.295 [DEBUG] [Thread-132488] [transport.py] [_log()] userauth is OK
2026-02-11T16:54:46.295 [DEBUG] [Thread-132488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:54:46.296 [DEBUG] [Thread-132488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:54:46.296 [DEBUG] [Thread-132488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:54:46.296 [DEBUG] [Thread-132488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:54:46.318 [INFO] [Thread-132488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:54:46.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:54:46.943 [DEBUG] [Thread-132488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:54:46.943 [DEBUG] [Thread-132488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:54:46.944 [DEBUG] [Thread-132488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:54:46.985 [DEBUG] [Thread-132488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:54:46.985 [DEBUG] [Thread-132488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:54:46.988 [DEBUG] [Thread-132488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:54:47.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:54:47.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:54:47.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:54:47.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:54:47.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:54:47.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:54:47.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:54:47.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:54:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:54:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.620975 -999.00  +23.10  22.84     49  +12.00 1 2 1 1 1   888    0 9.80 -87.16 ----- 24.8 22.8 296.0 39.4 26.1 -15.7 26.0 -15.7 25.7 -12.9 26.0 -13.5
2026-02-11T16:54:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:54:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:54:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.620975
2026-02-11T16:54:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:54:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:54:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:54:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:54:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:54:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:54:35', tmtdew=14.13, humidity=40.88, cloud=0.0, wind=34.05, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:54:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:54:47.008 [DEBUG] [Thread-132488] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:54:47.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:54:47.100 [DEBUG] [Thread-132491] [transport.py] [_log()] starting thread (client mode): 0xa57d7d90
2026-02-11T16:54:47.100 [DEBUG] [Thread-132491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:54:47.115 [DEBUG] [Thread-132491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:54:47.115 [INFO] [Thread-132491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:54:47.122 [DEBUG] [Thread-132491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] client lang: <none>
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] server lang: <none>
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] kex follows: False
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] Compression: none
2026-02-11T16:54:47.123 [DEBUG] [Thread-132491] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:54:47.179 [DEBUG] [Thread-132491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:54:47.179 [DEBUG] [Thread-132491] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:54:47.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:54:47.180 [DEBUG] [Thread-132491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:54:47.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:54:47.239 [DEBUG] [Thread-132491] [transport.py] [_log()] userauth is OK
2026-02-11T16:54:47.239 [DEBUG] [Thread-132491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:54:47.239 [DEBUG] [Thread-132491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:54:47.240 [DEBUG] [Thread-132491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:54:47.240 [DEBUG] [Thread-132491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:54:47.259 [INFO] [Thread-132491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:54:47.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:54:47.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:54:48.111 [DEBUG] [Thread-132491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:54:48.112 [DEBUG] [Thread-132491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:54:48.159 [DEBUG] [Thread-132491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:54:48.159 [DEBUG] [Thread-132491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:54:48.167 [DEBUG] [Thread-132491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:54:48.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:54:48.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:54:48.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:54:48.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:54:48.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:54:48.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:54:48.200 [DEBUG] [Thread-132491] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:54:57.177 [DEBUG] [Thread-132493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:55:12.232 [DEBUG] [Thread-132494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:55:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:55:18.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:55:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:55:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 55, 10), 13.41, 42.7, 0.0, 31.9, 23.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:55:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:55:10
2026-02-11T16:55:20.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:55:20.514 [DEBUG] [Thread-132495] [transport.py] [_log()] starting thread (client mode): 0xa2d56ec0
2026-02-11T16:55:20.514 [DEBUG] [Thread-132495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:55:20.535 [DEBUG] [Thread-132495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:55:20.535 [INFO] [Thread-132495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] client lang: <none>
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] server lang: <none>
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] kex follows: False
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] Compression: none
2026-02-11T16:55:20.538 [DEBUG] [Thread-132495] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:55:20.554 [DEBUG] [Thread-132495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:55:20.554 [DEBUG] [Thread-132495] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:55:20.554 [DEBUG] [Thread-132495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:55:20.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:55:20.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:55:20.555 [DEBUG] [Thread-132495] [transport.py] [_log()] userauth is OK
2026-02-11T16:55:20.555 [DEBUG] [Thread-132495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:55:20.555 [DEBUG] [Thread-132495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:55:20.555 [DEBUG] [Thread-132495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:55:20.555 [DEBUG] [Thread-132495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:55:20.582 [INFO] [Thread-132495] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:55:20.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:55:21.216 [DEBUG] [Thread-132495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:55:21.216 [DEBUG] [Thread-132495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:55:21.217 [DEBUG] [Thread-132495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:55:21.258 [DEBUG] [Thread-132495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:55:21.258 [DEBUG] [Thread-132495] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:55:21.261 [DEBUG] [Thread-132495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:55:21.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:55:21.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:55:21.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:55:21.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:55:21.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:55:21.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:55:21.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:55:21.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:55:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:55:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.621322 -999.00  +23.10  27.96     49  +11.90 1 2 1 1 1   888    0 9.46 -97.48 ----- 21.6 28.0 294.2 36.6 26.0 -15.5 26.0 -15.1 25.6 -12.5 25.9 -13.0
2026-02-11T16:55:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:55:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:55:21.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.621322
2026-02-11T16:55:21.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:55:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:55:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:55:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:55:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:55:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:55:10', tmtdew=13.41, humidity=42.7, cloud=0.0, wind=31.9, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:54:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:55:21.289 [DEBUG] [Thread-132495] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:55:21.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:55:21.393 [DEBUG] [Thread-132498] [transport.py] [_log()] starting thread (client mode): 0xa2d55090
2026-02-11T16:55:21.394 [DEBUG] [Thread-132498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:55:21.408 [DEBUG] [Thread-132498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:55:21.408 [INFO] [Thread-132498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:55:21.416 [DEBUG] [Thread-132498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:55:21.416 [DEBUG] [Thread-132498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] client lang: <none>
2026-02-11T16:55:21.417 [DEBUG] [Thread-132498] [transport.py] [_log()] server lang: <none>
2026-02-11T16:55:21.418 [DEBUG] [Thread-132498] [transport.py] [_log()] kex follows: False
2026-02-11T16:55:21.418 [DEBUG] [Thread-132498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:55:21.418 [DEBUG] [Thread-132498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:55:21.418 [DEBUG] [Thread-132498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:55:21.418 [DEBUG] [Thread-132498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:55:21.418 [DEBUG] [Thread-132498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:55:21.418 [DEBUG] [Thread-132498] [transport.py] [_log()] Compression: none
2026-02-11T16:55:21.419 [DEBUG] [Thread-132498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:55:21.477 [DEBUG] [Thread-132498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:55:21.478 [DEBUG] [Thread-132498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:55:21.479 [DEBUG] [Thread-132498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:55:21.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:55:21.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:55:21.537 [DEBUG] [Thread-132498] [transport.py] [_log()] userauth is OK
2026-02-11T16:55:21.538 [DEBUG] [Thread-132498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:55:21.538 [DEBUG] [Thread-132498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:55:21.538 [DEBUG] [Thread-132498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:55:21.538 [DEBUG] [Thread-132498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:55:21.557 [INFO] [Thread-132498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:55:21.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:55:21.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:55:22.372 [DEBUG] [Thread-132498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:55:22.373 [DEBUG] [Thread-132498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:55:22.421 [DEBUG] [Thread-132498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:55:22.421 [DEBUG] [Thread-132498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:55:22.430 [DEBUG] [Thread-132498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:55:22.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:55:22.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:55:22.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:55:22.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:55:22.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:55:22.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:55:22.468 [DEBUG] [Thread-132498] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:55:26.110 [DEBUG] [Thread-132500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:55:27.271 [DEBUG] [Thread-132501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:55:42.321 [DEBUG] [Thread-132502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:55:46.075 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:55:46.076 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:55:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:55:52.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:55:52.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:55:54.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 55, 45), 13.13, 43.27, 0.0, 28.34, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:55:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:55:45
2026-02-11T16:55:54.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:55:54.961 [DEBUG] [Thread-132503] [transport.py] [_log()] starting thread (client mode): 0xa5770430
2026-02-11T16:55:54.961 [DEBUG] [Thread-132503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:55:54.981 [DEBUG] [Thread-132503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:55:54.981 [INFO] [Thread-132503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:55:54.984 [DEBUG] [Thread-132503] [transport.py] [_log()] client lang: <none>
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] server lang: <none>
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] kex follows: False
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] Compression: none
2026-02-11T16:55:54.985 [DEBUG] [Thread-132503] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:55:55.002 [DEBUG] [Thread-132503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:55:55.002 [DEBUG] [Thread-132503] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:55:55.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:55:55.003 [DEBUG] [Thread-132503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:55:55.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:55:55.005 [DEBUG] [Thread-132503] [transport.py] [_log()] userauth is OK
2026-02-11T16:55:55.005 [DEBUG] [Thread-132503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:55:55.006 [DEBUG] [Thread-132503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:55:55.006 [DEBUG] [Thread-132503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:55:55.006 [DEBUG] [Thread-132503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:55:55.023 [INFO] [Thread-132503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:55:55.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:55:55.665 [DEBUG] [Thread-132503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:55:55.665 [DEBUG] [Thread-132503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:55:55.665 [DEBUG] [Thread-132503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:55:55.706 [DEBUG] [Thread-132503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:55:55.706 [DEBUG] [Thread-132503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:55:55.709 [DEBUG] [Thread-132503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:55:55.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:55:55.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:55:55.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:55:55.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:55:55.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:55:55.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:55:55.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:55:55.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:55:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:55:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.621669 -999.00  +23.30  17.66     49  +12.00 1 2 1 1 1   887    0 9.12 -97.68 ----- 24.9 17.7 295.0 29.4 26.1 -14.4 26.0 -13.9 25.6 -14.6 26.0 -12.0
2026-02-11T16:55:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:55:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:55:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.621669
2026-02-11T16:55:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:55:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:55:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:55:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:55:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:55:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:55:45', tmtdew=13.13, humidity=43.27, cloud=0.0, wind=28.34, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:55:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:55:55.735 [DEBUG] [Thread-132503] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:55:55.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:55:55.832 [DEBUG] [Thread-132506] [transport.py] [_log()] starting thread (client mode): 0xa5770f10
2026-02-11T16:55:55.832 [DEBUG] [Thread-132506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:55:55.846 [DEBUG] [Thread-132506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:55:55.846 [INFO] [Thread-132506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] client lang: <none>
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] server lang: <none>
2026-02-11T16:55:55.854 [DEBUG] [Thread-132506] [transport.py] [_log()] kex follows: False
2026-02-11T16:55:55.855 [DEBUG] [Thread-132506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:55:55.855 [DEBUG] [Thread-132506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:55:55.855 [DEBUG] [Thread-132506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:55:55.855 [DEBUG] [Thread-132506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:55:55.855 [DEBUG] [Thread-132506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:55:55.855 [DEBUG] [Thread-132506] [transport.py] [_log()] Compression: none
2026-02-11T16:55:55.855 [DEBUG] [Thread-132506] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:55:55.915 [DEBUG] [Thread-132506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:55:55.916 [DEBUG] [Thread-132506] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:55:55.917 [DEBUG] [Thread-132506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:55:55.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:55:55.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:55:55.971 [DEBUG] [Thread-132506] [transport.py] [_log()] userauth is OK
2026-02-11T16:55:55.972 [DEBUG] [Thread-132506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:55:55.972 [DEBUG] [Thread-132506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:55:55.972 [DEBUG] [Thread-132506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:55:55.972 [DEBUG] [Thread-132506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:55:55.994 [INFO] [Thread-132506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:55:55.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:55:55.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:55:56.821 [DEBUG] [Thread-132506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:55:56.821 [DEBUG] [Thread-132506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:55:56.871 [DEBUG] [Thread-132506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:55:56.871 [DEBUG] [Thread-132506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:55:56.880 [DEBUG] [Thread-132506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:55:56.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:55:56.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:55:56.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:55:56.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:55:56.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:55:56.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:55:56.915 [DEBUG] [Thread-132506] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:55:57.357 [DEBUG] [Thread-132508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:56:12.417 [DEBUG] [Thread-132509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:56:26.143 [DEBUG] [Thread-132510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:56:26.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:56:26.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:56:26.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:56:27.452 [DEBUG] [Thread-132511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:56:28.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 56, 21), 13.05, 43.48, 0.0, 27.49, 23.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:56:28.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:56:21
2026-02-11T16:56:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:56:29.314 [DEBUG] [Thread-132512] [transport.py] [_log()] starting thread (client mode): 0xa5742cb0
2026-02-11T16:56:29.315 [DEBUG] [Thread-132512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:56:29.335 [DEBUG] [Thread-132512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:56:29.336 [INFO] [Thread-132512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:56:29.338 [DEBUG] [Thread-132512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] client lang: <none>
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] server lang: <none>
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] kex follows: False
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] Compression: none
2026-02-11T16:56:29.339 [DEBUG] [Thread-132512] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:56:29.356 [DEBUG] [Thread-132512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:56:29.357 [DEBUG] [Thread-132512] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:56:29.358 [DEBUG] [Thread-132512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:56:29.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:56:29.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:56:29.360 [DEBUG] [Thread-132512] [transport.py] [_log()] userauth is OK
2026-02-11T16:56:29.360 [DEBUG] [Thread-132512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:56:29.360 [DEBUG] [Thread-132512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:56:29.360 [DEBUG] [Thread-132512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:56:29.361 [DEBUG] [Thread-132512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:56:29.376 [INFO] [Thread-132512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:56:29.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:56:30.006 [DEBUG] [Thread-132512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:56:30.006 [DEBUG] [Thread-132512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:56:30.007 [DEBUG] [Thread-132512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:56:30.048 [DEBUG] [Thread-132512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:56:30.048 [DEBUG] [Thread-132512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:56:30.051 [DEBUG] [Thread-132512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:56:30.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:56:30.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:56:30.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:56:30.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:56:30.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:56:30.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:56:30.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:56:30.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:56:30.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:56:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.622017 -999.00  +23.20  24.24     49  +11.90 1 2 1 1 1   887    0 8.71 -111.03 ----- 22.0 24.2 292.0 33.7 26.0 -14.1 25.9 -13.7 25.5 -10.6 25.9 -11.9
2026-02-11T16:56:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:56:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:56:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.622017
2026-02-11T16:56:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:56:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:56:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:56:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:56:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:56:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:56:21', tmtdew=13.05, humidity=43.48, cloud=0.0, wind=27.49, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:55:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:56:30.080 [DEBUG] [Thread-132512] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:56:30.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:56:30.175 [DEBUG] [Thread-132515] [transport.py] [_log()] starting thread (client mode): 0xa57c1900
2026-02-11T16:56:30.175 [DEBUG] [Thread-132515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:56:30.189 [DEBUG] [Thread-132515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:56:30.189 [INFO] [Thread-132515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:56:30.197 [DEBUG] [Thread-132515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:56:30.197 [DEBUG] [Thread-132515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:56:30.197 [DEBUG] [Thread-132515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] client lang: <none>
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] server lang: <none>
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] kex follows: False
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] Compression: none
2026-02-11T16:56:30.198 [DEBUG] [Thread-132515] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:56:30.256 [DEBUG] [Thread-132515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:56:30.257 [DEBUG] [Thread-132515] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:56:30.258 [DEBUG] [Thread-132515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:56:30.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:56:30.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:56:30.312 [DEBUG] [Thread-132515] [transport.py] [_log()] userauth is OK
2026-02-11T16:56:30.313 [DEBUG] [Thread-132515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:56:30.313 [DEBUG] [Thread-132515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:56:30.313 [DEBUG] [Thread-132515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:56:30.313 [DEBUG] [Thread-132515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:56:30.332 [INFO] [Thread-132515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:56:30.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:56:30.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:56:31.168 [DEBUG] [Thread-132515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:56:31.169 [DEBUG] [Thread-132515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:56:31.216 [DEBUG] [Thread-132515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:56:31.216 [DEBUG] [Thread-132515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:56:31.225 [DEBUG] [Thread-132515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:56:31.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:56:31.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:56:31.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:56:31.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:56:31.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:56:31.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:56:31.262 [DEBUG] [Thread-132515] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:56:42.486 [DEBUG] [Thread-132517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:56:46.216 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:56:46.217 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:56:57.540 [DEBUG] [Thread-132518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:57:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:57:01.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:57:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:57:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 56, 21), 13.05, 43.48, 0.0, 27.49, 23.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:57:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:56:21
2026-02-11T16:57:03.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:57:03.798 [DEBUG] [Thread-132519] [transport.py] [_log()] starting thread (client mode): 0xa2d54040
2026-02-11T16:57:03.798 [DEBUG] [Thread-132519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:57:03.818 [DEBUG] [Thread-132519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:57:03.819 [INFO] [Thread-132519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:57:03.821 [DEBUG] [Thread-132519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] client lang: <none>
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] server lang: <none>
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] kex follows: False
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] Compression: none
2026-02-11T16:57:03.822 [DEBUG] [Thread-132519] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:57:03.839 [DEBUG] [Thread-132519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:57:03.840 [DEBUG] [Thread-132519] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:57:03.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:57:03.841 [DEBUG] [Thread-132519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:57:03.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:57:03.843 [DEBUG] [Thread-132519] [transport.py] [_log()] userauth is OK
2026-02-11T16:57:03.843 [DEBUG] [Thread-132519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:57:03.843 [DEBUG] [Thread-132519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:57:03.843 [DEBUG] [Thread-132519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:57:03.843 [DEBUG] [Thread-132519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:57:03.867 [INFO] [Thread-132519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:57:03.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:57:04.619 [DEBUG] [Thread-132519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:57:04.619 [DEBUG] [Thread-132519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:57:04.620 [DEBUG] [Thread-132519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:57:04.660 [DEBUG] [Thread-132519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:57:04.661 [DEBUG] [Thread-132519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:57:04.664 [DEBUG] [Thread-132519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:57:04.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:57:04.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:57:04.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:57:04.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:57:04.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:57:04.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:57:04.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:57:04.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:57:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:57:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.622711 -999.00  +23.10  29.66     49  +11.90 1 2 1 1 1   887    0 8.68 -119.31 ----- 29.1 29.7 291.0 36.6 25.9 -13.0 25.9 -12.4 25.4 -10.7 25.8 -10.7
2026-02-11T16:57:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:57:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:57:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.622711
2026-02-11T16:57:04.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:57:04.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:57:04.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:57:04.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:57:04.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:57:04.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:56:21', tmtdew=13.05, humidity=43.48, cloud=0.0, wind=27.49, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:56:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:57:04.691 [DEBUG] [Thread-132519] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:57:04.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:57:04.787 [DEBUG] [Thread-132522] [transport.py] [_log()] starting thread (client mode): 0xa5742cb0
2026-02-11T16:57:04.787 [DEBUG] [Thread-132522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:57:04.801 [DEBUG] [Thread-132522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:57:04.802 [INFO] [Thread-132522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:57:04.809 [DEBUG] [Thread-132522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] client lang: <none>
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] server lang: <none>
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] kex follows: False
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:57:04.810 [DEBUG] [Thread-132522] [transport.py] [_log()] Compression: none
2026-02-11T16:57:04.811 [DEBUG] [Thread-132522] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:57:04.869 [DEBUG] [Thread-132522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:57:04.870 [DEBUG] [Thread-132522] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:57:04.871 [DEBUG] [Thread-132522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:57:04.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:57:04.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:57:04.930 [DEBUG] [Thread-132522] [transport.py] [_log()] userauth is OK
2026-02-11T16:57:04.930 [DEBUG] [Thread-132522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:57:04.931 [DEBUG] [Thread-132522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:57:04.931 [DEBUG] [Thread-132522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:57:04.931 [DEBUG] [Thread-132522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:57:04.960 [INFO] [Thread-132522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:57:04.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:57:04.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:57:05.798 [DEBUG] [Thread-132522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:57:05.799 [DEBUG] [Thread-132522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:57:05.846 [DEBUG] [Thread-132522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:57:05.847 [DEBUG] [Thread-132522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:57:05.856 [DEBUG] [Thread-132522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:57:05.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:57:05.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')
2026-02-11T16:57:05.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:57:05.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:57:05.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:57:05.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:57:05.893 [DEBUG] [Thread-132522] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:57:12.577 [DEBUG] [Thread-132524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:57:26.177 [DEBUG] [Thread-132525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:57:27.632 [DEBUG] [Thread-132526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:57:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:57:35.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:57:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:57:38.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 56, 56), 13.21, 43.08, 0.0, 32.52, 23.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:57:38.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:56:56
2026-02-11T16:57:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:57:38.605 [DEBUG] [Thread-132527] [transport.py] [_log()] starting thread (client mode): 0xa2dc0dc0
2026-02-11T16:57:38.605 [DEBUG] [Thread-132527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:57:38.625 [DEBUG] [Thread-132527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:57:38.625 [INFO] [Thread-132527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] client lang: <none>
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] server lang: <none>
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] kex follows: False
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] Compression: none
2026-02-11T16:57:38.629 [DEBUG] [Thread-132527] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:57:38.645 [DEBUG] [Thread-132527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:57:38.646 [DEBUG] [Thread-132527] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:57:38.646 [DEBUG] [Thread-132527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:57:38.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:57:38.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:57:38.648 [DEBUG] [Thread-132527] [transport.py] [_log()] userauth is OK
2026-02-11T16:57:38.648 [DEBUG] [Thread-132527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:57:38.648 [DEBUG] [Thread-132527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:57:38.648 [DEBUG] [Thread-132527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:57:38.648 [DEBUG] [Thread-132527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:57:38.662 [INFO] [Thread-132527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:57:38.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:57:39.301 [DEBUG] [Thread-132527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:57:39.301 [DEBUG] [Thread-132527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:57:39.302 [DEBUG] [Thread-132527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:57:39.342 [DEBUG] [Thread-132527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:57:39.343 [DEBUG] [Thread-132527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:57:39.346 [DEBUG] [Thread-132527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:57:39.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:57:39.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:57:39.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:57:39.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:57:39.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:57:39.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:57:39.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:57:39.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:57:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:57:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.623058 -999.00  +23.00  28.53     49  +12.00 1 2 1 1 1   887    0 8.75 -113.92 ----- 26.7 28.5 296.8 36.9 25.9 -11.5 25.9 -11.2 25.4 -10.1 25.8 -10.5
2026-02-11T16:57:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:57:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:57:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.623058
2026-02-11T16:57:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:57:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:57:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:57:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:57:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:57:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:56:56', tmtdew=13.21, humidity=43.08, cloud=0.0, wind=32.52, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:57:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:57:39.374 [DEBUG] [Thread-132527] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:57:39.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:57:39.470 [DEBUG] [Thread-132530] [transport.py] [_log()] starting thread (client mode): 0xa5770d90
2026-02-11T16:57:39.470 [DEBUG] [Thread-132530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:57:39.485 [DEBUG] [Thread-132530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:57:39.485 [INFO] [Thread-132530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:57:39.493 [DEBUG] [Thread-132530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:57:39.493 [DEBUG] [Thread-132530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:57:39.493 [DEBUG] [Thread-132530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] client lang: <none>
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] server lang: <none>
2026-02-11T16:57:39.494 [DEBUG] [Thread-132530] [transport.py] [_log()] kex follows: False
2026-02-11T16:57:39.495 [DEBUG] [Thread-132530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:57:39.495 [DEBUG] [Thread-132530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:57:39.495 [DEBUG] [Thread-132530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:57:39.495 [DEBUG] [Thread-132530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:57:39.495 [DEBUG] [Thread-132530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:57:39.495 [DEBUG] [Thread-132530] [transport.py] [_log()] Compression: none
2026-02-11T16:57:39.495 [DEBUG] [Thread-132530] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:57:39.562 [DEBUG] [Thread-132530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:57:39.563 [DEBUG] [Thread-132530] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:57:39.563 [DEBUG] [Thread-132530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:57:39.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:57:39.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:57:39.621 [DEBUG] [Thread-132530] [transport.py] [_log()] userauth is OK
2026-02-11T16:57:39.621 [DEBUG] [Thread-132530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:57:39.621 [DEBUG] [Thread-132530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:57:39.621 [DEBUG] [Thread-132530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:57:39.621 [DEBUG] [Thread-132530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:57:39.641 [INFO] [Thread-132530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:57:39.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:57:39.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:57:40.480 [DEBUG] [Thread-132530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:57:40.481 [DEBUG] [Thread-132530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:57:40.528 [DEBUG] [Thread-132530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:57:40.529 [DEBUG] [Thread-132530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:57:40.538 [DEBUG] [Thread-132530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:57:40.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:57: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')
2026-02-11T16:57:40.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:57:40.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:57:40.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:57:40.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:57:40.575 [DEBUG] [Thread-132530] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:57:42.669 [DEBUG] [Thread-132532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:57:46.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:57:46.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:57:57.723 [DEBUG] [Thread-132533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:58:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:58:10.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:58:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:58:12.759 [DEBUG] [Thread-132534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:58:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 57, 31), 13.22, 43.05, 0.0, 31.44, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:58:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:57:31
2026-02-11T16:58:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:58:13.531 [DEBUG] [Thread-132535] [transport.py] [_log()] starting thread (client mode): 0xa5740700
2026-02-11T16:58:13.532 [DEBUG] [Thread-132535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:58:13.546 [DEBUG] [Thread-132535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:58:13.546 [INFO] [Thread-132535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:58:13.547 [DEBUG] [Thread-132535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:58:13.547 [DEBUG] [Thread-132535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:58:13.547 [DEBUG] [Thread-132535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:58:13.547 [DEBUG] [Thread-132535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:13.547 [DEBUG] [Thread-132535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:13.547 [DEBUG] [Thread-132535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] client lang: <none>
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] server lang: <none>
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] kex follows: False
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] Compression: none
2026-02-11T16:58:13.548 [DEBUG] [Thread-132535] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:58:13.560 [DEBUG] [Thread-132535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:58:13.560 [DEBUG] [Thread-132535] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:58:13.561 [DEBUG] [Thread-132535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:58:13.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:58:13.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:58:13.562 [DEBUG] [Thread-132535] [transport.py] [_log()] userauth is OK
2026-02-11T16:58:13.562 [DEBUG] [Thread-132535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:58:13.562 [DEBUG] [Thread-132535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:58:13.562 [DEBUG] [Thread-132535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:58:13.563 [DEBUG] [Thread-132535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:58:13.579 [INFO] [Thread-132535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:58:13.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:58:14.218 [DEBUG] [Thread-132535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:58:14.218 [DEBUG] [Thread-132535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:58:14.219 [DEBUG] [Thread-132535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:58:14.260 [DEBUG] [Thread-132535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:58:14.260 [DEBUG] [Thread-132535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:58:14.263 [DEBUG] [Thread-132535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:58:14.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:58:14.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:58:14.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:58:14.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:58:14.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:58:14.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:58:14.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:58:14.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:58:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:58:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.623405 -999.00  +23.10  25.24     49  +12.10 1 2 1 1 1   887    0 8.46 -123.51 ----- 25.1 25.2 297.0 37.1 25.9 -11.5 25.8 -10.8 25.4 -9.5 25.7 -9.7
2026-02-11T16:58:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:58:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:58:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.623405
2026-02-11T16:58:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:58:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:58:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:58:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:58:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:58:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:57:31', tmtdew=13.22, humidity=43.05, cloud=0.0, wind=31.44, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:57:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:58:14.287 [DEBUG] [Thread-132535] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:58:14.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:58:14.386 [DEBUG] [Thread-132538] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a90
2026-02-11T16:58:14.386 [DEBUG] [Thread-132538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:58:14.403 [DEBUG] [Thread-132538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:58:14.403 [INFO] [Thread-132538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:58:14.410 [DEBUG] [Thread-132538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] client lang: <none>
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] server lang: <none>
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] kex follows: False
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] Compression: none
2026-02-11T16:58:14.411 [DEBUG] [Thread-132538] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:58:14.469 [DEBUG] [Thread-132538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:58:14.470 [DEBUG] [Thread-132538] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:58:14.470 [DEBUG] [Thread-132538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:58:14.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:58:14.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:58:14.531 [DEBUG] [Thread-132538] [transport.py] [_log()] userauth is OK
2026-02-11T16:58:14.531 [DEBUG] [Thread-132538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:58:14.531 [DEBUG] [Thread-132538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:58:14.531 [DEBUG] [Thread-132538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:58:14.531 [DEBUG] [Thread-132538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:58:14.556 [INFO] [Thread-132538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:58:14.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:58:14.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:58:15.406 [DEBUG] [Thread-132538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:58:15.406 [DEBUG] [Thread-132538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:58:15.455 [DEBUG] [Thread-132538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:58:15.455 [DEBUG] [Thread-132538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:58:15.465 [DEBUG] [Thread-132538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:58:15.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:58:15.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:58:15.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:58:15.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:58:15.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:58:15.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:58:15.502 [DEBUG] [Thread-132538] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:58:26.210 [DEBUG] [Thread-132540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:58:27.794 [DEBUG] [Thread-132541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:58:42.848 [DEBUG] [Thread-132542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:58:45.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:58:45.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:58:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:58:46.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:58:46.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:58:47.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 58, 7), 13.33, 42.8, 0.0, 32.32, 23.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:58:47.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:58:07
2026-02-11T16:58:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:58:48.156 [DEBUG] [Thread-132543] [transport.py] [_log()] starting thread (client mode): 0xa2dc1870
2026-02-11T16:58:48.156 [DEBUG] [Thread-132543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:58:48.176 [DEBUG] [Thread-132543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:58:48.176 [INFO] [Thread-132543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] client lang: <none>
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] server lang: <none>
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] kex follows: False
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:58:48.179 [DEBUG] [Thread-132543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:58:48.180 [DEBUG] [Thread-132543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:58:48.180 [DEBUG] [Thread-132543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:58:48.180 [DEBUG] [Thread-132543] [transport.py] [_log()] Compression: none
2026-02-11T16:58:48.180 [DEBUG] [Thread-132543] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:58:48.199 [DEBUG] [Thread-132543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:58:48.199 [DEBUG] [Thread-132543] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:58:48.200 [DEBUG] [Thread-132543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:58:48.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:58:48.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:58:48.201 [DEBUG] [Thread-132543] [transport.py] [_log()] userauth is OK
2026-02-11T16:58:48.202 [DEBUG] [Thread-132543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:58:48.202 [DEBUG] [Thread-132543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:58:48.202 [DEBUG] [Thread-132543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:58:48.202 [DEBUG] [Thread-132543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:58:48.223 [INFO] [Thread-132543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:58:48.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:58:48.860 [DEBUG] [Thread-132543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:58:48.861 [DEBUG] [Thread-132543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:58:48.861 [DEBUG] [Thread-132543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:58:48.901 [DEBUG] [Thread-132543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:58:48.902 [DEBUG] [Thread-132543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:58:48.905 [DEBUG] [Thread-132543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:58:48.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:58:48.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:58:48.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:58:48.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:58:48.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:58:48.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:58:48.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:58:48.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:58:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:58:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.623753 -999.00  +23.30  34.88     49  +12.00 1 2 2 1 1   887    0 7.93 -124.18 ----- 27.7 34.9 277.2 37.4 25.8 -11.5 25.9 -10.2 25.2 -12.0 25.7 -10.2
2026-02-11T16:58:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:58:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:58:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.623753
2026-02-11T16:58:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:58:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:58:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:58:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:58:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:58:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:58:07', tmtdew=13.33, humidity=42.8, cloud=0.0, wind=32.32, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:58:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:58:48.933 [DEBUG] [Thread-132543] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:58:49.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:58:49.034 [DEBUG] [Thread-132546] [transport.py] [_log()] starting thread (client mode): 0xa2d573d0
2026-02-11T16:58:49.034 [DEBUG] [Thread-132546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:58:49.053 [DEBUG] [Thread-132546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:58:49.053 [INFO] [Thread-132546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] client lang: <none>
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] server lang: <none>
2026-02-11T16:58:49.061 [DEBUG] [Thread-132546] [transport.py] [_log()] kex follows: False
2026-02-11T16:58:49.062 [DEBUG] [Thread-132546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:58:49.062 [DEBUG] [Thread-132546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:58:49.062 [DEBUG] [Thread-132546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:58:49.062 [DEBUG] [Thread-132546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:58:49.062 [DEBUG] [Thread-132546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:58:49.062 [DEBUG] [Thread-132546] [transport.py] [_log()] Compression: none
2026-02-11T16:58:49.062 [DEBUG] [Thread-132546] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:58:49.129 [DEBUG] [Thread-132546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:58:49.130 [DEBUG] [Thread-132546] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:58:49.130 [DEBUG] [Thread-132546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:58:49.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:58:49.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:58:49.188 [DEBUG] [Thread-132546] [transport.py] [_log()] userauth is OK
2026-02-11T16:58:49.188 [DEBUG] [Thread-132546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:58:49.188 [DEBUG] [Thread-132546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:58:49.188 [DEBUG] [Thread-132546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:58:49.188 [DEBUG] [Thread-132546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:58:49.207 [INFO] [Thread-132546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:58:49.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:58:49.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:58:50.026 [DEBUG] [Thread-132546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:58:50.026 [DEBUG] [Thread-132546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:58:50.074 [DEBUG] [Thread-132546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:58:50.074 [DEBUG] [Thread-132546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:58:50.084 [DEBUG] [Thread-132546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:58:50.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:58:50.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:58:50.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:58:50.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:58:50.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:58:50.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:58:50.125 [DEBUG] [Thread-132546] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:58:57.884 [DEBUG] [Thread-132548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:12.942 [DEBUG] [Thread-132549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:20.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:59:20.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:59:20.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:59:22.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 58, 44), 13.4, 42.5, 0.0, 38.2, 23.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:59:22.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:58:44
2026-02-11T16:59:22.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:59:22.961 [DEBUG] [Thread-132550] [transport.py] [_log()] starting thread (client mode): 0xa2d54820
2026-02-11T16:59:22.961 [DEBUG] [Thread-132550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:59:22.980 [DEBUG] [Thread-132550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:59:22.980 [INFO] [Thread-132550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:59:22.985 [DEBUG] [Thread-132550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] client lang: <none>
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] server lang: <none>
2026-02-11T16:59:22.986 [DEBUG] [Thread-132550] [transport.py] [_log()] kex follows: False
2026-02-11T16:59:22.987 [DEBUG] [Thread-132550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:59:22.987 [DEBUG] [Thread-132550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:59:22.987 [DEBUG] [Thread-132550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:59:22.987 [DEBUG] [Thread-132550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:59:22.987 [DEBUG] [Thread-132550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:59:22.987 [DEBUG] [Thread-132550] [transport.py] [_log()] Compression: none
2026-02-11T16:59:22.987 [DEBUG] [Thread-132550] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:59:23.006 [DEBUG] [Thread-132550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:59:23.007 [DEBUG] [Thread-132550] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:59:23.007 [DEBUG] [Thread-132550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:59:23.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:59:23.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:59:23.009 [DEBUG] [Thread-132550] [transport.py] [_log()] userauth is OK
2026-02-11T16:59:23.010 [DEBUG] [Thread-132550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:59:23.010 [DEBUG] [Thread-132550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:59:23.010 [DEBUG] [Thread-132550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:59:23.010 [DEBUG] [Thread-132550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:59:23.030 [INFO] [Thread-132550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:59:23.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:59:23.664 [DEBUG] [Thread-132550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:59:23.664 [DEBUG] [Thread-132550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:59:23.664 [DEBUG] [Thread-132550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:59:23.704 [DEBUG] [Thread-132550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:59:23.705 [DEBUG] [Thread-132550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:59:23.708 [DEBUG] [Thread-132550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:59:23.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:59:23.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:59:23.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:59:23.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:59:23.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:59:23.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:59:23.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:59:23.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:59:23.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:59:23.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.624100 -999.00  +22.90  29.12     50  +12.00 1 2 1 1 1   887    0 8.59 -114.25 ----- 29.8 29.1 286.0 35.6 25.7 -11.2 25.7 -10.4 25.0 -9.9 25.6 -10.5
2026-02-11T16:59:23.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:59:23.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:59:23.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.624100
2026-02-11T16:59:23.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:59:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:59:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:59:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:59:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T16:59:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:58:44', tmtdew=13.4, humidity=42.5, cloud=0.0, wind=38.2, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:58:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:59:23.734 [DEBUG] [Thread-132550] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:59:23.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:59:23.830 [DEBUG] [Thread-132553] [transport.py] [_log()] starting thread (client mode): 0xa2dc2500
2026-02-11T16:59:23.831 [DEBUG] [Thread-132553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:59:23.845 [DEBUG] [Thread-132553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:59:23.845 [INFO] [Thread-132553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:23.853 [DEBUG] [Thread-132553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] client lang: <none>
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] server lang: <none>
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] kex follows: False
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] Compression: none
2026-02-11T16:59:23.854 [DEBUG] [Thread-132553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:59:23.912 [DEBUG] [Thread-132553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:59:23.913 [DEBUG] [Thread-132553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:59:23.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:59:23.914 [DEBUG] [Thread-132553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:59:23.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:59:23.970 [DEBUG] [Thread-132553] [transport.py] [_log()] userauth is OK
2026-02-11T16:59:23.970 [DEBUG] [Thread-132553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:59:23.970 [DEBUG] [Thread-132553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:59:23.970 [DEBUG] [Thread-132553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:59:23.970 [DEBUG] [Thread-132553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:59:23.989 [INFO] [Thread-132553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:59:23.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:59:23.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:59:24.820 [DEBUG] [Thread-132553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:59:24.820 [DEBUG] [Thread-132553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:59:24.868 [DEBUG] [Thread-132553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:59:24.869 [DEBUG] [Thread-132553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:59:24.878 [DEBUG] [Thread-132553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:59:24.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:59:24.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:59:24.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T16:59:24.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:59:24.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:59:24.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:59:24.915 [DEBUG] [Thread-132553] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:59:26.253 [DEBUG] [Thread-132555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:27.978 [DEBUG] [Thread-132556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:43.029 [DEBUG] [Thread-132557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:46.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:46.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:54.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T16:59:54.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T16:59:54.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T16:59:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 59, 20), 13.49, 42.27, 0.0, 37.53, 23.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T16:59:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:59:20
2026-02-11T16:59:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T16:59:57.494 [DEBUG] [Thread-132558] [transport.py] [_log()] starting thread (client mode): 0xa2dc3b20
2026-02-11T16:59:57.494 [DEBUG] [Thread-132558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:59:57.506 [DEBUG] [Thread-132558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T16:59:57.507 [INFO] [Thread-132558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T16:59:57.507 [DEBUG] [Thread-132558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] client lang: <none>
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] server lang: <none>
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] kex follows: False
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] Compression: none
2026-02-11T16:59:57.508 [DEBUG] [Thread-132558] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:59:57.515 [DEBUG] [Thread-132558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:59:57.515 [DEBUG] [Thread-132558] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:59:57.516 [DEBUG] [Thread-132558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T16:59:57.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T16:59:57.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:59:57.516 [DEBUG] [Thread-132558] [transport.py] [_log()] userauth is OK
2026-02-11T16:59:57.517 [DEBUG] [Thread-132558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:59:57.517 [DEBUG] [Thread-132558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:59:57.517 [DEBUG] [Thread-132558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T16:59:57.517 [DEBUG] [Thread-132558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:59:57.535 [INFO] [Thread-132558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:59:57.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:59:58.066 [DEBUG] [Thread-132560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T16:59:58.179 [DEBUG] [Thread-132558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:59:58.180 [DEBUG] [Thread-132558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:59:58.180 [DEBUG] [Thread-132558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T16:59:58.220 [DEBUG] [Thread-132558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:59:58.221 [DEBUG] [Thread-132558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:59:58.224 [DEBUG] [Thread-132558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:59:58.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:59:58.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T16:59:58.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T16:59:58.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T16:59:58.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:59:58.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T16:59:58.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:59:58.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:59:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T16:59:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.624447 -999.00  +23.10  22.65     50  +12.10 1 3 1 1 1   887    0 7.79 -124.48 ----- 19.1 22.6 303.4 34.3 25.6 -11.0 25.6 -10.1 25.1 -9.8 25.5 -9.8
2026-02-11T16:59:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T16:59:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T16:59:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.624447
2026-02-11T16:59:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T16:59:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T16:59:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T16:59:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T16:59:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T16:59:58.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:59:20', tmtdew=13.49, humidity=42.27, cloud=0.0, wind=37.53, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:59:12.221', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T16:59:58.250 [DEBUG] [Thread-132558] [transport.py] [_log()] EOF in transport thread
2026-02-11T16:59:58.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T16:59:58.344 [DEBUG] [Thread-132562] [transport.py] [_log()] starting thread (client mode): 0xa575b670
2026-02-11T16:59:58.344 [DEBUG] [Thread-132562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T16:59:58.364 [DEBUG] [Thread-132562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T16:59:58.364 [INFO] [Thread-132562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T16:59:58.371 [DEBUG] [Thread-132562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T16:59:58.371 [DEBUG] [Thread-132562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T16:59:58.371 [DEBUG] [Thread-132562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T16:59:58.371 [DEBUG] [Thread-132562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:58.371 [DEBUG] [Thread-132562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] client lang: <none>
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] server lang: <none>
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] kex follows: False
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] Compression: none
2026-02-11T16:59:58.372 [DEBUG] [Thread-132562] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T16:59:58.429 [DEBUG] [Thread-132562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T16:59:58.429 [DEBUG] [Thread-132562] [transport.py] [_log()] Switch to new keys ...
2026-02-11T16:59:58.430 [DEBUG] [Thread-132562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T16:59:58.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T16:59:58.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T16:59:58.485 [DEBUG] [Thread-132562] [transport.py] [_log()] userauth is OK
2026-02-11T16:59:58.485 [DEBUG] [Thread-132562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T16:59:58.485 [DEBUG] [Thread-132562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T16:59:58.486 [DEBUG] [Thread-132562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T16:59:58.486 [DEBUG] [Thread-132562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T16:59:58.506 [INFO] [Thread-132562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T16:59:58.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T16:59:58.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T16:59:59.324 [DEBUG] [Thread-132562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T16:59:59.324 [DEBUG] [Thread-132562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T16:59:59.371 [DEBUG] [Thread-132562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T16:59:59.372 [DEBUG] [Thread-132562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T16:59:59.381 [DEBUG] [Thread-132562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T16:59:59.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T16:59:59.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T16:59:59.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
2026-02-11T16:59:59.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T16:59:59.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T16:59:59.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T16:59:59.418 [DEBUG] [Thread-132562] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:00:13.100 [DEBUG] [Thread-132564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:00:26.283 [DEBUG] [Thread-132565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:00:28.144 [DEBUG] [Thread-132566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:00:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:00:29.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:00:29.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
2026-02-11T17:00:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 16, 59, 55), 12.98, 43.93, 0.0, 32.47, 23.37, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:00:31.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 16:59:55
2026-02-11T17:00:31.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:00:32.111 [DEBUG] [Thread-132567] [transport.py] [_log()] starting thread (client mode): 0xa57d7880
2026-02-11T17:00:32.112 [DEBUG] [Thread-132567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:00:32.133 [DEBUG] [Thread-132567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:00:32.133 [INFO] [Thread-132567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:00:32.136 [DEBUG] [Thread-132567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] client lang: <none>
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] server lang: <none>
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] kex follows: False
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] Compression: none
2026-02-11T17:00:32.137 [DEBUG] [Thread-132567] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:00:32.156 [DEBUG] [Thread-132567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:00:32.157 [DEBUG] [Thread-132567] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:00:32.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:00:32.159 [DEBUG] [Thread-132567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:00:32.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:00:32.161 [DEBUG] [Thread-132567] [transport.py] [_log()] userauth is OK
2026-02-11T17:00:32.161 [DEBUG] [Thread-132567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:00:32.162 [DEBUG] [Thread-132567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:00:32.162 [DEBUG] [Thread-132567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:00:32.162 [DEBUG] [Thread-132567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:00:32.182 [INFO] [Thread-132567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:00:32.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:00:32.812 [DEBUG] [Thread-132567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:00:32.813 [DEBUG] [Thread-132567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:00:32.813 [DEBUG] [Thread-132567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:00:32.853 [DEBUG] [Thread-132567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:00:32.854 [DEBUG] [Thread-132567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:00:32.857 [DEBUG] [Thread-132567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:00:32.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:00:32.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:00:32.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:00:32.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:00:32.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:00:32.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:00:32.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:00:32.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:00:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:00:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.624794 -999.00  +23.20  24.12     49  +12.20 1 3 1 1 1   887    0 7.74 -131.86 ----- 19.0 24.1 298.6 31.6 25.7 -10.3 25.6 -9.7 25.3 -8.9 25.5 -9.0
2026-02-11T17:00:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:00:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:00:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.624794
2026-02-11T17:00:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:00:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:00:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:00:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:00:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:00:32.877 [DEBUG] [Thread-132567] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:00:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T16:59:55', tmtdew=12.98, humidity=43.93, cloud=0.0, wind=32.47, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T14:59:42.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:00:32.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:00:32.975 [DEBUG] [Thread-132570] [transport.py] [_log()] starting thread (client mode): 0xa57d54b0
2026-02-11T17:00:32.975 [DEBUG] [Thread-132570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:00:32.989 [DEBUG] [Thread-132570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:00:32.989 [INFO] [Thread-132570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] client lang: <none>
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] server lang: <none>
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] kex follows: False
2026-02-11T17:00:32.997 [DEBUG] [Thread-132570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:00:32.998 [DEBUG] [Thread-132570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:00:32.998 [DEBUG] [Thread-132570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:00:32.998 [DEBUG] [Thread-132570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:00:32.998 [DEBUG] [Thread-132570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:00:32.998 [DEBUG] [Thread-132570] [transport.py] [_log()] Compression: none
2026-02-11T17:00:32.998 [DEBUG] [Thread-132570] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:00:33.054 [DEBUG] [Thread-132570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:00:33.054 [DEBUG] [Thread-132570] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:00:33.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:00:33.056 [DEBUG] [Thread-132570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:00:33.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:00:33.110 [DEBUG] [Thread-132570] [transport.py] [_log()] userauth is OK
2026-02-11T17:00:33.110 [DEBUG] [Thread-132570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:00:33.110 [DEBUG] [Thread-132570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:00:33.110 [DEBUG] [Thread-132570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:00:33.110 [DEBUG] [Thread-132570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:00:33.134 [INFO] [Thread-132570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:00:33.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:00:33.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:00:33.966 [DEBUG] [Thread-132570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:00:33.966 [DEBUG] [Thread-132570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:00:34.014 [DEBUG] [Thread-132570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:00:34.015 [DEBUG] [Thread-132570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:00:34.024 [DEBUG] [Thread-132570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:00:34.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:00:34.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')
2026-02-11T17:00:34.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:00:34.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:00:34.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:00:34.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:00:34.060 [DEBUG] [Thread-132570] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:00:43.180 [DEBUG] [Thread-132572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:00:46.786 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:00:46.788 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:00:58.229 [DEBUG] [Thread-132573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:01:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:01:04.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:01:04.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:01:05.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 0, 31), 12.68, 44.73, 0.0, 32.2, 23.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:01:05.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:00:31
2026-02-11T17:01:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:01:06.441 [DEBUG] [Thread-132574] [transport.py] [_log()] starting thread (client mode): 0xa57d6d10
2026-02-11T17:01:06.442 [DEBUG] [Thread-132574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:01:06.462 [DEBUG] [Thread-132574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:01:06.462 [INFO] [Thread-132574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:01:06.463 [DEBUG] [Thread-132574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:01:06.463 [DEBUG] [Thread-132574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:01:06.463 [DEBUG] [Thread-132574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:01:06.463 [DEBUG] [Thread-132574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:06.463 [DEBUG] [Thread-132574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] client lang: <none>
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] server lang: <none>
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] kex follows: False
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] Compression: none
2026-02-11T17:01:06.464 [DEBUG] [Thread-132574] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:01:06.484 [DEBUG] [Thread-132574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:01:06.485 [DEBUG] [Thread-132574] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:01:06.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:01:06.486 [DEBUG] [Thread-132574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:01:06.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:01:06.488 [DEBUG] [Thread-132574] [transport.py] [_log()] userauth is OK
2026-02-11T17:01:06.489 [DEBUG] [Thread-132574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:01:06.489 [DEBUG] [Thread-132574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:01:06.489 [DEBUG] [Thread-132574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:01:06.489 [DEBUG] [Thread-132574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:01:06.513 [INFO] [Thread-132574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:01:06.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:01:07.108 [DEBUG] [Thread-132574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:01:07.108 [DEBUG] [Thread-132574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:01:07.109 [DEBUG] [Thread-132574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:01:07.149 [DEBUG] [Thread-132574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:01:07.150 [DEBUG] [Thread-132574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:01:07.153 [DEBUG] [Thread-132574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:01:07.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:01:07.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:01:07.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:01:07.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:01:07.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:01:07.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:01:07.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:01:07.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:01:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:01:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.625141 -999.00  +23.30  30.89     49  +12.30 1 3 2 1 1   887    0 8.37 -118.99 ----- 26.8 30.9 300.8 36.7 25.8 -10.4 25.6 -9.7 25.2 -10.0 25.6 -9.7
2026-02-11T17:01:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:01:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:01:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.625141
2026-02-11T17:01:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:01:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:01:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:01:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:01:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:01:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:00:31', tmtdew=12.68, humidity=44.73, cloud=0.0, wind=32.2, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:00:12.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:01:07.177 [DEBUG] [Thread-132574] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:01:07.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:01:07.273 [DEBUG] [Thread-132577] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-11T17:01:07.273 [DEBUG] [Thread-132577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:01:07.287 [DEBUG] [Thread-132577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:01:07.288 [INFO] [Thread-132577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:01:07.295 [DEBUG] [Thread-132577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:01:07.295 [DEBUG] [Thread-132577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] client lang: <none>
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] server lang: <none>
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] kex follows: False
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] Compression: none
2026-02-11T17:01:07.296 [DEBUG] [Thread-132577] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:01:07.355 [DEBUG] [Thread-132577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:01:07.356 [DEBUG] [Thread-132577] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:01:07.356 [DEBUG] [Thread-132577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:01:07.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:01:07.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:01:07.415 [DEBUG] [Thread-132577] [transport.py] [_log()] userauth is OK
2026-02-11T17:01:07.415 [DEBUG] [Thread-132577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:01:07.415 [DEBUG] [Thread-132577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:01:07.416 [DEBUG] [Thread-132577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:01:07.416 [DEBUG] [Thread-132577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:01:07.435 [INFO] [Thread-132577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:01:07.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:01:07.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:01:08.331 [DEBUG] [Thread-132577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:01:08.331 [DEBUG] [Thread-132577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:01:08.380 [DEBUG] [Thread-132577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:01:08.380 [DEBUG] [Thread-132577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:01:08.388 [DEBUG] [Thread-132577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:01:08.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:01:08.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:01:08.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:01:08.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:01:08.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:01:08.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:01:08.419 [DEBUG] [Thread-132577] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:01:13.264 [DEBUG] [Thread-132579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:01:26.322 [DEBUG] [Thread-132580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:01:28.314 [DEBUG] [Thread-132581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:01:38.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:01:38.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:01:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:01:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 1, 7), 12.71, 44.66, 0.0, 31.51, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:01:40.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:01:07
2026-02-11T17:01:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:01:40.800 [DEBUG] [Thread-132582] [transport.py] [_log()] starting thread (client mode): 0xa57d76d0
2026-02-11T17:01:40.800 [DEBUG] [Thread-132582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:01:40.820 [DEBUG] [Thread-132582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:01:40.820 [INFO] [Thread-132582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:01:40.823 [DEBUG] [Thread-132582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:01:40.823 [DEBUG] [Thread-132582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] client lang: <none>
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] server lang: <none>
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] kex follows: False
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] Compression: none
2026-02-11T17:01:40.824 [DEBUG] [Thread-132582] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:01:40.843 [DEBUG] [Thread-132582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:01:40.844 [DEBUG] [Thread-132582] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:01:40.845 [DEBUG] [Thread-132582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:01:40.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:01:40.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:01:40.847 [DEBUG] [Thread-132582] [transport.py] [_log()] userauth is OK
2026-02-11T17:01:40.847 [DEBUG] [Thread-132582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:01:40.847 [DEBUG] [Thread-132582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:01:40.847 [DEBUG] [Thread-132582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:01:40.847 [DEBUG] [Thread-132582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:01:40.881 [INFO] [Thread-132582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:01:40.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:01:41.525 [DEBUG] [Thread-132582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:01:41.525 [DEBUG] [Thread-132582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:01:41.525 [DEBUG] [Thread-132582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:01:41.566 [DEBUG] [Thread-132582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:01:41.567 [DEBUG] [Thread-132582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:01:41.570 [DEBUG] [Thread-132582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:01:41.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:01:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:01:41.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:01:41.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:01:41.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:01:41.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:01:41.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:01:41.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:01:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:01:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.625489 -999.00  +23.30  30.68     50  +12.20 1 3 2 1 1   887    0 7.76 -133.48 ----- 24.4 30.7 298.2 38.3 25.8 -10.5 25.6 -9.8 25.2 -9.3 25.5 -9.5
2026-02-11T17:01:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:01:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:01:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.625489
2026-02-11T17:01:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:01:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:01:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:01:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:01:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:01:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:01:07', tmtdew=12.71, humidity=44.66, cloud=0.0, wind=31.51, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:00:42.250', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:01:41.598 [DEBUG] [Thread-132582] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:01:41.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:01:41.693 [DEBUG] [Thread-132585] [transport.py] [_log()] starting thread (client mode): 0xa575be50
2026-02-11T17:01:41.693 [DEBUG] [Thread-132585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:01:41.708 [DEBUG] [Thread-132585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:01:41.708 [INFO] [Thread-132585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:01:41.716 [DEBUG] [Thread-132585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:01:41.716 [DEBUG] [Thread-132585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:01:41.716 [DEBUG] [Thread-132585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:01:41.716 [DEBUG] [Thread-132585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:41.716 [DEBUG] [Thread-132585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] client lang: <none>
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] server lang: <none>
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] kex follows: False
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:01:41.717 [DEBUG] [Thread-132585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:01:41.718 [DEBUG] [Thread-132585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:01:41.718 [DEBUG] [Thread-132585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:01:41.718 [DEBUG] [Thread-132585] [transport.py] [_log()] Compression: none
2026-02-11T17:01:41.718 [DEBUG] [Thread-132585] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:01:41.775 [DEBUG] [Thread-132585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:01:41.776 [DEBUG] [Thread-132585] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:01:41.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:01:41.777 [DEBUG] [Thread-132585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:01:41.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:01:41.834 [DEBUG] [Thread-132585] [transport.py] [_log()] userauth is OK
2026-02-11T17:01:41.835 [DEBUG] [Thread-132585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:01:41.835 [DEBUG] [Thread-132585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:01:41.835 [DEBUG] [Thread-132585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:01:41.835 [DEBUG] [Thread-132585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:01:41.853 [INFO] [Thread-132585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:01:41.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:01:41.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:01:42.676 [DEBUG] [Thread-132585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:01:42.677 [DEBUG] [Thread-132585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:01:42.725 [DEBUG] [Thread-132585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:01:42.725 [DEBUG] [Thread-132585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:01:42.734 [DEBUG] [Thread-132585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:01:42.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:01:42.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:01:42.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:01:42.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:01:42.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:01:42.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:01:42.771 [DEBUG] [Thread-132585] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:01:43.352 [DEBUG] [Thread-132587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:01:46.930 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:01:46.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:01:58.402 [DEBUG] [Thread-132588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:02:12.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:02:12.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:02:12.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:02:13.439 [DEBUG] [Thread-132589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:02:15.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 1, 43), 12.93, 43.96, 0.0, 34.65, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:02:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:01:43
2026-02-11T17:02:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:02:16.002 [DEBUG] [Thread-132590] [transport.py] [_log()] starting thread (client mode): 0xa575a020
2026-02-11T17:02:16.002 [DEBUG] [Thread-132590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:02:16.016 [DEBUG] [Thread-132590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:02:16.016 [INFO] [Thread-132590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] client lang: <none>
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] server lang: <none>
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] kex follows: False
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:02:16.018 [DEBUG] [Thread-132590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:02:16.019 [DEBUG] [Thread-132590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:02:16.019 [DEBUG] [Thread-132590] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:02:16.019 [DEBUG] [Thread-132590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:02:16.019 [DEBUG] [Thread-132590] [transport.py] [_log()] Compression: none
2026-02-11T17:02:16.019 [DEBUG] [Thread-132590] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:02:16.027 [DEBUG] [Thread-132590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:02:16.027 [DEBUG] [Thread-132590] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:02:16.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:02:16.027 [DEBUG] [Thread-132590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:02:16.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:02:16.028 [DEBUG] [Thread-132590] [transport.py] [_log()] userauth is OK
2026-02-11T17:02:16.028 [DEBUG] [Thread-132590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:02:16.028 [DEBUG] [Thread-132590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:02:16.028 [DEBUG] [Thread-132590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:02:16.028 [DEBUG] [Thread-132590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:02:16.039 [INFO] [Thread-132590] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:02:16.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:02:16.646 [DEBUG] [Thread-132590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:02:16.646 [DEBUG] [Thread-132590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:02:16.646 [DEBUG] [Thread-132590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:02:16.687 [DEBUG] [Thread-132590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:02:16.687 [DEBUG] [Thread-132590] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:02:16.690 [DEBUG] [Thread-132590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:02:16.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:02:16.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:02:16.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:02:16.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:02:16.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:02:16.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:02:16.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:02:16.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:02:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:02:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.626530 -999.00  +22.90  32.31     51  +12.20 1 2 2 1 1   887    0 8.41 -110.66 ----- 29.4 32.3 296.8 42.3 25.6 -10.6 25.6 -10.8 25.1 -9.5 25.4 -9.6
2026-02-11T17:02:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:02:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:02:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.626530
2026-02-11T17:02:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:02:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:02:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:02:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:02:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:02:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:01:43', tmtdew=12.93, humidity=43.96, cloud=0.0, wind=34.65, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:02:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:02:16.707 [DEBUG] [Thread-132590] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:02:16.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:02:16.804 [DEBUG] [Thread-132593] [transport.py] [_log()] starting thread (client mode): 0xa57d5720
2026-02-11T17:02:16.804 [DEBUG] [Thread-132593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:02:16.819 [DEBUG] [Thread-132593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:02:16.819 [INFO] [Thread-132593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:02:16.826 [DEBUG] [Thread-132593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:02:16.827 [DEBUG] [Thread-132593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:02:16.827 [DEBUG] [Thread-132593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:02:16.827 [DEBUG] [Thread-132593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:16.827 [DEBUG] [Thread-132593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:16.827 [DEBUG] [Thread-132593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:16.827 [DEBUG] [Thread-132593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:16.827 [DEBUG] [Thread-132593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] client lang: <none>
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] server lang: <none>
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] kex follows: False
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] Compression: none
2026-02-11T17:02:16.828 [DEBUG] [Thread-132593] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:02:16.889 [DEBUG] [Thread-132593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:02:16.889 [DEBUG] [Thread-132593] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:02:16.890 [DEBUG] [Thread-132593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:02:16.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:02:16.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:02:16.954 [DEBUG] [Thread-132593] [transport.py] [_log()] userauth is OK
2026-02-11T17:02:16.955 [DEBUG] [Thread-132593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:02:16.955 [DEBUG] [Thread-132593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:02:16.955 [DEBUG] [Thread-132593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:02:16.955 [DEBUG] [Thread-132593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:02:16.982 [INFO] [Thread-132593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:02:16.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:02:16.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:02:17.813 [DEBUG] [Thread-132593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:02:17.813 [DEBUG] [Thread-132593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:02:17.862 [DEBUG] [Thread-132593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:02:17.862 [DEBUG] [Thread-132593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:02:17.874 [DEBUG] [Thread-132593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:02:17.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:02:17.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:02:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:02:17.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:02:17.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:02:17.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:02:17.908 [DEBUG] [Thread-132593] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:02:26.355 [DEBUG] [Thread-132595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:02:28.472 [DEBUG] [Thread-132596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:02:43.527 [DEBUG] [Thread-132597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:02:47.073 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:02:47.074 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:02:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:02:47.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:02:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:02:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 2, 18), 12.94, 43.93, 0.0, 33.03, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:02:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:02:18
2026-02-11T17:02:50.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:02:50.935 [DEBUG] [Thread-132598] [transport.py] [_log()] starting thread (client mode): 0xa575b640
2026-02-11T17:02:50.935 [DEBUG] [Thread-132598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:02:50.948 [DEBUG] [Thread-132598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:02:50.948 [INFO] [Thread-132598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:02:50.951 [DEBUG] [Thread-132598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:02:50.951 [DEBUG] [Thread-132598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:02:50.951 [DEBUG] [Thread-132598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] client lang: <none>
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] server lang: <none>
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] kex follows: False
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] Compression: none
2026-02-11T17:02:50.952 [DEBUG] [Thread-132598] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:02:50.970 [DEBUG] [Thread-132598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:02:50.970 [DEBUG] [Thread-132598] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:02:50.971 [DEBUG] [Thread-132598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:02:50.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:02:50.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:02:50.972 [DEBUG] [Thread-132598] [transport.py] [_log()] userauth is OK
2026-02-11T17:02:50.973 [DEBUG] [Thread-132598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:02:50.973 [DEBUG] [Thread-132598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:02:50.973 [DEBUG] [Thread-132598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:02:50.973 [DEBUG] [Thread-132598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:02:50.987 [INFO] [Thread-132598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:02:50.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:02:51.597 [DEBUG] [Thread-132598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:02:51.598 [DEBUG] [Thread-132598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:02:51.598 [DEBUG] [Thread-132598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:02:51.638 [DEBUG] [Thread-132598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:02:51.639 [DEBUG] [Thread-132598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:02:51.642 [DEBUG] [Thread-132598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:02:51.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:02:51.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:02:51.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:02:51.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:02:51.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:02:51.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:02:51.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:02:51.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:02:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:02:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.626878 -999.00  +22.90  24.49     51  +12.30 1 3 1 1 1   887    0 8.09 -118.78 ----- 31.3 24.5 298.6 31.5 25.6 -10.2 25.5 -10.5 25.1 -9.3 25.4 -9.0
2026-02-11T17:02:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:02:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:02:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.626878
2026-02-11T17:02:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:02:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:02:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:02:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:02:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:02:51.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:02:18', tmtdew=12.94, humidity=43.93, cloud=0.0, wind=33.03, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:02:42.259', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:02:51.662 [DEBUG] [Thread-132598] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:02:51.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:02:51.758 [DEBUG] [Thread-132601] [transport.py] [_log()] starting thread (client mode): 0xa2db45e0
2026-02-11T17:02:51.758 [DEBUG] [Thread-132601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:02:51.772 [DEBUG] [Thread-132601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:02:51.772 [INFO] [Thread-132601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:02:51.779 [DEBUG] [Thread-132601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:02:51.779 [DEBUG] [Thread-132601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] client lang: <none>
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] server lang: <none>
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] kex follows: False
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] Compression: none
2026-02-11T17:02:51.780 [DEBUG] [Thread-132601] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:02:51.839 [DEBUG] [Thread-132601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:02:51.840 [DEBUG] [Thread-132601] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:02:51.840 [DEBUG] [Thread-132601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:02:51.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:02:51.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:02:51.895 [DEBUG] [Thread-132601] [transport.py] [_log()] userauth is OK
2026-02-11T17:02:51.895 [DEBUG] [Thread-132601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:02:51.896 [DEBUG] [Thread-132601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:02:51.896 [DEBUG] [Thread-132601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:02:51.896 [DEBUG] [Thread-132601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:02:51.915 [INFO] [Thread-132601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:02:51.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:02:51.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:02:52.715 [DEBUG] [Thread-132601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:02:52.715 [DEBUG] [Thread-132601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:02:52.763 [DEBUG] [Thread-132601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:02:52.764 [DEBUG] [Thread-132601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:02:52.773 [DEBUG] [Thread-132601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:02:52.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:02:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:02:52.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:02:52.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:02:52.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:02:52.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:02:52.811 [DEBUG] [Thread-132601] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:02:58.566 [DEBUG] [Thread-132603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:13.621 [DEBUG] [Thread-132604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:22.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:03:22.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:03:22.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:03:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 2, 55), 12.7, 44.93, 0.0, 33.37, 23.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:03:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:02:55
2026-02-11T17:03:25.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:03:25.279 [DEBUG] [Thread-132605] [transport.py] [_log()] starting thread (client mode): 0xa57d6470
2026-02-11T17:03:25.280 [DEBUG] [Thread-132605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:03:25.302 [DEBUG] [Thread-132605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:03:25.302 [INFO] [Thread-132605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] client lang: <none>
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] server lang: <none>
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] kex follows: False
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:03:25.305 [DEBUG] [Thread-132605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:03:25.306 [DEBUG] [Thread-132605] [transport.py] [_log()] Compression: none
2026-02-11T17:03:25.306 [DEBUG] [Thread-132605] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:03:25.326 [DEBUG] [Thread-132605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:03:25.327 [DEBUG] [Thread-132605] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:03:25.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:03:25.328 [DEBUG] [Thread-132605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:03:25.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:03:25.330 [DEBUG] [Thread-132605] [transport.py] [_log()] userauth is OK
2026-02-11T17:03:25.331 [DEBUG] [Thread-132605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:03:25.331 [DEBUG] [Thread-132605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:03:25.331 [DEBUG] [Thread-132605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:03:25.331 [DEBUG] [Thread-132605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:03:25.367 [INFO] [Thread-132605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:03:25.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:03:25.969 [DEBUG] [Thread-132605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:03:25.969 [DEBUG] [Thread-132605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:03:25.969 [DEBUG] [Thread-132605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:03:26.009 [DEBUG] [Thread-132605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:03:26.010 [DEBUG] [Thread-132605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:03:26.013 [DEBUG] [Thread-132605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:03:26.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:03:26.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:03:26.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:03:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:03:26.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:03:26.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:03:26.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:03:26.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:03:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:03:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.627225 -999.00  +23.00  26.60     50  +12.30 1 3 1 1 1   887    0 8.17 -120.54 ----- 20.7 26.6 279.1 32.6 25.7 -10.9 25.6 -10.5 25.0 -9.4 25.4 -9.4
2026-02-11T17:03:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:03:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:03:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.627225
2026-02-11T17:03:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:03:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:03:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:03:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:03:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:03:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:02:55', tmtdew=12.7, humidity=44.93, cloud=0.0, wind=33.37, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:03:12.240', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:03:26.038 [DEBUG] [Thread-132605] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:03:26.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:03:26.136 [DEBUG] [Thread-132608] [transport.py] [_log()] starting thread (client mode): 0xa5772650
2026-02-11T17:03:26.136 [DEBUG] [Thread-132608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:03:26.150 [DEBUG] [Thread-132608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:03:26.150 [INFO] [Thread-132608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:03:26.158 [DEBUG] [Thread-132608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] client lang: <none>
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] server lang: <none>
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] kex follows: False
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] Compression: none
2026-02-11T17:03:26.159 [DEBUG] [Thread-132608] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:03:26.220 [DEBUG] [Thread-132608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:03:26.220 [DEBUG] [Thread-132608] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:03:26.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:03:26.222 [DEBUG] [Thread-132608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:03:26.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:03:26.277 [DEBUG] [Thread-132608] [transport.py] [_log()] userauth is OK
2026-02-11T17:03:26.277 [DEBUG] [Thread-132608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:03:26.277 [DEBUG] [Thread-132608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:03:26.277 [DEBUG] [Thread-132608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:03:26.278 [DEBUG] [Thread-132608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:03:26.296 [INFO] [Thread-132608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:03:26.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:03:26.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:03:26.402 [DEBUG] [Thread-132610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:27.145 [DEBUG] [Thread-132608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:03:27.145 [DEBUG] [Thread-132608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:03:27.195 [DEBUG] [Thread-132608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:03:27.196 [DEBUG] [Thread-132608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:03:27.206 [DEBUG] [Thread-132608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:03:27.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:03:27.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:03:27.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:03:27.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:03:27.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:03:27.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:03:27.246 [DEBUG] [Thread-132608] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:03:28.660 [DEBUG] [Thread-132611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:43.714 [DEBUG] [Thread-132612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:47.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:47.213 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:57.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:03:57.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:03:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:03:58.754 [DEBUG] [Thread-132613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:03:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 3, 30), 12.67, 45.01, 0.0, 31.14, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:03:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:03:30
2026-02-11T17:03:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:03:59.796 [DEBUG] [Thread-132614] [transport.py] [_log()] starting thread (client mode): 0xa57d4790
2026-02-11T17:03:59.797 [DEBUG] [Thread-132614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:03:59.816 [DEBUG] [Thread-132614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:03:59.816 [INFO] [Thread-132614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:03:59.819 [DEBUG] [Thread-132614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] client lang: <none>
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] server lang: <none>
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] kex follows: False
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] Compression: none
2026-02-11T17:03:59.820 [DEBUG] [Thread-132614] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:03:59.836 [DEBUG] [Thread-132614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:03:59.837 [DEBUG] [Thread-132614] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:03:59.837 [DEBUG] [Thread-132614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:03:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:03:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:03:59.839 [DEBUG] [Thread-132614] [transport.py] [_log()] userauth is OK
2026-02-11T17:03:59.840 [DEBUG] [Thread-132614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:03:59.840 [DEBUG] [Thread-132614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:03:59.840 [DEBUG] [Thread-132614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:03:59.840 [DEBUG] [Thread-132614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:03:59.877 [INFO] [Thread-132614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:03:59.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:04:00.505 [DEBUG] [Thread-132614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:04:00.505 [DEBUG] [Thread-132614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:04:00.506 [DEBUG] [Thread-132614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:04:00.547 [DEBUG] [Thread-132614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:04:00.547 [DEBUG] [Thread-132614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:04:00.550 [DEBUG] [Thread-132614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:04:00.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:04:00.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:04:00.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:04:00.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:04:00.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:04:00.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:04:00.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:04:00.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:04:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:04:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.627572 -999.00  +22.90  26.40     51  +12.20 1 2 1 1 1   887    0 8.06 -117.52 ----- 27.2 26.4 297.0 27.1 25.6 -10.2 25.5 -10.6 25.0 -9.8 25.4 -9.1
2026-02-11T17:04:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:04:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:04:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.627572
2026-02-11T17:04:00.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:04:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:04:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:04:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:04:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:04:00.585 [DEBUG] [Thread-132614] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:04:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:03:30', tmtdew=12.67, humidity=45.01, cloud=0.0, wind=31.14, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:03:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:04:00.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:04:00.682 [DEBUG] [Thread-132617] [transport.py] [_log()] starting thread (client mode): 0xa575b280
2026-02-11T17:04:00.682 [DEBUG] [Thread-132617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:04:00.696 [DEBUG] [Thread-132617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:04:00.697 [INFO] [Thread-132617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] client lang: <none>
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] server lang: <none>
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] kex follows: False
2026-02-11T17:04:00.705 [DEBUG] [Thread-132617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:04:00.706 [DEBUG] [Thread-132617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:04:00.706 [DEBUG] [Thread-132617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:04:00.706 [DEBUG] [Thread-132617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:04:00.706 [DEBUG] [Thread-132617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:04:00.706 [DEBUG] [Thread-132617] [transport.py] [_log()] Compression: none
2026-02-11T17:04:00.706 [DEBUG] [Thread-132617] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:04:00.763 [DEBUG] [Thread-132617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:04:00.764 [DEBUG] [Thread-132617] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:04:00.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:04:00.765 [DEBUG] [Thread-132617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:04:00.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:04:00.821 [DEBUG] [Thread-132617] [transport.py] [_log()] userauth is OK
2026-02-11T17:04:00.822 [DEBUG] [Thread-132617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:04:00.822 [DEBUG] [Thread-132617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:04:00.822 [DEBUG] [Thread-132617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:04:00.822 [DEBUG] [Thread-132617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:04:00.840 [INFO] [Thread-132617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:04:00.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:04:00.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:04:01.674 [DEBUG] [Thread-132617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:04:01.674 [DEBUG] [Thread-132617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:04:01.721 [DEBUG] [Thread-132617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:04:01.721 [DEBUG] [Thread-132617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:04:01.729 [DEBUG] [Thread-132617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:04:01.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:04:01.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:04:01.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:04:01.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:04:01.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:04:01.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:04:01.761 [DEBUG] [Thread-132617] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:04:13.792 [DEBUG] [Thread-132619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:04:26.437 [DEBUG] [Thread-132620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:04:28.852 [DEBUG] [Thread-132621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:04:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:04:31.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:04: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
2026-02-11T17:04:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 4, 6), 12.72, 44.88, 0.0, 27.28, 23.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:04:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:04:06
2026-02-11T17:04:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:04:34.190 [DEBUG] [Thread-132622] [transport.py] [_log()] starting thread (client mode): 0xa57c3310
2026-02-11T17:04:34.190 [DEBUG] [Thread-132622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:04:34.210 [DEBUG] [Thread-132622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:04:34.211 [INFO] [Thread-132622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:04:34.214 [DEBUG] [Thread-132622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] client lang: <none>
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] server lang: <none>
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] kex follows: False
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] Compression: none
2026-02-11T17:04:34.215 [DEBUG] [Thread-132622] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:04:34.233 [DEBUG] [Thread-132622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:04:34.233 [DEBUG] [Thread-132622] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:04:34.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:04:34.234 [DEBUG] [Thread-132622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:04:34.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:04:34.237 [DEBUG] [Thread-132622] [transport.py] [_log()] userauth is OK
2026-02-11T17:04:34.237 [DEBUG] [Thread-132622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:04:34.238 [DEBUG] [Thread-132622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:04:34.238 [DEBUG] [Thread-132622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:04:34.238 [DEBUG] [Thread-132622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:04:34.270 [INFO] [Thread-132622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:04:34.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:04:34.893 [DEBUG] [Thread-132622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:04:34.893 [DEBUG] [Thread-132622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:04:34.894 [DEBUG] [Thread-132622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:04:34.934 [DEBUG] [Thread-132622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:04:34.935 [DEBUG] [Thread-132622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:04:34.938 [DEBUG] [Thread-132622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:04:34.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:04:34.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:04:34.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:04:34.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:04:34.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:04:34.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:04:34.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:04:34.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:04:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:04:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.627919 -999.00  +22.70  20.33     51  +12.30 1 3 1 1 1   887    0 8.21 -118.80 ----- 25.7 20.3 277.6 33.0 25.5 -10.4 25.4 -10.4 24.9 -9.1 25.3 -9.1
2026-02-11T17:04:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:04:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:04:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.627919
2026-02-11T17:04:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:04:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:04:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:04:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:04:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:04:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:04:06', tmtdew=12.72, humidity=44.88, cloud=0.0, wind=27.28, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:04:12.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:04:34.964 [DEBUG] [Thread-132622] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:04:35.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:04:35.059 [DEBUG] [Thread-132625] [transport.py] [_log()] starting thread (client mode): 0xa57d4df0
2026-02-11T17:04:35.059 [DEBUG] [Thread-132625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:04:35.073 [DEBUG] [Thread-132625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:04:35.073 [INFO] [Thread-132625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:04:35.080 [DEBUG] [Thread-132625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:04:35.081 [DEBUG] [Thread-132625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:04:35.081 [DEBUG] [Thread-132625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:04:35.081 [DEBUG] [Thread-132625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:04:35.081 [DEBUG] [Thread-132625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:04:35.081 [DEBUG] [Thread-132625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:04:35.081 [DEBUG] [Thread-132625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] client lang: <none>
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] server lang: <none>
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] kex follows: False
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:04:35.082 [DEBUG] [Thread-132625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:04:35.083 [DEBUG] [Thread-132625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:04:35.083 [DEBUG] [Thread-132625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:04:35.083 [DEBUG] [Thread-132625] [transport.py] [_log()] Compression: none
2026-02-11T17:04:35.083 [DEBUG] [Thread-132625] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:04:35.142 [DEBUG] [Thread-132625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:04:35.143 [DEBUG] [Thread-132625] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:04:35.143 [DEBUG] [Thread-132625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:04:35.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:04:35.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:04:35.200 [DEBUG] [Thread-132625] [transport.py] [_log()] userauth is OK
2026-02-11T17:04:35.200 [DEBUG] [Thread-132625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:04:35.200 [DEBUG] [Thread-132625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:04:35.201 [DEBUG] [Thread-132625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:04:35.201 [DEBUG] [Thread-132625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:04:35.220 [INFO] [Thread-132625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:04:35.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:04:35.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:04:36.074 [DEBUG] [Thread-132625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:04:36.074 [DEBUG] [Thread-132625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:04:36.122 [DEBUG] [Thread-132625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:04:36.122 [DEBUG] [Thread-132625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:04:36.131 [DEBUG] [Thread-132625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:04:36.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:04:36.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:04:36.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:04:36.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:04:36.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:04:36.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:04:36.166 [DEBUG] [Thread-132625] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:04:43.887 [DEBUG] [Thread-132627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:04:47.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:04:47.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:04:58.941 [DEBUG] [Thread-132628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:05:06.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:05:06.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:05:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:05:08.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 4, 42), 13.11, 43.56, 0.0, 30.8, 23.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:05:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:04:42
2026-02-11T17:05:08.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:05:08.510 [DEBUG] [Thread-132629] [transport.py] [_log()] starting thread (client mode): 0xa2db4f10
2026-02-11T17:05:08.510 [DEBUG] [Thread-132629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:05:08.531 [DEBUG] [Thread-132629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:05:08.531 [INFO] [Thread-132629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] client lang: <none>
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] server lang: <none>
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] kex follows: False
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:05:08.534 [DEBUG] [Thread-132629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:05:08.535 [DEBUG] [Thread-132629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:05:08.535 [DEBUG] [Thread-132629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:05:08.535 [DEBUG] [Thread-132629] [transport.py] [_log()] Compression: none
2026-02-11T17:05:08.535 [DEBUG] [Thread-132629] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:05:08.550 [DEBUG] [Thread-132629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:05:08.551 [DEBUG] [Thread-132629] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:05:08.551 [DEBUG] [Thread-132629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:05:08.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:05:08.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:05:08.553 [DEBUG] [Thread-132629] [transport.py] [_log()] userauth is OK
2026-02-11T17:05:08.554 [DEBUG] [Thread-132629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:05:08.554 [DEBUG] [Thread-132629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:05:08.554 [DEBUG] [Thread-132629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:05:08.554 [DEBUG] [Thread-132629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:05:08.579 [INFO] [Thread-132629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:05:08.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:05:09.502 [DEBUG] [Thread-132629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:05:09.502 [DEBUG] [Thread-132629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:05:09.502 [DEBUG] [Thread-132629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:05:09.543 [DEBUG] [Thread-132629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:05:09.544 [DEBUG] [Thread-132629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:05:09.547 [DEBUG] [Thread-132629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:05:09.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:05:09.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:05:09.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:05:09.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:05:09.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:05:09.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:05:09.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:05:09.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:05:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:05:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.628266 -999.00  +22.90  26.21     51  +12.30 1 2 1 1 1   887    0 8.24 -119.76 ----- 26.3 26.2 277.0 41.5 25.5 -10.1 25.4 -10.2 24.8 -11.4 25.2 -9.3
2026-02-11T17:05:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:05:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:05:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.628266
2026-02-11T17:05:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:05:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:05:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:05:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:05:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:05:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:04:42', tmtdew=13.11, humidity=43.56, cloud=0.0, wind=30.8, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:04:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:05:09.575 [DEBUG] [Thread-132629] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:05:09.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:05:09.672 [DEBUG] [Thread-132632] [transport.py] [_log()] starting thread (client mode): 0xa57d6590
2026-02-11T17:05:09.672 [DEBUG] [Thread-132632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:05:09.691 [DEBUG] [Thread-132632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:05:09.691 [INFO] [Thread-132632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:09.699 [DEBUG] [Thread-132632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] client lang: <none>
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] server lang: <none>
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] kex follows: False
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] Compression: none
2026-02-11T17:05:09.700 [DEBUG] [Thread-132632] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:05:09.755 [DEBUG] [Thread-132632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:05:09.756 [DEBUG] [Thread-132632] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:05:09.756 [DEBUG] [Thread-132632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:05:09.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:05:09.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:05:09.813 [DEBUG] [Thread-132632] [transport.py] [_log()] userauth is OK
2026-02-11T17:05:09.813 [DEBUG] [Thread-132632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:05:09.813 [DEBUG] [Thread-132632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:05:09.813 [DEBUG] [Thread-132632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:05:09.814 [DEBUG] [Thread-132632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:05:09.832 [INFO] [Thread-132632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:05:09.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:05:09.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:05:10.656 [DEBUG] [Thread-132632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:05:10.656 [DEBUG] [Thread-132632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:05:10.704 [DEBUG] [Thread-132632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:05:10.705 [DEBUG] [Thread-132632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:05:10.714 [DEBUG] [Thread-132632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:05:10.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:05:10.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:05:10.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:05:10.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:05:10.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:05:10.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:05:10.749 [DEBUG] [Thread-132632] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:05:13.977 [DEBUG] [Thread-132634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:05:26.471 [DEBUG] [Thread-132635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:05:29.036 [DEBUG] [Thread-132636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:05:40.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:05:40.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:05:40.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:05:42.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 5, 18), 12.38, 45.36, 0.0, 33.24, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:05:42.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:05:18
2026-02-11T17:05:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:05:43.140 [DEBUG] [Thread-132637] [transport.py] [_log()] starting thread (client mode): 0xa2d55b40
2026-02-11T17:05:43.140 [DEBUG] [Thread-132637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:05:43.160 [DEBUG] [Thread-132637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:05:43.160 [INFO] [Thread-132637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:05:43.163 [DEBUG] [Thread-132637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:05:43.163 [DEBUG] [Thread-132637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:05:43.163 [DEBUG] [Thread-132637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:05:43.163 [DEBUG] [Thread-132637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:43.163 [DEBUG] [Thread-132637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] client lang: <none>
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] server lang: <none>
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] kex follows: False
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] Compression: none
2026-02-11T17:05:43.164 [DEBUG] [Thread-132637] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:05:43.181 [DEBUG] [Thread-132637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:05:43.181 [DEBUG] [Thread-132637] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:05:43.182 [DEBUG] [Thread-132637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:05:43.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:05:43.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:05:43.184 [DEBUG] [Thread-132637] [transport.py] [_log()] userauth is OK
2026-02-11T17:05:43.184 [DEBUG] [Thread-132637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:05:43.184 [DEBUG] [Thread-132637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:05:43.184 [DEBUG] [Thread-132637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:05:43.184 [DEBUG] [Thread-132637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:05:43.203 [INFO] [Thread-132637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:05:43.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:05:43.836 [DEBUG] [Thread-132637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:05:43.836 [DEBUG] [Thread-132637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:05:43.836 [DEBUG] [Thread-132637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:05:43.877 [DEBUG] [Thread-132637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:05:43.877 [DEBUG] [Thread-132637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:05:43.880 [DEBUG] [Thread-132637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:05:43.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:05:43.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:05:43.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:05:43.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:05:43.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:05:43.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:05:43.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:05:43.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:05:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:05:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.628614 -999.00  +22.90  28.63     51  +12.40 1 2 1 1 1   887    0 8.10 -112.70 ----- 37.2 28.6 288.2 40.0 25.4 -10.9 25.4 -10.5 24.9 -10.0 25.2 -9.4
2026-02-11T17:05:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:05:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:05:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.628614
2026-02-11T17:05:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:05:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:05:43.907 [DEBUG] [Thread-132637] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:05:43.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:05:43.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:05:43.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:05:43.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:05:18', tmtdew=12.38, humidity=45.36, cloud=0.0, wind=33.24, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:05:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:05:43.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:05:44.002 [DEBUG] [Thread-132640] [transport.py] [_log()] starting thread (client mode): 0xa57418a0
2026-02-11T17:05:44.002 [DEBUG] [Thread-132640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:05:44.017 [DEBUG] [Thread-132640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:05:44.017 [INFO] [Thread-132640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] client lang: <none>
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] server lang: <none>
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] kex follows: False
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:05:44.025 [DEBUG] [Thread-132640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:05:44.026 [DEBUG] [Thread-132640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:05:44.026 [DEBUG] [Thread-132640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:05:44.026 [DEBUG] [Thread-132640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:05:44.026 [DEBUG] [Thread-132640] [transport.py] [_log()] Compression: none
2026-02-11T17:05:44.026 [DEBUG] [Thread-132640] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:05:44.075 [DEBUG] [Thread-132642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:05:44.083 [DEBUG] [Thread-132640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:05:44.083 [DEBUG] [Thread-132640] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:05:44.083 [DEBUG] [Thread-132640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:05:44.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:05:44.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:05:44.141 [DEBUG] [Thread-132640] [transport.py] [_log()] userauth is OK
2026-02-11T17:05:44.141 [DEBUG] [Thread-132640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:05:44.141 [DEBUG] [Thread-132640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:05:44.141 [DEBUG] [Thread-132640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:05:44.141 [DEBUG] [Thread-132640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:05:44.166 [INFO] [Thread-132640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:05:44.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:05:44.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:05:44.998 [DEBUG] [Thread-132640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:05:44.998 [DEBUG] [Thread-132640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:05:45.045 [DEBUG] [Thread-132640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:05:45.046 [DEBUG] [Thread-132640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:05:45.055 [DEBUG] [Thread-132640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:05:45.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:05:45.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:05:45.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:05:45.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:05:45.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:05:45.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:05:45.093 [DEBUG] [Thread-132640] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:05:47.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:05:47.497 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:05:59.126 [DEBUG] [Thread-132643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:06:14.163 [DEBUG] [Thread-132644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:06:15.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:06:15.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:06:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:06:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 5, 53), 12.5, 45.33, 0.0, 29.34, 23.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:06:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:05:53
2026-02-11T17:06:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:06:17.539 [DEBUG] [Thread-132645] [transport.py] [_log()] starting thread (client mode): 0xa2db4e80
2026-02-11T17:06:17.539 [DEBUG] [Thread-132645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:06:17.559 [DEBUG] [Thread-132645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:06:17.559 [INFO] [Thread-132645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:06:17.562 [DEBUG] [Thread-132645] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:06:17.562 [DEBUG] [Thread-132645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:06:17.562 [DEBUG] [Thread-132645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] client lang: <none>
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] server lang: <none>
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] kex follows: False
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] Compression: none
2026-02-11T17:06:17.563 [DEBUG] [Thread-132645] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:06:17.582 [DEBUG] [Thread-132645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:06:17.583 [DEBUG] [Thread-132645] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:06:17.583 [DEBUG] [Thread-132645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:06:17.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:06:17.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:06:17.625 [DEBUG] [Thread-132645] [transport.py] [_log()] userauth is OK
2026-02-11T17:06:17.625 [DEBUG] [Thread-132645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:06:17.625 [DEBUG] [Thread-132645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:06:17.626 [DEBUG] [Thread-132645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:06:17.626 [DEBUG] [Thread-132645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:06:17.648 [INFO] [Thread-132645] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:06:17.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:06:18.277 [DEBUG] [Thread-132645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:06:18.278 [DEBUG] [Thread-132645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:06:18.278 [DEBUG] [Thread-132645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:06:18.318 [DEBUG] [Thread-132645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:06:18.319 [DEBUG] [Thread-132645] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:06:18.322 [DEBUG] [Thread-132645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:06:18.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:06:18.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:06:18.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:06:18.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:06:18.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:06:18.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:06:18.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:06:18.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:06:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:06:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.628961 -999.00  +22.50  31.45     52  +12.30 1 2 2 1 1   887    0 7.65 -126.49 ----- 30.5 31.4 296.4 39.1 25.3 -10.5 25.3 -10.9 24.9 -10.0 25.1 -9.8
2026-02-11T17:06:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:06:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:06:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.628961
2026-02-11T17:06:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:06:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:06:18.351 [DEBUG] [Thread-132645] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:06:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:06:18.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:06:18.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:06:18.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:05:53', tmtdew=12.5, humidity=45.33, cloud=0.0, wind=29.34, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:05:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:06:18.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:06:18.450 [DEBUG] [Thread-132648] [transport.py] [_log()] starting thread (client mode): 0xa57d56f0
2026-02-11T17:06:18.450 [DEBUG] [Thread-132648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:06:18.465 [DEBUG] [Thread-132648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:06:18.465 [INFO] [Thread-132648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] client lang: <none>
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] server lang: <none>
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] kex follows: False
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:06:18.473 [DEBUG] [Thread-132648] [transport.py] [_log()] Compression: none
2026-02-11T17:06:18.474 [DEBUG] [Thread-132648] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:06:18.532 [DEBUG] [Thread-132648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:06:18.533 [DEBUG] [Thread-132648] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:06:18.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:06:18.534 [DEBUG] [Thread-132648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:06:18.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:06:18.589 [DEBUG] [Thread-132648] [transport.py] [_log()] userauth is OK
2026-02-11T17:06:18.589 [DEBUG] [Thread-132648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:06:18.589 [DEBUG] [Thread-132648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:06:18.590 [DEBUG] [Thread-132648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:06:18.590 [DEBUG] [Thread-132648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:06:18.608 [INFO] [Thread-132648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:06:18.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:06:18.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:06:19.440 [DEBUG] [Thread-132648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:06:19.440 [DEBUG] [Thread-132648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:06:19.495 [DEBUG] [Thread-132648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:06:19.495 [DEBUG] [Thread-132648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:06:19.509 [DEBUG] [Thread-132648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:06:19.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:06:19.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')
2026-02-11T17:06:19.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:06:19.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:06:19.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:06:19.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:06:19.543 [DEBUG] [Thread-132648] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:06:26.516 [DEBUG] [Thread-132650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:06:29.201 [DEBUG] [Thread-132651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:06:44.251 [DEBUG] [Thread-132652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:06:47.641 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:06:47.642 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:06:49.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:06:49.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:06:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:06:51.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 6, 29), 12.35, 45.71, 0.0, 29.57, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:06:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:06:29
2026-02-11T17:06:52.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:06:52.449 [DEBUG] [Thread-132653] [transport.py] [_log()] starting thread (client mode): 0xa2db4970
2026-02-11T17:06:52.449 [DEBUG] [Thread-132653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:06:52.469 [DEBUG] [Thread-132653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:06:52.469 [INFO] [Thread-132653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:06:52.472 [DEBUG] [Thread-132653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] client lang: <none>
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] server lang: <none>
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] kex follows: False
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:06:52.473 [DEBUG] [Thread-132653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:06:52.474 [DEBUG] [Thread-132653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:06:52.474 [DEBUG] [Thread-132653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:06:52.474 [DEBUG] [Thread-132653] [transport.py] [_log()] Compression: none
2026-02-11T17:06:52.474 [DEBUG] [Thread-132653] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:06:52.493 [DEBUG] [Thread-132653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:06:52.494 [DEBUG] [Thread-132653] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:06:52.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:06:52.495 [DEBUG] [Thread-132653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:06:52.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:06:52.497 [DEBUG] [Thread-132653] [transport.py] [_log()] userauth is OK
2026-02-11T17:06:52.498 [DEBUG] [Thread-132653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:06:52.498 [DEBUG] [Thread-132653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:06:52.498 [DEBUG] [Thread-132653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:06:52.498 [DEBUG] [Thread-132653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:06:52.518 [INFO] [Thread-132653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:06:52.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:06:53.154 [DEBUG] [Thread-132653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:06:53.154 [DEBUG] [Thread-132653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:06:53.154 [DEBUG] [Thread-132653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:06:53.196 [DEBUG] [Thread-132653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:06:53.196 [DEBUG] [Thread-132653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:06:53.199 [DEBUG] [Thread-132653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:06:53.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:06:53.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:06:53.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:06:53.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:06:53.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:06:53.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:06:53.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:06:53.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:06:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:06:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.629308 -999.00  +22.50  24.83     52  +12.30 1 2 1 1 1   887    0 7.84 -125.37 ----- 24.9 24.8 299.2 33.0 25.3 -10.1 25.2 -10.5 24.7 -10.3 25.1 -9.3
2026-02-11T17:06:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:06:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:06:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.629308
2026-02-11T17:06:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:06:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:06:53.222 [DEBUG] [Thread-132653] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:06:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:06:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:06:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:06:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:06:29', tmtdew=12.35, humidity=45.71, cloud=0.0, wind=29.57, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:06:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:06:53.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:06:53.322 [DEBUG] [Thread-132656] [transport.py] [_log()] starting thread (client mode): 0xa2db7790
2026-02-11T17:06:53.322 [DEBUG] [Thread-132656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:06:53.337 [DEBUG] [Thread-132656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:06:53.337 [INFO] [Thread-132656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] client lang: <none>
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] server lang: <none>
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] kex follows: False
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:06:53.345 [DEBUG] [Thread-132656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:06:53.346 [DEBUG] [Thread-132656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:06:53.346 [DEBUG] [Thread-132656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:06:53.346 [DEBUG] [Thread-132656] [transport.py] [_log()] Compression: none
2026-02-11T17:06:53.346 [DEBUG] [Thread-132656] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:06:53.409 [DEBUG] [Thread-132656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:06:53.409 [DEBUG] [Thread-132656] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:06:53.410 [DEBUG] [Thread-132656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:06:53.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:06:53.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:06:53.464 [DEBUG] [Thread-132656] [transport.py] [_log()] userauth is OK
2026-02-11T17:06:53.464 [DEBUG] [Thread-132656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:06:53.465 [DEBUG] [Thread-132656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:06:53.465 [DEBUG] [Thread-132656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:06:53.465 [DEBUG] [Thread-132656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:06:53.482 [INFO] [Thread-132656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:06:53.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:06:53.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:06:54.324 [DEBUG] [Thread-132656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:06:54.324 [DEBUG] [Thread-132656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:06:54.373 [DEBUG] [Thread-132656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:06:54.373 [DEBUG] [Thread-132656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:06:54.382 [DEBUG] [Thread-132656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:06:54.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:06:54.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:06:54.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:06:54.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:06:54.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:06:54.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:06:54.419 [DEBUG] [Thread-132656] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:06:59.289 [DEBUG] [Thread-132658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:07:14.343 [DEBUG] [Thread-132659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:07:24.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:07:24.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:07:24.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
2026-02-11T17:07:26.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 7, 4), 12.3, 45.86, 0.0, 29.31, 23.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:07:26.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:07:04
2026-02-11T17:07:26.576 [DEBUG] [Thread-132660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:07:26.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:07:26.790 [DEBUG] [Thread-132661] [transport.py] [_log()] starting thread (client mode): 0xa57580a0
2026-02-11T17:07:26.790 [DEBUG] [Thread-132661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:07:26.811 [DEBUG] [Thread-132661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:07:26.811 [INFO] [Thread-132661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:07:26.813 [DEBUG] [Thread-132661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] client lang: <none>
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] server lang: <none>
2026-02-11T17:07:26.814 [DEBUG] [Thread-132661] [transport.py] [_log()] kex follows: False
2026-02-11T17:07:26.815 [DEBUG] [Thread-132661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:07:26.815 [DEBUG] [Thread-132661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:07:26.815 [DEBUG] [Thread-132661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:07:26.815 [DEBUG] [Thread-132661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:07:26.815 [DEBUG] [Thread-132661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:07:26.815 [DEBUG] [Thread-132661] [transport.py] [_log()] Compression: none
2026-02-11T17:07:26.815 [DEBUG] [Thread-132661] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:07:26.835 [DEBUG] [Thread-132661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:07:26.835 [DEBUG] [Thread-132661] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:07:26.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:07:26.837 [DEBUG] [Thread-132661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:07:26.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:07:26.839 [DEBUG] [Thread-132661] [transport.py] [_log()] userauth is OK
2026-02-11T17:07:26.839 [DEBUG] [Thread-132661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:07:26.839 [DEBUG] [Thread-132661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:07:26.840 [DEBUG] [Thread-132661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:07:26.840 [DEBUG] [Thread-132661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:07:26.872 [INFO] [Thread-132661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:07:26.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:07:27.518 [DEBUG] [Thread-132661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:07:27.519 [DEBUG] [Thread-132661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:07:27.519 [DEBUG] [Thread-132661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:07:27.560 [DEBUG] [Thread-132661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:07:27.560 [DEBUG] [Thread-132661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:07:27.563 [DEBUG] [Thread-132661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:07:27.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:07:27.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:07:27.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:07:27.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:07:27.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:07:27.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:07:27.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:07:27.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:07:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:07:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.630003 -999.00  +22.90  31.45     51  +12.40 1 2 2 1 1   887    0 7.67 -124.42 ----- 32.4 31.4 299.0 36.8 25.3 -10.0 25.2 -10.4 24.8 -10.3 25.1 -9.3
2026-02-11T17:07:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:07:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:07:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.630003
2026-02-11T17:07:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:07:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:07:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:07:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:07:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:07:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:07:04', tmtdew=12.3, humidity=45.86, cloud=0.0, wind=29.31, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:07:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:07:27.593 [DEBUG] [Thread-132661] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:07:27.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:07:27.688 [DEBUG] [Thread-132664] [transport.py] [_log()] starting thread (client mode): 0xa57c32b0
2026-02-11T17:07:27.689 [DEBUG] [Thread-132664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:07:27.703 [DEBUG] [Thread-132664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:07:27.703 [INFO] [Thread-132664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] client lang: <none>
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] server lang: <none>
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] kex follows: False
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:07:27.711 [DEBUG] [Thread-132664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:07:27.712 [DEBUG] [Thread-132664] [transport.py] [_log()] Compression: none
2026-02-11T17:07:27.712 [DEBUG] [Thread-132664] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:07:27.769 [DEBUG] [Thread-132664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:07:27.770 [DEBUG] [Thread-132664] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:07:27.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:07:27.771 [DEBUG] [Thread-132664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:07:27.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:07:27.825 [DEBUG] [Thread-132664] [transport.py] [_log()] userauth is OK
2026-02-11T17:07:27.825 [DEBUG] [Thread-132664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:07:27.826 [DEBUG] [Thread-132664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:07:27.826 [DEBUG] [Thread-132664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:07:27.826 [DEBUG] [Thread-132664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:07:27.845 [INFO] [Thread-132664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:07:27.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:07:27.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:07:28.675 [DEBUG] [Thread-132664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:07:28.675 [DEBUG] [Thread-132664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:07:28.723 [DEBUG] [Thread-132664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:07:28.723 [DEBUG] [Thread-132664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:07:28.733 [DEBUG] [Thread-132664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:07:28.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:07:28.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:07:28.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:07:28.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:07:28.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:07:28.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:07:28.769 [DEBUG] [Thread-132664] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:07:29.381 [DEBUG] [Thread-132666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:07:44.437 [DEBUG] [Thread-132667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:07:47.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:07:47.782 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:07:58.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:07:58.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:07:58.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:07:59.474 [DEBUG] [Thread-132668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:08:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 7, 40), 12.65, 44.88, 0.0, 36.31, 23.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:08:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:07:40
2026-02-11T17:08:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:08:01.306 [DEBUG] [Thread-132669] [transport.py] [_log()] starting thread (client mode): 0xa5771cc0
2026-02-11T17:08:01.307 [DEBUG] [Thread-132669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:08:01.327 [DEBUG] [Thread-132669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:08:01.328 [INFO] [Thread-132669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] client lang: <none>
2026-02-11T17:08:01.331 [DEBUG] [Thread-132669] [transport.py] [_log()] server lang: <none>
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] kex follows: False
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] Compression: none
2026-02-11T17:08:01.332 [DEBUG] [Thread-132669] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:08:01.349 [DEBUG] [Thread-132669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:08:01.350 [DEBUG] [Thread-132669] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:08:01.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:08:01.351 [DEBUG] [Thread-132669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:08:01.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:08:01.353 [DEBUG] [Thread-132669] [transport.py] [_log()] userauth is OK
2026-02-11T17:08:01.353 [DEBUG] [Thread-132669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:08:01.354 [DEBUG] [Thread-132669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:08:01.354 [DEBUG] [Thread-132669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:08:01.354 [DEBUG] [Thread-132669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:08:01.378 [INFO] [Thread-132669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:08:01.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:08:01.997 [DEBUG] [Thread-132669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:08:01.997 [DEBUG] [Thread-132669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:08:01.997 [DEBUG] [Thread-132669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:08:02.037 [DEBUG] [Thread-132669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:08:02.038 [DEBUG] [Thread-132669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:08:02.041 [DEBUG] [Thread-132669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:08:02.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:08:02.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:08:02.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:08:02.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:08:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:08:02.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:08:02.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:08:02.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:08:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:08:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.630350 -999.00  +23.00  21.95     51  +12.40 1 3 1 1 1   887    0 7.35 -122.85 ----- 21.5 21.9 287.2 33.6 25.3 -10.2 25.2 -10.2 24.8 -9.5 25.1 -10.0
2026-02-11T17:08:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:08:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:08:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.630350
2026-02-11T17:08:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:08:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:08:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:08:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:08:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:08:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:07:40', tmtdew=12.65, humidity=44.88, cloud=0.0, wind=36.31, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:07:42.240', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:08:02.068 [DEBUG] [Thread-132669] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:08:02.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:08:02.168 [DEBUG] [Thread-132672] [transport.py] [_log()] starting thread (client mode): 0xa5740e50
2026-02-11T17:08:02.168 [DEBUG] [Thread-132672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:08:02.183 [DEBUG] [Thread-132672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:08:02.184 [INFO] [Thread-132672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:02.191 [DEBUG] [Thread-132672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] client lang: <none>
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] server lang: <none>
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] kex follows: False
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] Compression: none
2026-02-11T17:08:02.192 [DEBUG] [Thread-132672] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:08:02.254 [DEBUG] [Thread-132672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:08:02.254 [DEBUG] [Thread-132672] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:08:02.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:08:02.256 [DEBUG] [Thread-132672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:08:02.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:08:02.309 [DEBUG] [Thread-132672] [transport.py] [_log()] userauth is OK
2026-02-11T17:08:02.309 [DEBUG] [Thread-132672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:08:02.310 [DEBUG] [Thread-132672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:08:02.310 [DEBUG] [Thread-132672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:08:02.310 [DEBUG] [Thread-132672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:08:02.332 [INFO] [Thread-132672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:08:02.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:08:02.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:08:03.169 [DEBUG] [Thread-132672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:08:03.169 [DEBUG] [Thread-132672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:08:03.217 [DEBUG] [Thread-132672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:08:03.217 [DEBUG] [Thread-132672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:08:03.226 [DEBUG] [Thread-132672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:08:03.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:08:03.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:08:03.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:08:03.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:08:03.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:08:03.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:08:03.260 [DEBUG] [Thread-132672] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:08:14.512 [DEBUG] [Thread-132674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:08:26.632 [DEBUG] [Thread-132675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:08:29.575 [DEBUG] [Thread-132676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:08:33.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:08:33.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:08:33.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
2026-02-11T17:08:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 8, 16), 12.4, 45.51, 0.0, 36.61, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:08:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:08:16
2026-02-11T17:08:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:08:35.732 [DEBUG] [Thread-132677] [transport.py] [_log()] starting thread (client mode): 0x9eb04250
2026-02-11T17:08:35.732 [DEBUG] [Thread-132677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:08:35.753 [DEBUG] [Thread-132677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:08:35.753 [INFO] [Thread-132677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] client lang: <none>
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] server lang: <none>
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] kex follows: False
2026-02-11T17:08:35.756 [DEBUG] [Thread-132677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:08:35.757 [DEBUG] [Thread-132677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:08:35.757 [DEBUG] [Thread-132677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:08:35.757 [DEBUG] [Thread-132677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:08:35.757 [DEBUG] [Thread-132677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:08:35.757 [DEBUG] [Thread-132677] [transport.py] [_log()] Compression: none
2026-02-11T17:08:35.757 [DEBUG] [Thread-132677] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:08:35.774 [DEBUG] [Thread-132677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:08:35.775 [DEBUG] [Thread-132677] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:08:35.775 [DEBUG] [Thread-132677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:08:35.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:08:35.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:08:35.777 [DEBUG] [Thread-132677] [transport.py] [_log()] userauth is OK
2026-02-11T17:08:35.778 [DEBUG] [Thread-132677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:08:35.778 [DEBUG] [Thread-132677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:08:35.778 [DEBUG] [Thread-132677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:08:35.778 [DEBUG] [Thread-132677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:08:35.799 [INFO] [Thread-132677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:08:35.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:08:36.589 [DEBUG] [Thread-132677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:08:36.590 [DEBUG] [Thread-132677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:08:36.590 [DEBUG] [Thread-132677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:08:36.630 [DEBUG] [Thread-132677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:08:36.631 [DEBUG] [Thread-132677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:08:36.634 [DEBUG] [Thread-132677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:08:36.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:08:36.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:08:36.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:08:36.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:08:36.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:08:36.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:08:36.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:08:36.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:08:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:08:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.630697 -999.00  +22.90  26.63     51  +12.30 1 2 1 1 1   887    0 7.85 -119.38 ----- 24.1 26.6 282.8 37.0 25.1 -10.6 25.2 -11.0 24.6 -11.9 25.0 -9.4
2026-02-11T17:08:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:08:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:08:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.630697
2026-02-11T17:08:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:08:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:08:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:08:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:08:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:08:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:08:16', tmtdew=12.4, humidity=45.51, cloud=0.0, wind=36.61, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:08:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:08:36.651 [DEBUG] [Thread-132677] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:08:36.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:08:36.734 [DEBUG] [Thread-132680] [transport.py] [_log()] starting thread (client mode): 0xa57d5ae0
2026-02-11T17:08:36.735 [DEBUG] [Thread-132680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:08:36.749 [DEBUG] [Thread-132680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:08:36.749 [INFO] [Thread-132680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:08:36.757 [DEBUG] [Thread-132680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:08:36.757 [DEBUG] [Thread-132680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] client lang: <none>
2026-02-11T17:08:36.758 [DEBUG] [Thread-132680] [transport.py] [_log()] server lang: <none>
2026-02-11T17:08:36.759 [DEBUG] [Thread-132680] [transport.py] [_log()] kex follows: False
2026-02-11T17:08:36.759 [DEBUG] [Thread-132680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:08:36.759 [DEBUG] [Thread-132680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:08:36.759 [DEBUG] [Thread-132680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:08:36.759 [DEBUG] [Thread-132680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:08:36.759 [DEBUG] [Thread-132680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:08:36.759 [DEBUG] [Thread-132680] [transport.py] [_log()] Compression: none
2026-02-11T17:08:36.760 [DEBUG] [Thread-132680] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:08:36.818 [DEBUG] [Thread-132680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:08:36.819 [DEBUG] [Thread-132680] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:08:36.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:08:36.821 [DEBUG] [Thread-132680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:08:36.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:08:36.874 [DEBUG] [Thread-132680] [transport.py] [_log()] userauth is OK
2026-02-11T17:08:36.874 [DEBUG] [Thread-132680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:08:36.874 [DEBUG] [Thread-132680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:08:36.875 [DEBUG] [Thread-132680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:08:36.875 [DEBUG] [Thread-132680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:08:36.896 [INFO] [Thread-132680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:08:36.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:08:36.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:08:37.704 [DEBUG] [Thread-132680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:08:37.705 [DEBUG] [Thread-132680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:08:37.752 [DEBUG] [Thread-132680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:08:37.753 [DEBUG] [Thread-132680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:08:37.762 [DEBUG] [Thread-132680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:08:37.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:08:37.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:08:37.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:08:37.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:08:37.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:08:37.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:08:37.798 [DEBUG] [Thread-132680] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:08:44.606 [DEBUG] [Thread-132682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:08:47.922 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:08:47.923 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:08:59.654 [DEBUG] [Thread-132683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:09:07.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:09:07.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:09:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:09:09.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 8, 51), 12.24, 46.02, 0.0, 34.74, 22.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:09:09.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:08:51
2026-02-11T17:09:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:09:10.353 [DEBUG] [Thread-132684] [transport.py] [_log()] starting thread (client mode): 0xa575bc40
2026-02-11T17:09:10.353 [DEBUG] [Thread-132684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:09:10.373 [DEBUG] [Thread-132684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:09:10.373 [INFO] [Thread-132684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:09:10.376 [DEBUG] [Thread-132684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] client lang: <none>
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] server lang: <none>
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] kex follows: False
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] Compression: none
2026-02-11T17:09:10.377 [DEBUG] [Thread-132684] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:09:10.393 [DEBUG] [Thread-132684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:09:10.394 [DEBUG] [Thread-132684] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:09:10.394 [DEBUG] [Thread-132684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:09:10.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:09:10.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:09:10.396 [DEBUG] [Thread-132684] [transport.py] [_log()] userauth is OK
2026-02-11T17:09:10.396 [DEBUG] [Thread-132684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:09:10.397 [DEBUG] [Thread-132684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:09:10.397 [DEBUG] [Thread-132684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:09:10.397 [DEBUG] [Thread-132684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:09:10.424 [INFO] [Thread-132684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:09:10.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:09:11.062 [DEBUG] [Thread-132684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:09:11.062 [DEBUG] [Thread-132684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:09:11.063 [DEBUG] [Thread-132684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:09:11.103 [DEBUG] [Thread-132684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:09:11.104 [DEBUG] [Thread-132684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:09:11.107 [DEBUG] [Thread-132684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:09:11.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:09:11.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:09:11.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:09:11.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:09:11.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:09:11.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:09:11.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:09:11.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:09:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:09:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.631044 -999.00  +23.10  22.81     51  +12.40 1 2 1 1 1   887    0 7.42 -128.58 ----- 26.8 22.8 270.4 27.6 25.2 -10.2 25.2 -10.4 24.6 -9.7 25.0 -9.2
2026-02-11T17:09:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:09:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:09:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.631044
2026-02-11T17:09:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:09:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:09:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:09:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:09:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:09:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:08:51', tmtdew=12.24, humidity=46.02, cloud=0.0, wind=34.74, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:08:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:09:11.134 [DEBUG] [Thread-132684] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:09:11.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:09:11.230 [DEBUG] [Thread-132687] [transport.py] [_log()] starting thread (client mode): 0xa57c3c10
2026-02-11T17:09:11.230 [DEBUG] [Thread-132687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:09:11.245 [DEBUG] [Thread-132687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:09:11.246 [INFO] [Thread-132687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:09:11.253 [DEBUG] [Thread-132687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:09:11.254 [DEBUG] [Thread-132687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:09:11.255 [DEBUG] [Thread-132687] [transport.py] [_log()] client lang: <none>
2026-02-11T17:09:11.255 [DEBUG] [Thread-132687] [transport.py] [_log()] server lang: <none>
2026-02-11T17:09:11.255 [DEBUG] [Thread-132687] [transport.py] [_log()] kex follows: False
2026-02-11T17:09:11.255 [DEBUG] [Thread-132687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:09:11.255 [DEBUG] [Thread-132687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:09:11.255 [DEBUG] [Thread-132687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:09:11.255 [DEBUG] [Thread-132687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:09:11.256 [DEBUG] [Thread-132687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:09:11.256 [DEBUG] [Thread-132687] [transport.py] [_log()] Compression: none
2026-02-11T17:09:11.256 [DEBUG] [Thread-132687] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:09:11.315 [DEBUG] [Thread-132687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:09:11.316 [DEBUG] [Thread-132687] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:09:11.317 [DEBUG] [Thread-132687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:09:11.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:09:11.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:09:11.374 [DEBUG] [Thread-132687] [transport.py] [_log()] userauth is OK
2026-02-11T17:09:11.375 [DEBUG] [Thread-132687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:09:11.375 [DEBUG] [Thread-132687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:09:11.375 [DEBUG] [Thread-132687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:09:11.375 [DEBUG] [Thread-132687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:09:11.394 [INFO] [Thread-132687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:09:11.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:09:11.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:09:12.219 [DEBUG] [Thread-132687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:09:12.220 [DEBUG] [Thread-132687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:09:12.267 [DEBUG] [Thread-132687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:09:12.268 [DEBUG] [Thread-132687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:09:12.277 [DEBUG] [Thread-132687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:09:12.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:09:12.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:09:12.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:09:12.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:09:12.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:09:12.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:09:12.314 [DEBUG] [Thread-132687] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:09:14.692 [DEBUG] [Thread-132689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:09:26.679 [DEBUG] [Thread-132690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:09:29.744 [DEBUG] [Thread-132691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:09:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:09:42.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:09:42.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:09:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 9, 27), 12.24, 46.03, 0.0, 34.32, 22.99, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:09:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:09:27
2026-02-11T17:09:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:09:44.781 [DEBUG] [Thread-132692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:09:44.782 [DEBUG] [Thread-132693] [transport.py] [_log()] starting thread (client mode): 0xa57e2260
2026-02-11T17:09:44.782 [DEBUG] [Thread-132693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:09:44.802 [DEBUG] [Thread-132693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:09:44.803 [INFO] [Thread-132693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:09:44.804 [DEBUG] [Thread-132693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:09:44.804 [DEBUG] [Thread-132693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] client lang: <none>
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] server lang: <none>
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] kex follows: False
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:09:44.805 [DEBUG] [Thread-132693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:09:44.806 [DEBUG] [Thread-132693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:09:44.806 [DEBUG] [Thread-132693] [transport.py] [_log()] Compression: none
2026-02-11T17:09:44.806 [DEBUG] [Thread-132693] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:09:44.824 [DEBUG] [Thread-132693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:09:44.825 [DEBUG] [Thread-132693] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:09:44.825 [DEBUG] [Thread-132693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:09:44.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:09:44.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:09:44.827 [DEBUG] [Thread-132693] [transport.py] [_log()] userauth is OK
2026-02-11T17:09:44.828 [DEBUG] [Thread-132693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:09:44.828 [DEBUG] [Thread-132693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:09:44.828 [DEBUG] [Thread-132693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:09:44.828 [DEBUG] [Thread-132693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:09:44.852 [INFO] [Thread-132693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:09:44.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:09:45.497 [DEBUG] [Thread-132693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:09:45.497 [DEBUG] [Thread-132693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:09:45.497 [DEBUG] [Thread-132693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:09:45.537 [DEBUG] [Thread-132693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:09:45.538 [DEBUG] [Thread-132693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:09:45.541 [DEBUG] [Thread-132693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:09:45.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:09:45.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:09:45.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:09:45.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:09:45.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:09:45.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:09:45.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:09:45.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:09:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:09:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.631391 -999.00  +22.90  35.24     51  +12.40 1 2 2 1 1   887    0 7.61 -123.50 ----- 36.2 35.2 282.4 40.5 25.2 -10.5 25.1 -10.9 24.6 -10.5 25.0 -9.6
2026-02-11T17:09:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:09:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:09:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.631391
2026-02-11T17:09:45.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:09:45.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:09:45.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:09:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:09:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:09:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:09:27', tmtdew=12.24, humidity=46.03, cloud=0.0, wind=34.32, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:09:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:09:45.569 [DEBUG] [Thread-132693] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:09:45.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:09:45.670 [DEBUG] [Thread-132696] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-11T17:09:45.670 [DEBUG] [Thread-132696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:09:45.687 [DEBUG] [Thread-132696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:09:45.687 [INFO] [Thread-132696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:09:45.695 [DEBUG] [Thread-132696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:09:45.695 [DEBUG] [Thread-132696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:09:45.695 [DEBUG] [Thread-132696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] client lang: <none>
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] server lang: <none>
2026-02-11T17:09:45.696 [DEBUG] [Thread-132696] [transport.py] [_log()] kex follows: False
2026-02-11T17:09:45.697 [DEBUG] [Thread-132696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:09:45.697 [DEBUG] [Thread-132696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:09:45.697 [DEBUG] [Thread-132696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:09:45.697 [DEBUG] [Thread-132696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:09:45.697 [DEBUG] [Thread-132696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:09:45.697 [DEBUG] [Thread-132696] [transport.py] [_log()] Compression: none
2026-02-11T17:09:45.697 [DEBUG] [Thread-132696] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:09:45.761 [DEBUG] [Thread-132696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:09:45.762 [DEBUG] [Thread-132696] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:09:45.763 [DEBUG] [Thread-132696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:09:45.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:09:45.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:09:45.823 [DEBUG] [Thread-132696] [transport.py] [_log()] userauth is OK
2026-02-11T17:09:45.823 [DEBUG] [Thread-132696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:09:45.823 [DEBUG] [Thread-132696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:09:45.823 [DEBUG] [Thread-132696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:09:45.824 [DEBUG] [Thread-132696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:09:45.846 [INFO] [Thread-132696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:09:45.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:09:45.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:09:46.673 [DEBUG] [Thread-132696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:09:46.673 [DEBUG] [Thread-132696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:09:46.721 [DEBUG] [Thread-132696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:09:46.721 [DEBUG] [Thread-132696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:09:46.730 [DEBUG] [Thread-132696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:09:46.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:09: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')
2026-02-11T17:09: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
2026-02-11T17:09:46.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:09:46.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:09:46.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:09:46.767 [DEBUG] [Thread-132696] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:09:48.065 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:09:48.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:09:59.816 [DEBUG] [Thread-132698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:10:14.869 [DEBUG] [Thread-132699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:10:16.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:10:16.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:10:16.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:10:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 10, 3), 12.23, 46.03, 0.0, 33.65, 22.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:10:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:10:03
2026-02-11T17:10:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:10:19.612 [DEBUG] [Thread-132700] [transport.py] [_log()] starting thread (client mode): 0xa57e0970
2026-02-11T17:10:19.613 [DEBUG] [Thread-132700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:10:19.632 [DEBUG] [Thread-132700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:10:19.632 [INFO] [Thread-132700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:10:19.635 [DEBUG] [Thread-132700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] client lang: <none>
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] server lang: <none>
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] kex follows: False
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:10:19.636 [DEBUG] [Thread-132700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:10:19.637 [DEBUG] [Thread-132700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:10:19.637 [DEBUG] [Thread-132700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:10:19.637 [DEBUG] [Thread-132700] [transport.py] [_log()] Compression: none
2026-02-11T17:10:19.637 [DEBUG] [Thread-132700] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:10:19.653 [DEBUG] [Thread-132700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:10:19.654 [DEBUG] [Thread-132700] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:10:19.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:10:19.655 [DEBUG] [Thread-132700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:10:19.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:10:19.657 [DEBUG] [Thread-132700] [transport.py] [_log()] userauth is OK
2026-02-11T17:10:19.657 [DEBUG] [Thread-132700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:10:19.657 [DEBUG] [Thread-132700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:10:19.657 [DEBUG] [Thread-132700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:10:19.657 [DEBUG] [Thread-132700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:10:19.692 [INFO] [Thread-132700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:10:19.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:10:20.329 [DEBUG] [Thread-132700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:10:20.329 [DEBUG] [Thread-132700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:10:20.330 [DEBUG] [Thread-132700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:10:20.370 [DEBUG] [Thread-132700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:10:20.371 [DEBUG] [Thread-132700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:10:20.374 [DEBUG] [Thread-132700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:10:20.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:10:20.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:10:20.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:10:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:10:20.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:10:20.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:10:20.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:10:20.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:10:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:10:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.631739 -999.00  +22.40  29.87     52  +12.30 1 2 1 1 1   887    0 7.79 -112.33 ----- 30.4 29.9 298.6 48.3 25.1 -10.8 25.1 -11.3 24.6 -10.4 24.8 -9.8
2026-02-11T17:10:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:10:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:10:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.631739
2026-02-11T17:10:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:10:20.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:10:20.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:10:20.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:10:20.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:10:20.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:10:03', tmtdew=12.23, humidity=46.03, cloud=0.0, wind=33.65, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:09:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:10:20.403 [DEBUG] [Thread-132700] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:10:20.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:10:20.497 [DEBUG] [Thread-132703] [transport.py] [_log()] starting thread (client mode): 0xa57e3850
2026-02-11T17:10:20.497 [DEBUG] [Thread-132703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:10:20.512 [DEBUG] [Thread-132703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:10:20.512 [INFO] [Thread-132703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:10:20.519 [DEBUG] [Thread-132703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] client lang: <none>
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] server lang: <none>
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] kex follows: False
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] Compression: none
2026-02-11T17:10:20.520 [DEBUG] [Thread-132703] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:10:20.576 [DEBUG] [Thread-132703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:10:20.576 [DEBUG] [Thread-132703] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:10:20.577 [DEBUG] [Thread-132703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:10:20.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:10:20.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:10:20.634 [DEBUG] [Thread-132703] [transport.py] [_log()] userauth is OK
2026-02-11T17:10:20.634 [DEBUG] [Thread-132703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:10:20.634 [DEBUG] [Thread-132703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:10:20.634 [DEBUG] [Thread-132703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:10:20.634 [DEBUG] [Thread-132703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:10:20.652 [INFO] [Thread-132703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:10:20.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:10:20.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:10:21.477 [DEBUG] [Thread-132703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:10:21.477 [DEBUG] [Thread-132703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:10:21.525 [DEBUG] [Thread-132703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:10:21.526 [DEBUG] [Thread-132703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:10:21.534 [DEBUG] [Thread-132703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:10:21.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:10:21.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:10:21.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:10:21.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:10:21.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:10:21.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:10:21.572 [DEBUG] [Thread-132703] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:10:26.744 [DEBUG] [Thread-132705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:10:29.905 [DEBUG] [Thread-132706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:10:44.957 [DEBUG] [Thread-132707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:10:48.209 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:10:48.210 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:10:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:10:51.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:10:51.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
2026-02-11T17:10:53.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 10, 38), 12.35, 45.68, 0.0, 37.65, 23.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:10:53.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:10:38
2026-02-11T17:10:54.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:10:54.273 [DEBUG] [Thread-132708] [transport.py] [_log()] starting thread (client mode): 0xa57e03a0
2026-02-11T17:10:54.273 [DEBUG] [Thread-132708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:10:54.297 [DEBUG] [Thread-132708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:10:54.297 [INFO] [Thread-132708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:10:54.301 [DEBUG] [Thread-132708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:10:54.301 [DEBUG] [Thread-132708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:10:54.301 [DEBUG] [Thread-132708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:10:54.301 [DEBUG] [Thread-132708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:54.301 [DEBUG] [Thread-132708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:54.301 [DEBUG] [Thread-132708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] client lang: <none>
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] server lang: <none>
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] kex follows: False
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:10:54.302 [DEBUG] [Thread-132708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:10:54.303 [DEBUG] [Thread-132708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:10:54.303 [DEBUG] [Thread-132708] [transport.py] [_log()] Compression: none
2026-02-11T17:10:54.303 [DEBUG] [Thread-132708] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:10:54.321 [DEBUG] [Thread-132708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:10:54.321 [DEBUG] [Thread-132708] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:10:54.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:10:54.323 [DEBUG] [Thread-132708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:10:54.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:10:54.325 [DEBUG] [Thread-132708] [transport.py] [_log()] userauth is OK
2026-02-11T17:10:54.325 [DEBUG] [Thread-132708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:10:54.326 [DEBUG] [Thread-132708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:10:54.326 [DEBUG] [Thread-132708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:10:54.326 [DEBUG] [Thread-132708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:10:54.361 [INFO] [Thread-132708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:10:54.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:10:54.960 [DEBUG] [Thread-132708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:10:54.960 [DEBUG] [Thread-132708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:10:54.961 [DEBUG] [Thread-132708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:10:55.002 [DEBUG] [Thread-132708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:10:55.002 [DEBUG] [Thread-132708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:10:55.005 [DEBUG] [Thread-132708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:10:55.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:10:55.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:10:55.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:10:55.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:10:55.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:10:55.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:10:55.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:10:55.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:10:55.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:10:55.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.632086 -999.00  +22.70  20.38     52  +12.40 1 2 1 1 1   887    0 7.74 -110.28 ----- 19.4 20.4 290.8 33.3 25.1 -9.9 25.0 -10.9 24.5 -10.9 24.9 -9.2
2026-02-11T17:10:55.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:10:55.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:10:55.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.632086
2026-02-11T17:10:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:10:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:10:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:10:55.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:10:55.032 [DEBUG] [Thread-132708] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:10:55.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:10:55.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:10:38', tmtdew=12.35, humidity=45.68, cloud=0.0, wind=37.65, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:10:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:10:55.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:10:55.118 [DEBUG] [Thread-132711] [transport.py] [_log()] starting thread (client mode): 0xa57e05e0
2026-02-11T17:10:55.118 [DEBUG] [Thread-132711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:10:55.133 [DEBUG] [Thread-132711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:10:55.133 [INFO] [Thread-132711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:10:55.140 [DEBUG] [Thread-132711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:10:55.141 [DEBUG] [Thread-132711] [transport.py] [_log()] client lang: <none>
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] server lang: <none>
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] kex follows: False
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] Compression: none
2026-02-11T17:10:55.142 [DEBUG] [Thread-132711] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:10:55.199 [DEBUG] [Thread-132711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:10:55.199 [DEBUG] [Thread-132711] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:10:55.200 [DEBUG] [Thread-132711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:10:55.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:10:55.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:10:55.254 [DEBUG] [Thread-132711] [transport.py] [_log()] userauth is OK
2026-02-11T17:10:55.254 [DEBUG] [Thread-132711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:10:55.255 [DEBUG] [Thread-132711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:10:55.255 [DEBUG] [Thread-132711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:10:55.255 [DEBUG] [Thread-132711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:10:55.274 [INFO] [Thread-132711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:10:55.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:10:55.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:10:56.097 [DEBUG] [Thread-132711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:10:56.097 [DEBUG] [Thread-132711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:10:56.144 [DEBUG] [Thread-132711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:10:56.144 [DEBUG] [Thread-132711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:10:56.153 [DEBUG] [Thread-132711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:10:56.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:10:56.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:10:56.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:10:56.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:10:56.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:10:56.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:10:56.189 [DEBUG] [Thread-132711] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:10:59.995 [DEBUG] [Thread-132713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:11:15.046 [DEBUG] [Thread-132714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:11:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:11:26.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:11:26.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:11:26.808 [DEBUG] [Thread-132715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:11:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 11, 14), 11.89, 46.94, 0.0, 32.01, 22.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:11:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:11:14
2026-02-11T17:11:28.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:11:29.071 [DEBUG] [Thread-132716] [transport.py] [_log()] starting thread (client mode): 0xa57e1630
2026-02-11T17:11:29.072 [DEBUG] [Thread-132716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:11:29.093 [DEBUG] [Thread-132716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:11:29.093 [INFO] [Thread-132716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:11:29.096 [DEBUG] [Thread-132716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:11:29.097 [DEBUG] [Thread-132716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:11:29.097 [DEBUG] [Thread-132716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:11:29.097 [DEBUG] [Thread-132716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:11:29.097 [DEBUG] [Thread-132716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:11:29.097 [DEBUG] [Thread-132716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:11:29.097 [DEBUG] [Thread-132716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] client lang: <none>
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] server lang: <none>
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] kex follows: False
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] Compression: none
2026-02-11T17:11:29.098 [DEBUG] [Thread-132716] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:11:29.116 [DEBUG] [Thread-132716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:11:29.117 [DEBUG] [Thread-132716] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:11:29.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:11:29.118 [DEBUG] [Thread-132716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:11:29.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:11:29.120 [DEBUG] [Thread-132716] [transport.py] [_log()] userauth is OK
2026-02-11T17:11:29.120 [DEBUG] [Thread-132716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:11:29.120 [DEBUG] [Thread-132716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:11:29.120 [DEBUG] [Thread-132716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:11:29.120 [DEBUG] [Thread-132716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:11:29.145 [INFO] [Thread-132716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:11:29.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:11:29.956 [DEBUG] [Thread-132716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:11:29.956 [DEBUG] [Thread-132716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:11:29.957 [DEBUG] [Thread-132716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:11:29.997 [DEBUG] [Thread-132716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:11:29.998 [DEBUG] [Thread-132716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:11:30.001 [DEBUG] [Thread-132716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:11:30.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:11:30.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:11:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:11:30.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:11:30.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:11:30.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:11:30.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:11:30.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:11:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:11:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.632433 -999.00  +22.80  33.42     51  +12.40 1 2 2 1 1   887    0 7.74 -107.19 ----- 32.6 33.4 290.2 36.5 25.1 -10.3 25.1 -10.7 24.6 -10.2 24.9 -9.7
2026-02-11T17:11:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:11:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:11:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.632433
2026-02-11T17:11:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:11:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:11:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:11:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:11:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:11:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:11:14', tmtdew=11.89, humidity=46.94, cloud=0.0, wind=32.01, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:10:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:11:30.029 [DEBUG] [Thread-132716] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:11:30.080 [DEBUG] [Thread-132719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:11:30.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:11:30.126 [DEBUG] [Thread-132720] [transport.py] [_log()] starting thread (client mode): 0x9eb045e0
2026-02-11T17:11:30.126 [DEBUG] [Thread-132720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:11:30.141 [DEBUG] [Thread-132720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:11:30.141 [INFO] [Thread-132720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:11:30.148 [DEBUG] [Thread-132720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] client lang: <none>
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] server lang: <none>
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] kex follows: False
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] Compression: none
2026-02-11T17:11:30.149 [DEBUG] [Thread-132720] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:11:30.209 [DEBUG] [Thread-132720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:11:30.209 [DEBUG] [Thread-132720] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:11:30.210 [DEBUG] [Thread-132720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:11:30.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:11:30.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:11:30.265 [DEBUG] [Thread-132720] [transport.py] [_log()] userauth is OK
2026-02-11T17:11:30.266 [DEBUG] [Thread-132720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:11:30.266 [DEBUG] [Thread-132720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:11:30.266 [DEBUG] [Thread-132720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:11:30.266 [DEBUG] [Thread-132720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:11:30.285 [INFO] [Thread-132720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:11:30.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:11:30.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:11:31.135 [DEBUG] [Thread-132720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:11:31.135 [DEBUG] [Thread-132720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:11:31.184 [DEBUG] [Thread-132720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:11:31.184 [DEBUG] [Thread-132720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:11:31.193 [DEBUG] [Thread-132720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:11:31.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:11: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')
2026-02-11T17:11: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
2026-02-11T17:11:31.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:11:31.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:11:31.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:11:31.230 [DEBUG] [Thread-132720] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:11:45.123 [DEBUG] [Thread-132722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:11:48.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:11:48.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:12:00.163 [DEBUG] [Thread-132723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:12:01.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:12:01.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:12:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:12:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 11, 49), 11.94, 46.92, 0.0, 29.15, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:12:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:11:49
2026-02-11T17:12:03.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:12:04.003 [DEBUG] [Thread-132724] [transport.py] [_log()] starting thread (client mode): 0x9eb04b80
2026-02-11T17:12:04.003 [DEBUG] [Thread-132724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:12:04.023 [DEBUG] [Thread-132724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:12:04.024 [INFO] [Thread-132724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] client lang: <none>
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] server lang: <none>
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] kex follows: False
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] Compression: none
2026-02-11T17:12:04.025 [DEBUG] [Thread-132724] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:12:04.042 [DEBUG] [Thread-132724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:12:04.043 [DEBUG] [Thread-132724] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:12:04.043 [DEBUG] [Thread-132724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:12:04.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:12:04.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:12:04.045 [DEBUG] [Thread-132724] [transport.py] [_log()] userauth is OK
2026-02-11T17:12:04.045 [DEBUG] [Thread-132724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:12:04.046 [DEBUG] [Thread-132724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:12:04.046 [DEBUG] [Thread-132724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:12:04.046 [DEBUG] [Thread-132724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:12:04.071 [INFO] [Thread-132724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:12:04.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:12:04.633 [DEBUG] [Thread-132724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:12:04.633 [DEBUG] [Thread-132724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:12:04.634 [DEBUG] [Thread-132724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:12:04.674 [DEBUG] [Thread-132724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:12:04.674 [DEBUG] [Thread-132724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:12:04.677 [DEBUG] [Thread-132724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:12:04.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:12:04.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:12:04.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:12:04.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:12:04.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:12:04.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:12:04.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:12:04.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:12:04.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:12:04.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.632780 -999.00  +22.50  31.08     52  +12.30 1 2 2 1 1   887    0 8.15 -99.69 ----- 29.8 31.1 296.8 44.6 25.0 -10.9 25.0 -11.6 24.6 -11.1 24.8 -9.6
2026-02-11T17:12:04.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:12:04.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:12:04.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.632780
2026-02-11T17:12:04.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:12:04.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:12:04.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:12:04.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:12:04.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:12:04.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:11:49', tmtdew=11.94, humidity=46.92, cloud=0.0, wind=29.15, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:11:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:12:04.705 [DEBUG] [Thread-132724] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:12:04.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:12:04.801 [DEBUG] [Thread-132727] [transport.py] [_log()] starting thread (client mode): 0x9eb06590
2026-02-11T17:12:04.801 [DEBUG] [Thread-132727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:12:04.815 [DEBUG] [Thread-132727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:12:04.816 [INFO] [Thread-132727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] client lang: <none>
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] server lang: <none>
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] kex follows: False
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:12:04.823 [DEBUG] [Thread-132727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:12:04.824 [DEBUG] [Thread-132727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:12:04.824 [DEBUG] [Thread-132727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:12:04.824 [DEBUG] [Thread-132727] [transport.py] [_log()] Compression: none
2026-02-11T17:12:04.824 [DEBUG] [Thread-132727] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:12:04.884 [DEBUG] [Thread-132727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:12:04.885 [DEBUG] [Thread-132727] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:12:04.885 [DEBUG] [Thread-132727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:12:04.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:12:04.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:12:04.943 [DEBUG] [Thread-132727] [transport.py] [_log()] userauth is OK
2026-02-11T17:12:04.944 [DEBUG] [Thread-132727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:12:04.944 [DEBUG] [Thread-132727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:12:04.944 [DEBUG] [Thread-132727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:12:04.944 [DEBUG] [Thread-132727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:12:04.962 [INFO] [Thread-132727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:12:04.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:12:04.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:12:05.801 [DEBUG] [Thread-132727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:12:05.801 [DEBUG] [Thread-132727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:12:05.849 [DEBUG] [Thread-132727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:12:05.850 [DEBUG] [Thread-132727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:12:05.859 [DEBUG] [Thread-132727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:12:05.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:12:05.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:12:05.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:12:05.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:12:05.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:12:05.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:12:05.895 [DEBUG] [Thread-132727] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:12:15.204 [DEBUG] [Thread-132729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:12:26.856 [DEBUG] [Thread-132730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:12:30.258 [DEBUG] [Thread-132731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:12:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:12:35.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:12:35.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
2026-02-11T17:12:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 12, 25), 11.96, 46.89, 0.0, 30.7, 22.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:12:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:12:25
2026-02-11T17:12:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:12:38.394 [DEBUG] [Thread-132732] [transport.py] [_log()] starting thread (client mode): 0xa57e1780
2026-02-11T17:12:38.394 [DEBUG] [Thread-132732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:12:38.415 [DEBUG] [Thread-132732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:12:38.415 [INFO] [Thread-132732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:12:38.419 [DEBUG] [Thread-132732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:12:38.419 [DEBUG] [Thread-132732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:12:38.419 [DEBUG] [Thread-132732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:12:38.419 [DEBUG] [Thread-132732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:38.419 [DEBUG] [Thread-132732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] client lang: <none>
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] server lang: <none>
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] kex follows: False
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] Compression: none
2026-02-11T17:12:38.420 [DEBUG] [Thread-132732] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:12:38.438 [DEBUG] [Thread-132732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:12:38.438 [DEBUG] [Thread-132732] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:12:38.439 [DEBUG] [Thread-132732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:12:38.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:12:38.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:12:38.441 [DEBUG] [Thread-132732] [transport.py] [_log()] userauth is OK
2026-02-11T17:12:38.441 [DEBUG] [Thread-132732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:12:38.441 [DEBUG] [Thread-132732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:12:38.442 [DEBUG] [Thread-132732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:12:38.442 [DEBUG] [Thread-132732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:12:38.466 [INFO] [Thread-132732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:12:38.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:12:39.139 [DEBUG] [Thread-132732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:12:39.139 [DEBUG] [Thread-132732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:12:39.140 [DEBUG] [Thread-132732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:12:39.180 [DEBUG] [Thread-132732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:12:39.181 [DEBUG] [Thread-132732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:12:39.184 [DEBUG] [Thread-132732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:12:39.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:12:39.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:12:39.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:12:39.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:12:39.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:12:39.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:12:39.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:12:39.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:12:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:12:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.633127 -999.00  +22.50  26.95     52  +12.30 1 2 1 1 1   887    0 8.05 -98.32 ----- 29.3 26.9 288.9 38.8 24.9 -10.8 24.9 -11.8 24.5 -10.5 24.8 -9.9
2026-02-11T17:12:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:12:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:12:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.633127
2026-02-11T17:12:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:12:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:12:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:12:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:12:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:12:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:12:25', tmtdew=11.96, humidity=46.89, cloud=0.0, wind=30.7, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:11:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:12:39.209 [DEBUG] [Thread-132732] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:12:39.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:12:39.298 [DEBUG] [Thread-132735] [transport.py] [_log()] starting thread (client mode): 0xa57e1fc0
2026-02-11T17:12:39.298 [DEBUG] [Thread-132735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:12:39.312 [DEBUG] [Thread-132735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:12:39.313 [INFO] [Thread-132735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:12:39.320 [DEBUG] [Thread-132735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:12:39.320 [DEBUG] [Thread-132735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:12:39.320 [DEBUG] [Thread-132735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:12:39.320 [DEBUG] [Thread-132735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] client lang: <none>
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] server lang: <none>
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] kex follows: False
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] Compression: none
2026-02-11T17:12:39.321 [DEBUG] [Thread-132735] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:12:39.382 [DEBUG] [Thread-132735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:12:39.382 [DEBUG] [Thread-132735] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:12:39.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:12:39.384 [DEBUG] [Thread-132735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:12:39.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:12:39.438 [DEBUG] [Thread-132735] [transport.py] [_log()] userauth is OK
2026-02-11T17:12:39.438 [DEBUG] [Thread-132735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:12:39.439 [DEBUG] [Thread-132735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:12:39.439 [DEBUG] [Thread-132735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:12:39.439 [DEBUG] [Thread-132735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:12:39.458 [INFO] [Thread-132735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:12:39.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:12:39.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:12:40.299 [DEBUG] [Thread-132735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:12:40.299 [DEBUG] [Thread-132735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:12:40.347 [DEBUG] [Thread-132735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:12:40.348 [DEBUG] [Thread-132735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:12:40.357 [DEBUG] [Thread-132735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:12:40.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:12:40.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:12:40.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:12:40.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:12:40.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:12:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:12:40.396 [DEBUG] [Thread-132735] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:12:45.294 [DEBUG] [Thread-132737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:12:48.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:12:48.490 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:00.353 [DEBUG] [Thread-132738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:10.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:13:10.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:13:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:13:12.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 13), 12.2, 46.13, 0.0, 33.47, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:13:12.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:13:00
2026-02-11T17:13:12.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:13:12.835 [DEBUG] [Thread-132739] [transport.py] [_log()] starting thread (client mode): 0xa57e2800
2026-02-11T17:13:12.835 [DEBUG] [Thread-132739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:13:12.855 [DEBUG] [Thread-132739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:13:12.855 [INFO] [Thread-132739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:13:12.856 [DEBUG] [Thread-132739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] client lang: <none>
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] server lang: <none>
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] kex follows: False
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] Compression: none
2026-02-11T17:13:12.857 [DEBUG] [Thread-132739] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:13:12.869 [DEBUG] [Thread-132739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:13:12.869 [DEBUG] [Thread-132739] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:13:12.870 [DEBUG] [Thread-132739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:13:12.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:13:12.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:13:12.871 [DEBUG] [Thread-132739] [transport.py] [_log()] userauth is OK
2026-02-11T17:13:12.872 [DEBUG] [Thread-132739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:13:12.872 [DEBUG] [Thread-132739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:13:12.872 [DEBUG] [Thread-132739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:13:12.872 [DEBUG] [Thread-132739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:13:12.895 [INFO] [Thread-132739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:13:12.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:13:13.557 [DEBUG] [Thread-132739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:13:13.557 [DEBUG] [Thread-132739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:13:13.558 [DEBUG] [Thread-132739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:13:13.598 [DEBUG] [Thread-132739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:13:13.598 [DEBUG] [Thread-132739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:13:13.599 [DEBUG] [Thread-132739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:13:13.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:13:13.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:13:13.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:13:13.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:13:13.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:13:13.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:13:13.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:13:13.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:13:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:13:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.633822 -999.00  +22.10  33.12     53  +12.20 1 2 2 1 1   887    0 8.53 -86.45 ----- 34.0 33.1 279.6 36.6 24.7 -11.7 24.7 -11.9 24.1 -12.3 24.5 -10.4
2026-02-11T17:13:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:13:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:13:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.633822
2026-02-11T17:13:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:13:13.617 [DEBUG] [Thread-132739] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:13:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:13:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:13:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:13:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:13:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:13:00', tmtdew=12.2, humidity=46.13, cloud=0.0, wind=33.47, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:12:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:13:13.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:13:13.715 [DEBUG] [Thread-132742] [transport.py] [_log()] starting thread (client mode): 0x9eb06ce0
2026-02-11T17:13:13.715 [DEBUG] [Thread-132742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:13:13.729 [DEBUG] [Thread-132742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:13:13.729 [INFO] [Thread-132742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:13:13.737 [DEBUG] [Thread-132742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:13:13.737 [DEBUG] [Thread-132742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:13:13.737 [DEBUG] [Thread-132742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] client lang: <none>
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] server lang: <none>
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] kex follows: False
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] Compression: none
2026-02-11T17:13:13.738 [DEBUG] [Thread-132742] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:13:13.796 [DEBUG] [Thread-132742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:13:13.797 [DEBUG] [Thread-132742] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:13:13.797 [DEBUG] [Thread-132742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:13:13.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:13:13.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:13:13.852 [DEBUG] [Thread-132742] [transport.py] [_log()] userauth is OK
2026-02-11T17:13:13.852 [DEBUG] [Thread-132742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:13:13.852 [DEBUG] [Thread-132742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:13:13.852 [DEBUG] [Thread-132742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:13:13.852 [DEBUG] [Thread-132742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:13:13.872 [INFO] [Thread-132742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:13:13.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:13:13.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:13:14.690 [DEBUG] [Thread-132742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:13:14.691 [DEBUG] [Thread-132742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:13:14.738 [DEBUG] [Thread-132742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:13:14.739 [DEBUG] [Thread-132742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:13:14.748 [DEBUG] [Thread-132742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:13:14.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:13:14.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:13:14.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
2026-02-11T17:13:14.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:13:14.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:13:14.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:13:14.785 [DEBUG] [Thread-132742] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:13:15.389 [DEBUG] [Thread-132744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:26.917 [DEBUG] [Thread-132745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:30.439 [DEBUG] [Thread-132746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:13:44.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:13:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:13:45.478 [DEBUG] [Thread-132747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 13, 36), 12.68, 44.75, 0.0, 32.28, 23.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:13:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:13:36
2026-02-11T17:13:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:13:47.582 [DEBUG] [Thread-132748] [transport.py] [_log()] starting thread (client mode): 0xa5740b20
2026-02-11T17:13:47.582 [DEBUG] [Thread-132748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:13:47.602 [DEBUG] [Thread-132748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:13:47.602 [INFO] [Thread-132748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:13:47.603 [DEBUG] [Thread-132748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:13:47.603 [DEBUG] [Thread-132748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:13:47.603 [DEBUG] [Thread-132748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:13:47.603 [DEBUG] [Thread-132748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:47.603 [DEBUG] [Thread-132748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:47.603 [DEBUG] [Thread-132748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] client lang: <none>
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] server lang: <none>
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] kex follows: False
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] Compression: none
2026-02-11T17:13:47.604 [DEBUG] [Thread-132748] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:13:47.611 [DEBUG] [Thread-132748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:13:47.612 [DEBUG] [Thread-132748] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:13:47.612 [DEBUG] [Thread-132748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:13:47.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:13:47.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:13:47.612 [DEBUG] [Thread-132748] [transport.py] [_log()] userauth is OK
2026-02-11T17:13:47.612 [DEBUG] [Thread-132748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:13:47.612 [DEBUG] [Thread-132748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:13:47.612 [DEBUG] [Thread-132748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:13:47.612 [DEBUG] [Thread-132748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:13:47.628 [INFO] [Thread-132748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:13:47.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:13:48.288 [DEBUG] [Thread-132748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:13:48.288 [DEBUG] [Thread-132748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:13:48.289 [DEBUG] [Thread-132748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:13:48.330 [DEBUG] [Thread-132748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:13:48.330 [DEBUG] [Thread-132748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:13:48.332 [DEBUG] [Thread-132748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:13:48.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:13:48.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:13:48.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:13:48.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:13:48.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:13:48.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:13:48.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:13:48.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:13:48.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:13:48.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.634169 -999.00  +22.00  19.30     53  +12.20 1 2 1 1 1   887    0 8.15 -89.95 ----- 20.5 19.3 276.9 32.7 24.6 -10.9 24.6 -11.7 24.0 -11.9 24.4 -9.7
2026-02-11T17:13:48.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.634169
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:13:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:13:36', tmtdew=12.68, humidity=44.75, cloud=0.0, wind=32.28, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:13:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:13:48.344 [DEBUG] [Thread-132748] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:13:48.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:13:48.428 [DEBUG] [Thread-132751] [transport.py] [_log()] starting thread (client mode): 0x9eb050f0
2026-02-11T17:13:48.428 [DEBUG] [Thread-132751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:13:48.442 [DEBUG] [Thread-132751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:13:48.442 [INFO] [Thread-132751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] client lang: <none>
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] server lang: <none>
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] kex follows: False
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] Compression: none
2026-02-11T17:13:48.450 [DEBUG] [Thread-132751] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:13:48.507 [DEBUG] [Thread-132751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:13:48.508 [DEBUG] [Thread-132751] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:13:48.508 [DEBUG] [Thread-132751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:13:48.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:13:48.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:13:48.562 [DEBUG] [Thread-132751] [transport.py] [_log()] userauth is OK
2026-02-11T17:13:48.563 [DEBUG] [Thread-132751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:13:48.563 [DEBUG] [Thread-132751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:13:48.563 [DEBUG] [Thread-132751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:13:48.563 [DEBUG] [Thread-132751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:13:48.582 [INFO] [Thread-132751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:13:48.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:13:48.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:13:48.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:48.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:13:49.427 [DEBUG] [Thread-132751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:13:49.428 [DEBUG] [Thread-132751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:13:49.477 [DEBUG] [Thread-132751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:13:49.477 [DEBUG] [Thread-132751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:13:49.486 [DEBUG] [Thread-132751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:13:49.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:13:49.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')
2026-02-11T17:13:49.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
2026-02-11T17:13:49.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:13:49.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:13:49.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:13:49.522 [DEBUG] [Thread-132751] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:14:00.514 [DEBUG] [Thread-132753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:14:15.574 [DEBUG] [Thread-132754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:14:19.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:14:19.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:14:19.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
2026-02-11T17:14:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 14, 12), 12.01, 46.46, 0.0, 33.0, 22.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:14:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:14:12
2026-02-11T17:14:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:14:22.049 [DEBUG] [Thread-132755] [transport.py] [_log()] starting thread (client mode): 0xa57e33a0
2026-02-11T17:14:22.049 [DEBUG] [Thread-132755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:14:22.064 [DEBUG] [Thread-132755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:14:22.064 [INFO] [Thread-132755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] client lang: <none>
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] server lang: <none>
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] kex follows: False
2026-02-11T17:14:22.067 [DEBUG] [Thread-132755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:14:22.068 [DEBUG] [Thread-132755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:14:22.068 [DEBUG] [Thread-132755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:14:22.068 [DEBUG] [Thread-132755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:14:22.068 [DEBUG] [Thread-132755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:14:22.068 [DEBUG] [Thread-132755] [transport.py] [_log()] Compression: none
2026-02-11T17:14:22.068 [DEBUG] [Thread-132755] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:14:22.086 [DEBUG] [Thread-132755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:14:22.087 [DEBUG] [Thread-132755] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:14:22.087 [DEBUG] [Thread-132755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:14:22.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:14:22.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:14:22.089 [DEBUG] [Thread-132755] [transport.py] [_log()] userauth is OK
2026-02-11T17:14:22.089 [DEBUG] [Thread-132755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:14:22.090 [DEBUG] [Thread-132755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:14:22.090 [DEBUG] [Thread-132755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:14:22.090 [DEBUG] [Thread-132755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:14:22.116 [INFO] [Thread-132755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:14:22.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:14:22.910 [DEBUG] [Thread-132755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:14:22.910 [DEBUG] [Thread-132755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:14:22.910 [DEBUG] [Thread-132755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:14:22.952 [DEBUG] [Thread-132755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:14:22.952 [DEBUG] [Thread-132755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:14:22.954 [DEBUG] [Thread-132755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:14:22.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:14:22.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:14:22.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:14:22.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:14:22.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:14:22.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:14:22.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:14:22.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:14:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:14:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.634516 -999.00  +22.20  23.13     53  +12.30 1 2 1 1 1   887    0 8.38 -88.12 ----- 22.8 23.1 283.5 30.6 24.6 -11.1 24.6 -11.5 24.0 -12.4 24.4 -9.5
2026-02-11T17:14:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:14:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:14:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.634516
2026-02-11T17:14:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:14:22.966 [DEBUG] [Thread-132755] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:14:22.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:14:22.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:14:22.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:14:22.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:14:22.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:14:12', tmtdew=12.01, humidity=46.46, cloud=0.0, wind=33.0, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:13:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:14:23.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:14:26.977 [DEBUG] [Thread-132758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:14:30.612 [DEBUG] [Thread-132759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:14:45.664 [DEBUG] [Thread-132760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:14:48.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:14:48.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:15:00.701 [DEBUG] [Thread-132761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:15:15.735 [DEBUG] [Thread-132762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:15:27.026 [DEBUG] [Thread-132763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:15:30.773 [DEBUG] [Thread-132764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:15:45.815 [DEBUG] [Thread-132765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:15:48.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:15:48.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:16:00.853 [DEBUG] [Thread-132766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:16:15.892 [DEBUG] [Thread-132767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:16:27.075 [DEBUG] [Thread-132768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:16:30.930 [DEBUG] [Thread-132769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:16:38.071 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T17:16:45.968 [DEBUG] [Thread-132770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:16:49.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:16:49.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:17:01.009 [DEBUG] [Thread-132771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:17:08.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:17:08.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:17:08.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
2026-02-11T17:17:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 16, 36), 12.88, 44.26, 0.0, 33.98, 23.85, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:17:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:16:36
2026-02-11T17:17:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:17:10.592 [DEBUG] [Thread-132772] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-11T17:17:10.592 [DEBUG] [Thread-132772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:17:10.604 [DEBUG] [Thread-132772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:17:10.604 [INFO] [Thread-132772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:17:10.605 [DEBUG] [Thread-132772] [transport.py] [_log()] client lang: <none>
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] server lang: <none>
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] kex follows: False
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] Compression: none
2026-02-11T17:17:10.606 [DEBUG] [Thread-132772] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:17:10.623 [DEBUG] [Thread-132772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:17:10.624 [DEBUG] [Thread-132772] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:17:10.624 [DEBUG] [Thread-132772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:17:10.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:17:10.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:17:10.625 [DEBUG] [Thread-132772] [transport.py] [_log()] userauth is OK
2026-02-11T17:17:10.625 [DEBUG] [Thread-132772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:17:10.626 [DEBUG] [Thread-132772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:17:10.626 [DEBUG] [Thread-132772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:17:10.626 [DEBUG] [Thread-132772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:17:10.639 [INFO] [Thread-132772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:17:10.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:17:11.232 [DEBUG] [Thread-132772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:17:11.232 [DEBUG] [Thread-132772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:17:11.233 [DEBUG] [Thread-132772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:17:11.273 [DEBUG] [Thread-132772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:17:11.273 [DEBUG] [Thread-132772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:17:11.276 [DEBUG] [Thread-132772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:17:11.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:17:11.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:17:11.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:17:11.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:17:11.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:17:11.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:17:11.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:17:11.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:17:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:17:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.636600 -999.00  +22.50  29.11     52  +12.40 1 2 1 1 1   887    0 8.25 -79.77 ----- 31.5 29.1 293.8 41.5 24.6 -10.4 24.4 -10.5 23.9 -9.5 24.3 -9.1
2026-02-11T17:17:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:17:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:17:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.636600
2026-02-11T17:17:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:17:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:17:11.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:17:11.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:17:11.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:17:11.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:16:36', tmtdew=12.88, humidity=44.26, cloud=0.0, wind=33.98, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:16:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:17:11.293 [DEBUG] [Thread-132772] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:17:11.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:17:11.399 [DEBUG] [Thread-132775] [transport.py] [_log()] starting thread (client mode): 0xa57c1a80
2026-02-11T17:17:11.399 [DEBUG] [Thread-132775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:17:11.414 [DEBUG] [Thread-132775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:17:11.414 [INFO] [Thread-132775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:11.421 [DEBUG] [Thread-132775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] client lang: <none>
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] server lang: <none>
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] kex follows: False
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] Compression: none
2026-02-11T17:17:11.422 [DEBUG] [Thread-132775] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:17:11.478 [DEBUG] [Thread-132775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:17:11.479 [DEBUG] [Thread-132775] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:17:11.479 [DEBUG] [Thread-132775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:17:11.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:17:11.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:17:11.534 [DEBUG] [Thread-132775] [transport.py] [_log()] userauth is OK
2026-02-11T17:17:11.535 [DEBUG] [Thread-132775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:17:11.535 [DEBUG] [Thread-132775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:17:11.535 [DEBUG] [Thread-132775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:17:11.535 [DEBUG] [Thread-132775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:17:11.554 [INFO] [Thread-132775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:17:11.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:17:11.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:17:12.371 [DEBUG] [Thread-132775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:17:12.371 [DEBUG] [Thread-132775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:17:12.419 [DEBUG] [Thread-132775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:17:12.419 [DEBUG] [Thread-132775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:17:12.428 [DEBUG] [Thread-132775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:17:12.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:17:12.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:17:12.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:17:12.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:17:12.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:17:12.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:17:12.463 [DEBUG] [Thread-132775] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:17:16.043 [DEBUG] [Thread-132777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:17:27.125 [DEBUG] [Thread-132778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:17:31.094 [DEBUG] [Thread-132779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:17:42.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:17:42.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:17:42.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
2026-02-11T17:17:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 17, 11), 11.92, 46.59, 0.0, 38.24, 22.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:17:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:17:11
2026-02-11T17:17:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:17:45.516 [DEBUG] [Thread-132780] [transport.py] [_log()] starting thread (client mode): 0x9eb06fe0
2026-02-11T17:17:45.516 [DEBUG] [Thread-132780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:17:45.536 [DEBUG] [Thread-132780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:17:45.536 [INFO] [Thread-132780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:17:45.539 [DEBUG] [Thread-132780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] client lang: <none>
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] server lang: <none>
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] kex follows: False
2026-02-11T17:17:45.540 [DEBUG] [Thread-132780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:17:45.541 [DEBUG] [Thread-132780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:17:45.541 [DEBUG] [Thread-132780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:17:45.541 [DEBUG] [Thread-132780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:17:45.541 [DEBUG] [Thread-132780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:17:45.541 [DEBUG] [Thread-132780] [transport.py] [_log()] Compression: none
2026-02-11T17:17:45.541 [DEBUG] [Thread-132780] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:17:45.560 [DEBUG] [Thread-132780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:17:45.561 [DEBUG] [Thread-132780] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:17:45.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:17:45.563 [DEBUG] [Thread-132780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:17:45.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:17:45.565 [DEBUG] [Thread-132780] [transport.py] [_log()] userauth is OK
2026-02-11T17:17:45.565 [DEBUG] [Thread-132780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:17:45.565 [DEBUG] [Thread-132780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:17:45.565 [DEBUG] [Thread-132780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:17:45.565 [DEBUG] [Thread-132780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:17:45.596 [INFO] [Thread-132780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:17:45.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:17:46.129 [DEBUG] [Thread-132782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:17:46.249 [DEBUG] [Thread-132780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:17:46.249 [DEBUG] [Thread-132780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:17:46.249 [DEBUG] [Thread-132780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:17:46.290 [DEBUG] [Thread-132780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:17:46.291 [DEBUG] [Thread-132780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:17:46.294 [DEBUG] [Thread-132780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:17:46.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:17:46.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:17:46.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:17:46.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:17:46.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:17:46.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:17:46.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:17:46.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:17:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:17:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.636947 -999.00  +22.40  26.25     52  +12.30 1 2 1 1 1   887    0 8.55 -80.72 ----- 28.2 26.2 289.9 39.5 24.5 -10.2 24.4 -10.9 24.0 -10.2 24.3 -9.0
2026-02-11T17:17:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:17:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:17:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.636947
2026-02-11T17:17:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:17:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:17:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:17:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:17:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:17:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:17:11', tmtdew=11.92, humidity=46.59, cloud=0.0, wind=38.24, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:17:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:17:46.323 [DEBUG] [Thread-132780] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:17:46.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:17:46.431 [DEBUG] [Thread-132784] [transport.py] [_log()] starting thread (client mode): 0xa5770910
2026-02-11T17:17:46.431 [DEBUG] [Thread-132784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:17:46.446 [DEBUG] [Thread-132784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:17:46.446 [INFO] [Thread-132784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:17:46.454 [DEBUG] [Thread-132784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:17:46.454 [DEBUG] [Thread-132784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:17:46.454 [DEBUG] [Thread-132784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:17:46.454 [DEBUG] [Thread-132784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:46.455 [DEBUG] [Thread-132784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:17:46.455 [DEBUG] [Thread-132784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:46.455 [DEBUG] [Thread-132784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:17:46.455 [DEBUG] [Thread-132784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:17:46.455 [DEBUG] [Thread-132784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:17:46.455 [DEBUG] [Thread-132784] [transport.py] [_log()] client lang: <none>
2026-02-11T17:17:46.455 [DEBUG] [Thread-132784] [transport.py] [_log()] server lang: <none>
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] kex follows: False
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] Compression: none
2026-02-11T17:17:46.456 [DEBUG] [Thread-132784] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:17:46.514 [DEBUG] [Thread-132784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:17:46.515 [DEBUG] [Thread-132784] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:17:46.516 [DEBUG] [Thread-132784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:17:46.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:17:46.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:17:46.573 [DEBUG] [Thread-132784] [transport.py] [_log()] userauth is OK
2026-02-11T17:17:46.574 [DEBUG] [Thread-132784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:17:46.574 [DEBUG] [Thread-132784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:17:46.574 [DEBUG] [Thread-132784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:17:46.574 [DEBUG] [Thread-132784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:17:46.591 [INFO] [Thread-132784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:17:46.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:17:46.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:17:47.425 [DEBUG] [Thread-132784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:17:47.426 [DEBUG] [Thread-132784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:17:47.474 [DEBUG] [Thread-132784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:17:47.474 [DEBUG] [Thread-132784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:17:47.482 [DEBUG] [Thread-132784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:17:47.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:17:47.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:17:47.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:17:47.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:17:47.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:17:47.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:17:47.517 [DEBUG] [Thread-132784] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:17:49.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:17:49.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:01.166 [DEBUG] [Thread-132786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:16.218 [DEBUG] [Thread-132787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:17.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:18:17.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:18:17.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:18:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 17, 46), 11.91, 47.11, 0.0, 33.96, 22.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:18:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:17:46
2026-02-11T17:18:19.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:18:20.008 [DEBUG] [Thread-132788] [transport.py] [_log()] starting thread (client mode): 0xa57e02b0
2026-02-11T17:18:20.008 [DEBUG] [Thread-132788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:18:20.028 [DEBUG] [Thread-132788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:18:20.028 [INFO] [Thread-132788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] client lang: <none>
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] server lang: <none>
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] kex follows: False
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] Compression: none
2026-02-11T17:18:20.031 [DEBUG] [Thread-132788] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:18:20.047 [DEBUG] [Thread-132788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:18:20.047 [DEBUG] [Thread-132788] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:18:20.047 [DEBUG] [Thread-132788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:18:20.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:18:20.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:18:20.049 [DEBUG] [Thread-132788] [transport.py] [_log()] userauth is OK
2026-02-11T17:18:20.049 [DEBUG] [Thread-132788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:18:20.049 [DEBUG] [Thread-132788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:18:20.049 [DEBUG] [Thread-132788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:18:20.049 [DEBUG] [Thread-132788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:18:20.069 [INFO] [Thread-132788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:18:20.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:18:20.704 [DEBUG] [Thread-132788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:18:20.704 [DEBUG] [Thread-132788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:18:20.704 [DEBUG] [Thread-132788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:18:20.745 [DEBUG] [Thread-132788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:18:20.745 [DEBUG] [Thread-132788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:18:20.747 [DEBUG] [Thread-132788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:18:20.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:18:20.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:18:20.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:18:20.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:18:20.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:18:20.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:18:20.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:18:20.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:18:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:18:20.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.637641 -999.00  +22.40  35.79     52  +12.30 1 2 2 1 1   887    0 8.43 -76.77 ----- 38.0 35.8 294.0 42.8 24.5 -10.5 24.4 -10.6 24.0 -9.9 24.3 -9.2
2026-02-11T17:18:20.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:18:20.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:18:20.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.637641
2026-02-11T17:18:20.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:18:20.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:18:20.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:18:20.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:18:20.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:18:20.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:17:46', tmtdew=11.91, humidity=47.11, cloud=0.0, wind=33.96, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:18:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:18:20.771 [DEBUG] [Thread-132788] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:18:20.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:18:20.865 [DEBUG] [Thread-132791] [transport.py] [_log()] starting thread (client mode): 0xa2db7640
2026-02-11T17:18:20.865 [DEBUG] [Thread-132791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:18:20.881 [DEBUG] [Thread-132791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:18:20.881 [INFO] [Thread-132791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:18:20.888 [DEBUG] [Thread-132791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:18:20.889 [DEBUG] [Thread-132791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] client lang: <none>
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] server lang: <none>
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] kex follows: False
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:18:20.890 [DEBUG] [Thread-132791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:18:20.891 [DEBUG] [Thread-132791] [transport.py] [_log()] Compression: none
2026-02-11T17:18:20.891 [DEBUG] [Thread-132791] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:18:20.950 [DEBUG] [Thread-132791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:18:20.950 [DEBUG] [Thread-132791] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:18:20.951 [DEBUG] [Thread-132791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:18:20.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:18:20.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:18:21.007 [DEBUG] [Thread-132791] [transport.py] [_log()] userauth is OK
2026-02-11T17:18:21.008 [DEBUG] [Thread-132791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:18:21.008 [DEBUG] [Thread-132791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:18:21.008 [DEBUG] [Thread-132791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:18:21.008 [DEBUG] [Thread-132791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:18:21.029 [INFO] [Thread-132791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:18:21.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:18:21.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:18:21.930 [DEBUG] [Thread-132791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:18:21.931 [DEBUG] [Thread-132791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:18:21.978 [DEBUG] [Thread-132791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:18:21.979 [DEBUG] [Thread-132791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:18:21.988 [DEBUG] [Thread-132791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:18:21.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:18:21.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')
2026-02-11T17:18:22.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:18:22.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:18:22.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:18:22.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:18:22.024 [DEBUG] [Thread-132791] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:18:27.175 [DEBUG] [Thread-132793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:31.260 [DEBUG] [Thread-132794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:46.317 [DEBUG] [Thread-132795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:49.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:49.346 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:18:52.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:18:52.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:18:52.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
2026-02-11T17:18:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 18, 22), 11.95, 47.01, 0.0, 34.6, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:18:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:18:22
2026-02-11T17:18:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:18:54.682 [DEBUG] [Thread-132796] [transport.py] [_log()] starting thread (client mode): 0xa2db60b0
2026-02-11T17:18:54.682 [DEBUG] [Thread-132796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:18:54.701 [DEBUG] [Thread-132796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:18:54.701 [INFO] [Thread-132796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:18:54.704 [DEBUG] [Thread-132796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:18:54.704 [DEBUG] [Thread-132796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:18:54.704 [DEBUG] [Thread-132796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] client lang: <none>
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] server lang: <none>
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] kex follows: False
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] Compression: none
2026-02-11T17:18:54.705 [DEBUG] [Thread-132796] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:18:54.722 [DEBUG] [Thread-132796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:18:54.723 [DEBUG] [Thread-132796] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:18:54.723 [DEBUG] [Thread-132796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:18:54.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:18:54.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:18:54.726 [DEBUG] [Thread-132796] [transport.py] [_log()] userauth is OK
2026-02-11T17:18:54.726 [DEBUG] [Thread-132796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:18:54.726 [DEBUG] [Thread-132796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:18:54.726 [DEBUG] [Thread-132796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:18:54.726 [DEBUG] [Thread-132796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:18:54.752 [INFO] [Thread-132796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:18:54.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:18:55.420 [DEBUG] [Thread-132796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:18:55.421 [DEBUG] [Thread-132796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:18:55.421 [DEBUG] [Thread-132796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:18:55.462 [DEBUG] [Thread-132796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:18:55.462 [DEBUG] [Thread-132796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:18:55.465 [DEBUG] [Thread-132796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:18:55.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:18:55.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:18:55.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:18:55.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:18:55.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:18:55.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:18:55.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:18:55.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:18:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:18:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.637988 -999.00  +22.30  30.61     53  +12.30 1 2 2 1 1   887    0 8.38 -73.47 ----- 24.6 30.6 277.4 40.2 24.4 -10.3 24.4 -10.5 24.0 -9.5 24.3 -9.7
2026-02-11T17:18:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:18:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:18:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.637988
2026-02-11T17:18:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:18:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:18:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:18:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:18:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:18:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:18:22', tmtdew=11.95, humidity=47.01, cloud=0.0, wind=34.6, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:18:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:18:55.493 [DEBUG] [Thread-132796] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:18:55.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:18:55.589 [DEBUG] [Thread-132799] [transport.py] [_log()] starting thread (client mode): 0xa57c3340
2026-02-11T17:18:55.589 [DEBUG] [Thread-132799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:18:55.603 [DEBUG] [Thread-132799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:18:55.603 [INFO] [Thread-132799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:18:55.611 [DEBUG] [Thread-132799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:18:55.612 [DEBUG] [Thread-132799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:18:55.612 [DEBUG] [Thread-132799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:18:55.612 [DEBUG] [Thread-132799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:55.612 [DEBUG] [Thread-132799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:18:55.612 [DEBUG] [Thread-132799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:55.612 [DEBUG] [Thread-132799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:18:55.612 [DEBUG] [Thread-132799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] client lang: <none>
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] server lang: <none>
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] kex follows: False
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:18:55.613 [DEBUG] [Thread-132799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:18:55.614 [DEBUG] [Thread-132799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:18:55.614 [DEBUG] [Thread-132799] [transport.py] [_log()] Compression: none
2026-02-11T17:18:55.614 [DEBUG] [Thread-132799] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:18:55.669 [DEBUG] [Thread-132799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:18:55.670 [DEBUG] [Thread-132799] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:18:55.671 [DEBUG] [Thread-132799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:18:55.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:18:55.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:18:55.725 [DEBUG] [Thread-132799] [transport.py] [_log()] userauth is OK
2026-02-11T17:18:55.725 [DEBUG] [Thread-132799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:18:55.726 [DEBUG] [Thread-132799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:18:55.726 [DEBUG] [Thread-132799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:18:55.726 [DEBUG] [Thread-132799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:18:55.744 [INFO] [Thread-132799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:18:55.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:18:55.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:18:56.556 [DEBUG] [Thread-132799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:18:56.557 [DEBUG] [Thread-132799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:18:56.604 [DEBUG] [Thread-132799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:18:56.605 [DEBUG] [Thread-132799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:18:56.614 [DEBUG] [Thread-132799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:18:56.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:18:56.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:18:56.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:18:56.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:18:56.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:18:56.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:18:56.651 [DEBUG] [Thread-132799] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:19:01.357 [DEBUG] [Thread-132801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:19:16.410 [DEBUG] [Thread-132802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:19:26.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:19:26.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:19:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:19:27.224 [DEBUG] [Thread-132803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:19:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 18, 58), 11.92, 46.71, 0.0, 31.37, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:19:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:18:58
2026-02-11T17:19:29.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:19:29.785 [DEBUG] [Thread-132804] [transport.py] [_log()] starting thread (client mode): 0x9eb06770
2026-02-11T17:19:29.785 [DEBUG] [Thread-132804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:19:29.805 [DEBUG] [Thread-132804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:19:29.805 [INFO] [Thread-132804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] client lang: <none>
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] server lang: <none>
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] kex follows: False
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] Compression: none
2026-02-11T17:19:29.808 [DEBUG] [Thread-132804] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:19:29.828 [DEBUG] [Thread-132804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:19:29.828 [DEBUG] [Thread-132804] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:19:29.829 [DEBUG] [Thread-132804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:19:29.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:19:29.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:19:29.831 [DEBUG] [Thread-132804] [transport.py] [_log()] userauth is OK
2026-02-11T17:19:29.831 [DEBUG] [Thread-132804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:19:29.831 [DEBUG] [Thread-132804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:19:29.831 [DEBUG] [Thread-132804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:19:29.831 [DEBUG] [Thread-132804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:19:29.856 [INFO] [Thread-132804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:19:29.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:19:30.500 [DEBUG] [Thread-132804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:19:30.501 [DEBUG] [Thread-132804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:19:30.501 [DEBUG] [Thread-132804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:19:30.541 [DEBUG] [Thread-132804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:19:30.542 [DEBUG] [Thread-132804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:19:30.544 [DEBUG] [Thread-132804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:19:30.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:19:30.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:19:30.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:19:30.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:19:30.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:19:30.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:19:30.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:19:30.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:19:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:19:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.638336 -999.00  +22.40  23.30     53  +12.40 1 2 1 1 1   887    0 8.69 -66.29 ----- 28.2 23.3 291.0 32.0 24.4 -10.8 24.4 -10.3 23.9 -9.9 24.2 -9.0
2026-02-11T17:19:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:19:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:19:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.638336
2026-02-11T17:19:30.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:19:30.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:19:30.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:19:30.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:19:30.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:19:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:18:58', tmtdew=11.92, humidity=46.71, cloud=0.0, wind=31.37, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:19:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:19:30.570 [DEBUG] [Thread-132804] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:19:30.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:19:30.665 [DEBUG] [Thread-132807] [transport.py] [_log()] starting thread (client mode): 0x9eb05f60
2026-02-11T17:19:30.666 [DEBUG] [Thread-132807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:19:30.682 [DEBUG] [Thread-132807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:19:30.682 [INFO] [Thread-132807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:19:30.690 [DEBUG] [Thread-132807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:19:30.690 [DEBUG] [Thread-132807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:19:30.691 [DEBUG] [Thread-132807] [transport.py] [_log()] client lang: <none>
2026-02-11T17:19:30.692 [DEBUG] [Thread-132807] [transport.py] [_log()] server lang: <none>
2026-02-11T17:19:30.692 [DEBUG] [Thread-132807] [transport.py] [_log()] kex follows: False
2026-02-11T17:19:30.692 [DEBUG] [Thread-132807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:19:30.692 [DEBUG] [Thread-132807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:19:30.692 [DEBUG] [Thread-132807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:19:30.692 [DEBUG] [Thread-132807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:19:30.692 [DEBUG] [Thread-132807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:19:30.693 [DEBUG] [Thread-132807] [transport.py] [_log()] Compression: none
2026-02-11T17:19:30.693 [DEBUG] [Thread-132807] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:19:30.752 [DEBUG] [Thread-132807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:19:30.752 [DEBUG] [Thread-132807] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:19:30.753 [DEBUG] [Thread-132807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:19:30.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:19:30.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:19:30.807 [DEBUG] [Thread-132807] [transport.py] [_log()] userauth is OK
2026-02-11T17:19:30.808 [DEBUG] [Thread-132807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:19:30.808 [DEBUG] [Thread-132807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:19:30.808 [DEBUG] [Thread-132807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:19:30.808 [DEBUG] [Thread-132807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:19:30.826 [INFO] [Thread-132807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:19:30.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:19:30.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:19:31.444 [DEBUG] [Thread-132809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:19:31.637 [DEBUG] [Thread-132807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:19:31.637 [DEBUG] [Thread-132807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:19:31.685 [DEBUG] [Thread-132807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:19:31.685 [DEBUG] [Thread-132807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:19:31.694 [DEBUG] [Thread-132807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:19:31.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:19:31.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:19:31.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:19:31.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:19:31.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:19:31.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:19:31.729 [DEBUG] [Thread-132807] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:19:46.496 [DEBUG] [Thread-132810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:19:49.487 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:19:49.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:20:01.536 [DEBUG] [Thread-132811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:20:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:20:01.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:20:01.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:20:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 19, 33), 12.49, 45.32, 0.0, 26.5, 23.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:20:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:19:33
2026-02-11T17:20:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:20:04.212 [DEBUG] [Thread-132812] [transport.py] [_log()] starting thread (client mode): 0x9eb04730
2026-02-11T17:20:04.213 [DEBUG] [Thread-132812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:20:04.232 [DEBUG] [Thread-132812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:20:04.232 [INFO] [Thread-132812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] client lang: <none>
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] server lang: <none>
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] kex follows: False
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] Compression: none
2026-02-11T17:20:04.235 [DEBUG] [Thread-132812] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:20:04.251 [DEBUG] [Thread-132812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:20:04.252 [DEBUG] [Thread-132812] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:20:04.253 [DEBUG] [Thread-132812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:20:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:20:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:20:04.254 [DEBUG] [Thread-132812] [transport.py] [_log()] userauth is OK
2026-02-11T17:20:04.255 [DEBUG] [Thread-132812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:20:04.255 [DEBUG] [Thread-132812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:20:04.255 [DEBUG] [Thread-132812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:20:04.255 [DEBUG] [Thread-132812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:20:04.280 [INFO] [Thread-132812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:20:04.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:20:05.062 [DEBUG] [Thread-132812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:20:05.063 [DEBUG] [Thread-132812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:20:05.063 [DEBUG] [Thread-132812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:20:05.103 [DEBUG] [Thread-132812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:20:05.104 [DEBUG] [Thread-132812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:20:05.107 [DEBUG] [Thread-132812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:20:05.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:20:05.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:20:05.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:20:05.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:20:05.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:20:05.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:20:05.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:20:05.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:20:05.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:20:05.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.638683 -999.00  +22.40  23.46     53  +12.40 1 3 1 1 1   887    0 8.58 -69.09 ----- 17.2 23.5 302.8 31.4 24.4 -9.7 24.4 -9.8 23.9 -9.5 24.3 -8.5
2026-02-11T17:20:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:20:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:20:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.638683
2026-02-11T17:20:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:20:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:20:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:20:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:20:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:20:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:19:33', tmtdew=12.49, humidity=45.32, cloud=0.0, wind=26.5, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:19:42.211', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:20:05.136 [DEBUG] [Thread-132812] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:20:05.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:20:05.231 [DEBUG] [Thread-132815] [transport.py] [_log()] starting thread (client mode): 0xa57e00d0
2026-02-11T17:20:05.231 [DEBUG] [Thread-132815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:20:05.245 [DEBUG] [Thread-132815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:20:05.246 [INFO] [Thread-132815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:20:05.253 [DEBUG] [Thread-132815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:20:05.254 [DEBUG] [Thread-132815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:20:05.255 [DEBUG] [Thread-132815] [transport.py] [_log()] client lang: <none>
2026-02-11T17:20:05.255 [DEBUG] [Thread-132815] [transport.py] [_log()] server lang: <none>
2026-02-11T17:20:05.255 [DEBUG] [Thread-132815] [transport.py] [_log()] kex follows: False
2026-02-11T17:20:05.255 [DEBUG] [Thread-132815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:20:05.255 [DEBUG] [Thread-132815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:20:05.255 [DEBUG] [Thread-132815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:20:05.255 [DEBUG] [Thread-132815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:20:05.256 [DEBUG] [Thread-132815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:20:05.256 [DEBUG] [Thread-132815] [transport.py] [_log()] Compression: none
2026-02-11T17:20:05.256 [DEBUG] [Thread-132815] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:20:05.311 [DEBUG] [Thread-132815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:20:05.312 [DEBUG] [Thread-132815] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:20:05.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:20:05.313 [DEBUG] [Thread-132815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:20:05.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:20:05.371 [DEBUG] [Thread-132815] [transport.py] [_log()] userauth is OK
2026-02-11T17:20:05.371 [DEBUG] [Thread-132815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:20:05.371 [DEBUG] [Thread-132815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:20:05.371 [DEBUG] [Thread-132815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:20:05.371 [DEBUG] [Thread-132815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:20:05.390 [INFO] [Thread-132815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:20:05.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:20:05.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:20:06.225 [DEBUG] [Thread-132815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:20:06.226 [DEBUG] [Thread-132815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:20:06.273 [DEBUG] [Thread-132815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:20:06.273 [DEBUG] [Thread-132815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:20:06.282 [DEBUG] [Thread-132815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:20:06.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:20:06.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:20:06.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
2026-02-11T17:20:06.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:20:06.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:20:06.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:20:06.320 [DEBUG] [Thread-132815] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:20:16.574 [DEBUG] [Thread-132817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:20:27.274 [DEBUG] [Thread-132818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:20:31.626 [DEBUG] [Thread-132819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:20:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:20:36.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:20:36.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:20:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 20, 9), 12.02, 46.85, 0.0, 30.79, 22.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:20:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:20:09
2026-02-11T17:20:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:20:38.758 [DEBUG] [Thread-132820] [transport.py] [_log()] starting thread (client mode): 0xa575bf10
2026-02-11T17:20:38.758 [DEBUG] [Thread-132820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:20:38.779 [DEBUG] [Thread-132820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:20:38.779 [INFO] [Thread-132820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] client lang: <none>
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] server lang: <none>
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] kex follows: False
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] Compression: none
2026-02-11T17:20:38.782 [DEBUG] [Thread-132820] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:20:38.798 [DEBUG] [Thread-132820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:20:38.799 [DEBUG] [Thread-132820] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:20:38.799 [DEBUG] [Thread-132820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:20:38.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:20:38.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:20:38.801 [DEBUG] [Thread-132820] [transport.py] [_log()] userauth is OK
2026-02-11T17:20:38.801 [DEBUG] [Thread-132820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:20:38.802 [DEBUG] [Thread-132820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:20:38.802 [DEBUG] [Thread-132820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:20:38.802 [DEBUG] [Thread-132820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:20:38.838 [INFO] [Thread-132820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:20:38.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:20:39.493 [DEBUG] [Thread-132820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:20:39.494 [DEBUG] [Thread-132820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:20:39.494 [DEBUG] [Thread-132820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:20:39.534 [DEBUG] [Thread-132820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:20:39.535 [DEBUG] [Thread-132820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:20:39.538 [DEBUG] [Thread-132820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:20:39.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:20:39.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:20:39.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:20:39.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:20:39.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:20:39.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:20:39.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:20:39.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:20:39.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:20:39.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.639030 -999.00  +22.40  33.31     53  +12.30 1 3 2 1 1   887    0 8.37 -70.12 ----- 32.4 33.3 278.2 49.3 24.5 -10.4 24.4 -9.5 24.0 -8.2 24.3 -8.7
2026-02-11T17:20:39.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:20:39.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:20:39.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.639030
2026-02-11T17:20:39.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:20:39.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:20:39.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:20:39.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:20:39.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:20:39.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:20:09', tmtdew=12.02, humidity=46.85, cloud=0.0, wind=30.79, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:20:12.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:20:39.566 [DEBUG] [Thread-132820] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:20:39.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:20:39.663 [DEBUG] [Thread-132823] [transport.py] [_log()] starting thread (client mode): 0xa5770190
2026-02-11T17:20:39.663 [DEBUG] [Thread-132823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:20:39.678 [DEBUG] [Thread-132823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:20:39.678 [INFO] [Thread-132823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:20:39.685 [DEBUG] [Thread-132823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] client lang: <none>
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] server lang: <none>
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] kex follows: False
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] Compression: none
2026-02-11T17:20:39.686 [DEBUG] [Thread-132823] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:20:39.746 [DEBUG] [Thread-132823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:20:39.747 [DEBUG] [Thread-132823] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:20:39.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:20:39.748 [DEBUG] [Thread-132823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:20:39.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:20:39.802 [DEBUG] [Thread-132823] [transport.py] [_log()] userauth is OK
2026-02-11T17:20:39.802 [DEBUG] [Thread-132823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:20:39.803 [DEBUG] [Thread-132823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:20:39.803 [DEBUG] [Thread-132823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:20:39.803 [DEBUG] [Thread-132823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:20:39.821 [INFO] [Thread-132823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:20:39.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:20:39.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:20:40.643 [DEBUG] [Thread-132823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:20:40.643 [DEBUG] [Thread-132823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:20:40.691 [DEBUG] [Thread-132823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:20:40.692 [DEBUG] [Thread-132823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:20:40.701 [DEBUG] [Thread-132823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:20:40.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:20:40.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:20:40.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:20:40.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:20:40.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:20:40.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:20:40.737 [DEBUG] [Thread-132823] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:20:46.663 [DEBUG] [Thread-132825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:20:49.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:20:49.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:01.719 [DEBUG] [Thread-132826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:10.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:21:10.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:21:10.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:21:12.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 20, 45), 12.03, 46.43, 0.0, 31.94, 22.78, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:21:12.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:20:45
2026-02-11T17:21:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:21:13.128 [DEBUG] [Thread-132827] [transport.py] [_log()] starting thread (client mode): 0x9eb06020
2026-02-11T17:21:13.129 [DEBUG] [Thread-132827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:21:13.151 [DEBUG] [Thread-132827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:21:13.151 [INFO] [Thread-132827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:21:13.155 [DEBUG] [Thread-132827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:21:13.155 [DEBUG] [Thread-132827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:21:13.155 [DEBUG] [Thread-132827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:21:13.155 [DEBUG] [Thread-132827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:13.155 [DEBUG] [Thread-132827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:13.155 [DEBUG] [Thread-132827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:13.155 [DEBUG] [Thread-132827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] client lang: <none>
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] server lang: <none>
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] kex follows: False
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] Compression: none
2026-02-11T17:21:13.156 [DEBUG] [Thread-132827] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:21:13.173 [DEBUG] [Thread-132827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:21:13.173 [DEBUG] [Thread-132827] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:21:13.174 [DEBUG] [Thread-132827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:21:13.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:21:13.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:21:13.175 [DEBUG] [Thread-132827] [transport.py] [_log()] userauth is OK
2026-02-11T17:21:13.175 [DEBUG] [Thread-132827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:21:13.176 [DEBUG] [Thread-132827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:21:13.176 [DEBUG] [Thread-132827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:21:13.176 [DEBUG] [Thread-132827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:21:13.199 [INFO] [Thread-132827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:21:13.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:21:13.841 [DEBUG] [Thread-132827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:21:13.842 [DEBUG] [Thread-132827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:21:13.842 [DEBUG] [Thread-132827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:21:13.883 [DEBUG] [Thread-132827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:21:13.883 [DEBUG] [Thread-132827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:21:13.885 [DEBUG] [Thread-132827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:21:13.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:21:13.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:21:13.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:21:13.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:21:13.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:21:13.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:21:13.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:21:13.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:21:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:21:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.639377 -999.00  +22.30  32.82     52  +12.30 1 3 2 1 1   887    0 8.64 -71.10 ----- 29.0 32.8 288.0 40.1 24.4 -10.3 24.4 -9.3 24.0 -8.7 24.3 -8.7
2026-02-11T17:21:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:21:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:21:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.639377
2026-02-11T17:21:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:21:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:21:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:21:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:21:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:21:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:20:45', tmtdew=12.03, humidity=46.43, cloud=0.0, wind=31.94, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:20:42.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:21:13.909 [DEBUG] [Thread-132827] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:21:13.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:21:14.000 [DEBUG] [Thread-132830] [transport.py] [_log()] starting thread (client mode): 0x9eb04250
2026-02-11T17:21:14.001 [DEBUG] [Thread-132830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:21:14.015 [DEBUG] [Thread-132830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:21:14.016 [INFO] [Thread-132830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] client lang: <none>
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] server lang: <none>
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] kex follows: False
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:21:14.023 [DEBUG] [Thread-132830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:21:14.024 [DEBUG] [Thread-132830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:21:14.024 [DEBUG] [Thread-132830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:21:14.024 [DEBUG] [Thread-132830] [transport.py] [_log()] Compression: none
2026-02-11T17:21:14.024 [DEBUG] [Thread-132830] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:21:14.301 [DEBUG] [Thread-132830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:21:14.301 [DEBUG] [Thread-132830] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:21:14.302 [DEBUG] [Thread-132830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:21:14.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:21:14.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:21:14.318 [DEBUG] [Thread-132830] [transport.py] [_log()] userauth is OK
2026-02-11T17:21:14.318 [DEBUG] [Thread-132830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:21:14.318 [DEBUG] [Thread-132830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:21:14.318 [DEBUG] [Thread-132830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:21:14.318 [DEBUG] [Thread-132830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:21:14.346 [INFO] [Thread-132830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:21:14.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:21:14.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:21:15.197 [DEBUG] [Thread-132830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:21:15.198 [DEBUG] [Thread-132830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:21:15.247 [DEBUG] [Thread-132830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:21:15.247 [DEBUG] [Thread-132830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:21:15.261 [DEBUG] [Thread-132830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:21:15.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:21:15.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:21:15.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:21:15.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:21:15.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:21:15.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:21:15.298 [DEBUG] [Thread-132830] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:21:16.760 [DEBUG] [Thread-132832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:27.339 [DEBUG] [Thread-132833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:31.808 [DEBUG] [Thread-132834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:45.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:21:45.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:21:45.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:21:46.841 [DEBUG] [Thread-132835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:47.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 21, 20), 12.0, 46.49, 0.0, 34.0, 22.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:21:47.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:21:20
2026-02-11T17:21:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:21:48.163 [DEBUG] [Thread-132836] [transport.py] [_log()] starting thread (client mode): 0xa57c0f10
2026-02-11T17:21:48.164 [DEBUG] [Thread-132836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:21:48.183 [DEBUG] [Thread-132836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:21:48.183 [INFO] [Thread-132836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] client lang: <none>
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] server lang: <none>
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] kex follows: False
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:21:48.186 [DEBUG] [Thread-132836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:21:48.187 [DEBUG] [Thread-132836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:21:48.187 [DEBUG] [Thread-132836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:21:48.187 [DEBUG] [Thread-132836] [transport.py] [_log()] Compression: none
2026-02-11T17:21:48.187 [DEBUG] [Thread-132836] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:21:48.201 [DEBUG] [Thread-132836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:21:48.201 [DEBUG] [Thread-132836] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:21:48.202 [DEBUG] [Thread-132836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:21:48.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:21:48.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:21:48.202 [DEBUG] [Thread-132836] [transport.py] [_log()] userauth is OK
2026-02-11T17:21:48.202 [DEBUG] [Thread-132836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:21:48.202 [DEBUG] [Thread-132836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:21:48.202 [DEBUG] [Thread-132836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:21:48.202 [DEBUG] [Thread-132836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:21:48.219 [INFO] [Thread-132836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:21:48.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:21:48.882 [DEBUG] [Thread-132836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:21:48.883 [DEBUG] [Thread-132836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:21:48.883 [DEBUG] [Thread-132836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:21:48.924 [DEBUG] [Thread-132836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:21:48.924 [DEBUG] [Thread-132836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:21:48.927 [DEBUG] [Thread-132836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:21:48.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:21:48.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:21:48.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:21:48.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:21:48.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:21:48.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:21:48.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:21:48.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:21:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:21:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.639725 -999.00  +22.30  30.77     53  +12.30 1 3 2 1 1   887    0 8.61 -64.46 ----- 30.9 30.8 300.0 39.4 24.4 -9.3 24.4 -9.3 23.9 -9.1 24.4 -8.5
2026-02-11T17:21:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:21:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:21:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.639725
2026-02-11T17:21:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:21:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:21:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:21:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:21:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:21:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:21:20', tmtdew=12.0, humidity=46.49, cloud=0.0, wind=34.0, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:21:12.240', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:21:48.955 [DEBUG] [Thread-132836] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:21:49.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:21:49.051 [DEBUG] [Thread-132839] [transport.py] [_log()] starting thread (client mode): 0xa57e0670
2026-02-11T17:21:49.051 [DEBUG] [Thread-132839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:21:49.065 [DEBUG] [Thread-132839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:21:49.065 [INFO] [Thread-132839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:21:49.072 [DEBUG] [Thread-132839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:21:49.073 [DEBUG] [Thread-132839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:21:49.073 [DEBUG] [Thread-132839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:21:49.073 [DEBUG] [Thread-132839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:49.073 [DEBUG] [Thread-132839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:21:49.073 [DEBUG] [Thread-132839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:49.073 [DEBUG] [Thread-132839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:21:49.073 [DEBUG] [Thread-132839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:21:49.074 [DEBUG] [Thread-132839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:21:49.074 [DEBUG] [Thread-132839] [transport.py] [_log()] client lang: <none>
2026-02-11T17:21:49.074 [DEBUG] [Thread-132839] [transport.py] [_log()] server lang: <none>
2026-02-11T17:21:49.074 [DEBUG] [Thread-132839] [transport.py] [_log()] kex follows: False
2026-02-11T17:21:49.074 [DEBUG] [Thread-132839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:21:49.074 [DEBUG] [Thread-132839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:21:49.074 [DEBUG] [Thread-132839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:21:49.075 [DEBUG] [Thread-132839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:21:49.075 [DEBUG] [Thread-132839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:21:49.075 [DEBUG] [Thread-132839] [transport.py] [_log()] Compression: none
2026-02-11T17:21:49.075 [DEBUG] [Thread-132839] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:21:49.133 [DEBUG] [Thread-132839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:21:49.134 [DEBUG] [Thread-132839] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:21:49.134 [DEBUG] [Thread-132839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:21:49.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:21:49.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:21:49.193 [DEBUG] [Thread-132839] [transport.py] [_log()] userauth is OK
2026-02-11T17:21:49.193 [DEBUG] [Thread-132839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:21:49.193 [DEBUG] [Thread-132839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:21:49.194 [DEBUG] [Thread-132839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:21:49.194 [DEBUG] [Thread-132839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:21:49.213 [INFO] [Thread-132839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:21:49.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:21:49.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:21:49.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:49.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:21:50.035 [DEBUG] [Thread-132839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:21:50.036 [DEBUG] [Thread-132839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:21:50.083 [DEBUG] [Thread-132839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:21:50.083 [DEBUG] [Thread-132839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:21:50.092 [DEBUG] [Thread-132839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:21:50.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:21:50.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:21: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
2026-02-11T17:21:50.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:21:50.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:21:50.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:21:50.129 [DEBUG] [Thread-132839] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:22:01.874 [DEBUG] [Thread-132841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:22:16.925 [DEBUG] [Thread-132842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:22:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:22:20.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:22:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:22:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 21, 56), 12.04, 46.76, 0.0, 33.67, 22.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:22:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:21:56
2026-02-11T17:22:22.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:22:22.593 [DEBUG] [Thread-132843] [transport.py] [_log()] starting thread (client mode): 0x9eb07310
2026-02-11T17:22:22.593 [DEBUG] [Thread-132843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:22:22.613 [DEBUG] [Thread-132843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:22:22.613 [INFO] [Thread-132843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:22:22.623 [DEBUG] [Thread-132843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:22:22.623 [DEBUG] [Thread-132843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:22:22.623 [DEBUG] [Thread-132843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:22:22.623 [DEBUG] [Thread-132843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:22.623 [DEBUG] [Thread-132843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:22.623 [DEBUG] [Thread-132843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:22.623 [DEBUG] [Thread-132843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] client lang: <none>
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] server lang: <none>
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] kex follows: False
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] Compression: none
2026-02-11T17:22:22.624 [DEBUG] [Thread-132843] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:22:22.643 [DEBUG] [Thread-132843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:22:22.644 [DEBUG] [Thread-132843] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:22:22.644 [DEBUG] [Thread-132843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:22:22.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:22:22.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:22:22.646 [DEBUG] [Thread-132843] [transport.py] [_log()] userauth is OK
2026-02-11T17:22:22.647 [DEBUG] [Thread-132843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:22:22.647 [DEBUG] [Thread-132843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:22:22.647 [DEBUG] [Thread-132843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:22:22.647 [DEBUG] [Thread-132843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:22:22.672 [INFO] [Thread-132843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:22:22.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:22:23.292 [DEBUG] [Thread-132843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:22:23.292 [DEBUG] [Thread-132843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:22:23.293 [DEBUG] [Thread-132843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:22:23.334 [DEBUG] [Thread-132843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:22:23.334 [DEBUG] [Thread-132843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:22:23.336 [DEBUG] [Thread-132843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:22:23.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:22:23.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:22:23.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:22:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:22:23.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:22:23.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:22:23.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:22:23.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:22:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:22:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.640072 -999.00  +22.40  26.94     52  +12.40 1 3 1 1 1   887    0 8.69 -61.35 ----- 26.5 26.9 300.2 33.8 24.6 -8.9 24.4 -8.5 24.1 -7.9 24.4 -7.6
2026-02-11T17:22:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:22:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:22:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.640072
2026-02-11T17:22:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:22:23.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:22:23.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:22:23.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:22:23.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:22:23.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:21:56', tmtdew=12.04, humidity=46.76, cloud=0.0, wind=33.67, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:21:42.221', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:22:23.363 [DEBUG] [Thread-132843] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:22:23.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:22:23.459 [DEBUG] [Thread-132846] [transport.py] [_log()] starting thread (client mode): 0xa2dc06d0
2026-02-11T17:22:23.459 [DEBUG] [Thread-132846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:22:23.473 [DEBUG] [Thread-132846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:22:23.474 [INFO] [Thread-132846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:22:23.481 [DEBUG] [Thread-132846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] client lang: <none>
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] server lang: <none>
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] kex follows: False
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:22:23.482 [DEBUG] [Thread-132846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:22:23.483 [DEBUG] [Thread-132846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:22:23.483 [DEBUG] [Thread-132846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:22:23.483 [DEBUG] [Thread-132846] [transport.py] [_log()] Compression: none
2026-02-11T17:22:23.483 [DEBUG] [Thread-132846] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:22:23.547 [DEBUG] [Thread-132846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:22:23.548 [DEBUG] [Thread-132846] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:22:23.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:22:23.549 [DEBUG] [Thread-132846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:22:23.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:22:23.611 [DEBUG] [Thread-132846] [transport.py] [_log()] userauth is OK
2026-02-11T17:22:23.611 [DEBUG] [Thread-132846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:22:23.612 [DEBUG] [Thread-132846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:22:23.612 [DEBUG] [Thread-132846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:22:23.612 [DEBUG] [Thread-132846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:22:23.634 [INFO] [Thread-132846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:22:23.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:22:23.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:22:24.446 [DEBUG] [Thread-132846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:22:24.446 [DEBUG] [Thread-132846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:22:24.494 [DEBUG] [Thread-132846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:22:24.495 [DEBUG] [Thread-132846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:22:24.504 [DEBUG] [Thread-132846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:22:24.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:22:24.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:22:24.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:22:24.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:22:24.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:22:24.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:22:24.540 [DEBUG] [Thread-132846] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:22:27.394 [DEBUG] [Thread-132848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:22:31.961 [DEBUG] [Thread-132849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:22:47.020 [DEBUG] [Thread-132850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:22:49.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:22:49.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:22:54.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:22:54.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:22:54.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:22:56.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 22, 31), 12.0, 46.85, 0.0, 34.79, 22.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:22:56.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:22:31
2026-02-11T17:22:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:22:56.861 [DEBUG] [Thread-132851] [transport.py] [_log()] starting thread (client mode): 0xa5770d30
2026-02-11T17:22:56.861 [DEBUG] [Thread-132851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:22:56.881 [DEBUG] [Thread-132851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:22:56.882 [INFO] [Thread-132851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:22:56.884 [DEBUG] [Thread-132851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:22:56.884 [DEBUG] [Thread-132851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] client lang: <none>
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] server lang: <none>
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] kex follows: False
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] Compression: none
2026-02-11T17:22:56.885 [DEBUG] [Thread-132851] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:22:56.901 [DEBUG] [Thread-132851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:22:56.902 [DEBUG] [Thread-132851] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:22:56.902 [DEBUG] [Thread-132851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:22:56.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:22:56.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:22:56.904 [DEBUG] [Thread-132851] [transport.py] [_log()] userauth is OK
2026-02-11T17:22:56.905 [DEBUG] [Thread-132851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:22:56.905 [DEBUG] [Thread-132851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:22:56.905 [DEBUG] [Thread-132851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:22:56.905 [DEBUG] [Thread-132851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:22:56.931 [INFO] [Thread-132851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:22:56.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:22:57.573 [DEBUG] [Thread-132851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:22:57.573 [DEBUG] [Thread-132851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:22:57.574 [DEBUG] [Thread-132851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:22:57.614 [DEBUG] [Thread-132851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:22:57.615 [DEBUG] [Thread-132851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:22:57.618 [DEBUG] [Thread-132851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:22:57.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:22:57.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:22:57.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:22:57.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:22:57.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:22:57.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:22:57.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:22:57.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:22:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:22:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.640419 -999.00  +22.60  31.81     52  +12.40 1 3 2 1 1   887    0 8.61 -61.72 ----- 33.7 31.8 298.8 38.3 24.9 -7.7 24.6 -7.5 24.3 -5.6 24.9 -5.9
2026-02-11T17:22:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:22:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:22:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.640419
2026-02-11T17:22:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:22:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:22:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:22:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:22:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:22:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:22:31', tmtdew=12.0, humidity=46.85, cloud=0.0, wind=34.79, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:22:12.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:22:57.647 [DEBUG] [Thread-132851] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:22:57.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:22:57.742 [DEBUG] [Thread-132854] [transport.py] [_log()] starting thread (client mode): 0xa57c3e80
2026-02-11T17:22:57.742 [DEBUG] [Thread-132854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:22:57.758 [DEBUG] [Thread-132854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:22:57.758 [INFO] [Thread-132854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:22:57.765 [DEBUG] [Thread-132854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] client lang: <none>
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] server lang: <none>
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] kex follows: False
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:22:57.766 [DEBUG] [Thread-132854] [transport.py] [_log()] Compression: none
2026-02-11T17:22:57.767 [DEBUG] [Thread-132854] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:22:57.824 [DEBUG] [Thread-132854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:22:57.824 [DEBUG] [Thread-132854] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:22:57.825 [DEBUG] [Thread-132854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:22:57.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:22:57.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:22:57.880 [DEBUG] [Thread-132854] [transport.py] [_log()] userauth is OK
2026-02-11T17:22:57.880 [DEBUG] [Thread-132854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:22:57.880 [DEBUG] [Thread-132854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:22:57.880 [DEBUG] [Thread-132854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:22:57.880 [DEBUG] [Thread-132854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:22:57.899 [INFO] [Thread-132854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:22:57.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:22:57.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:22:58.746 [DEBUG] [Thread-132854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:22:58.746 [DEBUG] [Thread-132854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:22:58.795 [DEBUG] [Thread-132854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:22:58.796 [DEBUG] [Thread-132854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:22:58.806 [DEBUG] [Thread-132854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:22:58.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:22:58.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:22:58.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:22:58.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:22:58.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:22:58.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:22:58.844 [DEBUG] [Thread-132854] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:23:02.056 [DEBUG] [Thread-132856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:23:17.108 [DEBUG] [Thread-132857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:23:27.448 [DEBUG] [Thread-132858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:23:28.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:23:28.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:23:28.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:23:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 23, 8), 12.04, 46.76, 0.0, 32.68, 22.8, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:23:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:23:08
2026-02-11T17:23:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:23:31.550 [DEBUG] [Thread-132859] [transport.py] [_log()] starting thread (client mode): 0xa57d6dd0
2026-02-11T17:23:31.550 [DEBUG] [Thread-132859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:23:31.571 [DEBUG] [Thread-132859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:23:31.571 [INFO] [Thread-132859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] client lang: <none>
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] server lang: <none>
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] kex follows: False
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:23:31.574 [DEBUG] [Thread-132859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:23:31.575 [DEBUG] [Thread-132859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:23:31.575 [DEBUG] [Thread-132859] [transport.py] [_log()] Compression: none
2026-02-11T17:23:31.575 [DEBUG] [Thread-132859] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:23:31.594 [DEBUG] [Thread-132859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:23:31.594 [DEBUG] [Thread-132859] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:23:31.595 [DEBUG] [Thread-132859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:23:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:23:31.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:23:31.597 [DEBUG] [Thread-132859] [transport.py] [_log()] userauth is OK
2026-02-11T17:23:31.597 [DEBUG] [Thread-132859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:23:31.597 [DEBUG] [Thread-132859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:23:31.597 [DEBUG] [Thread-132859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:23:31.598 [DEBUG] [Thread-132859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:23:31.622 [INFO] [Thread-132859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:23:31.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:23:32.144 [DEBUG] [Thread-132861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:23:32.269 [DEBUG] [Thread-132859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:23:32.269 [DEBUG] [Thread-132859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:23:32.270 [DEBUG] [Thread-132859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:23:32.310 [DEBUG] [Thread-132859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:23:32.311 [DEBUG] [Thread-132859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:23:32.314 [DEBUG] [Thread-132859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:23:32.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:23:32.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:23:32.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:23:32.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:23:32.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:23:32.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:23:32.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:23:32.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:23:32.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:23:32.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.641113 -999.00  +22.90  25.74     52  +12.60 1 3 1 1 1   887    0 8.78 -57.47 ----- 22.8 25.7 287.3 39.4 25.1 -9.1 24.9 -7.7 24.9 -6.5 25.3 -8.8
2026-02-11T17:23:32.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:23:32.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:23:32.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.641113
2026-02-11T17:23:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:23:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:23:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:23:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:23:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:23:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:23:08', tmtdew=12.04, humidity=46.76, cloud=0.0, wind=32.68, temperature=22.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:23:12.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:23:32.340 [DEBUG] [Thread-132859] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:23:32.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:23:32.436 [DEBUG] [Thread-132863] [transport.py] [_log()] starting thread (client mode): 0xa2d56d70
2026-02-11T17:23:32.437 [DEBUG] [Thread-132863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:23:32.452 [DEBUG] [Thread-132863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:23:32.452 [INFO] [Thread-132863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] client lang: <none>
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] server lang: <none>
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] kex follows: False
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:23:32.464 [DEBUG] [Thread-132863] [transport.py] [_log()] Compression: none
2026-02-11T17:23:32.465 [DEBUG] [Thread-132863] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:23:32.523 [DEBUG] [Thread-132863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:23:32.524 [DEBUG] [Thread-132863] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:23:32.524 [DEBUG] [Thread-132863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:23:32.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:23:32.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:23:32.579 [DEBUG] [Thread-132863] [transport.py] [_log()] userauth is OK
2026-02-11T17:23:32.579 [DEBUG] [Thread-132863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:23:32.580 [DEBUG] [Thread-132863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:23:32.580 [DEBUG] [Thread-132863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:23:32.580 [DEBUG] [Thread-132863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:23:32.600 [INFO] [Thread-132863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:23:32.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:23:32.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:23:33.418 [DEBUG] [Thread-132863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:23:33.418 [DEBUG] [Thread-132863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:23:33.466 [DEBUG] [Thread-132863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:23:33.467 [DEBUG] [Thread-132863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:23:33.476 [DEBUG] [Thread-132863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:23:33.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:23: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')
2026-02-11T17:23: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
2026-02-11T17:23:33.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:23:33.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:23:33.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:23:33.514 [DEBUG] [Thread-132863] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:23:47.178 [DEBUG] [Thread-132865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:23:50.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:23:50.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:24:02.229 [DEBUG] [Thread-132866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:24:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:24:03.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:24:03.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:24:05.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 23, 43), 12.11, 46.21, 0.0, 37.49, 22.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:24:05.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:23:43
2026-02-11T17:24:05.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:24:05.919 [DEBUG] [Thread-132867] [transport.py] [_log()] starting thread (client mode): 0xa57d5390
2026-02-11T17:24:05.919 [DEBUG] [Thread-132867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:24:05.939 [DEBUG] [Thread-132867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:24:05.940 [INFO] [Thread-132867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:24:05.942 [DEBUG] [Thread-132867] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] client lang: <none>
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] server lang: <none>
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] kex follows: False
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] Compression: none
2026-02-11T17:24:05.943 [DEBUG] [Thread-132867] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:24:05.962 [DEBUG] [Thread-132867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:24:05.963 [DEBUG] [Thread-132867] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:24:05.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:24:05.964 [DEBUG] [Thread-132867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:24:05.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:24:06.004 [DEBUG] [Thread-132867] [transport.py] [_log()] userauth is OK
2026-02-11T17:24:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:24:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:24:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:24:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:24:06.025 [INFO] [Thread-132867] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:24:06.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:24:06.835 [DEBUG] [Thread-132867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:24:06.835 [DEBUG] [Thread-132867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:24:06.835 [DEBUG] [Thread-132867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:24:06.876 [DEBUG] [Thread-132867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:24:06.876 [DEBUG] [Thread-132867] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:24:06.879 [DEBUG] [Thread-132867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:24:06.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:24:06.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:24:06.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:24:06.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:24:06.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:24:06.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:24:06.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:24:06.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:24:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:24:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.641461 -999.00  +22.70  31.70     52  +12.40 1 3 2 1 1   887    0 8.55 -56.61 ----- 28.4 31.7 299.2 39.7 25.0 -9.6 25.0 -9.1 25.0 -8.5 25.4 -9.5
2026-02-11T17:24:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:24:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:24:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.641461
2026-02-11T17:24:06.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:24:06.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:24:06.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:24:06.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:24:06.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:24:06.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:23:43', tmtdew=12.11, humidity=46.21, cloud=0.0, wind=37.49, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:23:42.230', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:24:06.903 [DEBUG] [Thread-132867] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:24:06.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:24:07.002 [DEBUG] [Thread-132870] [transport.py] [_log()] starting thread (client mode): 0xa57d47f0
2026-02-11T17:24:07.002 [DEBUG] [Thread-132870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:24:07.019 [DEBUG] [Thread-132870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:24:07.019 [INFO] [Thread-132870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:24:07.027 [DEBUG] [Thread-132870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] client lang: <none>
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] server lang: <none>
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] kex follows: False
2026-02-11T17:24:07.028 [DEBUG] [Thread-132870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:24:07.029 [DEBUG] [Thread-132870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:24:07.029 [DEBUG] [Thread-132870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:24:07.029 [DEBUG] [Thread-132870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:24:07.029 [DEBUG] [Thread-132870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:24:07.029 [DEBUG] [Thread-132870] [transport.py] [_log()] Compression: none
2026-02-11T17:24:07.029 [DEBUG] [Thread-132870] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:24:07.092 [DEBUG] [Thread-132870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:24:07.093 [DEBUG] [Thread-132870] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:24:07.093 [DEBUG] [Thread-132870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:24:07.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:24:07.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:24:07.162 [DEBUG] [Thread-132870] [transport.py] [_log()] userauth is OK
2026-02-11T17:24:07.162 [DEBUG] [Thread-132870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:24:07.162 [DEBUG] [Thread-132870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:24:07.162 [DEBUG] [Thread-132870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:24:07.162 [DEBUG] [Thread-132870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:24:07.178 [INFO] [Thread-132870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:24:07.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:24:07.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:24:08.047 [DEBUG] [Thread-132870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:24:08.047 [DEBUG] [Thread-132870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:24:08.096 [DEBUG] [Thread-132870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:24:08.096 [DEBUG] [Thread-132870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:24:08.105 [DEBUG] [Thread-132870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:24:08.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:24:08.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:24:08.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
2026-02-11T17:24:08.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:24:08.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:24:08.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:24:08.141 [DEBUG] [Thread-132870] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:24:17.264 [DEBUG] [Thread-132872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:24:27.496 [DEBUG] [Thread-132873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:24:32.320 [DEBUG] [Thread-132874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:24:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:24:38.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:24:38.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:24:39.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 24, 18), 12.17, 46.08, 0.0, 31.48, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:24:39.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:24:18
2026-02-11T17:24:40.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:24:40.473 [DEBUG] [Thread-132875] [transport.py] [_log()] starting thread (client mode): 0xa57d7910
2026-02-11T17:24:40.474 [DEBUG] [Thread-132875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:24:40.494 [DEBUG] [Thread-132875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:24:40.494 [INFO] [Thread-132875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:24:40.497 [DEBUG] [Thread-132875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:24:40.497 [DEBUG] [Thread-132875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:24:40.497 [DEBUG] [Thread-132875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:24:40.497 [DEBUG] [Thread-132875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:40.497 [DEBUG] [Thread-132875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] client lang: <none>
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] server lang: <none>
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] kex follows: False
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] Compression: none
2026-02-11T17:24:40.498 [DEBUG] [Thread-132875] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:24:40.514 [DEBUG] [Thread-132875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:24:40.514 [DEBUG] [Thread-132875] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:24:40.515 [DEBUG] [Thread-132875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:24:40.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:24:40.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:24:40.517 [DEBUG] [Thread-132875] [transport.py] [_log()] userauth is OK
2026-02-11T17:24:40.518 [DEBUG] [Thread-132875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:24:40.518 [DEBUG] [Thread-132875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:24:40.518 [DEBUG] [Thread-132875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:24:40.518 [DEBUG] [Thread-132875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:24:40.542 [INFO] [Thread-132875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:24:40.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:24:41.163 [DEBUG] [Thread-132875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:24:41.164 [DEBUG] [Thread-132875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:24:41.164 [DEBUG] [Thread-132875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:24:41.204 [DEBUG] [Thread-132875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:24:41.205 [DEBUG] [Thread-132875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:24:41.208 [DEBUG] [Thread-132875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:24:41.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:24:41.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:24:41.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:24:41.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:24:41.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:24:41.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:24:41.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:24:41.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:24:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:24:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.641808 -999.00  +22.70  29.19     52  +12.50 1 3 1 1 1   887    0 8.92 -56.52 ----- 26.3 29.2 278.4 35.9 25.0 -9.6 25.0 -9.0 24.9 -9.3 25.3 -10.1
2026-02-11T17:24:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:24:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:24:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.641808
2026-02-11T17:24:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:24:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:24:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:24:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:24:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:24:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:24:18', tmtdew=12.17, humidity=46.08, cloud=0.0, wind=31.48, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:24:12.211', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:24:41.234 [DEBUG] [Thread-132875] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:24:41.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:24:41.330 [DEBUG] [Thread-132878] [transport.py] [_log()] starting thread (client mode): 0xa2dc3940
2026-02-11T17:24:41.330 [DEBUG] [Thread-132878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:24:41.347 [DEBUG] [Thread-132878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:24:41.348 [INFO] [Thread-132878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:24:41.355 [DEBUG] [Thread-132878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:24:41.355 [DEBUG] [Thread-132878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] client lang: <none>
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] server lang: <none>
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] kex follows: False
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] Compression: none
2026-02-11T17:24:41.356 [DEBUG] [Thread-132878] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:24:41.415 [DEBUG] [Thread-132878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:24:41.415 [DEBUG] [Thread-132878] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:24:41.416 [DEBUG] [Thread-132878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:24:41.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:24:41.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:24:41.474 [DEBUG] [Thread-132878] [transport.py] [_log()] userauth is OK
2026-02-11T17:24:41.475 [DEBUG] [Thread-132878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:24:41.475 [DEBUG] [Thread-132878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:24:41.475 [DEBUG] [Thread-132878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:24:41.475 [DEBUG] [Thread-132878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:24:41.494 [INFO] [Thread-132878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:24:41.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:24:41.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:24:42.308 [DEBUG] [Thread-132878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:24:42.309 [DEBUG] [Thread-132878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:24:42.356 [DEBUG] [Thread-132878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:24:42.357 [DEBUG] [Thread-132878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:24:42.366 [DEBUG] [Thread-132878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:24:42.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:24:42.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:24:42.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:24:42.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:24:42.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:24:42.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:24:42.402 [DEBUG] [Thread-132878] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:24:47.357 [DEBUG] [Thread-132880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:24:50.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:24:50.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:02.410 [DEBUG] [Thread-132881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:12.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:25:12.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:25:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:25:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 24, 55), 12.12, 46.3, 0.0, 28.73, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:25:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:24:55
2026-02-11T17:25:14.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:25:14.747 [DEBUG] [Thread-132882] [transport.py] [_log()] starting thread (client mode): 0xa57d6aa0
2026-02-11T17:25:14.747 [DEBUG] [Thread-132882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:25:14.769 [DEBUG] [Thread-132882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:25:14.769 [INFO] [Thread-132882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:25:14.772 [DEBUG] [Thread-132882] [transport.py] [_log()] client lang: <none>
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] server lang: <none>
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] kex follows: False
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] Compression: none
2026-02-11T17:25:14.773 [DEBUG] [Thread-132882] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:25:14.792 [DEBUG] [Thread-132882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:25:14.792 [DEBUG] [Thread-132882] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:25:14.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:25:14.793 [DEBUG] [Thread-132882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:25:14.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:25:14.796 [DEBUG] [Thread-132882] [transport.py] [_log()] userauth is OK
2026-02-11T17:25:14.796 [DEBUG] [Thread-132882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:25:14.796 [DEBUG] [Thread-132882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:25:14.796 [DEBUG] [Thread-132882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:25:14.796 [DEBUG] [Thread-132882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:25:14.811 [INFO] [Thread-132882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:25:14.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:25:15.361 [DEBUG] [Thread-132882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:25:15.362 [DEBUG] [Thread-132882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:25:15.362 [DEBUG] [Thread-132882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:25:15.402 [DEBUG] [Thread-132882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:25:15.403 [DEBUG] [Thread-132882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:25:15.406 [DEBUG] [Thread-132882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:25:15.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:25:15.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:25:15.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:25:15.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:25:15.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:25:15.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:25:15.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:25:15.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:25:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:25:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.642155 -999.00  +22.60  26.45     52  +12.50 1 2 1 1 1   887    0 8.66 -52.54 ----- 25.3 26.4 291.4 33.3 25.0 -9.7 24.9 -9.6 24.6 -10.7 25.2 -10.2
2026-02-11T17:25:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:25:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:25:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.642155
2026-02-11T17:25:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:25:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:25:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:25:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:25:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:25:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:24:55', tmtdew=12.12, humidity=46.3, cloud=0.0, wind=28.73, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:24:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:25:15.438 [DEBUG] [Thread-132882] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:25:15.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:25:15.546 [DEBUG] [Thread-132885] [transport.py] [_log()] starting thread (client mode): 0xa2d562f0
2026-02-11T17:25:15.546 [DEBUG] [Thread-132885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:25:15.563 [DEBUG] [Thread-132885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:25:15.564 [INFO] [Thread-132885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:25:15.574 [DEBUG] [Thread-132885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:25:15.574 [DEBUG] [Thread-132885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:25:15.575 [DEBUG] [Thread-132885] [transport.py] [_log()] client lang: <none>
2026-02-11T17:25:15.576 [DEBUG] [Thread-132885] [transport.py] [_log()] server lang: <none>
2026-02-11T17:25:15.576 [DEBUG] [Thread-132885] [transport.py] [_log()] kex follows: False
2026-02-11T17:25:15.576 [DEBUG] [Thread-132885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:25:15.576 [DEBUG] [Thread-132885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:25:15.576 [DEBUG] [Thread-132885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:25:15.576 [DEBUG] [Thread-132885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:25:15.576 [DEBUG] [Thread-132885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:25:15.577 [DEBUG] [Thread-132885] [transport.py] [_log()] Compression: none
2026-02-11T17:25:15.577 [DEBUG] [Thread-132885] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:25:15.636 [DEBUG] [Thread-132885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:25:15.637 [DEBUG] [Thread-132885] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:25:15.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:25:15.639 [DEBUG] [Thread-132885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:25:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:25:15.697 [DEBUG] [Thread-132885] [transport.py] [_log()] userauth is OK
2026-02-11T17:25:15.698 [DEBUG] [Thread-132885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:25:15.698 [DEBUG] [Thread-132885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:25:15.698 [DEBUG] [Thread-132885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:25:15.698 [DEBUG] [Thread-132885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:25:15.717 [INFO] [Thread-132885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:25:15.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:25:15.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:25:16.562 [DEBUG] [Thread-132885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:25:16.563 [DEBUG] [Thread-132885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:25:16.610 [DEBUG] [Thread-132885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:25:16.611 [DEBUG] [Thread-132885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:25:16.620 [DEBUG] [Thread-132885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:25:16.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:25:16.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:25:16.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:25:16.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:25:16.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:25:16.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:25:16.657 [DEBUG] [Thread-132885] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:25:17.449 [DEBUG] [Thread-132887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:27.535 [DEBUG] [Thread-132888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:32.504 [DEBUG] [Thread-132889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:25:46.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:25:46.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
2026-02-11T17:25:47.536 [DEBUG] [Thread-132890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 25, 30), 12.22, 46.05, 0.0, 32.39, 23.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:25:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:25:30
2026-02-11T17:25:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:25:49.654 [DEBUG] [Thread-132891] [transport.py] [_log()] starting thread (client mode): 0xa2d56560
2026-02-11T17:25:49.654 [DEBUG] [Thread-132891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:25:49.674 [DEBUG] [Thread-132891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:25:49.674 [INFO] [Thread-132891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] client lang: <none>
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] server lang: <none>
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] kex follows: False
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:25:49.677 [DEBUG] [Thread-132891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:25:49.678 [DEBUG] [Thread-132891] [transport.py] [_log()] Compression: none
2026-02-11T17:25:49.678 [DEBUG] [Thread-132891] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:25:49.686 [DEBUG] [Thread-132891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:25:49.687 [DEBUG] [Thread-132891] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:25:49.687 [DEBUG] [Thread-132891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:25:49.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:25:49.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:25:49.689 [DEBUG] [Thread-132891] [transport.py] [_log()] userauth is OK
2026-02-11T17:25:49.689 [DEBUG] [Thread-132891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:25:49.689 [DEBUG] [Thread-132891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:25:49.689 [DEBUG] [Thread-132891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:25:49.689 [DEBUG] [Thread-132891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:25:49.708 [INFO] [Thread-132891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:25:49.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:25:50.331 [DEBUG] [Thread-132891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:25:50.332 [DEBUG] [Thread-132891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:25:50.332 [DEBUG] [Thread-132891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:25:50.341 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:50.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:25:50.372 [DEBUG] [Thread-132891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:25:50.372 [DEBUG] [Thread-132891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:25:50.375 [DEBUG] [Thread-132891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:25:50.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:25:50.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:25:50.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:25:50.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:25:50.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:25:50.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:25:50.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:25:50.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:25:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:25:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.642503 -999.00  +22.40  18.37     53  +12.50 1 3 1 1 1   887    0 9.01 -50.35 ----- 20.8 18.4 280.7 25.2 25.0 -9.8 24.9 -9.6 24.8 -9.8 25.1 -10.0
2026-02-11T17:25:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:25:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:25:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.642503
2026-02-11T17:25:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:25:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:25:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:25:50.403 [DEBUG] [Thread-132891] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:25:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:25:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:25:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:25:30', tmtdew=12.22, humidity=46.05, cloud=0.0, wind=32.39, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:25:12.259', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:25:50.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:25:50.500 [DEBUG] [Thread-132894] [transport.py] [_log()] starting thread (client mode): 0xa57d6f50
2026-02-11T17:25:50.501 [DEBUG] [Thread-132894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:25:50.515 [DEBUG] [Thread-132894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:25:50.515 [INFO] [Thread-132894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] client lang: <none>
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] server lang: <none>
2026-02-11T17:25:50.523 [DEBUG] [Thread-132894] [transport.py] [_log()] kex follows: False
2026-02-11T17:25:50.524 [DEBUG] [Thread-132894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:25:50.524 [DEBUG] [Thread-132894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:25:50.524 [DEBUG] [Thread-132894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:25:50.524 [DEBUG] [Thread-132894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:25:50.524 [DEBUG] [Thread-132894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:25:50.524 [DEBUG] [Thread-132894] [transport.py] [_log()] Compression: none
2026-02-11T17:25:50.524 [DEBUG] [Thread-132894] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:25:50.581 [DEBUG] [Thread-132894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:25:50.582 [DEBUG] [Thread-132894] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:25:50.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:25:50.583 [DEBUG] [Thread-132894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:25:50.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:25:50.637 [DEBUG] [Thread-132894] [transport.py] [_log()] userauth is OK
2026-02-11T17:25:50.638 [DEBUG] [Thread-132894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:25:50.638 [DEBUG] [Thread-132894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:25:50.638 [DEBUG] [Thread-132894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:25:50.638 [DEBUG] [Thread-132894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:25:50.663 [INFO] [Thread-132894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:25:50.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:25:50.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:25:51.529 [DEBUG] [Thread-132894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:25:51.529 [DEBUG] [Thread-132894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:25:51.576 [DEBUG] [Thread-132894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:25:51.577 [DEBUG] [Thread-132894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:25:51.586 [DEBUG] [Thread-132894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:25:51.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:25:51.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:25:51.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:25:51.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:25:51.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:25:51.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:25:51.621 [DEBUG] [Thread-132894] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:26:02.573 [DEBUG] [Thread-132896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:26:17.626 [DEBUG] [Thread-132897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:26:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:26:21.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:26:21.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
2026-02-11T17:26:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 26, 6), 12.21, 46.05, 0.0, 35.8, 23.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:26:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:26:06
2026-02-11T17:26:23.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:26:24.103 [DEBUG] [Thread-132898] [transport.py] [_log()] starting thread (client mode): 0xa2d54cd0
2026-02-11T17:26:24.103 [DEBUG] [Thread-132898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:26:24.124 [DEBUG] [Thread-132898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:26:24.124 [INFO] [Thread-132898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:26:24.127 [DEBUG] [Thread-132898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] client lang: <none>
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] server lang: <none>
2026-02-11T17:26:24.128 [DEBUG] [Thread-132898] [transport.py] [_log()] kex follows: False
2026-02-11T17:26:24.129 [DEBUG] [Thread-132898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:26:24.129 [DEBUG] [Thread-132898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:26:24.129 [DEBUG] [Thread-132898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:26:24.129 [DEBUG] [Thread-132898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:26:24.129 [DEBUG] [Thread-132898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:26:24.129 [DEBUG] [Thread-132898] [transport.py] [_log()] Compression: none
2026-02-11T17:26:24.129 [DEBUG] [Thread-132898] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:26:24.149 [DEBUG] [Thread-132898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:26:24.150 [DEBUG] [Thread-132898] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:26:24.151 [DEBUG] [Thread-132898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:26:24.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:26:24.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:26:24.154 [DEBUG] [Thread-132898] [transport.py] [_log()] userauth is OK
2026-02-11T17:26:24.154 [DEBUG] [Thread-132898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:26:24.154 [DEBUG] [Thread-132898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:26:24.154 [DEBUG] [Thread-132898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:26:24.154 [DEBUG] [Thread-132898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:26:24.180 [INFO] [Thread-132898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:26:24.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:26:24.822 [DEBUG] [Thread-132898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:26:24.822 [DEBUG] [Thread-132898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:26:24.822 [DEBUG] [Thread-132898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:26:24.863 [DEBUG] [Thread-132898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:26:24.863 [DEBUG] [Thread-132898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:26:24.867 [DEBUG] [Thread-132898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:26:24.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:26:24.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:26:24.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:26:24.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:26:24.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:26:24.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:26:24.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:26:24.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:26:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:26:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.642849 -999.00  +22.50  26.77     53  +12.50 1 2 1 1 1   887    0 8.80 -50.49 ----- 31.0 26.8 295.8 40.3 24.9 -10.2 24.9 -10.0 24.6 -11.8 25.1 -10.3
2026-02-11T17:26:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:26:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:26:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.642849
2026-02-11T17:26:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:26:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:26:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:26:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:26:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:26:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:26:06', tmtdew=12.21, humidity=46.05, cloud=0.0, wind=35.8, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:25:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:26:24.893 [DEBUG] [Thread-132898] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:26:24.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:26:24.992 [DEBUG] [Thread-132901] [transport.py] [_log()] starting thread (client mode): 0xa2d56d70
2026-02-11T17:26:24.992 [DEBUG] [Thread-132901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:26:25.007 [DEBUG] [Thread-132901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:26:25.007 [INFO] [Thread-132901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:26:25.014 [DEBUG] [Thread-132901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] client lang: <none>
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] server lang: <none>
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] kex follows: False
2026-02-11T17:26:25.015 [DEBUG] [Thread-132901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:26:25.016 [DEBUG] [Thread-132901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:26:25.016 [DEBUG] [Thread-132901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:26:25.016 [DEBUG] [Thread-132901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:26:25.016 [DEBUG] [Thread-132901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:26:25.016 [DEBUG] [Thread-132901] [transport.py] [_log()] Compression: none
2026-02-11T17:26:25.016 [DEBUG] [Thread-132901] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:26:25.073 [DEBUG] [Thread-132901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:26:25.074 [DEBUG] [Thread-132901] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:26:25.074 [DEBUG] [Thread-132901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:26:25.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:26:25.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:26:25.129 [DEBUG] [Thread-132901] [transport.py] [_log()] userauth is OK
2026-02-11T17:26:25.129 [DEBUG] [Thread-132901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:26:25.130 [DEBUG] [Thread-132901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:26:25.130 [DEBUG] [Thread-132901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:26:25.130 [DEBUG] [Thread-132901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:26:25.148 [INFO] [Thread-132901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:26:25.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:26:25.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:26:25.971 [DEBUG] [Thread-132901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:26:25.972 [DEBUG] [Thread-132901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:26:26.019 [DEBUG] [Thread-132901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:26:26.019 [DEBUG] [Thread-132901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:26:26.028 [DEBUG] [Thread-132901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:26:26.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:26:26.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:26:26.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:26:26.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:26:26.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:26:26.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:26:26.066 [DEBUG] [Thread-132901] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:26:27.580 [DEBUG] [Thread-132903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:26:32.663 [DEBUG] [Thread-132904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:26:47.711 [DEBUG] [Thread-132905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:26:50.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:26:50.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:26:56.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:26:56.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:26:56.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:26:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 26, 42), 13.21, 43.4, 0.0, 38.42, 24.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:26:57.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:26:42
2026-02-11T17:26:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:26:58.413 [DEBUG] [Thread-132906] [transport.py] [_log()] starting thread (client mode): 0xa2d55d80
2026-02-11T17:26:58.413 [DEBUG] [Thread-132906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:26:58.426 [DEBUG] [Thread-132906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:26:58.426 [INFO] [Thread-132906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] client lang: <none>
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] server lang: <none>
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] kex follows: False
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] Compression: none
2026-02-11T17:26:58.427 [DEBUG] [Thread-132906] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:26:58.435 [DEBUG] [Thread-132906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:26:58.435 [DEBUG] [Thread-132906] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:26:58.435 [DEBUG] [Thread-132906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:26:58.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:26:58.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:26:58.436 [DEBUG] [Thread-132906] [transport.py] [_log()] userauth is OK
2026-02-11T17:26:58.436 [DEBUG] [Thread-132906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:26:58.436 [DEBUG] [Thread-132906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:26:58.436 [DEBUG] [Thread-132906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:26:58.436 [DEBUG] [Thread-132906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:26:58.452 [INFO] [Thread-132906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:26:58.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:26:59.259 [DEBUG] [Thread-132906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:26:59.259 [DEBUG] [Thread-132906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:26:59.259 [DEBUG] [Thread-132906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:26:59.300 [DEBUG] [Thread-132906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:26:59.300 [DEBUG] [Thread-132906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:26:59.304 [DEBUG] [Thread-132906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:26:59.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:26:59.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:26:59.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:26:59.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:26:59.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:26:59.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:26:59.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:26:59.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:26:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:26:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.643197 -999.00  +22.40  31.11     53  +12.50 1 2 2 1 1   887    0 8.81 -52.13 ----- 24.8 31.1 291.8 40.6 25.0 -9.9 24.9 -10.2 24.6 -11.2 25.0 -10.6
2026-02-11T17:26:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:26:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:26:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.643197
2026-02-11T17:26:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:26:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:26:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:26:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:26:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:26:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:26:42', tmtdew=13.21, humidity=43.4, cloud=0.0, wind=38.42, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:26:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:26:59.328 [DEBUG] [Thread-132906] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:26:59.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:26:59.425 [DEBUG] [Thread-132909] [transport.py] [_log()] starting thread (client mode): 0xa2dc3f10
2026-02-11T17:26:59.426 [DEBUG] [Thread-132909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:26:59.441 [DEBUG] [Thread-132909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:26:59.441 [INFO] [Thread-132909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:26:59.449 [DEBUG] [Thread-132909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:26:59.449 [DEBUG] [Thread-132909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:26:59.449 [DEBUG] [Thread-132909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:26:59.449 [DEBUG] [Thread-132909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:59.449 [DEBUG] [Thread-132909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:26:59.449 [DEBUG] [Thread-132909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] client lang: <none>
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] server lang: <none>
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] kex follows: False
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:26:59.450 [DEBUG] [Thread-132909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:26:59.451 [DEBUG] [Thread-132909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:26:59.451 [DEBUG] [Thread-132909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:26:59.451 [DEBUG] [Thread-132909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:26:59.451 [DEBUG] [Thread-132909] [transport.py] [_log()] Compression: none
2026-02-11T17:26:59.451 [DEBUG] [Thread-132909] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:26:59.509 [DEBUG] [Thread-132909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:26:59.510 [DEBUG] [Thread-132909] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:26:59.510 [DEBUG] [Thread-132909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:26:59.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:26:59.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:26:59.569 [DEBUG] [Thread-132909] [transport.py] [_log()] userauth is OK
2026-02-11T17:26:59.569 [DEBUG] [Thread-132909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:26:59.570 [DEBUG] [Thread-132909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:26:59.570 [DEBUG] [Thread-132909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:26:59.570 [DEBUG] [Thread-132909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:26:59.589 [INFO] [Thread-132909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:26:59.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:26:59.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:27:00.478 [DEBUG] [Thread-132909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:27:00.478 [DEBUG] [Thread-132909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:27:00.526 [DEBUG] [Thread-132909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:27:00.527 [DEBUG] [Thread-132909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:27:00.536 [DEBUG] [Thread-132909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:27:00.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:27:00.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:27:00.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:27:00.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:27:00.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:27:00.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:27:00.573 [DEBUG] [Thread-132909] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:27:02.749 [DEBUG] [Thread-132911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:27:17.803 [DEBUG] [Thread-132912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:27:27.625 [DEBUG] [Thread-132913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:27:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:27:30.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:27:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:27:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 27, 18), 12.06, 46.73, 0.0, 33.79, 22.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:27:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:27:18
2026-02-11T17:27:32.844 [DEBUG] [Thread-132914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:27:33.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:27:33.469 [DEBUG] [Thread-132915] [transport.py] [_log()] starting thread (client mode): 0xa2dc3cd0
2026-02-11T17:27:33.469 [DEBUG] [Thread-132915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:27:33.488 [DEBUG] [Thread-132915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:27:33.488 [INFO] [Thread-132915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:27:33.491 [DEBUG] [Thread-132915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:27:33.491 [DEBUG] [Thread-132915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:27:33.491 [DEBUG] [Thread-132915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:27:33.491 [DEBUG] [Thread-132915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:27:33.491 [DEBUG] [Thread-132915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:27:33.491 [DEBUG] [Thread-132915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] client lang: <none>
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] server lang: <none>
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] kex follows: False
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] Compression: none
2026-02-11T17:27:33.492 [DEBUG] [Thread-132915] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:27:33.511 [DEBUG] [Thread-132915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:27:33.512 [DEBUG] [Thread-132915] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:27:33.512 [DEBUG] [Thread-132915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:27:33.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:27:33.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:27:33.513 [DEBUG] [Thread-132915] [transport.py] [_log()] userauth is OK
2026-02-11T17:27:33.513 [DEBUG] [Thread-132915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:27:33.514 [DEBUG] [Thread-132915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:27:33.514 [DEBUG] [Thread-132915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:27:33.514 [DEBUG] [Thread-132915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:27:33.534 [INFO] [Thread-132915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:27:33.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:27:34.179 [DEBUG] [Thread-132915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:27:34.179 [DEBUG] [Thread-132915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:27:34.179 [DEBUG] [Thread-132915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:27:34.220 [DEBUG] [Thread-132915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:27:34.220 [DEBUG] [Thread-132915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:27:34.224 [DEBUG] [Thread-132915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:27:34.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:27:34.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:27:34.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:27:34.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:27:34.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:27:34.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:27:34.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:27:34.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:27:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:27:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.643544 -999.00  +22.30  25.23     53  +12.50 1 2 1 1 1   887    0 8.69 -52.57 ----- 23.9 25.2 293.6 31.6 24.9 -10.6 24.8 -10.4 24.6 -10.6 24.9 -10.2
2026-02-11T17:27:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:27:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:27:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.643544
2026-02-11T17:27:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:27:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:27:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:27:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:27:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:27:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:27:18', tmtdew=12.06, humidity=46.73, cloud=0.0, wind=33.79, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:26:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:27:34.252 [DEBUG] [Thread-132915] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:27:34.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:27:34.347 [DEBUG] [Thread-132918] [transport.py] [_log()] starting thread (client mode): 0xa2db5090
2026-02-11T17:27:34.347 [DEBUG] [Thread-132918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:27:34.363 [DEBUG] [Thread-132918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:27:34.363 [INFO] [Thread-132918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:27:34.371 [DEBUG] [Thread-132918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:27:34.371 [DEBUG] [Thread-132918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:27:34.371 [DEBUG] [Thread-132918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] client lang: <none>
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] server lang: <none>
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] kex follows: False
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] Compression: none
2026-02-11T17:27:34.372 [DEBUG] [Thread-132918] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:27:34.428 [DEBUG] [Thread-132918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:27:34.429 [DEBUG] [Thread-132918] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:27:34.429 [DEBUG] [Thread-132918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:27:34.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:27:34.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:27:34.484 [DEBUG] [Thread-132918] [transport.py] [_log()] userauth is OK
2026-02-11T17:27:34.484 [DEBUG] [Thread-132918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:27:34.485 [DEBUG] [Thread-132918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:27:34.485 [DEBUG] [Thread-132918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:27:34.485 [DEBUG] [Thread-132918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:27:34.504 [INFO] [Thread-132918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:27:34.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:27:34.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:27:35.340 [DEBUG] [Thread-132918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:27:35.340 [DEBUG] [Thread-132918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:27:35.388 [DEBUG] [Thread-132918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:27:35.389 [DEBUG] [Thread-132918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:27:35.397 [DEBUG] [Thread-132918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:27:35.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:27:35.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:27:35.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:27:35.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:27:35.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:27:35.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:27:35.430 [DEBUG] [Thread-132918] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:27:47.880 [DEBUG] [Thread-132920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:27:50.630 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:27:50.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:28:02.936 [DEBUG] [Thread-132921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:28:05.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:28:05.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:28:05.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:28:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 27, 53), 11.75, 47.53, 0.0, 31.28, 22.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:28:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:27:53
2026-02-11T17:28:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:28:07.815 [DEBUG] [Thread-132922] [transport.py] [_log()] starting thread (client mode): 0xa57d6da0
2026-02-11T17:28:07.815 [DEBUG] [Thread-132922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:28:07.827 [DEBUG] [Thread-132922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:28:07.828 [INFO] [Thread-132922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] client lang: <none>
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] server lang: <none>
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] kex follows: False
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] Compression: none
2026-02-11T17:28:07.829 [DEBUG] [Thread-132922] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:28:07.845 [DEBUG] [Thread-132922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:28:07.845 [DEBUG] [Thread-132922] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:28:07.846 [DEBUG] [Thread-132922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:28:07.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:28:07.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:28:07.848 [DEBUG] [Thread-132922] [transport.py] [_log()] userauth is OK
2026-02-11T17:28:07.848 [DEBUG] [Thread-132922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:28:07.848 [DEBUG] [Thread-132922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:28:07.848 [DEBUG] [Thread-132922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:28:07.848 [DEBUG] [Thread-132922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:28:07.866 [INFO] [Thread-132922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:28:07.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:28:08.498 [DEBUG] [Thread-132922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:28:08.498 [DEBUG] [Thread-132922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:28:08.498 [DEBUG] [Thread-132922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:28:08.539 [DEBUG] [Thread-132922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:28:08.540 [DEBUG] [Thread-132922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:28:08.543 [DEBUG] [Thread-132922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:28:08.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:28:08.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:28:08.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:28:08.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:28:08.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:28:08.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:28:08.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:28:08.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:28:08.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:28:08.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.643891 -999.00  +22.40  30.62     53  +12.50 1 2 2 1 1   887    0 9.06 -51.15 ----- 25.9 30.6 296.0 37.7 24.9 -10.5 24.8 -10.5 24.6 -11.5 24.9 -10.6
2026-02-11T17:28:08.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:28:08.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:28:08.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.643891
2026-02-11T17:28:08.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:28:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:28:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:28:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:28:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:28:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:27:53', tmtdew=11.75, humidity=47.53, cloud=0.0, wind=31.28, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:27:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:28:08.569 [DEBUG] [Thread-132922] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:28:08.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:28:08.663 [DEBUG] [Thread-132925] [transport.py] [_log()] starting thread (client mode): 0xa57d5d80
2026-02-11T17:28:08.663 [DEBUG] [Thread-132925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:28:08.678 [DEBUG] [Thread-132925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:28:08.678 [INFO] [Thread-132925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:08.686 [DEBUG] [Thread-132925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] client lang: <none>
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] server lang: <none>
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] kex follows: False
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:28:08.687 [DEBUG] [Thread-132925] [transport.py] [_log()] Compression: none
2026-02-11T17:28:08.688 [DEBUG] [Thread-132925] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:28:08.743 [DEBUG] [Thread-132925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:28:08.744 [DEBUG] [Thread-132925] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:28:08.744 [DEBUG] [Thread-132925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:28:08.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:28:08.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:28:08.800 [DEBUG] [Thread-132925] [transport.py] [_log()] userauth is OK
2026-02-11T17:28:08.800 [DEBUG] [Thread-132925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:28:08.800 [DEBUG] [Thread-132925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:28:08.800 [DEBUG] [Thread-132925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:28:08.801 [DEBUG] [Thread-132925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:28:08.819 [INFO] [Thread-132925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:28:08.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:28:08.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:28:09.641 [DEBUG] [Thread-132925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:28:09.641 [DEBUG] [Thread-132925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:28:09.689 [DEBUG] [Thread-132925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:28:09.690 [DEBUG] [Thread-132925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:28:09.699 [DEBUG] [Thread-132925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:28:09.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:28:09.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:28:09.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:28:09.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:28:09.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:28:09.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:28:09.736 [DEBUG] [Thread-132925] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:28:17.974 [DEBUG] [Thread-132927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:28:27.684 [DEBUG] [Thread-132928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:28:33.024 [DEBUG] [Thread-132929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:28:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:28:39.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:28:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:28:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 28, 28), 11.63, 47.86, 0.0, 28.9, 22.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:28:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:28:28
2026-02-11T17:28:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:28:42.127 [DEBUG] [Thread-132930] [transport.py] [_log()] starting thread (client mode): 0xa2dc3430
2026-02-11T17:28:42.127 [DEBUG] [Thread-132930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:28:42.146 [DEBUG] [Thread-132930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:28:42.147 [INFO] [Thread-132930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] client lang: <none>
2026-02-11T17:28:42.150 [DEBUG] [Thread-132930] [transport.py] [_log()] server lang: <none>
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] kex follows: False
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] Compression: none
2026-02-11T17:28:42.151 [DEBUG] [Thread-132930] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:28:42.163 [DEBUG] [Thread-132930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:28:42.164 [DEBUG] [Thread-132930] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:28:42.164 [DEBUG] [Thread-132930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:28:42.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:28:42.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:28:42.205 [DEBUG] [Thread-132930] [transport.py] [_log()] userauth is OK
2026-02-11T17:28:42.205 [DEBUG] [Thread-132930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:28:42.205 [DEBUG] [Thread-132930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:28:42.205 [DEBUG] [Thread-132930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:28:42.205 [DEBUG] [Thread-132930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:28:42.237 [INFO] [Thread-132930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:28:42.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:28:42.905 [DEBUG] [Thread-132930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:28:42.905 [DEBUG] [Thread-132930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:28:42.905 [DEBUG] [Thread-132930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:28:42.946 [DEBUG] [Thread-132930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:28:42.946 [DEBUG] [Thread-132930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:28:42.949 [DEBUG] [Thread-132930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:28:42.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:28:42.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:28:42.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:28:42.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:28:42.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:28:42.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:28:42.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:28:42.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.644238 -999.00  +22.50  25.45     53  +12.50 1 2 1 1 1   887    0 8.87 -48.23 ----- 25.1 25.4 295.8 36.2 24.9 -11.0 24.8 -10.5 24.5 -11.5 24.9 -10.9
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.644238
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:28:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:28:28', tmtdew=11.63, humidity=47.86, cloud=0.0, wind=28.9, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:27:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:28:42.968 [DEBUG] [Thread-132930] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:28:43.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:28:43.065 [DEBUG] [Thread-132933] [transport.py] [_log()] starting thread (client mode): 0xa2d57940
2026-02-11T17:28:43.065 [DEBUG] [Thread-132933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:28:43.079 [DEBUG] [Thread-132933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:28:43.080 [INFO] [Thread-132933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] client lang: <none>
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] server lang: <none>
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] kex follows: False
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:28:43.087 [DEBUG] [Thread-132933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:28:43.088 [DEBUG] [Thread-132933] [transport.py] [_log()] Compression: none
2026-02-11T17:28:43.088 [DEBUG] [Thread-132933] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:28:43.147 [DEBUG] [Thread-132933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:28:43.148 [DEBUG] [Thread-132933] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:28:43.148 [DEBUG] [Thread-132933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:28:43.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:28:43.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:28:43.203 [DEBUG] [Thread-132933] [transport.py] [_log()] userauth is OK
2026-02-11T17:28:43.204 [DEBUG] [Thread-132933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:28:43.204 [DEBUG] [Thread-132933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:28:43.204 [DEBUG] [Thread-132933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:28:43.204 [DEBUG] [Thread-132933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:28:43.223 [INFO] [Thread-132933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:28:43.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:28:43.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:28:44.020 [DEBUG] [Thread-132933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:28:44.020 [DEBUG] [Thread-132933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:28:44.068 [DEBUG] [Thread-132933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:28:44.069 [DEBUG] [Thread-132933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:28:44.078 [DEBUG] [Thread-132933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:28:44.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:28:44.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')
2026-02-11T17:28:44.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:28:44.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:28:44.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:28:44.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:28:44.115 [DEBUG] [Thread-132933] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:28:48.060 [DEBUG] [Thread-132935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:28:50.772 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:28:50.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:03.115 [DEBUG] [Thread-132936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:14.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:29:14.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:29:14.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:29:16.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 29, 4), 11.67, 47.74, 0.0, 30.68, 22.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:29:16.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:29:04
2026-02-11T17:29:16.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:29:16.749 [DEBUG] [Thread-132937] [transport.py] [_log()] starting thread (client mode): 0xa2db6aa0
2026-02-11T17:29:16.749 [DEBUG] [Thread-132937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:29:16.769 [DEBUG] [Thread-132937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:29:16.769 [INFO] [Thread-132937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] client lang: <none>
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] server lang: <none>
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] kex follows: False
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] Compression: none
2026-02-11T17:29:16.773 [DEBUG] [Thread-132937] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:29:16.792 [DEBUG] [Thread-132937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:29:16.793 [DEBUG] [Thread-132937] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:29:16.793 [DEBUG] [Thread-132937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:29:16.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:29:16.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:29:16.796 [DEBUG] [Thread-132937] [transport.py] [_log()] userauth is OK
2026-02-11T17:29:16.796 [DEBUG] [Thread-132937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:29:16.796 [DEBUG] [Thread-132937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:29:16.796 [DEBUG] [Thread-132937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:29:16.796 [DEBUG] [Thread-132937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:29:16.820 [INFO] [Thread-132937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:29:16.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:29:17.400 [DEBUG] [Thread-132937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:29:17.400 [DEBUG] [Thread-132937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:29:17.401 [DEBUG] [Thread-132937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:29:17.442 [DEBUG] [Thread-132937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:29:17.442 [DEBUG] [Thread-132937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:29:17.445 [DEBUG] [Thread-132937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:29:17.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:29:17.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:29:17.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:29:17.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:29:17.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:29:17.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:29:17.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:29:17.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:29:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:29:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.644933 -999.00  +22.50  25.45     53  +12.50 1 2 1 1 1   887    0 9.03 -43.60 ----- 28.0 25.4 304.4 32.4 24.9 -11.1 24.8 -10.8 24.4 -11.2 24.9 -11.0
2026-02-11T17:29:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:29:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:29:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.644933
2026-02-11T17:29:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:29:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:29:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:29:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:29:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:29:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:29:04', tmtdew=11.67, humidity=47.74, cloud=0.0, wind=30.68, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:28:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:29:17.466 [DEBUG] [Thread-132937] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:29:17.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:29:17.564 [DEBUG] [Thread-132940] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-11T17:29:17.564 [DEBUG] [Thread-132940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:29:17.579 [DEBUG] [Thread-132940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:29:17.579 [INFO] [Thread-132940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] client lang: <none>
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] server lang: <none>
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] kex follows: False
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:29:17.587 [DEBUG] [Thread-132940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:29:17.588 [DEBUG] [Thread-132940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:29:17.588 [DEBUG] [Thread-132940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:29:17.588 [DEBUG] [Thread-132940] [transport.py] [_log()] Compression: none
2026-02-11T17:29:17.588 [DEBUG] [Thread-132940] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:29:17.647 [DEBUG] [Thread-132940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:29:17.648 [DEBUG] [Thread-132940] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:29:17.648 [DEBUG] [Thread-132940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:29:17.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:29:17.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:29:17.703 [DEBUG] [Thread-132940] [transport.py] [_log()] userauth is OK
2026-02-11T17:29:17.704 [DEBUG] [Thread-132940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:29:17.704 [DEBUG] [Thread-132940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:29:17.704 [DEBUG] [Thread-132940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:29:17.704 [DEBUG] [Thread-132940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:29:17.722 [INFO] [Thread-132940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:29:17.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:29:17.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:29:18.148 [DEBUG] [Thread-132942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:18.549 [DEBUG] [Thread-132940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:29:18.549 [DEBUG] [Thread-132940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:29:18.597 [DEBUG] [Thread-132940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:29:18.597 [DEBUG] [Thread-132940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:29:18.609 [DEBUG] [Thread-132940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:29:18.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:29:18.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:29:18.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
2026-02-11T17:29:18.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:29:18.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:29:18.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:29:18.648 [DEBUG] [Thread-132940] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:29:27.719 [DEBUG] [Thread-132943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:33.209 [DEBUG] [Thread-132944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:48.250 [DEBUG] [Thread-132945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:48.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:29:48.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:29:48.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
2026-02-11T17:29:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 29, 40), 12.41, 45.55, 0.0, 37.44, 23.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:29:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:29:40
2026-02-11T17:29:50.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:50.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:29:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:29:51.240 [DEBUG] [Thread-132946] [transport.py] [_log()] starting thread (client mode): 0xa2d55240
2026-02-11T17:29:51.241 [DEBUG] [Thread-132946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:29:51.261 [DEBUG] [Thread-132946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:29:51.261 [INFO] [Thread-132946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:29:51.264 [DEBUG] [Thread-132946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:29:51.264 [DEBUG] [Thread-132946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] client lang: <none>
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] server lang: <none>
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] kex follows: False
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:29:51.265 [DEBUG] [Thread-132946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:29:51.266 [DEBUG] [Thread-132946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:29:51.266 [DEBUG] [Thread-132946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:29:51.266 [DEBUG] [Thread-132946] [transport.py] [_log()] Compression: none
2026-02-11T17:29:51.266 [DEBUG] [Thread-132946] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:29:51.275 [DEBUG] [Thread-132946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:29:51.276 [DEBUG] [Thread-132946] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:29:51.277 [DEBUG] [Thread-132946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:29:51.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:29:51.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:29:51.279 [DEBUG] [Thread-132946] [transport.py] [_log()] userauth is OK
2026-02-11T17:29:51.279 [DEBUG] [Thread-132946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:29:51.279 [DEBUG] [Thread-132946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:29:51.279 [DEBUG] [Thread-132946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:29:51.279 [DEBUG] [Thread-132946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:29:51.305 [INFO] [Thread-132946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:29:51.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:29:51.887 [DEBUG] [Thread-132946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:29:51.888 [DEBUG] [Thread-132946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:29:51.888 [DEBUG] [Thread-132946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:29:51.928 [DEBUG] [Thread-132946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:29:51.929 [DEBUG] [Thread-132946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:29:51.931 [DEBUG] [Thread-132946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:29:51.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:29:51.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:29:51.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:29:51.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:29:51.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:29:51.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:29:51.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:29:51.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:29:51.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:29:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.645627 -999.00  +22.30  34.11     53  +12.40 1 2 2 1 1   887    0 9.04 -40.50 ----- 36.7 34.1 300.2 42.7 24.8 -11.8 24.7 -11.7 24.4 -12.4 24.7 -11.4
2026-02-11T17:29:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:29:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:29:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.645627
2026-02-11T17:29:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:29:51.953 [DEBUG] [Thread-132946] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:29:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:29:51.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:29:51.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:29:51.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:29:51.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:29:40', tmtdew=12.41, humidity=45.55, cloud=0.0, wind=37.44, temperature=23.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:29:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:29:52.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:29:52.054 [DEBUG] [Thread-132949] [transport.py] [_log()] starting thread (client mode): 0xa5773a90
2026-02-11T17:29:52.054 [DEBUG] [Thread-132949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:29:52.068 [DEBUG] [Thread-132949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:29:52.069 [INFO] [Thread-132949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:29:52.076 [DEBUG] [Thread-132949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:29:52.077 [DEBUG] [Thread-132949] [transport.py] [_log()] client lang: <none>
2026-02-11T17:29:52.078 [DEBUG] [Thread-132949] [transport.py] [_log()] server lang: <none>
2026-02-11T17:29:52.078 [DEBUG] [Thread-132949] [transport.py] [_log()] kex follows: False
2026-02-11T17:29:52.078 [DEBUG] [Thread-132949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:29:52.078 [DEBUG] [Thread-132949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:29:52.078 [DEBUG] [Thread-132949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:29:52.078 [DEBUG] [Thread-132949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:29:52.078 [DEBUG] [Thread-132949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:29:52.079 [DEBUG] [Thread-132949] [transport.py] [_log()] Compression: none
2026-02-11T17:29:52.079 [DEBUG] [Thread-132949] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:29:52.136 [DEBUG] [Thread-132949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:29:52.137 [DEBUG] [Thread-132949] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:29:52.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:29:52.138 [DEBUG] [Thread-132949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:29:52.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:29:52.195 [DEBUG] [Thread-132949] [transport.py] [_log()] userauth is OK
2026-02-11T17:29:52.195 [DEBUG] [Thread-132949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:29:52.195 [DEBUG] [Thread-132949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:29:52.195 [DEBUG] [Thread-132949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:29:52.195 [DEBUG] [Thread-132949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:29:52.212 [INFO] [Thread-132949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:29:52.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:29:52.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:29:53.046 [DEBUG] [Thread-132949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:29:53.046 [DEBUG] [Thread-132949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:29:53.094 [DEBUG] [Thread-132949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:29:53.094 [DEBUG] [Thread-132949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:29:53.102 [DEBUG] [Thread-132949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:29:53.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:29:53.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:29:53.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:29:53.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:29:53.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:29:53.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:29:53.135 [DEBUG] [Thread-132949] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:30:03.281 [DEBUG] [Thread-132951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:30:18.331 [DEBUG] [Thread-132952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:30:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:30:23.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:30:23.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:30:25.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 30, 15), 11.92, 46.73, 0.0, 32.92, 22.75, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:30:25.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:30:15
2026-02-11T17:30:25.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:30:25.568 [DEBUG] [Thread-132953] [transport.py] [_log()] starting thread (client mode): 0xa5771750
2026-02-11T17:30:25.568 [DEBUG] [Thread-132953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:30:25.586 [DEBUG] [Thread-132953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:30:25.586 [INFO] [Thread-132953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] client lang: <none>
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] server lang: <none>
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] kex follows: False
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] Compression: none
2026-02-11T17:30:25.589 [DEBUG] [Thread-132953] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:30:25.599 [DEBUG] [Thread-132953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:30:25.600 [DEBUG] [Thread-132953] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:30:25.600 [DEBUG] [Thread-132953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:30:25.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:30:25.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:30:25.602 [DEBUG] [Thread-132953] [transport.py] [_log()] userauth is OK
2026-02-11T17:30:25.602 [DEBUG] [Thread-132953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:30:25.602 [DEBUG] [Thread-132953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:30:25.602 [DEBUG] [Thread-132953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:30:25.602 [DEBUG] [Thread-132953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:30:25.627 [INFO] [Thread-132953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:30:25.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:30:26.249 [DEBUG] [Thread-132953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:30:26.250 [DEBUG] [Thread-132953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:30:26.250 [DEBUG] [Thread-132953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:30:26.290 [DEBUG] [Thread-132953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:30:26.291 [DEBUG] [Thread-132953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:30:26.293 [DEBUG] [Thread-132953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:30:26.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:30:26.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:30:26.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:30:26.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:30:26.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:30:26.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:30:26.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:30:26.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:30:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:30:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.645974 -999.00  +22.10  33.72     54  +12.40 1 2 2 1 1   887    0 9.04 -39.56 ----- 27.1 33.7 298.8 38.7 24.7 -11.9 24.7 -12.0 24.4 -11.9 24.6 -11.4
2026-02-11T17:30:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:30:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:30:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.645974
2026-02-11T17:30:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:30:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:30:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:30:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:30:26.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:30:26.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:30:15', tmtdew=11.92, humidity=46.73, cloud=0.0, wind=32.92, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:30:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:30:26.312 [DEBUG] [Thread-132953] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:30:26.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:30:26.407 [DEBUG] [Thread-132956] [transport.py] [_log()] starting thread (client mode): 0xa2d57d90
2026-02-11T17:30:26.408 [DEBUG] [Thread-132956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:30:26.422 [DEBUG] [Thread-132956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:30:26.423 [INFO] [Thread-132956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:30:26.430 [DEBUG] [Thread-132956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:30:26.431 [DEBUG] [Thread-132956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] client lang: <none>
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] server lang: <none>
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] kex follows: False
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:30:26.432 [DEBUG] [Thread-132956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:30:26.433 [DEBUG] [Thread-132956] [transport.py] [_log()] Compression: none
2026-02-11T17:30:26.433 [DEBUG] [Thread-132956] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:30:26.491 [DEBUG] [Thread-132956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:30:26.492 [DEBUG] [Thread-132956] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:30:26.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:30:26.494 [DEBUG] [Thread-132956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:30:26.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:30:26.552 [DEBUG] [Thread-132956] [transport.py] [_log()] userauth is OK
2026-02-11T17:30:26.553 [DEBUG] [Thread-132956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:30:26.553 [DEBUG] [Thread-132956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:30:26.553 [DEBUG] [Thread-132956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:30:26.553 [DEBUG] [Thread-132956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:30:26.579 [INFO] [Thread-132956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:30:26.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:30:26.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:30:27.418 [DEBUG] [Thread-132956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:30:27.418 [DEBUG] [Thread-132956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:30:27.466 [DEBUG] [Thread-132956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:30:27.467 [DEBUG] [Thread-132956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:30:27.476 [DEBUG] [Thread-132956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:30:27.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:30:27.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:30:27.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:30:27.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:30:27.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:30:27.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:30:27.512 [DEBUG] [Thread-132956] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:30:27.752 [DEBUG] [Thread-132958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:30:33.366 [DEBUG] [Thread-132959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:30:48.417 [DEBUG] [Thread-132960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:30:51.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:30:51.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:30:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:30:57.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:30:57.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:30:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 30, 50), 11.78, 47.33, 0.0, 30.6, 22.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:30:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:30:50
2026-02-11T17:30:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:30:59.915 [DEBUG] [Thread-132961] [transport.py] [_log()] starting thread (client mode): 0xa57d72e0
2026-02-11T17:30:59.915 [DEBUG] [Thread-132961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:30:59.928 [DEBUG] [Thread-132961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:30:59.928 [INFO] [Thread-132961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] client lang: <none>
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] server lang: <none>
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] kex follows: False
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] Compression: none
2026-02-11T17:30:59.929 [DEBUG] [Thread-132961] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:30:59.942 [DEBUG] [Thread-132961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:30:59.942 [DEBUG] [Thread-132961] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:30:59.942 [DEBUG] [Thread-132961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:30:59.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:30:59.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:30:59.944 [DEBUG] [Thread-132961] [transport.py] [_log()] userauth is OK
2026-02-11T17:30:59.944 [DEBUG] [Thread-132961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:30:59.944 [DEBUG] [Thread-132961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:30:59.944 [DEBUG] [Thread-132961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:30:59.944 [DEBUG] [Thread-132961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:30:59.960 [INFO] [Thread-132961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:30:59.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:31:00.588 [DEBUG] [Thread-132961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:31:00.589 [DEBUG] [Thread-132961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:31:00.589 [DEBUG] [Thread-132961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:31:00.629 [DEBUG] [Thread-132961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:31:00.629 [DEBUG] [Thread-132961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:31:00.632 [DEBUG] [Thread-132961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:31:00.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:31:00.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:31:00.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:31:00.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:31:00.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:31:00.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:31:00.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:31:00.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:31:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:31:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.646322 -999.00  +22.40  27.50     53  +12.40 1 2 1 1 1   887    0 9.01 -39.30 ----- 30.9 27.5 304.8 33.8 24.7 -11.6 24.6 -11.7 24.3 -12.0 24.6 -11.2
2026-02-11T17:31:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:31:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:31:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.646322
2026-02-11T17:31:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:31:00.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:31:00.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:31:00.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:31:00.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:31:00.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:30:50', tmtdew=11.78, humidity=47.33, cloud=0.0, wind=30.6, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:30:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:31:00.658 [DEBUG] [Thread-132961] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:31:00.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:31:00.764 [DEBUG] [Thread-132964] [transport.py] [_log()] starting thread (client mode): 0xa5758a60
2026-02-11T17:31:00.764 [DEBUG] [Thread-132964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:31:00.778 [DEBUG] [Thread-132964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:31:00.778 [INFO] [Thread-132964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:31:00.785 [DEBUG] [Thread-132964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] client lang: <none>
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] server lang: <none>
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] kex follows: False
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] Compression: none
2026-02-11T17:31:00.786 [DEBUG] [Thread-132964] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:31:00.846 [DEBUG] [Thread-132964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:31:00.847 [DEBUG] [Thread-132964] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:31:00.847 [DEBUG] [Thread-132964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:31:00.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:31:00.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:31:00.902 [DEBUG] [Thread-132964] [transport.py] [_log()] userauth is OK
2026-02-11T17:31:00.902 [DEBUG] [Thread-132964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:31:00.903 [DEBUG] [Thread-132964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:31:00.903 [DEBUG] [Thread-132964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:31:00.903 [DEBUG] [Thread-132964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:31:00.921 [INFO] [Thread-132964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:31:00.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:31:00.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:31:01.776 [DEBUG] [Thread-132964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:31:01.776 [DEBUG] [Thread-132964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:31:01.824 [DEBUG] [Thread-132964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:31:01.825 [DEBUG] [Thread-132964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:31:01.836 [DEBUG] [Thread-132964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:31:01.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:31:01.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')
2026-02-11T17:31:01.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
2026-02-11T17:31:01.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:31:01.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:31:01.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:31:01.874 [DEBUG] [Thread-132964] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:31:03.454 [DEBUG] [Thread-132966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:31:18.508 [DEBUG] [Thread-132967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:31:27.797 [DEBUG] [Thread-132968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:31:31.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:31:31.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:31:31.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:31:33.548 [DEBUG] [Thread-132969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:31:34.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 30, 50), 11.78, 47.33, 0.0, 30.6, 22.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:31:34.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:30:50
2026-02-11T17:31:34.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:31:34.589 [DEBUG] [Thread-132970] [transport.py] [_log()] starting thread (client mode): 0xa5773c70
2026-02-11T17:31:34.589 [DEBUG] [Thread-132970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:31:34.610 [DEBUG] [Thread-132970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:31:34.610 [INFO] [Thread-132970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] client lang: <none>
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] server lang: <none>
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] kex follows: False
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:31:34.614 [DEBUG] [Thread-132970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:31:34.615 [DEBUG] [Thread-132970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:31:34.615 [DEBUG] [Thread-132970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:31:34.615 [DEBUG] [Thread-132970] [transport.py] [_log()] Compression: none
2026-02-11T17:31:34.615 [DEBUG] [Thread-132970] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:31:34.631 [DEBUG] [Thread-132970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:31:34.631 [DEBUG] [Thread-132970] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:31:34.632 [DEBUG] [Thread-132970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:31:34.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:31:34.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:31:34.634 [DEBUG] [Thread-132970] [transport.py] [_log()] userauth is OK
2026-02-11T17:31:34.634 [DEBUG] [Thread-132970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:31:34.634 [DEBUG] [Thread-132970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:31:34.634 [DEBUG] [Thread-132970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:31:34.634 [DEBUG] [Thread-132970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:31:34.657 [INFO] [Thread-132970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:31:34.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:31:35.282 [DEBUG] [Thread-132970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:31:35.283 [DEBUG] [Thread-132970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:31:35.283 [DEBUG] [Thread-132970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:31:35.324 [DEBUG] [Thread-132970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:31:35.324 [DEBUG] [Thread-132970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:31:35.327 [DEBUG] [Thread-132970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:31:35.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:31:35.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:31:35.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:31:35.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:31:35.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:31:35.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:31:35.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:31:35.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:31:35.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:31:35.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.646669 -999.00  +22.40  29.63     53  +12.40 1 2 1 1 1   887    0 9.26 -34.26 ----- 35.2 29.6 296.0 35.4 24.7 -11.9 24.6 -11.7 24.3 -11.3 24.6 -11.0
2026-02-11T17:31:35.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:31:35.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:31:35.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.646669
2026-02-11T17:31:35.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:31:35.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:31:35.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:31:35.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:31:35.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:31:35.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:30:50', tmtdew=11.78, humidity=47.33, cloud=0.0, wind=30.6, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:31:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:31:35.357 [DEBUG] [Thread-132970] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:31:35.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:31:35.453 [DEBUG] [Thread-132973] [transport.py] [_log()] starting thread (client mode): 0xa57c3f40
2026-02-11T17:31:35.453 [DEBUG] [Thread-132973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:31:35.467 [DEBUG] [Thread-132973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:31:35.468 [INFO] [Thread-132973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:31:35.475 [DEBUG] [Thread-132973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:31:35.475 [DEBUG] [Thread-132973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:31:35.475 [DEBUG] [Thread-132973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:31:35.475 [DEBUG] [Thread-132973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] client lang: <none>
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] server lang: <none>
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] kex follows: False
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] Compression: none
2026-02-11T17:31:35.476 [DEBUG] [Thread-132973] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:31:35.534 [DEBUG] [Thread-132973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:31:35.535 [DEBUG] [Thread-132973] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:31:35.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:31:35.536 [DEBUG] [Thread-132973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:31:35.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:31:35.590 [DEBUG] [Thread-132973] [transport.py] [_log()] userauth is OK
2026-02-11T17:31:35.590 [DEBUG] [Thread-132973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:31:35.590 [DEBUG] [Thread-132973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:31:35.590 [DEBUG] [Thread-132973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:31:35.590 [DEBUG] [Thread-132973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:31:35.608 [INFO] [Thread-132973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:31:35.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:31:35.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:31:36.427 [DEBUG] [Thread-132973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:31:36.427 [DEBUG] [Thread-132973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:31:36.475 [DEBUG] [Thread-132973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:31:36.475 [DEBUG] [Thread-132973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:31:36.484 [DEBUG] [Thread-132973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:31:36.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:31:36.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:31:36.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:31:36.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:31:36.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:31:36.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:31:36.524 [DEBUG] [Thread-132973] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:31:48.586 [DEBUG] [Thread-132975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:31:51.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:31:51.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:32:03.638 [DEBUG] [Thread-132976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:32:06.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:32:06.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:32:06.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
2026-02-11T17:32:08.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 31, 26), 11.78, 47.33, 0.0, 35.69, 22.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:32:08.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:31:26
2026-02-11T17:32:08.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:32:09.060 [DEBUG] [Thread-132977] [transport.py] [_log()] starting thread (client mode): 0xa2db6b60
2026-02-11T17:32:09.060 [DEBUG] [Thread-132977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:32:09.080 [DEBUG] [Thread-132977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:32:09.080 [INFO] [Thread-132977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] client lang: <none>
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] server lang: <none>
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] kex follows: False
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] Compression: none
2026-02-11T17:32:09.083 [DEBUG] [Thread-132977] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:32:09.102 [DEBUG] [Thread-132977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:32:09.102 [DEBUG] [Thread-132977] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:32:09.103 [DEBUG] [Thread-132977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:32:09.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:32:09.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:32:09.105 [DEBUG] [Thread-132977] [transport.py] [_log()] userauth is OK
2026-02-11T17:32:09.105 [DEBUG] [Thread-132977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:32:09.105 [DEBUG] [Thread-132977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:32:09.105 [DEBUG] [Thread-132977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:32:09.106 [DEBUG] [Thread-132977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:32:09.131 [INFO] [Thread-132977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:32:09.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:32:09.752 [DEBUG] [Thread-132977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:32:09.753 [DEBUG] [Thread-132977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:32:09.753 [DEBUG] [Thread-132977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:32:09.794 [DEBUG] [Thread-132977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:32:09.794 [DEBUG] [Thread-132977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:32:09.797 [DEBUG] [Thread-132977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:32:09.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:32:09.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:32:09.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:32:09.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:32:09.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:32:09.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:32:09.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:32:09.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:32:09.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:32:09.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.647016 -999.00  +22.40  37.54     53  +12.40 1 2 2 1 1   887    0 9.32 -31.97 ----- 38.6 37.5 294.8 41.0 24.7 -12.1 24.6 -11.4 24.3 -10.6 24.6 -11.1
2026-02-11T17:32:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:32:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:32:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.647016
2026-02-11T17:32:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:32:09.820 [DEBUG] [Thread-132977] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:32:09.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:32:09.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:32:09.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:32:09.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:32:09.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:31:26', tmtdew=11.78, humidity=47.33, cloud=0.0, wind=35.69, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:31:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:32:09.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:32:09.921 [DEBUG] [Thread-132980] [transport.py] [_log()] starting thread (client mode): 0xa57d5060
2026-02-11T17:32:09.922 [DEBUG] [Thread-132980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:32:09.936 [DEBUG] [Thread-132980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:32:09.936 [INFO] [Thread-132980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] client lang: <none>
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] server lang: <none>
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] kex follows: False
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:32:09.944 [DEBUG] [Thread-132980] [transport.py] [_log()] Compression: none
2026-02-11T17:32:09.945 [DEBUG] [Thread-132980] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:32:10.001 [DEBUG] [Thread-132980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:32:10.001 [DEBUG] [Thread-132980] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:32:10.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:32:10.002 [DEBUG] [Thread-132980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:32:10.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:32:10.057 [DEBUG] [Thread-132980] [transport.py] [_log()] userauth is OK
2026-02-11T17:32:10.057 [DEBUG] [Thread-132980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:32:10.058 [DEBUG] [Thread-132980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:32:10.058 [DEBUG] [Thread-132980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:32:10.058 [DEBUG] [Thread-132980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:32:10.294 [INFO] [Thread-132980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:32:10.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:32:10.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:32:10.931 [DEBUG] [Thread-132980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:32:10.931 [DEBUG] [Thread-132980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:32:10.979 [DEBUG] [Thread-132980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:32:10.979 [DEBUG] [Thread-132980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:32:10.988 [DEBUG] [Thread-132980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:32:10.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:32:10.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')
2026-02-11T17:32:11.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
2026-02-11T17:32:11.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:32:11.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:32:11.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:32:11.022 [DEBUG] [Thread-132980] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:32:18.674 [DEBUG] [Thread-132982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:32:27.829 [DEBUG] [Thread-132983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:32:33.726 [DEBUG] [Thread-132984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:32:41.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:32:41.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:32: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
2026-02-11T17:32:43.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 32, 3), 11.77, 47.34, 0.0, 32.85, 22.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:32:43.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:32:03
2026-02-11T17:32:43.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:32:43.887 [DEBUG] [Thread-132985] [transport.py] [_log()] starting thread (client mode): 0x9eb068c0
2026-02-11T17:32:43.888 [DEBUG] [Thread-132985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:32:43.907 [DEBUG] [Thread-132985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:32:43.907 [INFO] [Thread-132985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:32:43.910 [DEBUG] [Thread-132985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] client lang: <none>
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] server lang: <none>
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] kex follows: False
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:32:43.911 [DEBUG] [Thread-132985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:32:43.912 [DEBUG] [Thread-132985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:32:43.912 [DEBUG] [Thread-132985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:32:43.912 [DEBUG] [Thread-132985] [transport.py] [_log()] Compression: none
2026-02-11T17:32:43.912 [DEBUG] [Thread-132985] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:32:43.929 [DEBUG] [Thread-132985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:32:43.930 [DEBUG] [Thread-132985] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:32:43.931 [DEBUG] [Thread-132985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:32:43.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:32:43.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:32:43.932 [DEBUG] [Thread-132985] [transport.py] [_log()] userauth is OK
2026-02-11T17:32:43.933 [DEBUG] [Thread-132985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:32:43.933 [DEBUG] [Thread-132985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:32:43.933 [DEBUG] [Thread-132985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:32:43.933 [DEBUG] [Thread-132985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:32:43.950 [INFO] [Thread-132985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:32:43.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:32:44.613 [DEBUG] [Thread-132985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:32:44.614 [DEBUG] [Thread-132985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:32:44.614 [DEBUG] [Thread-132985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:32:44.655 [DEBUG] [Thread-132985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:32:44.655 [DEBUG] [Thread-132985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:32:44.659 [DEBUG] [Thread-132985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:32:44.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:32:44.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:32:44.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:32:44.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:32:44.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:32:44.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:32:44.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:32:44.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:32:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:32:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.647363 -999.00  +22.00  29.13     54  +12.30 1 2 1 1 1   887    0 9.46 -28.67 ----- 31.9 29.1 294.6 41.6 24.6 -11.4 24.6 -11.8 24.1 -11.5 24.4 -11.0
2026-02-11T17:32:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:32:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:32:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.647363
2026-02-11T17:32:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:32:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:32:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:32:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:32:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:32:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:32:03', tmtdew=11.77, humidity=47.34, cloud=0.0, wind=32.85, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:32:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:32:44.686 [DEBUG] [Thread-132985] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:32:44.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:32:44.780 [DEBUG] [Thread-132988] [transport.py] [_log()] starting thread (client mode): 0x9eb04070
2026-02-11T17:32:44.780 [DEBUG] [Thread-132988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:32:44.795 [DEBUG] [Thread-132988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:32:44.795 [INFO] [Thread-132988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:32:44.803 [DEBUG] [Thread-132988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:32:44.803 [DEBUG] [Thread-132988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:32:44.803 [DEBUG] [Thread-132988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] client lang: <none>
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] server lang: <none>
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] kex follows: False
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] Compression: none
2026-02-11T17:32:44.804 [DEBUG] [Thread-132988] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:32:44.861 [DEBUG] [Thread-132988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:32:44.861 [DEBUG] [Thread-132988] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:32:44.862 [DEBUG] [Thread-132988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:32:44.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:32:44.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:32:44.918 [DEBUG] [Thread-132988] [transport.py] [_log()] userauth is OK
2026-02-11T17:32:44.918 [DEBUG] [Thread-132988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:32:44.918 [DEBUG] [Thread-132988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:32:44.918 [DEBUG] [Thread-132988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:32:44.919 [DEBUG] [Thread-132988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:32:44.938 [INFO] [Thread-132988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:32:44.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:32:44.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:32:45.773 [DEBUG] [Thread-132988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:32:45.773 [DEBUG] [Thread-132988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:32:45.821 [DEBUG] [Thread-132988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:32:45.821 [DEBUG] [Thread-132988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:32:45.830 [DEBUG] [Thread-132988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:32:45.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:32:45.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:32:45.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:32:45.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:32:45.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:32:45.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:32:45.865 [DEBUG] [Thread-132988] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:32:48.764 [DEBUG] [Thread-132990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:32:51.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:32:51.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:03.822 [DEBUG] [Thread-132991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:15.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:33:15.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:33:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:33:18.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 32, 38), 12.21, 46.09, 0.0, 29.78, 23.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:33:18.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:32:38
2026-02-11T17:33:18.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:33:18.597 [DEBUG] [Thread-132992] [transport.py] [_log()] starting thread (client mode): 0xa57580a0
2026-02-11T17:33:18.597 [DEBUG] [Thread-132992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:33:18.617 [DEBUG] [Thread-132992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:33:18.617 [INFO] [Thread-132992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:33:18.620 [DEBUG] [Thread-132992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:33:18.620 [DEBUG] [Thread-132992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:33:18.620 [DEBUG] [Thread-132992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:33:18.620 [DEBUG] [Thread-132992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:18.620 [DEBUG] [Thread-132992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] client lang: <none>
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] server lang: <none>
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] kex follows: False
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] Compression: none
2026-02-11T17:33:18.621 [DEBUG] [Thread-132992] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:33:18.638 [DEBUG] [Thread-132992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:33:18.638 [DEBUG] [Thread-132992] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:33:18.639 [DEBUG] [Thread-132992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:33:18.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:33:18.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:33:18.641 [DEBUG] [Thread-132992] [transport.py] [_log()] userauth is OK
2026-02-11T17:33:18.641 [DEBUG] [Thread-132992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:33:18.641 [DEBUG] [Thread-132992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:33:18.642 [DEBUG] [Thread-132992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:33:18.642 [DEBUG] [Thread-132992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:33:18.660 [INFO] [Thread-132992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:33:18.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:33:18.859 [DEBUG] [Thread-132994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:19.287 [DEBUG] [Thread-132992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:33:19.288 [DEBUG] [Thread-132992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:33:19.288 [DEBUG] [Thread-132992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:33:19.329 [DEBUG] [Thread-132992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:33:19.329 [DEBUG] [Thread-132992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:33:19.332 [DEBUG] [Thread-132992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:33:19.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:33:19.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:33:19.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:33:19.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:33:19.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:33:19.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:33:19.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:33:19.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:33:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:33:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.647711 -999.00  +22.10  28.06     54  +12.40 1 2 1 1 1   887    0 9.42 -27.68 ----- 30.8 28.1 292.4 36.2 24.6 -11.2 24.5 -11.1 24.1 -10.7 24.4 -10.3
2026-02-11T17:33:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:33:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:33:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.647711
2026-02-11T17:33:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:33:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:33:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:33:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:33:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:33:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:32:38', tmtdew=12.21, humidity=46.09, cloud=0.0, wind=29.78, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:32:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:33:19.361 [DEBUG] [Thread-132992] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:33:19.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:33:19.456 [DEBUG] [Thread-132996] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-11T17:33:19.457 [DEBUG] [Thread-132996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:33:19.470 [DEBUG] [Thread-132996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:33:19.471 [INFO] [Thread-132996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:19.478 [DEBUG] [Thread-132996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] client lang: <none>
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] server lang: <none>
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] kex follows: False
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] Compression: none
2026-02-11T17:33:19.479 [DEBUG] [Thread-132996] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:33:19.536 [DEBUG] [Thread-132996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:33:19.537 [DEBUG] [Thread-132996] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:33:19.537 [DEBUG] [Thread-132996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:33:19.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:33:19.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:33:19.593 [DEBUG] [Thread-132996] [transport.py] [_log()] userauth is OK
2026-02-11T17:33:19.593 [DEBUG] [Thread-132996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:33:19.593 [DEBUG] [Thread-132996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:33:19.593 [DEBUG] [Thread-132996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:33:19.593 [DEBUG] [Thread-132996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:33:19.616 [INFO] [Thread-132996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:33:19.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:33:19.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:33:20.446 [DEBUG] [Thread-132996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:33:20.446 [DEBUG] [Thread-132996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:33:20.494 [DEBUG] [Thread-132996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:33:20.495 [DEBUG] [Thread-132996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:33:20.504 [DEBUG] [Thread-132996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:33:20.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:33: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')
2026-02-11T17:33: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
2026-02-11T17:33:20.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:33:20.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:33:20.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:33:20.539 [DEBUG] [Thread-132996] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:33:27.863 [DEBUG] [Thread-132998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:33.894 [DEBUG] [Thread-132999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:48.944 [DEBUG] [Thread-133000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:50.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:33:50.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:33:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:33:51.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:51.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:33:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 33, 14), 11.68, 47.63, 0.0, 29.25, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:33:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:33:14
2026-02-11T17:33:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:33:53.187 [DEBUG] [Thread-133001] [transport.py] [_log()] starting thread (client mode): 0x9eb04f40
2026-02-11T17:33:53.187 [DEBUG] [Thread-133001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:33:53.207 [DEBUG] [Thread-133001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:33:53.207 [INFO] [Thread-133001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:33:53.210 [DEBUG] [Thread-133001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:33:53.210 [DEBUG] [Thread-133001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:33:53.210 [DEBUG] [Thread-133001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:33:53.210 [DEBUG] [Thread-133001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] client lang: <none>
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] server lang: <none>
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] kex follows: False
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] Compression: none
2026-02-11T17:33:53.211 [DEBUG] [Thread-133001] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:33:53.231 [DEBUG] [Thread-133001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:33:53.232 [DEBUG] [Thread-133001] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:33:53.232 [DEBUG] [Thread-133001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:33:53.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:33:53.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:33:53.272 [DEBUG] [Thread-133001] [transport.py] [_log()] userauth is OK
2026-02-11T17:33:53.273 [DEBUG] [Thread-133001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:33:53.273 [DEBUG] [Thread-133001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:33:53.273 [DEBUG] [Thread-133001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:33:53.273 [DEBUG] [Thread-133001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:33:53.306 [INFO] [Thread-133001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:33:53.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:33:53.864 [DEBUG] [Thread-133001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:33:53.864 [DEBUG] [Thread-133001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:33:53.865 [DEBUG] [Thread-133001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:33:53.905 [DEBUG] [Thread-133001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:33:53.905 [DEBUG] [Thread-133001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:33:53.909 [DEBUG] [Thread-133001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:33:53.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:33:53.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:33:53.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:33:53.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:33:53.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:33:53.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:33:53.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:33:53.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:33:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:33:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.648058 -999.00  +22.30  20.25     53  +12.40 1 2 1 1 1   887    0 9.28 -25.87 ----- 24.1 20.2 294.2 34.9 24.5 -10.6 24.4 -10.6 24.1 -10.5 24.4 -9.8
2026-02-11T17:33:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:33:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:33:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.648058
2026-02-11T17:33:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:33:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:33:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:33:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:33:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:33:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:33:14', tmtdew=11.68, humidity=47.63, cloud=0.0, wind=29.25, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:33:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:33:53.935 [DEBUG] [Thread-133001] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:33:54.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:33:54.031 [DEBUG] [Thread-133004] [transport.py] [_log()] starting thread (client mode): 0x9eb069b0
2026-02-11T17:33:54.031 [DEBUG] [Thread-133004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:33:54.047 [DEBUG] [Thread-133004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:33:54.047 [INFO] [Thread-133004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:33:54.054 [DEBUG] [Thread-133004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:33:54.054 [DEBUG] [Thread-133004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] client lang: <none>
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] server lang: <none>
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] kex follows: False
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] Compression: none
2026-02-11T17:33:54.055 [DEBUG] [Thread-133004] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:33:54.113 [DEBUG] [Thread-133004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:33:54.114 [DEBUG] [Thread-133004] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:33:54.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:33:54.115 [DEBUG] [Thread-133004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:33:54.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:33:54.169 [DEBUG] [Thread-133004] [transport.py] [_log()] userauth is OK
2026-02-11T17:33:54.169 [DEBUG] [Thread-133004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:33:54.169 [DEBUG] [Thread-133004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:33:54.169 [DEBUG] [Thread-133004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:33:54.169 [DEBUG] [Thread-133004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:33:54.193 [INFO] [Thread-133004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:33:54.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:33:54.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:33:55.014 [DEBUG] [Thread-133004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:33:55.014 [DEBUG] [Thread-133004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:33:55.062 [DEBUG] [Thread-133004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:33:55.062 [DEBUG] [Thread-133004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:33:55.071 [DEBUG] [Thread-133004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:33:55.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:33:55.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:33:55.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:33:55.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:33:55.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:33:55.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:33:55.106 [DEBUG] [Thread-133004] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:34:03.982 [DEBUG] [Thread-133006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:34:19.030 [DEBUG] [Thread-133007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:34:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:34:25.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:34:25.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:34:26.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 33, 50), 11.7, 47.58, 0.0, 32.66, 22.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:34:26.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:33:50
2026-02-11T17:34:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:34:27.429 [DEBUG] [Thread-133008] [transport.py] [_log()] starting thread (client mode): 0x9eb06710
2026-02-11T17:34:27.429 [DEBUG] [Thread-133008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:34:27.449 [DEBUG] [Thread-133008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:34:27.450 [INFO] [Thread-133008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:34:27.452 [DEBUG] [Thread-133008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] client lang: <none>
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] server lang: <none>
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] kex follows: False
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] Compression: none
2026-02-11T17:34:27.453 [DEBUG] [Thread-133008] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:34:27.471 [DEBUG] [Thread-133008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:34:27.471 [DEBUG] [Thread-133008] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:34:27.472 [DEBUG] [Thread-133008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:34:27.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:34:27.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:34:27.474 [DEBUG] [Thread-133008] [transport.py] [_log()] userauth is OK
2026-02-11T17:34:27.474 [DEBUG] [Thread-133008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:34:27.474 [DEBUG] [Thread-133008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:34:27.474 [DEBUG] [Thread-133008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:34:27.474 [DEBUG] [Thread-133008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:34:27.500 [INFO] [Thread-133008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:34:27.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:34:27.905 [DEBUG] [Thread-133010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:34:28.141 [DEBUG] [Thread-133008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:34:28.141 [DEBUG] [Thread-133008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:34:28.141 [DEBUG] [Thread-133008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:34:28.183 [DEBUG] [Thread-133008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:34:28.183 [DEBUG] [Thread-133008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:34:28.186 [DEBUG] [Thread-133008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:34:28.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:34:28.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:34:28.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:34:28.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:34:28.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:34:28.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:34:28.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:34:28.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:34:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:34:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.648752 -999.00  +22.40  28.63     53  +12.40 1 2 1 1 1   887    0 9.38 -23.85 ----- 26.5 28.6 301.4 33.4 24.6 -10.8 24.5 -10.4 24.1 -9.8 24.4 -10.2
2026-02-11T17:34:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:34:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:34:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.648752
2026-02-11T17:34:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:34:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:34:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:34:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:34:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:34:28.215 [DEBUG] [Thread-133008] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:34:28.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:33:50', tmtdew=11.7, humidity=47.58, cloud=0.0, wind=32.66, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:34:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:34:28.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:34:28.304 [DEBUG] [Thread-133012] [transport.py] [_log()] starting thread (client mode): 0x9eb06ad0
2026-02-11T17:34:28.304 [DEBUG] [Thread-133012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:34:28.318 [DEBUG] [Thread-133012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:34:28.318 [INFO] [Thread-133012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:34:28.325 [DEBUG] [Thread-133012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] client lang: <none>
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] server lang: <none>
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] kex follows: False
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] Compression: none
2026-02-11T17:34:28.326 [DEBUG] [Thread-133012] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:34:28.385 [DEBUG] [Thread-133012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:34:28.386 [DEBUG] [Thread-133012] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:34:28.386 [DEBUG] [Thread-133012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:34:28.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:34:28.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:34:28.441 [DEBUG] [Thread-133012] [transport.py] [_log()] userauth is OK
2026-02-11T17:34:28.442 [DEBUG] [Thread-133012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:34:28.442 [DEBUG] [Thread-133012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:34:28.442 [DEBUG] [Thread-133012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:34:28.442 [DEBUG] [Thread-133012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:34:28.461 [INFO] [Thread-133012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:34:28.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:34:28.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:34:29.279 [DEBUG] [Thread-133012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:34:29.279 [DEBUG] [Thread-133012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:34:29.327 [DEBUG] [Thread-133012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:34:29.328 [DEBUG] [Thread-133012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:34:29.337 [DEBUG] [Thread-133012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:34:29.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:34: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')
2026-02-11T17:34: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') -> 00000000
2026-02-11T17:34:29.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:34:29.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:34:29.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:34:29.374 [DEBUG] [Thread-133012] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:34:34.068 [DEBUG] [Thread-133014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:34:49.120 [DEBUG] [Thread-133015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:34:51.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:34:51.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:34:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:34:59.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:34:59.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
2026-02-11T17:35:01.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 34, 27), 11.73, 47.48, 0.0, 36.15, 22.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:35:01.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:34:27
2026-02-11T17:35:01.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:35:01.687 [DEBUG] [Thread-133016] [transport.py] [_log()] starting thread (client mode): 0xa57e2c50
2026-02-11T17:35:01.687 [DEBUG] [Thread-133016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:35:01.707 [DEBUG] [Thread-133016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:35:01.707 [INFO] [Thread-133016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:35:01.710 [DEBUG] [Thread-133016] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:35:01.710 [DEBUG] [Thread-133016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:35:01.710 [DEBUG] [Thread-133016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:35:01.710 [DEBUG] [Thread-133016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:01.710 [DEBUG] [Thread-133016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:01.710 [DEBUG] [Thread-133016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] client lang: <none>
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] server lang: <none>
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] kex follows: False
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] Compression: none
2026-02-11T17:35:01.711 [DEBUG] [Thread-133016] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:35:01.725 [DEBUG] [Thread-133016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:35:01.726 [DEBUG] [Thread-133016] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:35:01.726 [DEBUG] [Thread-133016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:35:01.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:35:01.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:35:01.728 [DEBUG] [Thread-133016] [transport.py] [_log()] userauth is OK
2026-02-11T17:35:01.729 [DEBUG] [Thread-133016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:35:01.729 [DEBUG] [Thread-133016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:35:01.729 [DEBUG] [Thread-133016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:35:01.729 [DEBUG] [Thread-133016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:35:01.748 [INFO] [Thread-133016] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:35:01.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:35:02.337 [DEBUG] [Thread-133016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:35:02.338 [DEBUG] [Thread-133016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:35:02.338 [DEBUG] [Thread-133016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:35:02.378 [DEBUG] [Thread-133016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:35:02.379 [DEBUG] [Thread-133016] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:35:02.382 [DEBUG] [Thread-133016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:35:02.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:35:02.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:35:02.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:35:02.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:35:02.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:35:02.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:35:02.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:35:02.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:35:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:35:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.649099 -999.00  +22.40  18.69     53  +12.40 1 2 1 1 1   887    0 9.56 -20.29 ----- 32.6 18.7 281.7 33.1 24.6 -10.9 24.4 -10.8 24.1 -11.1 24.4 -10.8
2026-02-11T17:35:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:35:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:35:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.649099
2026-02-11T17:35:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:35:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:35:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:35:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:35:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:35:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:34:27', tmtdew=11.73, humidity=47.48, cloud=0.0, wind=36.15, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:34:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:35:02.409 [DEBUG] [Thread-133016] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:35:02.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:35:02.498 [DEBUG] [Thread-133019] [transport.py] [_log()] starting thread (client mode): 0xa57e27a0
2026-02-11T17:35:02.499 [DEBUG] [Thread-133019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:35:02.516 [DEBUG] [Thread-133019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:35:02.517 [INFO] [Thread-133019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] client lang: <none>
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] server lang: <none>
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] kex follows: False
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:35:02.524 [DEBUG] [Thread-133019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:35:02.525 [DEBUG] [Thread-133019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:35:02.525 [DEBUG] [Thread-133019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:35:02.525 [DEBUG] [Thread-133019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:35:02.525 [DEBUG] [Thread-133019] [transport.py] [_log()] Compression: none
2026-02-11T17:35:02.525 [DEBUG] [Thread-133019] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:35:02.585 [DEBUG] [Thread-133019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:35:02.585 [DEBUG] [Thread-133019] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:35:02.586 [DEBUG] [Thread-133019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:35:02.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:35:02.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:35:02.641 [DEBUG] [Thread-133019] [transport.py] [_log()] userauth is OK
2026-02-11T17:35:02.642 [DEBUG] [Thread-133019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:35:02.642 [DEBUG] [Thread-133019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:35:02.642 [DEBUG] [Thread-133019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:35:02.642 [DEBUG] [Thread-133019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:35:02.660 [INFO] [Thread-133019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:35:02.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:35:02.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:35:03.473 [DEBUG] [Thread-133019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:35:03.473 [DEBUG] [Thread-133019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:35:03.521 [DEBUG] [Thread-133019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:35:03.522 [DEBUG] [Thread-133019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:35:03.531 [DEBUG] [Thread-133019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:35:03.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:35:03.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:35:03.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:35:03.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:35:03.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:35:03.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:35:03.568 [DEBUG] [Thread-133019] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:35:04.158 [DEBUG] [Thread-133021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:35:19.216 [DEBUG] [Thread-133022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:35:27.951 [DEBUG] [Thread-133023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:35:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:35:33.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:35:33.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:35:34.254 [DEBUG] [Thread-133024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:35:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 35, 2), 11.7, 47.54, 0.0, 34.76, 22.45, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:35:35.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:35:02
2026-02-11T17:35:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:35:36.343 [DEBUG] [Thread-133025] [transport.py] [_log()] starting thread (client mode): 0xa57e1c60
2026-02-11T17:35:36.343 [DEBUG] [Thread-133025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:35:36.363 [DEBUG] [Thread-133025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:35:36.363 [INFO] [Thread-133025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] client lang: <none>
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] server lang: <none>
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] kex follows: False
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] Compression: none
2026-02-11T17:35:36.366 [DEBUG] [Thread-133025] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:35:36.374 [DEBUG] [Thread-133025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:35:36.374 [DEBUG] [Thread-133025] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:35:36.375 [DEBUG] [Thread-133025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:35:36.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:35:36.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:35:36.376 [DEBUG] [Thread-133025] [transport.py] [_log()] userauth is OK
2026-02-11T17:35:36.376 [DEBUG] [Thread-133025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:35:36.377 [DEBUG] [Thread-133025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:35:36.377 [DEBUG] [Thread-133025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:35:36.377 [DEBUG] [Thread-133025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:35:36.395 [INFO] [Thread-133025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:35:36.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:35:37.031 [DEBUG] [Thread-133025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:35:37.031 [DEBUG] [Thread-133025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:35:37.032 [DEBUG] [Thread-133025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:35:37.072 [DEBUG] [Thread-133025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:35:37.072 [DEBUG] [Thread-133025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:35:37.076 [DEBUG] [Thread-133025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:35:37.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:35:37.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:35:37.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:35:37.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:35:37.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:35:37.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:35:37.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:35:37.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:35:37.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:35:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.649447 -999.00  +22.30  32.23     53  +12.40 1 2 2 1 1   887    0 9.43 -18.87 ----- 32.2 32.2 292.8 41.4 24.6 -11.7 24.4 -11.6 24.1 -11.1 24.4 -11.3
2026-02-11T17:35:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:35:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:35:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.649447
2026-02-11T17:35:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:35:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:35:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:35:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:35:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:35:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:35:02', tmtdew=11.7, humidity=47.54, cloud=0.0, wind=34.76, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:35:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:35:37.102 [DEBUG] [Thread-133025] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:35:37.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:35:37.198 [DEBUG] [Thread-133028] [transport.py] [_log()] starting thread (client mode): 0xa57e19f0
2026-02-11T17:35:37.198 [DEBUG] [Thread-133028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:35:37.212 [DEBUG] [Thread-133028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:35:37.212 [INFO] [Thread-133028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:35:37.219 [DEBUG] [Thread-133028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:35:37.220 [DEBUG] [Thread-133028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:35:37.220 [DEBUG] [Thread-133028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:35:37.220 [DEBUG] [Thread-133028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:37.220 [DEBUG] [Thread-133028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:35:37.220 [DEBUG] [Thread-133028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:37.220 [DEBUG] [Thread-133028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] client lang: <none>
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] server lang: <none>
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] kex follows: False
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:35:37.221 [DEBUG] [Thread-133028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:35:37.222 [DEBUG] [Thread-133028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:35:37.222 [DEBUG] [Thread-133028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:35:37.222 [DEBUG] [Thread-133028] [transport.py] [_log()] Compression: none
2026-02-11T17:35:37.222 [DEBUG] [Thread-133028] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:35:37.277 [DEBUG] [Thread-133028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:35:37.278 [DEBUG] [Thread-133028] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:35:37.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:35:37.279 [DEBUG] [Thread-133028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:35:37.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:35:37.333 [DEBUG] [Thread-133028] [transport.py] [_log()] userauth is OK
2026-02-11T17:35:37.333 [DEBUG] [Thread-133028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:35:37.333 [DEBUG] [Thread-133028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:35:37.334 [DEBUG] [Thread-133028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:35:37.334 [DEBUG] [Thread-133028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:35:37.353 [INFO] [Thread-133028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:35:37.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:35:37.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:35:38.188 [DEBUG] [Thread-133028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:35:38.188 [DEBUG] [Thread-133028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:35:38.236 [DEBUG] [Thread-133028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:35:38.236 [DEBUG] [Thread-133028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:35:38.246 [DEBUG] [Thread-133028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:35:38.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:35:38.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:35:38.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:35:38.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:35:38.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:35:38.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:35:38.283 [DEBUG] [Thread-133028] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:35:49.292 [DEBUG] [Thread-133030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:35:51.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:35:51.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:36:04.353 [DEBUG] [Thread-133031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:36:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:36:08.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:36:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:36:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 35, 37), 12.11, 46.38, 0.0, 38.28, 23.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:36:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:35:37
2026-02-11T17:36:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:36:11.077 [DEBUG] [Thread-133032] [transport.py] [_log()] starting thread (client mode): 0xa57e26b0
2026-02-11T17:36:11.077 [DEBUG] [Thread-133032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:36:11.097 [DEBUG] [Thread-133032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:36:11.097 [INFO] [Thread-133032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:36:11.100 [DEBUG] [Thread-133032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:36:11.100 [DEBUG] [Thread-133032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] client lang: <none>
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] server lang: <none>
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] kex follows: False
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] Compression: none
2026-02-11T17:36:11.101 [DEBUG] [Thread-133032] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:36:11.120 [DEBUG] [Thread-133032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:36:11.120 [DEBUG] [Thread-133032] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:36:11.121 [DEBUG] [Thread-133032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:36:11.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:36:11.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:36:11.122 [DEBUG] [Thread-133032] [transport.py] [_log()] userauth is OK
2026-02-11T17:36:11.122 [DEBUG] [Thread-133032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:36:11.123 [DEBUG] [Thread-133032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:36:11.123 [DEBUG] [Thread-133032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:36:11.123 [DEBUG] [Thread-133032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:36:11.136 [INFO] [Thread-133032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:36:11.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:36:11.778 [DEBUG] [Thread-133032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:36:11.778 [DEBUG] [Thread-133032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:36:11.779 [DEBUG] [Thread-133032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:36:11.820 [DEBUG] [Thread-133032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:36:11.820 [DEBUG] [Thread-133032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:36:11.824 [DEBUG] [Thread-133032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:36:11.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:36:11.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:36:11.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:36:11.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:36:11.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:36:11.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:36:11.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:36:11.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:36:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:36:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.649794 -999.00  +22.10  35.72     53  +12.30 1 2 2 1 1   887    0 9.61 -19.67 ----- 34.4 35.7 291.0 46.0 24.4 -12.2 24.4 -11.7 24.1 -11.7 24.3 -11.4
2026-02-11T17:36:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:36:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:36:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.649794
2026-02-11T17:36:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:36:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:36:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:36:11.850 [DEBUG] [Thread-133032] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:36:11.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:36:11.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:36:11.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:35:37', tmtdew=12.11, humidity=46.38, cloud=0.0, wind=38.28, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:35:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:36:11.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:36:11.945 [DEBUG] [Thread-133035] [transport.py] [_log()] starting thread (client mode): 0xa2db73a0
2026-02-11T17:36:11.945 [DEBUG] [Thread-133035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:36:11.959 [DEBUG] [Thread-133035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:36:11.959 [INFO] [Thread-133035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] client lang: <none>
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] server lang: <none>
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] kex follows: False
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:36:11.967 [DEBUG] [Thread-133035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:36:11.968 [DEBUG] [Thread-133035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:36:11.968 [DEBUG] [Thread-133035] [transport.py] [_log()] Compression: none
2026-02-11T17:36:11.968 [DEBUG] [Thread-133035] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:36:12.025 [DEBUG] [Thread-133035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:36:12.025 [DEBUG] [Thread-133035] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:36:12.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:36:12.026 [DEBUG] [Thread-133035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:36:12.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:36:12.081 [DEBUG] [Thread-133035] [transport.py] [_log()] userauth is OK
2026-02-11T17:36:12.081 [DEBUG] [Thread-133035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:36:12.081 [DEBUG] [Thread-133035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:36:12.081 [DEBUG] [Thread-133035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:36:12.081 [DEBUG] [Thread-133035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:36:12.100 [INFO] [Thread-133035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:36:12.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:36:12.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:36:12.932 [DEBUG] [Thread-133035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:36:12.932 [DEBUG] [Thread-133035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:36:12.980 [DEBUG] [Thread-133035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:36:12.980 [DEBUG] [Thread-133035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:36:12.989 [DEBUG] [Thread-133035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:36:12.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:36:12.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:36:13.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:36:13.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:36:13.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:36:13.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:36:13.023 [DEBUG] [Thread-133035] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:36:19.389 [DEBUG] [Thread-133037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:36:27.994 [DEBUG] [Thread-133038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:36:34.437 [DEBUG] [Thread-133039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:36:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:36:43.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:36:43.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:36:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 36, 14), 11.7, 47.34, 0.0, 29.15, 22.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:36:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:36:14
2026-02-11T17:36:45.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:36:45.408 [DEBUG] [Thread-133040] [transport.py] [_log()] starting thread (client mode): 0xa57e27a0
2026-02-11T17:36:45.409 [DEBUG] [Thread-133040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:36:45.428 [DEBUG] [Thread-133040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:36:45.428 [INFO] [Thread-133040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:36:45.432 [DEBUG] [Thread-133040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:36:45.432 [DEBUG] [Thread-133040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:36:45.432 [DEBUG] [Thread-133040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:36:45.432 [DEBUG] [Thread-133040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:45.432 [DEBUG] [Thread-133040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:45.432 [DEBUG] [Thread-133040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:45.432 [DEBUG] [Thread-133040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] client lang: <none>
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] server lang: <none>
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] kex follows: False
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] Compression: none
2026-02-11T17:36:45.433 [DEBUG] [Thread-133040] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:36:45.450 [DEBUG] [Thread-133040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:36:45.451 [DEBUG] [Thread-133040] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:36:45.451 [DEBUG] [Thread-133040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:36:45.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:36:45.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:36:45.454 [DEBUG] [Thread-133040] [transport.py] [_log()] userauth is OK
2026-02-11T17:36:45.454 [DEBUG] [Thread-133040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:36:45.454 [DEBUG] [Thread-133040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:36:45.454 [DEBUG] [Thread-133040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:36:45.454 [DEBUG] [Thread-133040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:36:45.490 [INFO] [Thread-133040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:36:45.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:36:46.252 [DEBUG] [Thread-133040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:36:46.252 [DEBUG] [Thread-133040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:36:46.253 [DEBUG] [Thread-133040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:36:46.293 [DEBUG] [Thread-133040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:36:46.294 [DEBUG] [Thread-133040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:36:46.297 [DEBUG] [Thread-133040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:36:46.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:36:46.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:36:46.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:36:46.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:36:46.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:36:46.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:36:46.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:36:46.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:36:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:36:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.650141 -999.00  +22.00  34.86     54  +12.30 1 2 2 1 1   887    0 9.33 -20.66 ----- 36.8 34.9 297.4 46.9 24.4 -12.7 24.3 -11.8 24.0 -11.5 24.2 -11.7
2026-02-11T17:36:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:36:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:36:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.650141
2026-02-11T17:36:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:36:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:36:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:36:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:36:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:36:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:36:14', tmtdew=11.7, humidity=47.34, cloud=0.0, wind=29.15, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:36:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:36:46.323 [DEBUG] [Thread-133040] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:36:46.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:36:46.420 [DEBUG] [Thread-133043] [transport.py] [_log()] starting thread (client mode): 0xa57e3d00
2026-02-11T17:36:46.421 [DEBUG] [Thread-133043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:36:46.435 [DEBUG] [Thread-133043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:36:46.435 [INFO] [Thread-133043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] client lang: <none>
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] server lang: <none>
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] kex follows: False
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:36:46.443 [DEBUG] [Thread-133043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:36:46.444 [DEBUG] [Thread-133043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:36:46.444 [DEBUG] [Thread-133043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:36:46.444 [DEBUG] [Thread-133043] [transport.py] [_log()] Compression: none
2026-02-11T17:36:46.444 [DEBUG] [Thread-133043] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:36:46.504 [DEBUG] [Thread-133043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:36:46.505 [DEBUG] [Thread-133043] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:36:46.505 [DEBUG] [Thread-133043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:36:46.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:36:46.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:36:46.560 [DEBUG] [Thread-133043] [transport.py] [_log()] userauth is OK
2026-02-11T17:36:46.561 [DEBUG] [Thread-133043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:36:46.561 [DEBUG] [Thread-133043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:36:46.561 [DEBUG] [Thread-133043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:36:46.561 [DEBUG] [Thread-133043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:36:46.579 [INFO] [Thread-133043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:36:46.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:36:46.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:36:47.409 [DEBUG] [Thread-133043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:36:47.409 [DEBUG] [Thread-133043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:36:47.457 [DEBUG] [Thread-133043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:36:47.457 [DEBUG] [Thread-133043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:36:47.466 [DEBUG] [Thread-133043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:36:47.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:36:47.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:36:47.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:36:47.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:36:47.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:36:47.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:36:47.499 [DEBUG] [Thread-133043] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:36:49.473 [DEBUG] [Thread-133045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:36:51.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:36:51.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37:04.528 [DEBUG] [Thread-133046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37:17.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:37:17.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:37:17.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:37:19.563 [DEBUG] [Thread-133047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 36, 49), 11.75, 47.19, 0.0, 34.16, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:37:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:36:49
2026-02-11T17:37:19.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:37:20.140 [DEBUG] [Thread-133048] [transport.py] [_log()] starting thread (client mode): 0xa57e3430
2026-02-11T17:37:20.140 [DEBUG] [Thread-133048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:37:20.160 [DEBUG] [Thread-133048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:37:20.160 [INFO] [Thread-133048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:37:20.164 [DEBUG] [Thread-133048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:37:20.164 [DEBUG] [Thread-133048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:37:20.164 [DEBUG] [Thread-133048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:37:20.164 [DEBUG] [Thread-133048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:20.164 [DEBUG] [Thread-133048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:20.164 [DEBUG] [Thread-133048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] client lang: <none>
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] server lang: <none>
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] kex follows: False
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] Compression: none
2026-02-11T17:37:20.165 [DEBUG] [Thread-133048] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:37:20.180 [DEBUG] [Thread-133048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:37:20.180 [DEBUG] [Thread-133048] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:37:20.180 [DEBUG] [Thread-133048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:37:20.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:37:20.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:37:20.181 [DEBUG] [Thread-133048] [transport.py] [_log()] userauth is OK
2026-02-11T17:37:20.181 [DEBUG] [Thread-133048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:37:20.181 [DEBUG] [Thread-133048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:37:20.181 [DEBUG] [Thread-133048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:37:20.181 [DEBUG] [Thread-133048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:37:20.190 [INFO] [Thread-133048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:37:20.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:37:20.802 [DEBUG] [Thread-133048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:37:20.802 [DEBUG] [Thread-133048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:37:20.803 [DEBUG] [Thread-133048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:37:20.843 [DEBUG] [Thread-133048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:37:20.843 [DEBUG] [Thread-133048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:37:20.846 [DEBUG] [Thread-133048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:37:20.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:37:20.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:37:20.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:37:20.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:37:20.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:37:20.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:37:20.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:37:20.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:37:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:37:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.650488 -999.00  +22.00  26.29     54  +12.30 1 2 1 1 1   887    0 9.58 -22.21 ----- 31.4 26.3 294.4 42.2 24.3 -12.3 24.2 -11.9 23.9 -11.2 24.2 -11.4
2026-02-11T17:37:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:37:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:37:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.650488
2026-02-11T17:37:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:37:20.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:37:20.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:37:20.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:37:20.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:37:20.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:36:49', tmtdew=11.75, humidity=47.19, cloud=0.0, wind=34.16, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:36:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:37:20.870 [DEBUG] [Thread-133048] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:37:20.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:37:20.964 [DEBUG] [Thread-133051] [transport.py] [_log()] starting thread (client mode): 0xa57e3730
2026-02-11T17:37:20.964 [DEBUG] [Thread-133051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:37:20.978 [DEBUG] [Thread-133051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:37:20.978 [INFO] [Thread-133051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:37:20.986 [DEBUG] [Thread-133051] [transport.py] [_log()] client lang: <none>
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] server lang: <none>
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] kex follows: False
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] Compression: none
2026-02-11T17:37:20.987 [DEBUG] [Thread-133051] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:37:21.044 [DEBUG] [Thread-133051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:37:21.045 [DEBUG] [Thread-133051] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:37:21.045 [DEBUG] [Thread-133051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:37:21.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:37:21.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:37:21.101 [DEBUG] [Thread-133051] [transport.py] [_log()] userauth is OK
2026-02-11T17:37:21.101 [DEBUG] [Thread-133051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:37:21.101 [DEBUG] [Thread-133051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:37:21.101 [DEBUG] [Thread-133051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:37:21.101 [DEBUG] [Thread-133051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:37:21.120 [INFO] [Thread-133051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:37:21.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:37:21.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:37:21.949 [DEBUG] [Thread-133051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:37:21.949 [DEBUG] [Thread-133051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:37:21.997 [DEBUG] [Thread-133051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:37:21.998 [DEBUG] [Thread-133051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:37:22.007 [DEBUG] [Thread-133051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:37:22.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:37:22.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:37:22.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:37:22.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:37:22.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:37:22.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:37:22.044 [DEBUG] [Thread-133051] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:37:28.032 [DEBUG] [Thread-133053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37:34.598 [DEBUG] [Thread-133054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37:49.650 [DEBUG] [Thread-133055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37:52.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:37:52.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:37:52.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37:52.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:37: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
2026-02-11T17:37:53.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 37, 25), 11.75, 47.21, 0.0, 35.11, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:37:53.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:37:25
2026-02-11T17:37:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:37:54.432 [DEBUG] [Thread-133056] [transport.py] [_log()] starting thread (client mode): 0xa57e0b50
2026-02-11T17:37:54.432 [DEBUG] [Thread-133056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:37:54.452 [DEBUG] [Thread-133056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:37:54.452 [INFO] [Thread-133056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:37:54.455 [DEBUG] [Thread-133056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:37:54.455 [DEBUG] [Thread-133056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] client lang: <none>
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] server lang: <none>
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] kex follows: False
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] Compression: none
2026-02-11T17:37:54.456 [DEBUG] [Thread-133056] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:37:54.474 [DEBUG] [Thread-133056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:37:54.474 [DEBUG] [Thread-133056] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:37:54.475 [DEBUG] [Thread-133056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:37:54.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:37:54.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:37:54.477 [DEBUG] [Thread-133056] [transport.py] [_log()] userauth is OK
2026-02-11T17:37:54.477 [DEBUG] [Thread-133056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:37:54.477 [DEBUG] [Thread-133056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:37:54.477 [DEBUG] [Thread-133056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:37:54.477 [DEBUG] [Thread-133056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:37:54.504 [INFO] [Thread-133056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:37:54.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:37:55.138 [DEBUG] [Thread-133056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:37:55.138 [DEBUG] [Thread-133056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:37:55.139 [DEBUG] [Thread-133056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:37:55.180 [DEBUG] [Thread-133056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:37:55.180 [DEBUG] [Thread-133056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:37:55.183 [DEBUG] [Thread-133056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:37:55.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:37:55.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:37:55.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:37:55.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:37:55.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:37:55.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:37:55.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:37:55.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:37:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:37:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.650836 -999.00  +21.90  34.80     54  +12.30 1 2 2 1 1   887    0 9.22 -24.74 ----- 31.2 34.8 295.4 39.6 24.3 -12.4 24.2 -11.6 23.8 -11.2 24.1 -11.4
2026-02-11T17:37:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:37:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:37:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.650836
2026-02-11T17:37:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:37:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:37:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:37:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:37:55.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:37:55.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:37:25', tmtdew=11.75, humidity=47.21, cloud=0.0, wind=35.11, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:37:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:37:55.204 [DEBUG] [Thread-133056] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:37:55.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:37:55.307 [DEBUG] [Thread-133059] [transport.py] [_log()] starting thread (client mode): 0xa5743ca0
2026-02-11T17:37:55.307 [DEBUG] [Thread-133059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:37:55.322 [DEBUG] [Thread-133059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:37:55.322 [INFO] [Thread-133059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:37:55.329 [DEBUG] [Thread-133059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] client lang: <none>
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] server lang: <none>
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] kex follows: False
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:37:55.330 [DEBUG] [Thread-133059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:37:55.331 [DEBUG] [Thread-133059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:37:55.331 [DEBUG] [Thread-133059] [transport.py] [_log()] Compression: none
2026-02-11T17:37:55.331 [DEBUG] [Thread-133059] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:37:55.389 [DEBUG] [Thread-133059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:37:55.390 [DEBUG] [Thread-133059] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:37:55.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:37:55.391 [DEBUG] [Thread-133059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:37:55.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:37:55.448 [DEBUG] [Thread-133059] [transport.py] [_log()] userauth is OK
2026-02-11T17:37:55.448 [DEBUG] [Thread-133059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:37:55.449 [DEBUG] [Thread-133059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:37:55.449 [DEBUG] [Thread-133059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:37:55.449 [DEBUG] [Thread-133059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:37:55.467 [INFO] [Thread-133059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:37:55.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:37:55.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:37:56.297 [DEBUG] [Thread-133059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:37:56.297 [DEBUG] [Thread-133059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:37:56.346 [DEBUG] [Thread-133059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:37:56.346 [DEBUG] [Thread-133059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:37:56.356 [DEBUG] [Thread-133059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:37:56.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:37:56.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:37: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') -> 00000000
2026-02-11T17:37:56.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:37:56.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:37:56.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:37:56.392 [DEBUG] [Thread-133059] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:38:04.686 [DEBUG] [Thread-133061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:38:19.738 [DEBUG] [Thread-133062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:38:26.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:38:26.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:38:26.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:38:28.064 [DEBUG] [Thread-133063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:38:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 38, 1), 11.68, 47.61, 0.0, 34.28, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:38:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:38:01
2026-02-11T17:38:28.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:38:28.760 [DEBUG] [Thread-133064] [transport.py] [_log()] starting thread (client mode): 0xa5741870
2026-02-11T17:38:28.760 [DEBUG] [Thread-133064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:38:28.780 [DEBUG] [Thread-133064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:38:28.780 [INFO] [Thread-133064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:38:28.783 [DEBUG] [Thread-133064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] client lang: <none>
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] server lang: <none>
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] kex follows: False
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] Compression: none
2026-02-11T17:38:28.784 [DEBUG] [Thread-133064] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:38:28.799 [DEBUG] [Thread-133064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:38:28.799 [DEBUG] [Thread-133064] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:38:28.800 [DEBUG] [Thread-133064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:38:28.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:38:28.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:38:28.802 [DEBUG] [Thread-133064] [transport.py] [_log()] userauth is OK
2026-02-11T17:38:28.802 [DEBUG] [Thread-133064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:38:28.802 [DEBUG] [Thread-133064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:38:28.802 [DEBUG] [Thread-133064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:38:28.802 [DEBUG] [Thread-133064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:38:28.836 [INFO] [Thread-133064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:38:28.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:38:29.493 [DEBUG] [Thread-133064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:38:29.493 [DEBUG] [Thread-133064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:38:29.493 [DEBUG] [Thread-133064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:38:29.534 [DEBUG] [Thread-133064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:38:29.534 [DEBUG] [Thread-133064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:38:29.537 [DEBUG] [Thread-133064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:38:29.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:38:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:38:29.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:38:29.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:38:29.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:38:29.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:38:29.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:38:29.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:38:29.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:38:29.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.651183 -999.00  +22.10  34.70     53  +12.30 1 2 2 1 1   887    0 9.09 -24.42 ----- 33.9 34.7 297.0 36.7 24.3 -12.5 24.2 -11.2 23.9 -10.2 24.1 -11.4
2026-02-11T17:38:29.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:38:29.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:38:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.651183
2026-02-11T17:38:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:38:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:38:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:38:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:38:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:38:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:38:01', tmtdew=11.68, humidity=47.61, cloud=0.0, wind=34.28, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:37:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:38:29.562 [DEBUG] [Thread-133064] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:38:29.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:38:29.660 [DEBUG] [Thread-133067] [transport.py] [_log()] starting thread (client mode): 0xa2db79d0
2026-02-11T17:38:29.660 [DEBUG] [Thread-133067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:38:29.675 [DEBUG] [Thread-133067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:38:29.675 [INFO] [Thread-133067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:38:29.682 [DEBUG] [Thread-133067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:38:29.682 [DEBUG] [Thread-133067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:38:29.682 [DEBUG] [Thread-133067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:38:29.682 [DEBUG] [Thread-133067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:38:29.682 [DEBUG] [Thread-133067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] client lang: <none>
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] server lang: <none>
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] kex follows: False
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] Compression: none
2026-02-11T17:38:29.683 [DEBUG] [Thread-133067] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:38:29.743 [DEBUG] [Thread-133067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:38:29.744 [DEBUG] [Thread-133067] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:38:29.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:38:29.745 [DEBUG] [Thread-133067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:38:29.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:38:29.799 [DEBUG] [Thread-133067] [transport.py] [_log()] userauth is OK
2026-02-11T17:38:29.800 [DEBUG] [Thread-133067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:38:29.800 [DEBUG] [Thread-133067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:38:29.800 [DEBUG] [Thread-133067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:38:29.800 [DEBUG] [Thread-133067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:38:29.819 [INFO] [Thread-133067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:38:29.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:38:29.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:38:30.660 [DEBUG] [Thread-133067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:38:30.660 [DEBUG] [Thread-133067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:38:30.710 [DEBUG] [Thread-133067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:38:30.710 [DEBUG] [Thread-133067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:38:30.722 [DEBUG] [Thread-133067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:38:30.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:38:30.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:38:30.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:38:30.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:38:30.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:38:30.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:38:30.769 [DEBUG] [Thread-133067] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:38:34.770 [DEBUG] [Thread-133069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:38:49.828 [DEBUG] [Thread-133070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:38:52.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:38:52.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:39:00.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:39:00.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:39:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:39:02.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 38, 37), 12.03, 46.58, 0.0, 36.69, 22.97, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:39:02.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:38:37
2026-02-11T17:39:03.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:39:03.485 [DEBUG] [Thread-133071] [transport.py] [_log()] starting thread (client mode): 0xa57e3400
2026-02-11T17:39:03.485 [DEBUG] [Thread-133071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:39:03.504 [DEBUG] [Thread-133071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:39:03.504 [INFO] [Thread-133071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:39:03.508 [DEBUG] [Thread-133071] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:39:03.508 [DEBUG] [Thread-133071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:39:03.508 [DEBUG] [Thread-133071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:39:03.508 [DEBUG] [Thread-133071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:03.508 [DEBUG] [Thread-133071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:03.508 [DEBUG] [Thread-133071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:03.508 [DEBUG] [Thread-133071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] client lang: <none>
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] server lang: <none>
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] kex follows: False
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] Compression: none
2026-02-11T17:39:03.509 [DEBUG] [Thread-133071] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:39:03.526 [DEBUG] [Thread-133071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:39:03.526 [DEBUG] [Thread-133071] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:39:03.527 [DEBUG] [Thread-133071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:39:03.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:39:03.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:39:03.529 [DEBUG] [Thread-133071] [transport.py] [_log()] userauth is OK
2026-02-11T17:39:03.529 [DEBUG] [Thread-133071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:39:03.529 [DEBUG] [Thread-133071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:39:03.529 [DEBUG] [Thread-133071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:39:03.529 [DEBUG] [Thread-133071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:39:03.554 [INFO] [Thread-133071] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:39:03.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:39:04.166 [DEBUG] [Thread-133071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:39:04.166 [DEBUG] [Thread-133071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:39:04.166 [DEBUG] [Thread-133071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:39:04.207 [DEBUG] [Thread-133071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:39:04.208 [DEBUG] [Thread-133071] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:39:04.211 [DEBUG] [Thread-133071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:39:04.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:39:04.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:39:04.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:39:04.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:39:04.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:39:04.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:39:04.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:39:04.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:39:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:39:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.651530 -999.00  +21.90  31.79     54  +12.20 1 2 2 1 1   887    0 9.22 -21.32 ----- 32.7 31.8 291.6 42.3 24.2 -12.7 24.2 -11.7 23.8 -11.0 24.1 -11.4
2026-02-11T17:39:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:39:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:39:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.651530
2026-02-11T17:39:04.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:39:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:39:04.239 [DEBUG] [Thread-133071] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:39:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:39:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:39:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:39:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:38:37', tmtdew=12.03, humidity=46.58, cloud=0.0, wind=36.69, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:38:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:39:04.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:39:04.329 [DEBUG] [Thread-133074] [transport.py] [_log()] starting thread (client mode): 0xa57e24a0
2026-02-11T17:39:04.330 [DEBUG] [Thread-133074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:39:04.345 [DEBUG] [Thread-133074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:39:04.345 [INFO] [Thread-133074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:39:04.353 [DEBUG] [Thread-133074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:39:04.353 [DEBUG] [Thread-133074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:39:04.353 [DEBUG] [Thread-133074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:39:04.353 [DEBUG] [Thread-133074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:04.353 [DEBUG] [Thread-133074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:04.353 [DEBUG] [Thread-133074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] client lang: <none>
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] server lang: <none>
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] kex follows: False
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] Compression: none
2026-02-11T17:39:04.354 [DEBUG] [Thread-133074] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:39:04.412 [DEBUG] [Thread-133074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:39:04.413 [DEBUG] [Thread-133074] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:39:04.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:39:04.414 [DEBUG] [Thread-133074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:39:04.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:39:04.468 [DEBUG] [Thread-133074] [transport.py] [_log()] userauth is OK
2026-02-11T17:39:04.468 [DEBUG] [Thread-133074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:39:04.468 [DEBUG] [Thread-133074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:39:04.468 [DEBUG] [Thread-133074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:39:04.468 [DEBUG] [Thread-133074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:39:04.493 [INFO] [Thread-133074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:39:04.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:39:04.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:39:04.864 [DEBUG] [Thread-133076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:39:05.325 [DEBUG] [Thread-133074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:39:05.325 [DEBUG] [Thread-133074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:39:05.373 [DEBUG] [Thread-133074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:39:05.373 [DEBUG] [Thread-133074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:39:05.382 [DEBUG] [Thread-133074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:39:05.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:39:05.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:39:05.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:39:05.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:39:05.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:39:05.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:39:05.421 [DEBUG] [Thread-133074] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:39:19.927 [DEBUG] [Thread-133077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:39:28.104 [DEBUG] [Thread-133078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:39:34.965 [DEBUG] [Thread-133079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:39:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:39:35.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:39:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:39:37.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 39, 13), 11.72, 47.29, 0.0, 29.92, 22.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:39:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:39:13
2026-02-11T17:39:37.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:39:38.038 [DEBUG] [Thread-133080] [transport.py] [_log()] starting thread (client mode): 0xa2db6ef0
2026-02-11T17:39:38.038 [DEBUG] [Thread-133080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:39:38.058 [DEBUG] [Thread-133080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:39:38.059 [INFO] [Thread-133080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:39:38.061 [DEBUG] [Thread-133080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] client lang: <none>
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] server lang: <none>
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] kex follows: False
2026-02-11T17:39:38.062 [DEBUG] [Thread-133080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:39:38.063 [DEBUG] [Thread-133080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:39:38.063 [DEBUG] [Thread-133080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:39:38.063 [DEBUG] [Thread-133080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:39:38.063 [DEBUG] [Thread-133080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:39:38.063 [DEBUG] [Thread-133080] [transport.py] [_log()] Compression: none
2026-02-11T17:39:38.063 [DEBUG] [Thread-133080] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:39:38.080 [DEBUG] [Thread-133080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:39:38.080 [DEBUG] [Thread-133080] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:39:38.080 [DEBUG] [Thread-133080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:39:38.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:39:38.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:39:38.081 [DEBUG] [Thread-133080] [transport.py] [_log()] userauth is OK
2026-02-11T17:39:38.081 [DEBUG] [Thread-133080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:39:38.081 [DEBUG] [Thread-133080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:39:38.081 [DEBUG] [Thread-133080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:39:38.081 [DEBUG] [Thread-133080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:39:38.096 [INFO] [Thread-133080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:39:38.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:39:38.867 [DEBUG] [Thread-133080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:39:38.868 [DEBUG] [Thread-133080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:39:38.868 [DEBUG] [Thread-133080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:39:38.908 [DEBUG] [Thread-133080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:39:38.908 [DEBUG] [Thread-133080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:39:38.912 [DEBUG] [Thread-133080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:39:38.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:39:38.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:39:38.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:39:38.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:39:38.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:39:38.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:39:38.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:39:38.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:39:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:39:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.652224 -999.00  +21.80  31.00     54  +12.20 1 2 2 1 1   887    0 9.33 -17.79 ----- 30.8 31.0 294.2 38.0 24.1 -12.3 24.1 -11.3 23.7 -10.7 23.9 -11.1
2026-02-11T17:39:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:39:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:39:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.652224
2026-02-11T17:39:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:39:13', tmtdew=11.72, humidity=47.29, cloud=0.0, wind=29.92, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:39:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:39:38.937 [DEBUG] [Thread-133080] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:39:39.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:39:39.033 [DEBUG] [Thread-133083] [transport.py] [_log()] starting thread (client mode): 0x9eb053c0
2026-02-11T17:39:39.033 [DEBUG] [Thread-133083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:39:39.048 [DEBUG] [Thread-133083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:39:39.048 [INFO] [Thread-133083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:39:39.056 [DEBUG] [Thread-133083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:39:39.056 [DEBUG] [Thread-133083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:39:39.056 [DEBUG] [Thread-133083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:39:39.056 [DEBUG] [Thread-133083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:39.056 [DEBUG] [Thread-133083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:39:39.056 [DEBUG] [Thread-133083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] client lang: <none>
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] server lang: <none>
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] kex follows: False
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:39:39.057 [DEBUG] [Thread-133083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:39:39.058 [DEBUG] [Thread-133083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:39:39.058 [DEBUG] [Thread-133083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:39:39.058 [DEBUG] [Thread-133083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:39:39.058 [DEBUG] [Thread-133083] [transport.py] [_log()] Compression: none
2026-02-11T17:39:39.058 [DEBUG] [Thread-133083] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:39:39.116 [DEBUG] [Thread-133083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:39:39.117 [DEBUG] [Thread-133083] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:39:39.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:39:39.118 [DEBUG] [Thread-133083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:39:39.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:39:39.176 [DEBUG] [Thread-133083] [transport.py] [_log()] userauth is OK
2026-02-11T17:39:39.176 [DEBUG] [Thread-133083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:39:39.177 [DEBUG] [Thread-133083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:39:39.177 [DEBUG] [Thread-133083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:39:39.177 [DEBUG] [Thread-133083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:39:39.195 [INFO] [Thread-133083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:39:39.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:39:39.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:39:40.020 [DEBUG] [Thread-133083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:39:40.020 [DEBUG] [Thread-133083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:39:40.072 [DEBUG] [Thread-133083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:39:40.072 [DEBUG] [Thread-133083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:39:40.081 [DEBUG] [Thread-133083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:39:40.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:39:40.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')
2026-02-11T17:39:40.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:39:40.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:39:40.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:39:40.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:39:40.118 [DEBUG] [Thread-133083] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:39:50.005 [DEBUG] [Thread-133085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:39:52.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:39:52.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:40:05.058 [DEBUG] [Thread-133086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:40:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:40:10.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:40:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:40:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 39, 48), 11.76, 47.31, 0.0, 28.69, 22.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:40:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:39:48
2026-02-11T17:40:12.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:40:12.813 [DEBUG] [Thread-133087] [transport.py] [_log()] starting thread (client mode): 0xa57c23b0
2026-02-11T17:40:12.813 [DEBUG] [Thread-133087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:40:12.833 [DEBUG] [Thread-133087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:40:12.833 [INFO] [Thread-133087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:40:12.836 [DEBUG] [Thread-133087] [transport.py] [_log()] client lang: <none>
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] server lang: <none>
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] kex follows: False
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] Compression: none
2026-02-11T17:40:12.837 [DEBUG] [Thread-133087] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:40:12.855 [DEBUG] [Thread-133087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:40:12.856 [DEBUG] [Thread-133087] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:40:12.856 [DEBUG] [Thread-133087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:40:12.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:40:12.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:40:12.858 [DEBUG] [Thread-133087] [transport.py] [_log()] userauth is OK
2026-02-11T17:40:12.859 [DEBUG] [Thread-133087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:40:12.859 [DEBUG] [Thread-133087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:40:12.859 [DEBUG] [Thread-133087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:40:12.859 [DEBUG] [Thread-133087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:40:12.879 [INFO] [Thread-133087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:40:12.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:40:13.849 [DEBUG] [Thread-133087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:40:13.849 [DEBUG] [Thread-133087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:40:13.849 [DEBUG] [Thread-133087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:40:13.890 [DEBUG] [Thread-133087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:40:13.890 [DEBUG] [Thread-133087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:40:13.893 [DEBUG] [Thread-133087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:40:13.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:40:13.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:40:13.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:40:13.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:40:13.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:40:13.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:40:13.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:40:13.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:40:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:40:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.652572 -999.00  +21.70  28.03     54  +12.30 1 2 1 1 1   887    0 9.60 -18.52 ----- 28.7 28.0 295.2 36.3 24.1 -12.1 24.0 -11.1 23.6 -11.0 23.9 -10.7
2026-02-11T17:40:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:40:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:40:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.652572
2026-02-11T17:40:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:40:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:40:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:40:13.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:40:13.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:40:13.917 [DEBUG] [Thread-133087] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:40:13.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:39:48', tmtdew=11.76, humidity=47.31, cloud=0.0, wind=28.69, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:39:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:40:14.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:40:14.012 [DEBUG] [Thread-133090] [transport.py] [_log()] starting thread (client mode): 0x9eb07dc0
2026-02-11T17:40:14.012 [DEBUG] [Thread-133090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:40:14.032 [DEBUG] [Thread-133090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:40:14.032 [INFO] [Thread-133090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:40:14.039 [DEBUG] [Thread-133090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] client lang: <none>
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] server lang: <none>
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] kex follows: False
2026-02-11T17:40:14.040 [DEBUG] [Thread-133090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:40:14.041 [DEBUG] [Thread-133090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:40:14.041 [DEBUG] [Thread-133090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:40:14.041 [DEBUG] [Thread-133090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:40:14.041 [DEBUG] [Thread-133090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:40:14.041 [DEBUG] [Thread-133090] [transport.py] [_log()] Compression: none
2026-02-11T17:40:14.041 [DEBUG] [Thread-133090] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:40:14.107 [DEBUG] [Thread-133090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:40:14.107 [DEBUG] [Thread-133090] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:40:14.108 [DEBUG] [Thread-133090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:40:14.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:40:14.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:40:14.164 [DEBUG] [Thread-133090] [transport.py] [_log()] userauth is OK
2026-02-11T17:40:14.164 [DEBUG] [Thread-133090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:40:14.164 [DEBUG] [Thread-133090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:40:14.164 [DEBUG] [Thread-133090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:40:14.164 [DEBUG] [Thread-133090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:40:14.184 [INFO] [Thread-133090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:40:14.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:40:14.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:40:15.030 [DEBUG] [Thread-133090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:40:15.030 [DEBUG] [Thread-133090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:40:15.079 [DEBUG] [Thread-133090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:40:15.080 [DEBUG] [Thread-133090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:40:15.089 [DEBUG] [Thread-133090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:40:15.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:40:15.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:40:15.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:40:15.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:40:15.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:40:15.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:40:15.133 [DEBUG] [Thread-133090] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:40:20.095 [DEBUG] [Thread-133092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:40:28.149 [DEBUG] [Thread-133093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:40:35.145 [DEBUG] [Thread-133094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:40:45.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:40:45.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:40:45.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:40:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 40, 23), 11.75, 47.34, 0.0, 27.65, 22.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:40:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:40:23
2026-02-11T17:40:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:40:47.420 [DEBUG] [Thread-133095] [transport.py] [_log()] starting thread (client mode): 0xa57e3820
2026-02-11T17:40:47.420 [DEBUG] [Thread-133095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:40:47.441 [DEBUG] [Thread-133095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:40:47.441 [INFO] [Thread-133095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] client lang: <none>
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] server lang: <none>
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] kex follows: False
2026-02-11T17:40:47.444 [DEBUG] [Thread-133095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:40:47.445 [DEBUG] [Thread-133095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:40:47.445 [DEBUG] [Thread-133095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:40:47.445 [DEBUG] [Thread-133095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:40:47.445 [DEBUG] [Thread-133095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:40:47.445 [DEBUG] [Thread-133095] [transport.py] [_log()] Compression: none
2026-02-11T17:40:47.445 [DEBUG] [Thread-133095] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:40:47.463 [DEBUG] [Thread-133095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:40:47.463 [DEBUG] [Thread-133095] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:40:47.464 [DEBUG] [Thread-133095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:40:47.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:40:47.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:40:47.466 [DEBUG] [Thread-133095] [transport.py] [_log()] userauth is OK
2026-02-11T17:40:47.466 [DEBUG] [Thread-133095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:40:47.466 [DEBUG] [Thread-133095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:40:47.467 [DEBUG] [Thread-133095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:40:47.467 [DEBUG] [Thread-133095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:40:47.501 [INFO] [Thread-133095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:40:47.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:40:48.158 [DEBUG] [Thread-133095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:40:48.159 [DEBUG] [Thread-133095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:40:48.159 [DEBUG] [Thread-133095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:40:48.200 [DEBUG] [Thread-133095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:40:48.200 [DEBUG] [Thread-133095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:40:48.213 [DEBUG] [Thread-133095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:40:48.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:40:48.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:40:48.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:40:48.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:40:48.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:40:48.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:40:48.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.652919 -999.00  +21.90  25.20     54  +12.30 1 3 1 1 1   887    0 9.17 -20.89 ----- 26.4 25.2 294.2 28.1 24.1 -11.4 24.0 -10.5 23.6 -9.4 23.9 -10.4
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.652919
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:40:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:40:23', tmtdew=11.75, humidity=47.34, cloud=0.0, wind=27.65, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:40:12.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:40:48.241 [DEBUG] [Thread-133095] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:40:48.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:40:48.336 [DEBUG] [Thread-133098] [transport.py] [_log()] starting thread (client mode): 0xa5773c70
2026-02-11T17:40:48.336 [DEBUG] [Thread-133098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:40:48.351 [DEBUG] [Thread-133098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:40:48.351 [INFO] [Thread-133098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:40:48.363 [DEBUG] [Thread-133098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] client lang: <none>
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] server lang: <none>
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] kex follows: False
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:40:48.364 [DEBUG] [Thread-133098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:40:48.365 [DEBUG] [Thread-133098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:40:48.365 [DEBUG] [Thread-133098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:40:48.365 [DEBUG] [Thread-133098] [transport.py] [_log()] Compression: none
2026-02-11T17:40:48.365 [DEBUG] [Thread-133098] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:40:48.416 [DEBUG] [Thread-133098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:40:48.416 [DEBUG] [Thread-133098] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:40:48.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:40:48.417 [DEBUG] [Thread-133098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:40:48.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:40:48.472 [DEBUG] [Thread-133098] [transport.py] [_log()] userauth is OK
2026-02-11T17:40:48.472 [DEBUG] [Thread-133098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:40:48.472 [DEBUG] [Thread-133098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:40:48.472 [DEBUG] [Thread-133098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:40:48.472 [DEBUG] [Thread-133098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:40:48.490 [INFO] [Thread-133098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:40:48.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:40:48.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:40:49.337 [DEBUG] [Thread-133098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:40:49.337 [DEBUG] [Thread-133098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:40:49.385 [DEBUG] [Thread-133098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:40:49.385 [DEBUG] [Thread-133098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:40:49.395 [DEBUG] [Thread-133098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:40:49.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:40:49.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:40:49.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:40:49.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:40:49.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:40:49.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:40:49.430 [DEBUG] [Thread-133098] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:40:50.184 [DEBUG] [Thread-133100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:40:52.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:40:52.490 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:05.249 [DEBUG] [Thread-133101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:19.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:41:19.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:41:19.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:41:20.286 [DEBUG] [Thread-133102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 40, 23), 11.55, 47.84, 0.0, 29.45, 22.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:41:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:40:23
2026-02-11T17:41:22.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:41:22.274 [DEBUG] [Thread-133103] [transport.py] [_log()] starting thread (client mode): 0xa57c0d30
2026-02-11T17:41:22.275 [DEBUG] [Thread-133103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:41:22.295 [DEBUG] [Thread-133103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:41:22.295 [INFO] [Thread-133103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] client lang: <none>
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] server lang: <none>
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] kex follows: False
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] Compression: none
2026-02-11T17:41:22.299 [DEBUG] [Thread-133103] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:41:22.316 [DEBUG] [Thread-133103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:41:22.316 [DEBUG] [Thread-133103] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:41:22.317 [DEBUG] [Thread-133103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:41:22.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:41:22.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:41:22.319 [DEBUG] [Thread-133103] [transport.py] [_log()] userauth is OK
2026-02-11T17:41:22.319 [DEBUG] [Thread-133103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:41:22.319 [DEBUG] [Thread-133103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:41:22.319 [DEBUG] [Thread-133103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:41:22.319 [DEBUG] [Thread-133103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:41:22.344 [INFO] [Thread-133103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:41:22.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:41:23.013 [DEBUG] [Thread-133103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:41:23.013 [DEBUG] [Thread-133103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:41:23.013 [DEBUG] [Thread-133103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:41:23.054 [DEBUG] [Thread-133103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:41:23.054 [DEBUG] [Thread-133103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:41:23.057 [DEBUG] [Thread-133103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:41:23.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:41:23.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:41:23.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:41:23.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:41:23.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:41:23.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:41:23.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:41:23.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:41:23.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:41:23.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.653266 -999.00  +21.90  30.59     55  +12.60 1 3 2 1 1   887    0 9.28 -22.41 ----- 31.6 30.6 272.6 35.8 23.9 -12.0 24.0 -10.6 23.5 -9.1 23.8 -11.1
2026-02-11T17:41:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:41:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:41:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.653266
2026-02-11T17:41:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:41:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:41:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:41:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:41:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:41:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:40:23', tmtdew=11.55, humidity=47.84, cloud=0.0, wind=29.45, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:40:42.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:41:23.078 [DEBUG] [Thread-133103] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:41:23.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:41:23.178 [DEBUG] [Thread-133106] [transport.py] [_log()] starting thread (client mode): 0xa5771210
2026-02-11T17:41:23.178 [DEBUG] [Thread-133106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:41:23.194 [DEBUG] [Thread-133106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:41:23.194 [INFO] [Thread-133106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:41:23.203 [DEBUG] [Thread-133106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:41:23.203 [DEBUG] [Thread-133106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] client lang: <none>
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] server lang: <none>
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] kex follows: False
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:41:23.204 [DEBUG] [Thread-133106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:41:23.205 [DEBUG] [Thread-133106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:41:23.205 [DEBUG] [Thread-133106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:41:23.205 [DEBUG] [Thread-133106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:41:23.205 [DEBUG] [Thread-133106] [transport.py] [_log()] Compression: none
2026-02-11T17:41:23.205 [DEBUG] [Thread-133106] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:41:23.260 [DEBUG] [Thread-133106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:41:23.260 [DEBUG] [Thread-133106] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:41:23.261 [DEBUG] [Thread-133106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:41:23.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:41:23.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:41:23.317 [DEBUG] [Thread-133106] [transport.py] [_log()] userauth is OK
2026-02-11T17:41:23.317 [DEBUG] [Thread-133106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:41:23.317 [DEBUG] [Thread-133106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:41:23.317 [DEBUG] [Thread-133106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:41:23.317 [DEBUG] [Thread-133106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:41:23.341 [INFO] [Thread-133106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:41:23.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:41:23.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:41:24.162 [DEBUG] [Thread-133106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:41:24.162 [DEBUG] [Thread-133106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:41:24.210 [DEBUG] [Thread-133106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:41:24.210 [DEBUG] [Thread-133106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:41:24.220 [DEBUG] [Thread-133106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:41:24.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:41: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')
2026-02-11T17:41:24.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:41:24.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:41:24.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:41:24.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:41:24.257 [DEBUG] [Thread-133106] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:41:28.196 [DEBUG] [Thread-133108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:35.323 [DEBUG] [Thread-133109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:50.385 [DEBUG] [Thread-133110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:52.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:52.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:41:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:41:54.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:41:54.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
2026-02-11T17:41:56.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 41, 35), 12.06, 46.55, 0.0, 33.38, 23.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:41:56.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:41:35
2026-02-11T17:41:56.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:41:56.681 [DEBUG] [Thread-133111] [transport.py] [_log()] starting thread (client mode): 0xa57e3460
2026-02-11T17:41:56.682 [DEBUG] [Thread-133111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:41:56.701 [DEBUG] [Thread-133111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:41:56.702 [INFO] [Thread-133111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:41:56.705 [DEBUG] [Thread-133111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:41:56.705 [DEBUG] [Thread-133111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:41:56.705 [DEBUG] [Thread-133111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:41:56.705 [DEBUG] [Thread-133111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] client lang: <none>
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] server lang: <none>
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] kex follows: False
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] Compression: none
2026-02-11T17:41:56.706 [DEBUG] [Thread-133111] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:41:56.723 [DEBUG] [Thread-133111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:41:56.724 [DEBUG] [Thread-133111] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:41:56.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:41:56.725 [DEBUG] [Thread-133111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:41:56.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:41:56.727 [DEBUG] [Thread-133111] [transport.py] [_log()] userauth is OK
2026-02-11T17:41:56.727 [DEBUG] [Thread-133111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:41:56.727 [DEBUG] [Thread-133111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:41:56.727 [DEBUG] [Thread-133111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:41:56.728 [DEBUG] [Thread-133111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:41:56.752 [INFO] [Thread-133111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:41:56.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:41:57.401 [DEBUG] [Thread-133111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:41:57.401 [DEBUG] [Thread-133111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:41:57.401 [DEBUG] [Thread-133111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:41:57.442 [DEBUG] [Thread-133111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:41:57.443 [DEBUG] [Thread-133111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:41:57.446 [DEBUG] [Thread-133111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:41:57.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:41:57.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:41:57.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:41:57.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:41:57.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:41:57.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:41:57.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:41:57.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:41:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:41:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.653613 -999.00  +21.90  28.56     55  +12.60 1 2 1 1 1   887    0 8.99 -26.60 ----- 23.7 28.6 276.6 33.4 23.9 -12.3 24.0 -10.5 23.4 -10.8 23.8 -10.3
2026-02-11T17:41:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:41:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:41:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.653613
2026-02-11T17:41:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:41:35', tmtdew=12.06, humidity=46.55, cloud=0.0, wind=33.38, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:41:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:41:57.477 [DEBUG] [Thread-133111] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:41:57.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:41:57.570 [DEBUG] [Thread-133114] [transport.py] [_log()] starting thread (client mode): 0xa57e0f70
2026-02-11T17:41:57.570 [DEBUG] [Thread-133114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:41:57.584 [DEBUG] [Thread-133114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:41:57.584 [INFO] [Thread-133114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:41:57.592 [DEBUG] [Thread-133114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:41:57.593 [DEBUG] [Thread-133114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] client lang: <none>
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] server lang: <none>
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] kex follows: False
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:41:57.594 [DEBUG] [Thread-133114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:41:57.595 [DEBUG] [Thread-133114] [transport.py] [_log()] Compression: none
2026-02-11T17:41:57.595 [DEBUG] [Thread-133114] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:41:57.653 [DEBUG] [Thread-133114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:41:57.654 [DEBUG] [Thread-133114] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:41:57.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:41:57.664 [DEBUG] [Thread-133114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:41:57.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:41:57.716 [DEBUG] [Thread-133114] [transport.py] [_log()] userauth is OK
2026-02-11T17:41:57.716 [DEBUG] [Thread-133114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:41:57.716 [DEBUG] [Thread-133114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:41:57.717 [DEBUG] [Thread-133114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:41:57.717 [DEBUG] [Thread-133114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:41:57.740 [INFO] [Thread-133114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:41:57.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:41:57.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:41:58.556 [DEBUG] [Thread-133114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:41:58.557 [DEBUG] [Thread-133114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:41:58.605 [DEBUG] [Thread-133114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:41:58.605 [DEBUG] [Thread-133114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:41:58.616 [DEBUG] [Thread-133114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:41:58.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:41:58.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:41:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:41:58.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:41:58.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:41:58.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:41:58.656 [DEBUG] [Thread-133114] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:42:05.423 [DEBUG] [Thread-133116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:42:20.478 [DEBUG] [Thread-133117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:42:28.240 [DEBUG] [Thread-133118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:42:28.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:42:28.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:42:28.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:42:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 42, 11), 11.46, 48.33, 0.0, 24.19, 22.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:42:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:42:11
2026-02-11T17:42:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:42:31.091 [DEBUG] [Thread-133119] [transport.py] [_log()] starting thread (client mode): 0xa57c1a80
2026-02-11T17:42:31.091 [DEBUG] [Thread-133119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:42:31.112 [DEBUG] [Thread-133119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:42:31.112 [INFO] [Thread-133119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:42:31.115 [DEBUG] [Thread-133119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:42:31.115 [DEBUG] [Thread-133119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:42:31.115 [DEBUG] [Thread-133119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:42:31.115 [DEBUG] [Thread-133119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:42:31.115 [DEBUG] [Thread-133119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] client lang: <none>
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] server lang: <none>
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] kex follows: False
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] Compression: none
2026-02-11T17:42:31.116 [DEBUG] [Thread-133119] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:42:31.134 [DEBUG] [Thread-133119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:42:31.135 [DEBUG] [Thread-133119] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:42:31.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:42:31.136 [DEBUG] [Thread-133119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:42:31.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:42:31.138 [DEBUG] [Thread-133119] [transport.py] [_log()] userauth is OK
2026-02-11T17:42:31.138 [DEBUG] [Thread-133119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:42:31.138 [DEBUG] [Thread-133119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:42:31.138 [DEBUG] [Thread-133119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:42:31.138 [DEBUG] [Thread-133119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:42:31.150 [INFO] [Thread-133119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:42:31.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:42:31.914 [DEBUG] [Thread-133119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:42:31.914 [DEBUG] [Thread-133119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:42:31.915 [DEBUG] [Thread-133119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:42:31.956 [DEBUG] [Thread-133119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:42:31.956 [DEBUG] [Thread-133119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:42:31.962 [DEBUG] [Thread-133119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:42:31.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:42:31.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:42:31.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:42:31.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:42:31.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:42:31.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:42:31.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:42:31.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:42:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:42:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.653960 -999.00  +21.70  22.07     56  +12.50 1 2 1 1 1   887    0 8.79 -30.61 ----- 25.4 22.1 275.0 30.2 23.9 -11.6 23.9 -10.3 23.4 -10.8 23.7 -10.1
2026-02-11T17:42:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:42:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:42:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.653960
2026-02-11T17:42:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:42:31.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:42:31.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:42:31.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:42:31.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:42:31.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:42:11', tmtdew=11.46, humidity=48.33, cloud=0.0, wind=24.19, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:41:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:42:31.990 [DEBUG] [Thread-133119] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:42:32.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:42:32.101 [DEBUG] [Thread-133122] [transport.py] [_log()] starting thread (client mode): 0xa5773640
2026-02-11T17:42:32.101 [DEBUG] [Thread-133122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:42:32.117 [DEBUG] [Thread-133122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:42:32.117 [INFO] [Thread-133122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:42:32.129 [DEBUG] [Thread-133122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:42:32.129 [DEBUG] [Thread-133122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] client lang: <none>
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] server lang: <none>
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] kex follows: False
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:42:32.130 [DEBUG] [Thread-133122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:42:32.131 [DEBUG] [Thread-133122] [transport.py] [_log()] Compression: none
2026-02-11T17:42:32.131 [DEBUG] [Thread-133122] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:42:32.190 [DEBUG] [Thread-133122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:42:32.191 [DEBUG] [Thread-133122] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:42:32.192 [DEBUG] [Thread-133122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:42:32.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:42:32.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:42:32.252 [DEBUG] [Thread-133122] [transport.py] [_log()] userauth is OK
2026-02-11T17:42:32.253 [DEBUG] [Thread-133122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:42:32.253 [DEBUG] [Thread-133122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:42:32.253 [DEBUG] [Thread-133122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:42:32.253 [DEBUG] [Thread-133122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:42:32.272 [INFO] [Thread-133122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:42:32.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:42:32.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:42:33.087 [DEBUG] [Thread-133122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:42:33.087 [DEBUG] [Thread-133122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:42:33.135 [DEBUG] [Thread-133122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:42:33.135 [DEBUG] [Thread-133122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:42:33.143 [DEBUG] [Thread-133122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:42:33.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:42:33.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')
2026-02-11T17:42:33.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
2026-02-11T17:42:33.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:42:33.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:42:33.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:42:33.177 [DEBUG] [Thread-133122] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:42:35.518 [DEBUG] [Thread-133124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:42:50.576 [DEBUG] [Thread-133125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:42:52.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:42:52.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:43:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:43:03.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:43:03.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:43:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 42, 47), 11.39, 48.24, 0.0, 26.31, 22.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:43:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:42:47
2026-02-11T17:43:05.611 [DEBUG] [Thread-133126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:43:06.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:43:06.220 [DEBUG] [Thread-133127] [transport.py] [_log()] starting thread (client mode): 0x9eb06ad0
2026-02-11T17:43:06.220 [DEBUG] [Thread-133127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:43:06.239 [DEBUG] [Thread-133127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:43:06.239 [INFO] [Thread-133127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] client lang: <none>
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] server lang: <none>
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] kex follows: False
2026-02-11T17:43:06.242 [DEBUG] [Thread-133127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:43:06.243 [DEBUG] [Thread-133127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:43:06.243 [DEBUG] [Thread-133127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:43:06.243 [DEBUG] [Thread-133127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:43:06.243 [DEBUG] [Thread-133127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:43:06.243 [DEBUG] [Thread-133127] [transport.py] [_log()] Compression: none
2026-02-11T17:43:06.243 [DEBUG] [Thread-133127] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:43:06.256 [DEBUG] [Thread-133127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:43:06.257 [DEBUG] [Thread-133127] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:43:06.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:43:06.258 [DEBUG] [Thread-133127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:43:06.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:43:06.260 [DEBUG] [Thread-133127] [transport.py] [_log()] userauth is OK
2026-02-11T17:43:06.260 [DEBUG] [Thread-133127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:43:06.260 [DEBUG] [Thread-133127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:43:06.260 [DEBUG] [Thread-133127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:43:06.260 [DEBUG] [Thread-133127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:43:06.284 [INFO] [Thread-133127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:43:06.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:43:06.895 [DEBUG] [Thread-133127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:43:06.895 [DEBUG] [Thread-133127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:43:06.896 [DEBUG] [Thread-133127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:43:06.936 [DEBUG] [Thread-133127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:43:06.937 [DEBUG] [Thread-133127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:43:06.940 [DEBUG] [Thread-133127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:43:06.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:43:06.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:43:06.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:43:06.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:43:06.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:43:06.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:43:06.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:43:06.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:43:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:43:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.654655 -999.00  +21.90  23.52     55  +12.60 1 3 1 1 1   887    0 8.77 -33.41 ----- 25.1 23.5 272.6 30.9 23.9 -11.1 23.9 -9.9 23.3 -9.7 23.7 -9.7
2026-02-11T17:43:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:43:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:43:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.654655
2026-02-11T17:43:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:43:06.967 [DEBUG] [Thread-133127] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:43:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:43:06.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:43:06.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:43:06.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:43:06.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:42:47', tmtdew=11.39, humidity=48.24, cloud=0.0, wind=26.31, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:42:42.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:43:07.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:43:07.061 [DEBUG] [Thread-133130] [transport.py] [_log()] starting thread (client mode): 0xa5770280
2026-02-11T17:43:07.061 [DEBUG] [Thread-133130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:43:07.075 [DEBUG] [Thread-133130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:43:07.075 [INFO] [Thread-133130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:43:07.082 [DEBUG] [Thread-133130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] client lang: <none>
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] server lang: <none>
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] kex follows: False
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] Compression: none
2026-02-11T17:43:07.083 [DEBUG] [Thread-133130] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:43:07.143 [DEBUG] [Thread-133130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:43:07.144 [DEBUG] [Thread-133130] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:43:07.144 [DEBUG] [Thread-133130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:43:07.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:43:07.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:43:07.199 [DEBUG] [Thread-133130] [transport.py] [_log()] userauth is OK
2026-02-11T17:43:07.200 [DEBUG] [Thread-133130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:43:07.200 [DEBUG] [Thread-133130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:43:07.200 [DEBUG] [Thread-133130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:43:07.200 [DEBUG] [Thread-133130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:43:07.219 [INFO] [Thread-133130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:43:07.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:43:07.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:43:08.031 [DEBUG] [Thread-133130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:43:08.031 [DEBUG] [Thread-133130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:43:08.079 [DEBUG] [Thread-133130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:43:08.080 [DEBUG] [Thread-133130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:43:08.092 [DEBUG] [Thread-133130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:43:08.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:43:08.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:43:08.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:43:08.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:43:08.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:43:08.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:43:08.138 [DEBUG] [Thread-133130] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:43:20.648 [DEBUG] [Thread-133132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:43:28.284 [DEBUG] [Thread-133133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:43:35.712 [DEBUG] [Thread-133134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:43:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:43:38.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:43:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:43:40.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 43, 24), 11.37, 48.29, 0.0, 24.9, 22.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:43:40.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:43:24
2026-02-11T17:43:40.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:43:40.557 [DEBUG] [Thread-133135] [transport.py] [_log()] starting thread (client mode): 0xa5770c70
2026-02-11T17:43:40.558 [DEBUG] [Thread-133135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:43:40.580 [DEBUG] [Thread-133135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:43:40.580 [INFO] [Thread-133135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:43:40.581 [DEBUG] [Thread-133135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:43:40.581 [DEBUG] [Thread-133135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:43:40.581 [DEBUG] [Thread-133135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:43:40.581 [DEBUG] [Thread-133135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:43:40.581 [DEBUG] [Thread-133135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:43:40.581 [DEBUG] [Thread-133135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:43:40.581 [DEBUG] [Thread-133135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] client lang: <none>
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] server lang: <none>
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] kex follows: False
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] Compression: none
2026-02-11T17:43:40.582 [DEBUG] [Thread-133135] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:43:40.594 [DEBUG] [Thread-133135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:43:40.595 [DEBUG] [Thread-133135] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:43:40.595 [DEBUG] [Thread-133135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:43:40.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:43:40.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:43:40.597 [DEBUG] [Thread-133135] [transport.py] [_log()] userauth is OK
2026-02-11T17:43:40.597 [DEBUG] [Thread-133135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:43:40.597 [DEBUG] [Thread-133135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:43:40.597 [DEBUG] [Thread-133135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:43:40.597 [DEBUG] [Thread-133135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:43:40.623 [INFO] [Thread-133135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:43:40.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:43:41.225 [DEBUG] [Thread-133135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:43:41.225 [DEBUG] [Thread-133135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:43:41.226 [DEBUG] [Thread-133135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:43:41.266 [DEBUG] [Thread-133135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:43:41.267 [DEBUG] [Thread-133135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:43:41.270 [DEBUG] [Thread-133135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:43:41.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:43:41.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:43:41.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:43:41.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:43:41.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:43:41.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:43:41.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:43:41.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:43:41.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:43:41.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.655002 -999.00  +21.80  21.87     55  +12.60 1 2 1 1 1   887    0 8.61 -39.83 ----- 29.7 21.9 289.0 33.0 23.8 -10.9 23.8 -9.8 23.2 -10.2 23.6 -9.5
2026-02-11T17:43:41.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:43:41.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:43:41.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.655002
2026-02-11T17:43:41.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:43:41.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:43:41.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:43:41.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:43:41.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T17:43:41.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:43:24', tmtdew=11.37, humidity=48.29, cloud=0.0, wind=24.9, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:43:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:43:41.298 [DEBUG] [Thread-133135] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:43:41.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:43:50.750 [DEBUG] [Thread-133138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:43:52.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:43:52.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:44:05.800 [DEBUG] [Thread-133139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:44:20.841 [DEBUG] [Thread-133140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:44:28.331 [DEBUG] [Thread-133141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:44:35.877 [DEBUG] [Thread-133142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:44:50.910 [DEBUG] [Thread-133143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:44:53.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:44:53.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:05.939 [DEBUG] [Thread-133144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:20.975 [DEBUG] [Thread-133145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:28.376 [DEBUG] [Thread-133146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:36.012 [DEBUG] [Thread-133147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:51.053 [DEBUG] [Thread-133148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:53.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:53.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:45:55.256 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T17:46:06.093 [DEBUG] [Thread-133149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:46:21.132 [DEBUG] [Thread-133150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:46:25.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:46:25.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:46:25.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:46:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 45, 47), 11.37, 48.43, 0.0, 29.4, 22.44, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:46:27.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:45:47
2026-02-11T17:46:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:46:27.941 [DEBUG] [Thread-133151] [transport.py] [_log()] starting thread (client mode): 0xa57425f0
2026-02-11T17:46:27.941 [DEBUG] [Thread-133151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:46:27.964 [DEBUG] [Thread-133151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:46:27.964 [INFO] [Thread-133151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] client lang: <none>
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] server lang: <none>
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] kex follows: False
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:46:27.968 [DEBUG] [Thread-133151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:46:27.969 [DEBUG] [Thread-133151] [transport.py] [_log()] Compression: none
2026-02-11T17:46:27.969 [DEBUG] [Thread-133151] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:46:27.987 [DEBUG] [Thread-133151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:46:27.988 [DEBUG] [Thread-133151] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:46:27.988 [DEBUG] [Thread-133151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:46:27.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:46:27.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:46:27.991 [DEBUG] [Thread-133151] [transport.py] [_log()] userauth is OK
2026-02-11T17:46:27.991 [DEBUG] [Thread-133151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:46:27.991 [DEBUG] [Thread-133151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:46:27.991 [DEBUG] [Thread-133151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:46:27.991 [DEBUG] [Thread-133151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:46:28.006 [INFO] [Thread-133151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:46:28.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:46:28.419 [DEBUG] [Thread-133153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:46:28.667 [DEBUG] [Thread-133151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:46:28.667 [DEBUG] [Thread-133151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:46:28.668 [DEBUG] [Thread-133151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:46:28.708 [DEBUG] [Thread-133151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:46:28.709 [DEBUG] [Thread-133151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:46:28.713 [DEBUG] [Thread-133151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:46:28.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:46:28.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:46:28.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:46:28.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:46:28.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:46:28.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:46:28.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:46:28.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:46:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:46:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.657085 -999.00  +22.00  28.01     54  +12.60 1 3 1 1 1   887    0 8.54 -46.84 ----- 22.7 28.0 275.8 39.1 23.8 -10.2 23.7 -9.3 23.3 -9.1 23.6 -8.9
2026-02-11T17:46:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:46:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:46:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.657085
2026-02-11T17:46:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:46:28.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:46:28.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:46:28.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:46:28.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:46:28.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:45:47', tmtdew=11.37, humidity=48.43, cloud=0.0, wind=29.4, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:46:12.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:46:28.739 [DEBUG] [Thread-133151] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:46:28.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:46:28.837 [DEBUG] [Thread-133155] [transport.py] [_log()] starting thread (client mode): 0x9eb05fc0
2026-02-11T17:46:28.837 [DEBUG] [Thread-133155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:46:28.851 [DEBUG] [Thread-133155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:46:28.851 [INFO] [Thread-133155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] client lang: <none>
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] server lang: <none>
2026-02-11T17:46:28.859 [DEBUG] [Thread-133155] [transport.py] [_log()] kex follows: False
2026-02-11T17:46:28.860 [DEBUG] [Thread-133155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:46:28.860 [DEBUG] [Thread-133155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:46:28.860 [DEBUG] [Thread-133155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:46:28.860 [DEBUG] [Thread-133155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:46:28.860 [DEBUG] [Thread-133155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:46:28.860 [DEBUG] [Thread-133155] [transport.py] [_log()] Compression: none
2026-02-11T17:46:28.860 [DEBUG] [Thread-133155] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:46:28.919 [DEBUG] [Thread-133155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:46:28.920 [DEBUG] [Thread-133155] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:46:28.921 [DEBUG] [Thread-133155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:46:28.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:46:28.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:46:28.979 [DEBUG] [Thread-133155] [transport.py] [_log()] userauth is OK
2026-02-11T17:46:28.980 [DEBUG] [Thread-133155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:46:28.980 [DEBUG] [Thread-133155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:46:28.980 [DEBUG] [Thread-133155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:46:28.980 [DEBUG] [Thread-133155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:46:29.005 [INFO] [Thread-133155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:46:29.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:46:29.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:46:29.824 [DEBUG] [Thread-133155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:46:29.824 [DEBUG] [Thread-133155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:46:29.872 [DEBUG] [Thread-133155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:46:29.872 [DEBUG] [Thread-133155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:46:29.881 [DEBUG] [Thread-133155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:46:29.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:46:29.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:46:29.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:46:29.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:46:29.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:46:29.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:46:29.918 [DEBUG] [Thread-133155] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:46:36.168 [DEBUG] [Thread-133157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:46:51.234 [DEBUG] [Thread-133158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:46:53.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:46:53.340 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:46:59.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:46:59.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:46:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:47:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 46, 22), 11.31, 48.62, 0.0, 26.87, 22.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:47:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:46:22
2026-02-11T17:47:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:47:02.867 [DEBUG] [Thread-133159] [transport.py] [_log()] starting thread (client mode): 0xa57d77c0
2026-02-11T17:47:02.868 [DEBUG] [Thread-133159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:47:02.887 [DEBUG] [Thread-133159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:47:02.888 [INFO] [Thread-133159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:47:02.890 [DEBUG] [Thread-133159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] client lang: <none>
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] server lang: <none>
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] kex follows: False
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] Compression: none
2026-02-11T17:47:02.891 [DEBUG] [Thread-133159] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:47:02.909 [DEBUG] [Thread-133159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:47:02.909 [DEBUG] [Thread-133159] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:47:02.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:47:02.910 [DEBUG] [Thread-133159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:47:02.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:47:02.913 [DEBUG] [Thread-133159] [transport.py] [_log()] userauth is OK
2026-02-11T17:47:02.913 [DEBUG] [Thread-133159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:47:02.913 [DEBUG] [Thread-133159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:47:02.913 [DEBUG] [Thread-133159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:47:02.913 [DEBUG] [Thread-133159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:47:02.933 [INFO] [Thread-133159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:47:02.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:47:03.592 [DEBUG] [Thread-133159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:47:03.592 [DEBUG] [Thread-133159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:47:03.593 [DEBUG] [Thread-133159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:47:03.633 [DEBUG] [Thread-133159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:47:03.633 [DEBUG] [Thread-133159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:47:03.636 [DEBUG] [Thread-133159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:47:03.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:47:03.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:47:03.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:47:03.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:47:03.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:47:03.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:47:03.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:47:03.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:47:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:47:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.657433 -999.00  +22.00  23.87     55  +12.60 1 3 1 1 1   887    0 8.54 -43.62 ----- 19.8 23.9 286.4 37.4 23.8 -9.4 23.7 -9.0 23.3 -8.5 23.6 -9.1
2026-02-11T17:47:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:47:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:47:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.657433
2026-02-11T17:47:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:47:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:47:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:47:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:47:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:47:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:46:22', tmtdew=11.31, humidity=48.62, cloud=0.0, wind=26.87, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:46:42.211', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:47:03.662 [DEBUG] [Thread-133159] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:47:03.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:47:03.769 [DEBUG] [Thread-133162] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-11T17:47:03.769 [DEBUG] [Thread-133162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:47:03.784 [DEBUG] [Thread-133162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:47:03.784 [INFO] [Thread-133162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:47:03.791 [DEBUG] [Thread-133162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:47:03.791 [DEBUG] [Thread-133162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:47:03.791 [DEBUG] [Thread-133162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:47:03.791 [DEBUG] [Thread-133162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:03.791 [DEBUG] [Thread-133162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] client lang: <none>
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] server lang: <none>
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] kex follows: False
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] Compression: none
2026-02-11T17:47:03.792 [DEBUG] [Thread-133162] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:47:03.852 [DEBUG] [Thread-133162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:47:03.852 [DEBUG] [Thread-133162] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:47:03.853 [DEBUG] [Thread-133162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:47:03.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:47:03.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:47:03.909 [DEBUG] [Thread-133162] [transport.py] [_log()] userauth is OK
2026-02-11T17:47:03.909 [DEBUG] [Thread-133162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:47:03.909 [DEBUG] [Thread-133162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:47:03.909 [DEBUG] [Thread-133162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:47:03.909 [DEBUG] [Thread-133162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:47:03.929 [INFO] [Thread-133162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:47:03.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:47:03.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:47:04.770 [DEBUG] [Thread-133162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:47:04.770 [DEBUG] [Thread-133162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:47:04.819 [DEBUG] [Thread-133162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:47:04.819 [DEBUG] [Thread-133162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:47:04.828 [DEBUG] [Thread-133162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:47:04.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:47:04.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:47:04.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:47:04.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:47:04.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:47:04.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:47:04.862 [DEBUG] [Thread-133162] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:47:06.267 [DEBUG] [Thread-133164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:47:21.323 [DEBUG] [Thread-133165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:47:28.460 [DEBUG] [Thread-133166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:47:34.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:47:34.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:47:34.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:47:36.362 [DEBUG] [Thread-133167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:47:37.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 46, 58), 11.32, 48.59, 0.0, 29.77, 22.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:47:37.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:46:58
2026-02-11T17:47:37.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:47:37.729 [DEBUG] [Thread-133168] [transport.py] [_log()] starting thread (client mode): 0xa2d54cd0
2026-02-11T17:47:37.729 [DEBUG] [Thread-133168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:47:37.749 [DEBUG] [Thread-133168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:47:37.749 [INFO] [Thread-133168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:47:37.752 [DEBUG] [Thread-133168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:47:37.752 [DEBUG] [Thread-133168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:47:37.752 [DEBUG] [Thread-133168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:47:37.752 [DEBUG] [Thread-133168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:37.752 [DEBUG] [Thread-133168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] client lang: <none>
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] server lang: <none>
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] kex follows: False
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] Compression: none
2026-02-11T17:47:37.753 [DEBUG] [Thread-133168] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:47:37.774 [DEBUG] [Thread-133168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:47:37.774 [DEBUG] [Thread-133168] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:47:37.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:47:37.776 [DEBUG] [Thread-133168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:47:37.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:47:37.778 [DEBUG] [Thread-133168] [transport.py] [_log()] userauth is OK
2026-02-11T17:47:37.778 [DEBUG] [Thread-133168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:47:37.778 [DEBUG] [Thread-133168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:47:37.778 [DEBUG] [Thread-133168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:47:37.778 [DEBUG] [Thread-133168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:47:37.800 [INFO] [Thread-133168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:47:37.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:47:38.373 [DEBUG] [Thread-133168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:47:38.373 [DEBUG] [Thread-133168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:47:38.373 [DEBUG] [Thread-133168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:47:38.414 [DEBUG] [Thread-133168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:47:38.414 [DEBUG] [Thread-133168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:47:38.416 [DEBUG] [Thread-133168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:47:38.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:47:38.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:47:38.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:47:38.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:47:38.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:47:38.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:47:38.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:47:38.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:47:38.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:47:38.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.657780 -999.00  +21.80  29.93     55  +12.50 1 3 1 1 1   887    0 8.14 -44.85 ----- 22.0 29.9 291.0 38.8 23.7 -10.1 23.7 -9.2 23.2 -9.0 23.6 -8.8
2026-02-11T17:47:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:47:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:47:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.657780
2026-02-11T17:47:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:47:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:47:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:47:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:47:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:47:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:46:58', tmtdew=11.32, humidity=48.59, cloud=0.0, wind=29.77, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:47:12.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:47:38.445 [DEBUG] [Thread-133168] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:47:38.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:47:38.541 [DEBUG] [Thread-133171] [transport.py] [_log()] starting thread (client mode): 0xa57c36a0
2026-02-11T17:47:38.542 [DEBUG] [Thread-133171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:47:38.556 [DEBUG] [Thread-133171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:47:38.556 [INFO] [Thread-133171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:47:38.563 [DEBUG] [Thread-133171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] client lang: <none>
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] server lang: <none>
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] kex follows: False
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:47:38.564 [DEBUG] [Thread-133171] [transport.py] [_log()] Compression: none
2026-02-11T17:47:38.565 [DEBUG] [Thread-133171] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:47:38.624 [DEBUG] [Thread-133171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:47:38.625 [DEBUG] [Thread-133171] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:47:38.626 [DEBUG] [Thread-133171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:47:38.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:47:38.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:47:38.684 [DEBUG] [Thread-133171] [transport.py] [_log()] userauth is OK
2026-02-11T17:47:38.684 [DEBUG] [Thread-133171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:47:38.684 [DEBUG] [Thread-133171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:47:38.684 [DEBUG] [Thread-133171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:47:38.684 [DEBUG] [Thread-133171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:47:38.703 [INFO] [Thread-133171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:47:38.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:47:38.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:47:39.515 [DEBUG] [Thread-133171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:47:39.516 [DEBUG] [Thread-133171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:47:39.563 [DEBUG] [Thread-133171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:47:39.564 [DEBUG] [Thread-133171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:47:39.573 [DEBUG] [Thread-133171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:47:39.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:47: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')
2026-02-11T17:47: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
2026-02-11T17:47:39.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:47:39.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:47:39.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:47:39.613 [DEBUG] [Thread-133171] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:47:51.400 [DEBUG] [Thread-133173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:47:53.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:47:53.481 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:48:06.451 [DEBUG] [Thread-133174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:48:09.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:48:09.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:48:09.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:48:11.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 47, 33), 11.86, 47.15, 0.0, 31.23, 23.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:48:11.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:47:33
2026-02-11T17:48:11.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:48:12.040 [DEBUG] [Thread-133175] [transport.py] [_log()] starting thread (client mode): 0xa2db64d0
2026-02-11T17:48:12.040 [DEBUG] [Thread-133175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:48:12.060 [DEBUG] [Thread-133175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:48:12.061 [INFO] [Thread-133175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] client lang: <none>
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] server lang: <none>
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] kex follows: False
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:48:12.064 [DEBUG] [Thread-133175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:48:12.065 [DEBUG] [Thread-133175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:48:12.065 [DEBUG] [Thread-133175] [transport.py] [_log()] Compression: none
2026-02-11T17:48:12.065 [DEBUG] [Thread-133175] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:48:12.083 [DEBUG] [Thread-133175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:48:12.084 [DEBUG] [Thread-133175] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:48:12.084 [DEBUG] [Thread-133175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:48:12.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:48:12.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:48:12.086 [DEBUG] [Thread-133175] [transport.py] [_log()] userauth is OK
2026-02-11T17:48:12.086 [DEBUG] [Thread-133175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:48:12.086 [DEBUG] [Thread-133175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:48:12.086 [DEBUG] [Thread-133175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:48:12.086 [DEBUG] [Thread-133175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:48:12.100 [INFO] [Thread-133175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:48:12.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:48:12.764 [DEBUG] [Thread-133175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:48:12.765 [DEBUG] [Thread-133175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:48:12.765 [DEBUG] [Thread-133175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:48:12.805 [DEBUG] [Thread-133175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:48:12.806 [DEBUG] [Thread-133175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:48:12.809 [DEBUG] [Thread-133175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:48:12.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:48:12.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:48:12.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:48:12.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:48:12.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:48:12.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:48:12.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:48:12.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:48:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:48:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.658127 -999.00  +21.80  18.94     55  +12.50 1 3 1 1 1   887    0 8.46 -43.97 ----- 24.3 18.9 278.4 31.7 23.7 -9.5 23.6 -9.0 23.2 -8.8 23.6 -8.8
2026-02-11T17:48:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:48:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:48:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.658127
2026-02-11T17:48:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:48:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:48:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:48:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:48:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:48:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:47:33', tmtdew=11.86, humidity=47.15, cloud=0.0, wind=31.23, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:47:42.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:48:12.836 [DEBUG] [Thread-133175] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:48:12.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:48:12.945 [DEBUG] [Thread-133178] [transport.py] [_log()] starting thread (client mode): 0xa575a890
2026-02-11T17:48:12.945 [DEBUG] [Thread-133178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:48:12.960 [DEBUG] [Thread-133178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:48:12.960 [INFO] [Thread-133178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:48:12.967 [DEBUG] [Thread-133178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:48:12.967 [DEBUG] [Thread-133178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] client lang: <none>
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] server lang: <none>
2026-02-11T17:48:12.968 [DEBUG] [Thread-133178] [transport.py] [_log()] kex follows: False
2026-02-11T17:48:12.969 [DEBUG] [Thread-133178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:48:12.969 [DEBUG] [Thread-133178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:48:12.969 [DEBUG] [Thread-133178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:48:12.969 [DEBUG] [Thread-133178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:48:12.969 [DEBUG] [Thread-133178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:48:12.969 [DEBUG] [Thread-133178] [transport.py] [_log()] Compression: none
2026-02-11T17:48:12.969 [DEBUG] [Thread-133178] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:48:13.026 [DEBUG] [Thread-133178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:48:13.027 [DEBUG] [Thread-133178] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:48:13.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:48:13.028 [DEBUG] [Thread-133178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:48:13.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:48:13.082 [DEBUG] [Thread-133178] [transport.py] [_log()] userauth is OK
2026-02-11T17:48:13.082 [DEBUG] [Thread-133178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:48:13.082 [DEBUG] [Thread-133178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:48:13.083 [DEBUG] [Thread-133178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:48:13.083 [DEBUG] [Thread-133178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:48:13.112 [INFO] [Thread-133178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:48:13.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:48:13.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:48:13.939 [DEBUG] [Thread-133178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:48:13.939 [DEBUG] [Thread-133178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:48:13.987 [DEBUG] [Thread-133178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:48:13.988 [DEBUG] [Thread-133178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:48:13.997 [DEBUG] [Thread-133178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:48:14.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:48:14.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:48:14.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:48:14.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:48:14.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:48:14.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:48:14.033 [DEBUG] [Thread-133178] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:48:21.491 [DEBUG] [Thread-133180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:48:28.492 [DEBUG] [Thread-133181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:48:36.547 [DEBUG] [Thread-133182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:48:44.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:48:44.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:48:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:48:46.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 48, 9), 11.26, 48.99, 0.0, 34.32, 22.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:48:46.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:48:09
2026-02-11T17:48:46.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:48:46.649 [DEBUG] [Thread-133183] [transport.py] [_log()] starting thread (client mode): 0xa57c1810
2026-02-11T17:48:46.649 [DEBUG] [Thread-133183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:48:46.670 [DEBUG] [Thread-133183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:48:46.671 [INFO] [Thread-133183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:48:46.673 [DEBUG] [Thread-133183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] client lang: <none>
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] server lang: <none>
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] kex follows: False
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:48:46.674 [DEBUG] [Thread-133183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:48:46.675 [DEBUG] [Thread-133183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:48:46.675 [DEBUG] [Thread-133183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:48:46.675 [DEBUG] [Thread-133183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:48:46.675 [DEBUG] [Thread-133183] [transport.py] [_log()] Compression: none
2026-02-11T17:48:46.675 [DEBUG] [Thread-133183] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:48:46.693 [DEBUG] [Thread-133183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:48:46.694 [DEBUG] [Thread-133183] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:48:46.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:48:46.695 [DEBUG] [Thread-133183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:48:46.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:48:46.697 [DEBUG] [Thread-133183] [transport.py] [_log()] userauth is OK
2026-02-11T17:48:46.697 [DEBUG] [Thread-133183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:48:46.698 [DEBUG] [Thread-133183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:48:46.698 [DEBUG] [Thread-133183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:48:46.698 [DEBUG] [Thread-133183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:48:46.721 [INFO] [Thread-133183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:48:46.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:48:47.344 [DEBUG] [Thread-133183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:48:47.345 [DEBUG] [Thread-133183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:48:47.345 [DEBUG] [Thread-133183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:48:47.385 [DEBUG] [Thread-133183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:48:47.385 [DEBUG] [Thread-133183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:48:47.388 [DEBUG] [Thread-133183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:48:47.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:48:47.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:48:47.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:48:47.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:48:47.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:48:47.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:48:47.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:48:47.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:48:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:48:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.658474 -999.00  +21.80  31.25     55  +12.40 1 3 2 1 1   887    0 8.20 -45.79 ----- 22.0 31.2 273.0 38.6 23.6 -9.5 23.6 -9.1 23.1 -9.6 23.5 -8.6
2026-02-11T17:48:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:48:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:48:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.658474
2026-02-11T17:48:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:48:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:48:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:48:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:48:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:48:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:48:09', tmtdew=11.26, humidity=48.99, cloud=0.0, wind=34.32, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:48:12.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:48:47.413 [DEBUG] [Thread-133183] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:48:47.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:48:47.509 [DEBUG] [Thread-133186] [transport.py] [_log()] starting thread (client mode): 0xa57d6d10
2026-02-11T17:48:47.509 [DEBUG] [Thread-133186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:48:47.524 [DEBUG] [Thread-133186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:48:47.524 [INFO] [Thread-133186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:48:47.531 [DEBUG] [Thread-133186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] client lang: <none>
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] server lang: <none>
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] kex follows: False
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:48:47.532 [DEBUG] [Thread-133186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:48:47.533 [DEBUG] [Thread-133186] [transport.py] [_log()] Compression: none
2026-02-11T17:48:47.533 [DEBUG] [Thread-133186] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:48:47.593 [DEBUG] [Thread-133186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:48:47.593 [DEBUG] [Thread-133186] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:48:47.594 [DEBUG] [Thread-133186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:48:47.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:48:47.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:48:47.649 [DEBUG] [Thread-133186] [transport.py] [_log()] userauth is OK
2026-02-11T17:48:47.649 [DEBUG] [Thread-133186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:48:47.649 [DEBUG] [Thread-133186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:48:47.649 [DEBUG] [Thread-133186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:48:47.649 [DEBUG] [Thread-133186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:48:47.663 [INFO] [Thread-133186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:48:47.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:48:47.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:48:48.557 [DEBUG] [Thread-133186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:48:48.557 [DEBUG] [Thread-133186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:48:48.605 [DEBUG] [Thread-133186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:48:48.605 [DEBUG] [Thread-133186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:48:48.615 [DEBUG] [Thread-133186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:48:48.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:48:48.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:48:48.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:48:48.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:48:48.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:48:48.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:48:48.651 [DEBUG] [Thread-133186] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:48:51.584 [DEBUG] [Thread-133188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:48:53.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:48:53.623 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:06.646 [DEBUG] [Thread-133189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:18.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:49:18.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:49:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:49:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 48, 44), 11.25, 49.14, 0.0, 27.56, 22.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:49:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:48:44
2026-02-11T17:49:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:49:21.108 [DEBUG] [Thread-133190] [transport.py] [_log()] starting thread (client mode): 0xa575a740
2026-02-11T17:49:21.109 [DEBUG] [Thread-133190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:49:21.130 [DEBUG] [Thread-133190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:49:21.130 [INFO] [Thread-133190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:21.133 [DEBUG] [Thread-133190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] client lang: <none>
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] server lang: <none>
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] kex follows: False
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] Compression: none
2026-02-11T17:49:21.134 [DEBUG] [Thread-133190] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:49:21.153 [DEBUG] [Thread-133190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:49:21.154 [DEBUG] [Thread-133190] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:49:21.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:49:21.155 [DEBUG] [Thread-133190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:49:21.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:49:21.157 [DEBUG] [Thread-133190] [transport.py] [_log()] userauth is OK
2026-02-11T17:49:21.157 [DEBUG] [Thread-133190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:49:21.158 [DEBUG] [Thread-133190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:49:21.158 [DEBUG] [Thread-133190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:49:21.158 [DEBUG] [Thread-133190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:49:21.194 [INFO] [Thread-133190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:49:21.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:49:21.682 [DEBUG] [Thread-133192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:21.797 [DEBUG] [Thread-133190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:49:21.798 [DEBUG] [Thread-133190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:49:21.798 [DEBUG] [Thread-133190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:49:21.838 [DEBUG] [Thread-133190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:49:21.838 [DEBUG] [Thread-133190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:49:21.842 [DEBUG] [Thread-133190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:49:21.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:49:21.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:49:21.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:49:21.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:49:21.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:49:21.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:49:21.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:49:21.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:49:21.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:49:21.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.658821 -999.00  +21.80  28.76     55  +12.40 1 3 1 1 1   887    0 8.33 -44.86 ----- 20.8 28.8 290.4 34.6 23.6 -9.3 23.6 -8.7 23.0 -8.2 23.5 -8.4
2026-02-11T17:49:21.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:49:21.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:49:21.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.658821
2026-02-11T17:49:21.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:49:21.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:49:21.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:49:21.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:49:21.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:49:21.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:48:44', tmtdew=11.25, humidity=49.14, cloud=0.0, wind=27.56, temperature=22.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:48:42.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:49:21.867 [DEBUG] [Thread-133190] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:49:21.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:49:21.966 [DEBUG] [Thread-133194] [transport.py] [_log()] starting thread (client mode): 0xa5759630
2026-02-11T17:49:21.966 [DEBUG] [Thread-133194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:49:21.981 [DEBUG] [Thread-133194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:49:21.981 [INFO] [Thread-133194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] client lang: <none>
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] server lang: <none>
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] kex follows: False
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:49:21.989 [DEBUG] [Thread-133194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:49:21.990 [DEBUG] [Thread-133194] [transport.py] [_log()] Compression: none
2026-02-11T17:49:21.990 [DEBUG] [Thread-133194] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:49:22.047 [DEBUG] [Thread-133194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:49:22.048 [DEBUG] [Thread-133194] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:49:22.048 [DEBUG] [Thread-133194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:49:22.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:49:22.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:49:22.104 [DEBUG] [Thread-133194] [transport.py] [_log()] userauth is OK
2026-02-11T17:49:22.104 [DEBUG] [Thread-133194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:49:22.105 [DEBUG] [Thread-133194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:49:22.105 [DEBUG] [Thread-133194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:49:22.105 [DEBUG] [Thread-133194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:49:22.129 [INFO] [Thread-133194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:49:22.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:49:22.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:49:22.932 [DEBUG] [Thread-133194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:49:22.933 [DEBUG] [Thread-133194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:49:22.982 [DEBUG] [Thread-133194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:49:22.982 [DEBUG] [Thread-133194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:49:22.990 [DEBUG] [Thread-133194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:49:22.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:49:22.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:49:23.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:49:23.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:49:23.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:49:23.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:49:23.023 [DEBUG] [Thread-133194] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:49:28.526 [DEBUG] [Thread-133196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:36.718 [DEBUG] [Thread-133197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:51.770 [DEBUG] [Thread-133198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:49:53.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:49:53.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
2026-02-11T17:49:53.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:53.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:49:54.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 49, 20), 11.18, 49.34, 0.0, 26.82, 22.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:49:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:49:20
2026-02-11T17:49:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:49:55.441 [DEBUG] [Thread-133199] [transport.py] [_log()] starting thread (client mode): 0xa2d55b70
2026-02-11T17:49:55.441 [DEBUG] [Thread-133199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:49:55.463 [DEBUG] [Thread-133199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:49:55.463 [INFO] [Thread-133199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:49:55.467 [DEBUG] [Thread-133199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:49:55.467 [DEBUG] [Thread-133199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] client lang: <none>
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] server lang: <none>
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] kex follows: False
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] Compression: none
2026-02-11T17:49:55.468 [DEBUG] [Thread-133199] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:49:55.485 [DEBUG] [Thread-133199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:49:55.485 [DEBUG] [Thread-133199] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:49:55.486 [DEBUG] [Thread-133199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:49:55.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:49:55.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:49:55.488 [DEBUG] [Thread-133199] [transport.py] [_log()] userauth is OK
2026-02-11T17:49:55.488 [DEBUG] [Thread-133199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:49:55.488 [DEBUG] [Thread-133199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:49:55.488 [DEBUG] [Thread-133199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:49:55.489 [DEBUG] [Thread-133199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:49:55.525 [INFO] [Thread-133199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:49:55.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:49:56.130 [DEBUG] [Thread-133199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:49:56.130 [DEBUG] [Thread-133199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:49:56.130 [DEBUG] [Thread-133199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:49:56.170 [DEBUG] [Thread-133199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:49:56.170 [DEBUG] [Thread-133199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:49:56.173 [DEBUG] [Thread-133199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:49:56.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:49:56.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:49:56.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:49:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:49:56.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:49:56.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:49:56.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:49:56.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:49:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:49:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.659516 -999.00  +21.80  32.70     55  +12.40 1 3 2 1 1   887    0 8.11 -45.77 ----- 23.9 32.7 273.6 36.6 23.5 -9.6 23.5 -8.8 23.0 -9.1 23.4 -8.4
2026-02-11T17:49:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:49:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:49:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.659516
2026-02-11T17:49:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:49:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:49:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:49:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:49:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:49:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:49:20', tmtdew=11.18, humidity=49.34, cloud=0.0, wind=26.82, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:49:42.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:49:56.199 [DEBUG] [Thread-133199] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:49:56.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:49:56.296 [DEBUG] [Thread-133202] [transport.py] [_log()] starting thread (client mode): 0xa2d56ec0
2026-02-11T17:49:56.296 [DEBUG] [Thread-133202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:49:56.315 [DEBUG] [Thread-133202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:49:56.315 [INFO] [Thread-133202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:49:56.322 [DEBUG] [Thread-133202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] client lang: <none>
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] server lang: <none>
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] kex follows: False
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:49:56.323 [DEBUG] [Thread-133202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:49:56.324 [DEBUG] [Thread-133202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:49:56.324 [DEBUG] [Thread-133202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:49:56.324 [DEBUG] [Thread-133202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:49:56.324 [DEBUG] [Thread-133202] [transport.py] [_log()] Compression: none
2026-02-11T17:49:56.324 [DEBUG] [Thread-133202] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:49:56.382 [DEBUG] [Thread-133202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:49:56.383 [DEBUG] [Thread-133202] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:49:56.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:49:56.384 [DEBUG] [Thread-133202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:49:56.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:49:56.439 [DEBUG] [Thread-133202] [transport.py] [_log()] userauth is OK
2026-02-11T17:49:56.439 [DEBUG] [Thread-133202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:49:56.439 [DEBUG] [Thread-133202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:49:56.439 [DEBUG] [Thread-133202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:49:56.439 [DEBUG] [Thread-133202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:49:56.458 [INFO] [Thread-133202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:49:56.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:49:56.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:49:57.264 [DEBUG] [Thread-133202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:49:57.265 [DEBUG] [Thread-133202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:49:57.316 [DEBUG] [Thread-133202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:49:57.316 [DEBUG] [Thread-133202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:49:57.325 [DEBUG] [Thread-133202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:49:57.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:49:57.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:49:57.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:49:57.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:49:57.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:49:57.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:49:57.361 [DEBUG] [Thread-133202] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:50:06.807 [DEBUG] [Thread-133204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:50:21.862 [DEBUG] [Thread-133205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:50:27.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:50:27.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:50:27.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:50:28.560 [DEBUG] [Thread-133206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:50:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 49, 57), 11.23, 48.86, 0.0, 28.04, 22.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:50:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:49:57
2026-02-11T17:50:29.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:50:29.727 [DEBUG] [Thread-133207] [transport.py] [_log()] starting thread (client mode): 0xa2d56710
2026-02-11T17:50:29.728 [DEBUG] [Thread-133207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:50:29.747 [DEBUG] [Thread-133207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:50:29.747 [INFO] [Thread-133207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:50:29.750 [DEBUG] [Thread-133207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:50:29.750 [DEBUG] [Thread-133207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:50:29.750 [DEBUG] [Thread-133207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:50:29.750 [DEBUG] [Thread-133207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] client lang: <none>
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] server lang: <none>
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] kex follows: False
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:50:29.751 [DEBUG] [Thread-133207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:50:29.752 [DEBUG] [Thread-133207] [transport.py] [_log()] Compression: none
2026-02-11T17:50:29.752 [DEBUG] [Thread-133207] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:50:29.772 [DEBUG] [Thread-133207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:50:29.772 [DEBUG] [Thread-133207] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:50:29.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:50:29.774 [DEBUG] [Thread-133207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:50:29.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:50:29.775 [DEBUG] [Thread-133207] [transport.py] [_log()] userauth is OK
2026-02-11T17:50:29.776 [DEBUG] [Thread-133207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:50:29.776 [DEBUG] [Thread-133207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:50:29.776 [DEBUG] [Thread-133207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:50:29.776 [DEBUG] [Thread-133207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:50:29.800 [INFO] [Thread-133207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:50:29.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:50:30.569 [DEBUG] [Thread-133207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:50:30.569 [DEBUG] [Thread-133207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:50:30.570 [DEBUG] [Thread-133207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:50:30.610 [DEBUG] [Thread-133207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:50:30.610 [DEBUG] [Thread-133207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:50:30.613 [DEBUG] [Thread-133207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:50:30.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:50:30.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:50:30.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:50:30.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:50:30.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:50:30.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:50:30.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:50:30.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:50:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:50:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.659863 -999.00  +21.70  26.06     55  +12.40 1 3 1 1 1   887    0 8.34 -44.68 ----- 30.6 26.1 278.0 36.6 23.5 -9.2 23.5 -8.4 23.0 -7.9 23.4 -8.1
2026-02-11T17:50:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:50:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:50:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.659863
2026-02-11T17:50:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:50:30.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:50:30.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:50:30.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:50:30.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:50:30.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:49:57', tmtdew=11.23, humidity=48.86, cloud=0.0, wind=28.04, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:50:12.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:50:30.633 [DEBUG] [Thread-133207] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:50:30.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:50:30.728 [DEBUG] [Thread-133210] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ff0
2026-02-11T17:50:30.728 [DEBUG] [Thread-133210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:50:30.743 [DEBUG] [Thread-133210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:50:30.743 [INFO] [Thread-133210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] client lang: <none>
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] server lang: <none>
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] kex follows: False
2026-02-11T17:50:30.751 [DEBUG] [Thread-133210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:50:30.752 [DEBUG] [Thread-133210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:50:30.752 [DEBUG] [Thread-133210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:50:30.752 [DEBUG] [Thread-133210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:50:30.752 [DEBUG] [Thread-133210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:50:30.752 [DEBUG] [Thread-133210] [transport.py] [_log()] Compression: none
2026-02-11T17:50:30.752 [DEBUG] [Thread-133210] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:50:30.809 [DEBUG] [Thread-133210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:50:30.810 [DEBUG] [Thread-133210] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:50:30.810 [DEBUG] [Thread-133210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:50:30.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:50:30.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:50:30.866 [DEBUG] [Thread-133210] [transport.py] [_log()] userauth is OK
2026-02-11T17:50:30.867 [DEBUG] [Thread-133210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:50:30.867 [DEBUG] [Thread-133210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:50:30.867 [DEBUG] [Thread-133210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:50:30.867 [DEBUG] [Thread-133210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:50:30.885 [INFO] [Thread-133210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:50:30.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:50:30.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:50:31.707 [DEBUG] [Thread-133210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:50:31.708 [DEBUG] [Thread-133210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:50:31.757 [DEBUG] [Thread-133210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:50:31.757 [DEBUG] [Thread-133210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:50:31.770 [DEBUG] [Thread-133210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:50:31.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:50:31.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:50:31.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:50:31.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:50:31.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:50:31.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:50:31.806 [DEBUG] [Thread-133210] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:50:36.900 [DEBUG] [Thread-133212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:50:51.950 [DEBUG] [Thread-133213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:50:53.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:50:53.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:51:01.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:51:01.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:51:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:51:03.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 50, 32), 11.27, 48.74, 0.0, 31.62, 22.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:51:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:50:32
2026-02-11T17:51:04.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:51:04.497 [DEBUG] [Thread-133214] [transport.py] [_log()] starting thread (client mode): 0xa2d54820
2026-02-11T17:51:04.497 [DEBUG] [Thread-133214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:51:04.517 [DEBUG] [Thread-133214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:51:04.517 [INFO] [Thread-133214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] client lang: <none>
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] server lang: <none>
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] kex follows: False
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:51:04.520 [DEBUG] [Thread-133214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:51:04.521 [DEBUG] [Thread-133214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:51:04.521 [DEBUG] [Thread-133214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:51:04.521 [DEBUG] [Thread-133214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:51:04.521 [DEBUG] [Thread-133214] [transport.py] [_log()] Compression: none
2026-02-11T17:51:04.521 [DEBUG] [Thread-133214] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:51:04.537 [DEBUG] [Thread-133214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:51:04.537 [DEBUG] [Thread-133214] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:51:04.537 [DEBUG] [Thread-133214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:51:04.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:51:04.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:51:04.538 [DEBUG] [Thread-133214] [transport.py] [_log()] userauth is OK
2026-02-11T17:51:04.538 [DEBUG] [Thread-133214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:51:04.538 [DEBUG] [Thread-133214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:51:04.538 [DEBUG] [Thread-133214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:51:04.538 [DEBUG] [Thread-133214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:51:04.562 [INFO] [Thread-133214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:51:04.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:51:05.175 [DEBUG] [Thread-133214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:51:05.175 [DEBUG] [Thread-133214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:51:05.175 [DEBUG] [Thread-133214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:51:05.215 [DEBUG] [Thread-133214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:51:05.216 [DEBUG] [Thread-133214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:51:05.219 [DEBUG] [Thread-133214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:51:05.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:51:05.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:51:05.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:51:05.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:51:05.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:51:05.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:51:05.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:51:05.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:51:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:51:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.660210 -999.00  +21.70  28.20     55  +12.50 1 3 1 1 1   887    0 8.31 -49.29 ----- 31.6 28.2 276.8 35.9 23.5 -9.2 23.4 -8.3 23.0 -8.6 23.4 -8.3
2026-02-11T17:51:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:51:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:51:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.660210
2026-02-11T17:51:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:51:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:51:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:51:05.242 [DEBUG] [Thread-133214] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:51:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:51:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:51:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:50:32', tmtdew=11.27, humidity=48.74, cloud=0.0, wind=31.62, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:50:42.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:51:05.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:51:05.338 [DEBUG] [Thread-133217] [transport.py] [_log()] starting thread (client mode): 0xa575a6e0
2026-02-11T17:51:05.338 [DEBUG] [Thread-133217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:51:05.355 [DEBUG] [Thread-133217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:51:05.355 [INFO] [Thread-133217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:51:05.363 [DEBUG] [Thread-133217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:51:05.363 [DEBUG] [Thread-133217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:51:05.363 [DEBUG] [Thread-133217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] client lang: <none>
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] server lang: <none>
2026-02-11T17:51:05.364 [DEBUG] [Thread-133217] [transport.py] [_log()] kex follows: False
2026-02-11T17:51:05.365 [DEBUG] [Thread-133217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:51:05.365 [DEBUG] [Thread-133217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:51:05.365 [DEBUG] [Thread-133217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:51:05.365 [DEBUG] [Thread-133217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:51:05.365 [DEBUG] [Thread-133217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:51:05.365 [DEBUG] [Thread-133217] [transport.py] [_log()] Compression: none
2026-02-11T17:51:05.365 [DEBUG] [Thread-133217] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:51:05.420 [DEBUG] [Thread-133217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:51:05.421 [DEBUG] [Thread-133217] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:51:05.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:51:05.423 [DEBUG] [Thread-133217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:51:05.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:51:05.480 [DEBUG] [Thread-133217] [transport.py] [_log()] userauth is OK
2026-02-11T17:51:05.481 [DEBUG] [Thread-133217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:51:05.481 [DEBUG] [Thread-133217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:51:05.481 [DEBUG] [Thread-133217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:51:05.481 [DEBUG] [Thread-133217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:51:05.499 [INFO] [Thread-133217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:51:05.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:51:05.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:51:06.311 [DEBUG] [Thread-133217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:51:06.311 [DEBUG] [Thread-133217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:51:06.358 [DEBUG] [Thread-133217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:51:06.358 [DEBUG] [Thread-133217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:51:06.371 [DEBUG] [Thread-133217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:51:06.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:51:06.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:51:06.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:51:06.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:51:06.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:51:06.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:51:06.410 [DEBUG] [Thread-133217] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:51:06.989 [DEBUG] [Thread-133219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:51:22.039 [DEBUG] [Thread-133220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:51:28.592 [DEBUG] [Thread-133221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:51:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:51:36.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:51:36.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:51:37.077 [DEBUG] [Thread-133222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:51:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 51, 8), 11.23, 48.86, 0.0, 29.8, 22.24, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:51:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:51:08
2026-02-11T17:51:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:51:38.819 [DEBUG] [Thread-133223] [transport.py] [_log()] starting thread (client mode): 0xa575b910
2026-02-11T17:51:38.819 [DEBUG] [Thread-133223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:51:38.839 [DEBUG] [Thread-133223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:51:38.839 [INFO] [Thread-133223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:51:38.842 [DEBUG] [Thread-133223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:51:38.842 [DEBUG] [Thread-133223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:51:38.842 [DEBUG] [Thread-133223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:51:38.842 [DEBUG] [Thread-133223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:38.842 [DEBUG] [Thread-133223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:38.842 [DEBUG] [Thread-133223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] client lang: <none>
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] server lang: <none>
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] kex follows: False
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] Compression: none
2026-02-11T17:51:38.843 [DEBUG] [Thread-133223] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:51:38.853 [DEBUG] [Thread-133223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:51:38.854 [DEBUG] [Thread-133223] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:51:38.854 [DEBUG] [Thread-133223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:51:38.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:51:38.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:51:38.856 [DEBUG] [Thread-133223] [transport.py] [_log()] userauth is OK
2026-02-11T17:51:38.856 [DEBUG] [Thread-133223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:51:38.856 [DEBUG] [Thread-133223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:51:38.856 [DEBUG] [Thread-133223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:51:38.856 [DEBUG] [Thread-133223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:51:38.876 [INFO] [Thread-133223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:51:38.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:51:39.492 [DEBUG] [Thread-133223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:51:39.492 [DEBUG] [Thread-133223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:51:39.501 [DEBUG] [Thread-133223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:51:39.533 [DEBUG] [Thread-133223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:51:39.534 [DEBUG] [Thread-133223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:51:39.537 [DEBUG] [Thread-133223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:51:39.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:51:39.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:51:39.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:51:39.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:51:39.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:51:39.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:51:39.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:51:39.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:51:39.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:51:39.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.660558 -999.00  +21.70  32.70     55  +12.40 1 3 2 1 1   887    0 8.11 -53.65 ----- 24.4 32.7 270.8 37.4 23.4 -8.9 23.5 -8.1 23.0 -8.3 23.3 -8.1
2026-02-11T17:51:39.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:51:39.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:51:39.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.660558
2026-02-11T17:51:39.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:51:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:51:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:51:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:51:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:51:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:51:08', tmtdew=11.23, humidity=48.86, cloud=0.0, wind=29.8, temperature=22.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:51:12.211', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:51:39.563 [DEBUG] [Thread-133223] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:51:39.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:51:39.658 [DEBUG] [Thread-133226] [transport.py] [_log()] starting thread (client mode): 0xa2dc3f40
2026-02-11T17:51:39.659 [DEBUG] [Thread-133226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:51:39.674 [DEBUG] [Thread-133226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:51:39.674 [INFO] [Thread-133226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:51:39.681 [DEBUG] [Thread-133226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] client lang: <none>
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] server lang: <none>
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] kex follows: False
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] Compression: none
2026-02-11T17:51:39.682 [DEBUG] [Thread-133226] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:51:39.742 [DEBUG] [Thread-133226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:51:39.743 [DEBUG] [Thread-133226] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:51:39.743 [DEBUG] [Thread-133226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:51:39.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:51:39.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:51:39.800 [DEBUG] [Thread-133226] [transport.py] [_log()] userauth is OK
2026-02-11T17:51:39.800 [DEBUG] [Thread-133226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:51:39.800 [DEBUG] [Thread-133226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:51:39.800 [DEBUG] [Thread-133226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:51:39.801 [DEBUG] [Thread-133226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:51:39.821 [INFO] [Thread-133226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:51:39.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:51:39.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:51:40.634 [DEBUG] [Thread-133226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:51:40.634 [DEBUG] [Thread-133226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:51:40.682 [DEBUG] [Thread-133226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:51:40.682 [DEBUG] [Thread-133226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:51:40.693 [DEBUG] [Thread-133226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:51:40.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:51:40.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:51:40.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:51:40.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:51:40.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:51:40.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:51:40.730 [DEBUG] [Thread-133226] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:51:52.115 [DEBUG] [Thread-133228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:51:54.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:51:54.051 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:52:07.171 [DEBUG] [Thread-133229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:52:10.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:52:10.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:52:10.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
2026-02-11T17:52:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 51, 43), 11.08, 49.36, 0.0, 26.73, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:52:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:51:43
2026-02-11T17:52:13.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:52:13.503 [DEBUG] [Thread-133230] [transport.py] [_log()] starting thread (client mode): 0xa2d54760
2026-02-11T17:52:13.503 [DEBUG] [Thread-133230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:52:13.523 [DEBUG] [Thread-133230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:52:13.523 [INFO] [Thread-133230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] client lang: <none>
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] server lang: <none>
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] kex follows: False
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:52:13.524 [DEBUG] [Thread-133230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:52:13.525 [DEBUG] [Thread-133230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:52:13.525 [DEBUG] [Thread-133230] [transport.py] [_log()] Compression: none
2026-02-11T17:52:13.525 [DEBUG] [Thread-133230] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:52:13.534 [DEBUG] [Thread-133230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:52:13.535 [DEBUG] [Thread-133230] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:52:13.535 [DEBUG] [Thread-133230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:52:13.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:52:13.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:52:13.537 [DEBUG] [Thread-133230] [transport.py] [_log()] userauth is OK
2026-02-11T17:52:13.537 [DEBUG] [Thread-133230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:52:13.537 [DEBUG] [Thread-133230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:52:13.537 [DEBUG] [Thread-133230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:52:13.537 [DEBUG] [Thread-133230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:52:13.561 [INFO] [Thread-133230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:52:13.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:52:14.179 [DEBUG] [Thread-133230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:52:14.180 [DEBUG] [Thread-133230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:52:14.180 [DEBUG] [Thread-133230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:52:14.220 [DEBUG] [Thread-133230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:52:14.220 [DEBUG] [Thread-133230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:52:14.223 [DEBUG] [Thread-133230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:52:14.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:52:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:52:14.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:52:14.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:52:14.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:52:14.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:52:14.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:52:14.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:52:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:52:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.660905 -999.00  +21.80  21.73     55  +12.50 1 3 1 1 1   887    0 7.86 -53.61 ----- 18.7 21.7 287.8 28.4 23.5 -8.5 23.4 -7.9 22.9 -7.5 23.4 -7.6
2026-02-11T17:52:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:52:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:52:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.660905
2026-02-11T17:52:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:52:14.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:52:14.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:52:14.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:52:14.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:52:14.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:51:43', tmtdew=11.08, humidity=49.36, cloud=0.0, wind=26.73, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:51:42.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:52:14.251 [DEBUG] [Thread-133230] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:52:14.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:52:14.345 [DEBUG] [Thread-133233] [transport.py] [_log()] starting thread (client mode): 0xa2dc11b0
2026-02-11T17:52:14.345 [DEBUG] [Thread-133233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:52:14.364 [DEBUG] [Thread-133233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:52:14.364 [INFO] [Thread-133233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:52:14.372 [DEBUG] [Thread-133233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:52:14.372 [DEBUG] [Thread-133233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:52:14.372 [DEBUG] [Thread-133233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] client lang: <none>
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] server lang: <none>
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] kex follows: False
2026-02-11T17:52:14.373 [DEBUG] [Thread-133233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:52:14.374 [DEBUG] [Thread-133233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:52:14.374 [DEBUG] [Thread-133233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:52:14.374 [DEBUG] [Thread-133233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:52:14.374 [DEBUG] [Thread-133233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:52:14.374 [DEBUG] [Thread-133233] [transport.py] [_log()] Compression: none
2026-02-11T17:52:14.374 [DEBUG] [Thread-133233] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:52:14.431 [DEBUG] [Thread-133233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:52:14.432 [DEBUG] [Thread-133233] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:52:14.432 [DEBUG] [Thread-133233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:52:14.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:52:14.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:52:14.487 [DEBUG] [Thread-133233] [transport.py] [_log()] userauth is OK
2026-02-11T17:52:14.488 [DEBUG] [Thread-133233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:52:14.488 [DEBUG] [Thread-133233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:52:14.488 [DEBUG] [Thread-133233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:52:14.488 [DEBUG] [Thread-133233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:52:14.506 [INFO] [Thread-133233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:52:14.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:52:14.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:52:15.316 [DEBUG] [Thread-133233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:52:15.317 [DEBUG] [Thread-133233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:52:15.364 [DEBUG] [Thread-133233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:52:15.365 [DEBUG] [Thread-133233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:52:15.374 [DEBUG] [Thread-133233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:52:15.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:52:15.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:52:15.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:52:15.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:52:15.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:52:15.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:52:15.410 [DEBUG] [Thread-133233] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:52:22.208 [DEBUG] [Thread-133235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:52:28.643 [DEBUG] [Thread-133236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:52:37.255 [DEBUG] [Thread-133237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:52:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:52:45.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:52:45.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:52:47.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 52, 19), 11.09, 49.34, 0.0, 29.13, 22.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:52:47.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:52:19
2026-02-11T17:52:47.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:52:47.960 [DEBUG] [Thread-133238] [transport.py] [_log()] starting thread (client mode): 0xa2dc2110
2026-02-11T17:52:47.960 [DEBUG] [Thread-133238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:52:47.980 [DEBUG] [Thread-133238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:52:47.980 [INFO] [Thread-133238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:52:47.983 [DEBUG] [Thread-133238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:52:47.983 [DEBUG] [Thread-133238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:52:47.983 [DEBUG] [Thread-133238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:52:47.983 [DEBUG] [Thread-133238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] client lang: <none>
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] server lang: <none>
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] kex follows: False
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] Compression: none
2026-02-11T17:52:47.984 [DEBUG] [Thread-133238] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:52:48.000 [DEBUG] [Thread-133238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:52:48.001 [DEBUG] [Thread-133238] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:52:48.001 [DEBUG] [Thread-133238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:52:48.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:52:48.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:52:48.003 [DEBUG] [Thread-133238] [transport.py] [_log()] userauth is OK
2026-02-11T17:52:48.004 [DEBUG] [Thread-133238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:52:48.004 [DEBUG] [Thread-133238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:52:48.004 [DEBUG] [Thread-133238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:52:48.004 [DEBUG] [Thread-133238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:52:48.023 [INFO] [Thread-133238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:52:48.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:52:48.630 [DEBUG] [Thread-133238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:52:48.630 [DEBUG] [Thread-133238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:52:48.630 [DEBUG] [Thread-133238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:52:48.671 [DEBUG] [Thread-133238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:52:48.672 [DEBUG] [Thread-133238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:52:48.675 [DEBUG] [Thread-133238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:52:48.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:52:48.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:52:48.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:52:48.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:52:48.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:52:48.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:52:48.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:52:48.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:52:48.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:52:48.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.661252 -999.00  +21.90  18.76     55  +12.50 1 3 1 1 1   887    0 8.10 -56.49 ----- 28.5 18.8 281.9 29.4 23.6 -8.4 23.5 -7.8 23.0 -7.9 23.4 -7.6
2026-02-11T17:52:48.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:52:48.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:52:48.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.661252
2026-02-11T17:52:48.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:52:48.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:52:48.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:52:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:52:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:52:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:52:19', tmtdew=11.09, humidity=49.34, cloud=0.0, wind=29.13, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:52:12.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:52:48.702 [DEBUG] [Thread-133238] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:52:48.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:52:48.798 [DEBUG] [Thread-133241] [transport.py] [_log()] starting thread (client mode): 0xa2db6170
2026-02-11T17:52:48.798 [DEBUG] [Thread-133241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:52:48.812 [DEBUG] [Thread-133241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:52:48.812 [INFO] [Thread-133241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] client lang: <none>
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] server lang: <none>
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] kex follows: False
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:52:48.820 [DEBUG] [Thread-133241] [transport.py] [_log()] Compression: none
2026-02-11T17:52:48.821 [DEBUG] [Thread-133241] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:52:48.877 [DEBUG] [Thread-133241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:52:48.878 [DEBUG] [Thread-133241] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:52:48.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:52:48.879 [DEBUG] [Thread-133241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:52:48.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:52:48.933 [DEBUG] [Thread-133241] [transport.py] [_log()] userauth is OK
2026-02-11T17:52:48.933 [DEBUG] [Thread-133241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:52:48.934 [DEBUG] [Thread-133241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:52:48.934 [DEBUG] [Thread-133241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:52:48.934 [DEBUG] [Thread-133241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:52:48.952 [INFO] [Thread-133241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:52:48.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:52:48.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:52:49.789 [DEBUG] [Thread-133241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:52:49.789 [DEBUG] [Thread-133241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:52:49.836 [DEBUG] [Thread-133241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:52:49.836 [DEBUG] [Thread-133241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:52:49.845 [DEBUG] [Thread-133241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:52:49.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:52:49.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:52: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
2026-02-11T17:52:49.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:52:49.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:52:49.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:52:49.881 [DEBUG] [Thread-133241] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:52:52.292 [DEBUG] [Thread-133243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:52:54.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:52:54.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:07.346 [DEBUG] [Thread-133244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:19.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:53:19.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:53:19.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:53:21.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 52, 54), 11.21, 48.92, 0.0, 29.02, 22.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:53:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:52:54
2026-02-11T17:53:22.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:53:22.312 [DEBUG] [Thread-133245] [transport.py] [_log()] starting thread (client mode): 0xa5773be0
2026-02-11T17:53:22.312 [DEBUG] [Thread-133245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:53:22.332 [DEBUG] [Thread-133245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:53:22.332 [INFO] [Thread-133245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] client lang: <none>
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] server lang: <none>
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] kex follows: False
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:53:22.333 [DEBUG] [Thread-133245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:53:22.334 [DEBUG] [Thread-133245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:53:22.334 [DEBUG] [Thread-133245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:53:22.334 [DEBUG] [Thread-133245] [transport.py] [_log()] Compression: none
2026-02-11T17:53:22.334 [DEBUG] [Thread-133245] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:53:22.347 [DEBUG] [Thread-133245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:53:22.347 [DEBUG] [Thread-133245] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:53:22.348 [DEBUG] [Thread-133245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:53:22.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:53:22.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:53:22.350 [DEBUG] [Thread-133245] [transport.py] [_log()] userauth is OK
2026-02-11T17:53:22.350 [DEBUG] [Thread-133245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:53:22.350 [DEBUG] [Thread-133245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:53:22.350 [DEBUG] [Thread-133245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:53:22.350 [DEBUG] [Thread-133245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:53:22.368 [INFO] [Thread-133245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:53:22.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:53:22.387 [DEBUG] [Thread-133247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:23.089 [DEBUG] [Thread-133245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:53:23.089 [DEBUG] [Thread-133245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:53:23.089 [DEBUG] [Thread-133245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:53:23.131 [DEBUG] [Thread-133245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:53:23.131 [DEBUG] [Thread-133245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:53:23.133 [DEBUG] [Thread-133245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:53:23.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:53:23.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:53:23.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:53:23.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:53:23.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:53:23.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:53:23.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:53:23.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:53:23.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:53:23.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.661599 -999.00  +22.00  19.41     55  +12.50 1 3 1 1 1   887    0 7.71 -54.71 ----- 26.9 19.4 288.8 26.9 23.6 -8.5 23.5 -7.8 23.1 -7.4 23.4 -7.8
2026-02-11T17:53:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:53:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:53:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.661599
2026-02-11T17:53:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:53:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:53:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:53:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:53:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:53:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:52:54', tmtdew=11.21, humidity=48.92, cloud=0.0, wind=29.02, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:52:42.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:53:23.157 [DEBUG] [Thread-133245] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:53:23.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:53:23.254 [DEBUG] [Thread-133249] [transport.py] [_log()] starting thread (client mode): 0xa2db7fa0
2026-02-11T17:53:23.254 [DEBUG] [Thread-133249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:53:23.268 [DEBUG] [Thread-133249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:53:23.268 [INFO] [Thread-133249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] client lang: <none>
2026-02-11T17:53:23.276 [DEBUG] [Thread-133249] [transport.py] [_log()] server lang: <none>
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] kex follows: False
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] Compression: none
2026-02-11T17:53:23.277 [DEBUG] [Thread-133249] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:53:23.331 [DEBUG] [Thread-133249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:53:23.332 [DEBUG] [Thread-133249] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:53:23.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:53:23.333 [DEBUG] [Thread-133249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:53:23.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:53:23.388 [DEBUG] [Thread-133249] [transport.py] [_log()] userauth is OK
2026-02-11T17:53:23.388 [DEBUG] [Thread-133249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:53:23.388 [DEBUG] [Thread-133249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:53:23.388 [DEBUG] [Thread-133249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:53:23.388 [DEBUG] [Thread-133249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:53:23.404 [INFO] [Thread-133249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:53:23.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:53:23.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:53:24.235 [DEBUG] [Thread-133249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:53:24.235 [DEBUG] [Thread-133249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:53:24.283 [DEBUG] [Thread-133249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:53:24.283 [DEBUG] [Thread-133249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:53:24.292 [DEBUG] [Thread-133249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:53:24.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:53:24.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:53:24.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:53:24.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:53:24.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:53:24.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:53:24.325 [DEBUG] [Thread-133249] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:53:28.697 [DEBUG] [Thread-133251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:37.420 [DEBUG] [Thread-133252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:52.474 [DEBUG] [Thread-133253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:54.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:54.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:53:54.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:53:54.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:53:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:53:56.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 53, 29), 11.2, 48.96, 0.0, 29.18, 22.31, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:53:56.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:53:29
2026-02-11T17:53:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:53:56.810 [DEBUG] [Thread-133254] [transport.py] [_log()] starting thread (client mode): 0xa57c1990
2026-02-11T17:53:56.811 [DEBUG] [Thread-133254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:53:56.830 [DEBUG] [Thread-133254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:53:56.831 [INFO] [Thread-133254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:53:56.833 [DEBUG] [Thread-133254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:53:56.833 [DEBUG] [Thread-133254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:53:56.833 [DEBUG] [Thread-133254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:53:56.833 [DEBUG] [Thread-133254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:56.833 [DEBUG] [Thread-133254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:56.833 [DEBUG] [Thread-133254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] client lang: <none>
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] server lang: <none>
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] kex follows: False
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] Compression: none
2026-02-11T17:53:56.834 [DEBUG] [Thread-133254] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:53:56.851 [DEBUG] [Thread-133254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:53:56.852 [DEBUG] [Thread-133254] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:53:56.852 [DEBUG] [Thread-133254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:53:56.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:53:56.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:53:56.854 [DEBUG] [Thread-133254] [transport.py] [_log()] userauth is OK
2026-02-11T17:53:56.854 [DEBUG] [Thread-133254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:53:56.854 [DEBUG] [Thread-133254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:53:56.855 [DEBUG] [Thread-133254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:53:56.855 [DEBUG] [Thread-133254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:53:56.876 [INFO] [Thread-133254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:53:56.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:53:57.485 [DEBUG] [Thread-133254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:53:57.485 [DEBUG] [Thread-133254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:53:57.485 [DEBUG] [Thread-133254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:53:57.526 [DEBUG] [Thread-133254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:53:57.527 [DEBUG] [Thread-133254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:53:57.530 [DEBUG] [Thread-133254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:53:57.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:53:57.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:53:57.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:53:57.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:53:57.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:53:57.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:53:57.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:53:57.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:53:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:53:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.661946 -999.00  +22.00  27.38     54  +12.50 1 3 1 1 1   887    0 7.68 -56.63 ----- 32.0 27.4 280.3 34.0 23.6 -8.7 23.5 -7.8 23.2 -7.6 23.4 -7.9
2026-02-11T17:53:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:53:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:53:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.661946
2026-02-11T17:53:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:53:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:53:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:53:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:53:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:53:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:53:29', tmtdew=11.2, humidity=48.96, cloud=0.0, wind=29.18, temperature=22.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:53:12.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:53:57.558 [DEBUG] [Thread-133254] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:53:57.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:53:57.655 [DEBUG] [Thread-133257] [transport.py] [_log()] starting thread (client mode): 0xa57c0760
2026-02-11T17:53:57.655 [DEBUG] [Thread-133257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:53:57.669 [DEBUG] [Thread-133257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:53:57.669 [INFO] [Thread-133257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:53:57.677 [DEBUG] [Thread-133257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:53:57.677 [DEBUG] [Thread-133257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] client lang: <none>
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] server lang: <none>
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] kex follows: False
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] Compression: none
2026-02-11T17:53:57.678 [DEBUG] [Thread-133257] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:53:57.736 [DEBUG] [Thread-133257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:53:57.736 [DEBUG] [Thread-133257] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:53:57.737 [DEBUG] [Thread-133257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:53:57.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:53:57.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:53:57.793 [DEBUG] [Thread-133257] [transport.py] [_log()] userauth is OK
2026-02-11T17:53:57.793 [DEBUG] [Thread-133257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:53:57.793 [DEBUG] [Thread-133257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:53:57.793 [DEBUG] [Thread-133257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:53:57.794 [DEBUG] [Thread-133257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:53:57.813 [INFO] [Thread-133257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:53:57.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:53:57.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:53:58.649 [DEBUG] [Thread-133257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:53:58.649 [DEBUG] [Thread-133257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:53:58.700 [DEBUG] [Thread-133257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:53:58.700 [DEBUG] [Thread-133257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:53:58.709 [DEBUG] [Thread-133257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:53:58.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:53:58.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:53:58.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:53:58.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:53:58.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:53:58.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:53:58.746 [DEBUG] [Thread-133257] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:54:07.514 [DEBUG] [Thread-133259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:54:22.577 [DEBUG] [Thread-133260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:54:28.751 [DEBUG] [Thread-133261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:54:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:54:28.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:54:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:54:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 54, 6), 11.21, 48.92, 0.0, 27.91, 22.31, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:54:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:54:06
2026-02-11T17:54:31.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:54:31.284 [DEBUG] [Thread-133262] [transport.py] [_log()] starting thread (client mode): 0xa5758a60
2026-02-11T17:54:31.284 [DEBUG] [Thread-133262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:54:31.305 [DEBUG] [Thread-133262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:54:31.305 [INFO] [Thread-133262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:54:31.308 [DEBUG] [Thread-133262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:54:31.308 [DEBUG] [Thread-133262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:54:31.308 [DEBUG] [Thread-133262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:54:31.308 [DEBUG] [Thread-133262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:54:31.308 [DEBUG] [Thread-133262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] client lang: <none>
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] server lang: <none>
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] kex follows: False
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] Compression: none
2026-02-11T17:54:31.309 [DEBUG] [Thread-133262] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:54:31.325 [DEBUG] [Thread-133262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:54:31.325 [DEBUG] [Thread-133262] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:54:31.326 [DEBUG] [Thread-133262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:54:31.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:54:31.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:54:31.327 [DEBUG] [Thread-133262] [transport.py] [_log()] userauth is OK
2026-02-11T17:54:31.327 [DEBUG] [Thread-133262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:54:31.327 [DEBUG] [Thread-133262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:54:31.327 [DEBUG] [Thread-133262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:54:31.328 [DEBUG] [Thread-133262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:54:31.351 [INFO] [Thread-133262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:54:31.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:54:32.004 [DEBUG] [Thread-133262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:54:32.004 [DEBUG] [Thread-133262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:54:32.005 [DEBUG] [Thread-133262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:54:32.046 [DEBUG] [Thread-133262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:54:32.046 [DEBUG] [Thread-133262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:54:32.049 [DEBUG] [Thread-133262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:54:32.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:54:32.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:54:32.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:54:32.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:54:32.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:54:32.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:54:32.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:54:32.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:54:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:54:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.662294 -999.00  +21.90  34.44     54  +12.40 1 3 2 1 1   887    0 8.00 -48.37 ----- 34.7 34.4 299.4 39.3 23.6 -8.5 23.5 -7.9 23.1 -7.5 23.5 -8.1
2026-02-11T17:54:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:54:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:54:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.662294
2026-02-11T17:54:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:54:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:54:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:54:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:54:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:54:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:54:06', tmtdew=11.21, humidity=48.92, cloud=0.0, wind=27.91, temperature=22.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:53:42.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:54:32.077 [DEBUG] [Thread-133262] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:54:32.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:54:32.170 [DEBUG] [Thread-133265] [transport.py] [_log()] starting thread (client mode): 0xa57709a0
2026-02-11T17:54:32.170 [DEBUG] [Thread-133265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:54:32.184 [DEBUG] [Thread-133265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:54:32.184 [INFO] [Thread-133265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:54:32.192 [DEBUG] [Thread-133265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] client lang: <none>
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] server lang: <none>
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] kex follows: False
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] Compression: none
2026-02-11T17:54:32.193 [DEBUG] [Thread-133265] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:54:32.251 [DEBUG] [Thread-133265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:54:32.252 [DEBUG] [Thread-133265] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:54:32.252 [DEBUG] [Thread-133265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:54:32.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:54:32.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:54:32.311 [DEBUG] [Thread-133265] [transport.py] [_log()] userauth is OK
2026-02-11T17:54:32.311 [DEBUG] [Thread-133265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:54:32.311 [DEBUG] [Thread-133265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:54:32.311 [DEBUG] [Thread-133265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:54:32.311 [DEBUG] [Thread-133265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:54:32.330 [INFO] [Thread-133265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:54:32.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:54:32.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:54:33.133 [DEBUG] [Thread-133265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:54:33.134 [DEBUG] [Thread-133265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:54:33.183 [DEBUG] [Thread-133265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:54:33.183 [DEBUG] [Thread-133265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:54:33.192 [DEBUG] [Thread-133265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:54:33.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:54:33.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:54: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') -> 00000000
2026-02-11T17:54:33.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:54:33.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:54:33.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:54:33.233 [DEBUG] [Thread-133265] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:54:37.616 [DEBUG] [Thread-133267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:54:52.666 [DEBUG] [Thread-133268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:54:54.470 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:54:54.471 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:55:03.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:55:03.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:55:03.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:55:05.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 54, 42), 11.67, 47.68, 0.0, 28.37, 22.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:55:05.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:54:42
2026-02-11T17:55:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:55:05.887 [DEBUG] [Thread-133269] [transport.py] [_log()] starting thread (client mode): 0xa2db73a0
2026-02-11T17:55:05.888 [DEBUG] [Thread-133269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:55:05.909 [DEBUG] [Thread-133269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:55:05.909 [INFO] [Thread-133269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:55:05.913 [DEBUG] [Thread-133269] [transport.py] [_log()] client lang: <none>
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] server lang: <none>
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] kex follows: False
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] Compression: none
2026-02-11T17:55:05.914 [DEBUG] [Thread-133269] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:55:05.929 [DEBUG] [Thread-133269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:55:05.930 [DEBUG] [Thread-133269] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:55:05.930 [DEBUG] [Thread-133269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:55:05.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:55:05.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:55:05.932 [DEBUG] [Thread-133269] [transport.py] [_log()] userauth is OK
2026-02-11T17:55:05.933 [DEBUG] [Thread-133269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:55:05.933 [DEBUG] [Thread-133269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:55:05.933 [DEBUG] [Thread-133269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:55:05.933 [DEBUG] [Thread-133269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:55:05.950 [INFO] [Thread-133269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:55:05.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:55:06.867 [DEBUG] [Thread-133269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:55:06.868 [DEBUG] [Thread-133269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:55:06.868 [DEBUG] [Thread-133269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:55:06.908 [DEBUG] [Thread-133269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:55:06.909 [DEBUG] [Thread-133269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:55:06.912 [DEBUG] [Thread-133269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:55:06.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:55:06.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:55:06.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:55:06.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:55:06.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:55:06.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:55:06.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:55:06.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:55:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:55:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.662641 -999.00  +22.00  27.61     55  +12.50 1 3 1 1 1   887    0 8.21 -44.45 ----- 24.2 27.6 296.4 38.3 23.6 -8.6 23.5 -7.8 23.1 -8.1 23.5 -8.1
2026-02-11T17:55:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:55:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:55:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.662641
2026-02-11T17:55:06.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:55:06.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:55:06.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:55:06.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:55:06.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:55:06.962 [DEBUG] [Thread-133269] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:55:06.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:54:42', tmtdew=11.67, humidity=47.68, cloud=0.0, wind=28.37, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:54:12.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:55:07.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:55:07.058 [DEBUG] [Thread-133272] [transport.py] [_log()] starting thread (client mode): 0xa2dc1d80
2026-02-11T17:55:07.058 [DEBUG] [Thread-133272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:55:07.072 [DEBUG] [Thread-133272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:55:07.072 [INFO] [Thread-133272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:55:07.080 [DEBUG] [Thread-133272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] client lang: <none>
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] server lang: <none>
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] kex follows: False
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:55:07.081 [DEBUG] [Thread-133272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:55:07.082 [DEBUG] [Thread-133272] [transport.py] [_log()] Compression: none
2026-02-11T17:55:07.082 [DEBUG] [Thread-133272] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:55:07.138 [DEBUG] [Thread-133272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:55:07.138 [DEBUG] [Thread-133272] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:55:07.139 [DEBUG] [Thread-133272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:55:07.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:55:07.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:55:07.194 [DEBUG] [Thread-133272] [transport.py] [_log()] userauth is OK
2026-02-11T17:55:07.195 [DEBUG] [Thread-133272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:55:07.195 [DEBUG] [Thread-133272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:55:07.195 [DEBUG] [Thread-133272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:55:07.195 [DEBUG] [Thread-133272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:55:07.213 [INFO] [Thread-133272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:55:07.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:55:07.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:55:07.706 [DEBUG] [Thread-133274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:55:08.034 [DEBUG] [Thread-133272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:55:08.034 [DEBUG] [Thread-133272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:55:08.082 [DEBUG] [Thread-133272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:55:08.083 [DEBUG] [Thread-133272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:55:08.091 [DEBUG] [Thread-133272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:55:08.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:55:08.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:55:08.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:55:08.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:55:08.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:55:08.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:55:08.126 [DEBUG] [Thread-133272] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:55:22.760 [DEBUG] [Thread-133275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:55:28.809 [DEBUG] [Thread-133276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:55:37.793 [DEBUG] [Thread-133277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:55:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:55:38.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:55:38.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:55:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 55, 18), 11.24, 48.82, 0.0, 31.05, 22.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:55:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:55:18
2026-02-11T17:55:40.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:55:40.620 [DEBUG] [Thread-133278] [transport.py] [_log()] starting thread (client mode): 0xa2db50f0
2026-02-11T17:55:40.620 [DEBUG] [Thread-133278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:55:40.641 [DEBUG] [Thread-133278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:55:40.641 [INFO] [Thread-133278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] client lang: <none>
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] server lang: <none>
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] kex follows: False
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] Compression: none
2026-02-11T17:55:40.644 [DEBUG] [Thread-133278] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:55:40.662 [DEBUG] [Thread-133278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:55:40.662 [DEBUG] [Thread-133278] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:55:40.663 [DEBUG] [Thread-133278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:55:40.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:55:40.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:55:40.665 [DEBUG] [Thread-133278] [transport.py] [_log()] userauth is OK
2026-02-11T17:55:40.665 [DEBUG] [Thread-133278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:55:40.665 [DEBUG] [Thread-133278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:55:40.665 [DEBUG] [Thread-133278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:55:40.665 [DEBUG] [Thread-133278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:55:40.690 [INFO] [Thread-133278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:55:40.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:55:41.341 [DEBUG] [Thread-133278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:55:41.341 [DEBUG] [Thread-133278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:55:41.342 [DEBUG] [Thread-133278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:55:41.382 [DEBUG] [Thread-133278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:55:41.382 [DEBUG] [Thread-133278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:55:41.385 [DEBUG] [Thread-133278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:55:41.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:55:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:55:41.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:55:41.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:55:41.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:55:41.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:55:41.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:55:41.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:55:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:55:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.663335 -999.00  +21.80  29.39     56  +12.70 1 3 1 1 1   887    0 8.27 -46.58 ----- 31.2 29.4 304.2 34.6 23.6 -8.8 23.5 -8.0 23.1 -7.4 23.5 -8.5
2026-02-11T17:55:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:55:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:55:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.663335
2026-02-11T17:55:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:55:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:55:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:55:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:55:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:55:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:55:18', tmtdew=11.24, humidity=48.82, cloud=0.0, wind=31.05, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:55:12.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:55:41.409 [DEBUG] [Thread-133278] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:55:41.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:55:41.506 [DEBUG] [Thread-133281] [transport.py] [_log()] starting thread (client mode): 0xa57c23b0
2026-02-11T17:55:41.506 [DEBUG] [Thread-133281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:55:41.522 [DEBUG] [Thread-133281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:55:41.522 [INFO] [Thread-133281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:55:41.530 [DEBUG] [Thread-133281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] client lang: <none>
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] server lang: <none>
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] kex follows: False
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:55:41.531 [DEBUG] [Thread-133281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:55:41.532 [DEBUG] [Thread-133281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:55:41.532 [DEBUG] [Thread-133281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:55:41.532 [DEBUG] [Thread-133281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:55:41.532 [DEBUG] [Thread-133281] [transport.py] [_log()] Compression: none
2026-02-11T17:55:41.532 [DEBUG] [Thread-133281] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:55:41.589 [DEBUG] [Thread-133281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:55:41.589 [DEBUG] [Thread-133281] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:55:41.590 [DEBUG] [Thread-133281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:55:41.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:55:41.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:55:41.646 [DEBUG] [Thread-133281] [transport.py] [_log()] userauth is OK
2026-02-11T17:55:41.646 [DEBUG] [Thread-133281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:55:41.646 [DEBUG] [Thread-133281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:55:41.646 [DEBUG] [Thread-133281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:55:41.646 [DEBUG] [Thread-133281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:55:41.671 [INFO] [Thread-133281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:55:41.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:55:41.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:55:42.505 [DEBUG] [Thread-133281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:55:42.505 [DEBUG] [Thread-133281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:55:42.553 [DEBUG] [Thread-133281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:55:42.553 [DEBUG] [Thread-133281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:55:42.562 [DEBUG] [Thread-133281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:55:42.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:55:42.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:55:42.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
2026-02-11T17:55:42.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:55:42.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:55:42.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:55:42.596 [DEBUG] [Thread-133281] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:55:52.832 [DEBUG] [Thread-133283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:55:54.613 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:55:54.614 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:56:07.882 [DEBUG] [Thread-133284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:56:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:56:12.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:56:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:56:14.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 55, 53), 10.87, 50.2, 0.0, 26.57, 22.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:56:14.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:55:53
2026-02-11T17:56:15.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:56:15.268 [DEBUG] [Thread-133285] [transport.py] [_log()] starting thread (client mode): 0xa57731c0
2026-02-11T17:56:15.268 [DEBUG] [Thread-133285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:56:15.288 [DEBUG] [Thread-133285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:56:15.288 [INFO] [Thread-133285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:56:15.291 [DEBUG] [Thread-133285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:56:15.291 [DEBUG] [Thread-133285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:56:15.291 [DEBUG] [Thread-133285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:56:15.291 [DEBUG] [Thread-133285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:15.291 [DEBUG] [Thread-133285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:15.291 [DEBUG] [Thread-133285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:15.291 [DEBUG] [Thread-133285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] client lang: <none>
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] server lang: <none>
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] kex follows: False
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] Compression: none
2026-02-11T17:56:15.292 [DEBUG] [Thread-133285] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:56:15.309 [DEBUG] [Thread-133285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:56:15.309 [DEBUG] [Thread-133285] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:56:15.310 [DEBUG] [Thread-133285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:56:15.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:56:15.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:56:15.312 [DEBUG] [Thread-133285] [transport.py] [_log()] userauth is OK
2026-02-11T17:56:15.312 [DEBUG] [Thread-133285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:56:15.312 [DEBUG] [Thread-133285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:56:15.312 [DEBUG] [Thread-133285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:56:15.312 [DEBUG] [Thread-133285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:56:15.331 [INFO] [Thread-133285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:56:15.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:56:16.071 [DEBUG] [Thread-133285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:56:16.071 [DEBUG] [Thread-133285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:56:16.072 [DEBUG] [Thread-133285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:56:16.113 [DEBUG] [Thread-133285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:56:16.113 [DEBUG] [Thread-133285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:56:16.116 [DEBUG] [Thread-133285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:56:16.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:56:16.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:56:16.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:56:16.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:56:16.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:56:16.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:56:16.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:56:16.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:56:16.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:56:16.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.663683 -999.00  +21.80  27.14     56  +12.70 1 3 1 1 1   887    0 8.23 -43.71 ----- 32.8 27.1 293.8 39.7 23.6 -8.8 23.5 -7.7 23.1 -7.1 23.4 -8.1
2026-02-11T17:56:16.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:56:16.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:56:16.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.663683
2026-02-11T17:56:16.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:56:16.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:56:16.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:56:16.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:56:16.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:56:16.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:55:53', tmtdew=10.87, humidity=50.2, cloud=0.0, wind=26.57, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:55:42.211', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:56:16.137 [DEBUG] [Thread-133285] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:56:16.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:56:16.221 [DEBUG] [Thread-133288] [transport.py] [_log()] starting thread (client mode): 0xa5770190
2026-02-11T17:56:16.222 [DEBUG] [Thread-133288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:56:16.241 [DEBUG] [Thread-133288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:56:16.241 [INFO] [Thread-133288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:56:16.248 [DEBUG] [Thread-133288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] client lang: <none>
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] server lang: <none>
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] kex follows: False
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:56:16.249 [DEBUG] [Thread-133288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:56:16.250 [DEBUG] [Thread-133288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:56:16.250 [DEBUG] [Thread-133288] [transport.py] [_log()] Compression: none
2026-02-11T17:56:16.250 [DEBUG] [Thread-133288] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:56:16.308 [DEBUG] [Thread-133288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:56:16.308 [DEBUG] [Thread-133288] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:56:16.309 [DEBUG] [Thread-133288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:56:16.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:56:16.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:56:16.364 [DEBUG] [Thread-133288] [transport.py] [_log()] userauth is OK
2026-02-11T17:56:16.364 [DEBUG] [Thread-133288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:56:16.364 [DEBUG] [Thread-133288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:56:16.364 [DEBUG] [Thread-133288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:56:16.364 [DEBUG] [Thread-133288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:56:16.387 [INFO] [Thread-133288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:56:16.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:56:16.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:56:17.238 [DEBUG] [Thread-133288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:56:17.238 [DEBUG] [Thread-133288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:56:17.286 [DEBUG] [Thread-133288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:56:17.286 [DEBUG] [Thread-133288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:56:17.295 [DEBUG] [Thread-133288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:56:17.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:56:17.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:56:17.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:56:17.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:56:17.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:56:17.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:56:17.332 [DEBUG] [Thread-133288] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:56:22.918 [DEBUG] [Thread-133290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:56:28.861 [DEBUG] [Thread-133291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:56:37.979 [DEBUG] [Thread-133292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:56:47.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:56:47.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:56:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:56:49.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 56, 30), 10.68, 50.78, 0.0, 25.78, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:56:49.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:56:30
2026-02-11T17:56:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:56:50.089 [DEBUG] [Thread-133293] [transport.py] [_log()] starting thread (client mode): 0xa57c0760
2026-02-11T17:56:50.089 [DEBUG] [Thread-133293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:56:50.110 [DEBUG] [Thread-133293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:56:50.110 [INFO] [Thread-133293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:56:50.113 [DEBUG] [Thread-133293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:56:50.113 [DEBUG] [Thread-133293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:56:50.113 [DEBUG] [Thread-133293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:56:50.113 [DEBUG] [Thread-133293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:50.113 [DEBUG] [Thread-133293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] client lang: <none>
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] server lang: <none>
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] kex follows: False
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] Compression: none
2026-02-11T17:56:50.114 [DEBUG] [Thread-133293] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:56:50.132 [DEBUG] [Thread-133293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:56:50.132 [DEBUG] [Thread-133293] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:56:50.133 [DEBUG] [Thread-133293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:56:50.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:56:50.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:56:50.135 [DEBUG] [Thread-133293] [transport.py] [_log()] userauth is OK
2026-02-11T17:56:50.135 [DEBUG] [Thread-133293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:56:50.135 [DEBUG] [Thread-133293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:56:50.135 [DEBUG] [Thread-133293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:56:50.135 [DEBUG] [Thread-133293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:56:50.168 [INFO] [Thread-133293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:56:50.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:56:50.793 [DEBUG] [Thread-133293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:56:50.794 [DEBUG] [Thread-133293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:56:50.794 [DEBUG] [Thread-133293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:56:50.834 [DEBUG] [Thread-133293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:56:50.835 [DEBUG] [Thread-133293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:56:50.838 [DEBUG] [Thread-133293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:56:50.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:56:50.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:56:50.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:56:50.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:56:50.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:56:50.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:56:50.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:56:50.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:56:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:56:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.664030 -999.00  +21.70  26.33     56  +12.60 1 3 1 1 1   887    0 8.52 -46.59 ----- 28.6 26.3 295.8 39.9 23.6 -8.6 23.5 -8.0 23.1 -7.2 23.4 -8.1
2026-02-11T17:56:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:56:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:56:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.664030
2026-02-11T17:56:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:56:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:56:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:56:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:56:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:56:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:56:30', tmtdew=10.68, humidity=50.78, cloud=0.0, wind=25.78, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:56:12.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:56:50.865 [DEBUG] [Thread-133293] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:56:50.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:56:50.962 [DEBUG] [Thread-133296] [transport.py] [_log()] starting thread (client mode): 0xa2db69b0
2026-02-11T17:56:50.962 [DEBUG] [Thread-133296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:56:50.977 [DEBUG] [Thread-133296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:56:50.977 [INFO] [Thread-133296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:56:50.985 [DEBUG] [Thread-133296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:56:50.985 [DEBUG] [Thread-133296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] client lang: <none>
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] server lang: <none>
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] kex follows: False
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] Compression: none
2026-02-11T17:56:50.986 [DEBUG] [Thread-133296] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:56:51.044 [DEBUG] [Thread-133296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:56:51.045 [DEBUG] [Thread-133296] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:56:51.046 [DEBUG] [Thread-133296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:56:51.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:56:51.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:56:51.100 [DEBUG] [Thread-133296] [transport.py] [_log()] userauth is OK
2026-02-11T17:56:51.101 [DEBUG] [Thread-133296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:56:51.101 [DEBUG] [Thread-133296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:56:51.101 [DEBUG] [Thread-133296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:56:51.101 [DEBUG] [Thread-133296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:56:51.126 [INFO] [Thread-133296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:56:51.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:56:51.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:56:51.947 [DEBUG] [Thread-133296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:56:51.948 [DEBUG] [Thread-133296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:56:51.996 [DEBUG] [Thread-133296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:56:51.996 [DEBUG] [Thread-133296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:56:52.005 [DEBUG] [Thread-133296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:56:52.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:56:52.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:56:52.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:56:52.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:56:52.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:56:52.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:56:52.042 [DEBUG] [Thread-133296] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:56:53.015 [DEBUG] [Thread-133298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:56:54.755 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:56:54.756 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:08.071 [DEBUG] [Thread-133299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:57:22.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:57:22.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:57:23.108 [DEBUG] [Thread-133300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 57, 5), 10.68, 50.77, 0.0, 26.78, 22.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:57:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:57:05
2026-02-11T17:57:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:57:24.472 [DEBUG] [Thread-133301] [transport.py] [_log()] starting thread (client mode): 0xa5758550
2026-02-11T17:57:24.473 [DEBUG] [Thread-133301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:57:24.493 [DEBUG] [Thread-133301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:57:24.493 [INFO] [Thread-133301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:57:24.494 [DEBUG] [Thread-133301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:57:24.494 [DEBUG] [Thread-133301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] client lang: <none>
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] server lang: <none>
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] kex follows: False
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] Compression: none
2026-02-11T17:57:24.495 [DEBUG] [Thread-133301] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:57:24.512 [DEBUG] [Thread-133301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:57:24.513 [DEBUG] [Thread-133301] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:57:24.514 [DEBUG] [Thread-133301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:57:24.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:57:24.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:57:24.516 [DEBUG] [Thread-133301] [transport.py] [_log()] userauth is OK
2026-02-11T17:57:24.516 [DEBUG] [Thread-133301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:57:24.516 [DEBUG] [Thread-133301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:57:24.516 [DEBUG] [Thread-133301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:57:24.516 [DEBUG] [Thread-133301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:57:24.534 [INFO] [Thread-133301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:57:24.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:57:25.084 [DEBUG] [Thread-133301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:57:25.085 [DEBUG] [Thread-133301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:57:25.085 [DEBUG] [Thread-133301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:57:25.125 [DEBUG] [Thread-133301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:57:25.125 [DEBUG] [Thread-133301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:57:25.128 [DEBUG] [Thread-133301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:57:25.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:57:25.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:57:25.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:57:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:57:25.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:57:25.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:57:25.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:57:25.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:57:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:57:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.664377 -999.00  +21.60  27.94     56  +12.60 1 3 1 1 1   887    0 7.96 -50.57 ----- 22.1 27.9 293.6 36.1 23.5 -8.1 23.5 -7.7 23.0 -7.1 23.4 -8.4
2026-02-11T17:57:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:57:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:57:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.664377
2026-02-11T17:57:25.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:57:25.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:57:25.154 [DEBUG] [Thread-133301] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:57:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:57:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:57:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:57:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:57:05', tmtdew=10.68, humidity=50.77, cloud=0.0, wind=26.78, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:56:42.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:57:25.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:57:25.250 [DEBUG] [Thread-133304] [transport.py] [_log()] starting thread (client mode): 0xa57c1ba0
2026-02-11T17:57:25.250 [DEBUG] [Thread-133304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:57:25.265 [DEBUG] [Thread-133304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:57:25.265 [INFO] [Thread-133304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] client lang: <none>
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] server lang: <none>
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] kex follows: False
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:57:25.274 [DEBUG] [Thread-133304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:57:25.275 [DEBUG] [Thread-133304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:57:25.275 [DEBUG] [Thread-133304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:57:25.275 [DEBUG] [Thread-133304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:57:25.275 [DEBUG] [Thread-133304] [transport.py] [_log()] Compression: none
2026-02-11T17:57:25.275 [DEBUG] [Thread-133304] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:57:25.335 [DEBUG] [Thread-133304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:57:25.336 [DEBUG] [Thread-133304] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:57:25.336 [DEBUG] [Thread-133304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:57:25.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:57:25.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:57:25.392 [DEBUG] [Thread-133304] [transport.py] [_log()] userauth is OK
2026-02-11T17:57:25.392 [DEBUG] [Thread-133304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:57:25.392 [DEBUG] [Thread-133304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:57:25.392 [DEBUG] [Thread-133304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:57:25.392 [DEBUG] [Thread-133304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:57:25.417 [INFO] [Thread-133304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:57:25.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:57:25.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:57:26.260 [DEBUG] [Thread-133304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:57:26.261 [DEBUG] [Thread-133304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:57:26.309 [DEBUG] [Thread-133304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:57:26.309 [DEBUG] [Thread-133304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:57:26.318 [DEBUG] [Thread-133304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:57:26.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:57:26.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')
2026-02-11T17:57:26.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:57:26.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:57:26.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:57:26.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:57:26.356 [DEBUG] [Thread-133304] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:57:28.923 [DEBUG] [Thread-133306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:38.142 [DEBUG] [Thread-133307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:53.187 [DEBUG] [Thread-133308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:54.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:54.899 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:57:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:57:56.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:57:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:57:58.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 57, 40), 11.1, 49.43, 0.0, 34.65, 22.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:57:58.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:57:40
2026-02-11T17:57:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:57:58.731 [DEBUG] [Thread-133309] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-11T17:57:58.731 [DEBUG] [Thread-133309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:57:58.751 [DEBUG] [Thread-133309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:57:58.752 [INFO] [Thread-133309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:57:58.754 [DEBUG] [Thread-133309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] client lang: <none>
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] server lang: <none>
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] kex follows: False
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] Compression: none
2026-02-11T17:57:58.755 [DEBUG] [Thread-133309] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:57:58.773 [DEBUG] [Thread-133309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:57:58.774 [DEBUG] [Thread-133309] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:57:58.775 [DEBUG] [Thread-133309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:57:58.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:57:58.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:57:58.777 [DEBUG] [Thread-133309] [transport.py] [_log()] userauth is OK
2026-02-11T17:57:58.777 [DEBUG] [Thread-133309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:57:58.777 [DEBUG] [Thread-133309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:57:58.777 [DEBUG] [Thread-133309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:57:58.777 [DEBUG] [Thread-133309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:57:58.797 [INFO] [Thread-133309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:57:58.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:57:59.446 [DEBUG] [Thread-133309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:57:59.446 [DEBUG] [Thread-133309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:57:59.446 [DEBUG] [Thread-133309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:57:59.487 [DEBUG] [Thread-133309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:57:59.488 [DEBUG] [Thread-133309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:57:59.491 [DEBUG] [Thread-133309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:57:59.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:57:59.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:57:59.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:57:59.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:57:59.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:57:59.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:57:59.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:57:59.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:57:59.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:57:59.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.664724 -999.00  +21.80  28.46     56  +12.70 1 3 1 1 1   887    0 7.84 -58.38 ----- 30.6 28.5 295.6 30.7 23.6 -8.4 23.5 -7.5 23.0 -7.7 23.3 -7.6
2026-02-11T17:57:59.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:57:59.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:57:59.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.664724
2026-02-11T17:57:59.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:57:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:57:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:57:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:57:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:57:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:57:40', tmtdew=11.1, humidity=49.43, cloud=0.0, wind=34.65, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:57:12.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:57:59.517 [DEBUG] [Thread-133309] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:57:59.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:57:59.624 [DEBUG] [Thread-133312] [transport.py] [_log()] starting thread (client mode): 0xa575a6e0
2026-02-11T17:57:59.625 [DEBUG] [Thread-133312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:57:59.639 [DEBUG] [Thread-133312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:57:59.639 [INFO] [Thread-133312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:57:59.646 [DEBUG] [Thread-133312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] client lang: <none>
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] server lang: <none>
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] kex follows: False
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:57:59.647 [DEBUG] [Thread-133312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:57:59.648 [DEBUG] [Thread-133312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:57:59.648 [DEBUG] [Thread-133312] [transport.py] [_log()] Compression: none
2026-02-11T17:57:59.648 [DEBUG] [Thread-133312] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:57:59.705 [DEBUG] [Thread-133312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:57:59.705 [DEBUG] [Thread-133312] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:57:59.705 [DEBUG] [Thread-133312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:57:59.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:57:59.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:57:59.763 [DEBUG] [Thread-133312] [transport.py] [_log()] userauth is OK
2026-02-11T17:57:59.763 [DEBUG] [Thread-133312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:57:59.763 [DEBUG] [Thread-133312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:57:59.764 [DEBUG] [Thread-133312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:57:59.764 [DEBUG] [Thread-133312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:57:59.787 [INFO] [Thread-133312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:57:59.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:57:59.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:58:00.615 [DEBUG] [Thread-133312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:58:00.615 [DEBUG] [Thread-133312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:58:00.666 [DEBUG] [Thread-133312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:58:00.666 [DEBUG] [Thread-133312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:58:00.675 [DEBUG] [Thread-133312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:58:00.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:58: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')
2026-02-11T17:58:00.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:58:00.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:58:00.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:58:00.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:58:00.713 [DEBUG] [Thread-133312] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:58:08.225 [DEBUG] [Thread-133314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:58:23.276 [DEBUG] [Thread-133315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:58:28.956 [DEBUG] [Thread-133316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:58:30.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:58:30.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:58:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:58:32.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 58, 17), 10.8, 50.38, 0.0, 38.55, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:58:32.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:58:17
2026-02-11T17:58:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:58:33.355 [DEBUG] [Thread-133317] [transport.py] [_log()] starting thread (client mode): 0xa2db7130
2026-02-11T17:58:33.355 [DEBUG] [Thread-133317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:58:33.368 [DEBUG] [Thread-133317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:58:33.369 [INFO] [Thread-133317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:58:33.369 [DEBUG] [Thread-133317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] client lang: <none>
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] server lang: <none>
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] kex follows: False
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] Compression: none
2026-02-11T17:58:33.370 [DEBUG] [Thread-133317] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:58:33.378 [DEBUG] [Thread-133317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:58:33.378 [DEBUG] [Thread-133317] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:58:33.379 [DEBUG] [Thread-133317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:58:33.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:58:33.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:58:33.379 [DEBUG] [Thread-133317] [transport.py] [_log()] userauth is OK
2026-02-11T17:58:33.380 [DEBUG] [Thread-133317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:58:33.380 [DEBUG] [Thread-133317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:58:33.380 [DEBUG] [Thread-133317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:58:33.380 [DEBUG] [Thread-133317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:58:33.393 [INFO] [Thread-133317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:58:33.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:58:33.938 [DEBUG] [Thread-133317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:58:33.938 [DEBUG] [Thread-133317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:58:33.938 [DEBUG] [Thread-133317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:58:33.979 [DEBUG] [Thread-133317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:58:33.979 [DEBUG] [Thread-133317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:58:33.983 [DEBUG] [Thread-133317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:58:33.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:58:33.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:58:33.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:58:34.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:58:34.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:58:34.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:58:34.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:58:34.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:58:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:58:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.665419 -999.00  +21.50  44.35     57  +12.70 1 3 2 1 1   887    0 7.70 -58.80 ----- 40.9 44.4 298.8 49.3 23.4 -8.3 23.4 -7.5 23.0 -7.5 23.4 -7.2
2026-02-11T17:58:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:58:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:58:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.665419
2026-02-11T17:58:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:58:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:58:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:58:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:58:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:58:34.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:58:17', tmtdew=10.8, humidity=50.38, cloud=0.0, wind=38.55, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:58:12.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:58:34.010 [DEBUG] [Thread-133317] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:58:34.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:58:34.112 [DEBUG] [Thread-133320] [transport.py] [_log()] starting thread (client mode): 0x9eb07b80
2026-02-11T17:58:34.112 [DEBUG] [Thread-133320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:58:34.128 [DEBUG] [Thread-133320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:58:34.128 [INFO] [Thread-133320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:58:34.139 [DEBUG] [Thread-133320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:58:34.139 [DEBUG] [Thread-133320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] client lang: <none>
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] server lang: <none>
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] kex follows: False
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:58:34.140 [DEBUG] [Thread-133320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:58:34.141 [DEBUG] [Thread-133320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:58:34.141 [DEBUG] [Thread-133320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:58:34.141 [DEBUG] [Thread-133320] [transport.py] [_log()] Compression: none
2026-02-11T17:58:34.141 [DEBUG] [Thread-133320] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:58:34.201 [DEBUG] [Thread-133320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:58:34.201 [DEBUG] [Thread-133320] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:58:34.202 [DEBUG] [Thread-133320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:58:34.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:58:34.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:58:34.262 [DEBUG] [Thread-133320] [transport.py] [_log()] userauth is OK
2026-02-11T17:58:34.262 [DEBUG] [Thread-133320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:58:34.263 [DEBUG] [Thread-133320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:58:34.263 [DEBUG] [Thread-133320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:58:34.263 [DEBUG] [Thread-133320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:58:34.284 [INFO] [Thread-133320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:58:34.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:58:34.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:58:35.081 [DEBUG] [Thread-133320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:58:35.082 [DEBUG] [Thread-133320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:58:35.129 [DEBUG] [Thread-133320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:58:35.130 [DEBUG] [Thread-133320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:58:35.140 [DEBUG] [Thread-133320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:58:35.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:58:35.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:58:35.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:58:35.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:58:35.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:58:35.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:58:35.183 [DEBUG] [Thread-133320] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:58:38.312 [DEBUG] [Thread-133322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:58:53.372 [DEBUG] [Thread-133323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:58:55.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:58:55.040 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:59:05.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:59:05.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:59:05.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:59:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 58, 52), 10.26, 51.83, 0.0, 38.85, 21.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:59:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:58:52
2026-02-11T17:59:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:59:07.576 [DEBUG] [Thread-133324] [transport.py] [_log()] starting thread (client mode): 0xa5740a30
2026-02-11T17:59:07.576 [DEBUG] [Thread-133324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:59:07.588 [DEBUG] [Thread-133324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:59:07.588 [INFO] [Thread-133324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:59:07.589 [DEBUG] [Thread-133324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:59:07.589 [DEBUG] [Thread-133324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:59:07.589 [DEBUG] [Thread-133324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:59:07.589 [DEBUG] [Thread-133324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] client lang: <none>
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] server lang: <none>
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] kex follows: False
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] Compression: none
2026-02-11T17:59:07.590 [DEBUG] [Thread-133324] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:59:07.601 [DEBUG] [Thread-133324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:59:07.601 [DEBUG] [Thread-133324] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:59:07.601 [DEBUG] [Thread-133324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:59:07.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:59:07.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:59:07.602 [DEBUG] [Thread-133324] [transport.py] [_log()] userauth is OK
2026-02-11T17:59:07.602 [DEBUG] [Thread-133324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:59:07.603 [DEBUG] [Thread-133324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:59:07.603 [DEBUG] [Thread-133324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:59:07.603 [DEBUG] [Thread-133324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:59:07.616 [INFO] [Thread-133324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:59:07.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:59:08.205 [DEBUG] [Thread-133324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:59:08.205 [DEBUG] [Thread-133324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:59:08.205 [DEBUG] [Thread-133324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:59:08.246 [DEBUG] [Thread-133324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:59:08.246 [DEBUG] [Thread-133324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:59:08.248 [DEBUG] [Thread-133324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:59:08.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:59:08.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:59:08.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:59:08.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:59:08.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:59:08.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:59:08.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:59:08.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:59:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:59:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.665766 -999.00  +21.40  32.20     58  +13.00 1 3 2 1 1   887    0 7.64 -61.46 ----- 28.6 32.2 295.6 44.4 23.3 -8.3 23.4 -7.6 22.9 -7.5 23.2 -7.5
2026-02-11T17:59:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:59:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:59:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.665766
2026-02-11T17:59:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:59:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:59:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:59:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:59:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:59:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:58:52', tmtdew=10.26, humidity=51.83, cloud=0.0, wind=38.85, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:58:42.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:59:08.272 [DEBUG] [Thread-133324] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:59:08.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:59:08.367 [DEBUG] [Thread-133327] [transport.py] [_log()] starting thread (client mode): 0x9eb04190
2026-02-11T17:59:08.367 [DEBUG] [Thread-133327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:59:08.382 [DEBUG] [Thread-133327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:59:08.382 [INFO] [Thread-133327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:59:08.389 [DEBUG] [Thread-133327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:59:08.390 [DEBUG] [Thread-133327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:59:08.391 [DEBUG] [Thread-133327] [transport.py] [_log()] client lang: <none>
2026-02-11T17:59:08.391 [DEBUG] [Thread-133327] [transport.py] [_log()] server lang: <none>
2026-02-11T17:59:08.391 [DEBUG] [Thread-133327] [transport.py] [_log()] kex follows: False
2026-02-11T17:59:08.391 [DEBUG] [Thread-133327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:59:08.391 [DEBUG] [Thread-133327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:59:08.391 [DEBUG] [Thread-133327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:59:08.391 [DEBUG] [Thread-133327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:59:08.392 [DEBUG] [Thread-133327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:59:08.392 [DEBUG] [Thread-133327] [transport.py] [_log()] Compression: none
2026-02-11T17:59:08.392 [DEBUG] [Thread-133327] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:59:08.411 [DEBUG] [Thread-133329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:59:08.450 [DEBUG] [Thread-133327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:59:08.450 [DEBUG] [Thread-133327] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:59:08.451 [DEBUG] [Thread-133327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:59:08.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:59:08.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:59:08.506 [DEBUG] [Thread-133327] [transport.py] [_log()] userauth is OK
2026-02-11T17:59:08.507 [DEBUG] [Thread-133327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:59:08.507 [DEBUG] [Thread-133327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:59:08.507 [DEBUG] [Thread-133327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:59:08.507 [DEBUG] [Thread-133327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:59:08.521 [INFO] [Thread-133327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:59:08.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:59:08.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:59:09.363 [DEBUG] [Thread-133327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:59:09.364 [DEBUG] [Thread-133327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:59:09.411 [DEBUG] [Thread-133327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:59:09.411 [DEBUG] [Thread-133327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:59:09.420 [DEBUG] [Thread-133327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:59:09.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:59: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')
2026-02-11T17:59:09.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T17:59:09.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:59:09.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:59:09.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:59:09.457 [DEBUG] [Thread-133327] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:59:23.464 [DEBUG] [Thread-133330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:59:29.009 [DEBUG] [Thread-133331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:59:38.503 [DEBUG] [Thread-133332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:59:39.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T17:59:39.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T17:59:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T17:59:41.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 17, 59, 28), 9.89, 53.07, 0.0, 43.42, 21.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T17:59:41.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 17:59:28
2026-02-11T17:59:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T17:59:41.894 [DEBUG] [Thread-133333] [transport.py] [_log()] starting thread (client mode): 0xa57e3190
2026-02-11T17:59:41.895 [DEBUG] [Thread-133333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:59:41.913 [DEBUG] [Thread-133333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T17:59:41.914 [INFO] [Thread-133333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T17:59:41.916 [DEBUG] [Thread-133333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] client lang: <none>
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] server lang: <none>
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] kex follows: False
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] Compression: none
2026-02-11T17:59:41.917 [DEBUG] [Thread-133333] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:59:41.933 [DEBUG] [Thread-133333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:59:41.933 [DEBUG] [Thread-133333] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:59:41.934 [DEBUG] [Thread-133333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T17:59:41.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T17:59:41.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:59:41.934 [DEBUG] [Thread-133333] [transport.py] [_log()] userauth is OK
2026-02-11T17:59:41.935 [DEBUG] [Thread-133333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:59:41.935 [DEBUG] [Thread-133333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:59:41.935 [DEBUG] [Thread-133333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T17:59:41.935 [DEBUG] [Thread-133333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:59:41.960 [INFO] [Thread-133333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:59:41.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:59:42.589 [DEBUG] [Thread-133333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:59:42.589 [DEBUG] [Thread-133333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:59:42.590 [DEBUG] [Thread-133333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T17:59:42.630 [DEBUG] [Thread-133333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:59:42.630 [DEBUG] [Thread-133333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:59:42.634 [DEBUG] [Thread-133333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:59:42.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:59:42.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T17:59:42.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T17:59:42.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T17:59:42.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:59:42.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T17:59:42.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:59:42.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:59:42.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T17:59:42.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.666113 -999.00  +21.30  35.80     59  +13.10 1 3 2 1 1   887    0 7.31 -60.50 ----- 28.0 35.8 292.6 44.0 23.4 -8.0 23.2 -7.5 22.8 -7.1 23.2 -7.2
2026-02-11T17:59:42.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T17:59:42.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T17:59:42.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.666113
2026-02-11T17:59:42.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T17:59:42.662 [DEBUG] [Thread-133333] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:59:42.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T17:59:42.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T17:59:42.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T17:59:42.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T17:59:42.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T17:59:28', tmtdew=9.89, humidity=53.07, cloud=0.0, wind=43.42, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:59:12.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T17:59:42.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T17:59:42.759 [DEBUG] [Thread-133336] [transport.py] [_log()] starting thread (client mode): 0xa57e1b10
2026-02-11T17:59:42.759 [DEBUG] [Thread-133336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T17:59:42.773 [DEBUG] [Thread-133336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T17:59:42.774 [INFO] [Thread-133336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T17:59:42.781 [DEBUG] [Thread-133336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T17:59:42.782 [DEBUG] [Thread-133336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T17:59:42.782 [DEBUG] [Thread-133336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T17:59:42.782 [DEBUG] [Thread-133336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:42.782 [DEBUG] [Thread-133336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T17:59:42.782 [DEBUG] [Thread-133336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:42.782 [DEBUG] [Thread-133336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T17:59:42.782 [DEBUG] [Thread-133336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] client lang: <none>
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] server lang: <none>
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] kex follows: False
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T17:59:42.783 [DEBUG] [Thread-133336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T17:59:42.784 [DEBUG] [Thread-133336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T17:59:42.784 [DEBUG] [Thread-133336] [transport.py] [_log()] Compression: none
2026-02-11T17:59:42.784 [DEBUG] [Thread-133336] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T17:59:42.842 [DEBUG] [Thread-133336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T17:59:42.843 [DEBUG] [Thread-133336] [transport.py] [_log()] Switch to new keys ...
2026-02-11T17:59:42.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T17:59:42.844 [DEBUG] [Thread-133336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T17:59:42.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T17:59:42.900 [DEBUG] [Thread-133336] [transport.py] [_log()] userauth is OK
2026-02-11T17:59:42.900 [DEBUG] [Thread-133336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T17:59:42.901 [DEBUG] [Thread-133336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T17:59:42.901 [DEBUG] [Thread-133336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T17:59:42.901 [DEBUG] [Thread-133336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T17:59:42.920 [INFO] [Thread-133336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T17:59:42.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T17:59:42.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T17:59:43.753 [DEBUG] [Thread-133336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T17:59:43.753 [DEBUG] [Thread-133336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T17:59:43.802 [DEBUG] [Thread-133336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T17:59:43.803 [DEBUG] [Thread-133336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T17:59:43.819 [DEBUG] [Thread-133336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T17:59:43.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T17:59:43.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T17:59: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') -> 00000000
2026-02-11T17:59:43.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T17:59:43.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T17:59:43.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T17:59:43.858 [DEBUG] [Thread-133336] [transport.py] [_log()] EOF in transport thread
2026-02-11T17:59:53.537 [DEBUG] [Thread-133338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:59:55.181 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T17:59:55.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:00:08.590 [DEBUG] [Thread-133339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:00:13.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:00:13.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:00:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:00:15.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 0, 5), 9.56, 54.24, 0.0, 42.17, 21.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:00:15.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:00:05
2026-02-11T18:00:16.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:00:16.347 [DEBUG] [Thread-133340] [transport.py] [_log()] starting thread (client mode): 0xa57e0c40
2026-02-11T18:00:16.347 [DEBUG] [Thread-133340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:00:16.362 [DEBUG] [Thread-133340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:00:16.362 [INFO] [Thread-133340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:00:16.364 [DEBUG] [Thread-133340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:00:16.364 [DEBUG] [Thread-133340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:00:16.364 [DEBUG] [Thread-133340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:00:16.364 [DEBUG] [Thread-133340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:16.364 [DEBUG] [Thread-133340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:16.364 [DEBUG] [Thread-133340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:16.364 [DEBUG] [Thread-133340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] client lang: <none>
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] server lang: <none>
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] kex follows: False
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] Compression: none
2026-02-11T18:00:16.365 [DEBUG] [Thread-133340] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:00:16.380 [DEBUG] [Thread-133340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:00:16.381 [DEBUG] [Thread-133340] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:00:16.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:00:16.382 [DEBUG] [Thread-133340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:00:16.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:00:16.384 [DEBUG] [Thread-133340] [transport.py] [_log()] userauth is OK
2026-02-11T18:00:16.384 [DEBUG] [Thread-133340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:00:16.384 [DEBUG] [Thread-133340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:00:16.385 [DEBUG] [Thread-133340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:00:16.385 [DEBUG] [Thread-133340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:00:16.411 [INFO] [Thread-133340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:00:16.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:00:17.035 [DEBUG] [Thread-133340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:00:17.035 [DEBUG] [Thread-133340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:00:17.035 [DEBUG] [Thread-133340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:00:17.076 [DEBUG] [Thread-133340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:00:17.077 [DEBUG] [Thread-133340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:00:17.080 [DEBUG] [Thread-133340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:00:17.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:00:17.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:00:17.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:00:17.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:00:17.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:00:17.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:00:17.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:00:17.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:00:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:00:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.666460 -999.00  +21.30  32.34     60  +13.40 1 3 2 1 1   887    0 7.20 -67.46 ----- 39.7 32.3 297.6 41.5 23.3 -8.8 23.2 -8.6 22.7 -10.3 23.1 -7.3
2026-02-11T18:00:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:00:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:00:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.666460
2026-02-11T18:00:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:00:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:00:17.108 [DEBUG] [Thread-133340] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:00:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:00:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:00:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:00:17.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:00:05', tmtdew=9.56, humidity=54.24, cloud=0.0, wind=42.17, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T15:59:42.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:00:17.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:00:17.198 [DEBUG] [Thread-133343] [transport.py] [_log()] starting thread (client mode): 0xa2dc29e0
2026-02-11T18:00:17.198 [DEBUG] [Thread-133343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:00:17.219 [DEBUG] [Thread-133343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:00:17.220 [INFO] [Thread-133343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:00:17.231 [DEBUG] [Thread-133343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] client lang: <none>
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] server lang: <none>
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] kex follows: False
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] Compression: none
2026-02-11T18:00:17.232 [DEBUG] [Thread-133343] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:00:17.286 [DEBUG] [Thread-133343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:00:17.287 [DEBUG] [Thread-133343] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:00:17.287 [DEBUG] [Thread-133343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:00:17.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:00:17.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:00:17.344 [DEBUG] [Thread-133343] [transport.py] [_log()] userauth is OK
2026-02-11T18:00:17.345 [DEBUG] [Thread-133343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:00:17.345 [DEBUG] [Thread-133343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:00:17.345 [DEBUG] [Thread-133343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:00:17.345 [DEBUG] [Thread-133343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:00:17.364 [INFO] [Thread-133343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:00:17.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:00:17.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:00:18.196 [DEBUG] [Thread-133343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:00:18.196 [DEBUG] [Thread-133343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:00:18.244 [DEBUG] [Thread-133343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:00:18.244 [DEBUG] [Thread-133343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:00:18.253 [DEBUG] [Thread-133343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:00:18.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:00:18.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:00:18.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
2026-02-11T18:00:18.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:00:18.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:00:18.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:00:18.290 [DEBUG] [Thread-133343] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:00:23.628 [DEBUG] [Thread-133345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:00:29.053 [DEBUG] [Thread-133346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:00:38.683 [DEBUG] [Thread-133347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:00:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:00:48.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:00:48.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:00:50.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 0, 41), 8.86, 57.02, 0.0, 44.35, 21.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:00:50.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:00:41
2026-02-11T18:00:51.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:00:51.226 [DEBUG] [Thread-133348] [transport.py] [_log()] starting thread (client mode): 0x9eb04d30
2026-02-11T18:00:51.226 [DEBUG] [Thread-133348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:00:51.246 [DEBUG] [Thread-133348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:00:51.246 [INFO] [Thread-133348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:00:51.249 [DEBUG] [Thread-133348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] client lang: <none>
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] server lang: <none>
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] kex follows: False
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] Compression: none
2026-02-11T18:00:51.250 [DEBUG] [Thread-133348] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:00:51.269 [DEBUG] [Thread-133348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:00:51.270 [DEBUG] [Thread-133348] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:00:51.271 [DEBUG] [Thread-133348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:00:51.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:00:51.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:00:51.273 [DEBUG] [Thread-133348] [transport.py] [_log()] userauth is OK
2026-02-11T18:00:51.273 [DEBUG] [Thread-133348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:00:51.273 [DEBUG] [Thread-133348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:00:51.273 [DEBUG] [Thread-133348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:00:51.273 [DEBUG] [Thread-133348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:00:51.297 [INFO] [Thread-133348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:00:51.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:00:51.958 [DEBUG] [Thread-133348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:00:51.958 [DEBUG] [Thread-133348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:00:51.958 [DEBUG] [Thread-133348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:00:51.999 [DEBUG] [Thread-133348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:00:52.000 [DEBUG] [Thread-133348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:00:52.003 [DEBUG] [Thread-133348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:00:52.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:00:52.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:00:52.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:00:52.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:00:52.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:00:52.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:00:52.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:00:52.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:00:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:00:52.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.667155 -999.00  +20.60  39.23     65  +13.90 1 3 2 1 1   887    0 6.93 -76.93 ----- 36.8 39.2 292.8 52.1 23.1 -8.9 22.9 -8.2 22.1 -7.5 22.6 -7.6
2026-02-11T18:00:52.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:00:52.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:00:52.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.667155
2026-02-11T18:00:52.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:00:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:00:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:00:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:00:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:00:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:00:41', tmtdew=8.86, humidity=57.02, cloud=0.0, wind=44.35, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:00:42.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:00:52.030 [DEBUG] [Thread-133348] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:00:52.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:00:52.129 [DEBUG] [Thread-133351] [transport.py] [_log()] starting thread (client mode): 0x9eb05240
2026-02-11T18:00:52.129 [DEBUG] [Thread-133351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:00:52.144 [DEBUG] [Thread-133351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:00:52.144 [INFO] [Thread-133351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:00:52.151 [DEBUG] [Thread-133351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:00:52.152 [DEBUG] [Thread-133351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:00:52.152 [DEBUG] [Thread-133351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:00:52.152 [DEBUG] [Thread-133351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] client lang: <none>
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] server lang: <none>
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] kex follows: False
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:00:52.153 [DEBUG] [Thread-133351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:00:52.154 [DEBUG] [Thread-133351] [transport.py] [_log()] Compression: none
2026-02-11T18:00:52.154 [DEBUG] [Thread-133351] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:00:52.212 [DEBUG] [Thread-133351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:00:52.213 [DEBUG] [Thread-133351] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:00:52.213 [DEBUG] [Thread-133351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:00:52.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:00:52.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:00:52.268 [DEBUG] [Thread-133351] [transport.py] [_log()] userauth is OK
2026-02-11T18:00:52.268 [DEBUG] [Thread-133351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:00:52.269 [DEBUG] [Thread-133351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:00:52.269 [DEBUG] [Thread-133351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:00:52.269 [DEBUG] [Thread-133351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:00:52.294 [INFO] [Thread-133351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:00:52.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:00:52.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:00:53.125 [DEBUG] [Thread-133351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:00:53.129 [DEBUG] [Thread-133351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:00:53.173 [DEBUG] [Thread-133351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:00:53.173 [DEBUG] [Thread-133351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:00:53.182 [DEBUG] [Thread-133351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:00:53.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:00:53.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')
2026-02-11T18:00:53.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:00:53.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:00:53.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:00:53.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:00:53.215 [DEBUG] [Thread-133351] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:00:53.722 [DEBUG] [Thread-133353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:00:55.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:00:55.334 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:08.779 [DEBUG] [Thread-133354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:23.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:01:23.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:01:23.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:01:23.818 [DEBUG] [Thread-133355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 1, 16), 8.22, 59.29, 0.0, 40.34, 20.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:01:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:01:16
2026-02-11T18:01:25.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:01:25.681 [DEBUG] [Thread-133356] [transport.py] [_log()] starting thread (client mode): 0x9eb04f10
2026-02-11T18:01:25.681 [DEBUG] [Thread-133356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:01:25.702 [DEBUG] [Thread-133356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:01:25.702 [INFO] [Thread-133356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] client lang: <none>
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] server lang: <none>
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] kex follows: False
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] Compression: none
2026-02-11T18:01:25.706 [DEBUG] [Thread-133356] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:01:25.724 [DEBUG] [Thread-133356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:01:25.724 [DEBUG] [Thread-133356] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:01:25.725 [DEBUG] [Thread-133356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:01:25.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:01:25.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:01:25.727 [DEBUG] [Thread-133356] [transport.py] [_log()] userauth is OK
2026-02-11T18:01:25.727 [DEBUG] [Thread-133356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:01:25.727 [DEBUG] [Thread-133356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:01:25.727 [DEBUG] [Thread-133356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:01:25.727 [DEBUG] [Thread-133356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:01:25.752 [INFO] [Thread-133356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:01:25.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:01:26.391 [DEBUG] [Thread-133356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:01:26.392 [DEBUG] [Thread-133356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:01:26.392 [DEBUG] [Thread-133356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:01:26.432 [DEBUG] [Thread-133356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:01:26.432 [DEBUG] [Thread-133356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:01:26.436 [DEBUG] [Thread-133356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:01:26.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:01:26.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:01:26.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:01:26.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:01:26.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:01:26.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:01:26.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:01:26.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:01:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:01:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.667502 -999.00  +20.70  35.45     65  +13.90 1 3 2 1 1   887    0 6.42 -92.51 ----- 40.1 35.5 295.4 38.6 23.0 -8.4 22.8 -7.9 22.1 -8.9 22.4 -7.2
2026-02-11T18:01:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:01:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:01:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.667502
2026-02-11T18:01:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:01:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:01:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:01:26.461 [DEBUG] [Thread-133356] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:01:26.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:01:26.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:01:26.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:01:16', tmtdew=8.22, humidity=59.29, cloud=0.0, wind=40.34, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:01:12.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:01:26.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:01:26.556 [DEBUG] [Thread-133359] [transport.py] [_log()] starting thread (client mode): 0xa57e0f40
2026-02-11T18:01:26.556 [DEBUG] [Thread-133359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:01:26.573 [DEBUG] [Thread-133359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:01:26.573 [INFO] [Thread-133359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:01:26.580 [DEBUG] [Thread-133359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] client lang: <none>
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] server lang: <none>
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] kex follows: False
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] Compression: none
2026-02-11T18:01:26.581 [DEBUG] [Thread-133359] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:01:26.639 [DEBUG] [Thread-133359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:01:26.639 [DEBUG] [Thread-133359] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:01:26.640 [DEBUG] [Thread-133359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:01:26.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:01:26.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:01:26.695 [DEBUG] [Thread-133359] [transport.py] [_log()] userauth is OK
2026-02-11T18:01:26.696 [DEBUG] [Thread-133359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:01:26.696 [DEBUG] [Thread-133359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:01:26.696 [DEBUG] [Thread-133359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:01:26.696 [DEBUG] [Thread-133359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:01:26.715 [INFO] [Thread-133359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:01:26.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:01:26.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:01:27.584 [DEBUG] [Thread-133359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:01:27.585 [DEBUG] [Thread-133359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:01:27.636 [DEBUG] [Thread-133359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:01:27.636 [DEBUG] [Thread-133359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:01:27.648 [DEBUG] [Thread-133359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:01:27.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:01:27.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:01:27.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:01:27.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:01:27.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:01:27.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:01:27.689 [DEBUG] [Thread-133359] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:01:29.090 [DEBUG] [Thread-133361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:38.855 [DEBUG] [Thread-133362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:53.906 [DEBUG] [Thread-133363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:55.475 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:55.476 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:01:57.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:01:57.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:01:57.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:01:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 1, 16), 8.22, 59.29, 0.0, 40.34, 20.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:01:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:01:16
2026-02-11T18:01:59.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:02:00.116 [DEBUG] [Thread-133364] [transport.py] [_log()] starting thread (client mode): 0xa57e2e60
2026-02-11T18:02:00.117 [DEBUG] [Thread-133364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:02:00.136 [DEBUG] [Thread-133364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:02:00.136 [INFO] [Thread-133364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:02:00.139 [DEBUG] [Thread-133364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:02:00.139 [DEBUG] [Thread-133364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] client lang: <none>
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] server lang: <none>
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] kex follows: False
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:02:00.140 [DEBUG] [Thread-133364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:02:00.141 [DEBUG] [Thread-133364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:02:00.141 [DEBUG] [Thread-133364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:02:00.141 [DEBUG] [Thread-133364] [transport.py] [_log()] Compression: none
2026-02-11T18:02:00.141 [DEBUG] [Thread-133364] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:02:00.159 [DEBUG] [Thread-133364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:02:00.160 [DEBUG] [Thread-133364] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:02:00.160 [DEBUG] [Thread-133364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:02:00.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:02:00.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:02:00.162 [DEBUG] [Thread-133364] [transport.py] [_log()] userauth is OK
2026-02-11T18:02:00.162 [DEBUG] [Thread-133364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:02:00.163 [DEBUG] [Thread-133364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:02:00.163 [DEBUG] [Thread-133364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:02:00.163 [DEBUG] [Thread-133364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:02:00.186 [INFO] [Thread-133364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:02:00.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:02:00.769 [DEBUG] [Thread-133364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:02:00.769 [DEBUG] [Thread-133364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:02:00.770 [DEBUG] [Thread-133364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:02:00.810 [DEBUG] [Thread-133364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:02:00.810 [DEBUG] [Thread-133364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:02:00.813 [DEBUG] [Thread-133364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:02:00.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:02:00.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:02:00.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:02:00.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:02:00.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:02:00.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:02:00.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:02:00.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:02:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:02:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.667849 -999.00  +20.20  37.59     66  +13.80 1 3 2 1 1   887    0 6.03 -101.54 ----- 34.3 37.6 290.6 49.9 22.9 -9.2 22.7 -8.7 21.8 -8.3 22.3 -7.9
2026-02-11T18:02:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:02:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:02:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.667849
2026-02-11T18:02:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:02:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:02:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:02:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:02:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:02:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:01:16', tmtdew=8.22, humidity=59.29, cloud=0.0, wind=40.34, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:01:42.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:02:00.836 [DEBUG] [Thread-133364] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:02:00.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:02:00.930 [DEBUG] [Thread-133367] [transport.py] [_log()] starting thread (client mode): 0xa57e1ea0
2026-02-11T18:02:00.930 [DEBUG] [Thread-133367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:02:00.945 [DEBUG] [Thread-133367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:02:00.945 [INFO] [Thread-133367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:02:00.953 [DEBUG] [Thread-133367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:02:00.953 [DEBUG] [Thread-133367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:02:00.953 [DEBUG] [Thread-133367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:02:00.954 [DEBUG] [Thread-133367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:00.954 [DEBUG] [Thread-133367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:00.954 [DEBUG] [Thread-133367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:00.954 [DEBUG] [Thread-133367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:00.954 [DEBUG] [Thread-133367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:02:00.954 [DEBUG] [Thread-133367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:02:00.954 [DEBUG] [Thread-133367] [transport.py] [_log()] client lang: <none>
2026-02-11T18:02:00.955 [DEBUG] [Thread-133367] [transport.py] [_log()] server lang: <none>
2026-02-11T18:02:00.955 [DEBUG] [Thread-133367] [transport.py] [_log()] kex follows: False
2026-02-11T18:02:00.955 [DEBUG] [Thread-133367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:02:00.955 [DEBUG] [Thread-133367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:02:00.955 [DEBUG] [Thread-133367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:02:00.955 [DEBUG] [Thread-133367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:02:00.955 [DEBUG] [Thread-133367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:02:00.956 [DEBUG] [Thread-133367] [transport.py] [_log()] Compression: none
2026-02-11T18:02:00.956 [DEBUG] [Thread-133367] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:02:01.014 [DEBUG] [Thread-133367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:02:01.014 [DEBUG] [Thread-133367] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:02:01.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:02:01.015 [DEBUG] [Thread-133367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:02:01.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:02:01.071 [DEBUG] [Thread-133367] [transport.py] [_log()] userauth is OK
2026-02-11T18:02:01.071 [DEBUG] [Thread-133367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:02:01.071 [DEBUG] [Thread-133367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:02:01.071 [DEBUG] [Thread-133367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:02:01.071 [DEBUG] [Thread-133367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:02:01.095 [INFO] [Thread-133367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:02:01.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:02:01.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:02:01.911 [DEBUG] [Thread-133367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:02:01.911 [DEBUG] [Thread-133367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:02:01.959 [DEBUG] [Thread-133367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:02:01.960 [DEBUG] [Thread-133367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:02:01.969 [DEBUG] [Thread-133367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:02:01.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:02:01.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:02:01.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:02:01.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:02:01.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:02:01.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:02:02.006 [DEBUG] [Thread-133367] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:02:08.939 [DEBUG] [Thread-133369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:02:23.999 [DEBUG] [Thread-133370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:02:29.154 [DEBUG] [Thread-133371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:02:32.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:02:32.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:02:32.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:02:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 1, 52), 7.75, 61.04, 0.0, 47.07, 20.46, 0, 0, 0, 2, 1, 0),)
2026-02-11T18:02:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:01:52
2026-02-11T18:02:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:02:34.733 [DEBUG] [Thread-133372] [transport.py] [_log()] starting thread (client mode): 0xa57e3a90
2026-02-11T18:02:34.733 [DEBUG] [Thread-133372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:02:34.751 [DEBUG] [Thread-133372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:02:34.751 [INFO] [Thread-133372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] client lang: <none>
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] server lang: <none>
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] kex follows: False
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] Compression: none
2026-02-11T18:02:34.755 [DEBUG] [Thread-133372] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:02:34.771 [DEBUG] [Thread-133372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:02:34.772 [DEBUG] [Thread-133372] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:02:34.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:02:34.773 [DEBUG] [Thread-133372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:02:34.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:02:34.774 [DEBUG] [Thread-133372] [transport.py] [_log()] userauth is OK
2026-02-11T18:02:34.775 [DEBUG] [Thread-133372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:02:34.775 [DEBUG] [Thread-133372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:02:34.775 [DEBUG] [Thread-133372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:02:34.775 [DEBUG] [Thread-133372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:02:34.790 [INFO] [Thread-133372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:02:34.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:02:35.407 [DEBUG] [Thread-133372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:02:35.408 [DEBUG] [Thread-133372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:02:35.408 [DEBUG] [Thread-133372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:02:35.448 [DEBUG] [Thread-133372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:02:35.449 [DEBUG] [Thread-133372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:02:35.452 [DEBUG] [Thread-133372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:02:35.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:02:35.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:02:35.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:02:35.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:02:35.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:02:35.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:02:35.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:02:35.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:02:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:02:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.668196 -999.00  +20.00  39.56     68  +14.00 1 3 2 1 1   887    0 5.62 -118.24 ----- 34.7 39.6 302.8 53.7 22.8 -9.0 22.6 -8.6 21.6 -8.1 22.1 -7.6
2026-02-11T18:02:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:02:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:02:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.668196
2026-02-11T18:02:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:02:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:02:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:02:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:02:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:02:35.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:01:52', tmtdew=7.75, humidity=61.04, cloud=0.0, wind=47.07, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:02:12.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:02:35.480 [DEBUG] [Thread-133372] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:02:35.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:02:35.574 [DEBUG] [Thread-133375] [transport.py] [_log()] starting thread (client mode): 0xa5742200
2026-02-11T18:02:35.574 [DEBUG] [Thread-133375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:02:35.588 [DEBUG] [Thread-133375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:02:35.589 [INFO] [Thread-133375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:02:35.596 [DEBUG] [Thread-133375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:02:35.597 [DEBUG] [Thread-133375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:02:35.597 [DEBUG] [Thread-133375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:02:35.597 [DEBUG] [Thread-133375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:35.597 [DEBUG] [Thread-133375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:02:35.597 [DEBUG] [Thread-133375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:35.597 [DEBUG] [Thread-133375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:02:35.597 [DEBUG] [Thread-133375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:02:35.598 [DEBUG] [Thread-133375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:02:35.598 [DEBUG] [Thread-133375] [transport.py] [_log()] client lang: <none>
2026-02-11T18:02:35.598 [DEBUG] [Thread-133375] [transport.py] [_log()] server lang: <none>
2026-02-11T18:02:35.598 [DEBUG] [Thread-133375] [transport.py] [_log()] kex follows: False
2026-02-11T18:02:35.598 [DEBUG] [Thread-133375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:02:35.598 [DEBUG] [Thread-133375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:02:35.599 [DEBUG] [Thread-133375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:02:35.599 [DEBUG] [Thread-133375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:02:35.599 [DEBUG] [Thread-133375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:02:35.599 [DEBUG] [Thread-133375] [transport.py] [_log()] Compression: none
2026-02-11T18:02:35.599 [DEBUG] [Thread-133375] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:02:35.655 [DEBUG] [Thread-133375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:02:35.655 [DEBUG] [Thread-133375] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:02:35.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:02:35.656 [DEBUG] [Thread-133375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:02:35.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:02:35.710 [DEBUG] [Thread-133375] [transport.py] [_log()] userauth is OK
2026-02-11T18:02:35.711 [DEBUG] [Thread-133375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:02:35.711 [DEBUG] [Thread-133375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:02:35.711 [DEBUG] [Thread-133375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:02:35.711 [DEBUG] [Thread-133375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:02:35.730 [INFO] [Thread-133375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:02:35.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:02:35.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:02:36.536 [DEBUG] [Thread-133375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:02:36.537 [DEBUG] [Thread-133375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:02:36.584 [DEBUG] [Thread-133375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:02:36.585 [DEBUG] [Thread-133375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:02:36.594 [DEBUG] [Thread-133375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:02:36.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:02:36.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')
2026-02-11T18:02:36.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:02:36.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:02:36.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:02:36.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:02:36.633 [DEBUG] [Thread-133375] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:02:39.035 [DEBUG] [Thread-133377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:02:54.185 [DEBUG] [Thread-133378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:02:55.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:02:55.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:03:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:03:06.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:03:06.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:03:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 2, 27), 7.51, 61.95, 0.0, 46.47, 20.26, 0, 0, 0, 2, 1, 0),)
2026-02-11T18:03:09.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:02:27
2026-02-11T18:03:09.221 [DEBUG] [Thread-133379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:03:09.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:03:09.742 [DEBUG] [Thread-133380] [transport.py] [_log()] starting thread (client mode): 0xa5740b50
2026-02-11T18:03:09.742 [DEBUG] [Thread-133380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:03:09.763 [DEBUG] [Thread-133380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:03:09.763 [INFO] [Thread-133380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] client lang: <none>
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] server lang: <none>
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] kex follows: False
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:03:09.766 [DEBUG] [Thread-133380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:03:09.767 [DEBUG] [Thread-133380] [transport.py] [_log()] Compression: none
2026-02-11T18:03:09.767 [DEBUG] [Thread-133380] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:03:09.784 [DEBUG] [Thread-133380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:03:09.785 [DEBUG] [Thread-133380] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:03:09.785 [DEBUG] [Thread-133380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:03:09.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:03:09.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:03:09.787 [DEBUG] [Thread-133380] [transport.py] [_log()] userauth is OK
2026-02-11T18:03:09.788 [DEBUG] [Thread-133380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:03:09.788 [DEBUG] [Thread-133380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:03:09.788 [DEBUG] [Thread-133380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:03:09.788 [DEBUG] [Thread-133380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:03:09.812 [INFO] [Thread-133380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:03:09.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:03:10.450 [DEBUG] [Thread-133380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:03:10.450 [DEBUG] [Thread-133380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:03:10.450 [DEBUG] [Thread-133380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:03:10.491 [DEBUG] [Thread-133380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:03:10.491 [DEBUG] [Thread-133380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:03:10.494 [DEBUG] [Thread-133380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:03:10.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:03:10.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:03:10.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:03:10.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:03:10.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:03:10.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:03:10.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:03:10.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:03:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:03:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.668544 -999.00  +20.00  40.31     69  +14.30 1 3 2 1 1   887    0 4.63 -146.55 ----- 45.3 40.3 293.4 48.3 22.6 -8.4 22.4 -8.1 21.5 -7.4 21.9 -7.4
2026-02-11T18:03:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:03:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:03:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.668544
2026-02-11T18:03:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:03:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:03:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:03:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:03:10.521 [DEBUG] [Thread-133380] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:03:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:03:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:02:27', tmtdew=7.51, humidity=61.95, cloud=0.0, wind=46.47, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:02:42.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:03:10.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:03:10.616 [DEBUG] [Thread-133383] [transport.py] [_log()] starting thread (client mode): 0xa5743490
2026-02-11T18:03:10.616 [DEBUG] [Thread-133383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:03:10.631 [DEBUG] [Thread-133383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:03:10.631 [INFO] [Thread-133383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:03:10.638 [DEBUG] [Thread-133383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] client lang: <none>
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] server lang: <none>
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] kex follows: False
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] Compression: none
2026-02-11T18:03:10.639 [DEBUG] [Thread-133383] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:03:10.698 [DEBUG] [Thread-133383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:03:10.698 [DEBUG] [Thread-133383] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:03:10.699 [DEBUG] [Thread-133383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:03:10.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:03:10.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:03:10.754 [DEBUG] [Thread-133383] [transport.py] [_log()] userauth is OK
2026-02-11T18:03:10.754 [DEBUG] [Thread-133383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:03:10.755 [DEBUG] [Thread-133383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:03:10.755 [DEBUG] [Thread-133383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:03:10.755 [DEBUG] [Thread-133383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:03:10.774 [INFO] [Thread-133383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:03:10.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:03:10.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:03:11.579 [DEBUG] [Thread-133383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:03:11.579 [DEBUG] [Thread-133383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:03:11.627 [DEBUG] [Thread-133383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:03:11.627 [DEBUG] [Thread-133383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:03:11.636 [DEBUG] [Thread-133383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:03:11.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:03:11.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:03:11.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:03:11.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:03:11.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:03:11.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:03:11.671 [DEBUG] [Thread-133383] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:03:24.259 [DEBUG] [Thread-133385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:03:29.201 [DEBUG] [Thread-133386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:03:39.313 [DEBUG] [Thread-133387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:03:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:03:41.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:03:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:03:44.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 3, 3), 7.36, 62.53, 0.0, 45.61, 20.25, 0, 0, 0, 2, 1, 0),)
2026-02-11T18:03:44.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:03:03
2026-02-11T18:03:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:03:44.677 [DEBUG] [Thread-133388] [transport.py] [_log()] starting thread (client mode): 0xa57e16f0
2026-02-11T18:03:44.677 [DEBUG] [Thread-133388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:03:44.696 [DEBUG] [Thread-133388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:03:44.696 [INFO] [Thread-133388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:03:44.699 [DEBUG] [Thread-133388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] client lang: <none>
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] server lang: <none>
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] kex follows: False
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] Compression: none
2026-02-11T18:03:44.700 [DEBUG] [Thread-133388] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:03:44.718 [DEBUG] [Thread-133388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:03:44.718 [DEBUG] [Thread-133388] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:03:44.719 [DEBUG] [Thread-133388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:03:44.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:03:44.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:03:44.721 [DEBUG] [Thread-133388] [transport.py] [_log()] userauth is OK
2026-02-11T18:03:44.721 [DEBUG] [Thread-133388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:03:44.721 [DEBUG] [Thread-133388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:03:44.721 [DEBUG] [Thread-133388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:03:44.722 [DEBUG] [Thread-133388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:03:44.758 [INFO] [Thread-133388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:03:44.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:03:45.413 [DEBUG] [Thread-133388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:03:45.414 [DEBUG] [Thread-133388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:03:45.414 [DEBUG] [Thread-133388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:03:45.454 [DEBUG] [Thread-133388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:03:45.455 [DEBUG] [Thread-133388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:03:45.458 [DEBUG] [Thread-133388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:03:45.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:03:45.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:03:45.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:03:45.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:03:45.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:03:45.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:03:45.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:03:45.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:03:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:03:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.668891 -999.00  +19.70  41.23     71  +14.40 1 3 2 1 1   887    0 3.65 -171.34 ----- 40.3 41.2 302.2 50.9 22.4 -9.0 22.2 -8.1 21.3 -7.1 21.7 -7.3
2026-02-11T18:03:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:03:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:03:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.668891
2026-02-11T18:03:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:03:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:03:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:03:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:03:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:03:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:03:03', tmtdew=7.36, humidity=62.53, cloud=0.0, wind=45.61, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:03:12.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:03:45.486 [DEBUG] [Thread-133388] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:03:45.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:03:45.585 [DEBUG] [Thread-133391] [transport.py] [_log()] starting thread (client mode): 0xa57e3370
2026-02-11T18:03:45.585 [DEBUG] [Thread-133391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:03:45.599 [DEBUG] [Thread-133391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:03:45.599 [INFO] [Thread-133391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:03:45.607 [DEBUG] [Thread-133391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] client lang: <none>
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] server lang: <none>
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] kex follows: False
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] Compression: none
2026-02-11T18:03:45.608 [DEBUG] [Thread-133391] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:03:45.670 [DEBUG] [Thread-133391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:03:45.670 [DEBUG] [Thread-133391] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:03:45.671 [DEBUG] [Thread-133391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:03:45.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:03:45.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:03:45.726 [DEBUG] [Thread-133391] [transport.py] [_log()] userauth is OK
2026-02-11T18:03:45.726 [DEBUG] [Thread-133391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:03:45.726 [DEBUG] [Thread-133391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:03:45.727 [DEBUG] [Thread-133391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:03:45.727 [DEBUG] [Thread-133391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:03:45.745 [INFO] [Thread-133391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:03:45.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:03:45.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:03:46.590 [DEBUG] [Thread-133391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:03:46.590 [DEBUG] [Thread-133391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:03:46.638 [DEBUG] [Thread-133391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:03:46.639 [DEBUG] [Thread-133391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:03:46.648 [DEBUG] [Thread-133391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:03:46.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:03:46.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:03:46.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:03:46.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:03:46.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:03:46.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:03:46.683 [DEBUG] [Thread-133391] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:03:54.351 [DEBUG] [Thread-133393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:03:55.759 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:03:55.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:09.407 [DEBUG] [Thread-133394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:16.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:04:16.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:04:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:04:19.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 3, 39), 7.24, 63.15, 0.0, 53.28, 20.63, 0, 0, 0, 2, 1, 0),)
2026-02-11T18:04:19.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:03:39
2026-02-11T18:04:19.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:04:19.728 [DEBUG] [Thread-133395] [transport.py] [_log()] starting thread (client mode): 0xa57e0880
2026-02-11T18:04:19.729 [DEBUG] [Thread-133395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:04:19.751 [DEBUG] [Thread-133395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:04:19.751 [INFO] [Thread-133395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:04:19.755 [DEBUG] [Thread-133395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] client lang: <none>
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] server lang: <none>
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] kex follows: False
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] Compression: none
2026-02-11T18:04:19.756 [DEBUG] [Thread-133395] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:04:19.773 [DEBUG] [Thread-133395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:04:19.773 [DEBUG] [Thread-133395] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:04:19.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:04:19.774 [DEBUG] [Thread-133395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:04:19.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:04:19.776 [DEBUG] [Thread-133395] [transport.py] [_log()] userauth is OK
2026-02-11T18:04:19.776 [DEBUG] [Thread-133395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:04:19.776 [DEBUG] [Thread-133395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:04:19.776 [DEBUG] [Thread-133395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:04:19.777 [DEBUG] [Thread-133395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:04:19.810 [INFO] [Thread-133395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:04:19.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:04:20.494 [DEBUG] [Thread-133395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:04:20.495 [DEBUG] [Thread-133395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:04:20.495 [DEBUG] [Thread-133395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:04:20.535 [DEBUG] [Thread-133395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:04:20.535 [DEBUG] [Thread-133395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:04:20.537 [DEBUG] [Thread-133395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:04:20.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:04:20.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:04:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:04:20.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:04:20.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:04:20.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:04:20.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:04:20.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:04:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:04:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.669238 -999.00  +19.50  34.83     73  +14.50 1 3 2 1 1   887    0 3.80 -166.46 ----- 43.2 34.8 297.6 47.4 22.3 -9.0 22.1 -8.2 21.0 -6.9 21.5 -7.1
2026-02-11T18:04:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:04:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:04:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.669238
2026-02-11T18:04:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:04:20.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:04:20.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:04:20.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:04:20.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:04:20.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:03:39', tmtdew=7.24, humidity=63.15, cloud=0.0, wind=53.28, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:03:42.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:04:20.557 [DEBUG] [Thread-133395] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:04:20.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:04:20.642 [DEBUG] [Thread-133398] [transport.py] [_log()] starting thread (client mode): 0xa57c16c0
2026-02-11T18:04:20.642 [DEBUG] [Thread-133398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:04:20.656 [DEBUG] [Thread-133398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:04:20.656 [INFO] [Thread-133398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] client lang: <none>
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] server lang: <none>
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] kex follows: False
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] Compression: none
2026-02-11T18:04:20.664 [DEBUG] [Thread-133398] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:04:20.721 [DEBUG] [Thread-133398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:04:20.722 [DEBUG] [Thread-133398] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:04:20.723 [DEBUG] [Thread-133398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:04:20.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:04:20.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:04:20.778 [DEBUG] [Thread-133398] [transport.py] [_log()] userauth is OK
2026-02-11T18:04:20.778 [DEBUG] [Thread-133398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:04:20.778 [DEBUG] [Thread-133398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:04:20.779 [DEBUG] [Thread-133398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:04:20.779 [DEBUG] [Thread-133398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:04:20.800 [INFO] [Thread-133398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:04:20.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:04:20.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:04:21.616 [DEBUG] [Thread-133398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:04:21.617 [DEBUG] [Thread-133398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:04:21.664 [DEBUG] [Thread-133398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:04:21.665 [DEBUG] [Thread-133398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:04:21.674 [DEBUG] [Thread-133398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:04:21.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:04:21.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:04:21.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:04:21.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:04:21.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:04:21.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:04:21.710 [DEBUG] [Thread-133398] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:04:24.445 [DEBUG] [Thread-133400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:29.267 [DEBUG] [Thread-133401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:39.497 [DEBUG] [Thread-133402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:51.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:04:51.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:04:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:04:53.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 4, 15), 6.19, 67.18, 0.0, 39.43, 19.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:04:53.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:04:15
2026-02-11T18:04:54.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:04:54.508 [DEBUG] [Thread-133403] [transport.py] [_log()] starting thread (client mode): 0xa5740b80
2026-02-11T18:04:54.509 [DEBUG] [Thread-133403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:04:54.529 [DEBUG] [Thread-133403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:04:54.529 [INFO] [Thread-133403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:04:54.532 [DEBUG] [Thread-133403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:04:54.532 [DEBUG] [Thread-133403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:04:54.532 [DEBUG] [Thread-133403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:04:54.532 [DEBUG] [Thread-133403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] client lang: <none>
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] server lang: <none>
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] kex follows: False
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] Compression: none
2026-02-11T18:04:54.533 [DEBUG] [Thread-133403] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:04:54.536 [DEBUG] [Thread-133405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:54.550 [DEBUG] [Thread-133403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:04:54.551 [DEBUG] [Thread-133403] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:04:54.551 [DEBUG] [Thread-133403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:04:54.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:04:54.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:04:54.553 [DEBUG] [Thread-133403] [transport.py] [_log()] userauth is OK
2026-02-11T18:04:54.554 [DEBUG] [Thread-133403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:04:54.554 [DEBUG] [Thread-133403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:04:54.554 [DEBUG] [Thread-133403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:04:54.554 [DEBUG] [Thread-133403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:04:54.578 [INFO] [Thread-133403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:04:54.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:04:55.352 [DEBUG] [Thread-133403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:04:55.352 [DEBUG] [Thread-133403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:04:55.353 [DEBUG] [Thread-133403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:04:55.393 [DEBUG] [Thread-133403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:04:55.394 [DEBUG] [Thread-133403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:04:55.397 [DEBUG] [Thread-133403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:04:55.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:04:55.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:04:55.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:04:55.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:04:55.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:04:55.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:04:55.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:04:55.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:04:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:04:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.669585 -999.00  +19.30  40.02     74  +14.60 1 3 2 1 1   887    0 2.70 -199.66 ----- 35.5 40.0 294.6 46.4 22.1 -9.0 21.8 -7.8 20.7 -6.6 21.1 -7.2
2026-02-11T18:04:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:04:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:04:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.669585
2026-02-11T18:04:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:04:55.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:04:15', tmtdew=6.19, humidity=67.18, cloud=0.0, wind=39.43, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:04:12.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:04:55.425 [DEBUG] [Thread-133403] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:04:55.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:04:55.521 [DEBUG] [Thread-133407] [transport.py] [_log()] starting thread (client mode): 0x9eb04a60
2026-02-11T18:04:55.522 [DEBUG] [Thread-133407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:04:55.536 [DEBUG] [Thread-133407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:04:55.536 [INFO] [Thread-133407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] client lang: <none>
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] server lang: <none>
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] kex follows: False
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:04:55.544 [DEBUG] [Thread-133407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:04:55.545 [DEBUG] [Thread-133407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:04:55.545 [DEBUG] [Thread-133407] [transport.py] [_log()] Compression: none
2026-02-11T18:04:55.545 [DEBUG] [Thread-133407] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:04:55.605 [DEBUG] [Thread-133407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:04:55.606 [DEBUG] [Thread-133407] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:04:55.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:04:55.607 [DEBUG] [Thread-133407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:04:55.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:04:55.661 [DEBUG] [Thread-133407] [transport.py] [_log()] userauth is OK
2026-02-11T18:04:55.661 [DEBUG] [Thread-133407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:04:55.661 [DEBUG] [Thread-133407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:04:55.661 [DEBUG] [Thread-133407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:04:55.662 [DEBUG] [Thread-133407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:04:55.680 [INFO] [Thread-133407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:04:55.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:04:55.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:04:55.902 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:55.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:04:56.502 [DEBUG] [Thread-133407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:04:56.502 [DEBUG] [Thread-133407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:04:56.550 [DEBUG] [Thread-133407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:04:56.550 [DEBUG] [Thread-133407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:04:56.559 [DEBUG] [Thread-133407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:04:56.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:04:56.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:04:56.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:04:56.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:04:56.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:04:56.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:04:56.593 [DEBUG] [Thread-133407] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:05:09.576 [DEBUG] [Thread-133409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:05:24.626 [DEBUG] [Thread-133410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:05:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:05:26.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:05:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:05:28.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 4, 51), 5.74, 69.56, 0.0, 41.61, 19.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:05:28.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:04:51
2026-02-11T18:05:28.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:05:29.141 [DEBUG] [Thread-133411] [transport.py] [_log()] starting thread (client mode): 0x9eb051e0
2026-02-11T18:05:29.141 [DEBUG] [Thread-133411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:05:29.161 [DEBUG] [Thread-133411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:05:29.161 [INFO] [Thread-133411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:05:29.164 [DEBUG] [Thread-133411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:05:29.164 [DEBUG] [Thread-133411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:05:29.164 [DEBUG] [Thread-133411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:05:29.164 [DEBUG] [Thread-133411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:05:29.164 [DEBUG] [Thread-133411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:05:29.164 [DEBUG] [Thread-133411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] client lang: <none>
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] server lang: <none>
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] kex follows: False
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] Compression: none
2026-02-11T18:05:29.165 [DEBUG] [Thread-133411] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:05:29.182 [DEBUG] [Thread-133411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:05:29.182 [DEBUG] [Thread-133411] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:05:29.183 [DEBUG] [Thread-133411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:05:29.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:05:29.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:05:29.185 [DEBUG] [Thread-133411] [transport.py] [_log()] userauth is OK
2026-02-11T18:05:29.185 [DEBUG] [Thread-133411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:05:29.185 [DEBUG] [Thread-133411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:05:29.185 [DEBUG] [Thread-133411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:05:29.185 [DEBUG] [Thread-133411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:05:29.207 [INFO] [Thread-133411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:05:29.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:05:29.332 [DEBUG] [Thread-133413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:05:29.841 [DEBUG] [Thread-133411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:05:29.841 [DEBUG] [Thread-133411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:05:29.842 [DEBUG] [Thread-133411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:05:29.882 [DEBUG] [Thread-133411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:05:29.882 [DEBUG] [Thread-133411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:05:29.885 [DEBUG] [Thread-133411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:05:29.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:05:29.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:05:29.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:05:29.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:05:29.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:05:29.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:05:29.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:05:29.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:05:29.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:05:29.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.669932 -999.00  +19.20  31.46     75  +14.80 1 3 2 1 1   887    0 2.77 -195.65 ----- 31.4 31.5 291.4 45.7 22.0 -8.6 21.7 -7.7 20.5 -6.2 20.9 -6.5
2026-02-11T18:05:29.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:05:29.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:05:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.669932
2026-02-11T18:05:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:05:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:05:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:05:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:05:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:05:29.910 [DEBUG] [Thread-133411] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:05:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:04:51', tmtdew=5.74, humidity=69.56, cloud=0.0, wind=41.61, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:04:42.125', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:05:29.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:05:30.003 [DEBUG] [Thread-133415] [transport.py] [_log()] starting thread (client mode): 0xa2db7f70
2026-02-11T18:05:30.003 [DEBUG] [Thread-133415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:05:30.018 [DEBUG] [Thread-133415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:05:30.019 [INFO] [Thread-133415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:05:30.026 [DEBUG] [Thread-133415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] client lang: <none>
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] server lang: <none>
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] kex follows: False
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:05:30.027 [DEBUG] [Thread-133415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:05:30.028 [DEBUG] [Thread-133415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:05:30.028 [DEBUG] [Thread-133415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:05:30.028 [DEBUG] [Thread-133415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:05:30.028 [DEBUG] [Thread-133415] [transport.py] [_log()] Compression: none
2026-02-11T18:05:30.028 [DEBUG] [Thread-133415] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:05:30.085 [DEBUG] [Thread-133415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:05:30.085 [DEBUG] [Thread-133415] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:05:30.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:05:30.086 [DEBUG] [Thread-133415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:05:30.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:05:30.144 [DEBUG] [Thread-133415] [transport.py] [_log()] userauth is OK
2026-02-11T18:05:30.144 [DEBUG] [Thread-133415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:05:30.145 [DEBUG] [Thread-133415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:05:30.145 [DEBUG] [Thread-133415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:05:30.145 [DEBUG] [Thread-133415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:05:30.167 [INFO] [Thread-133415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:05:30.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:05:30.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:05:30.989 [DEBUG] [Thread-133415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:05:30.990 [DEBUG] [Thread-133415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:05:31.037 [DEBUG] [Thread-133415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:05:31.038 [DEBUG] [Thread-133415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:05:31.047 [DEBUG] [Thread-133415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:05:31.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:05:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:05:31.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
2026-02-11T18:05:31.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:05:31.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:05:31.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:05:31.087 [DEBUG] [Thread-133415] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:05:39.663 [DEBUG] [Thread-133417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:05:54.721 [DEBUG] [Thread-133418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:05:56.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:05:56.044 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:06:01.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:06:01.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:06:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:06:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 5, 27), 5.61, 70.09, 0.0, 41.68, 19.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:06:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:05:27
2026-02-11T18:06:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:06:03.460 [DEBUG] [Thread-133419] [transport.py] [_log()] starting thread (client mode): 0xa57e3fd0
2026-02-11T18:06:03.461 [DEBUG] [Thread-133419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:06:03.482 [DEBUG] [Thread-133419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:06:03.483 [INFO] [Thread-133419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] client lang: <none>
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] server lang: <none>
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] kex follows: False
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] Compression: none
2026-02-11T18:06:03.486 [DEBUG] [Thread-133419] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:06:03.504 [DEBUG] [Thread-133419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:06:03.504 [DEBUG] [Thread-133419] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:06:03.505 [DEBUG] [Thread-133419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:06:03.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:06:03.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:06:03.507 [DEBUG] [Thread-133419] [transport.py] [_log()] userauth is OK
2026-02-11T18:06:03.507 [DEBUG] [Thread-133419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:06:03.507 [DEBUG] [Thread-133419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:06:03.508 [DEBUG] [Thread-133419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:06:03.508 [DEBUG] [Thread-133419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:06:03.532 [INFO] [Thread-133419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:06:03.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:06:04.161 [DEBUG] [Thread-133419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:06:04.162 [DEBUG] [Thread-133419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:06:04.162 [DEBUG] [Thread-133419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:06:04.202 [DEBUG] [Thread-133419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:06:04.202 [DEBUG] [Thread-133419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:06:04.206 [DEBUG] [Thread-133419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:06:04.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:06:04.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:06:04.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:06:04.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:06:04.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:06:04.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:06:04.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:06:04.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:06:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:06:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.670627 -999.00  +19.20  39.25     77  +15.20 1 3 2 1 1   887    0 1.18 -238.73 ----- 33.5 39.2 291.6 41.2 21.8 -8.0 21.5 -7.1 20.2 -6.3 20.6 -5.9
2026-02-11T18:06:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:06:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:06:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.670627
2026-02-11T18:06:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:06:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:06:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:06:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:06:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:06:04.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:05:27', tmtdew=5.61, humidity=70.09, cloud=0.0, wind=41.68, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:05:42.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:06:04.233 [DEBUG] [Thread-133419] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:06:04.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:06:04.328 [DEBUG] [Thread-133422] [transport.py] [_log()] starting thread (client mode): 0xa57c0c70
2026-02-11T18:06:04.328 [DEBUG] [Thread-133422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:06:04.342 [DEBUG] [Thread-133422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:06:04.343 [INFO] [Thread-133422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:06:04.350 [DEBUG] [Thread-133422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:06:04.350 [DEBUG] [Thread-133422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] client lang: <none>
2026-02-11T18:06:04.351 [DEBUG] [Thread-133422] [transport.py] [_log()] server lang: <none>
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] kex follows: False
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] Compression: none
2026-02-11T18:06:04.352 [DEBUG] [Thread-133422] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:06:04.409 [DEBUG] [Thread-133422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:06:04.410 [DEBUG] [Thread-133422] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:06:04.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:06:04.412 [DEBUG] [Thread-133422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:06:04.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:06:04.468 [DEBUG] [Thread-133422] [transport.py] [_log()] userauth is OK
2026-02-11T18:06:04.469 [DEBUG] [Thread-133422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:06:04.469 [DEBUG] [Thread-133422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:06:04.469 [DEBUG] [Thread-133422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:06:04.469 [DEBUG] [Thread-133422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:06:04.489 [INFO] [Thread-133422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:06:04.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:06:04.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:06:05.319 [DEBUG] [Thread-133422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:06:05.319 [DEBUG] [Thread-133422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:06:05.367 [DEBUG] [Thread-133422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:06:05.368 [DEBUG] [Thread-133422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:06:05.377 [DEBUG] [Thread-133422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:06:05.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:06:05.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:06:05.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:06:05.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:06:05.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:06:05.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:06:05.412 [DEBUG] [Thread-133422] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:06:09.757 [DEBUG] [Thread-133424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:06:24.805 [DEBUG] [Thread-133425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:06:29.393 [DEBUG] [Thread-133426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:06:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:06:35.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:06:35.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:06:37.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 6, 4), 5.54, 70.41, 0.0, 40.25, 19.42, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:06:37.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:06:04
2026-02-11T18:06:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:06:38.243 [DEBUG] [Thread-133427] [transport.py] [_log()] starting thread (client mode): 0xa57c1390
2026-02-11T18:06:38.243 [DEBUG] [Thread-133427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:06:38.263 [DEBUG] [Thread-133427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:06:38.263 [INFO] [Thread-133427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:06:38.266 [DEBUG] [Thread-133427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:06:38.266 [DEBUG] [Thread-133427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:06:38.266 [DEBUG] [Thread-133427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:06:38.266 [DEBUG] [Thread-133427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:38.266 [DEBUG] [Thread-133427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:38.266 [DEBUG] [Thread-133427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] client lang: <none>
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] server lang: <none>
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] kex follows: False
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] Compression: none
2026-02-11T18:06:38.267 [DEBUG] [Thread-133427] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:06:38.286 [DEBUG] [Thread-133427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:06:38.287 [DEBUG] [Thread-133427] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:06:38.288 [DEBUG] [Thread-133427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:06:38.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:06:38.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:06:38.290 [DEBUG] [Thread-133427] [transport.py] [_log()] userauth is OK
2026-02-11T18:06:38.291 [DEBUG] [Thread-133427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:06:38.291 [DEBUG] [Thread-133427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:06:38.291 [DEBUG] [Thread-133427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:06:38.291 [DEBUG] [Thread-133427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:06:38.325 [INFO] [Thread-133427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:06:38.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:06:38.963 [DEBUG] [Thread-133427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:06:38.963 [DEBUG] [Thread-133427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:06:38.963 [DEBUG] [Thread-133427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:06:39.004 [DEBUG] [Thread-133427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:06:39.004 [DEBUG] [Thread-133427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:06:39.006 [DEBUG] [Thread-133427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:06:39.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:06:39.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:06:39.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:06:39.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:06:39.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:06:39.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:06:39.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.670974 -999.00  +19.10  33.80     77  +15.00 1 3 2 1 1   887    0 1.13 -234.77 ----- 29.8 33.8 301.8 41.6 21.6 -8.0 21.4 -7.2 20.1 -6.3 20.4 -5.7
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.670974
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:06:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:06:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:06:04', tmtdew=5.54, humidity=70.41, cloud=0.0, wind=40.25, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:06:12.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:06:39.023 [DEBUG] [Thread-133427] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:06:39.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:06:39.107 [DEBUG] [Thread-133430] [transport.py] [_log()] starting thread (client mode): 0xa57c2740
2026-02-11T18:06:39.107 [DEBUG] [Thread-133430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:06:39.123 [DEBUG] [Thread-133430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:06:39.123 [INFO] [Thread-133430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:06:39.130 [DEBUG] [Thread-133430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] client lang: <none>
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] server lang: <none>
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] kex follows: False
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] Compression: none
2026-02-11T18:06:39.131 [DEBUG] [Thread-133430] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:06:39.192 [DEBUG] [Thread-133430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:06:39.192 [DEBUG] [Thread-133430] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:06:39.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:06:39.194 [DEBUG] [Thread-133430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:06:39.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:06:39.252 [DEBUG] [Thread-133430] [transport.py] [_log()] userauth is OK
2026-02-11T18:06:39.252 [DEBUG] [Thread-133430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:06:39.252 [DEBUG] [Thread-133430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:06:39.253 [DEBUG] [Thread-133430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:06:39.253 [DEBUG] [Thread-133430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:06:39.271 [INFO] [Thread-133430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:06:39.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:06:39.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:06:39.848 [DEBUG] [Thread-133432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:06:40.103 [DEBUG] [Thread-133430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:06:40.103 [DEBUG] [Thread-133430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:06:40.153 [DEBUG] [Thread-133430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:06:40.153 [DEBUG] [Thread-133430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:06:40.165 [DEBUG] [Thread-133430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:06:40.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:06:40.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:06:40.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:06:40.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:06:40.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:06:40.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:06:40.206 [DEBUG] [Thread-133430] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:06:54.940 [DEBUG] [Thread-133433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:06:56.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:06:56.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:07:09.978 [DEBUG] [Thread-133434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:07:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:07:10.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:07:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:07:12.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 6, 39), 5.75, 69.41, 0.0, 45.48, 19.9, 0, 0, 2, 2, 1, 0),)
2026-02-11T18:07:12.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:06:39
2026-02-11T18:07:12.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:07:12.621 [DEBUG] [Thread-133435] [transport.py] [_log()] starting thread (client mode): 0xa2dc0eb0
2026-02-11T18:07:12.621 [DEBUG] [Thread-133435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:07:12.641 [DEBUG] [Thread-133435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:07:12.641 [INFO] [Thread-133435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:07:12.644 [DEBUG] [Thread-133435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:07:12.644 [DEBUG] [Thread-133435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:07:12.644 [DEBUG] [Thread-133435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] client lang: <none>
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] server lang: <none>
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] kex follows: False
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] Compression: none
2026-02-11T18:07:12.645 [DEBUG] [Thread-133435] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:07:12.664 [DEBUG] [Thread-133435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:07:12.665 [DEBUG] [Thread-133435] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:07:12.665 [DEBUG] [Thread-133435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:07:12.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:07:12.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:07:12.667 [DEBUG] [Thread-133435] [transport.py] [_log()] userauth is OK
2026-02-11T18:07:12.667 [DEBUG] [Thread-133435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:07:12.667 [DEBUG] [Thread-133435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:07:12.668 [DEBUG] [Thread-133435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:07:12.668 [DEBUG] [Thread-133435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:07:12.686 [INFO] [Thread-133435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:07:12.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:07:13.368 [DEBUG] [Thread-133435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:07:13.368 [DEBUG] [Thread-133435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:07:13.369 [DEBUG] [Thread-133435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:07:13.409 [DEBUG] [Thread-133435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:07:13.409 [DEBUG] [Thread-133435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:07:13.412 [DEBUG] [Thread-133435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:07:13.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:07:13.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:07:13.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:07:13.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:07:13.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:07:13.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:07:13.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:07:13.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:07:13.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:07:13.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.671321 -999.00  +19.00  33.11     78  +15.10 1 3 2 1 1   887    0 0.40 -252.07 ----- 32.2 33.1 294.0 38.9 21.4 -7.9 21.2 -7.2 19.9 -6.2 20.3 -5.6
2026-02-11T18:07:13.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:07:13.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:07:13.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.671321
2026-02-11T18:07:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:07:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:07:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:07:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:07:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:07:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:06:39', tmtdew=5.75, humidity=69.41, cloud=0.0, wind=45.48, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:06:42.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:07:13.437 [DEBUG] [Thread-133435] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:07:13.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:07:13.531 [DEBUG] [Thread-133438] [transport.py] [_log()] starting thread (client mode): 0xa575ae90
2026-02-11T18:07:13.531 [DEBUG] [Thread-133438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:07:13.546 [DEBUG] [Thread-133438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:07:13.546 [INFO] [Thread-133438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:07:13.554 [DEBUG] [Thread-133438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:07:13.555 [DEBUG] [Thread-133438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:07:13.555 [DEBUG] [Thread-133438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:07:13.555 [DEBUG] [Thread-133438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:13.555 [DEBUG] [Thread-133438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:13.555 [DEBUG] [Thread-133438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:13.555 [DEBUG] [Thread-133438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:13.555 [DEBUG] [Thread-133438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] client lang: <none>
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] server lang: <none>
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] kex follows: False
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:07:13.556 [DEBUG] [Thread-133438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:07:13.557 [DEBUG] [Thread-133438] [transport.py] [_log()] Compression: none
2026-02-11T18:07:13.557 [DEBUG] [Thread-133438] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:07:13.612 [DEBUG] [Thread-133438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:07:13.613 [DEBUG] [Thread-133438] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:07:13.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:07:13.614 [DEBUG] [Thread-133438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:07:13.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:07:13.671 [DEBUG] [Thread-133438] [transport.py] [_log()] userauth is OK
2026-02-11T18:07:13.672 [DEBUG] [Thread-133438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:07:13.672 [DEBUG] [Thread-133438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:07:13.672 [DEBUG] [Thread-133438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:07:13.672 [DEBUG] [Thread-133438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:07:13.690 [INFO] [Thread-133438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:07:13.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:07:13.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:07:14.514 [DEBUG] [Thread-133438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:07:14.515 [DEBUG] [Thread-133438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:07:14.562 [DEBUG] [Thread-133438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:07:14.563 [DEBUG] [Thread-133438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:07:14.572 [DEBUG] [Thread-133438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:07:14.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:07:14.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:07:14.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
2026-02-11T18:07:14.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:07:14.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:07:14.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:07:14.609 [DEBUG] [Thread-133438] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:07:25.017 [DEBUG] [Thread-133440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:07:29.446 [DEBUG] [Thread-133441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:07:40.068 [DEBUG] [Thread-133442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:07:44.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:07:44.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:07:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:07:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 7, 16), 5.14, 71.84, 0.0, 41.18, 18.99, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:07:46.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:07:16
2026-02-11T18:07:46.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:07:46.981 [DEBUG] [Thread-133443] [transport.py] [_log()] starting thread (client mode): 0xa57c1660
2026-02-11T18:07:46.981 [DEBUG] [Thread-133443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:07:47.002 [DEBUG] [Thread-133443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:07:47.002 [INFO] [Thread-133443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] client lang: <none>
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] server lang: <none>
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] kex follows: False
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] Compression: none
2026-02-11T18:07:47.005 [DEBUG] [Thread-133443] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:07:47.020 [DEBUG] [Thread-133443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:07:47.020 [DEBUG] [Thread-133443] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:07:47.020 [DEBUG] [Thread-133443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:07:47.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:07:47.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:07:47.021 [DEBUG] [Thread-133443] [transport.py] [_log()] userauth is OK
2026-02-11T18:07:47.021 [DEBUG] [Thread-133443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:07:47.021 [DEBUG] [Thread-133443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:07:47.021 [DEBUG] [Thread-133443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:07:47.021 [DEBUG] [Thread-133443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:07:47.030 [INFO] [Thread-133443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:07:47.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:07:47.770 [DEBUG] [Thread-133443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:07:47.770 [DEBUG] [Thread-133443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:07:47.770 [DEBUG] [Thread-133443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:07:47.811 [DEBUG] [Thread-133443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:07:47.812 [DEBUG] [Thread-133443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:07:47.814 [DEBUG] [Thread-133443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:07:47.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:07:47.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:07:47.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:07:47.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:07:47.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:07:47.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:07:47.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:07:47.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.671669 -999.00  +18.90  27.55     79  +15.30 1 3 1 1 1   887    0 -0.16 -269.23 ----- 27.3 27.6 295.8 36.7 21.3 -7.7 21.1 -6.8 19.8 -5.6 20.1 -5.4
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.671669
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:07:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:07:16', tmtdew=5.14, humidity=71.84, cloud=0.0, wind=41.18, temperature=18.99, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:07:12.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:07:47.835 [DEBUG] [Thread-133443] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:07:47.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:07:47.920 [DEBUG] [Thread-133446] [transport.py] [_log()] starting thread (client mode): 0xa2db7640
2026-02-11T18:07:47.920 [DEBUG] [Thread-133446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:07:47.934 [DEBUG] [Thread-133446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:07:47.934 [INFO] [Thread-133446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] client lang: <none>
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] server lang: <none>
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] kex follows: False
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:07:47.942 [DEBUG] [Thread-133446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:07:47.943 [DEBUG] [Thread-133446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:07:47.943 [DEBUG] [Thread-133446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:07:47.943 [DEBUG] [Thread-133446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:07:47.943 [DEBUG] [Thread-133446] [transport.py] [_log()] Compression: none
2026-02-11T18:07:47.943 [DEBUG] [Thread-133446] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:07:48.006 [DEBUG] [Thread-133446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:07:48.007 [DEBUG] [Thread-133446] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:07:48.007 [DEBUG] [Thread-133446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:07:48.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:07:48.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:07:48.063 [DEBUG] [Thread-133446] [transport.py] [_log()] userauth is OK
2026-02-11T18:07:48.063 [DEBUG] [Thread-133446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:07:48.063 [DEBUG] [Thread-133446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:07:48.063 [DEBUG] [Thread-133446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:07:48.063 [DEBUG] [Thread-133446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:07:48.086 [INFO] [Thread-133446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:07:48.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:07:48.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:07:48.914 [DEBUG] [Thread-133446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:07:48.915 [DEBUG] [Thread-133446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:07:48.962 [DEBUG] [Thread-133446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:07:48.963 [DEBUG] [Thread-133446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:07:48.972 [DEBUG] [Thread-133446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:07:48.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:07:48.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:07:48.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:07:49.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:07:49.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:07:49.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:07:49.014 [DEBUG] [Thread-133446] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:07:55.105 [DEBUG] [Thread-133448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:07:56.324 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:07:56.325 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:10.165 [DEBUG] [Thread-133449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:08:19.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:08:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:08:21.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 7, 52), 4.87, 73.35, 0.0, 34.28, 18.82, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:08:21.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:07:52
2026-02-11T18:08:21.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:08:21.722 [DEBUG] [Thread-133450] [transport.py] [_log()] starting thread (client mode): 0xa5740430
2026-02-11T18:08:21.722 [DEBUG] [Thread-133450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:08:21.742 [DEBUG] [Thread-133450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:08:21.742 [INFO] [Thread-133450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:08:21.745 [DEBUG] [Thread-133450] [transport.py] [_log()] client lang: <none>
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] server lang: <none>
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] kex follows: False
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] Compression: none
2026-02-11T18:08:21.746 [DEBUG] [Thread-133450] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:08:21.762 [DEBUG] [Thread-133450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:08:21.763 [DEBUG] [Thread-133450] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:08:21.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:08:21.764 [DEBUG] [Thread-133450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:08:21.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:08:21.766 [DEBUG] [Thread-133450] [transport.py] [_log()] userauth is OK
2026-02-11T18:08:21.766 [DEBUG] [Thread-133450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:08:21.767 [DEBUG] [Thread-133450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:08:21.767 [DEBUG] [Thread-133450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:08:21.767 [DEBUG] [Thread-133450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:08:21.792 [INFO] [Thread-133450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:08:21.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:08:22.445 [DEBUG] [Thread-133450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:08:22.445 [DEBUG] [Thread-133450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:08:22.445 [DEBUG] [Thread-133450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:08:22.486 [DEBUG] [Thread-133450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:08:22.486 [DEBUG] [Thread-133450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:08:22.489 [DEBUG] [Thread-133450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:08:22.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:08:22.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:08:22.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:08:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:08:22.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:08:22.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:08:22.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:08:22.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:08:22.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:08:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.672016 -999.00  +18.90  25.58     79  +15.30 1 3 1 1 1   887    0 -0.05 -266.16 ----- 28.7 25.6 298.6 37.3 21.3 -7.3 21.0 -7.0 19.7 -5.5 20.0 -5.2
2026-02-11T18:08:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:08:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:08:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.672016
2026-02-11T18:08:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:08:22.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:08:22.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:08:22.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:08:22.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:08:22.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:07:52', tmtdew=4.87, humidity=73.35, cloud=0.0, wind=34.28, temperature=18.82, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:07:42.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:08:22.513 [DEBUG] [Thread-133450] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:08:22.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:08:22.614 [DEBUG] [Thread-133453] [transport.py] [_log()] starting thread (client mode): 0xa2db5150
2026-02-11T18:08:22.614 [DEBUG] [Thread-133453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:08:22.629 [DEBUG] [Thread-133453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:08:22.629 [INFO] [Thread-133453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:08:22.636 [DEBUG] [Thread-133453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:08:22.637 [DEBUG] [Thread-133453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] client lang: <none>
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] server lang: <none>
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] kex follows: False
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:08:22.638 [DEBUG] [Thread-133453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:08:22.639 [DEBUG] [Thread-133453] [transport.py] [_log()] Compression: none
2026-02-11T18:08:22.639 [DEBUG] [Thread-133453] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:08:22.694 [DEBUG] [Thread-133453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:08:22.695 [DEBUG] [Thread-133453] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:08:22.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:08:22.696 [DEBUG] [Thread-133453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:08:22.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:08:22.750 [DEBUG] [Thread-133453] [transport.py] [_log()] userauth is OK
2026-02-11T18:08:22.750 [DEBUG] [Thread-133453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:08:22.750 [DEBUG] [Thread-133453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:08:22.750 [DEBUG] [Thread-133453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:08:22.750 [DEBUG] [Thread-133453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:08:22.772 [INFO] [Thread-133453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:08:22.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:08:22.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:08:23.583 [DEBUG] [Thread-133453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:08:23.583 [DEBUG] [Thread-133453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:08:23.631 [DEBUG] [Thread-133453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:08:23.632 [DEBUG] [Thread-133453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:08:23.643 [DEBUG] [Thread-133453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:08:23.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:08:23.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:08:23.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:08:23.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:08:23.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:08:23.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:08:23.684 [DEBUG] [Thread-133453] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:08:25.197 [DEBUG] [Thread-133455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:29.497 [DEBUG] [Thread-133456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:40.240 [DEBUG] [Thread-133457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:53.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:08:53.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:08:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:08:55.276 [DEBUG] [Thread-133458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:55.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 8, 27), 4.78, 73.75, 0.0, 35.27, 18.77, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:08:55.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:08:27
2026-02-11T18:08:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:08:56.447 [DEBUG] [Thread-133459] [transport.py] [_log()] starting thread (client mode): 0xa2dc2f20
2026-02-11T18:08:56.448 [DEBUG] [Thread-133459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:08:56.464 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:56.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:08:56.469 [DEBUG] [Thread-133459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:08:56.469 [INFO] [Thread-133459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:08:56.472 [DEBUG] [Thread-133459] [transport.py] [_log()] client lang: <none>
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] server lang: <none>
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] kex follows: False
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] Compression: none
2026-02-11T18:08:56.473 [DEBUG] [Thread-133459] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:08:56.491 [DEBUG] [Thread-133459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:08:56.492 [DEBUG] [Thread-133459] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:08:56.492 [DEBUG] [Thread-133459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:08:56.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:08:56.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:08:56.494 [DEBUG] [Thread-133459] [transport.py] [_log()] userauth is OK
2026-02-11T18:08:56.495 [DEBUG] [Thread-133459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:08:56.495 [DEBUG] [Thread-133459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:08:56.495 [DEBUG] [Thread-133459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:08:56.495 [DEBUG] [Thread-133459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:08:56.522 [INFO] [Thread-133459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:08:56.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:08:57.172 [DEBUG] [Thread-133459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:08:57.172 [DEBUG] [Thread-133459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:08:57.172 [DEBUG] [Thread-133459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:08:57.213 [DEBUG] [Thread-133459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:08:57.213 [DEBUG] [Thread-133459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:08:57.215 [DEBUG] [Thread-133459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:08:57.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:08:57.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:08:57.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:08:57.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:08:57.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:08:57.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:08:57.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:08:57.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:08:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:08:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.672363 -999.00  +18.90  27.75     79  +15.30 1 3 1 1 1   887    0 -1.22 -295.87 ----- 24.3 27.8 297.2 36.1 21.2 -7.1 20.9 -6.5 19.6 -5.0 19.9 -5.3
2026-02-11T18:08:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:08:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:08:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.672363
2026-02-11T18:08:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:08:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:08:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:08:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:08:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:08:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:08:27', tmtdew=4.78, humidity=73.75, cloud=0.0, wind=35.27, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:08:12.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:08:57.236 [DEBUG] [Thread-133459] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:08:57.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:08:57.327 [DEBUG] [Thread-133462] [transport.py] [_log()] starting thread (client mode): 0xa2db5180
2026-02-11T18:08:57.327 [DEBUG] [Thread-133462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:08:57.342 [DEBUG] [Thread-133462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:08:57.342 [INFO] [Thread-133462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] client lang: <none>
2026-02-11T18:08:57.350 [DEBUG] [Thread-133462] [transport.py] [_log()] server lang: <none>
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] kex follows: False
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] Compression: none
2026-02-11T18:08:57.351 [DEBUG] [Thread-133462] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:08:57.410 [DEBUG] [Thread-133462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:08:57.411 [DEBUG] [Thread-133462] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:08:57.411 [DEBUG] [Thread-133462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:08:57.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:08:57.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:08:57.466 [DEBUG] [Thread-133462] [transport.py] [_log()] userauth is OK
2026-02-11T18:08:57.466 [DEBUG] [Thread-133462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:08:57.466 [DEBUG] [Thread-133462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:08:57.467 [DEBUG] [Thread-133462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:08:57.467 [DEBUG] [Thread-133462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:08:57.495 [INFO] [Thread-133462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:08:57.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:08:57.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:08:58.315 [DEBUG] [Thread-133462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:08:58.315 [DEBUG] [Thread-133462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:08:58.363 [DEBUG] [Thread-133462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:08:58.363 [DEBUG] [Thread-133462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:08:58.372 [DEBUG] [Thread-133462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:08:58.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:08:58.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:08:58.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:08:58.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:08:58.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:08:58.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:08:58.412 [DEBUG] [Thread-133462] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:09:10.315 [DEBUG] [Thread-133464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:09:25.377 [DEBUG] [Thread-133465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:09:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:09:28.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:09:28.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:09:29.547 [DEBUG] [Thread-133466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:09:30.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 9, 3), 4.78, 73.75, 0.0, 33.88, 18.75, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:09:30.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:09:03
2026-02-11T18:09:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:09:30.752 [DEBUG] [Thread-133467] [transport.py] [_log()] starting thread (client mode): 0xa57c1720
2026-02-11T18:09:30.753 [DEBUG] [Thread-133467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:09:30.772 [DEBUG] [Thread-133467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:09:30.773 [INFO] [Thread-133467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:09:30.775 [DEBUG] [Thread-133467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] client lang: <none>
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] server lang: <none>
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] kex follows: False
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] Compression: none
2026-02-11T18:09:30.776 [DEBUG] [Thread-133467] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:09:30.793 [DEBUG] [Thread-133467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:09:30.794 [DEBUG] [Thread-133467] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:09:30.794 [DEBUG] [Thread-133467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:09:30.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:09:30.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:09:30.796 [DEBUG] [Thread-133467] [transport.py] [_log()] userauth is OK
2026-02-11T18:09:30.796 [DEBUG] [Thread-133467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:09:30.796 [DEBUG] [Thread-133467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:09:30.796 [DEBUG] [Thread-133467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:09:30.796 [DEBUG] [Thread-133467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:09:30.812 [INFO] [Thread-133467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:09:30.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:09:31.400 [DEBUG] [Thread-133467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:09:31.400 [DEBUG] [Thread-133467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:09:31.400 [DEBUG] [Thread-133467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:09:31.441 [DEBUG] [Thread-133467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:09:31.442 [DEBUG] [Thread-133467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:09:31.445 [DEBUG] [Thread-133467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:09:31.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:09:31.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:09:31.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:09:31.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:09:31.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:09:31.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:09:31.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:09:31.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:09:31.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:09:31.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.672710 -999.00  +19.00  24.55     79  +15.40 1 3 1 1 1   887    0 -1.45 -302.40 ----- 25.4 24.6 289.0 32.1 21.1 -6.8 20.9 -6.3 19.6 -4.9 19.9 -5.1
2026-02-11T18:09:31.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:09:31.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:09:31.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.672710
2026-02-11T18:09:31.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:09:31.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:09:31.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:09:31.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:09:31.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:09:31.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:09:03', tmtdew=4.78, humidity=73.75, cloud=0.0, wind=33.88, temperature=18.75, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:08:42.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:09:31.470 [DEBUG] [Thread-133467] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:09:31.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:09:31.577 [DEBUG] [Thread-133470] [transport.py] [_log()] starting thread (client mode): 0xa57733d0
2026-02-11T18:09:31.577 [DEBUG] [Thread-133470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:09:31.592 [DEBUG] [Thread-133470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:09:31.592 [INFO] [Thread-133470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:09:31.600 [DEBUG] [Thread-133470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:09:31.601 [DEBUG] [Thread-133470] [transport.py] [_log()] client lang: <none>
2026-02-11T18:09:31.601 [DEBUG] [Thread-133470] [transport.py] [_log()] server lang: <none>
2026-02-11T18:09:31.601 [DEBUG] [Thread-133470] [transport.py] [_log()] kex follows: False
2026-02-11T18:09:31.601 [DEBUG] [Thread-133470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:09:31.601 [DEBUG] [Thread-133470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:09:31.601 [DEBUG] [Thread-133470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:09:31.602 [DEBUG] [Thread-133470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:09:31.602 [DEBUG] [Thread-133470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:09:31.602 [DEBUG] [Thread-133470] [transport.py] [_log()] Compression: none
2026-02-11T18:09:31.602 [DEBUG] [Thread-133470] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:09:31.657 [DEBUG] [Thread-133470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:09:31.658 [DEBUG] [Thread-133470] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:09:31.658 [DEBUG] [Thread-133470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:09:31.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:09:31.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:09:31.714 [DEBUG] [Thread-133470] [transport.py] [_log()] userauth is OK
2026-02-11T18:09:31.714 [DEBUG] [Thread-133470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:09:31.714 [DEBUG] [Thread-133470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:09:31.714 [DEBUG] [Thread-133470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:09:31.714 [DEBUG] [Thread-133470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:09:31.733 [INFO] [Thread-133470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:09:31.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:09:31.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:09:32.544 [DEBUG] [Thread-133470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:09:32.544 [DEBUG] [Thread-133470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:09:32.593 [DEBUG] [Thread-133470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:09:32.593 [DEBUG] [Thread-133470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:09:32.603 [DEBUG] [Thread-133470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:09:32.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:09:32.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:09:32.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:09:32.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:09:32.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:09:32.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:09:32.641 [DEBUG] [Thread-133470] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:09:40.416 [DEBUG] [Thread-133472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:09:55.469 [DEBUG] [Thread-133473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:09:56.607 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:09:56.608 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:10:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:10:02.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:10:02.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:10:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 9, 39), 5.1, 72.26, 0.0, 36.34, 19.28, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:10:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:09:39
2026-02-11T18:10:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:10:05.077 [DEBUG] [Thread-133474] [transport.py] [_log()] starting thread (client mode): 0xa57e32e0
2026-02-11T18:10:05.078 [DEBUG] [Thread-133474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:10:05.098 [DEBUG] [Thread-133474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:10:05.098 [INFO] [Thread-133474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] client lang: <none>
2026-02-11T18:10:05.102 [DEBUG] [Thread-133474] [transport.py] [_log()] server lang: <none>
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] kex follows: False
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] Compression: none
2026-02-11T18:10:05.103 [DEBUG] [Thread-133474] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:10:05.119 [DEBUG] [Thread-133474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:10:05.120 [DEBUG] [Thread-133474] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:10:05.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:10:05.121 [DEBUG] [Thread-133474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:10:05.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:10:05.123 [DEBUG] [Thread-133474] [transport.py] [_log()] userauth is OK
2026-02-11T18:10:05.123 [DEBUG] [Thread-133474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:10:05.123 [DEBUG] [Thread-133474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:10:05.123 [DEBUG] [Thread-133474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:10:05.123 [DEBUG] [Thread-133474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:10:05.142 [INFO] [Thread-133474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:10:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:10:05.935 [DEBUG] [Thread-133474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:10:05.936 [DEBUG] [Thread-133474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:10:05.936 [DEBUG] [Thread-133474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:10:05.976 [DEBUG] [Thread-133474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:10:05.977 [DEBUG] [Thread-133474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:10:05.979 [DEBUG] [Thread-133474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:10:05.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:10:05.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:10:05.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:10:05.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:10:06.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:10:06.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:10:06.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:10:06.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:10:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:10:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.673057 -999.00  +19.00  23.64     79  +15.30 1 3 1 1 1   887    0 -1.64 -306.55 ----- 19.2 23.6 286.8 28.3 21.0 -6.9 20.8 -6.1 19.6 -5.1 19.9 -5.0
2026-02-11T18:10:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:10:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:10:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.673057
2026-02-11T18:10:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:10:06.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:10:06.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:10:06.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:10:06.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:10:06.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:09:39', tmtdew=5.1, humidity=72.26, cloud=0.0, wind=36.34, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:09:12.125', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:10:06.026 [DEBUG] [Thread-133474] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:10:06.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:10:06.121 [DEBUG] [Thread-133477] [transport.py] [_log()] starting thread (client mode): 0xa57c1720
2026-02-11T18:10:06.122 [DEBUG] [Thread-133477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:10:06.138 [DEBUG] [Thread-133477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:10:06.138 [INFO] [Thread-133477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:10:06.146 [DEBUG] [Thread-133477] [transport.py] [_log()] client lang: <none>
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] server lang: <none>
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] kex follows: False
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] Compression: none
2026-02-11T18:10:06.147 [DEBUG] [Thread-133477] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:10:06.206 [DEBUG] [Thread-133477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:10:06.207 [DEBUG] [Thread-133477] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:10:06.207 [DEBUG] [Thread-133477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:10:06.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:10:06.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:10:06.265 [DEBUG] [Thread-133477] [transport.py] [_log()] userauth is OK
2026-02-11T18:10:06.265 [DEBUG] [Thread-133477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:10:06.266 [DEBUG] [Thread-133477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:10:06.266 [DEBUG] [Thread-133477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:10:06.266 [DEBUG] [Thread-133477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:10:06.285 [INFO] [Thread-133477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:10:06.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:10:06.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:10:07.109 [DEBUG] [Thread-133477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:10:07.109 [DEBUG] [Thread-133477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:10:07.157 [DEBUG] [Thread-133477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:10:07.157 [DEBUG] [Thread-133477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:10:07.166 [DEBUG] [Thread-133477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:10:07.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:10:07.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:10:07.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:10:07.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:10:07.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:10:07.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:10:07.203 [DEBUG] [Thread-133477] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:10:10.507 [DEBUG] [Thread-133479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:10:25.561 [DEBUG] [Thread-133480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:10:29.596 [DEBUG] [Thread-133481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:10:37.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:10:37.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:10:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:10:39.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 10, 15), 4.74, 73.93, 0.0, 33.0, 18.75, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:10:39.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:10:15
2026-02-11T18:10:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:10:40.010 [DEBUG] [Thread-133482] [transport.py] [_log()] starting thread (client mode): 0xa5772ad0
2026-02-11T18:10:40.010 [DEBUG] [Thread-133482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:10:40.029 [DEBUG] [Thread-133482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:10:40.029 [INFO] [Thread-133482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:40.032 [DEBUG] [Thread-133482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] client lang: <none>
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] server lang: <none>
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] kex follows: False
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] Compression: none
2026-02-11T18:10:40.033 [DEBUG] [Thread-133482] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:10:40.050 [DEBUG] [Thread-133482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:10:40.050 [DEBUG] [Thread-133482] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:10:40.051 [DEBUG] [Thread-133482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:10:40.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:10:40.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:10:40.052 [DEBUG] [Thread-133482] [transport.py] [_log()] userauth is OK
2026-02-11T18:10:40.053 [DEBUG] [Thread-133482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:10:40.053 [DEBUG] [Thread-133482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:10:40.053 [DEBUG] [Thread-133482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:10:40.053 [DEBUG] [Thread-133482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:10:40.077 [INFO] [Thread-133482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:10:40.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:10:40.597 [DEBUG] [Thread-133484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:10:40.812 [DEBUG] [Thread-133482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:10:40.812 [DEBUG] [Thread-133482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:10:40.813 [DEBUG] [Thread-133482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:10:40.853 [DEBUG] [Thread-133482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:10:40.854 [DEBUG] [Thread-133482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:10:40.857 [DEBUG] [Thread-133482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:10:40.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:10:40.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:10:40.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:10:40.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:10:40.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:10:40.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:10:40.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:10:40.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:10:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:10:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.673405 -999.00  +19.00  24.29     79  +15.30 1 3 1 1 1   887    0 -2.44 -327.83 ----- 26.7 24.3 289.6 32.1 21.0 -6.7 20.7 -6.5 19.5 -6.0 19.8 -5.1
2026-02-11T18:10:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:10:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:10:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.673405
2026-02-11T18:10:40.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:10:40.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:10:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:10:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:10:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:10:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:10:15', tmtdew=4.74, humidity=73.93, cloud=0.0, wind=33.0, temperature=18.75, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:09:42.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:10:40.877 [DEBUG] [Thread-133482] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:10:40.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:10:40.976 [DEBUG] [Thread-133486] [transport.py] [_log()] starting thread (client mode): 0xa5773760
2026-02-11T18:10:40.976 [DEBUG] [Thread-133486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:10:40.991 [DEBUG] [Thread-133486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:10:40.991 [INFO] [Thread-133486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:10:40.998 [DEBUG] [Thread-133486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:10:40.999 [DEBUG] [Thread-133486] [transport.py] [_log()] client lang: <none>
2026-02-11T18:10:41.000 [DEBUG] [Thread-133486] [transport.py] [_log()] server lang: <none>
2026-02-11T18:10:41.000 [DEBUG] [Thread-133486] [transport.py] [_log()] kex follows: False
2026-02-11T18:10:41.000 [DEBUG] [Thread-133486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:10:41.000 [DEBUG] [Thread-133486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:10:41.000 [DEBUG] [Thread-133486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:10:41.001 [DEBUG] [Thread-133486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:10:41.001 [DEBUG] [Thread-133486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:10:41.001 [DEBUG] [Thread-133486] [transport.py] [_log()] Compression: none
2026-02-11T18:10:41.001 [DEBUG] [Thread-133486] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:10:41.056 [DEBUG] [Thread-133486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:10:41.056 [DEBUG] [Thread-133486] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:10:41.057 [DEBUG] [Thread-133486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:10:41.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:10:41.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:10:41.113 [DEBUG] [Thread-133486] [transport.py] [_log()] userauth is OK
2026-02-11T18:10:41.113 [DEBUG] [Thread-133486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:10:41.114 [DEBUG] [Thread-133486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:10:41.114 [DEBUG] [Thread-133486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:10:41.114 [DEBUG] [Thread-133486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:10:41.131 [INFO] [Thread-133486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:10:41.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:10:41.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:10:41.951 [DEBUG] [Thread-133486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:10:41.951 [DEBUG] [Thread-133486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:10:41.999 [DEBUG] [Thread-133486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:10:41.999 [DEBUG] [Thread-133486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:10:42.010 [DEBUG] [Thread-133486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:10:42.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:10:42.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:10:42.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:10:42.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:10:42.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:10:42.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:10:42.046 [DEBUG] [Thread-133486] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:10:55.633 [DEBUG] [Thread-133488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:10:56.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:10:56.752 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:11:10.688 [DEBUG] [Thread-133489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:11:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:11:12.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:11:12.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
2026-02-11T18:11:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 10, 50), 4.41, 75.52, 0.0, 30.33, 18.72, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:11:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:10:50
2026-02-11T18:11:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:11:14.510 [DEBUG] [Thread-133490] [transport.py] [_log()] starting thread (client mode): 0xa2d55120
2026-02-11T18:11:14.510 [DEBUG] [Thread-133490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:11:14.522 [DEBUG] [Thread-133490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:11:14.522 [INFO] [Thread-133490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] client lang: <none>
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] server lang: <none>
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] kex follows: False
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:11:14.525 [DEBUG] [Thread-133490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:11:14.526 [DEBUG] [Thread-133490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:11:14.526 [DEBUG] [Thread-133490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:11:14.526 [DEBUG] [Thread-133490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:11:14.526 [DEBUG] [Thread-133490] [transport.py] [_log()] Compression: none
2026-02-11T18:11:14.526 [DEBUG] [Thread-133490] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:11:14.542 [DEBUG] [Thread-133490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:11:14.542 [DEBUG] [Thread-133490] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:11:14.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:11:14.543 [DEBUG] [Thread-133490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:11:14.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:11:14.545 [DEBUG] [Thread-133490] [transport.py] [_log()] userauth is OK
2026-02-11T18:11:14.545 [DEBUG] [Thread-133490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:11:14.545 [DEBUG] [Thread-133490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:11:14.545 [DEBUG] [Thread-133490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:11:14.546 [DEBUG] [Thread-133490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:11:14.564 [INFO] [Thread-133490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:11:14.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:11:15.090 [DEBUG] [Thread-133490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:11:15.090 [DEBUG] [Thread-133490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:11:15.090 [DEBUG] [Thread-133490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:11:15.131 [DEBUG] [Thread-133490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:11:15.131 [DEBUG] [Thread-133490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:11:15.135 [DEBUG] [Thread-133490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:11:15.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:11:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:11:15.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:11:15.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:11:15.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:11:15.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:11:15.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:11:15.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:11:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:11:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.674446 -999.00  +18.60  26.74     81  +15.40 1 3 1 2 1   887    0 -2.91 -331.75 ----- 26.4 26.7 297.4 34.4 20.5 -6.2 19.9 -6.0 18.8 -5.3 19.3 -4.9
2026-02-11T18:11:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:11:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:11:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.674446
2026-02-11T18:11:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:11:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:11:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:11:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:11:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:11:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:10:50', tmtdew=4.41, humidity=75.52, cloud=0.0, wind=30.33, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:11:12.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:11:15.169 [DEBUG] [Thread-133490] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:11:15.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:11:15.263 [DEBUG] [Thread-133493] [transport.py] [_log()] starting thread (client mode): 0xa57b0b50
2026-02-11T18:11:15.263 [DEBUG] [Thread-133493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:11:15.278 [DEBUG] [Thread-133493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:11:15.278 [INFO] [Thread-133493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:11:15.286 [DEBUG] [Thread-133493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:11:15.286 [DEBUG] [Thread-133493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:11:15.286 [DEBUG] [Thread-133493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:11:15.286 [DEBUG] [Thread-133493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] client lang: <none>
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] server lang: <none>
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] kex follows: False
2026-02-11T18:11:15.287 [DEBUG] [Thread-133493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:11:15.288 [DEBUG] [Thread-133493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:11:15.288 [DEBUG] [Thread-133493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:11:15.288 [DEBUG] [Thread-133493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:11:15.288 [DEBUG] [Thread-133493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:11:15.288 [DEBUG] [Thread-133493] [transport.py] [_log()] Compression: none
2026-02-11T18:11:15.288 [DEBUG] [Thread-133493] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:11:15.346 [DEBUG] [Thread-133493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:11:15.346 [DEBUG] [Thread-133493] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:11:15.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:11:15.348 [DEBUG] [Thread-133493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:11:15.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:11:15.405 [DEBUG] [Thread-133493] [transport.py] [_log()] userauth is OK
2026-02-11T18:11:15.405 [DEBUG] [Thread-133493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:11:15.405 [DEBUG] [Thread-133493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:11:15.406 [DEBUG] [Thread-133493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:11:15.406 [DEBUG] [Thread-133493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:11:15.428 [INFO] [Thread-133493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:11:15.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:11:15.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:11:16.297 [DEBUG] [Thread-133493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:11:16.298 [DEBUG] [Thread-133493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:11:16.347 [DEBUG] [Thread-133493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:11:16.348 [DEBUG] [Thread-133493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:11:16.360 [DEBUG] [Thread-133493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:11:16.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:11:16.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')
2026-02-11T18:11:16.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:11:16.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:11:16.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:11:16.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:11:16.408 [DEBUG] [Thread-133493] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:11:25.723 [DEBUG] [Thread-133495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:11:29.650 [DEBUG] [Thread-133496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:11:40.774 [DEBUG] [Thread-133497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:11:46.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:11:46.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:11: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
2026-02-11T18:11:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 11, 27), 4.31, 76.0, 0.0, 30.81, 18.64, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:11:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:11:27
2026-02-11T18:11:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:11:48.799 [DEBUG] [Thread-133498] [transport.py] [_log()] starting thread (client mode): 0xa2dc1b10
2026-02-11T18:11:48.799 [DEBUG] [Thread-133498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:11:48.818 [DEBUG] [Thread-133498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:11:48.818 [INFO] [Thread-133498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] client lang: <none>
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] server lang: <none>
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] kex follows: False
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] Compression: none
2026-02-11T18:11:48.820 [DEBUG] [Thread-133498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:11:48.833 [DEBUG] [Thread-133498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:11:48.834 [DEBUG] [Thread-133498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:11:48.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:11:48.834 [DEBUG] [Thread-133498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:11:48.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:11:48.836 [DEBUG] [Thread-133498] [transport.py] [_log()] userauth is OK
2026-02-11T18:11:48.837 [DEBUG] [Thread-133498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:11:48.837 [DEBUG] [Thread-133498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:11:48.837 [DEBUG] [Thread-133498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:11:48.837 [DEBUG] [Thread-133498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:11:48.856 [INFO] [Thread-133498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:11:48.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:11:49.456 [DEBUG] [Thread-133498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:11:49.457 [DEBUG] [Thread-133498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:11:49.457 [DEBUG] [Thread-133498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:11:49.497 [DEBUG] [Thread-133498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:11:49.497 [DEBUG] [Thread-133498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:11:49.502 [DEBUG] [Thread-133498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:11:49.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:11:49.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:11:49.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:11:49.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:11:49.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:11:49.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:11:49.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:11:49.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:11:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:11:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.674794 -999.00  +18.60  22.85     83  +15.70 1 3 1 2 1   887    0 -2.84 -327.21 ----- 21.1 22.9 293.2 29.4 20.3 -6.0 19.8 -6.1 18.6 -5.3 19.1 -5.0
2026-02-11T18:11:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:11:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:11:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.674794
2026-02-11T18:11:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:11:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:11:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:11:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:11:49.521 [DEBUG] [Thread-133498] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:11:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:11:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:11:27', tmtdew=4.31, humidity=76.0, cloud=0.0, wind=30.81, temperature=18.64, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:11:42.202', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:11:49.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:11:49.616 [DEBUG] [Thread-133501] [transport.py] [_log()] starting thread (client mode): 0xa5772cb0
2026-02-11T18:11:49.616 [DEBUG] [Thread-133501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:11:49.631 [DEBUG] [Thread-133501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:11:49.631 [INFO] [Thread-133501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] client lang: <none>
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] server lang: <none>
2026-02-11T18:11:49.639 [DEBUG] [Thread-133501] [transport.py] [_log()] kex follows: False
2026-02-11T18:11:49.640 [DEBUG] [Thread-133501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:11:49.640 [DEBUG] [Thread-133501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:11:49.640 [DEBUG] [Thread-133501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:11:49.640 [DEBUG] [Thread-133501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:11:49.640 [DEBUG] [Thread-133501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:11:49.640 [DEBUG] [Thread-133501] [transport.py] [_log()] Compression: none
2026-02-11T18:11:49.640 [DEBUG] [Thread-133501] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:11:49.696 [DEBUG] [Thread-133501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:11:49.697 [DEBUG] [Thread-133501] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:11:49.698 [DEBUG] [Thread-133501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:11:49.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:11:49.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:11:49.753 [DEBUG] [Thread-133501] [transport.py] [_log()] userauth is OK
2026-02-11T18:11:49.753 [DEBUG] [Thread-133501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:11:49.754 [DEBUG] [Thread-133501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:11:49.754 [DEBUG] [Thread-133501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:11:49.754 [DEBUG] [Thread-133501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:11:49.778 [INFO] [Thread-133501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:11:49.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:11:49.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:11:50.610 [DEBUG] [Thread-133501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:11:50.610 [DEBUG] [Thread-133501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:11:50.658 [DEBUG] [Thread-133501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:11:50.659 [DEBUG] [Thread-133501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:11:50.668 [DEBUG] [Thread-133501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:11:50.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:11:50.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')
2026-02-11T18:11:50.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:11:50.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:11:50.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:11:50.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:11:50.704 [DEBUG] [Thread-133501] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:11:55.810 [DEBUG] [Thread-133503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:11:56.900 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:11:56.901 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:10.874 [DEBUG] [Thread-133504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:12:20.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:12:20.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:12:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 12, 3), 4.25, 76.26, 0.0, 30.9, 18.57, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:12:22.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:12:03
2026-02-11T18:12:23.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:12:23.495 [DEBUG] [Thread-133505] [transport.py] [_log()] starting thread (client mode): 0xa57b0b80
2026-02-11T18:12:23.495 [DEBUG] [Thread-133505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:12:23.515 [DEBUG] [Thread-133505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:12:23.515 [INFO] [Thread-133505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] client lang: <none>
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] server lang: <none>
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] kex follows: False
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:12:23.518 [DEBUG] [Thread-133505] [transport.py] [_log()] Compression: none
2026-02-11T18:12:23.519 [DEBUG] [Thread-133505] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:12:23.539 [DEBUG] [Thread-133505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:12:23.540 [DEBUG] [Thread-133505] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:12:23.540 [DEBUG] [Thread-133505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:12:23.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:12:23.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:12:23.542 [DEBUG] [Thread-133505] [transport.py] [_log()] userauth is OK
2026-02-11T18:12:23.543 [DEBUG] [Thread-133505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:12:23.543 [DEBUG] [Thread-133505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:12:23.543 [DEBUG] [Thread-133505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:12:23.543 [DEBUG] [Thread-133505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:12:23.568 [INFO] [Thread-133505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:12:23.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:12:24.187 [DEBUG] [Thread-133505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:12:24.188 [DEBUG] [Thread-133505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:12:24.188 [DEBUG] [Thread-133505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:12:24.228 [DEBUG] [Thread-133505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:12:24.228 [DEBUG] [Thread-133505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:12:24.232 [DEBUG] [Thread-133505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:12:24.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:12:24.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:12:24.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:12:24.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:12:24.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:12:24.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:12:24.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:12:24.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:12:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:12:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.675141 -999.00  +18.60  19.57     84  +15.90 1 3 1 2 1   887    0 -3.14 -331.09 ----- 19.6 19.6 298.6 28.3 20.1 -6.3 19.6 -5.8 18.4 -4.2 19.0 -4.7
2026-02-11T18:12:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:12:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:12:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.675141
2026-02-11T18:12:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:12:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:12:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:12:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:12:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:12:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:12:03', tmtdew=4.25, humidity=76.26, cloud=0.0, wind=30.9, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:12:12.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:12:24.261 [DEBUG] [Thread-133505] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:12:24.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:12:24.357 [DEBUG] [Thread-133508] [transport.py] [_log()] starting thread (client mode): 0xa57b26b0
2026-02-11T18:12:24.357 [DEBUG] [Thread-133508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:12:24.371 [DEBUG] [Thread-133508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:12:24.371 [INFO] [Thread-133508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:12:24.379 [DEBUG] [Thread-133508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:12:24.379 [DEBUG] [Thread-133508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] client lang: <none>
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] server lang: <none>
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] kex follows: False
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] Compression: none
2026-02-11T18:12:24.380 [DEBUG] [Thread-133508] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:12:24.440 [DEBUG] [Thread-133508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:12:24.441 [DEBUG] [Thread-133508] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:12:24.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:12:24.442 [DEBUG] [Thread-133508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:12:24.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:12:24.496 [DEBUG] [Thread-133508] [transport.py] [_log()] userauth is OK
2026-02-11T18:12:24.496 [DEBUG] [Thread-133508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:12:24.496 [DEBUG] [Thread-133508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:12:24.497 [DEBUG] [Thread-133508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:12:24.497 [DEBUG] [Thread-133508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:12:24.515 [INFO] [Thread-133508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:12:24.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:12:24.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:12:25.386 [DEBUG] [Thread-133508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:12:25.387 [DEBUG] [Thread-133508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:12:25.436 [DEBUG] [Thread-133508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:12:25.436 [DEBUG] [Thread-133508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:12:25.445 [DEBUG] [Thread-133508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:12:25.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:12:25.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:12:25.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:12:25.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:12:25.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:12:25.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:12:25.483 [DEBUG] [Thread-133508] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:12:25.912 [DEBUG] [Thread-133510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:29.699 [DEBUG] [Thread-133511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:40.962 [DEBUG] [Thread-133512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:12:55.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:12:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:12:56.002 [DEBUG] [Thread-133513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:57.042 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:57.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:12:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 12, 38), 3.84, 78.32, 0.0, 32.0, 18.98, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:12:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:12:38
2026-02-11T18:12:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:12:58.039 [DEBUG] [Thread-133514] [transport.py] [_log()] starting thread (client mode): 0xa57d66b0
2026-02-11T18:12:58.040 [DEBUG] [Thread-133514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:12:58.060 [DEBUG] [Thread-133514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:12:58.060 [INFO] [Thread-133514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] client lang: <none>
2026-02-11T18:12:58.063 [DEBUG] [Thread-133514] [transport.py] [_log()] server lang: <none>
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] kex follows: False
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] Compression: none
2026-02-11T18:12:58.064 [DEBUG] [Thread-133514] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:12:58.082 [DEBUG] [Thread-133514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:12:58.083 [DEBUG] [Thread-133514] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:12:58.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:12:58.084 [DEBUG] [Thread-133514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:12:58.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:12:58.125 [DEBUG] [Thread-133514] [transport.py] [_log()] userauth is OK
2026-02-11T18:12:58.125 [DEBUG] [Thread-133514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:12:58.125 [DEBUG] [Thread-133514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:12:58.125 [DEBUG] [Thread-133514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:12:58.125 [DEBUG] [Thread-133514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:12:58.149 [INFO] [Thread-133514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:12:58.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:12:58.768 [DEBUG] [Thread-133514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:12:58.769 [DEBUG] [Thread-133514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:12:58.769 [DEBUG] [Thread-133514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:12:58.809 [DEBUG] [Thread-133514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:12:58.810 [DEBUG] [Thread-133514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:12:58.813 [DEBUG] [Thread-133514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:12:58.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:12:58.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:12:58.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:12:58.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:12:58.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:12:58.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:12:58.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:12:58.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:12:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:12:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.675488 -999.00  +18.50  21.44     85  +16.00 1 3 1 2 1   887    0 -2.59 -312.66 ----- 22.5 21.4 292.5 23.9 20.1 -6.0 19.6 -4.3 18.5 -4.5 18.9 -4.2
2026-02-11T18:12:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:12:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:12:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.675488
2026-02-11T18:12:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:12:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:12:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:12:58.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:12:58.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:12:58.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:12:38', tmtdew=3.84, humidity=78.32, cloud=0.0, wind=32.0, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:12:42.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:12:58.843 [DEBUG] [Thread-133514] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:12:58.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:12:58.939 [DEBUG] [Thread-133517] [transport.py] [_log()] starting thread (client mode): 0xa57701c0
2026-02-11T18:12:58.939 [DEBUG] [Thread-133517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:12:58.953 [DEBUG] [Thread-133517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:12:58.954 [INFO] [Thread-133517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:12:58.961 [DEBUG] [Thread-133517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] client lang: <none>
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] server lang: <none>
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] kex follows: False
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:12:58.962 [DEBUG] [Thread-133517] [transport.py] [_log()] Compression: none
2026-02-11T18:12:58.963 [DEBUG] [Thread-133517] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:12:59.019 [DEBUG] [Thread-133517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:12:59.020 [DEBUG] [Thread-133517] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:12:59.021 [DEBUG] [Thread-133517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:12:59.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:12:59.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:12:59.076 [DEBUG] [Thread-133517] [transport.py] [_log()] userauth is OK
2026-02-11T18:12:59.076 [DEBUG] [Thread-133517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:12:59.076 [DEBUG] [Thread-133517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:12:59.076 [DEBUG] [Thread-133517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:12:59.076 [DEBUG] [Thread-133517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:12:59.095 [INFO] [Thread-133517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:12:59.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:12:59.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:12:59.924 [DEBUG] [Thread-133517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:12:59.925 [DEBUG] [Thread-133517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:12:59.973 [DEBUG] [Thread-133517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:12:59.973 [DEBUG] [Thread-133517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:12:59.982 [DEBUG] [Thread-133517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:12:59.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:12:59.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:13:00.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:13:00.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:13:00.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:13:00.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:13:00.019 [DEBUG] [Thread-133517] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:13:11.038 [DEBUG] [Thread-133519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:13:26.090 [DEBUG] [Thread-133520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:13:29.754 [DEBUG] [Thread-133521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:13:30.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:13:30.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:13:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:13:31.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 13, 14), 3.49, 80.06, 0.0, 27.37, 18.41, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:13:31.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:13:14
2026-02-11T18:13:32.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:13:32.499 [DEBUG] [Thread-133522] [transport.py] [_log()] starting thread (client mode): 0xa57d5f00
2026-02-11T18:13:32.499 [DEBUG] [Thread-133522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:13:32.520 [DEBUG] [Thread-133522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:13:32.520 [INFO] [Thread-133522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] client lang: <none>
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] server lang: <none>
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] kex follows: False
2026-02-11T18:13:32.523 [DEBUG] [Thread-133522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:13:32.524 [DEBUG] [Thread-133522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:13:32.524 [DEBUG] [Thread-133522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:13:32.524 [DEBUG] [Thread-133522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:13:32.524 [DEBUG] [Thread-133522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:13:32.524 [DEBUG] [Thread-133522] [transport.py] [_log()] Compression: none
2026-02-11T18:13:32.524 [DEBUG] [Thread-133522] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:13:32.540 [DEBUG] [Thread-133522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:13:32.541 [DEBUG] [Thread-133522] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:13:32.541 [DEBUG] [Thread-133522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:13:32.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:13:32.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:13:32.585 [DEBUG] [Thread-133522] [transport.py] [_log()] userauth is OK
2026-02-11T18:13:32.585 [DEBUG] [Thread-133522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:13:32.586 [DEBUG] [Thread-133522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:13:32.586 [DEBUG] [Thread-133522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:13:32.586 [DEBUG] [Thread-133522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:13:32.624 [INFO] [Thread-133522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:13:32.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:13:33.271 [DEBUG] [Thread-133522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:13:33.271 [DEBUG] [Thread-133522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:13:33.271 [DEBUG] [Thread-133522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:13:33.312 [DEBUG] [Thread-133522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:13:33.312 [DEBUG] [Thread-133522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:13:33.314 [DEBUG] [Thread-133522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:13:33.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:13:33.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:13:33.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:13:33.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:13:33.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:13:33.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:13:33.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:13:33.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:13:33.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:13:33.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.675835 -999.00  +18.30  24.28     84  +15.60 1 3 1 2 1   887    0 -3.26 -328.86 ----- 24.8 24.3 297.0 27.6 19.9 -6.3 19.4 -4.9 18.3 -5.0 18.9 -4.9
2026-02-11T18:13:33.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:13:33.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:13:33.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.675835
2026-02-11T18:13:33.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:13:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:13:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:13:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:13:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:13:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:13:14', tmtdew=3.49, humidity=80.06, cloud=0.0, wind=27.37, temperature=18.41, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:13:12.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:13:33.334 [DEBUG] [Thread-133522] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:13:33.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:13:33.431 [DEBUG] [Thread-133525] [transport.py] [_log()] starting thread (client mode): 0xa57d40a0
2026-02-11T18:13:33.431 [DEBUG] [Thread-133525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:13:33.445 [DEBUG] [Thread-133525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:13:33.445 [INFO] [Thread-133525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] client lang: <none>
2026-02-11T18:13:33.453 [DEBUG] [Thread-133525] [transport.py] [_log()] server lang: <none>
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] kex follows: False
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] Compression: none
2026-02-11T18:13:33.454 [DEBUG] [Thread-133525] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:13:33.511 [DEBUG] [Thread-133525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:13:33.512 [DEBUG] [Thread-133525] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:13:33.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:13:33.513 [DEBUG] [Thread-133525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:13:33.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:13:33.575 [DEBUG] [Thread-133525] [transport.py] [_log()] userauth is OK
2026-02-11T18:13:33.576 [DEBUG] [Thread-133525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:13:33.576 [DEBUG] [Thread-133525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:13:33.576 [DEBUG] [Thread-133525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:13:33.576 [DEBUG] [Thread-133525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:13:33.595 [INFO] [Thread-133525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:13:33.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:13:33.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:13:34.403 [DEBUG] [Thread-133525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:13:34.403 [DEBUG] [Thread-133525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:13:34.451 [DEBUG] [Thread-133525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:13:34.451 [DEBUG] [Thread-133525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:13:34.460 [DEBUG] [Thread-133525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:13:34.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:13:34.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')
2026-02-11T18:13:34.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
2026-02-11T18:13:34.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:13:34.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:13:34.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:13:34.496 [DEBUG] [Thread-133525] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:13:41.133 [DEBUG] [Thread-133527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:13:56.181 [DEBUG] [Thread-133528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:13:57.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:13:57.187 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:14:04.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:14:04.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:14:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:14:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 13, 49), 3.25, 81.79, 0.0, 24.81, 18.44, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:14:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:13:49
2026-02-11T18:14:06.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:14:06.833 [DEBUG] [Thread-133529] [transport.py] [_log()] starting thread (client mode): 0xa57b11b0
2026-02-11T18:14:06.833 [DEBUG] [Thread-133529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:14:06.853 [DEBUG] [Thread-133529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:14:06.853 [INFO] [Thread-133529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] client lang: <none>
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] server lang: <none>
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] kex follows: False
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:14:06.856 [DEBUG] [Thread-133529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:14:06.857 [DEBUG] [Thread-133529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:14:06.857 [DEBUG] [Thread-133529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:14:06.857 [DEBUG] [Thread-133529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:14:06.857 [DEBUG] [Thread-133529] [transport.py] [_log()] Compression: none
2026-02-11T18:14:06.857 [DEBUG] [Thread-133529] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:14:06.874 [DEBUG] [Thread-133529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:14:06.874 [DEBUG] [Thread-133529] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:14:06.874 [DEBUG] [Thread-133529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:14:06.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:14:06.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:14:06.875 [DEBUG] [Thread-133529] [transport.py] [_log()] userauth is OK
2026-02-11T18:14:06.876 [DEBUG] [Thread-133529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:14:06.876 [DEBUG] [Thread-133529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:14:06.876 [DEBUG] [Thread-133529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:14:06.876 [DEBUG] [Thread-133529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:14:06.894 [INFO] [Thread-133529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:14:06.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:14:07.510 [DEBUG] [Thread-133529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:14:07.510 [DEBUG] [Thread-133529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:14:07.511 [DEBUG] [Thread-133529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:14:07.551 [DEBUG] [Thread-133529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:14:07.552 [DEBUG] [Thread-133529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:14:07.555 [DEBUG] [Thread-133529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:14:07.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:14:07.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:14:07.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:14:07.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:14:07.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:14:07.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:14:07.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:14:07.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:14:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:14:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.676182 -999.00  +18.20  24.47     84  +15.60 1 3 1 2 1   887    0 -3.66 -337.65 ----- 19.6 24.5 292.8 28.8 19.8 -6.0 19.3 -4.8 18.3 -4.5 18.8 -4.4
2026-02-11T18:14:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:14:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:14:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.676182
2026-02-11T18:14:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:14:07.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:14:07.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:14:07.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:14:07.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:14:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:13:49', tmtdew=3.25, humidity=81.79, cloud=0.0, wind=24.81, temperature=18.44, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:13:42.125', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:14:07.583 [DEBUG] [Thread-133529] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:14:07.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:14:07.680 [DEBUG] [Thread-133532] [transport.py] [_log()] starting thread (client mode): 0xa575bf10
2026-02-11T18:14:07.680 [DEBUG] [Thread-133532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:14:07.694 [DEBUG] [Thread-133532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:14:07.695 [INFO] [Thread-133532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:14:07.702 [DEBUG] [Thread-133532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:14:07.703 [DEBUG] [Thread-133532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:14:07.703 [DEBUG] [Thread-133532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:14:07.703 [DEBUG] [Thread-133532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:07.703 [DEBUG] [Thread-133532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:07.703 [DEBUG] [Thread-133532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:07.703 [DEBUG] [Thread-133532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] client lang: <none>
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] server lang: <none>
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] kex follows: False
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:14:07.704 [DEBUG] [Thread-133532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:14:07.705 [DEBUG] [Thread-133532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:14:07.705 [DEBUG] [Thread-133532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:14:07.705 [DEBUG] [Thread-133532] [transport.py] [_log()] Compression: none
2026-02-11T18:14:07.705 [DEBUG] [Thread-133532] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:14:07.765 [DEBUG] [Thread-133532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:14:07.766 [DEBUG] [Thread-133532] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:14:07.766 [DEBUG] [Thread-133532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:14:07.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:14:07.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:14:07.824 [DEBUG] [Thread-133532] [transport.py] [_log()] userauth is OK
2026-02-11T18:14:07.824 [DEBUG] [Thread-133532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:14:07.824 [DEBUG] [Thread-133532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:14:07.824 [DEBUG] [Thread-133532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:14:07.825 [DEBUG] [Thread-133532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:14:07.846 [INFO] [Thread-133532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:14:07.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:14:07.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:14:08.702 [DEBUG] [Thread-133532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:14:08.702 [DEBUG] [Thread-133532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:14:08.750 [DEBUG] [Thread-133532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:14:08.751 [DEBUG] [Thread-133532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:14:08.760 [DEBUG] [Thread-133532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:14:08.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:14:08.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:14:08.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:14:08.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:14:08.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:14:08.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:14:08.796 [DEBUG] [Thread-133532] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:14:11.214 [DEBUG] [Thread-133534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:14:26.277 [DEBUG] [Thread-133535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:14:29.801 [DEBUG] [Thread-133536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:14:38.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:14:38.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:14:38.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:14:40.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 14, 25), 3.23, 81.85, 0.0, 23.52, 18.41, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:14:40.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:14:25
2026-02-11T18:14:41.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:14:41.310 [DEBUG] [Thread-133537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:14:41.434 [DEBUG] [Thread-133538] [transport.py] [_log()] starting thread (client mode): 0xa57b1ea0
2026-02-11T18:14:41.434 [DEBUG] [Thread-133538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:14:41.453 [DEBUG] [Thread-133538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:14:41.453 [INFO] [Thread-133538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] client lang: <none>
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] server lang: <none>
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] kex follows: False
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:14:41.456 [DEBUG] [Thread-133538] [transport.py] [_log()] Compression: none
2026-02-11T18:14:41.457 [DEBUG] [Thread-133538] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:14:41.472 [DEBUG] [Thread-133538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:14:41.473 [DEBUG] [Thread-133538] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:14:41.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:14:41.474 [DEBUG] [Thread-133538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:14:41.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:14:41.476 [DEBUG] [Thread-133538] [transport.py] [_log()] userauth is OK
2026-02-11T18:14:41.476 [DEBUG] [Thread-133538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:14:41.476 [DEBUG] [Thread-133538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:14:41.476 [DEBUG] [Thread-133538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:14:41.476 [DEBUG] [Thread-133538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:14:41.499 [INFO] [Thread-133538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:14:41.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:14:42.154 [DEBUG] [Thread-133538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:14:42.155 [DEBUG] [Thread-133538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:14:42.155 [DEBUG] [Thread-133538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:14:42.195 [DEBUG] [Thread-133538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:14:42.195 [DEBUG] [Thread-133538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:14:42.197 [DEBUG] [Thread-133538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:14:42.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:14:42.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:14:42.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:14:42.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:14:42.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:14:42.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:14:42.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:14:42.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:14:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:14:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.676530 -999.00  +18.30  17.56     86  +15.90 1 3 1 2 1   887    0 -3.90 -342.39 ----- 17.9 17.6 287.4 26.8 19.7 -6.6 19.2 -4.9 18.2 -3.5 18.7 -4.3
2026-02-11T18:14:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:14:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:14:42.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.676530
2026-02-11T18:14:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:14:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:14:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:14:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:14:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:14:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:14:25', tmtdew=3.23, humidity=81.85, cloud=0.0, wind=23.52, temperature=18.41, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:14:12.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:14:42.224 [DEBUG] [Thread-133538] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:14:42.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:14:42.321 [DEBUG] [Thread-133541] [transport.py] [_log()] starting thread (client mode): 0xa57d40a0
2026-02-11T18:14:42.321 [DEBUG] [Thread-133541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:14:42.335 [DEBUG] [Thread-133541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:14:42.335 [INFO] [Thread-133541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:14:42.343 [DEBUG] [Thread-133541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:14:42.343 [DEBUG] [Thread-133541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:14:42.343 [DEBUG] [Thread-133541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:14:42.343 [DEBUG] [Thread-133541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:42.343 [DEBUG] [Thread-133541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] client lang: <none>
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] server lang: <none>
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] kex follows: False
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] Compression: none
2026-02-11T18:14:42.344 [DEBUG] [Thread-133541] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:14:42.401 [DEBUG] [Thread-133541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:14:42.402 [DEBUG] [Thread-133541] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:14:42.402 [DEBUG] [Thread-133541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:14:42.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:14:42.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:14:42.458 [DEBUG] [Thread-133541] [transport.py] [_log()] userauth is OK
2026-02-11T18:14:42.458 [DEBUG] [Thread-133541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:14:42.459 [DEBUG] [Thread-133541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:14:42.459 [DEBUG] [Thread-133541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:14:42.459 [DEBUG] [Thread-133541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:14:42.477 [INFO] [Thread-133541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:14:42.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:14:42.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:14:43.284 [DEBUG] [Thread-133541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:14:43.285 [DEBUG] [Thread-133541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:14:43.333 [DEBUG] [Thread-133541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:14:43.333 [DEBUG] [Thread-133541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:14:43.342 [DEBUG] [Thread-133541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:14:43.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:14:43.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:14:43.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:14:43.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:14:43.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:14:43.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:14:43.377 [DEBUG] [Thread-133541] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:14:56.344 [DEBUG] [Thread-133543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:14:57.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:14:57.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:15:11.405 [DEBUG] [Thread-133544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:15:13.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:15:13.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:15:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:15:15.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 15), 3.03, 82.62, 0.0, 24.88, 18.41, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:15:15.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:15:00
2026-02-11T18:15:15.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:15:15.990 [DEBUG] [Thread-133545] [transport.py] [_log()] starting thread (client mode): 0xa5771ea0
2026-02-11T18:15:15.990 [DEBUG] [Thread-133545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:15:16.010 [DEBUG] [Thread-133545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:15:16.010 [INFO] [Thread-133545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] client lang: <none>
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] server lang: <none>
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] kex follows: False
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] Compression: none
2026-02-11T18:15:16.014 [DEBUG] [Thread-133545] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:15:16.031 [DEBUG] [Thread-133545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:15:16.032 [DEBUG] [Thread-133545] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:15:16.032 [DEBUG] [Thread-133545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:15:16.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:15:16.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:15:16.034 [DEBUG] [Thread-133545] [transport.py] [_log()] userauth is OK
2026-02-11T18:15:16.035 [DEBUG] [Thread-133545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:15:16.035 [DEBUG] [Thread-133545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:15:16.035 [DEBUG] [Thread-133545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:15:16.035 [DEBUG] [Thread-133545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:15:16.056 [INFO] [Thread-133545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:15:16.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:15:16.749 [DEBUG] [Thread-133545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:15:16.750 [DEBUG] [Thread-133545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:15:16.750 [DEBUG] [Thread-133545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:15:16.790 [DEBUG] [Thread-133545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:15:16.791 [DEBUG] [Thread-133545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:15:16.794 [DEBUG] [Thread-133545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:15:16.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:15:16.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:15:16.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:15:16.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:15:16.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:15:16.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:15:16.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:15:16.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:15:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:15:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.676877 -999.00  +18.30  18.53     86  +16.10 1 3 1 2 1   887    0 -4.33 -353.82 ----- 19.1 18.5 295.0 22.0 19.6 -6.9 19.2 -4.9 18.2 -4.1 18.8 -4.3
2026-02-11T18:15:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:15:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:15:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.676877
2026-02-11T18:15:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:15:16.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:15:16.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:15:16.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:15:16.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:15:16.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:15:00', tmtdew=3.03, humidity=82.62, cloud=0.0, wind=24.88, temperature=18.41, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:14:42.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:15:16.824 [DEBUG] [Thread-133545] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:15:16.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:15:16.920 [DEBUG] [Thread-133548] [transport.py] [_log()] starting thread (client mode): 0xa57d63e0
2026-02-11T18:15:16.920 [DEBUG] [Thread-133548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:15:16.935 [DEBUG] [Thread-133548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:15:16.935 [INFO] [Thread-133548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:15:16.942 [DEBUG] [Thread-133548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] client lang: <none>
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] server lang: <none>
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] kex follows: False
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:15:16.943 [DEBUG] [Thread-133548] [transport.py] [_log()] Compression: none
2026-02-11T18:15:16.944 [DEBUG] [Thread-133548] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:15:17.002 [DEBUG] [Thread-133548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:15:17.003 [DEBUG] [Thread-133548] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:15:17.003 [DEBUG] [Thread-133548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:15:17.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:15:17.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:15:17.058 [DEBUG] [Thread-133548] [transport.py] [_log()] userauth is OK
2026-02-11T18:15:17.059 [DEBUG] [Thread-133548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:15:17.059 [DEBUG] [Thread-133548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:15:17.059 [DEBUG] [Thread-133548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:15:17.059 [DEBUG] [Thread-133548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:15:17.078 [INFO] [Thread-133548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:15:17.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:15:17.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:15:17.913 [DEBUG] [Thread-133548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:15:17.913 [DEBUG] [Thread-133548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:15:17.961 [DEBUG] [Thread-133548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:15:17.962 [DEBUG] [Thread-133548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:15:17.971 [DEBUG] [Thread-133548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:15:17.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:15: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')
2026-02-11T18:15:17.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:15:17.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:15:17.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:15:18.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:15:18.008 [DEBUG] [Thread-133548] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:15:26.441 [DEBUG] [Thread-133550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:15:29.853 [DEBUG] [Thread-133551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:15:41.492 [DEBUG] [Thread-133552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:15:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:15:48.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:15:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:15:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 15, 35), 3.46, 80.24, 0.0, 25.83, 18.81, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:15:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:15:35
2026-02-11T18:15:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:15:50.459 [DEBUG] [Thread-133553] [transport.py] [_log()] starting thread (client mode): 0xa5759780
2026-02-11T18:15:50.459 [DEBUG] [Thread-133553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:15:50.479 [DEBUG] [Thread-133553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:15:50.479 [INFO] [Thread-133553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:15:50.482 [DEBUG] [Thread-133553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] client lang: <none>
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] server lang: <none>
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] kex follows: False
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:15:50.483 [DEBUG] [Thread-133553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:15:50.484 [DEBUG] [Thread-133553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:15:50.484 [DEBUG] [Thread-133553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:15:50.484 [DEBUG] [Thread-133553] [transport.py] [_log()] Compression: none
2026-02-11T18:15:50.484 [DEBUG] [Thread-133553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:15:50.503 [DEBUG] [Thread-133553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:15:50.503 [DEBUG] [Thread-133553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:15:50.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:15:50.505 [DEBUG] [Thread-133553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:15:50.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:15:50.507 [DEBUG] [Thread-133553] [transport.py] [_log()] userauth is OK
2026-02-11T18:15:50.508 [DEBUG] [Thread-133553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:15:50.508 [DEBUG] [Thread-133553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:15:50.508 [DEBUG] [Thread-133553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:15:50.508 [DEBUG] [Thread-133553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:15:50.532 [INFO] [Thread-133553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:15:50.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:15:51.139 [DEBUG] [Thread-133553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:15:51.139 [DEBUG] [Thread-133553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:15:51.139 [DEBUG] [Thread-133553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:15:51.180 [DEBUG] [Thread-133553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:15:51.181 [DEBUG] [Thread-133553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:15:51.184 [DEBUG] [Thread-133553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:15:51.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:15:51.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:15:51.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:15:51.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:15:51.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:15:51.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:15:51.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:15:51.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:15:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:15:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.677224 -999.00  +18.20  23.82     85  +15.70 1 3 1 2 1   887    0 -4.64 -359.56 ----- 22.4 23.8 299.0 26.3 19.6 -6.0 19.2 -5.0 18.2 -3.9 18.7 -4.2
2026-02-11T18:15:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:15:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:15:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.677224
2026-02-11T18:15:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:15:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:15:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:15:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:15:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:15:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:15:35', tmtdew=3.46, humidity=80.24, cloud=0.0, wind=25.83, temperature=18.81, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:15:12.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:15:51.212 [DEBUG] [Thread-133553] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:15:51.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:15:51.309 [DEBUG] [Thread-133556] [transport.py] [_log()] starting thread (client mode): 0xa57404c0
2026-02-11T18:15:51.309 [DEBUG] [Thread-133556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:15:51.324 [DEBUG] [Thread-133556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:15:51.325 [INFO] [Thread-133556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:15:51.332 [DEBUG] [Thread-133556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:15:51.333 [DEBUG] [Thread-133556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:15:51.334 [DEBUG] [Thread-133556] [transport.py] [_log()] client lang: <none>
2026-02-11T18:15:51.334 [DEBUG] [Thread-133556] [transport.py] [_log()] server lang: <none>
2026-02-11T18:15:51.334 [DEBUG] [Thread-133556] [transport.py] [_log()] kex follows: False
2026-02-11T18:15:51.334 [DEBUG] [Thread-133556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:15:51.334 [DEBUG] [Thread-133556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:15:51.334 [DEBUG] [Thread-133556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:15:51.334 [DEBUG] [Thread-133556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:15:51.335 [DEBUG] [Thread-133556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:15:51.335 [DEBUG] [Thread-133556] [transport.py] [_log()] Compression: none
2026-02-11T18:15:51.335 [DEBUG] [Thread-133556] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:15:51.391 [DEBUG] [Thread-133556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:15:51.392 [DEBUG] [Thread-133556] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:15:51.392 [DEBUG] [Thread-133556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:15:51.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:15:51.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:15:51.450 [DEBUG] [Thread-133556] [transport.py] [_log()] userauth is OK
2026-02-11T18:15:51.451 [DEBUG] [Thread-133556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:15:51.451 [DEBUG] [Thread-133556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:15:51.451 [DEBUG] [Thread-133556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:15:51.451 [DEBUG] [Thread-133556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:15:51.470 [INFO] [Thread-133556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:15:51.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:15:51.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:15:52.370 [DEBUG] [Thread-133556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:15:52.370 [DEBUG] [Thread-133556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:15:52.418 [DEBUG] [Thread-133556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:15:52.418 [DEBUG] [Thread-133556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:15:52.428 [DEBUG] [Thread-133556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:15:52.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:15:52.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:15:52.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:15:52.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:15:52.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:15:52.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:15:52.464 [DEBUG] [Thread-133556] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:15:56.528 [DEBUG] [Thread-133558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:15:57.473 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:15:57.474 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:11.582 [DEBUG] [Thread-133559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:22.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:16:22.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:16:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:16:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 16, 12), 2.99, 82.84, 0.0, 21.09, 18.34, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:16:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:16:12
2026-02-11T18:16:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:16:25.264 [DEBUG] [Thread-133560] [transport.py] [_log()] starting thread (client mode): 0xa5771870
2026-02-11T18:16:25.264 [DEBUG] [Thread-133560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:16:25.283 [DEBUG] [Thread-133560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:16:25.283 [INFO] [Thread-133560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:16:25.286 [DEBUG] [Thread-133560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:16:25.286 [DEBUG] [Thread-133560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:16:25.286 [DEBUG] [Thread-133560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] client lang: <none>
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] server lang: <none>
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] kex follows: False
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] Compression: none
2026-02-11T18:16:25.287 [DEBUG] [Thread-133560] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:16:25.305 [DEBUG] [Thread-133560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:16:25.305 [DEBUG] [Thread-133560] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:16:25.306 [DEBUG] [Thread-133560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:16:25.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:16:25.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:16:25.308 [DEBUG] [Thread-133560] [transport.py] [_log()] userauth is OK
2026-02-11T18:16:25.308 [DEBUG] [Thread-133560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:16:25.308 [DEBUG] [Thread-133560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:16:25.308 [DEBUG] [Thread-133560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:16:25.308 [DEBUG] [Thread-133560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:16:25.326 [INFO] [Thread-133560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:16:25.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:16:25.915 [DEBUG] [Thread-133560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:16:25.915 [DEBUG] [Thread-133560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:16:25.916 [DEBUG] [Thread-133560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:16:25.956 [DEBUG] [Thread-133560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:16:25.957 [DEBUG] [Thread-133560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:16:25.959 [DEBUG] [Thread-133560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:16:25.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:16:25.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:16:25.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:16:25.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:16:25.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:16:25.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:16:25.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:16:25.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:16:25.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:16:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.677918 -999.00  +18.20  18.27     83  +15.40 1 3 1 2 1   887    0 -5.91 -396.03 ----- 20.0 18.3 301.8 26.6 19.6 -6.1 19.1 -5.2 18.2 -4.4 18.6 -4.4
2026-02-11T18:16:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:16:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:16:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.677918
2026-02-11T18:16:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:16:25.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:16:25.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:16:25.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:16:25.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:16:25.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:16:12', tmtdew=2.99, humidity=82.84, cloud=0.0, wind=21.09, temperature=18.34, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:16:12.115', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:16:25.987 [DEBUG] [Thread-133560] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:16:26.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:16:26.082 [DEBUG] [Thread-133563] [transport.py] [_log()] starting thread (client mode): 0xa57d6530
2026-02-11T18:16:26.083 [DEBUG] [Thread-133563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:16:26.097 [DEBUG] [Thread-133563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:16:26.097 [INFO] [Thread-133563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] client lang: <none>
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] server lang: <none>
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] kex follows: False
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:16:26.105 [DEBUG] [Thread-133563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:16:26.106 [DEBUG] [Thread-133563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:16:26.106 [DEBUG] [Thread-133563] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:16:26.106 [DEBUG] [Thread-133563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:16:26.106 [DEBUG] [Thread-133563] [transport.py] [_log()] Compression: none
2026-02-11T18:16:26.106 [DEBUG] [Thread-133563] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:16:26.169 [DEBUG] [Thread-133563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:16:26.169 [DEBUG] [Thread-133563] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:16:26.170 [DEBUG] [Thread-133563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:16:26.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:16:26.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:16:26.226 [DEBUG] [Thread-133563] [transport.py] [_log()] userauth is OK
2026-02-11T18:16:26.226 [DEBUG] [Thread-133563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:16:26.227 [DEBUG] [Thread-133563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:16:26.227 [DEBUG] [Thread-133563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:16:26.227 [DEBUG] [Thread-133563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:16:26.245 [INFO] [Thread-133563] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:16:26.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:16:26.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:16:26.618 [DEBUG] [Thread-133565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:27.119 [DEBUG] [Thread-133563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:16:27.119 [DEBUG] [Thread-133563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:16:27.167 [DEBUG] [Thread-133563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:16:27.168 [DEBUG] [Thread-133563] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:16:27.177 [DEBUG] [Thread-133563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:16:27.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:16:27.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:16:27.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:16:27.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:16:27.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:16:27.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:16:27.214 [DEBUG] [Thread-133563] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:16:29.907 [DEBUG] [Thread-133566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:41.681 [DEBUG] [Thread-133567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:56.715 [DEBUG] [Thread-133568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:57.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:16:57.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:16:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:16:57.616 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:57.618 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:16:59.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 16, 48), 2.97, 82.67, 0.0, 22.09, 18.51, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:16:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:16:48
2026-02-11T18:16:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:16:59.642 [DEBUG] [Thread-133569] [transport.py] [_log()] starting thread (client mode): 0xa5771ea0
2026-02-11T18:16:59.642 [DEBUG] [Thread-133569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:16:59.663 [DEBUG] [Thread-133569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:16:59.663 [INFO] [Thread-133569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:16:59.666 [DEBUG] [Thread-133569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] client lang: <none>
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] server lang: <none>
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] kex follows: False
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] Compression: none
2026-02-11T18:16:59.667 [DEBUG] [Thread-133569] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:16:59.685 [DEBUG] [Thread-133569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:16:59.685 [DEBUG] [Thread-133569] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:16:59.686 [DEBUG] [Thread-133569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:16:59.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:16:59.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:16:59.688 [DEBUG] [Thread-133569] [transport.py] [_log()] userauth is OK
2026-02-11T18:16:59.688 [DEBUG] [Thread-133569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:16:59.688 [DEBUG] [Thread-133569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:16:59.689 [DEBUG] [Thread-133569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:16:59.689 [DEBUG] [Thread-133569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:16:59.713 [INFO] [Thread-133569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:16:59.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:17:00.361 [DEBUG] [Thread-133569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:17:00.361 [DEBUG] [Thread-133569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:17:00.362 [DEBUG] [Thread-133569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:17:00.402 [DEBUG] [Thread-133569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:17:00.403 [DEBUG] [Thread-133569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:17:00.406 [DEBUG] [Thread-133569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:17:00.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:17:00.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:17:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:17:00.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:17:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:17:00.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:17:00.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:17:00.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.678266 -999.00  +18.30  19.36     85  +15.80 1 3 1 2 1   887    0 -5.42 -372.01 ----- 17.6 19.4 298.6 26.3 19.6 -6.1 19.1 -5.3 18.2 -3.6 18.6 -4.3
2026-02-11T18:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.678266
2026-02-11T18:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:17:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:17:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:17:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:16:48', tmtdew=2.97, humidity=82.67, cloud=0.0, wind=22.09, temperature=18.51, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:16:42.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:17:00.431 [DEBUG] [Thread-133569] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:17:00.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:17:00.524 [DEBUG] [Thread-133572] [transport.py] [_log()] starting thread (client mode): 0xa57d5d80
2026-02-11T18:17:00.524 [DEBUG] [Thread-133572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:17:00.542 [DEBUG] [Thread-133572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:17:00.543 [INFO] [Thread-133572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:17:00.550 [DEBUG] [Thread-133572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:17:00.551 [DEBUG] [Thread-133572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] client lang: <none>
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] server lang: <none>
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] kex follows: False
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:17:00.552 [DEBUG] [Thread-133572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:17:00.553 [DEBUG] [Thread-133572] [transport.py] [_log()] Compression: none
2026-02-11T18:17:00.553 [DEBUG] [Thread-133572] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:17:00.610 [DEBUG] [Thread-133572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:17:00.611 [DEBUG] [Thread-133572] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:17:00.611 [DEBUG] [Thread-133572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:17:00.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:17:00.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:17:00.669 [DEBUG] [Thread-133572] [transport.py] [_log()] userauth is OK
2026-02-11T18:17:00.670 [DEBUG] [Thread-133572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:17:00.670 [DEBUG] [Thread-133572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:17:00.670 [DEBUG] [Thread-133572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:17:00.670 [DEBUG] [Thread-133572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:17:00.689 [INFO] [Thread-133572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:17:00.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:17:00.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:17:01.521 [DEBUG] [Thread-133572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:17:01.521 [DEBUG] [Thread-133572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:17:01.569 [DEBUG] [Thread-133572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:17:01.570 [DEBUG] [Thread-133572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:17:01.579 [DEBUG] [Thread-133572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:17:01.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:17:01.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:17:01.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
2026-02-11T18:17:01.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:17:01.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:17:01.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:17:01.617 [DEBUG] [Thread-133572] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:17:11.755 [DEBUG] [Thread-133574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:17:26.816 [DEBUG] [Thread-133575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:17:29.956 [DEBUG] [Thread-133576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:17:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:17:31.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:17:31.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:17:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 17, 25), 3.02, 82.44, 0.0, 21.74, 18.46, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:17:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:17:25
2026-02-11T18:17:34.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:17:34.249 [DEBUG] [Thread-133577] [transport.py] [_log()] starting thread (client mode): 0xa575af20
2026-02-11T18:17:34.249 [DEBUG] [Thread-133577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:17:34.269 [DEBUG] [Thread-133577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:17:34.270 [INFO] [Thread-133577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:17:34.272 [DEBUG] [Thread-133577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] client lang: <none>
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] server lang: <none>
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] kex follows: False
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] Compression: none
2026-02-11T18:17:34.273 [DEBUG] [Thread-133577] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:17:34.291 [DEBUG] [Thread-133577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:17:34.291 [DEBUG] [Thread-133577] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:17:34.292 [DEBUG] [Thread-133577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:17:34.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:17:34.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:17:34.294 [DEBUG] [Thread-133577] [transport.py] [_log()] userauth is OK
2026-02-11T18:17:34.294 [DEBUG] [Thread-133577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:17:34.294 [DEBUG] [Thread-133577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:17:34.294 [DEBUG] [Thread-133577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:17:34.294 [DEBUG] [Thread-133577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:17:34.320 [INFO] [Thread-133577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:17:34.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:17:34.971 [DEBUG] [Thread-133577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:17:34.971 [DEBUG] [Thread-133577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:17:34.972 [DEBUG] [Thread-133577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:17:35.012 [DEBUG] [Thread-133577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:17:35.013 [DEBUG] [Thread-133577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:17:35.016 [DEBUG] [Thread-133577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:17:35.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:17:35.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:17:35.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:17:35.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:17:35.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:17:35.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:17:35.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:17:35.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:17:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:17:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.678613 -999.00  +18.30  21.45     85  +15.90 1 3 1 2 1   887    0 -5.14 -362.38 ----- 20.2 21.4 287.2 24.1 19.6 -5.7 19.1 -4.8 18.4 -3.1 18.7 -3.8
2026-02-11T18:17:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:17:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:17:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.678613
2026-02-11T18:17:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:17:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:17:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:17:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:17:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:17:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:17:25', tmtdew=3.02, humidity=82.44, cloud=0.0, wind=21.74, temperature=18.46, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:17:12.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:17:35.043 [DEBUG] [Thread-133577] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:17:35.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:17:35.139 [DEBUG] [Thread-133580] [transport.py] [_log()] starting thread (client mode): 0xa57598d0
2026-02-11T18:17:35.139 [DEBUG] [Thread-133580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:17:35.154 [DEBUG] [Thread-133580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:17:35.154 [INFO] [Thread-133580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:17:35.162 [DEBUG] [Thread-133580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:17:35.162 [DEBUG] [Thread-133580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:17:35.162 [DEBUG] [Thread-133580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:17:35.162 [DEBUG] [Thread-133580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:17:35.163 [DEBUG] [Thread-133580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:17:35.163 [DEBUG] [Thread-133580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:17:35.163 [DEBUG] [Thread-133580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:17:35.163 [DEBUG] [Thread-133580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:17:35.163 [DEBUG] [Thread-133580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:17:35.163 [DEBUG] [Thread-133580] [transport.py] [_log()] client lang: <none>
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] server lang: <none>
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] kex follows: False
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] Compression: none
2026-02-11T18:17:35.164 [DEBUG] [Thread-133580] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:17:35.221 [DEBUG] [Thread-133580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:17:35.222 [DEBUG] [Thread-133580] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:17:35.222 [DEBUG] [Thread-133580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:17:35.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:17:35.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:17:35.277 [DEBUG] [Thread-133580] [transport.py] [_log()] userauth is OK
2026-02-11T18:17:35.278 [DEBUG] [Thread-133580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:17:35.278 [DEBUG] [Thread-133580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:17:35.278 [DEBUG] [Thread-133580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:17:35.278 [DEBUG] [Thread-133580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:17:35.296 [INFO] [Thread-133580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:17:35.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:17:35.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:17:36.133 [DEBUG] [Thread-133580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:17:36.134 [DEBUG] [Thread-133580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:17:36.181 [DEBUG] [Thread-133580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:17:36.181 [DEBUG] [Thread-133580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:17:36.191 [DEBUG] [Thread-133580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:17:36.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:17:36.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')
2026-02-11T18:17:36.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:17:36.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:17:36.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:17:36.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:17:36.228 [DEBUG] [Thread-133580] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:17:41.852 [DEBUG] [Thread-133582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:17:56.905 [DEBUG] [Thread-133583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:17:57.758 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:17:57.760 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:18:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:18:06.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:18:06.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:18:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 17, 25), 3.02, 82.44, 0.0, 21.74, 18.46, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:18:08.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:17:25
2026-02-11T18:18:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:18:08.642 [DEBUG] [Thread-133584] [transport.py] [_log()] starting thread (client mode): 0xa57d63e0
2026-02-11T18:18:08.642 [DEBUG] [Thread-133584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:18:08.663 [DEBUG] [Thread-133584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:18:08.663 [INFO] [Thread-133584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:18:08.664 [DEBUG] [Thread-133584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:18:08.664 [DEBUG] [Thread-133584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] client lang: <none>
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] server lang: <none>
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] kex follows: False
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] Compression: none
2026-02-11T18:18:08.665 [DEBUG] [Thread-133584] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:18:08.679 [DEBUG] [Thread-133584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:18:08.680 [DEBUG] [Thread-133584] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:18:08.680 [DEBUG] [Thread-133584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:18:08.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:18:08.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:18:08.683 [DEBUG] [Thread-133584] [transport.py] [_log()] userauth is OK
2026-02-11T18:18:08.683 [DEBUG] [Thread-133584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:18:08.683 [DEBUG] [Thread-133584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:18:08.683 [DEBUG] [Thread-133584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:18:08.683 [DEBUG] [Thread-133584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:18:08.708 [INFO] [Thread-133584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:18:08.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:18:09.343 [DEBUG] [Thread-133584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:18:09.343 [DEBUG] [Thread-133584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:18:09.343 [DEBUG] [Thread-133584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:18:09.384 [DEBUG] [Thread-133584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:18:09.385 [DEBUG] [Thread-133584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:18:09.388 [DEBUG] [Thread-133584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:18:09.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:18:09.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:18:09.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:18:09.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:18:09.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:18:09.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:18:09.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:18:09.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:18:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:18:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.678960 -999.00  +18.30  21.92     84  +15.70 1 3 1 2 1   887    0 -5.87 -380.21 ----- 21.6 21.9 294.6 26.8 19.6 -5.8 19.2 -5.1 18.4 -3.7 18.7 -4.2
2026-02-11T18:18:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:18:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:18:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.678960
2026-02-11T18:18:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:18:09.414 [DEBUG] [Thread-133584] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:18:09.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:18:09.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:18:09.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:18:09.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:18:09.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:17:25', tmtdew=3.02, humidity=82.44, cloud=0.0, wind=21.74, temperature=18.46, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:17:42.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:18:09.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:18:09.511 [DEBUG] [Thread-133587] [transport.py] [_log()] starting thread (client mode): 0xa5741c90
2026-02-11T18:18:09.512 [DEBUG] [Thread-133587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:18:09.526 [DEBUG] [Thread-133587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:18:09.526 [INFO] [Thread-133587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:18:09.534 [DEBUG] [Thread-133587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] client lang: <none>
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] server lang: <none>
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] kex follows: False
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] Compression: none
2026-02-11T18:18:09.535 [DEBUG] [Thread-133587] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:18:09.594 [DEBUG] [Thread-133587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:18:09.595 [DEBUG] [Thread-133587] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:18:09.595 [DEBUG] [Thread-133587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:18:09.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:18:09.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:18:09.653 [DEBUG] [Thread-133587] [transport.py] [_log()] userauth is OK
2026-02-11T18:18:09.654 [DEBUG] [Thread-133587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:18:09.654 [DEBUG] [Thread-133587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:18:09.654 [DEBUG] [Thread-133587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:18:09.654 [DEBUG] [Thread-133587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:18:09.673 [INFO] [Thread-133587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:18:09.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:18:09.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:18:10.521 [DEBUG] [Thread-133587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:18:10.522 [DEBUG] [Thread-133587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:18:10.569 [DEBUG] [Thread-133587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:18:10.570 [DEBUG] [Thread-133587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:18:10.580 [DEBUG] [Thread-133587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:18:10.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:18:10.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:18:10.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:18:10.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:18:10.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:18:10.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:18:10.623 [DEBUG] [Thread-133587] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:18:11.941 [DEBUG] [Thread-133589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:18:26.998 [DEBUG] [Thread-133590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:18:30.023 [DEBUG] [Thread-133591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:18:40.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:18:40.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:18:40.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
2026-02-11T18:18:42.037 [DEBUG] [Thread-133592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:18:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 18, 1), 3.03, 82.36, 0.0, 22.53, 18.52, 0, 1, 2, 2, 0, 0),)
2026-02-11T18:18:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:18:01
2026-02-11T18:18:43.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:18:43.305 [DEBUG] [Thread-133593] [transport.py] [_log()] starting thread (client mode): 0xa2dc11e0
2026-02-11T18:18:43.306 [DEBUG] [Thread-133593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:18:43.327 [DEBUG] [Thread-133593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:18:43.327 [INFO] [Thread-133593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:18:43.330 [DEBUG] [Thread-133593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:18:43.330 [DEBUG] [Thread-133593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:18:43.330 [DEBUG] [Thread-133593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:18:43.330 [DEBUG] [Thread-133593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:43.330 [DEBUG] [Thread-133593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:43.330 [DEBUG] [Thread-133593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] client lang: <none>
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] server lang: <none>
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] kex follows: False
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] Compression: none
2026-02-11T18:18:43.331 [DEBUG] [Thread-133593] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:18:43.349 [DEBUG] [Thread-133593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:18:43.349 [DEBUG] [Thread-133593] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:18:43.350 [DEBUG] [Thread-133593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:18:43.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:18:43.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:18:43.352 [DEBUG] [Thread-133593] [transport.py] [_log()] userauth is OK
2026-02-11T18:18:43.352 [DEBUG] [Thread-133593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:18:43.352 [DEBUG] [Thread-133593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:18:43.352 [DEBUG] [Thread-133593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:18:43.352 [DEBUG] [Thread-133593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:18:43.368 [INFO] [Thread-133593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:18:43.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:18:44.007 [DEBUG] [Thread-133593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:18:44.007 [DEBUG] [Thread-133593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:18:44.007 [DEBUG] [Thread-133593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:18:44.048 [DEBUG] [Thread-133593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:18:44.049 [DEBUG] [Thread-133593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:18:44.052 [DEBUG] [Thread-133593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:18:44.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:18:44.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:18:44.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:18:44.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:18:44.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:18:44.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:18:44.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:18:44.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:18:44.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:18:44.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.679307 -999.00  +18.40  20.64     85  +15.80 1 3 1 2 1   887    0 -6.89 -407.85 ----- 18.7 20.6 290.0 25.7 19.7 -5.8 19.3 -5.0 18.5 -4.1 18.8 -4.3
2026-02-11T18:18:44.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:18:44.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:18:44.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.679307
2026-02-11T18:18:44.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:18:44.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:18:44.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:18:44.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:18:44.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:18:44.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:18:01', tmtdew=3.03, humidity=82.36, cloud=0.0, wind=22.53, temperature=18.52, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:18:12.125', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:18:44.079 [DEBUG] [Thread-133593] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:18:44.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:18:44.175 [DEBUG] [Thread-133596] [transport.py] [_log()] starting thread (client mode): 0xa57c0250
2026-02-11T18:18:44.175 [DEBUG] [Thread-133596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:18:44.190 [DEBUG] [Thread-133596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:18:44.190 [INFO] [Thread-133596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] client lang: <none>
2026-02-11T18:18:44.197 [DEBUG] [Thread-133596] [transport.py] [_log()] server lang: <none>
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] kex follows: False
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] Compression: none
2026-02-11T18:18:44.198 [DEBUG] [Thread-133596] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:18:44.256 [DEBUG] [Thread-133596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:18:44.257 [DEBUG] [Thread-133596] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:18:44.257 [DEBUG] [Thread-133596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:18:44.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:18:44.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:18:44.317 [DEBUG] [Thread-133596] [transport.py] [_log()] userauth is OK
2026-02-11T18:18:44.318 [DEBUG] [Thread-133596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:18:44.318 [DEBUG] [Thread-133596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:18:44.318 [DEBUG] [Thread-133596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:18:44.318 [DEBUG] [Thread-133596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:18:44.337 [INFO] [Thread-133596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:18:44.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:18:44.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:18:45.167 [DEBUG] [Thread-133596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:18:45.168 [DEBUG] [Thread-133596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:18:45.215 [DEBUG] [Thread-133596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:18:45.215 [DEBUG] [Thread-133596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:18:45.224 [DEBUG] [Thread-133596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:18:45.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:18:45.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:18:45.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:18:45.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:18:45.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:18:45.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:18:45.258 [DEBUG] [Thread-133596] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:18:57.074 [DEBUG] [Thread-133598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:18:57.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:18:57.899 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:19:12.127 [DEBUG] [Thread-133599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:19:15.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:19:15.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:19:15.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:19:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 18, 36), 3.7, 79.05, 0.0, 22.65, 18.92, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:19:17.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:18:36
2026-02-11T18:19:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:19:18.030 [DEBUG] [Thread-133600] [transport.py] [_log()] starting thread (client mode): 0x9eb05f60
2026-02-11T18:19:18.030 [DEBUG] [Thread-133600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:19:18.050 [DEBUG] [Thread-133600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:19:18.050 [INFO] [Thread-133600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:19:18.053 [DEBUG] [Thread-133600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:19:18.053 [DEBUG] [Thread-133600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:19:18.053 [DEBUG] [Thread-133600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:19:18.053 [DEBUG] [Thread-133600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] client lang: <none>
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] server lang: <none>
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] kex follows: False
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] Compression: none
2026-02-11T18:19:18.054 [DEBUG] [Thread-133600] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:19:18.064 [DEBUG] [Thread-133600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:19:18.064 [DEBUG] [Thread-133600] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:19:18.065 [DEBUG] [Thread-133600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:19:18.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:19:18.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:19:18.067 [DEBUG] [Thread-133600] [transport.py] [_log()] userauth is OK
2026-02-11T18:19:18.067 [DEBUG] [Thread-133600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:19:18.067 [DEBUG] [Thread-133600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:19:18.067 [DEBUG] [Thread-133600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:19:18.067 [DEBUG] [Thread-133600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:19:18.091 [INFO] [Thread-133600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:19:18.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:19:18.819 [DEBUG] [Thread-133600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:19:18.819 [DEBUG] [Thread-133600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:19:18.820 [DEBUG] [Thread-133600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:19:18.860 [DEBUG] [Thread-133600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:19:18.861 [DEBUG] [Thread-133600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:19:18.864 [DEBUG] [Thread-133600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:19:18.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:19:18.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:19:18.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:19:18.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:19:18.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:19:18.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:19:18.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:19:18.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:19:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:19:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.679655 -999.00  +18.40  21.28     83  +15.50 1 3 1 2 1   887    0 -6.54 -392.08 ----- 18.6 21.3 300.0 24.5 19.7 -5.8 19.3 -5.1 18.6 -3.8 18.8 -5.0
2026-02-11T18:19:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:19:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:19:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.679655
2026-02-11T18:19:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:19:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:19:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:19:18.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:19:18.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:19:18.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:18:36', tmtdew=3.7, humidity=79.05, cloud=0.0, wind=22.65, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:18:42.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:19:18.892 [DEBUG] [Thread-133600] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:19:18.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:19:18.984 [DEBUG] [Thread-133603] [transport.py] [_log()] starting thread (client mode): 0xa57b1090
2026-02-11T18:19:18.985 [DEBUG] [Thread-133603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:19:18.998 [DEBUG] [Thread-133603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:19:18.998 [INFO] [Thread-133603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:19:19.006 [DEBUG] [Thread-133603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:19:19.006 [DEBUG] [Thread-133603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:19:19.006 [DEBUG] [Thread-133603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:19:19.006 [DEBUG] [Thread-133603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:19.006 [DEBUG] [Thread-133603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] client lang: <none>
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] server lang: <none>
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] kex follows: False
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] Compression: none
2026-02-11T18:19:19.007 [DEBUG] [Thread-133603] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:19:19.062 [DEBUG] [Thread-133603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:19:19.063 [DEBUG] [Thread-133603] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:19:19.063 [DEBUG] [Thread-133603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:19:19.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:19:19.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:19:19.120 [DEBUG] [Thread-133603] [transport.py] [_log()] userauth is OK
2026-02-11T18:19:19.121 [DEBUG] [Thread-133603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:19:19.121 [DEBUG] [Thread-133603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:19:19.121 [DEBUG] [Thread-133603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:19:19.121 [DEBUG] [Thread-133603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:19:19.139 [INFO] [Thread-133603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:19:19.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:19:19.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:19:19.971 [DEBUG] [Thread-133603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:19:19.971 [DEBUG] [Thread-133603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:19:20.019 [DEBUG] [Thread-133603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:19:20.019 [DEBUG] [Thread-133603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:19:20.028 [DEBUG] [Thread-133603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:19:20.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:19:20.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:19:20.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
2026-02-11T18:19:20.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:19:20.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:19:20.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:19:20.062 [DEBUG] [Thread-133603] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:19:27.164 [DEBUG] [Thread-133605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:19:30.088 [DEBUG] [Thread-133606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:19:42.227 [DEBUG] [Thread-133607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:19:50.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:19:50.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:19:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:19:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 19, 12), 3.33, 81.09, 0.0, 22.27, 18.52, 0, 1, 0, 2, 0, 0),)
2026-02-11T18:19:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:19:12
2026-02-11T18:19:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:19:53.147 [DEBUG] [Thread-133608] [transport.py] [_log()] starting thread (client mode): 0x9eb06a70
2026-02-11T18:19:53.147 [DEBUG] [Thread-133608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:19:53.166 [DEBUG] [Thread-133608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:19:53.166 [INFO] [Thread-133608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] client lang: <none>
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] server lang: <none>
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] kex follows: False
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] Compression: none
2026-02-11T18:19:53.170 [DEBUG] [Thread-133608] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:19:53.186 [DEBUG] [Thread-133608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:19:53.187 [DEBUG] [Thread-133608] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:19:53.187 [DEBUG] [Thread-133608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:19:53.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:19:53.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:19:53.189 [DEBUG] [Thread-133608] [transport.py] [_log()] userauth is OK
2026-02-11T18:19:53.189 [DEBUG] [Thread-133608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:19:53.189 [DEBUG] [Thread-133608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:19:53.189 [DEBUG] [Thread-133608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:19:53.189 [DEBUG] [Thread-133608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:19:53.213 [INFO] [Thread-133608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:19:53.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:19:53.863 [DEBUG] [Thread-133608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:19:53.863 [DEBUG] [Thread-133608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:19:53.864 [DEBUG] [Thread-133608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:19:53.904 [DEBUG] [Thread-133608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:19:53.905 [DEBUG] [Thread-133608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:19:53.907 [DEBUG] [Thread-133608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:19:53.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:19:53.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:19:53.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:19:53.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:19:53.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:19:53.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:19:53.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:19:53.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:19:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:19:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.680002 -999.00  +18.40  16.12     84  +15.80 1 3 1 2 1   887    0 -6.19 -376.08 ----- 17.6 16.1 288.9 24.5 19.7 -5.8 19.4 -5.1 18.7 -4.0 18.8 -4.8
2026-02-11T18:19:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:19:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:19:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.680002
2026-02-11T18:19:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:19:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:19:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:19:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:19:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:19:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:19:12', tmtdew=3.33, humidity=81.09, cloud=0.0, wind=22.27, temperature=18.52, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:19:12.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:19:53.931 [DEBUG] [Thread-133608] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:19:54.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:19:54.027 [DEBUG] [Thread-133611] [transport.py] [_log()] starting thread (client mode): 0xa57b1ff0
2026-02-11T18:19:54.027 [DEBUG] [Thread-133611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:19:54.042 [DEBUG] [Thread-133611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:19:54.042 [INFO] [Thread-133611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:19:54.049 [DEBUG] [Thread-133611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:19:54.050 [DEBUG] [Thread-133611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:19:54.050 [DEBUG] [Thread-133611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:19:54.050 [DEBUG] [Thread-133611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:54.050 [DEBUG] [Thread-133611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:19:54.050 [DEBUG] [Thread-133611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:54.050 [DEBUG] [Thread-133611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:19:54.050 [DEBUG] [Thread-133611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:19:54.051 [DEBUG] [Thread-133611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:19:54.051 [DEBUG] [Thread-133611] [transport.py] [_log()] client lang: <none>
2026-02-11T18:19:54.051 [DEBUG] [Thread-133611] [transport.py] [_log()] server lang: <none>
2026-02-11T18:19:54.051 [DEBUG] [Thread-133611] [transport.py] [_log()] kex follows: False
2026-02-11T18:19:54.051 [DEBUG] [Thread-133611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:19:54.051 [DEBUG] [Thread-133611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:19:54.051 [DEBUG] [Thread-133611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:19:54.052 [DEBUG] [Thread-133611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:19:54.052 [DEBUG] [Thread-133611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:19:54.052 [DEBUG] [Thread-133611] [transport.py] [_log()] Compression: none
2026-02-11T18:19:54.052 [DEBUG] [Thread-133611] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:19:54.107 [DEBUG] [Thread-133611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:19:54.108 [DEBUG] [Thread-133611] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:19:54.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:19:54.109 [DEBUG] [Thread-133611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:19:54.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:19:54.166 [DEBUG] [Thread-133611] [transport.py] [_log()] userauth is OK
2026-02-11T18:19:54.167 [DEBUG] [Thread-133611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:19:54.167 [DEBUG] [Thread-133611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:19:54.167 [DEBUG] [Thread-133611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:19:54.167 [DEBUG] [Thread-133611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:19:54.186 [INFO] [Thread-133611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:19:54.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:19:54.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:19:55.001 [DEBUG] [Thread-133611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:19:55.001 [DEBUG] [Thread-133611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:19:55.050 [DEBUG] [Thread-133611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:19:55.050 [DEBUG] [Thread-133611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:19:55.059 [DEBUG] [Thread-133611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:19:55.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:19:55.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:19:55.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:19:55.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:19:55.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:19:55.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:19:55.095 [DEBUG] [Thread-133611] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:19:57.264 [DEBUG] [Thread-133613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:19:58.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:19:58.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:12.325 [DEBUG] [Thread-133614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:25.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:20:25.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:20:25.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:20:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 19, 48), 3.48, 80.37, 0.0, 19.39, 18.61, 0, 1, 0, 2, 0, 0),)
2026-02-11T18:20:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:19:48
2026-02-11T18:20:27.363 [DEBUG] [Thread-133615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:20:27.606 [DEBUG] [Thread-133616] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-11T18:20:27.606 [DEBUG] [Thread-133616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:20:27.626 [DEBUG] [Thread-133616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:20:27.626 [INFO] [Thread-133616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:20:27.629 [DEBUG] [Thread-133616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:20:27.630 [DEBUG] [Thread-133616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:20:27.630 [DEBUG] [Thread-133616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:20:27.630 [DEBUG] [Thread-133616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:20:27.630 [DEBUG] [Thread-133616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:20:27.630 [DEBUG] [Thread-133616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:20:27.630 [DEBUG] [Thread-133616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:20:27.630 [DEBUG] [Thread-133616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] client lang: <none>
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] server lang: <none>
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] kex follows: False
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] Compression: none
2026-02-11T18:20:27.631 [DEBUG] [Thread-133616] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:20:27.649 [DEBUG] [Thread-133616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:20:27.649 [DEBUG] [Thread-133616] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:20:27.650 [DEBUG] [Thread-133616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:20:27.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:20:27.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:20:27.652 [DEBUG] [Thread-133616] [transport.py] [_log()] userauth is OK
2026-02-11T18:20:27.652 [DEBUG] [Thread-133616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:20:27.652 [DEBUG] [Thread-133616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:20:27.652 [DEBUG] [Thread-133616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:20:27.652 [DEBUG] [Thread-133616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:20:27.676 [INFO] [Thread-133616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:20:27.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:20:28.339 [DEBUG] [Thread-133616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:20:28.340 [DEBUG] [Thread-133616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:20:28.340 [DEBUG] [Thread-133616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:20:28.380 [DEBUG] [Thread-133616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:20:28.380 [DEBUG] [Thread-133616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:20:28.383 [DEBUG] [Thread-133616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:20:28.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:20:28.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:20:28.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:20:28.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:20:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:20:28.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:20:28.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:20:28.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:20:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:20:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.680349 -999.00  +18.50  17.41     82  +15.40 1 3 1 2 1   887    0 -6.83 -394.92 ----- 17.6 17.4 286.2 24.1 19.7 -5.9 19.4 -5.2 18.7 -4.4 18.9 -5.0
2026-02-11T18:20:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:20:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:20:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.680349
2026-02-11T18:20:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:20:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:20:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:20:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:20:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:20:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:19:48', tmtdew=3.48, humidity=80.37, cloud=0.0, wind=19.39, temperature=18.61, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:19:42.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:20:28.410 [DEBUG] [Thread-133616] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:20:28.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:20:28.504 [DEBUG] [Thread-133619] [transport.py] [_log()] starting thread (client mode): 0x9eb06ec0
2026-02-11T18:20:28.505 [DEBUG] [Thread-133619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:20:28.519 [DEBUG] [Thread-133619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:20:28.519 [INFO] [Thread-133619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:20:28.527 [DEBUG] [Thread-133619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] client lang: <none>
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] server lang: <none>
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] kex follows: False
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] Compression: none
2026-02-11T18:20:28.528 [DEBUG] [Thread-133619] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:20:28.586 [DEBUG] [Thread-133619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:20:28.586 [DEBUG] [Thread-133619] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:20:28.587 [DEBUG] [Thread-133619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:20:28.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:20:28.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:20:28.644 [DEBUG] [Thread-133619] [transport.py] [_log()] userauth is OK
2026-02-11T18:20:28.644 [DEBUG] [Thread-133619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:20:28.644 [DEBUG] [Thread-133619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:20:28.644 [DEBUG] [Thread-133619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:20:28.644 [DEBUG] [Thread-133619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:20:28.664 [INFO] [Thread-133619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:20:28.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:20:28.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:20:29.508 [DEBUG] [Thread-133619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:20:29.508 [DEBUG] [Thread-133619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:20:29.556 [DEBUG] [Thread-133619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:20:29.556 [DEBUG] [Thread-133619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:20:29.565 [DEBUG] [Thread-133619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:20:29.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:20:29.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:20:29.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:20:29.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:20:29.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:20:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:20:29.601 [DEBUG] [Thread-133619] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:20:30.139 [DEBUG] [Thread-133621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:42.400 [DEBUG] [Thread-133622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:57.454 [DEBUG] [Thread-133623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:58.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:58.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:20:59.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:20:59.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:20:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:21:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 20, 24), 3.55, 80.05, 0.0, 20.15, 18.71, 0, 1, 0, 2, 0, 0),)
2026-02-11T18:21:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:20:24
2026-02-11T18:21:01.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:21:02.067 [DEBUG] [Thread-133624] [transport.py] [_log()] starting thread (client mode): 0xa57c1510
2026-02-11T18:21:02.067 [DEBUG] [Thread-133624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:21:02.088 [DEBUG] [Thread-133624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:21:02.088 [INFO] [Thread-133624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:21:02.091 [DEBUG] [Thread-133624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] client lang: <none>
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] server lang: <none>
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] kex follows: False
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] Compression: none
2026-02-11T18:21:02.092 [DEBUG] [Thread-133624] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:21:02.111 [DEBUG] [Thread-133624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:21:02.112 [DEBUG] [Thread-133624] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:21:02.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:21:02.113 [DEBUG] [Thread-133624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:21:02.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:21:02.115 [DEBUG] [Thread-133624] [transport.py] [_log()] userauth is OK
2026-02-11T18:21:02.115 [DEBUG] [Thread-133624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:21:02.115 [DEBUG] [Thread-133624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:21:02.115 [DEBUG] [Thread-133624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:21:02.115 [DEBUG] [Thread-133624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:21:02.135 [INFO] [Thread-133624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:21:02.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:21:02.870 [DEBUG] [Thread-133624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:21:02.870 [DEBUG] [Thread-133624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:21:02.870 [DEBUG] [Thread-133624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:21:02.912 [DEBUG] [Thread-133624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:21:02.912 [DEBUG] [Thread-133624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:21:02.914 [DEBUG] [Thread-133624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:21:02.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:21:02.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:21:02.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:21:02.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:21:02.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:21:02.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:21:02.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:21:02.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:21:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:21:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.680696 -999.00  +18.60  19.40     81  +15.40 1 3 1 2 1   887    0 -6.67 -388.89 ----- 18.4 19.4 293.0 22.8 19.8 -6.0 19.4 -5.1 18.7 -4.1 18.9 -5.0
2026-02-11T18:21:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:21:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:21:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.680696
2026-02-11T18:21:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:21:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:21:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:21:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:21:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:21:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:20:24', tmtdew=3.55, humidity=80.05, cloud=0.0, wind=20.15, temperature=18.71, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:20:12.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:21:02.935 [DEBUG] [Thread-133624] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:21:03.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:21:03.026 [DEBUG] [Thread-133627] [transport.py] [_log()] starting thread (client mode): 0xa5740610
2026-02-11T18:21:03.027 [DEBUG] [Thread-133627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:21:03.041 [DEBUG] [Thread-133627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:21:03.041 [INFO] [Thread-133627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:21:03.048 [DEBUG] [Thread-133627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:21:03.048 [DEBUG] [Thread-133627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] client lang: <none>
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] server lang: <none>
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] kex follows: False
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:21:03.049 [DEBUG] [Thread-133627] [transport.py] [_log()] Compression: none
2026-02-11T18:21:03.050 [DEBUG] [Thread-133627] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:21:03.108 [DEBUG] [Thread-133627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:21:03.108 [DEBUG] [Thread-133627] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:21:03.109 [DEBUG] [Thread-133627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:21:03.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:21:03.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:21:03.168 [DEBUG] [Thread-133627] [transport.py] [_log()] userauth is OK
2026-02-11T18:21:03.168 [DEBUG] [Thread-133627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:21:03.168 [DEBUG] [Thread-133627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:21:03.168 [DEBUG] [Thread-133627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:21:03.168 [DEBUG] [Thread-133627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:21:03.188 [INFO] [Thread-133627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:21:03.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:21:03.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:21:04.029 [DEBUG] [Thread-133627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:21:04.030 [DEBUG] [Thread-133627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:21:04.080 [DEBUG] [Thread-133627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:21:04.081 [DEBUG] [Thread-133627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:21:04.092 [DEBUG] [Thread-133627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:21:04.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:21:04.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:21:04.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:21:04.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:21:04.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:21:04.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:21:04.138 [DEBUG] [Thread-133627] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:21:12.490 [DEBUG] [Thread-133629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:21:27.551 [DEBUG] [Thread-133630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:21:30.213 [DEBUG] [Thread-133631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:21:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:21:34.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:21:34.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:21:36.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 21), 3.99, 77.86, 0.0, 20.63, 18.82, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:21:36.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:21:00
2026-02-11T18:21:36.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:21:36.731 [DEBUG] [Thread-133632] [transport.py] [_log()] starting thread (client mode): 0xa2db4f10
2026-02-11T18:21:36.731 [DEBUG] [Thread-133632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:21:36.753 [DEBUG] [Thread-133632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:21:36.753 [INFO] [Thread-133632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] client lang: <none>
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] server lang: <none>
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] kex follows: False
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] Compression: none
2026-02-11T18:21:36.756 [DEBUG] [Thread-133632] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:21:36.773 [DEBUG] [Thread-133632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:21:36.774 [DEBUG] [Thread-133632] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:21:36.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:21:36.775 [DEBUG] [Thread-133632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:21:36.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:21:36.777 [DEBUG] [Thread-133632] [transport.py] [_log()] userauth is OK
2026-02-11T18:21:36.777 [DEBUG] [Thread-133632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:21:36.777 [DEBUG] [Thread-133632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:21:36.777 [DEBUG] [Thread-133632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:21:36.777 [DEBUG] [Thread-133632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:21:36.802 [INFO] [Thread-133632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:21:36.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:21:37.404 [DEBUG] [Thread-133632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:21:37.404 [DEBUG] [Thread-133632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:21:37.405 [DEBUG] [Thread-133632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:21:37.445 [DEBUG] [Thread-133632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:21:37.446 [DEBUG] [Thread-133632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:21:37.449 [DEBUG] [Thread-133632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:21:37.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:21:37.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:21:37.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:21:37.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:21:37.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:21:37.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:21:37.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:21:37.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:21:37.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:21:37.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.681043 -999.00  +18.70  17.62     80  +15.30 1 3 1 2 1   887    0 -5.91 -363.95 ----- 17.7 17.6 284.0 23.8 19.8 -5.6 19.5 -4.8 18.8 -4.4 19.0 -4.9
2026-02-11T18:21:37.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:21:37.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:21:37.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.681043
2026-02-11T18:21:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:21:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:21:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:21:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:21:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:21:37.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:21:00', tmtdew=3.99, humidity=77.86, cloud=0.0, wind=20.63, temperature=18.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:20:42.115', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:21:37.477 [DEBUG] [Thread-133632] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:21:37.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:21:37.572 [DEBUG] [Thread-133635] [transport.py] [_log()] starting thread (client mode): 0xa57b1180
2026-02-11T18:21:37.572 [DEBUG] [Thread-133635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:21:37.586 [DEBUG] [Thread-133635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:21:37.586 [INFO] [Thread-133635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:21:37.594 [DEBUG] [Thread-133635] [transport.py] [_log()] client lang: <none>
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] server lang: <none>
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] kex follows: False
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] Compression: none
2026-02-11T18:21:37.595 [DEBUG] [Thread-133635] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:21:37.655 [DEBUG] [Thread-133635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:21:37.655 [DEBUG] [Thread-133635] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:21:37.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:21:37.656 [DEBUG] [Thread-133635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:21:37.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:21:37.710 [DEBUG] [Thread-133635] [transport.py] [_log()] userauth is OK
2026-02-11T18:21:37.711 [DEBUG] [Thread-133635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:21:37.711 [DEBUG] [Thread-133635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:21:37.711 [DEBUG] [Thread-133635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:21:37.711 [DEBUG] [Thread-133635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:21:37.730 [INFO] [Thread-133635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:21:37.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:21:37.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:21:38.571 [DEBUG] [Thread-133635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:21:38.572 [DEBUG] [Thread-133635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:21:38.620 [DEBUG] [Thread-133635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:21:38.621 [DEBUG] [Thread-133635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:21:38.633 [DEBUG] [Thread-133635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:21:38.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:21:38.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:21:38.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:21:38.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:21:38.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:21:38.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:21:38.673 [DEBUG] [Thread-133635] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:21:42.590 [DEBUG] [Thread-133637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:21:57.639 [DEBUG] [Thread-133638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:21:58.330 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:21:58.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:22:08.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:22:08.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:22:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:22:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 21, 36), 4.82, 73.62, 0.0, 22.65, 19.48, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:22:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:21:36
2026-02-11T18:22:11.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:22:11.675 [DEBUG] [Thread-133639] [transport.py] [_log()] starting thread (client mode): 0xa5743490
2026-02-11T18:22:11.675 [DEBUG] [Thread-133639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:22:11.694 [DEBUG] [Thread-133639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:22:11.695 [INFO] [Thread-133639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] client lang: <none>
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] server lang: <none>
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] kex follows: False
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] Compression: none
2026-02-11T18:22:11.696 [DEBUG] [Thread-133639] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:22:11.714 [DEBUG] [Thread-133639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:22:11.714 [DEBUG] [Thread-133639] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:22:11.715 [DEBUG] [Thread-133639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:22:11.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:22:11.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:22:11.717 [DEBUG] [Thread-133639] [transport.py] [_log()] userauth is OK
2026-02-11T18:22:11.717 [DEBUG] [Thread-133639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:22:11.717 [DEBUG] [Thread-133639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:22:11.717 [DEBUG] [Thread-133639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:22:11.718 [DEBUG] [Thread-133639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:22:11.736 [INFO] [Thread-133639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:22:11.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:22:12.354 [DEBUG] [Thread-133639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:22:12.354 [DEBUG] [Thread-133639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:22:12.354 [DEBUG] [Thread-133639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:22:12.395 [DEBUG] [Thread-133639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:22:12.395 [DEBUG] [Thread-133639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:22:12.399 [DEBUG] [Thread-133639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:22:12.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:22:12.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:22:12.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:22:12.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:22:12.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:22:12.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:22:12.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:22:12.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:22:12.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:22:12.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.681738 -999.00  +18.80  17.15     80  +15.40 1 3 1 2 1   887    0 -6.06 -360.52 ----- 16.9 17.1 281.2 18.6 19.9 -5.7 19.7 -4.9 19.1 -4.4 19.0 -4.9
2026-02-11T18:22:12.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:22:12.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:22:12.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.681738
2026-02-11T18:22:12.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:22:12.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:22:12.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:22:12.422 [DEBUG] [Thread-133639] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:22:12.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:22:12.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:22:12.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:21:36', tmtdew=4.82, humidity=73.62, cloud=0.0, wind=22.65, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:21:42.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:22:12.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:22:12.516 [DEBUG] [Thread-133642] [transport.py] [_log()] starting thread (client mode): 0x9eb06710
2026-02-11T18:22:12.517 [DEBUG] [Thread-133642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:22:12.531 [DEBUG] [Thread-133642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:22:12.531 [INFO] [Thread-133642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] client lang: <none>
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] server lang: <none>
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] kex follows: False
2026-02-11T18:22:12.539 [DEBUG] [Thread-133642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:22:12.540 [DEBUG] [Thread-133642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:22:12.540 [DEBUG] [Thread-133642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:22:12.540 [DEBUG] [Thread-133642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:22:12.540 [DEBUG] [Thread-133642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:22:12.540 [DEBUG] [Thread-133642] [transport.py] [_log()] Compression: none
2026-02-11T18:22:12.540 [DEBUG] [Thread-133642] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:22:12.597 [DEBUG] [Thread-133642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:22:12.597 [DEBUG] [Thread-133642] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:22:12.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:22:12.598 [DEBUG] [Thread-133642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:22:12.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:22:12.656 [DEBUG] [Thread-133642] [transport.py] [_log()] userauth is OK
2026-02-11T18:22:12.656 [DEBUG] [Thread-133642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:22:12.656 [DEBUG] [Thread-133642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:22:12.656 [DEBUG] [Thread-133642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:22:12.656 [DEBUG] [Thread-133642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:22:12.675 [INFO] [Thread-133642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:22:12.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:22:12.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:22:12.679 [DEBUG] [Thread-133644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:22:13.519 [DEBUG] [Thread-133642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:22:13.520 [DEBUG] [Thread-133642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:22:13.568 [DEBUG] [Thread-133642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:22:13.568 [DEBUG] [Thread-133642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:22:13.577 [DEBUG] [Thread-133642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:22:13.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:22:13.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:22:13.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:22:13.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:22:13.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:22:13.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:22:13.613 [DEBUG] [Thread-133642] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:22:27.730 [DEBUG] [Thread-133645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:22:30.278 [DEBUG] [Thread-133646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:22:42.769 [DEBUG] [Thread-133647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:22:43.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:22:43.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:22:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:22:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 22, 11), 4.29, 76.45, 0.0, 19.23, 18.92, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:22:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:22:11
2026-02-11T18:22:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:22:46.499 [DEBUG] [Thread-133648] [transport.py] [_log()] starting thread (client mode): 0xa5743580
2026-02-11T18:22:46.499 [DEBUG] [Thread-133648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:22:46.519 [DEBUG] [Thread-133648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:22:46.519 [INFO] [Thread-133648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:22:46.522 [DEBUG] [Thread-133648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:22:46.522 [DEBUG] [Thread-133648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:22:46.522 [DEBUG] [Thread-133648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:22:46.522 [DEBUG] [Thread-133648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] client lang: <none>
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] server lang: <none>
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] kex follows: False
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:22:46.523 [DEBUG] [Thread-133648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:22:46.524 [DEBUG] [Thread-133648] [transport.py] [_log()] Compression: none
2026-02-11T18:22:46.524 [DEBUG] [Thread-133648] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:22:46.542 [DEBUG] [Thread-133648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:22:46.542 [DEBUG] [Thread-133648] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:22:46.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:22:46.543 [DEBUG] [Thread-133648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:22:46.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:22:46.585 [DEBUG] [Thread-133648] [transport.py] [_log()] userauth is OK
2026-02-11T18:22:46.585 [DEBUG] [Thread-133648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:22:46.586 [DEBUG] [Thread-133648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:22:46.586 [DEBUG] [Thread-133648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:22:46.586 [DEBUG] [Thread-133648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:22:46.618 [INFO] [Thread-133648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:22:46.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:22:47.286 [DEBUG] [Thread-133648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:22:47.286 [DEBUG] [Thread-133648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:22:47.287 [DEBUG] [Thread-133648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:22:47.327 [DEBUG] [Thread-133648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:22:47.327 [DEBUG] [Thread-133648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:22:47.330 [DEBUG] [Thread-133648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:22:47.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:22:47.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:22:47.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:22:47.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:22:47.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:22:47.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:22:47.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:22:47.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:22:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:22:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.682085 -999.00  +18.80  18.55     76  +14.60 1 3 1 1 1   887    0 -6.44 -365.86 ----- 21.0 18.6 283.4 24.8 19.9 -5.6 19.8 -5.0 19.1 -4.5 19.1 -5.6
2026-02-11T18:22:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:22:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:22:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.682085
2026-02-11T18:22:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:22:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:22:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:22:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:22:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:22:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:22:11', tmtdew=4.29, humidity=76.45, cloud=0.0, wind=19.23, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:22:12.144', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:22:47.354 [DEBUG] [Thread-133648] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:22:47.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:22:47.450 [DEBUG] [Thread-133651] [transport.py] [_log()] starting thread (client mode): 0x9eb045e0
2026-02-11T18:22:47.450 [DEBUG] [Thread-133651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:22:47.464 [DEBUG] [Thread-133651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:22:47.465 [INFO] [Thread-133651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:22:47.472 [DEBUG] [Thread-133651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:22:47.472 [DEBUG] [Thread-133651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:22:47.472 [DEBUG] [Thread-133651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:22:47.472 [DEBUG] [Thread-133651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] client lang: <none>
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] server lang: <none>
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] kex follows: False
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] Compression: none
2026-02-11T18:22:47.473 [DEBUG] [Thread-133651] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:22:47.530 [DEBUG] [Thread-133651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:22:47.531 [DEBUG] [Thread-133651] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:22:47.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:22:47.532 [DEBUG] [Thread-133651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:22:47.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:22:47.586 [DEBUG] [Thread-133651] [transport.py] [_log()] userauth is OK
2026-02-11T18:22:47.586 [DEBUG] [Thread-133651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:22:47.587 [DEBUG] [Thread-133651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:22:47.587 [DEBUG] [Thread-133651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:22:47.587 [DEBUG] [Thread-133651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:22:47.605 [INFO] [Thread-133651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:22:47.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:22:47.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:22:48.448 [DEBUG] [Thread-133651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:22:48.449 [DEBUG] [Thread-133651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:22:48.496 [DEBUG] [Thread-133651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:22:48.496 [DEBUG] [Thread-133651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:22:48.505 [DEBUG] [Thread-133651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:22:48.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:22:48.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:22:48.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
2026-02-11T18:22:48.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:22:48.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:22:48.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:22:48.551 [DEBUG] [Thread-133651] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:22:57.804 [DEBUG] [Thread-133653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:22:58.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:22:58.486 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:23:12.846 [DEBUG] [Thread-133654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:23:18.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:23:18.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:23:18.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:23:20.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 22, 47), 4.6, 74.67, 0.0, 20.1, 19.11, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:23:20.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:22:47
2026-02-11T18:23:20.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:23:20.997 [DEBUG] [Thread-133655] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-11T18:23:20.997 [DEBUG] [Thread-133655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:23:21.018 [DEBUG] [Thread-133655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:23:21.018 [INFO] [Thread-133655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:23:21.019 [DEBUG] [Thread-133655] [transport.py] [_log()] client lang: <none>
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] server lang: <none>
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] kex follows: False
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] Compression: none
2026-02-11T18:23:21.020 [DEBUG] [Thread-133655] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:23:21.030 [DEBUG] [Thread-133655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:23:21.030 [DEBUG] [Thread-133655] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:23:21.030 [DEBUG] [Thread-133655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:23:21.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:23:21.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:23:21.032 [DEBUG] [Thread-133655] [transport.py] [_log()] userauth is OK
2026-02-11T18:23:21.032 [DEBUG] [Thread-133655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:23:21.032 [DEBUG] [Thread-133655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:23:21.032 [DEBUG] [Thread-133655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:23:21.032 [DEBUG] [Thread-133655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:23:21.056 [INFO] [Thread-133655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:23:21.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:23:21.644 [DEBUG] [Thread-133655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:23:21.644 [DEBUG] [Thread-133655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:23:21.644 [DEBUG] [Thread-133655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:23:21.685 [DEBUG] [Thread-133655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:23:21.685 [DEBUG] [Thread-133655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:23:21.688 [DEBUG] [Thread-133655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:23:21.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:23:21.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:23:21.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:23:21.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:23:21.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:23:21.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:23:21.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:23:21.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:23:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:23:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.682432 -999.00  +18.90  17.50     78  +15.10 1 3 1 1 1   887    0 -5.60 -338.44 ----- 18.4 17.5 283.5 23.3 20.1 -5.8 19.8 -5.3 19.2 -5.0 19.2 -5.6
2026-02-11T18:23:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:23:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:23:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.682432
2026-02-11T18:23:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:23:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:23:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:23:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:23:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:23:21.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:22:47', tmtdew=4.6, humidity=74.67, cloud=0.0, wind=20.1, temperature=19.11, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:22:42.125', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:23:21.713 [DEBUG] [Thread-133655] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:23:21.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:23:21.810 [DEBUG] [Thread-133658] [transport.py] [_log()] starting thread (client mode): 0xa5743490
2026-02-11T18:23:21.811 [DEBUG] [Thread-133658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:23:21.825 [DEBUG] [Thread-133658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:23:21.825 [INFO] [Thread-133658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:23:21.833 [DEBUG] [Thread-133658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:23:21.833 [DEBUG] [Thread-133658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:23:21.833 [DEBUG] [Thread-133658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:23:21.833 [DEBUG] [Thread-133658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:21.833 [DEBUG] [Thread-133658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:21.833 [DEBUG] [Thread-133658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] client lang: <none>
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] server lang: <none>
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] kex follows: False
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] Compression: none
2026-02-11T18:23:21.834 [DEBUG] [Thread-133658] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:23:21.900 [DEBUG] [Thread-133658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:23:21.901 [DEBUG] [Thread-133658] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:23:21.902 [DEBUG] [Thread-133658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:23:21.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:23:21.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:23:21.956 [DEBUG] [Thread-133658] [transport.py] [_log()] userauth is OK
2026-02-11T18:23:21.956 [DEBUG] [Thread-133658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:23:21.956 [DEBUG] [Thread-133658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:23:21.956 [DEBUG] [Thread-133658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:23:21.956 [DEBUG] [Thread-133658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:23:21.975 [INFO] [Thread-133658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:23:21.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:23:21.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:23:22.786 [DEBUG] [Thread-133658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:23:22.786 [DEBUG] [Thread-133658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:23:22.833 [DEBUG] [Thread-133658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:23:22.834 [DEBUG] [Thread-133658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:23:22.843 [DEBUG] [Thread-133658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:23:22.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:23:22.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:23:22.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:23:22.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:23:22.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:23:22.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:23:22.877 [DEBUG] [Thread-133658] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:23:27.880 [DEBUG] [Thread-133660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:23:30.331 [DEBUG] [Thread-133661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:23:42.930 [DEBUG] [Thread-133662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:23:52.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:23:52.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:23:52.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:23:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 23, 23), 4.66, 74.42, 0.0, 20.72, 19.14, 0, 0, 2, 2, 0, 0),)
2026-02-11T18:23:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:23:23
2026-02-11T18:23:55.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:23:55.291 [DEBUG] [Thread-133663] [transport.py] [_log()] starting thread (client mode): 0xa2db7580
2026-02-11T18:23:55.291 [DEBUG] [Thread-133663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:23:55.311 [DEBUG] [Thread-133663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:23:55.311 [INFO] [Thread-133663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:23:55.314 [DEBUG] [Thread-133663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:23:55.314 [DEBUG] [Thread-133663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:23:55.314 [DEBUG] [Thread-133663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] client lang: <none>
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] server lang: <none>
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] kex follows: False
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] Compression: none
2026-02-11T18:23:55.315 [DEBUG] [Thread-133663] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:23:55.332 [DEBUG] [Thread-133663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:23:55.333 [DEBUG] [Thread-133663] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:23:55.334 [DEBUG] [Thread-133663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:23:55.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:23:55.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:23:55.377 [DEBUG] [Thread-133663] [transport.py] [_log()] userauth is OK
2026-02-11T18:23:55.377 [DEBUG] [Thread-133663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:23:55.377 [DEBUG] [Thread-133663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:23:55.377 [DEBUG] [Thread-133663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:23:55.378 [DEBUG] [Thread-133663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:23:55.410 [INFO] [Thread-133663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:23:55.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:23:56.138 [DEBUG] [Thread-133663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:23:56.139 [DEBUG] [Thread-133663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:23:56.139 [DEBUG] [Thread-133663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:23:56.180 [DEBUG] [Thread-133663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:23:56.180 [DEBUG] [Thread-133663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:23:56.183 [DEBUG] [Thread-133663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:23:56.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:23:56.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:23:56.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:23:56.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:23:56.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:23:56.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:23:56.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:23:56.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:23:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:23:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.682780 -999.00  +19.00  12.77     79  +15.30 1 3 1 1 1   887    0 -5.50 -332.11 ----- 12.2 12.8 294.1 21.0 20.1 -5.9 19.9 -5.2 19.3 -5.0 19.3 -5.4
2026-02-11T18:23:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:23:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:23:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.682780
2026-02-11T18:23:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:23:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:23:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:23:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:23:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:23:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:23:23', tmtdew=4.66, humidity=74.42, cloud=0.0, wind=20.72, temperature=19.14, tmtdew_warn=0, humidity_warn=0, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:23:12.192', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:23:56.201 [DEBUG] [Thread-133663] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:23:56.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:23:56.300 [DEBUG] [Thread-133666] [transport.py] [_log()] starting thread (client mode): 0xa2db50f0
2026-02-11T18:23:56.300 [DEBUG] [Thread-133666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:23:56.315 [DEBUG] [Thread-133666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:23:56.315 [INFO] [Thread-133666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:23:56.322 [DEBUG] [Thread-133666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] client lang: <none>
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] server lang: <none>
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] kex follows: False
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] Compression: none
2026-02-11T18:23:56.323 [DEBUG] [Thread-133666] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:23:56.382 [DEBUG] [Thread-133666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:23:56.383 [DEBUG] [Thread-133666] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:23:56.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:23:56.384 [DEBUG] [Thread-133666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:23:56.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:23:56.439 [DEBUG] [Thread-133666] [transport.py] [_log()] userauth is OK
2026-02-11T18:23:56.439 [DEBUG] [Thread-133666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:23:56.439 [DEBUG] [Thread-133666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:23:56.439 [DEBUG] [Thread-133666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:23:56.439 [DEBUG] [Thread-133666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:23:56.462 [INFO] [Thread-133666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:23:56.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:23:56.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:23:57.283 [DEBUG] [Thread-133666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:23:57.284 [DEBUG] [Thread-133666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:23:57.331 [DEBUG] [Thread-133666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:23:57.331 [DEBUG] [Thread-133666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:23:57.340 [DEBUG] [Thread-133666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:23:57.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:23:57.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')
2026-02-11T18:23:57.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:23:57.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:23:57.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:23:57.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:23:57.378 [DEBUG] [Thread-133666] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:23:57.963 [DEBUG] [Thread-133668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:23:58.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:23:58.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:24:13.004 [DEBUG] [Thread-133669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:24:27.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:24:27.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:24:27.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
2026-02-11T18:24:28.041 [DEBUG] [Thread-133670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:24:29.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 23, 58), 5.02, 72.89, 0.0, 19.6, 19.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:24:29.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:23:58
2026-02-11T18:24:29.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:24:30.132 [DEBUG] [Thread-133671] [transport.py] [_log()] starting thread (client mode): 0xa2db5600
2026-02-11T18:24:30.133 [DEBUG] [Thread-133671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:24:30.148 [DEBUG] [Thread-133671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:24:30.148 [INFO] [Thread-133671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:24:30.151 [DEBUG] [Thread-133671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] client lang: <none>
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] server lang: <none>
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] kex follows: False
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] Compression: none
2026-02-11T18:24:30.152 [DEBUG] [Thread-133671] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:24:30.169 [DEBUG] [Thread-133671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:24:30.169 [DEBUG] [Thread-133671] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:24:30.170 [DEBUG] [Thread-133671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:24:30.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:24:30.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:24:30.172 [DEBUG] [Thread-133671] [transport.py] [_log()] userauth is OK
2026-02-11T18:24:30.172 [DEBUG] [Thread-133671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:24:30.172 [DEBUG] [Thread-133671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:24:30.172 [DEBUG] [Thread-133671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:24:30.172 [DEBUG] [Thread-133671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:24:30.198 [INFO] [Thread-133671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:24:30.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:24:30.391 [DEBUG] [Thread-133673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:24:30.790 [DEBUG] [Thread-133671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:24:30.790 [DEBUG] [Thread-133671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:24:30.790 [DEBUG] [Thread-133671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:24:30.830 [DEBUG] [Thread-133671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:24:30.831 [DEBUG] [Thread-133671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:24:30.834 [DEBUG] [Thread-133671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:24:30.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:24:30.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:24:30.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:24:30.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:24:30.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:24:30.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:24:30.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:24:30.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:24:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:24:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.683474 -999.00  +19.20  14.91     76  +15.00 1 3 1 1 1   887    0 -5.28 -322.59 ----- 18.1 14.9 289.8 20.3 20.3 -6.0 20.1 -5.4 19.6 -5.7 19.6 -5.6
2026-02-11T18:24:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:24:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:24:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.683474
2026-02-11T18:24:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:24:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:24:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:24:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:24:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:24:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:23:58', tmtdew=5.02, humidity=72.89, cloud=0.0, wind=19.6, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:24:12.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:24:30.863 [DEBUG] [Thread-133671] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:24:30.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:24:30.957 [DEBUG] [Thread-133675] [transport.py] [_log()] starting thread (client mode): 0xa2db7430
2026-02-11T18:24:30.957 [DEBUG] [Thread-133675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:24:30.971 [DEBUG] [Thread-133675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:24:30.972 [INFO] [Thread-133675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:24:30.979 [DEBUG] [Thread-133675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:24:30.979 [DEBUG] [Thread-133675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:24:30.979 [DEBUG] [Thread-133675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:24:30.979 [DEBUG] [Thread-133675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:24:30.979 [DEBUG] [Thread-133675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:24:30.979 [DEBUG] [Thread-133675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:24:30.979 [DEBUG] [Thread-133675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] client lang: <none>
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] server lang: <none>
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] kex follows: False
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] Compression: none
2026-02-11T18:24:30.980 [DEBUG] [Thread-133675] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:24:31.040 [DEBUG] [Thread-133675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:24:31.041 [DEBUG] [Thread-133675] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:24:31.041 [DEBUG] [Thread-133675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:24:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:24:31.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:24:31.096 [DEBUG] [Thread-133675] [transport.py] [_log()] userauth is OK
2026-02-11T18:24:31.096 [DEBUG] [Thread-133675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:24:31.096 [DEBUG] [Thread-133675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:24:31.096 [DEBUG] [Thread-133675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:24:31.096 [DEBUG] [Thread-133675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:24:31.115 [INFO] [Thread-133675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:24:31.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:24:31.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:24:31.961 [DEBUG] [Thread-133675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:24:31.962 [DEBUG] [Thread-133675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:24:32.009 [DEBUG] [Thread-133675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:24:32.010 [DEBUG] [Thread-133675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:24:32.022 [DEBUG] [Thread-133675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:24:32.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:24:32.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:24:32.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
2026-02-11T18:24:32.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:24:32.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:24:32.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:24:32.063 [DEBUG] [Thread-133675] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:24:43.076 [DEBUG] [Thread-133677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:24:58.125 [DEBUG] [Thread-133678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:24:58.768 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:24:58.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:25:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:25:02.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:25:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:25:04.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 24, 34), 5.49, 70.58, 0.0, 19.62, 19.98, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:25:04.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:24:34
2026-02-11T18:25:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:25:04.634 [DEBUG] [Thread-133679] [transport.py] [_log()] starting thread (client mode): 0xa57e0d60
2026-02-11T18:25:04.634 [DEBUG] [Thread-133679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:25:04.647 [DEBUG] [Thread-133679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:25:04.648 [INFO] [Thread-133679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] client lang: <none>
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] server lang: <none>
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] kex follows: False
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] Compression: none
2026-02-11T18:25:04.649 [DEBUG] [Thread-133679] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:25:04.658 [DEBUG] [Thread-133679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:25:04.658 [DEBUG] [Thread-133679] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:25:04.658 [DEBUG] [Thread-133679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:25:04.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:25:04.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:25:04.659 [DEBUG] [Thread-133679] [transport.py] [_log()] userauth is OK
2026-02-11T18:25:04.659 [DEBUG] [Thread-133679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:25:04.659 [DEBUG] [Thread-133679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:25:04.660 [DEBUG] [Thread-133679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:25:04.660 [DEBUG] [Thread-133679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:25:04.673 [INFO] [Thread-133679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:25:04.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:25:05.373 [DEBUG] [Thread-133679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:25:05.374 [DEBUG] [Thread-133679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:25:05.374 [DEBUG] [Thread-133679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:25:05.414 [DEBUG] [Thread-133679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:25:05.415 [DEBUG] [Thread-133679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:25:05.417 [DEBUG] [Thread-133679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:25:05.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:25:05.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:25:05.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:25:05.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:25:05.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:25:05.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:25:05.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:25:05.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:25:05.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:25:05.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.683821 -999.00  +19.30  17.70     75  +15.00 1 3 1 1 1   887    0 -5.31 -318.25 ----- 19.9 17.7 287.2 20.5 20.4 -6.3 20.2 -5.7 19.6 -5.8 19.7 -6.0
2026-02-11T18:25:05.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:25:05.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:25:05.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.683821
2026-02-11T18:25:05.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:25:05.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:25:05.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:25:05.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:25:05.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:25:05.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:24:34', tmtdew=5.49, humidity=70.58, cloud=0.0, wind=19.62, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:24:42.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:25:05.445 [DEBUG] [Thread-133679] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:25:05.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:25:05.540 [DEBUG] [Thread-133682] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-11T18:25:05.540 [DEBUG] [Thread-133682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:25:05.555 [DEBUG] [Thread-133682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:25:05.555 [INFO] [Thread-133682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:05.563 [DEBUG] [Thread-133682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] client lang: <none>
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] server lang: <none>
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] kex follows: False
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] Compression: none
2026-02-11T18:25:05.564 [DEBUG] [Thread-133682] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:25:05.626 [DEBUG] [Thread-133682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:25:05.626 [DEBUG] [Thread-133682] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:25:05.627 [DEBUG] [Thread-133682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:25:05.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:25:05.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:25:05.681 [DEBUG] [Thread-133682] [transport.py] [_log()] userauth is OK
2026-02-11T18:25:05.682 [DEBUG] [Thread-133682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:25:05.682 [DEBUG] [Thread-133682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:25:05.682 [DEBUG] [Thread-133682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:25:05.682 [DEBUG] [Thread-133682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:25:05.701 [INFO] [Thread-133682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:25:05.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:25:05.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:25:06.571 [DEBUG] [Thread-133682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:25:06.571 [DEBUG] [Thread-133682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:25:06.619 [DEBUG] [Thread-133682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:25:06.619 [DEBUG] [Thread-133682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:25:06.627 [DEBUG] [Thread-133682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:25:06.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:25:06.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:25:06.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:25:06.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:25:06.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:25:06.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:25:06.660 [DEBUG] [Thread-133682] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:25:13.161 [DEBUG] [Thread-133684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:25:28.211 [DEBUG] [Thread-133685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:25:30.441 [DEBUG] [Thread-133686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:25:36.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:25:36.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:25:36.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:25:38.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 25, 9), 5.51, 70.54, 0.0, 23.08, 19.44, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:25:38.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:25:09
2026-02-11T18:25:38.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:25:39.109 [DEBUG] [Thread-133687] [transport.py] [_log()] starting thread (client mode): 0xa57e16f0
2026-02-11T18:25:39.109 [DEBUG] [Thread-133687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:25:39.130 [DEBUG] [Thread-133687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:25:39.130 [INFO] [Thread-133687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] client lang: <none>
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] server lang: <none>
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] kex follows: False
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:25:39.131 [DEBUG] [Thread-133687] [transport.py] [_log()] Compression: none
2026-02-11T18:25:39.132 [DEBUG] [Thread-133687] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:25:39.153 [DEBUG] [Thread-133687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:25:39.153 [DEBUG] [Thread-133687] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:25:39.153 [DEBUG] [Thread-133687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:25:39.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:25:39.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:25:39.156 [DEBUG] [Thread-133687] [transport.py] [_log()] userauth is OK
2026-02-11T18:25:39.156 [DEBUG] [Thread-133687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:25:39.156 [DEBUG] [Thread-133687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:25:39.156 [DEBUG] [Thread-133687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:25:39.156 [DEBUG] [Thread-133687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:25:39.180 [INFO] [Thread-133687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:25:39.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:25:39.797 [DEBUG] [Thread-133687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:25:39.798 [DEBUG] [Thread-133687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:25:39.798 [DEBUG] [Thread-133687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:25:39.838 [DEBUG] [Thread-133687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:25:39.839 [DEBUG] [Thread-133687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:25:39.842 [DEBUG] [Thread-133687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:25:39.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:25:39.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:25:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:25:39.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:25:39.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:25:39.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:25:39.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:25:39.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:25:39.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:25:39.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.684168 -999.00  +19.30  14.79     76  +15.00 1 3 1 1 1   887    0 -4.39 -288.48 ----- 14.2 14.8 296.2 23.4 20.5 -6.4 20.3 -5.9 19.8 -6.1 19.8 -6.4
2026-02-11T18:25:39.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:25:39.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:25:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.684168
2026-02-11T18:25:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:25:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:25:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:25:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:25:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:25:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:25:09', tmtdew=5.51, humidity=70.54, cloud=0.0, wind=23.08, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:25:12.115', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:25:39.867 [DEBUG] [Thread-133687] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:25:39.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:25:39.971 [DEBUG] [Thread-133690] [transport.py] [_log()] starting thread (client mode): 0xa57e0ca0
2026-02-11T18:25:39.972 [DEBUG] [Thread-133690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:25:39.986 [DEBUG] [Thread-133690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:25:39.986 [INFO] [Thread-133690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:25:39.994 [DEBUG] [Thread-133690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:25:39.994 [DEBUG] [Thread-133690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:25:39.994 [DEBUG] [Thread-133690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:25:39.994 [DEBUG] [Thread-133690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:39.994 [DEBUG] [Thread-133690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:25:39.994 [DEBUG] [Thread-133690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] client lang: <none>
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] server lang: <none>
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] kex follows: False
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:25:39.995 [DEBUG] [Thread-133690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:25:39.996 [DEBUG] [Thread-133690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:25:39.996 [DEBUG] [Thread-133690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:25:39.996 [DEBUG] [Thread-133690] [transport.py] [_log()] Compression: none
2026-02-11T18:25:39.996 [DEBUG] [Thread-133690] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:25:40.052 [DEBUG] [Thread-133690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:25:40.052 [DEBUG] [Thread-133690] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:25:40.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:25:40.054 [DEBUG] [Thread-133690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:25:40.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:25:40.111 [DEBUG] [Thread-133690] [transport.py] [_log()] userauth is OK
2026-02-11T18:25:40.111 [DEBUG] [Thread-133690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:25:40.111 [DEBUG] [Thread-133690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:25:40.111 [DEBUG] [Thread-133690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:25:40.111 [DEBUG] [Thread-133690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:25:40.129 [INFO] [Thread-133690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:25:40.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:25:40.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:25:41.006 [DEBUG] [Thread-133690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:25:41.007 [DEBUG] [Thread-133690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:25:41.054 [DEBUG] [Thread-133690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:25:41.054 [DEBUG] [Thread-133690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:25:41.064 [DEBUG] [Thread-133690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:25:41.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:25:41.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:25:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:25:41.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:25:41.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:25:41.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:25:41.106 [DEBUG] [Thread-133690] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:25:43.247 [DEBUG] [Thread-133692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:25:58.290 [DEBUG] [Thread-133693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:25:58.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:25:58.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:26:11.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:26:11.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:26:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:26:13.324 [DEBUG] [Thread-133694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:26:13.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 25, 45), 5.92, 68.42, 0.0, 20.93, 19.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:26:13.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:25:45
2026-02-11T18:26:14.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:26:14.187 [DEBUG] [Thread-133695] [transport.py] [_log()] starting thread (client mode): 0xa57e0670
2026-02-11T18:26:14.187 [DEBUG] [Thread-133695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:26:14.208 [DEBUG] [Thread-133695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:26:14.208 [INFO] [Thread-133695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] client lang: <none>
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] server lang: <none>
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] kex follows: False
2026-02-11T18:26:14.211 [DEBUG] [Thread-133695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:26:14.212 [DEBUG] [Thread-133695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:26:14.212 [DEBUG] [Thread-133695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:26:14.212 [DEBUG] [Thread-133695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:26:14.212 [DEBUG] [Thread-133695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:26:14.212 [DEBUG] [Thread-133695] [transport.py] [_log()] Compression: none
2026-02-11T18:26:14.212 [DEBUG] [Thread-133695] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:26:14.227 [DEBUG] [Thread-133695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:26:14.227 [DEBUG] [Thread-133695] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:26:14.228 [DEBUG] [Thread-133695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:26:14.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:26:14.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:26:14.230 [DEBUG] [Thread-133695] [transport.py] [_log()] userauth is OK
2026-02-11T18:26:14.230 [DEBUG] [Thread-133695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:26:14.231 [DEBUG] [Thread-133695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:26:14.231 [DEBUG] [Thread-133695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:26:14.231 [DEBUG] [Thread-133695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:26:14.265 [INFO] [Thread-133695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:26:14.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:26:14.914 [DEBUG] [Thread-133695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:26:14.914 [DEBUG] [Thread-133695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:26:14.914 [DEBUG] [Thread-133695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:26:14.955 [DEBUG] [Thread-133695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:26:14.956 [DEBUG] [Thread-133695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:26:14.959 [DEBUG] [Thread-133695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:26:14.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:26:14.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:26:14.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:26:14.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:26:14.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:26:14.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:26:14.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:26:14.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:26:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:26:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.684516 -999.00  +19.40  20.93     74  +14.80 1 3 1 1 1   887    0 -3.99 -270.19 ----- 18.1 20.9 293.2 22.7 20.5 -6.5 20.4 -6.3 19.9 -6.5 20.0 -6.3
2026-02-11T18:26:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:26:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:26:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.684516
2026-02-11T18:26:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:26:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:26:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:26:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:26:14.988 [DEBUG] [Thread-133695] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:26:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:26:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:25:45', tmtdew=5.92, humidity=68.42, cloud=0.0, wind=20.93, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:25:42.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:26:15.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:26:15.085 [DEBUG] [Thread-133698] [transport.py] [_log()] starting thread (client mode): 0xa2db76d0
2026-02-11T18:26:15.086 [DEBUG] [Thread-133698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:26:15.102 [DEBUG] [Thread-133698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:26:15.102 [INFO] [Thread-133698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:26:15.112 [DEBUG] [Thread-133698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:26:15.113 [DEBUG] [Thread-133698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:26:15.113 [DEBUG] [Thread-133698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:26:15.113 [DEBUG] [Thread-133698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:15.113 [DEBUG] [Thread-133698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:15.113 [DEBUG] [Thread-133698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:15.113 [DEBUG] [Thread-133698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:15.113 [DEBUG] [Thread-133698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:26:15.114 [DEBUG] [Thread-133698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:26:15.114 [DEBUG] [Thread-133698] [transport.py] [_log()] client lang: <none>
2026-02-11T18:26:15.114 [DEBUG] [Thread-133698] [transport.py] [_log()] server lang: <none>
2026-02-11T18:26:15.114 [DEBUG] [Thread-133698] [transport.py] [_log()] kex follows: False
2026-02-11T18:26:15.114 [DEBUG] [Thread-133698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:26:15.114 [DEBUG] [Thread-133698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:26:15.114 [DEBUG] [Thread-133698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:26:15.115 [DEBUG] [Thread-133698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:26:15.115 [DEBUG] [Thread-133698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:26:15.115 [DEBUG] [Thread-133698] [transport.py] [_log()] Compression: none
2026-02-11T18:26:15.115 [DEBUG] [Thread-133698] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:26:15.175 [DEBUG] [Thread-133698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:26:15.176 [DEBUG] [Thread-133698] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:26:15.177 [DEBUG] [Thread-133698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:26:15.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:26:15.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:26:15.237 [DEBUG] [Thread-133698] [transport.py] [_log()] userauth is OK
2026-02-11T18:26:15.238 [DEBUG] [Thread-133698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:26:15.238 [DEBUG] [Thread-133698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:26:15.238 [DEBUG] [Thread-133698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:26:15.238 [DEBUG] [Thread-133698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:26:15.261 [INFO] [Thread-133698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:26:15.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:26:15.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:26:16.146 [DEBUG] [Thread-133698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:26:16.146 [DEBUG] [Thread-133698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:26:16.195 [DEBUG] [Thread-133698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:26:16.195 [DEBUG] [Thread-133698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:26:16.204 [DEBUG] [Thread-133698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:26:16.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:26:16.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:26:16.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:26:16.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:26:16.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:26:16.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:26:16.241 [DEBUG] [Thread-133698] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:26:28.367 [DEBUG] [Thread-133700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:26:30.483 [DEBUG] [Thread-133701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:26:43.407 [DEBUG] [Thread-133702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:26:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:26:46.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:26: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
2026-02-11T18:26:48.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 26, 21), 5.92, 68.43, 0.0, 22.14, 19.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:26:48.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:26:21
2026-02-11T18:26:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:26:49.269 [DEBUG] [Thread-133703] [transport.py] [_log()] starting thread (client mode): 0xa2db6b60
2026-02-11T18:26:49.269 [DEBUG] [Thread-133703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:26:49.288 [DEBUG] [Thread-133703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:26:49.288 [INFO] [Thread-133703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:26:49.291 [DEBUG] [Thread-133703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] client lang: <none>
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] server lang: <none>
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] kex follows: False
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:26:49.292 [DEBUG] [Thread-133703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:26:49.293 [DEBUG] [Thread-133703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:26:49.293 [DEBUG] [Thread-133703] [transport.py] [_log()] Compression: none
2026-02-11T18:26:49.293 [DEBUG] [Thread-133703] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:26:49.312 [DEBUG] [Thread-133703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:26:49.313 [DEBUG] [Thread-133703] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:26:49.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:26:49.314 [DEBUG] [Thread-133703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:26:49.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:26:49.316 [DEBUG] [Thread-133703] [transport.py] [_log()] userauth is OK
2026-02-11T18:26:49.316 [DEBUG] [Thread-133703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:26:49.316 [DEBUG] [Thread-133703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:26:49.316 [DEBUG] [Thread-133703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:26:49.316 [DEBUG] [Thread-133703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:26:49.333 [INFO] [Thread-133703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:26:49.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:26:49.938 [DEBUG] [Thread-133703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:26:49.938 [DEBUG] [Thread-133703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:26:49.939 [DEBUG] [Thread-133703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:26:49.979 [DEBUG] [Thread-133703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:26:49.980 [DEBUG] [Thread-133703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:26:49.983 [DEBUG] [Thread-133703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:26:49.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:26:49.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:26:49.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:26:50.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:26:50.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:26:50.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:26:50.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:26:50.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:26:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:26:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.684863 -999.00  +19.30  20.12     75  +14.80 1 3 1 1 1   887    0 -4.34 -281.29 ----- 18.0 20.1 293.4 22.5 20.6 -6.7 20.4 -6.5 19.9 -6.8 20.1 -6.7
2026-02-11T18:26:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:26:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:26:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.684863
2026-02-11T18:26:50.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:26:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:26:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:26:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:26:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:26:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:26:21', tmtdew=5.92, humidity=68.43, cloud=0.0, wind=22.14, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:26:12.163', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:26:50.011 [DEBUG] [Thread-133703] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:26:50.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:26:50.111 [DEBUG] [Thread-133706] [transport.py] [_log()] starting thread (client mode): 0xa2db6170
2026-02-11T18:26:50.111 [DEBUG] [Thread-133706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:26:50.127 [DEBUG] [Thread-133706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:26:50.127 [INFO] [Thread-133706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:26:50.134 [DEBUG] [Thread-133706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] client lang: <none>
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] server lang: <none>
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] kex follows: False
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:26:50.135 [DEBUG] [Thread-133706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:26:50.136 [DEBUG] [Thread-133706] [transport.py] [_log()] Compression: none
2026-02-11T18:26:50.136 [DEBUG] [Thread-133706] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:26:50.197 [DEBUG] [Thread-133706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:26:50.198 [DEBUG] [Thread-133706] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:26:50.199 [DEBUG] [Thread-133706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:26:50.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:26:50.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:26:50.253 [DEBUG] [Thread-133706] [transport.py] [_log()] userauth is OK
2026-02-11T18:26:50.254 [DEBUG] [Thread-133706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:26:50.254 [DEBUG] [Thread-133706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:26:50.254 [DEBUG] [Thread-133706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:26:50.254 [DEBUG] [Thread-133706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:26:50.273 [INFO] [Thread-133706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:26:50.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:26:50.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:26:51.087 [DEBUG] [Thread-133706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:26:51.087 [DEBUG] [Thread-133706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:26:51.135 [DEBUG] [Thread-133706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:26:51.136 [DEBUG] [Thread-133706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:26:51.145 [DEBUG] [Thread-133706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:26:51.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:26:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:26:51.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:26:51.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:26:51.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:26:51.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:26:51.182 [DEBUG] [Thread-133706] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:26:58.444 [DEBUG] [Thread-133708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:26:59.052 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:26:59.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:13.496 [DEBUG] [Thread-133709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:27:21.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:27:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:27:23.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 26, 56), 6.01, 68.27, 0.0, 21.32, 19.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:27:23.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:26:56
2026-02-11T18:27:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:27:23.608 [DEBUG] [Thread-133710] [transport.py] [_log()] starting thread (client mode): 0xa2d55ea0
2026-02-11T18:27:23.608 [DEBUG] [Thread-133710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:27:23.628 [DEBUG] [Thread-133710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:27:23.628 [INFO] [Thread-133710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] client lang: <none>
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] server lang: <none>
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] kex follows: False
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] Compression: none
2026-02-11T18:27:23.632 [DEBUG] [Thread-133710] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:27:23.650 [DEBUG] [Thread-133710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:27:23.650 [DEBUG] [Thread-133710] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:27:23.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:27:23.652 [DEBUG] [Thread-133710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:27:23.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:27:23.653 [DEBUG] [Thread-133710] [transport.py] [_log()] userauth is OK
2026-02-11T18:27:23.654 [DEBUG] [Thread-133710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:27:23.654 [DEBUG] [Thread-133710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:27:23.654 [DEBUG] [Thread-133710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:27:23.654 [DEBUG] [Thread-133710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:27:23.679 [INFO] [Thread-133710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:27:23.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:27:24.306 [DEBUG] [Thread-133710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:27:24.306 [DEBUG] [Thread-133710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:27:24.306 [DEBUG] [Thread-133710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:27:24.346 [DEBUG] [Thread-133710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:27:24.347 [DEBUG] [Thread-133710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:27:24.350 [DEBUG] [Thread-133710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:27:24.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:27:24.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:27:24.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:27:24.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:27:24.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:27:24.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:27:24.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:27:24.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.685557 -999.00  +19.40  16.55     74  +14.80 1 3 1 1 1   887    0 -2.26 -208.90 ----- 16.0 16.6 293.4 19.4 20.8 -7.3 20.6 -7.2 20.1 -7.5 20.2 -7.3
2026-02-11T18:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.685557
2026-02-11T18:27:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:27:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:27:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:27:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:27:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:27:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:26:56', tmtdew=6.01, humidity=68.27, cloud=0.0, wind=21.32, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:27:12.125', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:27:24.376 [DEBUG] [Thread-133710] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:27:24.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:27:24.471 [DEBUG] [Thread-133713] [transport.py] [_log()] starting thread (client mode): 0xa2d54a30
2026-02-11T18:27:24.472 [DEBUG] [Thread-133713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:27:24.486 [DEBUG] [Thread-133713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:27:24.486 [INFO] [Thread-133713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:27:24.494 [DEBUG] [Thread-133713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:27:24.494 [DEBUG] [Thread-133713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:27:24.494 [DEBUG] [Thread-133713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:27:24.494 [DEBUG] [Thread-133713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:24.494 [DEBUG] [Thread-133713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:24.494 [DEBUG] [Thread-133713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] client lang: <none>
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] server lang: <none>
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] kex follows: False
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:27:24.495 [DEBUG] [Thread-133713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:27:24.496 [DEBUG] [Thread-133713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:27:24.496 [DEBUG] [Thread-133713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:27:24.496 [DEBUG] [Thread-133713] [transport.py] [_log()] Compression: none
2026-02-11T18:27:24.496 [DEBUG] [Thread-133713] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:27:24.551 [DEBUG] [Thread-133713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:27:24.552 [DEBUG] [Thread-133713] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:27:24.552 [DEBUG] [Thread-133713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:27:24.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:27:24.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:27:24.607 [DEBUG] [Thread-133713] [transport.py] [_log()] userauth is OK
2026-02-11T18:27:24.607 [DEBUG] [Thread-133713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:27:24.607 [DEBUG] [Thread-133713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:27:24.607 [DEBUG] [Thread-133713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:27:24.608 [DEBUG] [Thread-133713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:27:24.627 [INFO] [Thread-133713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:27:24.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:27:24.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:27:25.489 [DEBUG] [Thread-133713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:27:25.489 [DEBUG] [Thread-133713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:27:25.536 [DEBUG] [Thread-133713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:27:25.537 [DEBUG] [Thread-133713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:27:25.546 [DEBUG] [Thread-133713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:27:25.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:27:25.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:27:25.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:27:25.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:27:25.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:27:25.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:27:25.583 [DEBUG] [Thread-133713] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:27:28.536 [DEBUG] [Thread-133715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:30.556 [DEBUG] [Thread-133716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:43.588 [DEBUG] [Thread-133717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:55.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:27:55.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:27:55.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:27:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 27, 32), 6.1, 67.89, 0.0, 21.58, 19.67, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:27:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:27:32
2026-02-11T18:27:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:27:57.923 [DEBUG] [Thread-133718] [transport.py] [_log()] starting thread (client mode): 0xa2d562f0
2026-02-11T18:27:57.923 [DEBUG] [Thread-133718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:27:57.944 [DEBUG] [Thread-133718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:27:57.944 [INFO] [Thread-133718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] client lang: <none>
2026-02-11T18:27:57.946 [DEBUG] [Thread-133718] [transport.py] [_log()] server lang: <none>
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] kex follows: False
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] Compression: none
2026-02-11T18:27:57.947 [DEBUG] [Thread-133718] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:27:57.967 [DEBUG] [Thread-133718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:27:57.967 [DEBUG] [Thread-133718] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:27:57.968 [DEBUG] [Thread-133718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:27:57.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:27:57.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:27:58.009 [DEBUG] [Thread-133718] [transport.py] [_log()] userauth is OK
2026-02-11T18:27:58.009 [DEBUG] [Thread-133718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:27:58.010 [DEBUG] [Thread-133718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:27:58.010 [DEBUG] [Thread-133718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:27:58.010 [DEBUG] [Thread-133718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:27:58.042 [INFO] [Thread-133718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:27:58.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:27:58.626 [DEBUG] [Thread-133720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:58.696 [DEBUG] [Thread-133718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:27:58.696 [DEBUG] [Thread-133718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:27:58.697 [DEBUG] [Thread-133718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:27:58.737 [DEBUG] [Thread-133718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:27:58.738 [DEBUG] [Thread-133718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:27:58.741 [DEBUG] [Thread-133718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:27:58.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:27:58.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:27:58.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:27:58.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:27:58.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:27:58.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:27:58.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:27:58.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:27:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:27:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.685904 -999.00  +19.50  20.09     72  +14.50 1 3 1 1 1   887    0 -1.04 -168.63 ----- 20.0 20.1 293.6 24.0 20.9 -7.6 20.7 -7.5 20.2 -8.3 20.3 -7.7
2026-02-11T18:27:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:27:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:27:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.685904
2026-02-11T18:27:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:27:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:27:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:27:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:27:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:27:58.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:27:32', tmtdew=6.1, humidity=67.89, cloud=0.0, wind=21.58, temperature=19.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:27:42.106', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:27:58.772 [DEBUG] [Thread-133718] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:27:58.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:27:58.867 [DEBUG] [Thread-133722] [transport.py] [_log()] starting thread (client mode): 0x9eb04610
2026-02-11T18:27:58.867 [DEBUG] [Thread-133722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:27:58.882 [DEBUG] [Thread-133722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:27:58.882 [INFO] [Thread-133722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:27:58.896 [DEBUG] [Thread-133722] [transport.py] [_log()] client lang: <none>
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] server lang: <none>
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] kex follows: False
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] Compression: none
2026-02-11T18:27:58.897 [DEBUG] [Thread-133722] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:27:58.948 [DEBUG] [Thread-133722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:27:58.948 [DEBUG] [Thread-133722] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:27:58.949 [DEBUG] [Thread-133722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:27:58.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:27:58.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:27:59.004 [DEBUG] [Thread-133722] [transport.py] [_log()] userauth is OK
2026-02-11T18:27:59.005 [DEBUG] [Thread-133722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:27:59.005 [DEBUG] [Thread-133722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:27:59.005 [DEBUG] [Thread-133722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:27:59.005 [DEBUG] [Thread-133722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:27:59.023 [INFO] [Thread-133722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:27:59.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:27:59.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:27:59.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:59.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:27:59.850 [DEBUG] [Thread-133722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:27:59.850 [DEBUG] [Thread-133722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:27:59.897 [DEBUG] [Thread-133722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:27:59.897 [DEBUG] [Thread-133722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:27:59.907 [DEBUG] [Thread-133722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:27:59.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:27:59.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:27:59.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:27:59.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:27:59.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:27:59.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:27:59.944 [DEBUG] [Thread-133722] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:28:13.670 [DEBUG] [Thread-133724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:28:28.724 [DEBUG] [Thread-133725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:28:29.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:28:29.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:28:29.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:28:30.603 [DEBUG] [Thread-133726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:28:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 28, 8), 6.11, 67.84, 0.0, 20.84, 19.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:28:32.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:28:08
2026-02-11T18:28:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:28:32.537 [DEBUG] [Thread-133727] [transport.py] [_log()] starting thread (client mode): 0xa57d6050
2026-02-11T18:28:32.537 [DEBUG] [Thread-133727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:28:32.558 [DEBUG] [Thread-133727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:28:32.558 [INFO] [Thread-133727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:28:32.561 [DEBUG] [Thread-133727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:28:32.561 [DEBUG] [Thread-133727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] client lang: <none>
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] server lang: <none>
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] kex follows: False
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] Compression: none
2026-02-11T18:28:32.562 [DEBUG] [Thread-133727] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:28:32.578 [DEBUG] [Thread-133727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:28:32.578 [DEBUG] [Thread-133727] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:28:32.578 [DEBUG] [Thread-133727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:28:32.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:28:32.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:28:32.579 [DEBUG] [Thread-133727] [transport.py] [_log()] userauth is OK
2026-02-11T18:28:32.580 [DEBUG] [Thread-133727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:28:32.580 [DEBUG] [Thread-133727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:28:32.580 [DEBUG] [Thread-133727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:28:32.580 [DEBUG] [Thread-133727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:28:32.601 [INFO] [Thread-133727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:28:32.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:28:33.231 [DEBUG] [Thread-133727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:28:33.231 [DEBUG] [Thread-133727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:28:33.231 [DEBUG] [Thread-133727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:28:33.272 [DEBUG] [Thread-133727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:28:33.272 [DEBUG] [Thread-133727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:28:33.276 [DEBUG] [Thread-133727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:28:33.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:28:33.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:28:33.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:28:33.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:28:33.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:28:33.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:28:33.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:28:33.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:28:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:28:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.686252 -999.00  +19.50  18.71     72  +14.30 1 3 1 1 1   887    0 -0.35 -143.92 ----- 19.8 18.7 297.8 22.8 20.9 -8.2 20.7 -7.9 20.2 -8.5 20.4 -8.3
2026-02-11T18:28:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:28:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:28:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.686252
2026-02-11T18:28:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:28:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:28:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:28:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:28:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:28:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:28:08', tmtdew=6.11, humidity=67.84, cloud=0.0, wind=20.84, temperature=19.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:28:12.173', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:28:33.299 [DEBUG] [Thread-133727] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:28:33.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:28:33.395 [DEBUG] [Thread-133730] [transport.py] [_log()] starting thread (client mode): 0xa57d4a60
2026-02-11T18:28:33.396 [DEBUG] [Thread-133730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:28:33.410 [DEBUG] [Thread-133730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:28:33.411 [INFO] [Thread-133730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:28:33.418 [DEBUG] [Thread-133730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:28:33.419 [DEBUG] [Thread-133730] [transport.py] [_log()] client lang: <none>
2026-02-11T18:28:33.420 [DEBUG] [Thread-133730] [transport.py] [_log()] server lang: <none>
2026-02-11T18:28:33.420 [DEBUG] [Thread-133730] [transport.py] [_log()] kex follows: False
2026-02-11T18:28:33.420 [DEBUG] [Thread-133730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:28:33.420 [DEBUG] [Thread-133730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:28:33.420 [DEBUG] [Thread-133730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:28:33.420 [DEBUG] [Thread-133730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:28:33.420 [DEBUG] [Thread-133730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:28:33.421 [DEBUG] [Thread-133730] [transport.py] [_log()] Compression: none
2026-02-11T18:28:33.421 [DEBUG] [Thread-133730] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:28:33.479 [DEBUG] [Thread-133730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:28:33.480 [DEBUG] [Thread-133730] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:28:33.480 [DEBUG] [Thread-133730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:28:33.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:28:33.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:28:33.537 [DEBUG] [Thread-133730] [transport.py] [_log()] userauth is OK
2026-02-11T18:28:33.537 [DEBUG] [Thread-133730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:28:33.538 [DEBUG] [Thread-133730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:28:33.538 [DEBUG] [Thread-133730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:28:33.538 [DEBUG] [Thread-133730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:28:33.558 [INFO] [Thread-133730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:28:33.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:28:33.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:28:34.384 [DEBUG] [Thread-133730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:28:34.384 [DEBUG] [Thread-133730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:28:34.432 [DEBUG] [Thread-133730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:28:34.433 [DEBUG] [Thread-133730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:28:34.442 [DEBUG] [Thread-133730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:28:34.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:28:34.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:28:34.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:28:34.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:28:34.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:28:34.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:28:34.479 [DEBUG] [Thread-133730] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:28:43.761 [DEBUG] [Thread-133732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:28:58.814 [DEBUG] [Thread-133733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:28:59.336 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:28:59.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:29:04.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:29:04.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:29:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:29:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 28, 44), 6.3, 67.16, 0.0, 19.25, 19.77, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:29:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:28:44
2026-02-11T18:29:06.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:29:06.856 [DEBUG] [Thread-133734] [transport.py] [_log()] starting thread (client mode): 0xa2db7130
2026-02-11T18:29:06.857 [DEBUG] [Thread-133734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:29:06.876 [DEBUG] [Thread-133734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:29:06.877 [INFO] [Thread-133734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] client lang: <none>
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] server lang: <none>
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] kex follows: False
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:29:06.880 [DEBUG] [Thread-133734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:29:06.881 [DEBUG] [Thread-133734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:29:06.881 [DEBUG] [Thread-133734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:29:06.881 [DEBUG] [Thread-133734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:29:06.881 [DEBUG] [Thread-133734] [transport.py] [_log()] Compression: none
2026-02-11T18:29:06.881 [DEBUG] [Thread-133734] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:29:06.896 [DEBUG] [Thread-133734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:29:06.896 [DEBUG] [Thread-133734] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:29:06.897 [DEBUG] [Thread-133734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:29:06.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:29:06.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:29:06.899 [DEBUG] [Thread-133734] [transport.py] [_log()] userauth is OK
2026-02-11T18:29:06.899 [DEBUG] [Thread-133734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:29:06.899 [DEBUG] [Thread-133734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:29:06.899 [DEBUG] [Thread-133734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:29:06.899 [DEBUG] [Thread-133734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:29:06.923 [INFO] [Thread-133734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:29:06.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:29:07.550 [DEBUG] [Thread-133734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:29:07.551 [DEBUG] [Thread-133734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:29:07.551 [DEBUG] [Thread-133734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:29:07.591 [DEBUG] [Thread-133734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:29:07.591 [DEBUG] [Thread-133734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:29:07.594 [DEBUG] [Thread-133734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:29:07.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:29:07.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:29:07.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:29:07.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:29:07.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:29:07.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:29:07.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:29:07.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:29:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:29:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.686599 -999.00  +19.50  14.65     72  +14.30 1 3 1 1 1   887    0 0.42 -116.47 ----- 17.5 14.7 290.4 21.5 20.9 -8.8 20.8 -8.4 20.3 -9.1 20.5 -8.6
2026-02-11T18:29:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:29:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:29:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.686599
2026-02-11T18:29:07.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:29:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:29:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:29:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:29:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:29:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:28:44', tmtdew=6.3, humidity=67.16, cloud=0.0, wind=19.25, temperature=19.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:28:42.154', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:29:07.617 [DEBUG] [Thread-133734] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:29:07.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:29:07.712 [DEBUG] [Thread-133737] [transport.py] [_log()] starting thread (client mode): 0xa57e3d60
2026-02-11T18:29:07.713 [DEBUG] [Thread-133737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:29:07.728 [DEBUG] [Thread-133737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:29:07.729 [INFO] [Thread-133737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:29:07.736 [DEBUG] [Thread-133737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:29:07.736 [DEBUG] [Thread-133737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:29:07.736 [DEBUG] [Thread-133737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:29:07.736 [DEBUG] [Thread-133737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:07.736 [DEBUG] [Thread-133737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:07.736 [DEBUG] [Thread-133737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:07.736 [DEBUG] [Thread-133737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] client lang: <none>
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] server lang: <none>
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] kex follows: False
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] Compression: none
2026-02-11T18:29:07.737 [DEBUG] [Thread-133737] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:29:07.795 [DEBUG] [Thread-133737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:29:07.795 [DEBUG] [Thread-133737] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:29:07.796 [DEBUG] [Thread-133737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:29:07.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:29:07.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:29:07.854 [DEBUG] [Thread-133737] [transport.py] [_log()] userauth is OK
2026-02-11T18:29:07.854 [DEBUG] [Thread-133737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:29:07.855 [DEBUG] [Thread-133737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:29:07.855 [DEBUG] [Thread-133737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:29:07.855 [DEBUG] [Thread-133737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:29:07.874 [INFO] [Thread-133737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:29:07.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:29:07.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:29:08.723 [DEBUG] [Thread-133737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:29:08.723 [DEBUG] [Thread-133737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:29:08.771 [DEBUG] [Thread-133737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:29:08.772 [DEBUG] [Thread-133737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:29:08.781 [DEBUG] [Thread-133737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:29:08.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:29:08.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:29:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:29:08.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:29:08.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:29:08.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:29:08.817 [DEBUG] [Thread-133737] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:29:13.851 [DEBUG] [Thread-133739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:29:28.900 [DEBUG] [Thread-133740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:29:30.637 [DEBUG] [Thread-133741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:29:38.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:29:38.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:29:38.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:29:40.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 29, 20), 6.42, 66.66, 0.0, 19.29, 19.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:29:40.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:29:20
2026-02-11T18:29:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:29:41.228 [DEBUG] [Thread-133742] [transport.py] [_log()] starting thread (client mode): 0xa2db5e70
2026-02-11T18:29:41.228 [DEBUG] [Thread-133742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:29:41.241 [DEBUG] [Thread-133742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:29:41.241 [INFO] [Thread-133742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] client lang: <none>
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] server lang: <none>
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] kex follows: False
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] Compression: none
2026-02-11T18:29:41.244 [DEBUG] [Thread-133742] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:29:41.261 [DEBUG] [Thread-133742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:29:41.261 [DEBUG] [Thread-133742] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:29:41.262 [DEBUG] [Thread-133742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:29:41.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:29:41.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:29:41.263 [DEBUG] [Thread-133742] [transport.py] [_log()] userauth is OK
2026-02-11T18:29:41.264 [DEBUG] [Thread-133742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:29:41.264 [DEBUG] [Thread-133742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:29:41.264 [DEBUG] [Thread-133742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:29:41.264 [DEBUG] [Thread-133742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:29:41.298 [INFO] [Thread-133742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:29:41.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:29:42.059 [DEBUG] [Thread-133742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:29:42.060 [DEBUG] [Thread-133742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:29:42.060 [DEBUG] [Thread-133742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:29:42.100 [DEBUG] [Thread-133742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:29:42.100 [DEBUG] [Thread-133742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:29:42.103 [DEBUG] [Thread-133742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:29:42.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:29:42.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:29:42.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:29:42.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:29:42.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:29:42.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:29:42.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:29:42.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:29:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:29:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.686946 -999.00  +19.60  18.37     72  +14.40 1 3 1 1 1   887    0 1.47 -81.63 ----- 19.2 18.4 294.4 22.5 21.0 -9.2 20.8 -8.6 20.4 -9.2 20.6 -9.1
2026-02-11T18:29:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:29:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:29:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.686946
2026-02-11T18:29:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:29:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:29:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:29:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:29:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:29:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:29:20', tmtdew=6.42, humidity=66.66, cloud=0.0, wind=19.29, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:29:12.134', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:29:42.127 [DEBUG] [Thread-133742] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:29:42.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:29:42.225 [DEBUG] [Thread-133745] [transport.py] [_log()] starting thread (client mode): 0x9eb06530
2026-02-11T18:29:42.225 [DEBUG] [Thread-133745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:29:42.239 [DEBUG] [Thread-133745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:29:42.239 [INFO] [Thread-133745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:29:42.246 [DEBUG] [Thread-133745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] client lang: <none>
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] server lang: <none>
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] kex follows: False
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] Compression: none
2026-02-11T18:29:42.247 [DEBUG] [Thread-133745] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:29:42.306 [DEBUG] [Thread-133745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:29:42.307 [DEBUG] [Thread-133745] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:29:42.307 [DEBUG] [Thread-133745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:29:42.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:29:42.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:29:42.363 [DEBUG] [Thread-133745] [transport.py] [_log()] userauth is OK
2026-02-11T18:29:42.363 [DEBUG] [Thread-133745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:29:42.363 [DEBUG] [Thread-133745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:29:42.363 [DEBUG] [Thread-133745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:29:42.363 [DEBUG] [Thread-133745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:29:42.381 [INFO] [Thread-133745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:29:42.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:29:42.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:29:43.191 [DEBUG] [Thread-133745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:29:43.191 [DEBUG] [Thread-133745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:29:43.239 [DEBUG] [Thread-133745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:29:43.239 [DEBUG] [Thread-133745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:29:43.247 [DEBUG] [Thread-133745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:29:43.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:29: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')
2026-02-11T18:29:43.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:29:43.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:29:43.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:29:43.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:29:43.279 [DEBUG] [Thread-133745] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:29:43.932 [DEBUG] [Thread-133747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:29:58.986 [DEBUG] [Thread-133748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:29:59.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:29:59.481 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:30:13.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:30:13.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:30: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
2026-02-11T18:30:14.027 [DEBUG] [Thread-133749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:30:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 29, 56), 6.89, 64.57, 0.0, 22.34, 19.86, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:30:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:29:56
2026-02-11T18:30:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:30:16.231 [DEBUG] [Thread-133750] [transport.py] [_log()] starting thread (client mode): 0xa2d56740
2026-02-11T18:30:16.231 [DEBUG] [Thread-133750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:30:16.250 [DEBUG] [Thread-133750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:30:16.250 [INFO] [Thread-133750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] client lang: <none>
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] server lang: <none>
2026-02-11T18:30:16.254 [DEBUG] [Thread-133750] [transport.py] [_log()] kex follows: False
2026-02-11T18:30:16.255 [DEBUG] [Thread-133750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:30:16.255 [DEBUG] [Thread-133750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:30:16.255 [DEBUG] [Thread-133750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:30:16.255 [DEBUG] [Thread-133750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:30:16.255 [DEBUG] [Thread-133750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:30:16.255 [DEBUG] [Thread-133750] [transport.py] [_log()] Compression: none
2026-02-11T18:30:16.255 [DEBUG] [Thread-133750] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:30:16.274 [DEBUG] [Thread-133750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:30:16.275 [DEBUG] [Thread-133750] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:30:16.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:30:16.277 [DEBUG] [Thread-133750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:30:16.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:30:16.279 [DEBUG] [Thread-133750] [transport.py] [_log()] userauth is OK
2026-02-11T18:30:16.279 [DEBUG] [Thread-133750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:30:16.279 [DEBUG] [Thread-133750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:30:16.279 [DEBUG] [Thread-133750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:30:16.280 [DEBUG] [Thread-133750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:30:16.301 [INFO] [Thread-133750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:30:16.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:30:16.938 [DEBUG] [Thread-133750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:30:16.939 [DEBUG] [Thread-133750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:30:16.939 [DEBUG] [Thread-133750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:30:16.979 [DEBUG] [Thread-133750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:30:16.979 [DEBUG] [Thread-133750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:30:16.983 [DEBUG] [Thread-133750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:30:16.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:30:16.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:30:16.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:30:17.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:30:17.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:30:17.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:30:17.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:30:17.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:30:17.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:30:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.687293 -999.00  +19.70  14.90     70  +14.10 1 3 1 1 1   887    0 2.15 -59.04 ----- 13.5 14.9 289.6 19.9 21.1 -9.2 20.9 -8.9 20.4 -9.7 20.6 -9.3
2026-02-11T18:30:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:30:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:30:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.687293
2026-02-11T18:30:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:30:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:30:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:30:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:30:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:30:17.009 [DEBUG] [Thread-133750] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:30:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:29:56', tmtdew=6.89, humidity=64.57, cloud=0.0, wind=22.34, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:29:42.115', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:30:17.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:30:17.105 [DEBUG] [Thread-133753] [transport.py] [_log()] starting thread (client mode): 0xa57b3a60
2026-02-11T18:30:17.106 [DEBUG] [Thread-133753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:30:17.123 [DEBUG] [Thread-133753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:30:17.124 [INFO] [Thread-133753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] client lang: <none>
2026-02-11T18:30:17.131 [DEBUG] [Thread-133753] [transport.py] [_log()] server lang: <none>
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] kex follows: False
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] Compression: none
2026-02-11T18:30:17.132 [DEBUG] [Thread-133753] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:30:17.188 [DEBUG] [Thread-133753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:30:17.189 [DEBUG] [Thread-133753] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:30:17.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:30:17.190 [DEBUG] [Thread-133753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:30:17.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:30:17.244 [DEBUG] [Thread-133753] [transport.py] [_log()] userauth is OK
2026-02-11T18:30:17.244 [DEBUG] [Thread-133753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:30:17.244 [DEBUG] [Thread-133753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:30:17.244 [DEBUG] [Thread-133753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:30:17.244 [DEBUG] [Thread-133753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:30:17.263 [INFO] [Thread-133753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:30:17.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:30:17.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:30:18.147 [DEBUG] [Thread-133753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:30:18.147 [DEBUG] [Thread-133753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:30:18.195 [DEBUG] [Thread-133753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:30:18.195 [DEBUG] [Thread-133753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:30:18.204 [DEBUG] [Thread-133753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:30:18.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:30:18.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:30:18.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:30:18.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:30:18.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:30:18.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:30:18.246 [DEBUG] [Thread-133753] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:30:29.070 [DEBUG] [Thread-133755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:30:30.692 [DEBUG] [Thread-133756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:30:44.122 [DEBUG] [Thread-133757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:30:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:30:48.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:30:48.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:30:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 30, 32), 7.01, 64.07, 0.0, 21.9, 19.91, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:30:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:30:32
2026-02-11T18:30:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:30:51.074 [DEBUG] [Thread-133758] [transport.py] [_log()] starting thread (client mode): 0xa57b3010
2026-02-11T18:30:51.075 [DEBUG] [Thread-133758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:30:51.092 [DEBUG] [Thread-133758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:30:51.092 [INFO] [Thread-133758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] client lang: <none>
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] server lang: <none>
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] kex follows: False
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] Compression: none
2026-02-11T18:30:51.095 [DEBUG] [Thread-133758] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:30:51.115 [DEBUG] [Thread-133758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:30:51.116 [DEBUG] [Thread-133758] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:30:51.116 [DEBUG] [Thread-133758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:30:51.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:30:51.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:30:51.119 [DEBUG] [Thread-133758] [transport.py] [_log()] userauth is OK
2026-02-11T18:30:51.119 [DEBUG] [Thread-133758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:30:51.119 [DEBUG] [Thread-133758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:30:51.119 [DEBUG] [Thread-133758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:30:51.119 [DEBUG] [Thread-133758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:30:51.144 [INFO] [Thread-133758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:30:51.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:30:51.799 [DEBUG] [Thread-133758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:30:51.799 [DEBUG] [Thread-133758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:30:51.800 [DEBUG] [Thread-133758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:30:51.840 [DEBUG] [Thread-133758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:30:51.841 [DEBUG] [Thread-133758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:30:51.844 [DEBUG] [Thread-133758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:30:51.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:30:51.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:30:51.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:30:51.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:30:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:30:51.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:30:51.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:30:51.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:30:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:30:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.687641 -999.00  +19.70  21.38     71  +14.30 1 3 1 1 1   887    0 3.08 -30.19 ----- 21.0 21.4 290.4 25.2 21.1 -9.7 21.0 -9.4 20.5 -10.1 20.7 -9.9
2026-02-11T18:30:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:30:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:30:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.687641
2026-02-11T18:30:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:30:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:30:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:30:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:30:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T18:30:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:30:32', tmtdew=7.01, humidity=64.07, cloud=0.0, wind=21.9, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:30:12.182', atlas_cloud=3, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:30:51.872 [DEBUG] [Thread-133758] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:30:51.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:30:51.969 [DEBUG] [Thread-133761] [transport.py] [_log()] starting thread (client mode): 0xa2db5bd0
2026-02-11T18:30:51.969 [DEBUG] [Thread-133761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:30:51.983 [DEBUG] [Thread-133761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:30:51.983 [INFO] [Thread-133761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:30:51.991 [DEBUG] [Thread-133761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:30:51.991 [DEBUG] [Thread-133761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:30:51.991 [DEBUG] [Thread-133761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:30:51.991 [DEBUG] [Thread-133761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:51.991 [DEBUG] [Thread-133761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] client lang: <none>
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] server lang: <none>
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] kex follows: False
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] Compression: none
2026-02-11T18:30:51.992 [DEBUG] [Thread-133761] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:30:52.049 [DEBUG] [Thread-133761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:30:52.049 [DEBUG] [Thread-133761] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:30:52.050 [DEBUG] [Thread-133761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:30:52.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:30:52.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:30:52.105 [DEBUG] [Thread-133761] [transport.py] [_log()] userauth is OK
2026-02-11T18:30:52.105 [DEBUG] [Thread-133761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:30:52.106 [DEBUG] [Thread-133761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:30:52.106 [DEBUG] [Thread-133761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:30:52.106 [DEBUG] [Thread-133761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:30:52.125 [INFO] [Thread-133761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:30:52.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:30:52.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:30:52.935 [DEBUG] [Thread-133761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:30:52.936 [DEBUG] [Thread-133761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:30:52.983 [DEBUG] [Thread-133761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:30:52.983 [DEBUG] [Thread-133761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:30:52.992 [DEBUG] [Thread-133761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:30:53.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:30:53.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:30:53.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:30:53.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:30:53.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:30:53.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:30:53.025 [DEBUG] [Thread-133761] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:30:59.164 [DEBUG] [Thread-133763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:30:59.622 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:30:59.623 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:14.214 [DEBUG] [Thread-133764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:31:23.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:31:23.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:31:24.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 31, 7), 6.99, 64.17, 0.0, 22.43, 19.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:31:24.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:31:07
2026-02-11T18:31:25.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:31:25.490 [DEBUG] [Thread-133765] [transport.py] [_log()] starting thread (client mode): 0xa2db79d0
2026-02-11T18:31:25.490 [DEBUG] [Thread-133765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:31:25.510 [DEBUG] [Thread-133765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:31:25.510 [INFO] [Thread-133765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] client lang: <none>
2026-02-11T18:31:25.513 [DEBUG] [Thread-133765] [transport.py] [_log()] server lang: <none>
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] kex follows: False
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] Compression: none
2026-02-11T18:31:25.514 [DEBUG] [Thread-133765] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:31:25.533 [DEBUG] [Thread-133765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:31:25.534 [DEBUG] [Thread-133765] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:31:25.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:31:25.535 [DEBUG] [Thread-133765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:31:25.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:31:25.537 [DEBUG] [Thread-133765] [transport.py] [_log()] userauth is OK
2026-02-11T18:31:25.538 [DEBUG] [Thread-133765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:31:25.538 [DEBUG] [Thread-133765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:31:25.538 [DEBUG] [Thread-133765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:31:25.538 [DEBUG] [Thread-133765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:31:25.562 [INFO] [Thread-133765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:31:25.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:31:26.205 [DEBUG] [Thread-133765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:31:26.206 [DEBUG] [Thread-133765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:31:26.206 [DEBUG] [Thread-133765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:31:26.247 [DEBUG] [Thread-133765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:31:26.247 [DEBUG] [Thread-133765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:31:26.250 [DEBUG] [Thread-133765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:31:26.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:31:26.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:31:26.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:31:26.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:31:26.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:31:26.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:31:26.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:31:26.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:31:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:31:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.687988 -999.00  +19.60  20.74     71  +14.20 1 2 1 1 1   887    0 3.55 -9.87 ----- 19.4 20.7 296.2 22.1 21.1 -10.1 21.0 -9.7 20.6 -10.8 20.7 -10.2
2026-02-11T18:31:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:31:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:31:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.687988
2026-02-11T18:31:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:31:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:31:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:31:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:31:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:31:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:31:07', tmtdew=6.99, humidity=64.17, cloud=0.0, wind=22.43, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:30:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:31:26.280 [DEBUG] [Thread-133765] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:31:26.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:31:26.377 [DEBUG] [Thread-133768] [transport.py] [_log()] starting thread (client mode): 0xa575b670
2026-02-11T18:31:26.377 [DEBUG] [Thread-133768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:31:26.393 [DEBUG] [Thread-133768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:31:26.393 [INFO] [Thread-133768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:31:26.401 [DEBUG] [Thread-133768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] client lang: <none>
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] server lang: <none>
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] kex follows: False
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:31:26.402 [DEBUG] [Thread-133768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:31:26.403 [DEBUG] [Thread-133768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:31:26.403 [DEBUG] [Thread-133768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:31:26.403 [DEBUG] [Thread-133768] [transport.py] [_log()] Compression: none
2026-02-11T18:31:26.403 [DEBUG] [Thread-133768] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:31:26.462 [DEBUG] [Thread-133768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:31:26.463 [DEBUG] [Thread-133768] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:31:26.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:31:26.464 [DEBUG] [Thread-133768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:31:26.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:31:26.522 [DEBUG] [Thread-133768] [transport.py] [_log()] userauth is OK
2026-02-11T18:31:26.522 [DEBUG] [Thread-133768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:31:26.523 [DEBUG] [Thread-133768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:31:26.523 [DEBUG] [Thread-133768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:31:26.523 [DEBUG] [Thread-133768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:31:26.544 [INFO] [Thread-133768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:31:26.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:31:26.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:31:27.379 [DEBUG] [Thread-133768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:31:27.380 [DEBUG] [Thread-133768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:31:27.429 [DEBUG] [Thread-133768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:31:27.429 [DEBUG] [Thread-133768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:31:27.438 [DEBUG] [Thread-133768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:31:27.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:31:27.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:31:27.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:31:27.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:31:27.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:31:27.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:31:27.475 [DEBUG] [Thread-133768] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:31:29.252 [DEBUG] [Thread-133770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:30.751 [DEBUG] [Thread-133771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:44.313 [DEBUG] [Thread-133772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:31:57.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:31: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
2026-02-11T18:31:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 31, 42), 7.23, 62.72, 0.0, 22.2, 20.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:31:59.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:31:42
2026-02-11T18:31:59.346 [DEBUG] [Thread-133773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:59.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:31:59.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:59.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:31:59.855 [DEBUG] [Thread-133774] [transport.py] [_log()] starting thread (client mode): 0xa5740df0
2026-02-11T18:31:59.855 [DEBUG] [Thread-133774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:31:59.877 [DEBUG] [Thread-133774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:31:59.877 [INFO] [Thread-133774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] client lang: <none>
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] server lang: <none>
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] kex follows: False
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] Compression: none
2026-02-11T18:31:59.880 [DEBUG] [Thread-133774] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:31:59.898 [DEBUG] [Thread-133774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:31:59.899 [DEBUG] [Thread-133774] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:31:59.899 [DEBUG] [Thread-133774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:31:59.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:31:59.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:31:59.901 [DEBUG] [Thread-133774] [transport.py] [_log()] userauth is OK
2026-02-11T18:31:59.901 [DEBUG] [Thread-133774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:31:59.902 [DEBUG] [Thread-133774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:31:59.902 [DEBUG] [Thread-133774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:31:59.902 [DEBUG] [Thread-133774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:31:59.923 [INFO] [Thread-133774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:31:59.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:32:00.559 [DEBUG] [Thread-133774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:32:00.559 [DEBUG] [Thread-133774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:32:00.559 [DEBUG] [Thread-133774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:32:00.599 [DEBUG] [Thread-133774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:32:00.600 [DEBUG] [Thread-133774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:32:00.603 [DEBUG] [Thread-133774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:32:00.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:32:00.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:32:00.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:32:00.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:32:00.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:32:00.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:32:00.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:32:00.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:32:00.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:32:00.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.688335 -999.00  +19.60  18.45     71  +14.30 1 2 1 1 1   887    0 4.16 8.07 ----- 22.7 18.4 288.8 23.2 21.2 -10.4 21.0 -9.9 20.6 -10.7 20.8 -10.6
2026-02-11T18:32:00.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:32:00.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:32:00.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.688335
2026-02-11T18:32:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:32:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:32:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:32:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:32:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:32:00.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:31:42', tmtdew=7.23, humidity=62.72, cloud=0.0, wind=22.2, temperature=20.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:31:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:32:00.631 [DEBUG] [Thread-133774] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:32:00.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:32:00.727 [DEBUG] [Thread-133777] [transport.py] [_log()] starting thread (client mode): 0xa57d6f80
2026-02-11T18:32:00.727 [DEBUG] [Thread-133777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:32:00.742 [DEBUG] [Thread-133777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:32:00.742 [INFO] [Thread-133777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:32:00.749 [DEBUG] [Thread-133777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] client lang: <none>
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] server lang: <none>
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] kex follows: False
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] Compression: none
2026-02-11T18:32:00.750 [DEBUG] [Thread-133777] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:32:00.810 [DEBUG] [Thread-133777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:32:00.810 [DEBUG] [Thread-133777] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:32:00.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:32:00.812 [DEBUG] [Thread-133777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:32:00.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:32:00.866 [DEBUG] [Thread-133777] [transport.py] [_log()] userauth is OK
2026-02-11T18:32:00.867 [DEBUG] [Thread-133777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:32:00.867 [DEBUG] [Thread-133777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:32:00.867 [DEBUG] [Thread-133777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:32:00.867 [DEBUG] [Thread-133777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:32:00.886 [INFO] [Thread-133777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:32:00.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:32:00.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:32:01.705 [DEBUG] [Thread-133777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:32:01.705 [DEBUG] [Thread-133777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:32:01.753 [DEBUG] [Thread-133777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:32:01.754 [DEBUG] [Thread-133777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:32:01.763 [DEBUG] [Thread-133777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:32:01.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:32:01.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:32: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
2026-02-11T18:32:01.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:32:01.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:32:01.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:32:01.799 [DEBUG] [Thread-133777] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:32:14.388 [DEBUG] [Thread-133779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:32:29.452 [DEBUG] [Thread-133780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:32:30.799 [DEBUG] [Thread-133781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:32:31.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:32:31.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:32:31.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:32:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 32, 19), 7.37, 62.17, 0.0, 24.21, 20.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:32:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:32:19
2026-02-11T18:32:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:32:34.458 [DEBUG] [Thread-133782] [transport.py] [_log()] starting thread (client mode): 0xa2d54820
2026-02-11T18:32:34.458 [DEBUG] [Thread-133782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:32:34.478 [DEBUG] [Thread-133782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:32:34.479 [INFO] [Thread-133782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:32:34.481 [DEBUG] [Thread-133782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:32:34.482 [DEBUG] [Thread-133782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] client lang: <none>
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] server lang: <none>
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] kex follows: False
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] Compression: none
2026-02-11T18:32:34.483 [DEBUG] [Thread-133782] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:32:34.502 [DEBUG] [Thread-133782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:32:34.503 [DEBUG] [Thread-133782] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:32:34.503 [DEBUG] [Thread-133782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:32:34.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:32:34.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:32:34.505 [DEBUG] [Thread-133782] [transport.py] [_log()] userauth is OK
2026-02-11T18:32:34.505 [DEBUG] [Thread-133782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:32:34.505 [DEBUG] [Thread-133782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:32:34.506 [DEBUG] [Thread-133782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:32:34.506 [DEBUG] [Thread-133782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:32:34.532 [INFO] [Thread-133782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:32:34.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:32:35.353 [DEBUG] [Thread-133782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:32:35.353 [DEBUG] [Thread-133782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:32:35.354 [DEBUG] [Thread-133782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:32:35.394 [DEBUG] [Thread-133782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:32:35.395 [DEBUG] [Thread-133782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:32:35.398 [DEBUG] [Thread-133782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:32:35.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:32:35.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:32:35.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:32:35.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:32:35.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:32:35.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:32:35.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:32:35.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:32:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:32:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.689029 -999.00  +19.70  21.64     69  +14.00 1 2 1 1 1   887    0 5.31 44.85 ----- 20.1 21.6 298.8 25.6 21.2 -11.0 21.1 -10.6 20.7 -11.4 20.9 -10.9
2026-02-11T18:32:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:32:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:32:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.689029
2026-02-11T18:32:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:32:35.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:32:35.424 [DEBUG] [Thread-133782] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:32:35.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:32:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:32:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:32:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:32:19', tmtdew=7.37, humidity=62.17, cloud=0.0, wind=24.21, temperature=20.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:32:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:32:35.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:32:35.519 [DEBUG] [Thread-133785] [transport.py] [_log()] starting thread (client mode): 0xa2d57d90
2026-02-11T18:32:35.519 [DEBUG] [Thread-133785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:32:35.534 [DEBUG] [Thread-133785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:32:35.534 [INFO] [Thread-133785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:32:35.541 [DEBUG] [Thread-133785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] client lang: <none>
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] server lang: <none>
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] kex follows: False
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] Compression: none
2026-02-11T18:32:35.542 [DEBUG] [Thread-133785] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:32:35.599 [DEBUG] [Thread-133785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:32:35.600 [DEBUG] [Thread-133785] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:32:35.600 [DEBUG] [Thread-133785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:32:35.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:32:35.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:32:35.655 [DEBUG] [Thread-133785] [transport.py] [_log()] userauth is OK
2026-02-11T18:32:35.655 [DEBUG] [Thread-133785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:32:35.655 [DEBUG] [Thread-133785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:32:35.656 [DEBUG] [Thread-133785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:32:35.656 [DEBUG] [Thread-133785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:32:35.680 [INFO] [Thread-133785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:32:35.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:32:35.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:32:36.493 [DEBUG] [Thread-133785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:32:36.493 [DEBUG] [Thread-133785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:32:36.541 [DEBUG] [Thread-133785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:32:36.542 [DEBUG] [Thread-133785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:32:36.551 [DEBUG] [Thread-133785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:32:36.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:32:36.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')
2026-02-11T18:32:36.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:32:36.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:32:36.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:32:36.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:32:36.587 [DEBUG] [Thread-133785] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:32:44.493 [DEBUG] [Thread-133787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:32:59.547 [DEBUG] [Thread-133788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:32:59.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:32:59.907 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:33:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:33:06.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:33:06.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:33:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 32, 54), 7.58, 61.53, 0.0, 24.14, 20.14, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:33:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:32:54
2026-02-11T18:33:08.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:33:08.982 [DEBUG] [Thread-133789] [transport.py] [_log()] starting thread (client mode): 0xa2d56710
2026-02-11T18:33:08.982 [DEBUG] [Thread-133789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:33:09.003 [DEBUG] [Thread-133789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:33:09.003 [INFO] [Thread-133789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:33:09.006 [DEBUG] [Thread-133789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:33:09.006 [DEBUG] [Thread-133789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] client lang: <none>
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] server lang: <none>
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] kex follows: False
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] Compression: none
2026-02-11T18:33:09.007 [DEBUG] [Thread-133789] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:33:09.024 [DEBUG] [Thread-133789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:33:09.025 [DEBUG] [Thread-133789] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:33:09.025 [DEBUG] [Thread-133789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:33:09.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:33:09.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:33:09.028 [DEBUG] [Thread-133789] [transport.py] [_log()] userauth is OK
2026-02-11T18:33:09.028 [DEBUG] [Thread-133789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:33:09.028 [DEBUG] [Thread-133789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:33:09.028 [DEBUG] [Thread-133789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:33:09.028 [DEBUG] [Thread-133789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:33:09.042 [INFO] [Thread-133789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:33:09.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:33:09.698 [DEBUG] [Thread-133789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:33:09.698 [DEBUG] [Thread-133789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:33:09.698 [DEBUG] [Thread-133789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:33:09.738 [DEBUG] [Thread-133789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:33:09.738 [DEBUG] [Thread-133789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:33:09.742 [DEBUG] [Thread-133789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:33:09.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:33:09.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:33:09.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:33:09.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:33:09.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:33:09.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:33:09.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:33:09.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:33:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:33:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.689377 -999.00  +19.80  18.53     69  +13.90 1 2 1 1 1   887    0 5.94 66.46 ----- 19.2 18.5 294.6 22.5 21.2 -10.9 21.1 -10.5 20.7 -11.4 20.9 -11.0
2026-02-11T18:33:09.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:33:09.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:33:09.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.689377
2026-02-11T18:33:09.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:33:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:33:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:33:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:33:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:33:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:32:54', tmtdew=7.58, humidity=61.53, cloud=0.0, wind=24.14, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:32:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:33:09.766 [DEBUG] [Thread-133789] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:33:09.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:33:09.865 [DEBUG] [Thread-133792] [transport.py] [_log()] starting thread (client mode): 0xa2db4e80
2026-02-11T18:33:09.865 [DEBUG] [Thread-133792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:33:09.880 [DEBUG] [Thread-133792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:33:09.881 [INFO] [Thread-133792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:33:09.888 [DEBUG] [Thread-133792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] client lang: <none>
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] server lang: <none>
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] kex follows: False
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:33:09.889 [DEBUG] [Thread-133792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:33:09.890 [DEBUG] [Thread-133792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:33:09.890 [DEBUG] [Thread-133792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:33:09.890 [DEBUG] [Thread-133792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:33:09.890 [DEBUG] [Thread-133792] [transport.py] [_log()] Compression: none
2026-02-11T18:33:09.890 [DEBUG] [Thread-133792] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:33:09.947 [DEBUG] [Thread-133792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:33:09.948 [DEBUG] [Thread-133792] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:33:09.949 [DEBUG] [Thread-133792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:33:09.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:33:09.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:33:10.004 [DEBUG] [Thread-133792] [transport.py] [_log()] userauth is OK
2026-02-11T18:33:10.004 [DEBUG] [Thread-133792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:33:10.004 [DEBUG] [Thread-133792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:33:10.004 [DEBUG] [Thread-133792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:33:10.005 [DEBUG] [Thread-133792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:33:10.024 [INFO] [Thread-133792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:33:10.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:33:10.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:33:10.908 [DEBUG] [Thread-133792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:33:10.908 [DEBUG] [Thread-133792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:33:10.956 [DEBUG] [Thread-133792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:33:10.957 [DEBUG] [Thread-133792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:33:10.966 [DEBUG] [Thread-133792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:33:10.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:33:10.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:33:10.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:33:10.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:33:10.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:33:10.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:33:11.002 [DEBUG] [Thread-133792] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:33:14.589 [DEBUG] [Thread-133794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:33:29.642 [DEBUG] [Thread-133795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:33:30.859 [DEBUG] [Thread-133796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:33:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:33:41.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:33:41.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:33:42.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 33, 29), 7.69, 61.15, 0.0, 22.74, 20.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:33:42.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:33:29
2026-02-11T18:33:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:33:43.340 [DEBUG] [Thread-133797] [transport.py] [_log()] starting thread (client mode): 0xa57e0be0
2026-02-11T18:33:43.340 [DEBUG] [Thread-133797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:33:43.360 [DEBUG] [Thread-133797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:33:43.360 [INFO] [Thread-133797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:33:43.361 [DEBUG] [Thread-133797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:33:43.361 [DEBUG] [Thread-133797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:33:43.361 [DEBUG] [Thread-133797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:33:43.361 [DEBUG] [Thread-133797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:43.361 [DEBUG] [Thread-133797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:43.361 [DEBUG] [Thread-133797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:43.361 [DEBUG] [Thread-133797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] client lang: <none>
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] server lang: <none>
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] kex follows: False
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] Compression: none
2026-02-11T18:33:43.362 [DEBUG] [Thread-133797] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:33:43.371 [DEBUG] [Thread-133797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:33:43.371 [DEBUG] [Thread-133797] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:33:43.372 [DEBUG] [Thread-133797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:33:43.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:33:43.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:33:43.373 [DEBUG] [Thread-133797] [transport.py] [_log()] userauth is OK
2026-02-11T18:33:43.374 [DEBUG] [Thread-133797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:33:43.374 [DEBUG] [Thread-133797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:33:43.374 [DEBUG] [Thread-133797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:33:43.374 [DEBUG] [Thread-133797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:33:43.393 [INFO] [Thread-133797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:33:43.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:33:44.034 [DEBUG] [Thread-133797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:33:44.034 [DEBUG] [Thread-133797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:33:44.035 [DEBUG] [Thread-133797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:33:44.075 [DEBUG] [Thread-133797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:33:44.076 [DEBUG] [Thread-133797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:33:44.078 [DEBUG] [Thread-133797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:33:44.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:33:44.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:33:44.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:33:44.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:33:44.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:33:44.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:33:44.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:33:44.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:33:44.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:33:44.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.689724 -999.00  +19.80  21.88     67  +13.60 1 2 1 1 1   887    0 6.36 80.78 ----- 18.1 21.9 301.4 27.0 21.3 -11.3 21.2 -10.8 20.8 -11.6 21.0 -11.3
2026-02-11T18:33:44.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:33:44.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:33:44.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.689724
2026-02-11T18:33:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:33:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:33:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:33:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:33:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:33:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:33:29', tmtdew=7.69, humidity=61.15, cloud=0.0, wind=22.74, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:33:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:33:44.105 [DEBUG] [Thread-133797] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:33:44.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:33:44.200 [DEBUG] [Thread-133800] [transport.py] [_log()] starting thread (client mode): 0xa57e2410
2026-02-11T18:33:44.200 [DEBUG] [Thread-133800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:33:44.215 [DEBUG] [Thread-133800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:33:44.215 [INFO] [Thread-133800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] client lang: <none>
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] server lang: <none>
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] kex follows: False
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:33:44.223 [DEBUG] [Thread-133800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:33:44.224 [DEBUG] [Thread-133800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:33:44.224 [DEBUG] [Thread-133800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:33:44.224 [DEBUG] [Thread-133800] [transport.py] [_log()] Compression: none
2026-02-11T18:33:44.224 [DEBUG] [Thread-133800] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:33:44.281 [DEBUG] [Thread-133800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:33:44.281 [DEBUG] [Thread-133800] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:33:44.282 [DEBUG] [Thread-133800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:33:44.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:33:44.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:33:44.340 [DEBUG] [Thread-133800] [transport.py] [_log()] userauth is OK
2026-02-11T18:33:44.341 [DEBUG] [Thread-133800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:33:44.341 [DEBUG] [Thread-133800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:33:44.341 [DEBUG] [Thread-133800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:33:44.341 [DEBUG] [Thread-133800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:33:44.359 [INFO] [Thread-133800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:33:44.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:33:44.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:33:44.681 [DEBUG] [Thread-133802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:33:45.198 [DEBUG] [Thread-133800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:33:45.198 [DEBUG] [Thread-133800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:33:45.247 [DEBUG] [Thread-133800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:33:45.247 [DEBUG] [Thread-133800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:33:45.257 [DEBUG] [Thread-133800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:33:45.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:33:45.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:33:45.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:33:45.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:33:45.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:33:45.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:33:45.294 [DEBUG] [Thread-133800] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:33:59.731 [DEBUG] [Thread-133803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:34:00.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:34:00.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:34:14.772 [DEBUG] [Thread-133804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:34:15.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:34:15.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:34:15.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:34:17.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 34, 5), 7.67, 61.21, 0.0, 21.88, 20.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:34:17.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:34:05
2026-02-11T18:34:17.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:34:18.146 [DEBUG] [Thread-133805] [transport.py] [_log()] starting thread (client mode): 0xa57715a0
2026-02-11T18:34:18.146 [DEBUG] [Thread-133805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:34:18.166 [DEBUG] [Thread-133805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:34:18.166 [INFO] [Thread-133805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] client lang: <none>
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] server lang: <none>
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] kex follows: False
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:34:18.169 [DEBUG] [Thread-133805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:34:18.170 [DEBUG] [Thread-133805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:34:18.170 [DEBUG] [Thread-133805] [transport.py] [_log()] Compression: none
2026-02-11T18:34:18.170 [DEBUG] [Thread-133805] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:34:18.189 [DEBUG] [Thread-133805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:34:18.189 [DEBUG] [Thread-133805] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:34:18.190 [DEBUG] [Thread-133805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:34:18.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:34:18.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:34:18.192 [DEBUG] [Thread-133805] [transport.py] [_log()] userauth is OK
2026-02-11T18:34:18.192 [DEBUG] [Thread-133805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:34:18.192 [DEBUG] [Thread-133805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:34:18.192 [DEBUG] [Thread-133805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:34:18.192 [DEBUG] [Thread-133805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:34:18.216 [INFO] [Thread-133805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:34:18.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:34:18.828 [DEBUG] [Thread-133805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:34:18.828 [DEBUG] [Thread-133805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:34:18.828 [DEBUG] [Thread-133805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:34:18.868 [DEBUG] [Thread-133805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:34:18.869 [DEBUG] [Thread-133805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:34:18.872 [DEBUG] [Thread-133805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:34:18.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:34:18.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:34:18.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:34:18.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:34:18.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:34:18.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:34:18.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:34:18.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:34:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:34:18.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.690071 -999.00  +19.90  18.12     67  +13.70 1 2 1 1 1   887    0 6.84 94.03 ----- 20.6 18.1 303.0 23.9 21.3 -11.0 21.2 -10.9 20.8 -11.8 21.0 -11.4
2026-02-11T18:34:18.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:34:18.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:34:18.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.690071
2026-02-11T18:34:18.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:34:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:34:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:34:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:34:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:34:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:34:05', tmtdew=7.67, humidity=61.21, cloud=0.0, wind=21.88, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:33:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:34:18.900 [DEBUG] [Thread-133805] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:34:18.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:34:18.996 [DEBUG] [Thread-133808] [transport.py] [_log()] starting thread (client mode): 0xa5758a90
2026-02-11T18:34:18.996 [DEBUG] [Thread-133808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:34:19.011 [DEBUG] [Thread-133808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:34:19.011 [INFO] [Thread-133808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] client lang: <none>
2026-02-11T18:34:19.019 [DEBUG] [Thread-133808] [transport.py] [_log()] server lang: <none>
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] kex follows: False
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] Compression: none
2026-02-11T18:34:19.020 [DEBUG] [Thread-133808] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:34:19.076 [DEBUG] [Thread-133808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:34:19.077 [DEBUG] [Thread-133808] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:34:19.077 [DEBUG] [Thread-133808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:34:19.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:34:19.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:34:19.137 [DEBUG] [Thread-133808] [transport.py] [_log()] userauth is OK
2026-02-11T18:34:19.137 [DEBUG] [Thread-133808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:34:19.137 [DEBUG] [Thread-133808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:34:19.138 [DEBUG] [Thread-133808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:34:19.138 [DEBUG] [Thread-133808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:34:19.157 [INFO] [Thread-133808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:34:19.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:34:19.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:34:19.967 [DEBUG] [Thread-133808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:34:19.968 [DEBUG] [Thread-133808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:34:20.015 [DEBUG] [Thread-133808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:34:20.015 [DEBUG] [Thread-133808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:34:20.024 [DEBUG] [Thread-133808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:34:20.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:34:20.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:34:20.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:34:20.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:34:20.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:34:20.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:34:20.058 [DEBUG] [Thread-133808] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:34:29.808 [DEBUG] [Thread-133810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:34:30.912 [DEBUG] [Thread-133811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:34:44.870 [DEBUG] [Thread-133812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:34:50.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:34:50.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:34:50.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:34:52.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 34, 40), 8.51, 58.16, 0.0, 23.46, 20.95, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:34:52.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:34:40
2026-02-11T18:34:52.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:34:52.593 [DEBUG] [Thread-133813] [transport.py] [_log()] starting thread (client mode): 0xa57b3700
2026-02-11T18:34:52.593 [DEBUG] [Thread-133813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:34:52.614 [DEBUG] [Thread-133813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:34:52.614 [INFO] [Thread-133813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:34:52.617 [DEBUG] [Thread-133813] [transport.py] [_log()] client lang: <none>
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] server lang: <none>
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] kex follows: False
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] Compression: none
2026-02-11T18:34:52.618 [DEBUG] [Thread-133813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:34:52.635 [DEBUG] [Thread-133813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:34:52.635 [DEBUG] [Thread-133813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:34:52.636 [DEBUG] [Thread-133813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:34:52.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:34:52.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:34:52.638 [DEBUG] [Thread-133813] [transport.py] [_log()] userauth is OK
2026-02-11T18:34:52.638 [DEBUG] [Thread-133813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:34:52.638 [DEBUG] [Thread-133813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:34:52.638 [DEBUG] [Thread-133813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:34:52.638 [DEBUG] [Thread-133813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:34:52.651 [INFO] [Thread-133813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:34:52.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:34:53.264 [DEBUG] [Thread-133813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:34:53.264 [DEBUG] [Thread-133813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:34:53.264 [DEBUG] [Thread-133813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:34:53.305 [DEBUG] [Thread-133813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:34:53.305 [DEBUG] [Thread-133813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:34:53.308 [DEBUG] [Thread-133813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:34:53.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:34:53.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:34:53.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:34:53.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:34:53.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:34:53.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:34:53.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:34:53.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:34:53.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:34:53.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.690418 -999.00  +19.90  22.64     66  +13.50 1 2 1 1 1   887    0 7.24 106.89 ----- 20.9 22.6 295.0 27.1 21.4 -11.5 21.2 -11.3 20.8 -12.3 21.1 -11.7
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.690418
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:34:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:34:40', tmtdew=8.51, humidity=58.16, cloud=0.0, wind=23.46, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:34:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:34:53.332 [DEBUG] [Thread-133813] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:34:53.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:34:53.423 [DEBUG] [Thread-133816] [transport.py] [_log()] starting thread (client mode): 0xa5772e60
2026-02-11T18:34:53.423 [DEBUG] [Thread-133816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:34:53.444 [DEBUG] [Thread-133816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:34:53.444 [INFO] [Thread-133816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:34:53.451 [DEBUG] [Thread-133816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:34:53.452 [DEBUG] [Thread-133816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:34:53.452 [DEBUG] [Thread-133816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:34:53.452 [DEBUG] [Thread-133816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:53.452 [DEBUG] [Thread-133816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:34:53.452 [DEBUG] [Thread-133816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] client lang: <none>
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] server lang: <none>
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] kex follows: False
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:34:53.453 [DEBUG] [Thread-133816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:34:53.454 [DEBUG] [Thread-133816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:34:53.454 [DEBUG] [Thread-133816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:34:53.454 [DEBUG] [Thread-133816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:34:53.454 [DEBUG] [Thread-133816] [transport.py] [_log()] Compression: none
2026-02-11T18:34:53.454 [DEBUG] [Thread-133816] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:34:53.510 [DEBUG] [Thread-133816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:34:53.511 [DEBUG] [Thread-133816] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:34:53.511 [DEBUG] [Thread-133816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:34:53.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:34:53.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:34:53.565 [DEBUG] [Thread-133816] [transport.py] [_log()] userauth is OK
2026-02-11T18:34:53.566 [DEBUG] [Thread-133816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:34:53.566 [DEBUG] [Thread-133816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:34:53.566 [DEBUG] [Thread-133816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:34:53.566 [DEBUG] [Thread-133816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:34:53.584 [INFO] [Thread-133816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:34:53.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:34:53.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:34:54.478 [DEBUG] [Thread-133816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:34:54.478 [DEBUG] [Thread-133816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:34:54.526 [DEBUG] [Thread-133816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:34:54.527 [DEBUG] [Thread-133816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:34:54.536 [DEBUG] [Thread-133816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:34:54.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:34:54.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:34:54.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:34:54.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:34:54.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:34:54.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:34:54.573 [DEBUG] [Thread-133816] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:34:59.909 [DEBUG] [Thread-133818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:35:00.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:35:00.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:35:14.969 [DEBUG] [Thread-133819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:35:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:35:24.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:35:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:35:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 35, 15), 7.93, 59.98, 0.0, 21.72, 20.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:35:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:35:15
2026-02-11T18:35:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:35:27.259 [DEBUG] [Thread-133820] [transport.py] [_log()] starting thread (client mode): 0xa2d54d30
2026-02-11T18:35:27.260 [DEBUG] [Thread-133820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:35:27.280 [DEBUG] [Thread-133820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:35:27.280 [INFO] [Thread-133820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:35:27.283 [DEBUG] [Thread-133820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:35:27.283 [DEBUG] [Thread-133820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:35:27.283 [DEBUG] [Thread-133820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] client lang: <none>
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] server lang: <none>
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] kex follows: False
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] Compression: none
2026-02-11T18:35:27.284 [DEBUG] [Thread-133820] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:35:27.304 [DEBUG] [Thread-133820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:35:27.305 [DEBUG] [Thread-133820] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:35:27.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:35:27.306 [DEBUG] [Thread-133820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:35:27.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:35:27.349 [DEBUG] [Thread-133820] [transport.py] [_log()] userauth is OK
2026-02-11T18:35:27.349 [DEBUG] [Thread-133820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:35:27.349 [DEBUG] [Thread-133820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:35:27.349 [DEBUG] [Thread-133820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:35:27.349 [DEBUG] [Thread-133820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:35:27.380 [INFO] [Thread-133820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:35:27.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:35:28.168 [DEBUG] [Thread-133820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:35:28.168 [DEBUG] [Thread-133820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:35:28.168 [DEBUG] [Thread-133820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:35:28.209 [DEBUG] [Thread-133820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:35:28.210 [DEBUG] [Thread-133820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:35:28.213 [DEBUG] [Thread-133820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:35:28.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:35:28.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:35:28.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:35:28.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:35:28.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:35:28.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:35:28.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:35:28.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:35:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:35:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.690765 -999.00  +20.00  18.38     67  +13.70 1 2 1 1 1   887    0 7.97 128.60 ----- 22.2 18.4 287.8 26.8 21.4 -11.4 21.2 -11.7 20.9 -12.6 21.1 -12.0
2026-02-11T18:35:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:35:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:35:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.690765
2026-02-11T18:35:28.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:35:28.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:35:28.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:35:28.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:35:28.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:35:28.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:35:15', tmtdew=7.93, humidity=59.98, cloud=0.0, wind=21.72, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:34:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:35:28.239 [DEBUG] [Thread-133820] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:35:28.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:35:28.336 [DEBUG] [Thread-133823] [transport.py] [_log()] starting thread (client mode): 0xa57730d0
2026-02-11T18:35:28.336 [DEBUG] [Thread-133823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:35:28.350 [DEBUG] [Thread-133823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:35:28.351 [INFO] [Thread-133823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:35:28.358 [DEBUG] [Thread-133823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] client lang: <none>
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] server lang: <none>
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] kex follows: False
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:35:28.359 [DEBUG] [Thread-133823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:35:28.360 [DEBUG] [Thread-133823] [transport.py] [_log()] Compression: none
2026-02-11T18:35:28.360 [DEBUG] [Thread-133823] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:35:28.418 [DEBUG] [Thread-133823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:35:28.419 [DEBUG] [Thread-133823] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:35:28.419 [DEBUG] [Thread-133823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:35:28.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:35:28.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:35:28.474 [DEBUG] [Thread-133823] [transport.py] [_log()] userauth is OK
2026-02-11T18:35:28.474 [DEBUG] [Thread-133823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:35:28.475 [DEBUG] [Thread-133823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:35:28.475 [DEBUG] [Thread-133823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:35:28.475 [DEBUG] [Thread-133823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:35:28.494 [INFO] [Thread-133823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:35:28.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:35:28.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:35:29.366 [DEBUG] [Thread-133823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:35:29.366 [DEBUG] [Thread-133823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:35:29.414 [DEBUG] [Thread-133823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:35:29.415 [DEBUG] [Thread-133823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:35:29.424 [DEBUG] [Thread-133823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:35:29.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:35:29.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:35:29.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:35:29.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:35:29.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:35:29.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:35:29.462 [DEBUG] [Thread-133823] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:35:30.009 [DEBUG] [Thread-133825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:35:30.960 [DEBUG] [Thread-133826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:35:45.070 [DEBUG] [Thread-133827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:35:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:35:59.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:35:59.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:36:00.106 [DEBUG] [Thread-133828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:36:00.341 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:36:00.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:36:01.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 35, 51), 8.03, 59.78, 0.0, 20.13, 20.37, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:36:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:35:51
2026-02-11T18:36:01.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:36:01.869 [DEBUG] [Thread-133829] [transport.py] [_log()] starting thread (client mode): 0xa575ae90
2026-02-11T18:36:01.869 [DEBUG] [Thread-133829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:36:01.888 [DEBUG] [Thread-133829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:36:01.888 [INFO] [Thread-133829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] client lang: <none>
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] server lang: <none>
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] kex follows: False
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:36:01.891 [DEBUG] [Thread-133829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:36:01.892 [DEBUG] [Thread-133829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:36:01.892 [DEBUG] [Thread-133829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:36:01.892 [DEBUG] [Thread-133829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:36:01.892 [DEBUG] [Thread-133829] [transport.py] [_log()] Compression: none
2026-02-11T18:36:01.892 [DEBUG] [Thread-133829] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:36:01.899 [DEBUG] [Thread-133829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:36:01.899 [DEBUG] [Thread-133829] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:36:01.900 [DEBUG] [Thread-133829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:36:01.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:36:01.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:36:01.901 [DEBUG] [Thread-133829] [transport.py] [_log()] userauth is OK
2026-02-11T18:36:01.901 [DEBUG] [Thread-133829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:36:01.901 [DEBUG] [Thread-133829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:36:01.901 [DEBUG] [Thread-133829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:36:01.902 [DEBUG] [Thread-133829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:36:01.918 [INFO] [Thread-133829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:36:01.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:36:02.559 [DEBUG] [Thread-133829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:36:02.559 [DEBUG] [Thread-133829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:36:02.559 [DEBUG] [Thread-133829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:36:02.600 [DEBUG] [Thread-133829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:36:02.600 [DEBUG] [Thread-133829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:36:02.603 [DEBUG] [Thread-133829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:36:02.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:36:02.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:36:02.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:36:02.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:36:02.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:36:02.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:36:02.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:36:02.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:36:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:36:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.691113 -999.00  +20.00  18.56     66  +13.60 1 2 1 1 1   887    0 8.70 150.82 ----- 16.5 18.6 280.8 22.6 21.4 -11.7 21.3 -12.0 20.9 -13.2 21.2 -12.3
2026-02-11T18:36:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:36:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:36:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.691113
2026-02-11T18:36:02.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:36:02.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:36:02.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:36:02.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:36:02.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:36:02.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:35:51', tmtdew=8.03, humidity=59.78, cloud=0.0, wind=20.13, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:35:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:36:02.627 [DEBUG] [Thread-133829] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:36:02.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:36:02.726 [DEBUG] [Thread-133832] [transport.py] [_log()] starting thread (client mode): 0xa5743b80
2026-02-11T18:36:02.726 [DEBUG] [Thread-133832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:36:02.740 [DEBUG] [Thread-133832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:36:02.740 [INFO] [Thread-133832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:36:02.747 [DEBUG] [Thread-133832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:36:02.747 [DEBUG] [Thread-133832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] client lang: <none>
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] server lang: <none>
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] kex follows: False
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] Compression: none
2026-02-11T18:36:02.748 [DEBUG] [Thread-133832] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:36:02.809 [DEBUG] [Thread-133832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:36:02.810 [DEBUG] [Thread-133832] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:36:02.810 [DEBUG] [Thread-133832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:36:02.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:36:02.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:36:02.870 [DEBUG] [Thread-133832] [transport.py] [_log()] userauth is OK
2026-02-11T18:36:02.870 [DEBUG] [Thread-133832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:36:02.870 [DEBUG] [Thread-133832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:36:02.870 [DEBUG] [Thread-133832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:36:02.870 [DEBUG] [Thread-133832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:36:02.887 [INFO] [Thread-133832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:36:02.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:36:02.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:36:03.732 [DEBUG] [Thread-133832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:36:03.732 [DEBUG] [Thread-133832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:36:03.780 [DEBUG] [Thread-133832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:36:03.780 [DEBUG] [Thread-133832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:36:03.789 [DEBUG] [Thread-133832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:36:03.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:36:03.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:36:03.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:36:03.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:36:03.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:36:03.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:36:03.823 [DEBUG] [Thread-133832] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:36:15.141 [DEBUG] [Thread-133834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:36:30.192 [DEBUG] [Thread-133835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:36:31.019 [DEBUG] [Thread-133836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:36:33.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:36:33.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:36:33.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:36:36.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 36, 26), 8.04, 59.75, 0.0, 18.86, 20.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:36:36.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:36:26
2026-02-11T18:36:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:36:36.645 [DEBUG] [Thread-133837] [transport.py] [_log()] starting thread (client mode): 0xa57580a0
2026-02-11T18:36:36.646 [DEBUG] [Thread-133837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:36:36.664 [DEBUG] [Thread-133837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:36:36.664 [INFO] [Thread-133837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:36:36.667 [DEBUG] [Thread-133837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:36:36.667 [DEBUG] [Thread-133837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:36:36.667 [DEBUG] [Thread-133837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:36:36.667 [DEBUG] [Thread-133837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:36.667 [DEBUG] [Thread-133837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] client lang: <none>
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] server lang: <none>
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] kex follows: False
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] Compression: none
2026-02-11T18:36:36.668 [DEBUG] [Thread-133837] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:36:36.676 [DEBUG] [Thread-133837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:36:36.676 [DEBUG] [Thread-133837] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:36:36.676 [DEBUG] [Thread-133837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:36:36.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:36:36.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:36:36.678 [DEBUG] [Thread-133837] [transport.py] [_log()] userauth is OK
2026-02-11T18:36:36.678 [DEBUG] [Thread-133837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:36:36.678 [DEBUG] [Thread-133837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:36:36.678 [DEBUG] [Thread-133837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:36:36.678 [DEBUG] [Thread-133837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:36:36.696 [INFO] [Thread-133837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:36:36.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:36:37.345 [DEBUG] [Thread-133837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:36:37.346 [DEBUG] [Thread-133837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:36:37.346 [DEBUG] [Thread-133837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:36:37.386 [DEBUG] [Thread-133837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:36:37.387 [DEBUG] [Thread-133837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:36:37.390 [DEBUG] [Thread-133837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:36:37.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:36:37.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:36:37.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:36:37.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:36:37.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:36:37.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:36:37.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:36:37.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:36:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:36:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.691460 -999.00  +20.00  21.58     66  +13.60 1 2 1 1 1   887    0 9.17 165.35 ----- 19.3 21.6 299.2 24.5 21.4 -12.2 21.3 -12.6 20.9 -13.5 21.2 -12.7
2026-02-11T18:36:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:36:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:36:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.691460
2026-02-11T18:36:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:36:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:36:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:36:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:36:37.418 [DEBUG] [Thread-133837] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:36:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:36:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:36:26', tmtdew=8.04, humidity=59.75, cloud=0.0, wind=18.86, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:35:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:36:37.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:36:37.515 [DEBUG] [Thread-133840] [transport.py] [_log()] starting thread (client mode): 0xa57723e0
2026-02-11T18:36:37.515 [DEBUG] [Thread-133840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:36:37.530 [DEBUG] [Thread-133840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:36:37.530 [INFO] [Thread-133840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:36:37.538 [DEBUG] [Thread-133840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:36:37.538 [DEBUG] [Thread-133840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:36:37.538 [DEBUG] [Thread-133840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:36:37.538 [DEBUG] [Thread-133840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] client lang: <none>
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] server lang: <none>
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] kex follows: False
2026-02-11T18:36:37.539 [DEBUG] [Thread-133840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:36:37.540 [DEBUG] [Thread-133840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:36:37.540 [DEBUG] [Thread-133840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:36:37.540 [DEBUG] [Thread-133840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:36:37.540 [DEBUG] [Thread-133840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:36:37.540 [DEBUG] [Thread-133840] [transport.py] [_log()] Compression: none
2026-02-11T18:36:37.540 [DEBUG] [Thread-133840] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:36:37.595 [DEBUG] [Thread-133840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:36:37.596 [DEBUG] [Thread-133840] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:36:37.596 [DEBUG] [Thread-133840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:36:37.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:36:37.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:36:37.655 [DEBUG] [Thread-133840] [transport.py] [_log()] userauth is OK
2026-02-11T18:36:37.655 [DEBUG] [Thread-133840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:36:37.656 [DEBUG] [Thread-133840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:36:37.656 [DEBUG] [Thread-133840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:36:37.656 [DEBUG] [Thread-133840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:36:37.675 [INFO] [Thread-133840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:36:37.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:36:37.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:36:38.492 [DEBUG] [Thread-133840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:36:38.493 [DEBUG] [Thread-133840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:36:38.540 [DEBUG] [Thread-133840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:36:38.541 [DEBUG] [Thread-133840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:36:38.550 [DEBUG] [Thread-133840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:36:38.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:36: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')
2026-02-11T18:36:38.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:36:38.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:36:38.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:36:38.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:36:38.587 [DEBUG] [Thread-133840] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:36:45.233 [DEBUG] [Thread-133842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:00.297 [DEBUG] [Thread-133843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:00.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:00.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:08.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:37:08.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:37:08.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:37:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 37, 2), 8.04, 59.77, 0.0, 17.96, 20.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:37:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:37:02
2026-02-11T18:37:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:37:10.985 [DEBUG] [Thread-133844] [transport.py] [_log()] starting thread (client mode): 0xa57b2fe0
2026-02-11T18:37:10.985 [DEBUG] [Thread-133844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:37:11.005 [DEBUG] [Thread-133844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:37:11.005 [INFO] [Thread-133844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] client lang: <none>
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] server lang: <none>
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] kex follows: False
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] Compression: none
2026-02-11T18:37:11.008 [DEBUG] [Thread-133844] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:37:11.023 [DEBUG] [Thread-133844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:37:11.024 [DEBUG] [Thread-133844] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:37:11.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:37:11.024 [DEBUG] [Thread-133844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:37:11.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:37:11.025 [DEBUG] [Thread-133844] [transport.py] [_log()] userauth is OK
2026-02-11T18:37:11.025 [DEBUG] [Thread-133844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:37:11.026 [DEBUG] [Thread-133844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:37:11.026 [DEBUG] [Thread-133844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:37:11.026 [DEBUG] [Thread-133844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:37:11.046 [INFO] [Thread-133844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:37:11.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:37:11.617 [DEBUG] [Thread-133844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:37:11.618 [DEBUG] [Thread-133844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:37:11.618 [DEBUG] [Thread-133844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:37:11.658 [DEBUG] [Thread-133844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:37:11.659 [DEBUG] [Thread-133844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:37:11.662 [DEBUG] [Thread-133844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:37:11.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:37:11.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:37:11.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:37:11.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:37:11.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:37:11.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:37:11.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:37:11.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:37:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:37:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.692154 -999.00  +20.00  14.77     67  +13.70 1 2 1 1 1   887    0 9.97 189.88 ----- 15.8 14.8 305.8 20.8 21.5 -13.3 21.3 -13.4 20.9 -14.2 21.2 -14.0
2026-02-11T18:37:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:37:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:37:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.692154
2026-02-11T18:37:11.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:37:11.686 [DEBUG] [Thread-133844] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:37:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:37:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:37:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:37:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:37:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:37:02', tmtdew=8.04, humidity=59.77, cloud=0.0, wind=17.96, temperature=20.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:36:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:37:11.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:37:11.783 [DEBUG] [Thread-133847] [transport.py] [_log()] starting thread (client mode): 0xa57d4d00
2026-02-11T18:37:11.783 [DEBUG] [Thread-133847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:37:11.799 [DEBUG] [Thread-133847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:37:11.799 [INFO] [Thread-133847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:37:11.811 [DEBUG] [Thread-133847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:37:11.811 [DEBUG] [Thread-133847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:37:11.811 [DEBUG] [Thread-133847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:37:11.811 [DEBUG] [Thread-133847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:11.811 [DEBUG] [Thread-133847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] client lang: <none>
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] server lang: <none>
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] kex follows: False
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] Compression: none
2026-02-11T18:37:11.812 [DEBUG] [Thread-133847] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:37:11.869 [DEBUG] [Thread-133847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:37:11.870 [DEBUG] [Thread-133847] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:37:11.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:37:11.871 [DEBUG] [Thread-133847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:37:11.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:37:11.927 [DEBUG] [Thread-133847] [transport.py] [_log()] userauth is OK
2026-02-11T18:37:11.928 [DEBUG] [Thread-133847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:37:11.928 [DEBUG] [Thread-133847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:37:11.928 [DEBUG] [Thread-133847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:37:11.928 [DEBUG] [Thread-133847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:37:11.955 [INFO] [Thread-133847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:37:11.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:37:11.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:37:12.783 [DEBUG] [Thread-133847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:37:12.784 [DEBUG] [Thread-133847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:37:12.832 [DEBUG] [Thread-133847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:37:12.832 [DEBUG] [Thread-133847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:37:12.841 [DEBUG] [Thread-133847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:37:12.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:37:12.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:37:12.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
2026-02-11T18:37:12.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:37:12.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:37:12.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:37:12.876 [DEBUG] [Thread-133847] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:37:15.336 [DEBUG] [Thread-133849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:30.389 [DEBUG] [Thread-133850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:31.067 [DEBUG] [Thread-133851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:37:42.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:37:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:37:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 37, 2), 8.04, 59.77, 0.0, 17.96, 20.33, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:37:44.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:37:02
2026-02-11T18:37:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:37:45.428 [DEBUG] [Thread-133852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:37:45.487 [DEBUG] [Thread-133853] [transport.py] [_log()] starting thread (client mode): 0xa2d57fd0
2026-02-11T18:37:45.487 [DEBUG] [Thread-133853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:37:45.508 [DEBUG] [Thread-133853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:37:45.508 [INFO] [Thread-133853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:37:45.511 [DEBUG] [Thread-133853] [transport.py] [_log()] client lang: <none>
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] server lang: <none>
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] kex follows: False
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] Compression: none
2026-02-11T18:37:45.512 [DEBUG] [Thread-133853] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:37:45.533 [DEBUG] [Thread-133853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:37:45.533 [DEBUG] [Thread-133853] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:37:45.534 [DEBUG] [Thread-133853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:37:45.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:37:45.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:37:45.577 [DEBUG] [Thread-133853] [transport.py] [_log()] userauth is OK
2026-02-11T18:37:45.577 [DEBUG] [Thread-133853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:37:45.577 [DEBUG] [Thread-133853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:37:45.577 [DEBUG] [Thread-133853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:37:45.577 [DEBUG] [Thread-133853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:37:45.609 [INFO] [Thread-133853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:37:45.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:37:46.183 [DEBUG] [Thread-133853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:37:46.184 [DEBUG] [Thread-133853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:37:46.184 [DEBUG] [Thread-133853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:37:46.224 [DEBUG] [Thread-133853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:37:46.225 [DEBUG] [Thread-133853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:37:46.228 [DEBUG] [Thread-133853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:37:46.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:37:46.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:37:46.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:37:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:37:46.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:37:46.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:37:46.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:37:46.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.692849 -999.00  +20.10  18.60     65  +13.50 1 2 1 1 1   887    0 10.83 211.28 ----- 19.2 18.6 294.0 24.6 21.5 -14.3 21.4 -14.3 21.0 -15.2 21.3 -15.0
2026-02-11T18:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.692849
2026-02-11T18:37:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:37:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:37:02', tmtdew=8.04, humidity=59.77, cloud=0.0, wind=17.96, temperature=20.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:37:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:37:46.257 [DEBUG] [Thread-133853] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:37:46.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:37:46.355 [DEBUG] [Thread-133856] [transport.py] [_log()] starting thread (client mode): 0xa2d55540
2026-02-11T18:37:46.355 [DEBUG] [Thread-133856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:37:46.370 [DEBUG] [Thread-133856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:37:46.370 [INFO] [Thread-133856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:37:46.379 [DEBUG] [Thread-133856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] client lang: <none>
2026-02-11T18:37:46.380 [DEBUG] [Thread-133856] [transport.py] [_log()] server lang: <none>
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] kex follows: False
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] Compression: none
2026-02-11T18:37:46.381 [DEBUG] [Thread-133856] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:37:46.436 [DEBUG] [Thread-133856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:37:46.436 [DEBUG] [Thread-133856] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:37:46.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:37:46.438 [DEBUG] [Thread-133856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:37:46.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:37:46.491 [DEBUG] [Thread-133856] [transport.py] [_log()] userauth is OK
2026-02-11T18:37:46.492 [DEBUG] [Thread-133856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:37:46.492 [DEBUG] [Thread-133856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:37:46.492 [DEBUG] [Thread-133856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:37:46.492 [DEBUG] [Thread-133856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:37:46.511 [INFO] [Thread-133856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:37:46.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:37:46.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:37:47.395 [DEBUG] [Thread-133856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:37:47.396 [DEBUG] [Thread-133856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:37:47.449 [DEBUG] [Thread-133856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:37:47.449 [DEBUG] [Thread-133856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:37:47.458 [DEBUG] [Thread-133856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:37:47.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:37:47.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:37:47.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:37:47.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:37:47.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:37:47.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:37:47.493 [DEBUG] [Thread-133856] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:38:00.461 [DEBUG] [Thread-133858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:38:00.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:38:00.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:38:15.506 [DEBUG] [Thread-133859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:38:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:38:17.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:38:17.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
2026-02-11T18:38:19.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 37, 37), 8.69, 57.47, 0.0, 21.31, 20.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:38:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:37:37
2026-02-11T18:38:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:38:20.564 [DEBUG] [Thread-133860] [transport.py] [_log()] starting thread (client mode): 0xa57b1ae0
2026-02-11T18:38:20.564 [DEBUG] [Thread-133860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:38:20.584 [DEBUG] [Thread-133860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:38:20.584 [INFO] [Thread-133860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] client lang: <none>
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] server lang: <none>
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] kex follows: False
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] Compression: none
2026-02-11T18:38:20.587 [DEBUG] [Thread-133860] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:38:20.603 [DEBUG] [Thread-133860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:38:20.604 [DEBUG] [Thread-133860] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:38:20.604 [DEBUG] [Thread-133860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:38:20.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:38:20.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:38:20.605 [DEBUG] [Thread-133860] [transport.py] [_log()] userauth is OK
2026-02-11T18:38:20.605 [DEBUG] [Thread-133860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:38:20.605 [DEBUG] [Thread-133860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:38:20.605 [DEBUG] [Thread-133860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:38:20.605 [DEBUG] [Thread-133860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:38:20.618 [INFO] [Thread-133860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:38:20.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:38:21.265 [DEBUG] [Thread-133860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:38:21.266 [DEBUG] [Thread-133860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:38:21.266 [DEBUG] [Thread-133860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:38:21.306 [DEBUG] [Thread-133860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:38:21.306 [DEBUG] [Thread-133860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:38:21.309 [DEBUG] [Thread-133860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:38:21.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:38:21.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:38:21.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:38:21.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:38:21.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:38:21.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:38:21.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:38:21.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:38:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:38:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.693196 -999.00  +20.10  20.25     67  +13.70 1 2 1 1 1   887    0 10.52 200.36 ----- 17.3 20.2 288.0 23.6 21.6 -14.7 21.4 -14.6 21.0 -15.1 21.3 -15.2
2026-02-11T18:38:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:38:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:38:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.693196
2026-02-11T18:38:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:38:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:38:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:38:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:38:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:38:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:37:37', tmtdew=8.69, humidity=57.47, cloud=0.0, wind=21.31, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:38:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:38:21.334 [DEBUG] [Thread-133860] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:38:21.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:38:21.429 [DEBUG] [Thread-133863] [transport.py] [_log()] starting thread (client mode): 0xa5743e20
2026-02-11T18:38:21.430 [DEBUG] [Thread-133863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:38:21.445 [DEBUG] [Thread-133863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:38:21.445 [INFO] [Thread-133863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:38:21.453 [DEBUG] [Thread-133863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:38:21.453 [DEBUG] [Thread-133863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:38:21.453 [DEBUG] [Thread-133863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:38:21.453 [DEBUG] [Thread-133863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:21.453 [DEBUG] [Thread-133863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:21.453 [DEBUG] [Thread-133863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:21.454 [DEBUG] [Thread-133863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:21.454 [DEBUG] [Thread-133863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:38:21.454 [DEBUG] [Thread-133863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:38:21.454 [DEBUG] [Thread-133863] [transport.py] [_log()] client lang: <none>
2026-02-11T18:38:21.454 [DEBUG] [Thread-133863] [transport.py] [_log()] server lang: <none>
2026-02-11T18:38:21.454 [DEBUG] [Thread-133863] [transport.py] [_log()] kex follows: False
2026-02-11T18:38:21.455 [DEBUG] [Thread-133863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:38:21.455 [DEBUG] [Thread-133863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:38:21.455 [DEBUG] [Thread-133863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:38:21.455 [DEBUG] [Thread-133863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:38:21.455 [DEBUG] [Thread-133863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:38:21.455 [DEBUG] [Thread-133863] [transport.py] [_log()] Compression: none
2026-02-11T18:38:21.455 [DEBUG] [Thread-133863] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:38:21.512 [DEBUG] [Thread-133863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:38:21.513 [DEBUG] [Thread-133863] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:38:21.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:38:21.514 [DEBUG] [Thread-133863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:38:21.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:38:21.569 [DEBUG] [Thread-133863] [transport.py] [_log()] userauth is OK
2026-02-11T18:38:21.569 [DEBUG] [Thread-133863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:38:21.569 [DEBUG] [Thread-133863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:38:21.569 [DEBUG] [Thread-133863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:38:21.570 [DEBUG] [Thread-133863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:38:21.593 [INFO] [Thread-133863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:38:21.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:38:21.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:38:22.414 [DEBUG] [Thread-133863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:38:22.414 [DEBUG] [Thread-133863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:38:22.461 [DEBUG] [Thread-133863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:38:22.461 [DEBUG] [Thread-133863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:38:22.471 [DEBUG] [Thread-133863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:38:22.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:38:22.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:38:22.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:38:22.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:38:22.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:38:22.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:38:22.508 [DEBUG] [Thread-133863] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:38:30.542 [DEBUG] [Thread-133865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:38:31.129 [DEBUG] [Thread-133866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:38:45.603 [DEBUG] [Thread-133867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:38:52.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:38:52.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:38:52.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:38:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 38, 13), 8.05, 59.75, 0.0, 18.69, 20.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:38:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:38:13
2026-02-11T18:38:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:38:55.349 [DEBUG] [Thread-133868] [transport.py] [_log()] starting thread (client mode): 0xa57d5f00
2026-02-11T18:38:55.350 [DEBUG] [Thread-133868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:38:55.366 [DEBUG] [Thread-133868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:38:55.366 [INFO] [Thread-133868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] client lang: <none>
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] server lang: <none>
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] kex follows: False
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:38:55.370 [DEBUG] [Thread-133868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:38:55.371 [DEBUG] [Thread-133868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:38:55.371 [DEBUG] [Thread-133868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:38:55.371 [DEBUG] [Thread-133868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:38:55.371 [DEBUG] [Thread-133868] [transport.py] [_log()] Compression: none
2026-02-11T18:38:55.371 [DEBUG] [Thread-133868] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:38:55.391 [DEBUG] [Thread-133868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:38:55.392 [DEBUG] [Thread-133868] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:38:55.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:38:55.393 [DEBUG] [Thread-133868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:38:55.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:38:55.396 [DEBUG] [Thread-133868] [transport.py] [_log()] userauth is OK
2026-02-11T18:38:55.397 [DEBUG] [Thread-133868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:38:55.397 [DEBUG] [Thread-133868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:38:55.397 [DEBUG] [Thread-133868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:38:55.397 [DEBUG] [Thread-133868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:38:55.418 [INFO] [Thread-133868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:38:55.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:38:56.071 [DEBUG] [Thread-133868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:38:56.071 [DEBUG] [Thread-133868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:38:56.071 [DEBUG] [Thread-133868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:38:56.112 [DEBUG] [Thread-133868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:38:56.112 [DEBUG] [Thread-133868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:38:56.115 [DEBUG] [Thread-133868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:38:56.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:38:56.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:38:56.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:38:56.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:38:56.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:38:56.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:38:56.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:38:56.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:38:56.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:38:56.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.693543 -999.00  +20.10  16.64     67  +13.80 1 2 1 1 1   887    0 10.40 196.57 ----- 20.0 16.6 291.7 22.8 21.6 -14.9 21.4 -14.7 21.0 -15.5 21.3 -15.6
2026-02-11T18:38:56.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:38:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:38:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.693543
2026-02-11T18:38:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:38:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:38:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:38:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:38:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:38:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:38:13', tmtdew=8.05, humidity=59.75, cloud=0.0, wind=18.69, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:38:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:38:56.143 [DEBUG] [Thread-133868] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:38:56.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:38:56.236 [DEBUG] [Thread-133871] [transport.py] [_log()] starting thread (client mode): 0xa2dc3af0
2026-02-11T18:38:56.236 [DEBUG] [Thread-133871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:38:56.251 [DEBUG] [Thread-133871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:38:56.251 [INFO] [Thread-133871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:38:56.258 [DEBUG] [Thread-133871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:38:56.258 [DEBUG] [Thread-133871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] client lang: <none>
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] server lang: <none>
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] kex follows: False
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] Compression: none
2026-02-11T18:38:56.259 [DEBUG] [Thread-133871] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:38:56.317 [DEBUG] [Thread-133871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:38:56.317 [DEBUG] [Thread-133871] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:38:56.318 [DEBUG] [Thread-133871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:38:56.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:38:56.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:38:56.372 [DEBUG] [Thread-133871] [transport.py] [_log()] userauth is OK
2026-02-11T18:38:56.373 [DEBUG] [Thread-133871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:38:56.373 [DEBUG] [Thread-133871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:38:56.373 [DEBUG] [Thread-133871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:38:56.373 [DEBUG] [Thread-133871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:38:56.396 [INFO] [Thread-133871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:38:56.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:38:56.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:38:57.217 [DEBUG] [Thread-133871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:38:57.217 [DEBUG] [Thread-133871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:38:57.265 [DEBUG] [Thread-133871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:38:57.265 [DEBUG] [Thread-133871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:38:57.275 [DEBUG] [Thread-133871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:38:57.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:38:57.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:38:57.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:38:57.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:38:57.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:38:57.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:38:57.310 [DEBUG] [Thread-133871] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:39:00.638 [DEBUG] [Thread-133873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:39:00.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:39:00.767 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:39:15.691 [DEBUG] [Thread-133874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:39:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:39:27.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:39:27.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:39:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 38, 50), 8.09, 59.92, 0.0, 19.8, 20.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:39:29.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:38:50
2026-02-11T18:39:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:39:30.002 [DEBUG] [Thread-133875] [transport.py] [_log()] starting thread (client mode): 0xa5773d90
2026-02-11T18:39:30.002 [DEBUG] [Thread-133875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:39:30.022 [DEBUG] [Thread-133875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:39:30.022 [INFO] [Thread-133875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] client lang: <none>
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] server lang: <none>
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] kex follows: False
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] Compression: none
2026-02-11T18:39:30.026 [DEBUG] [Thread-133875] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:39:30.044 [DEBUG] [Thread-133875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:39:30.045 [DEBUG] [Thread-133875] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:39:30.045 [DEBUG] [Thread-133875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:39:30.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:39:30.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:39:30.047 [DEBUG] [Thread-133875] [transport.py] [_log()] userauth is OK
2026-02-11T18:39:30.047 [DEBUG] [Thread-133875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:39:30.047 [DEBUG] [Thread-133875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:39:30.048 [DEBUG] [Thread-133875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:39:30.048 [DEBUG] [Thread-133875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:39:30.072 [INFO] [Thread-133875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:39:30.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:39:30.729 [DEBUG] [Thread-133877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:39:30.735 [DEBUG] [Thread-133875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:39:30.736 [DEBUG] [Thread-133875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:39:30.736 [DEBUG] [Thread-133875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:39:30.776 [DEBUG] [Thread-133875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:39:30.777 [DEBUG] [Thread-133875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:39:30.779 [DEBUG] [Thread-133875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:39:30.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:39:30.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:39:30.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:39:30.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:39:30.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:39:30.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:39:30.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:39:30.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:39:30.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:39:30.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.693890 -999.00  +20.10  16.05     67  +13.90 1 2 1 1 1   887    0 11.73 233.25 ----- 18.1 16.1 299.0 19.7 21.6 -15.4 21.4 -15.2 21.0 -15.5 21.4 -15.8
2026-02-11T18:39:30.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:39:30.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:39:30.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.693890
2026-02-11T18:39:30.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:39:30.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:39:30.808 [DEBUG] [Thread-133875] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:39:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:39:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:39:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:39:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:38:50', tmtdew=8.09, humidity=59.92, cloud=0.0, wind=19.8, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:39:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:39:30.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:39:30.907 [DEBUG] [Thread-133879] [transport.py] [_log()] starting thread (client mode): 0xa5740bb0
2026-02-11T18:39:30.907 [DEBUG] [Thread-133879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:39:30.923 [DEBUG] [Thread-133879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:39:30.924 [INFO] [Thread-133879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:39:30.931 [DEBUG] [Thread-133879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] client lang: <none>
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] server lang: <none>
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] kex follows: False
2026-02-11T18:39:30.932 [DEBUG] [Thread-133879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:39:30.933 [DEBUG] [Thread-133879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:39:30.933 [DEBUG] [Thread-133879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:39:30.933 [DEBUG] [Thread-133879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:39:30.933 [DEBUG] [Thread-133879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:39:30.933 [DEBUG] [Thread-133879] [transport.py] [_log()] Compression: none
2026-02-11T18:39:30.933 [DEBUG] [Thread-133879] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:39:30.990 [DEBUG] [Thread-133879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:39:30.990 [DEBUG] [Thread-133879] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:39:30.991 [DEBUG] [Thread-133879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:39:30.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:39:30.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:39:31.049 [DEBUG] [Thread-133879] [transport.py] [_log()] userauth is OK
2026-02-11T18:39:31.049 [DEBUG] [Thread-133879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:39:31.049 [DEBUG] [Thread-133879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:39:31.049 [DEBUG] [Thread-133879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:39:31.050 [DEBUG] [Thread-133879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:39:31.074 [INFO] [Thread-133879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:39:31.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:39:31.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:39:31.173 [DEBUG] [Thread-133881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:39:31.917 [DEBUG] [Thread-133879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:39:31.918 [DEBUG] [Thread-133879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:39:31.969 [DEBUG] [Thread-133879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:39:31.969 [DEBUG] [Thread-133879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:39:31.982 [DEBUG] [Thread-133879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:39:31.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:39: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')
2026-02-11T18:39:32.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:39:32.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:39:32.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:39:32.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:39:32.030 [DEBUG] [Thread-133879] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:39:45.772 [DEBUG] [Thread-133882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:40:00.825 [DEBUG] [Thread-133883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:40:00.907 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:40:00.908 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:40:02.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:40:02.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:40:02.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:40:04.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 39, 26), 8.14, 59.74, 0.0, 20.17, 20.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:40:04.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:39:26
2026-02-11T18:40:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:40:04.562 [DEBUG] [Thread-133884] [transport.py] [_log()] starting thread (client mode): 0xa57d4d90
2026-02-11T18:40:04.563 [DEBUG] [Thread-133884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:40:04.582 [DEBUG] [Thread-133884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:40:04.582 [INFO] [Thread-133884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:04.585 [DEBUG] [Thread-133884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] client lang: <none>
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] server lang: <none>
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] kex follows: False
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] Compression: none
2026-02-11T18:40:04.586 [DEBUG] [Thread-133884] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:40:04.602 [DEBUG] [Thread-133884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:40:04.602 [DEBUG] [Thread-133884] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:40:04.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:40:04.604 [DEBUG] [Thread-133884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:40:04.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:40:04.606 [DEBUG] [Thread-133884] [transport.py] [_log()] userauth is OK
2026-02-11T18:40:04.606 [DEBUG] [Thread-133884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:40:04.606 [DEBUG] [Thread-133884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:40:04.606 [DEBUG] [Thread-133884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:40:04.606 [DEBUG] [Thread-133884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:40:04.631 [INFO] [Thread-133884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:40:04.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:40:05.436 [DEBUG] [Thread-133884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:40:05.436 [DEBUG] [Thread-133884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:40:05.436 [DEBUG] [Thread-133884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:40:05.477 [DEBUG] [Thread-133884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:40:05.478 [DEBUG] [Thread-133884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:40:05.481 [DEBUG] [Thread-133884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:40:05.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:40:05.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:40:05.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:40:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:40:05.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:40:05.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:40:05.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:40:05.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:40:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:40:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.694238 -999.00  +20.20  17.73     66  +13.60 1 2 1 1 1   887    0 11.25 219.37 ----- 18.8 17.7 301.4 22.0 21.6 -15.7 21.5 -15.4 21.1 -15.7 21.4 -15.9
2026-02-11T18:40:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:40:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:40:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.694238
2026-02-11T18:40:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:40:05.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:40:05.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:40:05.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:40:05.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:40:05.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:39:26', tmtdew=8.14, humidity=59.74, cloud=0.0, wind=20.17, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:39:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:40:05.535 [DEBUG] [Thread-133884] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:40:05.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:40:05.631 [DEBUG] [Thread-133887] [transport.py] [_log()] starting thread (client mode): 0xa2db50c0
2026-02-11T18:40:05.631 [DEBUG] [Thread-133887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:40:05.645 [DEBUG] [Thread-133887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:40:05.645 [INFO] [Thread-133887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:40:05.653 [DEBUG] [Thread-133887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:40:05.653 [DEBUG] [Thread-133887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:40:05.653 [DEBUG] [Thread-133887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:40:05.653 [DEBUG] [Thread-133887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:05.653 [DEBUG] [Thread-133887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:05.653 [DEBUG] [Thread-133887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] client lang: <none>
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] server lang: <none>
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] kex follows: False
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] Compression: none
2026-02-11T18:40:05.654 [DEBUG] [Thread-133887] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:40:05.714 [DEBUG] [Thread-133887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:40:05.715 [DEBUG] [Thread-133887] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:40:05.715 [DEBUG] [Thread-133887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:40:05.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:40:05.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:40:05.773 [DEBUG] [Thread-133887] [transport.py] [_log()] userauth is OK
2026-02-11T18:40:05.774 [DEBUG] [Thread-133887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:40:05.774 [DEBUG] [Thread-133887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:40:05.774 [DEBUG] [Thread-133887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:40:05.774 [DEBUG] [Thread-133887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:40:05.793 [INFO] [Thread-133887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:40:05.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:40:05.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:40:06.620 [DEBUG] [Thread-133887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:40:06.620 [DEBUG] [Thread-133887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:40:06.668 [DEBUG] [Thread-133887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:40:06.669 [DEBUG] [Thread-133887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:40:06.678 [DEBUG] [Thread-133887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:40:06.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:40:06.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:40:06.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:40:06.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:40:06.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:40:06.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:40:06.714 [DEBUG] [Thread-133887] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:40:15.860 [DEBUG] [Thread-133889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:40:30.907 [DEBUG] [Thread-133890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:40:31.238 [DEBUG] [Thread-133891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:40:36.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:40:36.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:40:36.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:40:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 40, 2), 8.1, 59.89, 0.0, 18.93, 20.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:40:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:40:02
2026-02-11T18:40:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:40:39.467 [DEBUG] [Thread-133892] [transport.py] [_log()] starting thread (client mode): 0xa57d4070
2026-02-11T18:40:39.467 [DEBUG] [Thread-133892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:40:39.487 [DEBUG] [Thread-133892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:40:39.487 [INFO] [Thread-133892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:40:39.490 [DEBUG] [Thread-133892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:40:39.490 [DEBUG] [Thread-133892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:40:39.490 [DEBUG] [Thread-133892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] client lang: <none>
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] server lang: <none>
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] kex follows: False
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] Compression: none
2026-02-11T18:40:39.491 [DEBUG] [Thread-133892] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:40:39.509 [DEBUG] [Thread-133892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:40:39.509 [DEBUG] [Thread-133892] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:40:39.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:40:39.510 [DEBUG] [Thread-133892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:40:39.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:40:39.512 [DEBUG] [Thread-133892] [transport.py] [_log()] userauth is OK
2026-02-11T18:40:39.513 [DEBUG] [Thread-133892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:40:39.513 [DEBUG] [Thread-133892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:40:39.513 [DEBUG] [Thread-133892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:40:39.513 [DEBUG] [Thread-133892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:40:39.537 [INFO] [Thread-133892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:40:39.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:40:40.182 [DEBUG] [Thread-133892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:40:40.182 [DEBUG] [Thread-133892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:40:40.183 [DEBUG] [Thread-133892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:40:40.223 [DEBUG] [Thread-133892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:40:40.224 [DEBUG] [Thread-133892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:40:40.227 [DEBUG] [Thread-133892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:40:40.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:40:40.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:40:40.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:40:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:40:40.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:40:40.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:40:40.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:40:40.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:40:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:40:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.694585 -999.00  +20.10  18.44     65  +13.50 1 2 1 1 1   887    0 11.53 226.24 ----- 17.6 18.4 294.6 22.7 21.6 -16.2 21.4 -15.9 21.1 -15.8 21.3 -16.4
2026-02-11T18:40:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:40:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:40:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.694585
2026-02-11T18:40:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:40:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:40:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:40:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:40:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:40:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:40:02', tmtdew=8.1, humidity=59.89, cloud=0.0, wind=18.93, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:40:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:40:40.255 [DEBUG] [Thread-133892] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:40:40.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:40:40.351 [DEBUG] [Thread-133895] [transport.py] [_log()] starting thread (client mode): 0xa57b1840
2026-02-11T18:40:40.351 [DEBUG] [Thread-133895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:40:40.364 [DEBUG] [Thread-133895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:40:40.365 [INFO] [Thread-133895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:40:40.372 [DEBUG] [Thread-133895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:40:40.372 [DEBUG] [Thread-133895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] client lang: <none>
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] server lang: <none>
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] kex follows: False
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] Compression: none
2026-02-11T18:40:40.373 [DEBUG] [Thread-133895] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:40:40.430 [DEBUG] [Thread-133895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:40:40.431 [DEBUG] [Thread-133895] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:40:40.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:40:40.432 [DEBUG] [Thread-133895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:40:40.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:40:40.486 [DEBUG] [Thread-133895] [transport.py] [_log()] userauth is OK
2026-02-11T18:40:40.486 [DEBUG] [Thread-133895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:40:40.487 [DEBUG] [Thread-133895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:40:40.487 [DEBUG] [Thread-133895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:40:40.487 [DEBUG] [Thread-133895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:40:40.505 [INFO] [Thread-133895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:40:40.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:40:40.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:40:41.301 [DEBUG] [Thread-133895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:40:41.301 [DEBUG] [Thread-133895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:40:41.349 [DEBUG] [Thread-133895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:40:41.349 [DEBUG] [Thread-133895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:40:41.359 [DEBUG] [Thread-133895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:40:41.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:40:41.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:40:41.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:40:41.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:40:41.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:40:41.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:40:41.398 [DEBUG] [Thread-133895] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:40:45.943 [DEBUG] [Thread-133897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:01.003 [DEBUG] [Thread-133898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:01.048 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:01.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:41:11.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:41:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:41:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 40, 38), 8.88, 56.81, 0.0, 19.3, 21.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:41:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:40:38
2026-02-11T18:41:13.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:41:13.689 [DEBUG] [Thread-133899] [transport.py] [_log()] starting thread (client mode): 0xa2dc3790
2026-02-11T18:41:13.690 [DEBUG] [Thread-133899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:41:13.711 [DEBUG] [Thread-133899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:41:13.711 [INFO] [Thread-133899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:41:13.714 [DEBUG] [Thread-133899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:41:13.714 [DEBUG] [Thread-133899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:41:13.714 [DEBUG] [Thread-133899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] client lang: <none>
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] server lang: <none>
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] kex follows: False
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:41:13.715 [DEBUG] [Thread-133899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:41:13.716 [DEBUG] [Thread-133899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:41:13.716 [DEBUG] [Thread-133899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:41:13.716 [DEBUG] [Thread-133899] [transport.py] [_log()] Compression: none
2026-02-11T18:41:13.716 [DEBUG] [Thread-133899] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:41:13.735 [DEBUG] [Thread-133899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:41:13.735 [DEBUG] [Thread-133899] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:41:13.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:41:13.737 [DEBUG] [Thread-133899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:41:13.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:41:13.739 [DEBUG] [Thread-133899] [transport.py] [_log()] userauth is OK
2026-02-11T18:41:13.740 [DEBUG] [Thread-133899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:41:13.740 [DEBUG] [Thread-133899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:41:13.740 [DEBUG] [Thread-133899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:41:13.740 [DEBUG] [Thread-133899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:41:13.761 [INFO] [Thread-133899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:41:13.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:41:14.426 [DEBUG] [Thread-133899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:41:14.426 [DEBUG] [Thread-133899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:41:14.427 [DEBUG] [Thread-133899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:41:14.467 [DEBUG] [Thread-133899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:41:14.468 [DEBUG] [Thread-133899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:41:14.471 [DEBUG] [Thread-133899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:41:14.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:41:14.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:41:14.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:41:14.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:41:14.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:41:14.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:41:14.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:41:14.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:41:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:41:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.694932 -999.00  +20.20  21.37     65  +13.60 1 2 1 1 1   887    0 11.39 222.72 ----- 18.5 21.4 284.4 22.8 21.6 -16.3 21.4 -15.9 21.1 -16.0 21.4 -16.4
2026-02-11T18:41:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:41:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:41:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.694932
2026-02-11T18:41:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:41:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:41:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:41:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:41:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:41:14.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:40:38', tmtdew=8.88, humidity=56.81, cloud=0.0, wind=19.3, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:40:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:41:14.499 [DEBUG] [Thread-133899] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:41:14.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:41:14.584 [DEBUG] [Thread-133902] [transport.py] [_log()] starting thread (client mode): 0xa57d7910
2026-02-11T18:41:14.585 [DEBUG] [Thread-133902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:41:14.600 [DEBUG] [Thread-133902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:41:14.600 [INFO] [Thread-133902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:41:14.614 [DEBUG] [Thread-133902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:41:14.614 [DEBUG] [Thread-133902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:41:14.614 [DEBUG] [Thread-133902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:41:14.614 [DEBUG] [Thread-133902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:14.614 [DEBUG] [Thread-133902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:14.614 [DEBUG] [Thread-133902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:14.614 [DEBUG] [Thread-133902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] client lang: <none>
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] server lang: <none>
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] kex follows: False
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] Compression: none
2026-02-11T18:41:14.615 [DEBUG] [Thread-133902] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:41:14.665 [DEBUG] [Thread-133902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:41:14.665 [DEBUG] [Thread-133902] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:41:14.666 [DEBUG] [Thread-133902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:41:14.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:41:14.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:41:14.721 [DEBUG] [Thread-133902] [transport.py] [_log()] userauth is OK
2026-02-11T18:41:14.721 [DEBUG] [Thread-133902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:41:14.721 [DEBUG] [Thread-133902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:41:14.721 [DEBUG] [Thread-133902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:41:14.721 [DEBUG] [Thread-133902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:41:14.737 [INFO] [Thread-133902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:41:14.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:41:14.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:41:15.545 [DEBUG] [Thread-133902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:41:15.545 [DEBUG] [Thread-133902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:41:15.593 [DEBUG] [Thread-133902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:41:15.593 [DEBUG] [Thread-133902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:41:15.603 [DEBUG] [Thread-133902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:41:15.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:41:15.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')
2026-02-11T18:41:15.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:41:15.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:41:15.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:41:15.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:41:15.640 [DEBUG] [Thread-133902] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:41:16.040 [DEBUG] [Thread-133904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:31.100 [DEBUG] [Thread-133905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:31.300 [DEBUG] [Thread-133906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:45.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:41:45.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:41:45.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:41:46.137 [DEBUG] [Thread-133907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:41:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 41, 14), 8.39, 58.39, 0.0, 21.84, 20.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:41:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:41:14
2026-02-11T18:41:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:41:48.009 [DEBUG] [Thread-133908] [transport.py] [_log()] starting thread (client mode): 0xa5771540
2026-02-11T18:41:48.010 [DEBUG] [Thread-133908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:41:48.029 [DEBUG] [Thread-133908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:41:48.029 [INFO] [Thread-133908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:41:48.032 [DEBUG] [Thread-133908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] client lang: <none>
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] server lang: <none>
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] kex follows: False
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:41:48.033 [DEBUG] [Thread-133908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:41:48.034 [DEBUG] [Thread-133908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:41:48.034 [DEBUG] [Thread-133908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:41:48.034 [DEBUG] [Thread-133908] [transport.py] [_log()] Compression: none
2026-02-11T18:41:48.034 [DEBUG] [Thread-133908] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:41:48.053 [DEBUG] [Thread-133908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:41:48.054 [DEBUG] [Thread-133908] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:41:48.055 [DEBUG] [Thread-133908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:41:48.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:41:48.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:41:48.058 [DEBUG] [Thread-133908] [transport.py] [_log()] userauth is OK
2026-02-11T18:41:48.058 [DEBUG] [Thread-133908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:41:48.058 [DEBUG] [Thread-133908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:41:48.058 [DEBUG] [Thread-133908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:41:48.059 [DEBUG] [Thread-133908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:41:48.094 [INFO] [Thread-133908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:41:48.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:41:48.750 [DEBUG] [Thread-133908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:41:48.750 [DEBUG] [Thread-133908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:41:48.750 [DEBUG] [Thread-133908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:41:48.791 [DEBUG] [Thread-133908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:41:48.792 [DEBUG] [Thread-133908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:41:48.795 [DEBUG] [Thread-133908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:41:48.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:41:48.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:41:48.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:41:48.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:41:48.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:41:48.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:41:48.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:41:48.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:41:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:41:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.695279 -999.00  +20.20  19.93     65  +13.60 1 2 1 1 1   887    0 11.54 224.71 ----- 19.4 19.9 291.4 21.5 21.6 -16.6 21.5 -16.0 21.2 -15.1 21.5 -16.3
2026-02-11T18:41:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:41:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:41:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.695279
2026-02-11T18:41:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:41:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:41:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:41:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:41:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:41:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:41:14', tmtdew=8.39, humidity=58.39, cloud=0.0, wind=21.84, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:41:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:41:48.821 [DEBUG] [Thread-133908] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:41:48.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:41:48.917 [DEBUG] [Thread-133911] [transport.py] [_log()] starting thread (client mode): 0xa57718d0
2026-02-11T18:41:48.917 [DEBUG] [Thread-133911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:41:48.931 [DEBUG] [Thread-133911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:41:48.931 [INFO] [Thread-133911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:41:48.939 [DEBUG] [Thread-133911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:41:48.939 [DEBUG] [Thread-133911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:41:48.939 [DEBUG] [Thread-133911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] client lang: <none>
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] server lang: <none>
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] kex follows: False
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] Compression: none
2026-02-11T18:41:48.940 [DEBUG] [Thread-133911] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:41:48.998 [DEBUG] [Thread-133911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:41:48.999 [DEBUG] [Thread-133911] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:41:48.999 [DEBUG] [Thread-133911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:41:49.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:41:49.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:41:49.056 [DEBUG] [Thread-133911] [transport.py] [_log()] userauth is OK
2026-02-11T18:41:49.056 [DEBUG] [Thread-133911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:41:49.056 [DEBUG] [Thread-133911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:41:49.057 [DEBUG] [Thread-133911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:41:49.057 [DEBUG] [Thread-133911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:41:49.075 [INFO] [Thread-133911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:41:49.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:41:49.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:41:49.891 [DEBUG] [Thread-133911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:41:49.891 [DEBUG] [Thread-133911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:41:49.939 [DEBUG] [Thread-133911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:41:49.940 [DEBUG] [Thread-133911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:41:49.949 [DEBUG] [Thread-133911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:41:49.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:41: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')
2026-02-11T18:41: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
2026-02-11T18:41:49.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:41:49.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:41:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:41:49.985 [DEBUG] [Thread-133911] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:42:01.175 [DEBUG] [Thread-133913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:42:01.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:42:01.193 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:42:16.232 [DEBUG] [Thread-133914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:42:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:42:19.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:42:20.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
2026-02-11T18:42:22.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 41, 49), 8.21, 59.04, 0.0, 20.96, 20.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:42:22.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:41:49
2026-02-11T18:42:22.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:42:23.067 [DEBUG] [Thread-133915] [transport.py] [_log()] starting thread (client mode): 0xa57d4d00
2026-02-11T18:42:23.067 [DEBUG] [Thread-133915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:42:23.087 [DEBUG] [Thread-133915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:42:23.087 [INFO] [Thread-133915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:42:23.090 [DEBUG] [Thread-133915] [transport.py] [_log()] client lang: <none>
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] server lang: <none>
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] kex follows: False
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] Compression: none
2026-02-11T18:42:23.091 [DEBUG] [Thread-133915] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:42:23.108 [DEBUG] [Thread-133915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:42:23.109 [DEBUG] [Thread-133915] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:42:23.109 [DEBUG] [Thread-133915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:42:23.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:42:23.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:42:23.111 [DEBUG] [Thread-133915] [transport.py] [_log()] userauth is OK
2026-02-11T18:42:23.111 [DEBUG] [Thread-133915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:42:23.111 [DEBUG] [Thread-133915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:42:23.111 [DEBUG] [Thread-133915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:42:23.111 [DEBUG] [Thread-133915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:42:23.131 [INFO] [Thread-133915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:42:23.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:42:23.760 [DEBUG] [Thread-133915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:42:23.760 [DEBUG] [Thread-133915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:42:23.760 [DEBUG] [Thread-133915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:42:23.801 [DEBUG] [Thread-133915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:42:23.801 [DEBUG] [Thread-133915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:42:23.804 [DEBUG] [Thread-133915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:42:23.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:42:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:42:23.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:42:23.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:42:23.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:42:23.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:42:23.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:42:23.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:42:23.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:42:23.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.695626 -999.00  +20.30  19.83     65  +13.70 1 2 1 1 1   887    0 11.53 221.68 ----- 17.8 19.8 294.4 23.0 21.6 -16.6 21.6 -15.8 21.4 -15.1 21.6 -16.1
2026-02-11T18:42:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:42:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:42:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.695626
2026-02-11T18:42:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:42:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:42:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:42:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:42:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:42:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:41:49', tmtdew=8.21, humidity=59.04, cloud=0.0, wind=20.96, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:41:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:42:23.826 [DEBUG] [Thread-133915] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:42:23.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:42:23.922 [DEBUG] [Thread-133918] [transport.py] [_log()] starting thread (client mode): 0xa57e3f70
2026-02-11T18:42:23.923 [DEBUG] [Thread-133918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:42:23.936 [DEBUG] [Thread-133918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:42:23.936 [INFO] [Thread-133918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:42:23.944 [DEBUG] [Thread-133918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:42:23.944 [DEBUG] [Thread-133918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:42:23.944 [DEBUG] [Thread-133918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:42:23.944 [DEBUG] [Thread-133918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:23.944 [DEBUG] [Thread-133918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:23.944 [DEBUG] [Thread-133918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:23.944 [DEBUG] [Thread-133918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] client lang: <none>
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] server lang: <none>
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] kex follows: False
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:42:23.945 [DEBUG] [Thread-133918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:42:23.946 [DEBUG] [Thread-133918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:42:23.946 [DEBUG] [Thread-133918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:42:23.946 [DEBUG] [Thread-133918] [transport.py] [_log()] Compression: none
2026-02-11T18:42:23.946 [DEBUG] [Thread-133918] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:42:24.002 [DEBUG] [Thread-133918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:42:24.002 [DEBUG] [Thread-133918] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:42:24.003 [DEBUG] [Thread-133918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:42:24.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:42:24.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:42:24.058 [DEBUG] [Thread-133918] [transport.py] [_log()] userauth is OK
2026-02-11T18:42:24.058 [DEBUG] [Thread-133918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:42:24.058 [DEBUG] [Thread-133918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:42:24.059 [DEBUG] [Thread-133918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:42:24.059 [DEBUG] [Thread-133918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:42:24.078 [INFO] [Thread-133918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:42:24.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:42:24.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:42:24.930 [DEBUG] [Thread-133918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:42:24.931 [DEBUG] [Thread-133918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:42:24.978 [DEBUG] [Thread-133918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:42:24.978 [DEBUG] [Thread-133918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:42:24.987 [DEBUG] [Thread-133918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:42:24.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:42:24.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')
2026-02-11T18:42:25.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
2026-02-11T18:42:25.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:42:25.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:42:25.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:42:25.021 [DEBUG] [Thread-133918] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:42:31.271 [DEBUG] [Thread-133920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:42:31.348 [DEBUG] [Thread-133921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:42:46.322 [DEBUG] [Thread-133922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:42:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:42:55.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:42:55.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
2026-02-11T18:42:56.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 42, 26), 8.25, 58.87, 0.0, 21.6, 20.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:42:56.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:42:26
2026-02-11T18:42:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:42:57.453 [DEBUG] [Thread-133923] [transport.py] [_log()] starting thread (client mode): 0x9eb069b0
2026-02-11T18:42:57.454 [DEBUG] [Thread-133923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:42:57.474 [DEBUG] [Thread-133923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:42:57.474 [INFO] [Thread-133923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:42:57.478 [DEBUG] [Thread-133923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:42:57.478 [DEBUG] [Thread-133923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:42:57.478 [DEBUG] [Thread-133923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:42:57.478 [DEBUG] [Thread-133923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:57.478 [DEBUG] [Thread-133923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:57.478 [DEBUG] [Thread-133923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] client lang: <none>
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] server lang: <none>
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] kex follows: False
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] Compression: none
2026-02-11T18:42:57.479 [DEBUG] [Thread-133923] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:42:57.491 [DEBUG] [Thread-133923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:42:57.492 [DEBUG] [Thread-133923] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:42:57.493 [DEBUG] [Thread-133923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:42:57.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:42:57.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:42:57.495 [DEBUG] [Thread-133923] [transport.py] [_log()] userauth is OK
2026-02-11T18:42:57.495 [DEBUG] [Thread-133923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:42:57.495 [DEBUG] [Thread-133923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:42:57.495 [DEBUG] [Thread-133923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:42:57.495 [DEBUG] [Thread-133923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:42:57.532 [INFO] [Thread-133923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:42:57.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:42:58.148 [DEBUG] [Thread-133923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:42:58.148 [DEBUG] [Thread-133923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:42:58.148 [DEBUG] [Thread-133923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:42:58.190 [DEBUG] [Thread-133923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:42:58.190 [DEBUG] [Thread-133923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:42:58.193 [DEBUG] [Thread-133923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:42:58.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:42:58.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:42:58.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:42:58.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:42:58.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:42:58.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:42:58.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.695974 -999.00  +20.30  23.66     65  +13.70 1 2 1 1 1   887    0 11.34 212.49 ----- 24.0 23.7 298.0 26.6 21.7 -16.8 21.6 -16.2 21.5 -15.2 21.7 -16.3
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.695974
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:42:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:42:26', tmtdew=8.25, humidity=58.87, cloud=0.0, wind=21.6, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:42:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:42:58.216 [DEBUG] [Thread-133923] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:42:58.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:42:58.302 [DEBUG] [Thread-133926] [transport.py] [_log()] starting thread (client mode): 0xa57d7910
2026-02-11T18:42:58.302 [DEBUG] [Thread-133926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:42:58.316 [DEBUG] [Thread-133926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:42:58.317 [INFO] [Thread-133926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:42:58.324 [DEBUG] [Thread-133926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:42:58.324 [DEBUG] [Thread-133926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:42:58.324 [DEBUG] [Thread-133926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:42:58.324 [DEBUG] [Thread-133926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:58.324 [DEBUG] [Thread-133926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] client lang: <none>
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] server lang: <none>
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] kex follows: False
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] Compression: none
2026-02-11T18:42:58.325 [DEBUG] [Thread-133926] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:42:58.383 [DEBUG] [Thread-133926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:42:58.384 [DEBUG] [Thread-133926] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:42:58.384 [DEBUG] [Thread-133926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:42:58.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:42:58.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:42:58.441 [DEBUG] [Thread-133926] [transport.py] [_log()] userauth is OK
2026-02-11T18:42:58.442 [DEBUG] [Thread-133926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:42:58.442 [DEBUG] [Thread-133926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:42:58.442 [DEBUG] [Thread-133926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:42:58.442 [DEBUG] [Thread-133926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:42:58.461 [INFO] [Thread-133926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:42:58.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:42:58.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:42:59.283 [DEBUG] [Thread-133926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:42:59.284 [DEBUG] [Thread-133926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:42:59.332 [DEBUG] [Thread-133926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:42:59.332 [DEBUG] [Thread-133926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:42:59.341 [DEBUG] [Thread-133926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:42:59.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:42:59.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:42:59.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:42:59.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:42:59.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:42:59.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:42:59.379 [DEBUG] [Thread-133926] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:43:01.358 [DEBUG] [Thread-133928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:43:01.383 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:43:01.385 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:43:16.409 [DEBUG] [Thread-133929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:43:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:43:29.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:43:29.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
2026-02-11T18:43:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 43, 1), 8.25, 58.9, 0.0, 22.69, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:43:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:43:01
2026-02-11T18:43:31.403 [DEBUG] [Thread-133930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:43:31.445 [DEBUG] [Thread-133931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:43:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:43:31.820 [DEBUG] [Thread-133932] [transport.py] [_log()] starting thread (client mode): 0xa5759930
2026-02-11T18:43:31.820 [DEBUG] [Thread-133932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:43:31.839 [DEBUG] [Thread-133932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:43:31.839 [INFO] [Thread-133932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] client lang: <none>
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] server lang: <none>
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] kex follows: False
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:43:31.841 [DEBUG] [Thread-133932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:43:31.842 [DEBUG] [Thread-133932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:43:31.842 [DEBUG] [Thread-133932] [transport.py] [_log()] Compression: none
2026-02-11T18:43:31.842 [DEBUG] [Thread-133932] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:43:31.860 [DEBUG] [Thread-133932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:43:31.860 [DEBUG] [Thread-133932] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:43:31.861 [DEBUG] [Thread-133932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:43:31.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:43:31.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:43:31.863 [DEBUG] [Thread-133932] [transport.py] [_log()] userauth is OK
2026-02-11T18:43:31.863 [DEBUG] [Thread-133932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:43:31.863 [DEBUG] [Thread-133932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:43:31.863 [DEBUG] [Thread-133932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:43:31.863 [DEBUG] [Thread-133932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:43:31.887 [INFO] [Thread-133932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:43:31.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:43:32.523 [DEBUG] [Thread-133932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:43:32.523 [DEBUG] [Thread-133932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:43:32.524 [DEBUG] [Thread-133932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:43:32.564 [DEBUG] [Thread-133932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:43:32.565 [DEBUG] [Thread-133932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:43:32.568 [DEBUG] [Thread-133932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:43:32.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:43:32.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:43:32.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:43:32.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:43:32.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:43:32.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:43:32.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:43:32.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:43:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:43:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.696668 -999.00  +20.50  23.89     64  +13.50 1 2 1 1 1   887    0 11.89 227.99 ----- 24.1 23.9 293.6 25.9 21.8 -17.1 21.8 -16.3 21.8 -16.1 22.0 -17.1
2026-02-11T18:43:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:43:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:43:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.696668
2026-02-11T18:43:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:43:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:43:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:43:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:43:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:43:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:43:01', tmtdew=8.25, humidity=58.9, cloud=0.0, wind=22.69, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:43:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:43:32.594 [DEBUG] [Thread-133932] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:43:32.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:43:32.690 [DEBUG] [Thread-133935] [transport.py] [_log()] starting thread (client mode): 0xa5759630
2026-02-11T18:43:32.691 [DEBUG] [Thread-133935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:43:32.706 [DEBUG] [Thread-133935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:43:32.706 [INFO] [Thread-133935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:43:32.714 [DEBUG] [Thread-133935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] client lang: <none>
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] server lang: <none>
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] kex follows: False
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] Compression: none
2026-02-11T18:43:32.715 [DEBUG] [Thread-133935] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:43:32.775 [DEBUG] [Thread-133935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:43:32.776 [DEBUG] [Thread-133935] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:43:32.776 [DEBUG] [Thread-133935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:43:32.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:43:32.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:43:32.832 [DEBUG] [Thread-133935] [transport.py] [_log()] userauth is OK
2026-02-11T18:43:32.832 [DEBUG] [Thread-133935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:43:32.832 [DEBUG] [Thread-133935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:43:32.832 [DEBUG] [Thread-133935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:43:32.833 [DEBUG] [Thread-133935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:43:32.852 [INFO] [Thread-133935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:43:32.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:43:32.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:43:33.711 [DEBUG] [Thread-133935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:43:33.712 [DEBUG] [Thread-133935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:43:33.759 [DEBUG] [Thread-133935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:43:33.759 [DEBUG] [Thread-133935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:43:33.769 [DEBUG] [Thread-133935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:43:33.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:43:33.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:43:33.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:43:33.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:43:33.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:43:33.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:43:33.806 [DEBUG] [Thread-133935] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:43:46.486 [DEBUG] [Thread-133937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:44:01.537 [DEBUG] [Thread-133938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:44:01.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:44:01.606 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:44:03.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:44:03.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:44:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:44:06.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 43, 37), 8.96, 56.54, 0.0, 23.57, 21.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:44:06.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:43:37
2026-02-11T18:44:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:44:06.751 [DEBUG] [Thread-133939] [transport.py] [_log()] starting thread (client mode): 0xa57d6da0
2026-02-11T18:44:06.751 [DEBUG] [Thread-133939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:44:06.773 [DEBUG] [Thread-133939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:44:06.773 [INFO] [Thread-133939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:06.776 [DEBUG] [Thread-133939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] client lang: <none>
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] server lang: <none>
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] kex follows: False
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] Compression: none
2026-02-11T18:44:06.777 [DEBUG] [Thread-133939] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:44:06.796 [DEBUG] [Thread-133939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:44:06.796 [DEBUG] [Thread-133939] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:44:06.797 [DEBUG] [Thread-133939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:44:06.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:44:06.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:44:06.799 [DEBUG] [Thread-133939] [transport.py] [_log()] userauth is OK
2026-02-11T18:44:06.799 [DEBUG] [Thread-133939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:44:06.799 [DEBUG] [Thread-133939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:44:06.799 [DEBUG] [Thread-133939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:44:06.799 [DEBUG] [Thread-133939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:44:06.825 [INFO] [Thread-133939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:44:06.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:44:07.616 [DEBUG] [Thread-133939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:44:07.616 [DEBUG] [Thread-133939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:44:07.616 [DEBUG] [Thread-133939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:44:07.657 [DEBUG] [Thread-133939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:44:07.657 [DEBUG] [Thread-133939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:44:07.660 [DEBUG] [Thread-133939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:44:07.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:44:07.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:44:07.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:44:07.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:44:07.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:44:07.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:44:07.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:44:07.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:44:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:44:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.697015 -999.00  +20.60  23.21     63  +13.40 1 2 1 1 1   887    0 11.55 213.32 ----- 25.5 23.2 288.2 26.4 21.8 -17.4 21.9 -16.5 21.9 -16.0 22.1 -17.2
2026-02-11T18:44:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:44:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:44:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.697015
2026-02-11T18:44:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:44:07.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:44:07.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:44:07.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:44:07.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:44:07.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:43:37', tmtdew=8.96, humidity=56.54, cloud=0.0, wind=23.57, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:43:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:44:07.689 [DEBUG] [Thread-133939] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:44:07.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:44:07.785 [DEBUG] [Thread-133942] [transport.py] [_log()] starting thread (client mode): 0xa57d5d80
2026-02-11T18:44:07.785 [DEBUG] [Thread-133942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:44:07.799 [DEBUG] [Thread-133942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:44:07.799 [INFO] [Thread-133942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] client lang: <none>
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] server lang: <none>
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] kex follows: False
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:44:07.808 [DEBUG] [Thread-133942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:44:07.809 [DEBUG] [Thread-133942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:44:07.809 [DEBUG] [Thread-133942] [transport.py] [_log()] Compression: none
2026-02-11T18:44:07.809 [DEBUG] [Thread-133942] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:44:07.870 [DEBUG] [Thread-133942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:44:07.871 [DEBUG] [Thread-133942] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:44:07.871 [DEBUG] [Thread-133942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:44:07.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:44:07.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:44:07.931 [DEBUG] [Thread-133942] [transport.py] [_log()] userauth is OK
2026-02-11T18:44:07.932 [DEBUG] [Thread-133942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:44:07.932 [DEBUG] [Thread-133942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:44:07.932 [DEBUG] [Thread-133942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:44:07.932 [DEBUG] [Thread-133942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:44:07.951 [INFO] [Thread-133942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:44:07.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:44:07.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:44:08.787 [DEBUG] [Thread-133942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:44:08.787 [DEBUG] [Thread-133942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:44:08.835 [DEBUG] [Thread-133942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:44:08.835 [DEBUG] [Thread-133942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:44:08.845 [DEBUG] [Thread-133942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:44:08.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:44:08.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:44:08.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:44:08.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:44:08.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:44:08.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:44:08.881 [DEBUG] [Thread-133942] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:44:16.576 [DEBUG] [Thread-133944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:44:31.468 [DEBUG] [Thread-133945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:44:31.625 [DEBUG] [Thread-133946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:44:38.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:44:38.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:44:38.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:44:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 44, 12), 8.83, 57.08, 0.0, 22.51, 20.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:44:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:44:12
2026-02-11T18:44:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:44:41.864 [DEBUG] [Thread-133947] [transport.py] [_log()] starting thread (client mode): 0xa57b3820
2026-02-11T18:44:41.864 [DEBUG] [Thread-133947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:44:41.884 [DEBUG] [Thread-133947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:44:41.884 [INFO] [Thread-133947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:44:41.887 [DEBUG] [Thread-133947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:44:41.887 [DEBUG] [Thread-133947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:44:41.887 [DEBUG] [Thread-133947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] client lang: <none>
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] server lang: <none>
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] kex follows: False
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:44:41.888 [DEBUG] [Thread-133947] [transport.py] [_log()] Compression: none
2026-02-11T18:44:41.889 [DEBUG] [Thread-133947] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:44:41.906 [DEBUG] [Thread-133947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:44:41.906 [DEBUG] [Thread-133947] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:44:41.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:44:41.907 [DEBUG] [Thread-133947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:44:41.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:44:41.909 [DEBUG] [Thread-133947] [transport.py] [_log()] userauth is OK
2026-02-11T18:44:41.909 [DEBUG] [Thread-133947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:44:41.910 [DEBUG] [Thread-133947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:44:41.910 [DEBUG] [Thread-133947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:44:41.910 [DEBUG] [Thread-133947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:44:41.927 [INFO] [Thread-133947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:44:41.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:44:42.584 [DEBUG] [Thread-133947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:44:42.585 [DEBUG] [Thread-133947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:44:42.585 [DEBUG] [Thread-133947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:44:42.625 [DEBUG] [Thread-133947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:44:42.626 [DEBUG] [Thread-133947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:44:42.629 [DEBUG] [Thread-133947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:44:42.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:44:42.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:44:42.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:44:42.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:44:42.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:44:42.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:44:42.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:44:42.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.697363 -999.00  +20.60  23.28     64  +13.60 1 2 1 1 1   887    0 11.75 219.80 ----- 18.0 23.3 296.8 26.8 21.9 -17.6 21.9 -16.8 22.0 -16.1 22.2 -17.6
2026-02-11T18:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.697363
2026-02-11T18:44:42.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:44:42.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:44:42.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:44:42.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:44:42.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:44:42.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:44:12', tmtdew=8.83, humidity=57.08, cloud=0.0, wind=22.51, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:44:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:44:42.658 [DEBUG] [Thread-133947] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:44:42.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:44:42.755 [DEBUG] [Thread-133950] [transport.py] [_log()] starting thread (client mode): 0xa57b3bb0
2026-02-11T18:44:42.755 [DEBUG] [Thread-133950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:44:42.769 [DEBUG] [Thread-133950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:44:42.769 [INFO] [Thread-133950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:44:42.777 [DEBUG] [Thread-133950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:44:42.777 [DEBUG] [Thread-133950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:44:42.778 [DEBUG] [Thread-133950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:44:42.778 [DEBUG] [Thread-133950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:42.778 [DEBUG] [Thread-133950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:44:42.778 [DEBUG] [Thread-133950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:42.778 [DEBUG] [Thread-133950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] client lang: <none>
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] server lang: <none>
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] kex follows: False
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] Compression: none
2026-02-11T18:44:42.779 [DEBUG] [Thread-133950] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:44:42.836 [DEBUG] [Thread-133950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:44:42.837 [DEBUG] [Thread-133950] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:44:42.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:44:42.838 [DEBUG] [Thread-133950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:44:42.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:44:42.891 [DEBUG] [Thread-133950] [transport.py] [_log()] userauth is OK
2026-02-11T18:44:42.891 [DEBUG] [Thread-133950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:44:42.892 [DEBUG] [Thread-133950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:44:42.892 [DEBUG] [Thread-133950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:44:42.892 [DEBUG] [Thread-133950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:44:42.912 [INFO] [Thread-133950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:44:42.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:44:42.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:44:43.749 [DEBUG] [Thread-133950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:44:43.749 [DEBUG] [Thread-133950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:44:43.797 [DEBUG] [Thread-133950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:44:43.798 [DEBUG] [Thread-133950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:44:43.807 [DEBUG] [Thread-133950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:44:43.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:44:43.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:44:43.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:44:43.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:44:43.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:44:43.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:44:43.844 [DEBUG] [Thread-133950] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:44:46.661 [DEBUG] [Thread-133952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:01.714 [DEBUG] [Thread-133953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:01.838 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:01.840 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:45:13.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:45:13.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:45:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 44, 20), 8.88, 56.58, 0.0, 24.31, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:45:15.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:44:20
2026-02-11T18:45:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:45:16.280 [DEBUG] [Thread-133954] [transport.py] [_log()] starting thread (client mode): 0x9eb04370
2026-02-11T18:45:16.281 [DEBUG] [Thread-133954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:45:16.301 [DEBUG] [Thread-133954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:45:16.301 [INFO] [Thread-133954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:45:16.304 [DEBUG] [Thread-133954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] client lang: <none>
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] server lang: <none>
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] kex follows: False
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] Compression: none
2026-02-11T18:45:16.305 [DEBUG] [Thread-133954] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:45:16.324 [DEBUG] [Thread-133954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:45:16.325 [DEBUG] [Thread-133954] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:45:16.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:45:16.326 [DEBUG] [Thread-133954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:45:16.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:45:16.327 [DEBUG] [Thread-133954] [transport.py] [_log()] userauth is OK
2026-02-11T18:45:16.327 [DEBUG] [Thread-133954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:45:16.328 [DEBUG] [Thread-133954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:45:16.328 [DEBUG] [Thread-133954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:45:16.328 [DEBUG] [Thread-133954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:45:16.348 [INFO] [Thread-133954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:45:16.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:45:16.752 [DEBUG] [Thread-133956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:16.993 [DEBUG] [Thread-133954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:45:16.993 [DEBUG] [Thread-133954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:45:16.993 [DEBUG] [Thread-133954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:45:17.035 [DEBUG] [Thread-133954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:45:17.035 [DEBUG] [Thread-133954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:45:17.038 [DEBUG] [Thread-133954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:45:17.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:45:17.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:45:17.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:45:17.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:45:17.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:45:17.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:45:17.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:45:17.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:45:17.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:45:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.697710 -999.00  +20.70  18.58     63  +13.60 1 2 1 1 1   887    0 12.14 225.48 ----- 19.3 18.6 291.8 24.9 21.8 -17.5 21.9 -16.7 22.0 -16.3 22.2 -17.4
2026-02-11T18:45:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:45:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:45:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.697710
2026-02-11T18:45:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:45:17.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:45:17.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:45:17.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:45:17.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:45:17.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:44:20', tmtdew=8.88, humidity=56.58, cloud=0.0, wind=24.31, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:44:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:45:17.061 [DEBUG] [Thread-133954] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:45:17.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:45:17.158 [DEBUG] [Thread-133958] [transport.py] [_log()] starting thread (client mode): 0xa575a740
2026-02-11T18:45:17.158 [DEBUG] [Thread-133958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:45:17.174 [DEBUG] [Thread-133958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:45:17.174 [INFO] [Thread-133958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:45:17.185 [DEBUG] [Thread-133958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] client lang: <none>
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] server lang: <none>
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] kex follows: False
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:45:17.186 [DEBUG] [Thread-133958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:45:17.187 [DEBUG] [Thread-133958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:45:17.187 [DEBUG] [Thread-133958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:45:17.187 [DEBUG] [Thread-133958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:45:17.187 [DEBUG] [Thread-133958] [transport.py] [_log()] Compression: none
2026-02-11T18:45:17.187 [DEBUG] [Thread-133958] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:45:17.240 [DEBUG] [Thread-133958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:45:17.241 [DEBUG] [Thread-133958] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:45:17.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:45:17.242 [DEBUG] [Thread-133958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:45:17.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:45:17.300 [DEBUG] [Thread-133958] [transport.py] [_log()] userauth is OK
2026-02-11T18:45:17.300 [DEBUG] [Thread-133958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:45:17.301 [DEBUG] [Thread-133958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:45:17.301 [DEBUG] [Thread-133958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:45:17.301 [DEBUG] [Thread-133958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:45:17.319 [INFO] [Thread-133958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:45:17.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:45:17.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:45:18.157 [DEBUG] [Thread-133958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:45:18.163 [DEBUG] [Thread-133958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:45:18.205 [DEBUG] [Thread-133958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:45:18.206 [DEBUG] [Thread-133958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:45:18.215 [DEBUG] [Thread-133958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:45:18.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:45:18.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:45:18.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:45:18.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:45:18.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:45:18.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:45:18.252 [DEBUG] [Thread-133958] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:45:31.520 [DEBUG] [Thread-133960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:31.788 [DEBUG] [Thread-133961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:46.849 [DEBUG] [Thread-133962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:45:48.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:45:48.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:45:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:45:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 44, 20), 8.88, 56.58, 0.0, 24.31, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:45:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:44:20
2026-02-11T18:45:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:45:50.665 [DEBUG] [Thread-133963] [transport.py] [_log()] starting thread (client mode): 0xa2d5f250
2026-02-11T18:45:50.665 [DEBUG] [Thread-133963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:45:50.685 [DEBUG] [Thread-133963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:45:50.686 [INFO] [Thread-133963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:45:50.688 [DEBUG] [Thread-133963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] client lang: <none>
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] server lang: <none>
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] kex follows: False
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] Compression: none
2026-02-11T18:45:50.689 [DEBUG] [Thread-133963] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:45:50.708 [DEBUG] [Thread-133963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:45:50.709 [DEBUG] [Thread-133963] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:45:50.709 [DEBUG] [Thread-133963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:45:50.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:45:50.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:45:50.711 [DEBUG] [Thread-133963] [transport.py] [_log()] userauth is OK
2026-02-11T18:45:50.712 [DEBUG] [Thread-133963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:45:50.712 [DEBUG] [Thread-133963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:45:50.712 [DEBUG] [Thread-133963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:45:50.712 [DEBUG] [Thread-133963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:45:50.738 [INFO] [Thread-133963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:45:50.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:45:51.398 [DEBUG] [Thread-133963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:45:51.398 [DEBUG] [Thread-133963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:45:51.399 [DEBUG] [Thread-133963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:45:51.439 [DEBUG] [Thread-133963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:45:51.440 [DEBUG] [Thread-133963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:45:51.443 [DEBUG] [Thread-133963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:45:51.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:45:51.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:45:51.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:45:51.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:45:51.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:45:51.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:45:51.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:45:51.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:45:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:45:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.698057 -999.00  +20.70  23.17     63  +13.40 1 2 1 1 1   887    0 12.13 225.89 ----- 22.6 23.2 297.6 25.1 21.9 -17.7 22.0 -16.8 22.1 -16.5 22.3 -18.0
2026-02-11T18:45:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:45:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:45:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.698057
2026-02-11T18:45:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:45:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:45:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:45:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:45:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:45:51.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:44:20', tmtdew=8.88, humidity=56.58, cloud=0.0, wind=24.31, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:45:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:45:51.472 [DEBUG] [Thread-133963] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:45:51.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:45:51.569 [DEBUG] [Thread-133966] [transport.py] [_log()] starting thread (client mode): 0xa57590f0
2026-02-11T18:45:51.569 [DEBUG] [Thread-133966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:45:51.583 [DEBUG] [Thread-133966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:45:51.583 [INFO] [Thread-133966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] client lang: <none>
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] server lang: <none>
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] kex follows: False
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] Compression: none
2026-02-11T18:45:51.591 [DEBUG] [Thread-133966] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:45:51.648 [DEBUG] [Thread-133966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:45:51.648 [DEBUG] [Thread-133966] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:45:51.649 [DEBUG] [Thread-133966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:45:51.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:45:51.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:45:51.706 [DEBUG] [Thread-133966] [transport.py] [_log()] userauth is OK
2026-02-11T18:45:51.706 [DEBUG] [Thread-133966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:45:51.706 [DEBUG] [Thread-133966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:45:51.706 [DEBUG] [Thread-133966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:45:51.706 [DEBUG] [Thread-133966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:45:51.724 [INFO] [Thread-133966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:45:51.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:45:51.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:45:52.552 [DEBUG] [Thread-133966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:45:52.552 [DEBUG] [Thread-133966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:45:52.600 [DEBUG] [Thread-133966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:45:52.601 [DEBUG] [Thread-133966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:45:52.610 [DEBUG] [Thread-133966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:45:52.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:45: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')
2026-02-11T18:45:52.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
2026-02-11T18:45:52.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:45:52.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:45:52.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:45:52.647 [DEBUG] [Thread-133966] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:46:01.889 [DEBUG] [Thread-133968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:46:02.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:46:02.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:46:16.943 [DEBUG] [Thread-133969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:46:22.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:46:22.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:46:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:46:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 44, 20), 8.88, 56.58, 0.0, 24.31, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:46:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:44:20
2026-02-11T18:46:25.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:46:25.409 [DEBUG] [Thread-133970] [transport.py] [_log()] starting thread (client mode): 0xa57d5720
2026-02-11T18:46:25.409 [DEBUG] [Thread-133970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:46:25.428 [DEBUG] [Thread-133970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:46:25.428 [INFO] [Thread-133970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:46:25.431 [DEBUG] [Thread-133970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:46:25.431 [DEBUG] [Thread-133970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] client lang: <none>
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] server lang: <none>
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] kex follows: False
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] Compression: none
2026-02-11T18:46:25.432 [DEBUG] [Thread-133970] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:46:25.450 [DEBUG] [Thread-133970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:46:25.451 [DEBUG] [Thread-133970] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:46:25.451 [DEBUG] [Thread-133970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:46:25.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:46:25.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:46:25.453 [DEBUG] [Thread-133970] [transport.py] [_log()] userauth is OK
2026-02-11T18:46:25.453 [DEBUG] [Thread-133970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:46:25.454 [DEBUG] [Thread-133970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:46:25.454 [DEBUG] [Thread-133970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:46:25.454 [DEBUG] [Thread-133970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:46:25.479 [INFO] [Thread-133970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:46:25.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:46:26.096 [DEBUG] [Thread-133970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:46:26.097 [DEBUG] [Thread-133970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:46:26.097 [DEBUG] [Thread-133970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:46:26.137 [DEBUG] [Thread-133970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:46:26.138 [DEBUG] [Thread-133970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:46:26.141 [DEBUG] [Thread-133970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:46:26.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:46:26.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:46:26.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:46:26.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:46:26.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:46:26.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:46:26.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:46:26.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:46:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:46:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.698404 -999.00  +20.50  20.02     63  +13.30 1 2 1 1 1   887    0 12.26 227.32 ----- 18.1 20.0 301.0 30.9 21.9 -18.2 22.0 -17.3 22.0 -16.9 22.3 -18.4
2026-02-11T18:46:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:46:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:46:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.698404
2026-02-11T18:46:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:46:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:46:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:46:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:46:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:46:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:44:20', tmtdew=8.88, humidity=56.58, cloud=0.0, wind=24.31, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:45:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:46:26.167 [DEBUG] [Thread-133970] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:46:26.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:46:26.258 [DEBUG] [Thread-133973] [transport.py] [_log()] starting thread (client mode): 0xa57c0640
2026-02-11T18:46:26.258 [DEBUG] [Thread-133973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:46:26.273 [DEBUG] [Thread-133973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:46:26.273 [INFO] [Thread-133973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:46:26.281 [DEBUG] [Thread-133973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] client lang: <none>
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] server lang: <none>
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] kex follows: False
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] Compression: none
2026-02-11T18:46:26.282 [DEBUG] [Thread-133973] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:46:26.342 [DEBUG] [Thread-133973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:46:26.343 [DEBUG] [Thread-133973] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:46:26.343 [DEBUG] [Thread-133973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:46:26.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:46:26.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:46:26.406 [DEBUG] [Thread-133973] [transport.py] [_log()] userauth is OK
2026-02-11T18:46:26.407 [DEBUG] [Thread-133973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:46:26.407 [DEBUG] [Thread-133973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:46:26.407 [DEBUG] [Thread-133973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:46:26.407 [DEBUG] [Thread-133973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:46:26.431 [INFO] [Thread-133973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:46:26.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:46:26.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:46:27.277 [DEBUG] [Thread-133973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:46:27.277 [DEBUG] [Thread-133973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:46:27.325 [DEBUG] [Thread-133973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:46:27.326 [DEBUG] [Thread-133973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:46:27.335 [DEBUG] [Thread-133973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:46:27.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:46:27.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:46:27.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
2026-02-11T18:46:27.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:46:27.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:46:27.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:46:27.372 [DEBUG] [Thread-133973] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:46:31.589 [DEBUG] [Thread-133975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:46:31.980 [DEBUG] [Thread-133976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:46:47.027 [DEBUG] [Thread-133977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:46:57.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:46:57.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:46:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:46:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 44, 20), 8.88, 56.58, 0.0, 24.31, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:46:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:44:20
2026-02-11T18:46:59.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:46:59.849 [DEBUG] [Thread-133978] [transport.py] [_log()] starting thread (client mode): 0xa57c19c0
2026-02-11T18:46:59.849 [DEBUG] [Thread-133978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:46:59.869 [DEBUG] [Thread-133978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:46:59.870 [INFO] [Thread-133978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:46:59.873 [DEBUG] [Thread-133978] [transport.py] [_log()] client lang: <none>
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] server lang: <none>
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] kex follows: False
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] Compression: none
2026-02-11T18:46:59.874 [DEBUG] [Thread-133978] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:46:59.895 [DEBUG] [Thread-133978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:46:59.896 [DEBUG] [Thread-133978] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:46:59.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:46:59.897 [DEBUG] [Thread-133978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:46:59.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:46:59.900 [DEBUG] [Thread-133978] [transport.py] [_log()] userauth is OK
2026-02-11T18:46:59.900 [DEBUG] [Thread-133978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:46:59.900 [DEBUG] [Thread-133978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:46:59.900 [DEBUG] [Thread-133978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:46:59.900 [DEBUG] [Thread-133978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:46:59.922 [INFO] [Thread-133978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:46:59.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:47:00.734 [DEBUG] [Thread-133978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:47:00.734 [DEBUG] [Thread-133978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:47:00.735 [DEBUG] [Thread-133978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:47:00.775 [DEBUG] [Thread-133978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:47:00.776 [DEBUG] [Thread-133978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:47:00.780 [DEBUG] [Thread-133978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:47:00.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:47:00.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:47:00.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:47:00.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:47:00.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:47:00.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:47:00.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:47:00.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:47:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:47:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.698751 -999.00  +20.50  20.48     64  +13.50 1 2 1 1 1   887    0 12.44 230.15 ----- 16.9 20.5 299.0 26.3 21.9 -18.2 22.0 -17.2 22.0 -17.2 22.3 -18.4
2026-02-11T18:47:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:47:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:47:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.698751
2026-02-11T18:47:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:47:00.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:47:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:47:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:47:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:47:00.807 [DEBUG] [Thread-133978] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:47:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:44:20', tmtdew=8.88, humidity=56.58, cloud=0.0, wind=24.31, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:46:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:47:00.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:47:00.903 [DEBUG] [Thread-133981] [transport.py] [_log()] starting thread (client mode): 0xa57c2290
2026-02-11T18:47:00.904 [DEBUG] [Thread-133981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:47:00.922 [DEBUG] [Thread-133981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:47:00.922 [INFO] [Thread-133981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:47:00.930 [DEBUG] [Thread-133981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] client lang: <none>
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] server lang: <none>
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] kex follows: False
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] Compression: none
2026-02-11T18:47:00.931 [DEBUG] [Thread-133981] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:47:00.989 [DEBUG] [Thread-133981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:47:00.989 [DEBUG] [Thread-133981] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:47:00.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:47:00.991 [DEBUG] [Thread-133981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:47:00.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:47:01.044 [DEBUG] [Thread-133981] [transport.py] [_log()] userauth is OK
2026-02-11T18:47:01.045 [DEBUG] [Thread-133981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:47:01.045 [DEBUG] [Thread-133981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:47:01.045 [DEBUG] [Thread-133981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:47:01.045 [DEBUG] [Thread-133981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:47:01.069 [INFO] [Thread-133981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:47:01.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:47:01.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:47:01.911 [DEBUG] [Thread-133981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:47:01.911 [DEBUG] [Thread-133981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:47:01.960 [DEBUG] [Thread-133981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:47:01.960 [DEBUG] [Thread-133981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:47:01.969 [DEBUG] [Thread-133981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:47:01.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:47:01.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:47:01.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:47:01.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:47:01.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:47:01.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:47:02.005 [DEBUG] [Thread-133981] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:47:02.061 [DEBUG] [Thread-133983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:47:02.235 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:47:02.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:47:17.118 [DEBUG] [Thread-133984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:47:31.651 [DEBUG] [Thread-133985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:47:32.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:47:32.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:47:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:47:32.154 [DEBUG] [Thread-133986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:47:33.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 44, 20), 8.88, 56.58, 0.0, 24.31, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:47:33.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:44:20
2026-02-11T18:47:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:47:34.444 [DEBUG] [Thread-133987] [transport.py] [_log()] starting thread (client mode): 0xa57c1a80
2026-02-11T18:47:34.444 [DEBUG] [Thread-133987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:47:34.465 [DEBUG] [Thread-133987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:47:34.465 [INFO] [Thread-133987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:47:34.468 [DEBUG] [Thread-133987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:47:34.468 [DEBUG] [Thread-133987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:47:34.468 [DEBUG] [Thread-133987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] client lang: <none>
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] server lang: <none>
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] kex follows: False
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] Compression: none
2026-02-11T18:47:34.469 [DEBUG] [Thread-133987] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:47:34.486 [DEBUG] [Thread-133987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:47:34.487 [DEBUG] [Thread-133987] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:47:34.488 [DEBUG] [Thread-133987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:47:34.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:47:34.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:47:34.490 [DEBUG] [Thread-133987] [transport.py] [_log()] userauth is OK
2026-02-11T18:47:34.490 [DEBUG] [Thread-133987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:47:34.490 [DEBUG] [Thread-133987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:47:34.490 [DEBUG] [Thread-133987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:47:34.490 [DEBUG] [Thread-133987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:47:34.526 [INFO] [Thread-133987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:47:34.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:47:35.152 [DEBUG] [Thread-133987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:47:35.152 [DEBUG] [Thread-133987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:47:35.152 [DEBUG] [Thread-133987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:47:35.193 [DEBUG] [Thread-133987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:47:35.193 [DEBUG] [Thread-133987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:47:35.196 [DEBUG] [Thread-133987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:47:35.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:47:35.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:47:35.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:47:35.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:47:35.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:47:35.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:47:35.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:47:35.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:47:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:47:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.699098 -999.00  +20.60  23.20     63  +13.40 1 2 1 1 1   887    0 12.41 223.74 ----- 20.9 23.2 289.6 25.1 21.9 -18.6 21.9 -17.4 21.9 -17.7 22.2 -18.6
2026-02-11T18:47:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:47:35.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:47:35.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.699098
2026-02-11T18:47:35.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:47:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:47:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:47:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:47:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:47:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:44:20', tmtdew=8.88, humidity=56.58, cloud=0.0, wind=24.31, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:46:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:47:35.225 [DEBUG] [Thread-133987] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:47:35.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:47:35.321 [DEBUG] [Thread-133990] [transport.py] [_log()] starting thread (client mode): 0xa57c32b0
2026-02-11T18:47:35.322 [DEBUG] [Thread-133990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:47:35.335 [DEBUG] [Thread-133990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:47:35.335 [INFO] [Thread-133990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:47:35.343 [DEBUG] [Thread-133990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:47:35.343 [DEBUG] [Thread-133990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:47:35.343 [DEBUG] [Thread-133990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:47:35.343 [DEBUG] [Thread-133990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:47:35.343 [DEBUG] [Thread-133990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:47:35.343 [DEBUG] [Thread-133990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] client lang: <none>
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] server lang: <none>
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] kex follows: False
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:47:35.344 [DEBUG] [Thread-133990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:47:35.345 [DEBUG] [Thread-133990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:47:35.345 [DEBUG] [Thread-133990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:47:35.345 [DEBUG] [Thread-133990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:47:35.345 [DEBUG] [Thread-133990] [transport.py] [_log()] Compression: none
2026-02-11T18:47:35.345 [DEBUG] [Thread-133990] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:47:35.401 [DEBUG] [Thread-133990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:47:35.401 [DEBUG] [Thread-133990] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:47:35.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:47:35.402 [DEBUG] [Thread-133990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:47:35.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:47:35.456 [DEBUG] [Thread-133990] [transport.py] [_log()] userauth is OK
2026-02-11T18:47:35.456 [DEBUG] [Thread-133990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:47:35.456 [DEBUG] [Thread-133990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:47:35.456 [DEBUG] [Thread-133990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:47:35.457 [DEBUG] [Thread-133990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:47:35.478 [INFO] [Thread-133990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:47:35.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:47:35.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:47:36.287 [DEBUG] [Thread-133990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:47:36.287 [DEBUG] [Thread-133990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:47:36.334 [DEBUG] [Thread-133990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:47:36.335 [DEBUG] [Thread-133990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:47:36.344 [DEBUG] [Thread-133990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:47:36.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:47:36.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:47:36.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:47:36.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:47:36.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:47:36.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:47:36.383 [DEBUG] [Thread-133990] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:47:47.191 [DEBUG] [Thread-133992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:48:02.247 [DEBUG] [Thread-133993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:48:02.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:48:02.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:48:06.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:48:06.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:48:06.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:48:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 47, 47), 8.83, 57.04, 0.0, 20.29, 20.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:48:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:47:47
2026-02-11T18:48:08.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:48:09.024 [DEBUG] [Thread-133994] [transport.py] [_log()] starting thread (client mode): 0xa57c3040
2026-02-11T18:48:09.024 [DEBUG] [Thread-133994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:48:09.046 [DEBUG] [Thread-133994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:48:09.046 [INFO] [Thread-133994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] client lang: <none>
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] server lang: <none>
2026-02-11T18:48:09.049 [DEBUG] [Thread-133994] [transport.py] [_log()] kex follows: False
2026-02-11T18:48:09.050 [DEBUG] [Thread-133994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:48:09.050 [DEBUG] [Thread-133994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:48:09.050 [DEBUG] [Thread-133994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:48:09.050 [DEBUG] [Thread-133994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:48:09.050 [DEBUG] [Thread-133994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:48:09.050 [DEBUG] [Thread-133994] [transport.py] [_log()] Compression: none
2026-02-11T18:48:09.050 [DEBUG] [Thread-133994] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:48:09.067 [DEBUG] [Thread-133994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:48:09.067 [DEBUG] [Thread-133994] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:48:09.068 [DEBUG] [Thread-133994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:48:09.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:48:09.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:48:09.069 [DEBUG] [Thread-133994] [transport.py] [_log()] userauth is OK
2026-02-11T18:48:09.070 [DEBUG] [Thread-133994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:48:09.070 [DEBUG] [Thread-133994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:48:09.070 [DEBUG] [Thread-133994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:48:09.070 [DEBUG] [Thread-133994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:48:09.088 [INFO] [Thread-133994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:48:09.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:48:09.750 [DEBUG] [Thread-133994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:48:09.750 [DEBUG] [Thread-133994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:48:09.750 [DEBUG] [Thread-133994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:48:09.790 [DEBUG] [Thread-133994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:48:09.790 [DEBUG] [Thread-133994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:48:09.792 [DEBUG] [Thread-133994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:48:09.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:48:09.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:48:09.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:48:09.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:48:09.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:48:09.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:48:09.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:48:09.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.699446 -999.00  +20.50  18.68     63  +13.40 1 2 1 1 1   887    0 12.47 226.79 ----- 17.7 18.7 297.2 26.2 21.9 -18.5 21.9 -17.3 21.8 -16.9 22.1 -18.5
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.699446
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:48:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:47:47', tmtdew=8.83, humidity=57.04, cloud=0.0, wind=20.29, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:47:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:48:09.812 [DEBUG] [Thread-133994] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:48:09.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:48:09.894 [DEBUG] [Thread-133997] [transport.py] [_log()] starting thread (client mode): 0x9eb07be0
2026-02-11T18:48:09.895 [DEBUG] [Thread-133997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:48:09.910 [DEBUG] [Thread-133997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:48:09.910 [INFO] [Thread-133997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] client lang: <none>
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] server lang: <none>
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] kex follows: False
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] Compression: none
2026-02-11T18:48:09.918 [DEBUG] [Thread-133997] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:48:09.976 [DEBUG] [Thread-133997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:48:09.976 [DEBUG] [Thread-133997] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:48:09.976 [DEBUG] [Thread-133997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:48:09.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:48:09.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:48:10.032 [DEBUG] [Thread-133997] [transport.py] [_log()] userauth is OK
2026-02-11T18:48:10.032 [DEBUG] [Thread-133997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:48:10.032 [DEBUG] [Thread-133997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:48:10.033 [DEBUG] [Thread-133997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:48:10.033 [DEBUG] [Thread-133997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:48:10.051 [INFO] [Thread-133997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:48:10.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:48:10.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:48:10.880 [DEBUG] [Thread-133997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:48:10.881 [DEBUG] [Thread-133997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:48:10.929 [DEBUG] [Thread-133997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:48:10.929 [DEBUG] [Thread-133997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:48:10.938 [DEBUG] [Thread-133997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:48:10.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:48:10.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:48:10.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:48:10.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:48:10.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:48:10.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:48:10.975 [DEBUG] [Thread-133997] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:48:17.281 [DEBUG] [Thread-133999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:48:31.704 [DEBUG] [Thread-134000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:48:32.335 [DEBUG] [Thread-134001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:48:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:48:40.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:48:41.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:48:42.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 48, 23), 8.78, 57.21, 0.0, 20.36, 20.74, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:48:42.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:48:23
2026-02-11T18:48:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:48:43.415 [DEBUG] [Thread-134002] [transport.py] [_log()] starting thread (client mode): 0x9eb06a10
2026-02-11T18:48:43.416 [DEBUG] [Thread-134002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:48:43.437 [DEBUG] [Thread-134002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:48:43.437 [INFO] [Thread-134002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:48:43.440 [DEBUG] [Thread-134002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] client lang: <none>
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] server lang: <none>
2026-02-11T18:48:43.441 [DEBUG] [Thread-134002] [transport.py] [_log()] kex follows: False
2026-02-11T18:48:43.442 [DEBUG] [Thread-134002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:48:43.442 [DEBUG] [Thread-134002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:48:43.442 [DEBUG] [Thread-134002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:48:43.442 [DEBUG] [Thread-134002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:48:43.442 [DEBUG] [Thread-134002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:48:43.442 [DEBUG] [Thread-134002] [transport.py] [_log()] Compression: none
2026-02-11T18:48:43.442 [DEBUG] [Thread-134002] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:48:43.460 [DEBUG] [Thread-134002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:48:43.461 [DEBUG] [Thread-134002] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:48:43.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:48:43.463 [DEBUG] [Thread-134002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:48:43.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:48:43.465 [DEBUG] [Thread-134002] [transport.py] [_log()] userauth is OK
2026-02-11T18:48:43.465 [DEBUG] [Thread-134002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:48:43.465 [DEBUG] [Thread-134002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:48:43.465 [DEBUG] [Thread-134002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:48:43.466 [DEBUG] [Thread-134002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:48:43.489 [INFO] [Thread-134002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:48:43.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:48:44.141 [DEBUG] [Thread-134002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:48:44.141 [DEBUG] [Thread-134002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:48:44.141 [DEBUG] [Thread-134002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:48:44.181 [DEBUG] [Thread-134002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:48:44.182 [DEBUG] [Thread-134002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:48:44.185 [DEBUG] [Thread-134002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:48:44.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:48:44.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:48:44.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:48:44.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:48:44.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:48:44.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:48:44.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:48:44.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:48:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:48:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.699793 -999.00  +20.60  18.00     63  +13.40 1 2 1 1 1   887    0 12.60 226.75 ----- 16.5 18.0 290.4 22.3 21.9 -18.9 21.9 -17.3 21.8 -17.2 22.1 -18.4
2026-02-11T18:48:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:48:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:48:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.699793
2026-02-11T18:48:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:48:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:48:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:48:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:48:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:48:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:48:23', tmtdew=8.78, humidity=57.21, cloud=0.0, wind=20.36, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:47:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:48:44.211 [DEBUG] [Thread-134002] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:48:44.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:48:44.307 [DEBUG] [Thread-134005] [transport.py] [_log()] starting thread (client mode): 0xa57e0610
2026-02-11T18:48:44.307 [DEBUG] [Thread-134005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:48:44.321 [DEBUG] [Thread-134005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:48:44.321 [INFO] [Thread-134005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:48:44.328 [DEBUG] [Thread-134005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:48:44.329 [DEBUG] [Thread-134005] [transport.py] [_log()] client lang: <none>
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] server lang: <none>
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] kex follows: False
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:48:44.330 [DEBUG] [Thread-134005] [transport.py] [_log()] Compression: none
2026-02-11T18:48:44.331 [DEBUG] [Thread-134005] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:48:44.390 [DEBUG] [Thread-134005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:48:44.390 [DEBUG] [Thread-134005] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:48:44.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:48:44.392 [DEBUG] [Thread-134005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:48:44.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:48:44.449 [DEBUG] [Thread-134005] [transport.py] [_log()] userauth is OK
2026-02-11T18:48:44.450 [DEBUG] [Thread-134005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:48:44.450 [DEBUG] [Thread-134005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:48:44.450 [DEBUG] [Thread-134005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:48:44.450 [DEBUG] [Thread-134005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:48:44.470 [INFO] [Thread-134005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:48:44.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:48:44.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:48:45.281 [DEBUG] [Thread-134005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:48:45.282 [DEBUG] [Thread-134005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:48:45.329 [DEBUG] [Thread-134005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:48:45.329 [DEBUG] [Thread-134005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:48:45.339 [DEBUG] [Thread-134005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:48:45.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:48:45.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:48:45.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:48:45.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:48:45.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:48:45.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:48:45.375 [DEBUG] [Thread-134005] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:48:47.371 [DEBUG] [Thread-134007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:02.418 [DEBUG] [Thread-134008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:02.520 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:02.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:15.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:49:15.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:49:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:49:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 48, 58), 8.83, 56.73, 0.0, 24.61, 20.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:49:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:48:58
2026-02-11T18:49:17.456 [DEBUG] [Thread-134009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:49:17.721 [DEBUG] [Thread-134010] [transport.py] [_log()] starting thread (client mode): 0x9eb052a0
2026-02-11T18:49:17.722 [DEBUG] [Thread-134010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:49:17.743 [DEBUG] [Thread-134010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:49:17.744 [INFO] [Thread-134010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] client lang: <none>
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] server lang: <none>
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] kex follows: False
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] Compression: none
2026-02-11T18:49:17.747 [DEBUG] [Thread-134010] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:49:17.764 [DEBUG] [Thread-134010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:49:17.765 [DEBUG] [Thread-134010] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:49:17.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:49:17.766 [DEBUG] [Thread-134010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:49:17.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:49:17.768 [DEBUG] [Thread-134010] [transport.py] [_log()] userauth is OK
2026-02-11T18:49:17.768 [DEBUG] [Thread-134010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:49:17.768 [DEBUG] [Thread-134010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:49:17.768 [DEBUG] [Thread-134010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:49:17.768 [DEBUG] [Thread-134010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:49:17.793 [INFO] [Thread-134010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:49:17.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:49:18.391 [DEBUG] [Thread-134010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:49:18.391 [DEBUG] [Thread-134010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:49:18.391 [DEBUG] [Thread-134010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:49:18.431 [DEBUG] [Thread-134010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:49:18.432 [DEBUG] [Thread-134010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:49:18.436 [DEBUG] [Thread-134010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:49:18.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:49:18.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:49:18.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:49:18.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:49:18.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:49:18.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:49:18.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:49:18.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:49:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:49:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.700487 -999.00  +20.50  22.30     63  +13.30 1 2 1 1 1   887    0 12.28 214.30 ----- 22.0 22.3 292.8 26.0 21.9 -18.7 21.9 -17.2 21.6 -16.6 22.0 -18.2
2026-02-11T18:49:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:49:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:49:18.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.700487
2026-02-11T18:49:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:49:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:49:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:49:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:49:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:49:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:48:58', tmtdew=8.83, humidity=56.73, cloud=0.0, wind=24.61, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:48:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:49:18.467 [DEBUG] [Thread-134010] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:49:18.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:49:18.561 [DEBUG] [Thread-134013] [transport.py] [_log()] starting thread (client mode): 0x9eb07d60
2026-02-11T18:49:18.561 [DEBUG] [Thread-134013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:49:18.575 [DEBUG] [Thread-134013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:49:18.575 [INFO] [Thread-134013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] client lang: <none>
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] server lang: <none>
2026-02-11T18:49:18.583 [DEBUG] [Thread-134013] [transport.py] [_log()] kex follows: False
2026-02-11T18:49:18.584 [DEBUG] [Thread-134013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:49:18.584 [DEBUG] [Thread-134013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:49:18.584 [DEBUG] [Thread-134013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:49:18.584 [DEBUG] [Thread-134013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:49:18.584 [DEBUG] [Thread-134013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:49:18.584 [DEBUG] [Thread-134013] [transport.py] [_log()] Compression: none
2026-02-11T18:49:18.584 [DEBUG] [Thread-134013] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:49:18.642 [DEBUG] [Thread-134013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:49:18.643 [DEBUG] [Thread-134013] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:49:18.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:49:18.644 [DEBUG] [Thread-134013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:49:18.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:49:18.704 [DEBUG] [Thread-134013] [transport.py] [_log()] userauth is OK
2026-02-11T18:49:18.705 [DEBUG] [Thread-134013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:49:18.705 [DEBUG] [Thread-134013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:49:18.705 [DEBUG] [Thread-134013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:49:18.705 [DEBUG] [Thread-134013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:49:18.726 [INFO] [Thread-134013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:49:18.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:49:18.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:49:19.538 [DEBUG] [Thread-134013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:49:19.538 [DEBUG] [Thread-134013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:49:19.586 [DEBUG] [Thread-134013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:49:19.586 [DEBUG] [Thread-134013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:49:19.595 [DEBUG] [Thread-134013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:49:19.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:49:19.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:49: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
2026-02-11T18:49:19.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:49:19.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:49:19.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:49:19.629 [DEBUG] [Thread-134013] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:49:31.755 [DEBUG] [Thread-134015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:32.491 [DEBUG] [Thread-134016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:47.545 [DEBUG] [Thread-134017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:49:49.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:49:49.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:49:49.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:49:51.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 49, 33), 8.85, 56.66, 0.0, 23.54, 20.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:49:51.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:49:33
2026-02-11T18:49:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:49:51.979 [DEBUG] [Thread-134018] [transport.py] [_log()] starting thread (client mode): 0xa57c1b10
2026-02-11T18:49:51.979 [DEBUG] [Thread-134018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:49:52.000 [DEBUG] [Thread-134018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:49:52.000 [INFO] [Thread-134018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] client lang: <none>
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] server lang: <none>
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] kex follows: False
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] Compression: none
2026-02-11T18:49:52.001 [DEBUG] [Thread-134018] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:49:52.011 [DEBUG] [Thread-134018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:49:52.011 [DEBUG] [Thread-134018] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:49:52.012 [DEBUG] [Thread-134018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:49:52.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:49:52.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:49:52.015 [DEBUG] [Thread-134018] [transport.py] [_log()] userauth is OK
2026-02-11T18:49:52.015 [DEBUG] [Thread-134018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:49:52.015 [DEBUG] [Thread-134018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:49:52.015 [DEBUG] [Thread-134018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:49:52.015 [DEBUG] [Thread-134018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:49:52.034 [INFO] [Thread-134018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:49:52.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:49:52.635 [DEBUG] [Thread-134018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:49:52.635 [DEBUG] [Thread-134018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:49:52.635 [DEBUG] [Thread-134018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:49:52.676 [DEBUG] [Thread-134018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:49:52.677 [DEBUG] [Thread-134018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:49:52.679 [DEBUG] [Thread-134018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:49:52.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:49:52.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:49:52.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:49:52.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:49:52.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:49:52.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:49:52.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:49:52.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:49:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:49:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.701182 -999.00  +20.50  20.13     64  +13.40 1 2 1 1 1   887    0 11.77 192.29 ----- 21.3 20.1 285.2 27.0 21.9 -18.8 21.8 -17.2 21.6 -16.6 21.9 -18.2
2026-02-11T18:49:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:49:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:49:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.701182
2026-02-11T18:49:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:49:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:49:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:49:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:49:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:49:52.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:49:33', tmtdew=8.85, humidity=56.66, cloud=0.0, wind=23.54, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:49:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:49:52.707 [DEBUG] [Thread-134018] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:49:52.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:49:52.803 [DEBUG] [Thread-134021] [transport.py] [_log()] starting thread (client mode): 0xa5742200
2026-02-11T18:49:52.803 [DEBUG] [Thread-134021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:49:52.817 [DEBUG] [Thread-134021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:49:52.817 [INFO] [Thread-134021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:49:52.825 [DEBUG] [Thread-134021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:49:52.825 [DEBUG] [Thread-134021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] client lang: <none>
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] server lang: <none>
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] kex follows: False
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] Compression: none
2026-02-11T18:49:52.826 [DEBUG] [Thread-134021] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:49:52.885 [DEBUG] [Thread-134021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:49:52.885 [DEBUG] [Thread-134021] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:49:52.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:49:52.887 [DEBUG] [Thread-134021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:49:52.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:49:52.941 [DEBUG] [Thread-134021] [transport.py] [_log()] userauth is OK
2026-02-11T18:49:52.941 [DEBUG] [Thread-134021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:49:52.941 [DEBUG] [Thread-134021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:49:52.941 [DEBUG] [Thread-134021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:49:52.941 [DEBUG] [Thread-134021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:49:52.963 [INFO] [Thread-134021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:49:52.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:49:52.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:49:53.758 [DEBUG] [Thread-134021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:49:53.758 [DEBUG] [Thread-134021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:49:53.806 [DEBUG] [Thread-134021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:49:53.807 [DEBUG] [Thread-134021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:49:53.816 [DEBUG] [Thread-134021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:49:53.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:49:53.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:49:53.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:49:53.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:49:53.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:49:53.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:49:53.853 [DEBUG] [Thread-134021] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:50:02.582 [DEBUG] [Thread-134023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:50:02.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:50:02.667 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:50:17.635 [DEBUG] [Thread-134024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:50:23.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:50:23.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:50:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:50:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 50, 9), 8.76, 56.96, 0.0, 22.34, 20.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:50:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:50:09
2026-02-11T18:50:26.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:50:26.279 [DEBUG] [Thread-134025] [transport.py] [_log()] starting thread (client mode): 0xa2db60b0
2026-02-11T18:50:26.279 [DEBUG] [Thread-134025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:50:26.291 [DEBUG] [Thread-134025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:50:26.292 [INFO] [Thread-134025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] client lang: <none>
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] server lang: <none>
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] kex follows: False
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] Compression: none
2026-02-11T18:50:26.295 [DEBUG] [Thread-134025] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:50:26.303 [DEBUG] [Thread-134025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:50:26.304 [DEBUG] [Thread-134025] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:50:26.304 [DEBUG] [Thread-134025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:50:26.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:50:26.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:50:26.305 [DEBUG] [Thread-134025] [transport.py] [_log()] userauth is OK
2026-02-11T18:50:26.305 [DEBUG] [Thread-134025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:50:26.305 [DEBUG] [Thread-134025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:50:26.306 [DEBUG] [Thread-134025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:50:26.306 [DEBUG] [Thread-134025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:50:26.324 [INFO] [Thread-134025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:50:26.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:50:26.946 [DEBUG] [Thread-134025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:50:26.946 [DEBUG] [Thread-134025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:50:26.947 [DEBUG] [Thread-134025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:50:26.987 [DEBUG] [Thread-134025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:50:26.987 [DEBUG] [Thread-134025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:50:26.990 [DEBUG] [Thread-134025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:50:27.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:50:27.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:50:27.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:50:27.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:50:27.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:50:27.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:50:27.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:50:27.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:50:27.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:50:27.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.701529 -999.00  +20.40  21.07     63  +13.40 1 2 1 1 1   887    0 12.14 201.38 ----- 20.8 21.1 299.8 25.6 21.8 -18.9 21.8 -17.4 21.6 -16.6 21.9 -18.1
2026-02-11T18:50:27.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:50:27.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:50:27.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.701529
2026-02-11T18:50:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:50:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:50:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:50:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:50:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:50:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:50:09', tmtdew=8.76, humidity=56.96, cloud=0.0, wind=22.34, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:50:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:50:27.017 [DEBUG] [Thread-134025] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:50:27.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:50:27.113 [DEBUG] [Thread-134028] [transport.py] [_log()] starting thread (client mode): 0xa5758070
2026-02-11T18:50:27.113 [DEBUG] [Thread-134028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:50:27.128 [DEBUG] [Thread-134028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:50:27.128 [INFO] [Thread-134028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:50:27.136 [DEBUG] [Thread-134028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:50:27.136 [DEBUG] [Thread-134028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:50:27.137 [DEBUG] [Thread-134028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:50:27.137 [DEBUG] [Thread-134028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:50:27.137 [DEBUG] [Thread-134028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:50:27.137 [DEBUG] [Thread-134028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:50:27.137 [DEBUG] [Thread-134028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:50:27.137 [DEBUG] [Thread-134028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] client lang: <none>
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] server lang: <none>
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] kex follows: False
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] Compression: none
2026-02-11T18:50:27.138 [DEBUG] [Thread-134028] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:50:27.197 [DEBUG] [Thread-134028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:50:27.198 [DEBUG] [Thread-134028] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:50:27.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:50:27.199 [DEBUG] [Thread-134028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:50:27.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:50:27.254 [DEBUG] [Thread-134028] [transport.py] [_log()] userauth is OK
2026-02-11T18:50:27.254 [DEBUG] [Thread-134028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:50:27.255 [DEBUG] [Thread-134028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:50:27.255 [DEBUG] [Thread-134028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:50:27.255 [DEBUG] [Thread-134028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:50:27.277 [INFO] [Thread-134028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:50:27.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:50:27.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:50:28.096 [DEBUG] [Thread-134028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:50:28.096 [DEBUG] [Thread-134028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:50:28.144 [DEBUG] [Thread-134028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:50:28.144 [DEBUG] [Thread-134028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:50:28.153 [DEBUG] [Thread-134028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:50:28.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:50: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')
2026-02-11T18:50:28.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:50:28.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:50:28.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:50:28.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:50:28.191 [DEBUG] [Thread-134028] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:50:31.809 [DEBUG] [Thread-134030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:50:32.672 [DEBUG] [Thread-134031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:50:47.724 [DEBUG] [Thread-134032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:50:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:50:58.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:50:58.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
2026-02-11T18:51:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 50, 44), 8.66, 57.46, 0.0, 22.16, 20.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:51:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:50:44
2026-02-11T18:51:00.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:51:00.565 [DEBUG] [Thread-134033] [transport.py] [_log()] starting thread (client mode): 0xa57c35e0
2026-02-11T18:51:00.565 [DEBUG] [Thread-134033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:51:00.585 [DEBUG] [Thread-134033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:51:00.585 [INFO] [Thread-134033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] client lang: <none>
2026-02-11T18:51:00.586 [DEBUG] [Thread-134033] [transport.py] [_log()] server lang: <none>
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] kex follows: False
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] Compression: none
2026-02-11T18:51:00.587 [DEBUG] [Thread-134033] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:51:00.606 [DEBUG] [Thread-134033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:51:00.606 [DEBUG] [Thread-134033] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:51:00.607 [DEBUG] [Thread-134033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:51:00.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:51:00.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:51:00.608 [DEBUG] [Thread-134033] [transport.py] [_log()] userauth is OK
2026-02-11T18:51:00.609 [DEBUG] [Thread-134033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:51:00.609 [DEBUG] [Thread-134033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:51:00.609 [DEBUG] [Thread-134033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:51:00.609 [DEBUG] [Thread-134033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:51:00.626 [INFO] [Thread-134033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:51:00.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:51:01.224 [DEBUG] [Thread-134033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:51:01.224 [DEBUG] [Thread-134033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:51:01.224 [DEBUG] [Thread-134033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:51:01.265 [DEBUG] [Thread-134033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:51:01.265 [DEBUG] [Thread-134033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:51:01.268 [DEBUG] [Thread-134033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:51:01.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:51:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:51:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:51:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:51:01.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:51:01.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:51:01.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:51:01.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:51:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:51:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.701876 -999.00  +20.40  19.40     63  +13.40 1 2 1 1 1   887    0 11.95 191.99 ----- 23.1 19.4 295.6 24.7 21.8 -18.7 21.8 -17.3 21.6 -16.5 21.8 -17.9
2026-02-11T18:51:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:51:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:51:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.701876
2026-02-11T18:51:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:51:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:51:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:51:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:51:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:51:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:50:44', tmtdew=8.66, humidity=57.46, cloud=0.0, wind=22.16, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:50:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:51:01.290 [DEBUG] [Thread-134033] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:51:01.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:51:01.388 [DEBUG] [Thread-134036] [transport.py] [_log()] starting thread (client mode): 0xa57420e0
2026-02-11T18:51:01.388 [DEBUG] [Thread-134036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:51:01.402 [DEBUG] [Thread-134036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:51:01.402 [INFO] [Thread-134036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:51:01.409 [DEBUG] [Thread-134036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] client lang: <none>
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] server lang: <none>
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] kex follows: False
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] Compression: none
2026-02-11T18:51:01.410 [DEBUG] [Thread-134036] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:51:01.469 [DEBUG] [Thread-134036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:51:01.469 [DEBUG] [Thread-134036] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:51:01.470 [DEBUG] [Thread-134036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:51:01.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:51:01.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:51:01.528 [DEBUG] [Thread-134036] [transport.py] [_log()] userauth is OK
2026-02-11T18:51:01.528 [DEBUG] [Thread-134036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:51:01.528 [DEBUG] [Thread-134036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:51:01.529 [DEBUG] [Thread-134036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:51:01.529 [DEBUG] [Thread-134036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:51:01.547 [INFO] [Thread-134036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:51:01.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:51:01.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:51:02.378 [DEBUG] [Thread-134036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:51:02.378 [DEBUG] [Thread-134036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:51:02.426 [DEBUG] [Thread-134036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:51:02.427 [DEBUG] [Thread-134036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:51:02.436 [DEBUG] [Thread-134036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:51:02.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18: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')
2026-02-11T18:51:02.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:51:02.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:51:02.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:51:02.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:51:02.470 [DEBUG] [Thread-134036] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:51:02.762 [DEBUG] [Thread-134038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:51:02.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:51:02.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:51:17.823 [DEBUG] [Thread-134039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:51:31.862 [DEBUG] [Thread-134040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:51:32.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:51:32.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:51:32.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:51:32.858 [DEBUG] [Thread-134041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:51:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 51, 20), 8.63, 57.57, 0.0, 21.7, 20.64, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:51:34.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:51:20
2026-02-11T18:51:34.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:51:34.864 [DEBUG] [Thread-134042] [transport.py] [_log()] starting thread (client mode): 0xa57e3b50
2026-02-11T18:51:34.864 [DEBUG] [Thread-134042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:51:34.884 [DEBUG] [Thread-134042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:51:34.884 [INFO] [Thread-134042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:51:34.887 [DEBUG] [Thread-134042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:51:34.887 [DEBUG] [Thread-134042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:51:34.887 [DEBUG] [Thread-134042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:51:34.887 [DEBUG] [Thread-134042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:34.887 [DEBUG] [Thread-134042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] client lang: <none>
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] server lang: <none>
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] kex follows: False
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] Compression: none
2026-02-11T18:51:34.888 [DEBUG] [Thread-134042] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:51:34.905 [DEBUG] [Thread-134042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:51:34.906 [DEBUG] [Thread-134042] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:51:34.906 [DEBUG] [Thread-134042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:51:34.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:51:34.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:51:34.908 [DEBUG] [Thread-134042] [transport.py] [_log()] userauth is OK
2026-02-11T18:51:34.909 [DEBUG] [Thread-134042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:51:34.909 [DEBUG] [Thread-134042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:51:34.909 [DEBUG] [Thread-134042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:51:34.909 [DEBUG] [Thread-134042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:51:34.933 [INFO] [Thread-134042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:51:34.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:51:35.564 [DEBUG] [Thread-134042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:51:35.565 [DEBUG] [Thread-134042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:51:35.565 [DEBUG] [Thread-134042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:51:35.605 [DEBUG] [Thread-134042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:51:35.606 [DEBUG] [Thread-134042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:51:35.609 [DEBUG] [Thread-134042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:51:35.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:51:35.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:51:35.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:51:35.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:51:35.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:51:35.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:51:35.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:51:35.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:51:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:51:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.702224 -999.00  +20.40  18.77     63  +13.30 1 2 1 1 1   887    0 12.28 201.38 ----- 21.4 18.8 293.6 27.3 21.8 -18.9 21.7 -17.4 21.5 -16.4 21.7 -18.1
2026-02-11T18:51:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:51:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:51:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.702224
2026-02-11T18:51:35.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:51:35.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:51:35.633 [DEBUG] [Thread-134042] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:51:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:51:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:51:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:51:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:51:20', tmtdew=8.63, humidity=57.57, cloud=0.0, wind=21.7, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:51:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:51:35.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:51:35.742 [DEBUG] [Thread-134045] [transport.py] [_log()] starting thread (client mode): 0xa57704c0
2026-02-11T18:51:35.742 [DEBUG] [Thread-134045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:51:35.762 [DEBUG] [Thread-134045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:51:35.763 [INFO] [Thread-134045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:51:35.771 [DEBUG] [Thread-134045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] client lang: <none>
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] server lang: <none>
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] kex follows: False
2026-02-11T18:51:35.772 [DEBUG] [Thread-134045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:51:35.773 [DEBUG] [Thread-134045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:51:35.773 [DEBUG] [Thread-134045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:51:35.773 [DEBUG] [Thread-134045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:51:35.773 [DEBUG] [Thread-134045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:51:35.773 [DEBUG] [Thread-134045] [transport.py] [_log()] Compression: none
2026-02-11T18:51:35.773 [DEBUG] [Thread-134045] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:51:35.831 [DEBUG] [Thread-134045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:51:35.832 [DEBUG] [Thread-134045] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:51:35.832 [DEBUG] [Thread-134045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:51:35.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:51:35.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:51:35.894 [DEBUG] [Thread-134045] [transport.py] [_log()] userauth is OK
2026-02-11T18:51:35.894 [DEBUG] [Thread-134045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:51:35.894 [DEBUG] [Thread-134045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:51:35.894 [DEBUG] [Thread-134045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:51:35.895 [DEBUG] [Thread-134045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:51:35.916 [INFO] [Thread-134045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:51:35.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:51:35.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:51:36.751 [DEBUG] [Thread-134045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:51:36.751 [DEBUG] [Thread-134045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:51:36.802 [DEBUG] [Thread-134045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:51:36.803 [DEBUG] [Thread-134045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:51:36.813 [DEBUG] [Thread-134045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:51:36.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:51:36.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')
2026-02-11T18:51:36.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:51:36.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:51:36.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:51:36.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:51:36.854 [DEBUG] [Thread-134045] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:51:47.898 [DEBUG] [Thread-134047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:52:02.938 [DEBUG] [Thread-134048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:52:02.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:52:02.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:52:06.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:52:06.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:52: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
2026-02-11T18:52:09.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 51, 55), 8.75, 57.53, 0.0, 22.48, 20.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:52:09.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:51:55
2026-02-11T18:52:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:52:09.712 [DEBUG] [Thread-134049] [transport.py] [_log()] starting thread (client mode): 0x9eb040d0
2026-02-11T18:52:09.712 [DEBUG] [Thread-134049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:52:09.732 [DEBUG] [Thread-134049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:52:09.733 [INFO] [Thread-134049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:52:09.735 [DEBUG] [Thread-134049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:52:09.735 [DEBUG] [Thread-134049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:52:09.735 [DEBUG] [Thread-134049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:52:09.735 [DEBUG] [Thread-134049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:09.735 [DEBUG] [Thread-134049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] client lang: <none>
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] server lang: <none>
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] kex follows: False
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] Compression: none
2026-02-11T18:52:09.736 [DEBUG] [Thread-134049] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:52:09.754 [DEBUG] [Thread-134049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:52:09.755 [DEBUG] [Thread-134049] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:52:09.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:52:09.756 [DEBUG] [Thread-134049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:52:09.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:52:09.758 [DEBUG] [Thread-134049] [transport.py] [_log()] userauth is OK
2026-02-11T18:52:09.759 [DEBUG] [Thread-134049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:52:09.759 [DEBUG] [Thread-134049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:52:09.759 [DEBUG] [Thread-134049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:52:09.759 [DEBUG] [Thread-134049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:52:09.783 [INFO] [Thread-134049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:52:09.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:52:10.404 [DEBUG] [Thread-134049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:52:10.405 [DEBUG] [Thread-134049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:52:10.405 [DEBUG] [Thread-134049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:52:10.445 [DEBUG] [Thread-134049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:52:10.446 [DEBUG] [Thread-134049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:52:10.449 [DEBUG] [Thread-134049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:52:10.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:52:10.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:52:10.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:52:10.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:52:10.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:52:10.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:52:10.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:52:10.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:52:10.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:52:10.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.702571 -999.00  +20.40  26.95     63  +13.20 1 2 1 1 1   887    0 12.00 190.04 ----- 23.8 26.9 287.8 28.7 21.8 -18.8 21.8 -17.2 21.4 -16.3 21.7 -17.9
2026-02-11T18:52:10.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:52:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:52:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.702571
2026-02-11T18:52:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:52:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:52:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:52:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:52:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:52:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:51:55', tmtdew=8.75, humidity=57.53, cloud=0.0, wind=22.48, temperature=20.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:51:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:52:10.489 [DEBUG] [Thread-134049] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:52:10.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:52:10.563 [DEBUG] [Thread-134052] [transport.py] [_log()] starting thread (client mode): 0xa5773640
2026-02-11T18:52:10.563 [DEBUG] [Thread-134052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:52:10.578 [DEBUG] [Thread-134052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:52:10.578 [INFO] [Thread-134052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:52:10.585 [DEBUG] [Thread-134052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] client lang: <none>
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] server lang: <none>
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] kex follows: False
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:52:10.586 [DEBUG] [Thread-134052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:52:10.587 [DEBUG] [Thread-134052] [transport.py] [_log()] Compression: none
2026-02-11T18:52:10.587 [DEBUG] [Thread-134052] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:52:10.646 [DEBUG] [Thread-134052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:52:10.646 [DEBUG] [Thread-134052] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:52:10.647 [DEBUG] [Thread-134052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:52:10.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:52:10.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:52:10.703 [DEBUG] [Thread-134052] [transport.py] [_log()] userauth is OK
2026-02-11T18:52:10.703 [DEBUG] [Thread-134052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:52:10.703 [DEBUG] [Thread-134052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:52:10.703 [DEBUG] [Thread-134052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:52:10.703 [DEBUG] [Thread-134052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:52:10.722 [INFO] [Thread-134052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:52:10.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:52:10.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:52:11.546 [DEBUG] [Thread-134052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:52:11.547 [DEBUG] [Thread-134052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:52:11.595 [DEBUG] [Thread-134052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:52:11.595 [DEBUG] [Thread-134052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:52:11.607 [DEBUG] [Thread-134052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:52:11.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:52:11.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:52:11.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:52:11.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:52:11.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:52:11.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:52:11.652 [DEBUG] [Thread-134052] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:52:17.972 [DEBUG] [Thread-134054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:52:31.922 [DEBUG] [Thread-134055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:52:33.024 [DEBUG] [Thread-134056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:52:41.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:52:41.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:52:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:52:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 52, 32), 8.82, 57.26, 0.0, 22.66, 20.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:52:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:52:32
2026-02-11T18:52:44.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:52:44.558 [DEBUG] [Thread-134057] [transport.py] [_log()] starting thread (client mode): 0xa5759840
2026-02-11T18:52:44.558 [DEBUG] [Thread-134057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:52:44.579 [DEBUG] [Thread-134057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:52:44.579 [INFO] [Thread-134057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:52:44.582 [DEBUG] [Thread-134057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:52:44.582 [DEBUG] [Thread-134057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:52:44.582 [DEBUG] [Thread-134057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] client lang: <none>
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] server lang: <none>
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] kex follows: False
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:52:44.583 [DEBUG] [Thread-134057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:52:44.584 [DEBUG] [Thread-134057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:52:44.584 [DEBUG] [Thread-134057] [transport.py] [_log()] Compression: none
2026-02-11T18:52:44.584 [DEBUG] [Thread-134057] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:52:44.603 [DEBUG] [Thread-134057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:52:44.604 [DEBUG] [Thread-134057] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:52:44.604 [DEBUG] [Thread-134057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:52:44.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:52:44.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:52:44.606 [DEBUG] [Thread-134057] [transport.py] [_log()] userauth is OK
2026-02-11T18:52:44.607 [DEBUG] [Thread-134057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:52:44.607 [DEBUG] [Thread-134057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:52:44.607 [DEBUG] [Thread-134057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:52:44.607 [DEBUG] [Thread-134057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:52:44.631 [INFO] [Thread-134057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:52:44.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:52:45.255 [DEBUG] [Thread-134057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:52:45.255 [DEBUG] [Thread-134057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:52:45.256 [DEBUG] [Thread-134057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:52:45.296 [DEBUG] [Thread-134057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:52:45.296 [DEBUG] [Thread-134057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:52:45.299 [DEBUG] [Thread-134057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:52:45.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:52:45.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:52:45.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:52:45.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:52:45.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:52:45.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:52:45.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:52:45.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:52:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:52:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.702918 -999.00  +20.40  20.38     63  +13.20 1 2 1 1 1   887    0 11.38 170.40 ----- 20.7 20.4 296.8 24.9 21.8 -18.5 21.7 -17.0 21.5 -16.4 21.7 -17.8
2026-02-11T18:52:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:52:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:52:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.702918
2026-02-11T18:52:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:52:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:52:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:52:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:52:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:52:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:52:32', tmtdew=8.82, humidity=57.26, cloud=0.0, wind=22.66, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:52:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:52:45.325 [DEBUG] [Thread-134057] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:52:45.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:52:45.421 [DEBUG] [Thread-134060] [transport.py] [_log()] starting thread (client mode): 0xa2db6b90
2026-02-11T18:52:45.421 [DEBUG] [Thread-134060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:52:45.435 [DEBUG] [Thread-134060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:52:45.435 [INFO] [Thread-134060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] client lang: <none>
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] server lang: <none>
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] kex follows: False
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] Compression: none
2026-02-11T18:52:45.443 [DEBUG] [Thread-134060] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:52:45.506 [DEBUG] [Thread-134060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:52:45.506 [DEBUG] [Thread-134060] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:52:45.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:52:45.507 [DEBUG] [Thread-134060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:52:45.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:52:45.562 [DEBUG] [Thread-134060] [transport.py] [_log()] userauth is OK
2026-02-11T18:52:45.563 [DEBUG] [Thread-134060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:52:45.563 [DEBUG] [Thread-134060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:52:45.563 [DEBUG] [Thread-134060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:52:45.563 [DEBUG] [Thread-134060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:52:45.581 [INFO] [Thread-134060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:52:45.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:52:45.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:52:46.398 [DEBUG] [Thread-134060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:52:46.398 [DEBUG] [Thread-134060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:52:46.446 [DEBUG] [Thread-134060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:52:46.446 [DEBUG] [Thread-134060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:52:46.456 [DEBUG] [Thread-134060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:52:46.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:52:46.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:52: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
2026-02-11T18:52:46.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:52:46.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:52:46.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:52:46.493 [DEBUG] [Thread-134060] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:52:48.064 [DEBUG] [Thread-134062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:03.091 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:03.092 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:03.113 [DEBUG] [Thread-134063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:16.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:53:16.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:53:16.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:53:18.144 [DEBUG] [Thread-134064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 53, 8), 8.78, 57.41, 0.0, 23.1, 20.69, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:53:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:53:08
2026-02-11T18:53:18.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:53:18.903 [DEBUG] [Thread-134065] [transport.py] [_log()] starting thread (client mode): 0xa2db5d80
2026-02-11T18:53:18.903 [DEBUG] [Thread-134065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:53:18.918 [DEBUG] [Thread-134065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:53:18.918 [INFO] [Thread-134065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] client lang: <none>
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] server lang: <none>
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] kex follows: False
2026-02-11T18:53:18.921 [DEBUG] [Thread-134065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:53:18.922 [DEBUG] [Thread-134065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:53:18.922 [DEBUG] [Thread-134065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:53:18.922 [DEBUG] [Thread-134065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:53:18.922 [DEBUG] [Thread-134065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:53:18.922 [DEBUG] [Thread-134065] [transport.py] [_log()] Compression: none
2026-02-11T18:53:18.922 [DEBUG] [Thread-134065] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:53:18.939 [DEBUG] [Thread-134065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:53:18.940 [DEBUG] [Thread-134065] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:53:18.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:53:18.941 [DEBUG] [Thread-134065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:53:18.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:53:18.943 [DEBUG] [Thread-134065] [transport.py] [_log()] userauth is OK
2026-02-11T18:53:18.944 [DEBUG] [Thread-134065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:53:18.944 [DEBUG] [Thread-134065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:53:18.944 [DEBUG] [Thread-134065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:53:18.944 [DEBUG] [Thread-134065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:53:18.969 [INFO] [Thread-134065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:53:18.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:53:19.548 [DEBUG] [Thread-134065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:53:19.549 [DEBUG] [Thread-134065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:53:19.549 [DEBUG] [Thread-134065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:53:19.589 [DEBUG] [Thread-134065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:53:19.589 [DEBUG] [Thread-134065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:53:19.591 [DEBUG] [Thread-134065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:53:19.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:53:19.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:53:19.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:53:19.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:53:19.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:53:19.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:53:19.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:53:19.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:53:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:53:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.703265 -999.00  +20.40  26.06     63  +13.20 1 2 1 1 1   887    0 11.11 159.35 ----- 22.3 26.1 291.8 28.9 21.7 -18.6 21.7 -17.1 21.4 -16.5 21.7 -17.9
2026-02-11T18:53:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:53:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:53:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.703265
2026-02-11T18:53:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:53:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:53:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:53:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:53:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:53:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:53:08', tmtdew=8.78, humidity=57.41, cloud=0.0, wind=23.1, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:52:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:53:19.613 [DEBUG] [Thread-134065] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:53:19.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:53:19.710 [DEBUG] [Thread-134068] [transport.py] [_log()] starting thread (client mode): 0xa2dc0eb0
2026-02-11T18:53:19.710 [DEBUG] [Thread-134068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:53:19.724 [DEBUG] [Thread-134068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:53:19.724 [INFO] [Thread-134068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:53:19.732 [DEBUG] [Thread-134068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:53:19.732 [DEBUG] [Thread-134068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:53:19.732 [DEBUG] [Thread-134068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:53:19.732 [DEBUG] [Thread-134068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] client lang: <none>
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] server lang: <none>
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] kex follows: False
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] Compression: none
2026-02-11T18:53:19.733 [DEBUG] [Thread-134068] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:53:19.792 [DEBUG] [Thread-134068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:53:19.792 [DEBUG] [Thread-134068] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:53:19.793 [DEBUG] [Thread-134068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:53:19.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:53:19.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:53:19.852 [DEBUG] [Thread-134068] [transport.py] [_log()] userauth is OK
2026-02-11T18:53:19.852 [DEBUG] [Thread-134068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:53:19.852 [DEBUG] [Thread-134068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:53:19.852 [DEBUG] [Thread-134068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:53:19.852 [DEBUG] [Thread-134068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:53:19.871 [INFO] [Thread-134068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:53:19.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:53:19.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:53:20.726 [DEBUG] [Thread-134068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:53:20.726 [DEBUG] [Thread-134068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:53:20.774 [DEBUG] [Thread-134068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:53:20.774 [DEBUG] [Thread-134068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:53:20.786 [DEBUG] [Thread-134068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:53:20.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:53:20.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:53:20.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:53:20.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:53:20.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:53:20.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:53:20.822 [DEBUG] [Thread-134068] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:53:31.967 [DEBUG] [Thread-134070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:33.181 [DEBUG] [Thread-134071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:48.227 [DEBUG] [Thread-134072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:53:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:53:50.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:53:50.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:53:52.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 53, 43), 8.86, 56.96, 0.0, 25.32, 20.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:53:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:53:43
2026-02-11T18:53:52.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:53:53.133 [DEBUG] [Thread-134073] [transport.py] [_log()] starting thread (client mode): 0xa575b4f0
2026-02-11T18:53:53.133 [DEBUG] [Thread-134073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:53:53.149 [DEBUG] [Thread-134073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:53:53.150 [INFO] [Thread-134073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] client lang: <none>
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] server lang: <none>
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] kex follows: False
2026-02-11T18:53:53.153 [DEBUG] [Thread-134073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:53:53.154 [DEBUG] [Thread-134073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:53:53.154 [DEBUG] [Thread-134073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:53:53.154 [DEBUG] [Thread-134073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:53:53.154 [DEBUG] [Thread-134073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:53:53.154 [DEBUG] [Thread-134073] [transport.py] [_log()] Compression: none
2026-02-11T18:53:53.154 [DEBUG] [Thread-134073] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:53:53.173 [DEBUG] [Thread-134073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:53:53.173 [DEBUG] [Thread-134073] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:53:53.174 [DEBUG] [Thread-134073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:53:53.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:53:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:53:53.176 [DEBUG] [Thread-134073] [transport.py] [_log()] userauth is OK
2026-02-11T18:53:53.176 [DEBUG] [Thread-134073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:53:53.176 [DEBUG] [Thread-134073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:53:53.176 [DEBUG] [Thread-134073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:53:53.176 [DEBUG] [Thread-134073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:53:53.200 [INFO] [Thread-134073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:53:53.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:53:53.839 [DEBUG] [Thread-134073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:53:53.839 [DEBUG] [Thread-134073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:53:53.839 [DEBUG] [Thread-134073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:53:53.880 [DEBUG] [Thread-134073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:53:53.880 [DEBUG] [Thread-134073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:53:53.883 [DEBUG] [Thread-134073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:53:53.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:53:53.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:53:53.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:53:53.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:53:53.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:53:53.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:53:53.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:53:53.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:53:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:53:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.703960 -999.00  +20.50  20.06     62  +13.00 1 2 1 1 1   887    0 11.44 165.68 ----- 22.8 20.1 278.2 28.0 21.7 -18.7 21.6 -16.6 21.4 -16.6 21.7 -17.6
2026-02-11T18:53:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:53:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:53:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.703960
2026-02-11T18:53:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:53:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:53:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:53:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:53:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:53:53.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:53:43', tmtdew=8.86, humidity=56.96, cloud=0.0, wind=25.32, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:53:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:53:53.908 [DEBUG] [Thread-134073] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:53:53.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:53:54.003 [DEBUG] [Thread-134076] [transport.py] [_log()] starting thread (client mode): 0xa2db6b90
2026-02-11T18:53:54.004 [DEBUG] [Thread-134076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:53:54.018 [DEBUG] [Thread-134076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:53:54.018 [INFO] [Thread-134076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:53:54.026 [DEBUG] [Thread-134076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:53:54.026 [DEBUG] [Thread-134076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:53:54.026 [DEBUG] [Thread-134076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:53:54.026 [DEBUG] [Thread-134076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:54.026 [DEBUG] [Thread-134076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:53:54.026 [DEBUG] [Thread-134076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:54.026 [DEBUG] [Thread-134076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] client lang: <none>
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] server lang: <none>
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] kex follows: False
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] Compression: none
2026-02-11T18:53:54.027 [DEBUG] [Thread-134076] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:53:54.085 [DEBUG] [Thread-134076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:53:54.086 [DEBUG] [Thread-134076] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:53:54.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:53:54.087 [DEBUG] [Thread-134076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:53:54.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:53:54.141 [DEBUG] [Thread-134076] [transport.py] [_log()] userauth is OK
2026-02-11T18:53:54.141 [DEBUG] [Thread-134076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:53:54.141 [DEBUG] [Thread-134076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:53:54.142 [DEBUG] [Thread-134076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:53:54.142 [DEBUG] [Thread-134076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:53:54.167 [INFO] [Thread-134076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:53:54.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:53:54.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:53:54.977 [DEBUG] [Thread-134076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:53:54.977 [DEBUG] [Thread-134076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:53:55.025 [DEBUG] [Thread-134076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:53:55.025 [DEBUG] [Thread-134076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:53:55.034 [DEBUG] [Thread-134076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:53:55.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:53:55.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:53:55.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:53:55.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:53:55.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:53:55.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:53:55.068 [DEBUG] [Thread-134076] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:54:03.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:54:03.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:54:03.266 [DEBUG] [Thread-134078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:54:18.318 [DEBUG] [Thread-134079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:54:25.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:54:25.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:54:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:54:26.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 54, 18), 8.78, 57.24, 0.0, 26.36, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:54:26.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:54:18
2026-02-11T18:54:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:54:27.559 [DEBUG] [Thread-134080] [transport.py] [_log()] starting thread (client mode): 0xa5770430
2026-02-11T18:54:27.559 [DEBUG] [Thread-134080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:54:27.580 [DEBUG] [Thread-134080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:54:27.580 [INFO] [Thread-134080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:54:27.583 [DEBUG] [Thread-134080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:54:27.583 [DEBUG] [Thread-134080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:54:27.583 [DEBUG] [Thread-134080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:54:27.583 [DEBUG] [Thread-134080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] client lang: <none>
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] server lang: <none>
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] kex follows: False
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:54:27.584 [DEBUG] [Thread-134080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:54:27.585 [DEBUG] [Thread-134080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:54:27.585 [DEBUG] [Thread-134080] [transport.py] [_log()] Compression: none
2026-02-11T18:54:27.585 [DEBUG] [Thread-134080] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:54:27.605 [DEBUG] [Thread-134080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:54:27.606 [DEBUG] [Thread-134080] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:54:27.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:54:27.607 [DEBUG] [Thread-134080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:54:27.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:54:27.649 [DEBUG] [Thread-134080] [transport.py] [_log()] userauth is OK
2026-02-11T18:54:27.649 [DEBUG] [Thread-134080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:54:27.649 [DEBUG] [Thread-134080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:54:27.650 [DEBUG] [Thread-134080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:54:27.650 [DEBUG] [Thread-134080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:54:27.674 [INFO] [Thread-134080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:54:27.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:54:28.297 [DEBUG] [Thread-134080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:54:28.298 [DEBUG] [Thread-134080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:54:28.298 [DEBUG] [Thread-134080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:54:28.338 [DEBUG] [Thread-134080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:54:28.339 [DEBUG] [Thread-134080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:54:28.342 [DEBUG] [Thread-134080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:54:28.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:54:28.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:54:28.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:54:28.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:54:28.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:54:28.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:54:28.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:54:28.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:54:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:54:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.704307 -999.00  +20.40  25.58     63  +13.20 1 2 1 1 1   887    0 11.14 158.53 ----- 24.8 25.6 274.4 31.2 21.7 -18.5 21.7 -16.6 21.3 -16.5 21.6 -17.7
2026-02-11T18:54:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:54:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:54:28.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.704307
2026-02-11T18:54:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:54:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:54:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:54:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:54:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:54:28.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:54:18', tmtdew=8.78, humidity=57.24, cloud=0.0, wind=26.36, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:54:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:54:28.372 [DEBUG] [Thread-134080] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:54:28.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:54:28.466 [DEBUG] [Thread-134083] [transport.py] [_log()] starting thread (client mode): 0xa57b09d0
2026-02-11T18:54:28.466 [DEBUG] [Thread-134083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:54:28.481 [DEBUG] [Thread-134083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:54:28.481 [INFO] [Thread-134083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:54:28.488 [DEBUG] [Thread-134083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] client lang: <none>
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] server lang: <none>
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] kex follows: False
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] Compression: none
2026-02-11T18:54:28.489 [DEBUG] [Thread-134083] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:54:28.545 [DEBUG] [Thread-134083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:54:28.546 [DEBUG] [Thread-134083] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:54:28.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:54:28.547 [DEBUG] [Thread-134083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:54:28.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:54:28.603 [DEBUG] [Thread-134083] [transport.py] [_log()] userauth is OK
2026-02-11T18:54:28.603 [DEBUG] [Thread-134083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:54:28.603 [DEBUG] [Thread-134083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:54:28.603 [DEBUG] [Thread-134083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:54:28.603 [DEBUG] [Thread-134083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:54:28.622 [INFO] [Thread-134083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:54:28.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:54:28.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:54:29.481 [DEBUG] [Thread-134083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:54:29.481 [DEBUG] [Thread-134083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:54:29.529 [DEBUG] [Thread-134083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:54:29.530 [DEBUG] [Thread-134083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:54:29.539 [DEBUG] [Thread-134083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:54:29.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:54:29.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:54:29.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:54:29.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:54:29.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:54:29.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:54:29.572 [DEBUG] [Thread-134083] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:54:32.017 [DEBUG] [Thread-134085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:54:33.352 [DEBUG] [Thread-134086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:54:48.400 [DEBUG] [Thread-134087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:54:59.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:54:59.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:54:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:55:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 54, 18), 8.78, 57.24, 0.0, 26.36, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:55:01.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:54:18
2026-02-11T18:55:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:55:01.945 [DEBUG] [Thread-134088] [transport.py] [_log()] starting thread (client mode): 0xa57c2350
2026-02-11T18:55:01.945 [DEBUG] [Thread-134088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:55:01.966 [DEBUG] [Thread-134088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:55:01.966 [INFO] [Thread-134088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] client lang: <none>
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] server lang: <none>
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] kex follows: False
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] Compression: none
2026-02-11T18:55:01.969 [DEBUG] [Thread-134088] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:55:01.985 [DEBUG] [Thread-134088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:55:01.985 [DEBUG] [Thread-134088] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:55:01.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:55:01.985 [DEBUG] [Thread-134088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:55:01.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:55:01.986 [DEBUG] [Thread-134088] [transport.py] [_log()] userauth is OK
2026-02-11T18:55:01.986 [DEBUG] [Thread-134088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:55:01.986 [DEBUG] [Thread-134088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:55:01.986 [DEBUG] [Thread-134088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:55:01.986 [DEBUG] [Thread-134088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:55:02.005 [INFO] [Thread-134088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:55:02.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:55:02.613 [DEBUG] [Thread-134088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:55:02.613 [DEBUG] [Thread-134088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:55:02.614 [DEBUG] [Thread-134088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:55:02.654 [DEBUG] [Thread-134088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:55:02.654 [DEBUG] [Thread-134088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:55:02.658 [DEBUG] [Thread-134088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:55:02.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:55:02.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:55:02.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:55:02.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:55:02.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:55:02.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:55:02.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:55:02.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:55:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:55:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.704654 -999.00  +20.40  15.63     63  +13.30 1 2 1 1 1   887    0 11.18 156.95 ----- 15.8 15.6 296.8 25.9 21.6 -18.3 21.6 -16.3 21.3 -15.6 21.6 -17.3
2026-02-11T18:55:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:55:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:55:02.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.704654
2026-02-11T18:55:02.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:55:02.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:55:02.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:55:02.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:55:02.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:55:02.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:54:18', tmtdew=8.78, humidity=57.24, cloud=0.0, wind=26.36, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:54:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:55:02.680 [DEBUG] [Thread-134088] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:55:02.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:55:02.776 [DEBUG] [Thread-134091] [transport.py] [_log()] starting thread (client mode): 0xa57e1c60
2026-02-11T18:55:02.776 [DEBUG] [Thread-134091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:55:02.790 [DEBUG] [Thread-134091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:55:02.790 [INFO] [Thread-134091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:55:02.798 [DEBUG] [Thread-134091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:55:02.798 [DEBUG] [Thread-134091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] client lang: <none>
2026-02-11T18:55:02.799 [DEBUG] [Thread-134091] [transport.py] [_log()] server lang: <none>
2026-02-11T18:55:02.800 [DEBUG] [Thread-134091] [transport.py] [_log()] kex follows: False
2026-02-11T18:55:02.800 [DEBUG] [Thread-134091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:55:02.800 [DEBUG] [Thread-134091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:55:02.800 [DEBUG] [Thread-134091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:55:02.800 [DEBUG] [Thread-134091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:55:02.800 [DEBUG] [Thread-134091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:55:02.800 [DEBUG] [Thread-134091] [transport.py] [_log()] Compression: none
2026-02-11T18:55:02.801 [DEBUG] [Thread-134091] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:55:02.858 [DEBUG] [Thread-134091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:55:02.859 [DEBUG] [Thread-134091] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:55:02.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:55:02.861 [DEBUG] [Thread-134091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:55:02.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:55:02.916 [DEBUG] [Thread-134091] [transport.py] [_log()] userauth is OK
2026-02-11T18:55:02.916 [DEBUG] [Thread-134091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:55:02.916 [DEBUG] [Thread-134091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:55:02.916 [DEBUG] [Thread-134091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:55:02.916 [DEBUG] [Thread-134091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:55:02.932 [INFO] [Thread-134091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:55:02.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:55:02.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:55:03.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:55:03.383 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:55:03.436 [DEBUG] [Thread-134093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:55:03.752 [DEBUG] [Thread-134091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:55:03.753 [DEBUG] [Thread-134091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:55:03.800 [DEBUG] [Thread-134091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:55:03.800 [DEBUG] [Thread-134091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:55:03.811 [DEBUG] [Thread-134091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:55:03.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:55:03.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:55:03.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:55:03.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:55:03.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:55:03.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:55:03.857 [DEBUG] [Thread-134091] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:55:18.483 [DEBUG] [Thread-134094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:55:32.066 [DEBUG] [Thread-134095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:55:33.520 [DEBUG] [Thread-134096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:55:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:55:33.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:55:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:55:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 54, 54), 8.64, 57.37, 0.0, 25.13, 20.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:55:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:54:54
2026-02-11T18:55:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:55:36.272 [DEBUG] [Thread-134097] [transport.py] [_log()] starting thread (client mode): 0xa57d7df0
2026-02-11T18:55:36.272 [DEBUG] [Thread-134097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:55:36.292 [DEBUG] [Thread-134097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:55:36.292 [INFO] [Thread-134097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:55:36.295 [DEBUG] [Thread-134097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:55:36.295 [DEBUG] [Thread-134097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:55:36.295 [DEBUG] [Thread-134097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:55:36.295 [DEBUG] [Thread-134097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:36.295 [DEBUG] [Thread-134097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] client lang: <none>
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] server lang: <none>
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] kex follows: False
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] Compression: none
2026-02-11T18:55:36.296 [DEBUG] [Thread-134097] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:55:36.312 [DEBUG] [Thread-134097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:55:36.313 [DEBUG] [Thread-134097] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:55:36.313 [DEBUG] [Thread-134097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:55:36.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:55:36.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:55:36.316 [DEBUG] [Thread-134097] [transport.py] [_log()] userauth is OK
2026-02-11T18:55:36.316 [DEBUG] [Thread-134097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:55:36.316 [DEBUG] [Thread-134097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:55:36.316 [DEBUG] [Thread-134097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:55:36.316 [DEBUG] [Thread-134097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:55:36.352 [INFO] [Thread-134097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:55:36.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:55:36.942 [DEBUG] [Thread-134097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:55:36.943 [DEBUG] [Thread-134097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:55:36.943 [DEBUG] [Thread-134097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:55:36.983 [DEBUG] [Thread-134097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:55:36.984 [DEBUG] [Thread-134097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:55:36.987 [DEBUG] [Thread-134097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:55:36.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:55:36.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:55:37.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:55:37.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:55:37.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:55:37.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:55:37.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:55:37.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:55:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:55:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.705001 -999.00  +20.40  23.69     63  +13.30 1 2 1 1 1   887    0 10.81 143.01 ----- 25.1 23.7 294.4 25.3 21.6 -17.9 21.6 -16.0 21.3 -15.7 21.6 -17.3
2026-02-11T18:55:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:55:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:55:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.705001
2026-02-11T18:55:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:55:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:55:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:55:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:55:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:55:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:54:54', tmtdew=8.64, humidity=57.37, cloud=0.0, wind=25.13, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:55:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:55:37.014 [DEBUG] [Thread-134097] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:55:37.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:55:37.110 [DEBUG] [Thread-134100] [transport.py] [_log()] starting thread (client mode): 0xa2db63e0
2026-02-11T18:55:37.110 [DEBUG] [Thread-134100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:55:37.124 [DEBUG] [Thread-134100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:55:37.124 [INFO] [Thread-134100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:55:37.131 [DEBUG] [Thread-134100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] client lang: <none>
2026-02-11T18:55:37.132 [DEBUG] [Thread-134100] [transport.py] [_log()] server lang: <none>
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] kex follows: False
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] Compression: none
2026-02-11T18:55:37.133 [DEBUG] [Thread-134100] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:55:37.192 [DEBUG] [Thread-134100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:55:37.192 [DEBUG] [Thread-134100] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:55:37.193 [DEBUG] [Thread-134100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:55:37.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:55:37.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:55:37.251 [DEBUG] [Thread-134100] [transport.py] [_log()] userauth is OK
2026-02-11T18:55:37.251 [DEBUG] [Thread-134100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:55:37.251 [DEBUG] [Thread-134100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:55:37.251 [DEBUG] [Thread-134100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:55:37.252 [DEBUG] [Thread-134100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:55:37.271 [INFO] [Thread-134100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:55:37.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:55:37.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:55:38.110 [DEBUG] [Thread-134100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:55:38.111 [DEBUG] [Thread-134100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:55:38.158 [DEBUG] [Thread-134100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:55:38.158 [DEBUG] [Thread-134100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:55:38.167 [DEBUG] [Thread-134100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:55:38.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:55:38.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:55:38.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:55:38.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:55:38.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:55:38.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:55:38.202 [DEBUG] [Thread-134100] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:55:48.558 [DEBUG] [Thread-134102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:56:03.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:56:03.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:56:03.610 [DEBUG] [Thread-134103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:56:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:56:08.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:56:08.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:56:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 55, 29), 8.66, 57.31, 0.0, 23.08, 20.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:56:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:55:29
2026-02-11T18:56:10.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:56:11.043 [DEBUG] [Thread-134104] [transport.py] [_log()] starting thread (client mode): 0xa57b2170
2026-02-11T18:56:11.043 [DEBUG] [Thread-134104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:56:11.064 [DEBUG] [Thread-134104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:56:11.064 [INFO] [Thread-134104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] client lang: <none>
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] server lang: <none>
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] kex follows: False
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] Compression: none
2026-02-11T18:56:11.067 [DEBUG] [Thread-134104] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:56:11.083 [DEBUG] [Thread-134104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:56:11.083 [DEBUG] [Thread-134104] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:56:11.083 [DEBUG] [Thread-134104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:56:11.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:56:11.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:56:11.084 [DEBUG] [Thread-134104] [transport.py] [_log()] userauth is OK
2026-02-11T18:56:11.084 [DEBUG] [Thread-134104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:56:11.084 [DEBUG] [Thread-134104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:56:11.084 [DEBUG] [Thread-134104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:56:11.084 [DEBUG] [Thread-134104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:56:11.101 [INFO] [Thread-134104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:56:11.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:56:11.737 [DEBUG] [Thread-134104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:56:11.737 [DEBUG] [Thread-134104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:56:11.737 [DEBUG] [Thread-134104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:56:11.778 [DEBUG] [Thread-134104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:56:11.779 [DEBUG] [Thread-134104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:56:11.782 [DEBUG] [Thread-134104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:56:11.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:56:11.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:56:11.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:56:11.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:56:11.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:56:11.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:56:11.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:56:11.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:56:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:56:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.705349 -999.00  +20.40  25.09     64  +13.40 1 2 1 1 1   887    0 10.70 133.63 ----- 28.5 25.1 275.0 28.5 21.6 -17.7 21.6 -16.0 21.3 -16.2 21.6 -17.1
2026-02-11T18:56:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:56:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:56:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.705349
2026-02-11T18:56:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:56:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:56:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:56:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:56:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:56:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:55:29', tmtdew=8.66, humidity=57.31, cloud=0.0, wind=23.08, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:55:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:56:11.810 [DEBUG] [Thread-134104] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:56:11.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:56:11.905 [DEBUG] [Thread-134107] [transport.py] [_log()] starting thread (client mode): 0xa5740760
2026-02-11T18:56:11.906 [DEBUG] [Thread-134107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:56:11.920 [DEBUG] [Thread-134107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:56:11.920 [INFO] [Thread-134107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:56:11.927 [DEBUG] [Thread-134107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] client lang: <none>
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] server lang: <none>
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] kex follows: False
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:56:11.928 [DEBUG] [Thread-134107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:56:11.929 [DEBUG] [Thread-134107] [transport.py] [_log()] Compression: none
2026-02-11T18:56:11.929 [DEBUG] [Thread-134107] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:56:11.984 [DEBUG] [Thread-134107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:56:11.985 [DEBUG] [Thread-134107] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:56:11.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:56:11.986 [DEBUG] [Thread-134107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:56:11.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:56:12.040 [DEBUG] [Thread-134107] [transport.py] [_log()] userauth is OK
2026-02-11T18:56:12.041 [DEBUG] [Thread-134107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:56:12.041 [DEBUG] [Thread-134107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:56:12.041 [DEBUG] [Thread-134107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:56:12.041 [DEBUG] [Thread-134107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:56:12.059 [INFO] [Thread-134107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:56:12.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:56:12.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:56:12.882 [DEBUG] [Thread-134107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:56:12.882 [DEBUG] [Thread-134107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:56:12.930 [DEBUG] [Thread-134107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:56:12.930 [DEBUG] [Thread-134107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:56:12.939 [DEBUG] [Thread-134107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:56:12.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:56:12.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:56:12.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:56:12.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:56:12.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:56:12.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:56:12.972 [DEBUG] [Thread-134107] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:56:18.650 [DEBUG] [Thread-134109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:56:32.119 [DEBUG] [Thread-134110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:56:33.700 [DEBUG] [Thread-134111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:56:42.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:56:42.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:56:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:56:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 56, 4), 8.67, 57.31, 0.0, 22.32, 20.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:56:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:56:04
2026-02-11T18:56:45.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:56:46.107 [DEBUG] [Thread-134112] [transport.py] [_log()] starting thread (client mode): 0x9eb05000
2026-02-11T18:56:46.108 [DEBUG] [Thread-134112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:56:46.127 [DEBUG] [Thread-134112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:56:46.127 [INFO] [Thread-134112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:56:46.130 [DEBUG] [Thread-134112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] client lang: <none>
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] server lang: <none>
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] kex follows: False
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:56:46.131 [DEBUG] [Thread-134112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:56:46.132 [DEBUG] [Thread-134112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:56:46.132 [DEBUG] [Thread-134112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:56:46.132 [DEBUG] [Thread-134112] [transport.py] [_log()] Compression: none
2026-02-11T18:56:46.132 [DEBUG] [Thread-134112] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:56:46.150 [DEBUG] [Thread-134112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:56:46.150 [DEBUG] [Thread-134112] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:56:46.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:56:46.151 [DEBUG] [Thread-134112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:56:46.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:56:46.153 [DEBUG] [Thread-134112] [transport.py] [_log()] userauth is OK
2026-02-11T18:56:46.154 [DEBUG] [Thread-134112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:56:46.154 [DEBUG] [Thread-134112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:56:46.154 [DEBUG] [Thread-134112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:56:46.154 [DEBUG] [Thread-134112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:56:46.178 [INFO] [Thread-134112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:56:46.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:56:46.983 [DEBUG] [Thread-134112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:56:46.983 [DEBUG] [Thread-134112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:56:46.983 [DEBUG] [Thread-134112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:56:47.024 [DEBUG] [Thread-134112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:56:47.024 [DEBUG] [Thread-134112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:56:47.026 [DEBUG] [Thread-134112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:56:47.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:56:47.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:56:47.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:56:47.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:56:47.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:56:47.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:56:47.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.705696 -999.00  +20.40  21.78     64  +13.30 1 2 1 1 1   887    0 10.62 127.91 ----- 23.9 21.8 295.4 28.6 21.6 -17.4 21.6 -15.7 21.3 -15.4 21.6 -16.8
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.705696
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:56:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:56:04', tmtdew=8.67, humidity=57.31, cloud=0.0, wind=22.32, temperature=20.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:56:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:56:47.046 [DEBUG] [Thread-134112] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:56:47.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:56:47.129 [DEBUG] [Thread-134115] [transport.py] [_log()] starting thread (client mode): 0xa57b39d0
2026-02-11T18:56:47.129 [DEBUG] [Thread-134115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:56:47.144 [DEBUG] [Thread-134115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:56:47.144 [INFO] [Thread-134115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:56:47.151 [DEBUG] [Thread-134115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] client lang: <none>
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] server lang: <none>
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] kex follows: False
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] Compression: none
2026-02-11T18:56:47.152 [DEBUG] [Thread-134115] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:56:47.210 [DEBUG] [Thread-134115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:56:47.211 [DEBUG] [Thread-134115] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:56:47.212 [DEBUG] [Thread-134115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:56:47.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:56:47.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:56:47.270 [DEBUG] [Thread-134115] [transport.py] [_log()] userauth is OK
2026-02-11T18:56:47.270 [DEBUG] [Thread-134115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:56:47.270 [DEBUG] [Thread-134115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:56:47.270 [DEBUG] [Thread-134115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:56:47.271 [DEBUG] [Thread-134115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:56:47.293 [INFO] [Thread-134115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:56:47.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:56:47.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:56:48.145 [DEBUG] [Thread-134115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:56:48.145 [DEBUG] [Thread-134115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:56:48.193 [DEBUG] [Thread-134115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:56:48.194 [DEBUG] [Thread-134115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:56:48.203 [DEBUG] [Thread-134115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:56:48.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:56:48.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:56:48.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:56:48.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:56:48.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:56:48.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:56:48.240 [DEBUG] [Thread-134115] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:56:48.736 [DEBUG] [Thread-134117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:03.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:03.664 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:03.797 [DEBUG] [Thread-134118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:57:18.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:57:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:57:18.833 [DEBUG] [Thread-134119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 56, 41), 8.94, 56.61, 0.0, 21.63, 21.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:57:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:56:41
2026-02-11T18:57:20.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:57:20.930 [DEBUG] [Thread-134120] [transport.py] [_log()] starting thread (client mode): 0xa57b1ae0
2026-02-11T18:57:20.931 [DEBUG] [Thread-134120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:57:20.951 [DEBUG] [Thread-134120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:57:20.951 [INFO] [Thread-134120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] client lang: <none>
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] server lang: <none>
2026-02-11T18:57:20.954 [DEBUG] [Thread-134120] [transport.py] [_log()] kex follows: False
2026-02-11T18:57:20.955 [DEBUG] [Thread-134120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:57:20.955 [DEBUG] [Thread-134120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:57:20.955 [DEBUG] [Thread-134120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:57:20.955 [DEBUG] [Thread-134120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:57:20.955 [DEBUG] [Thread-134120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:57:20.955 [DEBUG] [Thread-134120] [transport.py] [_log()] Compression: none
2026-02-11T18:57:20.955 [DEBUG] [Thread-134120] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:57:20.971 [DEBUG] [Thread-134120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:57:20.971 [DEBUG] [Thread-134120] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:57:20.972 [DEBUG] [Thread-134120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:57:20.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:57:20.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:57:20.974 [DEBUG] [Thread-134120] [transport.py] [_log()] userauth is OK
2026-02-11T18:57:20.974 [DEBUG] [Thread-134120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:57:20.974 [DEBUG] [Thread-134120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:57:20.974 [DEBUG] [Thread-134120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:57:20.974 [DEBUG] [Thread-134120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:57:20.999 [INFO] [Thread-134120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:57:21.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:57:21.641 [DEBUG] [Thread-134120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:57:21.641 [DEBUG] [Thread-134120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:57:21.641 [DEBUG] [Thread-134120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:57:21.682 [DEBUG] [Thread-134120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:57:21.682 [DEBUG] [Thread-134120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:57:21.685 [DEBUG] [Thread-134120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:57:21.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:57:21.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:57:21.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:57:21.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:57:21.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:57:21.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:57:21.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:57:21.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:57:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:57:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.706043 -999.00  +20.40  18.74     64  +13.40 1 2 1 1 1   887    0 10.56 127.27 ----- 19.8 18.7 289.6 23.5 21.6 -17.2 21.6 -15.5 21.2 -15.0 21.6 -16.8
2026-02-11T18:57:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:57:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:57:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.706043
2026-02-11T18:57:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:57:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:57:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:57:21.707 [DEBUG] [Thread-134120] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:57:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:57:21.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:57:21.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:56:41', tmtdew=8.94, humidity=56.61, cloud=0.0, wind=21.63, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:56:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:57:21.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:57:21.802 [DEBUG] [Thread-134123] [transport.py] [_log()] starting thread (client mode): 0xa5758640
2026-02-11T18:57:21.802 [DEBUG] [Thread-134123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:57:21.817 [DEBUG] [Thread-134123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:57:21.817 [INFO] [Thread-134123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:57:21.825 [DEBUG] [Thread-134123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:57:21.825 [DEBUG] [Thread-134123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:57:21.825 [DEBUG] [Thread-134123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:57:21.825 [DEBUG] [Thread-134123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:21.825 [DEBUG] [Thread-134123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:21.825 [DEBUG] [Thread-134123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:21.825 [DEBUG] [Thread-134123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] client lang: <none>
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] server lang: <none>
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] kex follows: False
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] Compression: none
2026-02-11T18:57:21.826 [DEBUG] [Thread-134123] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:57:21.884 [DEBUG] [Thread-134123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:57:21.884 [DEBUG] [Thread-134123] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:57:21.885 [DEBUG] [Thread-134123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:57:21.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:57:21.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:57:21.940 [DEBUG] [Thread-134123] [transport.py] [_log()] userauth is OK
2026-02-11T18:57:21.941 [DEBUG] [Thread-134123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:57:21.941 [DEBUG] [Thread-134123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:57:21.941 [DEBUG] [Thread-134123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:57:21.941 [DEBUG] [Thread-134123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:57:21.959 [INFO] [Thread-134123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:57:21.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:57:21.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:57:22.771 [DEBUG] [Thread-134123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:57:22.771 [DEBUG] [Thread-134123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:57:22.820 [DEBUG] [Thread-134123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:57:22.820 [DEBUG] [Thread-134123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:57:22.829 [DEBUG] [Thread-134123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:57:22.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:57:22.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:57:22.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:57:22.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:57:22.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:57:22.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:57:22.863 [DEBUG] [Thread-134123] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:57:32.172 [DEBUG] [Thread-134125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:33.866 [DEBUG] [Thread-134126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:48.916 [DEBUG] [Thread-134127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:57:52.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:57:52.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:57:52.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
2026-02-11T18:57:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 57, 18), 8.53, 57.96, 0.0, 21.14, 20.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:57:54.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:57:18
2026-02-11T18:57:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:57:55.238 [DEBUG] [Thread-134128] [transport.py] [_log()] starting thread (client mode): 0xa2d5df90
2026-02-11T18:57:55.238 [DEBUG] [Thread-134128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:57:55.259 [DEBUG] [Thread-134128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:57:55.260 [INFO] [Thread-134128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] client lang: <none>
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] server lang: <none>
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] kex follows: False
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] Compression: none
2026-02-11T18:57:55.263 [DEBUG] [Thread-134128] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:57:55.280 [DEBUG] [Thread-134128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:57:55.281 [DEBUG] [Thread-134128] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:57:55.281 [DEBUG] [Thread-134128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:57:55.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:57:55.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:57:55.283 [DEBUG] [Thread-134128] [transport.py] [_log()] userauth is OK
2026-02-11T18:57:55.283 [DEBUG] [Thread-134128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:57:55.284 [DEBUG] [Thread-134128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:57:55.284 [DEBUG] [Thread-134128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:57:55.284 [DEBUG] [Thread-134128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:57:55.305 [INFO] [Thread-134128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:57:55.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:57:55.940 [DEBUG] [Thread-134128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:57:55.941 [DEBUG] [Thread-134128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:57:55.941 [DEBUG] [Thread-134128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:57:55.981 [DEBUG] [Thread-134128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:57:55.982 [DEBUG] [Thread-134128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:57:55.985 [DEBUG] [Thread-134128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:57:55.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:57:55.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:57:56.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:57:56.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:57:56.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:57:56.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:57:56.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:57:56.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:57:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:57:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.706390 -999.00  +20.40  22.08     64  +13.50 1 2 1 1 1   887    0 9.83 107.05 ----- 17.9 22.1 289.6 25.1 21.6 -17.5 21.6 -15.6 21.2 -15.3 21.5 -16.8
2026-02-11T18:57:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:57:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:57:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.706390
2026-02-11T18:57:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:57:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:57:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:57:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:57:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:57:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:57:18', tmtdew=8.53, humidity=57.96, cloud=0.0, wind=21.14, temperature=20.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:57:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:57:56.013 [DEBUG] [Thread-134128] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:57:56.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:57:56.108 [DEBUG] [Thread-134131] [transport.py] [_log()] starting thread (client mode): 0xa57b1240
2026-02-11T18:57:56.108 [DEBUG] [Thread-134131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:57:56.122 [DEBUG] [Thread-134131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:57:56.123 [INFO] [Thread-134131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:57:56.134 [DEBUG] [Thread-134131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:57:56.134 [DEBUG] [Thread-134131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:57:56.134 [DEBUG] [Thread-134131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:57:56.134 [DEBUG] [Thread-134131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:56.134 [DEBUG] [Thread-134131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:57:56.134 [DEBUG] [Thread-134131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:56.134 [DEBUG] [Thread-134131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] client lang: <none>
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] server lang: <none>
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] kex follows: False
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:57:56.135 [DEBUG] [Thread-134131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:57:56.136 [DEBUG] [Thread-134131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:57:56.136 [DEBUG] [Thread-134131] [transport.py] [_log()] Compression: none
2026-02-11T18:57:56.136 [DEBUG] [Thread-134131] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:57:56.187 [DEBUG] [Thread-134131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:57:56.188 [DEBUG] [Thread-134131] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:57:56.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:57:56.189 [DEBUG] [Thread-134131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:57:56.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:57:56.243 [DEBUG] [Thread-134131] [transport.py] [_log()] userauth is OK
2026-02-11T18:57:56.243 [DEBUG] [Thread-134131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:57:56.243 [DEBUG] [Thread-134131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:57:56.243 [DEBUG] [Thread-134131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:57:56.243 [DEBUG] [Thread-134131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:57:56.264 [INFO] [Thread-134131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:57:56.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:57:56.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:57:57.092 [DEBUG] [Thread-134131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:57:57.092 [DEBUG] [Thread-134131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:57:57.140 [DEBUG] [Thread-134131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:57:57.140 [DEBUG] [Thread-134131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:57:57.149 [DEBUG] [Thread-134131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:57:57.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:57:57.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:57:57.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:57:57.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:57:57.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:57:57.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:57:57.182 [DEBUG] [Thread-134131] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:58:03.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:58:03.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:58:03.953 [DEBUG] [Thread-134133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:58:19.005 [DEBUG] [Thread-134134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:58:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:58:27.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:58:27.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:58:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 57, 54), 8.4, 58.56, 0.0, 25.97, 20.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:58:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:57:54
2026-02-11T18:58:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:58:29.571 [DEBUG] [Thread-134135] [transport.py] [_log()] starting thread (client mode): 0xa2d5d090
2026-02-11T18:58:29.571 [DEBUG] [Thread-134135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:58:29.593 [DEBUG] [Thread-134135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:58:29.593 [INFO] [Thread-134135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:58:29.596 [DEBUG] [Thread-134135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:58:29.596 [DEBUG] [Thread-134135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:58:29.596 [DEBUG] [Thread-134135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] client lang: <none>
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] server lang: <none>
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] kex follows: False
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:58:29.597 [DEBUG] [Thread-134135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:58:29.598 [DEBUG] [Thread-134135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:58:29.598 [DEBUG] [Thread-134135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:58:29.598 [DEBUG] [Thread-134135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:58:29.598 [DEBUG] [Thread-134135] [transport.py] [_log()] Compression: none
2026-02-11T18:58:29.598 [DEBUG] [Thread-134135] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:58:29.617 [DEBUG] [Thread-134135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:58:29.618 [DEBUG] [Thread-134135] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:58:29.618 [DEBUG] [Thread-134135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:58:29.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:58:29.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:58:29.620 [DEBUG] [Thread-134135] [transport.py] [_log()] userauth is OK
2026-02-11T18:58:29.621 [DEBUG] [Thread-134135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:58:29.621 [DEBUG] [Thread-134135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:58:29.621 [DEBUG] [Thread-134135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:58:29.621 [DEBUG] [Thread-134135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:58:29.658 [INFO] [Thread-134135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:58:29.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:58:30.308 [DEBUG] [Thread-134135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:58:30.308 [DEBUG] [Thread-134135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:58:30.308 [DEBUG] [Thread-134135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:58:30.348 [DEBUG] [Thread-134135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:58:30.349 [DEBUG] [Thread-134135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:58:30.352 [DEBUG] [Thread-134135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:58:30.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:58:30.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:58:30.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:58:30.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:58:30.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:58:30.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:58:30.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:58:30.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:58:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:58:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.706737 -999.00  +20.40  17.92     64  +13.60 1 2 1 1 1   887    0 10.00 109.37 ----- 14.6 17.9 278.6 19.3 21.6 -17.2 21.6 -15.3 21.2 -15.4 21.6 -16.8
2026-02-11T18:58:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:58:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:58:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.706737
2026-02-11T18:58:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:58:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:58:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:58:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:58:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:58:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:57:54', tmtdew=8.4, humidity=58.56, cloud=0.0, wind=25.97, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:57:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:58:30.377 [DEBUG] [Thread-134135] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:58:30.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:58:30.473 [DEBUG] [Thread-134138] [transport.py] [_log()] starting thread (client mode): 0xa2d5fe20
2026-02-11T18:58:30.473 [DEBUG] [Thread-134138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:58:30.487 [DEBUG] [Thread-134138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:58:30.487 [INFO] [Thread-134138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:58:30.495 [DEBUG] [Thread-134138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:58:30.495 [DEBUG] [Thread-134138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:58:30.495 [DEBUG] [Thread-134138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] client lang: <none>
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] server lang: <none>
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] kex follows: False
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] Compression: none
2026-02-11T18:58:30.496 [DEBUG] [Thread-134138] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:58:30.554 [DEBUG] [Thread-134138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:58:30.554 [DEBUG] [Thread-134138] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:58:30.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:58:30.555 [DEBUG] [Thread-134138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:58:30.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:58:30.610 [DEBUG] [Thread-134138] [transport.py] [_log()] userauth is OK
2026-02-11T18:58:30.611 [DEBUG] [Thread-134138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:58:30.611 [DEBUG] [Thread-134138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:58:30.611 [DEBUG] [Thread-134138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:58:30.611 [DEBUG] [Thread-134138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:58:30.630 [INFO] [Thread-134138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:58:30.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:58:30.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:58:31.465 [DEBUG] [Thread-134138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:58:31.466 [DEBUG] [Thread-134138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:58:31.513 [DEBUG] [Thread-134138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:58:31.514 [DEBUG] [Thread-134138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:58:31.523 [DEBUG] [Thread-134138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:58:31.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:58:31.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:58:31.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
2026-02-11T18:58:31.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:58:31.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:58:31.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:58:31.560 [DEBUG] [Thread-134138] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:58:32.234 [DEBUG] [Thread-134140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:58:34.041 [DEBUG] [Thread-134141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:58:49.098 [DEBUG] [Thread-134142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:59:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:59:01.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:59:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:59:03.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 58, 30), 8.33, 58.82, 0.0, 24.6, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:59:03.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:58:30
2026-02-11T18:59:03.941 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:59:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:59:03.942 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:59:04.104 [DEBUG] [Thread-134143] [transport.py] [_log()] starting thread (client mode): 0xa2d5d960
2026-02-11T18:59:04.104 [DEBUG] [Thread-134143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:59:04.124 [DEBUG] [Thread-134143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:59:04.124 [INFO] [Thread-134143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:59:04.127 [DEBUG] [Thread-134143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] client lang: <none>
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] server lang: <none>
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] kex follows: False
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] Compression: none
2026-02-11T18:59:04.128 [DEBUG] [Thread-134143] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:59:04.134 [DEBUG] [Thread-134145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:59:04.144 [DEBUG] [Thread-134143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:59:04.144 [DEBUG] [Thread-134143] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:59:04.144 [DEBUG] [Thread-134143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:59:04.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:59:04.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:59:04.146 [DEBUG] [Thread-134143] [transport.py] [_log()] userauth is OK
2026-02-11T18:59:04.147 [DEBUG] [Thread-134143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:59:04.147 [DEBUG] [Thread-134143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:59:04.147 [DEBUG] [Thread-134143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:59:04.147 [DEBUG] [Thread-134143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:59:04.168 [INFO] [Thread-134143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:59:04.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:59:04.814 [DEBUG] [Thread-134143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:59:04.814 [DEBUG] [Thread-134143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:59:04.815 [DEBUG] [Thread-134143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:59:04.856 [DEBUG] [Thread-134143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:59:04.856 [DEBUG] [Thread-134143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:59:04.859 [DEBUG] [Thread-134143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:59:04.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:59:04.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:59:04.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:59:04.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:59:04.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:59:04.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:59:04.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:59:04.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:59:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:59:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.707085 -999.00  +20.50  20.08     64  +13.60 1 2 1 1 1   887    0 9.66 96.69 ----- 14.8 20.1 292.4 21.4 21.7 -17.1 21.6 -15.4 21.3 -15.0 21.5 -16.8
2026-02-11T18:59:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:59:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:59:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.707085
2026-02-11T18:59:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:59:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:59:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:59:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:59:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:59:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:58:30', tmtdew=8.33, humidity=58.82, cloud=0.0, wind=24.6, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:58:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:59:04.887 [DEBUG] [Thread-134143] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:59:04.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:59:04.984 [DEBUG] [Thread-134147] [transport.py] [_log()] starting thread (client mode): 0xa57b19c0
2026-02-11T18:59:04.984 [DEBUG] [Thread-134147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:59:04.999 [DEBUG] [Thread-134147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:59:04.999 [INFO] [Thread-134147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:59:05.007 [DEBUG] [Thread-134147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:59:05.007 [DEBUG] [Thread-134147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] client lang: <none>
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] server lang: <none>
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] kex follows: False
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:59:05.008 [DEBUG] [Thread-134147] [transport.py] [_log()] Compression: none
2026-02-11T18:59:05.009 [DEBUG] [Thread-134147] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:59:05.065 [DEBUG] [Thread-134147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:59:05.066 [DEBUG] [Thread-134147] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:59:05.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:59:05.067 [DEBUG] [Thread-134147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:59:05.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:59:05.124 [DEBUG] [Thread-134147] [transport.py] [_log()] userauth is OK
2026-02-11T18:59:05.125 [DEBUG] [Thread-134147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:59:05.125 [DEBUG] [Thread-134147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:59:05.125 [DEBUG] [Thread-134147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:59:05.125 [DEBUG] [Thread-134147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:59:05.142 [INFO] [Thread-134147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:59:05.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:59:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:59:05.978 [DEBUG] [Thread-134147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:59:05.978 [DEBUG] [Thread-134147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:59:06.026 [DEBUG] [Thread-134147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:59:06.026 [DEBUG] [Thread-134147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:59:06.036 [DEBUG] [Thread-134147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:59:06.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:59:06.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:59:06.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:59:06.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:59:06.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:59:06.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:59:06.077 [DEBUG] [Thread-134147] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:59:19.171 [DEBUG] [Thread-134149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:59:32.287 [DEBUG] [Thread-134150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:59:34.221 [DEBUG] [Thread-134151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T18:59:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T18:59:36.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T18:59:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T18:59:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 59, 6), 8.31, 58.9, 0.0, 25.27, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T18:59:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:59:06
2026-02-11T18:59:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T18:59:38.399 [DEBUG] [Thread-134152] [transport.py] [_log()] starting thread (client mode): 0xa2d5ff40
2026-02-11T18:59:38.399 [DEBUG] [Thread-134152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:59:38.420 [DEBUG] [Thread-134152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T18:59:38.420 [INFO] [Thread-134152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] client lang: <none>
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] server lang: <none>
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] kex follows: False
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:59:38.423 [DEBUG] [Thread-134152] [transport.py] [_log()] Compression: none
2026-02-11T18:59:38.424 [DEBUG] [Thread-134152] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:59:38.443 [DEBUG] [Thread-134152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:59:38.443 [DEBUG] [Thread-134152] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:59:38.444 [DEBUG] [Thread-134152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T18:59:38.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T18:59:38.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:59:38.446 [DEBUG] [Thread-134152] [transport.py] [_log()] userauth is OK
2026-02-11T18:59:38.446 [DEBUG] [Thread-134152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:59:38.446 [DEBUG] [Thread-134152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:59:38.446 [DEBUG] [Thread-134152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T18:59:38.446 [DEBUG] [Thread-134152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:59:38.462 [INFO] [Thread-134152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:59:38.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:59:39.233 [DEBUG] [Thread-134152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:59:39.233 [DEBUG] [Thread-134152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:59:39.234 [DEBUG] [Thread-134152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T18:59:39.274 [DEBUG] [Thread-134152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:59:39.275 [DEBUG] [Thread-134152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:59:39.278 [DEBUG] [Thread-134152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:59:39.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:59:39.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T18:59:39.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T18:59:39.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T18:59:39.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:59:39.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T18:59:39.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:59:39.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:59:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T18:59:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.707779 -999.00  +20.40  17.14     65  +13.70 1 2 1 1 1   887    0 9.57 89.85 ----- 15.5 17.1 285.8 21.7 21.6 -17.6 21.6 -15.7 21.3 -15.3 21.6 -16.7
2026-02-11T18:59:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T18:59:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T18:59:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.707779
2026-02-11T18:59:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T18:59:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T18:59:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T18:59:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T18:59:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T18:59:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:59:06', tmtdew=8.31, humidity=58.9, cloud=0.0, wind=25.27, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:59:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T18:59:39.306 [DEBUG] [Thread-134152] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:59:39.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T18:59:39.402 [DEBUG] [Thread-134155] [transport.py] [_log()] starting thread (client mode): 0xa2d5feb0
2026-02-11T18:59:39.402 [DEBUG] [Thread-134155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T18:59:39.417 [DEBUG] [Thread-134155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T18:59:39.417 [INFO] [Thread-134155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T18:59:39.426 [DEBUG] [Thread-134155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T18:59:39.426 [DEBUG] [Thread-134155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T18:59:39.426 [DEBUG] [Thread-134155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T18:59:39.426 [DEBUG] [Thread-134155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] client lang: <none>
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] server lang: <none>
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] kex follows: False
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] Compression: none
2026-02-11T18:59:39.427 [DEBUG] [Thread-134155] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T18:59:39.484 [DEBUG] [Thread-134155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T18:59:39.485 [DEBUG] [Thread-134155] [transport.py] [_log()] Switch to new keys ...
2026-02-11T18:59:39.485 [DEBUG] [Thread-134155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T18:59:39.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T18:59:39.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T18:59:39.544 [DEBUG] [Thread-134155] [transport.py] [_log()] userauth is OK
2026-02-11T18:59:39.544 [DEBUG] [Thread-134155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T18:59:39.544 [DEBUG] [Thread-134155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T18:59:39.544 [DEBUG] [Thread-134155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T18:59:39.544 [DEBUG] [Thread-134155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T18:59:39.562 [INFO] [Thread-134155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T18:59:39.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T18:59:39.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T18:59:40.357 [DEBUG] [Thread-134155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T18:59:40.357 [DEBUG] [Thread-134155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T18:59:40.405 [DEBUG] [Thread-134155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T18:59:40.406 [DEBUG] [Thread-134155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T18:59:40.415 [DEBUG] [Thread-134155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T18:59:40.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T18:59:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T18:59:40.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T18:59:40.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T18:59:40.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T18:59:40.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T18:59:40.452 [DEBUG] [Thread-134155] [transport.py] [_log()] EOF in transport thread
2026-02-11T18:59:49.256 [DEBUG] [Thread-134157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:04.086 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:04.087 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:04.307 [DEBUG] [Thread-134158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:10.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:00:10.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:00:10.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:00:12.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 18, 59, 42), 8.65, 57.67, 0.0, 25.72, 21.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:00:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 18:59:42
2026-02-11T19:00:12.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:00:13.131 [DEBUG] [Thread-134159] [transport.py] [_log()] starting thread (client mode): 0xa5770310
2026-02-11T19:00:13.132 [DEBUG] [Thread-134159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:00:13.151 [DEBUG] [Thread-134159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:00:13.151 [INFO] [Thread-134159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] client lang: <none>
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] server lang: <none>
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] kex follows: False
2026-02-11T19:00:13.154 [DEBUG] [Thread-134159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:00:13.155 [DEBUG] [Thread-134159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:00:13.155 [DEBUG] [Thread-134159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:00:13.155 [DEBUG] [Thread-134159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:00:13.155 [DEBUG] [Thread-134159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:00:13.155 [DEBUG] [Thread-134159] [transport.py] [_log()] Compression: none
2026-02-11T19:00:13.155 [DEBUG] [Thread-134159] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:00:13.172 [DEBUG] [Thread-134159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:00:13.173 [DEBUG] [Thread-134159] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:00:13.173 [DEBUG] [Thread-134159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:00:13.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:00:13.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:00:13.217 [DEBUG] [Thread-134159] [transport.py] [_log()] userauth is OK
2026-02-11T19:00:13.217 [DEBUG] [Thread-134159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:00:13.218 [DEBUG] [Thread-134159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:00:13.218 [DEBUG] [Thread-134159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:00:13.218 [DEBUG] [Thread-134159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:00:13.228 [INFO] [Thread-134159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:00:13.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:00:13.923 [DEBUG] [Thread-134159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:00:13.923 [DEBUG] [Thread-134159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:00:13.924 [DEBUG] [Thread-134159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:00:13.964 [DEBUG] [Thread-134159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:00:13.964 [DEBUG] [Thread-134159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:00:13.967 [DEBUG] [Thread-134159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:00:13.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:00:13.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:00:13.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:00:13.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:00:13.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:00:13.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:00:13.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:00:13.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:00:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:00:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.708126 -999.00  +20.50  13.76     65  +13.80 1 2 1 1 1   887    0 9.17 85.37 ----- 14.8 13.8 290.1 18.6 21.6 -17.4 21.6 -15.5 21.3 -14.8 21.5 -16.6
2026-02-11T19:00:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:00:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:00:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.708126
2026-02-11T19:00:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:00:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:00:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:00:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:00:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:00:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T18:59:42', tmtdew=8.65, humidity=57.67, cloud=0.0, wind=25.72, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T16:59:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:00:13.992 [DEBUG] [Thread-134159] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:00:14.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:00:14.086 [DEBUG] [Thread-134162] [transport.py] [_log()] starting thread (client mode): 0xa5772320
2026-02-11T19:00:14.086 [DEBUG] [Thread-134162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:00:14.101 [DEBUG] [Thread-134162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:00:14.101 [INFO] [Thread-134162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:14.109 [DEBUG] [Thread-134162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] client lang: <none>
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] server lang: <none>
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] kex follows: False
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:00:14.110 [DEBUG] [Thread-134162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:00:14.111 [DEBUG] [Thread-134162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:00:14.111 [DEBUG] [Thread-134162] [transport.py] [_log()] Compression: none
2026-02-11T19:00:14.111 [DEBUG] [Thread-134162] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:00:14.172 [DEBUG] [Thread-134162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:00:14.173 [DEBUG] [Thread-134162] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:00:14.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:00:14.174 [DEBUG] [Thread-134162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:00:14.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:00:14.234 [DEBUG] [Thread-134162] [transport.py] [_log()] userauth is OK
2026-02-11T19:00:14.235 [DEBUG] [Thread-134162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:00:14.235 [DEBUG] [Thread-134162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:00:14.235 [DEBUG] [Thread-134162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:00:14.235 [DEBUG] [Thread-134162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:00:14.254 [INFO] [Thread-134162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:00:14.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:00:14.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:00:15.129 [DEBUG] [Thread-134162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:00:15.130 [DEBUG] [Thread-134162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:00:15.178 [DEBUG] [Thread-134162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:00:15.178 [DEBUG] [Thread-134162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:00:15.187 [DEBUG] [Thread-134162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:00:15.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:00:15.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:00:15.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
2026-02-11T19:00:15.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:00:15.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:00:15.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:00:15.224 [DEBUG] [Thread-134162] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:00:19.344 [DEBUG] [Thread-134164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:32.362 [DEBUG] [Thread-134165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:34.395 [DEBUG] [Thread-134166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:45.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:00:45.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:00:45.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:00:47.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 0, 17), 8.15, 59.62, 0.0, 22.74, 20.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:00:47.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:00:17
2026-02-11T19:00:47.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:00:47.800 [DEBUG] [Thread-134167] [transport.py] [_log()] starting thread (client mode): 0xa2d5f8b0
2026-02-11T19:00:47.800 [DEBUG] [Thread-134167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:00:47.821 [DEBUG] [Thread-134167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:00:47.821 [INFO] [Thread-134167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:00:47.824 [DEBUG] [Thread-134167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:00:47.824 [DEBUG] [Thread-134167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] client lang: <none>
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] server lang: <none>
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] kex follows: False
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:00:47.825 [DEBUG] [Thread-134167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:00:47.826 [DEBUG] [Thread-134167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:00:47.826 [DEBUG] [Thread-134167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:00:47.826 [DEBUG] [Thread-134167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:00:47.826 [DEBUG] [Thread-134167] [transport.py] [_log()] Compression: none
2026-02-11T19:00:47.826 [DEBUG] [Thread-134167] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:00:47.842 [DEBUG] [Thread-134167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:00:47.842 [DEBUG] [Thread-134167] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:00:47.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:00:47.843 [DEBUG] [Thread-134167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:00:47.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:00:47.844 [DEBUG] [Thread-134167] [transport.py] [_log()] userauth is OK
2026-02-11T19:00:47.845 [DEBUG] [Thread-134167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:00:47.845 [DEBUG] [Thread-134167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:00:47.845 [DEBUG] [Thread-134167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:00:47.845 [DEBUG] [Thread-134167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:00:47.866 [INFO] [Thread-134167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:00:47.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:00:48.528 [DEBUG] [Thread-134167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:00:48.528 [DEBUG] [Thread-134167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:00:48.528 [DEBUG] [Thread-134167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:00:48.569 [DEBUG] [Thread-134167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:00:48.570 [DEBUG] [Thread-134167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:00:48.573 [DEBUG] [Thread-134167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:00:48.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:00:48.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:00:48.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:00:48.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:00:48.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:00:48.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:00:48.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:00:48.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:00:48.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:00:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.708474 -999.00  +20.40  22.54     65  +13.70 1 2 1 1 1   887    0 8.89 70.17 ----- 24.4 22.5 278.4 26.0 21.6 -17.9 -999.0 -999.0 21.2 -15.8 21.6 -17.1
2026-02-11T19:00:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:00:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:00:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.708474
2026-02-11T19:00:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:00:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:00:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:00:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:00:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:00:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:00:17', tmtdew=8.15, humidity=59.62, cloud=0.0, wind=22.74, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:00:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:00:48.600 [DEBUG] [Thread-134167] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:00:48.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:00:48.693 [DEBUG] [Thread-134170] [transport.py] [_log()] starting thread (client mode): 0xa2d5f820
2026-02-11T19:00:48.693 [DEBUG] [Thread-134170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:00:48.708 [DEBUG] [Thread-134170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:00:48.708 [INFO] [Thread-134170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:00:48.715 [DEBUG] [Thread-134170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:00:48.715 [DEBUG] [Thread-134170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:00:48.715 [DEBUG] [Thread-134170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] client lang: <none>
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] server lang: <none>
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] kex follows: False
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] Compression: none
2026-02-11T19:00:48.716 [DEBUG] [Thread-134170] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:00:48.775 [DEBUG] [Thread-134170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:00:48.775 [DEBUG] [Thread-134170] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:00:48.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:00:48.776 [DEBUG] [Thread-134170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:00:48.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:00:48.833 [DEBUG] [Thread-134170] [transport.py] [_log()] userauth is OK
2026-02-11T19:00:48.834 [DEBUG] [Thread-134170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:00:48.834 [DEBUG] [Thread-134170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:00:48.834 [DEBUG] [Thread-134170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:00:48.834 [DEBUG] [Thread-134170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:00:48.853 [INFO] [Thread-134170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:00:48.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:00:48.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:00:49.431 [DEBUG] [Thread-134172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:00:49.682 [DEBUG] [Thread-134170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:00:49.683 [DEBUG] [Thread-134170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:00:49.730 [DEBUG] [Thread-134170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:00:49.731 [DEBUG] [Thread-134170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:00:49.740 [DEBUG] [Thread-134170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:00:49.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:00: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')
2026-02-11T19:00: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
2026-02-11T19:00:49.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:00:49.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:00:49.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:00:49.777 [DEBUG] [Thread-134170] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:01:04.231 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:01:04.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:01:04.485 [DEBUG] [Thread-134173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:01:19.522 [DEBUG] [Thread-134174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:01:19.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:01:19.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:01:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:01:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 0, 53), 8.1, 59.78, 0.0, 20.77, 20.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:01:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:00:53
2026-02-11T19:01:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:01:22.392 [DEBUG] [Thread-134175] [transport.py] [_log()] starting thread (client mode): 0xa57b28c0
2026-02-11T19:01:22.393 [DEBUG] [Thread-134175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:01:22.413 [DEBUG] [Thread-134175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:01:22.413 [INFO] [Thread-134175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:01:22.416 [DEBUG] [Thread-134175] [transport.py] [_log()] client lang: <none>
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] server lang: <none>
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] kex follows: False
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] Compression: none
2026-02-11T19:01:22.417 [DEBUG] [Thread-134175] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:01:22.428 [DEBUG] [Thread-134175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:01:22.429 [DEBUG] [Thread-134175] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:01:22.429 [DEBUG] [Thread-134175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:01:22.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:01:22.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:01:22.431 [DEBUG] [Thread-134175] [transport.py] [_log()] userauth is OK
2026-02-11T19:01:22.431 [DEBUG] [Thread-134175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:01:22.432 [DEBUG] [Thread-134175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:01:22.432 [DEBUG] [Thread-134175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:01:22.432 [DEBUG] [Thread-134175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:01:22.456 [INFO] [Thread-134175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:01:22.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:01:23.067 [DEBUG] [Thread-134175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:01:23.068 [DEBUG] [Thread-134175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:01:23.068 [DEBUG] [Thread-134175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:01:23.109 [DEBUG] [Thread-134175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:01:23.109 [DEBUG] [Thread-134175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:01:23.112 [DEBUG] [Thread-134175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:01:23.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:01:23.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:01:23.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:01:23.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:01:23.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:01:23.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:01:23.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.708821 -999.00  +20.40  17.34     65  +13.70 1 2 1 1 1   887    0 8.79 65.59 ----- 16.6 17.3 285.3 24.6 21.6 -17.6 21.6 -15.6 21.2 -15.0 21.5 -16.7
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.708821
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:01:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:00:53', tmtdew=8.1, humidity=59.78, cloud=0.0, wind=20.77, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:00:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:01:23.134 [DEBUG] [Thread-134175] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:01:23.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:01:23.223 [DEBUG] [Thread-134178] [transport.py] [_log()] starting thread (client mode): 0xa57b3520
2026-02-11T19:01:23.223 [DEBUG] [Thread-134178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:01:23.236 [DEBUG] [Thread-134178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:01:23.237 [INFO] [Thread-134178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] client lang: <none>
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] server lang: <none>
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] kex follows: False
2026-02-11T19:01:23.244 [DEBUG] [Thread-134178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:01:23.245 [DEBUG] [Thread-134178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:01:23.245 [DEBUG] [Thread-134178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:01:23.245 [DEBUG] [Thread-134178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:01:23.245 [DEBUG] [Thread-134178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:01:23.245 [DEBUG] [Thread-134178] [transport.py] [_log()] Compression: none
2026-02-11T19:01:23.245 [DEBUG] [Thread-134178] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:01:23.303 [DEBUG] [Thread-134178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:01:23.304 [DEBUG] [Thread-134178] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:01:23.304 [DEBUG] [Thread-134178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:01:23.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:01:23.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:01:23.360 [DEBUG] [Thread-134178] [transport.py] [_log()] userauth is OK
2026-02-11T19:01:23.360 [DEBUG] [Thread-134178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:01:23.360 [DEBUG] [Thread-134178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:01:23.360 [DEBUG] [Thread-134178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:01:23.360 [DEBUG] [Thread-134178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:01:23.384 [INFO] [Thread-134178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:01:23.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:01:23.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:01:24.234 [DEBUG] [Thread-134178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:01:24.234 [DEBUG] [Thread-134178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:01:24.282 [DEBUG] [Thread-134178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:01:24.283 [DEBUG] [Thread-134178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:01:24.292 [DEBUG] [Thread-134178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:01:24.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:01:24.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:01:24.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:01:24.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:01:24.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:01:24.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:01:24.330 [DEBUG] [Thread-134178] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:01:32.411 [DEBUG] [Thread-134180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:01:34.559 [DEBUG] [Thread-134181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:01:49.607 [DEBUG] [Thread-134182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:01:54.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:01:54.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:01:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:01:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 1, 29), 8.16, 59.6, 0.0, 24.05, 20.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:01:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:01:29
2026-02-11T19:01:56.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:01:56.730 [DEBUG] [Thread-134183] [transport.py] [_log()] starting thread (client mode): 0xa57b1ba0
2026-02-11T19:01:56.730 [DEBUG] [Thread-134183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:01:56.751 [DEBUG] [Thread-134183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:01:56.751 [INFO] [Thread-134183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:01:56.754 [DEBUG] [Thread-134183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:01:56.754 [DEBUG] [Thread-134183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:01:56.754 [DEBUG] [Thread-134183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:01:56.754 [DEBUG] [Thread-134183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] client lang: <none>
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] server lang: <none>
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] kex follows: False
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] Compression: none
2026-02-11T19:01:56.755 [DEBUG] [Thread-134183] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:01:56.775 [DEBUG] [Thread-134183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:01:56.775 [DEBUG] [Thread-134183] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:01:56.776 [DEBUG] [Thread-134183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:01:56.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:01:56.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:01:56.778 [DEBUG] [Thread-134183] [transport.py] [_log()] userauth is OK
2026-02-11T19:01:56.778 [DEBUG] [Thread-134183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:01:56.778 [DEBUG] [Thread-134183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:01:56.778 [DEBUG] [Thread-134183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:01:56.779 [DEBUG] [Thread-134183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:01:56.802 [INFO] [Thread-134183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:01:56.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:01:57.452 [DEBUG] [Thread-134183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:01:57.453 [DEBUG] [Thread-134183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:01:57.453 [DEBUG] [Thread-134183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:01:57.493 [DEBUG] [Thread-134183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:01:57.494 [DEBUG] [Thread-134183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:01:57.497 [DEBUG] [Thread-134183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:01:57.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:01:57.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:01:57.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:01:57.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:01:57.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:01:57.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:01:57.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:01:57.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:01:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:01:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.709168 -999.00  +20.40  14.44     65  +13.80 1 2 1 1 1   887    0 8.37 51.09 ----- 13.8 14.4 287.2 19.9 21.6 -17.6 21.6 -15.6 21.3 -15.5 21.5 -16.6
2026-02-11T19:01:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:01:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:01:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.709168
2026-02-11T19:01:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:01:57.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:01:57.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:01:57.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:01:57.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:01:57.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:01:29', tmtdew=8.16, humidity=59.6, cloud=0.0, wind=24.05, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:01:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:01:57.523 [DEBUG] [Thread-134183] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:01:57.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:01:57.628 [DEBUG] [Thread-134186] [transport.py] [_log()] starting thread (client mode): 0xa57c2320
2026-02-11T19:01:57.628 [DEBUG] [Thread-134186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:01:57.642 [DEBUG] [Thread-134186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:01:57.642 [INFO] [Thread-134186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:01:57.649 [DEBUG] [Thread-134186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:01:57.650 [DEBUG] [Thread-134186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] client lang: <none>
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] server lang: <none>
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] kex follows: False
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:01:57.651 [DEBUG] [Thread-134186] [transport.py] [_log()] Compression: none
2026-02-11T19:01:57.652 [DEBUG] [Thread-134186] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:01:57.704 [DEBUG] [Thread-134186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:01:57.704 [DEBUG] [Thread-134186] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:01:57.704 [DEBUG] [Thread-134186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:01:57.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:01:57.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:01:57.762 [DEBUG] [Thread-134186] [transport.py] [_log()] userauth is OK
2026-02-11T19:01:57.762 [DEBUG] [Thread-134186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:01:57.762 [DEBUG] [Thread-134186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:01:57.762 [DEBUG] [Thread-134186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:01:57.762 [DEBUG] [Thread-134186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:01:57.776 [INFO] [Thread-134186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:01:57.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:01:57.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:01:58.553 [DEBUG] [Thread-134186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:01:58.553 [DEBUG] [Thread-134186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:01:58.601 [DEBUG] [Thread-134186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:01:58.601 [DEBUG] [Thread-134186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:01:58.611 [DEBUG] [Thread-134186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:01:58.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:01:58.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:01:58.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:01:58.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:01:58.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:01:58.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:01:58.650 [DEBUG] [Thread-134186] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:02:04.375 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:02:04.376 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:02:04.642 [DEBUG] [Thread-134188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:02:19.704 [DEBUG] [Thread-134189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:02:28.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:02:28.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:02:28.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:02:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 2, 4), 8.23, 59.32, 0.0, 23.34, 20.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:02:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:02:04
2026-02-11T19:02:31.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:02:31.617 [DEBUG] [Thread-134190] [transport.py] [_log()] starting thread (client mode): 0xa57b2fe0
2026-02-11T19:02:31.617 [DEBUG] [Thread-134190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:02:31.637 [DEBUG] [Thread-134190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:02:31.637 [INFO] [Thread-134190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:02:31.640 [DEBUG] [Thread-134190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:02:31.640 [DEBUG] [Thread-134190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:02:31.640 [DEBUG] [Thread-134190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] client lang: <none>
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] server lang: <none>
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] kex follows: False
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] Compression: none
2026-02-11T19:02:31.641 [DEBUG] [Thread-134190] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:02:31.659 [DEBUG] [Thread-134190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:02:31.659 [DEBUG] [Thread-134190] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:02:31.660 [DEBUG] [Thread-134190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:02:31.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:02:31.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:02:31.662 [DEBUG] [Thread-134190] [transport.py] [_log()] userauth is OK
2026-02-11T19:02:31.662 [DEBUG] [Thread-134190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:02:31.662 [DEBUG] [Thread-134190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:02:31.662 [DEBUG] [Thread-134190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:02:31.662 [DEBUG] [Thread-134190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:02:31.687 [INFO] [Thread-134190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:02:31.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:02:32.454 [DEBUG] [Thread-134190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:02:32.454 [DEBUG] [Thread-134190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:02:32.454 [DEBUG] [Thread-134190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:02:32.462 [DEBUG] [Thread-134192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:02:32.495 [DEBUG] [Thread-134190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:02:32.496 [DEBUG] [Thread-134190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:02:32.499 [DEBUG] [Thread-134190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:02:32.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:02:32.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:02:32.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:02:32.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:02:32.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:02:32.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:02:32.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:02:32.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:02:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:02:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.709515 -999.00  +20.40  17.05     65  +13.70 1 2 1 1 1   887    0 8.29 45.02 ----- 16.3 17.1 274.6 20.2 21.6 -17.8 21.6 -15.8 21.2 -15.7 21.5 -16.8
2026-02-11T19:02:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:02:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:02:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.709515
2026-02-11T19:02:32.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:02:32.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:02:32.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:02:32.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:02:32.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:02:32.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:02:04', tmtdew=8.23, humidity=59.32, cloud=0.0, wind=23.34, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:01:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:02:32.526 [DEBUG] [Thread-134190] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:02:32.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:02:32.621 [DEBUG] [Thread-134194] [transport.py] [_log()] starting thread (client mode): 0xa5773fd0
2026-02-11T19:02:32.622 [DEBUG] [Thread-134194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:02:32.636 [DEBUG] [Thread-134194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:02:32.637 [INFO] [Thread-134194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:02:32.644 [DEBUG] [Thread-134194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:02:32.645 [DEBUG] [Thread-134194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:02:32.645 [DEBUG] [Thread-134194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:02:32.645 [DEBUG] [Thread-134194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:02:32.645 [DEBUG] [Thread-134194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:02:32.645 [DEBUG] [Thread-134194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:02:32.645 [DEBUG] [Thread-134194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] client lang: <none>
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] server lang: <none>
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] kex follows: False
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:02:32.646 [DEBUG] [Thread-134194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:02:32.647 [DEBUG] [Thread-134194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:02:32.647 [DEBUG] [Thread-134194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:02:32.647 [DEBUG] [Thread-134194] [transport.py] [_log()] Compression: none
2026-02-11T19:02:32.647 [DEBUG] [Thread-134194] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:02:32.704 [DEBUG] [Thread-134194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:02:32.705 [DEBUG] [Thread-134194] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:02:32.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:02:32.706 [DEBUG] [Thread-134194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:02:32.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:02:32.762 [DEBUG] [Thread-134194] [transport.py] [_log()] userauth is OK
2026-02-11T19:02:32.762 [DEBUG] [Thread-134194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:02:32.762 [DEBUG] [Thread-134194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:02:32.763 [DEBUG] [Thread-134194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:02:32.763 [DEBUG] [Thread-134194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:02:32.784 [INFO] [Thread-134194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:02:32.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:02:32.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:02:33.603 [DEBUG] [Thread-134194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:02:33.603 [DEBUG] [Thread-134194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:02:33.654 [DEBUG] [Thread-134194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:02:33.654 [DEBUG] [Thread-134194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:02:33.664 [DEBUG] [Thread-134194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:02:33.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:02:33.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:02:33.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:02:33.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:02:33.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:02:33.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:02:33.696 [DEBUG] [Thread-134194] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:02:34.740 [DEBUG] [Thread-134196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:02:49.792 [DEBUG] [Thread-134197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:03:03.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:03:03.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:03:03.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:03:04.515 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:03:04.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:03:04.829 [DEBUG] [Thread-134198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:03:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 2, 40), 8.65, 57.64, 0.0, 29.64, 20.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:03:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:02:40
2026-02-11T19:03:05.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:03:06.129 [DEBUG] [Thread-134199] [transport.py] [_log()] starting thread (client mode): 0xa2d56560
2026-02-11T19:03:06.129 [DEBUG] [Thread-134199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:03:06.148 [DEBUG] [Thread-134199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:03:06.148 [INFO] [Thread-134199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] client lang: <none>
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] server lang: <none>
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] kex follows: False
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] Compression: none
2026-02-11T19:03:06.151 [DEBUG] [Thread-134199] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:03:06.163 [DEBUG] [Thread-134199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:03:06.164 [DEBUG] [Thread-134199] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:03:06.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:03:06.165 [DEBUG] [Thread-134199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:03:06.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:03:06.167 [DEBUG] [Thread-134199] [transport.py] [_log()] userauth is OK
2026-02-11T19:03:06.167 [DEBUG] [Thread-134199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:03:06.167 [DEBUG] [Thread-134199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:03:06.167 [DEBUG] [Thread-134199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:03:06.167 [DEBUG] [Thread-134199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:03:06.203 [INFO] [Thread-134199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:03:06.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:03:06.765 [DEBUG] [Thread-134199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:03:06.765 [DEBUG] [Thread-134199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:03:06.766 [DEBUG] [Thread-134199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:03:06.806 [DEBUG] [Thread-134199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:03:06.806 [DEBUG] [Thread-134199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:03:06.809 [DEBUG] [Thread-134199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:03:06.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:03:06.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:03:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:03:06.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:03:06.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:03:06.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:03:06.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:03:06.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:03:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:03:06.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.710210 -999.00  +20.30  24.29     65  +13.70 1 2 1 1 1   887    0 7.77 33.46 ----- 22.4 24.3 277.6 30.2 21.5 -18.0 21.5 -15.7 21.2 -15.4 21.5 -16.8
2026-02-11T19:03:06.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:03:06.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:03:06.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.710210
2026-02-11T19:03:06.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:03:06.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:03:06.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:03:06.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:03:06.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:03:06.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:02:40', tmtdew=8.65, humidity=57.64, cloud=0.0, wind=29.64, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:02:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:03:06.839 [DEBUG] [Thread-134199] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:03:06.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:03:06.930 [DEBUG] [Thread-134202] [transport.py] [_log()] starting thread (client mode): 0xa2dc1240
2026-02-11T19:03:06.930 [DEBUG] [Thread-134202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:03:06.947 [DEBUG] [Thread-134202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:03:06.947 [INFO] [Thread-134202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:03:06.954 [DEBUG] [Thread-134202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:03:06.955 [DEBUG] [Thread-134202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:03:06.955 [DEBUG] [Thread-134202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:03:06.955 [DEBUG] [Thread-134202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:06.955 [DEBUG] [Thread-134202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:06.955 [DEBUG] [Thread-134202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:06.955 [DEBUG] [Thread-134202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] client lang: <none>
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] server lang: <none>
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] kex follows: False
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:03:06.956 [DEBUG] [Thread-134202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:03:06.957 [DEBUG] [Thread-134202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:03:06.957 [DEBUG] [Thread-134202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:03:06.957 [DEBUG] [Thread-134202] [transport.py] [_log()] Compression: none
2026-02-11T19:03:06.957 [DEBUG] [Thread-134202] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:03:07.012 [DEBUG] [Thread-134202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:03:07.013 [DEBUG] [Thread-134202] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:03:07.014 [DEBUG] [Thread-134202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:03:07.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:03:07.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:03:07.068 [DEBUG] [Thread-134202] [transport.py] [_log()] userauth is OK
2026-02-11T19:03:07.069 [DEBUG] [Thread-134202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:03:07.069 [DEBUG] [Thread-134202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:03:07.069 [DEBUG] [Thread-134202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:03:07.069 [DEBUG] [Thread-134202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:03:07.088 [INFO] [Thread-134202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:03:07.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:03:07.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:03:07.931 [DEBUG] [Thread-134202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:03:07.931 [DEBUG] [Thread-134202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:03:07.980 [DEBUG] [Thread-134202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:03:07.980 [DEBUG] [Thread-134202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:03:07.990 [DEBUG] [Thread-134202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:03:07.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:03:07.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:03:08.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:03:08.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:03:08.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:03:08.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:03:08.026 [DEBUG] [Thread-134202] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:03:19.865 [DEBUG] [Thread-134204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:03:32.526 [DEBUG] [Thread-134205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:03:34.918 [DEBUG] [Thread-134206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:03:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:03:38.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:03:38.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:03:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 3, 16), 8.2, 59.1, 0.0, 25.04, 20.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:03:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:03:16
2026-02-11T19:03:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:03:40.810 [DEBUG] [Thread-134207] [transport.py] [_log()] starting thread (client mode): 0xa57b2e00
2026-02-11T19:03:40.811 [DEBUG] [Thread-134207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:03:40.827 [DEBUG] [Thread-134207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:03:40.827 [INFO] [Thread-134207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] client lang: <none>
2026-02-11T19:03:40.828 [DEBUG] [Thread-134207] [transport.py] [_log()] server lang: <none>
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] kex follows: False
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] Compression: none
2026-02-11T19:03:40.829 [DEBUG] [Thread-134207] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:03:40.838 [DEBUG] [Thread-134207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:03:40.839 [DEBUG] [Thread-134207] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:03:40.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:03:40.840 [DEBUG] [Thread-134207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:03:40.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:03:40.842 [DEBUG] [Thread-134207] [transport.py] [_log()] userauth is OK
2026-02-11T19:03:40.843 [DEBUG] [Thread-134207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:03:40.843 [DEBUG] [Thread-134207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:03:40.843 [DEBUG] [Thread-134207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:03:40.843 [DEBUG] [Thread-134207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:03:40.859 [INFO] [Thread-134207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:03:40.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:03:41.405 [DEBUG] [Thread-134207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:03:41.405 [DEBUG] [Thread-134207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:03:41.406 [DEBUG] [Thread-134207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:03:41.446 [DEBUG] [Thread-134207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:03:41.446 [DEBUG] [Thread-134207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:03:41.449 [DEBUG] [Thread-134207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:03:41.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:03:41.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:03:41.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:03:41.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:03:41.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:03:41.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:03:41.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:03:41.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:03:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:03:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.710557 -999.00  +20.30  18.52     66  +13.80 1 2 1 1 1   887    0 7.56 27.39 ----- 17.2 18.5 279.4 27.5 21.6 -17.8 21.6 -15.5 21.1 -15.1 21.5 -16.6
2026-02-11T19:03:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:03:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:03:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.710557
2026-02-11T19:03:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:03:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:03:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:03:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:03:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:03:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:03:16', tmtdew=8.2, humidity=59.1, cloud=0.0, wind=25.04, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:03:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:03:41.466 [DEBUG] [Thread-134207] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:03:41.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:03:41.563 [DEBUG] [Thread-134210] [transport.py] [_log()] starting thread (client mode): 0xa57b0bb0
2026-02-11T19:03:41.564 [DEBUG] [Thread-134210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:03:41.577 [DEBUG] [Thread-134210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:03:41.578 [INFO] [Thread-134210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:03:41.585 [DEBUG] [Thread-134210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:03:41.585 [DEBUG] [Thread-134210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:03:41.585 [DEBUG] [Thread-134210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:03:41.585 [DEBUG] [Thread-134210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:41.585 [DEBUG] [Thread-134210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:03:41.585 [DEBUG] [Thread-134210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] client lang: <none>
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] server lang: <none>
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] kex follows: False
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] Compression: none
2026-02-11T19:03:41.586 [DEBUG] [Thread-134210] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:03:41.642 [DEBUG] [Thread-134210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:03:41.643 [DEBUG] [Thread-134210] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:03:41.643 [DEBUG] [Thread-134210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:03:41.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:03:41.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:03:41.699 [DEBUG] [Thread-134210] [transport.py] [_log()] userauth is OK
2026-02-11T19:03:41.699 [DEBUG] [Thread-134210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:03:41.699 [DEBUG] [Thread-134210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:03:41.700 [DEBUG] [Thread-134210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:03:41.700 [DEBUG] [Thread-134210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:03:41.721 [INFO] [Thread-134210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:03:41.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:03:41.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:03:42.522 [DEBUG] [Thread-134210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:03:42.522 [DEBUG] [Thread-134210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:03:42.573 [DEBUG] [Thread-134210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:03:42.573 [DEBUG] [Thread-134210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:03:42.582 [DEBUG] [Thread-134210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:03:42.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:03:42.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:03:42.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:03:42.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:03:42.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:03:42.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:03:42.616 [DEBUG] [Thread-134210] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:03:49.952 [DEBUG] [Thread-134212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:04.660 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:04.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:05.005 [DEBUG] [Thread-134213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:12.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:04:12.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:04:12.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
2026-02-11T19:04:14.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 3, 51), 8.03, 59.88, 0.0, 25.28, 20.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:04:14.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:03:51
2026-02-11T19:04:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:04:15.326 [DEBUG] [Thread-134214] [transport.py] [_log()] starting thread (client mode): 0xa57b0760
2026-02-11T19:04:15.326 [DEBUG] [Thread-134214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:04:15.346 [DEBUG] [Thread-134214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:04:15.346 [INFO] [Thread-134214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:04:15.349 [DEBUG] [Thread-134214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:04:15.349 [DEBUG] [Thread-134214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] client lang: <none>
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] server lang: <none>
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] kex follows: False
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:04:15.350 [DEBUG] [Thread-134214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:04:15.351 [DEBUG] [Thread-134214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:04:15.351 [DEBUG] [Thread-134214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:04:15.351 [DEBUG] [Thread-134214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:04:15.351 [DEBUG] [Thread-134214] [transport.py] [_log()] Compression: none
2026-02-11T19:04:15.351 [DEBUG] [Thread-134214] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:04:15.370 [DEBUG] [Thread-134214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:04:15.371 [DEBUG] [Thread-134214] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:04:15.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:04:15.372 [DEBUG] [Thread-134214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:04:15.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:04:15.374 [DEBUG] [Thread-134214] [transport.py] [_log()] userauth is OK
2026-02-11T19:04:15.374 [DEBUG] [Thread-134214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:04:15.374 [DEBUG] [Thread-134214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:04:15.374 [DEBUG] [Thread-134214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:04:15.374 [DEBUG] [Thread-134214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:04:15.399 [INFO] [Thread-134214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:04:15.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:04:16.049 [DEBUG] [Thread-134214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:04:16.049 [DEBUG] [Thread-134214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:04:16.050 [DEBUG] [Thread-134214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:04:16.091 [DEBUG] [Thread-134214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:04:16.091 [DEBUG] [Thread-134214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:04:16.094 [DEBUG] [Thread-134214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:04:16.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:04:16.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:04:16.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:04:16.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:04:16.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:04:16.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:04:16.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:04:16.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:04:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:04:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.710904 -999.00  +20.40  15.95     66  +13.80 1 2 1 1 1   887    0 7.71 23.72 ----- 16.3 15.9 297.0 19.3 21.6 -17.2 21.6 -15.3 21.2 -14.7 21.5 -16.3
2026-02-11T19:04:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:04:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:04:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.710904
2026-02-11T19:04:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:04:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:04:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:04:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:04:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:04:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:03:51', tmtdew=8.03, humidity=59.88, cloud=0.0, wind=25.28, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:03:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:04:16.122 [DEBUG] [Thread-134214] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:04:16.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:04:16.216 [DEBUG] [Thread-134217] [transport.py] [_log()] starting thread (client mode): 0xa57c3af0
2026-02-11T19:04:16.216 [DEBUG] [Thread-134217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:04:16.230 [DEBUG] [Thread-134217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:04:16.230 [INFO] [Thread-134217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:04:16.238 [DEBUG] [Thread-134217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:04:16.238 [DEBUG] [Thread-134217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:04:16.238 [DEBUG] [Thread-134217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] client lang: <none>
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] server lang: <none>
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] kex follows: False
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] Compression: none
2026-02-11T19:04:16.239 [DEBUG] [Thread-134217] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:04:16.295 [DEBUG] [Thread-134217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:04:16.295 [DEBUG] [Thread-134217] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:04:16.296 [DEBUG] [Thread-134217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:04:16.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:04:16.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:04:16.351 [DEBUG] [Thread-134217] [transport.py] [_log()] userauth is OK
2026-02-11T19:04:16.351 [DEBUG] [Thread-134217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:04:16.351 [DEBUG] [Thread-134217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:04:16.351 [DEBUG] [Thread-134217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:04:16.352 [DEBUG] [Thread-134217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:04:16.371 [INFO] [Thread-134217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:04:16.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:04:16.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:04:17.182 [DEBUG] [Thread-134217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:04:17.182 [DEBUG] [Thread-134217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:04:17.230 [DEBUG] [Thread-134217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:04:17.231 [DEBUG] [Thread-134217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:04:17.239 [DEBUG] [Thread-134217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:04:17.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:04:17.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:04:17.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:04:17.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:04:17.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:04:17.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:04:17.271 [DEBUG] [Thread-134217] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:04:20.042 [DEBUG] [Thread-134219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:32.573 [DEBUG] [Thread-134220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:35.096 [DEBUG] [Thread-134221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:47.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:04:47.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:04:47.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:04:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 4, 27), 8.14, 59.47, 0.0, 22.96, 20.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:04:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:04:27
2026-02-11T19:04:49.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:04:49.873 [DEBUG] [Thread-134222] [transport.py] [_log()] starting thread (client mode): 0xa57b0460
2026-02-11T19:04:49.873 [DEBUG] [Thread-134222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:04:49.894 [DEBUG] [Thread-134222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:04:49.894 [INFO] [Thread-134222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] client lang: <none>
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] server lang: <none>
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] kex follows: False
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] Compression: none
2026-02-11T19:04:49.898 [DEBUG] [Thread-134222] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:04:49.917 [DEBUG] [Thread-134222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:04:49.918 [DEBUG] [Thread-134222] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:04:49.918 [DEBUG] [Thread-134222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:04:49.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:04:49.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:04:49.921 [DEBUG] [Thread-134222] [transport.py] [_log()] userauth is OK
2026-02-11T19:04:49.922 [DEBUG] [Thread-134222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:04:49.922 [DEBUG] [Thread-134222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:04:49.922 [DEBUG] [Thread-134222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:04:49.922 [DEBUG] [Thread-134222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:04:49.946 [INFO] [Thread-134222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:04:49.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:04:50.130 [DEBUG] [Thread-134224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:04:50.574 [DEBUG] [Thread-134222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:04:50.574 [DEBUG] [Thread-134222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:04:50.574 [DEBUG] [Thread-134222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:04:50.614 [DEBUG] [Thread-134222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:04:50.614 [DEBUG] [Thread-134222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:04:50.617 [DEBUG] [Thread-134222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:04:50.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:04:50.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:04:50.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:04:50.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:04:50.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:04:50.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:04:50.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:04:50.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:04:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:04:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.711598 -999.00  +20.40  18.82     65  +13.70 1 2 1 1 1   887    0 7.38 17.00 ----- 16.2 18.8 282.8 23.9 21.6 -17.4 21.5 -15.2 21.2 -14.6 21.5 -16.3
2026-02-11T19:04:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:04:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:04:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.711598
2026-02-11T19:04:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:04:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:04:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:04:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:04:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:04:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:04:27', tmtdew=8.14, humidity=59.47, cloud=0.0, wind=22.96, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:04:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:04:50.642 [DEBUG] [Thread-134222] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:04:50.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:04:50.739 [DEBUG] [Thread-134226] [transport.py] [_log()] starting thread (client mode): 0x9eb074c0
2026-02-11T19:04:50.739 [DEBUG] [Thread-134226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:04:50.753 [DEBUG] [Thread-134226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:04:50.753 [INFO] [Thread-134226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:04:50.761 [DEBUG] [Thread-134226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] client lang: <none>
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] server lang: <none>
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] kex follows: False
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:04:50.762 [DEBUG] [Thread-134226] [transport.py] [_log()] Compression: none
2026-02-11T19:04:50.763 [DEBUG] [Thread-134226] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:04:50.819 [DEBUG] [Thread-134226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:04:50.820 [DEBUG] [Thread-134226] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:04:50.820 [DEBUG] [Thread-134226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:04:50.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:04:50.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:04:50.879 [DEBUG] [Thread-134226] [transport.py] [_log()] userauth is OK
2026-02-11T19:04:50.879 [DEBUG] [Thread-134226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:04:50.879 [DEBUG] [Thread-134226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:04:50.879 [DEBUG] [Thread-134226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:04:50.879 [DEBUG] [Thread-134226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:04:50.897 [INFO] [Thread-134226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:04:50.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:04:50.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:04:51.723 [DEBUG] [Thread-134226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:04:51.723 [DEBUG] [Thread-134226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:04:51.774 [DEBUG] [Thread-134226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:04:51.774 [DEBUG] [Thread-134226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:04:51.783 [DEBUG] [Thread-134226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:04:51.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:04:51.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')
2026-02-11T19:04:51.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:04:51.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:04:51.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:04:51.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:04:51.819 [DEBUG] [Thread-134226] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:05:04.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:05:04.814 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:05:05.161 [DEBUG] [Thread-134228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:05:20.210 [DEBUG] [Thread-134229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:05:21.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:05:21.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:05:21.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
2026-02-11T19:05:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 5, 2), 8.14, 59.47, 0.0, 21.84, 20.48, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:05:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:05:02
2026-02-11T19:05:24.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:05:24.887 [DEBUG] [Thread-134230] [transport.py] [_log()] starting thread (client mode): 0xa57c1750
2026-02-11T19:05:24.888 [DEBUG] [Thread-134230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:05:24.907 [DEBUG] [Thread-134230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:05:24.907 [INFO] [Thread-134230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] client lang: <none>
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] server lang: <none>
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] kex follows: False
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] Compression: none
2026-02-11T19:05:24.910 [DEBUG] [Thread-134230] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:05:24.930 [DEBUG] [Thread-134230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:05:24.930 [DEBUG] [Thread-134230] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:05:24.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:05:24.931 [DEBUG] [Thread-134230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:05:24.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:05:24.973 [DEBUG] [Thread-134230] [transport.py] [_log()] userauth is OK
2026-02-11T19:05:24.973 [DEBUG] [Thread-134230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:05:24.974 [DEBUG] [Thread-134230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:05:24.974 [DEBUG] [Thread-134230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:05:24.974 [DEBUG] [Thread-134230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:05:25.006 [INFO] [Thread-134230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:05:25.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:05:25.623 [DEBUG] [Thread-134230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:05:25.623 [DEBUG] [Thread-134230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:05:25.624 [DEBUG] [Thread-134230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:05:25.664 [DEBUG] [Thread-134230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:05:25.664 [DEBUG] [Thread-134230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:05:25.668 [DEBUG] [Thread-134230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:05:25.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:05:25.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:05:25.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:05:25.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:05:25.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:05:25.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:05:25.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:05:25.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:05:25.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:05:25.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.711946 -999.00  +20.50  17.91     64  +13.60 1 2 1 1 1   887    0 7.19 14.29 ----- 18.7 17.9 270.8 24.3 21.6 -17.2 21.5 -15.2 21.2 -14.8 21.5 -16.4
2026-02-11T19:05:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:05:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:05:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.711946
2026-02-11T19:05:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:05:25.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:05:25.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:05:25.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:05:25.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:05:25.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:05:02', tmtdew=8.14, humidity=59.47, cloud=0.0, wind=21.84, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:05:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:05:25.697 [DEBUG] [Thread-134230] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:05:25.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:05:25.793 [DEBUG] [Thread-134233] [transport.py] [_log()] starting thread (client mode): 0xa5742ce0
2026-02-11T19:05:25.793 [DEBUG] [Thread-134233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:05:25.809 [DEBUG] [Thread-134233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:05:25.809 [INFO] [Thread-134233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] client lang: <none>
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] server lang: <none>
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] kex follows: False
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:05:25.817 [DEBUG] [Thread-134233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:05:25.818 [DEBUG] [Thread-134233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:05:25.818 [DEBUG] [Thread-134233] [transport.py] [_log()] Compression: none
2026-02-11T19:05:25.818 [DEBUG] [Thread-134233] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:05:25.877 [DEBUG] [Thread-134233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:05:25.878 [DEBUG] [Thread-134233] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:05:25.879 [DEBUG] [Thread-134233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:05:25.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:05:25.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:05:25.933 [DEBUG] [Thread-134233] [transport.py] [_log()] userauth is OK
2026-02-11T19:05:25.934 [DEBUG] [Thread-134233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:05:25.934 [DEBUG] [Thread-134233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:05:25.934 [DEBUG] [Thread-134233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:05:25.934 [DEBUG] [Thread-134233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:05:25.953 [INFO] [Thread-134233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:05:25.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:05:25.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:05:26.792 [DEBUG] [Thread-134233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:05:26.792 [DEBUG] [Thread-134233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:05:26.840 [DEBUG] [Thread-134233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:05:26.841 [DEBUG] [Thread-134233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:05:26.850 [DEBUG] [Thread-134233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:05:26.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:05:26.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:05:26.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
2026-02-11T19:05:26.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:05:26.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:05:26.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:05:26.895 [DEBUG] [Thread-134233] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:05:32.622 [DEBUG] [Thread-134235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:05:35.246 [DEBUG] [Thread-134236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:05:50.297 [DEBUG] [Thread-134237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:05:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:05:56.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:05:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:05:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 5, 38), 8.63, 57.74, 0.0, 26.15, 21.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:05:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:05:38
2026-02-11T19:05:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:05:59.539 [DEBUG] [Thread-134238] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-11T19:05:59.540 [DEBUG] [Thread-134238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:05:59.559 [DEBUG] [Thread-134238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:05:59.559 [INFO] [Thread-134238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:05:59.562 [DEBUG] [Thread-134238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] client lang: <none>
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] server lang: <none>
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] kex follows: False
2026-02-11T19:05:59.563 [DEBUG] [Thread-134238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:05:59.564 [DEBUG] [Thread-134238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:05:59.564 [DEBUG] [Thread-134238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:05:59.564 [DEBUG] [Thread-134238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:05:59.564 [DEBUG] [Thread-134238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:05:59.564 [DEBUG] [Thread-134238] [transport.py] [_log()] Compression: none
2026-02-11T19:05:59.564 [DEBUG] [Thread-134238] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:05:59.583 [DEBUG] [Thread-134238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:05:59.583 [DEBUG] [Thread-134238] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:05:59.584 [DEBUG] [Thread-134238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:05:59.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:05:59.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:05:59.625 [DEBUG] [Thread-134238] [transport.py] [_log()] userauth is OK
2026-02-11T19:05:59.625 [DEBUG] [Thread-134238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:05:59.625 [DEBUG] [Thread-134238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:05:59.626 [DEBUG] [Thread-134238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:05:59.626 [DEBUG] [Thread-134238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:05:59.645 [INFO] [Thread-134238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:05:59.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:06:00.291 [DEBUG] [Thread-134238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:06:00.292 [DEBUG] [Thread-134238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:06:00.292 [DEBUG] [Thread-134238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:06:00.332 [DEBUG] [Thread-134238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:06:00.332 [DEBUG] [Thread-134238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:06:00.336 [DEBUG] [Thread-134238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:06:00.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:06:00.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:06:00.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:06:00.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:06:00.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:06:00.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:06:00.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:06:00.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:06:00.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:06:00.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.712293 -999.00  +20.50  22.94     64  +13.60 1 2 1 1 1   887    0 7.24 12.91 ----- 25.8 22.9 282.4 28.3 21.5 -17.1 21.5 -15.1 21.2 -15.1 21.5 -16.4
2026-02-11T19:06:00.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:06:00.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:06:00.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.712293
2026-02-11T19:06:00.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:06:00.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:06:00.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:06:00.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:06:00.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:06:00.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:05:38', tmtdew=8.63, humidity=57.74, cloud=0.0, wind=26.15, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:05:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:06:00.363 [DEBUG] [Thread-134238] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:06:00.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:06:00.466 [DEBUG] [Thread-134241] [transport.py] [_log()] starting thread (client mode): 0xa2d5fa60
2026-02-11T19:06:00.466 [DEBUG] [Thread-134241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:06:00.481 [DEBUG] [Thread-134241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:06:00.481 [INFO] [Thread-134241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] client lang: <none>
2026-02-11T19:06:00.489 [DEBUG] [Thread-134241] [transport.py] [_log()] server lang: <none>
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] kex follows: False
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] Compression: none
2026-02-11T19:06:00.490 [DEBUG] [Thread-134241] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:06:00.548 [DEBUG] [Thread-134241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:06:00.549 [DEBUG] [Thread-134241] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:06:00.549 [DEBUG] [Thread-134241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:06:00.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:06:00.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:06:00.604 [DEBUG] [Thread-134241] [transport.py] [_log()] userauth is OK
2026-02-11T19:06:00.605 [DEBUG] [Thread-134241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:06:00.605 [DEBUG] [Thread-134241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:06:00.605 [DEBUG] [Thread-134241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:06:00.605 [DEBUG] [Thread-134241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:06:00.631 [INFO] [Thread-134241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:06:00.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:06:00.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:06:01.445 [DEBUG] [Thread-134241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:06:01.445 [DEBUG] [Thread-134241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:06:01.493 [DEBUG] [Thread-134241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:06:01.494 [DEBUG] [Thread-134241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:06:01.502 [DEBUG] [Thread-134241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:06:01.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:06:01.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:06:01.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:06:01.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:06:01.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:06:01.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:06:01.537 [DEBUG] [Thread-134241] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:06:04.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:06:04.957 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:06:05.329 [DEBUG] [Thread-134243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:06:20.389 [DEBUG] [Thread-134244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:06:31.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:06:31.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:06:31.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
2026-02-11T19:06:32.690 [DEBUG] [Thread-134245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:06:33.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 6, 14), 8.32, 58.85, 0.0, 26.59, 20.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:06:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:06:14
2026-02-11T19:06:34.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:06:34.432 [DEBUG] [Thread-134246] [transport.py] [_log()] starting thread (client mode): 0xa57b3220
2026-02-11T19:06:34.432 [DEBUG] [Thread-134246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:06:34.453 [DEBUG] [Thread-134246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:06:34.453 [INFO] [Thread-134246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] client lang: <none>
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] server lang: <none>
2026-02-11T19:06:34.456 [DEBUG] [Thread-134246] [transport.py] [_log()] kex follows: False
2026-02-11T19:06:34.457 [DEBUG] [Thread-134246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:06:34.457 [DEBUG] [Thread-134246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:06:34.457 [DEBUG] [Thread-134246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:06:34.457 [DEBUG] [Thread-134246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:06:34.457 [DEBUG] [Thread-134246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:06:34.457 [DEBUG] [Thread-134246] [transport.py] [_log()] Compression: none
2026-02-11T19:06:34.457 [DEBUG] [Thread-134246] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:06:34.474 [DEBUG] [Thread-134246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:06:34.474 [DEBUG] [Thread-134246] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:06:34.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:06:34.476 [DEBUG] [Thread-134246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:06:34.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:06:34.477 [DEBUG] [Thread-134246] [transport.py] [_log()] userauth is OK
2026-02-11T19:06:34.478 [DEBUG] [Thread-134246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:06:34.478 [DEBUG] [Thread-134246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:06:34.478 [DEBUG] [Thread-134246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:06:34.478 [DEBUG] [Thread-134246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:06:34.503 [INFO] [Thread-134246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:06:34.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:06:35.140 [DEBUG] [Thread-134246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:06:35.140 [DEBUG] [Thread-134246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:06:35.140 [DEBUG] [Thread-134246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:06:35.181 [DEBUG] [Thread-134246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:06:35.181 [DEBUG] [Thread-134246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:06:35.185 [DEBUG] [Thread-134246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:06:35.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:06:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:06:35.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:06:35.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:06:35.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:06:35.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:06:35.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:06:35.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:06:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:06:35.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.712640 -999.00  +20.40  21.15     65  +13.70 1 2 1 1 1   887    0 7.11 9.01 ----- 19.7 21.1 279.2 30.9 21.5 -17.2 21.5 -15.2 21.2 -15.0 21.4 -16.2
2026-02-11T19:06:35.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:06:35.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:06:35.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.712640
2026-02-11T19:06:35.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:06:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:06:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:06:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:06:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:06:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:06:14', tmtdew=8.32, humidity=58.85, cloud=0.0, wind=26.59, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:06:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:06:35.210 [DEBUG] [Thread-134246] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:06:35.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:06:35.307 [DEBUG] [Thread-134249] [transport.py] [_log()] starting thread (client mode): 0xa5759de0
2026-02-11T19:06:35.308 [DEBUG] [Thread-134249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:06:35.324 [DEBUG] [Thread-134249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:06:35.324 [INFO] [Thread-134249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:06:35.335 [DEBUG] [Thread-134249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] client lang: <none>
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] server lang: <none>
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] kex follows: False
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] Compression: none
2026-02-11T19:06:35.336 [DEBUG] [Thread-134249] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:06:35.396 [DEBUG] [Thread-134249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:06:35.397 [DEBUG] [Thread-134249] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:06:35.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:06:35.398 [DEBUG] [Thread-134249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:06:35.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:06:35.424 [DEBUG] [Thread-134251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:06:35.455 [DEBUG] [Thread-134249] [transport.py] [_log()] userauth is OK
2026-02-11T19:06:35.455 [DEBUG] [Thread-134249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:06:35.456 [DEBUG] [Thread-134249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:06:35.456 [DEBUG] [Thread-134249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:06:35.456 [DEBUG] [Thread-134249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:06:35.483 [INFO] [Thread-134249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:06:35.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:06:35.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:06:36.286 [DEBUG] [Thread-134249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:06:36.287 [DEBUG] [Thread-134249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:06:36.334 [DEBUG] [Thread-134249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:06:36.335 [DEBUG] [Thread-134249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:06:36.346 [DEBUG] [Thread-134249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:06:36.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:06:36.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:06:36.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:06:36.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:06:36.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:06:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:06:36.389 [DEBUG] [Thread-134249] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:06:50.486 [DEBUG] [Thread-134252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:07:05.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:07:05.106 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:07:05.525 [DEBUG] [Thread-134253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:07:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:07:06.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:07: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
2026-02-11T19:07:08.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 6, 49), 8.23, 59.02, 0.0, 23.68, 20.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:07:08.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:06:49
2026-02-11T19:07:08.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:07:08.801 [DEBUG] [Thread-134254] [transport.py] [_log()] starting thread (client mode): 0xa57c1660
2026-02-11T19:07:08.801 [DEBUG] [Thread-134254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:07:08.821 [DEBUG] [Thread-134254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:07:08.821 [INFO] [Thread-134254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] client lang: <none>
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] server lang: <none>
2026-02-11T19:07:08.824 [DEBUG] [Thread-134254] [transport.py] [_log()] kex follows: False
2026-02-11T19:07:08.825 [DEBUG] [Thread-134254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:07:08.825 [DEBUG] [Thread-134254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:07:08.825 [DEBUG] [Thread-134254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:07:08.825 [DEBUG] [Thread-134254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:07:08.825 [DEBUG] [Thread-134254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:07:08.825 [DEBUG] [Thread-134254] [transport.py] [_log()] Compression: none
2026-02-11T19:07:08.825 [DEBUG] [Thread-134254] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:07:08.845 [DEBUG] [Thread-134254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:07:08.845 [DEBUG] [Thread-134254] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:07:08.846 [DEBUG] [Thread-134254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:07:08.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:07:08.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:07:08.849 [DEBUG] [Thread-134254] [transport.py] [_log()] userauth is OK
2026-02-11T19:07:08.849 [DEBUG] [Thread-134254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:07:08.849 [DEBUG] [Thread-134254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:07:08.849 [DEBUG] [Thread-134254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:07:08.849 [DEBUG] [Thread-134254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:07:08.870 [INFO] [Thread-134254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:07:08.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:07:09.491 [DEBUG] [Thread-134254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:07:09.491 [DEBUG] [Thread-134254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:07:09.492 [DEBUG] [Thread-134254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:07:09.533 [DEBUG] [Thread-134254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:07:09.533 [DEBUG] [Thread-134254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:07:09.536 [DEBUG] [Thread-134254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:07:09.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:07:09.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:07:09.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:07:09.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:07:09.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:07:09.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:07:09.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:07:09.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:07:09.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:07:09.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.712987 -999.00  +20.40  18.54     65  +13.80 1 2 1 1 1   887    0 6.97 4.13 ----- 20.3 18.5 277.6 23.8 21.5 -17.1 21.5 -15.1 21.2 -15.0 21.4 -16.4
2026-02-11T19:07:09.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:07:09.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:07:09.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.712987
2026-02-11T19:07:09.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:07:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:07:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:07:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:07:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:07:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:06:49', tmtdew=8.23, humidity=59.02, cloud=0.0, wind=23.68, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:06:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:07:09.563 [DEBUG] [Thread-134254] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:07:09.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:07:09.659 [DEBUG] [Thread-134257] [transport.py] [_log()] starting thread (client mode): 0xa5759630
2026-02-11T19:07:09.659 [DEBUG] [Thread-134257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:07:09.673 [DEBUG] [Thread-134257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:07:09.673 [INFO] [Thread-134257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] client lang: <none>
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] server lang: <none>
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] kex follows: False
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:07:09.682 [DEBUG] [Thread-134257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:07:09.683 [DEBUG] [Thread-134257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:07:09.683 [DEBUG] [Thread-134257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:07:09.683 [DEBUG] [Thread-134257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:07:09.683 [DEBUG] [Thread-134257] [transport.py] [_log()] Compression: none
2026-02-11T19:07:09.683 [DEBUG] [Thread-134257] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:07:09.739 [DEBUG] [Thread-134257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:07:09.740 [DEBUG] [Thread-134257] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:07:09.740 [DEBUG] [Thread-134257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:07:09.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:07:09.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:07:09.795 [DEBUG] [Thread-134257] [transport.py] [_log()] userauth is OK
2026-02-11T19:07:09.796 [DEBUG] [Thread-134257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:07:09.796 [DEBUG] [Thread-134257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:07:09.796 [DEBUG] [Thread-134257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:07:09.796 [DEBUG] [Thread-134257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:07:09.819 [INFO] [Thread-134257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:07:09.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:07:09.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:07:10.635 [DEBUG] [Thread-134257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:07:10.636 [DEBUG] [Thread-134257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:07:10.683 [DEBUG] [Thread-134257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:07:10.683 [DEBUG] [Thread-134257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:07:10.693 [DEBUG] [Thread-134257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:07:10.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:07: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')
2026-02-11T19:07:10.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:07:10.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:07:10.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:07:10.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:07:10.729 [DEBUG] [Thread-134257] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:07:20.562 [DEBUG] [Thread-134259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:07:32.732 [DEBUG] [Thread-134260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:07:35.609 [DEBUG] [Thread-134261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:07:40.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:07:40.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:07:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:07:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 7, 24), 8.24, 58.97, 0.0, 23.91, 20.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:07:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:07:24
2026-02-11T19:07:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:07:43.182 [DEBUG] [Thread-134262] [transport.py] [_log()] starting thread (client mode): 0xa575a6e0
2026-02-11T19:07:43.182 [DEBUG] [Thread-134262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:07:43.201 [DEBUG] [Thread-134262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:07:43.201 [INFO] [Thread-134262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:07:43.205 [DEBUG] [Thread-134262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:07:43.205 [DEBUG] [Thread-134262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:07:43.205 [DEBUG] [Thread-134262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:07:43.205 [DEBUG] [Thread-134262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:43.205 [DEBUG] [Thread-134262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:43.205 [DEBUG] [Thread-134262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] client lang: <none>
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] server lang: <none>
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] kex follows: False
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] Compression: none
2026-02-11T19:07:43.206 [DEBUG] [Thread-134262] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:07:43.222 [DEBUG] [Thread-134262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:07:43.223 [DEBUG] [Thread-134262] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:07:43.223 [DEBUG] [Thread-134262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:07:43.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:07:43.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:07:43.226 [DEBUG] [Thread-134262] [transport.py] [_log()] userauth is OK
2026-02-11T19:07:43.226 [DEBUG] [Thread-134262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:07:43.226 [DEBUG] [Thread-134262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:07:43.226 [DEBUG] [Thread-134262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:07:43.226 [DEBUG] [Thread-134262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:07:43.249 [INFO] [Thread-134262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:07:43.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:07:43.851 [DEBUG] [Thread-134262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:07:43.851 [DEBUG] [Thread-134262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:07:43.851 [DEBUG] [Thread-134262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:07:43.892 [DEBUG] [Thread-134262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:07:43.893 [DEBUG] [Thread-134262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:07:43.896 [DEBUG] [Thread-134262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:07:43.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:07:43.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:07:43.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:07:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:07:43.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:07:43.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:07:43.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:07:43.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:07:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:07:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.713335 -999.00  +20.50  17.48     65  +13.80 1 2 1 1 1   887    0 6.89 0.41 ----- 19.4 17.5 292.6 22.4 21.5 -16.7 21.5 -15.0 21.2 -14.7 21.5 -16.1
2026-02-11T19:07:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:07:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:07:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.713335
2026-02-11T19:07:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:07:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:07:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:07:43.919 [DEBUG] [Thread-134262] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:07:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:07:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:07:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:07:24', tmtdew=8.24, humidity=58.97, cloud=0.0, wind=23.91, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:07:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:07:44.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:07:44.016 [DEBUG] [Thread-134265] [transport.py] [_log()] starting thread (client mode): 0xa57e2e30
2026-02-11T19:07:44.016 [DEBUG] [Thread-134265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:07:44.037 [DEBUG] [Thread-134265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:07:44.037 [INFO] [Thread-134265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:07:44.045 [DEBUG] [Thread-134265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:07:44.045 [DEBUG] [Thread-134265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:07:44.045 [DEBUG] [Thread-134265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:07:44.045 [DEBUG] [Thread-134265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] client lang: <none>
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] server lang: <none>
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] kex follows: False
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] Compression: none
2026-02-11T19:07:44.046 [DEBUG] [Thread-134265] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:07:44.106 [DEBUG] [Thread-134265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:07:44.106 [DEBUG] [Thread-134265] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:07:44.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:07:44.107 [DEBUG] [Thread-134265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:07:44.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:07:44.163 [DEBUG] [Thread-134265] [transport.py] [_log()] userauth is OK
2026-02-11T19:07:44.163 [DEBUG] [Thread-134265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:07:44.163 [DEBUG] [Thread-134265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:07:44.163 [DEBUG] [Thread-134265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:07:44.163 [DEBUG] [Thread-134265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:07:44.182 [INFO] [Thread-134265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:07:44.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:07:44.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:07:45.006 [DEBUG] [Thread-134265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:07:45.007 [DEBUG] [Thread-134265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:07:45.054 [DEBUG] [Thread-134265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:07:45.055 [DEBUG] [Thread-134265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:07:45.065 [DEBUG] [Thread-134265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:07:45.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:07:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:07:45.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:07:45.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:07:45.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:07:45.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:07:45.104 [DEBUG] [Thread-134265] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:07:50.656 [DEBUG] [Thread-134267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:05.247 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:05.248 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:05.706 [DEBUG] [Thread-134268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:08:15.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:08:15.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:08:17.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 8, 1), 8.47, 58.17, 0.0, 24.17, 20.75, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:08:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:08:01
2026-02-11T19:08:17.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:08:17.529 [DEBUG] [Thread-134269] [transport.py] [_log()] starting thread (client mode): 0xa57e18a0
2026-02-11T19:08:17.529 [DEBUG] [Thread-134269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:08:17.550 [DEBUG] [Thread-134269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:08:17.551 [INFO] [Thread-134269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:17.553 [DEBUG] [Thread-134269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] client lang: <none>
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] server lang: <none>
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] kex follows: False
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] Compression: none
2026-02-11T19:08:17.554 [DEBUG] [Thread-134269] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:08:17.570 [DEBUG] [Thread-134269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:08:17.571 [DEBUG] [Thread-134269] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:08:17.571 [DEBUG] [Thread-134269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:08:17.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:08:17.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:08:17.573 [DEBUG] [Thread-134269] [transport.py] [_log()] userauth is OK
2026-02-11T19:08:17.573 [DEBUG] [Thread-134269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:08:17.574 [DEBUG] [Thread-134269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:08:17.574 [DEBUG] [Thread-134269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:08:17.574 [DEBUG] [Thread-134269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:08:17.598 [INFO] [Thread-134269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:08:17.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:08:18.390 [DEBUG] [Thread-134269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:08:18.390 [DEBUG] [Thread-134269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:08:18.391 [DEBUG] [Thread-134269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:08:18.431 [DEBUG] [Thread-134269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:08:18.432 [DEBUG] [Thread-134269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:08:18.435 [DEBUG] [Thread-134269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:08:18.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:08:18.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:08:18.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:08:18.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:08:18.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:08:18.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:08:18.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:08:18.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:08:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:08:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.713682 -999.00  +20.60  18.25     62  +13.10 1 2 1 1 1   887    0 6.86 -0.51 ----- 16.8 18.2 296.6 23.3 21.5 -16.6 21.5 -14.9 21.3 -14.5 21.5 -15.9
2026-02-11T19:08:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:08:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:08:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.713682
2026-02-11T19:08:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:08:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:08:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:08:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:08:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:08:18.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:08:01', tmtdew=8.47, humidity=58.17, cloud=0.0, wind=24.17, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:07:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:08:18.462 [DEBUG] [Thread-134269] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:08:18.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:08:18.555 [DEBUG] [Thread-134272] [transport.py] [_log()] starting thread (client mode): 0xa2db7070
2026-02-11T19:08:18.555 [DEBUG] [Thread-134272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:08:18.570 [DEBUG] [Thread-134272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:08:18.571 [INFO] [Thread-134272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:08:18.578 [DEBUG] [Thread-134272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:08:18.578 [DEBUG] [Thread-134272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:08:18.578 [DEBUG] [Thread-134272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:08:18.578 [DEBUG] [Thread-134272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:18.578 [DEBUG] [Thread-134272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:18.578 [DEBUG] [Thread-134272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] client lang: <none>
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] server lang: <none>
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] kex follows: False
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] Compression: none
2026-02-11T19:08:18.579 [DEBUG] [Thread-134272] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:08:18.642 [DEBUG] [Thread-134272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:08:18.642 [DEBUG] [Thread-134272] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:08:18.643 [DEBUG] [Thread-134272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:08:18.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:08:18.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:08:18.698 [DEBUG] [Thread-134272] [transport.py] [_log()] userauth is OK
2026-02-11T19:08:18.698 [DEBUG] [Thread-134272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:08:18.698 [DEBUG] [Thread-134272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:08:18.698 [DEBUG] [Thread-134272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:08:18.698 [DEBUG] [Thread-134272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:08:18.717 [INFO] [Thread-134272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:08:18.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:08:18.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:08:19.548 [DEBUG] [Thread-134272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:08:19.548 [DEBUG] [Thread-134272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:08:19.596 [DEBUG] [Thread-134272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:08:19.596 [DEBUG] [Thread-134272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:08:19.606 [DEBUG] [Thread-134272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:08:19.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:08:19.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:08:19.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:08:19.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:08:19.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:08:19.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:08:19.640 [DEBUG] [Thread-134272] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:08:20.744 [DEBUG] [Thread-134274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:32.782 [DEBUG] [Thread-134275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:35.791 [DEBUG] [Thread-134276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:08:49.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:08:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:08:50.827 [DEBUG] [Thread-134277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:08:51.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 8, 37), 8.71, 57.51, 0.0, 26.5, 21.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:08:51.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:08:37
2026-02-11T19:08:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:08:52.020 [DEBUG] [Thread-134278] [transport.py] [_log()] starting thread (client mode): 0xa2d54940
2026-02-11T19:08:52.020 [DEBUG] [Thread-134278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:08:52.041 [DEBUG] [Thread-134278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:08:52.041 [INFO] [Thread-134278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:08:52.043 [DEBUG] [Thread-134278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:08:52.043 [DEBUG] [Thread-134278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:08:52.043 [DEBUG] [Thread-134278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:08:52.043 [DEBUG] [Thread-134278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:52.043 [DEBUG] [Thread-134278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:52.043 [DEBUG] [Thread-134278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] client lang: <none>
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] server lang: <none>
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] kex follows: False
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] Compression: none
2026-02-11T19:08:52.044 [DEBUG] [Thread-134278] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:08:52.065 [DEBUG] [Thread-134278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:08:52.066 [DEBUG] [Thread-134278] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:08:52.067 [DEBUG] [Thread-134278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:08:52.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:08:52.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:08:52.069 [DEBUG] [Thread-134278] [transport.py] [_log()] userauth is OK
2026-02-11T19:08:52.069 [DEBUG] [Thread-134278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:08:52.069 [DEBUG] [Thread-134278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:08:52.069 [DEBUG] [Thread-134278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:08:52.070 [DEBUG] [Thread-134278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:08:52.093 [INFO] [Thread-134278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:08:52.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:08:52.683 [DEBUG] [Thread-134278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:08:52.683 [DEBUG] [Thread-134278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:08:52.684 [DEBUG] [Thread-134278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:08:52.725 [DEBUG] [Thread-134278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:08:52.725 [DEBUG] [Thread-134278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:08:52.729 [DEBUG] [Thread-134278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:08:52.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:08:52.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:08:52.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:08:52.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:08:52.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:08:52.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:08:52.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:08:52.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:08:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:08:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.714029 -999.00  +20.60  22.33     62  +13.30 1 2 1 1 1   887    0 6.91 -0.12 ----- 21.6 22.3 283.4 26.5 21.5 -16.7 21.5 -15.0 21.2 -14.9 21.5 -16.0
2026-02-11T19:08:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:08:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:08:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.714029
2026-02-11T19:08:52.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:08:52.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:08:52.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:08:52.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:08:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:08:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:08:37', tmtdew=8.71, humidity=57.51, cloud=0.0, wind=26.5, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:08:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:08:52.754 [DEBUG] [Thread-134278] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:08:52.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:08:52.854 [DEBUG] [Thread-134281] [transport.py] [_log()] starting thread (client mode): 0xa5772dd0
2026-02-11T19:08:52.854 [DEBUG] [Thread-134281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:08:52.869 [DEBUG] [Thread-134281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:08:52.869 [INFO] [Thread-134281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:08:52.876 [DEBUG] [Thread-134281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:08:52.876 [DEBUG] [Thread-134281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] client lang: <none>
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] server lang: <none>
2026-02-11T19:08:52.877 [DEBUG] [Thread-134281] [transport.py] [_log()] kex follows: False
2026-02-11T19:08:52.878 [DEBUG] [Thread-134281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:08:52.878 [DEBUG] [Thread-134281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:08:52.878 [DEBUG] [Thread-134281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:08:52.878 [DEBUG] [Thread-134281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:08:52.878 [DEBUG] [Thread-134281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:08:52.878 [DEBUG] [Thread-134281] [transport.py] [_log()] Compression: none
2026-02-11T19:08:52.878 [DEBUG] [Thread-134281] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:08:52.933 [DEBUG] [Thread-134281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:08:52.933 [DEBUG] [Thread-134281] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:08:52.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:08:52.934 [DEBUG] [Thread-134281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:08:52.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:08:52.995 [DEBUG] [Thread-134281] [transport.py] [_log()] userauth is OK
2026-02-11T19:08:52.995 [DEBUG] [Thread-134281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:08:52.996 [DEBUG] [Thread-134281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:08:52.996 [DEBUG] [Thread-134281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:08:52.996 [DEBUG] [Thread-134281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:08:53.020 [INFO] [Thread-134281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:08:53.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:08:53.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:08:53.879 [DEBUG] [Thread-134281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:08:53.879 [DEBUG] [Thread-134281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:08:53.926 [DEBUG] [Thread-134281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:08:53.926 [DEBUG] [Thread-134281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:08:53.935 [DEBUG] [Thread-134281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:08:53.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:08:53.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:08:53.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:08:53.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:08:53.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:08:53.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:08:53.971 [DEBUG] [Thread-134281] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:09:05.387 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:09:05.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:09:05.863 [DEBUG] [Thread-134283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:09:20.919 [DEBUG] [Thread-134284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:09:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:09:23.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:09:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:09:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 9, 13), 8.86, 57.01, 0.0, 25.51, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:09:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:09:13
2026-02-11T19:09:26.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:09:26.665 [DEBUG] [Thread-134285] [transport.py] [_log()] starting thread (client mode): 0x9eb05090
2026-02-11T19:09:26.665 [DEBUG] [Thread-134285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:09:26.685 [DEBUG] [Thread-134285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:09:26.685 [INFO] [Thread-134285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:09:26.688 [DEBUG] [Thread-134285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:09:26.688 [DEBUG] [Thread-134285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:09:26.688 [DEBUG] [Thread-134285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:09:26.688 [DEBUG] [Thread-134285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:09:26.688 [DEBUG] [Thread-134285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] client lang: <none>
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] server lang: <none>
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] kex follows: False
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] Compression: none
2026-02-11T19:09:26.689 [DEBUG] [Thread-134285] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:09:26.708 [DEBUG] [Thread-134285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:09:26.709 [DEBUG] [Thread-134285] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:09:26.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:09:26.711 [DEBUG] [Thread-134285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:09:26.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:09:26.713 [DEBUG] [Thread-134285] [transport.py] [_log()] userauth is OK
2026-02-11T19:09:26.713 [DEBUG] [Thread-134285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:09:26.713 [DEBUG] [Thread-134285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:09:26.713 [DEBUG] [Thread-134285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:09:26.713 [DEBUG] [Thread-134285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:09:26.739 [INFO] [Thread-134285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:09:26.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:09:27.373 [DEBUG] [Thread-134285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:09:27.374 [DEBUG] [Thread-134285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:09:27.374 [DEBUG] [Thread-134285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:09:27.414 [DEBUG] [Thread-134285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:09:27.414 [DEBUG] [Thread-134285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:09:27.417 [DEBUG] [Thread-134285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:09:27.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:09:27.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:09:27.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:09:27.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:09:27.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:09:27.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:09:27.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:09:27.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:09:27.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:09:27.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.714376 -999.00  +20.70  18.92     63  +13.40 1 2 1 1 1   887    0 6.92 -0.99 ----- 17.3 18.9 280.0 25.8 21.5 -16.6 21.5 -15.0 21.4 -14.7 21.6 -15.9
2026-02-11T19:09:27.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:09:27.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:09:27.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.714376
2026-02-11T19:09:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:09:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:09:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:09:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:09:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:09:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:09:13', tmtdew=8.86, humidity=57.01, cloud=0.0, wind=25.51, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:08:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:09:27.444 [DEBUG] [Thread-134285] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:09:27.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:09:27.548 [DEBUG] [Thread-134288] [transport.py] [_log()] starting thread (client mode): 0xa57e2710
2026-02-11T19:09:27.548 [DEBUG] [Thread-134288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:09:27.564 [DEBUG] [Thread-134288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:09:27.564 [INFO] [Thread-134288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:09:27.571 [DEBUG] [Thread-134288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:09:27.571 [DEBUG] [Thread-134288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:09:27.571 [DEBUG] [Thread-134288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:09:27.571 [DEBUG] [Thread-134288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:09:27.571 [DEBUG] [Thread-134288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] client lang: <none>
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] server lang: <none>
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] kex follows: False
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] Compression: none
2026-02-11T19:09:27.572 [DEBUG] [Thread-134288] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:09:27.629 [DEBUG] [Thread-134288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:09:27.630 [DEBUG] [Thread-134288] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:09:27.631 [DEBUG] [Thread-134288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:09:27.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:09:27.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:09:27.689 [DEBUG] [Thread-134288] [transport.py] [_log()] userauth is OK
2026-02-11T19:09:27.689 [DEBUG] [Thread-134288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:09:27.689 [DEBUG] [Thread-134288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:09:27.689 [DEBUG] [Thread-134288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:09:27.690 [DEBUG] [Thread-134288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:09:27.712 [INFO] [Thread-134288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:09:27.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:09:27.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:09:28.550 [DEBUG] [Thread-134288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:09:28.550 [DEBUG] [Thread-134288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:09:28.601 [DEBUG] [Thread-134288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:09:28.601 [DEBUG] [Thread-134288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:09:28.612 [DEBUG] [Thread-134288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:09:28.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:09:28.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:09:28.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:09:28.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:09:28.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:09:28.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:09:28.658 [DEBUG] [Thread-134288] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:09:32.840 [DEBUG] [Thread-134290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:09:35.954 [DEBUG] [Thread-134291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:09:51.004 [DEBUG] [Thread-134292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:09:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:09:58.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:09:58.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:10:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 9, 48), 9.14, 55.97, 0.0, 24.31, 20.88, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:10:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:09:48
2026-02-11T19:10:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:10:01.445 [DEBUG] [Thread-134293] [transport.py] [_log()] starting thread (client mode): 0xa57717e0
2026-02-11T19:10:01.446 [DEBUG] [Thread-134293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:10:01.456 [DEBUG] [Thread-134293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:10:01.456 [INFO] [Thread-134293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] client lang: <none>
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] server lang: <none>
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] kex follows: False
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] Compression: none
2026-02-11T19:10:01.457 [DEBUG] [Thread-134293] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:10:01.468 [DEBUG] [Thread-134293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:10:01.468 [DEBUG] [Thread-134293] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:10:01.468 [DEBUG] [Thread-134293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:10:01.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:10:01.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:10:01.469 [DEBUG] [Thread-134293] [transport.py] [_log()] userauth is OK
2026-02-11T19:10:01.469 [DEBUG] [Thread-134293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:10:01.469 [DEBUG] [Thread-134293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:10:01.469 [DEBUG] [Thread-134293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:10:01.469 [DEBUG] [Thread-134293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:10:01.478 [INFO] [Thread-134293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:10:01.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:10:02.050 [DEBUG] [Thread-134293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:10:02.050 [DEBUG] [Thread-134293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:10:02.050 [DEBUG] [Thread-134293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:10:02.091 [DEBUG] [Thread-134293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:10:02.092 [DEBUG] [Thread-134293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:10:02.095 [DEBUG] [Thread-134293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:10:02.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:10:02.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:10:02.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:10:02.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:10:02.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:10:02.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:10:02.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:10:02.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:10:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:10:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.714723 -999.00  +20.70  20.00     62  +13.30 1 2 1 1 1   887    0 7.02 -2.46 ----- 18.8 20.0 270.6 27.6 21.6 -16.7 21.6 -15.2 21.4 -14.7 21.6 -16.2
2026-02-11T19:10:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:10:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:10:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.714723
2026-02-11T19:10:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:10:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:10:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:10:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:10:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:10:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:09:48', tmtdew=9.14, humidity=55.97, cloud=0.0, wind=24.31, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:09:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:10:02.122 [DEBUG] [Thread-134293] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:10:02.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:10:02.229 [DEBUG] [Thread-134296] [transport.py] [_log()] starting thread (client mode): 0xa5770910
2026-02-11T19:10:02.230 [DEBUG] [Thread-134296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:10:02.244 [DEBUG] [Thread-134296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:10:02.244 [INFO] [Thread-134296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:10:02.252 [DEBUG] [Thread-134296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:10:02.252 [DEBUG] [Thread-134296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:10:02.252 [DEBUG] [Thread-134296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] client lang: <none>
2026-02-11T19:10:02.253 [DEBUG] [Thread-134296] [transport.py] [_log()] server lang: <none>
2026-02-11T19:10:02.254 [DEBUG] [Thread-134296] [transport.py] [_log()] kex follows: False
2026-02-11T19:10:02.254 [DEBUG] [Thread-134296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:10:02.254 [DEBUG] [Thread-134296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:10:02.254 [DEBUG] [Thread-134296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:10:02.254 [DEBUG] [Thread-134296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:10:02.254 [DEBUG] [Thread-134296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:10:02.254 [DEBUG] [Thread-134296] [transport.py] [_log()] Compression: none
2026-02-11T19:10:02.255 [DEBUG] [Thread-134296] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:10:02.313 [DEBUG] [Thread-134296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:10:02.313 [DEBUG] [Thread-134296] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:10:02.314 [DEBUG] [Thread-134296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:10:02.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:10:02.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:10:02.368 [DEBUG] [Thread-134296] [transport.py] [_log()] userauth is OK
2026-02-11T19:10:02.369 [DEBUG] [Thread-134296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:10:02.369 [DEBUG] [Thread-134296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:10:02.369 [DEBUG] [Thread-134296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:10:02.369 [DEBUG] [Thread-134296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:10:02.392 [INFO] [Thread-134296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:10:02.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:10:02.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:10:03.230 [DEBUG] [Thread-134296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:10:03.230 [DEBUG] [Thread-134296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:10:03.280 [DEBUG] [Thread-134296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:10:03.280 [DEBUG] [Thread-134296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:10:03.290 [DEBUG] [Thread-134296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:10:03.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:10:03.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:10:03.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:10:03.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:10:03.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:10:03.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:10:03.329 [DEBUG] [Thread-134296] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:10:05.527 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:10:05.528 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:10:06.040 [DEBUG] [Thread-134298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:10:21.085 [DEBUG] [Thread-134299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:10:32.900 [DEBUG] [Thread-134300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:10:33.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:10:33.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:10:33.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:10:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 10, 25), 9.26, 55.55, 0.0, 23.96, 20.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:10:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:10:25
2026-02-11T19:10:36.119 [DEBUG] [Thread-134301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:10:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:10:36.406 [DEBUG] [Thread-134302] [transport.py] [_log()] starting thread (client mode): 0xa57e2e00
2026-02-11T19:10:36.406 [DEBUG] [Thread-134302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:10:36.427 [DEBUG] [Thread-134302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:10:36.427 [INFO] [Thread-134302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:10:36.430 [DEBUG] [Thread-134302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:10:36.430 [DEBUG] [Thread-134302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:10:36.430 [DEBUG] [Thread-134302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:10:36.430 [DEBUG] [Thread-134302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] client lang: <none>
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] server lang: <none>
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] kex follows: False
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] Compression: none
2026-02-11T19:10:36.431 [DEBUG] [Thread-134302] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:10:36.448 [DEBUG] [Thread-134302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:10:36.449 [DEBUG] [Thread-134302] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:10:36.449 [DEBUG] [Thread-134302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:10:36.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:10:36.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:10:36.452 [DEBUG] [Thread-134302] [transport.py] [_log()] userauth is OK
2026-02-11T19:10:36.452 [DEBUG] [Thread-134302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:10:36.452 [DEBUG] [Thread-134302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:10:36.452 [DEBUG] [Thread-134302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:10:36.452 [DEBUG] [Thread-134302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:10:36.488 [INFO] [Thread-134302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:10:36.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:10:37.153 [DEBUG] [Thread-134302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:10:37.153 [DEBUG] [Thread-134302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:10:37.154 [DEBUG] [Thread-134302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:10:37.195 [DEBUG] [Thread-134302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:10:37.195 [DEBUG] [Thread-134302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:10:37.199 [DEBUG] [Thread-134302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:10:37.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:10:37.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:10:37.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:10:37.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:10:37.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:10:37.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:10:37.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:10:37.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:10:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:10:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.715418 -999.00  +20.70  16.51     62  +13.20 1 2 1 1 1   887    0 6.93 -2.02 ----- 13.0 16.5 279.8 18.8 21.6 -16.8 21.6 -15.5 21.5 -14.8 21.7 -16.5
2026-02-11T19:10:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:10:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:10:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.715418
2026-02-11T19:10:37.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:10:37.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:10:37.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:10:37.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:10:37.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:10:37.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:10:25', tmtdew=9.26, humidity=55.55, cloud=0.0, wind=23.96, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:10:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:10:37.228 [DEBUG] [Thread-134302] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:10:37.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:10:37.323 [DEBUG] [Thread-134305] [transport.py] [_log()] starting thread (client mode): 0xa2db4970
2026-02-11T19:10:37.323 [DEBUG] [Thread-134305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:10:37.337 [DEBUG] [Thread-134305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:10:37.337 [INFO] [Thread-134305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:10:37.344 [DEBUG] [Thread-134305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] client lang: <none>
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] server lang: <none>
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] kex follows: False
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] Compression: none
2026-02-11T19:10:37.345 [DEBUG] [Thread-134305] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:10:37.408 [DEBUG] [Thread-134305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:10:37.409 [DEBUG] [Thread-134305] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:10:37.409 [DEBUG] [Thread-134305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:10:37.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:10:37.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:10:37.463 [DEBUG] [Thread-134305] [transport.py] [_log()] userauth is OK
2026-02-11T19:10:37.464 [DEBUG] [Thread-134305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:10:37.464 [DEBUG] [Thread-134305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:10:37.464 [DEBUG] [Thread-134305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:10:37.464 [DEBUG] [Thread-134305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:10:37.482 [INFO] [Thread-134305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:10:37.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:10:37.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:10:38.321 [DEBUG] [Thread-134305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:10:38.322 [DEBUG] [Thread-134305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:10:38.370 [DEBUG] [Thread-134305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:10:38.370 [DEBUG] [Thread-134305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:10:38.379 [DEBUG] [Thread-134305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:10:38.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:10:38.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:10:38.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:10:38.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:10:38.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:10:38.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:10:38.418 [DEBUG] [Thread-134305] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:10:51.155 [DEBUG] [Thread-134307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:11:05.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:11:05.668 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:11:06.211 [DEBUG] [Thread-134308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:11:08.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:11:08.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:11:08.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
2026-02-11T19:11:10.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 11, 1), 9.52, 54.34, 0.0, 24.3, 20.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:11:10.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:11:01
2026-02-11T19:11:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:11:10.895 [DEBUG] [Thread-134309] [transport.py] [_log()] starting thread (client mode): 0xa57713f0
2026-02-11T19:11:10.896 [DEBUG] [Thread-134309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:11:10.916 [DEBUG] [Thread-134309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:11:10.916 [INFO] [Thread-134309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] client lang: <none>
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] server lang: <none>
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] kex follows: False
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] Compression: none
2026-02-11T19:11:10.919 [DEBUG] [Thread-134309] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:11:10.937 [DEBUG] [Thread-134309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:11:10.938 [DEBUG] [Thread-134309] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:11:10.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:11:10.939 [DEBUG] [Thread-134309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:11:10.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:11:10.941 [DEBUG] [Thread-134309] [transport.py] [_log()] userauth is OK
2026-02-11T19:11:10.941 [DEBUG] [Thread-134309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:11:10.941 [DEBUG] [Thread-134309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:11:10.941 [DEBUG] [Thread-134309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:11:10.941 [DEBUG] [Thread-134309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:11:10.965 [INFO] [Thread-134309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:11:10.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:11:11.779 [DEBUG] [Thread-134309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:11:11.779 [DEBUG] [Thread-134309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:11:11.779 [DEBUG] [Thread-134309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:11:11.820 [DEBUG] [Thread-134309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:11:11.820 [DEBUG] [Thread-134309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:11:11.823 [DEBUG] [Thread-134309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:11:11.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:11:11.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:11:11.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:11:11.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:11:11.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:11:11.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:11:11.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:11:11.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:11:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:11:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.715765 -999.00  +20.70  20.54     61  +13.10 1 2 1 1 1   887    0 6.96 -1.05 ----- 22.5 20.5 275.2 24.3 21.6 -17.2 21.7 -15.7 21.5 -15.3 21.8 -16.7
2026-02-11T19:11:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:11:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:11:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.715765
2026-02-11T19:11:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:11:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:11:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:11:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:11:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:11:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:11:01', tmtdew=9.52, humidity=54.34, cloud=0.0, wind=24.3, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:10:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:11:11.849 [DEBUG] [Thread-134309] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:11:11.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:11:11.944 [DEBUG] [Thread-134312] [transport.py] [_log()] starting thread (client mode): 0xa5770b20
2026-02-11T19:11:11.944 [DEBUG] [Thread-134312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:11:11.958 [DEBUG] [Thread-134312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:11:11.959 [INFO] [Thread-134312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:11:11.966 [DEBUG] [Thread-134312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] client lang: <none>
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] server lang: <none>
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] kex follows: False
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] Compression: none
2026-02-11T19:11:11.967 [DEBUG] [Thread-134312] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:11:12.024 [DEBUG] [Thread-134312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:11:12.024 [DEBUG] [Thread-134312] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:11:12.025 [DEBUG] [Thread-134312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:11:12.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:11:12.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:11:12.080 [DEBUG] [Thread-134312] [transport.py] [_log()] userauth is OK
2026-02-11T19:11:12.080 [DEBUG] [Thread-134312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:11:12.080 [DEBUG] [Thread-134312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:11:12.080 [DEBUG] [Thread-134312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:11:12.080 [DEBUG] [Thread-134312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:11:12.099 [INFO] [Thread-134312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:11:12.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:11:12.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:11:12.932 [DEBUG] [Thread-134312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:11:12.932 [DEBUG] [Thread-134312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:11:12.980 [DEBUG] [Thread-134312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:11:12.980 [DEBUG] [Thread-134312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:11:12.988 [DEBUG] [Thread-134312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:11:12.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:11:12.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')
2026-02-11T19:11:13.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
2026-02-11T19:11:13.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:11:13.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:11:13.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:11:13.022 [DEBUG] [Thread-134312] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:11:21.244 [DEBUG] [Thread-134314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:11:32.950 [DEBUG] [Thread-134315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:11:36.303 [DEBUG] [Thread-134316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:11:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:11:43.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:11:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 11, 36), 10.08, 52.57, 0.0, 24.98, 21.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:11:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:11:36
2026-02-11T19:11:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:11:45.485 [DEBUG] [Thread-134317] [transport.py] [_log()] starting thread (client mode): 0x9eb06aa0
2026-02-11T19:11:45.485 [DEBUG] [Thread-134317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:11:45.505 [DEBUG] [Thread-134317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:11:45.505 [INFO] [Thread-134317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:11:45.507 [DEBUG] [Thread-134317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] client lang: <none>
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] server lang: <none>
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] kex follows: False
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] Compression: none
2026-02-11T19:11:45.508 [DEBUG] [Thread-134317] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:11:45.524 [DEBUG] [Thread-134317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:11:45.525 [DEBUG] [Thread-134317] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:11:45.526 [DEBUG] [Thread-134317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:11:45.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:11:45.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:11:45.528 [DEBUG] [Thread-134317] [transport.py] [_log()] userauth is OK
2026-02-11T19:11:45.528 [DEBUG] [Thread-134317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:11:45.528 [DEBUG] [Thread-134317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:11:45.528 [DEBUG] [Thread-134317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:11:45.528 [DEBUG] [Thread-134317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:11:45.543 [INFO] [Thread-134317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:11:45.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:11:46.171 [DEBUG] [Thread-134317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:11:46.171 [DEBUG] [Thread-134317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:11:46.172 [DEBUG] [Thread-134317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:11:46.212 [DEBUG] [Thread-134317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:11:46.213 [DEBUG] [Thread-134317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:11:46.216 [DEBUG] [Thread-134317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:11:46.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:11:46.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:11:46.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:11:46.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:11:46.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:11:46.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:11:46.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:11:46.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:11:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:11:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.716112 -999.00  +20.70  24.47     61  +13.00 1 2 1 1 1   887    0 6.93 0.47 ----- 20.8 24.5 273.8 29.1 21.6 -17.5 21.6 -16.0 21.5 -15.9 21.8 -16.9
2026-02-11T19:11:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:11:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:11:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.716112
2026-02-11T19:11:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:11:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:11:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:11:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:11:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:11:46.240 [DEBUG] [Thread-134317] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:11:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:11:36', tmtdew=10.08, humidity=52.57, cloud=0.0, wind=24.98, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:11:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:11:46.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:11:46.335 [DEBUG] [Thread-134320] [transport.py] [_log()] starting thread (client mode): 0xa57e1720
2026-02-11T19:11:46.335 [DEBUG] [Thread-134320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:11:46.350 [DEBUG] [Thread-134320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:11:46.350 [INFO] [Thread-134320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:11:46.358 [DEBUG] [Thread-134320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:11:46.358 [DEBUG] [Thread-134320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:11:46.358 [DEBUG] [Thread-134320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:11:46.358 [DEBUG] [Thread-134320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] client lang: <none>
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] server lang: <none>
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] kex follows: False
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] Compression: none
2026-02-11T19:11:46.359 [DEBUG] [Thread-134320] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:11:46.414 [DEBUG] [Thread-134320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:11:46.415 [DEBUG] [Thread-134320] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:11:46.415 [DEBUG] [Thread-134320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:11:46.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:11:46.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:11:46.471 [DEBUG] [Thread-134320] [transport.py] [_log()] userauth is OK
2026-02-11T19:11:46.471 [DEBUG] [Thread-134320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:11:46.471 [DEBUG] [Thread-134320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:11:46.471 [DEBUG] [Thread-134320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:11:46.471 [DEBUG] [Thread-134320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:11:46.490 [INFO] [Thread-134320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:11:46.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:11:46.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:11:47.330 [DEBUG] [Thread-134320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:11:47.330 [DEBUG] [Thread-134320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:11:47.378 [DEBUG] [Thread-134320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:11:47.378 [DEBUG] [Thread-134320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:11:47.387 [DEBUG] [Thread-134320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:11:47.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:11:47.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:11:47.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:11:47.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:11:47.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:11:47.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:11:47.423 [DEBUG] [Thread-134320] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:11:51.338 [DEBUG] [Thread-134322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:05.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:05.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:06.391 [DEBUG] [Thread-134323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:17.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:12:17.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:12:17.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:12:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 11, 36), 10.08, 52.57, 0.0, 24.98, 21.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:12:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:11:36
2026-02-11T19:12:19.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:12:19.955 [DEBUG] [Thread-134324] [transport.py] [_log()] starting thread (client mode): 0xa5772920
2026-02-11T19:12:19.955 [DEBUG] [Thread-134324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:12:19.975 [DEBUG] [Thread-134324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:12:19.975 [INFO] [Thread-134324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] client lang: <none>
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] server lang: <none>
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] kex follows: False
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:12:19.978 [DEBUG] [Thread-134324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:12:19.979 [DEBUG] [Thread-134324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:12:19.979 [DEBUG] [Thread-134324] [transport.py] [_log()] Compression: none
2026-02-11T19:12:19.979 [DEBUG] [Thread-134324] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:12:19.995 [DEBUG] [Thread-134324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:12:19.996 [DEBUG] [Thread-134324] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:12:19.996 [DEBUG] [Thread-134324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:12:19.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:12:19.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:12:19.998 [DEBUG] [Thread-134324] [transport.py] [_log()] userauth is OK
2026-02-11T19:12:19.998 [DEBUG] [Thread-134324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:12:19.999 [DEBUG] [Thread-134324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:12:19.999 [DEBUG] [Thread-134324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:12:19.999 [DEBUG] [Thread-134324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:12:20.034 [INFO] [Thread-134324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:12:20.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:12:20.698 [DEBUG] [Thread-134324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:12:20.699 [DEBUG] [Thread-134324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:12:20.699 [DEBUG] [Thread-134324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:12:20.740 [DEBUG] [Thread-134324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:12:20.740 [DEBUG] [Thread-134324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:12:20.742 [DEBUG] [Thread-134324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:12:20.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:12:20.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:12:20.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:12:20.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:12:20.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:12:20.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:12:20.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:12:20.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:12:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:12:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.716459 -999.00  +20.70  26.39     59  +12.60 1 2 1 1 1   887    0 7.07 2.10 ----- 20.7 26.4 276.2 29.8 21.6 -17.6 21.6 -16.1 21.5 -16.0 21.8 -17.2
2026-02-11T19:12:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:12:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:12:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.716459
2026-02-11T19:12:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:12:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:12:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:12:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:12:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:12:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:11:36', tmtdew=10.08, humidity=52.57, cloud=0.0, wind=24.98, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:11:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:12:20.768 [DEBUG] [Thread-134324] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:12:20.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:12:20.860 [DEBUG] [Thread-134327] [transport.py] [_log()] starting thread (client mode): 0xa5772050
2026-02-11T19:12:20.860 [DEBUG] [Thread-134327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:12:20.875 [DEBUG] [Thread-134327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:12:20.875 [INFO] [Thread-134327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] client lang: <none>
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] server lang: <none>
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] kex follows: False
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:12:20.883 [DEBUG] [Thread-134327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:12:20.884 [DEBUG] [Thread-134327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:12:20.884 [DEBUG] [Thread-134327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:12:20.884 [DEBUG] [Thread-134327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:12:20.884 [DEBUG] [Thread-134327] [transport.py] [_log()] Compression: none
2026-02-11T19:12:20.884 [DEBUG] [Thread-134327] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:12:20.942 [DEBUG] [Thread-134327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:12:20.942 [DEBUG] [Thread-134327] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:12:20.943 [DEBUG] [Thread-134327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:12:20.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:12:20.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:12:20.998 [DEBUG] [Thread-134327] [transport.py] [_log()] userauth is OK
2026-02-11T19:12:20.999 [DEBUG] [Thread-134327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:12:20.999 [DEBUG] [Thread-134327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:12:20.999 [DEBUG] [Thread-134327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:12:20.999 [DEBUG] [Thread-134327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:12:21.017 [INFO] [Thread-134327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:12:21.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:12:21.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:12:21.424 [DEBUG] [Thread-134329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:21.905 [DEBUG] [Thread-134327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:12:21.906 [DEBUG] [Thread-134327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:12:21.953 [DEBUG] [Thread-134327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:12:21.953 [DEBUG] [Thread-134327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:12:21.965 [DEBUG] [Thread-134327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:12:21.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:12:21.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:12:21.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:12:21.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:12:21.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:12:21.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:12:22.003 [DEBUG] [Thread-134327] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:12:33.007 [DEBUG] [Thread-134330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:36.475 [DEBUG] [Thread-134331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:51.513 [DEBUG] [Thread-134332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:12:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:12:52.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:12:52.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
2026-02-11T19:12:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 12, 11), 9.28, 55.03, 0.0, 23.93, 21.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:12:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:12:11
2026-02-11T19:12:54.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:12:54.887 [DEBUG] [Thread-134333] [transport.py] [_log()] starting thread (client mode): 0xa57738b0
2026-02-11T19:12:54.887 [DEBUG] [Thread-134333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:12:54.907 [DEBUG] [Thread-134333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:12:54.907 [INFO] [Thread-134333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:12:54.910 [DEBUG] [Thread-134333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:12:54.910 [DEBUG] [Thread-134333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:12:54.910 [DEBUG] [Thread-134333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] client lang: <none>
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] server lang: <none>
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] kex follows: False
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] Compression: none
2026-02-11T19:12:54.911 [DEBUG] [Thread-134333] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:12:54.928 [DEBUG] [Thread-134333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:12:54.929 [DEBUG] [Thread-134333] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:12:54.929 [DEBUG] [Thread-134333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:12:54.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:12:54.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:12:54.929 [DEBUG] [Thread-134333] [transport.py] [_log()] userauth is OK
2026-02-11T19:12:54.929 [DEBUG] [Thread-134333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:12:54.929 [DEBUG] [Thread-134333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:12:54.929 [DEBUG] [Thread-134333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:12:54.929 [DEBUG] [Thread-134333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:12:54.939 [INFO] [Thread-134333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:12:54.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:12:55.584 [DEBUG] [Thread-134333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:12:55.584 [DEBUG] [Thread-134333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:12:55.585 [DEBUG] [Thread-134333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:12:55.625 [DEBUG] [Thread-134333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:12:55.626 [DEBUG] [Thread-134333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:12:55.629 [DEBUG] [Thread-134333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:12:55.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:12:55.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:12:55.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:12:55.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:12:55.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:12:55.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:12:55.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:12:55.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:12:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:12:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.716807 -999.00  +20.70  21.55     59  +12.60 1 2 1 1 1   887    0 7.22 5.19 ----- 23.0 21.6 284.4 27.0 21.6 -17.7 21.6 -16.5 21.6 -16.1 21.8 -17.3
2026-02-11T19:12:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:12:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:12:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.716807
2026-02-11T19:12:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:12:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:12:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:12:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:12:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:12:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:12:11', tmtdew=9.28, humidity=55.03, cloud=0.0, wind=23.93, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:12:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:12:55.657 [DEBUG] [Thread-134333] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:12:55.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:12:55.753 [DEBUG] [Thread-134336] [transport.py] [_log()] starting thread (client mode): 0xa2db5f60
2026-02-11T19:12:55.753 [DEBUG] [Thread-134336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:12:55.768 [DEBUG] [Thread-134336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:12:55.768 [INFO] [Thread-134336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:12:55.776 [DEBUG] [Thread-134336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:12:55.776 [DEBUG] [Thread-134336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] client lang: <none>
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] server lang: <none>
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] kex follows: False
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] Compression: none
2026-02-11T19:12:55.777 [DEBUG] [Thread-134336] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:12:55.833 [DEBUG] [Thread-134336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:12:55.834 [DEBUG] [Thread-134336] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:12:55.834 [DEBUG] [Thread-134336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:12:55.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:12:55.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:12:55.890 [DEBUG] [Thread-134336] [transport.py] [_log()] userauth is OK
2026-02-11T19:12:55.891 [DEBUG] [Thread-134336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:12:55.891 [DEBUG] [Thread-134336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:12:55.891 [DEBUG] [Thread-134336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:12:55.891 [DEBUG] [Thread-134336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:12:55.916 [INFO] [Thread-134336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:12:55.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:12:55.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:12:56.793 [DEBUG] [Thread-134336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:12:56.794 [DEBUG] [Thread-134336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:12:56.841 [DEBUG] [Thread-134336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:12:56.842 [DEBUG] [Thread-134336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:12:56.851 [DEBUG] [Thread-134336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:12:56.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:12:56.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:12:56.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:12:56.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:12:56.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:12:56.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:12:56.886 [DEBUG] [Thread-134336] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:13:05.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:13:05.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:13:06.549 [DEBUG] [Thread-134338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:13:21.599 [DEBUG] [Thread-134339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:13:26.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:13:26.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:13:26.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:13:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 12, 48), 9.55, 54.28, 0.0, 18.86, 21.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:13:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:12:48
2026-02-11T19:13:29.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:13:29.871 [DEBUG] [Thread-134340] [transport.py] [_log()] starting thread (client mode): 0xa2d54bb0
2026-02-11T19:13:29.871 [DEBUG] [Thread-134340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:13:29.891 [DEBUG] [Thread-134340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:13:29.891 [INFO] [Thread-134340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:13:29.894 [DEBUG] [Thread-134340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:13:29.894 [DEBUG] [Thread-134340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:13:29.894 [DEBUG] [Thread-134340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:13:29.894 [DEBUG] [Thread-134340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:13:29.894 [DEBUG] [Thread-134340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:13:29.894 [DEBUG] [Thread-134340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] client lang: <none>
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] server lang: <none>
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] kex follows: False
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] Compression: none
2026-02-11T19:13:29.895 [DEBUG] [Thread-134340] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:13:29.912 [DEBUG] [Thread-134340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:13:29.913 [DEBUG] [Thread-134340] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:13:29.913 [DEBUG] [Thread-134340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:13:29.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:13:29.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:13:29.915 [DEBUG] [Thread-134340] [transport.py] [_log()] userauth is OK
2026-02-11T19:13:29.916 [DEBUG] [Thread-134340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:13:29.916 [DEBUG] [Thread-134340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:13:29.916 [DEBUG] [Thread-134340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:13:29.916 [DEBUG] [Thread-134340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:13:29.934 [INFO] [Thread-134340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:13:29.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:13:30.581 [DEBUG] [Thread-134340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:13:30.582 [DEBUG] [Thread-134340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:13:30.582 [DEBUG] [Thread-134340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:13:30.622 [DEBUG] [Thread-134340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:13:30.622 [DEBUG] [Thread-134340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:13:30.626 [DEBUG] [Thread-134340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:13:30.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:13:30.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:13:30.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:13:30.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:13:30.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:13:30.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:13:30.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:13:30.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:13:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:13:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.717154 -999.00  +20.70  19.87     59  +12.60 1 2 1 1 1   887    0 7.33 7.61 ----- 22.3 19.9 276.4 29.8 21.6 -17.9 21.6 -16.7 21.6 -16.9 21.8 -17.7
2026-02-11T19:13:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:13:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:13:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.717154
2026-02-11T19:13:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:13:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:13:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:13:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:13:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:13:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:12:48', tmtdew=9.55, humidity=54.28, cloud=0.0, wind=18.86, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:12:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:13:30.652 [DEBUG] [Thread-134340] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:13:30.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:13:30.758 [DEBUG] [Thread-134343] [transport.py] [_log()] starting thread (client mode): 0xa2d54820
2026-02-11T19:13:30.758 [DEBUG] [Thread-134343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:13:30.773 [DEBUG] [Thread-134343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:13:30.773 [INFO] [Thread-134343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:13:30.781 [DEBUG] [Thread-134343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:13:30.781 [DEBUG] [Thread-134343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:13:30.781 [DEBUG] [Thread-134343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] client lang: <none>
2026-02-11T19:13:30.782 [DEBUG] [Thread-134343] [transport.py] [_log()] server lang: <none>
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] kex follows: False
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] Compression: none
2026-02-11T19:13:30.783 [DEBUG] [Thread-134343] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:13:30.846 [DEBUG] [Thread-134343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:13:30.847 [DEBUG] [Thread-134343] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:13:30.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:13:30.848 [DEBUG] [Thread-134343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:13:30.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:13:30.907 [DEBUG] [Thread-134343] [transport.py] [_log()] userauth is OK
2026-02-11T19:13:30.908 [DEBUG] [Thread-134343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:13:30.908 [DEBUG] [Thread-134343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:13:30.908 [DEBUG] [Thread-134343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:13:30.908 [DEBUG] [Thread-134343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:13:30.930 [INFO] [Thread-134343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:13:30.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:13:30.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:13:31.782 [DEBUG] [Thread-134343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:13:31.782 [DEBUG] [Thread-134343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:13:31.830 [DEBUG] [Thread-134343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:13:31.831 [DEBUG] [Thread-134343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:13:31.840 [DEBUG] [Thread-134343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:13:31.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:13:31.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:13:31.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:13:31.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:13:31.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:13:31.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:13:31.877 [DEBUG] [Thread-134343] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:13:33.058 [DEBUG] [Thread-134345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:13:36.633 [DEBUG] [Thread-134346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:13:51.692 [DEBUG] [Thread-134347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:14:01.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:14:01.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:14:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:14:03.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 13, 23), 9.54, 54.3, 0.0, 20.08, 21.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:14:03.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:13:23
2026-02-11T19:14:04.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:14:04.536 [DEBUG] [Thread-134348] [transport.py] [_log()] starting thread (client mode): 0xa57585e0
2026-02-11T19:14:04.536 [DEBUG] [Thread-134348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:14:04.555 [DEBUG] [Thread-134348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:14:04.555 [INFO] [Thread-134348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] client lang: <none>
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] server lang: <none>
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] kex follows: False
2026-02-11T19:14:04.558 [DEBUG] [Thread-134348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:14:04.559 [DEBUG] [Thread-134348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:14:04.559 [DEBUG] [Thread-134348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:14:04.559 [DEBUG] [Thread-134348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:14:04.559 [DEBUG] [Thread-134348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:14:04.559 [DEBUG] [Thread-134348] [transport.py] [_log()] Compression: none
2026-02-11T19:14:04.559 [DEBUG] [Thread-134348] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:14:04.577 [DEBUG] [Thread-134348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:14:04.577 [DEBUG] [Thread-134348] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:14:04.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:14:04.579 [DEBUG] [Thread-134348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:14:04.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:14:04.581 [DEBUG] [Thread-134348] [transport.py] [_log()] userauth is OK
2026-02-11T19:14:04.581 [DEBUG] [Thread-134348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:14:04.581 [DEBUG] [Thread-134348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:14:04.581 [DEBUG] [Thread-134348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:14:04.581 [DEBUG] [Thread-134348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:14:04.604 [INFO] [Thread-134348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:14:04.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:14:05.349 [DEBUG] [Thread-134348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:14:05.349 [DEBUG] [Thread-134348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:14:05.349 [DEBUG] [Thread-134348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:14:05.390 [DEBUG] [Thread-134348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:14:05.391 [DEBUG] [Thread-134348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:14:05.394 [DEBUG] [Thread-134348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:14:05.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:14:05.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:14:05.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:14:05.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:14:05.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:14:05.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:14:05.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:14:05.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:14:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:14:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.717501 -999.00  +20.70  20.74     59  +12.50 1 2 1 1 1   887    0 7.46 12.25 ----- 20.5 20.7 280.4 26.9 21.6 -18.2 21.7 -17.1 21.6 -17.0 21.8 -17.9
2026-02-11T19:14:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:14:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:14:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.717501
2026-02-11T19:14:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:14:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:14:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:14:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:14:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:14:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:13:23', tmtdew=9.54, humidity=54.3, cloud=0.0, wind=20.08, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:13:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:14:05.418 [DEBUG] [Thread-134348] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:14:05.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:14:05.521 [DEBUG] [Thread-134351] [transport.py] [_log()] starting thread (client mode): 0xa575ae30
2026-02-11T19:14:05.521 [DEBUG] [Thread-134351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:14:05.536 [DEBUG] [Thread-134351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:14:05.536 [INFO] [Thread-134351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:14:05.544 [DEBUG] [Thread-134351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:14:05.544 [DEBUG] [Thread-134351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:14:05.544 [DEBUG] [Thread-134351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] client lang: <none>
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] server lang: <none>
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] kex follows: False
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] Compression: none
2026-02-11T19:14:05.545 [DEBUG] [Thread-134351] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:14:05.604 [DEBUG] [Thread-134351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:14:05.604 [DEBUG] [Thread-134351] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:14:05.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:14:05.605 [DEBUG] [Thread-134351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:14:05.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:14:05.665 [DEBUG] [Thread-134351] [transport.py] [_log()] userauth is OK
2026-02-11T19:14:05.665 [DEBUG] [Thread-134351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:14:05.666 [DEBUG] [Thread-134351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:14:05.666 [DEBUG] [Thread-134351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:14:05.666 [DEBUG] [Thread-134351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:14:05.686 [INFO] [Thread-134351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:14:05.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:14:05.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:14:06.099 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:14:06.100 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:14:06.547 [DEBUG] [Thread-134351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:14:06.547 [DEBUG] [Thread-134351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:14:06.595 [DEBUG] [Thread-134351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:14:06.596 [DEBUG] [Thread-134351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:14:06.605 [DEBUG] [Thread-134351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:14:06.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:14:06.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:14:06.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:14:06.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:14:06.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:14:06.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:14:06.640 [DEBUG] [Thread-134351] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:14:06.727 [DEBUG] [Thread-134353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:14:21.778 [DEBUG] [Thread-134354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:14:33.122 [DEBUG] [Thread-134355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:14:36.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:14:36.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:14:36.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
2026-02-11T19:14:36.811 [DEBUG] [Thread-134356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:14:38.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 13, 23), 9.54, 54.3, 0.0, 20.08, 21.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:14:38.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:13:23
2026-02-11T19:14:38.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:14:39.121 [DEBUG] [Thread-134357] [transport.py] [_log()] starting thread (client mode): 0xa57738b0
2026-02-11T19:14:39.121 [DEBUG] [Thread-134357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:14:39.142 [DEBUG] [Thread-134357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:14:39.142 [INFO] [Thread-134357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] client lang: <none>
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] server lang: <none>
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] kex follows: False
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] Compression: none
2026-02-11T19:14:39.145 [DEBUG] [Thread-134357] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:14:39.163 [DEBUG] [Thread-134357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:14:39.163 [DEBUG] [Thread-134357] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:14:39.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:14:39.164 [DEBUG] [Thread-134357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:14:39.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:14:39.166 [DEBUG] [Thread-134357] [transport.py] [_log()] userauth is OK
2026-02-11T19:14:39.167 [DEBUG] [Thread-134357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:14:39.167 [DEBUG] [Thread-134357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:14:39.167 [DEBUG] [Thread-134357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:14:39.167 [DEBUG] [Thread-134357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:14:39.187 [INFO] [Thread-134357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:14:39.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:14:39.865 [DEBUG] [Thread-134357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:14:39.865 [DEBUG] [Thread-134357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:14:39.866 [DEBUG] [Thread-134357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:14:39.907 [DEBUG] [Thread-134357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:14:39.907 [DEBUG] [Thread-134357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:14:39.910 [DEBUG] [Thread-134357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:14:39.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:14:39.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:14:39.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:14:39.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:14:39.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:14:39.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:14:39.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:14:39.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:14:39.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:14:39.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.717848 -999.00  +20.70  18.72     59  +12.50 1 2 1 1 1   887    0 7.74 17.58 ----- 19.2 18.7 284.2 27.6 21.6 -18.6 21.6 -17.5 21.6 -17.2 21.8 -18.3
2026-02-11T19:14:39.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:14:39.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:14:39.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.717848
2026-02-11T19:14:39.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:14:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:14:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:14:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:14:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:14:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:13:23', tmtdew=9.54, humidity=54.3, cloud=0.0, wind=20.08, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:13:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:14:39.935 [DEBUG] [Thread-134357] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:14:40.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:14:40.030 [DEBUG] [Thread-134360] [transport.py] [_log()] starting thread (client mode): 0xa57582b0
2026-02-11T19:14:40.030 [DEBUG] [Thread-134360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:14:40.044 [DEBUG] [Thread-134360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:14:40.044 [INFO] [Thread-134360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:14:40.052 [DEBUG] [Thread-134360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:14:40.052 [DEBUG] [Thread-134360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:14:40.052 [DEBUG] [Thread-134360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:14:40.052 [DEBUG] [Thread-134360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] client lang: <none>
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] server lang: <none>
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] kex follows: False
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] Compression: none
2026-02-11T19:14:40.053 [DEBUG] [Thread-134360] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:14:40.109 [DEBUG] [Thread-134360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:14:40.109 [DEBUG] [Thread-134360] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:14:40.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:14:40.110 [DEBUG] [Thread-134360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:14:40.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:14:40.165 [DEBUG] [Thread-134360] [transport.py] [_log()] userauth is OK
2026-02-11T19:14:40.166 [DEBUG] [Thread-134360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:14:40.166 [DEBUG] [Thread-134360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:14:40.166 [DEBUG] [Thread-134360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:14:40.166 [DEBUG] [Thread-134360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:14:40.184 [INFO] [Thread-134360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:14:40.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:14:40.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:14:40.988 [DEBUG] [Thread-134360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:14:40.989 [DEBUG] [Thread-134360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:14:41.036 [DEBUG] [Thread-134360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:14:41.036 [DEBUG] [Thread-134360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:14:41.045 [DEBUG] [Thread-134360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:14:41.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:14:41.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:14:41.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:14:41.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:14:41.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:14:41.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:14:41.081 [DEBUG] [Thread-134360] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:14:51.847 [DEBUG] [Thread-134362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:15:06.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:15:06.239 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:15:06.897 [DEBUG] [Thread-134363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:15:11.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:15:11.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:15:11.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:15:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 14, 35), 9.98, 52.94, 0.0, 24.7, 21.46, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:15:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:14:35
2026-02-11T19:15:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:15:13.661 [DEBUG] [Thread-134364] [transport.py] [_log()] starting thread (client mode): 0xa57e0190
2026-02-11T19:15:13.661 [DEBUG] [Thread-134364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:15:13.677 [DEBUG] [Thread-134364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:15:13.677 [INFO] [Thread-134364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:13.680 [DEBUG] [Thread-134364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] client lang: <none>
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] server lang: <none>
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] kex follows: False
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] Compression: none
2026-02-11T19:15:13.681 [DEBUG] [Thread-134364] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:15:13.699 [DEBUG] [Thread-134364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:15:13.700 [DEBUG] [Thread-134364] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:15:13.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:15:13.701 [DEBUG] [Thread-134364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:15:13.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:15:13.703 [DEBUG] [Thread-134364] [transport.py] [_log()] userauth is OK
2026-02-11T19:15:13.704 [DEBUG] [Thread-134364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:15:13.704 [DEBUG] [Thread-134364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:15:13.704 [DEBUG] [Thread-134364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:15:13.704 [DEBUG] [Thread-134364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:15:13.718 [INFO] [Thread-134364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:15:13.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:15:14.304 [DEBUG] [Thread-134364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:15:14.304 [DEBUG] [Thread-134364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:15:14.305 [DEBUG] [Thread-134364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:15:14.345 [DEBUG] [Thread-134364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:15:14.345 [DEBUG] [Thread-134364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:15:14.348 [DEBUG] [Thread-134364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:15:14.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:15:14.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:15:14.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:15:14.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:15:14.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:15:14.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:15:14.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:15:14.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:15:14.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:15:14.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.718890 -999.00  +20.70  20.98     58  +12.30 1 2 1 1 1   887    0 8.23 36.55 ----- 17.9 21.0 274.6 31.5 21.6 -19.4 21.6 -18.3 21.3 -18.4 21.6 -19.0
2026-02-11T19:15:14.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:15:14.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:15:14.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.718890
2026-02-11T19:15:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:15:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:15:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:15:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:15:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:15:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:14:35', tmtdew=9.98, humidity=52.94, cloud=0.0, wind=24.7, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:15:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:15:14.373 [DEBUG] [Thread-134364] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:15:14.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:15:14.473 [DEBUG] [Thread-134367] [transport.py] [_log()] starting thread (client mode): 0xa2db6170
2026-02-11T19:15:14.473 [DEBUG] [Thread-134367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:15:14.489 [DEBUG] [Thread-134367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:15:14.489 [INFO] [Thread-134367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:15:14.497 [DEBUG] [Thread-134367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:15:14.497 [DEBUG] [Thread-134367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:15:14.497 [DEBUG] [Thread-134367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:15:14.497 [DEBUG] [Thread-134367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] client lang: <none>
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] server lang: <none>
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] kex follows: False
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] Compression: none
2026-02-11T19:15:14.498 [DEBUG] [Thread-134367] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:15:14.557 [DEBUG] [Thread-134367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:15:14.557 [DEBUG] [Thread-134367] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:15:14.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:15:14.558 [DEBUG] [Thread-134367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:15:14.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:15:14.612 [DEBUG] [Thread-134367] [transport.py] [_log()] userauth is OK
2026-02-11T19:15:14.613 [DEBUG] [Thread-134367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:15:14.613 [DEBUG] [Thread-134367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:15:14.613 [DEBUG] [Thread-134367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:15:14.613 [DEBUG] [Thread-134367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:15:14.632 [INFO] [Thread-134367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:15:14.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:15:14.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:15:15.451 [DEBUG] [Thread-134367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:15:15.452 [DEBUG] [Thread-134367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:15:15.499 [DEBUG] [Thread-134367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:15:15.500 [DEBUG] [Thread-134367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:15:15.509 [DEBUG] [Thread-134367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:15:15.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:15:15.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')
2026-02-11T19:15:15.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:15:15.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:15:15.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:15:15.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:15:15.547 [DEBUG] [Thread-134367] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:15:21.932 [DEBUG] [Thread-134369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:15:33.181 [DEBUG] [Thread-134370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:15:36.982 [DEBUG] [Thread-134371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:15:45.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:15:45.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:15:45.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:15:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 15, 11), 9.99, 52.95, 0.0, 22.87, 20.95, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:15:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:15:11
2026-02-11T19:15:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:15:48.040 [DEBUG] [Thread-134372] [transport.py] [_log()] starting thread (client mode): 0xa2d541c0
2026-02-11T19:15:48.040 [DEBUG] [Thread-134372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:15:48.055 [DEBUG] [Thread-134372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:15:48.055 [INFO] [Thread-134372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] client lang: <none>
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] server lang: <none>
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] kex follows: False
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:15:48.058 [DEBUG] [Thread-134372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:15:48.059 [DEBUG] [Thread-134372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:15:48.059 [DEBUG] [Thread-134372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:15:48.059 [DEBUG] [Thread-134372] [transport.py] [_log()] Compression: none
2026-02-11T19:15:48.059 [DEBUG] [Thread-134372] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:15:48.075 [DEBUG] [Thread-134372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:15:48.076 [DEBUG] [Thread-134372] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:15:48.076 [DEBUG] [Thread-134372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:15:48.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:15:48.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:15:48.078 [DEBUG] [Thread-134372] [transport.py] [_log()] userauth is OK
2026-02-11T19:15:48.078 [DEBUG] [Thread-134372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:15:48.078 [DEBUG] [Thread-134372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:15:48.078 [DEBUG] [Thread-134372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:15:48.078 [DEBUG] [Thread-134372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:15:48.101 [INFO] [Thread-134372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:15:48.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:15:48.691 [DEBUG] [Thread-134372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:15:48.691 [DEBUG] [Thread-134372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:15:48.692 [DEBUG] [Thread-134372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:15:48.732 [DEBUG] [Thread-134372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:15:48.732 [DEBUG] [Thread-134372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:15:48.735 [DEBUG] [Thread-134372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:15:48.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:15:48.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:15:48.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:15:48.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:15:48.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:15:48.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:15:48.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:15:48.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.719237 -999.00  +20.70  22.95     58  +12.30 1 2 1 1 1   887    0 8.59 42.40 ----- 19.7 22.9 269.6 28.6 21.6 -19.6 21.6 -18.4 21.3 -18.0 21.6 -19.0
2026-02-11T19:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.719237
2026-02-11T19:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:15:11', tmtdew=9.99, humidity=52.95, cloud=0.0, wind=22.87, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:15:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:15:48.759 [DEBUG] [Thread-134372] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:15:48.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:15:48.853 [DEBUG] [Thread-134375] [transport.py] [_log()] starting thread (client mode): 0xa57e0a00
2026-02-11T19:15:48.853 [DEBUG] [Thread-134375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:15:48.868 [DEBUG] [Thread-134375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:15:48.868 [INFO] [Thread-134375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:15:48.876 [DEBUG] [Thread-134375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:15:48.876 [DEBUG] [Thread-134375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:15:48.876 [DEBUG] [Thread-134375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] client lang: <none>
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] server lang: <none>
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] kex follows: False
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] Compression: none
2026-02-11T19:15:48.877 [DEBUG] [Thread-134375] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:15:48.935 [DEBUG] [Thread-134375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:15:48.936 [DEBUG] [Thread-134375] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:15:48.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:15:48.937 [DEBUG] [Thread-134375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:15:48.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:15:48.992 [DEBUG] [Thread-134375] [transport.py] [_log()] userauth is OK
2026-02-11T19:15:48.992 [DEBUG] [Thread-134375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:15:48.992 [DEBUG] [Thread-134375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:15:48.993 [DEBUG] [Thread-134375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:15:48.993 [DEBUG] [Thread-134375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:15:49.013 [INFO] [Thread-134375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:15:49.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:15:49.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:15:49.860 [DEBUG] [Thread-134375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:15:49.860 [DEBUG] [Thread-134375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:15:49.907 [DEBUG] [Thread-134375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:15:49.907 [DEBUG] [Thread-134375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:15:49.917 [DEBUG] [Thread-134375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:15:49.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:15:49.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:15:49.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
2026-02-11T19:15:49.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:15:49.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:15:49.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:15:49.953 [DEBUG] [Thread-134375] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:15:52.021 [DEBUG] [Thread-134377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:06.379 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:06.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:07.075 [DEBUG] [Thread-134378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:19.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:16:19.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:16:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:16:22.107 [DEBUG] [Thread-134379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:22.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 15, 46), 9.91, 52.89, 0.0, 23.27, 20.9, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:16:22.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:15:46
2026-02-11T19:16:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:16:22.709 [DEBUG] [Thread-134380] [transport.py] [_log()] starting thread (client mode): 0xa2db7730
2026-02-11T19:16:22.709 [DEBUG] [Thread-134380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:16:22.729 [DEBUG] [Thread-134380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:16:22.729 [INFO] [Thread-134380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:16:22.731 [DEBUG] [Thread-134380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] client lang: <none>
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] server lang: <none>
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] kex follows: False
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] Compression: none
2026-02-11T19:16:22.732 [DEBUG] [Thread-134380] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:16:22.750 [DEBUG] [Thread-134380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:16:22.750 [DEBUG] [Thread-134380] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:16:22.751 [DEBUG] [Thread-134380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:16:22.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:16:22.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:16:22.753 [DEBUG] [Thread-134380] [transport.py] [_log()] userauth is OK
2026-02-11T19:16:22.753 [DEBUG] [Thread-134380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:16:22.754 [DEBUG] [Thread-134380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:16:22.754 [DEBUG] [Thread-134380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:16:22.754 [DEBUG] [Thread-134380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:16:22.778 [INFO] [Thread-134380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:16:22.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:16:23.392 [DEBUG] [Thread-134380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:16:23.393 [DEBUG] [Thread-134380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:16:23.393 [DEBUG] [Thread-134380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:16:23.433 [DEBUG] [Thread-134380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:16:23.433 [DEBUG] [Thread-134380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:16:23.437 [DEBUG] [Thread-134380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:16:23.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:16:23.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:16:23.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:16:23.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:16:23.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:16:23.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:16:23.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:16:23.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:16:23.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:16:23.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.719585 -999.00  +20.70  20.18     58  +12.20 1 2 1 1 1   887    0 8.65 46.38 ----- 25.4 20.2 273.4 28.5 21.6 -19.6 21.5 -18.6 21.2 -18.0 21.6 -19.0
2026-02-11T19:16:23.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:16:23.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:16:23.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.719585
2026-02-11T19:16:23.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:16:23.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:16:23.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:16:23.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:16:23.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:16:23.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:15:46', tmtdew=9.91, humidity=52.89, cloud=0.0, wind=23.27, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:16:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:16:23.464 [DEBUG] [Thread-134380] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:16:23.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:16:23.561 [DEBUG] [Thread-134383] [transport.py] [_log()] starting thread (client mode): 0xa2dc13c0
2026-02-11T19:16:23.561 [DEBUG] [Thread-134383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:16:23.575 [DEBUG] [Thread-134383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:16:23.576 [INFO] [Thread-134383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:16:23.586 [DEBUG] [Thread-134383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:16:23.586 [DEBUG] [Thread-134383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:16:23.586 [DEBUG] [Thread-134383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] client lang: <none>
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] server lang: <none>
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] kex follows: False
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:16:23.587 [DEBUG] [Thread-134383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:16:23.588 [DEBUG] [Thread-134383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:16:23.588 [DEBUG] [Thread-134383] [transport.py] [_log()] Compression: none
2026-02-11T19:16:23.588 [DEBUG] [Thread-134383] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:16:23.643 [DEBUG] [Thread-134383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:16:23.644 [DEBUG] [Thread-134383] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:16:23.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:16:23.645 [DEBUG] [Thread-134383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:16:23.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:16:23.700 [DEBUG] [Thread-134383] [transport.py] [_log()] userauth is OK
2026-02-11T19:16:23.700 [DEBUG] [Thread-134383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:16:23.700 [DEBUG] [Thread-134383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:16:23.700 [DEBUG] [Thread-134383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:16:23.700 [DEBUG] [Thread-134383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:16:23.719 [INFO] [Thread-134383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:16:23.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:16:23.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:16:24.535 [DEBUG] [Thread-134383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:16:24.536 [DEBUG] [Thread-134383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:16:24.584 [DEBUG] [Thread-134383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:16:24.584 [DEBUG] [Thread-134383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:16:24.594 [DEBUG] [Thread-134383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:16:24.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:16:24.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')
2026-02-11T19:16: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') -> 00000000
2026-02-11T19:16:24.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:16:24.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:16:24.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:16:24.631 [DEBUG] [Thread-134383] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:16:33.251 [DEBUG] [Thread-134385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:37.136 [DEBUG] [Thread-134386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:52.179 [DEBUG] [Thread-134387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:16:54.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:16:54.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:16:54.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:16:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 16, 22), 9.98, 52.62, 0.0, 24.53, 20.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:16:56.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:16:22
2026-02-11T19:16:56.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:16:57.030 [DEBUG] [Thread-134388] [transport.py] [_log()] starting thread (client mode): 0xa2d5da50
2026-02-11T19:16:57.030 [DEBUG] [Thread-134388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:16:57.049 [DEBUG] [Thread-134388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:16:57.050 [INFO] [Thread-134388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:57.053 [DEBUG] [Thread-134388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] client lang: <none>
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] server lang: <none>
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] kex follows: False
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] Compression: none
2026-02-11T19:16:57.054 [DEBUG] [Thread-134388] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:16:57.070 [DEBUG] [Thread-134388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:16:57.070 [DEBUG] [Thread-134388] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:16:57.070 [DEBUG] [Thread-134388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:16:57.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:16:57.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:16:57.071 [DEBUG] [Thread-134388] [transport.py] [_log()] userauth is OK
2026-02-11T19:16:57.071 [DEBUG] [Thread-134388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:16:57.071 [DEBUG] [Thread-134388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:16:57.071 [DEBUG] [Thread-134388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:16:57.071 [DEBUG] [Thread-134388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:16:57.080 [INFO] [Thread-134388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:16:57.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:16:57.733 [DEBUG] [Thread-134388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:16:57.734 [DEBUG] [Thread-134388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:16:57.734 [DEBUG] [Thread-134388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:16:57.775 [DEBUG] [Thread-134388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:16:57.775 [DEBUG] [Thread-134388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:16:57.778 [DEBUG] [Thread-134388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:16:57.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:16:57.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:16:57.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:16:57.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:16:57.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:16:57.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:16:57.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:16:57.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:16:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:16:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.719932 -999.00  +20.60  21.38     58  +12.20 1 2 1 1 1   887    0 9.00 51.35 ----- 21.4 21.4 274.8 30.2 21.5 -19.6 21.5 -18.5 21.2 -18.1 21.6 -19.0
2026-02-11T19:16:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:16:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:16:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.719932
2026-02-11T19:16:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:16:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:16:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:16:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:16:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:16:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:16:22', tmtdew=9.98, humidity=52.62, cloud=0.0, wind=24.53, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:16:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:16:57.804 [DEBUG] [Thread-134388] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:16:57.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:16:57.903 [DEBUG] [Thread-134391] [transport.py] [_log()] starting thread (client mode): 0xa2d5e4d0
2026-02-11T19:16:57.903 [DEBUG] [Thread-134391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:16:57.917 [DEBUG] [Thread-134391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:16:57.917 [INFO] [Thread-134391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:16:57.925 [DEBUG] [Thread-134391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] client lang: <none>
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] server lang: <none>
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] kex follows: False
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] Compression: none
2026-02-11T19:16:57.926 [DEBUG] [Thread-134391] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:16:57.983 [DEBUG] [Thread-134391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:16:57.983 [DEBUG] [Thread-134391] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:16:57.984 [DEBUG] [Thread-134391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:16:57.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:16:57.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:16:58.039 [DEBUG] [Thread-134391] [transport.py] [_log()] userauth is OK
2026-02-11T19:16:58.039 [DEBUG] [Thread-134391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:16:58.039 [DEBUG] [Thread-134391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:16:58.039 [DEBUG] [Thread-134391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:16:58.040 [DEBUG] [Thread-134391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:16:58.061 [INFO] [Thread-134391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:16:58.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:16:58.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:16:58.895 [DEBUG] [Thread-134391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:16:58.895 [DEBUG] [Thread-134391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:16:58.943 [DEBUG] [Thread-134391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:16:58.944 [DEBUG] [Thread-134391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:16:58.953 [DEBUG] [Thread-134391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:16:58.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:16:58.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:16:58.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:16:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:16:58.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:16:58.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:16:58.990 [DEBUG] [Thread-134391] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:17:06.520 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:17:06.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:17:07.216 [DEBUG] [Thread-134393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:17:22.262 [DEBUG] [Thread-134394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:17:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:17:29.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:17:29.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:17:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 16, 58), 9.98, 52.62, 0.0, 20.29, 20.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:17:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:16:58
2026-02-11T19:17:31.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:17:31.325 [DEBUG] [Thread-134395] [transport.py] [_log()] starting thread (client mode): 0xa2d5f5e0
2026-02-11T19:17:31.326 [DEBUG] [Thread-134395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:17:31.346 [DEBUG] [Thread-134395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:17:31.346 [INFO] [Thread-134395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:17:31.347 [DEBUG] [Thread-134395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] client lang: <none>
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] server lang: <none>
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] kex follows: False
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:17:31.348 [DEBUG] [Thread-134395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:17:31.349 [DEBUG] [Thread-134395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:17:31.349 [DEBUG] [Thread-134395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:17:31.349 [DEBUG] [Thread-134395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:17:31.349 [DEBUG] [Thread-134395] [transport.py] [_log()] Compression: none
2026-02-11T19:17:31.349 [DEBUG] [Thread-134395] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:17:31.369 [DEBUG] [Thread-134395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:17:31.369 [DEBUG] [Thread-134395] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:17:31.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:17:31.370 [DEBUG] [Thread-134395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:17:31.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:17:31.372 [DEBUG] [Thread-134395] [transport.py] [_log()] userauth is OK
2026-02-11T19:17:31.372 [DEBUG] [Thread-134395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:17:31.372 [DEBUG] [Thread-134395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:17:31.372 [DEBUG] [Thread-134395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:17:31.372 [DEBUG] [Thread-134395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:17:31.396 [INFO] [Thread-134395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:17:31.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:17:32.051 [DEBUG] [Thread-134395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:17:32.052 [DEBUG] [Thread-134395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:17:32.052 [DEBUG] [Thread-134395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:17:32.092 [DEBUG] [Thread-134395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:17:32.092 [DEBUG] [Thread-134395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:17:32.095 [DEBUG] [Thread-134395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:17:32.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:17:32.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:17:32.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:17:32.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:17:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:17:32.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:17:32.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:17:32.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:17:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:17:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.720279 -999.00  +20.60  20.35     58  +12.30 1 2 1 1 1   887    0 8.83 52.11 ----- 22.6 20.4 279.4 27.2 21.4 -19.7 21.5 -18.6 21.2 -18.1 21.5 -19.0
2026-02-11T19:17:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:17:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:17:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.720279
2026-02-11T19:17:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:17:32.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:17:32.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:17:32.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:17:32.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:17:32.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:16:58', tmtdew=9.98, humidity=52.62, cloud=0.0, wind=20.29, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:17:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:17:32.125 [DEBUG] [Thread-134395] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:17:32.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:17:32.221 [DEBUG] [Thread-134398] [transport.py] [_log()] starting thread (client mode): 0xa57d5240
2026-02-11T19:17:32.221 [DEBUG] [Thread-134398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:17:32.241 [DEBUG] [Thread-134398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:17:32.241 [INFO] [Thread-134398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:17:32.248 [DEBUG] [Thread-134398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] client lang: <none>
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] server lang: <none>
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] kex follows: False
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:17:32.249 [DEBUG] [Thread-134398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:17:32.250 [DEBUG] [Thread-134398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:17:32.250 [DEBUG] [Thread-134398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:17:32.250 [DEBUG] [Thread-134398] [transport.py] [_log()] Compression: none
2026-02-11T19:17:32.250 [DEBUG] [Thread-134398] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:17:32.306 [DEBUG] [Thread-134398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:17:32.307 [DEBUG] [Thread-134398] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:17:32.307 [DEBUG] [Thread-134398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:17:32.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:17:32.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:17:32.363 [DEBUG] [Thread-134398] [transport.py] [_log()] userauth is OK
2026-02-11T19:17:32.363 [DEBUG] [Thread-134398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:17:32.363 [DEBUG] [Thread-134398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:17:32.363 [DEBUG] [Thread-134398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:17:32.363 [DEBUG] [Thread-134398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:17:32.387 [INFO] [Thread-134398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:17:32.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:17:32.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:17:33.226 [DEBUG] [Thread-134398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:17:33.226 [DEBUG] [Thread-134398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:17:33.274 [DEBUG] [Thread-134398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:17:33.274 [DEBUG] [Thread-134398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:17:33.283 [DEBUG] [Thread-134398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:17:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:17:33.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:17:33.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:17:33.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:17:33.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:17:33.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:17:33.315 [DEBUG] [Thread-134400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:17:33.315 [DEBUG] [Thread-134398] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:17:37.297 [DEBUG] [Thread-134401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:17:52.347 [DEBUG] [Thread-134402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:18:03.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:18:03.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:18:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:18:05.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 17, 34), 10.07, 52.54, 0.0, 25.62, 21.19, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:18:05.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:17:34
2026-02-11T19:18:05.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:18:05.883 [DEBUG] [Thread-134403] [transport.py] [_log()] starting thread (client mode): 0xa575ac80
2026-02-11T19:18:05.884 [DEBUG] [Thread-134403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:18:05.904 [DEBUG] [Thread-134403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:18:05.904 [INFO] [Thread-134403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] client lang: <none>
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] server lang: <none>
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] kex follows: False
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:18:05.907 [DEBUG] [Thread-134403] [transport.py] [_log()] Compression: none
2026-02-11T19:18:05.908 [DEBUG] [Thread-134403] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:18:05.926 [DEBUG] [Thread-134403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:18:05.926 [DEBUG] [Thread-134403] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:18:05.927 [DEBUG] [Thread-134403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:18:05.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:18:05.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:18:05.930 [DEBUG] [Thread-134403] [transport.py] [_log()] userauth is OK
2026-02-11T19:18:05.930 [DEBUG] [Thread-134403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:18:05.930 [DEBUG] [Thread-134403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:18:05.930 [DEBUG] [Thread-134403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:18:05.930 [DEBUG] [Thread-134403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:18:05.945 [INFO] [Thread-134403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:18:05.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:18:06.593 [DEBUG] [Thread-134403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:18:06.593 [DEBUG] [Thread-134403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:18:06.593 [DEBUG] [Thread-134403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:18:06.634 [DEBUG] [Thread-134403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:18:06.635 [DEBUG] [Thread-134403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:18:06.637 [DEBUG] [Thread-134403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:18:06.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:18:06.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:18:06.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:18:06.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:18:06.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:18:06.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:18:06.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:18:06.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:18:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:18:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.720626 -999.00  +20.60  22.08     59  +12.40 1 2 1 1 1   887    0 9.05 59.29 ----- 20.3 22.1 280.6 29.7 21.5 -19.8 21.4 -18.5 21.2 -17.8 21.5 -19.0
2026-02-11T19:18:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:18:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:18:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.720626
2026-02-11T19:18:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:18:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:18:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:18:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:18:06.663 [DEBUG] [Thread-134403] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:18:06.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:18:06.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:18:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:17:34', tmtdew=10.07, humidity=52.54, cloud=0.0, wind=25.62, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:17:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:18:06.665 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:18:06.762 [DEBUG] [Thread-134406] [transport.py] [_log()] starting thread (client mode): 0xa2d541c0
2026-02-11T19:18:06.762 [DEBUG] [Thread-134406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:18:06.776 [DEBUG] [Thread-134406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:18:06.776 [INFO] [Thread-134406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:18:06.784 [DEBUG] [Thread-134406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:18:06.784 [DEBUG] [Thread-134406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:18:06.784 [DEBUG] [Thread-134406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:18:06.784 [DEBUG] [Thread-134406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:06.784 [DEBUG] [Thread-134406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:06.784 [DEBUG] [Thread-134406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:06.784 [DEBUG] [Thread-134406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] client lang: <none>
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] server lang: <none>
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] kex follows: False
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] Compression: none
2026-02-11T19:18:06.785 [DEBUG] [Thread-134406] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:18:06.843 [DEBUG] [Thread-134406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:18:06.843 [DEBUG] [Thread-134406] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:18:06.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:18:06.844 [DEBUG] [Thread-134406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:18:06.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:18:06.900 [DEBUG] [Thread-134406] [transport.py] [_log()] userauth is OK
2026-02-11T19:18:06.900 [DEBUG] [Thread-134406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:18:06.901 [DEBUG] [Thread-134406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:18:06.901 [DEBUG] [Thread-134406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:18:06.901 [DEBUG] [Thread-134406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:18:06.927 [INFO] [Thread-134406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:18:06.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:18:06.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:18:07.382 [DEBUG] [Thread-134408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:18:07.822 [DEBUG] [Thread-134406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:18:07.822 [DEBUG] [Thread-134406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:18:07.871 [DEBUG] [Thread-134406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:18:07.871 [DEBUG] [Thread-134406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:18:07.881 [DEBUG] [Thread-134406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:18:07.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:18:07.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:18:07.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:18:07.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:18:07.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:18:07.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:18:07.917 [DEBUG] [Thread-134406] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:18:22.431 [DEBUG] [Thread-134409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:18:33.371 [DEBUG] [Thread-134410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:18:37.466 [DEBUG] [Thread-134411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:18:37.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:18:37.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:18:37.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:18:40.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 18, 9), 9.85, 53.39, 0.0, 22.83, 20.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:18:40.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:18:09
2026-02-11T19:18:40.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:18:40.799 [DEBUG] [Thread-134412] [transport.py] [_log()] starting thread (client mode): 0xa2d57d90
2026-02-11T19:18:40.799 [DEBUG] [Thread-134412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:18:40.820 [DEBUG] [Thread-134412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:18:40.820 [INFO] [Thread-134412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] client lang: <none>
2026-02-11T19:18:40.823 [DEBUG] [Thread-134412] [transport.py] [_log()] server lang: <none>
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] kex follows: False
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] Compression: none
2026-02-11T19:18:40.824 [DEBUG] [Thread-134412] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:18:40.841 [DEBUG] [Thread-134412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:18:40.841 [DEBUG] [Thread-134412] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:18:40.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:18:40.842 [DEBUG] [Thread-134412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:18:40.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:18:40.844 [DEBUG] [Thread-134412] [transport.py] [_log()] userauth is OK
2026-02-11T19:18:40.844 [DEBUG] [Thread-134412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:18:40.844 [DEBUG] [Thread-134412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:18:40.844 [DEBUG] [Thread-134412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:18:40.844 [DEBUG] [Thread-134412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:18:40.858 [INFO] [Thread-134412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:18:40.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:18:41.443 [DEBUG] [Thread-134412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:18:41.443 [DEBUG] [Thread-134412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:18:41.443 [DEBUG] [Thread-134412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:18:41.484 [DEBUG] [Thread-134412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:18:41.484 [DEBUG] [Thread-134412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:18:41.487 [DEBUG] [Thread-134412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:18:41.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:18:41.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:18:41.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:18:41.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:18:41.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:18:41.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:18:41.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:18:41.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:18:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:18:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.720973 -999.00  +20.50  20.03     59  +12.30 1 2 1 1 1   886    0 9.26 63.68 ----- 17.8 20.0 281.7 24.9 21.4 -19.6 21.4 -18.3 21.1 -18.2 21.4 -19.0
2026-02-11T19:18:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:18:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:18:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.720973
2026-02-11T19:18:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:18:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:18:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:18:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:18:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:18:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:18:09', tmtdew=9.85, humidity=53.39, cloud=0.0, wind=22.83, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:18:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:18:41.511 [DEBUG] [Thread-134412] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:18:41.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:18:41.611 [DEBUG] [Thread-134415] [transport.py] [_log()] starting thread (client mode): 0xa57c10c0
2026-02-11T19:18:41.611 [DEBUG] [Thread-134415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:18:41.625 [DEBUG] [Thread-134415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:18:41.626 [INFO] [Thread-134415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] client lang: <none>
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] server lang: <none>
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] kex follows: False
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:18:41.633 [DEBUG] [Thread-134415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:18:41.634 [DEBUG] [Thread-134415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:18:41.634 [DEBUG] [Thread-134415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:18:41.634 [DEBUG] [Thread-134415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:18:41.634 [DEBUG] [Thread-134415] [transport.py] [_log()] Compression: none
2026-02-11T19:18:41.634 [DEBUG] [Thread-134415] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:18:41.693 [DEBUG] [Thread-134415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:18:41.694 [DEBUG] [Thread-134415] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:18:41.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:18:41.695 [DEBUG] [Thread-134415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:18:41.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:18:41.750 [DEBUG] [Thread-134415] [transport.py] [_log()] userauth is OK
2026-02-11T19:18:41.750 [DEBUG] [Thread-134415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:18:41.750 [DEBUG] [Thread-134415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:18:41.751 [DEBUG] [Thread-134415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:18:41.751 [DEBUG] [Thread-134415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:18:41.770 [INFO] [Thread-134415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:18:41.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:18:41.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:18:42.582 [DEBUG] [Thread-134415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:18:42.582 [DEBUG] [Thread-134415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:18:42.630 [DEBUG] [Thread-134415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:18:42.630 [DEBUG] [Thread-134415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:18:42.639 [DEBUG] [Thread-134415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:18:42.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:18:42.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:18:42.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:18:42.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:18:42.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:18:42.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:18:42.676 [DEBUG] [Thread-134415] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:18:52.500 [DEBUG] [Thread-134417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:19:06.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:19:06.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:19:07.560 [DEBUG] [Thread-134418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:19:12.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:19:12.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:19:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:19:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 18, 44), 9.81, 53.37, 0.0, 22.83, 20.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:19:14.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:18:44
2026-02-11T19:19:14.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:19:15.103 [DEBUG] [Thread-134419] [transport.py] [_log()] starting thread (client mode): 0xa5759180
2026-02-11T19:19:15.103 [DEBUG] [Thread-134419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:19:15.123 [DEBUG] [Thread-134419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:19:15.123 [INFO] [Thread-134419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] client lang: <none>
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] server lang: <none>
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] kex follows: False
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] Compression: none
2026-02-11T19:19:15.126 [DEBUG] [Thread-134419] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:19:15.141 [DEBUG] [Thread-134419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:19:15.142 [DEBUG] [Thread-134419] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:19:15.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:19:15.143 [DEBUG] [Thread-134419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:19:15.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:19:15.145 [DEBUG] [Thread-134419] [transport.py] [_log()] userauth is OK
2026-02-11T19:19:15.145 [DEBUG] [Thread-134419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:19:15.145 [DEBUG] [Thread-134419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:19:15.145 [DEBUG] [Thread-134419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:19:15.145 [DEBUG] [Thread-134419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:19:15.169 [INFO] [Thread-134419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:19:15.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:19:15.788 [DEBUG] [Thread-134419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:19:15.789 [DEBUG] [Thread-134419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:19:15.789 [DEBUG] [Thread-134419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:19:15.830 [DEBUG] [Thread-134419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:19:15.830 [DEBUG] [Thread-134419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:19:15.832 [DEBUG] [Thread-134419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:19:15.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:19:15.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:19:15.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:19:15.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:19:15.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:19:15.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:19:15.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:19:15.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:19:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:19:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.721320 -999.00  +20.50  19.67     59  +12.40 1 2 1 1 1   886    0 9.38 66.83 ----- 18.8 19.7 281.0 26.3 21.4 -19.6 21.4 -18.3 21.1 -17.9 21.4 -18.7
2026-02-11T19:19:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:19:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:19:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.721320
2026-02-11T19:19:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:19:15.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:19:15.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:19:15.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:19:15.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:19:15.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:18:44', tmtdew=9.81, humidity=53.37, cloud=0.0, wind=22.83, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:18:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:19:15.852 [DEBUG] [Thread-134419] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:19:15.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:19:15.941 [DEBUG] [Thread-134422] [transport.py] [_log()] starting thread (client mode): 0xa57b1ae0
2026-02-11T19:19:15.941 [DEBUG] [Thread-134422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:19:15.956 [DEBUG] [Thread-134422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:19:15.956 [INFO] [Thread-134422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:19:15.963 [DEBUG] [Thread-134422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:19:15.963 [DEBUG] [Thread-134422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] client lang: <none>
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] server lang: <none>
2026-02-11T19:19:15.964 [DEBUG] [Thread-134422] [transport.py] [_log()] kex follows: False
2026-02-11T19:19:15.965 [DEBUG] [Thread-134422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:19:15.965 [DEBUG] [Thread-134422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:19:15.965 [DEBUG] [Thread-134422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:19:15.965 [DEBUG] [Thread-134422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:19:15.965 [DEBUG] [Thread-134422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:19:15.965 [DEBUG] [Thread-134422] [transport.py] [_log()] Compression: none
2026-02-11T19:19:15.965 [DEBUG] [Thread-134422] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:19:16.022 [DEBUG] [Thread-134422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:19:16.023 [DEBUG] [Thread-134422] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:19:16.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:19:16.025 [DEBUG] [Thread-134422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:19:16.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:19:16.078 [DEBUG] [Thread-134422] [transport.py] [_log()] userauth is OK
2026-02-11T19:19:16.079 [DEBUG] [Thread-134422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:19:16.079 [DEBUG] [Thread-134422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:19:16.079 [DEBUG] [Thread-134422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:19:16.079 [DEBUG] [Thread-134422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:19:16.098 [INFO] [Thread-134422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:19:16.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:19:16.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:19:16.926 [DEBUG] [Thread-134422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:19:16.926 [DEBUG] [Thread-134422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:19:16.974 [DEBUG] [Thread-134422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:19:16.975 [DEBUG] [Thread-134422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:19:16.985 [DEBUG] [Thread-134422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:19:16.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:19:16.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:19:17.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:19:17.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:19:17.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:19:17.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:19:17.021 [DEBUG] [Thread-134422] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:19:22.600 [DEBUG] [Thread-134424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:19:33.428 [DEBUG] [Thread-134425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:19:37.651 [DEBUG] [Thread-134426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:19:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:19:47.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:19:47.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:19:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 19, 21), 9.81, 53.35, 0.0, 21.23, 20.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:19:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:19:21
2026-02-11T19:19:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:19:49.474 [DEBUG] [Thread-134427] [transport.py] [_log()] starting thread (client mode): 0xa2d57af0
2026-02-11T19:19:49.474 [DEBUG] [Thread-134427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:19:49.493 [DEBUG] [Thread-134427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:19:49.494 [INFO] [Thread-134427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:19:49.496 [DEBUG] [Thread-134427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:19:49.496 [DEBUG] [Thread-134427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:19:49.496 [DEBUG] [Thread-134427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:19:49.496 [DEBUG] [Thread-134427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:49.496 [DEBUG] [Thread-134427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:49.496 [DEBUG] [Thread-134427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] client lang: <none>
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] server lang: <none>
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] kex follows: False
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] Compression: none
2026-02-11T19:19:49.497 [DEBUG] [Thread-134427] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:19:49.516 [DEBUG] [Thread-134427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:19:49.516 [DEBUG] [Thread-134427] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:19:49.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:19:49.517 [DEBUG] [Thread-134427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:19:49.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:19:49.519 [DEBUG] [Thread-134427] [transport.py] [_log()] userauth is OK
2026-02-11T19:19:49.519 [DEBUG] [Thread-134427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:19:49.520 [DEBUG] [Thread-134427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:19:49.520 [DEBUG] [Thread-134427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:19:49.520 [DEBUG] [Thread-134427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:19:49.544 [INFO] [Thread-134427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:19:49.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:19:50.170 [DEBUG] [Thread-134427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:19:50.170 [DEBUG] [Thread-134427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:19:50.170 [DEBUG] [Thread-134427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:19:50.222 [DEBUG] [Thread-134427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:19:50.223 [DEBUG] [Thread-134427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:19:50.225 [DEBUG] [Thread-134427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:19:50.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:19:50.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:19:50.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:19:50.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:19:50.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:19:50.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:19:50.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:19:50.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:19:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:19:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.721668 -999.00  +20.50  19.01     59  +12.40 1 2 1 1 1   886    0 9.77 73.53 ----- 19.8 19.0 286.6 26.2 21.4 -19.4 21.4 -18.0 21.1 -18.2 21.4 -18.8
2026-02-11T19:19:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:19:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:19:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.721668
2026-02-11T19:19:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:19:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:19:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:19:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:19:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:19:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:19:21', tmtdew=9.81, humidity=53.35, cloud=0.0, wind=21.23, temperature=20.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:19:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:19:50.250 [DEBUG] [Thread-134427] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:19:50.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:19:50.345 [DEBUG] [Thread-134430] [transport.py] [_log()] starting thread (client mode): 0xa2d54d30
2026-02-11T19:19:50.345 [DEBUG] [Thread-134430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:19:50.360 [DEBUG] [Thread-134430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:19:50.360 [INFO] [Thread-134430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:19:50.367 [DEBUG] [Thread-134430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:19:50.367 [DEBUG] [Thread-134430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:19:50.367 [DEBUG] [Thread-134430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:19:50.367 [DEBUG] [Thread-134430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] client lang: <none>
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] server lang: <none>
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] kex follows: False
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] Compression: none
2026-02-11T19:19:50.368 [DEBUG] [Thread-134430] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:19:50.425 [DEBUG] [Thread-134430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:19:50.426 [DEBUG] [Thread-134430] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:19:50.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:19:50.427 [DEBUG] [Thread-134430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:19:50.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:19:50.481 [DEBUG] [Thread-134430] [transport.py] [_log()] userauth is OK
2026-02-11T19:19:50.481 [DEBUG] [Thread-134430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:19:50.482 [DEBUG] [Thread-134430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:19:50.482 [DEBUG] [Thread-134430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:19:50.482 [DEBUG] [Thread-134430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:19:50.500 [INFO] [Thread-134430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:19:50.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:19:50.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:19:51.308 [DEBUG] [Thread-134430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:19:51.309 [DEBUG] [Thread-134430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:19:51.356 [DEBUG] [Thread-134430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:19:51.357 [DEBUG] [Thread-134430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:19:51.366 [DEBUG] [Thread-134430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:19:51.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:19:51.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:19: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
2026-02-11T19:19:51.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:19:51.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:19:51.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:19:51.405 [DEBUG] [Thread-134430] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:19:52.685 [DEBUG] [Thread-134432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:06.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:06.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:07.735 [DEBUG] [Thread-134433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:20:21.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:20: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
2026-02-11T19:20:22.773 [DEBUG] [Thread-134434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:23.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 19, 56), 9.75, 53.39, 0.0, 21.88, 20.66, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:20:23.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:19:56
2026-02-11T19:20:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:20:24.045 [DEBUG] [Thread-134435] [transport.py] [_log()] starting thread (client mode): 0xa57b0460
2026-02-11T19:20:24.045 [DEBUG] [Thread-134435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:20:24.067 [DEBUG] [Thread-134435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:20:24.067 [INFO] [Thread-134435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] client lang: <none>
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] server lang: <none>
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] kex follows: False
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:20:24.070 [DEBUG] [Thread-134435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:20:24.071 [DEBUG] [Thread-134435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:20:24.071 [DEBUG] [Thread-134435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:20:24.071 [DEBUG] [Thread-134435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:20:24.071 [DEBUG] [Thread-134435] [transport.py] [_log()] Compression: none
2026-02-11T19:20:24.071 [DEBUG] [Thread-134435] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:20:24.088 [DEBUG] [Thread-134435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:20:24.089 [DEBUG] [Thread-134435] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:20:24.089 [DEBUG] [Thread-134435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:20:24.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:20:24.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:20:24.091 [DEBUG] [Thread-134435] [transport.py] [_log()] userauth is OK
2026-02-11T19:20:24.091 [DEBUG] [Thread-134435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:20:24.091 [DEBUG] [Thread-134435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:20:24.091 [DEBUG] [Thread-134435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:20:24.091 [DEBUG] [Thread-134435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:20:24.112 [INFO] [Thread-134435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:20:24.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:20:24.723 [DEBUG] [Thread-134435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:20:24.724 [DEBUG] [Thread-134435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:20:24.724 [DEBUG] [Thread-134435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:20:24.764 [DEBUG] [Thread-134435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:20:24.764 [DEBUG] [Thread-134435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:20:24.768 [DEBUG] [Thread-134435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:20:24.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:20:24.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:20:24.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:20:24.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:20:24.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:20:24.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:20:24.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:20:24.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:20:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:20:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.722015 -999.00  +20.50  20.21     59  +12.30 1 2 1 1 1   886    0 9.68 73.32 ----- 21.9 20.2 277.2 28.1 21.4 -19.3 21.3 -17.9 21.1 -17.5 21.3 -18.6
2026-02-11T19:20:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:20:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:20:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.722015
2026-02-11T19:20:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:20:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:20:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:20:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:20:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:20:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:19:56', tmtdew=9.75, humidity=53.39, cloud=0.0, wind=21.88, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:19:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:20:24.794 [DEBUG] [Thread-134435] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:20:24.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:20:24.903 [DEBUG] [Thread-134438] [transport.py] [_log()] starting thread (client mode): 0xa57d7fd0
2026-02-11T19:20:24.904 [DEBUG] [Thread-134438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:20:24.920 [DEBUG] [Thread-134438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:20:24.920 [INFO] [Thread-134438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] client lang: <none>
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] server lang: <none>
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] kex follows: False
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:20:24.928 [DEBUG] [Thread-134438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:20:24.929 [DEBUG] [Thread-134438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:20:24.929 [DEBUG] [Thread-134438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:20:24.929 [DEBUG] [Thread-134438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:20:24.929 [DEBUG] [Thread-134438] [transport.py] [_log()] Compression: none
2026-02-11T19:20:24.929 [DEBUG] [Thread-134438] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:20:24.986 [DEBUG] [Thread-134438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:20:24.987 [DEBUG] [Thread-134438] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:20:24.987 [DEBUG] [Thread-134438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:20:24.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:20:24.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:20:25.046 [DEBUG] [Thread-134438] [transport.py] [_log()] userauth is OK
2026-02-11T19:20:25.046 [DEBUG] [Thread-134438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:20:25.046 [DEBUG] [Thread-134438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:20:25.046 [DEBUG] [Thread-134438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:20:25.047 [DEBUG] [Thread-134438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:20:25.073 [INFO] [Thread-134438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:20:25.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:20:25.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:20:25.928 [DEBUG] [Thread-134438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:20:25.928 [DEBUG] [Thread-134438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:20:25.976 [DEBUG] [Thread-134438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:20:25.977 [DEBUG] [Thread-134438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:20:25.988 [DEBUG] [Thread-134438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:20:25.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:20:25.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')
2026-02-11T19:20:26.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:20:26.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:20:26.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:20:26.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:20:26.023 [DEBUG] [Thread-134438] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:20:33.479 [DEBUG] [Thread-134440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:37.808 [DEBUG] [Thread-134441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:52.855 [DEBUG] [Thread-134442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:20:56.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:20:56.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:20:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:20:58.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 20, 32), 9.72, 53.49, 0.0, 22.9, 20.63, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:20:58.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:20:32
2026-02-11T19:20:58.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:20:58.677 [DEBUG] [Thread-134443] [transport.py] [_log()] starting thread (client mode): 0xa57e25f0
2026-02-11T19:20:58.677 [DEBUG] [Thread-134443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:20:58.697 [DEBUG] [Thread-134443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:20:58.697 [INFO] [Thread-134443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] client lang: <none>
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] server lang: <none>
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] kex follows: False
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] Compression: none
2026-02-11T19:20:58.700 [DEBUG] [Thread-134443] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:20:58.716 [DEBUG] [Thread-134443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:20:58.716 [DEBUG] [Thread-134443] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:20:58.717 [DEBUG] [Thread-134443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:20:58.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:20:58.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:20:58.718 [DEBUG] [Thread-134443] [transport.py] [_log()] userauth is OK
2026-02-11T19:20:58.719 [DEBUG] [Thread-134443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:20:58.719 [DEBUG] [Thread-134443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:20:58.719 [DEBUG] [Thread-134443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:20:58.719 [DEBUG] [Thread-134443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:20:58.738 [INFO] [Thread-134443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:20:58.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:20:59.490 [DEBUG] [Thread-134443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:20:59.490 [DEBUG] [Thread-134443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:20:59.491 [DEBUG] [Thread-134443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:20:59.531 [DEBUG] [Thread-134443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:20:59.532 [DEBUG] [Thread-134443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:20:59.535 [DEBUG] [Thread-134443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:20:59.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:20:59.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:20:59.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:20:59.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:20:59.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:20:59.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:20:59.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:20:59.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:20:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:20:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.722709 -999.00  +20.50  16.93     60  +12.50 1 2 1 1 1   886    0 9.96 82.83 ----- 17.6 16.9 281.8 25.2 21.4 -19.3 21.3 -17.6 21.0 -17.5 21.3 -18.7
2026-02-11T19:20:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:20:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:20:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.722709
2026-02-11T19:20:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:20:59.566 [DEBUG] [Thread-134443] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:20:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:20:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:20:59.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:20:59.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:20:59.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:20:32', tmtdew=9.72, humidity=53.49, cloud=0.0, wind=22.9, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:20:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:20:59.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:20:59.671 [DEBUG] [Thread-134446] [transport.py] [_log()] starting thread (client mode): 0xa57e1840
2026-02-11T19:20:59.671 [DEBUG] [Thread-134446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:20:59.685 [DEBUG] [Thread-134446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:20:59.685 [INFO] [Thread-134446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:20:59.692 [DEBUG] [Thread-134446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:20:59.692 [DEBUG] [Thread-134446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:20:59.692 [DEBUG] [Thread-134446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] client lang: <none>
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] server lang: <none>
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] kex follows: False
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] Compression: none
2026-02-11T19:20:59.693 [DEBUG] [Thread-134446] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:20:59.748 [DEBUG] [Thread-134446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:20:59.748 [DEBUG] [Thread-134446] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:20:59.749 [DEBUG] [Thread-134446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:20:59.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:20:59.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:20:59.809 [DEBUG] [Thread-134446] [transport.py] [_log()] userauth is OK
2026-02-11T19:20:59.809 [DEBUG] [Thread-134446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:20:59.809 [DEBUG] [Thread-134446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:20:59.809 [DEBUG] [Thread-134446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:20:59.809 [DEBUG] [Thread-134446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:20:59.833 [INFO] [Thread-134446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:20:59.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:20:59.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:21:00.629 [DEBUG] [Thread-134446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:21:00.629 [DEBUG] [Thread-134446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:21:00.677 [DEBUG] [Thread-134446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:21:00.677 [DEBUG] [Thread-134446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:21:00.686 [DEBUG] [Thread-134446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:21:00.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:21:00.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:21:00.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:21:00.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:21:00.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:21:00.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:21:00.720 [DEBUG] [Thread-134446] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:21:07.090 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:21:07.091 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:21:07.893 [DEBUG] [Thread-134448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:21:22.948 [DEBUG] [Thread-134449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:21:30.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:21:30.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:21:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:21:32.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 21, 7), 9.72, 53.47, 0.0, 24.95, 20.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:21:32.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:21:07
2026-02-11T19:21:32.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:21:33.111 [DEBUG] [Thread-134450] [transport.py] [_log()] starting thread (client mode): 0xa57d4d90
2026-02-11T19:21:33.112 [DEBUG] [Thread-134450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:21:33.133 [DEBUG] [Thread-134450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:21:33.133 [INFO] [Thread-134450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:21:33.136 [DEBUG] [Thread-134450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] client lang: <none>
2026-02-11T19:21:33.137 [DEBUG] [Thread-134450] [transport.py] [_log()] server lang: <none>
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] kex follows: False
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] Compression: none
2026-02-11T19:21:33.138 [DEBUG] [Thread-134450] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:21:33.156 [DEBUG] [Thread-134450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:21:33.156 [DEBUG] [Thread-134450] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:21:33.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:21:33.157 [DEBUG] [Thread-134450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:21:33.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:21:33.159 [DEBUG] [Thread-134450] [transport.py] [_log()] userauth is OK
2026-02-11T19:21:33.159 [DEBUG] [Thread-134450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:21:33.159 [DEBUG] [Thread-134450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:21:33.160 [DEBUG] [Thread-134450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:21:33.160 [DEBUG] [Thread-134450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:21:33.178 [INFO] [Thread-134450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:21:33.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:21:33.533 [DEBUG] [Thread-134452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:21:33.808 [DEBUG] [Thread-134450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:21:33.809 [DEBUG] [Thread-134450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:21:33.809 [DEBUG] [Thread-134450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:21:33.849 [DEBUG] [Thread-134450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:21:33.849 [DEBUG] [Thread-134450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:21:33.852 [DEBUG] [Thread-134450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:21:33.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:21:33.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:21:33.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:21:33.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:21:33.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:21:33.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:21:33.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:21:33.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:21:33.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:21:33.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.723057 -999.00  +20.50  17.29     60  +12.50 1 2 1 1 1   886    0 9.93 83.17 ----- 16.1 17.3 286.4 24.0 21.3 -19.4 21.3 -17.5 21.0 -17.3 21.2 -18.5
2026-02-11T19:21:33.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:21:33.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:21:33.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.723057
2026-02-11T19:21:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:21:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:21:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:21:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:21:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:21:33.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:21:07', tmtdew=9.72, humidity=53.47, cloud=0.0, wind=24.95, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:21:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:21:33.878 [DEBUG] [Thread-134450] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:21:33.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:21:33.988 [DEBUG] [Thread-134454] [transport.py] [_log()] starting thread (client mode): 0xa2d55ea0
2026-02-11T19:21:33.989 [DEBUG] [Thread-134454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:21:34.002 [DEBUG] [Thread-134454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:21:34.003 [INFO] [Thread-134454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:21:34.010 [DEBUG] [Thread-134454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] client lang: <none>
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] server lang: <none>
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] kex follows: False
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:21:34.011 [DEBUG] [Thread-134454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:21:34.012 [DEBUG] [Thread-134454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:21:34.012 [DEBUG] [Thread-134454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:21:34.012 [DEBUG] [Thread-134454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:21:34.012 [DEBUG] [Thread-134454] [transport.py] [_log()] Compression: none
2026-02-11T19:21:34.012 [DEBUG] [Thread-134454] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:21:34.068 [DEBUG] [Thread-134454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:21:34.069 [DEBUG] [Thread-134454] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:21:34.069 [DEBUG] [Thread-134454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:21:34.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:21:34.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:21:34.125 [DEBUG] [Thread-134454] [transport.py] [_log()] userauth is OK
2026-02-11T19:21:34.125 [DEBUG] [Thread-134454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:21:34.126 [DEBUG] [Thread-134454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:21:34.126 [DEBUG] [Thread-134454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:21:34.126 [DEBUG] [Thread-134454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:21:34.145 [INFO] [Thread-134454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:21:34.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:21:34.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:21:34.975 [DEBUG] [Thread-134454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:21:34.976 [DEBUG] [Thread-134454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:21:35.026 [DEBUG] [Thread-134454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:21:35.027 [DEBUG] [Thread-134454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:21:35.048 [DEBUG] [Thread-134454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:21:35.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:21:35.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')
2026-02-11T19:21:35.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:21:35.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:21:35.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:21:35.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:21:35.096 [DEBUG] [Thread-134454] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:21:37.987 [DEBUG] [Thread-134456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:21:53.036 [DEBUG] [Thread-134457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:22:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:22:05.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:22:05.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:22:06.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 21, 42), 9.95, 52.94, 0.0, 26.5, 21.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:22:06.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:21:42
2026-02-11T19:22:07.231 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:22:07.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:22:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:22:07.520 [DEBUG] [Thread-134458] [transport.py] [_log()] starting thread (client mode): 0xa57c3d00
2026-02-11T19:22:07.521 [DEBUG] [Thread-134458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:22:07.539 [DEBUG] [Thread-134458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:22:07.539 [INFO] [Thread-134458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:22:07.540 [DEBUG] [Thread-134458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] client lang: <none>
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] server lang: <none>
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] kex follows: False
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] Compression: none
2026-02-11T19:22:07.541 [DEBUG] [Thread-134458] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:22:07.549 [DEBUG] [Thread-134458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:22:07.550 [DEBUG] [Thread-134458] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:22:07.550 [DEBUG] [Thread-134458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:22:07.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:22:07.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:22:07.552 [DEBUG] [Thread-134458] [transport.py] [_log()] userauth is OK
2026-02-11T19:22:07.552 [DEBUG] [Thread-134458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:22:07.552 [DEBUG] [Thread-134458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:22:07.552 [DEBUG] [Thread-134458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:22:07.552 [DEBUG] [Thread-134458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:22:07.568 [INFO] [Thread-134458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:22:07.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:22:08.072 [DEBUG] [Thread-134460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:22:08.179 [DEBUG] [Thread-134458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:22:08.179 [DEBUG] [Thread-134458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:22:08.179 [DEBUG] [Thread-134458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:22:08.220 [DEBUG] [Thread-134458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:22:08.221 [DEBUG] [Thread-134458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:22:08.224 [DEBUG] [Thread-134458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:22:08.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:22:08.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:22:08.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:22:08.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:22:08.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:22:08.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:22:08.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:22:08.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:22:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:22:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.723404 -999.00  +20.40  20.40     60  +12.50 1 2 1 1 1   885    0 9.96 81.33 ----- 22.4 20.4 271.4 28.4 21.3 -19.2 21.2 -17.5 21.0 -17.3 21.2 -18.4
2026-02-11T19:22:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:22:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:22:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.723404
2026-02-11T19:22:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:22:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:22:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:22:08.249 [DEBUG] [Thread-134458] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:22:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:22:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:22:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:21:42', tmtdew=9.95, humidity=52.94, cloud=0.0, wind=26.5, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:21:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:22:08.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:22:08.349 [DEBUG] [Thread-134462] [transport.py] [_log()] starting thread (client mode): 0xa57c0940
2026-02-11T19:22:08.349 [DEBUG] [Thread-134462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:22:08.370 [DEBUG] [Thread-134462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:22:08.370 [INFO] [Thread-134462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] client lang: <none>
2026-02-11T19:22:08.381 [DEBUG] [Thread-134462] [transport.py] [_log()] server lang: <none>
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] kex follows: False
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] Compression: none
2026-02-11T19:22:08.382 [DEBUG] [Thread-134462] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:22:08.444 [DEBUG] [Thread-134462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:22:08.444 [DEBUG] [Thread-134462] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:22:08.445 [DEBUG] [Thread-134462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:22:08.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:22:08.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:22:08.505 [DEBUG] [Thread-134462] [transport.py] [_log()] userauth is OK
2026-02-11T19:22:08.505 [DEBUG] [Thread-134462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:22:08.505 [DEBUG] [Thread-134462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:22:08.506 [DEBUG] [Thread-134462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:22:08.506 [DEBUG] [Thread-134462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:22:08.526 [INFO] [Thread-134462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:22:08.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:22:08.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:22:09.344 [DEBUG] [Thread-134462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:22:09.345 [DEBUG] [Thread-134462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:22:09.392 [DEBUG] [Thread-134462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:22:09.392 [DEBUG] [Thread-134462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:22:09.401 [DEBUG] [Thread-134462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:22:09.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:22:09.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:22: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
2026-02-11T19:22:09.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:22:09.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:22:09.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:22:09.439 [DEBUG] [Thread-134462] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:22:23.109 [DEBUG] [Thread-134464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:22:33.584 [DEBUG] [Thread-134465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:22:38.158 [DEBUG] [Thread-134466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:22:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:22:39.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:22:39.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:22:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 22, 18), 9.58, 54.12, 0.0, 23.96, 20.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:22:41.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:22:18
2026-02-11T19:22:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:22:42.477 [DEBUG] [Thread-134467] [transport.py] [_log()] starting thread (client mode): 0xa57d7df0
2026-02-11T19:22:42.477 [DEBUG] [Thread-134467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:22:42.496 [DEBUG] [Thread-134467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:22:42.496 [INFO] [Thread-134467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] client lang: <none>
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] server lang: <none>
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] kex follows: False
2026-02-11T19:22:42.499 [DEBUG] [Thread-134467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:22:42.500 [DEBUG] [Thread-134467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:22:42.500 [DEBUG] [Thread-134467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:22:42.500 [DEBUG] [Thread-134467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:22:42.500 [DEBUG] [Thread-134467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:22:42.500 [DEBUG] [Thread-134467] [transport.py] [_log()] Compression: none
2026-02-11T19:22:42.500 [DEBUG] [Thread-134467] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:22:42.516 [DEBUG] [Thread-134467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:22:42.516 [DEBUG] [Thread-134467] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:22:42.517 [DEBUG] [Thread-134467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:22:42.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:22:42.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:22:42.519 [DEBUG] [Thread-134467] [transport.py] [_log()] userauth is OK
2026-02-11T19:22:42.519 [DEBUG] [Thread-134467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:22:42.519 [DEBUG] [Thread-134467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:22:42.520 [DEBUG] [Thread-134467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:22:42.520 [DEBUG] [Thread-134467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:22:42.541 [INFO] [Thread-134467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:22:42.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:22:43.172 [DEBUG] [Thread-134467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:22:43.172 [DEBUG] [Thread-134467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:22:43.173 [DEBUG] [Thread-134467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:22:43.213 [DEBUG] [Thread-134467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:22:43.213 [DEBUG] [Thread-134467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:22:43.216 [DEBUG] [Thread-134467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:22:43.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:22:43.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:22:43.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:22:43.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:22:43.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:22:43.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:22:43.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:22:43.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:22:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:22:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.723751 -999.00  +20.40  24.59     60  +12.50 1 2 1 1 1   885    0 10.16 87.17 ----- 19.3 24.6 273.8 26.1 21.2 -19.4 21.2 -17.3 20.9 -16.7 21.2 -18.5
2026-02-11T19:22:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:22:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:22:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.723751
2026-02-11T19:22:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:22:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:22:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:22:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:22:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:22:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:22:18', tmtdew=9.58, humidity=54.12, cloud=0.0, wind=23.96, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:22:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:22:43.237 [DEBUG] [Thread-134467] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:22:43.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:22:43.341 [DEBUG] [Thread-134470] [transport.py] [_log()] starting thread (client mode): 0xa57d67a0
2026-02-11T19:22:43.342 [DEBUG] [Thread-134470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:22:43.356 [DEBUG] [Thread-134470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:22:43.356 [INFO] [Thread-134470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:22:43.364 [DEBUG] [Thread-134470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:22:43.364 [DEBUG] [Thread-134470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:22:43.364 [DEBUG] [Thread-134470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:22:43.364 [DEBUG] [Thread-134470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:43.364 [DEBUG] [Thread-134470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] client lang: <none>
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] server lang: <none>
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] kex follows: False
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] Compression: none
2026-02-11T19:22:43.365 [DEBUG] [Thread-134470] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:22:43.424 [DEBUG] [Thread-134470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:22:43.424 [DEBUG] [Thread-134470] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:22:43.425 [DEBUG] [Thread-134470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:22:43.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:22:43.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:22:43.480 [DEBUG] [Thread-134470] [transport.py] [_log()] userauth is OK
2026-02-11T19:22:43.481 [DEBUG] [Thread-134470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:22:43.481 [DEBUG] [Thread-134470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:22:43.481 [DEBUG] [Thread-134470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:22:43.481 [DEBUG] [Thread-134470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:22:43.500 [INFO] [Thread-134470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:22:43.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:22:43.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:22:44.316 [DEBUG] [Thread-134470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:22:44.317 [DEBUG] [Thread-134470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:22:44.364 [DEBUG] [Thread-134470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:22:44.364 [DEBUG] [Thread-134470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:22:44.373 [DEBUG] [Thread-134470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:22:44.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:22:44.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:22:44.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:22:44.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:22:44.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:22:44.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:22:44.416 [DEBUG] [Thread-134470] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:22:53.190 [DEBUG] [Thread-134472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:07.375 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:07.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:08.236 [DEBUG] [Thread-134473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:14.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:23:14.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:23:14.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
2026-02-11T19:23:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 22, 53), 9.58, 54.12, 0.0, 21.7, 20.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:23:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:22:53
2026-02-11T19:23:17.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:23:17.345 [DEBUG] [Thread-134474] [transport.py] [_log()] starting thread (client mode): 0xa5742320
2026-02-11T19:23:17.345 [DEBUG] [Thread-134474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:23:17.364 [DEBUG] [Thread-134474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:23:17.364 [INFO] [Thread-134474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:17.367 [DEBUG] [Thread-134474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] client lang: <none>
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] server lang: <none>
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] kex follows: False
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] Compression: none
2026-02-11T19:23:17.368 [DEBUG] [Thread-134474] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:23:17.385 [DEBUG] [Thread-134474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:23:17.385 [DEBUG] [Thread-134474] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:23:17.386 [DEBUG] [Thread-134474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:23:17.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:23:17.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:23:17.388 [DEBUG] [Thread-134474] [transport.py] [_log()] userauth is OK
2026-02-11T19:23:17.388 [DEBUG] [Thread-134474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:23:17.388 [DEBUG] [Thread-134474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:23:17.388 [DEBUG] [Thread-134474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:23:17.388 [DEBUG] [Thread-134474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:23:17.403 [INFO] [Thread-134474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:23:17.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:23:18.043 [DEBUG] [Thread-134474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:23:18.043 [DEBUG] [Thread-134474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:23:18.044 [DEBUG] [Thread-134474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:23:18.084 [DEBUG] [Thread-134474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:23:18.085 [DEBUG] [Thread-134474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:23:18.087 [DEBUG] [Thread-134474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:23:18.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:23:18.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:23:18.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:23:18.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:23:18.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:23:18.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:23:18.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:23:18.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:23:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:23:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.724098 -999.00  +20.40  19.15     60  +12.50 1 2 1 1 1   885    0 10.23 88.69 ----- 16.1 19.1 281.2 25.7 21.2 -19.1 21.2 -17.2 20.9 -16.7 21.2 -18.4
2026-02-11T19:23:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:23:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:23:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.724098
2026-02-11T19:23:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:23:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:23:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:23:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:23:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:23:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:22:53', tmtdew=9.58, humidity=54.12, cloud=0.0, wind=21.7, temperature=20.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:22:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:23:18.113 [DEBUG] [Thread-134474] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:23:18.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:23:18.209 [DEBUG] [Thread-134477] [transport.py] [_log()] starting thread (client mode): 0xa5743b80
2026-02-11T19:23:18.210 [DEBUG] [Thread-134477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:23:18.224 [DEBUG] [Thread-134477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:23:18.224 [INFO] [Thread-134477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:18.232 [DEBUG] [Thread-134477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] client lang: <none>
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] server lang: <none>
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] kex follows: False
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:23:18.233 [DEBUG] [Thread-134477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:23:18.234 [DEBUG] [Thread-134477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:23:18.234 [DEBUG] [Thread-134477] [transport.py] [_log()] Compression: none
2026-02-11T19:23:18.234 [DEBUG] [Thread-134477] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:23:18.292 [DEBUG] [Thread-134477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:23:18.292 [DEBUG] [Thread-134477] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:23:18.293 [DEBUG] [Thread-134477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:23:18.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:23:18.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:23:18.349 [DEBUG] [Thread-134477] [transport.py] [_log()] userauth is OK
2026-02-11T19:23:18.349 [DEBUG] [Thread-134477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:23:18.349 [DEBUG] [Thread-134477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:23:18.349 [DEBUG] [Thread-134477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:23:18.349 [DEBUG] [Thread-134477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:23:18.373 [INFO] [Thread-134477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:23:18.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:23:18.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:23:19.207 [DEBUG] [Thread-134477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:23:19.207 [DEBUG] [Thread-134477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:23:19.256 [DEBUG] [Thread-134477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:23:19.256 [DEBUG] [Thread-134477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:23:19.265 [DEBUG] [Thread-134477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:23:19.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:23:19.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:23:19.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
2026-02-11T19:23:19.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:23:19.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:23:19.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:23:19.302 [DEBUG] [Thread-134477] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:23:23.271 [DEBUG] [Thread-134479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:33.663 [DEBUG] [Thread-134480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:38.326 [DEBUG] [Thread-134481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:23:49.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:23:49.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:23:51.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 23, 28), 9.55, 54.23, 0.0, 21.46, 20.61, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:23:51.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:23:28
2026-02-11T19:23:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:23:51.743 [DEBUG] [Thread-134482] [transport.py] [_log()] starting thread (client mode): 0xa2d5f340
2026-02-11T19:23:51.743 [DEBUG] [Thread-134482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:23:51.764 [DEBUG] [Thread-134482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:23:51.764 [INFO] [Thread-134482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:23:51.767 [DEBUG] [Thread-134482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:23:51.767 [DEBUG] [Thread-134482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:23:51.767 [DEBUG] [Thread-134482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:23:51.767 [DEBUG] [Thread-134482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] client lang: <none>
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] server lang: <none>
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] kex follows: False
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] Compression: none
2026-02-11T19:23:51.768 [DEBUG] [Thread-134482] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:23:51.790 [DEBUG] [Thread-134482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:23:51.790 [DEBUG] [Thread-134482] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:23:51.791 [DEBUG] [Thread-134482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:23:51.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:23:51.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:23:51.793 [DEBUG] [Thread-134482] [transport.py] [_log()] userauth is OK
2026-02-11T19:23:51.793 [DEBUG] [Thread-134482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:23:51.793 [DEBUG] [Thread-134482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:23:51.793 [DEBUG] [Thread-134482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:23:51.794 [DEBUG] [Thread-134482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:23:51.817 [INFO] [Thread-134482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:23:51.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:23:52.568 [DEBUG] [Thread-134482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:23:52.568 [DEBUG] [Thread-134482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:23:52.568 [DEBUG] [Thread-134482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:23:52.609 [DEBUG] [Thread-134482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:23:52.609 [DEBUG] [Thread-134482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:23:52.612 [DEBUG] [Thread-134482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:23:52.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:23:52.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:23:52.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:23:52.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:23:52.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:23:52.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:23:52.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:23:52.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:23:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:23:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.724445 -999.00  +20.40  25.25     60  +12.40 1 2 1 1 1   885    0 10.08 86.26 ----- 23.1 25.2 270.0 31.9 21.2 -19.3 21.2 -17.1 20.9 -16.6 21.2 -18.3
2026-02-11T19:23:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:23:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:23:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.724445
2026-02-11T19:23:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:23:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:23:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:23:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:23:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:23:52.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:23:28', tmtdew=9.55, humidity=54.23, cloud=0.0, wind=21.46, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:23:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:23:52.639 [DEBUG] [Thread-134482] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:23:52.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:23:52.738 [DEBUG] [Thread-134485] [transport.py] [_log()] starting thread (client mode): 0xa2d554e0
2026-02-11T19:23:52.738 [DEBUG] [Thread-134485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:23:52.753 [DEBUG] [Thread-134485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:23:52.753 [INFO] [Thread-134485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:23:52.761 [DEBUG] [Thread-134485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:23:52.761 [DEBUG] [Thread-134485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:23:52.761 [DEBUG] [Thread-134485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:23:52.761 [DEBUG] [Thread-134485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:52.761 [DEBUG] [Thread-134485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:23:52.761 [DEBUG] [Thread-134485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:52.761 [DEBUG] [Thread-134485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] client lang: <none>
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] server lang: <none>
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] kex follows: False
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:23:52.762 [DEBUG] [Thread-134485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:23:52.763 [DEBUG] [Thread-134485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:23:52.763 [DEBUG] [Thread-134485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:23:52.763 [DEBUG] [Thread-134485] [transport.py] [_log()] Compression: none
2026-02-11T19:23:52.763 [DEBUG] [Thread-134485] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:23:52.820 [DEBUG] [Thread-134485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:23:52.821 [DEBUG] [Thread-134485] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:23:52.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:23:52.822 [DEBUG] [Thread-134485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:23:52.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:23:52.875 [DEBUG] [Thread-134485] [transport.py] [_log()] userauth is OK
2026-02-11T19:23:52.876 [DEBUG] [Thread-134485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:23:52.876 [DEBUG] [Thread-134485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:23:52.876 [DEBUG] [Thread-134485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:23:52.876 [DEBUG] [Thread-134485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:23:52.894 [INFO] [Thread-134485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:23:52.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:23:52.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:23:53.364 [DEBUG] [Thread-134487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:23:53.717 [DEBUG] [Thread-134485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:23:53.717 [DEBUG] [Thread-134485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:23:53.765 [DEBUG] [Thread-134485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:23:53.766 [DEBUG] [Thread-134485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:23:53.775 [DEBUG] [Thread-134485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:23:53.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:23:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:23:53.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:23:53.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:23:53.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:23:53.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:23:53.812 [DEBUG] [Thread-134485] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:24:07.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:24:07.518 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:24:08.413 [DEBUG] [Thread-134488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:24:23.447 [DEBUG] [Thread-134489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:24:23.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:24:23.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:24:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:24:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 24, 4), 9.53, 54.3, 0.0, 24.4, 20.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:24:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:24:04
2026-02-11T19:24:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:24:26.248 [DEBUG] [Thread-134490] [transport.py] [_log()] starting thread (client mode): 0xa57b2f80
2026-02-11T19:24:26.248 [DEBUG] [Thread-134490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:24:26.267 [DEBUG] [Thread-134490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:24:26.268 [INFO] [Thread-134490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] client lang: <none>
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] server lang: <none>
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] kex follows: False
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:24:26.271 [DEBUG] [Thread-134490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:24:26.272 [DEBUG] [Thread-134490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:24:26.272 [DEBUG] [Thread-134490] [transport.py] [_log()] Compression: none
2026-02-11T19:24:26.272 [DEBUG] [Thread-134490] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:24:26.281 [DEBUG] [Thread-134490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:24:26.281 [DEBUG] [Thread-134490] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:24:26.282 [DEBUG] [Thread-134490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:24:26.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:24:26.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:24:26.284 [DEBUG] [Thread-134490] [transport.py] [_log()] userauth is OK
2026-02-11T19:24:26.284 [DEBUG] [Thread-134490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:24:26.284 [DEBUG] [Thread-134490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:24:26.284 [DEBUG] [Thread-134490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:24:26.284 [DEBUG] [Thread-134490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:24:26.309 [INFO] [Thread-134490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:24:26.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:24:26.953 [DEBUG] [Thread-134490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:24:26.954 [DEBUG] [Thread-134490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:24:26.954 [DEBUG] [Thread-134490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:24:26.994 [DEBUG] [Thread-134490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:24:26.994 [DEBUG] [Thread-134490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:24:26.998 [DEBUG] [Thread-134490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:24:27.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:24:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:24:27.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:24:27.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:24:27.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:24:27.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:24:27.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:24:27.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:24:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:24:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.724793 -999.00  +20.40  24.56     60  +12.40 1 2 1 1 1   884    0 10.42 90.63 ----- 23.9 24.6 278.2 29.2 21.2 -19.2 21.1 -17.0 20.9 -16.6 21.1 -18.3
2026-02-11T19:24:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:24:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:24:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.724793
2026-02-11T19:24:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:24:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:24:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:24:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:24:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:24:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:24:04', tmtdew=9.53, humidity=54.3, cloud=0.0, wind=24.4, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:23:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:24:27.024 [DEBUG] [Thread-134490] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:24:27.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:24:27.120 [DEBUG] [Thread-134493] [transport.py] [_log()] starting thread (client mode): 0xa57c0940
2026-02-11T19:24:27.120 [DEBUG] [Thread-134493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:24:27.135 [DEBUG] [Thread-134493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:24:27.135 [INFO] [Thread-134493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:24:27.143 [DEBUG] [Thread-134493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:24:27.143 [DEBUG] [Thread-134493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] client lang: <none>
2026-02-11T19:24:27.144 [DEBUG] [Thread-134493] [transport.py] [_log()] server lang: <none>
2026-02-11T19:24:27.145 [DEBUG] [Thread-134493] [transport.py] [_log()] kex follows: False
2026-02-11T19:24:27.145 [DEBUG] [Thread-134493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:24:27.145 [DEBUG] [Thread-134493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:24:27.145 [DEBUG] [Thread-134493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:24:27.145 [DEBUG] [Thread-134493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:24:27.145 [DEBUG] [Thread-134493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:24:27.145 [DEBUG] [Thread-134493] [transport.py] [_log()] Compression: none
2026-02-11T19:24:27.146 [DEBUG] [Thread-134493] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:24:27.204 [DEBUG] [Thread-134493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:24:27.204 [DEBUG] [Thread-134493] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:24:27.205 [DEBUG] [Thread-134493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:24:27.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:24:27.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:24:27.260 [DEBUG] [Thread-134493] [transport.py] [_log()] userauth is OK
2026-02-11T19:24:27.260 [DEBUG] [Thread-134493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:24:27.260 [DEBUG] [Thread-134493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:24:27.260 [DEBUG] [Thread-134493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:24:27.260 [DEBUG] [Thread-134493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:24:27.279 [INFO] [Thread-134493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:24:27.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:24:27.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:24:28.103 [DEBUG] [Thread-134493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:24:28.103 [DEBUG] [Thread-134493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:24:28.151 [DEBUG] [Thread-134493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:24:28.151 [DEBUG] [Thread-134493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:24:28.160 [DEBUG] [Thread-134493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:24:28.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:24:28.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:24:28.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:24:28.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:24:28.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:24:28.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:24:28.194 [DEBUG] [Thread-134493] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:24:33.715 [DEBUG] [Thread-134495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:24:38.487 [DEBUG] [Thread-134496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:24:53.541 [DEBUG] [Thread-134497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:24:58.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:24:58.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:24:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:25:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 24, 39), 9.75, 53.6, 0.0, 19.62, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:25:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:24:39
2026-02-11T19:25:00.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:25:00.676 [DEBUG] [Thread-134498] [transport.py] [_log()] starting thread (client mode): 0xa5740760
2026-02-11T19:25:00.676 [DEBUG] [Thread-134498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:25:00.697 [DEBUG] [Thread-134498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:25:00.697 [INFO] [Thread-134498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] client lang: <none>
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] server lang: <none>
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] kex follows: False
2026-02-11T19:25:00.701 [DEBUG] [Thread-134498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:25:00.702 [DEBUG] [Thread-134498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:25:00.702 [DEBUG] [Thread-134498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:25:00.702 [DEBUG] [Thread-134498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:25:00.702 [DEBUG] [Thread-134498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:25:00.702 [DEBUG] [Thread-134498] [transport.py] [_log()] Compression: none
2026-02-11T19:25:00.702 [DEBUG] [Thread-134498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:25:00.717 [DEBUG] [Thread-134498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:25:00.717 [DEBUG] [Thread-134498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:25:00.718 [DEBUG] [Thread-134498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:25:00.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:25:00.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:25:00.720 [DEBUG] [Thread-134498] [transport.py] [_log()] userauth is OK
2026-02-11T19:25:00.721 [DEBUG] [Thread-134498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:25:00.721 [DEBUG] [Thread-134498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:25:00.721 [DEBUG] [Thread-134498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:25:00.721 [DEBUG] [Thread-134498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:25:00.746 [INFO] [Thread-134498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:25:00.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:25:01.325 [DEBUG] [Thread-134498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:25:01.325 [DEBUG] [Thread-134498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:25:01.325 [DEBUG] [Thread-134498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:25:01.366 [DEBUG] [Thread-134498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:25:01.366 [DEBUG] [Thread-134498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:25:01.369 [DEBUG] [Thread-134498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:25:01.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:25:01.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:25:01.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:25:01.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:25:01.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:25:01.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:25:01.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:25:01.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:25:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:25:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.725140 -999.00  +20.40  25.83     60  +12.40 1 2 1 1 1   884    0 10.35 86.91 ----- 25.3 25.8 273.6 28.8 21.2 -19.2 21.2 -17.1 20.9 -16.5 21.1 -18.3
2026-02-11T19:25:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:25:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:25:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.725140
2026-02-11T19:25:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:25:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:25:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:25:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:25:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:25:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:24:39', tmtdew=9.75, humidity=53.6, cloud=0.0, wind=19.62, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:24:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:25:01.392 [DEBUG] [Thread-134498] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:25:01.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:25:01.486 [DEBUG] [Thread-134501] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a60
2026-02-11T19:25:01.486 [DEBUG] [Thread-134501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:25:01.500 [DEBUG] [Thread-134501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:25:01.500 [INFO] [Thread-134501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:25:01.507 [DEBUG] [Thread-134501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] client lang: <none>
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] server lang: <none>
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] kex follows: False
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] Compression: none
2026-02-11T19:25:01.508 [DEBUG] [Thread-134501] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:25:01.566 [DEBUG] [Thread-134501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:25:01.567 [DEBUG] [Thread-134501] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:25:01.567 [DEBUG] [Thread-134501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:25:01.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:25:01.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:25:01.627 [DEBUG] [Thread-134501] [transport.py] [_log()] userauth is OK
2026-02-11T19:25:01.627 [DEBUG] [Thread-134501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:25:01.627 [DEBUG] [Thread-134501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:25:01.627 [DEBUG] [Thread-134501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:25:01.627 [DEBUG] [Thread-134501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:25:01.649 [INFO] [Thread-134501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:25:01.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:25:01.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:25:02.482 [DEBUG] [Thread-134501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:25:02.482 [DEBUG] [Thread-134501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:25:02.530 [DEBUG] [Thread-134501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:25:02.530 [DEBUG] [Thread-134501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:25:02.543 [DEBUG] [Thread-134501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:25:02.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:25:02.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:25:02.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:25:02.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:25:02.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:25:02.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:25:02.575 [DEBUG] [Thread-134501] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:25:07.657 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:25:07.658 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:25:08.575 [DEBUG] [Thread-134503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:25:23.623 [DEBUG] [Thread-134504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:25:32.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:25:32.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19: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
2026-02-11T19:25:33.768 [DEBUG] [Thread-134505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:25:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 25, 15), 9.51, 54.37, 0.0, 24.72, 20.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:25:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:25:15
2026-02-11T19:25:34.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:25:35.031 [DEBUG] [Thread-134506] [transport.py] [_log()] starting thread (client mode): 0xa5740b80
2026-02-11T19:25:35.031 [DEBUG] [Thread-134506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:25:35.051 [DEBUG] [Thread-134506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:25:35.051 [INFO] [Thread-134506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:25:35.054 [DEBUG] [Thread-134506] [transport.py] [_log()] client lang: <none>
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] server lang: <none>
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] kex follows: False
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] Compression: none
2026-02-11T19:25:35.055 [DEBUG] [Thread-134506] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:25:35.072 [DEBUG] [Thread-134506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:25:35.072 [DEBUG] [Thread-134506] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:25:35.073 [DEBUG] [Thread-134506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:25:35.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:25:35.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:25:35.117 [DEBUG] [Thread-134506] [transport.py] [_log()] userauth is OK
2026-02-11T19:25:35.117 [DEBUG] [Thread-134506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:25:35.117 [DEBUG] [Thread-134506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:25:35.117 [DEBUG] [Thread-134506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:25:35.117 [DEBUG] [Thread-134506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:25:35.149 [INFO] [Thread-134506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:25:35.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:25:35.802 [DEBUG] [Thread-134506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:25:35.803 [DEBUG] [Thread-134506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:25:35.803 [DEBUG] [Thread-134506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:25:35.844 [DEBUG] [Thread-134506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:25:35.844 [DEBUG] [Thread-134506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:25:35.847 [DEBUG] [Thread-134506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:25:35.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:25:35.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:25:35.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:25:35.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:25:35.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:25:35.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:25:35.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:25:35.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:25:35.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:25:35.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.725487 -999.00  +20.40  16.73     60  +12.60 1 2 1 1 1   884    0 10.22 88.72 ----- 16.0 16.7 280.2 24.0 21.2 -19.0 21.2 -17.0 20.9 -16.5 21.2 -18.2
2026-02-11T19:25:35.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:25:35.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:25:35.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.725487
2026-02-11T19:25:35.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:25:35.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:25:35.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:25:35.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:25:35.874 [DEBUG] [Thread-134506] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:25:35.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:25:35.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:25:15', tmtdew=9.51, humidity=54.37, cloud=0.0, wind=24.72, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:24:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:25:35.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:25:35.984 [DEBUG] [Thread-134509] [transport.py] [_log()] starting thread (client mode): 0xa57c0be0
2026-02-11T19:25:35.984 [DEBUG] [Thread-134509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:25:35.998 [DEBUG] [Thread-134509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:25:35.998 [INFO] [Thread-134509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] client lang: <none>
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] server lang: <none>
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] kex follows: False
2026-02-11T19:25:36.006 [DEBUG] [Thread-134509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:25:36.007 [DEBUG] [Thread-134509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:25:36.007 [DEBUG] [Thread-134509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:25:36.007 [DEBUG] [Thread-134509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:25:36.007 [DEBUG] [Thread-134509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:25:36.007 [DEBUG] [Thread-134509] [transport.py] [_log()] Compression: none
2026-02-11T19:25:36.007 [DEBUG] [Thread-134509] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:25:36.063 [DEBUG] [Thread-134509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:25:36.063 [DEBUG] [Thread-134509] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:25:36.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:25:36.064 [DEBUG] [Thread-134509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:25:36.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:25:36.119 [DEBUG] [Thread-134509] [transport.py] [_log()] userauth is OK
2026-02-11T19:25:36.119 [DEBUG] [Thread-134509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:25:36.119 [DEBUG] [Thread-134509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:25:36.119 [DEBUG] [Thread-134509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:25:36.120 [DEBUG] [Thread-134509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:25:36.138 [INFO] [Thread-134509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:25:36.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:25:36.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:25:36.961 [DEBUG] [Thread-134509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:25:36.962 [DEBUG] [Thread-134509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:25:37.009 [DEBUG] [Thread-134509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:25:37.010 [DEBUG] [Thread-134509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:25:37.019 [DEBUG] [Thread-134509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:25:37.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:25:37.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:25:37.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:25:37.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:25:37.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:25:37.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:25:37.055 [DEBUG] [Thread-134509] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:25:38.663 [DEBUG] [Thread-134511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:25:53.715 [DEBUG] [Thread-134512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:26:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:26:07.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:26:07.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:26:07.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:26:07.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:26:08.755 [DEBUG] [Thread-134513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:26:09.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 25, 51), 9.46, 54.53, 0.0, 23.66, 20.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:26:09.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:25:51
2026-02-11T19:26:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:26:09.649 [DEBUG] [Thread-134514] [transport.py] [_log()] starting thread (client mode): 0xa57c35e0
2026-02-11T19:26:09.649 [DEBUG] [Thread-134514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:26:09.668 [DEBUG] [Thread-134514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:26:09.668 [INFO] [Thread-134514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] client lang: <none>
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] server lang: <none>
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] kex follows: False
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] Compression: none
2026-02-11T19:26:09.672 [DEBUG] [Thread-134514] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:26:09.687 [DEBUG] [Thread-134514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:26:09.688 [DEBUG] [Thread-134514] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:26:09.688 [DEBUG] [Thread-134514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:26:09.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:26:09.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:26:09.689 [DEBUG] [Thread-134514] [transport.py] [_log()] userauth is OK
2026-02-11T19:26:09.689 [DEBUG] [Thread-134514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:26:09.689 [DEBUG] [Thread-134514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:26:09.689 [DEBUG] [Thread-134514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:26:09.689 [DEBUG] [Thread-134514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:26:09.705 [INFO] [Thread-134514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:26:09.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:26:10.352 [DEBUG] [Thread-134514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:26:10.352 [DEBUG] [Thread-134514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:26:10.352 [DEBUG] [Thread-134514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:26:10.393 [DEBUG] [Thread-134514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:26:10.394 [DEBUG] [Thread-134514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:26:10.397 [DEBUG] [Thread-134514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:26:10.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:26:10.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:26:10.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:26:10.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:26:10.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:26:10.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:26:10.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:26:10.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:26:10.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:26:10.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.726181 -999.00  +20.40  18.05     60  +12.50 1 2 1 1 1   883    0 10.14 82.88 ----- 21.1 18.1 277.2 22.3 21.1 -19.0 21.2 -17.2 20.9 -16.3 21.2 -18.3
2026-02-11T19:26:10.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:26:10.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:26:10.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.726181
2026-02-11T19:26:10.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:26:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:26:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:26:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:26:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:26:10.424 [DEBUG] [Thread-134514] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:26:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:25:51', tmtdew=9.46, humidity=54.53, cloud=0.0, wind=23.66, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:25:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:26:10.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:26:10.520 [DEBUG] [Thread-134517] [transport.py] [_log()] starting thread (client mode): 0xa5742200
2026-02-11T19:26:10.520 [DEBUG] [Thread-134517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:26:10.536 [DEBUG] [Thread-134517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:26:10.536 [INFO] [Thread-134517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:26:10.543 [DEBUG] [Thread-134517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] client lang: <none>
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] server lang: <none>
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] kex follows: False
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:26:10.544 [DEBUG] [Thread-134517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:26:10.545 [DEBUG] [Thread-134517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:26:10.545 [DEBUG] [Thread-134517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:26:10.545 [DEBUG] [Thread-134517] [transport.py] [_log()] Compression: none
2026-02-11T19:26:10.545 [DEBUG] [Thread-134517] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:26:10.603 [DEBUG] [Thread-134517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:26:10.604 [DEBUG] [Thread-134517] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:26:10.604 [DEBUG] [Thread-134517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:26:10.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:26:10.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:26:10.667 [DEBUG] [Thread-134517] [transport.py] [_log()] userauth is OK
2026-02-11T19:26:10.667 [DEBUG] [Thread-134517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:26:10.667 [DEBUG] [Thread-134517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:26:10.667 [DEBUG] [Thread-134517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:26:10.667 [DEBUG] [Thread-134517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:26:10.689 [INFO] [Thread-134517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:26:10.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:26:10.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:26:11.512 [DEBUG] [Thread-134517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:26:11.512 [DEBUG] [Thread-134517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:26:11.559 [DEBUG] [Thread-134517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:26:11.560 [DEBUG] [Thread-134517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:26:11.569 [DEBUG] [Thread-134517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:26:11.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:26:11.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:26:11.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:26:11.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:26:11.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:26:11.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:26:11.605 [DEBUG] [Thread-134517] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:26:23.787 [DEBUG] [Thread-134519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:26:33.848 [DEBUG] [Thread-134520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:26:38.846 [DEBUG] [Thread-134521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:26:41.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:26:41.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:26:41.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:26:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 26, 27), 9.48, 54.45, 0.0, 23.94, 20.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:26:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:26:27
2026-02-11T19:26:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:26:44.096 [DEBUG] [Thread-134522] [transport.py] [_log()] starting thread (client mode): 0xa2d5efe0
2026-02-11T19:26:44.096 [DEBUG] [Thread-134522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:26:44.117 [DEBUG] [Thread-134522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:26:44.117 [INFO] [Thread-134522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:26:44.118 [DEBUG] [Thread-134522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:26:44.118 [DEBUG] [Thread-134522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:26:44.118 [DEBUG] [Thread-134522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:26:44.118 [DEBUG] [Thread-134522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] client lang: <none>
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] server lang: <none>
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] kex follows: False
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] Compression: none
2026-02-11T19:26:44.119 [DEBUG] [Thread-134522] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:26:44.137 [DEBUG] [Thread-134522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:26:44.138 [DEBUG] [Thread-134522] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:26:44.138 [DEBUG] [Thread-134522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:26:44.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:26:44.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:26:44.140 [DEBUG] [Thread-134522] [transport.py] [_log()] userauth is OK
2026-02-11T19:26:44.140 [DEBUG] [Thread-134522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:26:44.141 [DEBUG] [Thread-134522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:26:44.141 [DEBUG] [Thread-134522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:26:44.141 [DEBUG] [Thread-134522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:26:44.158 [INFO] [Thread-134522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:26:44.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:26:44.958 [DEBUG] [Thread-134522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:26:44.958 [DEBUG] [Thread-134522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:26:44.958 [DEBUG] [Thread-134522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:26:44.998 [DEBUG] [Thread-134522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:26:44.998 [DEBUG] [Thread-134522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:26:45.002 [DEBUG] [Thread-134522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:26:45.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:26:45.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:26:45.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:26:45.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:26:45.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:26:45.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:26:45.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:26:45.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:26:45.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:26:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.726529 -999.00  +20.40  23.10     60  +12.50 1 2 1 1 1   882    0 10.34 88.56 ----- 20.8 23.1 274.4 28.4 21.2 -19.0 21.2 -17.2 20.9 -16.6 21.2 -18.4
2026-02-11T19:26:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:26:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:26:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.726529
2026-02-11T19:26:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:26:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:26:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:26:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:26:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:26:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:26:27', tmtdew=9.48, humidity=54.45, cloud=0.0, wind=23.94, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:26:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:26:45.023 [DEBUG] [Thread-134522] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:26:45.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:26:45.120 [DEBUG] [Thread-134525] [transport.py] [_log()] starting thread (client mode): 0xa5773850
2026-02-11T19:26:45.121 [DEBUG] [Thread-134525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:26:45.135 [DEBUG] [Thread-134525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:26:45.135 [INFO] [Thread-134525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] client lang: <none>
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] server lang: <none>
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] kex follows: False
2026-02-11T19:26:45.143 [DEBUG] [Thread-134525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:26:45.144 [DEBUG] [Thread-134525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:26:45.144 [DEBUG] [Thread-134525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:26:45.144 [DEBUG] [Thread-134525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:26:45.144 [DEBUG] [Thread-134525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:26:45.144 [DEBUG] [Thread-134525] [transport.py] [_log()] Compression: none
2026-02-11T19:26:45.144 [DEBUG] [Thread-134525] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:26:45.202 [DEBUG] [Thread-134525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:26:45.203 [DEBUG] [Thread-134525] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:26:45.203 [DEBUG] [Thread-134525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:26:45.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:26:45.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:26:45.258 [DEBUG] [Thread-134525] [transport.py] [_log()] userauth is OK
2026-02-11T19:26:45.259 [DEBUG] [Thread-134525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:26:45.259 [DEBUG] [Thread-134525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:26:45.259 [DEBUG] [Thread-134525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:26:45.259 [DEBUG] [Thread-134525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:26:45.283 [INFO] [Thread-134525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:26:45.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:26:45.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:26:46.112 [DEBUG] [Thread-134525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:26:46.112 [DEBUG] [Thread-134525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:26:46.161 [DEBUG] [Thread-134525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:26:46.161 [DEBUG] [Thread-134525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:26:46.170 [DEBUG] [Thread-134525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:26:46.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:26:46.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:26: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
2026-02-11T19:26:46.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:26:46.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:26:46.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:26:46.205 [DEBUG] [Thread-134525] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:26:53.882 [DEBUG] [Thread-134527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:07.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:07.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:08.934 [DEBUG] [Thread-134528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:27:16.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:27:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:27:18.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 27, 2), 9.53, 54.28, 0.0, 21.95, 20.51, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:27:18.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:27:02
2026-02-11T19:27:19.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:27:19.347 [DEBUG] [Thread-134529] [transport.py] [_log()] starting thread (client mode): 0xa5770160
2026-02-11T19:27:19.347 [DEBUG] [Thread-134529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:27:19.367 [DEBUG] [Thread-134529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:27:19.368 [INFO] [Thread-134529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:27:19.369 [DEBUG] [Thread-134529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:27:19.369 [DEBUG] [Thread-134529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:27:19.369 [DEBUG] [Thread-134529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:27:19.369 [DEBUG] [Thread-134529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:19.369 [DEBUG] [Thread-134529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:19.369 [DEBUG] [Thread-134529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] client lang: <none>
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] server lang: <none>
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] kex follows: False
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] Compression: none
2026-02-11T19:27:19.370 [DEBUG] [Thread-134529] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:27:19.389 [DEBUG] [Thread-134529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:27:19.389 [DEBUG] [Thread-134529] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:27:19.390 [DEBUG] [Thread-134529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:27:19.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:27:19.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:27:19.392 [DEBUG] [Thread-134529] [transport.py] [_log()] userauth is OK
2026-02-11T19:27:19.392 [DEBUG] [Thread-134529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:27:19.392 [DEBUG] [Thread-134529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:27:19.393 [DEBUG] [Thread-134529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:27:19.393 [DEBUG] [Thread-134529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:27:19.416 [INFO] [Thread-134529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:27:19.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:27:20.123 [DEBUG] [Thread-134529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:27:20.123 [DEBUG] [Thread-134529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:27:20.123 [DEBUG] [Thread-134529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:27:20.164 [DEBUG] [Thread-134529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:27:20.164 [DEBUG] [Thread-134529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:27:20.167 [DEBUG] [Thread-134529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:27:20.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:27:20.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:27:20.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:27:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:27:20.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:27:20.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:27:20.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:27:20.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:27:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:27:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.726876 -999.00  +20.40  20.71     60  +12.40 1 2 1 1 1   882    0 10.41 89.20 ----- 23.1 20.7 277.8 24.5 21.2 -19.0 21.2 -17.3 20.9 -16.6 21.2 -18.3
2026-02-11T19:27:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:27:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:27:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.726876
2026-02-11T19:27:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:27:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:27:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:27:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:27:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:27:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:27:02', tmtdew=9.53, humidity=54.28, cloud=0.0, wind=21.95, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:26:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:27:20.192 [DEBUG] [Thread-134529] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:27:20.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:27:20.287 [DEBUG] [Thread-134532] [transport.py] [_log()] starting thread (client mode): 0xa57718d0
2026-02-11T19:27:20.287 [DEBUG] [Thread-134532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:27:20.301 [DEBUG] [Thread-134532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:27:20.301 [INFO] [Thread-134532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:27:20.309 [DEBUG] [Thread-134532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:27:20.309 [DEBUG] [Thread-134532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:27:20.309 [DEBUG] [Thread-134532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:27:20.309 [DEBUG] [Thread-134532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:20.309 [DEBUG] [Thread-134532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] client lang: <none>
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] server lang: <none>
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] kex follows: False
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] Compression: none
2026-02-11T19:27:20.310 [DEBUG] [Thread-134532] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:27:20.365 [DEBUG] [Thread-134532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:27:20.366 [DEBUG] [Thread-134532] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:27:20.366 [DEBUG] [Thread-134532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:27:20.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:27:20.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:27:20.422 [DEBUG] [Thread-134532] [transport.py] [_log()] userauth is OK
2026-02-11T19:27:20.422 [DEBUG] [Thread-134532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:27:20.423 [DEBUG] [Thread-134532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:27:20.423 [DEBUG] [Thread-134532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:27:20.423 [DEBUG] [Thread-134532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:27:20.441 [INFO] [Thread-134532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:27:20.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:27:20.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:27:21.280 [DEBUG] [Thread-134532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:27:21.280 [DEBUG] [Thread-134532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:27:21.329 [DEBUG] [Thread-134532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:27:21.329 [DEBUG] [Thread-134532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:27:21.338 [DEBUG] [Thread-134532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:27:21.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:27:21.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:27:21.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:27:21.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:27:21.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:27:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:27:21.375 [DEBUG] [Thread-134532] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:27:23.966 [DEBUG] [Thread-134534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:33.919 [DEBUG] [Thread-134535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:39.023 [DEBUG] [Thread-134536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:51.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:27:51.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:27:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:27:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 27, 37), 9.71, 53.77, 0.0, 27.06, 21.03, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:27:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:27:37
2026-02-11T19:27:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:27:53.812 [DEBUG] [Thread-134537] [transport.py] [_log()] starting thread (client mode): 0xa5743070
2026-02-11T19:27:53.812 [DEBUG] [Thread-134537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:27:53.832 [DEBUG] [Thread-134537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:27:53.832 [INFO] [Thread-134537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:27:53.835 [DEBUG] [Thread-134537] [transport.py] [_log()] client lang: <none>
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] server lang: <none>
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] kex follows: False
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] Compression: none
2026-02-11T19:27:53.836 [DEBUG] [Thread-134537] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:27:53.853 [DEBUG] [Thread-134537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:27:53.853 [DEBUG] [Thread-134537] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:27:53.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:27:53.854 [DEBUG] [Thread-134537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:27:53.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:27:53.856 [DEBUG] [Thread-134537] [transport.py] [_log()] userauth is OK
2026-02-11T19:27:53.857 [DEBUG] [Thread-134537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:27:53.857 [DEBUG] [Thread-134537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:27:53.857 [DEBUG] [Thread-134537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:27:53.857 [DEBUG] [Thread-134537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:27:53.881 [INFO] [Thread-134537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:27:53.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:27:54.061 [DEBUG] [Thread-134539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:27:54.528 [DEBUG] [Thread-134537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:27:54.529 [DEBUG] [Thread-134537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:27:54.529 [DEBUG] [Thread-134537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:27:54.569 [DEBUG] [Thread-134537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:27:54.569 [DEBUG] [Thread-134537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:27:54.572 [DEBUG] [Thread-134537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:27:54.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:27:54.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:27:54.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:27:54.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:27:54.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:27:54.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:27:54.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:27:54.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:27:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:27:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.727223 -999.00  +20.40  22.46     60  +12.40 1 2 1 1 1   881    0 10.40 90.99 ----- 18.7 22.5 272.0 27.3 21.1 -19.0 21.2 -17.5 20.9 -17.0 21.2 -18.3
2026-02-11T19:27:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:27:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:27:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.727223
2026-02-11T19:27:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:27:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:27:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:27:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:27:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:27:54.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:27:37', tmtdew=9.71, humidity=53.77, cloud=0.0, wind=27.06, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:27:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:27:54.598 [DEBUG] [Thread-134537] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:27:54.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:27:54.696 [DEBUG] [Thread-134541] [transport.py] [_log()] starting thread (client mode): 0xa5741870
2026-02-11T19:27:54.696 [DEBUG] [Thread-134541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:27:54.710 [DEBUG] [Thread-134541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:27:54.710 [INFO] [Thread-134541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:27:54.718 [DEBUG] [Thread-134541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:27:54.718 [DEBUG] [Thread-134541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:27:54.718 [DEBUG] [Thread-134541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:27:54.718 [DEBUG] [Thread-134541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] client lang: <none>
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] server lang: <none>
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] kex follows: False
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:27:54.719 [DEBUG] [Thread-134541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:27:54.720 [DEBUG] [Thread-134541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:27:54.720 [DEBUG] [Thread-134541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:27:54.720 [DEBUG] [Thread-134541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:27:54.720 [DEBUG] [Thread-134541] [transport.py] [_log()] Compression: none
2026-02-11T19:27:54.720 [DEBUG] [Thread-134541] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:27:54.778 [DEBUG] [Thread-134541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:27:54.778 [DEBUG] [Thread-134541] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:27:54.779 [DEBUG] [Thread-134541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:27:54.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:27:54.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:27:54.835 [DEBUG] [Thread-134541] [transport.py] [_log()] userauth is OK
2026-02-11T19:27:54.835 [DEBUG] [Thread-134541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:27:54.835 [DEBUG] [Thread-134541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:27:54.835 [DEBUG] [Thread-134541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:27:54.835 [DEBUG] [Thread-134541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:27:54.855 [INFO] [Thread-134541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:27:54.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:27:54.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:27:55.713 [DEBUG] [Thread-134541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:27:55.713 [DEBUG] [Thread-134541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:27:55.761 [DEBUG] [Thread-134541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:27:55.761 [DEBUG] [Thread-134541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:27:55.770 [DEBUG] [Thread-134541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:27:55.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:27: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')
2026-02-11T19:27:55.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:27:55.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:27:55.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:27:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:27:55.805 [DEBUG] [Thread-134541] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:28:09.100 [DEBUG] [Thread-134543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:28:12.478 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:28:12.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:28:24.153 [DEBUG] [Thread-134544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:28:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:28:25.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:28:25.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:28:27.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 28, 13), 9.67, 53.62, 0.0, 22.92, 20.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:28:27.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:28:13
2026-02-11T19:28:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:28:28.318 [DEBUG] [Thread-134545] [transport.py] [_log()] starting thread (client mode): 0xa5740430
2026-02-11T19:28:28.318 [DEBUG] [Thread-134545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:28:28.337 [DEBUG] [Thread-134545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:28:28.338 [INFO] [Thread-134545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] client lang: <none>
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] server lang: <none>
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] kex follows: False
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] Compression: none
2026-02-11T19:28:28.341 [DEBUG] [Thread-134545] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:28:28.361 [DEBUG] [Thread-134545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:28:28.361 [DEBUG] [Thread-134545] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:28:28.362 [DEBUG] [Thread-134545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:28:28.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:28:28.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:28:28.364 [DEBUG] [Thread-134545] [transport.py] [_log()] userauth is OK
2026-02-11T19:28:28.364 [DEBUG] [Thread-134545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:28:28.364 [DEBUG] [Thread-134545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:28:28.364 [DEBUG] [Thread-134545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:28:28.364 [DEBUG] [Thread-134545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:28:28.400 [INFO] [Thread-134545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:28:28.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:28:29.065 [DEBUG] [Thread-134545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:28:29.065 [DEBUG] [Thread-134545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:28:29.066 [DEBUG] [Thread-134545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:28:29.106 [DEBUG] [Thread-134545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:28:29.106 [DEBUG] [Thread-134545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:28:29.109 [DEBUG] [Thread-134545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:28:29.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:28:29.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:28:29.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:28:29.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:28:29.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:28:29.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:28:29.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:28:29.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:28:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:28:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.727570 -999.00  +20.40  18.93     60  +12.40 1 2 1 1 1   881    0 10.45 93.17 ----- 17.4 18.9 274.2 25.6 21.1 -18.9 21.1 -17.4 20.9 -15.4 21.1 -18.3
2026-02-11T19:28:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:28:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:28:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.727570
2026-02-11T19:28:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:28:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:28:29.137 [DEBUG] [Thread-134545] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:28:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:28:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:28:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:28:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:28:13', tmtdew=9.67, humidity=53.62, cloud=0.0, wind=22.92, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:27:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:28:29.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:28:29.234 [DEBUG] [Thread-134548] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-11T19:28:29.234 [DEBUG] [Thread-134548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:28:29.249 [DEBUG] [Thread-134548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:28:29.249 [INFO] [Thread-134548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:28:29.258 [DEBUG] [Thread-134548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:28:29.258 [DEBUG] [Thread-134548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:28:29.258 [DEBUG] [Thread-134548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:28:29.258 [DEBUG] [Thread-134548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] client lang: <none>
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] server lang: <none>
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] kex follows: False
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] Compression: none
2026-02-11T19:28:29.259 [DEBUG] [Thread-134548] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:28:29.317 [DEBUG] [Thread-134548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:28:29.318 [DEBUG] [Thread-134548] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:28:29.318 [DEBUG] [Thread-134548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:28:29.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:28:29.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:28:29.379 [DEBUG] [Thread-134548] [transport.py] [_log()] userauth is OK
2026-02-11T19:28:29.379 [DEBUG] [Thread-134548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:28:29.380 [DEBUG] [Thread-134548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:28:29.380 [DEBUG] [Thread-134548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:28:29.380 [DEBUG] [Thread-134548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:28:29.404 [INFO] [Thread-134548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:28:29.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:28:29.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:28:30.226 [DEBUG] [Thread-134548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:28:30.226 [DEBUG] [Thread-134548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:28:30.275 [DEBUG] [Thread-134548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:28:30.275 [DEBUG] [Thread-134548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:28:30.287 [DEBUG] [Thread-134548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:28:30.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:28:30.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:28:30.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:28:30.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:28:30.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:28:30.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:28:30.324 [DEBUG] [Thread-134548] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:28:33.998 [DEBUG] [Thread-134550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:28:39.192 [DEBUG] [Thread-134551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:28:54.241 [DEBUG] [Thread-134552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:29:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:29:00.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:29:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:29:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 28, 48), 9.64, 53.75, 0.0, 22.53, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:29:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:28:48
2026-02-11T19:29:02.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:29:02.778 [DEBUG] [Thread-134553] [transport.py] [_log()] starting thread (client mode): 0xa57400a0
2026-02-11T19:29:02.778 [DEBUG] [Thread-134553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:29:02.798 [DEBUG] [Thread-134553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:29:02.798 [INFO] [Thread-134553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] client lang: <none>
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] server lang: <none>
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] kex follows: False
2026-02-11T19:29:02.802 [DEBUG] [Thread-134553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:29:02.803 [DEBUG] [Thread-134553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:29:02.803 [DEBUG] [Thread-134553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:29:02.803 [DEBUG] [Thread-134553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:29:02.803 [DEBUG] [Thread-134553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:29:02.803 [DEBUG] [Thread-134553] [transport.py] [_log()] Compression: none
2026-02-11T19:29:02.803 [DEBUG] [Thread-134553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:29:02.820 [DEBUG] [Thread-134553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:29:02.821 [DEBUG] [Thread-134553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:29:02.822 [DEBUG] [Thread-134553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:29:02.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:29:02.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:29:02.824 [DEBUG] [Thread-134553] [transport.py] [_log()] userauth is OK
2026-02-11T19:29:02.824 [DEBUG] [Thread-134553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:29:02.824 [DEBUG] [Thread-134553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:29:02.824 [DEBUG] [Thread-134553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:29:02.824 [DEBUG] [Thread-134553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:29:02.849 [INFO] [Thread-134553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:29:02.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:29:03.496 [DEBUG] [Thread-134553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:29:03.496 [DEBUG] [Thread-134553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:29:03.496 [DEBUG] [Thread-134553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:29:03.537 [DEBUG] [Thread-134553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:29:03.538 [DEBUG] [Thread-134553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:29:03.541 [DEBUG] [Thread-134553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:29:03.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:29:03.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:29:03.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:29:03.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:29:03.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:29:03.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:29:03.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:29:03.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:29:03.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:29:03.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.727918 -999.00  +20.40  21.37     59  +12.30 1 2 1 1 1   880    0 10.27 86.79 ----- 21.6 21.4 275.0 26.9 21.2 -18.9 21.1 -17.5 20.9 -16.9 21.1 -18.4
2026-02-11T19:29:03.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:29:03.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:29:03.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.727918
2026-02-11T19:29:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:29:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:29:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:29:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:29:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:29:03.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:28:48', tmtdew=9.64, humidity=53.75, cloud=0.0, wind=22.53, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:28:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:29:03.568 [DEBUG] [Thread-134553] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:29:03.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:29:03.663 [DEBUG] [Thread-134556] [transport.py] [_log()] starting thread (client mode): 0x9eb06dd0
2026-02-11T19:29:03.664 [DEBUG] [Thread-134556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:29:03.685 [DEBUG] [Thread-134556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:29:03.685 [INFO] [Thread-134556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:29:03.692 [DEBUG] [Thread-134556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:29:03.693 [DEBUG] [Thread-134556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] client lang: <none>
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] server lang: <none>
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] kex follows: False
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] Compression: none
2026-02-11T19:29:03.694 [DEBUG] [Thread-134556] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:29:03.752 [DEBUG] [Thread-134556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:29:03.752 [DEBUG] [Thread-134556] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:29:03.753 [DEBUG] [Thread-134556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:29:03.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:29:03.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:29:03.808 [DEBUG] [Thread-134556] [transport.py] [_log()] userauth is OK
2026-02-11T19:29:03.808 [DEBUG] [Thread-134556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:29:03.808 [DEBUG] [Thread-134556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:29:03.808 [DEBUG] [Thread-134556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:29:03.809 [DEBUG] [Thread-134556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:29:03.833 [INFO] [Thread-134556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:29:03.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:29:03.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:29:04.692 [DEBUG] [Thread-134556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:29:04.692 [DEBUG] [Thread-134556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:29:04.740 [DEBUG] [Thread-134556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:29:04.741 [DEBUG] [Thread-134556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:29:04.754 [DEBUG] [Thread-134556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:29:04.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:29:04.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:29:04.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:29:04.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:29:04.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:29:04.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:29:04.790 [DEBUG] [Thread-134556] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:29:09.277 [DEBUG] [Thread-134558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:29:16.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:29:16.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:29:24.319 [DEBUG] [Thread-134559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:29:34.077 [DEBUG] [Thread-134560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:29:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:29:34.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:29:34.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:29:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 29, 24), 9.65, 53.7, 0.0, 23.84, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:29:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:29:24
2026-02-11T19:29:37.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:29:37.190 [DEBUG] [Thread-134561] [transport.py] [_log()] starting thread (client mode): 0xa5742f50
2026-02-11T19:29:37.190 [DEBUG] [Thread-134561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:29:37.205 [DEBUG] [Thread-134561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:29:37.205 [INFO] [Thread-134561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] client lang: <none>
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] server lang: <none>
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] kex follows: False
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:29:37.208 [DEBUG] [Thread-134561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:29:37.209 [DEBUG] [Thread-134561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:29:37.209 [DEBUG] [Thread-134561] [transport.py] [_log()] Compression: none
2026-02-11T19:29:37.209 [DEBUG] [Thread-134561] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:29:37.225 [DEBUG] [Thread-134561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:29:37.225 [DEBUG] [Thread-134561] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:29:37.225 [DEBUG] [Thread-134561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:29:37.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:29:37.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:29:37.227 [DEBUG] [Thread-134561] [transport.py] [_log()] userauth is OK
2026-02-11T19:29:37.227 [DEBUG] [Thread-134561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:29:37.227 [DEBUG] [Thread-134561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:29:37.228 [DEBUG] [Thread-134561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:29:37.228 [DEBUG] [Thread-134561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:29:37.241 [INFO] [Thread-134561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:29:37.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:29:38.049 [DEBUG] [Thread-134561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:29:38.050 [DEBUG] [Thread-134561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:29:38.050 [DEBUG] [Thread-134561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:29:38.090 [DEBUG] [Thread-134561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:29:38.091 [DEBUG] [Thread-134561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:29:38.093 [DEBUG] [Thread-134561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:29:38.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:29:38.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:29:38.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:29:38.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:29:38.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:29:38.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:29:38.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:29:38.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:29:38.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:29:38.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.728265 -999.00  +20.40  17.36     59  +12.30 1 2 1 1 1   879    0 10.17 80.33 ----- 19.4 17.4 274.4 24.2 21.1 -19.0 21.1 -17.6 20.9 -17.0 21.1 -18.3
2026-02-11T19:29:38.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:29:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:29:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.728265
2026-02-11T19:29:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:29:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:29:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:29:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:29:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:29:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:29:24', tmtdew=9.65, humidity=53.7, cloud=0.0, wind=23.84, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:28:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:29:38.118 [DEBUG] [Thread-134561] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:29:38.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:29:38.216 [DEBUG] [Thread-134564] [transport.py] [_log()] starting thread (client mode): 0xa2d5f3a0
2026-02-11T19:29:38.216 [DEBUG] [Thread-134564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:29:38.231 [DEBUG] [Thread-134564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:29:38.231 [INFO] [Thread-134564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:29:38.239 [DEBUG] [Thread-134564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:29:38.239 [DEBUG] [Thread-134564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:29:38.239 [DEBUG] [Thread-134564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] client lang: <none>
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] server lang: <none>
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] kex follows: False
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:29:38.240 [DEBUG] [Thread-134564] [transport.py] [_log()] Compression: none
2026-02-11T19:29:38.241 [DEBUG] [Thread-134564] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:29:38.296 [DEBUG] [Thread-134564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:29:38.296 [DEBUG] [Thread-134564] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:29:38.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:29:38.298 [DEBUG] [Thread-134564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:29:38.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:29:38.352 [DEBUG] [Thread-134564] [transport.py] [_log()] userauth is OK
2026-02-11T19:29:38.352 [DEBUG] [Thread-134564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:29:38.352 [DEBUG] [Thread-134564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:29:38.352 [DEBUG] [Thread-134564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:29:38.352 [DEBUG] [Thread-134564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:29:38.376 [INFO] [Thread-134564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:29:38.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:29:38.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:29:39.205 [DEBUG] [Thread-134564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:29:39.206 [DEBUG] [Thread-134564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:29:39.253 [DEBUG] [Thread-134564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:29:39.253 [DEBUG] [Thread-134564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:29:39.262 [DEBUG] [Thread-134564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:29:39.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:29:39.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:29:39.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:29:39.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:29:39.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:29:39.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:29:39.297 [DEBUG] [Thread-134564] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:29:39.354 [DEBUG] [Thread-134566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:29:54.406 [DEBUG] [Thread-134567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:30:09.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:30:09.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:30:09.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:30:09.441 [DEBUG] [Thread-134568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:30:11.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 29, 59), 9.63, 53.77, 0.0, 19.75, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:30:11.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:29:59
2026-02-11T19:30:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:30:11.939 [DEBUG] [Thread-134569] [transport.py] [_log()] starting thread (client mode): 0xa2d5c790
2026-02-11T19:30:11.939 [DEBUG] [Thread-134569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:30:11.954 [DEBUG] [Thread-134569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:30:11.954 [INFO] [Thread-134569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] client lang: <none>
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] server lang: <none>
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] kex follows: False
2026-02-11T19:30:11.956 [DEBUG] [Thread-134569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:30:11.957 [DEBUG] [Thread-134569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:30:11.957 [DEBUG] [Thread-134569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:30:11.957 [DEBUG] [Thread-134569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:30:11.957 [DEBUG] [Thread-134569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:30:11.957 [DEBUG] [Thread-134569] [transport.py] [_log()] Compression: none
2026-02-11T19:30:11.957 [DEBUG] [Thread-134569] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:30:11.973 [DEBUG] [Thread-134569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:30:11.974 [DEBUG] [Thread-134569] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:30:11.974 [DEBUG] [Thread-134569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:30:11.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:30:11.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:30:11.975 [DEBUG] [Thread-134569] [transport.py] [_log()] userauth is OK
2026-02-11T19:30:11.976 [DEBUG] [Thread-134569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:30:11.976 [DEBUG] [Thread-134569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:30:11.976 [DEBUG] [Thread-134569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:30:11.976 [DEBUG] [Thread-134569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:30:11.989 [INFO] [Thread-134569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:30:11.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:30:12.573 [DEBUG] [Thread-134569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:30:12.574 [DEBUG] [Thread-134569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:30:12.574 [DEBUG] [Thread-134569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:30:12.614 [DEBUG] [Thread-134569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:30:12.614 [DEBUG] [Thread-134569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:30:12.618 [DEBUG] [Thread-134569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:30:12.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:30:12.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:30:12.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:30:12.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:30:12.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:30:12.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:30:12.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:30:12.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:30:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:30:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.728959 -999.00  +20.40  17.81     59  +12.20 1 2 1 1 1   877    0 10.32 83.79 ----- 19.2 17.8 277.4 28.7 21.1 -19.0 21.1 -17.8 20.9 -17.1 21.1 -18.3
2026-02-11T19:30:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:30:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:30:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.728959
2026-02-11T19:30:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:30:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:30:12.640 [DEBUG] [Thread-134569] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:30:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:30:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:30:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:30:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:29:59', tmtdew=9.63, humidity=53.77, cloud=0.0, wind=19.75, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:29:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:30:12.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:30:12.739 [DEBUG] [Thread-134572] [transport.py] [_log()] starting thread (client mode): 0xa57598d0
2026-02-11T19:30:12.739 [DEBUG] [Thread-134572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:30:12.755 [DEBUG] [Thread-134572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:30:12.755 [INFO] [Thread-134572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:30:12.762 [DEBUG] [Thread-134572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] client lang: <none>
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] server lang: <none>
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] kex follows: False
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] Compression: none
2026-02-11T19:30:12.763 [DEBUG] [Thread-134572] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:30:12.819 [DEBUG] [Thread-134572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:30:12.819 [DEBUG] [Thread-134572] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:30:12.820 [DEBUG] [Thread-134572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:30:12.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:30:12.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:30:12.876 [DEBUG] [Thread-134572] [transport.py] [_log()] userauth is OK
2026-02-11T19:30:12.876 [DEBUG] [Thread-134572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:30:12.876 [DEBUG] [Thread-134572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:30:12.876 [DEBUG] [Thread-134572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:30:12.876 [DEBUG] [Thread-134572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:30:12.890 [INFO] [Thread-134572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:30:12.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:30:12.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:30:13.714 [DEBUG] [Thread-134572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:30:13.714 [DEBUG] [Thread-134572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:30:13.762 [DEBUG] [Thread-134572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:30:13.762 [DEBUG] [Thread-134572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:30:13.771 [DEBUG] [Thread-134572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:30:13.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:30:13.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:30:13.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:30:13.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:30:13.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:30:13.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:30:13.807 [DEBUG] [Thread-134572] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:30:21.672 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:30:21.673 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:30:24.482 [DEBUG] [Thread-134574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:30:34.150 [DEBUG] [Thread-134575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:30:39.531 [DEBUG] [Thread-134576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:30:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:30:43.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:30:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:30:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 30, 35), 9.85, 53.24, 0.0, 22.48, 20.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:30:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:30:35
2026-02-11T19:30:46.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:30:46.260 [DEBUG] [Thread-134577] [transport.py] [_log()] starting thread (client mode): 0xa2db50c0
2026-02-11T19:30:46.261 [DEBUG] [Thread-134577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:30:46.274 [DEBUG] [Thread-134577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:30:46.274 [INFO] [Thread-134577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] client lang: <none>
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] server lang: <none>
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] kex follows: False
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] Compression: none
2026-02-11T19:30:46.277 [DEBUG] [Thread-134577] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:30:46.295 [DEBUG] [Thread-134577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:30:46.295 [DEBUG] [Thread-134577] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:30:46.296 [DEBUG] [Thread-134577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:30:46.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:30:46.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:30:46.297 [DEBUG] [Thread-134577] [transport.py] [_log()] userauth is OK
2026-02-11T19:30:46.298 [DEBUG] [Thread-134577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:30:46.298 [DEBUG] [Thread-134577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:30:46.298 [DEBUG] [Thread-134577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:30:46.298 [DEBUG] [Thread-134577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:30:46.316 [INFO] [Thread-134577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:30:46.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:30:46.949 [DEBUG] [Thread-134577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:30:46.949 [DEBUG] [Thread-134577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:30:46.950 [DEBUG] [Thread-134577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:30:46.991 [DEBUG] [Thread-134577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:30:46.992 [DEBUG] [Thread-134577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:30:46.994 [DEBUG] [Thread-134577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:30:47.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:30:47.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:30:47.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:30:47.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:30:47.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:30:47.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:30:47.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.729654 -999.00  +20.40  19.70     59  +12.20 1 2 1 1 1   875    0 10.21 79.73 ----- 19.2 19.7 277.0 22.9 21.1 -19.0 21.1 -18.0 20.8 -17.1 21.1 -18.4
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.729654
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:30:47.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:30:35', tmtdew=9.85, humidity=53.24, cloud=0.0, wind=22.48, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:30:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:30:47.013 [DEBUG] [Thread-134577] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:30:47.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:30:47.097 [DEBUG] [Thread-134580] [transport.py] [_log()] starting thread (client mode): 0xa2d5c730
2026-02-11T19:30:47.097 [DEBUG] [Thread-134580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:30:47.111 [DEBUG] [Thread-134580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:30:47.111 [INFO] [Thread-134580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:30:47.118 [DEBUG] [Thread-134580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:30:47.118 [DEBUG] [Thread-134580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:30:47.118 [DEBUG] [Thread-134580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] client lang: <none>
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] server lang: <none>
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] kex follows: False
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] Compression: none
2026-02-11T19:30:47.119 [DEBUG] [Thread-134580] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:30:47.183 [DEBUG] [Thread-134580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:30:47.183 [DEBUG] [Thread-134580] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:30:47.184 [DEBUG] [Thread-134580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:30:47.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:30:47.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:30:47.241 [DEBUG] [Thread-134580] [transport.py] [_log()] userauth is OK
2026-02-11T19:30:47.241 [DEBUG] [Thread-134580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:30:47.241 [DEBUG] [Thread-134580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:30:47.241 [DEBUG] [Thread-134580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:30:47.241 [DEBUG] [Thread-134580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:30:47.259 [INFO] [Thread-134580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:30:47.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:30:47.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:30:48.074 [DEBUG] [Thread-134580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:30:48.074 [DEBUG] [Thread-134580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:30:48.122 [DEBUG] [Thread-134580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:30:48.122 [DEBUG] [Thread-134580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:30:48.131 [DEBUG] [Thread-134580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:30:48.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:30:48.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:30:48.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:30:48.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:30:48.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:30:48.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:30:48.165 [DEBUG] [Thread-134580] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:30:54.570 [DEBUG] [Thread-134582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:09.619 [DEBUG] [Thread-134583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:18.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:31:18.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:31:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:31:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 30, 35), 9.85, 53.24, 0.0, 22.48, 20.93, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:31:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:30:35
2026-02-11T19:31:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:31:21.004 [DEBUG] [Thread-134584] [transport.py] [_log()] starting thread (client mode): 0xa5759930
2026-02-11T19:31:21.004 [DEBUG] [Thread-134584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:31:21.021 [DEBUG] [Thread-134584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:31:21.021 [INFO] [Thread-134584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] client lang: <none>
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] server lang: <none>
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] kex follows: False
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:31:21.025 [DEBUG] [Thread-134584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:31:21.026 [DEBUG] [Thread-134584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:31:21.026 [DEBUG] [Thread-134584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:31:21.026 [DEBUG] [Thread-134584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:31:21.026 [DEBUG] [Thread-134584] [transport.py] [_log()] Compression: none
2026-02-11T19:31:21.026 [DEBUG] [Thread-134584] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:31:21.040 [DEBUG] [Thread-134584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:31:21.040 [DEBUG] [Thread-134584] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:31:21.041 [DEBUG] [Thread-134584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:31:21.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:31:21.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:31:21.043 [DEBUG] [Thread-134584] [transport.py] [_log()] userauth is OK
2026-02-11T19:31:21.044 [DEBUG] [Thread-134584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:31:21.044 [DEBUG] [Thread-134584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:31:21.044 [DEBUG] [Thread-134584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:31:21.044 [DEBUG] [Thread-134584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:31:21.062 [INFO] [Thread-134584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:31:21.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:31:21.705 [DEBUG] [Thread-134584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:31:21.705 [DEBUG] [Thread-134584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:31:21.705 [DEBUG] [Thread-134584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:31:21.746 [DEBUG] [Thread-134584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:31:21.747 [DEBUG] [Thread-134584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:31:21.750 [DEBUG] [Thread-134584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:31:21.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:31:21.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:31:21.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:31:21.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:31:21.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:31:21.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:31:21.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:31:21.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:31:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:31:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.730001 -999.00  +20.40  20.25     59  +12.30 1 2 1 1 1   874    0 10.43 83.65 ----- 20.2 20.2 272.6 26.2 21.1 -19.2 21.1 -18.1 20.9 -17.1 21.1 -18.3
2026-02-11T19:31:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:31:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:31:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.730001
2026-02-11T19:31:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:31:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:31:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:31:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:31:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:31:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:30:35', tmtdew=9.85, humidity=53.24, cloud=0.0, wind=22.48, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:31:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:31:21.777 [DEBUG] [Thread-134584] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:31:21.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:31:21.870 [DEBUG] [Thread-134587] [transport.py] [_log()] starting thread (client mode): 0x9eb070d0
2026-02-11T19:31:21.871 [DEBUG] [Thread-134587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:31:21.886 [DEBUG] [Thread-134587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:31:21.886 [INFO] [Thread-134587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:31:21.893 [DEBUG] [Thread-134587] [transport.py] [_log()] client lang: <none>
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] server lang: <none>
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] kex follows: False
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] Compression: none
2026-02-11T19:31:21.894 [DEBUG] [Thread-134587] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:31:21.954 [DEBUG] [Thread-134587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:31:21.954 [DEBUG] [Thread-134587] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:31:21.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:31:21.955 [DEBUG] [Thread-134587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:31:21.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:31:22.009 [DEBUG] [Thread-134587] [transport.py] [_log()] userauth is OK
2026-02-11T19:31:22.010 [DEBUG] [Thread-134587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:31:22.010 [DEBUG] [Thread-134587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:31:22.010 [DEBUG] [Thread-134587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:31:22.010 [DEBUG] [Thread-134587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:31:22.029 [INFO] [Thread-134587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:31:22.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:31:22.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:31:22.832 [DEBUG] [Thread-134587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:31:22.832 [DEBUG] [Thread-134587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:31:22.880 [DEBUG] [Thread-134587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:31:22.880 [DEBUG] [Thread-134587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:31:22.889 [DEBUG] [Thread-134587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:31:22.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:31:22.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:31:22.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:31:22.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:31:22.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:31:22.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:31:22.923 [DEBUG] [Thread-134587] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:31:24.659 [DEBUG] [Thread-134589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:26.565 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:26.566 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:34.227 [DEBUG] [Thread-134590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:39.704 [DEBUG] [Thread-134591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:52.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:31:52.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:31:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:31:54.743 [DEBUG] [Thread-134592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:31:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 31, 12), 9.65, 53.7, 0.0, 22.89, 20.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:31:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:31:12
2026-02-11T19:31:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:31:55.835 [DEBUG] [Thread-134593] [transport.py] [_log()] starting thread (client mode): 0xa57c0a30
2026-02-11T19:31:55.835 [DEBUG] [Thread-134593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:31:55.855 [DEBUG] [Thread-134593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:31:55.855 [INFO] [Thread-134593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] client lang: <none>
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] server lang: <none>
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] kex follows: False
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] Compression: none
2026-02-11T19:31:55.859 [DEBUG] [Thread-134593] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:31:55.876 [DEBUG] [Thread-134593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:31:55.876 [DEBUG] [Thread-134593] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:31:55.877 [DEBUG] [Thread-134593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:31:55.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:31:55.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:31:55.879 [DEBUG] [Thread-134593] [transport.py] [_log()] userauth is OK
2026-02-11T19:31:55.879 [DEBUG] [Thread-134593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:31:55.879 [DEBUG] [Thread-134593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:31:55.879 [DEBUG] [Thread-134593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:31:55.879 [DEBUG] [Thread-134593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:31:55.914 [INFO] [Thread-134593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:31:55.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:31:56.560 [DEBUG] [Thread-134593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:31:56.560 [DEBUG] [Thread-134593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:31:56.561 [DEBUG] [Thread-134593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:31:56.601 [DEBUG] [Thread-134593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:31:56.601 [DEBUG] [Thread-134593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:31:56.604 [DEBUG] [Thread-134593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:31:56.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:31:56.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:31:56.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:31:56.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:31:56.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:31:56.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:31:56.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:31:56.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:31:56.628 [DEBUG] [Thread-134593] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:31:56.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:31:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.730348 -999.00  +20.40  17.37     59  +12.30 1 2 1 1 1   872    0 10.30 81.00 ----- 21.6 17.4 281.7 24.7 21.1 -19.0 21.1 -18.0 20.8 -17.0 21.1 -18.2
2026-02-11T19:31:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:31:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:31:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.730348
2026-02-11T19:31:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:31:56.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:31:56.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:31:56.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:31:56.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:31:56.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:31:12', tmtdew=9.65, humidity=53.7, cloud=0.0, wind=22.89, temperature=20.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:31:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:31:56.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:31:56.734 [DEBUG] [Thread-134596] [transport.py] [_log()] starting thread (client mode): 0x9eb04730
2026-02-11T19:31:56.734 [DEBUG] [Thread-134596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:31:56.748 [DEBUG] [Thread-134596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:31:56.749 [INFO] [Thread-134596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:31:56.756 [DEBUG] [Thread-134596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] client lang: <none>
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] server lang: <none>
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] kex follows: False
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] Compression: none
2026-02-11T19:31:56.757 [DEBUG] [Thread-134596] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:31:56.813 [DEBUG] [Thread-134596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:31:56.814 [DEBUG] [Thread-134596] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:31:56.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:31:56.815 [DEBUG] [Thread-134596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:31:56.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:31:56.870 [DEBUG] [Thread-134596] [transport.py] [_log()] userauth is OK
2026-02-11T19:31:56.870 [DEBUG] [Thread-134596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:31:56.870 [DEBUG] [Thread-134596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:31:56.870 [DEBUG] [Thread-134596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:31:56.870 [DEBUG] [Thread-134596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:31:56.890 [INFO] [Thread-134596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:31:56.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:31:56.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:31:57.727 [DEBUG] [Thread-134596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:31:57.728 [DEBUG] [Thread-134596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:31:57.775 [DEBUG] [Thread-134596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:31:57.776 [DEBUG] [Thread-134596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:31:57.785 [DEBUG] [Thread-134596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:31:57.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:31:57.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:31:57.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:31:57.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:31:57.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:31:57.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:31:57.826 [DEBUG] [Thread-134596] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:32:09.779 [DEBUG] [Thread-134598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:32:24.839 [DEBUG] [Thread-134599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:32:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:32:27.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:32:27.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
2026-02-11T19:32:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 31, 48), 9.55, 53.88, 0.0, 21.49, 20.53, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:32:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:31:48
2026-02-11T19:32:30.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:32:30.678 [DEBUG] [Thread-134600] [transport.py] [_log()] starting thread (client mode): 0xa57585e0
2026-02-11T19:32:30.678 [DEBUG] [Thread-134600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:32:30.698 [DEBUG] [Thread-134600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:32:30.699 [INFO] [Thread-134600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:32:30.702 [DEBUG] [Thread-134600] [transport.py] [_log()] client lang: <none>
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] server lang: <none>
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] kex follows: False
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] Compression: none
2026-02-11T19:32:30.703 [DEBUG] [Thread-134600] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:32:30.720 [DEBUG] [Thread-134600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:32:30.721 [DEBUG] [Thread-134600] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:32:30.721 [DEBUG] [Thread-134600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:32:30.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:32:30.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:32:30.722 [DEBUG] [Thread-134600] [transport.py] [_log()] userauth is OK
2026-02-11T19:32:30.722 [DEBUG] [Thread-134600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:32:30.722 [DEBUG] [Thread-134600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:32:30.722 [DEBUG] [Thread-134600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:32:30.722 [DEBUG] [Thread-134600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:32:30.740 [INFO] [Thread-134600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:32:30.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:32:31.350 [DEBUG] [Thread-134600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:32:31.351 [DEBUG] [Thread-134600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:32:31.351 [DEBUG] [Thread-134600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:32:31.391 [DEBUG] [Thread-134600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:32:31.391 [DEBUG] [Thread-134600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:32:31.394 [DEBUG] [Thread-134600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:32:31.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:32:31.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:32:31.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:32:31.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:32:31.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:32:31.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:32:31.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:32:31.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:32:31.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:32:31.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.730695 -999.00  +20.30  21.22     60  +12.30 1 2 1 1 1   870    0 9.97 75.28 ----- 18.6 21.2 271.4 23.5 21.1 -19.0 21.1 -18.2 20.8 -16.9 21.1 -18.2
2026-02-11T19:32:31.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:32:31.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:32:31.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.730695
2026-02-11T19:32:31.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:32:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:32:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:32:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:32:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:32:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:31:48', tmtdew=9.55, humidity=53.88, cloud=0.0, wind=21.49, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:32:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:32:31.417 [DEBUG] [Thread-134600] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:32:31.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:32:31.520 [DEBUG] [Thread-134603] [transport.py] [_log()] starting thread (client mode): 0xa5759ed0
2026-02-11T19:32:31.520 [DEBUG] [Thread-134603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:32:31.534 [DEBUG] [Thread-134603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:32:31.535 [INFO] [Thread-134603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:32:31.542 [DEBUG] [Thread-134603] [transport.py] [_log()] client lang: <none>
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] server lang: <none>
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] kex follows: False
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] Compression: none
2026-02-11T19:32:31.543 [DEBUG] [Thread-134603] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:32:31.601 [DEBUG] [Thread-134603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:32:31.602 [DEBUG] [Thread-134603] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:32:31.602 [DEBUG] [Thread-134603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:32:31.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:32:31.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:32:31.658 [DEBUG] [Thread-134603] [transport.py] [_log()] userauth is OK
2026-02-11T19:32:31.659 [DEBUG] [Thread-134603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:32:31.659 [DEBUG] [Thread-134603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:32:31.659 [DEBUG] [Thread-134603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:32:31.659 [DEBUG] [Thread-134603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:32:31.682 [INFO] [Thread-134603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:32:31.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:32:31.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:32:32.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:32:32.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:32:32.523 [DEBUG] [Thread-134603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:32:32.524 [DEBUG] [Thread-134603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:32:32.571 [DEBUG] [Thread-134603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:32:32.571 [DEBUG] [Thread-134603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:32:32.580 [DEBUG] [Thread-134603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:32:32.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:32:32.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:32:32.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
2026-02-11T19:32:32.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:32:32.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:32:32.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:32:32.615 [DEBUG] [Thread-134603] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:32:34.301 [DEBUG] [Thread-134605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:32:39.877 [DEBUG] [Thread-134606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:32:54.928 [DEBUG] [Thread-134607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:33:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:33:02.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:33:02.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:33:04.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 32, 24), 9.53, 53.97, 0.0, 20.43, 20.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:33:04.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:32:24
2026-02-11T19:33:04.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:33:05.005 [DEBUG] [Thread-134608] [transport.py] [_log()] starting thread (client mode): 0xa5741870
2026-02-11T19:33:05.005 [DEBUG] [Thread-134608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:33:05.026 [DEBUG] [Thread-134608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:33:05.026 [INFO] [Thread-134608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:33:05.030 [DEBUG] [Thread-134608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:33:05.030 [DEBUG] [Thread-134608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:33:05.030 [DEBUG] [Thread-134608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:33:05.030 [DEBUG] [Thread-134608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:05.030 [DEBUG] [Thread-134608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] client lang: <none>
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] server lang: <none>
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] kex follows: False
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:33:05.031 [DEBUG] [Thread-134608] [transport.py] [_log()] Compression: none
2026-02-11T19:33:05.032 [DEBUG] [Thread-134608] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:33:05.052 [DEBUG] [Thread-134608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:33:05.053 [DEBUG] [Thread-134608] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:33:05.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:33:05.054 [DEBUG] [Thread-134608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:33:05.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:33:05.057 [DEBUG] [Thread-134608] [transport.py] [_log()] userauth is OK
2026-02-11T19:33:05.057 [DEBUG] [Thread-134608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:33:05.058 [DEBUG] [Thread-134608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:33:05.058 [DEBUG] [Thread-134608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:33:05.058 [DEBUG] [Thread-134608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:33:05.085 [INFO] [Thread-134608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:33:05.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:33:05.735 [DEBUG] [Thread-134608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:33:05.736 [DEBUG] [Thread-134608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:33:05.736 [DEBUG] [Thread-134608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:33:05.777 [DEBUG] [Thread-134608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:33:05.778 [DEBUG] [Thread-134608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:33:05.782 [DEBUG] [Thread-134608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:33:05.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:33:05.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:33:05.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:33:05.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:33:05.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:33:05.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:33:05.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:33:05.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:33:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:33:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.731042 -999.00  +20.30  20.90     60  +12.40 1 2 1 1 1   869    0 10.07 69.50 ----- 21.7 20.9 277.0 27.9 21.1 -19.2 21.0 -18.1 20.8 -17.0 21.0 -18.1
2026-02-11T19:33:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:33:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:33:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.731042
2026-02-11T19:33:05.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:33:05.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:33:05.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:33:05.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:33:05.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:33:05.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:32:24', tmtdew=9.53, humidity=53.97, cloud=0.0, wind=20.43, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:32:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:33:05.812 [DEBUG] [Thread-134608] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:33:05.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:33:05.909 [DEBUG] [Thread-134611] [transport.py] [_log()] starting thread (client mode): 0xa57d77c0
2026-02-11T19:33:05.909 [DEBUG] [Thread-134611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:33:05.923 [DEBUG] [Thread-134611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:33:05.923 [INFO] [Thread-134611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:33:05.931 [DEBUG] [Thread-134611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:33:05.931 [DEBUG] [Thread-134611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:33:05.931 [DEBUG] [Thread-134611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:33:05.931 [DEBUG] [Thread-134611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:05.931 [DEBUG] [Thread-134611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] client lang: <none>
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] server lang: <none>
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] kex follows: False
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:33:05.932 [DEBUG] [Thread-134611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:33:05.933 [DEBUG] [Thread-134611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:33:05.933 [DEBUG] [Thread-134611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:33:05.933 [DEBUG] [Thread-134611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:33:05.933 [DEBUG] [Thread-134611] [transport.py] [_log()] Compression: none
2026-02-11T19:33:05.933 [DEBUG] [Thread-134611] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:33:05.990 [DEBUG] [Thread-134611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:33:05.991 [DEBUG] [Thread-134611] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:33:05.992 [DEBUG] [Thread-134611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:33:05.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:33:05.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:33:06.047 [DEBUG] [Thread-134611] [transport.py] [_log()] userauth is OK
2026-02-11T19:33:06.048 [DEBUG] [Thread-134611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:33:06.048 [DEBUG] [Thread-134611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:33:06.048 [DEBUG] [Thread-134611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:33:06.048 [DEBUG] [Thread-134611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:33:06.067 [INFO] [Thread-134611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:33:06.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:33:06.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:33:06.883 [DEBUG] [Thread-134611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:33:06.883 [DEBUG] [Thread-134611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:33:06.931 [DEBUG] [Thread-134611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:33:06.932 [DEBUG] [Thread-134611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:33:06.941 [DEBUG] [Thread-134611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:33:06.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:33:06.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:33:06.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:33:06.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:33:06.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:33:06.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:33:06.977 [DEBUG] [Thread-134611] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:33:09.962 [DEBUG] [Thread-134613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:33:25.016 [DEBUG] [Thread-134614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:33:34.389 [DEBUG] [Thread-134615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:33:36.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:33:36.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:33:37.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:33:37.136 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:33:37.137 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:33:39.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 32, 24), 9.48, 54.47, 0.0, 18.63, 20.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:33:39.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:32:24
2026-02-11T19:33:39.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:33:39.844 [DEBUG] [Thread-134616] [transport.py] [_log()] starting thread (client mode): 0xa57d4a60
2026-02-11T19:33:39.844 [DEBUG] [Thread-134616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:33:39.864 [DEBUG] [Thread-134616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:33:39.864 [INFO] [Thread-134616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:33:39.867 [DEBUG] [Thread-134616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] client lang: <none>
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] server lang: <none>
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] kex follows: False
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:33:39.868 [DEBUG] [Thread-134616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:33:39.869 [DEBUG] [Thread-134616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:33:39.869 [DEBUG] [Thread-134616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:33:39.869 [DEBUG] [Thread-134616] [transport.py] [_log()] Compression: none
2026-02-11T19:33:39.869 [DEBUG] [Thread-134616] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:33:39.885 [DEBUG] [Thread-134616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:33:39.885 [DEBUG] [Thread-134616] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:33:39.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:33:39.886 [DEBUG] [Thread-134616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:33:39.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:33:39.888 [DEBUG] [Thread-134616] [transport.py] [_log()] userauth is OK
2026-02-11T19:33:39.888 [DEBUG] [Thread-134616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:33:39.888 [DEBUG] [Thread-134616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:33:39.888 [DEBUG] [Thread-134616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:33:39.889 [DEBUG] [Thread-134616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:33:39.912 [INFO] [Thread-134616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:33:39.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:33:40.049 [DEBUG] [Thread-134618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:33:40.558 [DEBUG] [Thread-134616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:33:40.558 [DEBUG] [Thread-134616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:33:40.559 [DEBUG] [Thread-134616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:33:40.599 [DEBUG] [Thread-134616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:33:40.599 [DEBUG] [Thread-134616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:33:40.602 [DEBUG] [Thread-134616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:33:40.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:33:40.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:33:40.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:33:40.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:33:40.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:33:40.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:33:40.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:33:40.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:33:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:33:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.731390 -999.00  +20.30  20.54     60  +12.40 1 2 1 1 1   867    0 9.88 66.32 ----- 21.1 20.5 274.8 24.4 21.1 -19.2 21.0 -18.1 20.7 -17.0 21.0 -18.1
2026-02-11T19:33:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:33:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:33:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.731390
2026-02-11T19:33:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:33:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:33:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:33:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:33:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:33:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:32:24', tmtdew=9.48, humidity=54.47, cloud=0.0, wind=18.63, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:33:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:33:40.625 [DEBUG] [Thread-134616] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:33:40.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:33:40.720 [DEBUG] [Thread-134620] [transport.py] [_log()] starting thread (client mode): 0xa575b010
2026-02-11T19:33:40.721 [DEBUG] [Thread-134620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:33:40.735 [DEBUG] [Thread-134620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:33:40.735 [INFO] [Thread-134620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:33:40.742 [DEBUG] [Thread-134620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] client lang: <none>
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] server lang: <none>
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] kex follows: False
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:33:40.743 [DEBUG] [Thread-134620] [transport.py] [_log()] Compression: none
2026-02-11T19:33:40.744 [DEBUG] [Thread-134620] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:33:40.806 [DEBUG] [Thread-134620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:33:40.806 [DEBUG] [Thread-134620] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:33:40.807 [DEBUG] [Thread-134620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:33:40.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:33:40.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:33:40.863 [DEBUG] [Thread-134620] [transport.py] [_log()] userauth is OK
2026-02-11T19:33:40.863 [DEBUG] [Thread-134620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:33:40.863 [DEBUG] [Thread-134620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:33:40.863 [DEBUG] [Thread-134620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:33:40.864 [DEBUG] [Thread-134620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:33:40.882 [INFO] [Thread-134620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:33:40.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:33:40.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:33:41.726 [DEBUG] [Thread-134620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:33:41.726 [DEBUG] [Thread-134620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:33:41.774 [DEBUG] [Thread-134620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:33:41.775 [DEBUG] [Thread-134620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:33:41.783 [DEBUG] [Thread-134620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:33:41.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:33:41.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')
2026-02-11T19:33:41.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:33:41.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:33:41.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:33:41.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:33:41.821 [DEBUG] [Thread-134620] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:33:55.087 [DEBUG] [Thread-134622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:34:10.136 [DEBUG] [Thread-134623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:34:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:34:11.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:34:11.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
2026-02-11T19:34:13.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 33, 35), 9.69, 53.8, 0.0, 20.92, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:34:13.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:33:35
2026-02-11T19:34:14.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:34:14.351 [DEBUG] [Thread-134624] [transport.py] [_log()] starting thread (client mode): 0xa575ab90
2026-02-11T19:34:14.352 [DEBUG] [Thread-134624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:34:14.373 [DEBUG] [Thread-134624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:34:14.373 [INFO] [Thread-134624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] client lang: <none>
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] server lang: <none>
2026-02-11T19:34:14.376 [DEBUG] [Thread-134624] [transport.py] [_log()] kex follows: False
2026-02-11T19:34:14.377 [DEBUG] [Thread-134624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:34:14.377 [DEBUG] [Thread-134624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:34:14.377 [DEBUG] [Thread-134624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:34:14.377 [DEBUG] [Thread-134624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:34:14.377 [DEBUG] [Thread-134624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:34:14.377 [DEBUG] [Thread-134624] [transport.py] [_log()] Compression: none
2026-02-11T19:34:14.377 [DEBUG] [Thread-134624] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:34:14.396 [DEBUG] [Thread-134624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:34:14.396 [DEBUG] [Thread-134624] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:34:14.397 [DEBUG] [Thread-134624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:34:14.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:34:14.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:34:14.399 [DEBUG] [Thread-134624] [transport.py] [_log()] userauth is OK
2026-02-11T19:34:14.400 [DEBUG] [Thread-134624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:34:14.400 [DEBUG] [Thread-134624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:34:14.400 [DEBUG] [Thread-134624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:34:14.400 [DEBUG] [Thread-134624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:34:14.424 [INFO] [Thread-134624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:34:14.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:34:15.029 [DEBUG] [Thread-134624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:34:15.029 [DEBUG] [Thread-134624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:34:15.030 [DEBUG] [Thread-134624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:34:15.070 [DEBUG] [Thread-134624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:34:15.070 [DEBUG] [Thread-134624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:34:15.074 [DEBUG] [Thread-134624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:34:15.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:34:15.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:34:15.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:34:15.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:34:15.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:34:15.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:34:15.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:34:15.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:34:15.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:34:15.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.731737 -999.00  +20.20  16.41     60  +12.40 1 2 1 1 1   865    0 9.58 53.06 ----- 15.4 16.4 270.2 23.1 21.0 -19.1 21.0 -18.1 20.7 -17.0 21.0 -18.2
2026-02-11T19:34:15.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:34:15.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:34:15.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.731737
2026-02-11T19:34:15.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:34:15.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:34:15.101 [DEBUG] [Thread-134624] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:34:15.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:34:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:34:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:34:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:33:35', tmtdew=9.69, humidity=53.8, cloud=0.0, wind=20.92, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:33:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:34:15.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:34:15.196 [DEBUG] [Thread-134627] [transport.py] [_log()] starting thread (client mode): 0x9eb061a0
2026-02-11T19:34:15.197 [DEBUG] [Thread-134627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:34:15.212 [DEBUG] [Thread-134627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:34:15.212 [INFO] [Thread-134627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:34:15.219 [DEBUG] [Thread-134627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:34:15.219 [DEBUG] [Thread-134627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] client lang: <none>
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] server lang: <none>
2026-02-11T19:34:15.220 [DEBUG] [Thread-134627] [transport.py] [_log()] kex follows: False
2026-02-11T19:34:15.221 [DEBUG] [Thread-134627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:34:15.221 [DEBUG] [Thread-134627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:34:15.221 [DEBUG] [Thread-134627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:34:15.221 [DEBUG] [Thread-134627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:34:15.221 [DEBUG] [Thread-134627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:34:15.221 [DEBUG] [Thread-134627] [transport.py] [_log()] Compression: none
2026-02-11T19:34:15.221 [DEBUG] [Thread-134627] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:34:15.280 [DEBUG] [Thread-134627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:34:15.280 [DEBUG] [Thread-134627] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:34:15.281 [DEBUG] [Thread-134627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:34:15.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:34:15.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:34:15.335 [DEBUG] [Thread-134627] [transport.py] [_log()] userauth is OK
2026-02-11T19:34:15.336 [DEBUG] [Thread-134627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:34:15.336 [DEBUG] [Thread-134627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:34:15.336 [DEBUG] [Thread-134627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:34:15.336 [DEBUG] [Thread-134627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:34:15.360 [INFO] [Thread-134627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:34:15.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:34:15.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:34:16.198 [DEBUG] [Thread-134627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:34:16.199 [DEBUG] [Thread-134627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:34:16.246 [DEBUG] [Thread-134627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:34:16.247 [DEBUG] [Thread-134627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:34:16.256 [DEBUG] [Thread-134627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:34:16.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:34:16.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:34:16.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:34:16.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:34:16.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:34:16.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:34:16.293 [DEBUG] [Thread-134627] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:34:25.174 [DEBUG] [Thread-134629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:34:34.469 [DEBUG] [Thread-134630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:34:40.228 [DEBUG] [Thread-134631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:34:41.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:34:41.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:34:46.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:34:46.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:34:46.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:34:48.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 34, 11), 9.47, 54.3, 0.0, 19.37, 20.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:34:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:34:11
2026-02-11T19:34:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:34:48.899 [DEBUG] [Thread-134632] [transport.py] [_log()] starting thread (client mode): 0xa57c3d00
2026-02-11T19:34:48.899 [DEBUG] [Thread-134632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:34:48.919 [DEBUG] [Thread-134632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:34:48.919 [INFO] [Thread-134632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:34:48.923 [DEBUG] [Thread-134632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] client lang: <none>
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] server lang: <none>
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] kex follows: False
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] Compression: none
2026-02-11T19:34:48.924 [DEBUG] [Thread-134632] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:34:48.942 [DEBUG] [Thread-134632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:34:48.943 [DEBUG] [Thread-134632] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:34:48.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:34:48.944 [DEBUG] [Thread-134632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:34:48.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:34:48.984 [DEBUG] [Thread-134632] [transport.py] [_log()] userauth is OK
2026-02-11T19:34:48.985 [DEBUG] [Thread-134632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:34:48.985 [DEBUG] [Thread-134632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:34:48.985 [DEBUG] [Thread-134632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:34:48.985 [DEBUG] [Thread-134632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:34:49.016 [INFO] [Thread-134632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:34:49.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:34:49.670 [DEBUG] [Thread-134632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:34:49.671 [DEBUG] [Thread-134632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:34:49.671 [DEBUG] [Thread-134632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:34:49.711 [DEBUG] [Thread-134632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:34:49.712 [DEBUG] [Thread-134632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:34:49.715 [DEBUG] [Thread-134632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:34:49.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:34:49.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:34:49.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:34:49.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:34:49.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:34:49.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:34:49.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:34:49.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:34:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:34:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.732084 -999.00  +20.20  17.02     60  +12.40 1 2 1 1 1   862    0 9.34 44.74 ----- 17.5 17.0 269.8 20.7 20.9 -19.2 21.0 -18.2 20.6 -17.4 20.9 -18.5
2026-02-11T19:34:49.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:34:49.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:34:49.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.732084
2026-02-11T19:34:49.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:34:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:34:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:34:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:34:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:34:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:34:11', tmtdew=9.47, humidity=54.3, cloud=0.0, wind=19.37, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:34:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:34:49.741 [DEBUG] [Thread-134632] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:34:49.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:34:49.837 [DEBUG] [Thread-134635] [transport.py] [_log()] starting thread (client mode): 0xa5740e50
2026-02-11T19:34:49.837 [DEBUG] [Thread-134635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:34:49.851 [DEBUG] [Thread-134635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:34:49.852 [INFO] [Thread-134635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:34:49.859 [DEBUG] [Thread-134635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] client lang: <none>
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] server lang: <none>
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] kex follows: False
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:34:49.860 [DEBUG] [Thread-134635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:34:49.861 [DEBUG] [Thread-134635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:34:49.861 [DEBUG] [Thread-134635] [transport.py] [_log()] Compression: none
2026-02-11T19:34:49.861 [DEBUG] [Thread-134635] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:34:49.919 [DEBUG] [Thread-134635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:34:49.919 [DEBUG] [Thread-134635] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:34:49.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:34:49.920 [DEBUG] [Thread-134635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:34:49.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:34:49.975 [DEBUG] [Thread-134635] [transport.py] [_log()] userauth is OK
2026-02-11T19:34:49.976 [DEBUG] [Thread-134635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:34:49.976 [DEBUG] [Thread-134635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:34:49.976 [DEBUG] [Thread-134635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:34:49.976 [DEBUG] [Thread-134635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:34:49.995 [INFO] [Thread-134635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:34:49.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:34:49.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:34:50.822 [DEBUG] [Thread-134635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:34:50.822 [DEBUG] [Thread-134635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:34:50.870 [DEBUG] [Thread-134635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:34:50.870 [DEBUG] [Thread-134635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:34:50.879 [DEBUG] [Thread-134635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:34:50.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:34:50.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:34:50.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:34:50.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:34:50.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:34:50.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:34:50.914 [DEBUG] [Thread-134635] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:34:55.262 [DEBUG] [Thread-134637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:10.323 [DEBUG] [Thread-134638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:35:20.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:35:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:35:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 34, 46), 9.45, 54.88, 0.0, 17.91, 20.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:35:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:34:46
2026-02-11T19:35:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:35:23.384 [DEBUG] [Thread-134639] [transport.py] [_log()] starting thread (client mode): 0x9eb06d70
2026-02-11T19:35:23.384 [DEBUG] [Thread-134639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:35:23.404 [DEBUG] [Thread-134639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:35:23.404 [INFO] [Thread-134639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:35:23.406 [DEBUG] [Thread-134639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:35:23.406 [DEBUG] [Thread-134639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:35:23.406 [DEBUG] [Thread-134639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:35:23.406 [DEBUG] [Thread-134639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:23.406 [DEBUG] [Thread-134639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:23.406 [DEBUG] [Thread-134639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] client lang: <none>
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] server lang: <none>
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] kex follows: False
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] Compression: none
2026-02-11T19:35:23.407 [DEBUG] [Thread-134639] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:35:23.415 [DEBUG] [Thread-134639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:35:23.415 [DEBUG] [Thread-134639] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:35:23.416 [DEBUG] [Thread-134639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:35:23.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:35:23.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:35:23.417 [DEBUG] [Thread-134639] [transport.py] [_log()] userauth is OK
2026-02-11T19:35:23.418 [DEBUG] [Thread-134639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:35:23.418 [DEBUG] [Thread-134639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:35:23.418 [DEBUG] [Thread-134639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:35:23.418 [DEBUG] [Thread-134639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:35:23.436 [INFO] [Thread-134639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:35:23.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:35:24.077 [DEBUG] [Thread-134639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:35:24.077 [DEBUG] [Thread-134639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:35:24.078 [DEBUG] [Thread-134639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:35:24.118 [DEBUG] [Thread-134639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:35:24.119 [DEBUG] [Thread-134639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:35:24.122 [DEBUG] [Thread-134639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:35:24.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:35:24.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:35:24.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:35:24.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:35:24.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:35:24.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:35:24.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:35:24.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:35:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:35:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.732431 -999.00  +20.20  15.20     60  +12.40 1 2 1 1 1   860    0 9.01 39.16 ----- 13.4 15.2 267.4 22.5 21.0 -19.2 21.0 -18.2 20.6 -17.5 20.9 -18.5
2026-02-11T19:35:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:35:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:35:24.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.732431
2026-02-11T19:35:24.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:35:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:35:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:35:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:35:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:35:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:34:46', tmtdew=9.45, humidity=54.88, cloud=0.0, wind=17.91, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:34:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:35:24.149 [DEBUG] [Thread-134639] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:35:24.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:35:24.245 [DEBUG] [Thread-134642] [transport.py] [_log()] starting thread (client mode): 0xa575b490
2026-02-11T19:35:24.245 [DEBUG] [Thread-134642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:35:24.259 [DEBUG] [Thread-134642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:35:24.259 [INFO] [Thread-134642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] client lang: <none>
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] server lang: <none>
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] kex follows: False
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] Compression: none
2026-02-11T19:35:24.267 [DEBUG] [Thread-134642] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:35:24.328 [DEBUG] [Thread-134642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:35:24.328 [DEBUG] [Thread-134642] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:35:24.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:35:24.330 [DEBUG] [Thread-134642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:35:24.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:35:24.384 [DEBUG] [Thread-134642] [transport.py] [_log()] userauth is OK
2026-02-11T19:35:24.384 [DEBUG] [Thread-134642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:35:24.384 [DEBUG] [Thread-134642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:35:24.384 [DEBUG] [Thread-134642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:35:24.384 [DEBUG] [Thread-134642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:35:24.406 [INFO] [Thread-134642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:35:24.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:35:24.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:35:25.303 [DEBUG] [Thread-134642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:35:25.303 [DEBUG] [Thread-134642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:35:25.351 [DEBUG] [Thread-134642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:35:25.352 [DEBUG] [Thread-134642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:35:25.358 [DEBUG] [Thread-134644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:25.360 [DEBUG] [Thread-134642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:35:25.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:35:25.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:35:25.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:35:25.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:35:25.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:35:25.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:35:25.394 [DEBUG] [Thread-134642] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:35:34.541 [DEBUG] [Thread-134645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:40.405 [DEBUG] [Thread-134646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:47.972 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:47.973 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:55.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:35:55.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:35:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:35:55.442 [DEBUG] [Thread-134647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:35:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 35, 22), 9.45, 54.85, 0.0, 17.84, 20.38, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:35:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:35:22
2026-02-11T19:35:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:35:58.222 [DEBUG] [Thread-134648] [transport.py] [_log()] starting thread (client mode): 0xa57d5bd0
2026-02-11T19:35:58.223 [DEBUG] [Thread-134648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:35:58.242 [DEBUG] [Thread-134648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:35:58.242 [INFO] [Thread-134648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:35:58.245 [DEBUG] [Thread-134648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:35:58.245 [DEBUG] [Thread-134648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:35:58.245 [DEBUG] [Thread-134648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] client lang: <none>
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] server lang: <none>
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] kex follows: False
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] Compression: none
2026-02-11T19:35:58.246 [DEBUG] [Thread-134648] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:35:58.265 [DEBUG] [Thread-134648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:35:58.265 [DEBUG] [Thread-134648] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:35:58.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:35:58.267 [DEBUG] [Thread-134648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:35:58.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:35:58.268 [DEBUG] [Thread-134648] [transport.py] [_log()] userauth is OK
2026-02-11T19:35:58.269 [DEBUG] [Thread-134648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:35:58.269 [DEBUG] [Thread-134648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:35:58.269 [DEBUG] [Thread-134648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:35:58.269 [DEBUG] [Thread-134648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:35:58.291 [INFO] [Thread-134648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:35:58.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:35:58.950 [DEBUG] [Thread-134648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:35:58.955 [DEBUG] [Thread-134648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:35:58.955 [DEBUG] [Thread-134648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:35:58.991 [DEBUG] [Thread-134648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:35:58.991 [DEBUG] [Thread-134648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:35:58.994 [DEBUG] [Thread-134648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:35:59.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:35:59.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:35:59.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:35:59.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:35:59.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:35:59.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:35:59.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:35:59.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:35:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:35:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.733126 -999.00  +20.20  16.85     61  +12.40 1 2 1 1 1   854    0 8.64 27.85 ----- 17.9 16.9 268.2 18.2 21.0 -19.2 20.9 -18.3 20.6 -17.6 20.9 -18.6
2026-02-11T19:35:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:35:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:35:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.733126
2026-02-11T19:35:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:35:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:35:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:35:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:35:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:35:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:35:22', tmtdew=9.45, humidity=54.85, cloud=0.0, wind=17.84, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:35:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:35:59.022 [DEBUG] [Thread-134648] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:35:59.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:35:59.117 [DEBUG] [Thread-134651] [transport.py] [_log()] starting thread (client mode): 0x9eb043a0
2026-02-11T19:35:59.117 [DEBUG] [Thread-134651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:35:59.131 [DEBUG] [Thread-134651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:35:59.131 [INFO] [Thread-134651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:35:59.139 [DEBUG] [Thread-134651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] client lang: <none>
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] server lang: <none>
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] kex follows: False
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] Compression: none
2026-02-11T19:35:59.140 [DEBUG] [Thread-134651] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:35:59.199 [DEBUG] [Thread-134651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:35:59.200 [DEBUG] [Thread-134651] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:35:59.200 [DEBUG] [Thread-134651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:35:59.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:35:59.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:35:59.256 [DEBUG] [Thread-134651] [transport.py] [_log()] userauth is OK
2026-02-11T19:35:59.256 [DEBUG] [Thread-134651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:35:59.256 [DEBUG] [Thread-134651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:35:59.256 [DEBUG] [Thread-134651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:35:59.257 [DEBUG] [Thread-134651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:35:59.279 [INFO] [Thread-134651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:35:59.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:35:59.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:36:00.099 [DEBUG] [Thread-134651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:36:00.099 [DEBUG] [Thread-134651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:36:00.147 [DEBUG] [Thread-134651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:36:00.147 [DEBUG] [Thread-134651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:36:00.157 [DEBUG] [Thread-134651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:36:00.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:36:00.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:36:00.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:36:00.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:36:00.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:36:00.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:36:00.192 [DEBUG] [Thread-134651] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:36:10.483 [DEBUG] [Thread-134653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:36:25.533 [DEBUG] [Thread-134654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:36:30.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:36:30.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:36:30.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
2026-02-11T19:36:32.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 35, 57), 9.4, 54.85, 0.0, 18.23, 20.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:36:32.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:35:57
2026-02-11T19:36:33.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:36:33.309 [DEBUG] [Thread-134655] [transport.py] [_log()] starting thread (client mode): 0xa2db7070
2026-02-11T19:36:33.309 [DEBUG] [Thread-134655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:36:33.329 [DEBUG] [Thread-134655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:36:33.329 [INFO] [Thread-134655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:36:33.333 [DEBUG] [Thread-134655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:36:33.333 [DEBUG] [Thread-134655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:36:33.333 [DEBUG] [Thread-134655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:36:33.333 [DEBUG] [Thread-134655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:36:33.333 [DEBUG] [Thread-134655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:36:33.333 [DEBUG] [Thread-134655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] client lang: <none>
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] server lang: <none>
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] kex follows: False
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] Compression: none
2026-02-11T19:36:33.334 [DEBUG] [Thread-134655] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:36:33.352 [DEBUG] [Thread-134655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:36:33.352 [DEBUG] [Thread-134655] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:36:33.353 [DEBUG] [Thread-134655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:36:33.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:36:33.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:36:33.356 [DEBUG] [Thread-134655] [transport.py] [_log()] userauth is OK
2026-02-11T19:36:33.356 [DEBUG] [Thread-134655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:36:33.356 [DEBUG] [Thread-134655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:36:33.356 [DEBUG] [Thread-134655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:36:33.356 [DEBUG] [Thread-134655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:36:33.381 [INFO] [Thread-134655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:36:33.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:36:34.148 [DEBUG] [Thread-134655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:36:34.148 [DEBUG] [Thread-134655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:36:34.149 [DEBUG] [Thread-134655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:36:34.189 [DEBUG] [Thread-134655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:36:34.189 [DEBUG] [Thread-134655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:36:34.192 [DEBUG] [Thread-134655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:36:34.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:36:34.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:36:34.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:36:34.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:36:34.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:36:34.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:36:34.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:36:34.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:36:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:36:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.733473 -999.00  +20.20  18.25     61  +12.40 1 2 1 1 1   850    0 8.63 22.05 ----- 14.5 18.2 282.8 24.2 20.9 -19.3 20.9 -18.4 20.6 -17.7 20.9 -18.5
2026-02-11T19:36:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:36:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:36:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.733473
2026-02-11T19:36:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:36:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:36:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:36:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:36:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:36:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:35:57', tmtdew=9.4, humidity=54.85, cloud=0.0, wind=18.23, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:36:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:36:34.218 [DEBUG] [Thread-134655] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:36:34.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:36:34.313 [DEBUG] [Thread-134658] [transport.py] [_log()] starting thread (client mode): 0xa5772860
2026-02-11T19:36:34.313 [DEBUG] [Thread-134658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:36:34.327 [DEBUG] [Thread-134658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:36:34.328 [INFO] [Thread-134658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] client lang: <none>
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] server lang: <none>
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] kex follows: False
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] Compression: none
2026-02-11T19:36:34.335 [DEBUG] [Thread-134658] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:36:34.390 [DEBUG] [Thread-134658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:36:34.391 [DEBUG] [Thread-134658] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:36:34.391 [DEBUG] [Thread-134658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:36:34.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:36:34.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:36:34.448 [DEBUG] [Thread-134658] [transport.py] [_log()] userauth is OK
2026-02-11T19:36:34.448 [DEBUG] [Thread-134658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:36:34.448 [DEBUG] [Thread-134658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:36:34.448 [DEBUG] [Thread-134658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:36:34.448 [DEBUG] [Thread-134658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:36:34.461 [INFO] [Thread-134658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:36:34.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:36:34.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:36:34.611 [DEBUG] [Thread-134660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:36:35.272 [DEBUG] [Thread-134658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:36:35.272 [DEBUG] [Thread-134658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:36:35.320 [DEBUG] [Thread-134658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:36:35.321 [DEBUG] [Thread-134658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:36:35.330 [DEBUG] [Thread-134658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:36:35.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:36:35.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:36:35.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:36:35.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:36:35.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:36:35.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:36:35.367 [DEBUG] [Thread-134658] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:36:40.570 [DEBUG] [Thread-134661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:36:51.975 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:36:51.976 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:36:55.620 [DEBUG] [Thread-134662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:37:05.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:37:05.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:37:05.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:37:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 36, 33), 9.66, 53.87, 0.0, 19.13, 20.73, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:37:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:36:33
2026-02-11T19:37:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:37:07.826 [DEBUG] [Thread-134663] [transport.py] [_log()] starting thread (client mode): 0xa5772080
2026-02-11T19:37:07.826 [DEBUG] [Thread-134663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:37:07.846 [DEBUG] [Thread-134663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:37:07.846 [INFO] [Thread-134663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:37:07.849 [DEBUG] [Thread-134663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:37:07.849 [DEBUG] [Thread-134663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:37:07.849 [DEBUG] [Thread-134663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] client lang: <none>
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] server lang: <none>
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] kex follows: False
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:37:07.850 [DEBUG] [Thread-134663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:37:07.851 [DEBUG] [Thread-134663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:37:07.851 [DEBUG] [Thread-134663] [transport.py] [_log()] Compression: none
2026-02-11T19:37:07.851 [DEBUG] [Thread-134663] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:37:07.867 [DEBUG] [Thread-134663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:37:07.867 [DEBUG] [Thread-134663] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:37:07.868 [DEBUG] [Thread-134663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:37:07.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:37:07.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:37:07.870 [DEBUG] [Thread-134663] [transport.py] [_log()] userauth is OK
2026-02-11T19:37:07.870 [DEBUG] [Thread-134663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:37:07.870 [DEBUG] [Thread-134663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:37:07.870 [DEBUG] [Thread-134663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:37:07.870 [DEBUG] [Thread-134663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:37:07.887 [INFO] [Thread-134663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:37:07.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:37:08.453 [DEBUG] [Thread-134663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:37:08.454 [DEBUG] [Thread-134663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:37:08.454 [DEBUG] [Thread-134663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:37:08.495 [DEBUG] [Thread-134663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:37:08.495 [DEBUG] [Thread-134663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:37:08.498 [DEBUG] [Thread-134663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:37:08.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:37:08.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:37:08.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:37:08.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:37:08.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:37:08.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:37:08.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:37:08.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:37:08.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:37:08.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.733820 -999.00  +20.20  14.17     61  +12.50 1 2 1 1 1   847    0 8.33 14.13 ----- 15.9 14.2 280.0 18.9 20.9 -19.2 20.9 -18.5 20.6 -17.7 20.9 -18.6
2026-02-11T19:37:08.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:37:08.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:37:08.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.733820
2026-02-11T19:37:08.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:37:08.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:37:08.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:37:08.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:37:08.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:37:08.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:36:33', tmtdew=9.66, humidity=53.87, cloud=0.0, wind=19.13, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:36:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:37:08.524 [DEBUG] [Thread-134663] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:37:08.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:37:08.622 [DEBUG] [Thread-134666] [transport.py] [_log()] starting thread (client mode): 0xa57d6050
2026-02-11T19:37:08.622 [DEBUG] [Thread-134666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:37:08.637 [DEBUG] [Thread-134666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:37:08.637 [INFO] [Thread-134666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:37:08.645 [DEBUG] [Thread-134666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:37:08.645 [DEBUG] [Thread-134666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:37:08.645 [DEBUG] [Thread-134666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:37:08.645 [DEBUG] [Thread-134666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:08.645 [DEBUG] [Thread-134666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:08.645 [DEBUG] [Thread-134666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] client lang: <none>
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] server lang: <none>
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] kex follows: False
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] Compression: none
2026-02-11T19:37:08.646 [DEBUG] [Thread-134666] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:37:08.707 [DEBUG] [Thread-134666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:37:08.708 [DEBUG] [Thread-134666] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:37:08.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:37:08.709 [DEBUG] [Thread-134666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:37:08.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:37:08.766 [DEBUG] [Thread-134666] [transport.py] [_log()] userauth is OK
2026-02-11T19:37:08.767 [DEBUG] [Thread-134666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:37:08.767 [DEBUG] [Thread-134666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:37:08.767 [DEBUG] [Thread-134666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:37:08.767 [DEBUG] [Thread-134666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:37:08.787 [INFO] [Thread-134666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:37:08.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:37:08.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:37:09.626 [DEBUG] [Thread-134666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:37:09.626 [DEBUG] [Thread-134666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:37:09.675 [DEBUG] [Thread-134666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:37:09.675 [DEBUG] [Thread-134666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:37:09.684 [DEBUG] [Thread-134666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:37:09.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:37:09.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:37:09.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:37:09.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:37:09.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:37:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:37:09.723 [DEBUG] [Thread-134666] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:37:10.652 [DEBUG] [Thread-134668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:37:25.714 [DEBUG] [Thread-134669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:37:34.699 [DEBUG] [Thread-134670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:37:39.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:37:39.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:37:39.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:37:40.752 [DEBUG] [Thread-134671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:37:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 37, 9), 9.33, 54.92, 0.0, 17.86, 20.27, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:37:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:37:09
2026-02-11T19:37:41.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:37:42.086 [DEBUG] [Thread-134672] [transport.py] [_log()] starting thread (client mode): 0xa57c3e80
2026-02-11T19:37:42.087 [DEBUG] [Thread-134672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:37:42.107 [DEBUG] [Thread-134672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:37:42.107 [INFO] [Thread-134672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:37:42.110 [DEBUG] [Thread-134672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:37:42.110 [DEBUG] [Thread-134672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:37:42.110 [DEBUG] [Thread-134672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:37:42.110 [DEBUG] [Thread-134672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:42.110 [DEBUG] [Thread-134672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:42.110 [DEBUG] [Thread-134672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:42.110 [DEBUG] [Thread-134672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] client lang: <none>
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] server lang: <none>
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] kex follows: False
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] Compression: none
2026-02-11T19:37:42.111 [DEBUG] [Thread-134672] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:37:42.129 [DEBUG] [Thread-134672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:37:42.129 [DEBUG] [Thread-134672] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:37:42.130 [DEBUG] [Thread-134672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:37:42.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:37:42.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:37:42.132 [DEBUG] [Thread-134672] [transport.py] [_log()] userauth is OK
2026-02-11T19:37:42.132 [DEBUG] [Thread-134672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:37:42.132 [DEBUG] [Thread-134672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:37:42.132 [DEBUG] [Thread-134672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:37:42.132 [DEBUG] [Thread-134672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:37:42.157 [INFO] [Thread-134672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:37:42.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:37:42.810 [DEBUG] [Thread-134672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:37:42.811 [DEBUG] [Thread-134672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:37:42.811 [DEBUG] [Thread-134672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:37:42.851 [DEBUG] [Thread-134672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:37:42.851 [DEBUG] [Thread-134672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:37:42.855 [DEBUG] [Thread-134672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:37:42.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:37:42.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:37:42.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:37:42.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:37:42.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:37:42.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:37:42.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:37:42.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:37:42.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:37:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.734167 -999.00  +20.20  16.32     61  +12.50 1 2 1 1 1   842    0 8.03 5.97 ----- 17.9 16.3 277.0 19.7 20.9 -19.4 20.9 -18.4 20.6 -17.7 20.8 -18.5
2026-02-11T19:37:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:37:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:37:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.734167
2026-02-11T19:37:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:37:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:37:42.877 [DEBUG] [Thread-134672] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:37:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:37:42.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:37:42.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:37:42.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:37:09', tmtdew=9.33, humidity=54.92, cloud=0.0, wind=17.86, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:37:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:37:42.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:37:42.976 [DEBUG] [Thread-134675] [transport.py] [_log()] starting thread (client mode): 0x9eb06830
2026-02-11T19:37:42.976 [DEBUG] [Thread-134675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:37:42.991 [DEBUG] [Thread-134675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:37:42.991 [INFO] [Thread-134675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:37:42.999 [DEBUG] [Thread-134675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:37:42.999 [DEBUG] [Thread-134675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:37:42.999 [DEBUG] [Thread-134675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:37:42.999 [DEBUG] [Thread-134675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:42.999 [DEBUG] [Thread-134675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] client lang: <none>
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] server lang: <none>
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] kex follows: False
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:37:43.000 [DEBUG] [Thread-134675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:37:43.001 [DEBUG] [Thread-134675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:37:43.001 [DEBUG] [Thread-134675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:37:43.001 [DEBUG] [Thread-134675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:37:43.001 [DEBUG] [Thread-134675] [transport.py] [_log()] Compression: none
2026-02-11T19:37:43.001 [DEBUG] [Thread-134675] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:37:43.056 [DEBUG] [Thread-134675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:37:43.056 [DEBUG] [Thread-134675] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:37:43.057 [DEBUG] [Thread-134675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:37:43.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:37:43.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:37:43.112 [DEBUG] [Thread-134675] [transport.py] [_log()] userauth is OK
2026-02-11T19:37:43.112 [DEBUG] [Thread-134675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:37:43.112 [DEBUG] [Thread-134675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:37:43.112 [DEBUG] [Thread-134675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:37:43.112 [DEBUG] [Thread-134675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:37:43.136 [INFO] [Thread-134675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:37:43.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:37:43.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:37:43.951 [DEBUG] [Thread-134675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:37:43.952 [DEBUG] [Thread-134675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:37:44.000 [DEBUG] [Thread-134675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:37:44.000 [DEBUG] [Thread-134675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:37:44.009 [DEBUG] [Thread-134675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:37:44.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:37:44.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:37:44.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:37:44.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:37:44.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:37:44.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:37:44.046 [DEBUG] [Thread-134675] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:37:55.786 [DEBUG] [Thread-134677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:37:57.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:37:57.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:38:10.846 [DEBUG] [Thread-134678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:38:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:38:14.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:38:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:38:16.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 37, 45), 9.31, 55.02, 0.0, 19.78, 20.3, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:38:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:37:45
2026-02-11T19:38:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:38:16.540 [DEBUG] [Thread-134679] [transport.py] [_log()] starting thread (client mode): 0xa2db4250
2026-02-11T19:38:16.540 [DEBUG] [Thread-134679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:38:16.560 [DEBUG] [Thread-134679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:38:16.560 [INFO] [Thread-134679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:38:16.563 [DEBUG] [Thread-134679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:38:16.563 [DEBUG] [Thread-134679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] client lang: <none>
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] server lang: <none>
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] kex follows: False
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] Compression: none
2026-02-11T19:38:16.564 [DEBUG] [Thread-134679] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:38:16.581 [DEBUG] [Thread-134679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:38:16.582 [DEBUG] [Thread-134679] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:38:16.582 [DEBUG] [Thread-134679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:38:16.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:38:16.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:38:16.585 [DEBUG] [Thread-134679] [transport.py] [_log()] userauth is OK
2026-02-11T19:38:16.585 [DEBUG] [Thread-134679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:38:16.585 [DEBUG] [Thread-134679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:38:16.585 [DEBUG] [Thread-134679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:38:16.585 [DEBUG] [Thread-134679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:38:16.621 [INFO] [Thread-134679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:38:16.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:38:17.235 [DEBUG] [Thread-134679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:38:17.235 [DEBUG] [Thread-134679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:38:17.236 [DEBUG] [Thread-134679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:38:17.276 [DEBUG] [Thread-134679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:38:17.277 [DEBUG] [Thread-134679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:38:17.280 [DEBUG] [Thread-134679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:38:17.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:38:17.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:38:17.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:38:17.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:38:17.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:38:17.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:38:17.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:38:17.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:38:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:38:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.734515 -999.00  +20.10  19.76     61  +12.50 1 2 1 1 1   838    0 7.98 0.05 ----- 18.8 19.8 268.6 20.7 20.9 -19.2 20.9 -18.4 20.6 -17.9 20.8 -18.7
2026-02-11T19:38:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:38:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:38:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.734515
2026-02-11T19:38:17.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:38:17.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:38:17.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:38:17.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:38:17.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:38:17.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:37:45', tmtdew=9.31, humidity=55.02, cloud=0.0, wind=19.78, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:37:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:38:17.306 [DEBUG] [Thread-134679] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:38:17.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:38:17.401 [DEBUG] [Thread-134682] [transport.py] [_log()] starting thread (client mode): 0xa57e3850
2026-02-11T19:38:17.401 [DEBUG] [Thread-134682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:38:17.416 [DEBUG] [Thread-134682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:38:17.416 [INFO] [Thread-134682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:38:17.423 [DEBUG] [Thread-134682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:38:17.423 [DEBUG] [Thread-134682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:38:17.423 [DEBUG] [Thread-134682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] client lang: <none>
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] server lang: <none>
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] kex follows: False
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] Compression: none
2026-02-11T19:38:17.424 [DEBUG] [Thread-134682] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:38:17.480 [DEBUG] [Thread-134682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:38:17.481 [DEBUG] [Thread-134682] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:38:17.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:38:17.482 [DEBUG] [Thread-134682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:38:17.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:38:17.537 [DEBUG] [Thread-134682] [transport.py] [_log()] userauth is OK
2026-02-11T19:38:17.538 [DEBUG] [Thread-134682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:38:17.538 [DEBUG] [Thread-134682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:38:17.538 [DEBUG] [Thread-134682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:38:17.538 [DEBUG] [Thread-134682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:38:17.556 [INFO] [Thread-134682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:38:17.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:38:17.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:38:18.363 [DEBUG] [Thread-134682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:38:18.364 [DEBUG] [Thread-134682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:38:18.412 [DEBUG] [Thread-134682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:38:18.412 [DEBUG] [Thread-134682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:38:18.421 [DEBUG] [Thread-134682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:38:18.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:38:18.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:38:18.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:38:18.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:38:18.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:38:18.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:38:18.457 [DEBUG] [Thread-134682] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:38:25.882 [DEBUG] [Thread-134684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:38:34.784 [DEBUG] [Thread-134685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:38:40.932 [DEBUG] [Thread-134686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:38:48.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:38:48.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:38:48.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:38:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 38, 21), 9.32, 54.98, 0.0, 19.36, 20.31, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:38:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:38:21
2026-02-11T19:38:50.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:38:51.143 [DEBUG] [Thread-134687] [transport.py] [_log()] starting thread (client mode): 0xa57c2bc0
2026-02-11T19:38:51.144 [DEBUG] [Thread-134687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:38:51.164 [DEBUG] [Thread-134687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:38:51.164 [INFO] [Thread-134687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] client lang: <none>
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] server lang: <none>
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] kex follows: False
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] Compression: none
2026-02-11T19:38:51.167 [DEBUG] [Thread-134687] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:38:51.186 [DEBUG] [Thread-134687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:38:51.187 [DEBUG] [Thread-134687] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:38:51.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:38:51.188 [DEBUG] [Thread-134687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:38:51.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:38:51.190 [DEBUG] [Thread-134687] [transport.py] [_log()] userauth is OK
2026-02-11T19:38:51.190 [DEBUG] [Thread-134687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:38:51.190 [DEBUG] [Thread-134687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:38:51.190 [DEBUG] [Thread-134687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:38:51.191 [DEBUG] [Thread-134687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:38:51.210 [INFO] [Thread-134687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:38:51.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:38:51.817 [DEBUG] [Thread-134687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:38:51.817 [DEBUG] [Thread-134687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:38:51.818 [DEBUG] [Thread-134687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:38:51.858 [DEBUG] [Thread-134687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:38:51.859 [DEBUG] [Thread-134687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:38:51.862 [DEBUG] [Thread-134687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:38:51.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:38:51.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:38:51.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:38:51.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:38:51.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:38:51.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:38:51.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:38:51.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:38:51.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:38:51.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.734862 -999.00  +20.20  12.51     61  +12.40 1 2 1 1 1   833    0 7.80 -3.51 ----- 13.5 12.5 283.4 18.7 20.9 -19.3 20.9 -18.3 20.6 -17.8 20.8 -18.6
2026-02-11T19:38:51.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:38:51.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:38:51.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.734862
2026-02-11T19:38:51.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:38:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:38:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:38:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:38:51.891 [DEBUG] [Thread-134687] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:38:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:38:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:38:21', tmtdew=9.32, humidity=54.98, cloud=0.0, wind=19.36, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:38:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:38:51.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:38:51.989 [DEBUG] [Thread-134690] [transport.py] [_log()] starting thread (client mode): 0xa5740e50
2026-02-11T19:38:51.989 [DEBUG] [Thread-134690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:38:52.004 [DEBUG] [Thread-134690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:38:52.004 [INFO] [Thread-134690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] client lang: <none>
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] server lang: <none>
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] kex follows: False
2026-02-11T19:38:52.012 [DEBUG] [Thread-134690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:38:52.013 [DEBUG] [Thread-134690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:38:52.013 [DEBUG] [Thread-134690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:38:52.013 [DEBUG] [Thread-134690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:38:52.013 [DEBUG] [Thread-134690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:38:52.013 [DEBUG] [Thread-134690] [transport.py] [_log()] Compression: none
2026-02-11T19:38:52.013 [DEBUG] [Thread-134690] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:38:52.068 [DEBUG] [Thread-134690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:38:52.068 [DEBUG] [Thread-134690] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:38:52.069 [DEBUG] [Thread-134690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:38:52.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:38:52.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:38:52.128 [DEBUG] [Thread-134690] [transport.py] [_log()] userauth is OK
2026-02-11T19:38:52.129 [DEBUG] [Thread-134690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:38:52.129 [DEBUG] [Thread-134690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:38:52.129 [DEBUG] [Thread-134690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:38:52.129 [DEBUG] [Thread-134690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:38:52.150 [INFO] [Thread-134690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:38:52.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:38:52.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:38:52.971 [DEBUG] [Thread-134690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:38:52.972 [DEBUG] [Thread-134690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:38:53.019 [DEBUG] [Thread-134690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:38:53.019 [DEBUG] [Thread-134690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:38:53.029 [DEBUG] [Thread-134690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:38:53.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:38:53.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:38:53.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:38:53.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:38:53.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:38:53.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:38:53.063 [DEBUG] [Thread-134690] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:38:55.967 [DEBUG] [Thread-134692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:02.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:02.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:11.017 [DEBUG] [Thread-134693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:23.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:39:23.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:39:23.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:39:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 38, 56), 9.26, 54.98, 0.0, 18.35, 20.23, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:39:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:38:56
2026-02-11T19:39:25.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:39:25.486 [DEBUG] [Thread-134694] [transport.py] [_log()] starting thread (client mode): 0xa2d56140
2026-02-11T19:39:25.486 [DEBUG] [Thread-134694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:39:25.507 [DEBUG] [Thread-134694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:39:25.507 [INFO] [Thread-134694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:39:25.510 [DEBUG] [Thread-134694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] client lang: <none>
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] server lang: <none>
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] kex follows: False
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:39:25.511 [DEBUG] [Thread-134694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:39:25.512 [DEBUG] [Thread-134694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:39:25.512 [DEBUG] [Thread-134694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:39:25.512 [DEBUG] [Thread-134694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:39:25.512 [DEBUG] [Thread-134694] [transport.py] [_log()] Compression: none
2026-02-11T19:39:25.512 [DEBUG] [Thread-134694] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:39:25.530 [DEBUG] [Thread-134694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:39:25.531 [DEBUG] [Thread-134694] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:39:25.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:39:25.532 [DEBUG] [Thread-134694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:39:25.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:39:25.533 [DEBUG] [Thread-134694] [transport.py] [_log()] userauth is OK
2026-02-11T19:39:25.534 [DEBUG] [Thread-134694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:39:25.534 [DEBUG] [Thread-134694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:39:25.534 [DEBUG] [Thread-134694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:39:25.534 [DEBUG] [Thread-134694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:39:25.551 [INFO] [Thread-134694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:39:25.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:39:26.053 [DEBUG] [Thread-134696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:26.286 [DEBUG] [Thread-134694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:39:26.286 [DEBUG] [Thread-134694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:39:26.287 [DEBUG] [Thread-134694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:39:26.327 [DEBUG] [Thread-134694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:39:26.328 [DEBUG] [Thread-134694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:39:26.331 [DEBUG] [Thread-134694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:39:26.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:39:26.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:39:26.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:39:26.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:39:26.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:39:26.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:39:26.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:39:26.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:39:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:39:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.735209 -999.00  +20.10  16.80     61  +12.40 1 2 1 1 1   828    0 7.73 -8.14 ----- 14.3 16.8 274.2 22.1 20.9 -19.4 20.9 -18.5 20.5 -17.7 20.8 -18.6
2026-02-11T19:39:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:39:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:39:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.735209
2026-02-11T19:39:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:39:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:39:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:39:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:39:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:39:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:38:56', tmtdew=9.26, humidity=54.98, cloud=0.0, wind=18.35, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:38:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:39:26.357 [DEBUG] [Thread-134694] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:39:26.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:39:26.460 [DEBUG] [Thread-134698] [transport.py] [_log()] starting thread (client mode): 0xa2dc28f0
2026-02-11T19:39:26.460 [DEBUG] [Thread-134698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:39:26.475 [DEBUG] [Thread-134698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:39:26.475 [INFO] [Thread-134698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:39:26.482 [DEBUG] [Thread-134698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:39:26.483 [DEBUG] [Thread-134698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:39:26.483 [DEBUG] [Thread-134698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:39:26.483 [DEBUG] [Thread-134698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:39:26.483 [DEBUG] [Thread-134698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:39:26.483 [DEBUG] [Thread-134698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:39:26.483 [DEBUG] [Thread-134698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] client lang: <none>
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] server lang: <none>
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] kex follows: False
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:39:26.484 [DEBUG] [Thread-134698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:39:26.485 [DEBUG] [Thread-134698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:39:26.485 [DEBUG] [Thread-134698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:39:26.485 [DEBUG] [Thread-134698] [transport.py] [_log()] Compression: none
2026-02-11T19:39:26.485 [DEBUG] [Thread-134698] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:39:26.546 [DEBUG] [Thread-134698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:39:26.547 [DEBUG] [Thread-134698] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:39:26.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:39:26.549 [DEBUG] [Thread-134698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:39:26.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:39:26.605 [DEBUG] [Thread-134698] [transport.py] [_log()] userauth is OK
2026-02-11T19:39:26.605 [DEBUG] [Thread-134698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:39:26.605 [DEBUG] [Thread-134698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:39:26.605 [DEBUG] [Thread-134698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:39:26.605 [DEBUG] [Thread-134698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:39:26.624 [INFO] [Thread-134698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:39:26.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:39:26.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:39:27.441 [DEBUG] [Thread-134698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:39:27.441 [DEBUG] [Thread-134698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:39:27.489 [DEBUG] [Thread-134698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:39:27.489 [DEBUG] [Thread-134698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:39:27.498 [DEBUG] [Thread-134698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:39:27.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:39:27.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:39:27.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:39:27.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:39:27.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:39:27.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:39:27.532 [DEBUG] [Thread-134698] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:39:34.858 [DEBUG] [Thread-134700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:41.092 [DEBUG] [Thread-134701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:56.147 [DEBUG] [Thread-134702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:39:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:39:57.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:39:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:39:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 39, 32), 9.26, 55.02, 0.0, 18.62, 20.25, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:39:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:39:32
2026-02-11T19:39:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:39:59.871 [DEBUG] [Thread-134703] [transport.py] [_log()] starting thread (client mode): 0xa5759510
2026-02-11T19:39:59.871 [DEBUG] [Thread-134703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:39:59.890 [DEBUG] [Thread-134703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:39:59.890 [INFO] [Thread-134703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] client lang: <none>
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] server lang: <none>
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] kex follows: False
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:39:59.893 [DEBUG] [Thread-134703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:39:59.894 [DEBUG] [Thread-134703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:39:59.894 [DEBUG] [Thread-134703] [transport.py] [_log()] Compression: none
2026-02-11T19:39:59.894 [DEBUG] [Thread-134703] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:39:59.910 [DEBUG] [Thread-134703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:39:59.910 [DEBUG] [Thread-134703] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:39:59.910 [DEBUG] [Thread-134703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:39:59.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:39:59.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:39:59.912 [DEBUG] [Thread-134703] [transport.py] [_log()] userauth is OK
2026-02-11T19:39:59.912 [DEBUG] [Thread-134703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:39:59.912 [DEBUG] [Thread-134703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:39:59.913 [DEBUG] [Thread-134703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:39:59.913 [DEBUG] [Thread-134703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:39:59.939 [INFO] [Thread-134703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:39:59.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:40:00.588 [DEBUG] [Thread-134703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:40:00.588 [DEBUG] [Thread-134703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:40:00.588 [DEBUG] [Thread-134703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:40:00.629 [DEBUG] [Thread-134703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:40:00.629 [DEBUG] [Thread-134703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:40:00.632 [DEBUG] [Thread-134703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:40:00.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:40:00.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:40:00.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:40:00.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:40:00.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:40:00.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:40:00.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:40:00.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:40:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:40:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.735556 -999.00  +20.10  15.77     61  +12.40 1 2 1 1 1   822    0 7.53 -12.24 ----- 16.6 15.8 273.6 18.0 20.9 -19.4 20.8 -18.4 20.5 -17.8 20.8 -18.6
2026-02-11T19:40:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:40:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:40:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.735556
2026-02-11T19:40:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:40:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:40:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:40:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:40:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:40:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:39:32', tmtdew=9.26, humidity=55.02, cloud=0.0, wind=18.62, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:39:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:40:00.654 [DEBUG] [Thread-134703] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:40:00.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:40:00.751 [DEBUG] [Thread-134706] [transport.py] [_log()] starting thread (client mode): 0xa2dc0670
2026-02-11T19:40:00.751 [DEBUG] [Thread-134706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:40:00.766 [DEBUG] [Thread-134706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:40:00.766 [INFO] [Thread-134706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:40:00.773 [DEBUG] [Thread-134706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:40:00.773 [DEBUG] [Thread-134706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:40:00.773 [DEBUG] [Thread-134706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:40:00.773 [DEBUG] [Thread-134706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:40:00.773 [DEBUG] [Thread-134706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] client lang: <none>
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] server lang: <none>
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] kex follows: False
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] Compression: none
2026-02-11T19:40:00.774 [DEBUG] [Thread-134706] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:40:00.832 [DEBUG] [Thread-134706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:40:00.833 [DEBUG] [Thread-134706] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:40:00.833 [DEBUG] [Thread-134706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:40:00.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:40:00.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:40:00.888 [DEBUG] [Thread-134706] [transport.py] [_log()] userauth is OK
2026-02-11T19:40:00.889 [DEBUG] [Thread-134706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:40:00.889 [DEBUG] [Thread-134706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:40:00.889 [DEBUG] [Thread-134706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:40:00.889 [DEBUG] [Thread-134706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:40:00.907 [INFO] [Thread-134706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:40:00.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:40:00.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:40:01.812 [DEBUG] [Thread-134706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:40:01.812 [DEBUG] [Thread-134706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:40:01.860 [DEBUG] [Thread-134706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:40:01.860 [DEBUG] [Thread-134706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:40:01.870 [DEBUG] [Thread-134706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:40:01.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:40:01.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:40:01.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:40:01.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:40:01.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:40:01.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:40:01.905 [DEBUG] [Thread-134706] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:40:09.216 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:40:09.217 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:40:11.180 [DEBUG] [Thread-134708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:40:26.228 [DEBUG] [Thread-134709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:40:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:40:31.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:40:31.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:40:34.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 40, 8), 9.25, 55.02, 0.0, 18.02, 20.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:40:34.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:40:08
2026-02-11T19:40:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:40:34.929 [DEBUG] [Thread-134710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:40:34.949 [DEBUG] [Thread-134711] [transport.py] [_log()] starting thread (client mode): 0xa2d5fb80
2026-02-11T19:40:34.949 [DEBUG] [Thread-134711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:40:34.968 [DEBUG] [Thread-134711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:40:34.968 [INFO] [Thread-134711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] client lang: <none>
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] server lang: <none>
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] kex follows: False
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] Compression: none
2026-02-11T19:40:34.972 [DEBUG] [Thread-134711] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:40:35.001 [DEBUG] [Thread-134711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:40:35.001 [DEBUG] [Thread-134711] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:40:35.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:40:35.003 [DEBUG] [Thread-134711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:40:35.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:40:35.005 [DEBUG] [Thread-134711] [transport.py] [_log()] userauth is OK
2026-02-11T19:40:35.005 [DEBUG] [Thread-134711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:40:35.005 [DEBUG] [Thread-134711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:40:35.005 [DEBUG] [Thread-134711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:40:35.005 [DEBUG] [Thread-134711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:40:35.026 [INFO] [Thread-134711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:40:35.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:40:35.655 [DEBUG] [Thread-134711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:40:35.655 [DEBUG] [Thread-134711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:40:35.656 [DEBUG] [Thread-134711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:40:35.696 [DEBUG] [Thread-134711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:40:35.696 [DEBUG] [Thread-134711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:40:35.699 [DEBUG] [Thread-134711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:40:35.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:40:35.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:40:35.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:40:35.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:40:35.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:40:35.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:40:35.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:40:35.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:40:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:40:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.735903 -999.00  +20.10  13.35     61  +12.40 1 2 1 1 1   815    0 7.52 -17.82 ----- 13.1 13.3 276.2 16.2 20.9 -19.2 20.9 -18.4 20.5 -17.8 20.8 -18.6
2026-02-11T19:40:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:40:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:40:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.735903
2026-02-11T19:40:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:40:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:40:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:40:35.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:40:35.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:40:35.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:40:08', tmtdew=9.25, humidity=55.02, cloud=0.0, wind=18.02, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:39:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:40:35.723 [DEBUG] [Thread-134711] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:40:35.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:40:35.820 [DEBUG] [Thread-134714] [transport.py] [_log()] starting thread (client mode): 0xa2d5d870
2026-02-11T19:40:35.820 [DEBUG] [Thread-134714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:40:35.834 [DEBUG] [Thread-134714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:40:35.834 [INFO] [Thread-134714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:40:35.842 [DEBUG] [Thread-134714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:40:35.842 [DEBUG] [Thread-134714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:40:35.842 [DEBUG] [Thread-134714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:40:35.842 [DEBUG] [Thread-134714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:40:35.842 [DEBUG] [Thread-134714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:40:35.842 [DEBUG] [Thread-134714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] client lang: <none>
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] server lang: <none>
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] kex follows: False
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] Compression: none
2026-02-11T19:40:35.843 [DEBUG] [Thread-134714] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:40:35.901 [DEBUG] [Thread-134714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:40:35.902 [DEBUG] [Thread-134714] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:40:35.902 [DEBUG] [Thread-134714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:40:35.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:40:35.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:40:35.961 [DEBUG] [Thread-134714] [transport.py] [_log()] userauth is OK
2026-02-11T19:40:35.961 [DEBUG] [Thread-134714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:40:35.961 [DEBUG] [Thread-134714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:40:35.961 [DEBUG] [Thread-134714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:40:35.961 [DEBUG] [Thread-134714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:40:35.986 [INFO] [Thread-134714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:40:35.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:40:35.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:40:36.791 [DEBUG] [Thread-134714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:40:36.791 [DEBUG] [Thread-134714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:40:36.843 [DEBUG] [Thread-134714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:40:36.844 [DEBUG] [Thread-134714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:40:36.857 [DEBUG] [Thread-134714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:40:36.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:40:36.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:40:36.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
2026-02-11T19:40:36.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:40:36.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:40:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:40:36.901 [DEBUG] [Thread-134714] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:40:41.263 [DEBUG] [Thread-134716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:40:56.311 [DEBUG] [Thread-134717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:41:06.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:41:06.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:41:06.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
2026-02-11T19:41:08.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 40, 43), 9.33, 55.12, 0.0, 17.5, 20.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:41:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:40:43
2026-02-11T19:41:09.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:41:09.340 [DEBUG] [Thread-134718] [transport.py] [_log()] starting thread (client mode): 0xa2d5e410
2026-02-11T19:41:09.340 [DEBUG] [Thread-134718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:41:09.360 [DEBUG] [Thread-134718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:41:09.360 [INFO] [Thread-134718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:41:09.364 [DEBUG] [Thread-134718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:41:09.364 [DEBUG] [Thread-134718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:41:09.364 [DEBUG] [Thread-134718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:41:09.364 [DEBUG] [Thread-134718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:09.364 [DEBUG] [Thread-134718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:09.364 [DEBUG] [Thread-134718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:09.364 [DEBUG] [Thread-134718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] client lang: <none>
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] server lang: <none>
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] kex follows: False
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] Compression: none
2026-02-11T19:41:09.365 [DEBUG] [Thread-134718] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:41:09.383 [DEBUG] [Thread-134718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:41:09.383 [DEBUG] [Thread-134718] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:41:09.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:41:09.384 [DEBUG] [Thread-134718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:41:09.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:41:09.386 [DEBUG] [Thread-134718] [transport.py] [_log()] userauth is OK
2026-02-11T19:41:09.387 [DEBUG] [Thread-134718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:41:09.387 [DEBUG] [Thread-134718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:41:09.387 [DEBUG] [Thread-134718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:41:09.387 [DEBUG] [Thread-134718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:41:09.410 [INFO] [Thread-134718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:41:09.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:41:10.035 [DEBUG] [Thread-134718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:41:10.036 [DEBUG] [Thread-134718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:41:10.036 [DEBUG] [Thread-134718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:41:10.076 [DEBUG] [Thread-134718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:41:10.076 [DEBUG] [Thread-134718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:41:10.080 [DEBUG] [Thread-134718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:41:10.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:41:10.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:41:10.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:41:10.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:41:10.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:41:10.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:41:10.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:41:10.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:41:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:41:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.736251 -999.00  +20.10  15.62     60  +12.40 1 2 1 1 1   809    0 7.39 -22.29 ----- 13.6 15.6 277.0 19.3 20.9 -19.2 20.8 -18.3 20.5 -17.6 20.8 -18.6
2026-02-11T19:41:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:41:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:41:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.736251
2026-02-11T19:41:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:41:10.104 [DEBUG] [Thread-134718] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:41:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:41:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:41:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:41:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:41:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:40:43', tmtdew=9.33, humidity=55.12, cloud=0.0, wind=17.5, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:40:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:41:10.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:41:10.201 [DEBUG] [Thread-134721] [transport.py] [_log()] starting thread (client mode): 0xa57b2dd0
2026-02-11T19:41:10.201 [DEBUG] [Thread-134721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:41:10.215 [DEBUG] [Thread-134721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:41:10.215 [INFO] [Thread-134721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:41:10.222 [DEBUG] [Thread-134721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] client lang: <none>
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] server lang: <none>
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] kex follows: False
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] Compression: none
2026-02-11T19:41:10.223 [DEBUG] [Thread-134721] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:41:10.282 [DEBUG] [Thread-134721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:41:10.282 [DEBUG] [Thread-134721] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:41:10.283 [DEBUG] [Thread-134721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:41:10.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:41:10.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:41:10.338 [DEBUG] [Thread-134721] [transport.py] [_log()] userauth is OK
2026-02-11T19:41:10.338 [DEBUG] [Thread-134721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:41:10.338 [DEBUG] [Thread-134721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:41:10.338 [DEBUG] [Thread-134721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:41:10.338 [DEBUG] [Thread-134721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:41:10.356 [INFO] [Thread-134721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:41:10.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:41:10.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:41:11.175 [DEBUG] [Thread-134721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:41:11.176 [DEBUG] [Thread-134721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:41:11.223 [DEBUG] [Thread-134721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:41:11.226 [DEBUG] [Thread-134721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:41:11.235 [DEBUG] [Thread-134721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:41:11.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:41:11.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:41:11.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:41:11.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:41:11.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:41:11.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:41:11.270 [DEBUG] [Thread-134721] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:41:11.346 [DEBUG] [Thread-134723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:41:14.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:41:14.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:41:26.401 [DEBUG] [Thread-134724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:41:34.999 [DEBUG] [Thread-134725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:41:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:41:41.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:41:41.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:41:41.442 [DEBUG] [Thread-134726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:41:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 41, 19), 9.3, 55.2, 0.0, 18.21, 20.28, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:41:43.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:41:19
2026-02-11T19:41:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:41:43.672 [DEBUG] [Thread-134727] [transport.py] [_log()] starting thread (client mode): 0xa2d57100
2026-02-11T19:41:43.672 [DEBUG] [Thread-134727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:41:43.692 [DEBUG] [Thread-134727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:41:43.692 [INFO] [Thread-134727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:41:43.695 [DEBUG] [Thread-134727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:41:43.695 [DEBUG] [Thread-134727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:41:43.695 [DEBUG] [Thread-134727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:41:43.695 [DEBUG] [Thread-134727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:43.695 [DEBUG] [Thread-134727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:43.695 [DEBUG] [Thread-134727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:43.695 [DEBUG] [Thread-134727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] client lang: <none>
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] server lang: <none>
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] kex follows: False
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] Compression: none
2026-02-11T19:41:43.696 [DEBUG] [Thread-134727] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:41:43.712 [DEBUG] [Thread-134727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:41:43.712 [DEBUG] [Thread-134727] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:41:43.712 [DEBUG] [Thread-134727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:41:43.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:41:43.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:41:43.714 [DEBUG] [Thread-134727] [transport.py] [_log()] userauth is OK
2026-02-11T19:41:43.714 [DEBUG] [Thread-134727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:41:43.715 [DEBUG] [Thread-134727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:41:43.715 [DEBUG] [Thread-134727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:41:43.715 [DEBUG] [Thread-134727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:41:43.729 [INFO] [Thread-134727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:41:43.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:41:44.381 [DEBUG] [Thread-134727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:41:44.381 [DEBUG] [Thread-134727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:41:44.382 [DEBUG] [Thread-134727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:41:44.422 [DEBUG] [Thread-134727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:41:44.423 [DEBUG] [Thread-134727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:41:44.426 [DEBUG] [Thread-134727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:41:44.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:41:44.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:41:44.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:41:44.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:41:44.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:41:44.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:41:44.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:41:44.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:41:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:41:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.736945 -999.00  +20.10  14.42     60  +12.30 1 2 1 1 1   793    0 7.10 -28.99 ----- 17.3 14.4 280.8 18.1 20.8 -19.4 20.8 -18.3 20.4 -17.6 20.8 -18.6
2026-02-11T19:41:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:41:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:41:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.736945
2026-02-11T19:41:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:41:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:41:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:41:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:41:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:41:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:41:19', tmtdew=9.3, humidity=55.2, cloud=0.0, wind=18.21, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:41:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:41:44.454 [DEBUG] [Thread-134727] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:41:44.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:41:44.548 [DEBUG] [Thread-134730] [transport.py] [_log()] starting thread (client mode): 0xa57c39a0
2026-02-11T19:41:44.548 [DEBUG] [Thread-134730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:41:44.562 [DEBUG] [Thread-134730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:41:44.562 [INFO] [Thread-134730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] client lang: <none>
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] server lang: <none>
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] kex follows: False
2026-02-11T19:41:44.570 [DEBUG] [Thread-134730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:41:44.571 [DEBUG] [Thread-134730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:41:44.571 [DEBUG] [Thread-134730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:41:44.571 [DEBUG] [Thread-134730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:41:44.571 [DEBUG] [Thread-134730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:41:44.571 [DEBUG] [Thread-134730] [transport.py] [_log()] Compression: none
2026-02-11T19:41:44.571 [DEBUG] [Thread-134730] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:41:44.629 [DEBUG] [Thread-134730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:41:44.630 [DEBUG] [Thread-134730] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:41:44.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:41:44.631 [DEBUG] [Thread-134730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:41:44.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:41:44.686 [DEBUG] [Thread-134730] [transport.py] [_log()] userauth is OK
2026-02-11T19:41:44.686 [DEBUG] [Thread-134730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:41:44.686 [DEBUG] [Thread-134730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:41:44.686 [DEBUG] [Thread-134730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:41:44.686 [DEBUG] [Thread-134730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:41:44.705 [INFO] [Thread-134730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:41:44.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:41:44.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:41:45.531 [DEBUG] [Thread-134730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:41:45.531 [DEBUG] [Thread-134730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:41:45.579 [DEBUG] [Thread-134730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:41:45.579 [DEBUG] [Thread-134730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:41:45.589 [DEBUG] [Thread-134730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:41:45.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:41:45.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')
2026-02-11T19:41:45.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:41:45.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:41:45.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:41:45.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:41:45.624 [DEBUG] [Thread-134730] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:41:56.479 [DEBUG] [Thread-134732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:42:11.530 [DEBUG] [Thread-134733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:42:15.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:42:15.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:42: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
2026-02-11T19:42:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 41, 55), 9.26, 55.17, 0.0, 16.0, 20.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:42:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:41:55
2026-02-11T19:42:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:42:18.292 [DEBUG] [Thread-134734] [transport.py] [_log()] starting thread (client mode): 0xa2d5ddb0
2026-02-11T19:42:18.292 [DEBUG] [Thread-134734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:42:18.307 [DEBUG] [Thread-134734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:42:18.307 [INFO] [Thread-134734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] client lang: <none>
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] server lang: <none>
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] kex follows: False
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:42:18.311 [DEBUG] [Thread-134734] [transport.py] [_log()] Compression: none
2026-02-11T19:42:18.312 [DEBUG] [Thread-134734] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:42:18.329 [DEBUG] [Thread-134734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:42:18.329 [DEBUG] [Thread-134734] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:42:18.330 [DEBUG] [Thread-134734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:42:18.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:42:18.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:42:18.332 [DEBUG] [Thread-134734] [transport.py] [_log()] userauth is OK
2026-02-11T19:42:18.332 [DEBUG] [Thread-134734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:42:18.332 [DEBUG] [Thread-134734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:42:18.332 [DEBUG] [Thread-134734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:42:18.332 [DEBUG] [Thread-134734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:42:18.350 [INFO] [Thread-134734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:42:18.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:42:19.108 [DEBUG] [Thread-134734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:42:19.108 [DEBUG] [Thread-134734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:42:19.109 [DEBUG] [Thread-134734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:42:19.149 [DEBUG] [Thread-134734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:42:19.149 [DEBUG] [Thread-134734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:42:19.153 [DEBUG] [Thread-134734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:42:19.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:42:19.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:42:19.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:42:19.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:42:19.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:42:19.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:42:19.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:42:19.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:42:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:42:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.737292 -999.00  +20.10   8.10     61  +12.40 1 2 1 1 1   784    0 7.04 -30.56 ----- 12.3 8.1 268.2 21.6 20.8 -19.4 20.7 -18.3 20.4 -17.7 20.7 -18.6
2026-02-11T19:42:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:42:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:42:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.737292
2026-02-11T19:42:19.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:42:19.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:42:19.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:42:19.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:42:19.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:42:19.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:41:55', tmtdew=9.26, humidity=55.17, cloud=0.0, wind=16.0, temperature=20.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:41:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:42:19.181 [DEBUG] [Thread-134734] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:42:19.252 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:42:19.252 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:42:19.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:42:19.276 [DEBUG] [Thread-134737] [transport.py] [_log()] starting thread (client mode): 0x9eb04f40
2026-02-11T19:42:19.276 [DEBUG] [Thread-134737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:42:19.291 [DEBUG] [Thread-134737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:42:19.291 [INFO] [Thread-134737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:42:19.298 [DEBUG] [Thread-134737] [transport.py] [_log()] client lang: <none>
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] server lang: <none>
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] kex follows: False
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] Compression: none
2026-02-11T19:42:19.299 [DEBUG] [Thread-134737] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:42:19.356 [DEBUG] [Thread-134737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:42:19.356 [DEBUG] [Thread-134737] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:42:19.356 [DEBUG] [Thread-134737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:42:19.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:42:19.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:42:19.413 [DEBUG] [Thread-134737] [transport.py] [_log()] userauth is OK
2026-02-11T19:42:19.413 [DEBUG] [Thread-134737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:42:19.413 [DEBUG] [Thread-134737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:42:19.413 [DEBUG] [Thread-134737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:42:19.413 [DEBUG] [Thread-134737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:42:19.430 [INFO] [Thread-134737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:42:19.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:42:19.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:42:20.270 [DEBUG] [Thread-134737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:42:20.270 [DEBUG] [Thread-134737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:42:20.318 [DEBUG] [Thread-134737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:42:20.318 [DEBUG] [Thread-134737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:42:20.328 [DEBUG] [Thread-134737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:42:20.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:42:20.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:42:20.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:42:20.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:42:20.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:42:20.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:42:20.366 [DEBUG] [Thread-134737] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:42:26.568 [DEBUG] [Thread-134739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:42:35.071 [DEBUG] [Thread-134740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:42:41.625 [DEBUG] [Thread-134741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:42:50.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:42:50.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:42:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:42:52.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 42, 30), 9.24, 55.23, 0.0, 15.72, 20.22, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:42:52.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:42:30
2026-02-11T19:42:52.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:42:52.707 [DEBUG] [Thread-134742] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-11T19:42:52.707 [DEBUG] [Thread-134742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:42:52.728 [DEBUG] [Thread-134742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:42:52.728 [INFO] [Thread-134742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:42:52.732 [DEBUG] [Thread-134742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] client lang: <none>
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] server lang: <none>
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] kex follows: False
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] Compression: none
2026-02-11T19:42:52.733 [DEBUG] [Thread-134742] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:42:52.745 [DEBUG] [Thread-134742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:42:52.746 [DEBUG] [Thread-134742] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:42:52.746 [DEBUG] [Thread-134742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:42:52.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:42:52.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:42:52.748 [DEBUG] [Thread-134742] [transport.py] [_log()] userauth is OK
2026-02-11T19:42:52.748 [DEBUG] [Thread-134742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:42:52.748 [DEBUG] [Thread-134742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:42:52.749 [DEBUG] [Thread-134742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:42:52.749 [DEBUG] [Thread-134742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:42:52.768 [INFO] [Thread-134742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:42:52.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:42:53.325 [DEBUG] [Thread-134742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:42:53.325 [DEBUG] [Thread-134742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:42:53.326 [DEBUG] [Thread-134742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:42:53.366 [DEBUG] [Thread-134742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:42:53.366 [DEBUG] [Thread-134742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:42:53.370 [DEBUG] [Thread-134742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:42:53.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:42:53.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:42:53.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:42:53.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:42:53.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:42:53.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:42:53.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:42:53.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:42:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:42:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.737640 -999.00  +20.10   8.51     61  +12.40 1 2 1 1 1   775    0 6.99 -31.66 ----- 6.7 8.5 270.6 13.5 20.8 -19.3 20.8 -18.3 20.4 -17.5 20.7 -18.6
2026-02-11T19:42:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:42:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:42:53.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.737640
2026-02-11T19:42:53.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:42:53.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:42:53.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:42:53.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:42:53.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:42:53.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:42:30', tmtdew=9.24, humidity=55.23, cloud=0.0, wind=15.72, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:42:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:42:53.393 [DEBUG] [Thread-134742] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:42:53.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:42:53.500 [DEBUG] [Thread-134745] [transport.py] [_log()] starting thread (client mode): 0xa2d57820
2026-02-11T19:42:53.500 [DEBUG] [Thread-134745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:42:53.514 [DEBUG] [Thread-134745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:42:53.514 [INFO] [Thread-134745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:42:53.522 [DEBUG] [Thread-134745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:42:53.523 [DEBUG] [Thread-134745] [transport.py] [_log()] client lang: <none>
2026-02-11T19:42:53.524 [DEBUG] [Thread-134745] [transport.py] [_log()] server lang: <none>
2026-02-11T19:42:53.524 [DEBUG] [Thread-134745] [transport.py] [_log()] kex follows: False
2026-02-11T19:42:53.524 [DEBUG] [Thread-134745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:42:53.524 [DEBUG] [Thread-134745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:42:53.524 [DEBUG] [Thread-134745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:42:53.524 [DEBUG] [Thread-134745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:42:53.524 [DEBUG] [Thread-134745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:42:53.525 [DEBUG] [Thread-134745] [transport.py] [_log()] Compression: none
2026-02-11T19:42:53.525 [DEBUG] [Thread-134745] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:42:53.582 [DEBUG] [Thread-134745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:42:53.583 [DEBUG] [Thread-134745] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:42:53.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:42:53.584 [DEBUG] [Thread-134745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:42:53.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:42:53.639 [DEBUG] [Thread-134745] [transport.py] [_log()] userauth is OK
2026-02-11T19:42:53.639 [DEBUG] [Thread-134745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:42:53.640 [DEBUG] [Thread-134745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:42:53.640 [DEBUG] [Thread-134745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:42:53.640 [DEBUG] [Thread-134745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:42:53.658 [INFO] [Thread-134745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:42:53.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:42:53.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:42:54.478 [DEBUG] [Thread-134745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:42:54.478 [DEBUG] [Thread-134745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:42:54.525 [DEBUG] [Thread-134745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:42:54.526 [DEBUG] [Thread-134745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:42:54.535 [DEBUG] [Thread-134745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:42:54.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:42:54.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:42:54.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:42:54.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:42:54.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:42:54.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:42:54.571 [DEBUG] [Thread-134745] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:42:56.662 [DEBUG] [Thread-134747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:11.715 [DEBUG] [Thread-134748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:24.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:43:24.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:43:24.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
2026-02-11T19:43:25.035 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:25.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:26.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 43, 7), 9.23, 55.27, 0.0, 14.54, 20.2, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:43:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:43:07
2026-02-11T19:43:26.751 [DEBUG] [Thread-134749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:43:26.942 [DEBUG] [Thread-134750] [transport.py] [_log()] starting thread (client mode): 0xa2d56d70
2026-02-11T19:43:26.942 [DEBUG] [Thread-134750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:43:26.952 [DEBUG] [Thread-134750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:43:26.952 [INFO] [Thread-134750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] client lang: <none>
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] server lang: <none>
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] kex follows: False
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] Compression: none
2026-02-11T19:43:26.956 [DEBUG] [Thread-134750] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:43:26.971 [DEBUG] [Thread-134750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:43:26.972 [DEBUG] [Thread-134750] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:43:26.972 [DEBUG] [Thread-134750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:43:26.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:43:26.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:43:26.973 [DEBUG] [Thread-134750] [transport.py] [_log()] userauth is OK
2026-02-11T19:43:26.973 [DEBUG] [Thread-134750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:43:26.974 [DEBUG] [Thread-134750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:43:26.974 [DEBUG] [Thread-134750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:43:26.974 [DEBUG] [Thread-134750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:43:26.996 [INFO] [Thread-134750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:43:26.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:43:27.600 [DEBUG] [Thread-134750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:43:27.601 [DEBUG] [Thread-134750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:43:27.601 [DEBUG] [Thread-134750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:43:27.642 [DEBUG] [Thread-134750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:43:27.642 [DEBUG] [Thread-134750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:43:27.644 [DEBUG] [Thread-134750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:43:27.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:43:27.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:43:27.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:43:27.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:43:27.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:43:27.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:43:27.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:43:27.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:43:27.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:43:27.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.738334 -999.00  +20.10   7.08     61  +12.50 1 2 1 1 1   753    0 7.00 -33.06 ----- 8.0 7.1 244.8 11.9 20.9 -19.1 20.8 -18.3 20.4 -17.5 20.7 -18.6
2026-02-11T19:43:27.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:43:27.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:43:27.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.738334
2026-02-11T19:43:27.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:43:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:43:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:43:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:43:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:43:27.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:43:07', tmtdew=9.23, humidity=55.27, cloud=0.0, wind=14.54, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:43:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:43:27.665 [DEBUG] [Thread-134750] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:43:27.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:43:27.761 [DEBUG] [Thread-134753] [transport.py] [_log()] starting thread (client mode): 0xa2dc2710
2026-02-11T19:43:27.762 [DEBUG] [Thread-134753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:43:27.775 [DEBUG] [Thread-134753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:43:27.776 [INFO] [Thread-134753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:43:27.783 [DEBUG] [Thread-134753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] client lang: <none>
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] server lang: <none>
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] kex follows: False
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] Compression: none
2026-02-11T19:43:27.784 [DEBUG] [Thread-134753] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:43:27.841 [DEBUG] [Thread-134753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:43:27.842 [DEBUG] [Thread-134753] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:43:27.843 [DEBUG] [Thread-134753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:43:27.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:43:27.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:43:27.900 [DEBUG] [Thread-134753] [transport.py] [_log()] userauth is OK
2026-02-11T19:43:27.900 [DEBUG] [Thread-134753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:43:27.901 [DEBUG] [Thread-134753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:43:27.901 [DEBUG] [Thread-134753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:43:27.901 [DEBUG] [Thread-134753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:43:27.925 [INFO] [Thread-134753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:43:27.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:43:27.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:43:28.754 [DEBUG] [Thread-134753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:43:28.755 [DEBUG] [Thread-134753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:43:28.803 [DEBUG] [Thread-134753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:43:28.803 [DEBUG] [Thread-134753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:43:28.812 [DEBUG] [Thread-134753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:43:28.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:43:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:43:28.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:43:28.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:43:28.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:43:28.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:43:28.853 [DEBUG] [Thread-134753] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:43:35.148 [DEBUG] [Thread-134755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:41.786 [DEBUG] [Thread-134756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:56.830 [DEBUG] [Thread-134757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:43:58.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:43:58.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:43:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:44:00.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 43, 42), 9.06, 55.85, 0.0, 13.16, 20.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:44:00.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:43:42
2026-02-11T19:44:01.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:44:01.204 [DEBUG] [Thread-134758] [transport.py] [_log()] starting thread (client mode): 0xa2d5f4f0
2026-02-11T19:44:01.205 [DEBUG] [Thread-134758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:44:01.220 [DEBUG] [Thread-134758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:44:01.220 [INFO] [Thread-134758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:44:01.221 [DEBUG] [Thread-134758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] client lang: <none>
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] server lang: <none>
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] kex follows: False
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] Compression: none
2026-02-11T19:44:01.222 [DEBUG] [Thread-134758] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:44:01.230 [DEBUG] [Thread-134758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:44:01.230 [DEBUG] [Thread-134758] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:44:01.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:44:01.231 [DEBUG] [Thread-134758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:44:01.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:44:01.232 [DEBUG] [Thread-134758] [transport.py] [_log()] userauth is OK
2026-02-11T19:44:01.232 [DEBUG] [Thread-134758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:44:01.232 [DEBUG] [Thread-134758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:44:01.232 [DEBUG] [Thread-134758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:44:01.232 [DEBUG] [Thread-134758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:44:01.245 [INFO] [Thread-134758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:44:01.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:44:01.838 [DEBUG] [Thread-134758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:44:01.838 [DEBUG] [Thread-134758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:44:01.838 [DEBUG] [Thread-134758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:44:01.878 [DEBUG] [Thread-134758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:44:01.878 [DEBUG] [Thread-134758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:44:01.880 [DEBUG] [Thread-134758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:44:01.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:44:01.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:44:01.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:44:01.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:44:01.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:44:01.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:44:01.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.738681 -999.00  +20.10   8.99     62  +12.70 1 2 1 1 1   741    0 6.89 -33.52 ----- 9.3 9.0 240.4 13.6 20.8 -19.1 20.8 -18.3 20.4 -17.5 20.8 -18.6
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.738681
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:44:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:44:01.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:44:01.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:44:01.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:43:42', tmtdew=9.06, humidity=55.85, cloud=0.0, wind=13.16, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:43:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:44:01.897 [DEBUG] [Thread-134758] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:44:01.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:44:01.984 [DEBUG] [Thread-134761] [transport.py] [_log()] starting thread (client mode): 0xa57e0d60
2026-02-11T19:44:01.984 [DEBUG] [Thread-134761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:44:02.002 [DEBUG] [Thread-134761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:44:02.003 [INFO] [Thread-134761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] client lang: <none>
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] server lang: <none>
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] kex follows: False
2026-02-11T19:44:02.013 [DEBUG] [Thread-134761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:44:02.014 [DEBUG] [Thread-134761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:44:02.014 [DEBUG] [Thread-134761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:44:02.014 [DEBUG] [Thread-134761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:44:02.014 [DEBUG] [Thread-134761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:44:02.014 [DEBUG] [Thread-134761] [transport.py] [_log()] Compression: none
2026-02-11T19:44:02.014 [DEBUG] [Thread-134761] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:44:02.068 [DEBUG] [Thread-134761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:44:02.069 [DEBUG] [Thread-134761] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:44:02.069 [DEBUG] [Thread-134761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:44:02.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:44:02.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:44:02.129 [DEBUG] [Thread-134761] [transport.py] [_log()] userauth is OK
2026-02-11T19:44:02.129 [DEBUG] [Thread-134761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:44:02.130 [DEBUG] [Thread-134761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:44:02.130 [DEBUG] [Thread-134761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:44:02.130 [DEBUG] [Thread-134761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:44:02.153 [INFO] [Thread-134761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:44:02.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:44:02.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:44:02.983 [DEBUG] [Thread-134761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:44:02.983 [DEBUG] [Thread-134761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:44:03.034 [DEBUG] [Thread-134761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:44:03.034 [DEBUG] [Thread-134761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:44:03.044 [DEBUG] [Thread-134761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:44:03.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:44:03.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')
2026-02-11T19:44:03.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:44:03.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:44:03.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:44:03.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:44:03.077 [DEBUG] [Thread-134761] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:44:11.861 [DEBUG] [Thread-134763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:44:26.909 [DEBUG] [Thread-134764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:44:29.192 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:44:29.193 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:44:33.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:44:33.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:44:33.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
2026-02-11T19:44:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 44, 19), 9.05, 55.88, 0.0, 14.77, 20.15, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:44:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:44:19
2026-02-11T19:44:35.222 [DEBUG] [Thread-134765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:44:35.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:44:35.690 [DEBUG] [Thread-134766] [transport.py] [_log()] starting thread (client mode): 0xa2db50c0
2026-02-11T19:44:35.690 [DEBUG] [Thread-134766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:44:35.710 [DEBUG] [Thread-134766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:44:35.710 [INFO] [Thread-134766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:44:35.713 [DEBUG] [Thread-134766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] client lang: <none>
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] server lang: <none>
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] kex follows: False
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:44:35.714 [DEBUG] [Thread-134766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:44:35.715 [DEBUG] [Thread-134766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:44:35.715 [DEBUG] [Thread-134766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:44:35.715 [DEBUG] [Thread-134766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:44:35.715 [DEBUG] [Thread-134766] [transport.py] [_log()] Compression: none
2026-02-11T19:44:35.715 [DEBUG] [Thread-134766] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:44:35.734 [DEBUG] [Thread-134766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:44:35.735 [DEBUG] [Thread-134766] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:44:35.736 [DEBUG] [Thread-134766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:44:35.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:44:35.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:44:35.739 [DEBUG] [Thread-134766] [transport.py] [_log()] userauth is OK
2026-02-11T19:44:35.739 [DEBUG] [Thread-134766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:44:35.739 [DEBUG] [Thread-134766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:44:35.740 [DEBUG] [Thread-134766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:44:35.740 [DEBUG] [Thread-134766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:44:35.772 [INFO] [Thread-134766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:44:35.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:44:36.347 [DEBUG] [Thread-134766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:44:36.348 [DEBUG] [Thread-134766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:44:36.348 [DEBUG] [Thread-134766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:44:36.388 [DEBUG] [Thread-134766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:44:36.388 [DEBUG] [Thread-134766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:44:36.392 [DEBUG] [Thread-134766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:44:36.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:44:36.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:44:36.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:44:36.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:44:36.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:44:36.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:44:36.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:44:36.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:44:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:44:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.739028 -999.00  +20.00  11.46     67  +13.70 1 2 1 1 1   729    0 6.65 -40.19 ----- 12.0 11.5 230.8 16.5 20.8 -19.4 20.7 -18.2 20.4 -17.6 20.6 -18.9
2026-02-11T19:44:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:44:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:44:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.739028
2026-02-11T19:44:36.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:44:36.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:44:36.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:44:36.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:44:36.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:44:36.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:44:19', tmtdew=9.05, humidity=55.88, cloud=0.0, wind=14.77, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:44:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:44:36.418 [DEBUG] [Thread-134766] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:44:36.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:44:36.517 [DEBUG] [Thread-134769] [transport.py] [_log()] starting thread (client mode): 0xa2d554e0
2026-02-11T19:44:36.517 [DEBUG] [Thread-134769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:44:36.533 [DEBUG] [Thread-134769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:44:36.534 [INFO] [Thread-134769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:44:36.541 [DEBUG] [Thread-134769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:44:36.542 [DEBUG] [Thread-134769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:44:36.542 [DEBUG] [Thread-134769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:44:36.542 [DEBUG] [Thread-134769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:36.542 [DEBUG] [Thread-134769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:44:36.542 [DEBUG] [Thread-134769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:36.542 [DEBUG] [Thread-134769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:44:36.542 [DEBUG] [Thread-134769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:44:36.543 [DEBUG] [Thread-134769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:44:36.543 [DEBUG] [Thread-134769] [transport.py] [_log()] client lang: <none>
2026-02-11T19:44:36.543 [DEBUG] [Thread-134769] [transport.py] [_log()] server lang: <none>
2026-02-11T19:44:36.543 [DEBUG] [Thread-134769] [transport.py] [_log()] kex follows: False
2026-02-11T19:44:36.543 [DEBUG] [Thread-134769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:44:36.543 [DEBUG] [Thread-134769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:44:36.543 [DEBUG] [Thread-134769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:44:36.544 [DEBUG] [Thread-134769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:44:36.544 [DEBUG] [Thread-134769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:44:36.544 [DEBUG] [Thread-134769] [transport.py] [_log()] Compression: none
2026-02-11T19:44:36.544 [DEBUG] [Thread-134769] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:44:36.603 [DEBUG] [Thread-134769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:44:36.604 [DEBUG] [Thread-134769] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:44:36.604 [DEBUG] [Thread-134769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:44:36.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:44:36.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:44:36.662 [DEBUG] [Thread-134769] [transport.py] [_log()] userauth is OK
2026-02-11T19:44:36.662 [DEBUG] [Thread-134769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:44:36.662 [DEBUG] [Thread-134769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:44:36.662 [DEBUG] [Thread-134769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:44:36.662 [DEBUG] [Thread-134769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:44:36.681 [INFO] [Thread-134769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:44:36.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:44:36.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:44:37.518 [DEBUG] [Thread-134769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:44:37.518 [DEBUG] [Thread-134769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:44:37.566 [DEBUG] [Thread-134769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:44:37.566 [DEBUG] [Thread-134769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:44:37.577 [DEBUG] [Thread-134769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:44:37.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:44:37.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:44:37.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:44:37.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:44:37.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:44:37.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:44:37.622 [DEBUG] [Thread-134769] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:44:41.946 [DEBUG] [Thread-134771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:44:56.998 [DEBUG] [Thread-134772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:45:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:45:07.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:45:07.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:45:09.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 44, 54), 8.53, 57.96, 0.0, 13.39, 20.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:45:09.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:44:54
2026-02-11T19:45:09.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:45:10.005 [DEBUG] [Thread-134773] [transport.py] [_log()] starting thread (client mode): 0xa2d561a0
2026-02-11T19:45:10.005 [DEBUG] [Thread-134773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:45:10.027 [DEBUG] [Thread-134773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:45:10.027 [INFO] [Thread-134773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:45:10.030 [DEBUG] [Thread-134773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] client lang: <none>
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] server lang: <none>
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] kex follows: False
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] Compression: none
2026-02-11T19:45:10.031 [DEBUG] [Thread-134773] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:45:10.049 [DEBUG] [Thread-134773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:45:10.050 [DEBUG] [Thread-134773] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:45:10.051 [DEBUG] [Thread-134773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:45:10.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:45:10.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:45:10.053 [DEBUG] [Thread-134773] [transport.py] [_log()] userauth is OK
2026-02-11T19:45:10.054 [DEBUG] [Thread-134773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:45:10.054 [DEBUG] [Thread-134773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:45:10.054 [DEBUG] [Thread-134773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:45:10.054 [DEBUG] [Thread-134773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:45:10.075 [INFO] [Thread-134773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:45:10.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:45:10.812 [DEBUG] [Thread-134773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:45:10.813 [DEBUG] [Thread-134773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:45:10.813 [DEBUG] [Thread-134773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:45:10.853 [DEBUG] [Thread-134773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:45:10.853 [DEBUG] [Thread-134773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:45:10.857 [DEBUG] [Thread-134773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:45:10.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:45:10.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:45:10.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:45:10.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:45:10.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:45:10.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:45:10.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:45:10.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:45:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:45:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.739376 -999.00  +19.90   6.73     67  +13.60 1 2 1 1 1   715    0 6.68 -44.59 ----- 11.0 6.7 220.3 13.2 20.7 -19.3 20.7 -18.4 20.4 -17.5 20.6 -18.7
2026-02-11T19:45:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:45:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:45:10.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.739376
2026-02-11T19:45:10.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:45:10.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:45:10.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:45:10.883 [DEBUG] [Thread-134773] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:45:10.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:45:10.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:45:10.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:44:54', tmtdew=8.53, humidity=57.96, cloud=0.0, wind=13.39, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:44:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:45:10.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:45:10.989 [DEBUG] [Thread-134776] [transport.py] [_log()] starting thread (client mode): 0xa2db7fa0
2026-02-11T19:45:10.990 [DEBUG] [Thread-134776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:45:11.004 [DEBUG] [Thread-134776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:45:11.005 [INFO] [Thread-134776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:45:11.012 [DEBUG] [Thread-134776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:45:11.013 [DEBUG] [Thread-134776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:45:11.013 [DEBUG] [Thread-134776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:45:11.013 [DEBUG] [Thread-134776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:11.013 [DEBUG] [Thread-134776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:11.013 [DEBUG] [Thread-134776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] client lang: <none>
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] server lang: <none>
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] kex follows: False
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] Compression: none
2026-02-11T19:45:11.014 [DEBUG] [Thread-134776] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:45:11.070 [DEBUG] [Thread-134776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:45:11.071 [DEBUG] [Thread-134776] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:45:11.071 [DEBUG] [Thread-134776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:45:11.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:45:11.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:45:11.126 [DEBUG] [Thread-134776] [transport.py] [_log()] userauth is OK
2026-02-11T19:45:11.127 [DEBUG] [Thread-134776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:45:11.127 [DEBUG] [Thread-134776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:45:11.127 [DEBUG] [Thread-134776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:45:11.127 [DEBUG] [Thread-134776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:45:11.145 [INFO] [Thread-134776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:45:11.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:45:11.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:45:11.980 [DEBUG] [Thread-134776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:45:11.980 [DEBUG] [Thread-134776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:45:12.028 [DEBUG] [Thread-134776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:45:12.029 [DEBUG] [Thread-134776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:45:12.033 [DEBUG] [Thread-134778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:45:12.038 [DEBUG] [Thread-134776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:45:12.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:45:12.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:45:12.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:45:12.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:45:12.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:45:12.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:45:12.071 [DEBUG] [Thread-134776] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:45:27.081 [DEBUG] [Thread-134779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:45:34.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:45:34.542 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:45:35.293 [DEBUG] [Thread-134780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:45:42.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:45:42.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:45:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:45:42.120 [DEBUG] [Thread-134781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:45:43.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 45, 29), 8.19, 59.22, 0.0, 13.27, 20.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:45:43.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:45:29
2026-02-11T19:45:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:45:44.462 [DEBUG] [Thread-134782] [transport.py] [_log()] starting thread (client mode): 0xa2db6aa0
2026-02-11T19:45:44.462 [DEBUG] [Thread-134782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:45:44.482 [DEBUG] [Thread-134782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:45:44.482 [INFO] [Thread-134782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:45:44.485 [DEBUG] [Thread-134782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:45:44.485 [DEBUG] [Thread-134782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:45:44.485 [DEBUG] [Thread-134782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:45:44.485 [DEBUG] [Thread-134782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:44.485 [DEBUG] [Thread-134782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:44.485 [DEBUG] [Thread-134782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:44.485 [DEBUG] [Thread-134782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] client lang: <none>
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] server lang: <none>
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] kex follows: False
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] Compression: none
2026-02-11T19:45:44.486 [DEBUG] [Thread-134782] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:45:44.503 [DEBUG] [Thread-134782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:45:44.504 [DEBUG] [Thread-134782] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:45:44.504 [DEBUG] [Thread-134782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:45:44.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:45:44.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:45:44.507 [DEBUG] [Thread-134782] [transport.py] [_log()] userauth is OK
2026-02-11T19:45:44.507 [DEBUG] [Thread-134782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:45:44.507 [DEBUG] [Thread-134782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:45:44.507 [DEBUG] [Thread-134782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:45:44.507 [DEBUG] [Thread-134782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:45:44.531 [INFO] [Thread-134782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:45:44.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:45:45.172 [DEBUG] [Thread-134782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:45:45.172 [DEBUG] [Thread-134782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:45:45.173 [DEBUG] [Thread-134782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:45:45.213 [DEBUG] [Thread-134782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:45:45.213 [DEBUG] [Thread-134782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:45:45.216 [DEBUG] [Thread-134782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:45:45.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:45:45.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:45:45.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:45:45.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:45:45.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:45:45.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:45:45.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:45:45.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:45:45.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:45:45.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.739723 -999.00  +19.90   6.83     67  +13.80 1 2 1 1 1   701    0 6.05 -55.56 ----- 4.3 6.8 236.1 12.1 20.7 -19.2 20.6 -18.1 20.4 -17.6 20.6 -18.7
2026-02-11T19:45:45.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:45:45.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:45:45.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.739723
2026-02-11T19:45:45.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:45:45.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:45:45.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:45:45.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:45:45.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:45:45.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:45:29', tmtdew=8.19, humidity=59.22, cloud=0.0, wind=13.27, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:45:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:45:45.242 [DEBUG] [Thread-134782] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:45:45.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:45:45.342 [DEBUG] [Thread-134785] [transport.py] [_log()] starting thread (client mode): 0xa2d54160
2026-02-11T19:45:45.343 [DEBUG] [Thread-134785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:45:45.360 [DEBUG] [Thread-134785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:45:45.360 [INFO] [Thread-134785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:45:45.368 [DEBUG] [Thread-134785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:45:45.368 [DEBUG] [Thread-134785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:45:45.368 [DEBUG] [Thread-134785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:45:45.368 [DEBUG] [Thread-134785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:45.368 [DEBUG] [Thread-134785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] client lang: <none>
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] server lang: <none>
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] kex follows: False
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] Compression: none
2026-02-11T19:45:45.369 [DEBUG] [Thread-134785] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:45:45.425 [DEBUG] [Thread-134785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:45:45.426 [DEBUG] [Thread-134785] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:45:45.426 [DEBUG] [Thread-134785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:45:45.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:45:45.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:45:45.482 [DEBUG] [Thread-134785] [transport.py] [_log()] userauth is OK
2026-02-11T19:45:45.482 [DEBUG] [Thread-134785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:45:45.482 [DEBUG] [Thread-134785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:45:45.482 [DEBUG] [Thread-134785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:45:45.482 [DEBUG] [Thread-134785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:45:45.506 [INFO] [Thread-134785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:45:45.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:45:45.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:45:46.389 [DEBUG] [Thread-134785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:45:46.390 [DEBUG] [Thread-134785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:45:46.437 [DEBUG] [Thread-134785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:45:46.437 [DEBUG] [Thread-134785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:45:46.446 [DEBUG] [Thread-134785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:45:46.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:45:46.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:45:46.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:45:46.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:45:46.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:45:46.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:45:46.483 [DEBUG] [Thread-134785] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:45:57.157 [DEBUG] [Thread-134787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:46:12.207 [DEBUG] [Thread-134788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:46:16.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:46:16.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:46:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:46:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 46, 5), 7.74, 60.96, 0.0, 12.28, 20.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:46:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:46:05
2026-02-11T19:46:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:46:19.041 [DEBUG] [Thread-134789] [transport.py] [_log()] starting thread (client mode): 0xa2d5f2b0
2026-02-11T19:46:19.041 [DEBUG] [Thread-134789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:46:19.061 [DEBUG] [Thread-134789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:46:19.061 [INFO] [Thread-134789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:46:19.062 [DEBUG] [Thread-134789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] client lang: <none>
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] server lang: <none>
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] kex follows: False
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] Compression: none
2026-02-11T19:46:19.063 [DEBUG] [Thread-134789] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:46:19.081 [DEBUG] [Thread-134789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:46:19.081 [DEBUG] [Thread-134789] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:46:19.081 [DEBUG] [Thread-134789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:46:19.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:46:19.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:46:19.082 [DEBUG] [Thread-134789] [transport.py] [_log()] userauth is OK
2026-02-11T19:46:19.082 [DEBUG] [Thread-134789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:46:19.082 [DEBUG] [Thread-134789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:46:19.082 [DEBUG] [Thread-134789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:46:19.082 [DEBUG] [Thread-134789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:46:19.091 [INFO] [Thread-134789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:46:19.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:46:19.712 [DEBUG] [Thread-134789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:46:19.713 [DEBUG] [Thread-134789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:46:19.713 [DEBUG] [Thread-134789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:46:19.753 [DEBUG] [Thread-134789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:46:19.753 [DEBUG] [Thread-134789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:46:19.756 [DEBUG] [Thread-134789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:46:19.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:46:19.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:46:19.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:46:19.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:46:19.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:46:19.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:46:19.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:46:19.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:46:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:46:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.740070 -999.00  +19.90   4.83     68  +13.80 1 2 1 1 1   686    0 5.95 -59.26 ----- 5.2 4.8 221.7 8.7 20.7 -19.2 20.6 -18.1 20.4 -17.4 20.6 -18.6
2026-02-11T19:46:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:46:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:46:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.740070
2026-02-11T19:46:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:46:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:46:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:46:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:46:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:46:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:46:05', tmtdew=7.74, humidity=60.96, cloud=0.0, wind=12.28, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:45:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:46:19.778 [DEBUG] [Thread-134789] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:46:19.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:46:19.874 [DEBUG] [Thread-134792] [transport.py] [_log()] starting thread (client mode): 0xa5770d30
2026-02-11T19:46:19.874 [DEBUG] [Thread-134792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:46:19.889 [DEBUG] [Thread-134792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:46:19.889 [INFO] [Thread-134792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:46:19.897 [DEBUG] [Thread-134792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:46:19.897 [DEBUG] [Thread-134792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:46:19.897 [DEBUG] [Thread-134792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:46:19.897 [DEBUG] [Thread-134792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] client lang: <none>
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] server lang: <none>
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] kex follows: False
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] Compression: none
2026-02-11T19:46:19.898 [DEBUG] [Thread-134792] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:46:19.953 [DEBUG] [Thread-134792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:46:19.954 [DEBUG] [Thread-134792] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:46:19.954 [DEBUG] [Thread-134792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:46:19.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:46:19.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:46:20.009 [DEBUG] [Thread-134792] [transport.py] [_log()] userauth is OK
2026-02-11T19:46:20.009 [DEBUG] [Thread-134792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:46:20.010 [DEBUG] [Thread-134792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:46:20.010 [DEBUG] [Thread-134792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:46:20.010 [DEBUG] [Thread-134792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:46:20.028 [INFO] [Thread-134792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:46:20.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:46:20.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:46:20.821 [DEBUG] [Thread-134792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:46:20.821 [DEBUG] [Thread-134792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:46:20.869 [DEBUG] [Thread-134792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:46:20.869 [DEBUG] [Thread-134792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:46:20.877 [DEBUG] [Thread-134792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:46:20.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:46:20.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')
2026-02-11T19:46:20.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:46:20.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:46:20.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:46:20.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:46:20.912 [DEBUG] [Thread-134792] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:46:27.237 [DEBUG] [Thread-134794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:46:35.369 [DEBUG] [Thread-134795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:46:39.974 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:46:39.975 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:46:42.286 [DEBUG] [Thread-134796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:46:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:46:50.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:46:50.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:46:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 46, 41), 7.59, 61.65, 0.0, 14.26, 20.43, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:46:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:46:41
2026-02-11T19:46:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:46:53.251 [DEBUG] [Thread-134797] [transport.py] [_log()] starting thread (client mode): 0xa2dc38b0
2026-02-11T19:46:53.252 [DEBUG] [Thread-134797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:46:53.271 [DEBUG] [Thread-134797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:46:53.271 [INFO] [Thread-134797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] client lang: <none>
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] server lang: <none>
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] kex follows: False
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:46:53.274 [DEBUG] [Thread-134797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:46:53.275 [DEBUG] [Thread-134797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:46:53.275 [DEBUG] [Thread-134797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:46:53.275 [DEBUG] [Thread-134797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:46:53.275 [DEBUG] [Thread-134797] [transport.py] [_log()] Compression: none
2026-02-11T19:46:53.275 [DEBUG] [Thread-134797] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:46:53.291 [DEBUG] [Thread-134797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:46:53.292 [DEBUG] [Thread-134797] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:46:53.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:46:53.293 [DEBUG] [Thread-134797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:46:53.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:46:53.294 [DEBUG] [Thread-134797] [transport.py] [_log()] userauth is OK
2026-02-11T19:46:53.294 [DEBUG] [Thread-134797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:46:53.295 [DEBUG] [Thread-134797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:46:53.295 [DEBUG] [Thread-134797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:46:53.295 [DEBUG] [Thread-134797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:46:53.309 [INFO] [Thread-134797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:46:53.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:46:53.940 [DEBUG] [Thread-134797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:46:53.941 [DEBUG] [Thread-134797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:46:53.941 [DEBUG] [Thread-134797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:46:53.982 [DEBUG] [Thread-134797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:46:53.983 [DEBUG] [Thread-134797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:46:53.986 [DEBUG] [Thread-134797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:46:53.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:46:53.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:46:53.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:46:54.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:46:54.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:46:54.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:46:54.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:46:54.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:46:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:46:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.740765 -999.00  +19.80   7.03     69  +13.90 1 2 1 1 1   653    0 5.61 -73.21 ----- 9.6 7.0 252.6 9.9 20.6 -19.1 20.6 -18.1 20.3 -17.3 20.6 -18.4
2026-02-11T19:46:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:46:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:46:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.740765
2026-02-11T19:46:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:46:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:46:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:46:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:46:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:46:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:46:41', tmtdew=7.59, humidity=61.65, cloud=0.0, wind=14.26, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:46:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:46:54.010 [DEBUG] [Thread-134797] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:46:54.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:46:54.101 [DEBUG] [Thread-134800] [transport.py] [_log()] starting thread (client mode): 0xa2d5fdc0
2026-02-11T19:46:54.102 [DEBUG] [Thread-134800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:46:54.122 [DEBUG] [Thread-134800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:46:54.122 [INFO] [Thread-134800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:46:54.129 [DEBUG] [Thread-134800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:46:54.129 [DEBUG] [Thread-134800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:46:54.129 [DEBUG] [Thread-134800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:46:54.129 [DEBUG] [Thread-134800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:54.129 [DEBUG] [Thread-134800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:46:54.129 [DEBUG] [Thread-134800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:54.129 [DEBUG] [Thread-134800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] client lang: <none>
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] server lang: <none>
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] kex follows: False
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] Compression: none
2026-02-11T19:46:54.130 [DEBUG] [Thread-134800] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:46:54.193 [DEBUG] [Thread-134800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:46:54.194 [DEBUG] [Thread-134800] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:46:54.194 [DEBUG] [Thread-134800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:46:54.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:46:54.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:46:54.250 [DEBUG] [Thread-134800] [transport.py] [_log()] userauth is OK
2026-02-11T19:46:54.250 [DEBUG] [Thread-134800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:46:54.251 [DEBUG] [Thread-134800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:46:54.251 [DEBUG] [Thread-134800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:46:54.251 [DEBUG] [Thread-134800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:46:54.270 [INFO] [Thread-134800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:46:54.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:46:54.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:46:55.075 [DEBUG] [Thread-134800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:46:55.076 [DEBUG] [Thread-134800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:46:55.123 [DEBUG] [Thread-134800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:46:55.124 [DEBUG] [Thread-134800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:46:55.133 [DEBUG] [Thread-134800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:46:55.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:46:55.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')
2026-02-11T19:46:55.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:46:55.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:46:55.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:46:55.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:46:55.169 [DEBUG] [Thread-134800] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:46:57.324 [DEBUG] [Thread-134802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:12.383 [DEBUG] [Thread-134803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:47:25.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:47:25.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:47:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 47, 16), 7.11, 63.37, 0.0, 9.19, 19.83, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:47:27.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:47:16
2026-02-11T19:47:27.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:47:27.416 [DEBUG] [Thread-134804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:27.531 [DEBUG] [Thread-134805] [transport.py] [_log()] starting thread (client mode): 0xa2db69b0
2026-02-11T19:47:27.531 [DEBUG] [Thread-134805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:47:27.552 [DEBUG] [Thread-134805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:47:27.552 [INFO] [Thread-134805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] client lang: <none>
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] server lang: <none>
2026-02-11T19:47:27.555 [DEBUG] [Thread-134805] [transport.py] [_log()] kex follows: False
2026-02-11T19:47:27.556 [DEBUG] [Thread-134805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:47:27.556 [DEBUG] [Thread-134805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:47:27.556 [DEBUG] [Thread-134805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:47:27.556 [DEBUG] [Thread-134805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:47:27.556 [DEBUG] [Thread-134805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:47:27.556 [DEBUG] [Thread-134805] [transport.py] [_log()] Compression: none
2026-02-11T19:47:27.556 [DEBUG] [Thread-134805] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:47:27.579 [DEBUG] [Thread-134805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:47:27.580 [DEBUG] [Thread-134805] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:47:27.580 [DEBUG] [Thread-134805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:47:27.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:47:27.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:47:27.625 [DEBUG] [Thread-134805] [transport.py] [_log()] userauth is OK
2026-02-11T19:47:27.625 [DEBUG] [Thread-134805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:47:27.625 [DEBUG] [Thread-134805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:47:27.625 [DEBUG] [Thread-134805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:47:27.625 [DEBUG] [Thread-134805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:47:27.645 [INFO] [Thread-134805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:47:27.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:47:28.278 [DEBUG] [Thread-134805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:47:28.278 [DEBUG] [Thread-134805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:47:28.279 [DEBUG] [Thread-134805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:47:28.319 [DEBUG] [Thread-134805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:47:28.320 [DEBUG] [Thread-134805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:47:28.323 [DEBUG] [Thread-134805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:47:28.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:47:28.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:47:28.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:47:28.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:47:28.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:47:28.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:47:28.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:47:28.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:47:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:47:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.741112 -999.00  +19.80   6.35     69  +14.00 1 2 1 1 1   636    0 5.49 -71.47 ----- 7.3 6.3 199.4 9.7 20.7 -15.9 20.6 -18.1 20.3 -17.3 20.6 -18.4
2026-02-11T19:47:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:47:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:47:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.741112
2026-02-11T19:47:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:47:28.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:47:28.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:47:28.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:47:28.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:47:28.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:47:16', tmtdew=7.11, humidity=63.37, cloud=0.0, wind=9.19, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:47:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:47:28.352 [DEBUG] [Thread-134805] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:47:28.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:47:28.446 [DEBUG] [Thread-134808] [transport.py] [_log()] starting thread (client mode): 0xa2db76d0
2026-02-11T19:47:28.446 [DEBUG] [Thread-134808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:47:28.460 [DEBUG] [Thread-134808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:47:28.460 [INFO] [Thread-134808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:47:28.468 [DEBUG] [Thread-134808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] client lang: <none>
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] server lang: <none>
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] kex follows: False
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] Compression: none
2026-02-11T19:47:28.469 [DEBUG] [Thread-134808] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:47:28.527 [DEBUG] [Thread-134808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:47:28.527 [DEBUG] [Thread-134808] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:47:28.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:47:28.537 [DEBUG] [Thread-134808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:47:28.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:47:28.587 [DEBUG] [Thread-134808] [transport.py] [_log()] userauth is OK
2026-02-11T19:47:28.587 [DEBUG] [Thread-134808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:47:28.587 [DEBUG] [Thread-134808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:47:28.587 [DEBUG] [Thread-134808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:47:28.588 [DEBUG] [Thread-134808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:47:28.607 [INFO] [Thread-134808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:47:28.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:47:28.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:47:29.462 [DEBUG] [Thread-134808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:47:29.463 [DEBUG] [Thread-134808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:47:29.512 [DEBUG] [Thread-134808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:47:29.513 [DEBUG] [Thread-134808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:47:29.522 [DEBUG] [Thread-134808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:47:29.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:47:29.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:47:29.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:47:29.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:47:29.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:47:29.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:47:29.563 [DEBUG] [Thread-134808] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:47:35.449 [DEBUG] [Thread-134810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:42.449 [DEBUG] [Thread-134811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:45.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:45.429 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:57.504 [DEBUG] [Thread-134812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:47:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:47:59.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:47:59.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:48:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 47, 51), 6.89, 64.62, 0.0, 10.09, 19.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:48:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:47:51
2026-02-11T19:48:01.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:48:01.858 [DEBUG] [Thread-134813] [transport.py] [_log()] starting thread (client mode): 0xa2d5fe80
2026-02-11T19:48:01.858 [DEBUG] [Thread-134813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:48:01.878 [DEBUG] [Thread-134813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:48:01.879 [INFO] [Thread-134813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] client lang: <none>
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] server lang: <none>
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] kex follows: False
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] Compression: none
2026-02-11T19:48:01.882 [DEBUG] [Thread-134813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:48:01.899 [DEBUG] [Thread-134813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:48:01.900 [DEBUG] [Thread-134813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:48:01.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:48:01.901 [DEBUG] [Thread-134813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:48:01.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:48:01.903 [DEBUG] [Thread-134813] [transport.py] [_log()] userauth is OK
2026-02-11T19:48:01.903 [DEBUG] [Thread-134813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:48:01.903 [DEBUG] [Thread-134813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:48:01.903 [DEBUG] [Thread-134813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:48:01.903 [DEBUG] [Thread-134813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:48:01.927 [INFO] [Thread-134813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:48:01.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:48:02.579 [DEBUG] [Thread-134813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:48:02.579 [DEBUG] [Thread-134813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:48:02.580 [DEBUG] [Thread-134813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:48:02.620 [DEBUG] [Thread-134813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:48:02.620 [DEBUG] [Thread-134813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:48:02.623 [DEBUG] [Thread-134813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:48:02.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:48:02.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:48:02.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:48:02.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:48:02.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:48:02.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:48:02.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:48:02.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:48:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:48:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.741459 -999.00  +19.80   7.26     70  +14.30 1 2 1 1 1   617    0 5.18 -78.50 ----- 8.4 7.3 216.4 11.9 20.6 -19.1 20.6 -18.2 20.2 -17.5 20.5 -18.5
2026-02-11T19:48:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:48:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:48:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.741459
2026-02-11T19:48:02.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:48:02.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:48:02.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:48:02.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:48:02.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:48:02.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:47:51', tmtdew=6.89, humidity=64.62, cloud=0.0, wind=10.09, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:47:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:48:02.645 [DEBUG] [Thread-134813] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:48:02.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:48:02.733 [DEBUG] [Thread-134816] [transport.py] [_log()] starting thread (client mode): 0xa57d54e0
2026-02-11T19:48:02.733 [DEBUG] [Thread-134816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:48:02.747 [DEBUG] [Thread-134816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:48:02.747 [INFO] [Thread-134816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:48:02.755 [DEBUG] [Thread-134816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:48:02.755 [DEBUG] [Thread-134816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:48:02.755 [DEBUG] [Thread-134816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] client lang: <none>
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] server lang: <none>
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] kex follows: False
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:48:02.756 [DEBUG] [Thread-134816] [transport.py] [_log()] Compression: none
2026-02-11T19:48:02.757 [DEBUG] [Thread-134816] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:48:02.814 [DEBUG] [Thread-134816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:48:02.815 [DEBUG] [Thread-134816] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:48:02.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:48:02.816 [DEBUG] [Thread-134816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:48:02.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:48:02.869 [DEBUG] [Thread-134816] [transport.py] [_log()] userauth is OK
2026-02-11T19:48:02.870 [DEBUG] [Thread-134816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:48:02.870 [DEBUG] [Thread-134816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:48:02.870 [DEBUG] [Thread-134816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:48:02.870 [DEBUG] [Thread-134816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:48:02.890 [INFO] [Thread-134816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:48:02.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:48:02.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:48:03.705 [DEBUG] [Thread-134816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:48:03.706 [DEBUG] [Thread-134816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:48:03.753 [DEBUG] [Thread-134816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:48:03.754 [DEBUG] [Thread-134816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:48:03.763 [DEBUG] [Thread-134816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:48:03.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:48:03.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:48:03.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:48:03.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:48:03.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:48:03.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:48:03.799 [DEBUG] [Thread-134816] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:48:12.541 [DEBUG] [Thread-134818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:48:27.590 [DEBUG] [Thread-134819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:48:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:48:33.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:48:33.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:48:35.532 [DEBUG] [Thread-134820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:48:35.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 48, 26), 6.78, 65.1, 0.0, 8.33, 19.68, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:48:35.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:48:26
2026-02-11T19:48:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:48:36.199 [DEBUG] [Thread-134821] [transport.py] [_log()] starting thread (client mode): 0xa57d5b70
2026-02-11T19:48:36.199 [DEBUG] [Thread-134821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:48:36.219 [DEBUG] [Thread-134821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:48:36.219 [INFO] [Thread-134821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:48:36.222 [DEBUG] [Thread-134821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:48:36.222 [DEBUG] [Thread-134821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:48:36.222 [DEBUG] [Thread-134821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:48:36.222 [DEBUG] [Thread-134821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:36.222 [DEBUG] [Thread-134821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] client lang: <none>
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] server lang: <none>
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] kex follows: False
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:48:36.223 [DEBUG] [Thread-134821] [transport.py] [_log()] Compression: none
2026-02-11T19:48:36.224 [DEBUG] [Thread-134821] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:48:36.240 [DEBUG] [Thread-134821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:48:36.241 [DEBUG] [Thread-134821] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:48:36.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:48:36.242 [DEBUG] [Thread-134821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:48:36.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:48:36.243 [DEBUG] [Thread-134821] [transport.py] [_log()] userauth is OK
2026-02-11T19:48:36.244 [DEBUG] [Thread-134821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:48:36.244 [DEBUG] [Thread-134821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:48:36.244 [DEBUG] [Thread-134821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:48:36.244 [DEBUG] [Thread-134821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:48:36.258 [INFO] [Thread-134821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:48:36.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:48:36.897 [DEBUG] [Thread-134821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:48:36.897 [DEBUG] [Thread-134821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:48:36.898 [DEBUG] [Thread-134821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:48:36.938 [DEBUG] [Thread-134821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:48:36.939 [DEBUG] [Thread-134821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:48:36.942 [DEBUG] [Thread-134821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:48:36.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:48:36.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:48:36.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:48:36.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:48:36.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:48:36.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:48:36.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:48:36.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:48:36.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:48:36.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.741807 -999.00  +19.80   8.28     71  +14.40 1 2 1 1 1   598    0 5.11 -82.82 ----- 7.0 8.3 205.6 11.2 20.6 -19.1 20.5 -18.1 20.3 -17.5 20.5 -18.5
2026-02-11T19:48:36.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:48:36.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:48:36.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.741807
2026-02-11T19:48:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:48:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:48:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:48:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:48:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:48:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:48:26', tmtdew=6.78, humidity=65.1, cloud=0.0, wind=8.33, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:48:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:48:36.967 [DEBUG] [Thread-134821] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:48:37.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:48:37.058 [DEBUG] [Thread-134824] [transport.py] [_log()] starting thread (client mode): 0xa2d5ea10
2026-02-11T19:48:37.058 [DEBUG] [Thread-134824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:48:37.073 [DEBUG] [Thread-134824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:48:37.073 [INFO] [Thread-134824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:48:37.080 [DEBUG] [Thread-134824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] client lang: <none>
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] server lang: <none>
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] kex follows: False
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:48:37.081 [DEBUG] [Thread-134824] [transport.py] [_log()] Compression: none
2026-02-11T19:48:37.082 [DEBUG] [Thread-134824] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:48:37.143 [DEBUG] [Thread-134824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:48:37.144 [DEBUG] [Thread-134824] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:48:37.144 [DEBUG] [Thread-134824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:48:37.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:48:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:48:37.202 [DEBUG] [Thread-134824] [transport.py] [_log()] userauth is OK
2026-02-11T19:48:37.202 [DEBUG] [Thread-134824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:48:37.202 [DEBUG] [Thread-134824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:48:37.202 [DEBUG] [Thread-134824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:48:37.203 [DEBUG] [Thread-134824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:48:37.221 [INFO] [Thread-134824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:48:37.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:48:37.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:48:38.063 [DEBUG] [Thread-134824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:48:38.064 [DEBUG] [Thread-134824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:48:38.111 [DEBUG] [Thread-134824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:48:38.112 [DEBUG] [Thread-134824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:48:38.121 [DEBUG] [Thread-134824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:48:38.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:48:38.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:48:38.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:48:38.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:48:38.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:48:38.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:48:38.155 [DEBUG] [Thread-134824] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:48:42.627 [DEBUG] [Thread-134826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:48:49.680 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:48:49.681 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:48:57.679 [DEBUG] [Thread-134827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:49:08.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:49:08.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:49:08.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:49:10.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 49, 2), 6.77, 65.14, 0.0, 10.62, 19.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:49:10.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:49:02
2026-02-11T19:49:10.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:49:10.694 [DEBUG] [Thread-134828] [transport.py] [_log()] starting thread (client mode): 0xa5773940
2026-02-11T19:49:10.694 [DEBUG] [Thread-134828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:49:10.706 [DEBUG] [Thread-134828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:49:10.706 [INFO] [Thread-134828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] client lang: <none>
2026-02-11T19:49:10.714 [DEBUG] [Thread-134828] [transport.py] [_log()] server lang: <none>
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] kex follows: False
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] Compression: none
2026-02-11T19:49:10.715 [DEBUG] [Thread-134828] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:49:10.724 [DEBUG] [Thread-134828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:49:10.725 [DEBUG] [Thread-134828] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:49:10.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:49:10.726 [DEBUG] [Thread-134828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:49:10.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:49:10.727 [DEBUG] [Thread-134828] [transport.py] [_log()] userauth is OK
2026-02-11T19:49:10.728 [DEBUG] [Thread-134828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:49:10.728 [DEBUG] [Thread-134828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:49:10.728 [DEBUG] [Thread-134828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:49:10.728 [DEBUG] [Thread-134828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:49:10.742 [INFO] [Thread-134828] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:49:10.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:49:11.397 [DEBUG] [Thread-134828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:49:11.397 [DEBUG] [Thread-134828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:49:11.397 [DEBUG] [Thread-134828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:49:11.438 [DEBUG] [Thread-134828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:49:11.438 [DEBUG] [Thread-134828] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:49:11.441 [DEBUG] [Thread-134828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:49:11.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:49:11.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:49:11.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:49:11.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:49:11.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:49:11.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:49:11.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:49:11.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:49:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:49:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.742153 -999.00  +19.80   8.48     71  +14.40 1 2 1 1 1   578    0 4.84 -87.92 ----- 5.1 8.5 199.4 11.9 20.5 -19.0 20.5 -18.2 20.2 -17.6 20.5 -18.4
2026-02-11T19:49:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:49:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:49:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.742153
2026-02-11T19:49:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:49:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:49:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:49:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:49:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:49:11.457 [DEBUG] [Thread-134828] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:49:11.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:49:02', tmtdew=6.77, humidity=65.14, cloud=0.0, wind=10.62, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:48:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:49:11.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:49:11.551 [DEBUG] [Thread-134831] [transport.py] [_log()] starting thread (client mode): 0xa2dc0eb0
2026-02-11T19:49:11.551 [DEBUG] [Thread-134831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:49:11.567 [DEBUG] [Thread-134831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:49:11.567 [INFO] [Thread-134831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:49:11.575 [DEBUG] [Thread-134831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:49:11.575 [DEBUG] [Thread-134831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:49:11.575 [DEBUG] [Thread-134831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] client lang: <none>
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] server lang: <none>
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] kex follows: False
2026-02-11T19:49:11.576 [DEBUG] [Thread-134831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:49:11.577 [DEBUG] [Thread-134831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:49:11.577 [DEBUG] [Thread-134831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:49:11.577 [DEBUG] [Thread-134831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:49:11.577 [DEBUG] [Thread-134831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:49:11.577 [DEBUG] [Thread-134831] [transport.py] [_log()] Compression: none
2026-02-11T19:49:11.577 [DEBUG] [Thread-134831] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:49:11.634 [DEBUG] [Thread-134831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:49:11.635 [DEBUG] [Thread-134831] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:49:11.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:49:11.636 [DEBUG] [Thread-134831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:49:11.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:49:11.692 [DEBUG] [Thread-134831] [transport.py] [_log()] userauth is OK
2026-02-11T19:49:11.693 [DEBUG] [Thread-134831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:49:11.693 [DEBUG] [Thread-134831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:49:11.693 [DEBUG] [Thread-134831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:49:11.693 [DEBUG] [Thread-134831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:49:11.715 [INFO] [Thread-134831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:49:11.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:49:11.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:49:12.543 [DEBUG] [Thread-134831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:49:12.552 [DEBUG] [Thread-134831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:49:12.592 [DEBUG] [Thread-134831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:49:12.592 [DEBUG] [Thread-134831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:49:12.603 [DEBUG] [Thread-134831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:49:12.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:49:12.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:49:12.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:49:12.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:49:12.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:49:12.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:49:12.646 [DEBUG] [Thread-134831] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:49:12.715 [DEBUG] [Thread-134833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:49:27.765 [DEBUG] [Thread-134834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:49:35.609 [DEBUG] [Thread-134835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:49:42.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:49:42.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:49:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:49:42.803 [DEBUG] [Thread-134836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:49:44.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 49, 2), 6.77, 65.14, 0.0, 10.62, 19.65, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:49:44.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:49:02
2026-02-11T19:49:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:49:45.064 [DEBUG] [Thread-134837] [transport.py] [_log()] starting thread (client mode): 0xa2d5d600
2026-02-11T19:49:45.064 [DEBUG] [Thread-134837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:49:45.084 [DEBUG] [Thread-134837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:49:45.085 [INFO] [Thread-134837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:49:45.087 [DEBUG] [Thread-134837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] client lang: <none>
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] server lang: <none>
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] kex follows: False
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] Compression: none
2026-02-11T19:49:45.088 [DEBUG] [Thread-134837] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:49:45.105 [DEBUG] [Thread-134837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:49:45.106 [DEBUG] [Thread-134837] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:49:45.106 [DEBUG] [Thread-134837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:49:45.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:49:45.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:49:45.108 [DEBUG] [Thread-134837] [transport.py] [_log()] userauth is OK
2026-02-11T19:49:45.108 [DEBUG] [Thread-134837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:49:45.108 [DEBUG] [Thread-134837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:49:45.108 [DEBUG] [Thread-134837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:49:45.108 [DEBUG] [Thread-134837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:49:45.122 [INFO] [Thread-134837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:49:45.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:49:45.761 [DEBUG] [Thread-134837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:49:45.761 [DEBUG] [Thread-134837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:49:45.761 [DEBUG] [Thread-134837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:49:45.802 [DEBUG] [Thread-134837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:49:45.803 [DEBUG] [Thread-134837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:49:45.806 [DEBUG] [Thread-134837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:49:45.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:49:45.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:49:45.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:49:45.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:49:45.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:49:45.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:49:45.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:49:45.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:49:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:49:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.742501 -999.00  +19.80   8.58     71  +14.40 1 2 1 1 1   558    0 4.51 -98.46 ----- 7.4 8.6 212.8 9.9 20.5 -19.2 20.5 -18.1 20.2 -17.4 20.5 -18.5
2026-02-11T19:49:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:49:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:49:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.742501
2026-02-11T19:49:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:49:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:49:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:49:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:49:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:49:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:49:02', tmtdew=6.77, humidity=65.14, cloud=0.0, wind=10.62, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:49:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:49:45.830 [DEBUG] [Thread-134837] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:49:45.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:49:45.926 [DEBUG] [Thread-134840] [transport.py] [_log()] starting thread (client mode): 0xa2d5d5d0
2026-02-11T19:49:45.926 [DEBUG] [Thread-134840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:49:45.940 [DEBUG] [Thread-134840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:49:45.941 [INFO] [Thread-134840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:49:45.953 [DEBUG] [Thread-134840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] client lang: <none>
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] server lang: <none>
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] kex follows: False
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:49:45.954 [DEBUG] [Thread-134840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:49:45.955 [DEBUG] [Thread-134840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:49:45.955 [DEBUG] [Thread-134840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:49:45.955 [DEBUG] [Thread-134840] [transport.py] [_log()] Compression: none
2026-02-11T19:49:45.955 [DEBUG] [Thread-134840] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:49:45.972 [DEBUG] [Thread-134840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:49:45.973 [DEBUG] [Thread-134840] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:49:45.974 [DEBUG] [Thread-134840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:49:45.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:49:45.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:49:46.031 [DEBUG] [Thread-134840] [transport.py] [_log()] userauth is OK
2026-02-11T19:49:46.031 [DEBUG] [Thread-134840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:49:46.031 [DEBUG] [Thread-134840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:49:46.032 [DEBUG] [Thread-134840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:49:46.032 [DEBUG] [Thread-134840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:49:46.053 [INFO] [Thread-134840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:49:46.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:49:46.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:49:46.969 [DEBUG] [Thread-134840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:49:46.969 [DEBUG] [Thread-134840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:49:47.017 [DEBUG] [Thread-134840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:49:47.017 [DEBUG] [Thread-134840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:49:47.026 [DEBUG] [Thread-134840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:49:47.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:49:47.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:49:47.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
2026-02-11T19:49:47.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:49:47.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:49:47.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:49:47.062 [DEBUG] [Thread-134840] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:49:54.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:49:54.559 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:49:57.838 [DEBUG] [Thread-134842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:50:12.893 [DEBUG] [Thread-134843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:50:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:50:17.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:50:17.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:50:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 49, 37), 6.73, 65.17, 0.0, 13.62, 20.1, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:50:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:49:37
2026-02-11T19:50:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:50:19.596 [DEBUG] [Thread-134844] [transport.py] [_log()] starting thread (client mode): 0xa2db5150
2026-02-11T19:50:19.596 [DEBUG] [Thread-134844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:50:19.615 [DEBUG] [Thread-134844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:50:19.615 [INFO] [Thread-134844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] client lang: <none>
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] server lang: <none>
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] kex follows: False
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] Compression: none
2026-02-11T19:50:19.618 [DEBUG] [Thread-134844] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:50:19.632 [DEBUG] [Thread-134844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:50:19.632 [DEBUG] [Thread-134844] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:50:19.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:50:19.633 [DEBUG] [Thread-134844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:50:19.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:50:19.635 [DEBUG] [Thread-134844] [transport.py] [_log()] userauth is OK
2026-02-11T19:50:19.636 [DEBUG] [Thread-134844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:50:19.636 [DEBUG] [Thread-134844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:50:19.636 [DEBUG] [Thread-134844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:50:19.636 [DEBUG] [Thread-134844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:50:19.660 [INFO] [Thread-134844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:50:19.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:50:20.307 [DEBUG] [Thread-134844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:50:20.308 [DEBUG] [Thread-134844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:50:20.308 [DEBUG] [Thread-134844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:50:20.349 [DEBUG] [Thread-134844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:50:20.349 [DEBUG] [Thread-134844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:50:20.352 [DEBUG] [Thread-134844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:50:20.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:50:20.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:50:20.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:50:20.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:50:20.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:50:20.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:50:20.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:50:20.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:50:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:50:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.742848 -999.00  +19.80   6.17     71  +14.40 1 2 1 1 1   537    0 4.17 -106.53 ----- 4.9 6.2 223.4 8.3 20.5 -19.0 20.5 -18.1 20.2 -17.3 20.4 -18.6
2026-02-11T19:50:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:50:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:50:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.742848
2026-02-11T19:50:20.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:50:20.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:50:20.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:50:20.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:50:20.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:50:20.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:49:37', tmtdew=6.73, humidity=65.17, cloud=0.0, wind=13.62, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:49:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:50:20.385 [DEBUG] [Thread-134844] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:50:20.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:50:20.481 [DEBUG] [Thread-134847] [transport.py] [_log()] starting thread (client mode): 0xa5743a60
2026-02-11T19:50:20.481 [DEBUG] [Thread-134847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:50:20.496 [DEBUG] [Thread-134847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:50:20.497 [INFO] [Thread-134847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] client lang: <none>
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] server lang: <none>
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] kex follows: False
2026-02-11T19:50:20.504 [DEBUG] [Thread-134847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:50:20.505 [DEBUG] [Thread-134847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:50:20.505 [DEBUG] [Thread-134847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:50:20.505 [DEBUG] [Thread-134847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:50:20.505 [DEBUG] [Thread-134847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:50:20.505 [DEBUG] [Thread-134847] [transport.py] [_log()] Compression: none
2026-02-11T19:50:20.505 [DEBUG] [Thread-134847] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:50:20.562 [DEBUG] [Thread-134847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:50:20.562 [DEBUG] [Thread-134847] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:50:20.563 [DEBUG] [Thread-134847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:50:20.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:50:20.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:50:20.624 [DEBUG] [Thread-134847] [transport.py] [_log()] userauth is OK
2026-02-11T19:50:20.624 [DEBUG] [Thread-134847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:50:20.624 [DEBUG] [Thread-134847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:50:20.624 [DEBUG] [Thread-134847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:50:20.625 [DEBUG] [Thread-134847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:50:20.638 [INFO] [Thread-134847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:50:20.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:50:20.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:50:21.454 [DEBUG] [Thread-134847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:50:21.454 [DEBUG] [Thread-134847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:50:21.502 [DEBUG] [Thread-134847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:50:21.503 [DEBUG] [Thread-134847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:50:21.512 [DEBUG] [Thread-134847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:50:21.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:50:21.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:50:21.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:50:21.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:50:21.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:50:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:50:21.553 [DEBUG] [Thread-134847] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:50:27.927 [DEBUG] [Thread-134849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:50:35.666 [DEBUG] [Thread-134850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:50:42.974 [DEBUG] [Thread-134851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:50:51.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:50:51.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:50:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:50:53.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 50, 13), 6.31, 67.0, 0.0, 12.0, 19.57, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:50:53.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:50:13
2026-02-11T19:50:54.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:50:54.238 [DEBUG] [Thread-134852] [transport.py] [_log()] starting thread (client mode): 0xa57c3490
2026-02-11T19:50:54.238 [DEBUG] [Thread-134852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:50:54.259 [DEBUG] [Thread-134852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:50:54.259 [INFO] [Thread-134852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] client lang: <none>
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] server lang: <none>
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] kex follows: False
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:50:54.262 [DEBUG] [Thread-134852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:50:54.263 [DEBUG] [Thread-134852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:50:54.263 [DEBUG] [Thread-134852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:50:54.263 [DEBUG] [Thread-134852] [transport.py] [_log()] Compression: none
2026-02-11T19:50:54.263 [DEBUG] [Thread-134852] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:50:54.280 [DEBUG] [Thread-134852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:50:54.280 [DEBUG] [Thread-134852] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:50:54.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:50:54.281 [DEBUG] [Thread-134852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:50:54.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:50:54.284 [DEBUG] [Thread-134852] [transport.py] [_log()] userauth is OK
2026-02-11T19:50:54.284 [DEBUG] [Thread-134852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:50:54.284 [DEBUG] [Thread-134852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:50:54.284 [DEBUG] [Thread-134852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:50:54.284 [DEBUG] [Thread-134852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:50:54.308 [INFO] [Thread-134852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:50:54.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:50:54.931 [DEBUG] [Thread-134852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:50:54.931 [DEBUG] [Thread-134852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:50:54.932 [DEBUG] [Thread-134852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:50:54.972 [DEBUG] [Thread-134852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:50:54.973 [DEBUG] [Thread-134852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:50:54.975 [DEBUG] [Thread-134852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:50:54.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:50:54.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:50:54.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:50:54.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:50:54.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:50:54.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:50:54.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:50:54.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:50:54.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:50:54.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.743195 -999.00  +19.80   4.59     71  +14.30 1 2 1 1 1   516    0 3.87 -114.37 ----- 6.2 4.6 175.6 8.5 20.5 -19.1 20.5 -18.4 20.2 -17.4 20.5 -18.5
2026-02-11T19:50:54.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:50:54.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:50:54.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.743195
2026-02-11T19:50:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:50:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:50:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:50:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:50:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:50:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:50:13', tmtdew=6.31, humidity=67.0, cloud=0.0, wind=12.0, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:50:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:50:54.998 [DEBUG] [Thread-134852] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:50:55.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:50:55.091 [DEBUG] [Thread-134855] [transport.py] [_log()] starting thread (client mode): 0xa57c0880
2026-02-11T19:50:55.091 [DEBUG] [Thread-134855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:50:55.107 [DEBUG] [Thread-134855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:50:55.107 [INFO] [Thread-134855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:50:55.115 [DEBUG] [Thread-134855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:50:55.115 [DEBUG] [Thread-134855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:50:55.115 [DEBUG] [Thread-134855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:50:55.115 [DEBUG] [Thread-134855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:55.115 [DEBUG] [Thread-134855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:50:55.115 [DEBUG] [Thread-134855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] client lang: <none>
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] server lang: <none>
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] kex follows: False
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] Compression: none
2026-02-11T19:50:55.116 [DEBUG] [Thread-134855] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:50:55.174 [DEBUG] [Thread-134855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:50:55.175 [DEBUG] [Thread-134855] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:50:55.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:50:55.176 [DEBUG] [Thread-134855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:50:55.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:50:55.230 [DEBUG] [Thread-134855] [transport.py] [_log()] userauth is OK
2026-02-11T19:50:55.230 [DEBUG] [Thread-134855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:50:55.230 [DEBUG] [Thread-134855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:50:55.230 [DEBUG] [Thread-134855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:50:55.230 [DEBUG] [Thread-134855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:50:55.249 [INFO] [Thread-134855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:50:55.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:50:55.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:50:56.177 [DEBUG] [Thread-134855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:50:56.178 [DEBUG] [Thread-134855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:50:56.226 [DEBUG] [Thread-134855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:50:56.227 [DEBUG] [Thread-134855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:50:56.236 [DEBUG] [Thread-134855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:50:56.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:50:56.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:50:56.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:50:56.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:50:56.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:50:56.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:50:56.269 [DEBUG] [Thread-134855] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:50:58.012 [DEBUG] [Thread-134857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:50:58.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:50:58.749 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:51:13.070 [DEBUG] [Thread-134858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:51:26.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:51:26.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:51:26.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:51:28.105 [DEBUG] [Thread-134859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:51:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 50, 48), 6.22, 67.2, 0.0, 8.29, 19.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:51:28.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:50:48
2026-02-11T19:51:28.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:51:29.026 [DEBUG] [Thread-134860] [transport.py] [_log()] starting thread (client mode): 0xa2db7f70
2026-02-11T19:51:29.026 [DEBUG] [Thread-134860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:51:29.046 [DEBUG] [Thread-134860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:51:29.046 [INFO] [Thread-134860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:51:29.049 [DEBUG] [Thread-134860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] client lang: <none>
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] server lang: <none>
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] kex follows: False
2026-02-11T19:51:29.050 [DEBUG] [Thread-134860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:51:29.051 [DEBUG] [Thread-134860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:51:29.051 [DEBUG] [Thread-134860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:51:29.051 [DEBUG] [Thread-134860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:51:29.051 [DEBUG] [Thread-134860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:51:29.051 [DEBUG] [Thread-134860] [transport.py] [_log()] Compression: none
2026-02-11T19:51:29.051 [DEBUG] [Thread-134860] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:51:29.067 [DEBUG] [Thread-134860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:51:29.068 [DEBUG] [Thread-134860] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:51:29.068 [DEBUG] [Thread-134860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:51:29.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:51:29.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:51:29.070 [DEBUG] [Thread-134860] [transport.py] [_log()] userauth is OK
2026-02-11T19:51:29.070 [DEBUG] [Thread-134860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:51:29.070 [DEBUG] [Thread-134860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:51:29.071 [DEBUG] [Thread-134860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:51:29.071 [DEBUG] [Thread-134860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:51:29.094 [INFO] [Thread-134860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:51:29.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:51:29.739 [DEBUG] [Thread-134860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:51:29.739 [DEBUG] [Thread-134860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:51:29.739 [DEBUG] [Thread-134860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:51:29.780 [DEBUG] [Thread-134860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:51:29.780 [DEBUG] [Thread-134860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:51:29.783 [DEBUG] [Thread-134860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:51:29.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:51:29.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:51:29.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:51:29.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:51:29.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:51:29.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:51:29.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:51:29.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:51:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:51:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.743542 -999.00  +19.70   6.66     71  +14.30 1 2 1 1 1   494    0 3.75 -114.68 ----- 7.3 6.7 230.0 10.9 20.5 -19.1 20.4 -18.1 20.2 -17.4 20.4 -18.5
2026-02-11T19:51:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:51:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:51:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.743542
2026-02-11T19:51:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:51:29.808 [DEBUG] [Thread-134860] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:51:29.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:51:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:51:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:51:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:51:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:50:48', tmtdew=6.22, humidity=67.2, cloud=0.0, wind=8.29, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:50:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:51:29.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:51:29.906 [DEBUG] [Thread-134863] [transport.py] [_log()] starting thread (client mode): 0xa2db5d80
2026-02-11T19:51:29.906 [DEBUG] [Thread-134863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:51:29.920 [DEBUG] [Thread-134863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:51:29.920 [INFO] [Thread-134863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] client lang: <none>
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] server lang: <none>
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] kex follows: False
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] Compression: none
2026-02-11T19:51:29.928 [DEBUG] [Thread-134863] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:51:29.986 [DEBUG] [Thread-134863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:51:29.986 [DEBUG] [Thread-134863] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:51:29.987 [DEBUG] [Thread-134863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:51:29.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:51:29.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:51:30.041 [DEBUG] [Thread-134863] [transport.py] [_log()] userauth is OK
2026-02-11T19:51:30.042 [DEBUG] [Thread-134863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:51:30.042 [DEBUG] [Thread-134863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:51:30.042 [DEBUG] [Thread-134863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:51:30.042 [DEBUG] [Thread-134863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:51:30.062 [INFO] [Thread-134863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:51:30.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:51:30.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:51:30.883 [DEBUG] [Thread-134863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:51:30.884 [DEBUG] [Thread-134863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:51:30.931 [DEBUG] [Thread-134863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:51:30.931 [DEBUG] [Thread-134863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:51:30.940 [DEBUG] [Thread-134863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:51:30.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:51: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')
2026-02-11T19:51:30.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:51:30.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:51:30.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:51:30.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:51:30.976 [DEBUG] [Thread-134863] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:51:35.744 [DEBUG] [Thread-134865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:51:43.144 [DEBUG] [Thread-134866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:51:58.187 [DEBUG] [Thread-134867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:52:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:52:00.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:52:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:52:03.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 51, 24), 6.22, 67.18, 0.0, 9.32, 19.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:52:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:51:24
2026-02-11T19:52:03.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:52:03.797 [DEBUG] [Thread-134868] [transport.py] [_log()] starting thread (client mode): 0xa2db4100
2026-02-11T19:52:03.797 [DEBUG] [Thread-134868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:52:03.815 [DEBUG] [Thread-134868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:52:03.815 [INFO] [Thread-134868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:52:03.818 [DEBUG] [Thread-134868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:52:03.818 [DEBUG] [Thread-134868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:52:03.818 [DEBUG] [Thread-134868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:52:03.818 [DEBUG] [Thread-134868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:03.818 [DEBUG] [Thread-134868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:03.818 [DEBUG] [Thread-134868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:03.818 [DEBUG] [Thread-134868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] client lang: <none>
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] server lang: <none>
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] kex follows: False
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] Compression: none
2026-02-11T19:52:03.819 [DEBUG] [Thread-134868] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:52:03.827 [DEBUG] [Thread-134868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:52:03.827 [DEBUG] [Thread-134868] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:52:03.827 [DEBUG] [Thread-134868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:52:03.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:52:03.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:52:03.829 [DEBUG] [Thread-134868] [transport.py] [_log()] userauth is OK
2026-02-11T19:52:03.829 [DEBUG] [Thread-134868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:52:03.829 [DEBUG] [Thread-134868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:52:03.829 [DEBUG] [Thread-134868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:52:03.829 [DEBUG] [Thread-134868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:52:03.847 [INFO] [Thread-134868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:52:03.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:52:04.447 [DEBUG] [Thread-134868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:52:04.448 [DEBUG] [Thread-134868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:52:04.448 [DEBUG] [Thread-134868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:52:04.488 [DEBUG] [Thread-134868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:52:04.488 [DEBUG] [Thread-134868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:52:04.491 [DEBUG] [Thread-134868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:52:04.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:52:04.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:52:04.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:52:04.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:52:04.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:52:04.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:52:04.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:52:04.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:52:04.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:52:04.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.744237 -999.00  +19.70   4.60     71  +14.40 1 2 1 1 1   450    0 3.03 -135.42 ----- 7.0 4.6 241.6 10.7 20.5 -19.0 20.4 -18.1 20.1 -17.3 20.4 -18.5
2026-02-11T19:52:04.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:52:04.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:52:04.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.744237
2026-02-11T19:52:04.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:52:04.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:52:04.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:52:04.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:52:04.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:52:04.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:51:24', tmtdew=6.22, humidity=67.18, cloud=0.0, wind=9.32, temperature=19.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:51:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:52:04.516 [DEBUG] [Thread-134868] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:52:04.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:52:04.610 [DEBUG] [Thread-134871] [transport.py] [_log()] starting thread (client mode): 0xa5759540
2026-02-11T19:52:04.610 [DEBUG] [Thread-134871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:52:04.624 [DEBUG] [Thread-134871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:52:04.624 [INFO] [Thread-134871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:52:04.632 [DEBUG] [Thread-134871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:52:04.632 [DEBUG] [Thread-134871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:52:04.632 [DEBUG] [Thread-134871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:52:04.632 [DEBUG] [Thread-134871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:04.632 [DEBUG] [Thread-134871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] client lang: <none>
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] server lang: <none>
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] kex follows: False
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] Compression: none
2026-02-11T19:52:04.633 [DEBUG] [Thread-134871] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:52:04.689 [DEBUG] [Thread-134871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:52:04.689 [DEBUG] [Thread-134871] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:52:04.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:52:04.690 [DEBUG] [Thread-134871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:52:04.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:52:04.745 [DEBUG] [Thread-134871] [transport.py] [_log()] userauth is OK
2026-02-11T19:52:04.746 [DEBUG] [Thread-134871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:52:04.746 [DEBUG] [Thread-134871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:52:04.746 [DEBUG] [Thread-134871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:52:04.746 [DEBUG] [Thread-134871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:52:04.764 [INFO] [Thread-134871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:52:04.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:52:04.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:52:05.589 [DEBUG] [Thread-134871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:52:05.589 [DEBUG] [Thread-134871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:52:05.637 [DEBUG] [Thread-134871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:52:05.637 [DEBUG] [Thread-134871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:52:05.646 [DEBUG] [Thread-134871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:52:05.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:52:05.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:52:05.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:52:05.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:52:05.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:52:05.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:52:05.680 [DEBUG] [Thread-134871] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:52:06.756 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:52:06.757 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:52:13.225 [DEBUG] [Thread-134873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:52:28.272 [DEBUG] [Thread-134874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:52:35.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:52:35.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:52:35.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:52:35.818 [DEBUG] [Thread-134875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:52:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 51, 24), 6.22, 67.18, 0.0, 9.32, 19.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:52:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:51:24
2026-02-11T19:52:38.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:52:38.535 [DEBUG] [Thread-134876] [transport.py] [_log()] starting thread (client mode): 0xa57d7df0
2026-02-11T19:52:38.535 [DEBUG] [Thread-134876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:52:38.554 [DEBUG] [Thread-134876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:52:38.554 [INFO] [Thread-134876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:52:38.557 [DEBUG] [Thread-134876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] client lang: <none>
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] server lang: <none>
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] kex follows: False
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:52:38.558 [DEBUG] [Thread-134876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:52:38.559 [DEBUG] [Thread-134876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:52:38.559 [DEBUG] [Thread-134876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:52:38.559 [DEBUG] [Thread-134876] [transport.py] [_log()] Compression: none
2026-02-11T19:52:38.559 [DEBUG] [Thread-134876] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:52:38.577 [DEBUG] [Thread-134876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:52:38.578 [DEBUG] [Thread-134876] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:52:38.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:52:38.579 [DEBUG] [Thread-134876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:52:38.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:52:38.581 [DEBUG] [Thread-134876] [transport.py] [_log()] userauth is OK
2026-02-11T19:52:38.581 [DEBUG] [Thread-134876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:52:38.581 [DEBUG] [Thread-134876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:52:38.581 [DEBUG] [Thread-134876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:52:38.581 [DEBUG] [Thread-134876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:52:38.597 [INFO] [Thread-134876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:52:38.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:52:39.210 [DEBUG] [Thread-134876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:52:39.210 [DEBUG] [Thread-134876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:52:39.210 [DEBUG] [Thread-134876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:52:39.251 [DEBUG] [Thread-134876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:52:39.251 [DEBUG] [Thread-134876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:52:39.254 [DEBUG] [Thread-134876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:52:39.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:52:39.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:52:39.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:52:39.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:52:39.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:52:39.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:52:39.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:52:39.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:52:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:52:39.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.744584 -999.00  +19.70   5.31     71  +14.40 1 2 1 1 1   428    0 2.48 -151.69 ----- 4.4 5.3 205.6 10.1 20.4 -18.9 20.4 -18.1 20.1 -17.4 20.4 -18.4
2026-02-11T19:52:39.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:52:39.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:52:39.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.744584
2026-02-11T19:52:39.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:52:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:52:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:52:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:52:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:52:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:51:24', tmtdew=6.22, humidity=67.18, cloud=0.0, wind=9.32, temperature=19.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:52:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:52:39.281 [DEBUG] [Thread-134876] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:52:39.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:52:39.374 [DEBUG] [Thread-134879] [transport.py] [_log()] starting thread (client mode): 0xa5758b80
2026-02-11T19:52:39.374 [DEBUG] [Thread-134879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:52:39.389 [DEBUG] [Thread-134879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:52:39.389 [INFO] [Thread-134879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:52:39.396 [DEBUG] [Thread-134879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:52:39.396 [DEBUG] [Thread-134879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:52:39.396 [DEBUG] [Thread-134879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:52:39.396 [DEBUG] [Thread-134879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:39.396 [DEBUG] [Thread-134879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:52:39.396 [DEBUG] [Thread-134879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] client lang: <none>
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] server lang: <none>
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] kex follows: False
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] Compression: none
2026-02-11T19:52:39.397 [DEBUG] [Thread-134879] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:52:39.454 [DEBUG] [Thread-134879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:52:39.454 [DEBUG] [Thread-134879] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:52:39.455 [DEBUG] [Thread-134879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:52:39.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:52:39.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:52:39.510 [DEBUG] [Thread-134879] [transport.py] [_log()] userauth is OK
2026-02-11T19:52:39.510 [DEBUG] [Thread-134879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:52:39.510 [DEBUG] [Thread-134879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:52:39.510 [DEBUG] [Thread-134879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:52:39.510 [DEBUG] [Thread-134879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:52:39.528 [INFO] [Thread-134879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:52:39.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:52:39.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:52:40.352 [DEBUG] [Thread-134879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:52:40.353 [DEBUG] [Thread-134879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:52:40.400 [DEBUG] [Thread-134879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:52:40.400 [DEBUG] [Thread-134879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:52:40.408 [DEBUG] [Thread-134879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:52:40.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:52:40.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:52:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:52:40.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:52:40.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:52:40.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:52:40.442 [DEBUG] [Thread-134879] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:52:43.303 [DEBUG] [Thread-134881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:52:58.352 [DEBUG] [Thread-134882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:53:10.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:53:10.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:53:10.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:53:10.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:53:10.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:53:12.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 52, 36), 6.35, 66.72, 0.0, 11.86, 19.84, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:53:12.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:52:36
2026-02-11T19:53:12.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:53:12.787 [DEBUG] [Thread-134883] [transport.py] [_log()] starting thread (client mode): 0xa57c1900
2026-02-11T19:53:12.787 [DEBUG] [Thread-134883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:53:12.807 [DEBUG] [Thread-134883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:53:12.807 [INFO] [Thread-134883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] client lang: <none>
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] server lang: <none>
2026-02-11T19:53:12.811 [DEBUG] [Thread-134883] [transport.py] [_log()] kex follows: False
2026-02-11T19:53:12.812 [DEBUG] [Thread-134883] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:53:12.812 [DEBUG] [Thread-134883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:53:12.812 [DEBUG] [Thread-134883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:53:12.812 [DEBUG] [Thread-134883] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:53:12.812 [DEBUG] [Thread-134883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:53:12.812 [DEBUG] [Thread-134883] [transport.py] [_log()] Compression: none
2026-02-11T19:53:12.812 [DEBUG] [Thread-134883] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:53:12.830 [DEBUG] [Thread-134883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:53:12.831 [DEBUG] [Thread-134883] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:53:12.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:53:12.832 [DEBUG] [Thread-134883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:53:12.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:53:12.833 [DEBUG] [Thread-134883] [transport.py] [_log()] userauth is OK
2026-02-11T19:53:12.833 [DEBUG] [Thread-134883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:53:12.833 [DEBUG] [Thread-134883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:53:12.834 [DEBUG] [Thread-134883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:53:12.834 [DEBUG] [Thread-134883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:53:12.867 [INFO] [Thread-134883] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:53:12.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:53:13.388 [DEBUG] [Thread-134885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:53:13.476 [DEBUG] [Thread-134883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:53:13.477 [DEBUG] [Thread-134883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:53:13.477 [DEBUG] [Thread-134883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:53:13.517 [DEBUG] [Thread-134883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:53:13.518 [DEBUG] [Thread-134883] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:53:13.521 [DEBUG] [Thread-134883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:53:13.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:53:13.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:53:13.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:53:13.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:53:13.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:53:13.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:53:13.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:53:13.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:53:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:53:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.744931 -999.00  +19.60  10.48     71  +14.40 1 2 1 1 1   406    0 2.51 -149.86 ----- 9.8 10.5 203.8 12.6 20.4 -18.9 20.4 -18.3 20.1 -17.4 20.3 -18.4
2026-02-11T19:53:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:53:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:53:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.744931
2026-02-11T19:53:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:53:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:53:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:53:13.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:53:13.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:53:13.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:52:36', tmtdew=6.35, humidity=66.72, cloud=0.0, wind=11.86, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:52:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:53:13.545 [DEBUG] [Thread-134883] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:53:13.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:53:13.640 [DEBUG] [Thread-134887] [transport.py] [_log()] starting thread (client mode): 0xa5758220
2026-02-11T19:53:13.640 [DEBUG] [Thread-134887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:53:13.655 [DEBUG] [Thread-134887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:53:13.655 [INFO] [Thread-134887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:53:13.663 [DEBUG] [Thread-134887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:53:13.663 [DEBUG] [Thread-134887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:53:13.663 [DEBUG] [Thread-134887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:53:13.663 [DEBUG] [Thread-134887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:13.663 [DEBUG] [Thread-134887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:13.663 [DEBUG] [Thread-134887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:13.663 [DEBUG] [Thread-134887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] client lang: <none>
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] server lang: <none>
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] kex follows: False
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] Compression: none
2026-02-11T19:53:13.664 [DEBUG] [Thread-134887] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:53:13.722 [DEBUG] [Thread-134887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:53:13.723 [DEBUG] [Thread-134887] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:53:13.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:53:13.724 [DEBUG] [Thread-134887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:53:13.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:53:13.787 [DEBUG] [Thread-134887] [transport.py] [_log()] userauth is OK
2026-02-11T19:53:13.787 [DEBUG] [Thread-134887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:53:13.787 [DEBUG] [Thread-134887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:53:13.787 [DEBUG] [Thread-134887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:53:13.787 [DEBUG] [Thread-134887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:53:13.806 [INFO] [Thread-134887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:53:13.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:53:13.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:53:14.642 [DEBUG] [Thread-134887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:53:14.643 [DEBUG] [Thread-134887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:53:14.690 [DEBUG] [Thread-134887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:53:14.690 [DEBUG] [Thread-134887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:53:14.700 [DEBUG] [Thread-134887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:53:14.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:53:14.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')
2026-02-11T19:53:14.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:53:14.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:53:14.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:53:14.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:53:14.736 [DEBUG] [Thread-134887] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:53:28.423 [DEBUG] [Thread-134889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:53:35.885 [DEBUG] [Thread-134890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:53:43.480 [DEBUG] [Thread-134891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:53:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:53:44.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:53:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:53:46.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 53, 12), 6.11, 67.91, 0.0, 10.61, 19.4, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:53:46.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:53:12
2026-02-11T19:53:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:53:47.323 [DEBUG] [Thread-134892] [transport.py] [_log()] starting thread (client mode): 0xa2d6a890
2026-02-11T19:53:47.323 [DEBUG] [Thread-134892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:53:47.344 [DEBUG] [Thread-134892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:53:47.344 [INFO] [Thread-134892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] client lang: <none>
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] server lang: <none>
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] kex follows: False
2026-02-11T19:53:47.347 [DEBUG] [Thread-134892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:53:47.348 [DEBUG] [Thread-134892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:53:47.348 [DEBUG] [Thread-134892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:53:47.348 [DEBUG] [Thread-134892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:53:47.348 [DEBUG] [Thread-134892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:53:47.348 [DEBUG] [Thread-134892] [transport.py] [_log()] Compression: none
2026-02-11T19:53:47.348 [DEBUG] [Thread-134892] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:53:47.364 [DEBUG] [Thread-134892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:53:47.365 [DEBUG] [Thread-134892] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:53:47.365 [DEBUG] [Thread-134892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:53:47.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:53:47.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:53:47.367 [DEBUG] [Thread-134892] [transport.py] [_log()] userauth is OK
2026-02-11T19:53:47.367 [DEBUG] [Thread-134892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:53:47.367 [DEBUG] [Thread-134892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:53:47.367 [DEBUG] [Thread-134892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:53:47.367 [DEBUG] [Thread-134892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:53:47.385 [INFO] [Thread-134892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:53:47.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:53:48.161 [DEBUG] [Thread-134892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:53:48.162 [DEBUG] [Thread-134892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:53:48.162 [DEBUG] [Thread-134892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:53:48.202 [DEBUG] [Thread-134892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:53:48.202 [DEBUG] [Thread-134892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:53:48.205 [DEBUG] [Thread-134892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:53:48.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:53:48.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:53:48.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:53:48.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:53:48.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:53:48.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:53:48.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:53:48.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:53:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:53:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.745278 -999.00  +19.60   5.39     71  +14.30 1 2 1 1 1   384    0 2.21 -155.53 ----- 4.2 5.4 201.5 11.1 20.4 -19.1 20.4 -18.1 20.1 -17.4 20.4 -18.5
2026-02-11T19:53:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:53:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:53:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.745278
2026-02-11T19:53:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:53:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:53:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:53:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:53:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:53:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:53:12', tmtdew=6.11, humidity=67.91, cloud=0.0, wind=10.61, temperature=19.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:53:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:53:48.230 [DEBUG] [Thread-134892] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:53:48.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:53:48.337 [DEBUG] [Thread-134895] [transport.py] [_log()] starting thread (client mode): 0xa57c1a50
2026-02-11T19:53:48.337 [DEBUG] [Thread-134895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:53:48.352 [DEBUG] [Thread-134895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:53:48.352 [INFO] [Thread-134895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:53:48.359 [DEBUG] [Thread-134895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:53:48.359 [DEBUG] [Thread-134895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:53:48.359 [DEBUG] [Thread-134895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:53:48.359 [DEBUG] [Thread-134895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:48.359 [DEBUG] [Thread-134895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:53:48.359 [DEBUG] [Thread-134895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] client lang: <none>
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] server lang: <none>
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] kex follows: False
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] Compression: none
2026-02-11T19:53:48.360 [DEBUG] [Thread-134895] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:53:48.418 [DEBUG] [Thread-134895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:53:48.418 [DEBUG] [Thread-134895] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:53:48.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:53:48.420 [DEBUG] [Thread-134895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:53:48.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:53:48.485 [DEBUG] [Thread-134895] [transport.py] [_log()] userauth is OK
2026-02-11T19:53:48.485 [DEBUG] [Thread-134895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:53:48.485 [DEBUG] [Thread-134895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:53:48.485 [DEBUG] [Thread-134895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:53:48.485 [DEBUG] [Thread-134895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:53:48.504 [INFO] [Thread-134895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:53:48.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:53:48.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:53:49.352 [DEBUG] [Thread-134895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:53:49.352 [DEBUG] [Thread-134895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:53:49.400 [DEBUG] [Thread-134895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:53:49.401 [DEBUG] [Thread-134895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:53:49.410 [DEBUG] [Thread-134895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:53:49.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:53:49.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:53:49.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:53:49.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:53:49.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:53:49.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:53:49.448 [DEBUG] [Thread-134895] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:53:58.517 [DEBUG] [Thread-134897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:54:13.577 [DEBUG] [Thread-134898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:54:15.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:54:15.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:54:19.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:54:19.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:54:19.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:54:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 53, 47), 6.3, 66.96, 0.0, 13.23, 19.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:54:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:53:47
2026-02-11T19:54:21.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:54:21.816 [DEBUG] [Thread-134899] [transport.py] [_log()] starting thread (client mode): 0xa5772d40
2026-02-11T19:54:21.816 [DEBUG] [Thread-134899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:54:21.837 [DEBUG] [Thread-134899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:54:21.837 [INFO] [Thread-134899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] client lang: <none>
2026-02-11T19:54:21.840 [DEBUG] [Thread-134899] [transport.py] [_log()] server lang: <none>
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] kex follows: False
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] Compression: none
2026-02-11T19:54:21.841 [DEBUG] [Thread-134899] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:54:21.857 [DEBUG] [Thread-134899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:54:21.857 [DEBUG] [Thread-134899] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:54:21.858 [DEBUG] [Thread-134899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:54:21.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:54:21.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:54:21.860 [DEBUG] [Thread-134899] [transport.py] [_log()] userauth is OK
2026-02-11T19:54:21.860 [DEBUG] [Thread-134899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:54:21.861 [DEBUG] [Thread-134899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:54:21.861 [DEBUG] [Thread-134899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:54:21.861 [DEBUG] [Thread-134899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:54:21.884 [INFO] [Thread-134899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:54:21.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:54:22.530 [DEBUG] [Thread-134899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:54:22.531 [DEBUG] [Thread-134899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:54:22.531 [DEBUG] [Thread-134899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:54:22.571 [DEBUG] [Thread-134899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:54:22.572 [DEBUG] [Thread-134899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:54:22.575 [DEBUG] [Thread-134899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:54:22.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:54:22.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:54:22.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:54:22.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:54:22.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:54:22.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:54:22.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:54:22.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:54:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:54:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.745626 -999.00  +19.70   8.34     69  +14.00 1 2 1 1 1   363    0 2.10 -161.49 ----- 11.9 8.3 224.3 10.8 20.4 -19.0 20.4 -18.2 20.1 -17.5 20.4 -18.5
2026-02-11T19:54:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:54:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:54:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.745626
2026-02-11T19:54:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:54:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:54:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:54:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:54:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:54:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:53:47', tmtdew=6.3, humidity=66.96, cloud=0.0, wind=13.23, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:53:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:54:22.603 [DEBUG] [Thread-134899] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:54:22.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:54:22.697 [DEBUG] [Thread-134902] [transport.py] [_log()] starting thread (client mode): 0xa2db76d0
2026-02-11T19:54:22.697 [DEBUG] [Thread-134902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:54:22.712 [DEBUG] [Thread-134902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:54:22.713 [INFO] [Thread-134902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] client lang: <none>
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] server lang: <none>
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] kex follows: False
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:54:22.721 [DEBUG] [Thread-134902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:54:22.722 [DEBUG] [Thread-134902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:54:22.722 [DEBUG] [Thread-134902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:54:22.722 [DEBUG] [Thread-134902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:54:22.722 [DEBUG] [Thread-134902] [transport.py] [_log()] Compression: none
2026-02-11T19:54:22.722 [DEBUG] [Thread-134902] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:54:22.778 [DEBUG] [Thread-134902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:54:22.778 [DEBUG] [Thread-134902] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:54:22.779 [DEBUG] [Thread-134902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:54:22.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:54:22.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:54:22.834 [DEBUG] [Thread-134902] [transport.py] [_log()] userauth is OK
2026-02-11T19:54:22.834 [DEBUG] [Thread-134902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:54:22.834 [DEBUG] [Thread-134902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:54:22.834 [DEBUG] [Thread-134902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:54:22.834 [DEBUG] [Thread-134902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:54:22.853 [INFO] [Thread-134902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:54:22.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:54:22.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:54:23.688 [DEBUG] [Thread-134902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:54:23.688 [DEBUG] [Thread-134902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:54:23.737 [DEBUG] [Thread-134902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:54:23.737 [DEBUG] [Thread-134902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:54:23.747 [DEBUG] [Thread-134902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:54:23.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:54:23.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:54:23.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:54:23.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:54:23.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:54:23.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:54:23.784 [DEBUG] [Thread-134902] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:54:28.612 [DEBUG] [Thread-134904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:54:35.958 [DEBUG] [Thread-134905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:54:43.661 [DEBUG] [Thread-134906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:54:53.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:54:53.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:54:53.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:54:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 54, 23), 6.29, 66.99, 0.0, 12.02, 19.35, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:54:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:54:23
2026-02-11T19:54:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:54:56.549 [DEBUG] [Thread-134907] [transport.py] [_log()] starting thread (client mode): 0xa57c36a0
2026-02-11T19:54:56.549 [DEBUG] [Thread-134907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:54:56.570 [DEBUG] [Thread-134907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:54:56.570 [INFO] [Thread-134907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] client lang: <none>
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] server lang: <none>
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] kex follows: False
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] Compression: none
2026-02-11T19:54:56.573 [DEBUG] [Thread-134907] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:54:56.590 [DEBUG] [Thread-134907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:54:56.591 [DEBUG] [Thread-134907] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:54:56.591 [DEBUG] [Thread-134907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:54:56.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:54:56.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:54:56.593 [DEBUG] [Thread-134907] [transport.py] [_log()] userauth is OK
2026-02-11T19:54:56.593 [DEBUG] [Thread-134907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:54:56.593 [DEBUG] [Thread-134907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:54:56.593 [DEBUG] [Thread-134907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:54:56.594 [DEBUG] [Thread-134907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:54:56.617 [INFO] [Thread-134907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:54:56.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:54:57.238 [DEBUG] [Thread-134907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:54:57.239 [DEBUG] [Thread-134907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:54:57.239 [DEBUG] [Thread-134907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:54:57.279 [DEBUG] [Thread-134907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:54:57.280 [DEBUG] [Thread-134907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:54:57.283 [DEBUG] [Thread-134907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:54:57.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:54:57.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:54:57.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:54:57.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:54:57.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:54:57.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:54:57.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:54:57.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:54:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:54:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.745973 -999.00  +19.70   7.51     67  +13.50 1 2 1 1 1   342    0 1.93 -164.52 ----- 10.7 7.5 270.5 16.8 20.4 -19.0 20.4 -18.2 20.1 -17.4 20.4 -18.3
2026-02-11T19:54:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:54:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:54:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.745973
2026-02-11T19:54:57.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:54:57.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:54:57.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:54:57.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:54:57.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:54:57.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:54:23', tmtdew=6.29, humidity=66.99, cloud=0.0, wind=12.02, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:54:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:54:57.307 [DEBUG] [Thread-134907] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:54:57.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:54:57.404 [DEBUG] [Thread-134910] [transport.py] [_log()] starting thread (client mode): 0xa57e1420
2026-02-11T19:54:57.404 [DEBUG] [Thread-134910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:54:57.419 [DEBUG] [Thread-134910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:54:57.419 [INFO] [Thread-134910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:54:57.426 [DEBUG] [Thread-134910] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:54:57.427 [DEBUG] [Thread-134910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:54:57.427 [DEBUG] [Thread-134910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:54:57.427 [DEBUG] [Thread-134910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:57.427 [DEBUG] [Thread-134910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:54:57.427 [DEBUG] [Thread-134910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:57.427 [DEBUG] [Thread-134910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] client lang: <none>
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] server lang: <none>
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] kex follows: False
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:54:57.428 [DEBUG] [Thread-134910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:54:57.429 [DEBUG] [Thread-134910] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:54:57.429 [DEBUG] [Thread-134910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:54:57.429 [DEBUG] [Thread-134910] [transport.py] [_log()] Compression: none
2026-02-11T19:54:57.429 [DEBUG] [Thread-134910] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:54:57.486 [DEBUG] [Thread-134910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:54:57.487 [DEBUG] [Thread-134910] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:54:57.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:54:57.488 [DEBUG] [Thread-134910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:54:57.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:54:57.542 [DEBUG] [Thread-134910] [transport.py] [_log()] userauth is OK
2026-02-11T19:54:57.542 [DEBUG] [Thread-134910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:54:57.542 [DEBUG] [Thread-134910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:54:57.542 [DEBUG] [Thread-134910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:54:57.542 [DEBUG] [Thread-134910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:54:57.561 [INFO] [Thread-134910] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:54:57.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:54:57.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:54:58.416 [DEBUG] [Thread-134910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:54:58.416 [DEBUG] [Thread-134910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:54:58.465 [DEBUG] [Thread-134910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:54:58.465 [DEBUG] [Thread-134910] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:54:58.474 [DEBUG] [Thread-134910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:54:58.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:54: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')
2026-02-11T19:54:58.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:54:58.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:54:58.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:54:58.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:54:58.509 [DEBUG] [Thread-134910] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:54:58.694 [DEBUG] [Thread-134912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:55:13.752 [DEBUG] [Thread-134913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:55:19.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:55:19.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:55:28.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:55:28.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:55:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:55:28.789 [DEBUG] [Thread-134914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:55:30.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 54, 59), 6.55, 65.95, 0.0, 13.64, 19.5, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:55:30.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:54:59
2026-02-11T19:55:30.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:55:30.855 [DEBUG] [Thread-134915] [transport.py] [_log()] starting thread (client mode): 0xa2d6aa40
2026-02-11T19:55:30.855 [DEBUG] [Thread-134915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:55:30.875 [DEBUG] [Thread-134915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:55:30.875 [INFO] [Thread-134915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] client lang: <none>
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] server lang: <none>
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] kex follows: False
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] Compression: none
2026-02-11T19:55:30.877 [DEBUG] [Thread-134915] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:55:30.890 [DEBUG] [Thread-134915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:55:30.890 [DEBUG] [Thread-134915] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:55:30.891 [DEBUG] [Thread-134915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:55:30.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:55:30.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:55:30.893 [DEBUG] [Thread-134915] [transport.py] [_log()] userauth is OK
2026-02-11T19:55:30.894 [DEBUG] [Thread-134915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:55:30.894 [DEBUG] [Thread-134915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:55:30.894 [DEBUG] [Thread-134915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:55:30.894 [DEBUG] [Thread-134915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:55:30.917 [INFO] [Thread-134915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:55:30.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:55:31.557 [DEBUG] [Thread-134915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:55:31.557 [DEBUG] [Thread-134915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:55:31.557 [DEBUG] [Thread-134915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:55:31.598 [DEBUG] [Thread-134915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:55:31.598 [DEBUG] [Thread-134915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:55:31.601 [DEBUG] [Thread-134915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:55:31.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:55:31.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:55:31.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:55:31.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:55:31.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:55:31.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:55:31.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:55:31.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:55:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:55:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.746320 -999.00  +19.70   9.72     68  +13.80 1 2 1 1 1   321    0 1.99 -160.87 ----- 9.8 9.7 218.4 14.5 20.4 -19.1 20.3 -18.2 20.1 -17.3 20.3 -18.4
2026-02-11T19:55:31.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:55:31.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:55:31.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.746320
2026-02-11T19:55:31.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:55:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:55:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:55:31.626 [DEBUG] [Thread-134915] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:55:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:55:31.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:55:31.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:54:59', tmtdew=6.55, humidity=65.95, cloud=0.0, wind=13.64, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:54:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:55:31.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:55:31.734 [DEBUG] [Thread-134918] [transport.py] [_log()] starting thread (client mode): 0xa57715a0
2026-02-11T19:55:31.734 [DEBUG] [Thread-134918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:55:31.749 [DEBUG] [Thread-134918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:55:31.749 [INFO] [Thread-134918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:55:31.757 [DEBUG] [Thread-134918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] client lang: <none>
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] server lang: <none>
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] kex follows: False
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:55:31.758 [DEBUG] [Thread-134918] [transport.py] [_log()] Compression: none
2026-02-11T19:55:31.759 [DEBUG] [Thread-134918] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:55:31.818 [DEBUG] [Thread-134918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:55:31.819 [DEBUG] [Thread-134918] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:55:31.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:55:31.820 [DEBUG] [Thread-134918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:55:31.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:55:31.875 [DEBUG] [Thread-134918] [transport.py] [_log()] userauth is OK
2026-02-11T19:55:31.875 [DEBUG] [Thread-134918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:55:31.875 [DEBUG] [Thread-134918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:55:31.875 [DEBUG] [Thread-134918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:55:31.875 [DEBUG] [Thread-134918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:55:31.899 [INFO] [Thread-134918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:55:31.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:55:31.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:55:32.756 [DEBUG] [Thread-134918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:55:32.756 [DEBUG] [Thread-134918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:55:32.805 [DEBUG] [Thread-134918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:55:32.805 [DEBUG] [Thread-134918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:55:32.814 [DEBUG] [Thread-134918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:55:32.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:55:32.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:55:32.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:55:32.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:55:32.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:55:32.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:55:32.850 [DEBUG] [Thread-134918] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:55:36.030 [DEBUG] [Thread-134920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:55:43.826 [DEBUG] [Thread-134921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:55:58.881 [DEBUG] [Thread-134922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:56:02.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:56:02.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:56:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:56:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 55, 35), 6.82, 64.7, 0.0, 18.35, 19.71, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:56:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:55:35
2026-02-11T19:56:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:56:05.188 [DEBUG] [Thread-134923] [transport.py] [_log()] starting thread (client mode): 0xa2db6c80
2026-02-11T19:56:05.188 [DEBUG] [Thread-134923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:56:05.209 [DEBUG] [Thread-134923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:56:05.209 [INFO] [Thread-134923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:56:05.212 [DEBUG] [Thread-134923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:56:05.212 [DEBUG] [Thread-134923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:56:05.212 [DEBUG] [Thread-134923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] client lang: <none>
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] server lang: <none>
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] kex follows: False
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] Compression: none
2026-02-11T19:56:05.213 [DEBUG] [Thread-134923] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:56:05.231 [DEBUG] [Thread-134923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:56:05.232 [DEBUG] [Thread-134923] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:56:05.232 [DEBUG] [Thread-134923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:56:05.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:56:05.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:56:05.234 [DEBUG] [Thread-134923] [transport.py] [_log()] userauth is OK
2026-02-11T19:56:05.235 [DEBUG] [Thread-134923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:56:05.235 [DEBUG] [Thread-134923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:56:05.235 [DEBUG] [Thread-134923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:56:05.235 [DEBUG] [Thread-134923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:56:05.259 [INFO] [Thread-134923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:56:05.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:56:05.909 [DEBUG] [Thread-134923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:56:05.909 [DEBUG] [Thread-134923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:56:05.910 [DEBUG] [Thread-134923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:56:05.950 [DEBUG] [Thread-134923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:56:05.950 [DEBUG] [Thread-134923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:56:05.953 [DEBUG] [Thread-134923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:56:05.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:56:05.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:56:05.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:56:05.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:56:05.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:56:05.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:56:05.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:56:05.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:56:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:56:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.746667 -999.00  +19.70  12.94     68  +13.80 1 2 1 1 1   301    0 1.90 -162.68 ----- 7.7 12.9 213.2 14.8 20.4 -19.1 20.3 -18.1 20.1 -17.4 20.4 -18.4
2026-02-11T19:56:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:56:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:56:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.746667
2026-02-11T19:56:05.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:56:05.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:56:05.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:56:05.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:56:05.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:56:05.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:55:35', tmtdew=6.82, humidity=64.7, cloud=0.0, wind=18.35, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:55:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:56:05.980 [DEBUG] [Thread-134923] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:56:06.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:56:06.077 [DEBUG] [Thread-134926] [transport.py] [_log()] starting thread (client mode): 0xa57c0760
2026-02-11T19:56:06.077 [DEBUG] [Thread-134926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:56:06.092 [DEBUG] [Thread-134926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:56:06.092 [INFO] [Thread-134926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:56:06.099 [DEBUG] [Thread-134926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] client lang: <none>
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] server lang: <none>
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] kex follows: False
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:56:06.100 [DEBUG] [Thread-134926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:56:06.101 [DEBUG] [Thread-134926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:56:06.101 [DEBUG] [Thread-134926] [transport.py] [_log()] Compression: none
2026-02-11T19:56:06.101 [DEBUG] [Thread-134926] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:56:06.161 [DEBUG] [Thread-134926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:56:06.162 [DEBUG] [Thread-134926] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:56:06.162 [DEBUG] [Thread-134926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:56:06.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:56:06.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:56:06.219 [DEBUG] [Thread-134926] [transport.py] [_log()] userauth is OK
2026-02-11T19:56:06.219 [DEBUG] [Thread-134926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:56:06.219 [DEBUG] [Thread-134926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:56:06.219 [DEBUG] [Thread-134926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:56:06.219 [DEBUG] [Thread-134926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:56:06.237 [INFO] [Thread-134926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:56:06.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:56:06.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:56:07.056 [DEBUG] [Thread-134926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:56:07.057 [DEBUG] [Thread-134926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:56:07.104 [DEBUG] [Thread-134926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:56:07.105 [DEBUG] [Thread-134926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:56:07.114 [DEBUG] [Thread-134926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:56:07.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:56:07.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:56:07.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:56:07.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:56:07.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:56:07.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:56:07.150 [DEBUG] [Thread-134926] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:56:13.915 [DEBUG] [Thread-134928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:56:26.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:56:26.105 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:56:28.973 [DEBUG] [Thread-134929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:56:36.116 [DEBUG] [Thread-134930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:56:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:56:37.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:56:37.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:56:39.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 56, 11), 6.89, 64.31, 0.0, 13.39, 19.59, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:56:39.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:56:11
2026-02-11T19:56:39.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:56:39.986 [DEBUG] [Thread-134931] [transport.py] [_log()] starting thread (client mode): 0xa57c0280
2026-02-11T19:56:39.987 [DEBUG] [Thread-134931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:56:40.003 [DEBUG] [Thread-134931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:56:40.003 [INFO] [Thread-134931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:56:40.006 [DEBUG] [Thread-134931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:56:40.006 [DEBUG] [Thread-134931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:56:40.006 [DEBUG] [Thread-134931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] client lang: <none>
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] server lang: <none>
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] kex follows: False
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] Compression: none
2026-02-11T19:56:40.007 [DEBUG] [Thread-134931] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:56:40.027 [DEBUG] [Thread-134931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:56:40.028 [DEBUG] [Thread-134931] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:56:40.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:56:40.029 [DEBUG] [Thread-134931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:56:40.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:56:40.031 [DEBUG] [Thread-134931] [transport.py] [_log()] userauth is OK
2026-02-11T19:56:40.032 [DEBUG] [Thread-134931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:56:40.032 [DEBUG] [Thread-134931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:56:40.032 [DEBUG] [Thread-134931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:56:40.032 [DEBUG] [Thread-134931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:56:40.055 [INFO] [Thread-134931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:56:40.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:56:40.697 [DEBUG] [Thread-134931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:56:40.698 [DEBUG] [Thread-134931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:56:40.698 [DEBUG] [Thread-134931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:56:40.738 [DEBUG] [Thread-134931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:56:40.738 [DEBUG] [Thread-134931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:56:40.741 [DEBUG] [Thread-134931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:56:40.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:56:40.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:56:40.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:56:40.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:56:40.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:56:40.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:56:40.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:56:40.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:56:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:56:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.747014 -999.00  +19.70   9.48     69  +13.90 1 2 1 1 1   282    0 1.71 -171.01 ----- 5.4 9.5 217.0 13.7 20.4 -19.0 20.3 -18.1 20.0 -17.4 20.3 -18.6
2026-02-11T19:56:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:56:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:56:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.747014
2026-02-11T19:56:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:56:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:56:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:56:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:56:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:56:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:56:11', tmtdew=6.89, humidity=64.31, cloud=0.0, wind=13.39, temperature=19.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:55:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:56:40.768 [DEBUG] [Thread-134931] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:56:40.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:56:40.875 [DEBUG] [Thread-134934] [transport.py] [_log()] starting thread (client mode): 0xa2db7790
2026-02-11T19:56:40.876 [DEBUG] [Thread-134934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:56:40.890 [DEBUG] [Thread-134934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:56:40.891 [INFO] [Thread-134934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:56:40.898 [DEBUG] [Thread-134934] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:56:40.898 [DEBUG] [Thread-134934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:56:40.898 [DEBUG] [Thread-134934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:56:40.898 [DEBUG] [Thread-134934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:40.898 [DEBUG] [Thread-134934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] client lang: <none>
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] server lang: <none>
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] kex follows: False
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] Compression: none
2026-02-11T19:56:40.899 [DEBUG] [Thread-134934] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:56:40.958 [DEBUG] [Thread-134934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:56:40.958 [DEBUG] [Thread-134934] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:56:40.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:56:40.959 [DEBUG] [Thread-134934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:56:40.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:56:41.014 [DEBUG] [Thread-134934] [transport.py] [_log()] userauth is OK
2026-02-11T19:56:41.015 [DEBUG] [Thread-134934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:56:41.015 [DEBUG] [Thread-134934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:56:41.015 [DEBUG] [Thread-134934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:56:41.015 [DEBUG] [Thread-134934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:56:41.033 [INFO] [Thread-134934] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:56:41.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:56:41.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:56:41.847 [DEBUG] [Thread-134934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:56:41.847 [DEBUG] [Thread-134934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:56:41.895 [DEBUG] [Thread-134934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:56:41.896 [DEBUG] [Thread-134934] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:56:41.905 [DEBUG] [Thread-134934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:56:41.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:56:41.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:56:41.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:56:41.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:56:41.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:56:41.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:56:41.942 [DEBUG] [Thread-134934] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:56:44.009 [DEBUG] [Thread-134936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:56:59.066 [DEBUG] [Thread-134937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:57:11.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:57:11.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:57:11.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:57:13.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 56, 46), 6.84, 64.59, 0.0, 12.3, 19.54, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:57:13.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:56:46
2026-02-11T19:57:14.099 [DEBUG] [Thread-134938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:57:14.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:57:14.350 [DEBUG] [Thread-134939] [transport.py] [_log()] starting thread (client mode): 0xa2db64d0
2026-02-11T19:57:14.351 [DEBUG] [Thread-134939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:57:14.371 [DEBUG] [Thread-134939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:57:14.371 [INFO] [Thread-134939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:57:14.375 [DEBUG] [Thread-134939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] client lang: <none>
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] server lang: <none>
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] kex follows: False
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] Compression: none
2026-02-11T19:57:14.376 [DEBUG] [Thread-134939] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:57:14.393 [DEBUG] [Thread-134939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:57:14.394 [DEBUG] [Thread-134939] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:57:14.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:57:14.395 [DEBUG] [Thread-134939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:57:14.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:57:14.397 [DEBUG] [Thread-134939] [transport.py] [_log()] userauth is OK
2026-02-11T19:57:14.397 [DEBUG] [Thread-134939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:57:14.397 [DEBUG] [Thread-134939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:57:14.397 [DEBUG] [Thread-134939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:57:14.397 [DEBUG] [Thread-134939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:57:14.416 [INFO] [Thread-134939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:57:14.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:57:14.992 [DEBUG] [Thread-134939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:57:14.992 [DEBUG] [Thread-134939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:57:14.993 [DEBUG] [Thread-134939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:57:15.033 [DEBUG] [Thread-134939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:57:15.033 [DEBUG] [Thread-134939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:57:15.036 [DEBUG] [Thread-134939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:57:15.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:57:15.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:57:15.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:57:15.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:57:15.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:57:15.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:57:15.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:57:15.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:57:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:57:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.747362 -999.00  +19.70  13.71     70  +14.10 1 2 1 1 1   263    0 1.94 -161.49 ----- 7.2 13.7 208.0 16.2 20.4 -19.1 20.3 -18.2 20.1 -17.5 20.3 -18.4
2026-02-11T19:57:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:57:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:57:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.747362
2026-02-11T19:57:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:57:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:57:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:57:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:57:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:57:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:56:46', tmtdew=6.84, humidity=64.59, cloud=0.0, wind=12.3, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:56:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:57:15.063 [DEBUG] [Thread-134939] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:57:15.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:57:15.160 [DEBUG] [Thread-134942] [transport.py] [_log()] starting thread (client mode): 0xa57c3760
2026-02-11T19:57:15.160 [DEBUG] [Thread-134942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:57:15.174 [DEBUG] [Thread-134942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:57:15.174 [INFO] [Thread-134942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:57:15.181 [DEBUG] [Thread-134942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:57:15.181 [DEBUG] [Thread-134942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] client lang: <none>
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] server lang: <none>
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] kex follows: False
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] Compression: none
2026-02-11T19:57:15.182 [DEBUG] [Thread-134942] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:57:15.242 [DEBUG] [Thread-134942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:57:15.242 [DEBUG] [Thread-134942] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:57:15.243 [DEBUG] [Thread-134942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:57:15.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:57:15.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:57:15.297 [DEBUG] [Thread-134942] [transport.py] [_log()] userauth is OK
2026-02-11T19:57:15.298 [DEBUG] [Thread-134942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:57:15.298 [DEBUG] [Thread-134942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:57:15.298 [DEBUG] [Thread-134942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:57:15.298 [DEBUG] [Thread-134942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:57:15.317 [INFO] [Thread-134942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:57:15.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:57:15.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:57:16.160 [DEBUG] [Thread-134942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:57:16.160 [DEBUG] [Thread-134942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:57:16.208 [DEBUG] [Thread-134942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:57:16.208 [DEBUG] [Thread-134942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:57:16.217 [DEBUG] [Thread-134942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:57:16.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:57:16.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')
2026-02-11T19:57:16.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:57:16.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:57:16.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:57:16.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:57:16.252 [DEBUG] [Thread-134942] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:57:29.134 [DEBUG] [Thread-134944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:57:31.312 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:57:31.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:57:36.204 [DEBUG] [Thread-134945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:57:44.175 [DEBUG] [Thread-134946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:57:46.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:57:46.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:57:46.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:57:48.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 57, 22), 6.83, 64.67, 0.0, 12.63, 19.62, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:57:48.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:57:22
2026-02-11T19:57:48.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:57:49.121 [DEBUG] [Thread-134947] [transport.py] [_log()] starting thread (client mode): 0xa2d6b400
2026-02-11T19:57:49.121 [DEBUG] [Thread-134947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:57:49.141 [DEBUG] [Thread-134947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:57:49.141 [INFO] [Thread-134947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:57:49.144 [DEBUG] [Thread-134947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] client lang: <none>
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] server lang: <none>
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] kex follows: False
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] Compression: none
2026-02-11T19:57:49.145 [DEBUG] [Thread-134947] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:57:49.164 [DEBUG] [Thread-134947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:57:49.164 [DEBUG] [Thread-134947] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:57:49.165 [DEBUG] [Thread-134947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:57:49.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:57:49.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:57:49.167 [DEBUG] [Thread-134947] [transport.py] [_log()] userauth is OK
2026-02-11T19:57:49.167 [DEBUG] [Thread-134947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:57:49.167 [DEBUG] [Thread-134947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:57:49.167 [DEBUG] [Thread-134947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:57:49.167 [DEBUG] [Thread-134947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:57:49.190 [INFO] [Thread-134947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:57:49.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:57:49.778 [DEBUG] [Thread-134947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:57:49.779 [DEBUG] [Thread-134947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:57:49.779 [DEBUG] [Thread-134947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:57:49.819 [DEBUG] [Thread-134947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:57:49.819 [DEBUG] [Thread-134947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:57:49.821 [DEBUG] [Thread-134947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:57:49.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:57:49.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:57:49.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:57:49.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:57:49.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:57:49.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:57:49.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:57:49.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:57:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:57:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.748403 -999.00  +19.60   4.99     70  +14.20 1 2 1 1 1   212    0 1.95 -156.15 ----- 6.8 5.0 195.2 12.8 20.3 -19.0 20.2 -18.0 20.0 -17.3 20.3 -18.3
2026-02-11T19:57:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:57:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:57:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.748403
2026-02-11T19:57:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:57:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:57:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:57:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:57:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:57:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:57:22', tmtdew=6.83, humidity=64.67, cloud=0.0, wind=12.63, temperature=19.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:57:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:57:49.837 [DEBUG] [Thread-134947] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:57:49.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:57:49.933 [DEBUG] [Thread-134950] [transport.py] [_log()] starting thread (client mode): 0xa5758610
2026-02-11T19:57:49.934 [DEBUG] [Thread-134950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:57:49.950 [DEBUG] [Thread-134950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:57:49.951 [INFO] [Thread-134950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:57:49.963 [DEBUG] [Thread-134950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] client lang: <none>
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] server lang: <none>
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] kex follows: False
2026-02-11T19:57:49.964 [DEBUG] [Thread-134950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:57:49.965 [DEBUG] [Thread-134950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:57:49.965 [DEBUG] [Thread-134950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:57:49.965 [DEBUG] [Thread-134950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:57:49.965 [DEBUG] [Thread-134950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:57:49.965 [DEBUG] [Thread-134950] [transport.py] [_log()] Compression: none
2026-02-11T19:57:49.965 [DEBUG] [Thread-134950] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:57:50.018 [DEBUG] [Thread-134950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:57:50.018 [DEBUG] [Thread-134950] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:57:50.019 [DEBUG] [Thread-134950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:57:50.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:57:50.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:57:50.074 [DEBUG] [Thread-134950] [transport.py] [_log()] userauth is OK
2026-02-11T19:57:50.074 [DEBUG] [Thread-134950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:57:50.074 [DEBUG] [Thread-134950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:57:50.074 [DEBUG] [Thread-134950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:57:50.074 [DEBUG] [Thread-134950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:57:50.095 [INFO] [Thread-134950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:57:50.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:57:50.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:57:50.953 [DEBUG] [Thread-134950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:57:50.954 [DEBUG] [Thread-134950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:57:51.001 [DEBUG] [Thread-134950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:57:51.001 [DEBUG] [Thread-134950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:57:51.010 [DEBUG] [Thread-134950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:57:51.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:57:51.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:57:51.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:57:51.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:57:51.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:57:51.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:57:51.044 [DEBUG] [Thread-134950] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:57:59.214 [DEBUG] [Thread-134952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:14.273 [DEBUG] [Thread-134953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:21.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:58:21.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:58:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:58:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 57, 58), 6.6, 65.69, 0.0, 12.02, 19.6, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:58:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:57:58
2026-02-11T19:58:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:58:24.005 [DEBUG] [Thread-134954] [transport.py] [_log()] starting thread (client mode): 0xa575a890
2026-02-11T19:58:24.006 [DEBUG] [Thread-134954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:58:24.026 [DEBUG] [Thread-134954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:58:24.026 [INFO] [Thread-134954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:58:24.028 [DEBUG] [Thread-134954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:58:24.028 [DEBUG] [Thread-134954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:58:24.028 [DEBUG] [Thread-134954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] client lang: <none>
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] server lang: <none>
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] kex follows: False
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] Compression: none
2026-02-11T19:58:24.029 [DEBUG] [Thread-134954] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:58:24.039 [DEBUG] [Thread-134954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:58:24.040 [DEBUG] [Thread-134954] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:58:24.040 [DEBUG] [Thread-134954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:58:24.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:58:24.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:58:24.042 [DEBUG] [Thread-134954] [transport.py] [_log()] userauth is OK
2026-02-11T19:58:24.043 [DEBUG] [Thread-134954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:58:24.043 [DEBUG] [Thread-134954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:58:24.043 [DEBUG] [Thread-134954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:58:24.043 [DEBUG] [Thread-134954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:58:24.062 [INFO] [Thread-134954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:58:24.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:58:24.645 [DEBUG] [Thread-134954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:58:24.645 [DEBUG] [Thread-134954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:58:24.646 [DEBUG] [Thread-134954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:58:24.686 [DEBUG] [Thread-134954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:58:24.687 [DEBUG] [Thread-134954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:58:24.690 [DEBUG] [Thread-134954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:58:24.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:58:24.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:58:24.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:58:24.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:58:24.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:58:24.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:58:24.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:58:24.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:58:24.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:58:24.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.748750 -999.00  +19.60  11.89     70  +14.20 1 2 1 1 1   196    0 1.95 -155.11 ----- 8.4 11.9 204.8 13.2 20.3 -18.9 20.2 -18.0 20.0 -17.4 20.3 -18.3
2026-02-11T19:58:24.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:58:24.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:58:24.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.748750
2026-02-11T19:58:24.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:58:24.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:58:24.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:58:24.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:58:24.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:58:24.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:57:58', tmtdew=6.6, humidity=65.69, cloud=0.0, wind=12.02, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:58:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:58:24.720 [DEBUG] [Thread-134954] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:58:24.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:58:24.813 [DEBUG] [Thread-134957] [transport.py] [_log()] starting thread (client mode): 0xa2d6af50
2026-02-11T19:58:24.813 [DEBUG] [Thread-134957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:58:24.828 [DEBUG] [Thread-134957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:58:24.828 [INFO] [Thread-134957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:58:24.835 [DEBUG] [Thread-134957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] client lang: <none>
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] server lang: <none>
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] kex follows: False
2026-02-11T19:58:24.836 [DEBUG] [Thread-134957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:58:24.837 [DEBUG] [Thread-134957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:58:24.837 [DEBUG] [Thread-134957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:58:24.837 [DEBUG] [Thread-134957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:58:24.837 [DEBUG] [Thread-134957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:58:24.837 [DEBUG] [Thread-134957] [transport.py] [_log()] Compression: none
2026-02-11T19:58:24.837 [DEBUG] [Thread-134957] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:58:24.898 [DEBUG] [Thread-134957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:58:24.898 [DEBUG] [Thread-134957] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:58:24.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:58:24.899 [DEBUG] [Thread-134957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:58:24.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:58:24.954 [DEBUG] [Thread-134957] [transport.py] [_log()] userauth is OK
2026-02-11T19:58:24.955 [DEBUG] [Thread-134957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:58:24.955 [DEBUG] [Thread-134957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:58:24.955 [DEBUG] [Thread-134957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:58:24.955 [DEBUG] [Thread-134957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:58:24.974 [INFO] [Thread-134957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:58:24.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:58:24.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:58:25.818 [DEBUG] [Thread-134957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:58:25.819 [DEBUG] [Thread-134957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:58:25.866 [DEBUG] [Thread-134957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:58:25.866 [DEBUG] [Thread-134957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:58:25.876 [DEBUG] [Thread-134957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:58:25.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:58:25.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')
2026-02-11T19:58:25.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
2026-02-11T19:58:25.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:58:25.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:58:25.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:58:25.913 [DEBUG] [Thread-134957] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:58:29.309 [DEBUG] [Thread-134959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:35.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:35.305 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:36.277 [DEBUG] [Thread-134960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:44.358 [DEBUG] [Thread-134961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:55.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:58:55.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:58:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:58:57.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 58, 33), 6.52, 66.03, 0.0, 12.67, 19.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:58:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:58:33
2026-02-11T19:58:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:58:58.401 [DEBUG] [Thread-134962] [transport.py] [_log()] starting thread (client mode): 0xa2d55ea0
2026-02-11T19:58:58.401 [DEBUG] [Thread-134962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:58:58.421 [DEBUG] [Thread-134962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:58:58.421 [INFO] [Thread-134962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:58:58.425 [DEBUG] [Thread-134962] [transport.py] [_log()] client lang: <none>
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] server lang: <none>
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] kex follows: False
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] Compression: none
2026-02-11T19:58:58.426 [DEBUG] [Thread-134962] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:58:58.443 [DEBUG] [Thread-134962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:58:58.443 [DEBUG] [Thread-134962] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:58:58.444 [DEBUG] [Thread-134962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:58:58.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:58:58.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:58:58.446 [DEBUG] [Thread-134962] [transport.py] [_log()] userauth is OK
2026-02-11T19:58:58.446 [DEBUG] [Thread-134962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:58:58.446 [DEBUG] [Thread-134962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:58:58.446 [DEBUG] [Thread-134962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:58:58.446 [DEBUG] [Thread-134962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:58:58.473 [INFO] [Thread-134962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:58:58.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:58:59.077 [DEBUG] [Thread-134962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:58:59.077 [DEBUG] [Thread-134962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:58:59.078 [DEBUG] [Thread-134962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:58:59.119 [DEBUG] [Thread-134962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:58:59.119 [DEBUG] [Thread-134962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:58:59.122 [DEBUG] [Thread-134962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:58:59.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:58:59.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:58:59.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:58:59.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:58:59.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:58:59.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:58:59.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:58:59.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:58:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:58:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.749098 -999.00  +19.60   8.57     71  +14.20 1 2 1 1 1   181    0 2.01 -149.86 ----- 7.5 8.6 210.3 15.4 20.2 -18.8 20.2 -17.9 20.0 -17.3 20.2 -18.5
2026-02-11T19:58:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:58:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:58:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.749098
2026-02-11T19:58:59.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:58:59.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:58:59.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:58:59.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:58:59.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:58:59.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:58:33', tmtdew=6.52, humidity=66.03, cloud=0.0, wind=12.67, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:58:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:58:59.151 [DEBUG] [Thread-134962] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:58:59.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:58:59.246 [DEBUG] [Thread-134965] [transport.py] [_log()] starting thread (client mode): 0xa2db72e0
2026-02-11T19:58:59.247 [DEBUG] [Thread-134965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:58:59.261 [DEBUG] [Thread-134965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:58:59.261 [INFO] [Thread-134965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:58:59.268 [DEBUG] [Thread-134965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:58:59.269 [DEBUG] [Thread-134965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:58:59.269 [DEBUG] [Thread-134965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:58:59.269 [DEBUG] [Thread-134965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:59.269 [DEBUG] [Thread-134965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:58:59.269 [DEBUG] [Thread-134965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:59.269 [DEBUG] [Thread-134965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:58:59.269 [DEBUG] [Thread-134965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] client lang: <none>
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] server lang: <none>
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] kex follows: False
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:58:59.270 [DEBUG] [Thread-134965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:58:59.271 [DEBUG] [Thread-134965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:58:59.271 [DEBUG] [Thread-134965] [transport.py] [_log()] Compression: none
2026-02-11T19:58:59.271 [DEBUG] [Thread-134965] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:58:59.325 [DEBUG] [Thread-134965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:58:59.326 [DEBUG] [Thread-134965] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:58:59.326 [DEBUG] [Thread-134965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:58:59.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:58:59.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:58:59.382 [DEBUG] [Thread-134965] [transport.py] [_log()] userauth is OK
2026-02-11T19:58:59.382 [DEBUG] [Thread-134965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:58:59.383 [DEBUG] [Thread-134965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:58:59.383 [DEBUG] [Thread-134965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:58:59.383 [DEBUG] [Thread-134965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:58:59.391 [DEBUG] [Thread-134967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:58:59.404 [INFO] [Thread-134965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:58:59.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:58:59.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:59:00.207 [DEBUG] [Thread-134965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:59:00.207 [DEBUG] [Thread-134965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:59:00.255 [DEBUG] [Thread-134965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:59:00.255 [DEBUG] [Thread-134965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:59:00.264 [DEBUG] [Thread-134965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:59:00.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:59:00.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:59:00.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T19:59:00.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:59:00.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:59:00.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:59:00.299 [DEBUG] [Thread-134965] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:59:14.446 [DEBUG] [Thread-134968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:59:29.482 [DEBUG] [Thread-134969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:59:30.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T19:59:30.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T19:59:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T19:59:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 59, 8), 6.47, 66.25, 0.0, 12.67, 19.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T19:59:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:59:08
2026-02-11T19:59:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T19:59:32.668 [DEBUG] [Thread-134970] [transport.py] [_log()] starting thread (client mode): 0xa575b910
2026-02-11T19:59:32.668 [DEBUG] [Thread-134970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:59:32.690 [DEBUG] [Thread-134970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T19:59:32.690 [INFO] [Thread-134970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] client lang: <none>
2026-02-11T19:59:32.693 [DEBUG] [Thread-134970] [transport.py] [_log()] server lang: <none>
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] kex follows: False
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] Compression: none
2026-02-11T19:59:32.694 [DEBUG] [Thread-134970] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:59:32.711 [DEBUG] [Thread-134970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:59:32.711 [DEBUG] [Thread-134970] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:59:32.712 [DEBUG] [Thread-134970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T19:59:32.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T19:59:32.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:59:32.714 [DEBUG] [Thread-134970] [transport.py] [_log()] userauth is OK
2026-02-11T19:59:32.714 [DEBUG] [Thread-134970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:59:32.714 [DEBUG] [Thread-134970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:59:32.714 [DEBUG] [Thread-134970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T19:59:32.715 [DEBUG] [Thread-134970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:59:32.739 [INFO] [Thread-134970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:59:32.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:59:33.381 [DEBUG] [Thread-134970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:59:33.382 [DEBUG] [Thread-134970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:59:33.382 [DEBUG] [Thread-134970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T19:59:33.422 [DEBUG] [Thread-134970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:59:33.423 [DEBUG] [Thread-134970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:59:33.426 [DEBUG] [Thread-134970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:59:33.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:59:33.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T19:59:33.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T19:59:33.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T19:59:33.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:59:33.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T19:59:33.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:59:33.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:59:33.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T19:59:33.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.749445 -999.00  +19.60   7.11     71  +14.20 1 2 1 1 1   168    0 2.04 -149.71 ----- 7.9 7.1 199.1 10.0 20.3 -18.9 20.2 -17.9 20.0 -17.3 20.2 -18.5
2026-02-11T19:59:33.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T19:59:33.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T19:59:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.749445
2026-02-11T19:59:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T19:59:33.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T19:59:33.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T19:59:33.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T19:59:33.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T19:59:33.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:59:08', tmtdew=6.47, humidity=66.25, cloud=0.0, wind=12.67, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:59:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T19:59:33.453 [DEBUG] [Thread-134970] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:59:33.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T19:59:33.549 [DEBUG] [Thread-134973] [transport.py] [_log()] starting thread (client mode): 0xa57e2e60
2026-02-11T19:59:33.549 [DEBUG] [Thread-134973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T19:59:33.564 [DEBUG] [Thread-134973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T19:59:33.564 [INFO] [Thread-134973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T19:59:33.572 [DEBUG] [Thread-134973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T19:59:33.572 [DEBUG] [Thread-134973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T19:59:33.572 [DEBUG] [Thread-134973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T19:59:33.572 [DEBUG] [Thread-134973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:59:33.572 [DEBUG] [Thread-134973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] client lang: <none>
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] server lang: <none>
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] kex follows: False
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] Compression: none
2026-02-11T19:59:33.573 [DEBUG] [Thread-134973] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T19:59:33.630 [DEBUG] [Thread-134973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T19:59:33.631 [DEBUG] [Thread-134973] [transport.py] [_log()] Switch to new keys ...
2026-02-11T19:59:33.631 [DEBUG] [Thread-134973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T19:59:33.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T19:59:33.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T19:59:33.686 [DEBUG] [Thread-134973] [transport.py] [_log()] userauth is OK
2026-02-11T19:59:33.686 [DEBUG] [Thread-134973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T19:59:33.686 [DEBUG] [Thread-134973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T19:59:33.686 [DEBUG] [Thread-134973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T19:59:33.686 [DEBUG] [Thread-134973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T19:59:33.707 [INFO] [Thread-134973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T19:59:33.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T19:59:33.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T19:59:34.558 [DEBUG] [Thread-134973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T19:59:34.559 [DEBUG] [Thread-134973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T19:59:34.606 [DEBUG] [Thread-134973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T19:59:34.607 [DEBUG] [Thread-134973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T19:59:34.616 [DEBUG] [Thread-134973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T19:59:34.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T19:59:34.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T19:59: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') -> 00000000
2026-02-11T19:59:34.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T19:59:34.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T19:59:34.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T19:59:34.652 [DEBUG] [Thread-134973] [transport.py] [_log()] EOF in transport thread
2026-02-11T19:59:36.337 [DEBUG] [Thread-134975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:59:39.822 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:59:39.824 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:59:44.518 [DEBUG] [Thread-134976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T19:59:59.565 [DEBUG] [Thread-134977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:00:04.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:00:04.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:00:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:00:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 19, 59, 44), 6.31, 66.77, 0.0, 14.03, 19.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:00:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 19:59:44
2026-02-11T20:00:06.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:00:06.992 [DEBUG] [Thread-134978] [transport.py] [_log()] starting thread (client mode): 0xa2db5600
2026-02-11T20:00:06.992 [DEBUG] [Thread-134978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:00:07.012 [DEBUG] [Thread-134978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:00:07.012 [INFO] [Thread-134978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] client lang: <none>
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] server lang: <none>
2026-02-11T20:00:07.015 [DEBUG] [Thread-134978] [transport.py] [_log()] kex follows: False
2026-02-11T20:00:07.016 [DEBUG] [Thread-134978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:00:07.016 [DEBUG] [Thread-134978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:00:07.016 [DEBUG] [Thread-134978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:00:07.016 [DEBUG] [Thread-134978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:00:07.016 [DEBUG] [Thread-134978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:00:07.016 [DEBUG] [Thread-134978] [transport.py] [_log()] Compression: none
2026-02-11T20:00:07.016 [DEBUG] [Thread-134978] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:00:07.033 [DEBUG] [Thread-134978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:00:07.034 [DEBUG] [Thread-134978] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:00:07.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:00:07.035 [DEBUG] [Thread-134978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:00:07.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:00:07.037 [DEBUG] [Thread-134978] [transport.py] [_log()] userauth is OK
2026-02-11T20:00:07.037 [DEBUG] [Thread-134978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:00:07.038 [DEBUG] [Thread-134978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:00:07.038 [DEBUG] [Thread-134978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:00:07.038 [DEBUG] [Thread-134978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:00:07.053 [INFO] [Thread-134978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:00:07.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:00:07.947 [DEBUG] [Thread-134978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:00:07.947 [DEBUG] [Thread-134978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:00:07.947 [DEBUG] [Thread-134978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:00:07.987 [DEBUG] [Thread-134978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:00:07.987 [DEBUG] [Thread-134978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:00:07.991 [DEBUG] [Thread-134978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:00:08.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:00:08.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:00:08.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:00:08.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:00:08.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:00:08.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:00:08.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:00:08.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:00:08.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:00:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.749792 -999.00  +19.60   7.03     71  +14.20 1 2 1 1 1   154    0 2.01 -146.98 ----- 4.0 7.0 189.2 14.5 20.2 -18.9 20.2 -18.0 20.0 -17.3 20.2 -18.4
2026-02-11T20:00:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:00:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:00:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.749792
2026-02-11T20:00:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:00:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:00:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:00:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:00:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:00:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T19:59:44', tmtdew=6.31, humidity=66.77, cloud=0.0, wind=14.03, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T17:59:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:00:08.021 [DEBUG] [Thread-134978] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:00:08.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:00:08.114 [DEBUG] [Thread-134981] [transport.py] [_log()] starting thread (client mode): 0xa2d56950
2026-02-11T20:00:08.115 [DEBUG] [Thread-134981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:00:08.129 [DEBUG] [Thread-134981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:00:08.129 [INFO] [Thread-134981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:00:08.136 [DEBUG] [Thread-134981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] client lang: <none>
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] server lang: <none>
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] kex follows: False
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] Compression: none
2026-02-11T20:00:08.137 [DEBUG] [Thread-134981] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:00:08.193 [DEBUG] [Thread-134981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:00:08.194 [DEBUG] [Thread-134981] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:00:08.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:00:08.195 [DEBUG] [Thread-134981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:00:08.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:00:08.250 [DEBUG] [Thread-134981] [transport.py] [_log()] userauth is OK
2026-02-11T20:00:08.251 [DEBUG] [Thread-134981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:00:08.251 [DEBUG] [Thread-134981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:00:08.251 [DEBUG] [Thread-134981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:00:08.251 [DEBUG] [Thread-134981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:00:08.272 [INFO] [Thread-134981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:00:08.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:00:08.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:00:09.161 [DEBUG] [Thread-134981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:00:09.161 [DEBUG] [Thread-134981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:00:09.209 [DEBUG] [Thread-134981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:00:09.209 [DEBUG] [Thread-134981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:00:09.222 [DEBUG] [Thread-134981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:00:09.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:00:09.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')
2026-02-11T20:00:09.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:00:09.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:00:09.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:00:09.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:00:09.259 [DEBUG] [Thread-134981] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:00:14.602 [DEBUG] [Thread-134983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:00:29.651 [DEBUG] [Thread-134984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:00:36.412 [DEBUG] [Thread-134985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:00:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:00:39.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:00:39.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:00:41.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 0, 20), 6.31, 66.8, 0.0, 12.92, 19.45, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:00:41.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:00:20
2026-02-11T20:00:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:00:41.810 [DEBUG] [Thread-134986] [transport.py] [_log()] starting thread (client mode): 0xa57d5bd0
2026-02-11T20:00:41.810 [DEBUG] [Thread-134986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:00:41.829 [DEBUG] [Thread-134986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:00:41.829 [INFO] [Thread-134986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:00:41.832 [DEBUG] [Thread-134986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:00:41.832 [DEBUG] [Thread-134986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:00:41.832 [DEBUG] [Thread-134986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] client lang: <none>
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] server lang: <none>
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] kex follows: False
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] Compression: none
2026-02-11T20:00:41.833 [DEBUG] [Thread-134986] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:00:41.849 [DEBUG] [Thread-134986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:00:41.850 [DEBUG] [Thread-134986] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:00:41.850 [DEBUG] [Thread-134986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:00:41.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:00:41.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:00:41.852 [DEBUG] [Thread-134986] [transport.py] [_log()] userauth is OK
2026-02-11T20:00:41.852 [DEBUG] [Thread-134986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:00:41.853 [DEBUG] [Thread-134986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:00:41.853 [DEBUG] [Thread-134986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:00:41.853 [DEBUG] [Thread-134986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:00:41.878 [INFO] [Thread-134986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:00:41.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:00:42.517 [DEBUG] [Thread-134986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:00:42.518 [DEBUG] [Thread-134986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:00:42.518 [DEBUG] [Thread-134986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:00:42.558 [DEBUG] [Thread-134986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:00:42.559 [DEBUG] [Thread-134986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:00:42.562 [DEBUG] [Thread-134986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:00:42.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:00:42.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:00:42.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:00:42.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:00:42.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:00:42.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:00:42.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:00:42.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:00:42.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:00:42.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.750139 -999.00  +19.60   7.57     71  +14.30 1 2 1 1 1   142    0 2.04 -146.13 ----- 9.6 7.6 203.8 14.0 20.3 -18.8 20.2 -17.8 20.0 -17.3 20.2 -18.2
2026-02-11T20:00:42.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:00:42.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:00:42.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.750139
2026-02-11T20:00:42.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:00:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:00:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:00:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:00:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:00:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:00:20', tmtdew=6.31, humidity=66.8, cloud=0.0, wind=12.92, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:00:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:00:42.583 [DEBUG] [Thread-134986] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:00:42.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:00:42.680 [DEBUG] [Thread-134989] [transport.py] [_log()] starting thread (client mode): 0xa2dc16f0
2026-02-11T20:00:42.680 [DEBUG] [Thread-134989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:00:42.694 [DEBUG] [Thread-134989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:00:42.694 [INFO] [Thread-134989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:00:42.704 [DEBUG] [Thread-134989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:00:42.704 [DEBUG] [Thread-134989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:00:42.704 [DEBUG] [Thread-134989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:00:42.704 [DEBUG] [Thread-134989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:42.704 [DEBUG] [Thread-134989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:00:42.704 [DEBUG] [Thread-134989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:42.704 [DEBUG] [Thread-134989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] client lang: <none>
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] server lang: <none>
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] kex follows: False
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] Compression: none
2026-02-11T20:00:42.705 [DEBUG] [Thread-134989] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:00:42.763 [DEBUG] [Thread-134989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:00:42.764 [DEBUG] [Thread-134989] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:00:42.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:00:42.765 [DEBUG] [Thread-134989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:00:42.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:00:42.824 [DEBUG] [Thread-134989] [transport.py] [_log()] userauth is OK
2026-02-11T20:00:42.824 [DEBUG] [Thread-134989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:00:42.824 [DEBUG] [Thread-134989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:00:42.824 [DEBUG] [Thread-134989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:00:42.825 [DEBUG] [Thread-134989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:00:42.849 [INFO] [Thread-134989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:00:42.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:00:42.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:00:43.731 [DEBUG] [Thread-134989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:00:43.731 [DEBUG] [Thread-134989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:00:43.783 [DEBUG] [Thread-134989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:00:43.783 [DEBUG] [Thread-134989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:00:43.795 [DEBUG] [Thread-134989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:00:43.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:00:43.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:00:43.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
2026-02-11T20:00:43.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:00:43.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:00:43.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:00:43.850 [DEBUG] [Thread-134989] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:00:43.852 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:00:43.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:00:44.691 [DEBUG] [Thread-134991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:00:59.746 [DEBUG] [Thread-134992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:01:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:01:13.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:01:13.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:01:14.782 [DEBUG] [Thread-134993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:01:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 0, 55), 6.31, 66.8, 0.0, 10.85, 19.47, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:01:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:00:55
2026-02-11T20:01:16.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:01:16.237 [DEBUG] [Thread-134994] [transport.py] [_log()] starting thread (client mode): 0xa575b8b0
2026-02-11T20:01:16.237 [DEBUG] [Thread-134994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:01:16.258 [DEBUG] [Thread-134994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:01:16.258 [INFO] [Thread-134994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] client lang: <none>
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] server lang: <none>
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] kex follows: False
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] Compression: none
2026-02-11T20:01:16.261 [DEBUG] [Thread-134994] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:01:16.278 [DEBUG] [Thread-134994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:01:16.279 [DEBUG] [Thread-134994] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:01:16.279 [DEBUG] [Thread-134994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:01:16.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:01:16.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:01:16.281 [DEBUG] [Thread-134994] [transport.py] [_log()] userauth is OK
2026-02-11T20:01:16.281 [DEBUG] [Thread-134994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:01:16.282 [DEBUG] [Thread-134994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:01:16.282 [DEBUG] [Thread-134994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:01:16.282 [DEBUG] [Thread-134994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:01:16.316 [INFO] [Thread-134994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:01:16.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:01:16.928 [DEBUG] [Thread-134994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:01:16.928 [DEBUG] [Thread-134994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:01:16.928 [DEBUG] [Thread-134994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:01:16.969 [DEBUG] [Thread-134994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:01:16.969 [DEBUG] [Thread-134994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:01:16.972 [DEBUG] [Thread-134994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:01:16.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:01:16.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:01:16.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:01:16.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:01:16.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:01:16.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:01:16.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:01:16.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:01:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:01:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.750487 -999.00  +19.60   3.46     71  +14.40 1 2 1 1 1   131    0 2.17 -143.72 ----- 6.5 3.5 174.1 14.2 20.2 -18.8 20.2 -17.8 19.9 -17.1 20.2 -18.3
2026-02-11T20:01:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:01:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:01:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.750487
2026-02-11T20:01:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:01:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:01:16.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:01:16.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:01:16.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:01:16.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:00:55', tmtdew=6.31, humidity=66.8, cloud=0.0, wind=10.85, temperature=19.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:00:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:01:16.996 [DEBUG] [Thread-134994] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:01:17.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:01:17.092 [DEBUG] [Thread-134997] [transport.py] [_log()] starting thread (client mode): 0xa5772770
2026-02-11T20:01:17.092 [DEBUG] [Thread-134997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:01:17.106 [DEBUG] [Thread-134997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:01:17.106 [INFO] [Thread-134997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:01:17.113 [DEBUG] [Thread-134997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] client lang: <none>
2026-02-11T20:01:17.114 [DEBUG] [Thread-134997] [transport.py] [_log()] server lang: <none>
2026-02-11T20:01:17.115 [DEBUG] [Thread-134997] [transport.py] [_log()] kex follows: False
2026-02-11T20:01:17.115 [DEBUG] [Thread-134997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:01:17.115 [DEBUG] [Thread-134997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:01:17.115 [DEBUG] [Thread-134997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:01:17.115 [DEBUG] [Thread-134997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:01:17.115 [DEBUG] [Thread-134997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:01:17.116 [DEBUG] [Thread-134997] [transport.py] [_log()] Compression: none
2026-02-11T20:01:17.116 [DEBUG] [Thread-134997] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:01:17.173 [DEBUG] [Thread-134997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:01:17.173 [DEBUG] [Thread-134997] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:01:17.174 [DEBUG] [Thread-134997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:01:17.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:01:17.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:01:17.230 [DEBUG] [Thread-134997] [transport.py] [_log()] userauth is OK
2026-02-11T20:01:17.230 [DEBUG] [Thread-134997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:01:17.231 [DEBUG] [Thread-134997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:01:17.231 [DEBUG] [Thread-134997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:01:17.231 [DEBUG] [Thread-134997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:01:17.253 [INFO] [Thread-134997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:01:17.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:01:17.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:01:18.052 [DEBUG] [Thread-134997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:01:18.053 [DEBUG] [Thread-134997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:01:18.100 [DEBUG] [Thread-134997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:01:18.101 [DEBUG] [Thread-134997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:01:18.110 [DEBUG] [Thread-134997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:01:18.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:01:18.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:01:18.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:01:18.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:01:18.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:01:18.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:01:18.145 [DEBUG] [Thread-134997] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:01:29.819 [DEBUG] [Thread-134999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:01:36.470 [DEBUG] [Thread-135000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:01:44.867 [DEBUG] [Thread-135001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:01:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:01:48.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:01:48.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:01:50.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 1, 30), 6.25, 67.03, 0.0, 11.59, 19.44, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:01:50.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:01:30
2026-02-11T20:01:50.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:01:50.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:01:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:01:51.051 [DEBUG] [Thread-135002] [transport.py] [_log()] starting thread (client mode): 0xa57e0190
2026-02-11T20:01:51.051 [DEBUG] [Thread-135002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:01:51.071 [DEBUG] [Thread-135002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:01:51.071 [INFO] [Thread-135002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] client lang: <none>
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] server lang: <none>
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] kex follows: False
2026-02-11T20:01:51.075 [DEBUG] [Thread-135002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:01:51.076 [DEBUG] [Thread-135002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:01:51.076 [DEBUG] [Thread-135002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:01:51.076 [DEBUG] [Thread-135002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:01:51.076 [DEBUG] [Thread-135002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:01:51.076 [DEBUG] [Thread-135002] [transport.py] [_log()] Compression: none
2026-02-11T20:01:51.076 [DEBUG] [Thread-135002] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:01:51.094 [DEBUG] [Thread-135002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:01:51.094 [DEBUG] [Thread-135002] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:01:51.094 [DEBUG] [Thread-135002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:01:51.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:01:51.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:01:51.137 [DEBUG] [Thread-135002] [transport.py] [_log()] userauth is OK
2026-02-11T20:01:51.137 [DEBUG] [Thread-135002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:01:51.137 [DEBUG] [Thread-135002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:01:51.137 [DEBUG] [Thread-135002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:01:51.137 [DEBUG] [Thread-135002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:01:51.158 [INFO] [Thread-135002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:01:51.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:01:51.807 [DEBUG] [Thread-135002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:01:51.808 [DEBUG] [Thread-135002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:01:51.808 [DEBUG] [Thread-135002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:01:51.848 [DEBUG] [Thread-135002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:01:51.849 [DEBUG] [Thread-135002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:01:51.863 [DEBUG] [Thread-135002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:01:51.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:01:51.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:01:51.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:01:51.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:01:51.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:01:51.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:01:51.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:01:51.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:01:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:01:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.750834 -999.00  +19.50   6.14     72  +14.40 1 2 1 1 1   120    0 2.05 -141.17 ----- 3.9 6.1 215.1 11.5 20.2 -18.7 20.1 -17.6 19.9 -17.1 20.2 -18.2
2026-02-11T20:01:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:01:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:01:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.750834
2026-02-11T20:01:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:01:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:01:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:01:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:01:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:01:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:01:30', tmtdew=6.25, humidity=67.03, cloud=0.0, wind=11.59, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:01:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:01:51.893 [DEBUG] [Thread-135002] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:01:51.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:01:51.989 [DEBUG] [Thread-135005] [transport.py] [_log()] starting thread (client mode): 0xa57e19c0
2026-02-11T20:01:51.990 [DEBUG] [Thread-135005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:01:52.004 [DEBUG] [Thread-135005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:01:52.004 [INFO] [Thread-135005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:01:52.011 [DEBUG] [Thread-135005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:01:52.012 [DEBUG] [Thread-135005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:01:52.012 [DEBUG] [Thread-135005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:01:52.012 [DEBUG] [Thread-135005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:52.012 [DEBUG] [Thread-135005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] client lang: <none>
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] server lang: <none>
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] kex follows: False
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] Compression: none
2026-02-11T20:01:52.013 [DEBUG] [Thread-135005] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:01:52.070 [DEBUG] [Thread-135005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:01:52.070 [DEBUG] [Thread-135005] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:01:52.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:01:52.072 [DEBUG] [Thread-135005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:01:52.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:01:52.125 [DEBUG] [Thread-135005] [transport.py] [_log()] userauth is OK
2026-02-11T20:01:52.126 [DEBUG] [Thread-135005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:01:52.126 [DEBUG] [Thread-135005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:01:52.126 [DEBUG] [Thread-135005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:01:52.126 [DEBUG] [Thread-135005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:01:52.150 [INFO] [Thread-135005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:01:52.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:01:52.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:01:52.972 [DEBUG] [Thread-135005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:01:52.972 [DEBUG] [Thread-135005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:01:53.020 [DEBUG] [Thread-135005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:01:53.020 [DEBUG] [Thread-135005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:01:53.029 [DEBUG] [Thread-135005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:01:53.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:01:53.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')
2026-02-11T20:01:53.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
2026-02-11T20:01:53.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:01:53.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:01:53.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:01:53.062 [DEBUG] [Thread-135005] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:01:59.908 [DEBUG] [Thread-135007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:02:14.965 [DEBUG] [Thread-135008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:02:23.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:02:23.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:02:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:02:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 2, 7), 6.19, 67.31, 0.0, 11.66, 19.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:02:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:02:07
2026-02-11T20:02:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:02:25.758 [DEBUG] [Thread-135009] [transport.py] [_log()] starting thread (client mode): 0xa57d5510
2026-02-11T20:02:25.759 [DEBUG] [Thread-135009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:02:25.779 [DEBUG] [Thread-135009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:02:25.779 [INFO] [Thread-135009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:02:25.782 [DEBUG] [Thread-135009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] client lang: <none>
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] server lang: <none>
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] kex follows: False
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] Compression: none
2026-02-11T20:02:25.783 [DEBUG] [Thread-135009] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:02:25.800 [DEBUG] [Thread-135009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:02:25.800 [DEBUG] [Thread-135009] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:02:25.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:02:25.801 [DEBUG] [Thread-135009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:02:25.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:02:25.803 [DEBUG] [Thread-135009] [transport.py] [_log()] userauth is OK
2026-02-11T20:02:25.804 [DEBUG] [Thread-135009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:02:25.804 [DEBUG] [Thread-135009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:02:25.804 [DEBUG] [Thread-135009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:02:25.804 [DEBUG] [Thread-135009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:02:25.829 [INFO] [Thread-135009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:02:25.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:02:26.464 [DEBUG] [Thread-135009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:02:26.464 [DEBUG] [Thread-135009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:02:26.465 [DEBUG] [Thread-135009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:02:26.505 [DEBUG] [Thread-135009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:02:26.506 [DEBUG] [Thread-135009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:02:26.509 [DEBUG] [Thread-135009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:02:26.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:02:26.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:02:26.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:02:26.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:02:26.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:02:26.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:02:26.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:02:26.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:02:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:02:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.751528 -999.00  +19.50   9.17     73  +14.60 1 2 1 1 1   101    0 2.13 -136.94 ----- 15.7 9.2 232.7 13.8 20.2 -18.7 20.1 -17.7 19.9 -17.2 20.2 -18.1
2026-02-11T20:02:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:02:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:02:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.751528
2026-02-11T20:02:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:02:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:02:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:02:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:02:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:02:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:02:07', tmtdew=6.19, humidity=67.31, cloud=0.0, wind=11.66, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:02:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:02:26.538 [DEBUG] [Thread-135009] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:02:26.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:02:26.634 [DEBUG] [Thread-135012] [transport.py] [_log()] starting thread (client mode): 0xa5758e20
2026-02-11T20:02:26.634 [DEBUG] [Thread-135012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:02:26.648 [DEBUG] [Thread-135012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:02:26.648 [INFO] [Thread-135012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:02:26.656 [DEBUG] [Thread-135012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] client lang: <none>
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] server lang: <none>
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] kex follows: False
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] Compression: none
2026-02-11T20:02:26.657 [DEBUG] [Thread-135012] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:02:26.718 [DEBUG] [Thread-135012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:02:26.719 [DEBUG] [Thread-135012] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:02:26.719 [DEBUG] [Thread-135012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:02:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:02:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:02:26.774 [DEBUG] [Thread-135012] [transport.py] [_log()] userauth is OK
2026-02-11T20:02:26.774 [DEBUG] [Thread-135012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:02:26.774 [DEBUG] [Thread-135012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:02:26.774 [DEBUG] [Thread-135012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:02:26.774 [DEBUG] [Thread-135012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:02:26.792 [INFO] [Thread-135012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:02:26.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:02:26.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:02:27.626 [DEBUG] [Thread-135012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:02:27.626 [DEBUG] [Thread-135012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:02:27.675 [DEBUG] [Thread-135012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:02:27.675 [DEBUG] [Thread-135012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:02:27.684 [DEBUG] [Thread-135012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:02:27.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:02:27.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:02:27.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:02:27.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:02:27.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:02:27.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:02:27.723 [DEBUG] [Thread-135012] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:02:30.003 [DEBUG] [Thread-135014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:02:36.543 [DEBUG] [Thread-135015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:02:45.055 [DEBUG] [Thread-135016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:02:55.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:02:55.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:02:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:02:57.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:02:57.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:02:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 2, 42), 6.33, 66.82, 0.0, 17.54, 19.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:02:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:02:42
2026-02-11T20:02:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:03:00.089 [DEBUG] [Thread-135017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:03:00.143 [DEBUG] [Thread-135018] [transport.py] [_log()] starting thread (client mode): 0xa2dc3a90
2026-02-11T20:03:00.143 [DEBUG] [Thread-135018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:03:00.163 [DEBUG] [Thread-135018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:03:00.163 [INFO] [Thread-135018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:03:00.167 [DEBUG] [Thread-135018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:03:00.167 [DEBUG] [Thread-135018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:03:00.167 [DEBUG] [Thread-135018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] client lang: <none>
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] server lang: <none>
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] kex follows: False
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] Compression: none
2026-02-11T20:03:00.168 [DEBUG] [Thread-135018] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:03:00.185 [DEBUG] [Thread-135018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:03:00.185 [DEBUG] [Thread-135018] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:03:00.186 [DEBUG] [Thread-135018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:03:00.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:03:00.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:03:00.229 [DEBUG] [Thread-135018] [transport.py] [_log()] userauth is OK
2026-02-11T20:03:00.229 [DEBUG] [Thread-135018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:03:00.229 [DEBUG] [Thread-135018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:03:00.230 [DEBUG] [Thread-135018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:03:00.230 [DEBUG] [Thread-135018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:03:00.261 [INFO] [Thread-135018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:03:00.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:03:00.903 [DEBUG] [Thread-135018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:03:00.904 [DEBUG] [Thread-135018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:03:00.904 [DEBUG] [Thread-135018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:03:00.944 [DEBUG] [Thread-135018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:03:00.944 [DEBUG] [Thread-135018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:03:00.947 [DEBUG] [Thread-135018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:03:00.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:03:00.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:03:00.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:03:00.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:03:00.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:03:00.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:03:00.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:03:00.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:03:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:03:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.751875 -999.00  +19.50   7.96     73  +14.60 1 2 1 1 1    93    0 2.09 -136.58 ----- 9.1 8.0 180.9 13.8 20.2 -18.7 20.1 -18.1 19.9 -17.2 20.1 -18.3
2026-02-11T20:03:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:03:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:03:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.751875
2026-02-11T20:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:02:42', tmtdew=6.33, humidity=66.82, cloud=0.0, wind=17.54, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:02:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:03:00.973 [DEBUG] [Thread-135018] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:03:01.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:03:01.067 [DEBUG] [Thread-135021] [transport.py] [_log()] starting thread (client mode): 0xa57e0b20
2026-02-11T20:03:01.068 [DEBUG] [Thread-135021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:03:01.082 [DEBUG] [Thread-135021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:03:01.082 [INFO] [Thread-135021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:03:01.090 [DEBUG] [Thread-135021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:03:01.090 [DEBUG] [Thread-135021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:03:01.090 [DEBUG] [Thread-135021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:03:01.090 [DEBUG] [Thread-135021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:01.090 [DEBUG] [Thread-135021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] client lang: <none>
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] server lang: <none>
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] kex follows: False
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:03:01.091 [DEBUG] [Thread-135021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:03:01.092 [DEBUG] [Thread-135021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:03:01.092 [DEBUG] [Thread-135021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:03:01.092 [DEBUG] [Thread-135021] [transport.py] [_log()] Compression: none
2026-02-11T20:03:01.092 [DEBUG] [Thread-135021] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:03:01.148 [DEBUG] [Thread-135021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:03:01.148 [DEBUG] [Thread-135021] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:03:01.148 [DEBUG] [Thread-135021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:03:01.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:03:01.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:03:01.206 [DEBUG] [Thread-135021] [transport.py] [_log()] userauth is OK
2026-02-11T20:03:01.206 [DEBUG] [Thread-135021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:03:01.206 [DEBUG] [Thread-135021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:03:01.206 [DEBUG] [Thread-135021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:03:01.206 [DEBUG] [Thread-135021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:03:01.226 [INFO] [Thread-135021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:03:01.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:03:01.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:03:02.117 [DEBUG] [Thread-135021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:03:02.117 [DEBUG] [Thread-135021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:03:02.165 [DEBUG] [Thread-135021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:03:02.166 [DEBUG] [Thread-135021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:03:02.175 [DEBUG] [Thread-135021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:03:02.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:03:02.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:03:02.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:03:02.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:03:02.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:03:02.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:03:02.212 [DEBUG] [Thread-135021] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:03:15.121 [DEBUG] [Thread-135023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:03:30.173 [DEBUG] [Thread-135024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:03:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:03:32.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:03:32.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:03:34.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 3, 17), 5.69, 69.16, 0.0, 20.24, 19.37, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:03:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:03:17
2026-02-11T20:03:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:03:34.661 [DEBUG] [Thread-135025] [transport.py] [_log()] starting thread (client mode): 0xa2dc35b0
2026-02-11T20:03:34.661 [DEBUG] [Thread-135025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:03:34.680 [DEBUG] [Thread-135025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:03:34.680 [INFO] [Thread-135025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:03:34.683 [DEBUG] [Thread-135025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] client lang: <none>
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] server lang: <none>
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] kex follows: False
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:03:34.684 [DEBUG] [Thread-135025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:03:34.685 [DEBUG] [Thread-135025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:03:34.685 [DEBUG] [Thread-135025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:03:34.685 [DEBUG] [Thread-135025] [transport.py] [_log()] Compression: none
2026-02-11T20:03:34.685 [DEBUG] [Thread-135025] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:03:34.702 [DEBUG] [Thread-135025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:03:34.703 [DEBUG] [Thread-135025] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:03:34.703 [DEBUG] [Thread-135025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:03:34.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:03:34.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:03:34.705 [DEBUG] [Thread-135025] [transport.py] [_log()] userauth is OK
2026-02-11T20:03:34.705 [DEBUG] [Thread-135025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:03:34.705 [DEBUG] [Thread-135025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:03:34.705 [DEBUG] [Thread-135025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:03:34.705 [DEBUG] [Thread-135025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:03:34.729 [INFO] [Thread-135025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:03:34.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:03:35.512 [DEBUG] [Thread-135025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:03:35.512 [DEBUG] [Thread-135025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:03:35.512 [DEBUG] [Thread-135025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:03:35.552 [DEBUG] [Thread-135025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:03:35.553 [DEBUG] [Thread-135025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:03:35.556 [DEBUG] [Thread-135025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:03:35.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:03:35.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:03:35.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:03:35.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:03:35.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:03:35.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:03:35.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:03:35.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:03:35.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:03:35.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.752223 -999.00  +19.40   6.03     75  +14.90 1 2 1 1 1    85    0 1.92 -139.81 ----- 6.5 6.0 256.9 19.8 20.2 -18.9 20.1 -17.9 19.9 -17.4 20.1 -18.5
2026-02-11T20:03:35.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:03:35.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:03:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.752223
2026-02-11T20:03:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:03:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:03:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:03:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:03:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:03:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:03:17', tmtdew=5.69, humidity=69.16, cloud=0.0, wind=20.24, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:03:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:03:35.584 [DEBUG] [Thread-135025] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:03:35.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:03:35.680 [DEBUG] [Thread-135028] [transport.py] [_log()] starting thread (client mode): 0xa57e3520
2026-02-11T20:03:35.680 [DEBUG] [Thread-135028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:03:35.694 [DEBUG] [Thread-135028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:03:35.695 [INFO] [Thread-135028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:03:35.702 [DEBUG] [Thread-135028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:03:35.703 [DEBUG] [Thread-135028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:03:35.703 [DEBUG] [Thread-135028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:03:35.703 [DEBUG] [Thread-135028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:35.703 [DEBUG] [Thread-135028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:03:35.703 [DEBUG] [Thread-135028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:35.703 [DEBUG] [Thread-135028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:03:35.703 [DEBUG] [Thread-135028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] client lang: <none>
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] server lang: <none>
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] kex follows: False
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:03:35.704 [DEBUG] [Thread-135028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:03:35.705 [DEBUG] [Thread-135028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:03:35.705 [DEBUG] [Thread-135028] [transport.py] [_log()] Compression: none
2026-02-11T20:03:35.705 [DEBUG] [Thread-135028] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:03:35.762 [DEBUG] [Thread-135028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:03:35.763 [DEBUG] [Thread-135028] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:03:35.763 [DEBUG] [Thread-135028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:03:35.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:03:35.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:03:35.818 [DEBUG] [Thread-135028] [transport.py] [_log()] userauth is OK
2026-02-11T20:03:35.819 [DEBUG] [Thread-135028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:03:35.819 [DEBUG] [Thread-135028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:03:35.819 [DEBUG] [Thread-135028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:03:35.819 [DEBUG] [Thread-135028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:03:35.837 [INFO] [Thread-135028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:03:35.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:03:35.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:03:36.610 [DEBUG] [Thread-135030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:03:36.677 [DEBUG] [Thread-135028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:03:36.677 [DEBUG] [Thread-135028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:03:36.726 [DEBUG] [Thread-135028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:03:36.726 [DEBUG] [Thread-135028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:03:36.737 [DEBUG] [Thread-135028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:03:36.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:03:36.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:03:36.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:03:36.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:03:36.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:03:36.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:03:36.774 [DEBUG] [Thread-135028] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:03:45.212 [DEBUG] [Thread-135031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:03:59.573 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:03:59.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:04:00.262 [DEBUG] [Thread-135032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:04:06.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:04:06.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:04:06.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:04:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 3, 53), 5.25, 71.75, 0.0, 20.89, 19.17, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:04:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:03:53
2026-02-11T20:04:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:04:09.417 [DEBUG] [Thread-135033] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fd0
2026-02-11T20:04:09.418 [DEBUG] [Thread-135033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:04:09.436 [DEBUG] [Thread-135033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:04:09.437 [INFO] [Thread-135033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] client lang: <none>
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] server lang: <none>
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] kex follows: False
2026-02-11T20:04:09.440 [DEBUG] [Thread-135033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:04:09.441 [DEBUG] [Thread-135033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:04:09.441 [DEBUG] [Thread-135033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:04:09.441 [DEBUG] [Thread-135033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:04:09.441 [DEBUG] [Thread-135033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:04:09.441 [DEBUG] [Thread-135033] [transport.py] [_log()] Compression: none
2026-02-11T20:04:09.441 [DEBUG] [Thread-135033] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:04:09.460 [DEBUG] [Thread-135033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:04:09.461 [DEBUG] [Thread-135033] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:04:09.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:04:09.463 [DEBUG] [Thread-135033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:04:09.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:04:09.465 [DEBUG] [Thread-135033] [transport.py] [_log()] userauth is OK
2026-02-11T20:04:09.465 [DEBUG] [Thread-135033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:04:09.465 [DEBUG] [Thread-135033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:04:09.465 [DEBUG] [Thread-135033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:04:09.466 [DEBUG] [Thread-135033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:04:09.490 [INFO] [Thread-135033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:04:09.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:04:10.120 [DEBUG] [Thread-135033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:04:10.120 [DEBUG] [Thread-135033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:04:10.121 [DEBUG] [Thread-135033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:04:10.161 [DEBUG] [Thread-135033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:04:10.161 [DEBUG] [Thread-135033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:04:10.165 [DEBUG] [Thread-135033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:04:10.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:04:10.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:04:10.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:04:10.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:04:10.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:04:10.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:04:10.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:04:10.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:04:10.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:04:10.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.752570 -999.00  +19.30  14.67     76  +15.10 1 2 1 1 1    77    0 1.87 -142.80 ----- 12.8 14.7 191.6 19.0 20.1 -19.0 20.1 -18.3 19.8 -17.6 20.1 -18.4
2026-02-11T20:04:10.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:04:10.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:04:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.752570
2026-02-11T20:04:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:04:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:04:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:04:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:04:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:04:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:03:53', tmtdew=5.25, humidity=71.75, cloud=0.0, wind=20.89, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:03:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:04:10.191 [DEBUG] [Thread-135033] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:04:10.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:04:10.288 [DEBUG] [Thread-135036] [transport.py] [_log()] starting thread (client mode): 0xa2dc0c10
2026-02-11T20:04:10.288 [DEBUG] [Thread-135036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:04:10.302 [DEBUG] [Thread-135036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:04:10.302 [INFO] [Thread-135036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] client lang: <none>
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] server lang: <none>
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] kex follows: False
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:04:10.312 [DEBUG] [Thread-135036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:04:10.313 [DEBUG] [Thread-135036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:04:10.313 [DEBUG] [Thread-135036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:04:10.313 [DEBUG] [Thread-135036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:04:10.313 [DEBUG] [Thread-135036] [transport.py] [_log()] Compression: none
2026-02-11T20:04:10.313 [DEBUG] [Thread-135036] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:04:10.371 [DEBUG] [Thread-135036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:04:10.372 [DEBUG] [Thread-135036] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:04:10.372 [DEBUG] [Thread-135036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:04:10.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:04:10.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:04:10.430 [DEBUG] [Thread-135036] [transport.py] [_log()] userauth is OK
2026-02-11T20:04:10.431 [DEBUG] [Thread-135036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:04:10.431 [DEBUG] [Thread-135036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:04:10.431 [DEBUG] [Thread-135036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:04:10.431 [DEBUG] [Thread-135036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:04:10.450 [INFO] [Thread-135036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:04:10.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:04:10.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:04:11.283 [DEBUG] [Thread-135036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:04:11.283 [DEBUG] [Thread-135036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:04:11.331 [DEBUG] [Thread-135036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:04:11.332 [DEBUG] [Thread-135036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:04:11.342 [DEBUG] [Thread-135036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:04:11.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:04:11.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:04:11.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:04:11.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:04:11.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:04:11.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:04:11.382 [DEBUG] [Thread-135036] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:04:15.299 [DEBUG] [Thread-135038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:04:30.349 [DEBUG] [Thread-135039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:04:36.693 [DEBUG] [Thread-135040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:04:41.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:04:41.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:04:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:04:43.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 4, 29), 5.07, 72.55, 0.0, 18.32, 19.07, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:04:43.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:04:29
2026-02-11T20:04:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:04:43.995 [DEBUG] [Thread-135041] [transport.py] [_log()] starting thread (client mode): 0xa2db5600
2026-02-11T20:04:43.995 [DEBUG] [Thread-135041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:04:44.016 [DEBUG] [Thread-135041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:04:44.016 [INFO] [Thread-135041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:44.019 [DEBUG] [Thread-135041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] client lang: <none>
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] server lang: <none>
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] kex follows: False
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] Compression: none
2026-02-11T20:04:44.020 [DEBUG] [Thread-135041] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:04:44.038 [DEBUG] [Thread-135041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:04:44.038 [DEBUG] [Thread-135041] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:04:44.039 [DEBUG] [Thread-135041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:04:44.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:04:44.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:04:44.041 [DEBUG] [Thread-135041] [transport.py] [_log()] userauth is OK
2026-02-11T20:04:44.041 [DEBUG] [Thread-135041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:04:44.041 [DEBUG] [Thread-135041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:04:44.041 [DEBUG] [Thread-135041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:04:44.041 [DEBUG] [Thread-135041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:04:44.066 [INFO] [Thread-135041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:04:44.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:04:44.673 [DEBUG] [Thread-135041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:04:44.673 [DEBUG] [Thread-135041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:04:44.674 [DEBUG] [Thread-135041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:04:44.716 [DEBUG] [Thread-135041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:04:44.716 [DEBUG] [Thread-135041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:04:44.719 [DEBUG] [Thread-135041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:04:44.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:04:44.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:04:44.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:04:44.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:04:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:04:44.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:04:44.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:04:44.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:04:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:04:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.752917 -999.00  +19.20  10.03     77  +15.10 1 2 1 1 1    71    0 1.54 -148.31 ----- 7.1 10.0 221.3 19.0 20.1 -18.7 20.0 -17.8 19.8 -17.4 20.1 -18.1
2026-02-11T20:04:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:04:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:04:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.752917
2026-02-11T20:04:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:04:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:04:44.743 [DEBUG] [Thread-135041] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:04:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:04:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:04:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:04:44.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:04:29', tmtdew=5.07, humidity=72.55, cloud=0.0, wind=18.32, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:04:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:04:44.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:04:44.842 [DEBUG] [Thread-135044] [transport.py] [_log()] starting thread (client mode): 0x9eb04ca0
2026-02-11T20:04:44.842 [DEBUG] [Thread-135044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:04:44.857 [DEBUG] [Thread-135044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:04:44.858 [INFO] [Thread-135044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:04:44.870 [DEBUG] [Thread-135044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:04:44.870 [DEBUG] [Thread-135044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] client lang: <none>
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] server lang: <none>
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] kex follows: False
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:04:44.871 [DEBUG] [Thread-135044] [transport.py] [_log()] Compression: none
2026-02-11T20:04:44.872 [DEBUG] [Thread-135044] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:04:44.927 [DEBUG] [Thread-135044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:04:44.928 [DEBUG] [Thread-135044] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:04:44.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:04:44.929 [DEBUG] [Thread-135044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:04:44.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:04:44.989 [DEBUG] [Thread-135044] [transport.py] [_log()] userauth is OK
2026-02-11T20:04:44.989 [DEBUG] [Thread-135044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:04:44.989 [DEBUG] [Thread-135044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:04:44.989 [DEBUG] [Thread-135044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:04:44.989 [DEBUG] [Thread-135044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:04:45.014 [INFO] [Thread-135044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:04:45.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:04:45.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:04:45.389 [DEBUG] [Thread-135046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:04:45.836 [DEBUG] [Thread-135044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:04:45.837 [DEBUG] [Thread-135044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:04:45.884 [DEBUG] [Thread-135044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:04:45.885 [DEBUG] [Thread-135044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:04:45.894 [DEBUG] [Thread-135044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:04:45.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:04:45.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:04:45.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:04:45.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:04:45.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:04:45.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:04:45.939 [DEBUG] [Thread-135044] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:05:00.442 [DEBUG] [Thread-135047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:05:04.278 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:05:04.280 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:05:15.481 [DEBUG] [Thread-135048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:05:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:05:15.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:05:15.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:05:17.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 5, 5), 5.01, 72.81, 0.0, 18.42, 19.02, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:05:17.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:05:05
2026-02-11T20:05:18.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:05:18.324 [DEBUG] [Thread-135049] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-11T20:05:18.324 [DEBUG] [Thread-135049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:05:18.344 [DEBUG] [Thread-135049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:05:18.344 [INFO] [Thread-135049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] client lang: <none>
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] server lang: <none>
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] kex follows: False
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:05:18.347 [DEBUG] [Thread-135049] [transport.py] [_log()] Compression: none
2026-02-11T20:05:18.348 [DEBUG] [Thread-135049] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:05:18.364 [DEBUG] [Thread-135049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:05:18.365 [DEBUG] [Thread-135049] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:05:18.365 [DEBUG] [Thread-135049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:05:18.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:05:18.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:05:18.367 [DEBUG] [Thread-135049] [transport.py] [_log()] userauth is OK
2026-02-11T20:05:18.368 [DEBUG] [Thread-135049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:05:18.368 [DEBUG] [Thread-135049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:05:18.368 [DEBUG] [Thread-135049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:05:18.368 [DEBUG] [Thread-135049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:05:18.405 [INFO] [Thread-135049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:05:18.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:05:19.039 [DEBUG] [Thread-135049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:05:19.040 [DEBUG] [Thread-135049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:05:19.040 [DEBUG] [Thread-135049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:05:19.080 [DEBUG] [Thread-135049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:05:19.080 [DEBUG] [Thread-135049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:05:19.083 [DEBUG] [Thread-135049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:05:19.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:05:19.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:05:19.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:05:19.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:05:19.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:05:19.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:05:19.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:05:19.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:05:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:05:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.753264 -999.00  +19.10   7.33     77  +15.10 1 2 1 1 1    65    0 1.25 -153.91 ----- 11.3 7.3 229.9 15.6 20.1 -18.8 20.0 -18.5 19.8 -17.3 20.1 -18.3
2026-02-11T20:05:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:05:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:05:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.753264
2026-02-11T20:05:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:05:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:05:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:05:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:05:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:05:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:05:05', tmtdew=5.01, humidity=72.81, cloud=0.0, wind=18.42, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:04:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:05:19.111 [DEBUG] [Thread-135049] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:05:19.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:05:19.206 [DEBUG] [Thread-135052] [transport.py] [_log()] starting thread (client mode): 0xa2dc3c40
2026-02-11T20:05:19.206 [DEBUG] [Thread-135052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:05:19.220 [DEBUG] [Thread-135052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:05:19.221 [INFO] [Thread-135052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:05:19.228 [DEBUG] [Thread-135052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:05:19.228 [DEBUG] [Thread-135052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:05:19.228 [DEBUG] [Thread-135052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:05:19.228 [DEBUG] [Thread-135052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:19.228 [DEBUG] [Thread-135052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:19.228 [DEBUG] [Thread-135052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] client lang: <none>
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] server lang: <none>
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] kex follows: False
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] Compression: none
2026-02-11T20:05:19.229 [DEBUG] [Thread-135052] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:05:19.290 [DEBUG] [Thread-135052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:05:19.291 [DEBUG] [Thread-135052] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:05:19.291 [DEBUG] [Thread-135052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:05:19.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:05:19.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:05:19.347 [DEBUG] [Thread-135052] [transport.py] [_log()] userauth is OK
2026-02-11T20:05:19.347 [DEBUG] [Thread-135052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:05:19.347 [DEBUG] [Thread-135052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:05:19.347 [DEBUG] [Thread-135052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:05:19.347 [DEBUG] [Thread-135052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:05:19.367 [INFO] [Thread-135052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:05:19.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:05:19.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:05:20.220 [DEBUG] [Thread-135052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:05:20.220 [DEBUG] [Thread-135052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:05:20.268 [DEBUG] [Thread-135052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:05:20.268 [DEBUG] [Thread-135052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:05:20.278 [DEBUG] [Thread-135052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:05:20.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:05:20.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:05:20.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:05:20.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:05:20.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:05:20.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:05:20.313 [DEBUG] [Thread-135052] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:05:30.513 [DEBUG] [Thread-135054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:05:36.771 [DEBUG] [Thread-135055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:05:45.564 [DEBUG] [Thread-135056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:05:50.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:05:50.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:05:50.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:05:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 5, 41), 4.85, 73.42, 0.0, 17.01, 19.21, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:05:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:05:41
2026-02-11T20:05:52.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:05:53.131 [DEBUG] [Thread-135057] [transport.py] [_log()] starting thread (client mode): 0xa57e0670
2026-02-11T20:05:53.131 [DEBUG] [Thread-135057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:05:53.150 [DEBUG] [Thread-135057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:05:53.150 [INFO] [Thread-135057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:05:53.153 [DEBUG] [Thread-135057] [transport.py] [_log()] client lang: <none>
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] server lang: <none>
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] kex follows: False
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] Compression: none
2026-02-11T20:05:53.154 [DEBUG] [Thread-135057] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:05:53.170 [DEBUG] [Thread-135057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:05:53.170 [DEBUG] [Thread-135057] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:05:53.171 [DEBUG] [Thread-135057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:05:53.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:05:53.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:05:53.172 [DEBUG] [Thread-135057] [transport.py] [_log()] userauth is OK
2026-02-11T20:05:53.172 [DEBUG] [Thread-135057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:05:53.173 [DEBUG] [Thread-135057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:05:53.173 [DEBUG] [Thread-135057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:05:53.173 [DEBUG] [Thread-135057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:05:53.190 [INFO] [Thread-135057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:05:53.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:05:53.829 [DEBUG] [Thread-135057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:05:53.829 [DEBUG] [Thread-135057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:05:53.830 [DEBUG] [Thread-135057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:05:53.870 [DEBUG] [Thread-135057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:05:53.870 [DEBUG] [Thread-135057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:05:53.873 [DEBUG] [Thread-135057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:05:53.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:05:53.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:05:53.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:05:53.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:05:53.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:05:53.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:05:53.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:05:53.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:05:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:05:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.753612 -999.00  +19.10   8.60     77  +15.10 1 2 1 1 1    59    0 1.12 -151.88 ----- 6.8 8.6 187.8 11.9 20.0 -18.9 20.0 -17.8 19.7 -17.4 20.0 -18.3
2026-02-11T20:05:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:05:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:05:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.753612
2026-02-11T20:05:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:05:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:05:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:05:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:05:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:05:53.898 [DEBUG] [Thread-135057] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:05:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:05:41', tmtdew=4.85, humidity=73.42, cloud=0.0, wind=17.01, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:05:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:05:53.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:05:53.995 [DEBUG] [Thread-135060] [transport.py] [_log()] starting thread (client mode): 0xa2d5d570
2026-02-11T20:05:53.995 [DEBUG] [Thread-135060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:05:54.010 [DEBUG] [Thread-135060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:05:54.010 [INFO] [Thread-135060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:05:54.017 [DEBUG] [Thread-135060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] client lang: <none>
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] server lang: <none>
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] kex follows: False
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] Compression: none
2026-02-11T20:05:54.018 [DEBUG] [Thread-135060] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:05:54.075 [DEBUG] [Thread-135060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:05:54.075 [DEBUG] [Thread-135060] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:05:54.076 [DEBUG] [Thread-135060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:05:54.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:05:54.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:05:54.130 [DEBUG] [Thread-135060] [transport.py] [_log()] userauth is OK
2026-02-11T20:05:54.131 [DEBUG] [Thread-135060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:05:54.131 [DEBUG] [Thread-135060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:05:54.131 [DEBUG] [Thread-135060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:05:54.131 [DEBUG] [Thread-135060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:05:54.150 [INFO] [Thread-135060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:05:54.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:05:54.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:05:54.970 [DEBUG] [Thread-135060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:05:54.970 [DEBUG] [Thread-135060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:05:55.018 [DEBUG] [Thread-135060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:05:55.018 [DEBUG] [Thread-135060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:05:55.028 [DEBUG] [Thread-135060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:05:55.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:05:55.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')
2026-02-11T20:05:55.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:05:55.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:05:55.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:05:55.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:05:55.064 [DEBUG] [Thread-135060] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:06:00.602 [DEBUG] [Thread-135062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:06:08.239 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:06:08.241 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:06:15.655 [DEBUG] [Thread-135063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:06:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:06:25.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:06:25.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:06:27.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 6, 16), 4.49, 75.11, 0.0, 19.99, 18.76, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:06:27.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:06:16
2026-02-11T20:06:27.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:06:27.887 [DEBUG] [Thread-135064] [transport.py] [_log()] starting thread (client mode): 0xa2d5e7d0
2026-02-11T20:06:27.887 [DEBUG] [Thread-135064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:06:27.907 [DEBUG] [Thread-135064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:06:27.907 [INFO] [Thread-135064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:06:27.910 [DEBUG] [Thread-135064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] client lang: <none>
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] server lang: <none>
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] kex follows: False
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] Compression: none
2026-02-11T20:06:27.911 [DEBUG] [Thread-135064] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:06:27.928 [DEBUG] [Thread-135064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:06:27.928 [DEBUG] [Thread-135064] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:06:27.929 [DEBUG] [Thread-135064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:06:27.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:06:27.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:06:27.931 [DEBUG] [Thread-135064] [transport.py] [_log()] userauth is OK
2026-02-11T20:06:27.932 [DEBUG] [Thread-135064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:06:27.932 [DEBUG] [Thread-135064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:06:27.932 [DEBUG] [Thread-135064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:06:27.932 [DEBUG] [Thread-135064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:06:27.947 [INFO] [Thread-135064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:06:27.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:06:28.711 [DEBUG] [Thread-135064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:06:28.712 [DEBUG] [Thread-135064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:06:28.712 [DEBUG] [Thread-135064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:06:28.752 [DEBUG] [Thread-135064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:06:28.752 [DEBUG] [Thread-135064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:06:28.756 [DEBUG] [Thread-135064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:06:28.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:06:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:06:28.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:06:28.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:06:28.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:06:28.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:06:28.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:06:28.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:06:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:06:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.753959 -999.00  +19.00  12.95     78  +15.10 1 2 1 1 1    54    0 1.04 -160.44 ----- 12.4 12.9 214.6 16.2 20.0 -18.9 19.9 -18.1 19.7 -17.4 20.0 -18.3
2026-02-11T20:06:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:06:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:06:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.753959
2026-02-11T20:06:28.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:06:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:06:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:06:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:06:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:06:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:06:16', tmtdew=4.49, humidity=75.11, cloud=0.0, wind=19.99, temperature=18.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:05:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:06:28.785 [DEBUG] [Thread-135064] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:06:28.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:06:28.874 [DEBUG] [Thread-135067] [transport.py] [_log()] starting thread (client mode): 0xa57593c0
2026-02-11T20:06:28.875 [DEBUG] [Thread-135067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:06:28.888 [DEBUG] [Thread-135067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:06:28.889 [INFO] [Thread-135067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:06:28.896 [DEBUG] [Thread-135067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:06:28.896 [DEBUG] [Thread-135067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:06:28.896 [DEBUG] [Thread-135067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] client lang: <none>
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] server lang: <none>
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] kex follows: False
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] Compression: none
2026-02-11T20:06:28.897 [DEBUG] [Thread-135067] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:06:28.955 [DEBUG] [Thread-135067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:06:28.955 [DEBUG] [Thread-135067] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:06:28.956 [DEBUG] [Thread-135067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:06:28.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:06:28.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:06:29.011 [DEBUG] [Thread-135067] [transport.py] [_log()] userauth is OK
2026-02-11T20:06:29.011 [DEBUG] [Thread-135067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:06:29.011 [DEBUG] [Thread-135067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:06:29.012 [DEBUG] [Thread-135067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:06:29.012 [DEBUG] [Thread-135067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:06:29.030 [INFO] [Thread-135067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:06:29.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:06:29.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:06:29.867 [DEBUG] [Thread-135067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:06:29.867 [DEBUG] [Thread-135067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:06:29.915 [DEBUG] [Thread-135067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:06:29.916 [DEBUG] [Thread-135067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:06:29.926 [DEBUG] [Thread-135067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:06:29.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:06:29.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:06:29.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:06:29.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:06:29.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:06:29.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:06:29.962 [DEBUG] [Thread-135067] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:06:30.691 [DEBUG] [Thread-135069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:06:36.840 [DEBUG] [Thread-135070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:06:45.744 [DEBUG] [Thread-135071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:06:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:06:59.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:06:59.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:07:00.781 [DEBUG] [Thread-135072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:07:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 6, 52), 4.28, 75.87, 0.0, 18.7, 18.56, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:07:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:06:52
2026-02-11T20:07:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:07:02.354 [DEBUG] [Thread-135073] [transport.py] [_log()] starting thread (client mode): 0xa2dc16c0
2026-02-11T20:07:02.354 [DEBUG] [Thread-135073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:07:02.373 [DEBUG] [Thread-135073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:07:02.374 [INFO] [Thread-135073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:07:02.376 [DEBUG] [Thread-135073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] client lang: <none>
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] server lang: <none>
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] kex follows: False
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] Compression: none
2026-02-11T20:07:02.377 [DEBUG] [Thread-135073] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:07:02.394 [DEBUG] [Thread-135073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:07:02.395 [DEBUG] [Thread-135073] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:07:02.395 [DEBUG] [Thread-135073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:07:02.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:07:02.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:07:02.397 [DEBUG] [Thread-135073] [transport.py] [_log()] userauth is OK
2026-02-11T20:07:02.397 [DEBUG] [Thread-135073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:07:02.397 [DEBUG] [Thread-135073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:07:02.397 [DEBUG] [Thread-135073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:07:02.398 [DEBUG] [Thread-135073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:07:02.423 [INFO] [Thread-135073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:07:02.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:07:03.082 [DEBUG] [Thread-135073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:07:03.083 [DEBUG] [Thread-135073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:07:03.083 [DEBUG] [Thread-135073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:07:03.123 [DEBUG] [Thread-135073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:07:03.123 [DEBUG] [Thread-135073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:07:03.125 [DEBUG] [Thread-135073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:07:03.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:07:03.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:07:03.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:07:03.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:07:03.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:07:03.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:07:03.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:07:03.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:07:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:07:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.754306 -999.00  +18.90   8.83     78  +15.20 1 2 1 1 1    49    0 0.60 -168.20 ----- 9.4 8.8 233.9 18.9 20.0 -19.0 19.9 -18.0 19.7 -17.4 19.9 -18.4
2026-02-11T20:07:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:07:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:07:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.754306
2026-02-11T20:07:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:07:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:07:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:07:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:07:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:07:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:06:52', tmtdew=4.28, humidity=75.87, cloud=0.0, wind=18.7, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:06:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:07:03.148 [DEBUG] [Thread-135073] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:07:03.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:07:03.246 [DEBUG] [Thread-135076] [transport.py] [_log()] starting thread (client mode): 0xa57e3dc0
2026-02-11T20:07:03.246 [DEBUG] [Thread-135076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:07:03.261 [DEBUG] [Thread-135076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:07:03.261 [INFO] [Thread-135076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] client lang: <none>
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] server lang: <none>
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] kex follows: False
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:07:03.268 [DEBUG] [Thread-135076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:07:03.269 [DEBUG] [Thread-135076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:07:03.269 [DEBUG] [Thread-135076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:07:03.269 [DEBUG] [Thread-135076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:07:03.269 [DEBUG] [Thread-135076] [transport.py] [_log()] Compression: none
2026-02-11T20:07:03.269 [DEBUG] [Thread-135076] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:07:03.325 [DEBUG] [Thread-135076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:07:03.326 [DEBUG] [Thread-135076] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:07:03.326 [DEBUG] [Thread-135076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:07:03.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:07:03.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:07:03.382 [DEBUG] [Thread-135076] [transport.py] [_log()] userauth is OK
2026-02-11T20:07:03.382 [DEBUG] [Thread-135076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:07:03.383 [DEBUG] [Thread-135076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:07:03.383 [DEBUG] [Thread-135076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:07:03.383 [DEBUG] [Thread-135076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:07:03.401 [INFO] [Thread-135076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:07:03.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:07:03.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:07:04.239 [DEBUG] [Thread-135076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:07:04.239 [DEBUG] [Thread-135076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:07:04.287 [DEBUG] [Thread-135076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:07:04.287 [DEBUG] [Thread-135076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:07:04.296 [DEBUG] [Thread-135076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:07:04.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:07:04.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:07:04.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
2026-02-11T20:07:04.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:07:04.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:07:04.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:07:04.330 [DEBUG] [Thread-135076] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:07:13.471 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:07:13.472 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:07:15.816 [DEBUG] [Thread-135078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:07:30.871 [DEBUG] [Thread-135079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:07:34.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:07:34.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:07:34.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:07:36.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 7, 28), 4.22, 76.19, 0.0, 20.03, 18.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:07:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:07:28
2026-02-11T20:07:36.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:07:36.654 [DEBUG] [Thread-135080] [transport.py] [_log()] starting thread (client mode): 0xa2db6560
2026-02-11T20:07:36.654 [DEBUG] [Thread-135080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:07:36.675 [DEBUG] [Thread-135080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:07:36.675 [INFO] [Thread-135080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] client lang: <none>
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] server lang: <none>
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] kex follows: False
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] Compression: none
2026-02-11T20:07:36.678 [DEBUG] [Thread-135080] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:07:36.695 [DEBUG] [Thread-135080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:07:36.695 [DEBUG] [Thread-135080] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:07:36.696 [DEBUG] [Thread-135080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:07:36.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:07:36.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:07:36.698 [DEBUG] [Thread-135080] [transport.py] [_log()] userauth is OK
2026-02-11T20:07:36.698 [DEBUG] [Thread-135080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:07:36.698 [DEBUG] [Thread-135080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:07:36.698 [DEBUG] [Thread-135080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:07:36.698 [DEBUG] [Thread-135080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:07:36.722 [INFO] [Thread-135080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:07:36.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:07:36.919 [DEBUG] [Thread-135082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:07:37.362 [DEBUG] [Thread-135080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:07:37.362 [DEBUG] [Thread-135080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:07:37.363 [DEBUG] [Thread-135080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:07:37.403 [DEBUG] [Thread-135080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:07:37.403 [DEBUG] [Thread-135080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:07:37.406 [DEBUG] [Thread-135080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:07:37.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:07:37.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:07:37.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:07:37.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:07:37.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:07:37.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:07:37.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:07:37.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:07:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:07:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.754654 -999.00  +18.80   5.34     79  +15.10 1 2 1 1 1    45    0 0.52 -172.07 ----- 9.7 5.3 224.4 18.4 19.9 -19.0 19.8 -18.0 19.6 -17.4 19.9 -18.5
2026-02-11T20:07:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:07:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:07:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.754654
2026-02-11T20:07:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:07:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:07:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:07:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:07:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:07:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:07:28', tmtdew=4.22, humidity=76.19, cloud=0.0, wind=20.03, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:06:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:07:37.430 [DEBUG] [Thread-135080] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:07:37.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:07:37.524 [DEBUG] [Thread-135084] [transport.py] [_log()] starting thread (client mode): 0xa2dc3400
2026-02-11T20:07:37.524 [DEBUG] [Thread-135084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:07:37.539 [DEBUG] [Thread-135084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:07:37.539 [INFO] [Thread-135084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:07:37.546 [DEBUG] [Thread-135084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:07:37.546 [DEBUG] [Thread-135084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:07:37.546 [DEBUG] [Thread-135084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] client lang: <none>
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] server lang: <none>
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] kex follows: False
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] Compression: none
2026-02-11T20:07:37.547 [DEBUG] [Thread-135084] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:07:37.606 [DEBUG] [Thread-135084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:07:37.606 [DEBUG] [Thread-135084] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:07:37.607 [DEBUG] [Thread-135084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:07:37.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:07:37.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:07:37.662 [DEBUG] [Thread-135084] [transport.py] [_log()] userauth is OK
2026-02-11T20:07:37.663 [DEBUG] [Thread-135084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:07:37.663 [DEBUG] [Thread-135084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:07:37.663 [DEBUG] [Thread-135084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:07:37.663 [DEBUG] [Thread-135084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:07:37.685 [INFO] [Thread-135084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:07:37.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:07:37.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:07:38.490 [DEBUG] [Thread-135084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:07:38.491 [DEBUG] [Thread-135084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:07:38.538 [DEBUG] [Thread-135084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:07:38.538 [DEBUG] [Thread-135084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:07:38.547 [DEBUG] [Thread-135084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:07:38.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:07:38.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:07:38.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:07:38.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:07:38.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:07:38.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:07:38.580 [DEBUG] [Thread-135084] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:07:45.904 [DEBUG] [Thread-135086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:00.971 [DEBUG] [Thread-135087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:08:08.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:08:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:08:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 7, 28), 4.22, 76.19, 0.0, 20.03, 18.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:08:10.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:07:28
2026-02-11T20:08:10.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:08:11.052 [DEBUG] [Thread-135088] [transport.py] [_log()] starting thread (client mode): 0xa57b13c0
2026-02-11T20:08:11.052 [DEBUG] [Thread-135088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:08:11.073 [DEBUG] [Thread-135088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:08:11.074 [INFO] [Thread-135088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:08:11.076 [DEBUG] [Thread-135088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:08:11.076 [DEBUG] [Thread-135088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:08:11.076 [DEBUG] [Thread-135088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:08:11.076 [DEBUG] [Thread-135088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] client lang: <none>
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] server lang: <none>
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] kex follows: False
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] Compression: none
2026-02-11T20:08:11.077 [DEBUG] [Thread-135088] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:08:11.094 [DEBUG] [Thread-135088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:08:11.095 [DEBUG] [Thread-135088] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:08:11.095 [DEBUG] [Thread-135088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:08:11.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:08:11.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:08:11.098 [DEBUG] [Thread-135088] [transport.py] [_log()] userauth is OK
2026-02-11T20:08:11.098 [DEBUG] [Thread-135088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:08:11.098 [DEBUG] [Thread-135088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:08:11.098 [DEBUG] [Thread-135088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:08:11.098 [DEBUG] [Thread-135088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:08:11.117 [INFO] [Thread-135088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:08:11.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:08:11.758 [DEBUG] [Thread-135088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:08:11.758 [DEBUG] [Thread-135088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:08:11.759 [DEBUG] [Thread-135088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:08:11.799 [DEBUG] [Thread-135088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:08:11.800 [DEBUG] [Thread-135088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:08:11.803 [DEBUG] [Thread-135088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:08:11.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:08:11.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:08:11.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:08:11.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:08:11.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:08:11.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:08:11.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:08:11.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:08:11.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:08:11.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.755348 -999.00  +18.80  15.97     79  +15.20 1 2 1 1 1    37    0 -0.21 -185.67 ----- 17.3 16.0 215.9 19.6 19.9 -18.9 19.7 -18.2 19.6 -17.3 19.9 -18.4
2026-02-11T20:08:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:08:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:08:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.755348
2026-02-11T20:08:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:08:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:08:11.830 [DEBUG] [Thread-135088] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:08:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:08:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:08:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:08:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:07:28', tmtdew=4.22, humidity=76.19, cloud=0.0, wind=20.03, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:07:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:08:11.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:08:11.926 [DEBUG] [Thread-135091] [transport.py] [_log()] starting thread (client mode): 0x9eb06110
2026-02-11T20:08:11.926 [DEBUG] [Thread-135091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:08:11.940 [DEBUG] [Thread-135091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:08:11.940 [INFO] [Thread-135091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:08:11.948 [DEBUG] [Thread-135091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] client lang: <none>
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] server lang: <none>
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] kex follows: False
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] Compression: none
2026-02-11T20:08:11.949 [DEBUG] [Thread-135091] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:08:12.007 [DEBUG] [Thread-135091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:08:12.008 [DEBUG] [Thread-135091] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:08:12.008 [DEBUG] [Thread-135091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:08:12.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:08:12.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:08:12.063 [DEBUG] [Thread-135091] [transport.py] [_log()] userauth is OK
2026-02-11T20:08:12.063 [DEBUG] [Thread-135091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:08:12.063 [DEBUG] [Thread-135091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:08:12.063 [DEBUG] [Thread-135091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:08:12.063 [DEBUG] [Thread-135091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:08:12.089 [INFO] [Thread-135091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:08:12.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:08:12.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:08:12.927 [DEBUG] [Thread-135091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:08:12.927 [DEBUG] [Thread-135091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:08:12.976 [DEBUG] [Thread-135091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:08:12.976 [DEBUG] [Thread-135091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:08:12.984 [DEBUG] [Thread-135091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:08:12.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:08:12.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:08:13.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:08:13.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:08:13.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:08:13.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:08:13.017 [DEBUG] [Thread-135091] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:08:16.006 [DEBUG] [Thread-135093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:18.226 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:18.227 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:31.055 [DEBUG] [Thread-135094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:36.985 [DEBUG] [Thread-135095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:43.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:08:43.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:08:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:08:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 8, 3), 4.18, 76.37, 0.0, 18.12, 18.52, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:08:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:08:03
2026-02-11T20:08:45.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:08:45.721 [DEBUG] [Thread-135096] [transport.py] [_log()] starting thread (client mode): 0xa2db7fa0
2026-02-11T20:08:45.721 [DEBUG] [Thread-135096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:08:45.741 [DEBUG] [Thread-135096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:08:45.741 [INFO] [Thread-135096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] client lang: <none>
2026-02-11T20:08:45.745 [DEBUG] [Thread-135096] [transport.py] [_log()] server lang: <none>
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] kex follows: False
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] Compression: none
2026-02-11T20:08:45.746 [DEBUG] [Thread-135096] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:08:45.765 [DEBUG] [Thread-135096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:08:45.766 [DEBUG] [Thread-135096] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:08:45.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:08:45.768 [DEBUG] [Thread-135096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:08:45.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:08:45.770 [DEBUG] [Thread-135096] [transport.py] [_log()] userauth is OK
2026-02-11T20:08:45.771 [DEBUG] [Thread-135096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:08:45.771 [DEBUG] [Thread-135096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:08:45.771 [DEBUG] [Thread-135096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:08:45.771 [DEBUG] [Thread-135096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:08:45.800 [INFO] [Thread-135096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:08:45.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:08:46.093 [DEBUG] [Thread-135098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:08:46.463 [DEBUG] [Thread-135096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:08:46.463 [DEBUG] [Thread-135096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:08:46.464 [DEBUG] [Thread-135096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:08:46.504 [DEBUG] [Thread-135096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:08:46.504 [DEBUG] [Thread-135096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:08:46.508 [DEBUG] [Thread-135096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:08:46.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:08:46.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:08:46.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:08:46.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:08:46.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:08:46.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:08:46.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:08:46.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:08:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:08:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.755695 -999.00  +18.70  13.31     80  +15.20 1 2 1 2 1    33    0 0.13 -179.37 ----- 8.1 13.3 221.5 19.2 19.8 -19.1 19.7 -18.0 19.5 -17.6 19.8 -18.6
2026-02-11T20:08:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:08:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:08:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.755695
2026-02-11T20:08:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:08:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:08:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:08:46.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:08:46.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:08:46.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:08:03', tmtdew=4.18, humidity=76.37, cloud=0.0, wind=18.12, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:08:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:08:46.536 [DEBUG] [Thread-135096] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:08:46.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:08:46.632 [DEBUG] [Thread-135100] [transport.py] [_log()] starting thread (client mode): 0xa2db7580
2026-02-11T20:08:46.632 [DEBUG] [Thread-135100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:08:46.646 [DEBUG] [Thread-135100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:08:46.646 [INFO] [Thread-135100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] client lang: <none>
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] server lang: <none>
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] kex follows: False
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:08:46.654 [DEBUG] [Thread-135100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:08:46.655 [DEBUG] [Thread-135100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:08:46.655 [DEBUG] [Thread-135100] [transport.py] [_log()] Compression: none
2026-02-11T20:08:46.655 [DEBUG] [Thread-135100] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:08:46.710 [DEBUG] [Thread-135100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:08:46.711 [DEBUG] [Thread-135100] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:08:46.711 [DEBUG] [Thread-135100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:08:46.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:08:46.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:08:46.767 [DEBUG] [Thread-135100] [transport.py] [_log()] userauth is OK
2026-02-11T20:08:46.767 [DEBUG] [Thread-135100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:08:46.767 [DEBUG] [Thread-135100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:08:46.768 [DEBUG] [Thread-135100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:08:46.768 [DEBUG] [Thread-135100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:08:46.786 [INFO] [Thread-135100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:08:46.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:08:46.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:08:47.675 [DEBUG] [Thread-135100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:08:47.675 [DEBUG] [Thread-135100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:08:47.723 [DEBUG] [Thread-135100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:08:47.723 [DEBUG] [Thread-135100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:08:47.732 [DEBUG] [Thread-135100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:08:47.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:08:47.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:08:47.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:08:47.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:08:47.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:08:47.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:08:47.766 [DEBUG] [Thread-135100] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:09:01.130 [DEBUG] [Thread-135102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:09:16.188 [DEBUG] [Thread-135103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:09:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:09:17.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:09:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:09:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 8, 39), 4.27, 76.17, 0.0, 18.7, 18.81, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:09:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:08:39
2026-02-11T20:09:20.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:09:20.798 [DEBUG] [Thread-135104] [transport.py] [_log()] starting thread (client mode): 0xa5741120
2026-02-11T20:09:20.798 [DEBUG] [Thread-135104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:09:20.813 [DEBUG] [Thread-135104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:09:20.814 [INFO] [Thread-135104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:20.816 [DEBUG] [Thread-135104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] client lang: <none>
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] server lang: <none>
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] kex follows: False
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] Compression: none
2026-02-11T20:09:20.817 [DEBUG] [Thread-135104] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:09:20.830 [DEBUG] [Thread-135104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:09:20.831 [DEBUG] [Thread-135104] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:09:20.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:09:20.832 [DEBUG] [Thread-135104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:09:20.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:09:20.834 [DEBUG] [Thread-135104] [transport.py] [_log()] userauth is OK
2026-02-11T20:09:20.834 [DEBUG] [Thread-135104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:09:20.834 [DEBUG] [Thread-135104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:09:20.834 [DEBUG] [Thread-135104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:09:20.834 [DEBUG] [Thread-135104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:09:20.856 [INFO] [Thread-135104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:09:20.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:09:21.605 [DEBUG] [Thread-135104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:09:21.605 [DEBUG] [Thread-135104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:09:21.606 [DEBUG] [Thread-135104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:09:21.646 [DEBUG] [Thread-135104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:09:21.646 [DEBUG] [Thread-135104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:09:21.649 [DEBUG] [Thread-135104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:09:21.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:09:21.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:09:21.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:09:21.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:09:21.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:09:21.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:09:21.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:09:21.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:09:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:09:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.756042 -999.00  +18.60  13.50     80  +15.20 1 2 1 2 1    30    0 -0.63 -195.03 ----- 13.3 13.5 208.4 20.1 19.8 -19.0 19.6 -18.3 19.4 -17.5 19.8 -18.6
2026-02-11T20:09:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:09:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:09:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.756042
2026-02-11T20:09:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:09:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:09:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:09:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:09:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:09:21.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:08:39', tmtdew=4.27, humidity=76.17, cloud=0.0, wind=18.7, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:08:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:09:21.678 [DEBUG] [Thread-135104] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:09:21.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:09:21.773 [DEBUG] [Thread-135107] [transport.py] [_log()] starting thread (client mode): 0xa2db4070
2026-02-11T20:09:21.773 [DEBUG] [Thread-135107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:09:21.787 [DEBUG] [Thread-135107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:09:21.788 [INFO] [Thread-135107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:09:21.795 [DEBUG] [Thread-135107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:09:21.795 [DEBUG] [Thread-135107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:09:21.795 [DEBUG] [Thread-135107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] client lang: <none>
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] server lang: <none>
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] kex follows: False
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] Compression: none
2026-02-11T20:09:21.796 [DEBUG] [Thread-135107] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:09:21.855 [DEBUG] [Thread-135107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:09:21.856 [DEBUG] [Thread-135107] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:09:21.856 [DEBUG] [Thread-135107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:09:21.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:09:21.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:09:21.914 [DEBUG] [Thread-135107] [transport.py] [_log()] userauth is OK
2026-02-11T20:09:21.914 [DEBUG] [Thread-135107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:09:21.914 [DEBUG] [Thread-135107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:09:21.914 [DEBUG] [Thread-135107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:09:21.914 [DEBUG] [Thread-135107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:09:21.933 [INFO] [Thread-135107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:09:21.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:09:21.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:09:22.501 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:09:22.501 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:09:22.760 [DEBUG] [Thread-135107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:09:22.760 [DEBUG] [Thread-135107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:09:22.808 [DEBUG] [Thread-135107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:09:22.809 [DEBUG] [Thread-135107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:09:22.818 [DEBUG] [Thread-135107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:09:22.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:09:22.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:09:22.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:09:22.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:09:22.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:09:22.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:09:22.856 [DEBUG] [Thread-135107] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:09:31.223 [DEBUG] [Thread-135109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:09:37.057 [DEBUG] [Thread-135110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:09:46.272 [DEBUG] [Thread-135111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:09:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:09:52.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:09:52.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:09:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 9, 14), 3.89, 77.8, 0.0, 19.97, 18.36, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:09:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:09:14
2026-02-11T20:09:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:09:55.384 [DEBUG] [Thread-135112] [transport.py] [_log()] starting thread (client mode): 0xa57b0be0
2026-02-11T20:09:55.384 [DEBUG] [Thread-135112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:09:55.404 [DEBUG] [Thread-135112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:09:55.404 [INFO] [Thread-135112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] client lang: <none>
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] server lang: <none>
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] kex follows: False
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] Compression: none
2026-02-11T20:09:55.408 [DEBUG] [Thread-135112] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:09:55.425 [DEBUG] [Thread-135112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:09:55.425 [DEBUG] [Thread-135112] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:09:55.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:09:55.426 [DEBUG] [Thread-135112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:09:55.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:09:55.427 [DEBUG] [Thread-135112] [transport.py] [_log()] userauth is OK
2026-02-11T20:09:55.427 [DEBUG] [Thread-135112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:09:55.427 [DEBUG] [Thread-135112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:09:55.427 [DEBUG] [Thread-135112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:09:55.427 [DEBUG] [Thread-135112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:09:55.440 [INFO] [Thread-135112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:09:55.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:09:56.061 [DEBUG] [Thread-135112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:09:56.061 [DEBUG] [Thread-135112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:09:56.061 [DEBUG] [Thread-135112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:09:56.102 [DEBUG] [Thread-135112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:09:56.103 [DEBUG] [Thread-135112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:09:56.106 [DEBUG] [Thread-135112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:09:56.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:09:56.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:09:56.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:09:56.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:09:56.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:09:56.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:09:56.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:09:56.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:09:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:09:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.756389 -999.00  +18.60   6.16     80  +15.20 1 2 1 2 1    28    0 -0.91 -203.93 ----- 9.9 6.2 184.2 13.9 19.8 -18.9 19.6 -17.9 19.4 -17.3 19.7 -18.3
2026-02-11T20:09:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:09:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:09:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.756389
2026-02-11T20:09:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:09:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:09:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:09:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:09:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:09:56.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:09:14', tmtdew=3.89, humidity=77.8, cloud=0.0, wind=19.97, temperature=18.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:09:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:09:56.130 [DEBUG] [Thread-135112] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:09:56.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:09:56.228 [DEBUG] [Thread-135115] [transport.py] [_log()] starting thread (client mode): 0xa57b12d0
2026-02-11T20:09:56.228 [DEBUG] [Thread-135115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:09:56.242 [DEBUG] [Thread-135115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:09:56.242 [INFO] [Thread-135115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] client lang: <none>
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] server lang: <none>
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] kex follows: False
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:09:56.250 [DEBUG] [Thread-135115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:09:56.251 [DEBUG] [Thread-135115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:09:56.251 [DEBUG] [Thread-135115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:09:56.251 [DEBUG] [Thread-135115] [transport.py] [_log()] Compression: none
2026-02-11T20:09:56.251 [DEBUG] [Thread-135115] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:09:56.311 [DEBUG] [Thread-135115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:09:56.311 [DEBUG] [Thread-135115] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:09:56.312 [DEBUG] [Thread-135115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:09:56.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:09:56.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:09:56.367 [DEBUG] [Thread-135115] [transport.py] [_log()] userauth is OK
2026-02-11T20:09:56.368 [DEBUG] [Thread-135115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:09:56.368 [DEBUG] [Thread-135115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:09:56.368 [DEBUG] [Thread-135115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:09:56.368 [DEBUG] [Thread-135115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:09:56.392 [INFO] [Thread-135115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:09:56.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:09:56.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:09:57.241 [DEBUG] [Thread-135115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:09:57.241 [DEBUG] [Thread-135115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:09:57.289 [DEBUG] [Thread-135115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:09:57.290 [DEBUG] [Thread-135115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:09:57.298 [DEBUG] [Thread-135115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:09:57.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:09:57.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:09:57.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:09:57.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:09:57.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:09:57.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:09:57.334 [DEBUG] [Thread-135115] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:10:01.303 [DEBUG] [Thread-135117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:10:07.562 [DEBUG] [Thread-135118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:10:16.345 [DEBUG] [Thread-135119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:10:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:10:27.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:10:27.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:10:28.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:10:28.449 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:10:29.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 9, 51), 3.78, 78.62, 0.0, 17.36, 18.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:10:29.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:09:51
2026-02-11T20:10:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:10:30.181 [DEBUG] [Thread-135120] [transport.py] [_log()] starting thread (client mode): 0xa57d6890
2026-02-11T20:10:30.181 [DEBUG] [Thread-135120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:10:30.202 [DEBUG] [Thread-135120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:10:30.202 [INFO] [Thread-135120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:10:30.204 [DEBUG] [Thread-135120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] client lang: <none>
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] server lang: <none>
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] kex follows: False
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] Compression: none
2026-02-11T20:10:30.205 [DEBUG] [Thread-135120] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:10:30.221 [DEBUG] [Thread-135120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:10:30.222 [DEBUG] [Thread-135120] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:10:30.222 [DEBUG] [Thread-135120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:10:30.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:10:30.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:10:30.224 [DEBUG] [Thread-135120] [transport.py] [_log()] userauth is OK
2026-02-11T20:10:30.225 [DEBUG] [Thread-135120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:10:30.225 [DEBUG] [Thread-135120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:10:30.225 [DEBUG] [Thread-135120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:10:30.225 [DEBUG] [Thread-135120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:10:30.249 [INFO] [Thread-135120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:10:30.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:10:30.773 [DEBUG] [Thread-135120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:10:30.773 [DEBUG] [Thread-135120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:10:30.773 [DEBUG] [Thread-135120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:10:30.813 [DEBUG] [Thread-135120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:10:30.814 [DEBUG] [Thread-135120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:10:30.817 [DEBUG] [Thread-135120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:10:30.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:10:30.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:10:30.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:10:30.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:10:30.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:10:30.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:10:30.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:10:30.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:10:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:10:30.845 [DEBUG] [Thread-135120] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:10:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.757084 -999.00  +18.60   7.19     80  +15.20 1 2 1 2 1    23    0 -0.11 -175.32 ----- 11.1 7.2 201.8 15.5 19.6 -18.9 19.6 -18.3 19.4 -17.4 19.7 -18.3
2026-02-11T20:10:30.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:10:30.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:10:30.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.757084
2026-02-11T20:10:30.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:10:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:10:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:10:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:10:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:10:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:09:51', tmtdew=3.78, humidity=78.62, cloud=0.0, wind=17.36, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:10:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:10:30.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:10:30.953 [DEBUG] [Thread-135123] [transport.py] [_log()] starting thread (client mode): 0x9eb04700
2026-02-11T20:10:30.953 [DEBUG] [Thread-135123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:10:30.968 [DEBUG] [Thread-135123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:10:30.968 [INFO] [Thread-135123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:10:30.975 [DEBUG] [Thread-135123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:10:30.976 [DEBUG] [Thread-135123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:10:30.976 [DEBUG] [Thread-135123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:10:30.976 [DEBUG] [Thread-135123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:10:30.976 [DEBUG] [Thread-135123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:10:30.976 [DEBUG] [Thread-135123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:10:30.976 [DEBUG] [Thread-135123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:10:30.976 [DEBUG] [Thread-135123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] client lang: <none>
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] server lang: <none>
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] kex follows: False
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:10:30.977 [DEBUG] [Thread-135123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:10:30.978 [DEBUG] [Thread-135123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:10:30.978 [DEBUG] [Thread-135123] [transport.py] [_log()] Compression: none
2026-02-11T20:10:30.978 [DEBUG] [Thread-135123] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:10:31.036 [DEBUG] [Thread-135123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:10:31.037 [DEBUG] [Thread-135123] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:10:31.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:10:31.038 [DEBUG] [Thread-135123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:10:31.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:10:31.091 [DEBUG] [Thread-135123] [transport.py] [_log()] userauth is OK
2026-02-11T20:10:31.092 [DEBUG] [Thread-135123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:10:31.092 [DEBUG] [Thread-135123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:10:31.092 [DEBUG] [Thread-135123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:10:31.092 [DEBUG] [Thread-135123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:10:31.111 [INFO] [Thread-135123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:10:31.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:10:31.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:10:31.381 [DEBUG] [Thread-135125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:10:31.998 [DEBUG] [Thread-135123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:10:31.999 [DEBUG] [Thread-135123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:10:32.049 [DEBUG] [Thread-135123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:10:32.050 [DEBUG] [Thread-135123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:10:32.059 [DEBUG] [Thread-135123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:10:32.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:10:32.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')
2026-02-11T20:10:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:10:32.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:10:32.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:10:32.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:10:32.096 [DEBUG] [Thread-135123] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:10:37.115 [DEBUG] [Thread-135126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:10:46.419 [DEBUG] [Thread-135127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:11:01.458 [DEBUG] [Thread-135128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:11:02.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:11:02.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:11:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:11:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 10, 26), 3.75, 78.76, 0.0, 17.22, 18.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:11:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:10:26
2026-02-11T20:11:04.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:11:04.612 [DEBUG] [Thread-135129] [transport.py] [_log()] starting thread (client mode): 0xa5771fc0
2026-02-11T20:11:04.612 [DEBUG] [Thread-135129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:11:04.622 [DEBUG] [Thread-135129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:11:04.622 [INFO] [Thread-135129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] client lang: <none>
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] server lang: <none>
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] kex follows: False
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] Compression: none
2026-02-11T20:11:04.623 [DEBUG] [Thread-135129] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:11:04.630 [DEBUG] [Thread-135129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:11:04.631 [DEBUG] [Thread-135129] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:11:04.631 [DEBUG] [Thread-135129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:11:04.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:11:04.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:11:04.632 [DEBUG] [Thread-135129] [transport.py] [_log()] userauth is OK
2026-02-11T20:11:04.632 [DEBUG] [Thread-135129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:11:04.632 [DEBUG] [Thread-135129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:11:04.632 [DEBUG] [Thread-135129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:11:04.632 [DEBUG] [Thread-135129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:11:04.643 [INFO] [Thread-135129] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:11:04.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:11:05.272 [DEBUG] [Thread-135129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:11:05.272 [DEBUG] [Thread-135129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:11:05.273 [DEBUG] [Thread-135129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:11:05.314 [DEBUG] [Thread-135129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:11:05.314 [DEBUG] [Thread-135129] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:11:05.318 [DEBUG] [Thread-135129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:11:05.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:11:05.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:11:05.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:11:05.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:11:05.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:11:05.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:11:05.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:11:05.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:11:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:11:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.757431 -999.00  +18.50   7.86     80  +15.20 1 2 1 2 1    21    0 -0.34 -180.56 ----- 11.9 7.9 217.2 16.3 19.6 -18.9 19.6 -18.1 19.4 -17.4 19.6 -18.3
2026-02-11T20:11:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:11:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:11:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.757431
2026-02-11T20:11:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:11:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:11:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:11:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:11:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:11:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:10:26', tmtdew=3.75, humidity=78.76, cloud=0.0, wind=17.22, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:10:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:11:05.347 [DEBUG] [Thread-135129] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:11:05.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:11:05.442 [DEBUG] [Thread-135132] [transport.py] [_log()] starting thread (client mode): 0xa57c0c70
2026-02-11T20:11:05.442 [DEBUG] [Thread-135132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:11:05.457 [DEBUG] [Thread-135132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:11:05.457 [INFO] [Thread-135132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:11:05.464 [DEBUG] [Thread-135132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:11:05.464 [DEBUG] [Thread-135132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:11:05.464 [DEBUG] [Thread-135132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:11:05.464 [DEBUG] [Thread-135132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] client lang: <none>
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] server lang: <none>
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] kex follows: False
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:11:05.465 [DEBUG] [Thread-135132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:11:05.466 [DEBUG] [Thread-135132] [transport.py] [_log()] Compression: none
2026-02-11T20:11:05.466 [DEBUG] [Thread-135132] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:11:05.523 [DEBUG] [Thread-135132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:11:05.524 [DEBUG] [Thread-135132] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:11:05.524 [DEBUG] [Thread-135132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:11:05.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:11:05.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:11:05.580 [DEBUG] [Thread-135132] [transport.py] [_log()] userauth is OK
2026-02-11T20:11:05.580 [DEBUG] [Thread-135132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:11:05.580 [DEBUG] [Thread-135132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:11:05.580 [DEBUG] [Thread-135132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:11:05.580 [DEBUG] [Thread-135132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:11:05.599 [INFO] [Thread-135132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:11:05.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:11:05.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:11:06.438 [DEBUG] [Thread-135132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:11:06.438 [DEBUG] [Thread-135132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:11:06.485 [DEBUG] [Thread-135132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:11:06.485 [DEBUG] [Thread-135132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:11:06.495 [DEBUG] [Thread-135132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:11:06.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:11:06.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:11:06.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:11:06.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:11:06.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:11:06.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:11:06.532 [DEBUG] [Thread-135132] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:11:16.494 [DEBUG] [Thread-135134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:11:31.548 [DEBUG] [Thread-135135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:11:33.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:11:33.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:11:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:11:36.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:11:36.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:11:37.184 [DEBUG] [Thread-135136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:11:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 11, 2), 3.73, 78.86, 0.0, 16.27, 18.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:11:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:11:02
2026-02-11T20:11:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:11:38.908 [DEBUG] [Thread-135137] [transport.py] [_log()] starting thread (client mode): 0xa57d4670
2026-02-11T20:11:38.908 [DEBUG] [Thread-135137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:11:38.928 [DEBUG] [Thread-135137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:11:38.928 [INFO] [Thread-135137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:11:38.929 [DEBUG] [Thread-135137] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:11:38.929 [DEBUG] [Thread-135137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:11:38.929 [DEBUG] [Thread-135137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:11:38.929 [DEBUG] [Thread-135137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:38.929 [DEBUG] [Thread-135137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] client lang: <none>
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] server lang: <none>
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] kex follows: False
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] Compression: none
2026-02-11T20:11:38.930 [DEBUG] [Thread-135137] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:11:38.947 [DEBUG] [Thread-135137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:11:38.948 [DEBUG] [Thread-135137] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:11:38.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:11:38.948 [DEBUG] [Thread-135137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:11:38.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:11:38.949 [DEBUG] [Thread-135137] [transport.py] [_log()] userauth is OK
2026-02-11T20:11:38.949 [DEBUG] [Thread-135137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:11:38.949 [DEBUG] [Thread-135137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:11:38.949 [DEBUG] [Thread-135137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:11:38.949 [DEBUG] [Thread-135137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:11:38.961 [INFO] [Thread-135137] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:11:38.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:11:39.616 [DEBUG] [Thread-135137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:11:39.616 [DEBUG] [Thread-135137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:11:39.617 [DEBUG] [Thread-135137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:11:39.657 [DEBUG] [Thread-135137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:11:39.658 [DEBUG] [Thread-135137] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:11:39.661 [DEBUG] [Thread-135137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:11:39.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:11:39.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:11:39.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:11:39.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:11:39.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:11:39.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:11:39.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:11:39.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:11:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:11:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.757778 -999.00  +18.60  11.79     81  +15.20 1 2 1 2 1    19    0 -0.11 -172.89 ----- 8.0 11.8 207.2 12.9 19.6 -18.9 19.5 -17.8 19.3 -17.4 19.6 -18.4
2026-02-11T20:11:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:11:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:11:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.757778
2026-02-11T20:11:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:11:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:11:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:11:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:11:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:11:39.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:11:02', tmtdew=3.73, humidity=78.86, cloud=0.0, wind=16.27, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:11:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:11:39.689 [DEBUG] [Thread-135137] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:11:39.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:11:39.783 [DEBUG] [Thread-135140] [transport.py] [_log()] starting thread (client mode): 0x9eb06200
2026-02-11T20:11:39.784 [DEBUG] [Thread-135140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:11:39.798 [DEBUG] [Thread-135140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:11:39.798 [INFO] [Thread-135140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] client lang: <none>
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] server lang: <none>
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] kex follows: False
2026-02-11T20:11:39.806 [DEBUG] [Thread-135140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:11:39.807 [DEBUG] [Thread-135140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:11:39.807 [DEBUG] [Thread-135140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:11:39.807 [DEBUG] [Thread-135140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:11:39.807 [DEBUG] [Thread-135140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:11:39.807 [DEBUG] [Thread-135140] [transport.py] [_log()] Compression: none
2026-02-11T20:11:39.807 [DEBUG] [Thread-135140] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:11:39.864 [DEBUG] [Thread-135140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:11:39.864 [DEBUG] [Thread-135140] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:11:39.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:11:39.866 [DEBUG] [Thread-135140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:11:39.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:11:39.919 [DEBUG] [Thread-135140] [transport.py] [_log()] userauth is OK
2026-02-11T20:11:39.920 [DEBUG] [Thread-135140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:11:39.920 [DEBUG] [Thread-135140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:11:39.920 [DEBUG] [Thread-135140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:11:39.920 [DEBUG] [Thread-135140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:11:39.939 [INFO] [Thread-135140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:11:39.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:11:39.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:11:40.766 [DEBUG] [Thread-135140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:11:40.767 [DEBUG] [Thread-135140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:11:40.814 [DEBUG] [Thread-135140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:11:40.814 [DEBUG] [Thread-135140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:11:40.823 [DEBUG] [Thread-135140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:11:40.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:11:40.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:11:40.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:11:40.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:11:40.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:11:40.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:11:40.860 [DEBUG] [Thread-135140] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:11:46.585 [DEBUG] [Thread-135142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:01.634 [DEBUG] [Thread-135143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:10.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:12:10.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:12:10.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
2026-02-11T20:12:13.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 11, 38), 3.91, 77.89, 0.0, 19.97, 18.55, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:12:13.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:11:38
2026-02-11T20:12:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:12:13.702 [DEBUG] [Thread-135144] [transport.py] [_log()] starting thread (client mode): 0x9eb04940
2026-02-11T20:12:13.702 [DEBUG] [Thread-135144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:12:13.721 [DEBUG] [Thread-135144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:12:13.721 [INFO] [Thread-135144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] client lang: <none>
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] server lang: <none>
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] kex follows: False
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:12:13.724 [DEBUG] [Thread-135144] [transport.py] [_log()] Compression: none
2026-02-11T20:12:13.725 [DEBUG] [Thread-135144] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:12:13.741 [DEBUG] [Thread-135144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:12:13.741 [DEBUG] [Thread-135144] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:12:13.742 [DEBUG] [Thread-135144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:12:13.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:12:13.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:12:13.743 [DEBUG] [Thread-135144] [transport.py] [_log()] userauth is OK
2026-02-11T20:12:13.743 [DEBUG] [Thread-135144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:12:13.743 [DEBUG] [Thread-135144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:12:13.743 [DEBUG] [Thread-135144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:12:13.743 [DEBUG] [Thread-135144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:12:13.757 [INFO] [Thread-135144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:12:13.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:12:14.390 [DEBUG] [Thread-135144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:12:14.391 [DEBUG] [Thread-135144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:12:14.391 [DEBUG] [Thread-135144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:12:14.431 [DEBUG] [Thread-135144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:12:14.432 [DEBUG] [Thread-135144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:12:14.435 [DEBUG] [Thread-135144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:12:14.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:12:14.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:12:14.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:12:14.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:12:14.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:12:14.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:12:14.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:12:14.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:12:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:12:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.758125 -999.00  +18.50   9.45     81  +15.20 1 2 1 2 1    17    0 -0.19 -174.25 ----- 6.5 9.4 202.4 12.7 19.6 -18.8 19.5 -17.9 19.3 -17.3 19.6 -18.4
2026-02-11T20:12:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:12:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:12:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.758125
2026-02-11T20:12:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:12:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:12:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:12:14.463 [DEBUG] [Thread-135144] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:12:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:12:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:12:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:11:38', tmtdew=3.91, humidity=77.89, cloud=0.0, wind=19.97, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:11:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:12:14.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:12:14.559 [DEBUG] [Thread-135147] [transport.py] [_log()] starting thread (client mode): 0xa5741360
2026-02-11T20:12:14.560 [DEBUG] [Thread-135147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:12:14.574 [DEBUG] [Thread-135147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:12:14.574 [INFO] [Thread-135147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:12:14.581 [DEBUG] [Thread-135147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] client lang: <none>
2026-02-11T20:12:14.582 [DEBUG] [Thread-135147] [transport.py] [_log()] server lang: <none>
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] kex follows: False
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] Compression: none
2026-02-11T20:12:14.583 [DEBUG] [Thread-135147] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:12:14.640 [DEBUG] [Thread-135147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:12:14.640 [DEBUG] [Thread-135147] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:12:14.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:12:14.641 [DEBUG] [Thread-135147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:12:14.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:12:14.696 [DEBUG] [Thread-135147] [transport.py] [_log()] userauth is OK
2026-02-11T20:12:14.696 [DEBUG] [Thread-135147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:12:14.697 [DEBUG] [Thread-135147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:12:14.697 [DEBUG] [Thread-135147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:12:14.697 [DEBUG] [Thread-135147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:12:14.716 [INFO] [Thread-135147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:12:14.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:12:14.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:12:15.561 [DEBUG] [Thread-135147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:12:15.561 [DEBUG] [Thread-135147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:12:15.609 [DEBUG] [Thread-135147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:12:15.610 [DEBUG] [Thread-135147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:12:15.619 [DEBUG] [Thread-135147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:12:15.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:12:15.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:12:15.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:12:15.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:12:15.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:12:15.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:12:15.655 [DEBUG] [Thread-135147] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:12:16.669 [DEBUG] [Thread-135149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:31.722 [DEBUG] [Thread-135150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:37.249 [DEBUG] [Thread-135151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:37.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:37.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:45.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:12:45.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:12:45.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:12:46.761 [DEBUG] [Thread-135152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:12:47.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 12, 13), 3.65, 78.98, 0.0, 16.36, 18.18, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:12:47.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:12:13
2026-02-11T20:12:47.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:12:48.093 [DEBUG] [Thread-135153] [transport.py] [_log()] starting thread (client mode): 0xa5740e50
2026-02-11T20:12:48.093 [DEBUG] [Thread-135153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:12:48.113 [DEBUG] [Thread-135153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:12:48.113 [INFO] [Thread-135153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] client lang: <none>
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] server lang: <none>
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] kex follows: False
2026-02-11T20:12:48.116 [DEBUG] [Thread-135153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:12:48.117 [DEBUG] [Thread-135153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:12:48.117 [DEBUG] [Thread-135153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:12:48.117 [DEBUG] [Thread-135153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:12:48.117 [DEBUG] [Thread-135153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:12:48.117 [DEBUG] [Thread-135153] [transport.py] [_log()] Compression: none
2026-02-11T20:12:48.117 [DEBUG] [Thread-135153] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:12:48.132 [DEBUG] [Thread-135153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:12:48.133 [DEBUG] [Thread-135153] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:12:48.133 [DEBUG] [Thread-135153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:12:48.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:12:48.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:12:48.135 [DEBUG] [Thread-135153] [transport.py] [_log()] userauth is OK
2026-02-11T20:12:48.136 [DEBUG] [Thread-135153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:12:48.136 [DEBUG] [Thread-135153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:12:48.136 [DEBUG] [Thread-135153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:12:48.136 [DEBUG] [Thread-135153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:12:48.160 [INFO] [Thread-135153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:12:48.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:12:48.768 [DEBUG] [Thread-135153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:12:48.768 [DEBUG] [Thread-135153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:12:48.768 [DEBUG] [Thread-135153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:12:48.809 [DEBUG] [Thread-135153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:12:48.809 [DEBUG] [Thread-135153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:12:48.812 [DEBUG] [Thread-135153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:12:48.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:12:48.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:12:48.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:12:48.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:12:48.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:12:48.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:12:48.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:12:48.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:12:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:12:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.758472 -999.00  +18.50  14.21     81  +15.20 1 2 1 2 1    15    0 -0.46 -177.67 ----- 9.7 14.2 198.2 16.2 19.6 -18.8 19.5 -18.6 19.3 -17.2 19.6 -18.2
2026-02-11T20:12:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:12:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:12:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.758472
2026-02-11T20:12:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:12:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:12:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:12:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:12:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:12:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:12:13', tmtdew=3.65, humidity=78.98, cloud=0.0, wind=16.36, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:12:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:12:48.836 [DEBUG] [Thread-135153] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:12:48.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:12:48.929 [DEBUG] [Thread-135156] [transport.py] [_log()] starting thread (client mode): 0xa2d5c370
2026-02-11T20:12:48.930 [DEBUG] [Thread-135156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:12:48.945 [DEBUG] [Thread-135156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:12:48.945 [INFO] [Thread-135156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] client lang: <none>
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] server lang: <none>
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] kex follows: False
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] Compression: none
2026-02-11T20:12:48.952 [DEBUG] [Thread-135156] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:12:49.010 [DEBUG] [Thread-135156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:12:49.010 [DEBUG] [Thread-135156] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:12:49.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:12:49.011 [DEBUG] [Thread-135156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:12:49.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:12:49.067 [DEBUG] [Thread-135156] [transport.py] [_log()] userauth is OK
2026-02-11T20:12:49.068 [DEBUG] [Thread-135156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:12:49.068 [DEBUG] [Thread-135156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:12:49.068 [DEBUG] [Thread-135156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:12:49.068 [DEBUG] [Thread-135156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:12:49.086 [INFO] [Thread-135156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:12:49.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:12:49.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:12:49.929 [DEBUG] [Thread-135156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:12:49.929 [DEBUG] [Thread-135156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:12:49.977 [DEBUG] [Thread-135156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:12:49.977 [DEBUG] [Thread-135156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:12:49.986 [DEBUG] [Thread-135156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:12:49.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:12:49.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:12:50.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:12:50.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:12:50.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:12:50.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:12:50.018 [DEBUG] [Thread-135156] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:13:01.797 [DEBUG] [Thread-135158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:13:16.861 [DEBUG] [Thread-135159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:13:20.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:13:20.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:13:20.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:13:21.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 12, 49), 3.65, 79.5, 0.0, 17.5, 18.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:13:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:12:49
2026-02-11T20:13:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:13:22.515 [DEBUG] [Thread-135160] [transport.py] [_log()] starting thread (client mode): 0xa5740b80
2026-02-11T20:13:22.515 [DEBUG] [Thread-135160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:13:22.535 [DEBUG] [Thread-135160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:13:22.535 [INFO] [Thread-135160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:13:22.538 [DEBUG] [Thread-135160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] client lang: <none>
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] server lang: <none>
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] kex follows: False
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] Compression: none
2026-02-11T20:13:22.539 [DEBUG] [Thread-135160] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:13:22.556 [DEBUG] [Thread-135160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:13:22.556 [DEBUG] [Thread-135160] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:13:22.557 [DEBUG] [Thread-135160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:13:22.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:13:22.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:13:22.559 [DEBUG] [Thread-135160] [transport.py] [_log()] userauth is OK
2026-02-11T20:13:22.559 [DEBUG] [Thread-135160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:13:22.559 [DEBUG] [Thread-135160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:13:22.559 [DEBUG] [Thread-135160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:13:22.560 [DEBUG] [Thread-135160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:13:22.583 [INFO] [Thread-135160] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:13:22.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:13:23.228 [DEBUG] [Thread-135160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:13:23.228 [DEBUG] [Thread-135160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:13:23.228 [DEBUG] [Thread-135160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:13:23.269 [DEBUG] [Thread-135160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:13:23.269 [DEBUG] [Thread-135160] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:13:23.271 [DEBUG] [Thread-135160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:13:23.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:13:23.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:13:23.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:13:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:13:23.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:13:23.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:13:23.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:13:23.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:13:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:13:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.759167 -999.00  +18.40  13.52     81  +15.20 1 2 1 2 1    13    0 0.20 -155.51 ----- 10.9 13.5 207.8 16.1 19.5 -18.9 19.4 -17.9 19.3 -17.1 19.6 -18.2
2026-02-11T20:13:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:13:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:13:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.759167
2026-02-11T20:13:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:13:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:13:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:13:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:13:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:13:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:12:49', tmtdew=3.65, humidity=79.5, cloud=0.0, wind=17.5, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:13:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:13:23.297 [DEBUG] [Thread-135160] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:13:23.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:13:23.398 [DEBUG] [Thread-135163] [transport.py] [_log()] starting thread (client mode): 0xa57c0100
2026-02-11T20:13:23.399 [DEBUG] [Thread-135163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:13:23.417 [DEBUG] [Thread-135163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:13:23.418 [INFO] [Thread-135163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:13:23.425 [DEBUG] [Thread-135163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] client lang: <none>
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] server lang: <none>
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] kex follows: False
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:13:23.426 [DEBUG] [Thread-135163] [transport.py] [_log()] Compression: none
2026-02-11T20:13:23.427 [DEBUG] [Thread-135163] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:13:23.488 [DEBUG] [Thread-135163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:13:23.489 [DEBUG] [Thread-135163] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:13:23.489 [DEBUG] [Thread-135163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:13:23.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:13:23.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:13:23.557 [DEBUG] [Thread-135163] [transport.py] [_log()] userauth is OK
2026-02-11T20:13:23.557 [DEBUG] [Thread-135163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:13:23.557 [DEBUG] [Thread-135163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:13:23.557 [DEBUG] [Thread-135163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:13:23.558 [DEBUG] [Thread-135163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:13:23.579 [INFO] [Thread-135163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:13:23.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:13:23.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:13:24.455 [DEBUG] [Thread-135163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:13:24.456 [DEBUG] [Thread-135163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:13:24.506 [DEBUG] [Thread-135163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:13:24.507 [DEBUG] [Thread-135163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:13:24.516 [DEBUG] [Thread-135163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:13:24.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:13:24.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:13:24.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:13:24.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:13:24.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:13:24.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:13:24.560 [DEBUG] [Thread-135163] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:13:31.897 [DEBUG] [Thread-135165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:13:37.322 [DEBUG] [Thread-135166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:13:41.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:13:41.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:13:46.947 [DEBUG] [Thread-135167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:13:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:13:54.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:13:54.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:13:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 13, 25), 3.64, 79.55, 0.0, 17.77, 18.16, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:13:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:13:25
2026-02-11T20:13:57.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:13:57.355 [DEBUG] [Thread-135168] [transport.py] [_log()] starting thread (client mode): 0xa2d5f310
2026-02-11T20:13:57.355 [DEBUG] [Thread-135168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:13:57.376 [DEBUG] [Thread-135168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:13:57.376 [INFO] [Thread-135168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:13:57.379 [DEBUG] [Thread-135168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:13:57.379 [DEBUG] [Thread-135168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:13:57.379 [DEBUG] [Thread-135168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:13:57.379 [DEBUG] [Thread-135168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:57.379 [DEBUG] [Thread-135168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:57.379 [DEBUG] [Thread-135168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] client lang: <none>
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] server lang: <none>
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] kex follows: False
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] Compression: none
2026-02-11T20:13:57.380 [DEBUG] [Thread-135168] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:13:57.399 [DEBUG] [Thread-135168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:13:57.399 [DEBUG] [Thread-135168] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:13:57.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:13:57.400 [DEBUG] [Thread-135168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:13:57.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:13:57.403 [DEBUG] [Thread-135168] [transport.py] [_log()] userauth is OK
2026-02-11T20:13:57.403 [DEBUG] [Thread-135168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:13:57.403 [DEBUG] [Thread-135168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:13:57.403 [DEBUG] [Thread-135168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:13:57.403 [DEBUG] [Thread-135168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:13:57.427 [INFO] [Thread-135168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:13:57.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:13:58.070 [DEBUG] [Thread-135168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:13:58.070 [DEBUG] [Thread-135168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:13:58.070 [DEBUG] [Thread-135168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:13:58.111 [DEBUG] [Thread-135168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:13:58.111 [DEBUG] [Thread-135168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:13:58.113 [DEBUG] [Thread-135168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:13:58.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:13:58.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:13:58.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:13:58.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:13:58.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:13:58.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:13:58.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.759514 -999.00  +18.40  14.24     81  +15.10 1 2 1 2 1    11    0 0.47 -139.42 ----- 12.6 14.2 196.4 18.8 19.5 -18.8 19.4 -17.8 19.2 -17.1 19.5 -18.4
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.759514
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:13:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:13:58.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:13:58.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:13:58.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:13:25', tmtdew=3.64, humidity=79.55, cloud=0.0, wind=17.77, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:13:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:13:58.138 [DEBUG] [Thread-135168] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:13:58.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:13:58.223 [DEBUG] [Thread-135171] [transport.py] [_log()] starting thread (client mode): 0xa57717e0
2026-02-11T20:13:58.224 [DEBUG] [Thread-135171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:13:58.238 [DEBUG] [Thread-135171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:13:58.238 [INFO] [Thread-135171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:13:58.245 [DEBUG] [Thread-135171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] client lang: <none>
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] server lang: <none>
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] kex follows: False
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] Compression: none
2026-02-11T20:13:58.246 [DEBUG] [Thread-135171] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:13:58.301 [DEBUG] [Thread-135171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:13:58.302 [DEBUG] [Thread-135171] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:13:58.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:13:58.302 [DEBUG] [Thread-135171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:13:58.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:13:58.359 [DEBUG] [Thread-135171] [transport.py] [_log()] userauth is OK
2026-02-11T20:13:58.359 [DEBUG] [Thread-135171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:13:58.359 [DEBUG] [Thread-135171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:13:58.359 [DEBUG] [Thread-135171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:13:58.359 [DEBUG] [Thread-135171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:13:58.372 [INFO] [Thread-135171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:13:58.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:13:58.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:13:59.206 [DEBUG] [Thread-135171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:13:59.206 [DEBUG] [Thread-135171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:13:59.254 [DEBUG] [Thread-135171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:13:59.254 [DEBUG] [Thread-135171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:13:59.263 [DEBUG] [Thread-135171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:13:59.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:13:59.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:13:59.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:13:59.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:13:59.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:13:59.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:13:59.302 [DEBUG] [Thread-135171] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:14:01.980 [DEBUG] [Thread-135173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:14:17.027 [DEBUG] [Thread-135174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:14:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:14:29.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:14:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:14:31.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 14), 3.64, 79.51, 0.0, 18.09, 18.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:14:31.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:14:00
2026-02-11T20:14:31.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:14:31.818 [DEBUG] [Thread-135175] [transport.py] [_log()] starting thread (client mode): 0x9eb04f40
2026-02-11T20:14:31.818 [DEBUG] [Thread-135175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:14:31.839 [DEBUG] [Thread-135175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:14:31.839 [INFO] [Thread-135175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] client lang: <none>
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] server lang: <none>
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] kex follows: False
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:14:31.842 [DEBUG] [Thread-135175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:14:31.843 [DEBUG] [Thread-135175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:14:31.843 [DEBUG] [Thread-135175] [transport.py] [_log()] Compression: none
2026-02-11T20:14:31.843 [DEBUG] [Thread-135175] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:14:31.857 [DEBUG] [Thread-135175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:14:31.858 [DEBUG] [Thread-135175] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:14:31.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:14:31.859 [DEBUG] [Thread-135175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:14:31.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:14:31.861 [DEBUG] [Thread-135175] [transport.py] [_log()] userauth is OK
2026-02-11T20:14:31.861 [DEBUG] [Thread-135175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:14:31.861 [DEBUG] [Thread-135175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:14:31.861 [DEBUG] [Thread-135175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:14:31.861 [DEBUG] [Thread-135175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:14:31.886 [INFO] [Thread-135175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:14:31.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:14:32.061 [DEBUG] [Thread-135177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:14:32.541 [DEBUG] [Thread-135175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:14:32.541 [DEBUG] [Thread-135175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:14:32.541 [DEBUG] [Thread-135175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:14:32.582 [DEBUG] [Thread-135175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:14:32.583 [DEBUG] [Thread-135175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:14:32.586 [DEBUG] [Thread-135175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:14:32.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:14:32.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:14:32.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:14:32.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:14:32.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:14:32.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:14:32.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:14:32.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:14:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:14:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.759861 -999.00  +18.40  12.26     81  +15.10 1 2 1 2 1    10    0 0.37 -143.18 ----- 10.5 12.3 222.5 16.6 19.5 -19.0 19.4 -17.8 19.2 -17.1 19.4 -18.3
2026-02-11T20:14:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:14:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:14:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.759861
2026-02-11T20:14:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:14:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:14:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:14:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:14:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:14:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:14:00', tmtdew=3.64, humidity=79.51, cloud=0.0, wind=18.09, temperature=18.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:14:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:14:32.612 [DEBUG] [Thread-135175] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:14:32.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:14:32.705 [DEBUG] [Thread-135179] [transport.py] [_log()] starting thread (client mode): 0xa575a020
2026-02-11T20:14:32.705 [DEBUG] [Thread-135179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:14:32.720 [DEBUG] [Thread-135179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:14:32.720 [INFO] [Thread-135179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:14:32.727 [DEBUG] [Thread-135179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] client lang: <none>
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] server lang: <none>
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] kex follows: False
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] Compression: none
2026-02-11T20:14:32.728 [DEBUG] [Thread-135179] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:14:32.788 [DEBUG] [Thread-135179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:14:32.788 [DEBUG] [Thread-135179] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:14:32.789 [DEBUG] [Thread-135179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:14:32.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:14:32.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:14:32.844 [DEBUG] [Thread-135179] [transport.py] [_log()] userauth is OK
2026-02-11T20:14:32.844 [DEBUG] [Thread-135179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:14:32.844 [DEBUG] [Thread-135179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:14:32.844 [DEBUG] [Thread-135179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:14:32.844 [DEBUG] [Thread-135179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:14:32.862 [INFO] [Thread-135179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:14:32.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:14:32.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:14:33.712 [DEBUG] [Thread-135179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:14:33.712 [DEBUG] [Thread-135179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:14:33.759 [DEBUG] [Thread-135179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:14:33.759 [DEBUG] [Thread-135179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:14:33.773 [DEBUG] [Thread-135179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:14:33.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:14:33.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:14:33.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:14:33.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:14:33.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:14:33.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:14:33.813 [DEBUG] [Thread-135179] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:14:37.395 [DEBUG] [Thread-135181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:14:45.907 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:14:45.908 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:14:47.094 [DEBUG] [Thread-135182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:15:02.130 [DEBUG] [Thread-135183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:15:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:15:03.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:15:03.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:15:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 14, 35), 3.86, 78.13, 0.0, 18.81, 18.39, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:15:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:14:35
2026-02-11T20:15:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:15:06.266 [DEBUG] [Thread-135184] [transport.py] [_log()] starting thread (client mode): 0xa2d68700
2026-02-11T20:15:06.266 [DEBUG] [Thread-135184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:15:06.286 [DEBUG] [Thread-135184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:15:06.286 [INFO] [Thread-135184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] client lang: <none>
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] server lang: <none>
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] kex follows: False
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:15:06.288 [DEBUG] [Thread-135184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:15:06.289 [DEBUG] [Thread-135184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:15:06.289 [DEBUG] [Thread-135184] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:15:06.289 [DEBUG] [Thread-135184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:15:06.289 [DEBUG] [Thread-135184] [transport.py] [_log()] Compression: none
2026-02-11T20:15:06.289 [DEBUG] [Thread-135184] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:15:06.301 [DEBUG] [Thread-135184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:15:06.302 [DEBUG] [Thread-135184] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:15:06.302 [DEBUG] [Thread-135184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:15:06.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:15:06.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:15:06.305 [DEBUG] [Thread-135184] [transport.py] [_log()] userauth is OK
2026-02-11T20:15:06.305 [DEBUG] [Thread-135184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:15:06.305 [DEBUG] [Thread-135184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:15:06.305 [DEBUG] [Thread-135184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:15:06.306 [DEBUG] [Thread-135184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:15:06.325 [INFO] [Thread-135184] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:15:06.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:15:07.305 [DEBUG] [Thread-135184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:15:07.305 [DEBUG] [Thread-135184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:15:07.306 [DEBUG] [Thread-135184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:15:07.346 [DEBUG] [Thread-135184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:15:07.347 [DEBUG] [Thread-135184] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:15:07.350 [DEBUG] [Thread-135184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:15:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:15:07.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:15:07.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:15:07.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:15:07.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:15:07.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:15:07.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:15:07.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:15:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:15:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.760209 -999.00  +18.30   9.37     81  +15.10 1 2 1 2 1     9    0 0.53 -139.71 ----- 7.8 9.4 227.6 18.2 19.4 -18.8 19.4 -17.6 19.1 -17.2 19.4 -18.1
2026-02-11T20:15:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:15:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:15:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.760209
2026-02-11T20:15:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:15:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:15:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:15:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:15:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:15:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:14:35', tmtdew=3.86, humidity=78.13, cloud=0.0, wind=18.81, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:14:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:15:07.378 [DEBUG] [Thread-135184] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:15:07.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:15:07.472 [DEBUG] [Thread-135187] [transport.py] [_log()] starting thread (client mode): 0xa575a020
2026-02-11T20:15:07.472 [DEBUG] [Thread-135187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:15:07.487 [DEBUG] [Thread-135187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:15:07.487 [INFO] [Thread-135187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] client lang: <none>
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] server lang: <none>
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] kex follows: False
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:15:07.495 [DEBUG] [Thread-135187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:15:07.496 [DEBUG] [Thread-135187] [transport.py] [_log()] Compression: none
2026-02-11T20:15:07.496 [DEBUG] [Thread-135187] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:15:07.551 [DEBUG] [Thread-135187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:15:07.552 [DEBUG] [Thread-135187] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:15:07.552 [DEBUG] [Thread-135187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:15:07.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:15:07.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:15:07.608 [DEBUG] [Thread-135187] [transport.py] [_log()] userauth is OK
2026-02-11T20:15:07.608 [DEBUG] [Thread-135187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:15:07.608 [DEBUG] [Thread-135187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:15:07.608 [DEBUG] [Thread-135187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:15:07.609 [DEBUG] [Thread-135187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:15:07.627 [INFO] [Thread-135187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:15:07.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:15:07.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:15:08.461 [DEBUG] [Thread-135187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:15:08.461 [DEBUG] [Thread-135187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:15:08.509 [DEBUG] [Thread-135187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:15:08.510 [DEBUG] [Thread-135187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:15:08.519 [DEBUG] [Thread-135187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:15:08.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:15:08.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:15:08.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:15:08.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:15:08.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:15:08.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:15:08.555 [DEBUG] [Thread-135187] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:15:17.163 [DEBUG] [Thread-135189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:15:32.209 [DEBUG] [Thread-135190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:15:37.471 [DEBUG] [Thread-135191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:15:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:15:38.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:15:38.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:15:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 15, 11), 3.62, 79.65, 0.0, 16.57, 18.13, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:15:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:15:11
2026-02-11T20:15:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:15:40.967 [DEBUG] [Thread-135192] [transport.py] [_log()] starting thread (client mode): 0xa2d6b610
2026-02-11T20:15:40.967 [DEBUG] [Thread-135192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:15:40.987 [DEBUG] [Thread-135192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:15:40.987 [INFO] [Thread-135192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:15:40.990 [DEBUG] [Thread-135192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:15:40.991 [DEBUG] [Thread-135192] [transport.py] [_log()] client lang: <none>
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] server lang: <none>
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] kex follows: False
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] Compression: none
2026-02-11T20:15:40.992 [DEBUG] [Thread-135192] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:15:41.009 [DEBUG] [Thread-135192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:15:41.009 [DEBUG] [Thread-135192] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:15:41.010 [DEBUG] [Thread-135192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:15:41.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:15:41.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:15:41.012 [DEBUG] [Thread-135192] [transport.py] [_log()] userauth is OK
2026-02-11T20:15:41.012 [DEBUG] [Thread-135192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:15:41.012 [DEBUG] [Thread-135192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:15:41.012 [DEBUG] [Thread-135192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:15:41.012 [DEBUG] [Thread-135192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:15:41.035 [INFO] [Thread-135192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:15:41.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:15:41.670 [DEBUG] [Thread-135192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:15:41.670 [DEBUG] [Thread-135192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:15:41.670 [DEBUG] [Thread-135192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:15:41.710 [DEBUG] [Thread-135192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:15:41.711 [DEBUG] [Thread-135192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:15:41.714 [DEBUG] [Thread-135192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:15:41.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:15:41.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:15:41.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:15:41.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:15:41.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:15:41.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:15:41.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:15:41.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:15:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:15:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.760556 -999.00  +18.40   7.01     81  +15.10 1 2 1 2 1     8    0 0.13 -146.90 ----- 13.7 7.0 210.5 16.9 19.5 -18.8 19.3 -17.7 19.1 -17.1 19.4 -18.2
2026-02-11T20:15:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:15:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:15:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.760556
2026-02-11T20:15:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:15:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:15:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:15:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:15:41.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:15:41.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:15:11', tmtdew=3.62, humidity=79.65, cloud=0.0, wind=16.57, temperature=18.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:15:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:15:41.740 [DEBUG] [Thread-135192] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:15:41.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:15:41.839 [DEBUG] [Thread-135195] [transport.py] [_log()] starting thread (client mode): 0xa575b4f0
2026-02-11T20:15:41.839 [DEBUG] [Thread-135195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:15:41.853 [DEBUG] [Thread-135195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:15:41.854 [INFO] [Thread-135195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:15:41.861 [DEBUG] [Thread-135195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:15:41.862 [DEBUG] [Thread-135195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:15:41.862 [DEBUG] [Thread-135195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:15:41.862 [DEBUG] [Thread-135195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:41.862 [DEBUG] [Thread-135195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:15:41.862 [DEBUG] [Thread-135195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:41.862 [DEBUG] [Thread-135195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] client lang: <none>
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] server lang: <none>
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] kex follows: False
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:15:41.863 [DEBUG] [Thread-135195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:15:41.864 [DEBUG] [Thread-135195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:15:41.864 [DEBUG] [Thread-135195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:15:41.864 [DEBUG] [Thread-135195] [transport.py] [_log()] Compression: none
2026-02-11T20:15:41.864 [DEBUG] [Thread-135195] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:15:41.920 [DEBUG] [Thread-135195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:15:41.920 [DEBUG] [Thread-135195] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:15:41.921 [DEBUG] [Thread-135195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:15:41.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:15:41.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:15:41.979 [DEBUG] [Thread-135195] [transport.py] [_log()] userauth is OK
2026-02-11T20:15:41.980 [DEBUG] [Thread-135195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:15:41.980 [DEBUG] [Thread-135195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:15:41.980 [DEBUG] [Thread-135195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:15:41.980 [DEBUG] [Thread-135195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:15:41.999 [INFO] [Thread-135195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:15:41.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:15:42.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:15:42.824 [DEBUG] [Thread-135195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:15:42.824 [DEBUG] [Thread-135195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:15:42.872 [DEBUG] [Thread-135195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:15:42.872 [DEBUG] [Thread-135195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:15:42.881 [DEBUG] [Thread-135195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:15:42.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:15:42.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:15:42.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:15:42.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:15:42.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:15:42.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:15:42.916 [DEBUG] [Thread-135195] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:15:47.247 [DEBUG] [Thread-135197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:15:51.518 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:15:51.520 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:16:02.300 [DEBUG] [Thread-135198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:16:12.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:16:12.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:16:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:16:14.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 15, 47), 3.56, 79.66, 0.0, 17.26, 18.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:16:14.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:15:47
2026-02-11T20:16:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:16:15.540 [DEBUG] [Thread-135199] [transport.py] [_log()] starting thread (client mode): 0xa5771d80
2026-02-11T20:16:15.541 [DEBUG] [Thread-135199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:16:15.561 [DEBUG] [Thread-135199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:16:15.561 [INFO] [Thread-135199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] client lang: <none>
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] server lang: <none>
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] kex follows: False
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:16:15.564 [DEBUG] [Thread-135199] [transport.py] [_log()] Compression: none
2026-02-11T20:16:15.565 [DEBUG] [Thread-135199] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:16:15.584 [DEBUG] [Thread-135199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:16:15.584 [DEBUG] [Thread-135199] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:16:15.585 [DEBUG] [Thread-135199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:16:15.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:16:15.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:16:15.587 [DEBUG] [Thread-135199] [transport.py] [_log()] userauth is OK
2026-02-11T20:16:15.587 [DEBUG] [Thread-135199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:16:15.587 [DEBUG] [Thread-135199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:16:15.587 [DEBUG] [Thread-135199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:16:15.587 [DEBUG] [Thread-135199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:16:15.623 [INFO] [Thread-135199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:16:15.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:16:16.293 [DEBUG] [Thread-135199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:16:16.293 [DEBUG] [Thread-135199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:16:16.294 [DEBUG] [Thread-135199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:16:16.334 [DEBUG] [Thread-135199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:16:16.335 [DEBUG] [Thread-135199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:16:16.338 [DEBUG] [Thread-135199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:16:16.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:16:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:16:16.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:16:16.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:16:16.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:16:16.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:16:16.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:16:16.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:16:16.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:16:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.760903 -999.00  +18.30  12.06     81  +15.10 1 2 1 2 1     8    0 -0.08 -152.99 ----- 14.1 12.1 215.8 20.6 19.4 -18.6 19.3 -17.8 19.2 -17.1 19.4 -18.2
2026-02-11T20:16:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:16:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:16:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.760903
2026-02-11T20:16:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:15:47', tmtdew=3.56, humidity=79.66, cloud=0.0, wind=17.26, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:15:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:16:16.366 [DEBUG] [Thread-135199] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:16:16.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:16:16.471 [DEBUG] [Thread-135202] [transport.py] [_log()] starting thread (client mode): 0xa57e3eb0
2026-02-11T20:16:16.472 [DEBUG] [Thread-135202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:16:16.493 [DEBUG] [Thread-135202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:16:16.494 [INFO] [Thread-135202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:16:16.501 [DEBUG] [Thread-135202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:16:16.501 [DEBUG] [Thread-135202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:16:16.501 [DEBUG] [Thread-135202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] client lang: <none>
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] server lang: <none>
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] kex follows: False
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:16:16.502 [DEBUG] [Thread-135202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:16:16.503 [DEBUG] [Thread-135202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:16:16.503 [DEBUG] [Thread-135202] [transport.py] [_log()] Compression: none
2026-02-11T20:16:16.503 [DEBUG] [Thread-135202] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:16:16.559 [DEBUG] [Thread-135202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:16:16.560 [DEBUG] [Thread-135202] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:16:16.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:16:16.561 [DEBUG] [Thread-135202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:16:16.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:16:16.616 [DEBUG] [Thread-135202] [transport.py] [_log()] userauth is OK
2026-02-11T20:16:16.616 [DEBUG] [Thread-135202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:16:16.616 [DEBUG] [Thread-135202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:16:16.616 [DEBUG] [Thread-135202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:16:16.617 [DEBUG] [Thread-135202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:16:16.635 [INFO] [Thread-135202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:16:16.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:16:16.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:16:17.331 [DEBUG] [Thread-135204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:16:17.466 [DEBUG] [Thread-135202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:16:17.466 [DEBUG] [Thread-135202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:16:17.515 [DEBUG] [Thread-135202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:16:17.515 [DEBUG] [Thread-135202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:16:17.524 [DEBUG] [Thread-135202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:16:17.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:16:17.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:16:17.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:16:17.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:16:17.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:16:17.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:16:17.565 [DEBUG] [Thread-135202] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:16:32.385 [DEBUG] [Thread-135205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:16:37.545 [DEBUG] [Thread-135206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:16:47.423 [DEBUG] [Thread-135207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:16:47.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:16:47.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:16:47.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:16:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 16, 22), 3.55, 79.71, 0.0, 17.54, 18.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:16:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:16:22
2026-02-11T20:16:49.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:16:49.976 [DEBUG] [Thread-135208] [transport.py] [_log()] starting thread (client mode): 0xa57585e0
2026-02-11T20:16:49.977 [DEBUG] [Thread-135208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:16:49.997 [DEBUG] [Thread-135208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:16:49.997 [INFO] [Thread-135208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] client lang: <none>
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] server lang: <none>
2026-02-11T20:16:50.000 [DEBUG] [Thread-135208] [transport.py] [_log()] kex follows: False
2026-02-11T20:16:50.001 [DEBUG] [Thread-135208] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:16:50.001 [DEBUG] [Thread-135208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:16:50.001 [DEBUG] [Thread-135208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:16:50.001 [DEBUG] [Thread-135208] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:16:50.001 [DEBUG] [Thread-135208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:16:50.001 [DEBUG] [Thread-135208] [transport.py] [_log()] Compression: none
2026-02-11T20:16:50.001 [DEBUG] [Thread-135208] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:16:50.019 [DEBUG] [Thread-135208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:16:50.020 [DEBUG] [Thread-135208] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:16:50.020 [DEBUG] [Thread-135208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:16:50.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:16:50.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:16:50.023 [DEBUG] [Thread-135208] [transport.py] [_log()] userauth is OK
2026-02-11T20:16:50.023 [DEBUG] [Thread-135208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:16:50.023 [DEBUG] [Thread-135208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:16:50.023 [DEBUG] [Thread-135208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:16:50.023 [DEBUG] [Thread-135208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:16:50.043 [INFO] [Thread-135208] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:16:50.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:16:50.684 [DEBUG] [Thread-135208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:16:50.684 [DEBUG] [Thread-135208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:16:50.685 [DEBUG] [Thread-135208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:16:50.725 [DEBUG] [Thread-135208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:16:50.726 [DEBUG] [Thread-135208] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:16:50.729 [DEBUG] [Thread-135208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:16:50.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:16:50.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:16:50.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:16:50.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:16:50.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:16:50.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:16:50.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:16:50.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:16:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:16:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.761250 -999.00  +18.30  12.29     81  +15.10 1 2 1 2 1     7    0 -0.61 -166.46 ZNES. 15.9 12.3 204.9 20.4 19.4 -18.8 19.3 -17.6 19.1 -17.1 19.4 -18.1
2026-02-11T20:16:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:16:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:16:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.761250
2026-02-11T20:16:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:16:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:16:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:16:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:16:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:16:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:16:22', tmtdew=3.55, humidity=79.71, cloud=0.0, wind=17.54, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:16:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:16:50.754 [DEBUG] [Thread-135208] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:16:50.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:16:50.850 [DEBUG] [Thread-135211] [transport.py] [_log()] starting thread (client mode): 0xa5759510
2026-02-11T20:16:50.851 [DEBUG] [Thread-135211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:16:50.865 [DEBUG] [Thread-135211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:16:50.865 [INFO] [Thread-135211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] client lang: <none>
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] server lang: <none>
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] kex follows: False
2026-02-11T20:16:50.873 [DEBUG] [Thread-135211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:16:50.874 [DEBUG] [Thread-135211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:16:50.874 [DEBUG] [Thread-135211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:16:50.874 [DEBUG] [Thread-135211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:16:50.874 [DEBUG] [Thread-135211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:16:50.874 [DEBUG] [Thread-135211] [transport.py] [_log()] Compression: none
2026-02-11T20:16:50.874 [DEBUG] [Thread-135211] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:16:50.931 [DEBUG] [Thread-135211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:16:50.932 [DEBUG] [Thread-135211] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:16:50.933 [DEBUG] [Thread-135211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:16:50.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:16:50.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:16:50.988 [DEBUG] [Thread-135211] [transport.py] [_log()] userauth is OK
2026-02-11T20:16:50.988 [DEBUG] [Thread-135211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:16:50.988 [DEBUG] [Thread-135211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:16:50.988 [DEBUG] [Thread-135211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:16:50.988 [DEBUG] [Thread-135211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:16:51.006 [INFO] [Thread-135211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:16:51.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:16:51.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:16:51.812 [DEBUG] [Thread-135211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:16:51.812 [DEBUG] [Thread-135211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:16:51.860 [DEBUG] [Thread-135211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:16:51.861 [DEBUG] [Thread-135211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:16:51.870 [DEBUG] [Thread-135211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:16:51.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:16:51.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:16:51.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
2026-02-11T20:16:51.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:16:51.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:16:51.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:16:51.913 [DEBUG] [Thread-135211] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:16:55.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:16:55.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:17:02.459 [DEBUG] [Thread-135213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:17:17.511 [DEBUG] [Thread-135214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:17:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:17:21.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:17:21.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:17:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 16, 58), 3.55, 79.73, 0.0, 18.09, 18.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:17:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:16:58
2026-02-11T20:17:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:17:24.291 [DEBUG] [Thread-135215] [transport.py] [_log()] starting thread (client mode): 0xa5759ae0
2026-02-11T20:17:24.291 [DEBUG] [Thread-135215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:17:24.312 [DEBUG] [Thread-135215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:17:24.312 [INFO] [Thread-135215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:17:24.315 [DEBUG] [Thread-135215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:17:24.315 [DEBUG] [Thread-135215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] client lang: <none>
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] server lang: <none>
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] kex follows: False
2026-02-11T20:17:24.316 [DEBUG] [Thread-135215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:17:24.317 [DEBUG] [Thread-135215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:17:24.317 [DEBUG] [Thread-135215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:17:24.317 [DEBUG] [Thread-135215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:17:24.317 [DEBUG] [Thread-135215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:17:24.317 [DEBUG] [Thread-135215] [transport.py] [_log()] Compression: none
2026-02-11T20:17:24.317 [DEBUG] [Thread-135215] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:17:24.334 [DEBUG] [Thread-135215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:17:24.334 [DEBUG] [Thread-135215] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:17:24.335 [DEBUG] [Thread-135215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:17:24.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:17:24.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:17:24.337 [DEBUG] [Thread-135215] [transport.py] [_log()] userauth is OK
2026-02-11T20:17:24.337 [DEBUG] [Thread-135215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:17:24.337 [DEBUG] [Thread-135215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:17:24.337 [DEBUG] [Thread-135215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:17:24.337 [DEBUG] [Thread-135215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:17:24.354 [INFO] [Thread-135215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:17:24.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:17:25.013 [DEBUG] [Thread-135215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:17:25.013 [DEBUG] [Thread-135215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:17:25.014 [DEBUG] [Thread-135215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:17:25.054 [DEBUG] [Thread-135215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:17:25.055 [DEBUG] [Thread-135215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:17:25.058 [DEBUG] [Thread-135215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:17:25.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:17:25.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:17:25.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:17:25.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:17:25.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:17:25.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:17:25.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:17:25.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:17:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:17:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.761597 -999.00  +18.30  11.38     81  +15.10 1 2 1 2 1     6    0 -0.54 -166.94 ZNES. 10.6 11.4 207.1 16.8 19.4 -18.4 19.3 -17.7 19.1 -16.9 19.4 -18.1
2026-02-11T20:17:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:17:25.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:17:25.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.761597
2026-02-11T20:17:25.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:17:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:17:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:17:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:17:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:17:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:16:58', tmtdew=3.55, humidity=79.73, cloud=0.0, wind=18.09, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:16:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:17:25.094 [DEBUG] [Thread-135215] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:17:25.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:17:25.192 [DEBUG] [Thread-135218] [transport.py] [_log()] starting thread (client mode): 0xa57c0c70
2026-02-11T20:17:25.192 [DEBUG] [Thread-135218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:17:25.206 [DEBUG] [Thread-135218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:17:25.206 [INFO] [Thread-135218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:25.214 [DEBUG] [Thread-135218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] client lang: <none>
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] server lang: <none>
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] kex follows: False
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:17:25.215 [DEBUG] [Thread-135218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:17:25.216 [DEBUG] [Thread-135218] [transport.py] [_log()] Compression: none
2026-02-11T20:17:25.216 [DEBUG] [Thread-135218] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:17:25.272 [DEBUG] [Thread-135218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:17:25.273 [DEBUG] [Thread-135218] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:17:25.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:17:25.274 [DEBUG] [Thread-135218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:17:25.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:17:25.327 [DEBUG] [Thread-135218] [transport.py] [_log()] userauth is OK
2026-02-11T20:17:25.328 [DEBUG] [Thread-135218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:17:25.328 [DEBUG] [Thread-135218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:17:25.328 [DEBUG] [Thread-135218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:17:25.328 [DEBUG] [Thread-135218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:17:25.352 [INFO] [Thread-135218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:17:25.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:17:25.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:17:26.175 [DEBUG] [Thread-135218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:17:26.175 [DEBUG] [Thread-135218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:17:26.223 [DEBUG] [Thread-135218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:17:26.223 [DEBUG] [Thread-135218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:17:26.231 [DEBUG] [Thread-135218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:17:26.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:17:26.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')
2026-02-11T20:17:26.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:17:26.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:17:26.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:17:26.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:17:26.267 [DEBUG] [Thread-135218] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:17:32.546 [DEBUG] [Thread-135220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:17:37.602 [DEBUG] [Thread-135221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:17:47.606 [DEBUG] [Thread-135222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:17:56.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:17:56.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:17:56.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:17:58.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 17, 33), 3.77, 78.59, 0.0, 22.69, 18.49, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:17:58.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:17:33
2026-02-11T20:17:58.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:17:58.840 [DEBUG] [Thread-135223] [transport.py] [_log()] starting thread (client mode): 0xa57c2dd0
2026-02-11T20:17:58.840 [DEBUG] [Thread-135223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:17:58.860 [DEBUG] [Thread-135223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:17:58.861 [INFO] [Thread-135223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:17:58.864 [DEBUG] [Thread-135223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:17:58.864 [DEBUG] [Thread-135223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] client lang: <none>
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] server lang: <none>
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] kex follows: False
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] Compression: none
2026-02-11T20:17:58.865 [DEBUG] [Thread-135223] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:17:58.882 [DEBUG] [Thread-135223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:17:58.883 [DEBUG] [Thread-135223] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:17:58.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:17:58.884 [DEBUG] [Thread-135223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:17:58.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:17:58.886 [DEBUG] [Thread-135223] [transport.py] [_log()] userauth is OK
2026-02-11T20:17:58.886 [DEBUG] [Thread-135223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:17:58.886 [DEBUG] [Thread-135223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:17:58.887 [DEBUG] [Thread-135223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:17:58.887 [DEBUG] [Thread-135223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:17:58.911 [INFO] [Thread-135223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:17:58.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:17:59.725 [DEBUG] [Thread-135223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:17:59.726 [DEBUG] [Thread-135223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:17:59.726 [DEBUG] [Thread-135223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:17:59.766 [DEBUG] [Thread-135223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:17:59.766 [DEBUG] [Thread-135223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:17:59.770 [DEBUG] [Thread-135223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:17:59.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:17:59.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:17:59.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:17:59.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:17:59.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:17:59.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:17:59.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:17:59.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:17:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:17:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.761945 -999.00  +18.30  13.13     81  +15.10 1 2 1 2 1     6    0 -1.39 -186.00 ZNES. 12.3 13.1 226.2 16.9 19.4 -18.6 19.3 -17.7 19.1 -17.1 19.3 -17.9
2026-02-11T20:17:59.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:17:59.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:17:59.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.761945
2026-02-11T20:17:59.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:17:59.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:17:59.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:17:59.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:17:59.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:17:59.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:17:33', tmtdew=3.77, humidity=78.59, cloud=0.0, wind=22.69, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:17:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:17:59.792 [DEBUG] [Thread-135223] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:17:59.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:17:59.887 [DEBUG] [Thread-135226] [transport.py] [_log()] starting thread (client mode): 0xa2d69ea0
2026-02-11T20:17:59.887 [DEBUG] [Thread-135226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:17:59.901 [DEBUG] [Thread-135226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:17:59.901 [INFO] [Thread-135226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:17:59.909 [DEBUG] [Thread-135226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:17:59.909 [DEBUG] [Thread-135226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:17:59.909 [DEBUG] [Thread-135226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:17:59.909 [DEBUG] [Thread-135226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:59.909 [DEBUG] [Thread-135226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:17:59.909 [DEBUG] [Thread-135226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:59.909 [DEBUG] [Thread-135226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] client lang: <none>
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] server lang: <none>
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] kex follows: False
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] Compression: none
2026-02-11T20:17:59.910 [DEBUG] [Thread-135226] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:17:59.968 [DEBUG] [Thread-135226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:17:59.969 [DEBUG] [Thread-135226] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:17:59.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:17:59.970 [DEBUG] [Thread-135226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:17:59.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:18:00.023 [DEBUG] [Thread-135226] [transport.py] [_log()] userauth is OK
2026-02-11T20:18:00.023 [DEBUG] [Thread-135226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:18:00.024 [DEBUG] [Thread-135226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:18:00.024 [DEBUG] [Thread-135226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:18:00.024 [DEBUG] [Thread-135226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:18:00.037 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:18:00.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:18:00.045 [INFO] [Thread-135226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:18:00.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:18:00.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:18:00.902 [DEBUG] [Thread-135226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:18:00.903 [DEBUG] [Thread-135226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:18:00.950 [DEBUG] [Thread-135226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:18:00.951 [DEBUG] [Thread-135226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:18:00.963 [DEBUG] [Thread-135226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:18:00.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:18: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')
2026-02-11T20:18: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
2026-02-11T20:18:00.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:18:00.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:18:00.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:18:01.003 [DEBUG] [Thread-135226] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:18:02.643 [DEBUG] [Thread-135228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:18:17.683 [DEBUG] [Thread-135229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:18:31.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:18:31.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:18:31.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:18:32.719 [DEBUG] [Thread-135230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:18:32.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 18, 9), 3.53, 79.83, 0.0, 16.66, 18.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:18:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:18:09
2026-02-11T20:18:33.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:18:33.405 [DEBUG] [Thread-135231] [transport.py] [_log()] starting thread (client mode): 0xa5741360
2026-02-11T20:18:33.405 [DEBUG] [Thread-135231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:18:33.425 [DEBUG] [Thread-135231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:18:33.425 [INFO] [Thread-135231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:18:33.428 [DEBUG] [Thread-135231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:18:33.428 [DEBUG] [Thread-135231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] client lang: <none>
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] server lang: <none>
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] kex follows: False
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] Compression: none
2026-02-11T20:18:33.429 [DEBUG] [Thread-135231] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:18:33.447 [DEBUG] [Thread-135231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:18:33.448 [DEBUG] [Thread-135231] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:18:33.448 [DEBUG] [Thread-135231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:18:33.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:18:33.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:18:33.450 [DEBUG] [Thread-135231] [transport.py] [_log()] userauth is OK
2026-02-11T20:18:33.451 [DEBUG] [Thread-135231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:18:33.451 [DEBUG] [Thread-135231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:18:33.451 [DEBUG] [Thread-135231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:18:33.451 [DEBUG] [Thread-135231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:18:33.472 [INFO] [Thread-135231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:18:33.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:18:34.077 [DEBUG] [Thread-135231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:18:34.077 [DEBUG] [Thread-135231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:18:34.078 [DEBUG] [Thread-135231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:18:34.118 [DEBUG] [Thread-135231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:18:34.118 [DEBUG] [Thread-135231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:18:34.121 [DEBUG] [Thread-135231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:18:34.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:18:34.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:18:34.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:18:34.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:18:34.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:18:34.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:18:34.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:18:34.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:18:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:18:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.762639 -999.00  +18.30   6.73     81  +15.10 1 2 1 2 1     5    0 -1.31 -188.74 ZNES. 11.8 6.7 192.2 13.8 19.3 -18.6 19.2 -17.8 19.1 -17.0 19.3 -17.9
2026-02-11T20:18:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:18:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:18:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.762639
2026-02-11T20:18:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:18:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:18:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:18:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:18:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:18:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:18:09', tmtdew=3.53, humidity=79.83, cloud=0.0, wind=16.66, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:18:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:18:34.145 [DEBUG] [Thread-135231] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:18:34.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:18:34.246 [DEBUG] [Thread-135234] [transport.py] [_log()] starting thread (client mode): 0xa57b38e0
2026-02-11T20:18:34.246 [DEBUG] [Thread-135234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:18:34.262 [DEBUG] [Thread-135234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:18:34.262 [INFO] [Thread-135234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:18:34.270 [DEBUG] [Thread-135234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:18:34.270 [DEBUG] [Thread-135234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] client lang: <none>
2026-02-11T20:18:34.271 [DEBUG] [Thread-135234] [transport.py] [_log()] server lang: <none>
2026-02-11T20:18:34.272 [DEBUG] [Thread-135234] [transport.py] [_log()] kex follows: False
2026-02-11T20:18:34.272 [DEBUG] [Thread-135234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:18:34.272 [DEBUG] [Thread-135234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:18:34.272 [DEBUG] [Thread-135234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:18:34.272 [DEBUG] [Thread-135234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:18:34.272 [DEBUG] [Thread-135234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:18:34.272 [DEBUG] [Thread-135234] [transport.py] [_log()] Compression: none
2026-02-11T20:18:34.273 [DEBUG] [Thread-135234] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:18:34.328 [DEBUG] [Thread-135234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:18:34.328 [DEBUG] [Thread-135234] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:18:34.329 [DEBUG] [Thread-135234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:18:34.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:18:34.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:18:34.384 [DEBUG] [Thread-135234] [transport.py] [_log()] userauth is OK
2026-02-11T20:18:34.386 [DEBUG] [Thread-135234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:18:34.387 [DEBUG] [Thread-135234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:18:34.387 [DEBUG] [Thread-135234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:18:34.387 [DEBUG] [Thread-135234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:18:34.404 [INFO] [Thread-135234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:18:34.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:18:34.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:18:35.325 [DEBUG] [Thread-135234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:18:35.325 [DEBUG] [Thread-135234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:18:35.374 [DEBUG] [Thread-135234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:18:35.374 [DEBUG] [Thread-135234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:18:35.383 [DEBUG] [Thread-135234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:18:35.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:18:35.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:18:35.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:18:35.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:18:35.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:18:35.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:18:35.420 [DEBUG] [Thread-135234] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:18:37.664 [DEBUG] [Thread-135236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:18:47.759 [DEBUG] [Thread-135237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:19:02.811 [DEBUG] [Thread-135238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:19:04.682 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:19:04.683 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:19:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:19:05.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:19:05.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:19:07.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 18, 44), 3.52, 79.88, 0.0, 15.35, 18.09, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:19:07.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:18:44
2026-02-11T20:19:07.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:19:07.871 [DEBUG] [Thread-135239] [transport.py] [_log()] starting thread (client mode): 0xa2db72e0
2026-02-11T20:19:07.872 [DEBUG] [Thread-135239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:19:07.887 [DEBUG] [Thread-135239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:19:07.887 [INFO] [Thread-135239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:19:07.890 [DEBUG] [Thread-135239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] client lang: <none>
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] server lang: <none>
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] kex follows: False
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] Compression: none
2026-02-11T20:19:07.891 [DEBUG] [Thread-135239] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:19:07.906 [DEBUG] [Thread-135239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:19:07.907 [DEBUG] [Thread-135239] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:19:07.907 [DEBUG] [Thread-135239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:19:07.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:19:07.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:19:07.909 [DEBUG] [Thread-135239] [transport.py] [_log()] userauth is OK
2026-02-11T20:19:07.909 [DEBUG] [Thread-135239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:19:07.909 [DEBUG] [Thread-135239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:19:07.910 [DEBUG] [Thread-135239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:19:07.910 [DEBUG] [Thread-135239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:19:07.928 [INFO] [Thread-135239] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:19:07.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:19:08.558 [DEBUG] [Thread-135239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:19:08.558 [DEBUG] [Thread-135239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:19:08.559 [DEBUG] [Thread-135239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:19:08.600 [DEBUG] [Thread-135239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:19:08.600 [DEBUG] [Thread-135239] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:19:08.603 [DEBUG] [Thread-135239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:19:08.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:19:08.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:19:08.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:19:08.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:19:08.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:19:08.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:19:08.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:19:08.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:19:08.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:19:08.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.762986 -999.00  +18.30  10.16     82  +15.10 1 2 1 2 1     4    0 -0.79 -168.44 ZNES. 11.6 10.2 207.8 19.3 19.3 -18.5 19.2 -17.7 19.1 -17.1 19.2 -18.0
2026-02-11T20:19:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:19:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:19:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.762986
2026-02-11T20:19:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:19:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:19:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:19:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:19:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:19:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:18:44', tmtdew=3.52, humidity=79.88, cloud=0.0, wind=15.35, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:18:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:19:08.630 [DEBUG] [Thread-135239] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:19:08.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:19:08.728 [DEBUG] [Thread-135242] [transport.py] [_log()] starting thread (client mode): 0xa5740b80
2026-02-11T20:19:08.728 [DEBUG] [Thread-135242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:19:08.745 [DEBUG] [Thread-135242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:19:08.745 [INFO] [Thread-135242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:19:08.752 [DEBUG] [Thread-135242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] client lang: <none>
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] server lang: <none>
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] kex follows: False
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:19:08.753 [DEBUG] [Thread-135242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:19:08.754 [DEBUG] [Thread-135242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:19:08.754 [DEBUG] [Thread-135242] [transport.py] [_log()] Compression: none
2026-02-11T20:19:08.754 [DEBUG] [Thread-135242] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:19:08.812 [DEBUG] [Thread-135242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:19:08.813 [DEBUG] [Thread-135242] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:19:08.813 [DEBUG] [Thread-135242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:19:08.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:19:08.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:19:08.877 [DEBUG] [Thread-135242] [transport.py] [_log()] userauth is OK
2026-02-11T20:19:08.877 [DEBUG] [Thread-135242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:19:08.878 [DEBUG] [Thread-135242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:19:08.878 [DEBUG] [Thread-135242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:19:08.878 [DEBUG] [Thread-135242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:19:08.897 [INFO] [Thread-135242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:19:08.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:19:08.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:19:09.765 [DEBUG] [Thread-135242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:19:09.765 [DEBUG] [Thread-135242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:19:09.813 [DEBUG] [Thread-135242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:19:09.813 [DEBUG] [Thread-135242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:19:09.823 [DEBUG] [Thread-135242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:19:09.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:19:09.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:19:09.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:19:09.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:19:09.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:19:09.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:19:09.865 [DEBUG] [Thread-135242] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:19:17.849 [DEBUG] [Thread-135244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:19:32.899 [DEBUG] [Thread-135245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:19:37.719 [DEBUG] [Thread-135246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:19:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:19:39.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:19:39.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:19:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 19, 20), 3.51, 79.94, 0.0, 13.22, 18.11, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:19:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:19:20
2026-02-11T20:19:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:19:42.314 [DEBUG] [Thread-135247] [transport.py] [_log()] starting thread (client mode): 0xa2d68c70
2026-02-11T20:19:42.314 [DEBUG] [Thread-135247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:19:42.333 [DEBUG] [Thread-135247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:19:42.334 [INFO] [Thread-135247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] client lang: <none>
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] server lang: <none>
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] kex follows: False
2026-02-11T20:19:42.337 [DEBUG] [Thread-135247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:19:42.338 [DEBUG] [Thread-135247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:19:42.338 [DEBUG] [Thread-135247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:19:42.338 [DEBUG] [Thread-135247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:19:42.338 [DEBUG] [Thread-135247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:19:42.338 [DEBUG] [Thread-135247] [transport.py] [_log()] Compression: none
2026-02-11T20:19:42.338 [DEBUG] [Thread-135247] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:19:42.356 [DEBUG] [Thread-135247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:19:42.357 [DEBUG] [Thread-135247] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:19:42.357 [DEBUG] [Thread-135247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:19:42.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:19:42.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:19:42.359 [DEBUG] [Thread-135247] [transport.py] [_log()] userauth is OK
2026-02-11T20:19:42.360 [DEBUG] [Thread-135247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:19:42.360 [DEBUG] [Thread-135247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:19:42.360 [DEBUG] [Thread-135247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:19:42.360 [DEBUG] [Thread-135247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:19:42.384 [INFO] [Thread-135247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:19:42.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:19:42.966 [DEBUG] [Thread-135247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:19:42.967 [DEBUG] [Thread-135247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:19:42.967 [DEBUG] [Thread-135247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:19:43.009 [DEBUG] [Thread-135247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:19:43.009 [DEBUG] [Thread-135247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:19:43.012 [DEBUG] [Thread-135247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:19:43.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:19:43.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:19:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:19:43.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:19:43.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:19:43.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:19:43.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:19:43.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:19:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:19:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.763334 -999.00  +18.30   7.45     82  +15.20 1 2 1 2 1     4    0 -1.26 -177.27 ZNESw 10.1 7.5 189.6 19.0 19.3 -18.7 19.2 -17.5 19.0 -16.9 19.3 -18.0
2026-02-11T20:19:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:19:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:19:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.763334
2026-02-11T20:19:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:19:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:19:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:19:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:19:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:19:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:19:20', tmtdew=3.51, humidity=79.94, cloud=0.0, wind=13.22, temperature=18.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:19:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:19:43.034 [DEBUG] [Thread-135247] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:19:43.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:19:43.132 [DEBUG] [Thread-135250] [transport.py] [_log()] starting thread (client mode): 0xa57c0040
2026-02-11T20:19:43.132 [DEBUG] [Thread-135250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:19:43.151 [DEBUG] [Thread-135250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:19:43.151 [INFO] [Thread-135250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:19:43.160 [DEBUG] [Thread-135250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] client lang: <none>
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] server lang: <none>
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] kex follows: False
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] Compression: none
2026-02-11T20:19:43.161 [DEBUG] [Thread-135250] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:19:43.215 [DEBUG] [Thread-135250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:19:43.215 [DEBUG] [Thread-135250] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:19:43.216 [DEBUG] [Thread-135250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:19:43.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:19:43.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:19:43.272 [DEBUG] [Thread-135250] [transport.py] [_log()] userauth is OK
2026-02-11T20:19:43.272 [DEBUG] [Thread-135250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:19:43.272 [DEBUG] [Thread-135250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:19:43.272 [DEBUG] [Thread-135250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:19:43.272 [DEBUG] [Thread-135250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:19:43.291 [INFO] [Thread-135250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:19:43.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:19:43.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:19:44.127 [DEBUG] [Thread-135250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:19:44.127 [DEBUG] [Thread-135250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:19:44.176 [DEBUG] [Thread-135250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:19:44.177 [DEBUG] [Thread-135250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:19:44.186 [DEBUG] [Thread-135250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:19:44.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:19:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:19:44.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:19:44.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:19:44.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:19:44.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:19:44.223 [DEBUG] [Thread-135250] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:19:47.932 [DEBUG] [Thread-135252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:02.973 [DEBUG] [Thread-135253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:10.178 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:10.180 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:20:14.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:20:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:20:16.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 19, 56), 3.46, 79.91, 0.0, 14.29, 18.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:20:16.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:19:56
2026-02-11T20:20:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:20:16.879 [DEBUG] [Thread-135254] [transport.py] [_log()] starting thread (client mode): 0xa5740c10
2026-02-11T20:20:16.879 [DEBUG] [Thread-135254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:20:16.891 [DEBUG] [Thread-135254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:20:16.891 [INFO] [Thread-135254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] client lang: <none>
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] server lang: <none>
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] kex follows: False
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] Compression: none
2026-02-11T20:20:16.894 [DEBUG] [Thread-135254] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:20:16.910 [DEBUG] [Thread-135254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:20:16.910 [DEBUG] [Thread-135254] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:20:16.911 [DEBUG] [Thread-135254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:20:16.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:20:16.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:20:16.912 [DEBUG] [Thread-135254] [transport.py] [_log()] userauth is OK
2026-02-11T20:20:16.912 [DEBUG] [Thread-135254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:20:16.912 [DEBUG] [Thread-135254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:20:16.912 [DEBUG] [Thread-135254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:20:16.912 [DEBUG] [Thread-135254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:20:16.936 [INFO] [Thread-135254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:20:16.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:20:17.586 [DEBUG] [Thread-135254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:20:17.586 [DEBUG] [Thread-135254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:20:17.586 [DEBUG] [Thread-135254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:20:17.627 [DEBUG] [Thread-135254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:20:17.628 [DEBUG] [Thread-135254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:20:17.631 [DEBUG] [Thread-135254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:20:17.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:20:17.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:20:17.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:20:17.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:20:17.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:20:17.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:20:17.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:20:17.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:20:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:20:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.763681 -999.00  +18.30  12.84     82  +15.20 1 2 1 2 1     3    0 -1.09 -173.06 ZNESw 15.1 12.8 193.8 15.8 19.3 -18.6 19.2 -17.6 19.0 -17.0 19.2 -18.0
2026-02-11T20:20:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:20:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:20:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.763681
2026-02-11T20:20:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:20:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:20:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:20:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:20:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:20:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:19:56', tmtdew=3.46, humidity=79.91, cloud=0.0, wind=14.29, temperature=18.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:19:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[-0.02925000000000111, -0.07674999999999876, -0.05274999999999963, -0.05400000000000027, 0.028499999999999304, 0.1252500000000012, 0.2699999999999978, 0.017250000000000654, 0.022499999999999076, -0.0259999999999998, -0.0677500000000002, -0.11100000000000065, 0.0884999999999998, 0.10724999999999874, 0.047999999999998266, 0.09799999999999898, -0.32775, -0.07599999999999874, 0.053999999999998494, -0.06825000000000081, 0.12899999999999778, 0.17874999999999908, 0.10525000000000162, 0.09774999999999956, 0.07499999999999929, 0.059499999999999886, 0.09675000000000011, -0.11249999999999893, 0.058499999999998664, -0.0039999999999995595, 0.0070000000000014495, 0.2245000000000008, 0.036749999999999616], zp_timestamp='2026-02-11T03:25:00')
2026-02-11T20:20:17.656 [DEBUG] [Thread-135254] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:20:17.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:20:17.751 [DEBUG] [Thread-135257] [transport.py] [_log()] starting thread (client mode): 0xa2d6b310
2026-02-11T20:20:17.751 [DEBUG] [Thread-135257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:20:17.769 [DEBUG] [Thread-135257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:20:17.770 [INFO] [Thread-135257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:20:17.777 [DEBUG] [Thread-135257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] client lang: <none>
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] server lang: <none>
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] kex follows: False
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:20:17.778 [DEBUG] [Thread-135257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:20:17.779 [DEBUG] [Thread-135257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:20:17.779 [DEBUG] [Thread-135257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:20:17.779 [DEBUG] [Thread-135257] [transport.py] [_log()] Compression: none
2026-02-11T20:20:17.779 [DEBUG] [Thread-135257] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:20:17.836 [DEBUG] [Thread-135257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:20:17.836 [DEBUG] [Thread-135257] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:20:17.837 [DEBUG] [Thread-135257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:20:17.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:20:17.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:20:17.892 [DEBUG] [Thread-135257] [transport.py] [_log()] userauth is OK
2026-02-11T20:20:17.893 [DEBUG] [Thread-135257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:20:17.893 [DEBUG] [Thread-135257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:20:17.893 [DEBUG] [Thread-135257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:20:17.893 [DEBUG] [Thread-135257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:20:17.911 [INFO] [Thread-135257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:20:17.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:20:17.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:20:18.007 [DEBUG] [Thread-135259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:18.711 [DEBUG] [Thread-135257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:20:18.712 [DEBUG] [Thread-135257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:20:18.759 [DEBUG] [Thread-135257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:20:18.759 [DEBUG] [Thread-135257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:20:18.768 [DEBUG] [Thread-135257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:20:18.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:20:18.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:20:18.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:20:18.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:20:18.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:20:18.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:20:18.800 [DEBUG] [Thread-135257] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:20:33.056 [DEBUG] [Thread-135260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:37.787 [DEBUG] [Thread-135261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:48.095 [DEBUG] [Thread-135262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:20:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:20:48.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:20:48.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
2026-02-11T20:20:50.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 20, 32), 3.46, 79.91, 0.0, 16.15, 18.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:20:50.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:20:32
2026-02-11T20:20:51.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:20:51.248 [DEBUG] [Thread-135263] [transport.py] [_log()] starting thread (client mode): 0xa5741cf0
2026-02-11T20:20:51.248 [DEBUG] [Thread-135263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:20:51.269 [DEBUG] [Thread-135263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:20:51.269 [INFO] [Thread-135263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:20:51.272 [DEBUG] [Thread-135263] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:20:51.272 [DEBUG] [Thread-135263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:20:51.272 [DEBUG] [Thread-135263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] client lang: <none>
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] server lang: <none>
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] kex follows: False
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] Compression: none
2026-02-11T20:20:51.273 [DEBUG] [Thread-135263] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:20:51.293 [DEBUG] [Thread-135263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:20:51.294 [DEBUG] [Thread-135263] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:20:51.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:20:51.295 [DEBUG] [Thread-135263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:20:51.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:20:51.297 [DEBUG] [Thread-135263] [transport.py] [_log()] userauth is OK
2026-02-11T20:20:51.297 [DEBUG] [Thread-135263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:20:51.297 [DEBUG] [Thread-135263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:20:51.297 [DEBUG] [Thread-135263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:20:51.297 [DEBUG] [Thread-135263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:20:51.321 [INFO] [Thread-135263] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:20:51.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:20:52.142 [DEBUG] [Thread-135263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:20:52.142 [DEBUG] [Thread-135263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:20:52.142 [DEBUG] [Thread-135263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:20:52.183 [DEBUG] [Thread-135263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:20:52.183 [DEBUG] [Thread-135263] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:20:52.187 [DEBUG] [Thread-135263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:20:52.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:20:52.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:20:52.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:20:52.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:20:52.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:20:52.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:20:52.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:20:52.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:20:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:20:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.764028 -999.00  +18.20   9.42     82  +15.20 1 1 1 2 1     3    0 -0.94 -167.19 ZNESW 7.2 9.4 199.6 13.8 19.3 -18.4 19.2 -17.9 19.0 -16.9 19.2 -17.9
2026-02-11T20:20:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:20:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:20:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.764028
2026-02-11T20:20:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:20:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:20:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:20:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:20:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T20:20:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:20:32', tmtdew=3.46, humidity=79.91, cloud=0.0, wind=16.15, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:20:12.019', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:19:00')
2026-02-11T20:20:52.213 [DEBUG] [Thread-135263] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:20:52.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:20:52.315 [DEBUG] [Thread-135266] [transport.py] [_log()] starting thread (client mode): 0xa5758070
2026-02-11T20:20:52.315 [DEBUG] [Thread-135266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:20:52.334 [DEBUG] [Thread-135266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:20:52.335 [INFO] [Thread-135266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:20:52.345 [DEBUG] [Thread-135266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:20:52.345 [DEBUG] [Thread-135266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] client lang: <none>
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] server lang: <none>
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] kex follows: False
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:20:52.346 [DEBUG] [Thread-135266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:20:52.347 [DEBUG] [Thread-135266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:20:52.347 [DEBUG] [Thread-135266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:20:52.347 [DEBUG] [Thread-135266] [transport.py] [_log()] Compression: none
2026-02-11T20:20:52.347 [DEBUG] [Thread-135266] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:20:52.400 [DEBUG] [Thread-135266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:20:52.401 [DEBUG] [Thread-135266] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:20:52.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:20:52.402 [DEBUG] [Thread-135266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:20:52.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:20:52.466 [DEBUG] [Thread-135266] [transport.py] [_log()] userauth is OK
2026-02-11T20:20:52.467 [DEBUG] [Thread-135266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:20:52.467 [DEBUG] [Thread-135266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:20:52.467 [DEBUG] [Thread-135266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:20:52.467 [DEBUG] [Thread-135266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:20:52.486 [INFO] [Thread-135266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:20:52.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:20:52.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:20:53.307 [DEBUG] [Thread-135266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:20:53.307 [DEBUG] [Thread-135266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:20:53.355 [DEBUG] [Thread-135266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:20:53.356 [DEBUG] [Thread-135266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:20:53.365 [DEBUG] [Thread-135266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:20:53.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:20:53.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:20:53.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:20:53.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:20:53.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:20:53.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:20:53.401 [DEBUG] [Thread-135266] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:21:03.133 [DEBUG] [Thread-135268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:21:15.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:21:15.900 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:21:18.184 [DEBUG] [Thread-135269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:21:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:21:23.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:21:23.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:21:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 21, 8), 3.47, 79.88, 0.0, 17.87, 18.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:21:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:21:08
2026-02-11T20:21:25.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:21:25.812 [DEBUG] [Thread-135270] [transport.py] [_log()] starting thread (client mode): 0xa2d6b070
2026-02-11T20:21:25.813 [DEBUG] [Thread-135270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:21:25.833 [DEBUG] [Thread-135270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:21:25.833 [INFO] [Thread-135270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:21:25.836 [DEBUG] [Thread-135270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:21:25.836 [DEBUG] [Thread-135270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] client lang: <none>
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] server lang: <none>
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] kex follows: False
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:21:25.837 [DEBUG] [Thread-135270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:21:25.838 [DEBUG] [Thread-135270] [transport.py] [_log()] Compression: none
2026-02-11T20:21:25.838 [DEBUG] [Thread-135270] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:21:25.856 [DEBUG] [Thread-135270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:21:25.857 [DEBUG] [Thread-135270] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:21:25.857 [DEBUG] [Thread-135270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:21:25.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:21:25.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:21:25.859 [DEBUG] [Thread-135270] [transport.py] [_log()] userauth is OK
2026-02-11T20:21:25.859 [DEBUG] [Thread-135270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:21:25.860 [DEBUG] [Thread-135270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:21:25.860 [DEBUG] [Thread-135270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:21:25.860 [DEBUG] [Thread-135270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:21:25.884 [INFO] [Thread-135270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:21:25.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:21:26.513 [DEBUG] [Thread-135270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:21:26.514 [DEBUG] [Thread-135270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:21:26.514 [DEBUG] [Thread-135270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:21:26.554 [DEBUG] [Thread-135270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:21:26.555 [DEBUG] [Thread-135270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:21:26.558 [DEBUG] [Thread-135270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:21:26.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:21:26.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:21:26.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:21:26.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:21:26.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:21:26.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:21:26.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:21:26.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.764375 -999.00  +18.20  14.26     82  +15.20 1 1 1 2 1     3    0 -0.77 -160.61 ZNESW 12.4 14.3 206.4 17.0 19.3 -18.6 19.2 -17.6 19.0 -17.0 19.2 -17.9
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.764375
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T20:21:26.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:21:08', tmtdew=3.47, humidity=79.88, cloud=0.0, wind=17.87, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:20:42.000', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:19:00')
2026-02-11T20:21:26.579 [DEBUG] [Thread-135270] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:21:26.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:21:26.665 [DEBUG] [Thread-135273] [transport.py] [_log()] starting thread (client mode): 0xa2d6baf0
2026-02-11T20:21:26.665 [DEBUG] [Thread-135273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:21:26.680 [DEBUG] [Thread-135273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:21:26.680 [INFO] [Thread-135273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:21:26.688 [DEBUG] [Thread-135273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:21:26.688 [DEBUG] [Thread-135273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:21:26.688 [DEBUG] [Thread-135273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] client lang: <none>
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] server lang: <none>
2026-02-11T20:21:26.689 [DEBUG] [Thread-135273] [transport.py] [_log()] kex follows: False
2026-02-11T20:21:26.690 [DEBUG] [Thread-135273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:21:26.690 [DEBUG] [Thread-135273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:21:26.690 [DEBUG] [Thread-135273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:21:26.690 [DEBUG] [Thread-135273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:21:26.690 [DEBUG] [Thread-135273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:21:26.690 [DEBUG] [Thread-135273] [transport.py] [_log()] Compression: none
2026-02-11T20:21:26.690 [DEBUG] [Thread-135273] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:21:26.752 [DEBUG] [Thread-135273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:21:26.753 [DEBUG] [Thread-135273] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:21:26.753 [DEBUG] [Thread-135273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:21:26.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:21:26.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:21:26.808 [DEBUG] [Thread-135273] [transport.py] [_log()] userauth is OK
2026-02-11T20:21:26.808 [DEBUG] [Thread-135273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:21:26.809 [DEBUG] [Thread-135273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:21:26.809 [DEBUG] [Thread-135273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:21:26.809 [DEBUG] [Thread-135273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:21:26.827 [INFO] [Thread-135273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:21:26.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:21:26.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:21:27.646 [DEBUG] [Thread-135273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:21:27.646 [DEBUG] [Thread-135273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:21:27.694 [DEBUG] [Thread-135273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:21:27.695 [DEBUG] [Thread-135273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:21:27.704 [DEBUG] [Thread-135273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:21:27.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:21: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')
2026-02-11T20:21:27.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:21:27.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:21:27.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:21:27.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:21:27.740 [DEBUG] [Thread-135273] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:21:33.221 [DEBUG] [Thread-135275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:21:37.841 [DEBUG] [Thread-135276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:21:48.279 [DEBUG] [Thread-135277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:21:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:21:57.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:21:57.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:22:00.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 21, 44), 3.52, 79.9, 0.0, 15.54, 18.06, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:22:00.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:21:44
2026-02-11T20:22:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:22:00.768 [DEBUG] [Thread-135278] [transport.py] [_log()] starting thread (client mode): 0xa5742a10
2026-02-11T20:22:00.768 [DEBUG] [Thread-135278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:22:00.788 [DEBUG] [Thread-135278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:22:00.788 [INFO] [Thread-135278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:22:00.791 [DEBUG] [Thread-135278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:22:00.791 [DEBUG] [Thread-135278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] client lang: <none>
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] server lang: <none>
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] kex follows: False
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:22:00.792 [DEBUG] [Thread-135278] [transport.py] [_log()] Compression: none
2026-02-11T20:22:00.793 [DEBUG] [Thread-135278] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:22:00.812 [DEBUG] [Thread-135278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:22:00.813 [DEBUG] [Thread-135278] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:22:00.813 [DEBUG] [Thread-135278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:22:00.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:22:00.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:22:00.815 [DEBUG] [Thread-135278] [transport.py] [_log()] userauth is OK
2026-02-11T20:22:00.815 [DEBUG] [Thread-135278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:22:00.815 [DEBUG] [Thread-135278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:22:00.816 [DEBUG] [Thread-135278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:22:00.816 [DEBUG] [Thread-135278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:22:00.839 [INFO] [Thread-135278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:22:00.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:22:01.483 [DEBUG] [Thread-135278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:22:01.484 [DEBUG] [Thread-135278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:22:01.484 [DEBUG] [Thread-135278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:22:01.524 [DEBUG] [Thread-135278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:22:01.524 [DEBUG] [Thread-135278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:22:01.528 [DEBUG] [Thread-135278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:22:01.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:22:01.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:22:01.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:22:01.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:22:01.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:22:01.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:22:01.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:22:01.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:22:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:22:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.765070 -999.00  +18.30   6.72     82  +15.10 1 2 1 2 1     2    0 -0.73 -157.11 ZNES. 11.7 6.7 197.2 13.3 -999.0 -999.0 19.2 -17.5 18.9 -16.8 19.2 -17.7
2026-02-11T20:22:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:22:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:22:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.765070
2026-02-11T20:22:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:22:01.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:22:01.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:22:01.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:22:01.555 [DEBUG] [Thread-135278] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:22:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:22:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:21:44', tmtdew=3.52, humidity=79.9, cloud=0.0, wind=15.54, temperature=18.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:21:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:19:00')
2026-02-11T20:22:01.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:22:01.651 [DEBUG] [Thread-135281] [transport.py] [_log()] starting thread (client mode): 0xa5740bb0
2026-02-11T20:22:01.652 [DEBUG] [Thread-135281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:22:01.666 [DEBUG] [Thread-135281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:22:01.667 [INFO] [Thread-135281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] client lang: <none>
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] server lang: <none>
2026-02-11T20:22:01.674 [DEBUG] [Thread-135281] [transport.py] [_log()] kex follows: False
2026-02-11T20:22:01.675 [DEBUG] [Thread-135281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:22:01.675 [DEBUG] [Thread-135281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:22:01.675 [DEBUG] [Thread-135281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:22:01.675 [DEBUG] [Thread-135281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:22:01.675 [DEBUG] [Thread-135281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:22:01.675 [DEBUG] [Thread-135281] [transport.py] [_log()] Compression: none
2026-02-11T20:22:01.675 [DEBUG] [Thread-135281] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:22:01.732 [DEBUG] [Thread-135281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:22:01.732 [DEBUG] [Thread-135281] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:22:01.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:22:01.733 [DEBUG] [Thread-135281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:22:01.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:22:01.788 [DEBUG] [Thread-135281] [transport.py] [_log()] userauth is OK
2026-02-11T20:22:01.788 [DEBUG] [Thread-135281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:22:01.788 [DEBUG] [Thread-135281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:22:01.788 [DEBUG] [Thread-135281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:22:01.788 [DEBUG] [Thread-135281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:22:01.814 [INFO] [Thread-135281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:22:01.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:22:01.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:22:02.699 [DEBUG] [Thread-135281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:22:02.700 [DEBUG] [Thread-135281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:22:02.749 [DEBUG] [Thread-135281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:22:02.750 [DEBUG] [Thread-135281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:22:02.761 [DEBUG] [Thread-135281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:22:02.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:22:02.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:22: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
2026-02-11T20:22:02.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:22:02.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:22:02.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:22:02.803 [DEBUG] [Thread-135281] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:22:03.317 [DEBUG] [Thread-135283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:22:16.102 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:22:16.103 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:22:18.362 [DEBUG] [Thread-135284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:22:32.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:22:32.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:22:32.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:22:33.391 [DEBUG] [Thread-135285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:22:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 22, 19), 3.51, 79.93, 0.0, 15.3, 18.08, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:22:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:22:19
2026-02-11T20:22:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:22:35.209 [DEBUG] [Thread-135286] [transport.py] [_log()] starting thread (client mode): 0xa5743700
2026-02-11T20:22:35.209 [DEBUG] [Thread-135286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:22:35.229 [DEBUG] [Thread-135286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:22:35.229 [INFO] [Thread-135286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] client lang: <none>
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] server lang: <none>
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] kex follows: False
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:22:35.230 [DEBUG] [Thread-135286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:22:35.231 [DEBUG] [Thread-135286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:22:35.231 [DEBUG] [Thread-135286] [transport.py] [_log()] Compression: none
2026-02-11T20:22:35.231 [DEBUG] [Thread-135286] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:22:35.243 [DEBUG] [Thread-135286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:22:35.243 [DEBUG] [Thread-135286] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:22:35.244 [DEBUG] [Thread-135286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:22:35.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:22:35.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:22:35.246 [DEBUG] [Thread-135286] [transport.py] [_log()] userauth is OK
2026-02-11T20:22:35.246 [DEBUG] [Thread-135286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:22:35.246 [DEBUG] [Thread-135286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:22:35.246 [DEBUG] [Thread-135286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:22:35.246 [DEBUG] [Thread-135286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:22:35.264 [INFO] [Thread-135286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:22:35.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:22:35.918 [DEBUG] [Thread-135286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:22:35.918 [DEBUG] [Thread-135286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:22:35.919 [DEBUG] [Thread-135286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:22:35.959 [DEBUG] [Thread-135286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:22:35.960 [DEBUG] [Thread-135286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:22:35.963 [DEBUG] [Thread-135286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:22:35.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:22:35.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:22:35.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:22:35.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:22:35.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:22:35.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:22:35.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:22:35.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:22:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:22:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.765417 -999.00  +18.30   9.58     81  +15.10 1 2 1 2 1     2    0 -1.30 -171.93 ZNES. 10.2 9.6 203.2 13.0 19.3 -18.4 19.2 -17.5 18.9 -16.9 19.2 -17.9
2026-02-11T20:22:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:22:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:22:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.765417
2026-02-11T20:22:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:22:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:22:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:22:35.990 [DEBUG] [Thread-135286] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:22:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:22:35.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:22:35.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:22:19', tmtdew=3.51, humidity=79.93, cloud=0.0, wind=15.3, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:22:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:19:00')
2026-02-11T20:22:36.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:22:36.086 [DEBUG] [Thread-135289] [transport.py] [_log()] starting thread (client mode): 0xa2db4070
2026-02-11T20:22:36.086 [DEBUG] [Thread-135289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:22:36.101 [DEBUG] [Thread-135289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:22:36.101 [INFO] [Thread-135289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:22:36.108 [DEBUG] [Thread-135289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:22:36.109 [DEBUG] [Thread-135289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:22:36.109 [DEBUG] [Thread-135289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:22:36.109 [DEBUG] [Thread-135289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:36.109 [DEBUG] [Thread-135289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:22:36.109 [DEBUG] [Thread-135289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] client lang: <none>
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] server lang: <none>
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] kex follows: False
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:22:36.110 [DEBUG] [Thread-135289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:22:36.111 [DEBUG] [Thread-135289] [transport.py] [_log()] Compression: none
2026-02-11T20:22:36.111 [DEBUG] [Thread-135289] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:22:36.168 [DEBUG] [Thread-135289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:22:36.168 [DEBUG] [Thread-135289] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:22:36.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:22:36.169 [DEBUG] [Thread-135289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:22:36.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:22:36.227 [DEBUG] [Thread-135289] [transport.py] [_log()] userauth is OK
2026-02-11T20:22:36.227 [DEBUG] [Thread-135289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:22:36.228 [DEBUG] [Thread-135289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:22:36.228 [DEBUG] [Thread-135289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:22:36.228 [DEBUG] [Thread-135289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:22:36.249 [INFO] [Thread-135289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:22:36.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:22:36.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:22:37.054 [DEBUG] [Thread-135289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:22:37.054 [DEBUG] [Thread-135289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:22:37.103 [DEBUG] [Thread-135289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:22:37.104 [DEBUG] [Thread-135289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:22:37.116 [DEBUG] [Thread-135289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:22:37.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:22:37.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:22:37.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:22:37.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:22:37.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:22:37.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:22:37.157 [DEBUG] [Thread-135289] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:22:37.916 [DEBUG] [Thread-135291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:22:48.429 [DEBUG] [Thread-135292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:23:03.483 [DEBUG] [Thread-135293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:23:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:23:07.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:23:07.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:23:09.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 22, 54), 3.51, 79.94, 0.0, 20.5, 18.04, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:23:09.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:22:54
2026-02-11T20:23:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:23:09.552 [DEBUG] [Thread-135294] [transport.py] [_log()] starting thread (client mode): 0xa5740220
2026-02-11T20:23:09.552 [DEBUG] [Thread-135294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:23:09.572 [DEBUG] [Thread-135294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:23:09.573 [INFO] [Thread-135294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] client lang: <none>
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] server lang: <none>
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] kex follows: False
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] Compression: none
2026-02-11T20:23:09.576 [DEBUG] [Thread-135294] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:23:09.595 [DEBUG] [Thread-135294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:23:09.595 [DEBUG] [Thread-135294] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:23:09.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:23:09.596 [DEBUG] [Thread-135294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:23:09.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:23:09.598 [DEBUG] [Thread-135294] [transport.py] [_log()] userauth is OK
2026-02-11T20:23:09.599 [DEBUG] [Thread-135294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:23:09.599 [DEBUG] [Thread-135294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:23:09.599 [DEBUG] [Thread-135294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:23:09.599 [DEBUG] [Thread-135294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:23:09.636 [INFO] [Thread-135294] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:23:09.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:23:10.291 [DEBUG] [Thread-135294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:23:10.291 [DEBUG] [Thread-135294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:23:10.291 [DEBUG] [Thread-135294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:23:10.332 [DEBUG] [Thread-135294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:23:10.332 [DEBUG] [Thread-135294] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:23:10.335 [DEBUG] [Thread-135294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:23:10.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:23:10.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:23:10.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:23:10.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:23:10.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:23:10.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:23:10.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:23:10.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:23:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:23:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.765764 -999.00  +18.20  13.35     81  +15.10 1 1 1 2 1     2    0 -1.20 -171.11 ZNESW 17.4 13.3 216.6 18.1 19.2 -18.4 -999.0 -999.0 18.9 -16.9 19.2 -17.9
2026-02-11T20:23:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:23:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:23:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.765764
2026-02-11T20:23:10.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:23:10.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:23:10.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:23:10.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:23:10.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T20:23:10.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:22:54', tmtdew=3.51, humidity=79.94, cloud=0.0, wind=20.5, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:22:42.010', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:19:00')
2026-02-11T20:23:10.364 [DEBUG] [Thread-135294] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:23:10.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:23:10.460 [DEBUG] [Thread-135297] [transport.py] [_log()] starting thread (client mode): 0xa5758430
2026-02-11T20:23:10.460 [DEBUG] [Thread-135297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:23:10.474 [DEBUG] [Thread-135297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:23:10.474 [INFO] [Thread-135297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] client lang: <none>
2026-02-11T20:23:10.485 [DEBUG] [Thread-135297] [transport.py] [_log()] server lang: <none>
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] kex follows: False
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] Compression: none
2026-02-11T20:23:10.486 [DEBUG] [Thread-135297] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:23:10.543 [DEBUG] [Thread-135297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:23:10.544 [DEBUG] [Thread-135297] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:23:10.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:23:10.545 [DEBUG] [Thread-135297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:23:10.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:23:10.600 [DEBUG] [Thread-135297] [transport.py] [_log()] userauth is OK
2026-02-11T20:23:10.601 [DEBUG] [Thread-135297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:23:10.601 [DEBUG] [Thread-135297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:23:10.601 [DEBUG] [Thread-135297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:23:10.601 [DEBUG] [Thread-135297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:23:10.619 [INFO] [Thread-135297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:23:10.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:23:10.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:23:11.436 [DEBUG] [Thread-135297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:23:11.436 [DEBUG] [Thread-135297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:23:11.487 [DEBUG] [Thread-135297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:23:11.487 [DEBUG] [Thread-135297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:23:11.497 [DEBUG] [Thread-135297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:23:11.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:23:11.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:23:11.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:23:11.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:23:11.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:23:11.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:23:11.540 [DEBUG] [Thread-135297] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:23:16.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:23:16.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:23:18.523 [DEBUG] [Thread-135299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:23:33.575 [DEBUG] [Thread-135300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:23:37.993 [DEBUG] [Thread-135301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:23:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:23:41.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:23:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:23:43.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 23, 30), 3.49, 80.01, 0.0, 16.69, 18.04, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:23:43.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:23:30
2026-02-11T20:23:44.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:23:44.535 [DEBUG] [Thread-135302] [transport.py] [_log()] starting thread (client mode): 0xa2d6a9e0
2026-02-11T20:23:44.536 [DEBUG] [Thread-135302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:23:44.556 [DEBUG] [Thread-135302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:23:44.556 [INFO] [Thread-135302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:23:44.557 [DEBUG] [Thread-135302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:23:44.557 [DEBUG] [Thread-135302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] client lang: <none>
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] server lang: <none>
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] kex follows: False
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] Compression: none
2026-02-11T20:23:44.558 [DEBUG] [Thread-135302] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:23:44.577 [DEBUG] [Thread-135302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:23:44.578 [DEBUG] [Thread-135302] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:23:44.578 [DEBUG] [Thread-135302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:23:44.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:23:44.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:23:44.580 [DEBUG] [Thread-135302] [transport.py] [_log()] userauth is OK
2026-02-11T20:23:44.580 [DEBUG] [Thread-135302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:23:44.580 [DEBUG] [Thread-135302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:23:44.580 [DEBUG] [Thread-135302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:23:44.580 [DEBUG] [Thread-135302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:23:44.596 [INFO] [Thread-135302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:23:44.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:23:45.291 [DEBUG] [Thread-135302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:23:45.292 [DEBUG] [Thread-135302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:23:45.292 [DEBUG] [Thread-135302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:23:45.332 [DEBUG] [Thread-135302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:23:45.332 [DEBUG] [Thread-135302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:23:45.334 [DEBUG] [Thread-135302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:23:45.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:23:45.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:23:45.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:23:45.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:23:45.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:23:45.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:23:45.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:23:45.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:23:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:23:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.766111 -999.00  +18.20  12.84     82  +15.10 1 1 1 2 1     1    0 -1.17 -167.71 ZNESW 8.1 12.8 203.0 17.1 19.2 -18.1 19.1 -16.9 18.9 -16.7 19.1 -17.7
2026-02-11T20:23:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:23:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:23:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.766111
2026-02-11T20:23:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:23:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:23:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:23:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:23:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T20:23:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:23:30', tmtdew=3.49, humidity=80.01, cloud=0.0, wind=16.69, temperature=18.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:23:11.990', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:21:00')
2026-02-11T20:23:45.354 [DEBUG] [Thread-135302] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:23:45.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:23:45.435 [DEBUG] [Thread-135305] [transport.py] [_log()] starting thread (client mode): 0xa2d5f760
2026-02-11T20:23:45.436 [DEBUG] [Thread-135305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:23:45.451 [DEBUG] [Thread-135305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:23:45.452 [INFO] [Thread-135305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:23:45.461 [DEBUG] [Thread-135305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:23:45.461 [DEBUG] [Thread-135305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] client lang: <none>
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] server lang: <none>
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] kex follows: False
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] Compression: none
2026-02-11T20:23:45.462 [DEBUG] [Thread-135305] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:23:45.520 [DEBUG] [Thread-135305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:23:45.520 [DEBUG] [Thread-135305] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:23:45.521 [DEBUG] [Thread-135305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:23:45.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:23:45.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:23:45.576 [DEBUG] [Thread-135305] [transport.py] [_log()] userauth is OK
2026-02-11T20:23:45.576 [DEBUG] [Thread-135305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:23:45.576 [DEBUG] [Thread-135305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:23:45.576 [DEBUG] [Thread-135305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:23:45.576 [DEBUG] [Thread-135305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:23:45.595 [INFO] [Thread-135305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:23:45.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:23:45.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:23:46.406 [DEBUG] [Thread-135305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:23:46.407 [DEBUG] [Thread-135305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:23:46.454 [DEBUG] [Thread-135305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:23:46.454 [DEBUG] [Thread-135305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:23:46.463 [DEBUG] [Thread-135305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:23:46.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:23:46.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:23:46.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
2026-02-11T20:23:46.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:23:46.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:23:46.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:23:46.500 [DEBUG] [Thread-135305] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:23:48.611 [DEBUG] [Thread-135307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:03.674 [DEBUG] [Thread-135308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:16.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:16.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:16.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:24:16.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:24:16.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:24:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 24, 7), 3.52, 79.88, 0.0, 19.6, 17.96, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:24:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:24:07
2026-02-11T20:24:18.714 [DEBUG] [Thread-135309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:24:18.923 [DEBUG] [Thread-135310] [transport.py] [_log()] starting thread (client mode): 0xa2d5f280
2026-02-11T20:24:18.924 [DEBUG] [Thread-135310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:24:18.943 [DEBUG] [Thread-135310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:24:18.944 [INFO] [Thread-135310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:24:18.947 [DEBUG] [Thread-135310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:24:18.947 [DEBUG] [Thread-135310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:24:18.947 [DEBUG] [Thread-135310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:24:18.947 [DEBUG] [Thread-135310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:18.947 [DEBUG] [Thread-135310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:18.947 [DEBUG] [Thread-135310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:18.947 [DEBUG] [Thread-135310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] client lang: <none>
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] server lang: <none>
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] kex follows: False
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] Compression: none
2026-02-11T20:24:18.948 [DEBUG] [Thread-135310] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:24:18.967 [DEBUG] [Thread-135310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:24:18.968 [DEBUG] [Thread-135310] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:24:18.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:24:18.969 [DEBUG] [Thread-135310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:24:18.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:24:19.008 [DEBUG] [Thread-135310] [transport.py] [_log()] userauth is OK
2026-02-11T20:24:19.009 [DEBUG] [Thread-135310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:24:19.009 [DEBUG] [Thread-135310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:24:19.009 [DEBUG] [Thread-135310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:24:19.009 [DEBUG] [Thread-135310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:24:19.046 [INFO] [Thread-135310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:24:19.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:24:19.676 [DEBUG] [Thread-135310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:24:19.676 [DEBUG] [Thread-135310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:24:19.677 [DEBUG] [Thread-135310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:24:19.717 [DEBUG] [Thread-135310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:24:19.717 [DEBUG] [Thread-135310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:24:19.720 [DEBUG] [Thread-135310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:24:19.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:24:19.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:24:19.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:24:19.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:24:19.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:24:19.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:24:19.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:24:19.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:24:19.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:24:19.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.766459 -999.00  +18.10  15.22     82  +15.10 1 1 1 2 1     1    0 -1.30 -170.54 ZNESW 10.3 15.2 202.0 23.8 19.2 -17.7 19.1 -15.4 18.9 -16.2 19.1 -17.5
2026-02-11T20:24:19.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:24:19.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:24:19.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.766459
2026-02-11T20:24:19.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:24:19.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:24:19.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:24:19.743 [DEBUG] [Thread-135310] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:24:19.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:24:19.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T20:24:19.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:24:07', tmtdew=3.52, humidity=79.88, cloud=0.0, wind=19.6, temperature=17.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:23:42.058', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:21:00')
2026-02-11T20:24:19.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:24:19.838 [DEBUG] [Thread-135313] [transport.py] [_log()] starting thread (client mode): 0xa2d68fd0
2026-02-11T20:24:19.839 [DEBUG] [Thread-135313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:24:19.853 [DEBUG] [Thread-135313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:24:19.853 [INFO] [Thread-135313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:24:19.860 [DEBUG] [Thread-135313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:24:19.860 [DEBUG] [Thread-135313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:24:19.860 [DEBUG] [Thread-135313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:24:19.860 [DEBUG] [Thread-135313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] client lang: <none>
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] server lang: <none>
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] kex follows: False
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] Compression: none
2026-02-11T20:24:19.861 [DEBUG] [Thread-135313] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:24:19.919 [DEBUG] [Thread-135313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:24:19.919 [DEBUG] [Thread-135313] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:24:19.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:24:19.921 [DEBUG] [Thread-135313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:24:19.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:24:19.976 [DEBUG] [Thread-135313] [transport.py] [_log()] userauth is OK
2026-02-11T20:24:19.976 [DEBUG] [Thread-135313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:24:19.976 [DEBUG] [Thread-135313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:24:19.976 [DEBUG] [Thread-135313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:24:19.976 [DEBUG] [Thread-135313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:24:19.995 [INFO] [Thread-135313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:24:19.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:24:19.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:24:20.849 [DEBUG] [Thread-135313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:24:20.850 [DEBUG] [Thread-135313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:24:20.897 [DEBUG] [Thread-135313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:24:20.897 [DEBUG] [Thread-135313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:24:20.906 [DEBUG] [Thread-135313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:24:20.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:24:20.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:24:20.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:24:20.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:24:20.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:24:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:24:20.940 [DEBUG] [Thread-135313] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:24:33.751 [DEBUG] [Thread-135315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:38.069 [DEBUG] [Thread-135316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:48.801 [DEBUG] [Thread-135317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:24:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:24:50.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:24:50.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:24:52.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 24, 42), 3.7, 78.92, 0.0, 22.9, 18.29, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:24:52.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:24:42
2026-02-11T20:24:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:24:53.366 [DEBUG] [Thread-135318] [transport.py] [_log()] starting thread (client mode): 0xa57c07f0
2026-02-11T20:24:53.366 [DEBUG] [Thread-135318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:24:53.386 [DEBUG] [Thread-135318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:24:53.386 [INFO] [Thread-135318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:24:53.389 [DEBUG] [Thread-135318] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] client lang: <none>
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] server lang: <none>
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] kex follows: False
2026-02-11T20:24:53.390 [DEBUG] [Thread-135318] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:24:53.391 [DEBUG] [Thread-135318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:24:53.391 [DEBUG] [Thread-135318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:24:53.391 [DEBUG] [Thread-135318] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:24:53.391 [DEBUG] [Thread-135318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:24:53.391 [DEBUG] [Thread-135318] [transport.py] [_log()] Compression: none
2026-02-11T20:24:53.391 [DEBUG] [Thread-135318] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:24:53.409 [DEBUG] [Thread-135318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:24:53.409 [DEBUG] [Thread-135318] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:24:53.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:24:53.410 [DEBUG] [Thread-135318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:24:53.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:24:53.412 [DEBUG] [Thread-135318] [transport.py] [_log()] userauth is OK
2026-02-11T20:24:53.412 [DEBUG] [Thread-135318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:24:53.412 [DEBUG] [Thread-135318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:24:53.412 [DEBUG] [Thread-135318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:24:53.412 [DEBUG] [Thread-135318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:24:53.436 [INFO] [Thread-135318] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:24:53.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:24:54.074 [DEBUG] [Thread-135318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:24:54.074 [DEBUG] [Thread-135318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:24:54.075 [DEBUG] [Thread-135318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:24:54.115 [DEBUG] [Thread-135318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:24:54.116 [DEBUG] [Thread-135318] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:24:54.119 [DEBUG] [Thread-135318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:24:54.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:24:54.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:24:54.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:24:54.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:24:54.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:24:54.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:24:54.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:24:54.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:24:54.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:24:54.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.766806 -999.00  +18.10  16.41     82  +15.10 1 1 1 2 1     1    0 -1.31 -170.45 ZNESW 14.2 16.4 195.6 21.0 19.2 -15.2 19.1 -12.6 18.9 -13.9 19.2 -16.1
2026-02-11T20:24:54.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:24:54.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:24:54.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.766806
2026-02-11T20:24:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:24:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:24:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:24:54.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:24:54.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T20:24:54.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:24:42', tmtdew=3.7, humidity=78.92, cloud=0.0, wind=22.9, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:24:12.038', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:21:00')
2026-02-11T20:24:54.146 [DEBUG] [Thread-135318] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:24:54.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:24:54.244 [DEBUG] [Thread-135321] [transport.py] [_log()] starting thread (client mode): 0xa57b0e20
2026-02-11T20:24:54.244 [DEBUG] [Thread-135321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:24:54.260 [DEBUG] [Thread-135321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:24:54.260 [INFO] [Thread-135321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:24:54.268 [DEBUG] [Thread-135321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:24:54.268 [DEBUG] [Thread-135321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:24:54.268 [DEBUG] [Thread-135321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] client lang: <none>
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] server lang: <none>
2026-02-11T20:24:54.269 [DEBUG] [Thread-135321] [transport.py] [_log()] kex follows: False
2026-02-11T20:24:54.270 [DEBUG] [Thread-135321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:24:54.270 [DEBUG] [Thread-135321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:24:54.270 [DEBUG] [Thread-135321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:24:54.270 [DEBUG] [Thread-135321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:24:54.270 [DEBUG] [Thread-135321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:24:54.270 [DEBUG] [Thread-135321] [transport.py] [_log()] Compression: none
2026-02-11T20:24:54.270 [DEBUG] [Thread-135321] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:24:54.331 [DEBUG] [Thread-135321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:24:54.332 [DEBUG] [Thread-135321] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:24:54.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:24:54.333 [DEBUG] [Thread-135321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:24:54.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:24:54.388 [DEBUG] [Thread-135321] [transport.py] [_log()] userauth is OK
2026-02-11T20:24:54.388 [DEBUG] [Thread-135321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:24:54.389 [DEBUG] [Thread-135321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:24:54.389 [DEBUG] [Thread-135321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:24:54.389 [DEBUG] [Thread-135321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:24:54.408 [INFO] [Thread-135321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:24:54.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:24:54.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:24:55.226 [DEBUG] [Thread-135321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:24:55.226 [DEBUG] [Thread-135321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:24:55.274 [DEBUG] [Thread-135321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:24:55.275 [DEBUG] [Thread-135321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:24:55.284 [DEBUG] [Thread-135321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:24:55.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:24: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')
2026-02-11T20:24:55.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:24:55.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:24:55.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:24:55.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:24:55.320 [DEBUG] [Thread-135321] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:25:03.840 [DEBUG] [Thread-135323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:25:16.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:25:16.709 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:25:18.891 [DEBUG] [Thread-135324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:25:25.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:25:25.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:25:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:25:27.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 25, 17), 3.45, 79.99, 0.0, 17.52, 17.94, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:25:27.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:25:17
2026-02-11T20:25:27.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:25:27.607 [DEBUG] [Thread-135325] [transport.py] [_log()] starting thread (client mode): 0xa2d5f820
2026-02-11T20:25:27.607 [DEBUG] [Thread-135325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:25:27.621 [DEBUG] [Thread-135325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:25:27.622 [INFO] [Thread-135325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:25:27.624 [DEBUG] [Thread-135325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] client lang: <none>
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] server lang: <none>
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] kex follows: False
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] Compression: none
2026-02-11T20:25:27.625 [DEBUG] [Thread-135325] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:25:27.639 [DEBUG] [Thread-135325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:25:27.640 [DEBUG] [Thread-135325] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:25:27.640 [DEBUG] [Thread-135325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:25:27.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:25:27.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:25:27.641 [DEBUG] [Thread-135325] [transport.py] [_log()] userauth is OK
2026-02-11T20:25:27.642 [DEBUG] [Thread-135325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:25:27.642 [DEBUG] [Thread-135325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:25:27.642 [DEBUG] [Thread-135325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:25:27.642 [DEBUG] [Thread-135325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:25:27.659 [INFO] [Thread-135325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:25:27.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:25:28.303 [DEBUG] [Thread-135325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:25:28.303 [DEBUG] [Thread-135325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:25:28.304 [DEBUG] [Thread-135325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:25:28.344 [DEBUG] [Thread-135325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:25:28.344 [DEBUG] [Thread-135325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:25:28.347 [DEBUG] [Thread-135325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:25:28.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:25:28.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:25:28.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:25:28.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:25:28.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:25:28.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:25:28.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:25:28.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:25:28.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:25:28.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.767500 -999.00  +18.10  10.20     82  +15.10 1 3 1 2 1     1    0 -0.83 -148.99 ZNESW 11.1 10.2 180.8 15.7 19.2 -9.0 19.1 -8.8 18.9 -9.2 19.2 -10.1
2026-02-11T20:25:28.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:25:28.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:25:28.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.767500
2026-02-11T20:25:28.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:25:28.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:25:28.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:25:28.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:25:28.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:25:28.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:25:17', tmtdew=3.45, humidity=79.99, cloud=0.0, wind=17.52, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:25:12.000', atlas_cloud=3, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:21:00')
2026-02-11T20:25:28.373 [DEBUG] [Thread-135325] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:25:28.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:25:28.468 [DEBUG] [Thread-135328] [transport.py] [_log()] starting thread (client mode): 0xa57d6080
2026-02-11T20:25:28.468 [DEBUG] [Thread-135328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:25:28.482 [DEBUG] [Thread-135328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:25:28.483 [INFO] [Thread-135328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:25:28.490 [DEBUG] [Thread-135328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] client lang: <none>
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] server lang: <none>
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] kex follows: False
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:25:28.491 [DEBUG] [Thread-135328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:25:28.492 [DEBUG] [Thread-135328] [transport.py] [_log()] Compression: none
2026-02-11T20:25:28.492 [DEBUG] [Thread-135328] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:25:28.548 [DEBUG] [Thread-135328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:25:28.548 [DEBUG] [Thread-135328] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:25:28.549 [DEBUG] [Thread-135328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:25:28.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:25:28.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:25:28.604 [DEBUG] [Thread-135328] [transport.py] [_log()] userauth is OK
2026-02-11T20:25:28.605 [DEBUG] [Thread-135328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:25:28.605 [DEBUG] [Thread-135328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:25:28.605 [DEBUG] [Thread-135328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:25:28.605 [DEBUG] [Thread-135328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:25:28.630 [INFO] [Thread-135328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:25:28.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:25:28.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:25:29.495 [DEBUG] [Thread-135328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:25:29.495 [DEBUG] [Thread-135328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:25:29.543 [DEBUG] [Thread-135328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:25:29.544 [DEBUG] [Thread-135328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:25:29.558 [DEBUG] [Thread-135328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:25:29.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:25:29.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:25:29.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:25:29.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:25:29.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:25:29.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:25:29.595 [DEBUG] [Thread-135328] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:25:33.923 [DEBUG] [Thread-135330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:25:38.147 [DEBUG] [Thread-135331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:25:48.975 [DEBUG] [Thread-135332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:25:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:25:59.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:25:59.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:26:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 25, 53), 3.44, 80.54, 0.0, 14.06, 17.96, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:26:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:25:53
2026-02-11T20:26:01.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:26:02.025 [DEBUG] [Thread-135333] [transport.py] [_log()] starting thread (client mode): 0xa2d5fc10
2026-02-11T20:26:02.026 [DEBUG] [Thread-135333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:26:02.046 [DEBUG] [Thread-135333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:26:02.046 [INFO] [Thread-135333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:26:02.049 [DEBUG] [Thread-135333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:26:02.049 [DEBUG] [Thread-135333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:26:02.049 [DEBUG] [Thread-135333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] client lang: <none>
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] server lang: <none>
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] kex follows: False
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:26:02.050 [DEBUG] [Thread-135333] [transport.py] [_log()] Compression: none
2026-02-11T20:26:02.051 [DEBUG] [Thread-135333] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:26:02.068 [DEBUG] [Thread-135333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:26:02.069 [DEBUG] [Thread-135333] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:26:02.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:26:02.070 [DEBUG] [Thread-135333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:26:02.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:26:02.072 [DEBUG] [Thread-135333] [transport.py] [_log()] userauth is OK
2026-02-11T20:26:02.073 [DEBUG] [Thread-135333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:26:02.073 [DEBUG] [Thread-135333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:26:02.073 [DEBUG] [Thread-135333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:26:02.073 [DEBUG] [Thread-135333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:26:02.088 [INFO] [Thread-135333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:26:02.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:26:02.726 [DEBUG] [Thread-135333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:26:02.726 [DEBUG] [Thread-135333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:26:02.726 [DEBUG] [Thread-135333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:26:02.766 [DEBUG] [Thread-135333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:26:02.766 [DEBUG] [Thread-135333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:26:02.769 [DEBUG] [Thread-135333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:26:02.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:26:02.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:26:02.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:26:02.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:26:02.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:26:02.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:26:02.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:26:02.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:26:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:26:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.767847 -999.00  +18.10  10.81     83  +15.20 1 3 1 2 1     1    0 -0.88 -151.81 ZNESW 9.7 10.8 213.3 17.1 19.2 -8.3 19.1 -9.8 18.9 -9.4 19.2 -9.1
2026-02-11T20:26:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:26:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:26:02.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.767847
2026-02-11T20:26:02.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:26:02.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:26:02.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:26:02.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:26:02.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:26:02.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:25:53', tmtdew=3.44, humidity=80.54, cloud=0.0, wind=14.06, temperature=17.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:25:41.981', atlas_cloud=3, atlas_rain=1, zp_data=[0.01624999999999943, -0.07424999999999926, 0.027749999999999275, 0.011499999999999844, -0.037499999999999645, 0.09525000000000006, 0.03649999999999842, 0.056250000000000355, 0.05549999999999855, -0.030999999999998806, 0.014249999999998764, 0.03500000000000014, 0.1120000000000001, 0.1792499999999997, 0.04800000000000004, -0.049500000000001876, 0.032249999999999446, 0.059499999999999886, 0.053999999999998494, -0.039750000000001506, 0.1064999999999987, 0.0537499999999973, 0.10824999999999996, 0.04075000000000095, 0.010499999999998622, 0.1225000000000005, -0.1592500000000001, 0.12400000000000055, nan, -0.06400000000000006, 0.14000000000000057, 0.0600000000000005, 0.12874999999999837], zp_timestamp='2026-02-11T18:21:00')
2026-02-11T20:26:02.796 [DEBUG] [Thread-135333] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:26:02.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:26:02.894 [DEBUG] [Thread-135336] [transport.py] [_log()] starting thread (client mode): 0xa2d5fdc0
2026-02-11T20:26:02.894 [DEBUG] [Thread-135336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:26:02.909 [DEBUG] [Thread-135336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:26:02.909 [INFO] [Thread-135336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:26:02.919 [DEBUG] [Thread-135336] [transport.py] [_log()] client lang: <none>
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] server lang: <none>
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] kex follows: False
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] Compression: none
2026-02-11T20:26:02.920 [DEBUG] [Thread-135336] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:26:02.980 [DEBUG] [Thread-135336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:26:02.981 [DEBUG] [Thread-135336] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:26:02.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:26:02.982 [DEBUG] [Thread-135336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:26:02.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:26:03.039 [DEBUG] [Thread-135336] [transport.py] [_log()] userauth is OK
2026-02-11T20:26:03.040 [DEBUG] [Thread-135336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:26:03.040 [DEBUG] [Thread-135336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:26:03.040 [DEBUG] [Thread-135336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:26:03.040 [DEBUG] [Thread-135336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:26:03.064 [INFO] [Thread-135336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:26:03.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:26:03.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:26:03.924 [DEBUG] [Thread-135336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:26:03.924 [DEBUG] [Thread-135336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:26:03.973 [DEBUG] [Thread-135336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:26:03.973 [DEBUG] [Thread-135336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:26:03.984 [DEBUG] [Thread-135336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:26:03.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:26: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')
2026-02-11T20:26: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
2026-02-11T20:26:04.014 [DEBUG] [Thread-135338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:26:04.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:26:04.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:26:04.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:26:04.029 [DEBUG] [Thread-135336] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:26:16.909 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:26:16.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:26:19.066 [DEBUG] [Thread-135339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:26:34.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:26:34.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:26:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:26:34.106 [DEBUG] [Thread-135340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:26:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 25, 53), 3.44, 80.54, 0.0, 14.06, 17.96, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:26:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:25:53
2026-02-11T20:26:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:26:36.494 [DEBUG] [Thread-135341] [transport.py] [_log()] starting thread (client mode): 0xa57731c0
2026-02-11T20:26:36.494 [DEBUG] [Thread-135341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:26:36.514 [DEBUG] [Thread-135341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:26:36.514 [INFO] [Thread-135341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] client lang: <none>
2026-02-11T20:26:36.517 [DEBUG] [Thread-135341] [transport.py] [_log()] server lang: <none>
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] kex follows: False
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] Compression: none
2026-02-11T20:26:36.518 [DEBUG] [Thread-135341] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:26:36.537 [DEBUG] [Thread-135341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:26:36.537 [DEBUG] [Thread-135341] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:26:36.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:26:36.539 [DEBUG] [Thread-135341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:26:36.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:26:36.540 [DEBUG] [Thread-135341] [transport.py] [_log()] userauth is OK
2026-02-11T20:26:36.541 [DEBUG] [Thread-135341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:26:36.541 [DEBUG] [Thread-135341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:26:36.541 [DEBUG] [Thread-135341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:26:36.541 [DEBUG] [Thread-135341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:26:36.564 [INFO] [Thread-135341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:26:36.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:26:37.205 [DEBUG] [Thread-135341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:26:37.205 [DEBUG] [Thread-135341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:26:37.206 [DEBUG] [Thread-135341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:26:37.246 [DEBUG] [Thread-135341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:26:37.246 [DEBUG] [Thread-135341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:26:37.248 [DEBUG] [Thread-135341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:26:37.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:26:37.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:26:37.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:26:37.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:26:37.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:26:37.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:26:37.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:26:37.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:26:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:26:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.768195 -999.00  +18.10  17.66     83  +15.10 1 2 1 2 1     1    0 -0.77 -145.67 .N.SW 20.3 17.7 206.3 23.1 19.2 -9.3 19.1 -11.7 18.9 -11.4 19.2 -9.8
2026-02-11T20:26:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:26:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:26:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.768195
2026-02-11T20:26:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:26:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:26:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:26:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:26:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:26:37.280 [DEBUG] [Thread-135341] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:26:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:25:53', tmtdew=3.44, humidity=80.54, cloud=0.0, wind=14.06, temperature=17.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:26:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:24:00')
2026-02-11T20:26:37.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:26:37.367 [DEBUG] [Thread-135344] [transport.py] [_log()] starting thread (client mode): 0x9eb06d10
2026-02-11T20:26:37.367 [DEBUG] [Thread-135344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:26:37.382 [DEBUG] [Thread-135344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:26:37.382 [INFO] [Thread-135344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:26:37.389 [DEBUG] [Thread-135344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] client lang: <none>
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] server lang: <none>
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] kex follows: False
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] Compression: none
2026-02-11T20:26:37.390 [DEBUG] [Thread-135344] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:26:37.448 [DEBUG] [Thread-135344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:26:37.449 [DEBUG] [Thread-135344] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:26:37.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:26:37.450 [DEBUG] [Thread-135344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:26:37.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:26:37.505 [DEBUG] [Thread-135344] [transport.py] [_log()] userauth is OK
2026-02-11T20:26:37.505 [DEBUG] [Thread-135344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:26:37.505 [DEBUG] [Thread-135344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:26:37.505 [DEBUG] [Thread-135344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:26:37.505 [DEBUG] [Thread-135344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:26:37.523 [INFO] [Thread-135344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:26:37.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:26:37.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:26:38.230 [DEBUG] [Thread-135346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:26:38.335 [DEBUG] [Thread-135344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:26:38.336 [DEBUG] [Thread-135344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:26:38.384 [DEBUG] [Thread-135344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:26:38.384 [DEBUG] [Thread-135344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:26:38.393 [DEBUG] [Thread-135344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:26:38.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:26:38.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:26:38.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:26:38.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:26:38.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:26:38.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:26:38.428 [DEBUG] [Thread-135344] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:26:49.140 [DEBUG] [Thread-135347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:27:04.190 [DEBUG] [Thread-135348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:27:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:27:08.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:27:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:27:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 26, 29), 3.43, 80.58, 0.0, 17.86, 17.96, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:27:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:26:29
2026-02-11T20:27:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:27:10.762 [DEBUG] [Thread-135349] [transport.py] [_log()] starting thread (client mode): 0xa57b3640
2026-02-11T20:27:10.762 [DEBUG] [Thread-135349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:27:10.779 [DEBUG] [Thread-135349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:27:10.779 [INFO] [Thread-135349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:27:10.782 [DEBUG] [Thread-135349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:27:10.782 [DEBUG] [Thread-135349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:27:10.782 [DEBUG] [Thread-135349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] client lang: <none>
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] server lang: <none>
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] kex follows: False
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] Compression: none
2026-02-11T20:27:10.783 [DEBUG] [Thread-135349] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:27:10.799 [DEBUG] [Thread-135349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:27:10.800 [DEBUG] [Thread-135349] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:27:10.800 [DEBUG] [Thread-135349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:27:10.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:27:10.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:27:10.802 [DEBUG] [Thread-135349] [transport.py] [_log()] userauth is OK
2026-02-11T20:27:10.802 [DEBUG] [Thread-135349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:27:10.802 [DEBUG] [Thread-135349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:27:10.802 [DEBUG] [Thread-135349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:27:10.802 [DEBUG] [Thread-135349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:27:10.816 [INFO] [Thread-135349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:27:10.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:27:11.465 [DEBUG] [Thread-135349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:27:11.465 [DEBUG] [Thread-135349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:27:11.465 [DEBUG] [Thread-135349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:27:11.505 [DEBUG] [Thread-135349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:27:11.506 [DEBUG] [Thread-135349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:27:11.509 [DEBUG] [Thread-135349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:27:11.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:27:11.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:27:11.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:27:11.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:27:11.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:27:11.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:27:11.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:27:11.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:27:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:27:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.768542 -999.00  +18.00  23.62     83  +15.20 1 2 1 2 1     0    0 -0.67 -138.87 .N.SW 20.6 23.6 207.0 26.0 19.2 -10.9 19.1 -11.8 18.9 -12.7 19.2 -11.9
2026-02-11T20:27:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:27:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:27:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.768542
2026-02-11T20:27:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:27:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:27:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:27:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:27:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:27:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:26:29', tmtdew=3.43, humidity=80.58, cloud=0.0, wind=17.86, temperature=17.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:26:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:24:00')
2026-02-11T20:27:11.530 [DEBUG] [Thread-135349] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:27:11.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:27:11.625 [DEBUG] [Thread-135352] [transport.py] [_log()] starting thread (client mode): 0xa2d6b2b0
2026-02-11T20:27:11.625 [DEBUG] [Thread-135352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:27:11.646 [DEBUG] [Thread-135352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:27:11.646 [INFO] [Thread-135352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:27:11.653 [DEBUG] [Thread-135352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] client lang: <none>
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] server lang: <none>
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] kex follows: False
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:27:11.654 [DEBUG] [Thread-135352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:27:11.655 [DEBUG] [Thread-135352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:27:11.655 [DEBUG] [Thread-135352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:27:11.655 [DEBUG] [Thread-135352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:27:11.655 [DEBUG] [Thread-135352] [transport.py] [_log()] Compression: none
2026-02-11T20:27:11.655 [DEBUG] [Thread-135352] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:27:11.711 [DEBUG] [Thread-135352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:27:11.712 [DEBUG] [Thread-135352] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:27:11.713 [DEBUG] [Thread-135352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:27:11.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:27:11.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:27:11.768 [DEBUG] [Thread-135352] [transport.py] [_log()] userauth is OK
2026-02-11T20:27:11.768 [DEBUG] [Thread-135352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:27:11.768 [DEBUG] [Thread-135352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:27:11.768 [DEBUG] [Thread-135352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:27:11.768 [DEBUG] [Thread-135352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:27:11.787 [INFO] [Thread-135352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:27:11.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:27:11.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:27:12.613 [DEBUG] [Thread-135352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:27:12.613 [DEBUG] [Thread-135352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:27:12.662 [DEBUG] [Thread-135352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:27:12.662 [DEBUG] [Thread-135352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:27:12.671 [DEBUG] [Thread-135352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:27:12.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:27:12.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:27: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
2026-02-11T20:27:12.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:27:12.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:27:12.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:27:12.709 [DEBUG] [Thread-135352] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:27:17.117 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:27:17.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:27:19.228 [DEBUG] [Thread-135354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:27:34.279 [DEBUG] [Thread-135355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:27:38.316 [DEBUG] [Thread-135356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:27:42.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:27:42.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:27:42.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:27:44.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 27, 4), 3.42, 80.63, 0.0, 16.9, 17.98, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:27:44.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:27:04
2026-02-11T20:27:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:27:45.091 [DEBUG] [Thread-135357] [transport.py] [_log()] starting thread (client mode): 0xa2d690c0
2026-02-11T20:27:45.092 [DEBUG] [Thread-135357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:27:45.111 [DEBUG] [Thread-135357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:27:45.112 [INFO] [Thread-135357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:27:45.114 [DEBUG] [Thread-135357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] client lang: <none>
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] server lang: <none>
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] kex follows: False
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] Compression: none
2026-02-11T20:27:45.115 [DEBUG] [Thread-135357] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:27:45.134 [DEBUG] [Thread-135357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:27:45.134 [DEBUG] [Thread-135357] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:27:45.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:27:45.135 [DEBUG] [Thread-135357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:27:45.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:27:45.137 [DEBUG] [Thread-135357] [transport.py] [_log()] userauth is OK
2026-02-11T20:27:45.138 [DEBUG] [Thread-135357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:27:45.138 [DEBUG] [Thread-135357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:27:45.138 [DEBUG] [Thread-135357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:27:45.138 [DEBUG] [Thread-135357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:27:45.163 [INFO] [Thread-135357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:27:45.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:27:45.808 [DEBUG] [Thread-135357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:27:45.809 [DEBUG] [Thread-135357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:27:45.809 [DEBUG] [Thread-135357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:27:45.849 [DEBUG] [Thread-135357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:27:45.850 [DEBUG] [Thread-135357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:27:45.853 [DEBUG] [Thread-135357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:27:45.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:27:45.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:27:45.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:27:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:27:45.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:27:45.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:27:45.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:27:45.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:27:45.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:27:45.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.768889 -999.00  +18.00  13.24     83  +15.20 1 2 1 2 1     0    0 -0.63 -140.55 ..eS. 14.9 13.2 201.4 22.2 19.2 -10.9 19.1 -10.6 18.9 -12.0 19.2 -12.3
2026-02-11T20:27:45.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:27:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:27:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.768889
2026-02-11T20:27:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:27:45.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:27:45.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:27:45.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:27:45.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:27:45.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:27:04', tmtdew=3.42, humidity=80.63, cloud=0.0, wind=16.9, temperature=17.98, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:27:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:24:00')
2026-02-11T20:27:45.881 [DEBUG] [Thread-135357] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:27:45.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:27:45.978 [DEBUG] [Thread-135360] [transport.py] [_log()] starting thread (client mode): 0xa2d5fca0
2026-02-11T20:27:45.978 [DEBUG] [Thread-135360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:27:45.992 [DEBUG] [Thread-135360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:27:45.993 [INFO] [Thread-135360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:27:46.000 [DEBUG] [Thread-135360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:27:46.001 [DEBUG] [Thread-135360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:27:46.001 [DEBUG] [Thread-135360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:27:46.001 [DEBUG] [Thread-135360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:46.001 [DEBUG] [Thread-135360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:27:46.001 [DEBUG] [Thread-135360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:46.001 [DEBUG] [Thread-135360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:27:46.001 [DEBUG] [Thread-135360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:27:46.002 [DEBUG] [Thread-135360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:27:46.002 [DEBUG] [Thread-135360] [transport.py] [_log()] client lang: <none>
2026-02-11T20:27:46.002 [DEBUG] [Thread-135360] [transport.py] [_log()] server lang: <none>
2026-02-11T20:27:46.002 [DEBUG] [Thread-135360] [transport.py] [_log()] kex follows: False
2026-02-11T20:27:46.002 [DEBUG] [Thread-135360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:27:46.002 [DEBUG] [Thread-135360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:27:46.003 [DEBUG] [Thread-135360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:27:46.003 [DEBUG] [Thread-135360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:27:46.003 [DEBUG] [Thread-135360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:27:46.003 [DEBUG] [Thread-135360] [transport.py] [_log()] Compression: none
2026-02-11T20:27:46.003 [DEBUG] [Thread-135360] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:27:46.061 [DEBUG] [Thread-135360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:27:46.061 [DEBUG] [Thread-135360] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:27:46.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:27:46.063 [DEBUG] [Thread-135360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:27:46.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:27:46.120 [DEBUG] [Thread-135360] [transport.py] [_log()] userauth is OK
2026-02-11T20:27:46.120 [DEBUG] [Thread-135360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:27:46.121 [DEBUG] [Thread-135360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:27:46.121 [DEBUG] [Thread-135360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:27:46.121 [DEBUG] [Thread-135360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:27:46.140 [INFO] [Thread-135360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:27:46.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:27:46.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:27:46.990 [DEBUG] [Thread-135360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:27:47.000 [DEBUG] [Thread-135360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:27:47.038 [DEBUG] [Thread-135360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:27:47.038 [DEBUG] [Thread-135360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:27:47.046 [DEBUG] [Thread-135360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:27:47.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:27:47.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:27:47.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:27:47.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:27:47.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:27:47.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:27:47.079 [DEBUG] [Thread-135360] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:27:49.318 [DEBUG] [Thread-135362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:04.378 [DEBUG] [Thread-135363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:17.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:28:17.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:28:17.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:28:17.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:17.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 27, 39), 3.63, 79.29, 0.0, 18.88, 18.32, 0, 0, 0, 2, 0, 0),)
2026-02-11T20:28:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:27:39
2026-02-11T20:28:19.416 [DEBUG] [Thread-135364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:19.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:28:19.908 [DEBUG] [Thread-135365] [transport.py] [_log()] starting thread (client mode): 0xa57d77c0
2026-02-11T20:28:19.908 [DEBUG] [Thread-135365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:28:19.927 [DEBUG] [Thread-135365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:28:19.927 [INFO] [Thread-135365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] client lang: <none>
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] server lang: <none>
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] kex follows: False
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:28:19.930 [DEBUG] [Thread-135365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:28:19.931 [DEBUG] [Thread-135365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:28:19.931 [DEBUG] [Thread-135365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:28:19.931 [DEBUG] [Thread-135365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:28:19.931 [DEBUG] [Thread-135365] [transport.py] [_log()] Compression: none
2026-02-11T20:28:19.931 [DEBUG] [Thread-135365] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:28:19.946 [DEBUG] [Thread-135365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:28:19.947 [DEBUG] [Thread-135365] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:28:19.947 [DEBUG] [Thread-135365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:28:19.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:28:19.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:28:19.949 [DEBUG] [Thread-135365] [transport.py] [_log()] userauth is OK
2026-02-11T20:28:19.949 [DEBUG] [Thread-135365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:28:19.950 [DEBUG] [Thread-135365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:28:19.950 [DEBUG] [Thread-135365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:28:19.950 [DEBUG] [Thread-135365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:28:19.967 [INFO] [Thread-135365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:28:19.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:28:20.575 [DEBUG] [Thread-135365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:28:20.575 [DEBUG] [Thread-135365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:28:20.575 [DEBUG] [Thread-135365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:28:20.616 [DEBUG] [Thread-135365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:28:20.616 [DEBUG] [Thread-135365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:28:20.620 [DEBUG] [Thread-135365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:28:20.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:28:20.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:28:20.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:28:20.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:28:20.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:28:20.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:28:20.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:28:20.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:28:20.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:28:20.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.769236 -999.00  +17.90  15.80     84  +15.20 1 2 1 2 1     0    0 -0.45 -132.01 Z.e.. 11.6 15.8 196.7 23.1 19.2 -10.0 19.1 -9.5 18.9 -10.8 19.2 -11.6
2026-02-11T20:28:20.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:28:20.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:28:20.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.769236
2026-02-11T20:28:20.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:28:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:28:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:28:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:28:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:28:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:27:39', tmtdew=3.63, humidity=79.29, cloud=0.0, wind=18.88, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:27:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:24:00')
2026-02-11T20:28:20.647 [DEBUG] [Thread-135365] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:28:20.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:28:20.737 [DEBUG] [Thread-135368] [transport.py] [_log()] starting thread (client mode): 0xa57713f0
2026-02-11T20:28:20.737 [DEBUG] [Thread-135368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:28:20.752 [DEBUG] [Thread-135368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:28:20.752 [INFO] [Thread-135368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] client lang: <none>
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] server lang: <none>
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] kex follows: False
2026-02-11T20:28:20.759 [DEBUG] [Thread-135368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:28:20.760 [DEBUG] [Thread-135368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:28:20.760 [DEBUG] [Thread-135368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:28:20.760 [DEBUG] [Thread-135368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:28:20.760 [DEBUG] [Thread-135368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:28:20.760 [DEBUG] [Thread-135368] [transport.py] [_log()] Compression: none
2026-02-11T20:28:20.760 [DEBUG] [Thread-135368] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:28:20.820 [DEBUG] [Thread-135368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:28:20.820 [DEBUG] [Thread-135368] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:28:20.821 [DEBUG] [Thread-135368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:28:20.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:28:20.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:28:20.875 [DEBUG] [Thread-135368] [transport.py] [_log()] userauth is OK
2026-02-11T20:28:20.876 [DEBUG] [Thread-135368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:28:20.876 [DEBUG] [Thread-135368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:28:20.876 [DEBUG] [Thread-135368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:28:20.876 [DEBUG] [Thread-135368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:28:20.897 [INFO] [Thread-135368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:28:20.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:28:20.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:28:21.719 [DEBUG] [Thread-135368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:28:21.719 [DEBUG] [Thread-135368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:28:21.767 [DEBUG] [Thread-135368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:28:21.768 [DEBUG] [Thread-135368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:28:21.777 [DEBUG] [Thread-135368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:28:21.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:28:21.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:28:21.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:28:21.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:28:21.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:28:21.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:28:21.814 [DEBUG] [Thread-135368] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:28:34.455 [DEBUG] [Thread-135370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:38.384 [DEBUG] [Thread-135371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:41.146 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:44.332 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:49.427 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:49.506 [DEBUG] [Thread-135372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:51.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:28:51.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:28:51.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
2026-02-11T20:28:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 28, 14), 3.29, 80.76, 0.0, 18.35, 17.93, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:28:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:28:14
2026-02-11T20:28:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:28:54.729 [DEBUG] [Thread-135373] [transport.py] [_log()] starting thread (client mode): 0x9eb06a10
2026-02-11T20:28:54.729 [DEBUG] [Thread-135373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:28:54.749 [DEBUG] [Thread-135373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:28:54.749 [INFO] [Thread-135373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:28:54.752 [DEBUG] [Thread-135373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] client lang: <none>
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] server lang: <none>
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] kex follows: False
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:28:54.753 [DEBUG] [Thread-135373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:28:54.754 [DEBUG] [Thread-135373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:28:54.754 [DEBUG] [Thread-135373] [transport.py] [_log()] Compression: none
2026-02-11T20:28:54.754 [DEBUG] [Thread-135373] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:28:54.771 [DEBUG] [Thread-135373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:28:54.772 [DEBUG] [Thread-135373] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:28:54.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:28:54.773 [DEBUG] [Thread-135373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:28:54.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:28:54.776 [DEBUG] [Thread-135373] [transport.py] [_log()] userauth is OK
2026-02-11T20:28:54.776 [DEBUG] [Thread-135373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:28:54.776 [DEBUG] [Thread-135373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:28:54.776 [DEBUG] [Thread-135373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:28:54.776 [DEBUG] [Thread-135373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:28:54.806 [INFO] [Thread-135373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:28:54.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:28:54.850 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:28:55.453 [DEBUG] [Thread-135373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:28:55.453 [DEBUG] [Thread-135373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:28:55.453 [DEBUG] [Thread-135373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:28:55.494 [DEBUG] [Thread-135373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:28:55.495 [DEBUG] [Thread-135373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:28:55.497 [DEBUG] [Thread-135373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:28:55.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:28:55.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:28:55.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:28:55.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:28:55.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:28:55.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:28:55.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:28:55.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:28:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:28:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.769583 -999.00  +17.90  17.88     84  +15.20 1 3 1 2 1     0    0 -0.28 -123.40 Z.e.. 18.5 17.9 202.2 20.4 19.3 -9.5 19.1 -8.9 18.9 -9.9 19.2 -10.8
2026-02-11T20:28:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:28:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:28:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.769583
2026-02-11T20:28:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:28:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:28:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:28:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:28:55.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:28:55.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:28:14', tmtdew=3.29, humidity=80.76, cloud=0.0, wind=18.35, temperature=17.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:28:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:24:00')
2026-02-11T20:28:55.519 [DEBUG] [Thread-135373] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:28:55.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:28:55.615 [DEBUG] [Thread-135376] [transport.py] [_log()] starting thread (client mode): 0xa57e1de0
2026-02-11T20:28:55.616 [DEBUG] [Thread-135376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:28:55.630 [DEBUG] [Thread-135376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:28:55.630 [INFO] [Thread-135376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:28:55.637 [DEBUG] [Thread-135376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] client lang: <none>
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] server lang: <none>
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] kex follows: False
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:28:55.638 [DEBUG] [Thread-135376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:28:55.639 [DEBUG] [Thread-135376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:28:55.639 [DEBUG] [Thread-135376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:28:55.639 [DEBUG] [Thread-135376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:28:55.639 [DEBUG] [Thread-135376] [transport.py] [_log()] Compression: none
2026-02-11T20:28:55.639 [DEBUG] [Thread-135376] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:28:55.694 [DEBUG] [Thread-135376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:28:55.695 [DEBUG] [Thread-135376] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:28:55.695 [DEBUG] [Thread-135376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:28:55.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:28:55.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:28:55.751 [DEBUG] [Thread-135376] [transport.py] [_log()] userauth is OK
2026-02-11T20:28:55.751 [DEBUG] [Thread-135376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:28:55.751 [DEBUG] [Thread-135376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:28:55.751 [DEBUG] [Thread-135376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:28:55.751 [DEBUG] [Thread-135376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:28:55.773 [INFO] [Thread-135376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:28:55.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:28:55.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:28:56.584 [DEBUG] [Thread-135376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:28:56.593 [DEBUG] [Thread-135376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:28:56.633 [DEBUG] [Thread-135376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:28:56.633 [DEBUG] [Thread-135376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:28:56.641 [DEBUG] [Thread-135376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:28:56.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:28: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')
2026-02-11T20:28: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
2026-02-11T20:28:56.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:28:56.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:28:56.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:28:56.674 [DEBUG] [Thread-135376] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:29:04.539 [DEBUG] [Thread-135378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:14.023 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:17.533 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:17.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:18.405 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:19.598 [DEBUG] [Thread-135379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:26.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:29:26.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:29:26.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:29:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 28, 50), 3.18, 81.33, 0.0, 24.81, 17.89, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:29:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:28:50
2026-02-11T20:29:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:29:29.128 [DEBUG] [Thread-135380] [transport.py] [_log()] starting thread (client mode): 0xa57d67a0
2026-02-11T20:29:29.128 [DEBUG] [Thread-135380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:29:29.148 [DEBUG] [Thread-135380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:29:29.149 [INFO] [Thread-135380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:29:29.150 [DEBUG] [Thread-135380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:29:29.151 [DEBUG] [Thread-135380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:29:29.151 [DEBUG] [Thread-135380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:29:29.151 [DEBUG] [Thread-135380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:29:29.151 [DEBUG] [Thread-135380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:29:29.151 [DEBUG] [Thread-135380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:29:29.151 [DEBUG] [Thread-135380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] client lang: <none>
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] server lang: <none>
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] kex follows: False
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:29:29.152 [DEBUG] [Thread-135380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:29:29.153 [DEBUG] [Thread-135380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:29:29.153 [DEBUG] [Thread-135380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:29:29.153 [DEBUG] [Thread-135380] [transport.py] [_log()] Compression: none
2026-02-11T20:29:29.153 [DEBUG] [Thread-135380] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:29:29.173 [DEBUG] [Thread-135380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:29:29.174 [DEBUG] [Thread-135380] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:29:29.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:29:29.174 [DEBUG] [Thread-135380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:29:29.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:29:29.177 [DEBUG] [Thread-135380] [transport.py] [_log()] userauth is OK
2026-02-11T20:29:29.177 [DEBUG] [Thread-135380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:29:29.177 [DEBUG] [Thread-135380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:29:29.177 [DEBUG] [Thread-135380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:29:29.177 [DEBUG] [Thread-135380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:29:29.197 [INFO] [Thread-135380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:29:29.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:29:29.731 [DEBUG] [Thread-135380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:29:29.731 [DEBUG] [Thread-135380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:29:29.732 [DEBUG] [Thread-135380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:29:29.772 [DEBUG] [Thread-135380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:29:29.773 [DEBUG] [Thread-135380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:29:29.776 [DEBUG] [Thread-135380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:29:29.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:29:29.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:29:29.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:29:29.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:29:29.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:29:29.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:29:29.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:29:29.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:29:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:29:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.770278 -999.00  +17.90  18.42     84  +15.30 1 3 1 2 1     0    0 0.42 -98.02 ZN..W 17.4 18.4 195.0 24.1 19.2 -6.3 19.1 -5.6 18.9 -6.5 19.2 -7.4
2026-02-11T20:29:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:29:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:29:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.770278
2026-02-11T20:29:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:29:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:29:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:29:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:29:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:29:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:28:50', tmtdew=3.18, humidity=81.33, cloud=0.0, wind=24.81, temperature=17.89, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:29:12.019', atlas_cloud=3, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:27:00')
2026-02-11T20:29:29.802 [DEBUG] [Thread-135380] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:29:29.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:29:29.900 [DEBUG] [Thread-135383] [transport.py] [_log()] starting thread (client mode): 0xa2d5c5b0
2026-02-11T20:29:29.900 [DEBUG] [Thread-135383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:29:29.914 [DEBUG] [Thread-135383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:29:29.914 [INFO] [Thread-135383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:29:29.922 [DEBUG] [Thread-135383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:29:29.922 [DEBUG] [Thread-135383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] client lang: <none>
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] server lang: <none>
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] kex follows: False
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] Compression: none
2026-02-11T20:29:29.923 [DEBUG] [Thread-135383] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:29:29.984 [DEBUG] [Thread-135383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:29:29.985 [DEBUG] [Thread-135383] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:29:29.986 [DEBUG] [Thread-135383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:29:29.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:29:29.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:29:30.043 [DEBUG] [Thread-135383] [transport.py] [_log()] userauth is OK
2026-02-11T20:29:30.044 [DEBUG] [Thread-135383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:29:30.044 [DEBUG] [Thread-135383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:29:30.044 [DEBUG] [Thread-135383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:29:30.044 [DEBUG] [Thread-135383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:29:30.062 [INFO] [Thread-135383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:29:30.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:29:30.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:29:30.916 [DEBUG] [Thread-135383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:29:30.916 [DEBUG] [Thread-135383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:29:30.964 [DEBUG] [Thread-135383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:29:30.965 [DEBUG] [Thread-135383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:29:30.974 [DEBUG] [Thread-135383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:29:30.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:29:30.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:29:30.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:29:31.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:29:31.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:29:31.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:29:31.012 [DEBUG] [Thread-135383] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:29:34.631 [DEBUG] [Thread-135385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:38.452 [DEBUG] [Thread-135386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:49.682 [DEBUG] [Thread-135387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:29:57.734 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:30:01.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:30:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:30:03.173 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 29, 26), 3.15, 81.48, 0.0, 22.67, 17.89, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:30:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:29:26
2026-02-11T20:30:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:30:03.832 [DEBUG] [Thread-135388] [transport.py] [_log()] starting thread (client mode): 0xa2d07250
2026-02-11T20:30:03.832 [DEBUG] [Thread-135388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:30:03.854 [DEBUG] [Thread-135388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:30:03.854 [INFO] [Thread-135388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] client lang: <none>
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] server lang: <none>
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] kex follows: False
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:30:03.857 [DEBUG] [Thread-135388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:30:03.858 [DEBUG] [Thread-135388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:30:03.858 [DEBUG] [Thread-135388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:30:03.858 [DEBUG] [Thread-135388] [transport.py] [_log()] Compression: none
2026-02-11T20:30:03.858 [DEBUG] [Thread-135388] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:30:03.873 [DEBUG] [Thread-135388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:30:03.873 [DEBUG] [Thread-135388] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:30:03.873 [DEBUG] [Thread-135388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:30:03.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:30:03.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:30:03.874 [DEBUG] [Thread-135388] [transport.py] [_log()] userauth is OK
2026-02-11T20:30:03.874 [DEBUG] [Thread-135388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:30:03.874 [DEBUG] [Thread-135388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:30:03.874 [DEBUG] [Thread-135388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:30:03.874 [DEBUG] [Thread-135388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:30:03.884 [INFO] [Thread-135388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:30:03.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:30:04.673 [DEBUG] [Thread-135388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:30:04.673 [DEBUG] [Thread-135388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:30:04.673 [DEBUG] [Thread-135388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:30:04.715 [DEBUG] [Thread-135388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:30:04.715 [DEBUG] [Thread-135388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:30:04.716 [DEBUG] [Thread-135390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:04.717 [DEBUG] [Thread-135388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:30:04.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:30:04.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:30:04.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:30:04.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:30:04.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:30:04.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:30:04.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:30:04.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:30:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:30:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.770625 -999.00  +17.90  12.94     84  +15.30 1 3 1 2 1     0    0 0.26 -102.38 ZN..W 13.5 12.9 188.2 23.3 19.3 -5.5 19.1 -5.9 18.9 -6.0 -999.0 -999.0
2026-02-11T20:30:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:30:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:30:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.770625
2026-02-11T20:30:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:30:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:30:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:30:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:30:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:30:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:29:26', tmtdew=3.15, humidity=81.48, cloud=0.0, wind=22.67, temperature=17.89, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:29:42.000', atlas_cloud=3, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:27:00')
2026-02-11T20:30:04.739 [DEBUG] [Thread-135388] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:30:04.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:30:04.835 [DEBUG] [Thread-135392] [transport.py] [_log()] starting thread (client mode): 0xa57d5bd0
2026-02-11T20:30:04.835 [DEBUG] [Thread-135392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:30:04.849 [DEBUG] [Thread-135392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:30:04.850 [INFO] [Thread-135392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:30:04.857 [DEBUG] [Thread-135392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:30:04.858 [DEBUG] [Thread-135392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:30:04.858 [DEBUG] [Thread-135392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:30:04.858 [DEBUG] [Thread-135392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:04.858 [DEBUG] [Thread-135392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:04.858 [DEBUG] [Thread-135392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] client lang: <none>
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] server lang: <none>
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] kex follows: False
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] Compression: none
2026-02-11T20:30:04.859 [DEBUG] [Thread-135392] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:30:04.916 [DEBUG] [Thread-135392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:30:04.917 [DEBUG] [Thread-135392] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:30:04.918 [DEBUG] [Thread-135392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:30:04.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:30:04.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:30:04.976 [DEBUG] [Thread-135392] [transport.py] [_log()] userauth is OK
2026-02-11T20:30:04.976 [DEBUG] [Thread-135392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:30:04.976 [DEBUG] [Thread-135392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:30:04.977 [DEBUG] [Thread-135392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:30:04.977 [DEBUG] [Thread-135392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:30:04.996 [INFO] [Thread-135392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:30:04.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:30:04.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:30:05.852 [DEBUG] [Thread-135392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:30:05.852 [DEBUG] [Thread-135392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:30:05.900 [DEBUG] [Thread-135392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:30:05.900 [DEBUG] [Thread-135392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:30:05.909 [DEBUG] [Thread-135392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:30:05.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:30:05.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:30:05.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:30:05.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:30:05.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:30:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:30:05.942 [DEBUG] [Thread-135392] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:30:08.260 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:13.710 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:17.734 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:17.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:19.750 [DEBUG] [Thread-135394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:34.804 [DEBUG] [Thread-135395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:30:35.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:30:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:30:37.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 30, 2), 3.14, 81.56, 0.0, 22.41, 17.84, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:30:37.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:30:02
2026-02-11T20:30:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:30:38.494 [DEBUG] [Thread-135396] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-11T20:30:38.494 [DEBUG] [Thread-135396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:30:38.503 [DEBUG] [Thread-135397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:30:38.513 [DEBUG] [Thread-135396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:30:38.513 [INFO] [Thread-135396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] client lang: <none>
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] server lang: <none>
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] kex follows: False
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:30:38.516 [DEBUG] [Thread-135396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:30:38.517 [DEBUG] [Thread-135396] [transport.py] [_log()] Compression: none
2026-02-11T20:30:38.517 [DEBUG] [Thread-135396] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:30:38.534 [DEBUG] [Thread-135396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:30:38.534 [DEBUG] [Thread-135396] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:30:38.534 [DEBUG] [Thread-135396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:30:38.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:30:38.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:30:38.536 [DEBUG] [Thread-135396] [transport.py] [_log()] userauth is OK
2026-02-11T20:30:38.536 [DEBUG] [Thread-135396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:30:38.536 [DEBUG] [Thread-135396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:30:38.536 [DEBUG] [Thread-135396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:30:38.536 [DEBUG] [Thread-135396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:30:38.567 [INFO] [Thread-135396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:30:38.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:30:39.187 [DEBUG] [Thread-135396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:30:39.187 [DEBUG] [Thread-135396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:30:39.188 [DEBUG] [Thread-135396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:30:39.228 [DEBUG] [Thread-135396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:30:39.229 [DEBUG] [Thread-135396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:30:39.233 [DEBUG] [Thread-135396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:30:39.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:30:39.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:30:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:30:39.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:30:39.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:30:39.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:30:39.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:30:39.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:30:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:30:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.770972 -999.00  +17.90  15.67     84  +15.30 1 3 1 2 1     0    0 0.76 -84.85 ZN... 20.4 15.7 193.0 23.0 19.3 -5.3 19.1 -6.4 18.9 -6.3 19.2 -5.8
2026-02-11T20:30:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:30:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:30:39.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.770972
2026-02-11T20:30:39.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:30:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:30:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:30:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:30:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:30:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:30:02', tmtdew=3.14, humidity=81.56, cloud=0.0, wind=22.41, temperature=17.84, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:30:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:27:00')
2026-02-11T20:30:39.259 [DEBUG] [Thread-135396] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:30:39.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:30:39.354 [DEBUG] [Thread-135400] [transport.py] [_log()] starting thread (client mode): 0xa57d66b0
2026-02-11T20:30:39.354 [DEBUG] [Thread-135400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:30:39.369 [DEBUG] [Thread-135400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:30:39.369 [INFO] [Thread-135400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:30:39.377 [DEBUG] [Thread-135400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:30:39.377 [DEBUG] [Thread-135400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:30:39.377 [DEBUG] [Thread-135400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:30:39.377 [DEBUG] [Thread-135400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] client lang: <none>
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] server lang: <none>
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] kex follows: False
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] Compression: none
2026-02-11T20:30:39.378 [DEBUG] [Thread-135400] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:30:39.433 [DEBUG] [Thread-135400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:30:39.433 [DEBUG] [Thread-135400] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:30:39.433 [DEBUG] [Thread-135400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:30:39.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:30:39.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:30:39.492 [DEBUG] [Thread-135400] [transport.py] [_log()] userauth is OK
2026-02-11T20:30:39.492 [DEBUG] [Thread-135400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:30:39.492 [DEBUG] [Thread-135400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:30:39.492 [DEBUG] [Thread-135400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:30:39.492 [DEBUG] [Thread-135400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:30:39.511 [INFO] [Thread-135400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:30:39.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:30:39.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:30:40.337 [DEBUG] [Thread-135400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:30:40.338 [DEBUG] [Thread-135400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:30:40.385 [DEBUG] [Thread-135400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:30:40.385 [DEBUG] [Thread-135400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:30:40.394 [DEBUG] [Thread-135400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:30:40.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:30:40.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:30:40.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:30:40.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:30:40.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:30:40.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:30:40.431 [DEBUG] [Thread-135400] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:30:49.843 [DEBUG] [Thread-135402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:04.900 [DEBUG] [Thread-135403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:10.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:31:10.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:31:10.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:31:12.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 30, 38), 3.39, 80.55, 0.0, 19.37, 18.26, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:31:12.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:30:38
2026-02-11T20:31:12.381 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:31:12.835 [DEBUG] [Thread-135404] [transport.py] [_log()] starting thread (client mode): 0xa2d04310
2026-02-11T20:31:12.835 [DEBUG] [Thread-135404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:31:12.855 [DEBUG] [Thread-135404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:31:12.855 [INFO] [Thread-135404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] client lang: <none>
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] server lang: <none>
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] kex follows: False
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] Compression: none
2026-02-11T20:31:12.858 [DEBUG] [Thread-135404] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:31:12.873 [DEBUG] [Thread-135404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:31:12.874 [DEBUG] [Thread-135404] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:31:12.874 [DEBUG] [Thread-135404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:31:12.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:31:12.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:31:12.874 [DEBUG] [Thread-135404] [transport.py] [_log()] userauth is OK
2026-02-11T20:31:12.874 [DEBUG] [Thread-135404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:31:12.874 [DEBUG] [Thread-135404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:31:12.874 [DEBUG] [Thread-135404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:31:12.874 [DEBUG] [Thread-135404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:31:12.888 [INFO] [Thread-135404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:31:12.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:31:13.555 [DEBUG] [Thread-135404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:31:13.555 [DEBUG] [Thread-135404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:31:13.556 [DEBUG] [Thread-135404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:31:13.596 [DEBUG] [Thread-135404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:31:13.597 [DEBUG] [Thread-135404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:31:13.600 [DEBUG] [Thread-135404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:31:13.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:31:13.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:31:13.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:31:13.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:31:13.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:31:13.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:31:13.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:31:13.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:31:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:31:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.771319 -999.00  +17.80  17.96     85  +15.30 1 3 1 2 1     0    0 0.67 -85.02 ZN... 20.7 18.0 202.8 27.2 19.2 -7.0 19.1 -9.2 18.9 -8.5 19.2 -7.4
2026-02-11T20:31:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:31:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:31:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.771319
2026-02-11T20:31:13.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:31:13.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:31:13.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:31:13.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:31:13.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:31:13.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:30:38', tmtdew=3.39, humidity=80.55, cloud=0.0, wind=19.37, temperature=18.26, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:30:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:27:00')
2026-02-11T20:31:13.627 [DEBUG] [Thread-135404] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:31:13.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:31:13.722 [DEBUG] [Thread-135407] [transport.py] [_log()] starting thread (client mode): 0x9eb04a60
2026-02-11T20:31:13.723 [DEBUG] [Thread-135407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:31:13.738 [DEBUG] [Thread-135407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:31:13.738 [INFO] [Thread-135407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:31:13.746 [DEBUG] [Thread-135407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] client lang: <none>
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] server lang: <none>
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] kex follows: False
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:31:13.747 [DEBUG] [Thread-135407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:31:13.748 [DEBUG] [Thread-135407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:31:13.748 [DEBUG] [Thread-135407] [transport.py] [_log()] Compression: none
2026-02-11T20:31:13.748 [DEBUG] [Thread-135407] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:31:13.803 [DEBUG] [Thread-135407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:31:13.804 [DEBUG] [Thread-135407] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:31:13.805 [DEBUG] [Thread-135407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:31:13.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:31:13.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:31:13.859 [DEBUG] [Thread-135407] [transport.py] [_log()] userauth is OK
2026-02-11T20:31:13.859 [DEBUG] [Thread-135407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:31:13.859 [DEBUG] [Thread-135407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:31:13.860 [DEBUG] [Thread-135407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:31:13.860 [DEBUG] [Thread-135407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:31:13.880 [INFO] [Thread-135407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:31:13.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:31:13.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:31:14.728 [DEBUG] [Thread-135407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:31:14.729 [DEBUG] [Thread-135407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:31:14.776 [DEBUG] [Thread-135407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:31:14.776 [DEBUG] [Thread-135407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:31:14.785 [DEBUG] [Thread-135407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:31:14.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:31:14.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:31:14.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:31:14.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:31:14.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:31:14.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:31:14.822 [DEBUG] [Thread-135407] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:31:16.494 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:17.935 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:17.936 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:19.935 [DEBUG] [Thread-135409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:34.987 [DEBUG] [Thread-135410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:38.590 [DEBUG] [Thread-135411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:31:44.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:31:44.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:31:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:31:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 31, 14), 3.04, 82.32, 0.0, 26.98, 17.89, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:31:46.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:31:14
2026-02-11T20:31:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:31:47.083 [DEBUG] [Thread-135412] [transport.py] [_log()] starting thread (client mode): 0xa2d04370
2026-02-11T20:31:47.083 [DEBUG] [Thread-135412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:31:47.102 [DEBUG] [Thread-135412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:31:47.102 [INFO] [Thread-135412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] client lang: <none>
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] server lang: <none>
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] kex follows: False
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] Compression: none
2026-02-11T20:31:47.105 [DEBUG] [Thread-135412] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:31:47.119 [DEBUG] [Thread-135412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:31:47.120 [DEBUG] [Thread-135412] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:31:47.120 [DEBUG] [Thread-135412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:31:47.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:31:47.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:31:47.120 [DEBUG] [Thread-135412] [transport.py] [_log()] userauth is OK
2026-02-11T20:31:47.120 [DEBUG] [Thread-135412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:31:47.120 [DEBUG] [Thread-135412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:31:47.120 [DEBUG] [Thread-135412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:31:47.121 [DEBUG] [Thread-135412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:31:47.136 [INFO] [Thread-135412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:31:47.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:31:47.789 [DEBUG] [Thread-135412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:31:47.790 [DEBUG] [Thread-135412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:31:47.790 [DEBUG] [Thread-135412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:31:47.831 [DEBUG] [Thread-135412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:31:47.831 [DEBUG] [Thread-135412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:31:47.833 [DEBUG] [Thread-135412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:31:47.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:31:47.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:31:47.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:31:47.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:31:47.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:31:47.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:31:47.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:31:47.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:31:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:31:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.771667 -999.00  +17.80  20.69     85  +15.30 1 3 1 2 1     0    0 0.95 -77.77 ...S. 21.3 20.7 201.0 24.6 19.2 -9.2 19.1 -9.6 18.9 -10.1 19.2 -10.0
2026-02-11T20:31:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:31:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:31:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.771667
2026-02-11T20:31:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:31:47.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:31:47.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:31:47.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:31:47.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:31:47.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:31:14', tmtdew=3.04, humidity=82.32, cloud=0.0, wind=26.98, temperature=17.89, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:31:12.029', atlas_cloud=3, atlas_rain=1, zp_data=[0.46875, 1.2492500000000009, 0.4867500000000007, 0.22449999999999903, 0.16849999999999987, 0.2192500000000006, 0.27999999999999936, 0.42525000000000013, 0.8264999999999993, 1.3470000000000004, 1.0032499999999995, 0.1609999999999996, 0.129999999999999, 0.13924999999999876, 0.10599999999999987, 0.05099999999999838, 0.6052499999999998, 1.0789999999999997, 1.3579999999999997, 0.23324999999999818, 0.21099999999999852, 0.07724999999999937, 0.03625000000000078, 0.04174999999999862, 0.15699999999999825, 0.7335000000000003, 0.9327500000000004, 0.13700000000000045, 0.18400000000000105, 0.07600000000000051, 0.07800000000000118, 0.03750000000000142, 0.5177499999999995], zp_timestamp='2026-02-11T18:27:00')
2026-02-11T20:31:47.857 [DEBUG] [Thread-135412] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:31:47.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:31:47.971 [DEBUG] [Thread-135415] [transport.py] [_log()] starting thread (client mode): 0xa2d04250
2026-02-11T20:31:47.971 [DEBUG] [Thread-135415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:31:47.986 [DEBUG] [Thread-135415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:31:47.986 [INFO] [Thread-135415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:31:47.993 [DEBUG] [Thread-135415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] client lang: <none>
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] server lang: <none>
2026-02-11T20:31:47.994 [DEBUG] [Thread-135415] [transport.py] [_log()] kex follows: False
2026-02-11T20:31:47.995 [DEBUG] [Thread-135415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:31:47.995 [DEBUG] [Thread-135415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:31:47.995 [DEBUG] [Thread-135415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:31:47.995 [DEBUG] [Thread-135415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:31:47.995 [DEBUG] [Thread-135415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:31:47.995 [DEBUG] [Thread-135415] [transport.py] [_log()] Compression: none
2026-02-11T20:31:47.995 [DEBUG] [Thread-135415] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:31:48.054 [DEBUG] [Thread-135415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:31:48.055 [DEBUG] [Thread-135415] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:31:48.055 [DEBUG] [Thread-135415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:31:48.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:31:48.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:31:48.112 [DEBUG] [Thread-135415] [transport.py] [_log()] userauth is OK
2026-02-11T20:31:48.112 [DEBUG] [Thread-135415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:31:48.113 [DEBUG] [Thread-135415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:31:48.113 [DEBUG] [Thread-135415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:31:48.113 [DEBUG] [Thread-135415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:31:48.137 [INFO] [Thread-135415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:31:48.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:31:48.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:31:49.007 [DEBUG] [Thread-135415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:31:49.007 [DEBUG] [Thread-135415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:31:49.056 [DEBUG] [Thread-135415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:31:49.056 [DEBUG] [Thread-135415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:31:49.066 [DEBUG] [Thread-135415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:31:49.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:31:49.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:31:49.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:31:49.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:31:49.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:31:49.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:31:49.101 [DEBUG] [Thread-135415] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:31:50.023 [DEBUG] [Thread-135417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:05.072 [DEBUG] [Thread-135418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:18.137 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:18.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:19.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:32:19.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:32:19.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:32:20.110 [DEBUG] [Thread-135419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 31, 49), 2.96, 82.94, 0.0, 21.35, 17.78, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:32:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:31:49
2026-02-11T20:32:21.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:32:21.491 [DEBUG] [Thread-135420] [transport.py] [_log()] starting thread (client mode): 0xa57d4670
2026-02-11T20:32:21.492 [DEBUG] [Thread-135420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:32:21.513 [DEBUG] [Thread-135420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:32:21.513 [INFO] [Thread-135420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:32:21.516 [DEBUG] [Thread-135420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:32:21.516 [DEBUG] [Thread-135420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:32:21.516 [DEBUG] [Thread-135420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:32:21.516 [DEBUG] [Thread-135420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] client lang: <none>
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] server lang: <none>
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] kex follows: False
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:32:21.517 [DEBUG] [Thread-135420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:32:21.518 [DEBUG] [Thread-135420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:32:21.518 [DEBUG] [Thread-135420] [transport.py] [_log()] Compression: none
2026-02-11T20:32:21.518 [DEBUG] [Thread-135420] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:32:21.537 [DEBUG] [Thread-135420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:32:21.537 [DEBUG] [Thread-135420] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:32:21.538 [DEBUG] [Thread-135420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:32:21.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:32:21.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:32:21.540 [DEBUG] [Thread-135420] [transport.py] [_log()] userauth is OK
2026-02-11T20:32:21.540 [DEBUG] [Thread-135420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:32:21.540 [DEBUG] [Thread-135420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:32:21.541 [DEBUG] [Thread-135420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:32:21.541 [DEBUG] [Thread-135420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:32:21.564 [INFO] [Thread-135420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:32:21.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:32:22.183 [DEBUG] [Thread-135420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:32:22.183 [DEBUG] [Thread-135420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:32:22.184 [DEBUG] [Thread-135420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:32:22.225 [DEBUG] [Thread-135420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:32:22.225 [DEBUG] [Thread-135420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:32:22.228 [DEBUG] [Thread-135420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:32:22.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:32:22.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:32:22.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:32:22.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:32:22.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:32:22.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:32:22.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:32:22.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:32:22.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:32:22.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.772014 -999.00  +17.70  19.24     85  +15.30 1 3 1 2 1     0    0 1.00 -73.24 z.ESW 21.1 19.2 198.6 27.4 19.2 -8.5 19.0 -8.2 18.9 -8.3 19.1 -9.7
2026-02-11T20:32:22.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:32:22.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:32:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.772014
2026-02-11T20:32:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:32:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:32:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:32:22.254 [DEBUG] [Thread-135420] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:32:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:32:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:32:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:31:49', tmtdew=2.96, humidity=82.94, cloud=0.0, wind=21.35, temperature=17.78, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:31:42.010', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3309999999999995, nan, nan, nan, nan, nan, 1.4147499999999988, 1.183250000000001, nan, nan, nan, nan, nan, nan, 0.5520000000000014, 0.6540000000000008, nan, nan], zp_timestamp='2026-02-11T18:31:00')
2026-02-11T20:32:22.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:32:22.351 [DEBUG] [Thread-135423] [transport.py] [_log()] starting thread (client mode): 0xa57734c0
2026-02-11T20:32:22.351 [DEBUG] [Thread-135423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:32:22.365 [DEBUG] [Thread-135423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:32:22.365 [INFO] [Thread-135423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] client lang: <none>
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] server lang: <none>
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] kex follows: False
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:32:22.373 [DEBUG] [Thread-135423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:32:22.374 [DEBUG] [Thread-135423] [transport.py] [_log()] Compression: none
2026-02-11T20:32:22.374 [DEBUG] [Thread-135423] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:32:22.431 [DEBUG] [Thread-135423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:32:22.432 [DEBUG] [Thread-135423] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:32:22.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:32:22.433 [DEBUG] [Thread-135423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:32:22.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:32:22.488 [DEBUG] [Thread-135423] [transport.py] [_log()] userauth is OK
2026-02-11T20:32:22.488 [DEBUG] [Thread-135423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:32:22.488 [DEBUG] [Thread-135423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:32:22.488 [DEBUG] [Thread-135423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:32:22.489 [DEBUG] [Thread-135423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:32:22.508 [INFO] [Thread-135423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:32:22.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:32:22.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:32:23.326 [DEBUG] [Thread-135423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:32:23.326 [DEBUG] [Thread-135423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:32:23.375 [DEBUG] [Thread-135423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:32:23.375 [DEBUG] [Thread-135423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:32:23.384 [DEBUG] [Thread-135423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:32:23.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:32:23.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:32:23.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:32:23.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:32:23.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:32:23.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:32:23.429 [DEBUG] [Thread-135423] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:32:35.145 [DEBUG] [Thread-135425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:38.665 [DEBUG] [Thread-135426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:50.196 [DEBUG] [Thread-135427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:32:53.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:32:53.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:32:53.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:32:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 32, 25), 2.93, 83.09, 0.0, 23.77, 17.76, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:32:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:32:25
2026-02-11T20:32:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:32:55.701 [DEBUG] [Thread-135428] [transport.py] [_log()] starting thread (client mode): 0xa2d05570
2026-02-11T20:32:55.701 [DEBUG] [Thread-135428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:32:55.721 [DEBUG] [Thread-135428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:32:55.721 [INFO] [Thread-135428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:32:55.724 [DEBUG] [Thread-135428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:32:55.724 [DEBUG] [Thread-135428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] client lang: <none>
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] server lang: <none>
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] kex follows: False
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:32:55.725 [DEBUG] [Thread-135428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:32:55.726 [DEBUG] [Thread-135428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:32:55.726 [DEBUG] [Thread-135428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:32:55.726 [DEBUG] [Thread-135428] [transport.py] [_log()] Compression: none
2026-02-11T20:32:55.726 [DEBUG] [Thread-135428] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:32:55.746 [DEBUG] [Thread-135428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:32:55.747 [DEBUG] [Thread-135428] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:32:55.747 [DEBUG] [Thread-135428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:32:55.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:32:55.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:32:55.749 [DEBUG] [Thread-135428] [transport.py] [_log()] userauth is OK
2026-02-11T20:32:55.750 [DEBUG] [Thread-135428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:32:55.750 [DEBUG] [Thread-135428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:32:55.750 [DEBUG] [Thread-135428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:32:55.750 [DEBUG] [Thread-135428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:32:55.787 [INFO] [Thread-135428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:32:55.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:32:56.407 [DEBUG] [Thread-135428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:32:56.407 [DEBUG] [Thread-135428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:32:56.408 [DEBUG] [Thread-135428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:32:56.448 [DEBUG] [Thread-135428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:32:56.449 [DEBUG] [Thread-135428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:32:56.452 [DEBUG] [Thread-135428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:32:56.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:32:56.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:32:56.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:32:56.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:32:56.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:32:56.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:32:56.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:32:56.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:32:56.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:32:56.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.772708 -999.00  +17.70  15.42     85  +15.30 1 3 1 2 1     0    0 1.22 -64.62 zN..W 12.0 15.4 202.0 22.0 19.2 -8.0 19.0 -10.1 18.9 -9.2 19.1 -8.6
2026-02-11T20:32:56.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:32:56.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:32:56.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.772708
2026-02-11T20:32:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:32:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:32:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:32:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:32:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:32:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:32:25', tmtdew=2.93, humidity=83.09, cloud=0.0, wind=23.77, temperature=17.76, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:32:41.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3309999999999995, nan, nan, nan, nan, nan, 1.4147499999999988, 1.183250000000001, nan, nan, nan, nan, nan, nan, 0.5520000000000014, 0.6540000000000008, nan, nan], zp_timestamp='2026-02-11T18:31:00')
2026-02-11T20:32:56.482 [DEBUG] [Thread-135428] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:32:56.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:32:56.590 [DEBUG] [Thread-135431] [transport.py] [_log()] starting thread (client mode): 0xa2d05d20
2026-02-11T20:32:56.590 [DEBUG] [Thread-135431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:32:56.605 [DEBUG] [Thread-135431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:32:56.605 [INFO] [Thread-135431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] client lang: <none>
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] server lang: <none>
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] kex follows: False
2026-02-11T20:32:56.613 [DEBUG] [Thread-135431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:32:56.614 [DEBUG] [Thread-135431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:32:56.614 [DEBUG] [Thread-135431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:32:56.614 [DEBUG] [Thread-135431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:32:56.614 [DEBUG] [Thread-135431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:32:56.614 [DEBUG] [Thread-135431] [transport.py] [_log()] Compression: none
2026-02-11T20:32:56.614 [DEBUG] [Thread-135431] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:32:56.671 [DEBUG] [Thread-135431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:32:56.671 [DEBUG] [Thread-135431] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:32:56.672 [DEBUG] [Thread-135431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:32:56.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:32:56.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:32:56.727 [DEBUG] [Thread-135431] [transport.py] [_log()] userauth is OK
2026-02-11T20:32:56.728 [DEBUG] [Thread-135431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:32:56.728 [DEBUG] [Thread-135431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:32:56.728 [DEBUG] [Thread-135431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:32:56.728 [DEBUG] [Thread-135431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:32:56.746 [INFO] [Thread-135431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:32:56.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:32:56.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:32:57.553 [DEBUG] [Thread-135431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:32:57.554 [DEBUG] [Thread-135431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:32:57.601 [DEBUG] [Thread-135431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:32:57.601 [DEBUG] [Thread-135431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:32:57.611 [DEBUG] [Thread-135431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:32:57.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:32:57.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:32:57.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:32:57.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:32:57.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:32:57.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:32:57.654 [DEBUG] [Thread-135431] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:33:05.232 [DEBUG] [Thread-135433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:18.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:18.340 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:20.290 [DEBUG] [Thread-135434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:33:27.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:33:27.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:33:29.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 33, 1), 2.8, 83.75, 0.0, 22.73, 17.71, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:33:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:33:01
2026-02-11T20:33:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:33:29.909 [DEBUG] [Thread-135435] [transport.py] [_log()] starting thread (client mode): 0x9eb07e50
2026-02-11T20:33:29.910 [DEBUG] [Thread-135435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:33:29.925 [DEBUG] [Thread-135435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:33:29.925 [INFO] [Thread-135435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] client lang: <none>
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] server lang: <none>
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] kex follows: False
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] Compression: none
2026-02-11T20:33:29.928 [DEBUG] [Thread-135435] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:33:29.947 [DEBUG] [Thread-135435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:33:29.947 [DEBUG] [Thread-135435] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:33:29.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:33:29.948 [DEBUG] [Thread-135435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:33:29.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:33:29.951 [DEBUG] [Thread-135435] [transport.py] [_log()] userauth is OK
2026-02-11T20:33:29.951 [DEBUG] [Thread-135435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:33:29.951 [DEBUG] [Thread-135435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:33:29.951 [DEBUG] [Thread-135435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:33:29.951 [DEBUG] [Thread-135435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:33:29.975 [INFO] [Thread-135435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:33:29.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:33:30.613 [DEBUG] [Thread-135435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:33:30.614 [DEBUG] [Thread-135435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:33:30.614 [DEBUG] [Thread-135435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:33:30.654 [DEBUG] [Thread-135435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:33:30.655 [DEBUG] [Thread-135435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:33:30.658 [DEBUG] [Thread-135435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:33:30.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:33:30.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:33:30.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:33:30.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:33:30.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:33:30.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:33:30.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:33:30.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:33:30.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:33:30.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.773056 -999.00  +17.70  18.72     85  +15.30 1 2 1 2 1     0    0 1.16 -65.15 zN..W 20.8 18.7 196.4 26.6 19.2 -11.8 18.9 -14.4 18.9 -13.5 19.1 -11.9
2026-02-11T20:33:30.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:33:30.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:33:30.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.773056
2026-02-11T20:33:30.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:33:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:33:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:33:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:33:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:33:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:33:01', tmtdew=2.8, humidity=83.75, cloud=0.0, wind=22.73, temperature=17.71, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:33:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3309999999999995, nan, nan, nan, nan, nan, 1.4147499999999988, 1.183250000000001, nan, nan, nan, nan, nan, nan, 0.5520000000000014, 0.6540000000000008, nan, nan], zp_timestamp='2026-02-11T18:31:00')
2026-02-11T20:33:30.684 [DEBUG] [Thread-135435] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:33:30.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:33:30.781 [DEBUG] [Thread-135438] [transport.py] [_log()] starting thread (client mode): 0xa57d4070
2026-02-11T20:33:30.782 [DEBUG] [Thread-135438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:33:30.801 [DEBUG] [Thread-135438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:33:30.801 [INFO] [Thread-135438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:33:30.808 [DEBUG] [Thread-135438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] client lang: <none>
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] server lang: <none>
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] kex follows: False
2026-02-11T20:33:30.809 [DEBUG] [Thread-135438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:33:30.810 [DEBUG] [Thread-135438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:33:30.810 [DEBUG] [Thread-135438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:33:30.810 [DEBUG] [Thread-135438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:33:30.810 [DEBUG] [Thread-135438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:33:30.810 [DEBUG] [Thread-135438] [transport.py] [_log()] Compression: none
2026-02-11T20:33:30.810 [DEBUG] [Thread-135438] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:33:30.867 [DEBUG] [Thread-135438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:33:30.868 [DEBUG] [Thread-135438] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:33:30.869 [DEBUG] [Thread-135438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:33:30.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:33:30.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:33:30.923 [DEBUG] [Thread-135438] [transport.py] [_log()] userauth is OK
2026-02-11T20:33:30.924 [DEBUG] [Thread-135438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:33:30.924 [DEBUG] [Thread-135438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:33:30.924 [DEBUG] [Thread-135438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:33:30.924 [DEBUG] [Thread-135438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:33:30.944 [INFO] [Thread-135438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:33:30.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:33:30.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:33:31.769 [DEBUG] [Thread-135438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:33:31.769 [DEBUG] [Thread-135438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:33:31.819 [DEBUG] [Thread-135438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:33:31.820 [DEBUG] [Thread-135438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:33:31.832 [DEBUG] [Thread-135438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:33:31.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:33:31.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:33:31.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
2026-02-11T20:33:31.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:33:31.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:33:31.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:33:31.877 [DEBUG] [Thread-135438] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:33:35.325 [DEBUG] [Thread-135440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:38.749 [DEBUG] [Thread-135441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:41.241 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:48.303 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:50.385 [DEBUG] [Thread-135442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:33:52.404 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:34:01.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:34:01.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:34:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 33, 36), 3.15, 81.74, 0.0, 26.29, 18.02, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:34:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:33:36
2026-02-11T20:34:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:34:04.417 [DEBUG] [Thread-135443] [transport.py] [_log()] starting thread (client mode): 0xa2d042e0
2026-02-11T20:34:04.417 [DEBUG] [Thread-135443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:34:04.438 [DEBUG] [Thread-135443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:34:04.438 [INFO] [Thread-135443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:34:04.441 [DEBUG] [Thread-135443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] client lang: <none>
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] server lang: <none>
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] kex follows: False
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] Compression: none
2026-02-11T20:34:04.442 [DEBUG] [Thread-135443] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:34:04.462 [DEBUG] [Thread-135443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:34:04.462 [DEBUG] [Thread-135443] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:34:04.463 [DEBUG] [Thread-135443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:34:04.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:34:04.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:34:04.465 [DEBUG] [Thread-135443] [transport.py] [_log()] userauth is OK
2026-02-11T20:34:04.465 [DEBUG] [Thread-135443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:34:04.465 [DEBUG] [Thread-135443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:34:04.465 [DEBUG] [Thread-135443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:34:04.465 [DEBUG] [Thread-135443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:34:04.489 [INFO] [Thread-135443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:34:04.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:34:05.119 [DEBUG] [Thread-135443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:34:05.119 [DEBUG] [Thread-135443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:34:05.119 [DEBUG] [Thread-135443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:34:05.160 [DEBUG] [Thread-135443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:34:05.161 [DEBUG] [Thread-135443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:34:05.164 [DEBUG] [Thread-135443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:34:05.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:34:05.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:34:05.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:34:05.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:34:05.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:34:05.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:34:05.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:34:05.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:34:05.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:34:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.773403 -999.00  +17.70  13.68     86  +15.30 1 2 1 2 1     0    0 1.15 -65.52 .NESW 12.5 13.7 202.6 20.5 19.1 -15.4 18.9 -17.0 18.8 -16.1 19.1 -15.4
2026-02-11T20:34:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:34:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:34:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.773403
2026-02-11T20:34:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:34:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:34:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:34:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:34:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:34:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:33:36', tmtdew=3.15, humidity=81.74, cloud=0.0, wind=26.29, temperature=18.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:33:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3309999999999995, nan, nan, nan, nan, nan, 1.4147499999999988, 1.183250000000001, nan, nan, nan, nan, nan, nan, 0.5520000000000014, 0.6540000000000008, nan, nan], zp_timestamp='2026-02-11T18:31:00')
2026-02-11T20:34:05.191 [DEBUG] [Thread-135443] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:34:05.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:34:05.286 [DEBUG] [Thread-135446] [transport.py] [_log()] starting thread (client mode): 0xa57b3e80
2026-02-11T20:34:05.286 [DEBUG] [Thread-135446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:34:05.300 [DEBUG] [Thread-135446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:34:05.300 [INFO] [Thread-135446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:34:05.307 [DEBUG] [Thread-135446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] client lang: <none>
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] server lang: <none>
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] kex follows: False
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] Compression: none
2026-02-11T20:34:05.308 [DEBUG] [Thread-135446] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:34:05.367 [DEBUG] [Thread-135446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:34:05.368 [DEBUG] [Thread-135446] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:34:05.368 [DEBUG] [Thread-135446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:34:05.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:34:05.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:34:05.424 [DEBUG] [Thread-135446] [transport.py] [_log()] userauth is OK
2026-02-11T20:34:05.424 [DEBUG] [Thread-135446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:34:05.424 [DEBUG] [Thread-135446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:34:05.424 [DEBUG] [Thread-135446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:34:05.424 [DEBUG] [Thread-135446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:34:05.432 [DEBUG] [Thread-135448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:05.443 [INFO] [Thread-135446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:34:05.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:34:05.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:34:06.270 [DEBUG] [Thread-135446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:34:06.271 [DEBUG] [Thread-135446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:34:06.318 [DEBUG] [Thread-135446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:34:06.319 [DEBUG] [Thread-135446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:34:06.327 [DEBUG] [Thread-135446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:34:06.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:34:06.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:34:06.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:34:06.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:34:06.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:34:06.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:34:06.362 [DEBUG] [Thread-135446] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:34:08.819 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:18.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:18.542 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:20.492 [DEBUG] [Thread-135449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:35.529 [DEBUG] [Thread-135450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:34:36.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:34:36.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:34:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 34, 11), 2.68, 84.09, 0.0, 22.83, 17.55, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:34:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:34:11
2026-02-11T20:34:38.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:34:38.828 [DEBUG] [Thread-135451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:34:38.923 [DEBUG] [Thread-135452] [transport.py] [_log()] starting thread (client mode): 0xa5773430
2026-02-11T20:34:38.923 [DEBUG] [Thread-135452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:34:38.941 [DEBUG] [Thread-135452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:34:38.942 [INFO] [Thread-135452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] client lang: <none>
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] server lang: <none>
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] kex follows: False
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] Compression: none
2026-02-11T20:34:38.944 [DEBUG] [Thread-135452] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:34:38.952 [DEBUG] [Thread-135452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:34:38.953 [DEBUG] [Thread-135452] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:34:38.953 [DEBUG] [Thread-135452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:34:38.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:34:38.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:34:38.954 [DEBUG] [Thread-135452] [transport.py] [_log()] userauth is OK
2026-02-11T20:34:38.954 [DEBUG] [Thread-135452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:34:38.954 [DEBUG] [Thread-135452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:34:38.954 [DEBUG] [Thread-135452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:34:38.954 [DEBUG] [Thread-135452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:34:38.968 [INFO] [Thread-135452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:34:38.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:34:39.586 [DEBUG] [Thread-135452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:34:39.586 [DEBUG] [Thread-135452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:34:39.586 [DEBUG] [Thread-135452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:34:39.627 [DEBUG] [Thread-135452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:34:39.627 [DEBUG] [Thread-135452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:34:39.631 [DEBUG] [Thread-135452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:34:39.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:34:39.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:34:39.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:34:39.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:34:39.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:34:39.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:34:39.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:34:39.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:34:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:34:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.773750 -999.00  +17.60  24.01     86  +15.30 1 2 1 2 1     0    0 1.10 -66.19 .NESW 19.4 24.0 202.2 27.4 19.0 -17.9 18.8 -17.8 18.7 -17.6 19.0 -17.8
2026-02-11T20:34:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:34:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:34:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.773750
2026-02-11T20:34:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:34:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:34:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:34:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:34:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:34:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:34:11', tmtdew=2.68, humidity=84.09, cloud=0.0, wind=22.83, temperature=17.55, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:34:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3309999999999995, nan, nan, nan, nan, nan, 1.4147499999999988, 1.183250000000001, nan, nan, nan, nan, nan, nan, 0.5520000000000014, 0.6540000000000008, nan, nan], zp_timestamp='2026-02-11T18:31:00')
2026-02-11T20:34:39.660 [DEBUG] [Thread-135452] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:34:39.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:34:39.757 [DEBUG] [Thread-135455] [transport.py] [_log()] starting thread (client mode): 0xa2d5e500
2026-02-11T20:34:39.757 [DEBUG] [Thread-135455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:34:39.776 [DEBUG] [Thread-135455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:34:39.776 [INFO] [Thread-135455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:34:39.784 [DEBUG] [Thread-135455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:34:39.784 [DEBUG] [Thread-135455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:34:39.784 [DEBUG] [Thread-135455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] client lang: <none>
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] server lang: <none>
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] kex follows: False
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:34:39.785 [DEBUG] [Thread-135455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:34:39.786 [DEBUG] [Thread-135455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:34:39.786 [DEBUG] [Thread-135455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:34:39.786 [DEBUG] [Thread-135455] [transport.py] [_log()] Compression: none
2026-02-11T20:34:39.786 [DEBUG] [Thread-135455] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:34:39.844 [DEBUG] [Thread-135455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:34:39.844 [DEBUG] [Thread-135455] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:34:39.845 [DEBUG] [Thread-135455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:34:39.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:34:39.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:34:39.899 [DEBUG] [Thread-135455] [transport.py] [_log()] userauth is OK
2026-02-11T20:34:39.900 [DEBUG] [Thread-135455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:34:39.900 [DEBUG] [Thread-135455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:34:39.900 [DEBUG] [Thread-135455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:34:39.900 [DEBUG] [Thread-135455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:34:39.918 [INFO] [Thread-135455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:34:39.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:34:39.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:34:40.759 [DEBUG] [Thread-135455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:34:40.759 [DEBUG] [Thread-135455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:34:40.808 [DEBUG] [Thread-135455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:34:40.808 [DEBUG] [Thread-135455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:34:40.818 [DEBUG] [Thread-135455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:34:40.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:34:40.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')
2026-02-11T20:34:40.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:34:40.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:34:40.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:34:40.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:34:40.855 [DEBUG] [Thread-135455] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:34:50.567 [DEBUG] [Thread-135457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:35:05.616 [DEBUG] [Thread-135458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:35:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:35:10.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:35:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:35:12.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 34, 46), 2.67, 84.17, 0.0, 23.13, 17.56, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:35:12.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:34:46
2026-02-11T20:35:13.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:35:13.260 [DEBUG] [Thread-135459] [transport.py] [_log()] starting thread (client mode): 0xa5773c10
2026-02-11T20:35:13.260 [DEBUG] [Thread-135459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:35:13.279 [DEBUG] [Thread-135459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:35:13.279 [INFO] [Thread-135459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:35:13.283 [DEBUG] [Thread-135459] [transport.py] [_log()] client lang: <none>
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] server lang: <none>
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] kex follows: False
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] Compression: none
2026-02-11T20:35:13.284 [DEBUG] [Thread-135459] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:35:13.300 [DEBUG] [Thread-135459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:35:13.300 [DEBUG] [Thread-135459] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:35:13.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:35:13.301 [DEBUG] [Thread-135459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:35:13.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:35:13.303 [DEBUG] [Thread-135459] [transport.py] [_log()] userauth is OK
2026-02-11T20:35:13.303 [DEBUG] [Thread-135459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:35:13.303 [DEBUG] [Thread-135459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:35:13.303 [DEBUG] [Thread-135459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:35:13.303 [DEBUG] [Thread-135459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:35:13.327 [INFO] [Thread-135459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:35:13.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:35:14.116 [DEBUG] [Thread-135459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:35:14.116 [DEBUG] [Thread-135459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:35:14.117 [DEBUG] [Thread-135459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:35:14.157 [DEBUG] [Thread-135459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:35:14.157 [DEBUG] [Thread-135459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:35:14.160 [DEBUG] [Thread-135459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:35:14.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:35:14.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:35:14.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:35:14.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:35:14.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:35:14.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:35:14.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:35:14.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:35:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:35:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.774097 -999.00  +17.60  18.63     86  +15.30 1 2 1 2 1     0    0 1.01 -67.26 Z.ESW 16.9 18.6 197.4 21.7 19.0 -18.1 18.8 -16.5 18.7 -17.2 19.0 -18.1
2026-02-11T20:35:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:35:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:35:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.774097
2026-02-11T20:35:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:35:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:35:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:35:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:35:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:35:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:34:46', tmtdew=2.67, humidity=84.17, cloud=0.0, wind=23.13, temperature=17.56, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:34:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.3309999999999995, nan, nan, nan, nan, nan, 1.4147499999999988, 1.183250000000001, nan, nan, nan, nan, nan, nan, 0.5520000000000014, 0.6540000000000008, nan, nan], zp_timestamp='2026-02-11T18:31:00')
2026-02-11T20:35:14.198 [DEBUG] [Thread-135459] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:35:14.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:35:14.296 [DEBUG] [Thread-135462] [transport.py] [_log()] starting thread (client mode): 0xa5773a90
2026-02-11T20:35:14.296 [DEBUG] [Thread-135462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:35:14.311 [DEBUG] [Thread-135462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:35:14.311 [INFO] [Thread-135462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:35:14.318 [DEBUG] [Thread-135462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:35:14.318 [DEBUG] [Thread-135462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] client lang: <none>
2026-02-11T20:35:14.319 [DEBUG] [Thread-135462] [transport.py] [_log()] server lang: <none>
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] kex follows: False
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] Compression: none
2026-02-11T20:35:14.320 [DEBUG] [Thread-135462] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:35:14.374 [DEBUG] [Thread-135462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:35:14.374 [DEBUG] [Thread-135462] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:35:14.375 [DEBUG] [Thread-135462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:35:14.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:35:14.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:35:14.431 [DEBUG] [Thread-135462] [transport.py] [_log()] userauth is OK
2026-02-11T20:35:14.431 [DEBUG] [Thread-135462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:35:14.431 [DEBUG] [Thread-135462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:35:14.431 [DEBUG] [Thread-135462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:35:14.431 [DEBUG] [Thread-135462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:35:14.449 [INFO] [Thread-135462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:35:14.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:35:14.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:35:15.292 [DEBUG] [Thread-135462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:35:15.292 [DEBUG] [Thread-135462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:35:15.340 [DEBUG] [Thread-135462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:35:15.340 [DEBUG] [Thread-135462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:35:15.353 [DEBUG] [Thread-135462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:35:15.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:35:15.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:35:15.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:35:15.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:35:15.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:35:15.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:35:15.386 [DEBUG] [Thread-135462] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:35:18.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:35:18.746 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:35:20.648 [DEBUG] [Thread-135464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:35:35.697 [DEBUG] [Thread-135465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:35:38.897 [DEBUG] [Thread-135466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:35:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:35:45.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:35:45.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:35:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 35, 23), 2.66, 84.24, 0.0, 22.27, 17.53, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:35:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:35:23
2026-02-11T20:35:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:35:47.596 [DEBUG] [Thread-135467] [transport.py] [_log()] starting thread (client mode): 0xa2d06320
2026-02-11T20:35:47.596 [DEBUG] [Thread-135467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:35:47.616 [DEBUG] [Thread-135467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:35:47.616 [INFO] [Thread-135467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:35:47.619 [DEBUG] [Thread-135467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:35:47.619 [DEBUG] [Thread-135467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:35:47.619 [DEBUG] [Thread-135467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:35:47.619 [DEBUG] [Thread-135467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:47.619 [DEBUG] [Thread-135467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] client lang: <none>
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] server lang: <none>
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] kex follows: False
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] Compression: none
2026-02-11T20:35:47.620 [DEBUG] [Thread-135467] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:35:47.639 [DEBUG] [Thread-135467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:35:47.639 [DEBUG] [Thread-135467] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:35:47.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:35:47.640 [DEBUG] [Thread-135467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:35:47.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:35:47.642 [DEBUG] [Thread-135467] [transport.py] [_log()] userauth is OK
2026-02-11T20:35:47.643 [DEBUG] [Thread-135467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:35:47.643 [DEBUG] [Thread-135467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:35:47.643 [DEBUG] [Thread-135467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:35:47.643 [DEBUG] [Thread-135467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:35:47.666 [INFO] [Thread-135467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:35:47.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:35:48.316 [DEBUG] [Thread-135467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:35:48.317 [DEBUG] [Thread-135467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:35:48.317 [DEBUG] [Thread-135467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:35:48.358 [DEBUG] [Thread-135467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:35:48.358 [DEBUG] [Thread-135467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:35:48.361 [DEBUG] [Thread-135467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:35:48.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:35:48.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:35:48.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:35:48.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:35:48.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:35:48.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:35:48.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:35:48.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:35:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:35:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.774444 -999.00  +17.50  17.72     86  +15.20 1 2 1 2 1     0    0 1.06 -63.79 Z.ESW 17.4 17.7 199.2 22.9 18.9 -16.0 18.8 -13.9 18.6 -15.1 18.9 -16.9
2026-02-11T20:35:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:35:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:35:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.774444
2026-02-11T20:35:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:35:48.385 [DEBUG] [Thread-135467] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:35:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:35:48.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:35:48.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:35:48.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:35:48.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:35:23', tmtdew=2.66, humidity=84.24, cloud=0.0, wind=22.27, temperature=17.53, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:35:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:34:00')
2026-02-11T20:35:48.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:35:48.481 [DEBUG] [Thread-135470] [transport.py] [_log()] starting thread (client mode): 0xa2d5e3b0
2026-02-11T20:35:48.481 [DEBUG] [Thread-135470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:35:48.496 [DEBUG] [Thread-135470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:35:48.497 [INFO] [Thread-135470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:35:48.504 [DEBUG] [Thread-135470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:35:48.504 [DEBUG] [Thread-135470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] client lang: <none>
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] server lang: <none>
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] kex follows: False
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] Compression: none
2026-02-11T20:35:48.505 [DEBUG] [Thread-135470] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:35:48.564 [DEBUG] [Thread-135470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:35:48.564 [DEBUG] [Thread-135470] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:35:48.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:35:48.565 [DEBUG] [Thread-135470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:35:48.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:35:48.620 [DEBUG] [Thread-135470] [transport.py] [_log()] userauth is OK
2026-02-11T20:35:48.620 [DEBUG] [Thread-135470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:35:48.620 [DEBUG] [Thread-135470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:35:48.620 [DEBUG] [Thread-135470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:35:48.620 [DEBUG] [Thread-135470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:35:48.639 [INFO] [Thread-135470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:35:48.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:35:48.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:35:49.478 [DEBUG] [Thread-135470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:35:49.478 [DEBUG] [Thread-135470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:35:49.526 [DEBUG] [Thread-135470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:35:49.526 [DEBUG] [Thread-135470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:35:49.536 [DEBUG] [Thread-135470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:35:49.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:35:49.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:35:49.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:35:49.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:35:49.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:35:49.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:35:49.572 [DEBUG] [Thread-135470] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:35:50.733 [DEBUG] [Thread-135472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:05.794 [DEBUG] [Thread-135473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:18.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:18.950 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:36:19.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:36:19.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:36:20.831 [DEBUG] [Thread-135474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 35, 58), 2.63, 84.87, 0.0, 18.86, 17.46, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:36:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:35:58
2026-02-11T20:36:21.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:36:21.924 [DEBUG] [Thread-135475] [transport.py] [_log()] starting thread (client mode): 0xa57d5870
2026-02-11T20:36:21.924 [DEBUG] [Thread-135475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:36:21.944 [DEBUG] [Thread-135475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:36:21.944 [INFO] [Thread-135475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] client lang: <none>
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] server lang: <none>
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] kex follows: False
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] Compression: none
2026-02-11T20:36:21.947 [DEBUG] [Thread-135475] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:36:21.963 [DEBUG] [Thread-135475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:36:21.964 [DEBUG] [Thread-135475] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:36:21.964 [DEBUG] [Thread-135475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:36:21.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:36:21.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:36:21.966 [DEBUG] [Thread-135475] [transport.py] [_log()] userauth is OK
2026-02-11T20:36:21.966 [DEBUG] [Thread-135475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:36:21.967 [DEBUG] [Thread-135475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:36:21.967 [DEBUG] [Thread-135475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:36:21.967 [DEBUG] [Thread-135475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:36:21.985 [INFO] [Thread-135475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:36:21.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:36:22.584 [DEBUG] [Thread-135475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:36:22.585 [DEBUG] [Thread-135475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:36:22.585 [DEBUG] [Thread-135475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:36:22.625 [DEBUG] [Thread-135475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:36:22.626 [DEBUG] [Thread-135475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:36:22.629 [DEBUG] [Thread-135475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:36:22.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:36:22.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:36:22.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:36:22.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:36:22.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:36:22.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:36:22.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:36:22.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:36:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:36:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.775139 -999.00  +17.40  14.58     87  +15.20 1 2 1 2 1     0    0 1.04 -61.57 Z.ESW 18.9 14.6 214.0 23.1 18.9 -11.5 18.7 -10.7 18.6 -11.6 18.9 -13.0
2026-02-11T20:36:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:36:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:36:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.775139
2026-02-11T20:36:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:36:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:36:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:36:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:36:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T20:36:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:35:58', tmtdew=2.63, humidity=84.87, cloud=0.0, wind=18.86, temperature=17.46, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:36:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:34:00')
2026-02-11T20:36:22.656 [DEBUG] [Thread-135475] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:36:22.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:36:22.789 [DEBUG] [Thread-135478] [transport.py] [_log()] starting thread (client mode): 0xa2d5dc90
2026-02-11T20:36:22.790 [DEBUG] [Thread-135478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:36:22.804 [DEBUG] [Thread-135478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:36:22.804 [INFO] [Thread-135478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:36:22.811 [DEBUG] [Thread-135478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:36:22.811 [DEBUG] [Thread-135478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] client lang: <none>
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] server lang: <none>
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] kex follows: False
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:36:22.812 [DEBUG] [Thread-135478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:36:22.813 [DEBUG] [Thread-135478] [transport.py] [_log()] Compression: none
2026-02-11T20:36:22.813 [DEBUG] [Thread-135478] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:36:22.872 [DEBUG] [Thread-135478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:36:22.873 [DEBUG] [Thread-135478] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:36:22.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:36:22.873 [DEBUG] [Thread-135478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:36:22.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:36:22.931 [DEBUG] [Thread-135478] [transport.py] [_log()] userauth is OK
2026-02-11T20:36:22.931 [DEBUG] [Thread-135478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:36:22.931 [DEBUG] [Thread-135478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:36:22.931 [DEBUG] [Thread-135478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:36:22.932 [DEBUG] [Thread-135478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:36:22.956 [INFO] [Thread-135478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:36:22.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:36:22.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:36:23.769 [DEBUG] [Thread-135478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:36:23.769 [DEBUG] [Thread-135478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:36:23.818 [DEBUG] [Thread-135478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:36:23.818 [DEBUG] [Thread-135478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:36:23.827 [DEBUG] [Thread-135478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:36:23.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:36:23.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:36:23.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
2026-02-11T20:36:23.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:36:23.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:36:23.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:36:23.863 [DEBUG] [Thread-135478] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:36:35.869 [DEBUG] [Thread-135480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:38.976 [DEBUG] [Thread-135481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:50.922 [DEBUG] [Thread-135482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:36:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:36:53.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:36:53.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
2026-02-11T20:36:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 36, 33), 2.92, 82.97, 0.0, 20.04, 17.86, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:36:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:36:33
2026-02-11T20:36:56.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:36:56.263 [DEBUG] [Thread-135483] [transport.py] [_log()] starting thread (client mode): 0xa2d05480
2026-02-11T20:36:56.263 [DEBUG] [Thread-135483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:36:56.284 [DEBUG] [Thread-135483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:36:56.284 [INFO] [Thread-135483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:56.287 [DEBUG] [Thread-135483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] client lang: <none>
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] server lang: <none>
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] kex follows: False
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] Compression: none
2026-02-11T20:36:56.288 [DEBUG] [Thread-135483] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:36:56.303 [DEBUG] [Thread-135483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:36:56.303 [DEBUG] [Thread-135483] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:36:56.303 [DEBUG] [Thread-135483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:36:56.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:36:56.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:36:56.304 [DEBUG] [Thread-135483] [transport.py] [_log()] userauth is OK
2026-02-11T20:36:56.304 [DEBUG] [Thread-135483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:36:56.304 [DEBUG] [Thread-135483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:36:56.305 [DEBUG] [Thread-135483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:36:56.305 [DEBUG] [Thread-135483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:36:56.315 [INFO] [Thread-135483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:36:56.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:36:56.945 [DEBUG] [Thread-135483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:36:56.945 [DEBUG] [Thread-135483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:36:56.955 [DEBUG] [Thread-135483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:36:56.986 [DEBUG] [Thread-135483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:36:56.987 [DEBUG] [Thread-135483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:36:56.990 [DEBUG] [Thread-135483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:36:57.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:36:57.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:36:57.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:36:57.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:36:57.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:36:57.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:36:57.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:36:57.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:36:57.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:36:57.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.775486 -999.00  +17.40  11.80     87  +15.20 1 3 1 2 1     0    0 1.00 -62.44 ZN.SW 17.5 11.8 191.1 27.5 18.9 -9.8 18.8 -8.3 18.5 -8.9 18.9 -11.0
2026-02-11T20:36:57.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:36:57.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:36:57.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.775486
2026-02-11T20:36:57.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:36:57.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:36:57.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:36:57.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:36:57.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:36:57.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:36:33', tmtdew=2.92, humidity=82.97, cloud=0.0, wind=20.04, temperature=17.86, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:36:41.990', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:34:00')
2026-02-11T20:36:57.017 [DEBUG] [Thread-135483] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:36:57.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:36:57.114 [DEBUG] [Thread-135486] [transport.py] [_log()] starting thread (client mode): 0xa2db50c0
2026-02-11T20:36:57.114 [DEBUG] [Thread-135486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:36:57.130 [DEBUG] [Thread-135486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:36:57.131 [INFO] [Thread-135486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:36:57.138 [DEBUG] [Thread-135486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:36:57.138 [DEBUG] [Thread-135486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:36:57.138 [DEBUG] [Thread-135486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:36:57.138 [DEBUG] [Thread-135486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:57.138 [DEBUG] [Thread-135486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:36:57.138 [DEBUG] [Thread-135486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:57.138 [DEBUG] [Thread-135486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] client lang: <none>
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] server lang: <none>
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] kex follows: False
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] Compression: none
2026-02-11T20:36:57.139 [DEBUG] [Thread-135486] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:36:57.195 [DEBUG] [Thread-135486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:36:57.195 [DEBUG] [Thread-135486] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:36:57.195 [DEBUG] [Thread-135486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:36:57.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:36:57.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:36:57.251 [DEBUG] [Thread-135486] [transport.py] [_log()] userauth is OK
2026-02-11T20:36:57.252 [DEBUG] [Thread-135486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:36:57.252 [DEBUG] [Thread-135486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:36:57.252 [DEBUG] [Thread-135486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:36:57.252 [DEBUG] [Thread-135486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:36:57.271 [INFO] [Thread-135486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:36:57.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:36:57.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:36:58.124 [DEBUG] [Thread-135486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:36:58.124 [DEBUG] [Thread-135486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:36:58.172 [DEBUG] [Thread-135486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:36:58.173 [DEBUG] [Thread-135486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:36:58.182 [DEBUG] [Thread-135486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:36:58.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:36:58.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:36:58.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:36:58.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:36:58.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:36:58.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:36:58.217 [DEBUG] [Thread-135486] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:37:05.959 [DEBUG] [Thread-135488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:37:19.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:37:19.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:37:21.011 [DEBUG] [Thread-135489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:37:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:37:28.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:37:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:37:30.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 37, 8), 2.59, 85.1, 0.0, 15.03, 17.5, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:37:30.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:37:08
2026-02-11T20:37:30.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:37:30.628 [DEBUG] [Thread-135490] [transport.py] [_log()] starting thread (client mode): 0xa57d5870
2026-02-11T20:37:30.628 [DEBUG] [Thread-135490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:37:30.648 [DEBUG] [Thread-135490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:37:30.648 [INFO] [Thread-135490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:37:30.651 [DEBUG] [Thread-135490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] client lang: <none>
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] server lang: <none>
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] kex follows: False
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] Compression: none
2026-02-11T20:37:30.652 [DEBUG] [Thread-135490] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:37:30.670 [DEBUG] [Thread-135490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:37:30.670 [DEBUG] [Thread-135490] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:37:30.671 [DEBUG] [Thread-135490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:37:30.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:37:30.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:37:30.673 [DEBUG] [Thread-135490] [transport.py] [_log()] userauth is OK
2026-02-11T20:37:30.673 [DEBUG] [Thread-135490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:37:30.673 [DEBUG] [Thread-135490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:37:30.673 [DEBUG] [Thread-135490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:37:30.673 [DEBUG] [Thread-135490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:37:30.698 [INFO] [Thread-135490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:37:30.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:37:31.322 [DEBUG] [Thread-135490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:37:31.323 [DEBUG] [Thread-135490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:37:31.323 [DEBUG] [Thread-135490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:37:31.363 [DEBUG] [Thread-135490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:37:31.363 [DEBUG] [Thread-135490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:37:31.366 [DEBUG] [Thread-135490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:37:31.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:37:31.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:37:31.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:37:31.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:37:31.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:37:31.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:37:31.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:37:31.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:37:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:37:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.775833 -999.00  +17.40  13.68     87  +15.20 1 3 1 2 1     0    0 0.99 -63.41 ZN.SW 14.5 13.7 197.4 21.1 18.9 -8.4 18.8 -9.0 18.6 -8.6 18.9 -9.2
2026-02-11T20:37:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:37:31.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:37:31.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.775833
2026-02-11T20:37:31.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:37:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:37:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:37:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:37:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:37:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:37:08', tmtdew=2.59, humidity=85.1, cloud=0.0, wind=15.03, temperature=17.5, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:37:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:34:00')
2026-02-11T20:37:31.392 [DEBUG] [Thread-135490] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:37:31.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:37:31.487 [DEBUG] [Thread-135493] [transport.py] [_log()] starting thread (client mode): 0xa2d6a770
2026-02-11T20:37:31.487 [DEBUG] [Thread-135493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:37:31.502 [DEBUG] [Thread-135493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:37:31.502 [INFO] [Thread-135493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:37:31.510 [DEBUG] [Thread-135493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:37:31.510 [DEBUG] [Thread-135493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:37:31.510 [DEBUG] [Thread-135493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:37:31.510 [DEBUG] [Thread-135493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] client lang: <none>
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] server lang: <none>
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] kex follows: False
2026-02-11T20:37:31.511 [DEBUG] [Thread-135493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:37:31.512 [DEBUG] [Thread-135493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:37:31.512 [DEBUG] [Thread-135493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:37:31.512 [DEBUG] [Thread-135493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:37:31.512 [DEBUG] [Thread-135493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:37:31.512 [DEBUG] [Thread-135493] [transport.py] [_log()] Compression: none
2026-02-11T20:37:31.512 [DEBUG] [Thread-135493] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:37:31.568 [DEBUG] [Thread-135493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:37:31.568 [DEBUG] [Thread-135493] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:37:31.569 [DEBUG] [Thread-135493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:37:31.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:37:31.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:37:31.623 [DEBUG] [Thread-135493] [transport.py] [_log()] userauth is OK
2026-02-11T20:37:31.624 [DEBUG] [Thread-135493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:37:31.624 [DEBUG] [Thread-135493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:37:31.624 [DEBUG] [Thread-135493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:37:31.624 [DEBUG] [Thread-135493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:37:31.642 [INFO] [Thread-135493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:37:31.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:37:31.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:37:32.487 [DEBUG] [Thread-135493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:37:32.487 [DEBUG] [Thread-135493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:37:32.536 [DEBUG] [Thread-135493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:37:32.536 [DEBUG] [Thread-135493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:37:32.546 [DEBUG] [Thread-135493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:37:32.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:37:32.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:37:32.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:37:32.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:37:32.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:37:32.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:37:32.582 [DEBUG] [Thread-135493] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:37:36.043 [DEBUG] [Thread-135495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:37:39.033 [DEBUG] [Thread-135496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:37:51.104 [DEBUG] [Thread-135497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:38:02.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:38:02.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:38:02.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:38:04.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 37, 44), 2.48, 85.13, 0.0, 18.72, 17.38, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:38:04.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:37:44
2026-02-11T20:38:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:38:05.149 [DEBUG] [Thread-135498] [transport.py] [_log()] starting thread (client mode): 0x9eb059f0
2026-02-11T20:38:05.149 [DEBUG] [Thread-135498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:38:05.168 [DEBUG] [Thread-135498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:38:05.168 [INFO] [Thread-135498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] client lang: <none>
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] server lang: <none>
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] kex follows: False
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:38:05.171 [DEBUG] [Thread-135498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:38:05.172 [DEBUG] [Thread-135498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:38:05.172 [DEBUG] [Thread-135498] [transport.py] [_log()] Compression: none
2026-02-11T20:38:05.172 [DEBUG] [Thread-135498] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:38:05.188 [DEBUG] [Thread-135498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:38:05.189 [DEBUG] [Thread-135498] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:38:05.189 [DEBUG] [Thread-135498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:38:05.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:38:05.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:38:05.191 [DEBUG] [Thread-135498] [transport.py] [_log()] userauth is OK
2026-02-11T20:38:05.191 [DEBUG] [Thread-135498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:38:05.191 [DEBUG] [Thread-135498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:38:05.191 [DEBUG] [Thread-135498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:38:05.191 [DEBUG] [Thread-135498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:38:05.216 [INFO] [Thread-135498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:38:05.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:38:05.862 [DEBUG] [Thread-135498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:38:05.863 [DEBUG] [Thread-135498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:38:05.863 [DEBUG] [Thread-135498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:38:05.903 [DEBUG] [Thread-135498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:38:05.904 [DEBUG] [Thread-135498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:38:05.907 [DEBUG] [Thread-135498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:38:05.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:38:05.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:38:05.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:38:05.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:38:05.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:38:05.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:38:05.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:38:05.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:38:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:38:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.776180 -999.00  +17.40  11.61     87  +15.20 1 3 1 2 1     0    0 1.10 -60.32 ZN.SW 16.4 11.6 199.8 20.9 18.9 -9.1 18.7 -9.4 18.5 -9.3 18.9 -10.0
2026-02-11T20:38:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:38:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:38:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.776180
2026-02-11T20:38:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:38:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:38:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:38:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:38:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:38:05.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:37:44', tmtdew=2.48, humidity=85.13, cloud=0.0, wind=18.72, temperature=17.38, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:37:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:34:00')
2026-02-11T20:38:05.933 [DEBUG] [Thread-135498] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:38:06.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:38:06.028 [DEBUG] [Thread-135501] [transport.py] [_log()] starting thread (client mode): 0xa57e02b0
2026-02-11T20:38:06.028 [DEBUG] [Thread-135501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:38:06.043 [DEBUG] [Thread-135501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:38:06.043 [INFO] [Thread-135501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:38:06.050 [DEBUG] [Thread-135501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:38:06.050 [DEBUG] [Thread-135501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:38:06.050 [DEBUG] [Thread-135501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] client lang: <none>
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] server lang: <none>
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] kex follows: False
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] Compression: none
2026-02-11T20:38:06.051 [DEBUG] [Thread-135501] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:38:06.111 [DEBUG] [Thread-135501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:38:06.112 [DEBUG] [Thread-135501] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:38:06.112 [DEBUG] [Thread-135501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:38:06.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:38:06.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:38:06.140 [DEBUG] [Thread-135503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:38:06.167 [DEBUG] [Thread-135501] [transport.py] [_log()] userauth is OK
2026-02-11T20:38:06.168 [DEBUG] [Thread-135501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:38:06.168 [DEBUG] [Thread-135501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:38:06.168 [DEBUG] [Thread-135501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:38:06.168 [DEBUG] [Thread-135501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:38:06.186 [INFO] [Thread-135501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:38:06.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:38:06.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:38:07.104 [DEBUG] [Thread-135501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:38:07.105 [DEBUG] [Thread-135501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:38:07.152 [DEBUG] [Thread-135501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:38:07.152 [DEBUG] [Thread-135501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:38:07.162 [DEBUG] [Thread-135501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:38:07.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:38:07.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')
2026-02-11T20:38:07.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:38:07.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:38:07.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:38:07.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:38:07.198 [DEBUG] [Thread-135501] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:38:19.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:38:19.358 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:38:21.192 [DEBUG] [Thread-135504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:38:36.228 [DEBUG] [Thread-135505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:38:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:38:37.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:38:37.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:38:39.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 38, 20), 2.49, 85.1, 0.0, 21.19, 17.33, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:38:39.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:38:20
2026-02-11T20:38:39.089 [DEBUG] [Thread-135506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:38:39.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:38:39.591 [DEBUG] [Thread-135507] [transport.py] [_log()] starting thread (client mode): 0xa2d05b70
2026-02-11T20:38:39.591 [DEBUG] [Thread-135507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:38:39.611 [DEBUG] [Thread-135507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:38:39.611 [INFO] [Thread-135507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:38:39.614 [DEBUG] [Thread-135507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] client lang: <none>
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] server lang: <none>
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] kex follows: False
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] Compression: none
2026-02-11T20:38:39.615 [DEBUG] [Thread-135507] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:38:39.624 [DEBUG] [Thread-135507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:38:39.624 [DEBUG] [Thread-135507] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:38:39.625 [DEBUG] [Thread-135507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:38:39.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:38:39.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:38:39.669 [DEBUG] [Thread-135507] [transport.py] [_log()] userauth is OK
2026-02-11T20:38:39.669 [DEBUG] [Thread-135507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:38:39.669 [DEBUG] [Thread-135507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:38:39.669 [DEBUG] [Thread-135507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:38:39.669 [DEBUG] [Thread-135507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:38:39.703 [INFO] [Thread-135507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:38:39.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:38:40.351 [DEBUG] [Thread-135507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:38:40.351 [DEBUG] [Thread-135507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:38:40.352 [DEBUG] [Thread-135507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:38:40.392 [DEBUG] [Thread-135507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:38:40.392 [DEBUG] [Thread-135507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:38:40.396 [DEBUG] [Thread-135507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:38:40.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:38:40.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:38:40.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:38:40.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:38:40.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:38:40.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:38:40.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:38:40.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:38:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:38:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.776528 -999.00  +17.40  15.11     87  +15.20 1 3 1 2 1     0    0 0.93 -65.77 .NeSW 14.3 15.1 196.2 21.5 18.9 -8.6 18.7 -8.0 18.5 -8.3 18.9 -9.4
2026-02-11T20:38:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:38:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:38:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.776528
2026-02-11T20:38:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:38:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:38:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:38:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:38:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:38:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:38:20', tmtdew=2.49, humidity=85.1, cloud=0.0, wind=21.19, temperature=17.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:38:12.019', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:37:00')
2026-02-11T20:38:40.424 [DEBUG] [Thread-135507] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:38:40.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:38:40.522 [DEBUG] [Thread-135510] [transport.py] [_log()] starting thread (client mode): 0xa2d5e080
2026-02-11T20:38:40.522 [DEBUG] [Thread-135510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:38:40.536 [DEBUG] [Thread-135510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:38:40.536 [INFO] [Thread-135510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] client lang: <none>
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] server lang: <none>
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] kex follows: False
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:38:40.544 [DEBUG] [Thread-135510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:38:40.545 [DEBUG] [Thread-135510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:38:40.545 [DEBUG] [Thread-135510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:38:40.545 [DEBUG] [Thread-135510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:38:40.545 [DEBUG] [Thread-135510] [transport.py] [_log()] Compression: none
2026-02-11T20:38:40.545 [DEBUG] [Thread-135510] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:38:40.607 [DEBUG] [Thread-135510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:38:40.608 [DEBUG] [Thread-135510] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:38:40.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:38:40.609 [DEBUG] [Thread-135510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:38:40.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:38:40.663 [DEBUG] [Thread-135510] [transport.py] [_log()] userauth is OK
2026-02-11T20:38:40.664 [DEBUG] [Thread-135510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:38:40.664 [DEBUG] [Thread-135510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:38:40.664 [DEBUG] [Thread-135510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:38:40.664 [DEBUG] [Thread-135510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:38:40.685 [INFO] [Thread-135510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:38:40.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:38:40.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:38:41.500 [DEBUG] [Thread-135510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:38:41.501 [DEBUG] [Thread-135510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:38:41.554 [DEBUG] [Thread-135510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:38:41.554 [DEBUG] [Thread-135510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:38:41.565 [DEBUG] [Thread-135510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:38:41.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:38:41.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:38:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:38:41.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:38:41.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:38:41.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:38:41.601 [DEBUG] [Thread-135510] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:38:51.264 [DEBUG] [Thread-135512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:39:06.318 [DEBUG] [Thread-135513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:39:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:39:11.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:39:11.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:39:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 38, 55), 2.44, 85.85, 0.0, 18.97, 17.35, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:39:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:38:55
2026-02-11T20:39:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:39:14.475 [DEBUG] [Thread-135514] [transport.py] [_log()] starting thread (client mode): 0x9eb04a60
2026-02-11T20:39:14.475 [DEBUG] [Thread-135514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:39:14.494 [DEBUG] [Thread-135514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:39:14.494 [INFO] [Thread-135514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:39:14.497 [DEBUG] [Thread-135514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] client lang: <none>
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] server lang: <none>
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] kex follows: False
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] Compression: none
2026-02-11T20:39:14.498 [DEBUG] [Thread-135514] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:39:14.515 [DEBUG] [Thread-135514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:39:14.515 [DEBUG] [Thread-135514] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:39:14.516 [DEBUG] [Thread-135514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:39:14.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:39:14.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:39:14.518 [DEBUG] [Thread-135514] [transport.py] [_log()] userauth is OK
2026-02-11T20:39:14.518 [DEBUG] [Thread-135514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:39:14.518 [DEBUG] [Thread-135514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:39:14.518 [DEBUG] [Thread-135514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:39:14.518 [DEBUG] [Thread-135514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:39:14.543 [INFO] [Thread-135514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:39:14.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:39:15.143 [DEBUG] [Thread-135514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:39:15.144 [DEBUG] [Thread-135514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:39:15.144 [DEBUG] [Thread-135514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:39:15.185 [DEBUG] [Thread-135514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:39:15.185 [DEBUG] [Thread-135514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:39:15.189 [DEBUG] [Thread-135514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:39:15.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:39:15.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:39:15.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:39:15.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:39:15.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:39:15.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:39:15.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:39:15.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:39:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:39:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.776875 -999.00  +17.40  13.95     87  +15.20 1 3 1 2 1     0    0 0.86 -62.93 .NeSW 15.4 13.9 197.5 21.7 18.9 -6.7 18.8 -5.4 18.6 -6.4 18.9 -7.8
2026-02-11T20:39:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:39:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:39:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.776875
2026-02-11T20:39:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:39:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:39:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:39:15.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:39:15.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:39:15.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:38:55', tmtdew=2.44, humidity=85.85, cloud=0.0, wind=18.97, temperature=17.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:38:42.000', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:37:00')
2026-02-11T20:39:15.217 [DEBUG] [Thread-135514] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:39:15.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:39:15.313 [DEBUG] [Thread-135517] [transport.py] [_log()] starting thread (client mode): 0xa57d6890
2026-02-11T20:39:15.313 [DEBUG] [Thread-135517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:39:15.329 [DEBUG] [Thread-135517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:39:15.329 [INFO] [Thread-135517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:39:15.337 [DEBUG] [Thread-135517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:39:15.337 [DEBUG] [Thread-135517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:39:15.337 [DEBUG] [Thread-135517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:39:15.337 [DEBUG] [Thread-135517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:15.337 [DEBUG] [Thread-135517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:15.337 [DEBUG] [Thread-135517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] client lang: <none>
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] server lang: <none>
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] kex follows: False
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:39:15.338 [DEBUG] [Thread-135517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:39:15.339 [DEBUG] [Thread-135517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:39:15.339 [DEBUG] [Thread-135517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:39:15.339 [DEBUG] [Thread-135517] [transport.py] [_log()] Compression: none
2026-02-11T20:39:15.339 [DEBUG] [Thread-135517] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:39:15.399 [DEBUG] [Thread-135517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:39:15.400 [DEBUG] [Thread-135517] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:39:15.400 [DEBUG] [Thread-135517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:39:15.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:39:15.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:39:15.456 [DEBUG] [Thread-135517] [transport.py] [_log()] userauth is OK
2026-02-11T20:39:15.456 [DEBUG] [Thread-135517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:39:15.456 [DEBUG] [Thread-135517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:39:15.456 [DEBUG] [Thread-135517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:39:15.456 [DEBUG] [Thread-135517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:39:15.478 [INFO] [Thread-135517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:39:15.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:39:15.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:39:16.328 [DEBUG] [Thread-135517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:39:16.329 [DEBUG] [Thread-135517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:39:16.376 [DEBUG] [Thread-135517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:39:16.376 [DEBUG] [Thread-135517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:39:16.385 [DEBUG] [Thread-135517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:39:16.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:39:16.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:39:16.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:39:16.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:39:16.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:39:16.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:39:16.422 [DEBUG] [Thread-135517] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:39:19.561 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:39:19.563 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:39:21.357 [DEBUG] [Thread-135519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:39:36.409 [DEBUG] [Thread-135520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:39:39.173 [DEBUG] [Thread-135521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:39:46.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:39:46.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:39:46.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:39:48.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 39, 32), 2.41, 85.98, 0.0, 20.96, 17.33, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:39:48.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:39:32
2026-02-11T20:39:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:39:48.909 [DEBUG] [Thread-135522] [transport.py] [_log()] starting thread (client mode): 0xa2d6b5b0
2026-02-11T20:39:48.909 [DEBUG] [Thread-135522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:39:48.928 [DEBUG] [Thread-135522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:39:48.928 [INFO] [Thread-135522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:39:48.931 [DEBUG] [Thread-135522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] client lang: <none>
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] server lang: <none>
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] kex follows: False
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] Compression: none
2026-02-11T20:39:48.932 [DEBUG] [Thread-135522] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:39:48.949 [DEBUG] [Thread-135522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:39:48.950 [DEBUG] [Thread-135522] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:39:48.950 [DEBUG] [Thread-135522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:39:48.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:39:48.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:39:48.952 [DEBUG] [Thread-135522] [transport.py] [_log()] userauth is OK
2026-02-11T20:39:48.952 [DEBUG] [Thread-135522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:39:48.952 [DEBUG] [Thread-135522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:39:48.952 [DEBUG] [Thread-135522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:39:48.953 [DEBUG] [Thread-135522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:39:48.971 [INFO] [Thread-135522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:39:48.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:39:49.596 [DEBUG] [Thread-135522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:39:49.596 [DEBUG] [Thread-135522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:39:49.597 [DEBUG] [Thread-135522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:39:49.637 [DEBUG] [Thread-135522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:39:49.637 [DEBUG] [Thread-135522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:39:49.641 [DEBUG] [Thread-135522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:39:49.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:39:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:39:49.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:39:49.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:39:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:39:49.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:39:49.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:39:49.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:39:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:39:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.777222 -999.00  +17.30  19.48     87  +15.20 1 3 1 2 1     0    0 0.87 -63.71 .NeSW 17.7 19.5 208.9 24.3 18.9 -5.1 18.7 -5.1 18.6 -5.1 18.9 -5.8
2026-02-11T20:39:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:39:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:39:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.777222
2026-02-11T20:39:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:39:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:39:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:39:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:39:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:39:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:39:32', tmtdew=2.41, humidity=85.98, cloud=0.0, wind=20.96, temperature=17.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:39:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:37:00')
2026-02-11T20:39:49.669 [DEBUG] [Thread-135522] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:39:49.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:39:49.765 [DEBUG] [Thread-135525] [transport.py] [_log()] starting thread (client mode): 0xa57c3e80
2026-02-11T20:39:49.766 [DEBUG] [Thread-135525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:39:49.780 [DEBUG] [Thread-135525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:39:49.780 [INFO] [Thread-135525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:39:49.788 [DEBUG] [Thread-135525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:39:49.788 [DEBUG] [Thread-135525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:39:49.788 [DEBUG] [Thread-135525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:39:49.788 [DEBUG] [Thread-135525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:49.788 [DEBUG] [Thread-135525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:39:49.788 [DEBUG] [Thread-135525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:49.788 [DEBUG] [Thread-135525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] client lang: <none>
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] server lang: <none>
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] kex follows: False
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] Compression: none
2026-02-11T20:39:49.789 [DEBUG] [Thread-135525] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:39:49.848 [DEBUG] [Thread-135525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:39:49.849 [DEBUG] [Thread-135525] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:39:49.849 [DEBUG] [Thread-135525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:39:49.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:39:49.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:39:49.904 [DEBUG] [Thread-135525] [transport.py] [_log()] userauth is OK
2026-02-11T20:39:49.904 [DEBUG] [Thread-135525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:39:49.904 [DEBUG] [Thread-135525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:39:49.904 [DEBUG] [Thread-135525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:39:49.904 [DEBUG] [Thread-135525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:39:49.923 [INFO] [Thread-135525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:39:49.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:39:49.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:39:50.775 [DEBUG] [Thread-135525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:39:50.776 [DEBUG] [Thread-135525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:39:50.823 [DEBUG] [Thread-135525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:39:50.824 [DEBUG] [Thread-135525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:39:50.833 [DEBUG] [Thread-135525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:39:50.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:39: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')
2026-02-11T20:39:50.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:39:50.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:39:50.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:39:50.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:39:50.869 [DEBUG] [Thread-135525] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:39:51.445 [DEBUG] [Thread-135527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:06.494 [DEBUG] [Thread-135528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:19.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:19.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:20.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:40:20.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:40:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:40:21.531 [DEBUG] [Thread-135529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 40, 7), 2.39, 86.12, 0.0, 16.52, 17.33, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:40:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:40:07
2026-02-11T20:40:23.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:40:23.220 [DEBUG] [Thread-135530] [transport.py] [_log()] starting thread (client mode): 0xa5743e20
2026-02-11T20:40:23.221 [DEBUG] [Thread-135530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:40:23.240 [DEBUG] [Thread-135530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:40:23.240 [INFO] [Thread-135530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] client lang: <none>
2026-02-11T20:40:23.243 [DEBUG] [Thread-135530] [transport.py] [_log()] server lang: <none>
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] kex follows: False
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] Compression: none
2026-02-11T20:40:23.244 [DEBUG] [Thread-135530] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:40:23.258 [DEBUG] [Thread-135530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:40:23.259 [DEBUG] [Thread-135530] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:40:23.259 [DEBUG] [Thread-135530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:40:23.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:40:23.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:40:23.261 [DEBUG] [Thread-135530] [transport.py] [_log()] userauth is OK
2026-02-11T20:40:23.261 [DEBUG] [Thread-135530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:40:23.261 [DEBUG] [Thread-135530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:40:23.261 [DEBUG] [Thread-135530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:40:23.261 [DEBUG] [Thread-135530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:40:23.293 [INFO] [Thread-135530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:40:23.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:40:23.943 [DEBUG] [Thread-135530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:40:23.943 [DEBUG] [Thread-135530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:40:23.943 [DEBUG] [Thread-135530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:40:23.984 [DEBUG] [Thread-135530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:40:23.984 [DEBUG] [Thread-135530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:40:23.987 [DEBUG] [Thread-135530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:40:23.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:40:23.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:40:24.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:40:24.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:40:24.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:40:24.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:40:24.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:40:24.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:40:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:40:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.777917 -999.00  +17.40  13.43     87  +15.20 1 3 1 2 1     0    0 0.80 -64.07 ----- 13.1 13.4 188.8 17.1 18.9 -5.8 18.8 -7.0 18.6 -6.3 18.9 -5.7
2026-02-11T20:40:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:40:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:40:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.777917
2026-02-11T20:40:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:40:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:40:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:40:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:40:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:40:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:40:07', tmtdew=2.39, humidity=86.12, cloud=0.0, wind=16.52, temperature=17.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:40:12.029', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:37:00')
2026-02-11T20:40:24.014 [DEBUG] [Thread-135530] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:40:24.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:40:24.120 [DEBUG] [Thread-135533] [transport.py] [_log()] starting thread (client mode): 0xa57c0040
2026-02-11T20:40:24.121 [DEBUG] [Thread-135533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:40:24.135 [DEBUG] [Thread-135533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:40:24.135 [INFO] [Thread-135533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:40:24.143 [DEBUG] [Thread-135533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:40:24.143 [DEBUG] [Thread-135533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:40:24.143 [DEBUG] [Thread-135533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:40:24.143 [DEBUG] [Thread-135533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:24.143 [DEBUG] [Thread-135533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] client lang: <none>
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] server lang: <none>
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] kex follows: False
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] Compression: none
2026-02-11T20:40:24.144 [DEBUG] [Thread-135533] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:40:24.199 [DEBUG] [Thread-135533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:40:24.200 [DEBUG] [Thread-135533] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:40:24.200 [DEBUG] [Thread-135533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:40:24.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:40:24.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:40:24.255 [DEBUG] [Thread-135533] [transport.py] [_log()] userauth is OK
2026-02-11T20:40:24.255 [DEBUG] [Thread-135533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:40:24.255 [DEBUG] [Thread-135533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:40:24.255 [DEBUG] [Thread-135533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:40:24.256 [DEBUG] [Thread-135533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:40:24.274 [INFO] [Thread-135533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:40:24.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:40:24.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:40:25.130 [DEBUG] [Thread-135533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:40:25.130 [DEBUG] [Thread-135533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:40:25.178 [DEBUG] [Thread-135533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:40:25.178 [DEBUG] [Thread-135533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:40:25.192 [DEBUG] [Thread-135533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:40:25.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:40:25.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')
2026-02-11T20:40:25.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:40:25.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:40:25.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:40:25.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:40:25.226 [DEBUG] [Thread-135533] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:40:36.566 [DEBUG] [Thread-135535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:39.249 [DEBUG] [Thread-135536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:51.616 [DEBUG] [Thread-135537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:40:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:40:55.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:40:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:40:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 40, 42), 2.69, 84.2, 0.0, 24.21, 17.8, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:40:57.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:40:42
2026-02-11T20:40:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:40:57.614 [DEBUG] [Thread-135538] [transport.py] [_log()] starting thread (client mode): 0xa2d5d2d0
2026-02-11T20:40:57.614 [DEBUG] [Thread-135538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:40:57.635 [DEBUG] [Thread-135538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:40:57.636 [INFO] [Thread-135538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] client lang: <none>
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] server lang: <none>
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] kex follows: False
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] Compression: none
2026-02-11T20:40:57.639 [DEBUG] [Thread-135538] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:40:57.657 [DEBUG] [Thread-135538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:40:57.657 [DEBUG] [Thread-135538] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:40:57.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:40:57.658 [DEBUG] [Thread-135538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:40:57.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:40:57.660 [DEBUG] [Thread-135538] [transport.py] [_log()] userauth is OK
2026-02-11T20:40:57.661 [DEBUG] [Thread-135538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:40:57.661 [DEBUG] [Thread-135538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:40:57.661 [DEBUG] [Thread-135538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:40:57.661 [DEBUG] [Thread-135538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:40:57.685 [INFO] [Thread-135538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:40:57.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:40:58.317 [DEBUG] [Thread-135538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:40:58.317 [DEBUG] [Thread-135538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:40:58.318 [DEBUG] [Thread-135538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:40:58.358 [DEBUG] [Thread-135538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:40:58.359 [DEBUG] [Thread-135538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:40:58.362 [DEBUG] [Thread-135538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:40:58.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:40:58.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:40:58.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:40:58.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:40:58.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:40:58.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:40:58.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:40:58.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:40:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:40:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.778264 -999.00  +17.30  15.66     87  +15.20 1 3 1 2 1     0    0 0.77 -64.42 ----- 16.2 15.7 209.0 23.5 18.9 -7.0 18.8 -7.8 18.6 -7.0 18.9 -7.0
2026-02-11T20:40:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:40:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:40:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.778264
2026-02-11T20:40:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:40:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:40:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:40:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:40:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:40:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:40:42', tmtdew=2.69, humidity=84.2, cloud=0.0, wind=24.21, temperature=17.8, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:40:42.010', atlas_cloud=3, atlas_rain=1, zp_data=[0.5487499999999992, 0.9692500000000006, 0.4277500000000014, 0.3739999999999988, 0.6695000000000002, 1.252250000000001, 1.7009999999999996, 1.5177500000000013, 2.0184999999999995, 0.5100000000000016, 0.4707499999999989, 0.20500000000000007, 0.4949999999999992, 1.3052499999999991, 1.7559999999999993, 0.815999999999999, 1.86125, 0.21149999999999913, 0.243999999999998, 0.2107499999999991, 0.2939999999999987, 1.3627499999999984, 1.6612500000000008, nan, 0.716499999999999, 0.16350000000000087, 0.15975000000000072, 0.22550000000000026, 0.41600000000000037, 0.621500000000001, 0.7855000000000008, nan, 0.42324999999999946], zp_timestamp='2026-02-11T18:37:00')
2026-02-11T20:40:58.389 [DEBUG] [Thread-135538] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:40:58.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:40:58.483 [DEBUG] [Thread-135541] [transport.py] [_log()] starting thread (client mode): 0xa57e1bd0
2026-02-11T20:40:58.484 [DEBUG] [Thread-135541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:40:58.498 [DEBUG] [Thread-135541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:40:58.498 [INFO] [Thread-135541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] client lang: <none>
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] server lang: <none>
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] kex follows: False
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:40:58.506 [DEBUG] [Thread-135541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:40:58.507 [DEBUG] [Thread-135541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:40:58.507 [DEBUG] [Thread-135541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:40:58.507 [DEBUG] [Thread-135541] [transport.py] [_log()] Compression: none
2026-02-11T20:40:58.507 [DEBUG] [Thread-135541] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:40:58.564 [DEBUG] [Thread-135541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:40:58.565 [DEBUG] [Thread-135541] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:40:58.565 [DEBUG] [Thread-135541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:40:58.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:40:58.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:40:58.620 [DEBUG] [Thread-135541] [transport.py] [_log()] userauth is OK
2026-02-11T20:40:58.620 [DEBUG] [Thread-135541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:40:58.620 [DEBUG] [Thread-135541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:40:58.620 [DEBUG] [Thread-135541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:40:58.620 [DEBUG] [Thread-135541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:40:58.639 [INFO] [Thread-135541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:40:58.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:40:58.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:40:59.465 [DEBUG] [Thread-135541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:40:59.466 [DEBUG] [Thread-135541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:40:59.513 [DEBUG] [Thread-135541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:40:59.514 [DEBUG] [Thread-135541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:40:59.523 [DEBUG] [Thread-135541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:40:59.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:40:59.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:40:59.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:40:59.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:40:59.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:40:59.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:40:59.560 [DEBUG] [Thread-135541] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:41:06.651 [DEBUG] [Thread-135543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:41:19.966 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:41:19.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:41:21.702 [DEBUG] [Thread-135544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:41:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:41:29.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:41:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:41:31.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 41, 18), 2.33, 86.16, 0.0, 20.01, 17.25, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:41:31.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:41:18
2026-02-11T20:41:31.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:41:31.901 [DEBUG] [Thread-135545] [transport.py] [_log()] starting thread (client mode): 0xa2d6a800
2026-02-11T20:41:31.901 [DEBUG] [Thread-135545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:41:31.920 [DEBUG] [Thread-135545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:41:31.921 [INFO] [Thread-135545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:41:31.924 [DEBUG] [Thread-135545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] client lang: <none>
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] server lang: <none>
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] kex follows: False
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] Compression: none
2026-02-11T20:41:31.925 [DEBUG] [Thread-135545] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:41:31.941 [DEBUG] [Thread-135545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:41:31.941 [DEBUG] [Thread-135545] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:41:31.942 [DEBUG] [Thread-135545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:41:31.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:41:31.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:41:31.943 [DEBUG] [Thread-135545] [transport.py] [_log()] userauth is OK
2026-02-11T20:41:31.943 [DEBUG] [Thread-135545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:41:31.944 [DEBUG] [Thread-135545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:41:31.944 [DEBUG] [Thread-135545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:41:31.944 [DEBUG] [Thread-135545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:41:31.958 [INFO] [Thread-135545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:41:31.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:41:32.537 [DEBUG] [Thread-135545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:41:32.537 [DEBUG] [Thread-135545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:41:32.538 [DEBUG] [Thread-135545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:41:32.578 [DEBUG] [Thread-135545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:41:32.579 [DEBUG] [Thread-135545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:41:32.582 [DEBUG] [Thread-135545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:41:32.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:41:32.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:41:32.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:41:32.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:41:32.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:41:32.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:41:32.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:41:32.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:41:32.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:41:32.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.778611 -999.00  +17.30  10.14     87  +15.20 1 3 1 2 1     0    0 0.80 -64.22 ...S. 11.2 10.1 201.9 21.7 18.9 -7.0 18.8 -7.0 18.6 -6.7 18.9 -6.7
2026-02-11T20:41:32.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:41:32.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:41:32.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.778611
2026-02-11T20:41:32.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:41:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:41:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:41:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:41:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:41:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:41:18', tmtdew=2.33, humidity=86.16, cloud=0.0, wind=20.01, temperature=17.25, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:41:11.990', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:40:00')
2026-02-11T20:41:32.610 [DEBUG] [Thread-135545] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:41:32.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:41:32.706 [DEBUG] [Thread-135548] [transport.py] [_log()] starting thread (client mode): 0xa57590f0
2026-02-11T20:41:32.706 [DEBUG] [Thread-135548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:41:32.721 [DEBUG] [Thread-135548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:41:32.721 [INFO] [Thread-135548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:41:32.728 [DEBUG] [Thread-135548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] client lang: <none>
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] server lang: <none>
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] kex follows: False
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] Compression: none
2026-02-11T20:41:32.729 [DEBUG] [Thread-135548] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:41:32.788 [DEBUG] [Thread-135548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:41:32.788 [DEBUG] [Thread-135548] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:41:32.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:41:32.790 [DEBUG] [Thread-135548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:41:32.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:41:32.848 [DEBUG] [Thread-135548] [transport.py] [_log()] userauth is OK
2026-02-11T20:41:32.848 [DEBUG] [Thread-135548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:41:32.849 [DEBUG] [Thread-135548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:41:32.849 [DEBUG] [Thread-135548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:41:32.849 [DEBUG] [Thread-135548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:41:32.869 [INFO] [Thread-135548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:41:32.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:41:32.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:41:33.710 [DEBUG] [Thread-135548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:41:33.710 [DEBUG] [Thread-135548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:41:33.758 [DEBUG] [Thread-135548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:41:33.759 [DEBUG] [Thread-135548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:41:33.770 [DEBUG] [Thread-135548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:41:33.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:41: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')
2026-02-11T20:41:33.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:41:33.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:41:33.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:41:33.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:41:33.807 [DEBUG] [Thread-135548] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:41:36.738 [DEBUG] [Thread-135550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:41:39.333 [DEBUG] [Thread-135551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:41:51.796 [DEBUG] [Thread-135552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:42:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:42:03.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:42:03.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:42:06.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 41, 54), 2.26, 86.76, 0.0, 20.98, 17.23, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:42:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:41:54
2026-02-11T20:42:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:42:06.586 [DEBUG] [Thread-135553] [transport.py] [_log()] starting thread (client mode): 0xa2dc3220
2026-02-11T20:42:06.586 [DEBUG] [Thread-135553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:42:06.607 [DEBUG] [Thread-135553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:42:06.607 [INFO] [Thread-135553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] client lang: <none>
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] server lang: <none>
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] kex follows: False
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] Compression: none
2026-02-11T20:42:06.610 [DEBUG] [Thread-135553] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:42:06.628 [DEBUG] [Thread-135553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:42:06.628 [DEBUG] [Thread-135553] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:42:06.629 [DEBUG] [Thread-135553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:42:06.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:42:06.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:42:06.631 [DEBUG] [Thread-135553] [transport.py] [_log()] userauth is OK
2026-02-11T20:42:06.631 [DEBUG] [Thread-135553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:42:06.631 [DEBUG] [Thread-135553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:42:06.631 [DEBUG] [Thread-135553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:42:06.632 [DEBUG] [Thread-135553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:42:06.650 [INFO] [Thread-135553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:42:06.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:42:06.833 [DEBUG] [Thread-135555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:42:07.297 [DEBUG] [Thread-135553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:42:07.297 [DEBUG] [Thread-135553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:42:07.298 [DEBUG] [Thread-135553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:42:07.338 [DEBUG] [Thread-135553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:42:07.339 [DEBUG] [Thread-135553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:42:07.342 [DEBUG] [Thread-135553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:42:07.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:42:07.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:42:07.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:42:07.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:42:07.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:42:07.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:42:07.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:42:07.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:42:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:42:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.778958 -999.00  +17.30  14.39     87  +15.20 1 3 1 2 1     0    0 0.82 -63.12 ...S. 13.7 14.4 190.4 19.1 19.0 -6.4 18.8 -6.7 18.6 -5.5 18.9 -6.0
2026-02-11T20:42:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:42:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:42:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.778958
2026-02-11T20:42:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:42:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:42:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:42:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:42:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:42:07.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:41:54', tmtdew=2.26, humidity=86.76, cloud=0.0, wind=20.98, temperature=17.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:41:41.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:40:00')
2026-02-11T20:42:07.366 [DEBUG] [Thread-135553] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:42:07.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:42:07.467 [DEBUG] [Thread-135557] [transport.py] [_log()] starting thread (client mode): 0xa57734c0
2026-02-11T20:42:07.467 [DEBUG] [Thread-135557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:42:07.481 [DEBUG] [Thread-135557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:42:07.481 [INFO] [Thread-135557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:42:07.489 [DEBUG] [Thread-135557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] client lang: <none>
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] server lang: <none>
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] kex follows: False
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:42:07.490 [DEBUG] [Thread-135557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:42:07.491 [DEBUG] [Thread-135557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:42:07.491 [DEBUG] [Thread-135557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:42:07.491 [DEBUG] [Thread-135557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:42:07.491 [DEBUG] [Thread-135557] [transport.py] [_log()] Compression: none
2026-02-11T20:42:07.491 [DEBUG] [Thread-135557] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:42:07.551 [DEBUG] [Thread-135557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:42:07.552 [DEBUG] [Thread-135557] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:42:07.552 [DEBUG] [Thread-135557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:42:07.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:42:07.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:42:07.607 [DEBUG] [Thread-135557] [transport.py] [_log()] userauth is OK
2026-02-11T20:42:07.607 [DEBUG] [Thread-135557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:42:07.607 [DEBUG] [Thread-135557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:42:07.608 [DEBUG] [Thread-135557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:42:07.608 [DEBUG] [Thread-135557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:42:07.625 [INFO] [Thread-135557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:42:07.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:42:07.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:42:08.453 [DEBUG] [Thread-135557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:42:08.454 [DEBUG] [Thread-135557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:42:08.501 [DEBUG] [Thread-135557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:42:08.502 [DEBUG] [Thread-135557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:42:08.511 [DEBUG] [Thread-135557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:42:08.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:42:08.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:42:08.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:42:08.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:42:08.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:42:08.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:42:08.552 [DEBUG] [Thread-135557] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:42:20.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:42:20.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:42:21.868 [DEBUG] [Thread-135559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:42:36.918 [DEBUG] [Thread-135560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:42:38.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:42:38.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:42:38.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:42:39.410 [DEBUG] [Thread-135561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:42:40.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 42, 29), 2.23, 86.93, 0.0, 19.67, 17.23, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:42:40.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:42:29
2026-02-11T20:42:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:42:40.925 [DEBUG] [Thread-135562] [transport.py] [_log()] starting thread (client mode): 0xa5770e80
2026-02-11T20:42:40.925 [DEBUG] [Thread-135562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:42:40.945 [DEBUG] [Thread-135562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:42:40.945 [INFO] [Thread-135562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] client lang: <none>
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] server lang: <none>
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] kex follows: False
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] Compression: none
2026-02-11T20:42:40.948 [DEBUG] [Thread-135562] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:42:40.956 [DEBUG] [Thread-135562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:42:40.956 [DEBUG] [Thread-135562] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:42:40.957 [DEBUG] [Thread-135562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:42:40.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:42:40.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:42:40.958 [DEBUG] [Thread-135562] [transport.py] [_log()] userauth is OK
2026-02-11T20:42:40.958 [DEBUG] [Thread-135562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:42:40.958 [DEBUG] [Thread-135562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:42:40.958 [DEBUG] [Thread-135562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:42:40.958 [DEBUG] [Thread-135562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:42:40.970 [INFO] [Thread-135562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:42:40.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:42:41.627 [DEBUG] [Thread-135562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:42:41.627 [DEBUG] [Thread-135562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:42:41.627 [DEBUG] [Thread-135562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:42:41.668 [DEBUG] [Thread-135562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:42:41.669 [DEBUG] [Thread-135562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:42:41.672 [DEBUG] [Thread-135562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:42:41.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:42:41.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:42:41.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:42:41.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:42:41.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:42:41.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:42:41.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:42:41.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:42:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:42:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.779305 -999.00  +17.30  12.30     87  +15.20 1 3 1 2 1     0    0 0.70 -65.12 ..... 18.9 12.3 195.4 20.0 18.9 -7.0 18.8 -8.0 18.6 -5.4 18.9 -5.7
2026-02-11T20:42:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:42:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:42:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.779305
2026-02-11T20:42:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:42:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:42:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:42:41.695 [DEBUG] [Thread-135562] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:42:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:42:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:42:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:42:29', tmtdew=2.23, humidity=86.93, cloud=0.0, wind=19.67, temperature=17.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:42:11.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:40:00')
2026-02-11T20:42:41.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:42:41.789 [DEBUG] [Thread-135565] [transport.py] [_log()] starting thread (client mode): 0xa57d4670
2026-02-11T20:42:41.789 [DEBUG] [Thread-135565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:42:41.803 [DEBUG] [Thread-135565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:42:41.803 [INFO] [Thread-135565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:42:41.811 [DEBUG] [Thread-135565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:42:41.811 [DEBUG] [Thread-135565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] client lang: <none>
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] server lang: <none>
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] kex follows: False
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] Compression: none
2026-02-11T20:42:41.812 [DEBUG] [Thread-135565] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:42:41.868 [DEBUG] [Thread-135565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:42:41.869 [DEBUG] [Thread-135565] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:42:41.869 [DEBUG] [Thread-135565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:42:41.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:42:41.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:42:41.924 [DEBUG] [Thread-135565] [transport.py] [_log()] userauth is OK
2026-02-11T20:42:41.924 [DEBUG] [Thread-135565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:42:41.924 [DEBUG] [Thread-135565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:42:41.924 [DEBUG] [Thread-135565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:42:41.925 [DEBUG] [Thread-135565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:42:41.943 [INFO] [Thread-135565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:42:41.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:42:41.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:42:42.780 [DEBUG] [Thread-135565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:42:42.780 [DEBUG] [Thread-135565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:42:42.828 [DEBUG] [Thread-135565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:42:42.828 [DEBUG] [Thread-135565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:42:42.837 [DEBUG] [Thread-135565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:42:42.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:42: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')
2026-02-11T20:42:42.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:42:42.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:42:42.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:42:42.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:42:42.873 [DEBUG] [Thread-135565] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:42:51.954 [DEBUG] [Thread-135567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:07.016 [DEBUG] [Thread-135568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:12.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:43:12.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:43:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:43:14.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 43, 5), 2.23, 86.93, 0.0, 20.36, 17.25, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:43:14.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:43:05
2026-02-11T20:43:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:43:15.262 [DEBUG] [Thread-135569] [transport.py] [_log()] starting thread (client mode): 0xa5773100
2026-02-11T20:43:15.262 [DEBUG] [Thread-135569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:43:15.282 [DEBUG] [Thread-135569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:43:15.282 [INFO] [Thread-135569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] client lang: <none>
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] server lang: <none>
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] kex follows: False
2026-02-11T20:43:15.283 [DEBUG] [Thread-135569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:43:15.284 [DEBUG] [Thread-135569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:43:15.284 [DEBUG] [Thread-135569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:43:15.284 [DEBUG] [Thread-135569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:43:15.284 [DEBUG] [Thread-135569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:43:15.284 [DEBUG] [Thread-135569] [transport.py] [_log()] Compression: none
2026-02-11T20:43:15.284 [DEBUG] [Thread-135569] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:43:15.297 [DEBUG] [Thread-135569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:43:15.297 [DEBUG] [Thread-135569] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:43:15.297 [DEBUG] [Thread-135569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:43:15.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:43:15.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:43:15.299 [DEBUG] [Thread-135569] [transport.py] [_log()] userauth is OK
2026-02-11T20:43:15.299 [DEBUG] [Thread-135569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:43:15.299 [DEBUG] [Thread-135569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:43:15.299 [DEBUG] [Thread-135569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:43:15.299 [DEBUG] [Thread-135569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:43:15.313 [INFO] [Thread-135569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:43:15.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:43:15.954 [DEBUG] [Thread-135569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:43:15.954 [DEBUG] [Thread-135569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:43:15.955 [DEBUG] [Thread-135569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:43:15.995 [DEBUG] [Thread-135569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:43:15.996 [DEBUG] [Thread-135569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:43:15.999 [DEBUG] [Thread-135569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:43:16.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:43:16.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:43:16.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:43:16.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:43:16.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:43:16.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:43:16.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:43:16.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:43:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:43:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.779653 -999.00  +17.20  17.02     87  +15.20 1 3 1 2 1     0    0 0.70 -63.94 ----- 16.5 17.0 199.6 27.1 18.9 -7.0 18.7 -7.1 18.6 -5.4 18.9 -6.3
2026-02-11T20:43:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:43:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:43:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.779653
2026-02-11T20:43:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:43:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:43:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:43:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:43:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:43:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:43:05', tmtdew=2.23, humidity=86.93, cloud=0.0, wind=20.36, temperature=17.25, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:42:42.019', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:40:00')
2026-02-11T20:43:16.027 [DEBUG] [Thread-135569] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:43:16.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:43:16.124 [DEBUG] [Thread-135572] [transport.py] [_log()] starting thread (client mode): 0xa57730d0
2026-02-11T20:43:16.125 [DEBUG] [Thread-135572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:43:16.139 [DEBUG] [Thread-135572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:43:16.139 [INFO] [Thread-135572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] client lang: <none>
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] server lang: <none>
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] kex follows: False
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:43:16.147 [DEBUG] [Thread-135572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:43:16.148 [DEBUG] [Thread-135572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:43:16.148 [DEBUG] [Thread-135572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:43:16.148 [DEBUG] [Thread-135572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:43:16.148 [DEBUG] [Thread-135572] [transport.py] [_log()] Compression: none
2026-02-11T20:43:16.148 [DEBUG] [Thread-135572] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:43:16.207 [DEBUG] [Thread-135572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:43:16.208 [DEBUG] [Thread-135572] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:43:16.208 [DEBUG] [Thread-135572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:43:16.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:43:16.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:43:16.264 [DEBUG] [Thread-135572] [transport.py] [_log()] userauth is OK
2026-02-11T20:43:16.264 [DEBUG] [Thread-135572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:43:16.265 [DEBUG] [Thread-135572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:43:16.265 [DEBUG] [Thread-135572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:43:16.265 [DEBUG] [Thread-135572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:43:16.283 [INFO] [Thread-135572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:43:16.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:43:16.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:43:17.179 [DEBUG] [Thread-135572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:43:17.180 [DEBUG] [Thread-135572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:43:17.227 [DEBUG] [Thread-135572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:43:17.228 [DEBUG] [Thread-135572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:43:17.237 [DEBUG] [Thread-135572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:43:17.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:43:17.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:43:17.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:43:17.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:43:17.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:43:17.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:43:17.273 [DEBUG] [Thread-135572] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:43:20.375 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:20.376 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:22.055 [DEBUG] [Thread-135574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:37.104 [DEBUG] [Thread-135575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:39.484 [DEBUG] [Thread-135576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:47.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:43:47.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:43:47.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:43:49.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 43, 40), 2.56, 84.89, 0.0, 20.43, 17.6, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:43:49.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:43:40
2026-02-11T20:43:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:43:50.126 [DEBUG] [Thread-135577] [transport.py] [_log()] starting thread (client mode): 0xa57e29b0
2026-02-11T20:43:50.126 [DEBUG] [Thread-135577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:43:50.146 [DEBUG] [Thread-135577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:43:50.146 [INFO] [Thread-135577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:43:50.149 [DEBUG] [Thread-135577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:43:50.149 [DEBUG] [Thread-135577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:43:50.149 [DEBUG] [Thread-135577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:43:50.149 [DEBUG] [Thread-135577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] client lang: <none>
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] server lang: <none>
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] kex follows: False
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:43:50.150 [DEBUG] [Thread-135577] [transport.py] [_log()] Compression: none
2026-02-11T20:43:50.151 [DEBUG] [Thread-135577] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:43:50.169 [DEBUG] [Thread-135577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:43:50.170 [DEBUG] [Thread-135577] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:43:50.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:43:50.171 [DEBUG] [Thread-135577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:43:50.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:43:50.173 [DEBUG] [Thread-135577] [transport.py] [_log()] userauth is OK
2026-02-11T20:43:50.173 [DEBUG] [Thread-135577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:43:50.173 [DEBUG] [Thread-135577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:43:50.174 [DEBUG] [Thread-135577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:43:50.174 [DEBUG] [Thread-135577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:43:50.197 [INFO] [Thread-135577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:43:50.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:43:50.840 [DEBUG] [Thread-135577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:43:50.841 [DEBUG] [Thread-135577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:43:50.841 [DEBUG] [Thread-135577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:43:50.881 [DEBUG] [Thread-135577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:43:50.881 [DEBUG] [Thread-135577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:43:50.884 [DEBUG] [Thread-135577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:43:50.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:43:50.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:43:50.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:43:50.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:43:50.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:43:50.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:43:50.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:43:50.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:43:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:43:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.780347 -999.00  +17.20  15.38     87  +15.20 1 3 1 2 1     0    0 0.64 -63.51 ..E.. 21.6 15.4 198.0 18.7 18.9 -6.5 18.7 -6.3 18.6 -5.5 18.8 -6.3
2026-02-11T20:43:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:43:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:43:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.780347
2026-02-11T20:43:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:43:50.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:43:50.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:43:50.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:43:50.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:43:50.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:43:40', tmtdew=2.56, humidity=84.89, cloud=0.0, wind=20.43, temperature=17.6, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:43:41.981', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:40:00')
2026-02-11T20:43:50.908 [DEBUG] [Thread-135577] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:43:51.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:43:51.014 [DEBUG] [Thread-135580] [transport.py] [_log()] starting thread (client mode): 0xa5758640
2026-02-11T20:43:51.014 [DEBUG] [Thread-135580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:43:51.028 [DEBUG] [Thread-135580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:43:51.028 [INFO] [Thread-135580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:43:51.036 [DEBUG] [Thread-135580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:43:51.036 [DEBUG] [Thread-135580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:43:51.036 [DEBUG] [Thread-135580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:43:51.036 [DEBUG] [Thread-135580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:51.036 [DEBUG] [Thread-135580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:43:51.036 [DEBUG] [Thread-135580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:51.036 [DEBUG] [Thread-135580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] client lang: <none>
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] server lang: <none>
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] kex follows: False
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:43:51.037 [DEBUG] [Thread-135580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:43:51.038 [DEBUG] [Thread-135580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:43:51.038 [DEBUG] [Thread-135580] [transport.py] [_log()] Compression: none
2026-02-11T20:43:51.038 [DEBUG] [Thread-135580] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:43:51.094 [DEBUG] [Thread-135580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:43:51.094 [DEBUG] [Thread-135580] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:43:51.095 [DEBUG] [Thread-135580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:43:51.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:43:51.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:43:51.151 [DEBUG] [Thread-135580] [transport.py] [_log()] userauth is OK
2026-02-11T20:43:51.151 [DEBUG] [Thread-135580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:43:51.152 [DEBUG] [Thread-135580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:43:51.152 [DEBUG] [Thread-135580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:43:51.152 [DEBUG] [Thread-135580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:43:51.171 [INFO] [Thread-135580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:43:51.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:43:51.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:43:52.053 [DEBUG] [Thread-135580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:43:52.054 [DEBUG] [Thread-135580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:43:52.101 [DEBUG] [Thread-135580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:43:52.102 [DEBUG] [Thread-135580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:43:52.111 [DEBUG] [Thread-135580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:43:52.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:43:52.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:43:52.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:43:52.137 [DEBUG] [Thread-135582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:43:52.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:43:52.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:43:52.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:43:52.146 [DEBUG] [Thread-135580] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:44:07.187 [DEBUG] [Thread-135583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:44:20.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:44:20.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:44:22.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:44:22.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:44:22.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:44:22.222 [DEBUG] [Thread-135584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:44:24.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 43, 40), 2.56, 84.89, 0.0, 20.43, 17.6, 0, 1, 0, 2, 0, 0),)
2026-02-11T20:44:24.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:43:40
2026-02-11T20:44:24.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:44:24.711 [DEBUG] [Thread-135585] [transport.py] [_log()] starting thread (client mode): 0xa2db5600
2026-02-11T20:44:24.711 [DEBUG] [Thread-135585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:44:24.733 [DEBUG] [Thread-135585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:44:24.733 [INFO] [Thread-135585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:44:24.736 [DEBUG] [Thread-135585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:44:24.736 [DEBUG] [Thread-135585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] client lang: <none>
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] server lang: <none>
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] kex follows: False
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] Compression: none
2026-02-11T20:44:24.737 [DEBUG] [Thread-135585] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:44:24.761 [DEBUG] [Thread-135585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:44:24.761 [DEBUG] [Thread-135585] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:44:24.762 [DEBUG] [Thread-135585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:44:24.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:44:24.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:44:24.764 [DEBUG] [Thread-135585] [transport.py] [_log()] userauth is OK
2026-02-11T20:44:24.764 [DEBUG] [Thread-135585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:44:24.764 [DEBUG] [Thread-135585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:44:24.764 [DEBUG] [Thread-135585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:44:24.764 [DEBUG] [Thread-135585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:44:24.789 [INFO] [Thread-135585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:44:24.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:44:25.420 [DEBUG] [Thread-135585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:44:25.420 [DEBUG] [Thread-135585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:44:25.421 [DEBUG] [Thread-135585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:44:25.462 [DEBUG] [Thread-135585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:44:25.462 [DEBUG] [Thread-135585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:44:25.466 [DEBUG] [Thread-135585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:44:25.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:44:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:44:25.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:44:25.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:44:25.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:44:25.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:44:25.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:44:25.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:44:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:44:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.780694 -999.00  +17.20  14.76     88  +15.20 1 3 1 3 1     0    0 0.58 -66.83 ..... 16.4 14.8 197.4 20.6 18.9 -4.6 18.7 -4.3 18.6 -3.8 18.8 -4.6
2026-02-11T20:44:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:44:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:44:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.780694
2026-02-11T20:44:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:44:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:44:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:44:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:44:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:44:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:43:40', tmtdew=2.56, humidity=84.89, cloud=0.0, wind=20.43, temperature=17.6, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:44:11.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:40:00')
2026-02-11T20:44:25.493 [DEBUG] [Thread-135585] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:44:25.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:44:25.591 [DEBUG] [Thread-135588] [transport.py] [_log()] starting thread (client mode): 0xa2db5150
2026-02-11T20:44:25.591 [DEBUG] [Thread-135588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:44:25.607 [DEBUG] [Thread-135588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:44:25.607 [INFO] [Thread-135588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:44:25.617 [DEBUG] [Thread-135588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] client lang: <none>
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] server lang: <none>
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] kex follows: False
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:44:25.618 [DEBUG] [Thread-135588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:44:25.619 [DEBUG] [Thread-135588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:44:25.619 [DEBUG] [Thread-135588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:44:25.619 [DEBUG] [Thread-135588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:44:25.619 [DEBUG] [Thread-135588] [transport.py] [_log()] Compression: none
2026-02-11T20:44:25.619 [DEBUG] [Thread-135588] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:44:25.673 [DEBUG] [Thread-135588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:44:25.673 [DEBUG] [Thread-135588] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:44:25.674 [DEBUG] [Thread-135588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:44:25.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:44:25.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:44:25.732 [DEBUG] [Thread-135588] [transport.py] [_log()] userauth is OK
2026-02-11T20:44:25.733 [DEBUG] [Thread-135588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:44:25.733 [DEBUG] [Thread-135588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:44:25.733 [DEBUG] [Thread-135588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:44:25.733 [DEBUG] [Thread-135588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:44:25.754 [INFO] [Thread-135588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:44:25.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:44:25.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:44:26.580 [DEBUG] [Thread-135588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:44:26.581 [DEBUG] [Thread-135588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:44:26.628 [DEBUG] [Thread-135588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:44:26.628 [DEBUG] [Thread-135588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:44:26.638 [DEBUG] [Thread-135588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:44:26.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:44: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')
2026-02-11T20:44:26.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:44:26.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:44:26.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:44:26.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:44:26.674 [DEBUG] [Thread-135588] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:44:37.254 [DEBUG] [Thread-135590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:44:39.564 [DEBUG] [Thread-135591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:44:52.304 [DEBUG] [Thread-135592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:44:56.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:44:56.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:44:56.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:44:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 44, 17), 2.15, 87.58, 0.0, 23.11, 17.13, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:44:58.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:44:17
2026-02-11T20:44:59.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:44:59.425 [DEBUG] [Thread-135593] [transport.py] [_log()] starting thread (client mode): 0xa5741f00
2026-02-11T20:44:59.426 [DEBUG] [Thread-135593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:44:59.445 [DEBUG] [Thread-135593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:44:59.446 [INFO] [Thread-135593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:44:59.449 [DEBUG] [Thread-135593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:44:59.449 [DEBUG] [Thread-135593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:44:59.449 [DEBUG] [Thread-135593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:44:59.449 [DEBUG] [Thread-135593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:44:59.449 [DEBUG] [Thread-135593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:44:59.449 [DEBUG] [Thread-135593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:44:59.449 [DEBUG] [Thread-135593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] client lang: <none>
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] server lang: <none>
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] kex follows: False
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:44:59.450 [DEBUG] [Thread-135593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:44:59.451 [DEBUG] [Thread-135593] [transport.py] [_log()] Compression: none
2026-02-11T20:44:59.451 [DEBUG] [Thread-135593] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:44:59.469 [DEBUG] [Thread-135593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:44:59.469 [DEBUG] [Thread-135593] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:44:59.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:44:59.470 [DEBUG] [Thread-135593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:44:59.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:44:59.472 [DEBUG] [Thread-135593] [transport.py] [_log()] userauth is OK
2026-02-11T20:44:59.473 [DEBUG] [Thread-135593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:44:59.473 [DEBUG] [Thread-135593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:44:59.473 [DEBUG] [Thread-135593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:44:59.473 [DEBUG] [Thread-135593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:44:59.491 [INFO] [Thread-135593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:44:59.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:45:00.123 [DEBUG] [Thread-135593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:45:00.124 [DEBUG] [Thread-135593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:45:00.124 [DEBUG] [Thread-135593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:45:00.164 [DEBUG] [Thread-135593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:45:00.164 [DEBUG] [Thread-135593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:45:00.167 [DEBUG] [Thread-135593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:45:00.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:45:00.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:45:00.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:45:00.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:45:00.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:45:00.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:45:00.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:45:00.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:45:00.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:45:00.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.781041 -999.00  +17.20  16.49     88  +15.10 1 3 1 3 1     0    0 0.63 -65.82 ..... 18.4 16.5 193.3 22.3 18.9 -4.5 18.7 -5.1 18.6 -4.3 18.9 -4.4
2026-02-11T20:45:00.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:45:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:45:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.781041
2026-02-11T20:45:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:45:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:45:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:45:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:45:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:45:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:44:17', tmtdew=2.15, humidity=87.58, cloud=0.0, wind=23.11, temperature=17.13, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:44:41.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:45:00.194 [DEBUG] [Thread-135593] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:45:00.289 [DEBUG] [Thread-135596] [transport.py] [_log()] starting thread (client mode): 0xa57e1360
2026-02-11T20:45:00.290 [DEBUG] [Thread-135596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:45:00.304 [DEBUG] [Thread-135596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:45:00.304 [INFO] [Thread-135596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:45:00.312 [DEBUG] [Thread-135596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:45:00.312 [DEBUG] [Thread-135596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:45:00.312 [DEBUG] [Thread-135596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:45:00.312 [DEBUG] [Thread-135596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:45:00.312 [DEBUG] [Thread-135596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:45:00.312 [DEBUG] [Thread-135596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:45:00.312 [DEBUG] [Thread-135596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] client lang: <none>
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] server lang: <none>
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] kex follows: False
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:45:00.313 [DEBUG] [Thread-135596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:45:00.314 [DEBUG] [Thread-135596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:45:00.314 [DEBUG] [Thread-135596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:45:00.314 [DEBUG] [Thread-135596] [transport.py] [_log()] Compression: none
2026-02-11T20:45:00.314 [DEBUG] [Thread-135596] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:45:00.372 [DEBUG] [Thread-135596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:45:00.373 [DEBUG] [Thread-135596] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:45:00.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:45:00.374 [DEBUG] [Thread-135596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:45:00.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:45:00.428 [DEBUG] [Thread-135596] [transport.py] [_log()] userauth is OK
2026-02-11T20:45:00.429 [DEBUG] [Thread-135596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:45:00.429 [DEBUG] [Thread-135596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:45:00.429 [DEBUG] [Thread-135596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:45:00.429 [DEBUG] [Thread-135596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:45:00.449 [INFO] [Thread-135596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:45:00.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:45:00.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:45:01.301 [DEBUG] [Thread-135596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:45:01.301 [DEBUG] [Thread-135596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:45:01.350 [DEBUG] [Thread-135596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:45:01.350 [DEBUG] [Thread-135596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:45:01.359 [DEBUG] [Thread-135596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:45:01.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:45:01.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:45:01.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:45:01.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:45:01.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:45:01.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:45:01.395 [DEBUG] [Thread-135596] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:45:07.344 [DEBUG] [Thread-135598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:45:20.800 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:45:20.801 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:45:22.400 [DEBUG] [Thread-135599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:45:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:45:31.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:45:31.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:45:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 44, 53), 2.05, 87.6, 0.0, 21.86, 17.07, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:45:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:44:53
2026-02-11T20:45:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:45:34.306 [DEBUG] [Thread-135600] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-11T20:45:34.306 [DEBUG] [Thread-135600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:45:34.326 [DEBUG] [Thread-135600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:45:34.326 [INFO] [Thread-135600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:45:34.329 [DEBUG] [Thread-135600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:45:34.329 [DEBUG] [Thread-135600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:45:34.329 [DEBUG] [Thread-135600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] client lang: <none>
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] server lang: <none>
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] kex follows: False
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] Compression: none
2026-02-11T20:45:34.330 [DEBUG] [Thread-135600] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:45:34.348 [DEBUG] [Thread-135600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:45:34.349 [DEBUG] [Thread-135600] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:45:34.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:45:34.350 [DEBUG] [Thread-135600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:45:34.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:45:34.352 [DEBUG] [Thread-135600] [transport.py] [_log()] userauth is OK
2026-02-11T20:45:34.352 [DEBUG] [Thread-135600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:45:34.352 [DEBUG] [Thread-135600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:45:34.352 [DEBUG] [Thread-135600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:45:34.352 [DEBUG] [Thread-135600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:45:34.371 [INFO] [Thread-135600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:45:34.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:45:35.010 [DEBUG] [Thread-135600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:45:35.011 [DEBUG] [Thread-135600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:45:35.011 [DEBUG] [Thread-135600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:45:35.052 [DEBUG] [Thread-135600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:45:35.052 [DEBUG] [Thread-135600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:45:35.055 [DEBUG] [Thread-135600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:45:35.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:45:35.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:45:35.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:45:35.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:45:35.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:45:35.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:45:35.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:45:35.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:45:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:45:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.781389 -999.00  +17.20  15.56     88  +15.20 1 3 1 3 1     0    0 0.59 -64.88 ----- 13.6 15.6 206.0 19.2 18.9 -3.8 18.7 -3.6 18.6 -3.6 18.9 -3.5
2026-02-11T20:45:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:45:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:45:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.781389
2026-02-11T20:45:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:45:35.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:45:35.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:45:35.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:45:35.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:45:35.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:44:53', tmtdew=2.05, humidity=87.6, cloud=0.0, wind=21.86, temperature=17.07, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:45:12.010', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:45:35.083 [DEBUG] [Thread-135600] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:45:35.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:45:35.179 [DEBUG] [Thread-135603] [transport.py] [_log()] starting thread (client mode): 0xa57b22c0
2026-02-11T20:45:35.179 [DEBUG] [Thread-135603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:45:35.197 [DEBUG] [Thread-135603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:45:35.197 [INFO] [Thread-135603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:45:35.204 [DEBUG] [Thread-135603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] client lang: <none>
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] server lang: <none>
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] kex follows: False
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:45:35.205 [DEBUG] [Thread-135603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:45:35.206 [DEBUG] [Thread-135603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:45:35.206 [DEBUG] [Thread-135603] [transport.py] [_log()] Compression: none
2026-02-11T20:45:35.206 [DEBUG] [Thread-135603] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:45:35.264 [DEBUG] [Thread-135603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:45:35.265 [DEBUG] [Thread-135603] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:45:35.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:45:35.266 [DEBUG] [Thread-135603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:45:35.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:45:35.320 [DEBUG] [Thread-135603] [transport.py] [_log()] userauth is OK
2026-02-11T20:45:35.321 [DEBUG] [Thread-135603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:45:35.321 [DEBUG] [Thread-135603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:45:35.321 [DEBUG] [Thread-135603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:45:35.321 [DEBUG] [Thread-135603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:45:35.345 [INFO] [Thread-135603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:45:35.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:45:35.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:45:36.246 [DEBUG] [Thread-135603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:45:36.246 [DEBUG] [Thread-135603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:45:36.294 [DEBUG] [Thread-135603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:45:36.294 [DEBUG] [Thread-135603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:45:36.303 [DEBUG] [Thread-135603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:45:36.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:45:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:45:36.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:45:36.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:45:36.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:45:36.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:45:36.345 [DEBUG] [Thread-135603] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:45:37.436 [DEBUG] [Thread-135605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:45:39.632 [DEBUG] [Thread-135606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:45:52.494 [DEBUG] [Thread-135607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:46:06.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:46:06.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:46:06.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:46:07.533 [DEBUG] [Thread-135608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:46:08.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 45, 28), 2.03, 87.68, 0.0, 22.39, 17.02, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:46:08.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:45:28
2026-02-11T20:46:09.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:46:09.325 [DEBUG] [Thread-135609] [transport.py] [_log()] starting thread (client mode): 0xa5759120
2026-02-11T20:46:09.326 [DEBUG] [Thread-135609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:46:09.346 [DEBUG] [Thread-135609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:46:09.347 [INFO] [Thread-135609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] client lang: <none>
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] server lang: <none>
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] kex follows: False
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] Compression: none
2026-02-11T20:46:09.350 [DEBUG] [Thread-135609] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:46:09.367 [DEBUG] [Thread-135609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:46:09.367 [DEBUG] [Thread-135609] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:46:09.368 [DEBUG] [Thread-135609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:46:09.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:46:09.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:46:09.370 [DEBUG] [Thread-135609] [transport.py] [_log()] userauth is OK
2026-02-11T20:46:09.370 [DEBUG] [Thread-135609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:46:09.370 [DEBUG] [Thread-135609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:46:09.370 [DEBUG] [Thread-135609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:46:09.370 [DEBUG] [Thread-135609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:46:09.388 [INFO] [Thread-135609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:46:09.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:46:10.002 [DEBUG] [Thread-135609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:46:10.003 [DEBUG] [Thread-135609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:46:10.003 [DEBUG] [Thread-135609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:46:10.043 [DEBUG] [Thread-135609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:46:10.044 [DEBUG] [Thread-135609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:46:10.047 [DEBUG] [Thread-135609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:46:10.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:46:10.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:46:10.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:46:10.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:46:10.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:46:10.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:46:10.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:46:10.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:46:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:46:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.781736 -999.00  +17.10  15.48     88  +15.20 1 3 1 3 1     0    0 0.54 -65.59 ----- 14.6 15.5 204.8 23.5 18.9 -3.9 18.7 -3.7 18.6 -3.7 18.9 -3.9
2026-02-11T20:46:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:46:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:46:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.781736
2026-02-11T20:46:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:46:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:46:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:46:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:46:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:46:10.072 [DEBUG] [Thread-135609] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:46:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:45:28', tmtdew=2.03, humidity=87.68, cloud=0.0, wind=22.39, temperature=17.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:45:41.990', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:46:10.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:46:10.167 [DEBUG] [Thread-135612] [transport.py] [_log()] starting thread (client mode): 0xa2dc3a90
2026-02-11T20:46:10.167 [DEBUG] [Thread-135612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:46:10.187 [DEBUG] [Thread-135612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:46:10.187 [INFO] [Thread-135612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:10.195 [DEBUG] [Thread-135612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] client lang: <none>
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] server lang: <none>
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] kex follows: False
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] Compression: none
2026-02-11T20:46:10.196 [DEBUG] [Thread-135612] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:46:10.252 [DEBUG] [Thread-135612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:46:10.253 [DEBUG] [Thread-135612] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:46:10.253 [DEBUG] [Thread-135612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:46:10.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:46:10.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:46:10.308 [DEBUG] [Thread-135612] [transport.py] [_log()] userauth is OK
2026-02-11T20:46:10.308 [DEBUG] [Thread-135612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:46:10.309 [DEBUG] [Thread-135612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:46:10.309 [DEBUG] [Thread-135612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:46:10.309 [DEBUG] [Thread-135612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:46:10.331 [INFO] [Thread-135612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:46:10.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:46:10.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:46:11.157 [DEBUG] [Thread-135612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:46:11.157 [DEBUG] [Thread-135612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:46:11.205 [DEBUG] [Thread-135612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:46:11.206 [DEBUG] [Thread-135612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:46:11.215 [DEBUG] [Thread-135612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:46:11.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:46:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:46:11.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:46:11.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:46:11.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:46:11.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:46:11.251 [DEBUG] [Thread-135612] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:46:21.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:46:21.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:46:22.571 [DEBUG] [Thread-135614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:46:37.626 [DEBUG] [Thread-135615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:46:39.689 [DEBUG] [Thread-135616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:46:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:46:41.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:46:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:46:43.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 46, 4), 2.02, 87.78, 0.0, 21.97, 17.05, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:46:43.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:46:04
2026-02-11T20:46:43.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:46:43.997 [DEBUG] [Thread-135617] [transport.py] [_log()] starting thread (client mode): 0xa2d6b850
2026-02-11T20:46:43.997 [DEBUG] [Thread-135617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:46:44.018 [DEBUG] [Thread-135617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:46:44.018 [INFO] [Thread-135617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:46:44.021 [DEBUG] [Thread-135617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] client lang: <none>
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] server lang: <none>
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] kex follows: False
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] Compression: none
2026-02-11T20:46:44.022 [DEBUG] [Thread-135617] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:46:44.039 [DEBUG] [Thread-135617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:46:44.039 [DEBUG] [Thread-135617] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:46:44.040 [DEBUG] [Thread-135617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:46:44.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:46:44.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:46:44.042 [DEBUG] [Thread-135617] [transport.py] [_log()] userauth is OK
2026-02-11T20:46:44.042 [DEBUG] [Thread-135617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:46:44.043 [DEBUG] [Thread-135617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:46:44.043 [DEBUG] [Thread-135617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:46:44.043 [DEBUG] [Thread-135617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:46:44.069 [INFO] [Thread-135617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:46:44.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:46:44.725 [DEBUG] [Thread-135617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:46:44.725 [DEBUG] [Thread-135617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:46:44.726 [DEBUG] [Thread-135617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:46:44.766 [DEBUG] [Thread-135617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:46:44.767 [DEBUG] [Thread-135617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:46:44.770 [DEBUG] [Thread-135617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:46:44.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:46:44.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:46:44.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:46:44.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:46:44.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:46:44.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:46:44.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:46:44.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:46:44.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:46:44.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.782083 -999.00  +17.20  15.01     88  +15.20 1 3 1 3 1     0    0 0.57 -63.03 ----- 16.0 15.0 214.2 18.5 18.9 -3.8 18.7 -4.5 18.6 -4.2 18.9 -3.7
2026-02-11T20:46:44.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:46:44.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:46:44.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.782083
2026-02-11T20:46:44.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:46:44.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:46:44.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:46:44.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:46:44.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:46:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:46:04', tmtdew=2.02, humidity=87.78, cloud=0.0, wind=21.97, temperature=17.05, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:46:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:46:44.800 [DEBUG] [Thread-135617] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:46:44.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:46:44.895 [DEBUG] [Thread-135620] [transport.py] [_log()] starting thread (client mode): 0xa57c14e0
2026-02-11T20:46:44.895 [DEBUG] [Thread-135620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:46:44.909 [DEBUG] [Thread-135620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:46:44.910 [INFO] [Thread-135620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:46:44.917 [DEBUG] [Thread-135620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] client lang: <none>
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] server lang: <none>
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] kex follows: False
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] Compression: none
2026-02-11T20:46:44.918 [DEBUG] [Thread-135620] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:46:44.976 [DEBUG] [Thread-135620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:46:44.976 [DEBUG] [Thread-135620] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:46:44.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:46:44.977 [DEBUG] [Thread-135620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:46:44.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:46:45.032 [DEBUG] [Thread-135620] [transport.py] [_log()] userauth is OK
2026-02-11T20:46:45.033 [DEBUG] [Thread-135620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:46:45.033 [DEBUG] [Thread-135620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:46:45.033 [DEBUG] [Thread-135620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:46:45.033 [DEBUG] [Thread-135620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:46:45.051 [INFO] [Thread-135620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:46:45.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:46:45.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:46:45.886 [DEBUG] [Thread-135620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:46:45.886 [DEBUG] [Thread-135620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:46:45.935 [DEBUG] [Thread-135620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:46:45.935 [DEBUG] [Thread-135620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:46:45.944 [DEBUG] [Thread-135620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:46:45.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:46:45.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:46:45.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:46:45.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:46:45.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:46:45.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:46:45.981 [DEBUG] [Thread-135620] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:46:52.666 [DEBUG] [Thread-135622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:07.718 [DEBUG] [Thread-135623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:15.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:47:15.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:47:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:47:17.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 46, 41), 2.38, 85.85, 0.0, 28.37, 17.5, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:47:17.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:46:41
2026-02-11T20:47:18.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:47:18.391 [DEBUG] [Thread-135624] [transport.py] [_log()] starting thread (client mode): 0xa2d6b490
2026-02-11T20:47:18.391 [DEBUG] [Thread-135624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:47:18.410 [DEBUG] [Thread-135624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:47:18.410 [INFO] [Thread-135624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:47:18.413 [DEBUG] [Thread-135624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:47:18.414 [DEBUG] [Thread-135624] [transport.py] [_log()] client lang: <none>
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] server lang: <none>
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] kex follows: False
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] Compression: none
2026-02-11T20:47:18.415 [DEBUG] [Thread-135624] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:47:18.433 [DEBUG] [Thread-135624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:47:18.433 [DEBUG] [Thread-135624] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:47:18.434 [DEBUG] [Thread-135624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:47:18.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:47:18.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:47:18.477 [DEBUG] [Thread-135624] [transport.py] [_log()] userauth is OK
2026-02-11T20:47:18.477 [DEBUG] [Thread-135624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:47:18.477 [DEBUG] [Thread-135624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:47:18.477 [DEBUG] [Thread-135624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:47:18.477 [DEBUG] [Thread-135624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:47:18.514 [INFO] [Thread-135624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:47:18.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:47:19.122 [DEBUG] [Thread-135624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:47:19.123 [DEBUG] [Thread-135624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:47:19.123 [DEBUG] [Thread-135624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:47:19.163 [DEBUG] [Thread-135624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:47:19.164 [DEBUG] [Thread-135624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:47:19.166 [DEBUG] [Thread-135624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:47:19.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:47:19.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:47:19.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:47:19.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:47:19.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:47:19.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:47:19.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:47:19.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:47:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:47:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.782430 -999.00  +17.20  12.79     88  +15.20 1 3 1 3 1     0    0 0.35 -68.43 ----- 11.8 12.8 209.6 19.9 18.9 -4.6 18.7 -5.9 18.6 -5.4 18.9 -4.4
2026-02-11T20:47:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:47:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:47:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.782430
2026-02-11T20:47:19.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:47:19.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:47:19.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:47:19.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:47:19.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:47:19.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:46:41', tmtdew=2.38, humidity=85.85, cloud=0.0, wind=28.37, temperature=17.5, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:46:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:47:19.193 [DEBUG] [Thread-135624] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:47:19.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:47:19.291 [DEBUG] [Thread-135627] [transport.py] [_log()] starting thread (client mode): 0xa57e3010
2026-02-11T20:47:19.291 [DEBUG] [Thread-135627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:47:19.305 [DEBUG] [Thread-135627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:47:19.305 [INFO] [Thread-135627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:47:19.313 [DEBUG] [Thread-135627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:47:19.313 [DEBUG] [Thread-135627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:47:19.313 [DEBUG] [Thread-135627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:47:19.313 [DEBUG] [Thread-135627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:19.313 [DEBUG] [Thread-135627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:19.313 [DEBUG] [Thread-135627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] client lang: <none>
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] server lang: <none>
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] kex follows: False
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:47:19.314 [DEBUG] [Thread-135627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:47:19.315 [DEBUG] [Thread-135627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:47:19.315 [DEBUG] [Thread-135627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:47:19.315 [DEBUG] [Thread-135627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:47:19.315 [DEBUG] [Thread-135627] [transport.py] [_log()] Compression: none
2026-02-11T20:47:19.315 [DEBUG] [Thread-135627] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:47:19.372 [DEBUG] [Thread-135627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:47:19.373 [DEBUG] [Thread-135627] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:47:19.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:47:19.374 [DEBUG] [Thread-135627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:47:19.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:47:19.428 [DEBUG] [Thread-135627] [transport.py] [_log()] userauth is OK
2026-02-11T20:47:19.428 [DEBUG] [Thread-135627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:47:19.428 [DEBUG] [Thread-135627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:47:19.428 [DEBUG] [Thread-135627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:47:19.429 [DEBUG] [Thread-135627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:47:19.447 [INFO] [Thread-135627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:47:19.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:47:19.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:47:20.316 [DEBUG] [Thread-135627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:47:20.316 [DEBUG] [Thread-135627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:47:20.365 [DEBUG] [Thread-135627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:47:20.365 [DEBUG] [Thread-135627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:47:20.374 [DEBUG] [Thread-135627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:47:20.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:47:20.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:47:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:47:20.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:47:20.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:47:20.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:47:20.410 [DEBUG] [Thread-135627] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:47:21.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:21.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:22.751 [DEBUG] [Thread-135629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:37.790 [DEBUG] [Thread-135630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:39.756 [DEBUG] [Thread-135631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:47:50.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:47:50.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:47:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 47, 16), 1.92, 88.06, 0.0, 22.14, 17.03, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:47:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:47:16
2026-02-11T20:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:47:52.826 [DEBUG] [Thread-135632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:47:52.980 [DEBUG] [Thread-135633] [transport.py] [_log()] starting thread (client mode): 0xa57b0970
2026-02-11T20:47:52.980 [DEBUG] [Thread-135633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:47:53.001 [DEBUG] [Thread-135633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:47:53.001 [INFO] [Thread-135633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] client lang: <none>
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] server lang: <none>
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] kex follows: False
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] Compression: none
2026-02-11T20:47:53.004 [DEBUG] [Thread-135633] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:47:53.021 [DEBUG] [Thread-135633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:47:53.022 [DEBUG] [Thread-135633] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:47:53.022 [DEBUG] [Thread-135633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:47:53.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:47:53.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:47:53.024 [DEBUG] [Thread-135633] [transport.py] [_log()] userauth is OK
2026-02-11T20:47:53.024 [DEBUG] [Thread-135633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:47:53.024 [DEBUG] [Thread-135633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:47:53.024 [DEBUG] [Thread-135633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:47:53.025 [DEBUG] [Thread-135633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:47:53.048 [INFO] [Thread-135633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:47:53.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:47:53.659 [DEBUG] [Thread-135633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:47:53.659 [DEBUG] [Thread-135633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:47:53.660 [DEBUG] [Thread-135633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:47:53.700 [DEBUG] [Thread-135633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:47:53.701 [DEBUG] [Thread-135633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:47:53.704 [DEBUG] [Thread-135633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:47:53.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:47:53.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:47:53.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:47:53.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:47:53.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:47:53.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:47:53.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:47:53.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:47:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:47:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.783125 -999.00  +17.20  17.68     88  +15.20 1 3 1 3 1     0    0 0.31 -71.12 ----- 16.7 17.7 193.4 21.5 18.9 -6.6 18.7 -8.3 18.6 -8.9 18.9 -7.8
2026-02-11T20:47:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:47:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:47:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.783125
2026-02-11T20:47:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:47:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:47:53.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:47:53.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:47:53.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:47:53.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:47:16', tmtdew=1.92, humidity=88.06, cloud=0.0, wind=22.14, temperature=17.03, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:47:42.000', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:47:53.727 [DEBUG] [Thread-135633] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:47:53.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:47:53.820 [DEBUG] [Thread-135636] [transport.py] [_log()] starting thread (client mode): 0xa2d6a530
2026-02-11T20:47:53.821 [DEBUG] [Thread-135636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:47:53.835 [DEBUG] [Thread-135636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:47:53.835 [INFO] [Thread-135636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] client lang: <none>
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] server lang: <none>
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] kex follows: False
2026-02-11T20:47:53.843 [DEBUG] [Thread-135636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:47:53.844 [DEBUG] [Thread-135636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:47:53.844 [DEBUG] [Thread-135636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:47:53.844 [DEBUG] [Thread-135636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:47:53.844 [DEBUG] [Thread-135636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:47:53.844 [DEBUG] [Thread-135636] [transport.py] [_log()] Compression: none
2026-02-11T20:47:53.844 [DEBUG] [Thread-135636] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:47:53.899 [DEBUG] [Thread-135636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:47:53.900 [DEBUG] [Thread-135636] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:47:53.900 [DEBUG] [Thread-135636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:47:53.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:47:53.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:47:53.956 [DEBUG] [Thread-135636] [transport.py] [_log()] userauth is OK
2026-02-11T20:47:53.956 [DEBUG] [Thread-135636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:47:53.956 [DEBUG] [Thread-135636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:47:53.956 [DEBUG] [Thread-135636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:47:53.956 [DEBUG] [Thread-135636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:47:53.979 [INFO] [Thread-135636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:47:53.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:47:53.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:47:54.796 [DEBUG] [Thread-135636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:47:54.797 [DEBUG] [Thread-135636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:47:54.844 [DEBUG] [Thread-135636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:47:54.844 [DEBUG] [Thread-135636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:47:54.853 [DEBUG] [Thread-135636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:47:54.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:47:54.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')
2026-02-11T20:47:54.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:47:54.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:47:54.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:47:54.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:47:54.891 [DEBUG] [Thread-135636] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:48:07.856 [DEBUG] [Thread-135638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:48:21.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:48:21.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:48:22.905 [DEBUG] [Thread-135639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:48:24.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:48:24.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:48: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
2026-02-11T20:48:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 47, 52), 1.91, 88.61, 0.0, 18.88, 17.03, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:48:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:47:52
2026-02-11T20:48:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:48:27.328 [DEBUG] [Thread-135640] [transport.py] [_log()] starting thread (client mode): 0xa2d6b970
2026-02-11T20:48:27.329 [DEBUG] [Thread-135640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:48:27.348 [DEBUG] [Thread-135640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:48:27.349 [INFO] [Thread-135640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:48:27.352 [DEBUG] [Thread-135640] [transport.py] [_log()] client lang: <none>
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] server lang: <none>
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] kex follows: False
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] Compression: none
2026-02-11T20:48:27.353 [DEBUG] [Thread-135640] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:48:27.373 [DEBUG] [Thread-135640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:48:27.373 [DEBUG] [Thread-135640] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:48:27.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:48:27.374 [DEBUG] [Thread-135640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:48:27.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:48:27.376 [DEBUG] [Thread-135640] [transport.py] [_log()] userauth is OK
2026-02-11T20:48:27.376 [DEBUG] [Thread-135640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:48:27.376 [DEBUG] [Thread-135640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:48:27.376 [DEBUG] [Thread-135640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:48:27.376 [DEBUG] [Thread-135640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:48:27.408 [INFO] [Thread-135640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:48:27.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:48:28.009 [DEBUG] [Thread-135640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:48:28.009 [DEBUG] [Thread-135640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:48:28.010 [DEBUG] [Thread-135640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:48:28.050 [DEBUG] [Thread-135640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:48:28.051 [DEBUG] [Thread-135640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:48:28.054 [DEBUG] [Thread-135640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:48:28.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:48:28.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:48:28.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:48:28.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:48:28.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:48:28.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:48:28.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:48:28.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:48:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:48:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.783472 -999.00  +17.10  11.81     88  +15.20 1 3 1 3 1     0    0 0.31 -69.47 ...SW 14.6 11.8 221.6 20.2 18.9 -8.3 18.7 -8.7 18.6 -10.1 18.9 -9.7
2026-02-11T20:48:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:48:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:48:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.783472
2026-02-11T20:48:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:48:28.077 [DEBUG] [Thread-135640] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:48:28.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:48:28.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:48:28.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:48:28.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:48:28.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:47:52', tmtdew=1.91, humidity=88.61, cloud=0.0, wind=18.88, temperature=17.03, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:48:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:48:28.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:48:28.172 [DEBUG] [Thread-135643] [transport.py] [_log()] starting thread (client mode): 0xa57e3f40
2026-02-11T20:48:28.172 [DEBUG] [Thread-135643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:48:28.187 [DEBUG] [Thread-135643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:48:28.187 [INFO] [Thread-135643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] client lang: <none>
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] server lang: <none>
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] kex follows: False
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] Compression: none
2026-02-11T20:48:28.195 [DEBUG] [Thread-135643] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:48:28.251 [DEBUG] [Thread-135643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:48:28.251 [DEBUG] [Thread-135643] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:48:28.252 [DEBUG] [Thread-135643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:48:28.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:48:28.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:48:28.308 [DEBUG] [Thread-135643] [transport.py] [_log()] userauth is OK
2026-02-11T20:48:28.308 [DEBUG] [Thread-135643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:48:28.309 [DEBUG] [Thread-135643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:48:28.309 [DEBUG] [Thread-135643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:48:28.309 [DEBUG] [Thread-135643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:48:28.327 [INFO] [Thread-135643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:48:28.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:48:28.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:48:29.232 [DEBUG] [Thread-135643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:48:29.232 [DEBUG] [Thread-135643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:48:29.283 [DEBUG] [Thread-135643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:48:29.283 [DEBUG] [Thread-135643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:48:29.294 [DEBUG] [Thread-135643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:48:29.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:48:29.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:48:29.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:48:29.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:48:29.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:48:29.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:48:29.344 [DEBUG] [Thread-135643] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:48:37.941 [DEBUG] [Thread-135645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:48:39.828 [DEBUG] [Thread-135646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:48:52.979 [DEBUG] [Thread-135647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:48:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:48:59.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:48:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:49:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 48, 27), 1.9, 88.66, 0.0, 20.01, 17.07, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:49:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:48:27
2026-02-11T20:49:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:49:01.690 [DEBUG] [Thread-135648] [transport.py] [_log()] starting thread (client mode): 0xa2d059c0
2026-02-11T20:49:01.691 [DEBUG] [Thread-135648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:49:01.712 [DEBUG] [Thread-135648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:49:01.712 [INFO] [Thread-135648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:49:01.715 [DEBUG] [Thread-135648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] client lang: <none>
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] server lang: <none>
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] kex follows: False
2026-02-11T20:49:01.716 [DEBUG] [Thread-135648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:49:01.717 [DEBUG] [Thread-135648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:49:01.717 [DEBUG] [Thread-135648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:49:01.717 [DEBUG] [Thread-135648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:49:01.717 [DEBUG] [Thread-135648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:49:01.717 [DEBUG] [Thread-135648] [transport.py] [_log()] Compression: none
2026-02-11T20:49:01.717 [DEBUG] [Thread-135648] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:49:01.736 [DEBUG] [Thread-135648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:49:01.736 [DEBUG] [Thread-135648] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:49:01.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:49:01.737 [DEBUG] [Thread-135648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:49:01.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:49:01.740 [DEBUG] [Thread-135648] [transport.py] [_log()] userauth is OK
2026-02-11T20:49:01.740 [DEBUG] [Thread-135648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:49:01.740 [DEBUG] [Thread-135648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:49:01.740 [DEBUG] [Thread-135648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:49:01.741 [DEBUG] [Thread-135648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:49:01.776 [INFO] [Thread-135648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:49:01.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:49:02.371 [DEBUG] [Thread-135648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:49:02.371 [DEBUG] [Thread-135648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:49:02.372 [DEBUG] [Thread-135648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:49:02.412 [DEBUG] [Thread-135648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:49:02.413 [DEBUG] [Thread-135648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:49:02.416 [DEBUG] [Thread-135648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:49:02.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:49:02.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:49:02.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:49:02.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:49:02.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:49:02.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:49:02.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:49:02.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:49:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:49:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.783819 -999.00  +17.10  15.93     88  +15.20 1 3 1 3 1     0    0 0.37 -68.66 ...SW 15.3 15.9 194.0 20.7 18.9 -7.6 18.7 -7.7 18.6 -9.2 18.9 -9.4
2026-02-11T20:49:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:49:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:49:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.783819
2026-02-11T20:49:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:49:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:49:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:49:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:49:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:49:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:48:27', tmtdew=1.9, humidity=88.66, cloud=0.0, wind=20.01, temperature=17.07, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:48:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:49:02.442 [DEBUG] [Thread-135648] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:49:02.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:49:02.535 [DEBUG] [Thread-135651] [transport.py] [_log()] starting thread (client mode): 0xa2d06050
2026-02-11T20:49:02.535 [DEBUG] [Thread-135651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:49:02.554 [DEBUG] [Thread-135651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:49:02.554 [INFO] [Thread-135651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:49:02.563 [DEBUG] [Thread-135651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] client lang: <none>
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] server lang: <none>
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] kex follows: False
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:49:02.564 [DEBUG] [Thread-135651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:49:02.565 [DEBUG] [Thread-135651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:49:02.565 [DEBUG] [Thread-135651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:49:02.565 [DEBUG] [Thread-135651] [transport.py] [_log()] Compression: none
2026-02-11T20:49:02.565 [DEBUG] [Thread-135651] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:49:02.620 [DEBUG] [Thread-135651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:49:02.621 [DEBUG] [Thread-135651] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:49:02.621 [DEBUG] [Thread-135651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:49:02.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:49:02.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:49:02.677 [DEBUG] [Thread-135651] [transport.py] [_log()] userauth is OK
2026-02-11T20:49:02.677 [DEBUG] [Thread-135651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:49:02.678 [DEBUG] [Thread-135651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:49:02.678 [DEBUG] [Thread-135651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:49:02.678 [DEBUG] [Thread-135651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:49:02.696 [INFO] [Thread-135651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:49:02.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:49:02.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:49:03.575 [DEBUG] [Thread-135651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:49:03.576 [DEBUG] [Thread-135651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:49:03.625 [DEBUG] [Thread-135651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:49:03.625 [DEBUG] [Thread-135651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:49:03.638 [DEBUG] [Thread-135651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:49:03.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:49:03.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:49:03.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:49:03.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:49:03.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:49:03.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:49:03.675 [DEBUG] [Thread-135651] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:49:08.013 [DEBUG] [Thread-135653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:49:21.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:49:21.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:49:23.061 [DEBUG] [Thread-135654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:49:33.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:49:33.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:49:33.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:49:35.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 49, 3), 1.9, 88.63, 0.0, 19.22, 17.05, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:49:35.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:49:03
2026-02-11T20:49:35.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:49:35.915 [DEBUG] [Thread-135655] [transport.py] [_log()] starting thread (client mode): 0xa2d06b60
2026-02-11T20:49:35.915 [DEBUG] [Thread-135655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:49:35.937 [DEBUG] [Thread-135655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:49:35.937 [INFO] [Thread-135655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] client lang: <none>
2026-02-11T20:49:35.940 [DEBUG] [Thread-135655] [transport.py] [_log()] server lang: <none>
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] kex follows: False
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] Compression: none
2026-02-11T20:49:35.941 [DEBUG] [Thread-135655] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:49:35.963 [DEBUG] [Thread-135655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:49:35.963 [DEBUG] [Thread-135655] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:49:35.964 [DEBUG] [Thread-135655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:49:35.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:49:35.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:49:35.966 [DEBUG] [Thread-135655] [transport.py] [_log()] userauth is OK
2026-02-11T20:49:35.967 [DEBUG] [Thread-135655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:49:35.967 [DEBUG] [Thread-135655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:49:35.967 [DEBUG] [Thread-135655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:49:35.967 [DEBUG] [Thread-135655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:49:36.007 [INFO] [Thread-135655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:49:36.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:49:36.634 [DEBUG] [Thread-135655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:49:36.634 [DEBUG] [Thread-135655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:49:36.634 [DEBUG] [Thread-135655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:49:36.675 [DEBUG] [Thread-135655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:49:36.676 [DEBUG] [Thread-135655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:49:36.679 [DEBUG] [Thread-135655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:49:36.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:49:36.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:49:36.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:49:36.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:49:36.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:49:36.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:49:36.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:49:36.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:49:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:49:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.784166 -999.00  +17.10  12.07     88  +15.20 1 3 1 3 1     0    0 0.37 -66.90 ...SW 14.4 12.1 191.4 20.9 18.9 -5.8 18.6 -5.5 18.5 -6.7 18.9 -7.3
2026-02-11T20:49:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:49:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:49:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.784166
2026-02-11T20:49:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:49:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:49:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:49:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:49:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:49:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:49:03', tmtdew=1.9, humidity=88.63, cloud=0.0, wind=19.22, temperature=17.05, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:49:11.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:49:36.708 [DEBUG] [Thread-135655] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:49:36.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:49:36.805 [DEBUG] [Thread-135658] [transport.py] [_log()] starting thread (client mode): 0xa2d57100
2026-02-11T20:49:36.805 [DEBUG] [Thread-135658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:49:36.820 [DEBUG] [Thread-135658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:49:36.820 [INFO] [Thread-135658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:49:36.831 [DEBUG] [Thread-135658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:49:36.831 [DEBUG] [Thread-135658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] client lang: <none>
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] server lang: <none>
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] kex follows: False
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:49:36.832 [DEBUG] [Thread-135658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:49:36.833 [DEBUG] [Thread-135658] [transport.py] [_log()] Compression: none
2026-02-11T20:49:36.833 [DEBUG] [Thread-135658] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:49:36.888 [DEBUG] [Thread-135658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:49:36.889 [DEBUG] [Thread-135658] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:49:36.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:49:36.899 [DEBUG] [Thread-135658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:49:36.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:49:36.944 [DEBUG] [Thread-135658] [transport.py] [_log()] userauth is OK
2026-02-11T20:49:36.945 [DEBUG] [Thread-135658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:49:36.945 [DEBUG] [Thread-135658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:49:36.945 [DEBUG] [Thread-135658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:49:36.945 [DEBUG] [Thread-135658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:49:36.963 [INFO] [Thread-135658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:49:36.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:49:36.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:49:37.795 [DEBUG] [Thread-135658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:49:37.795 [DEBUG] [Thread-135658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:49:37.842 [DEBUG] [Thread-135658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:49:37.843 [DEBUG] [Thread-135658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:49:37.852 [DEBUG] [Thread-135658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:49:37.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:49:37.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:49:37.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:49:37.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:49:37.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:49:37.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:49:37.889 [DEBUG] [Thread-135658] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:49:38.098 [DEBUG] [Thread-135660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:49:39.901 [DEBUG] [Thread-135661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:49:53.143 [DEBUG] [Thread-135662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:50:07.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:50:07.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:50:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:50:08.174 [DEBUG] [Thread-135663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:50:10.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 49, 39), 2.3, 86.29, 0.0, 19.51, 17.53, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:50:10.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:49:39
2026-02-11T20:50:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:50:10.726 [DEBUG] [Thread-135664] [transport.py] [_log()] starting thread (client mode): 0xa57b12d0
2026-02-11T20:50:10.726 [DEBUG] [Thread-135664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:50:10.747 [DEBUG] [Thread-135664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:50:10.747 [INFO] [Thread-135664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] client lang: <none>
2026-02-11T20:50:10.750 [DEBUG] [Thread-135664] [transport.py] [_log()] server lang: <none>
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] kex follows: False
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] Compression: none
2026-02-11T20:50:10.751 [DEBUG] [Thread-135664] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:50:10.769 [DEBUG] [Thread-135664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:50:10.769 [DEBUG] [Thread-135664] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:50:10.770 [DEBUG] [Thread-135664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:50:10.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:50:10.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:50:10.771 [DEBUG] [Thread-135664] [transport.py] [_log()] userauth is OK
2026-02-11T20:50:10.772 [DEBUG] [Thread-135664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:50:10.772 [DEBUG] [Thread-135664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:50:10.772 [DEBUG] [Thread-135664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:50:10.772 [DEBUG] [Thread-135664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:50:10.796 [INFO] [Thread-135664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:50:10.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:50:11.553 [DEBUG] [Thread-135664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:50:11.553 [DEBUG] [Thread-135664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:50:11.554 [DEBUG] [Thread-135664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:50:11.595 [DEBUG] [Thread-135664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:50:11.595 [DEBUG] [Thread-135664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:50:11.597 [DEBUG] [Thread-135664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:50:11.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:50:11.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:50:11.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:50:11.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:50:11.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:50:11.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:50:11.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:50:11.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:50:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:50:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.784514 -999.00  +17.20   9.13     88  +15.20 1 3 1 3 1     0    0 0.46 -64.22 Z..SW 12.4 9.1 183.2 12.8 18.9 -4.0 18.7 -3.4 18.6 -3.6 18.9 -4.2
2026-02-11T20:50:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:50:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:50:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.784514
2026-02-11T20:50:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:50:11.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:50:11.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:50:11.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:50:11.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:50:11.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:49:39', tmtdew=2.3, humidity=86.29, cloud=0.0, wind=19.51, temperature=17.53, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:49:42.010', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5184999999999995, nan, nan, nan, 1.1332500000000012, nan, nan, nan, 0.72675, nan, nan, 0.6870000000000012, 0.43350000000000044, nan, nan], zp_timestamp='2026-02-11T18:42:00')
2026-02-11T20:50:11.620 [DEBUG] [Thread-135664] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:50:11.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:50:11.717 [DEBUG] [Thread-135667] [transport.py] [_log()] starting thread (client mode): 0xa2d56710
2026-02-11T20:50:11.717 [DEBUG] [Thread-135667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:50:11.732 [DEBUG] [Thread-135667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:50:11.732 [INFO] [Thread-135667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:50:11.739 [DEBUG] [Thread-135667] [transport.py] [_log()] client lang: <none>
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] server lang: <none>
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] kex follows: False
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] Compression: none
2026-02-11T20:50:11.740 [DEBUG] [Thread-135667] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:50:11.795 [DEBUG] [Thread-135667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:50:11.795 [DEBUG] [Thread-135667] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:50:11.796 [DEBUG] [Thread-135667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:50:11.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:50:11.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:50:11.852 [DEBUG] [Thread-135667] [transport.py] [_log()] userauth is OK
2026-02-11T20:50:11.852 [DEBUG] [Thread-135667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:50:11.852 [DEBUG] [Thread-135667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:50:11.852 [DEBUG] [Thread-135667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:50:11.852 [DEBUG] [Thread-135667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:50:11.874 [INFO] [Thread-135667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:50:11.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:50:11.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:50:12.695 [DEBUG] [Thread-135667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:50:12.695 [DEBUG] [Thread-135667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:50:12.743 [DEBUG] [Thread-135667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:50:12.743 [DEBUG] [Thread-135667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:50:12.752 [DEBUG] [Thread-135667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:50:12.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:50:12.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:50:12.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:50:12.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:50:12.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:50:12.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:50:12.787 [DEBUG] [Thread-135667] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:50:21.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:50:21.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:50:23.208 [DEBUG] [Thread-135669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:50:38.259 [DEBUG] [Thread-135670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:50:39.976 [DEBUG] [Thread-135671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:50:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:50:42.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:50:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:50:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 50, 14), 1.85, 88.63, 0.0, 19.02, 17.03, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:50:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:50:14
2026-02-11T20:50:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:50:45.174 [DEBUG] [Thread-135672] [transport.py] [_log()] starting thread (client mode): 0xa2d5e110
2026-02-11T20:50:45.174 [DEBUG] [Thread-135672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:50:45.194 [DEBUG] [Thread-135672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:50:45.194 [INFO] [Thread-135672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] client lang: <none>
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] server lang: <none>
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] kex follows: False
2026-02-11T20:50:45.197 [DEBUG] [Thread-135672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:50:45.198 [DEBUG] [Thread-135672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:50:45.198 [DEBUG] [Thread-135672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:50:45.198 [DEBUG] [Thread-135672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:50:45.198 [DEBUG] [Thread-135672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:50:45.198 [DEBUG] [Thread-135672] [transport.py] [_log()] Compression: none
2026-02-11T20:50:45.198 [DEBUG] [Thread-135672] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:50:45.216 [DEBUG] [Thread-135672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:50:45.216 [DEBUG] [Thread-135672] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:50:45.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:50:45.218 [DEBUG] [Thread-135672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:50:45.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:50:45.219 [DEBUG] [Thread-135672] [transport.py] [_log()] userauth is OK
2026-02-11T20:50:45.220 [DEBUG] [Thread-135672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:50:45.220 [DEBUG] [Thread-135672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:50:45.220 [DEBUG] [Thread-135672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:50:45.220 [DEBUG] [Thread-135672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:50:45.243 [INFO] [Thread-135672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:50:45.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:50:45.891 [DEBUG] [Thread-135672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:50:45.891 [DEBUG] [Thread-135672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:50:45.891 [DEBUG] [Thread-135672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:50:45.932 [DEBUG] [Thread-135672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:50:45.933 [DEBUG] [Thread-135672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:50:45.936 [DEBUG] [Thread-135672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:50:45.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:50:45.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:50:45.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:50:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:50:45.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:50:45.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:50:45.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:50:45.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:50:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:50:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.784861 -999.00  +17.20  13.24     88  +15.20 1 3 1 3 1     0    0 0.70 -55.44 Z..SW 10.3 13.2 198.6 21.1 18.9 -3.3 18.8 -3.2 18.6 -3.1 18.9 -3.1
2026-02-11T20:50:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:50:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:50:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.784861
2026-02-11T20:50:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:50:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:50:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:50:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:50:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:50:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:50:14', tmtdew=1.85, humidity=88.63, cloud=0.0, wind=19.02, temperature=17.03, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:50:11.990', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:50:45.962 [DEBUG] [Thread-135672] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:50:46.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:50:46.064 [DEBUG] [Thread-135675] [transport.py] [_log()] starting thread (client mode): 0xa2d689a0
2026-02-11T20:50:46.065 [DEBUG] [Thread-135675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:50:46.079 [DEBUG] [Thread-135675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:50:46.079 [INFO] [Thread-135675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:50:46.086 [DEBUG] [Thread-135675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] client lang: <none>
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] server lang: <none>
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] kex follows: False
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:50:46.087 [DEBUG] [Thread-135675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:50:46.088 [DEBUG] [Thread-135675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:50:46.088 [DEBUG] [Thread-135675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:50:46.088 [DEBUG] [Thread-135675] [transport.py] [_log()] Compression: none
2026-02-11T20:50:46.088 [DEBUG] [Thread-135675] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:50:46.148 [DEBUG] [Thread-135675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:50:46.149 [DEBUG] [Thread-135675] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:50:46.149 [DEBUG] [Thread-135675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:50:46.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:50:46.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:50:46.204 [DEBUG] [Thread-135675] [transport.py] [_log()] userauth is OK
2026-02-11T20:50:46.204 [DEBUG] [Thread-135675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:50:46.205 [DEBUG] [Thread-135675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:50:46.205 [DEBUG] [Thread-135675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:50:46.205 [DEBUG] [Thread-135675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:50:46.223 [INFO] [Thread-135675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:50:46.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:50:46.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:50:47.107 [DEBUG] [Thread-135675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:50:47.107 [DEBUG] [Thread-135675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:50:47.155 [DEBUG] [Thread-135675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:50:47.155 [DEBUG] [Thread-135675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:50:47.163 [DEBUG] [Thread-135675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:50:47.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:50:47.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')
2026-02-11T20:50:47.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:50:47.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:50:47.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:50:47.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:50:47.195 [DEBUG] [Thread-135675] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:50:53.295 [DEBUG] [Thread-135677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:08.349 [DEBUG] [Thread-135678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:51:17.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:51:17.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:51:19.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 50, 50), 1.84, 88.71, 0.0, 19.66, 17.02, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:51:19.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:50:50
2026-02-11T20:51:19.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:51:19.526 [DEBUG] [Thread-135679] [transport.py] [_log()] starting thread (client mode): 0xa2d6a200
2026-02-11T20:51:19.526 [DEBUG] [Thread-135679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:51:19.546 [DEBUG] [Thread-135679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:51:19.546 [INFO] [Thread-135679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:51:19.549 [DEBUG] [Thread-135679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:51:19.549 [DEBUG] [Thread-135679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:51:19.549 [DEBUG] [Thread-135679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:51:19.549 [DEBUG] [Thread-135679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] client lang: <none>
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] server lang: <none>
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] kex follows: False
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] Compression: none
2026-02-11T20:51:19.550 [DEBUG] [Thread-135679] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:51:19.568 [DEBUG] [Thread-135679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:51:19.569 [DEBUG] [Thread-135679] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:51:19.569 [DEBUG] [Thread-135679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:51:19.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:51:19.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:51:19.571 [DEBUG] [Thread-135679] [transport.py] [_log()] userauth is OK
2026-02-11T20:51:19.571 [DEBUG] [Thread-135679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:51:19.572 [DEBUG] [Thread-135679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:51:19.572 [DEBUG] [Thread-135679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:51:19.572 [DEBUG] [Thread-135679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:51:19.604 [INFO] [Thread-135679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:51:19.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:51:20.253 [DEBUG] [Thread-135679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:51:20.253 [DEBUG] [Thread-135679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:51:20.254 [DEBUG] [Thread-135679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:51:20.293 [DEBUG] [Thread-135679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:51:20.293 [DEBUG] [Thread-135679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:51:20.296 [DEBUG] [Thread-135679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:51:20.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:51:20.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:51:20.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:51:20.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:51:20.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:51:20.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:51:20.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:51:20.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:51:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:51:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.785208 -999.00  +17.20  19.60     88  +15.20 1 3 1 3 1     0    0 0.71 -53.66 .N.sW 13.8 19.6 197.6 22.5 19.0 -3.4 18.7 -2.9 18.6 -3.1 18.9 -3.5
2026-02-11T20:51:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:51:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:51:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.785208
2026-02-11T20:51:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:51:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:51:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:51:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:51:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:51:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:50:50', tmtdew=1.84, humidity=88.71, cloud=0.0, wind=19.66, temperature=17.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:50:41.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:51:20.321 [DEBUG] [Thread-135679] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:51:20.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:51:20.418 [DEBUG] [Thread-135682] [transport.py] [_log()] starting thread (client mode): 0x9eb079d0
2026-02-11T20:51:20.419 [DEBUG] [Thread-135682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:51:20.433 [DEBUG] [Thread-135682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:51:20.433 [INFO] [Thread-135682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:51:20.441 [DEBUG] [Thread-135682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:51:20.441 [DEBUG] [Thread-135682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:51:20.442 [DEBUG] [Thread-135682] [transport.py] [_log()] client lang: <none>
2026-02-11T20:51:20.443 [DEBUG] [Thread-135682] [transport.py] [_log()] server lang: <none>
2026-02-11T20:51:20.443 [DEBUG] [Thread-135682] [transport.py] [_log()] kex follows: False
2026-02-11T20:51:20.443 [DEBUG] [Thread-135682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:51:20.443 [DEBUG] [Thread-135682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:51:20.443 [DEBUG] [Thread-135682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:51:20.443 [DEBUG] [Thread-135682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:51:20.443 [DEBUG] [Thread-135682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:51:20.444 [DEBUG] [Thread-135682] [transport.py] [_log()] Compression: none
2026-02-11T20:51:20.444 [DEBUG] [Thread-135682] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:51:20.501 [DEBUG] [Thread-135682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:51:20.502 [DEBUG] [Thread-135682] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:51:20.502 [DEBUG] [Thread-135682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:51:20.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:51:20.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:51:20.561 [DEBUG] [Thread-135682] [transport.py] [_log()] userauth is OK
2026-02-11T20:51:20.561 [DEBUG] [Thread-135682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:51:20.561 [DEBUG] [Thread-135682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:51:20.561 [DEBUG] [Thread-135682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:51:20.561 [DEBUG] [Thread-135682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:51:20.579 [INFO] [Thread-135682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:51:20.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:51:20.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:51:21.411 [DEBUG] [Thread-135682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:51:21.411 [DEBUG] [Thread-135682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:51:21.459 [DEBUG] [Thread-135682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:51:21.459 [DEBUG] [Thread-135682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:51:21.469 [DEBUG] [Thread-135682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:51:21.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:51:21.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:51:21.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:51:21.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:51:21.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:51:21.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:51:21.511 [DEBUG] [Thread-135682] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:51:22.052 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:22.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:23.389 [DEBUG] [Thread-135684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:38.447 [DEBUG] [Thread-135685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:40.064 [DEBUG] [Thread-135686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:51:51.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:51:51.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:51:53.490 [DEBUG] [Thread-135687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:51:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 51, 26), 1.83, 88.78, 0.0, 19.11, 17.02, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:51:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:51:26
2026-02-11T20:51:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:51:54.224 [DEBUG] [Thread-135688] [transport.py] [_log()] starting thread (client mode): 0xa57b23e0
2026-02-11T20:51:54.224 [DEBUG] [Thread-135688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:51:54.244 [DEBUG] [Thread-135688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:51:54.244 [INFO] [Thread-135688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] client lang: <none>
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] server lang: <none>
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] kex follows: False
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:51:54.248 [DEBUG] [Thread-135688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:51:54.249 [DEBUG] [Thread-135688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:51:54.249 [DEBUG] [Thread-135688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:51:54.249 [DEBUG] [Thread-135688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:51:54.249 [DEBUG] [Thread-135688] [transport.py] [_log()] Compression: none
2026-02-11T20:51:54.249 [DEBUG] [Thread-135688] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:51:54.266 [DEBUG] [Thread-135688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:51:54.266 [DEBUG] [Thread-135688] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:51:54.267 [DEBUG] [Thread-135688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:51:54.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:51:54.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:51:54.269 [DEBUG] [Thread-135688] [transport.py] [_log()] userauth is OK
2026-02-11T20:51:54.269 [DEBUG] [Thread-135688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:51:54.269 [DEBUG] [Thread-135688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:51:54.269 [DEBUG] [Thread-135688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:51:54.269 [DEBUG] [Thread-135688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:51:54.291 [INFO] [Thread-135688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:51:54.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:51:54.893 [DEBUG] [Thread-135688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:51:54.893 [DEBUG] [Thread-135688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:51:54.894 [DEBUG] [Thread-135688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:51:54.934 [DEBUG] [Thread-135688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:51:54.935 [DEBUG] [Thread-135688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:51:54.938 [DEBUG] [Thread-135688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:51:54.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:51:54.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:51:54.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:51:54.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:51:54.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:51:54.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:51:54.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:51:54.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:51:54.971 [DEBUG] [Thread-135688] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:51:54.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:51:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.785902 -999.00  +17.20  15.83     88  +15.20 1 3 1 3 1     0    0 0.77 -49.92 ----- 16.9 15.8 196.0 21.5 18.9 -3.3 18.7 -3.1 18.6 -2.8 18.9 -3.1
2026-02-11T20:51:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:51:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:51:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.785902
2026-02-11T20:51:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:51:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:51:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:51:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:51:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:51:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:51:26', tmtdew=1.83, humidity=88.78, cloud=0.0, wind=19.11, temperature=17.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:51:41.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:51:55.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:51:55.070 [DEBUG] [Thread-135691] [transport.py] [_log()] starting thread (client mode): 0x9eb051e0
2026-02-11T20:51:55.071 [DEBUG] [Thread-135691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:51:55.085 [DEBUG] [Thread-135691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:51:55.085 [INFO] [Thread-135691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:51:55.093 [DEBUG] [Thread-135691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] client lang: <none>
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] server lang: <none>
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] kex follows: False
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] Compression: none
2026-02-11T20:51:55.094 [DEBUG] [Thread-135691] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:51:55.152 [DEBUG] [Thread-135691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:51:55.153 [DEBUG] [Thread-135691] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:51:55.153 [DEBUG] [Thread-135691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:51:55.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:51:55.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:51:55.208 [DEBUG] [Thread-135691] [transport.py] [_log()] userauth is OK
2026-02-11T20:51:55.208 [DEBUG] [Thread-135691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:51:55.209 [DEBUG] [Thread-135691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:51:55.209 [DEBUG] [Thread-135691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:51:55.209 [DEBUG] [Thread-135691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:51:55.234 [INFO] [Thread-135691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:51:55.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:51:55.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:51:56.054 [DEBUG] [Thread-135691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:51:56.055 [DEBUG] [Thread-135691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:51:56.102 [DEBUG] [Thread-135691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:51:56.103 [DEBUG] [Thread-135691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:51:56.112 [DEBUG] [Thread-135691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:51:56.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:51:56.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:51:56.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:51:56.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:51:56.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:51:56.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:51:56.148 [DEBUG] [Thread-135691] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:52:08.529 [DEBUG] [Thread-135693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:52:22.257 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:52:22.258 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:52:23.582 [DEBUG] [Thread-135694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:52:26.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:52:26.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:52:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:52:28.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 52, 2), 1.82, 88.83, 0.0, 20.66, 17.03, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:52:28.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:52:02
2026-02-11T20:52:28.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:52:29.135 [DEBUG] [Thread-135695] [transport.py] [_log()] starting thread (client mode): 0xa2d043d0
2026-02-11T20:52:29.135 [DEBUG] [Thread-135695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:52:29.155 [DEBUG] [Thread-135695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:52:29.155 [INFO] [Thread-135695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:52:29.158 [DEBUG] [Thread-135695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] client lang: <none>
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] server lang: <none>
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] kex follows: False
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:52:29.159 [DEBUG] [Thread-135695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:52:29.160 [DEBUG] [Thread-135695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:52:29.160 [DEBUG] [Thread-135695] [transport.py] [_log()] Compression: none
2026-02-11T20:52:29.160 [DEBUG] [Thread-135695] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:52:29.179 [DEBUG] [Thread-135695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:52:29.179 [DEBUG] [Thread-135695] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:52:29.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:52:29.180 [DEBUG] [Thread-135695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:52:29.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:52:29.221 [DEBUG] [Thread-135695] [transport.py] [_log()] userauth is OK
2026-02-11T20:52:29.221 [DEBUG] [Thread-135695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:52:29.221 [DEBUG] [Thread-135695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:52:29.221 [DEBUG] [Thread-135695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:52:29.222 [DEBUG] [Thread-135695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:52:29.259 [INFO] [Thread-135695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:52:29.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:52:29.905 [DEBUG] [Thread-135695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:52:29.905 [DEBUG] [Thread-135695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:52:29.906 [DEBUG] [Thread-135695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:52:29.946 [DEBUG] [Thread-135695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:52:29.946 [DEBUG] [Thread-135695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:52:29.950 [DEBUG] [Thread-135695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:52:29.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:52:29.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:52:29.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:52:29.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:52:29.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:52:29.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:52:29.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:52:29.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:52:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:52:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.786250 -999.00  +17.20  13.33     88  +15.20 1 3 1 3 1     0    0 0.92 -47.08 ----- 15.2 13.3 206.4 19.7 18.9 -3.1 18.8 -3.5 18.6 -3.0 19.0 -2.9
2026-02-11T20:52:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:52:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:52:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.786250
2026-02-11T20:52:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:52:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:52:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:52:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:52:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:52:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:52:02', tmtdew=1.82, humidity=88.83, cloud=0.0, wind=20.66, temperature=17.03, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:52:12.000', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:52:29.978 [DEBUG] [Thread-135695] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:52:30.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:52:30.074 [DEBUG] [Thread-135698] [transport.py] [_log()] starting thread (client mode): 0xa2d04520
2026-02-11T20:52:30.074 [DEBUG] [Thread-135698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:52:30.089 [DEBUG] [Thread-135698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:52:30.090 [INFO] [Thread-135698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:52:30.097 [DEBUG] [Thread-135698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:52:30.098 [DEBUG] [Thread-135698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] client lang: <none>
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] server lang: <none>
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] kex follows: False
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] Compression: none
2026-02-11T20:52:30.099 [DEBUG] [Thread-135698] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:52:30.157 [DEBUG] [Thread-135698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:52:30.159 [DEBUG] [Thread-135698] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:52:30.160 [DEBUG] [Thread-135698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:52:30.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:52:30.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:52:30.217 [DEBUG] [Thread-135698] [transport.py] [_log()] userauth is OK
2026-02-11T20:52:30.217 [DEBUG] [Thread-135698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:52:30.217 [DEBUG] [Thread-135698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:52:30.217 [DEBUG] [Thread-135698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:52:30.217 [DEBUG] [Thread-135698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:52:30.235 [INFO] [Thread-135698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:52:30.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:52:30.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:52:31.117 [DEBUG] [Thread-135698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:52:31.117 [DEBUG] [Thread-135698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:52:31.166 [DEBUG] [Thread-135698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:52:31.167 [DEBUG] [Thread-135698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:52:31.176 [DEBUG] [Thread-135698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:52:31.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:52:31.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:52:31.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:52:31.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:52:31.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:52:31.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:52:31.212 [DEBUG] [Thread-135698] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:52:38.622 [DEBUG] [Thread-135700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:52:40.144 [DEBUG] [Thread-135701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:52:53.671 [DEBUG] [Thread-135702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:53:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:53:01.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:53:01.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:53:03.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 52, 37), 2.24, 86.62, 0.0, 28.76, 17.43, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:53:03.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:52:37
2026-02-11T20:53:03.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:53:03.520 [DEBUG] [Thread-135703] [transport.py] [_log()] starting thread (client mode): 0xa2d5ffd0
2026-02-11T20:53:03.520 [DEBUG] [Thread-135703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:53:03.541 [DEBUG] [Thread-135703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:53:03.542 [INFO] [Thread-135703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] client lang: <none>
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] server lang: <none>
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] kex follows: False
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] Compression: none
2026-02-11T20:53:03.545 [DEBUG] [Thread-135703] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:53:03.564 [DEBUG] [Thread-135703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:53:03.564 [DEBUG] [Thread-135703] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:53:03.565 [DEBUG] [Thread-135703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:53:03.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:53:03.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:53:03.567 [DEBUG] [Thread-135703] [transport.py] [_log()] userauth is OK
2026-02-11T20:53:03.567 [DEBUG] [Thread-135703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:53:03.567 [DEBUG] [Thread-135703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:53:03.567 [DEBUG] [Thread-135703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:53:03.567 [DEBUG] [Thread-135703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:53:03.585 [INFO] [Thread-135703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:53:03.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:53:04.224 [DEBUG] [Thread-135703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:53:04.224 [DEBUG] [Thread-135703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:53:04.224 [DEBUG] [Thread-135703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:53:04.264 [DEBUG] [Thread-135703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:53:04.265 [DEBUG] [Thread-135703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:53:04.268 [DEBUG] [Thread-135703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:53:04.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:53:04.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:53:04.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:53:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:53:04.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:53:04.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:53:04.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:53:04.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:53:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:53:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.786597 -999.00  +17.00  25.50     88  +15.10 1 3 1 3 1     0    0 0.87 -46.74 ----- 19.9 25.5 196.6 29.0 18.9 -3.4 18.7 -3.5 18.6 -3.1 18.9 -3.3
2026-02-11T20:53:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:53:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:53:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.786597
2026-02-11T20:53:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:53:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:53:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:53:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:53:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:53:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:52:37', tmtdew=2.24, humidity=86.62, cloud=0.0, wind=28.76, temperature=17.43, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:52:41.981', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:53:04.294 [DEBUG] [Thread-135703] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:53:04.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:53:04.386 [DEBUG] [Thread-135706] [transport.py] [_log()] starting thread (client mode): 0x9eb068f0
2026-02-11T20:53:04.387 [DEBUG] [Thread-135706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:53:04.401 [DEBUG] [Thread-135706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:53:04.401 [INFO] [Thread-135706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] client lang: <none>
2026-02-11T20:53:04.409 [DEBUG] [Thread-135706] [transport.py] [_log()] server lang: <none>
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] kex follows: False
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] Compression: none
2026-02-11T20:53:04.410 [DEBUG] [Thread-135706] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:53:04.469 [DEBUG] [Thread-135706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:53:04.469 [DEBUG] [Thread-135706] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:53:04.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:53:04.471 [DEBUG] [Thread-135706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:53:04.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:53:04.526 [DEBUG] [Thread-135706] [transport.py] [_log()] userauth is OK
2026-02-11T20:53:04.526 [DEBUG] [Thread-135706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:53:04.526 [DEBUG] [Thread-135706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:53:04.527 [DEBUG] [Thread-135706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:53:04.527 [DEBUG] [Thread-135706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:53:04.545 [INFO] [Thread-135706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:53:04.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:53:04.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:53:05.378 [DEBUG] [Thread-135706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:53:05.378 [DEBUG] [Thread-135706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:53:05.425 [DEBUG] [Thread-135706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:53:05.426 [DEBUG] [Thread-135706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:53:05.435 [DEBUG] [Thread-135706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:53:05.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:53:05.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:53:05.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:53:05.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:53:05.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:53:05.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:53:05.472 [DEBUG] [Thread-135706] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:53:08.711 [DEBUG] [Thread-135708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:53:22.461 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:53:22.462 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:53:23.768 [DEBUG] [Thread-135709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:53:35.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:53:35.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:53:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:53:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 53, 13), 1.77, 89.28, 0.0, 25.76, 16.88, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:53:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:53:13
2026-02-11T20:53:37.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:53:38.102 [DEBUG] [Thread-135710] [transport.py] [_log()] starting thread (client mode): 0xa5758940
2026-02-11T20:53:38.102 [DEBUG] [Thread-135710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:53:38.117 [DEBUG] [Thread-135710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:53:38.117 [INFO] [Thread-135710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] client lang: <none>
2026-02-11T20:53:38.120 [DEBUG] [Thread-135710] [transport.py] [_log()] server lang: <none>
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] kex follows: False
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] Compression: none
2026-02-11T20:53:38.121 [DEBUG] [Thread-135710] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:53:38.139 [DEBUG] [Thread-135710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:53:38.140 [DEBUG] [Thread-135710] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:53:38.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:53:38.141 [DEBUG] [Thread-135710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:53:38.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:53:38.143 [DEBUG] [Thread-135710] [transport.py] [_log()] userauth is OK
2026-02-11T20:53:38.143 [DEBUG] [Thread-135710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:53:38.143 [DEBUG] [Thread-135710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:53:38.143 [DEBUG] [Thread-135710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:53:38.143 [DEBUG] [Thread-135710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:53:38.162 [INFO] [Thread-135710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:53:38.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:53:38.802 [DEBUG] [Thread-135710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:53:38.802 [DEBUG] [Thread-135710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:53:38.802 [DEBUG] [Thread-135710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:53:38.807 [DEBUG] [Thread-135712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:53:38.843 [DEBUG] [Thread-135710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:53:38.844 [DEBUG] [Thread-135710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:53:38.847 [DEBUG] [Thread-135710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:53:38.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:53:38.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:53:38.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:53:38.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:53:38.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:53:38.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:53:38.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:53:38.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:53:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:53:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.786944 -999.00  +17.00  15.16     88  +15.10 1 3 1 3 1     0    0 0.87 -45.20 ----- 19.9 15.2 203.7 22.5 18.9 -3.0 18.7 -3.1 18.6 -2.7 18.9 -2.9
2026-02-11T20:53:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:53:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:53:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.786944
2026-02-11T20:53:38.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:53:38.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:53:38.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:53:38.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:53:38.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:53:38.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:53:13', tmtdew=1.77, humidity=89.28, cloud=0.0, wind=25.76, temperature=16.88, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:53:11.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:53:38.876 [DEBUG] [Thread-135710] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:53:38.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:53:38.973 [DEBUG] [Thread-135714] [transport.py] [_log()] starting thread (client mode): 0xa57d54e0
2026-02-11T20:53:38.973 [DEBUG] [Thread-135714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:53:38.993 [DEBUG] [Thread-135714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:53:38.994 [INFO] [Thread-135714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:53:39.001 [DEBUG] [Thread-135714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] client lang: <none>
2026-02-11T20:53:39.002 [DEBUG] [Thread-135714] [transport.py] [_log()] server lang: <none>
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] kex follows: False
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] Compression: none
2026-02-11T20:53:39.003 [DEBUG] [Thread-135714] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:53:39.060 [DEBUG] [Thread-135714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:53:39.060 [DEBUG] [Thread-135714] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:53:39.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:53:39.061 [DEBUG] [Thread-135714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:53:39.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:53:39.117 [DEBUG] [Thread-135714] [transport.py] [_log()] userauth is OK
2026-02-11T20:53:39.117 [DEBUG] [Thread-135714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:53:39.117 [DEBUG] [Thread-135714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:53:39.117 [DEBUG] [Thread-135714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:53:39.117 [DEBUG] [Thread-135714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:53:39.136 [INFO] [Thread-135714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:53:39.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:53:39.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:53:39.956 [DEBUG] [Thread-135714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:53:39.956 [DEBUG] [Thread-135714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:53:40.005 [DEBUG] [Thread-135714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:53:40.005 [DEBUG] [Thread-135714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:53:40.014 [DEBUG] [Thread-135714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:53:40.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:53:40.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:53:40.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:53:40.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:53:40.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:53:40.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:53:40.050 [DEBUG] [Thread-135714] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:53:40.219 [DEBUG] [Thread-135716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:53:53.843 [DEBUG] [Thread-135717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:54:08.893 [DEBUG] [Thread-135718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:54:10.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:54:10.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:54:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:54:12.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 53, 48), 1.76, 89.34, 0.0, 23.73, 16.87, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:54:12.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:53:48
2026-02-11T20:54:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:54:12.962 [DEBUG] [Thread-135719] [transport.py] [_log()] starting thread (client mode): 0xa2d5c5b0
2026-02-11T20:54:12.962 [DEBUG] [Thread-135719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:54:12.982 [DEBUG] [Thread-135719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:54:12.982 [INFO] [Thread-135719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:54:12.985 [DEBUG] [Thread-135719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] client lang: <none>
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] server lang: <none>
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] kex follows: False
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] Compression: none
2026-02-11T20:54:12.986 [DEBUG] [Thread-135719] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:54:13.003 [DEBUG] [Thread-135719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:54:13.003 [DEBUG] [Thread-135719] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:54:13.004 [DEBUG] [Thread-135719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:54:13.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:54:13.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:54:13.006 [DEBUG] [Thread-135719] [transport.py] [_log()] userauth is OK
2026-02-11T20:54:13.006 [DEBUG] [Thread-135719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:54:13.006 [DEBUG] [Thread-135719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:54:13.006 [DEBUG] [Thread-135719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:54:13.006 [DEBUG] [Thread-135719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:54:13.029 [INFO] [Thread-135719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:54:13.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:54:13.680 [DEBUG] [Thread-135719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:54:13.680 [DEBUG] [Thread-135719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:54:13.680 [DEBUG] [Thread-135719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:54:13.720 [DEBUG] [Thread-135719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:54:13.721 [DEBUG] [Thread-135719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:54:13.724 [DEBUG] [Thread-135719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:54:13.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:54:13.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:54:13.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:54:13.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:54:13.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:54:13.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:54:13.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:54:13.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:54:13.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:54:13.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.787291 -999.00  +17.00  16.32     88  +15.10 1 3 1 3 1     0    0 0.97 -42.23 ----- 19.3 16.3 202.8 25.3 18.9 -3.0 18.7 -2.7 18.6 -2.8 18.9 -2.9
2026-02-11T20:54:13.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:54:13.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:54:13.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.787291
2026-02-11T20:54:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:54:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:54:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:54:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:54:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:54:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:53:48', tmtdew=1.76, humidity=89.34, cloud=0.0, wind=23.73, temperature=16.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:53:41.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:54:13.752 [DEBUG] [Thread-135719] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:54:13.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:54:13.852 [DEBUG] [Thread-135722] [transport.py] [_log()] starting thread (client mode): 0xa5759b40
2026-02-11T20:54:13.852 [DEBUG] [Thread-135722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:54:13.867 [DEBUG] [Thread-135722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:54:13.867 [INFO] [Thread-135722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:13.874 [DEBUG] [Thread-135722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] client lang: <none>
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] server lang: <none>
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] kex follows: False
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] Compression: none
2026-02-11T20:54:13.875 [DEBUG] [Thread-135722] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:54:13.931 [DEBUG] [Thread-135722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:54:13.932 [DEBUG] [Thread-135722] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:54:13.932 [DEBUG] [Thread-135722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:54:13.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:54:13.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:54:13.990 [DEBUG] [Thread-135722] [transport.py] [_log()] userauth is OK
2026-02-11T20:54:13.990 [DEBUG] [Thread-135722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:54:13.990 [DEBUG] [Thread-135722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:54:13.990 [DEBUG] [Thread-135722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:54:13.990 [DEBUG] [Thread-135722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:54:14.017 [INFO] [Thread-135722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:54:14.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:54:14.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:54:14.842 [DEBUG] [Thread-135722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:54:14.843 [DEBUG] [Thread-135722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:54:14.890 [DEBUG] [Thread-135722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:54:14.890 [DEBUG] [Thread-135722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:54:14.899 [DEBUG] [Thread-135722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:54:14.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:54:14.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:54:14.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:54:14.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:54:14.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:54:14.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:54:14.935 [DEBUG] [Thread-135722] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:54:22.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:54:22.664 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:54:23.929 [DEBUG] [Thread-135724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:54:38.972 [DEBUG] [Thread-135725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:54:40.291 [DEBUG] [Thread-135726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:54:44.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:54:44.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:54:44.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:54:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 54, 25), 1.74, 89.49, 0.0, 21.56, 16.85, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:54:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:54:25
2026-02-11T20:54:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:54:47.234 [DEBUG] [Thread-135727] [transport.py] [_log()] starting thread (client mode): 0xa2d5c7c0
2026-02-11T20:54:47.235 [DEBUG] [Thread-135727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:54:47.254 [DEBUG] [Thread-135727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:54:47.254 [INFO] [Thread-135727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:54:47.257 [DEBUG] [Thread-135727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:54:47.257 [DEBUG] [Thread-135727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:54:47.257 [DEBUG] [Thread-135727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:54:47.257 [DEBUG] [Thread-135727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:47.257 [DEBUG] [Thread-135727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] client lang: <none>
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] server lang: <none>
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] kex follows: False
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] Compression: none
2026-02-11T20:54:47.258 [DEBUG] [Thread-135727] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:54:47.275 [DEBUG] [Thread-135727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:54:47.275 [DEBUG] [Thread-135727] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:54:47.276 [DEBUG] [Thread-135727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:54:47.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:54:47.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:54:47.277 [DEBUG] [Thread-135727] [transport.py] [_log()] userauth is OK
2026-02-11T20:54:47.278 [DEBUG] [Thread-135727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:54:47.278 [DEBUG] [Thread-135727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:54:47.278 [DEBUG] [Thread-135727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:54:47.278 [DEBUG] [Thread-135727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:54:47.312 [INFO] [Thread-135727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:54:47.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:54:47.942 [DEBUG] [Thread-135727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:54:47.942 [DEBUG] [Thread-135727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:54:47.942 [DEBUG] [Thread-135727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:54:47.984 [DEBUG] [Thread-135727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:54:47.984 [DEBUG] [Thread-135727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:54:47.988 [DEBUG] [Thread-135727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:54:47.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:54:47.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:54:48.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:54:48.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:54:48.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:54:48.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:54:48.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:54:48.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:54:48.010 [DEBUG] [Thread-135727] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:54:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:54:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.787639 -999.00  +17.00  14.93     88  +15.10 1 3 1 3 1     0    0 0.94 -42.67 ----- 18.2 14.9 201.4 24.2 18.9 -3.1 18.7 -3.3 18.6 -2.8 18.9 -3.1
2026-02-11T20:54:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:54:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:54:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.787639
2026-02-11T20:54:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:54:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:54:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:54:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:54:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:54:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:54:25', tmtdew=1.74, humidity=89.49, cloud=0.0, wind=21.56, temperature=16.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:54:12.010', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:54:48.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:54:48.120 [DEBUG] [Thread-135730] [transport.py] [_log()] starting thread (client mode): 0xa2d5dbd0
2026-02-11T20:54:48.120 [DEBUG] [Thread-135730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:54:48.136 [DEBUG] [Thread-135730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:54:48.136 [INFO] [Thread-135730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:54:48.144 [DEBUG] [Thread-135730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:54:48.144 [DEBUG] [Thread-135730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] client lang: <none>
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] server lang: <none>
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] kex follows: False
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:54:48.145 [DEBUG] [Thread-135730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:54:48.146 [DEBUG] [Thread-135730] [transport.py] [_log()] Compression: none
2026-02-11T20:54:48.146 [DEBUG] [Thread-135730] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:54:48.204 [DEBUG] [Thread-135730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:54:48.205 [DEBUG] [Thread-135730] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:54:48.205 [DEBUG] [Thread-135730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:54:48.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:54:48.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:54:48.260 [DEBUG] [Thread-135730] [transport.py] [_log()] userauth is OK
2026-02-11T20:54:48.260 [DEBUG] [Thread-135730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:54:48.260 [DEBUG] [Thread-135730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:54:48.260 [DEBUG] [Thread-135730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:54:48.261 [DEBUG] [Thread-135730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:54:48.280 [INFO] [Thread-135730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:54:48.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:54:48.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:54:49.171 [DEBUG] [Thread-135730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:54:49.171 [DEBUG] [Thread-135730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:54:49.219 [DEBUG] [Thread-135730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:54:49.220 [DEBUG] [Thread-135730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:54:49.229 [DEBUG] [Thread-135730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:54:49.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:54:49.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:54:49.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:54:49.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:54:49.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:54:49.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:54:49.265 [DEBUG] [Thread-135730] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:54:54.009 [DEBUG] [Thread-135732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:09.063 [DEBUG] [Thread-135733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:55:19.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:55:19.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
2026-02-11T20:55:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 55, 1), 1.73, 89.51, 0.0, 23.57, 16.87, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:55:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:55:01
2026-02-11T20:55:21.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:55:21.623 [DEBUG] [Thread-135734] [transport.py] [_log()] starting thread (client mode): 0xa2d5d5a0
2026-02-11T20:55:21.623 [DEBUG] [Thread-135734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:55:21.643 [DEBUG] [Thread-135734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:55:21.643 [INFO] [Thread-135734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:55:21.646 [DEBUG] [Thread-135734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:55:21.646 [DEBUG] [Thread-135734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:55:21.646 [DEBUG] [Thread-135734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] client lang: <none>
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] server lang: <none>
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] kex follows: False
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] Compression: none
2026-02-11T20:55:21.647 [DEBUG] [Thread-135734] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:55:21.672 [DEBUG] [Thread-135734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:55:21.672 [DEBUG] [Thread-135734] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:55:21.673 [DEBUG] [Thread-135734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:55:21.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:55:21.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:55:21.717 [DEBUG] [Thread-135734] [transport.py] [_log()] userauth is OK
2026-02-11T20:55:21.717 [DEBUG] [Thread-135734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:55:21.717 [DEBUG] [Thread-135734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:55:21.717 [DEBUG] [Thread-135734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:55:21.717 [DEBUG] [Thread-135734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:55:21.739 [INFO] [Thread-135734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:55:21.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:55:22.369 [DEBUG] [Thread-135734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:55:22.369 [DEBUG] [Thread-135734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:55:22.369 [DEBUG] [Thread-135734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:55:22.410 [DEBUG] [Thread-135734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:55:22.410 [DEBUG] [Thread-135734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:55:22.413 [DEBUG] [Thread-135734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:55:22.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:55:22.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:55:22.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:55:22.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:55:22.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:55:22.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:55:22.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:55:22.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:55:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:55:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.787986 -999.00  +17.00  18.89     88  +15.00 1 3 1 3 1     0    0 0.92 -42.07 ----- 17.1 18.9 197.8 28.9 18.9 -3.1 18.6 -2.9 18.6 -3.1 18.9 -2.9
2026-02-11T20:55:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:55:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:55:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.787986
2026-02-11T20:55:22.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:55:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:55:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:55:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:55:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:55:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:55:01', tmtdew=1.73, humidity=89.51, cloud=0.0, wind=23.57, temperature=16.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:54:41.990', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:55:22.441 [DEBUG] [Thread-135734] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:55:22.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:55:22.537 [DEBUG] [Thread-135737] [transport.py] [_log()] starting thread (client mode): 0xa2d54cd0
2026-02-11T20:55:22.537 [DEBUG] [Thread-135737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:55:22.551 [DEBUG] [Thread-135737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:55:22.551 [INFO] [Thread-135737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:55:22.559 [DEBUG] [Thread-135737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:55:22.559 [DEBUG] [Thread-135737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] client lang: <none>
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] server lang: <none>
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] kex follows: False
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] Compression: none
2026-02-11T20:55:22.560 [DEBUG] [Thread-135737] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:55:22.616 [DEBUG] [Thread-135737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:55:22.617 [DEBUG] [Thread-135737] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:55:22.618 [DEBUG] [Thread-135737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:55:22.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:55:22.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:55:22.672 [DEBUG] [Thread-135737] [transport.py] [_log()] userauth is OK
2026-02-11T20:55:22.673 [DEBUG] [Thread-135737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:55:22.673 [DEBUG] [Thread-135737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:55:22.673 [DEBUG] [Thread-135737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:55:22.673 [DEBUG] [Thread-135737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:55:22.697 [INFO] [Thread-135737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:55:22.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:55:22.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:55:22.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:22.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:23.549 [DEBUG] [Thread-135737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:55:23.549 [DEBUG] [Thread-135737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:55:23.597 [DEBUG] [Thread-135737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:55:23.597 [DEBUG] [Thread-135737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:55:23.606 [DEBUG] [Thread-135737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:55:23.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:55:23.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')
2026-02-11T20:55:23.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:55:23.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:55:23.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:55:23.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:55:23.643 [DEBUG] [Thread-135737] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:55:24.102 [DEBUG] [Thread-135739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:39.151 [DEBUG] [Thread-135740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:40.347 [DEBUG] [Thread-135741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:53.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:55:53.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:55:53.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:55:54.187 [DEBUG] [Thread-135742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:55:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 55, 37), 2.17, 87.02, 0.0, 23.78, 17.33, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:55:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:55:37
2026-02-11T20:55:56.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:55:56.495 [DEBUG] [Thread-135743] [transport.py] [_log()] starting thread (client mode): 0xa2dc3220
2026-02-11T20:55:56.495 [DEBUG] [Thread-135743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:55:56.517 [DEBUG] [Thread-135743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:55:56.517 [INFO] [Thread-135743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] client lang: <none>
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] server lang: <none>
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] kex follows: False
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:55:56.520 [DEBUG] [Thread-135743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:55:56.521 [DEBUG] [Thread-135743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:55:56.521 [DEBUG] [Thread-135743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:55:56.521 [DEBUG] [Thread-135743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:55:56.521 [DEBUG] [Thread-135743] [transport.py] [_log()] Compression: none
2026-02-11T20:55:56.521 [DEBUG] [Thread-135743] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:55:56.537 [DEBUG] [Thread-135743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:55:56.537 [DEBUG] [Thread-135743] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:55:56.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:55:56.538 [DEBUG] [Thread-135743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:55:56.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:55:56.539 [DEBUG] [Thread-135743] [transport.py] [_log()] userauth is OK
2026-02-11T20:55:56.539 [DEBUG] [Thread-135743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:55:56.539 [DEBUG] [Thread-135743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:55:56.539 [DEBUG] [Thread-135743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:55:56.539 [DEBUG] [Thread-135743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:55:56.556 [INFO] [Thread-135743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:55:56.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:55:57.180 [DEBUG] [Thread-135743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:55:57.181 [DEBUG] [Thread-135743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:55:57.181 [DEBUG] [Thread-135743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:55:57.222 [DEBUG] [Thread-135743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:55:57.222 [DEBUG] [Thread-135743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:55:57.225 [DEBUG] [Thread-135743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:55:57.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:55:57.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:55:57.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:55:57.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:55:57.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:55:57.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:55:57.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:55:57.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:55:57.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:55:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.788680 -999.00  +16.90  22.82     88  +15.00 1 3 1 3 1     0    0 0.96 -38.62 ----- 17.4 22.8 205.2 28.2 18.8 -3.3 18.7 -3.2 18.6 -3.0 18.8 -3.2
2026-02-11T20:55:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:55:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:55:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.788680
2026-02-11T20:55:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:55:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:55:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:55:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:55:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:55:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:55:37', tmtdew=2.17, humidity=87.02, cloud=0.0, wind=23.78, temperature=17.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:55:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:55:57.251 [DEBUG] [Thread-135743] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:55:57.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:55:57.348 [DEBUG] [Thread-135746] [transport.py] [_log()] starting thread (client mode): 0xa2d5e230
2026-02-11T20:55:57.348 [DEBUG] [Thread-135746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:55:57.362 [DEBUG] [Thread-135746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:55:57.362 [INFO] [Thread-135746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:55:57.369 [DEBUG] [Thread-135746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] client lang: <none>
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] server lang: <none>
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] kex follows: False
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] Compression: none
2026-02-11T20:55:57.370 [DEBUG] [Thread-135746] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:55:57.427 [DEBUG] [Thread-135746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:55:57.428 [DEBUG] [Thread-135746] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:55:57.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:55:57.429 [DEBUG] [Thread-135746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:55:57.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:55:57.489 [DEBUG] [Thread-135746] [transport.py] [_log()] userauth is OK
2026-02-11T20:55:57.490 [DEBUG] [Thread-135746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:55:57.490 [DEBUG] [Thread-135746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:55:57.490 [DEBUG] [Thread-135746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:55:57.490 [DEBUG] [Thread-135746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:55:57.510 [INFO] [Thread-135746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:55:57.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:55:57.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:55:58.319 [DEBUG] [Thread-135746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:55:58.320 [DEBUG] [Thread-135746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:55:58.367 [DEBUG] [Thread-135746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:55:58.367 [DEBUG] [Thread-135746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:55:58.376 [DEBUG] [Thread-135746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:55:58.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:55:58.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:55:58.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:55:58.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:55:58.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:55:58.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:55:58.413 [DEBUG] [Thread-135746] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:56:09.225 [DEBUG] [Thread-135748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:56:23.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:56:23.071 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:56:24.277 [DEBUG] [Thread-135749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:56:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:56:28.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:56:28.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:56:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 56, 13), 1.73, 89.52, 0.0, 22.81, 16.8, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:56:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:56:13
2026-02-11T20:56:30.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:56:30.770 [DEBUG] [Thread-135750] [transport.py] [_log()] starting thread (client mode): 0xa2d57be0
2026-02-11T20:56:30.770 [DEBUG] [Thread-135750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:56:30.789 [DEBUG] [Thread-135750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:56:30.789 [INFO] [Thread-135750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:56:30.792 [DEBUG] [Thread-135750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] client lang: <none>
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] server lang: <none>
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] kex follows: False
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:56:30.793 [DEBUG] [Thread-135750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:56:30.794 [DEBUG] [Thread-135750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:56:30.794 [DEBUG] [Thread-135750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:56:30.794 [DEBUG] [Thread-135750] [transport.py] [_log()] Compression: none
2026-02-11T20:56:30.794 [DEBUG] [Thread-135750] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:56:30.810 [DEBUG] [Thread-135750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:56:30.811 [DEBUG] [Thread-135750] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:56:30.811 [DEBUG] [Thread-135750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:56:30.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:56:30.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:56:30.814 [DEBUG] [Thread-135750] [transport.py] [_log()] userauth is OK
2026-02-11T20:56:30.814 [DEBUG] [Thread-135750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:56:30.814 [DEBUG] [Thread-135750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:56:30.814 [DEBUG] [Thread-135750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:56:30.814 [DEBUG] [Thread-135750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:56:30.836 [INFO] [Thread-135750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:56:30.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:56:31.465 [DEBUG] [Thread-135750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:56:31.465 [DEBUG] [Thread-135750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:56:31.465 [DEBUG] [Thread-135750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:56:31.506 [DEBUG] [Thread-135750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:56:31.506 [DEBUG] [Thread-135750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:56:31.509 [DEBUG] [Thread-135750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:56:31.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:56:31.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:56:31.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:56:31.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:56:31.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:56:31.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:56:31.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:56:31.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:56:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:56:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.789027 -999.00  +16.90  14.98     88  +15.00 1 3 1 3 1     0    0 1.03 -37.44 ----- 15.4 15.0 199.2 28.3 18.8 -2.9 18.6 -3.1 18.6 -3.0 18.8 -2.9
2026-02-11T20:56:31.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:56:31.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:56:31.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.789027
2026-02-11T20:56:31.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:56:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:56:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:56:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:56:31.532 [DEBUG] [Thread-135750] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:56:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:56:31.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:56:13', tmtdew=1.73, humidity=89.52, cloud=0.0, wind=22.81, temperature=16.8, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:56:11.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:56:31.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:56:31.627 [DEBUG] [Thread-135753] [transport.py] [_log()] starting thread (client mode): 0xa2d5e0b0
2026-02-11T20:56:31.627 [DEBUG] [Thread-135753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:56:31.642 [DEBUG] [Thread-135753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:56:31.642 [INFO] [Thread-135753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:56:31.650 [DEBUG] [Thread-135753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:56:31.650 [DEBUG] [Thread-135753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:56:31.650 [DEBUG] [Thread-135753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:56:31.650 [DEBUG] [Thread-135753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:56:31.650 [DEBUG] [Thread-135753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:56:31.650 [DEBUG] [Thread-135753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] client lang: <none>
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] server lang: <none>
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] kex follows: False
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] Compression: none
2026-02-11T20:56:31.651 [DEBUG] [Thread-135753] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:56:31.707 [DEBUG] [Thread-135753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:56:31.708 [DEBUG] [Thread-135753] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:56:31.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:56:31.708 [DEBUG] [Thread-135753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:56:31.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:56:31.763 [DEBUG] [Thread-135753] [transport.py] [_log()] userauth is OK
2026-02-11T20:56:31.764 [DEBUG] [Thread-135753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:56:31.764 [DEBUG] [Thread-135753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:56:31.764 [DEBUG] [Thread-135753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:56:31.764 [DEBUG] [Thread-135753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:56:31.782 [INFO] [Thread-135753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:56:31.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:56:31.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:56:32.608 [DEBUG] [Thread-135753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:56:32.608 [DEBUG] [Thread-135753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:56:32.656 [DEBUG] [Thread-135753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:56:32.656 [DEBUG] [Thread-135753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:56:32.664 [DEBUG] [Thread-135753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:56:32.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:56:32.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:56:32.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:56:32.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:56:32.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:56:32.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:56:32.696 [DEBUG] [Thread-135753] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:56:39.309 [DEBUG] [Thread-135755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:56:40.409 [DEBUG] [Thread-135756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:56:54.360 [DEBUG] [Thread-135757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:57:02.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:57:02.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:57:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:57:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 56, 48), 1.68, 89.52, 0.0, 21.23, 16.73, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:57:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:56:48
2026-02-11T20:57:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:57:05.138 [DEBUG] [Thread-135758] [transport.py] [_log()] starting thread (client mode): 0xa2dc3220
2026-02-11T20:57:05.138 [DEBUG] [Thread-135758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:57:05.158 [DEBUG] [Thread-135758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:57:05.159 [INFO] [Thread-135758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:57:05.161 [DEBUG] [Thread-135758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] client lang: <none>
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] server lang: <none>
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] kex follows: False
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:57:05.162 [DEBUG] [Thread-135758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:57:05.163 [DEBUG] [Thread-135758] [transport.py] [_log()] Compression: none
2026-02-11T20:57:05.163 [DEBUG] [Thread-135758] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:57:05.181 [DEBUG] [Thread-135758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:57:05.182 [DEBUG] [Thread-135758] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:57:05.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:57:05.182 [DEBUG] [Thread-135758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:57:05.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:57:05.184 [DEBUG] [Thread-135758] [transport.py] [_log()] userauth is OK
2026-02-11T20:57:05.185 [DEBUG] [Thread-135758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:57:05.185 [DEBUG] [Thread-135758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:57:05.185 [DEBUG] [Thread-135758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:57:05.185 [DEBUG] [Thread-135758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:57:05.208 [INFO] [Thread-135758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:57:05.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:57:05.850 [DEBUG] [Thread-135758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:57:05.851 [DEBUG] [Thread-135758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:57:05.851 [DEBUG] [Thread-135758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:57:05.891 [DEBUG] [Thread-135758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:57:05.891 [DEBUG] [Thread-135758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:57:05.894 [DEBUG] [Thread-135758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:57:05.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:57:05.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:57:05.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:57:05.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:57:05.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:57:05.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:57:05.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:57:05.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:57:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:57:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.789375 -999.00  +17.00  11.82     88  +15.10 1 3 1 3 1     0    0 1.04 -37.90 ----- 20.7 11.8 193.4 21.2 18.9 -2.9 18.6 -4.1 18.5 -3.3 18.9 -3.0
2026-02-11T20:57:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:57:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:57:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.789375
2026-02-11T20:57:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:57:05.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:57:05.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:57:05.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:57:05.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:57:05.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:56:48', tmtdew=1.68, humidity=89.52, cloud=0.0, wind=21.23, temperature=16.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:56:42.000', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:57:05.920 [DEBUG] [Thread-135758] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:57:06.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:57:06.016 [DEBUG] [Thread-135761] [transport.py] [_log()] starting thread (client mode): 0xa57b0970
2026-02-11T20:57:06.017 [DEBUG] [Thread-135761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:57:06.031 [DEBUG] [Thread-135761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:57:06.032 [INFO] [Thread-135761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:57:06.039 [DEBUG] [Thread-135761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:57:06.039 [DEBUG] [Thread-135761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:57:06.040 [DEBUG] [Thread-135761] [transport.py] [_log()] client lang: <none>
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] server lang: <none>
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] kex follows: False
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:57:06.041 [DEBUG] [Thread-135761] [transport.py] [_log()] Compression: none
2026-02-11T20:57:06.042 [DEBUG] [Thread-135761] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:57:06.104 [DEBUG] [Thread-135761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:57:06.105 [DEBUG] [Thread-135761] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:57:06.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:57:06.106 [DEBUG] [Thread-135761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:57:06.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:57:06.160 [DEBUG] [Thread-135761] [transport.py] [_log()] userauth is OK
2026-02-11T20:57:06.160 [DEBUG] [Thread-135761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:57:06.160 [DEBUG] [Thread-135761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:57:06.161 [DEBUG] [Thread-135761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:57:06.161 [DEBUG] [Thread-135761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:57:06.180 [INFO] [Thread-135761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:57:06.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:57:06.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:57:07.094 [DEBUG] [Thread-135761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:57:07.094 [DEBUG] [Thread-135761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:57:07.142 [DEBUG] [Thread-135761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:57:07.143 [DEBUG] [Thread-135761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:57:07.151 [DEBUG] [Thread-135761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:57:07.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:57:07.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:57:07.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:57:07.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:57:07.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:57:07.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:57:07.188 [DEBUG] [Thread-135761] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:57:09.394 [DEBUG] [Thread-135763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:57:23.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:57:23.278 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:57:24.450 [DEBUG] [Thread-135764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:57:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:57:37.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:57:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:57:39.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 57, 24), 1.68, 89.54, 0.0, 22.96, 16.73, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:57:39.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:57:24
2026-02-11T20:57:39.490 [DEBUG] [Thread-135765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:57:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:57:39.726 [DEBUG] [Thread-135766] [transport.py] [_log()] starting thread (client mode): 0xa575b130
2026-02-11T20:57:39.726 [DEBUG] [Thread-135766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:57:39.747 [DEBUG] [Thread-135766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:57:39.747 [INFO] [Thread-135766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] client lang: <none>
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] server lang: <none>
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] kex follows: False
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] Compression: none
2026-02-11T20:57:39.750 [DEBUG] [Thread-135766] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:57:39.761 [DEBUG] [Thread-135766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:57:39.761 [DEBUG] [Thread-135766] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:57:39.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:57:39.762 [DEBUG] [Thread-135766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:57:39.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:57:39.764 [DEBUG] [Thread-135766] [transport.py] [_log()] userauth is OK
2026-02-11T20:57:39.764 [DEBUG] [Thread-135766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:57:39.765 [DEBUG] [Thread-135766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:57:39.765 [DEBUG] [Thread-135766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:57:39.765 [DEBUG] [Thread-135766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:57:39.801 [INFO] [Thread-135766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:57:39.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:57:40.448 [DEBUG] [Thread-135766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:57:40.448 [DEBUG] [Thread-135766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:57:40.448 [DEBUG] [Thread-135766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:57:40.467 [DEBUG] [Thread-135768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:57:40.489 [DEBUG] [Thread-135766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:57:40.489 [DEBUG] [Thread-135766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:57:40.492 [DEBUG] [Thread-135766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:57:40.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:57:40.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:57:40.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:57:40.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:57:40.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:57:40.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:57:40.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:57:40.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:57:40.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:57:40.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.789722 -999.00  +16.90  16.70     88  +15.00 1 3 1 3 1     0    0 1.08 -34.93 ----- 17.4 16.7 215.6 24.0 18.8 -3.3 18.6 -3.2 18.5 -2.9 18.9 -3.2
2026-02-11T20:57:40.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:57:40.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:57:40.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.789722
2026-02-11T20:57:40.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:57:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:57:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:57:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:57:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:57:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:57:24', tmtdew=1.68, humidity=89.54, cloud=0.0, wind=22.96, temperature=16.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:57:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:57:40.519 [DEBUG] [Thread-135766] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:57:40.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:57:40.616 [DEBUG] [Thread-135770] [transport.py] [_log()] starting thread (client mode): 0xa2d5eec0
2026-02-11T20:57:40.616 [DEBUG] [Thread-135770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:57:40.630 [DEBUG] [Thread-135770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:57:40.631 [INFO] [Thread-135770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:57:40.638 [DEBUG] [Thread-135770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] client lang: <none>
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] server lang: <none>
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] kex follows: False
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:57:40.639 [DEBUG] [Thread-135770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:57:40.640 [DEBUG] [Thread-135770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:57:40.640 [DEBUG] [Thread-135770] [transport.py] [_log()] Compression: none
2026-02-11T20:57:40.640 [DEBUG] [Thread-135770] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:57:40.699 [DEBUG] [Thread-135770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:57:40.700 [DEBUG] [Thread-135770] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:57:40.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:57:40.701 [DEBUG] [Thread-135770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:57:40.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:57:40.756 [DEBUG] [Thread-135770] [transport.py] [_log()] userauth is OK
2026-02-11T20:57:40.756 [DEBUG] [Thread-135770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:57:40.757 [DEBUG] [Thread-135770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:57:40.757 [DEBUG] [Thread-135770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:57:40.757 [DEBUG] [Thread-135770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:57:40.776 [INFO] [Thread-135770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:57:40.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:57:40.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:57:41.602 [DEBUG] [Thread-135770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:57:41.603 [DEBUG] [Thread-135770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:57:41.653 [DEBUG] [Thread-135770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:57:41.653 [DEBUG] [Thread-135770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:57:41.666 [DEBUG] [Thread-135770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:57:41.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:57:41.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:57:41.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
2026-02-11T20:57:41.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:57:41.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:57:41.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:57:41.703 [DEBUG] [Thread-135770] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:57:54.527 [DEBUG] [Thread-135772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:58:09.588 [DEBUG] [Thread-135773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:58:11.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:58:11.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:58:11.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:58:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 57, 24), 1.68, 89.54, 0.0, 22.96, 16.73, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:58:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:57:24
2026-02-11T20:58:13.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:58:14.140 [DEBUG] [Thread-135774] [transport.py] [_log()] starting thread (client mode): 0x9eb04160
2026-02-11T20:58:14.140 [DEBUG] [Thread-135774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:58:14.159 [DEBUG] [Thread-135774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:58:14.160 [INFO] [Thread-135774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] client lang: <none>
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] server lang: <none>
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] kex follows: False
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:58:14.163 [DEBUG] [Thread-135774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:58:14.164 [DEBUG] [Thread-135774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:58:14.164 [DEBUG] [Thread-135774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:58:14.164 [DEBUG] [Thread-135774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:58:14.164 [DEBUG] [Thread-135774] [transport.py] [_log()] Compression: none
2026-02-11T20:58:14.164 [DEBUG] [Thread-135774] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:58:14.179 [DEBUG] [Thread-135774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:58:14.179 [DEBUG] [Thread-135774] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:58:14.179 [DEBUG] [Thread-135774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:58:14.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:58:14.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:58:14.180 [DEBUG] [Thread-135774] [transport.py] [_log()] userauth is OK
2026-02-11T20:58:14.180 [DEBUG] [Thread-135774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:58:14.180 [DEBUG] [Thread-135774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:58:14.180 [DEBUG] [Thread-135774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:58:14.180 [DEBUG] [Thread-135774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:58:14.198 [INFO] [Thread-135774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:58:14.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:58:14.840 [DEBUG] [Thread-135774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:58:14.840 [DEBUG] [Thread-135774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:58:14.840 [DEBUG] [Thread-135774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:58:14.881 [DEBUG] [Thread-135774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:58:14.881 [DEBUG] [Thread-135774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:58:14.885 [DEBUG] [Thread-135774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:58:14.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:58:14.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:58:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:58:14.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:58:14.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:58:14.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:58:14.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:58:14.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:58:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:58:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.790069 -999.00  +16.90  16.64     88  +15.00 1 3 1 3 1     0    0 1.11 -33.39 ----- 19.9 16.6 208.2 22.1 18.9 -3.3 18.6 -3.6 18.5 -3.1 18.8 -3.1
2026-02-11T20:58:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:58:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:58:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.790069
2026-02-11T20:58:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:58:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:58:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:58:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:58:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:58:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:57:24', tmtdew=1.68, humidity=89.54, cloud=0.0, wind=22.96, temperature=16.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:57:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:58:14.912 [DEBUG] [Thread-135774] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:58:14.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:58:15.014 [DEBUG] [Thread-135777] [transport.py] [_log()] starting thread (client mode): 0xa2db7130
2026-02-11T20:58:15.015 [DEBUG] [Thread-135777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:58:15.028 [DEBUG] [Thread-135777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:58:15.029 [INFO] [Thread-135777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:58:15.036 [DEBUG] [Thread-135777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:58:15.037 [DEBUG] [Thread-135777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:58:15.038 [DEBUG] [Thread-135777] [transport.py] [_log()] client lang: <none>
2026-02-11T20:58:15.038 [DEBUG] [Thread-135777] [transport.py] [_log()] server lang: <none>
2026-02-11T20:58:15.038 [DEBUG] [Thread-135777] [transport.py] [_log()] kex follows: False
2026-02-11T20:58:15.038 [DEBUG] [Thread-135777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:58:15.038 [DEBUG] [Thread-135777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:58:15.038 [DEBUG] [Thread-135777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:58:15.038 [DEBUG] [Thread-135777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:58:15.039 [DEBUG] [Thread-135777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:58:15.039 [DEBUG] [Thread-135777] [transport.py] [_log()] Compression: none
2026-02-11T20:58:15.039 [DEBUG] [Thread-135777] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:58:15.095 [DEBUG] [Thread-135777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:58:15.096 [DEBUG] [Thread-135777] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:58:15.097 [DEBUG] [Thread-135777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:58:15.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:58:15.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:58:15.152 [DEBUG] [Thread-135777] [transport.py] [_log()] userauth is OK
2026-02-11T20:58:15.153 [DEBUG] [Thread-135777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:58:15.153 [DEBUG] [Thread-135777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:58:15.153 [DEBUG] [Thread-135777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:58:15.153 [DEBUG] [Thread-135777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:58:15.174 [INFO] [Thread-135777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:58:15.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:58:15.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:58:16.052 [DEBUG] [Thread-135777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:58:16.053 [DEBUG] [Thread-135777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:58:16.103 [DEBUG] [Thread-135777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:58:16.104 [DEBUG] [Thread-135777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:58:16.114 [DEBUG] [Thread-135777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:58:16.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:58: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')
2026-02-11T20:58:16.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:58:16.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:58:16.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:58:16.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:58:16.153 [DEBUG] [Thread-135777] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:58:23.481 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:58:23.482 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:58:24.624 [DEBUG] [Thread-135779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:58:39.671 [DEBUG] [Thread-135780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:58:40.532 [DEBUG] [Thread-135781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:58:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:58:46.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:58:46.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:58:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 58, 35), 2.14, 87.15, 0.0, 20.57, 17.2, 1, 1, 0, 2, 0, 0),)
2026-02-11T20:58:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:58:35
2026-02-11T20:58:48.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:58:48.544 [DEBUG] [Thread-135782] [transport.py] [_log()] starting thread (client mode): 0xa57e3940
2026-02-11T20:58:48.545 [DEBUG] [Thread-135782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:58:48.564 [DEBUG] [Thread-135782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:58:48.564 [INFO] [Thread-135782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:58:48.567 [DEBUG] [Thread-135782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] client lang: <none>
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] server lang: <none>
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] kex follows: False
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:58:48.568 [DEBUG] [Thread-135782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:58:48.569 [DEBUG] [Thread-135782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:58:48.569 [DEBUG] [Thread-135782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:58:48.569 [DEBUG] [Thread-135782] [transport.py] [_log()] Compression: none
2026-02-11T20:58:48.569 [DEBUG] [Thread-135782] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:58:48.589 [DEBUG] [Thread-135782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:58:48.589 [DEBUG] [Thread-135782] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:58:48.590 [DEBUG] [Thread-135782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:58:48.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:58:48.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:58:48.592 [DEBUG] [Thread-135782] [transport.py] [_log()] userauth is OK
2026-02-11T20:58:48.592 [DEBUG] [Thread-135782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:58:48.592 [DEBUG] [Thread-135782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:58:48.593 [DEBUG] [Thread-135782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:58:48.593 [DEBUG] [Thread-135782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:58:48.617 [INFO] [Thread-135782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:58:48.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:58:49.258 [DEBUG] [Thread-135782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:58:49.258 [DEBUG] [Thread-135782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:58:49.258 [DEBUG] [Thread-135782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:58:49.299 [DEBUG] [Thread-135782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:58:49.299 [DEBUG] [Thread-135782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:58:49.303 [DEBUG] [Thread-135782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:58:49.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:58:49.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:58:49.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:58:49.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:58:49.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:58:49.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:58:49.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:58:49.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:58:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:58:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.790416 -999.00  +16.90  16.52     88  +15.00 1 3 1 3 1     0    0 1.21 -29.74 ----- 15.6 16.5 201.6 21.1 18.8 -3.1 18.6 -2.9 18.5 -2.8 18.9 -2.9
2026-02-11T20:58:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:58:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:58:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.790416
2026-02-11T20:58:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:58:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:58:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:58:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:58:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:58:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:58:35', tmtdew=2.14, humidity=87.15, cloud=0.0, wind=20.57, temperature=17.2, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:58:11.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:58:49.329 [DEBUG] [Thread-135782] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:58:49.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:58:49.426 [DEBUG] [Thread-135785] [transport.py] [_log()] starting thread (client mode): 0xa2d5cbb0
2026-02-11T20:58:49.426 [DEBUG] [Thread-135785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:58:49.446 [DEBUG] [Thread-135785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:58:49.447 [INFO] [Thread-135785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:58:49.454 [DEBUG] [Thread-135785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] client lang: <none>
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] server lang: <none>
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] kex follows: False
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] Compression: none
2026-02-11T20:58:49.455 [DEBUG] [Thread-135785] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:58:49.512 [DEBUG] [Thread-135785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:58:49.513 [DEBUG] [Thread-135785] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:58:49.514 [DEBUG] [Thread-135785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:58:49.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:58:49.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:58:49.568 [DEBUG] [Thread-135785] [transport.py] [_log()] userauth is OK
2026-02-11T20:58:49.569 [DEBUG] [Thread-135785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:58:49.569 [DEBUG] [Thread-135785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:58:49.569 [DEBUG] [Thread-135785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:58:49.569 [DEBUG] [Thread-135785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:58:49.588 [INFO] [Thread-135785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:58:49.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:58:49.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:58:50.422 [DEBUG] [Thread-135785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:58:50.422 [DEBUG] [Thread-135785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:58:50.470 [DEBUG] [Thread-135785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:58:50.471 [DEBUG] [Thread-135785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:58:50.480 [DEBUG] [Thread-135785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:58:50.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:58:50.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:58:50.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:58:50.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:58:50.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:58:50.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:58:50.516 [DEBUG] [Thread-135785] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:58:54.707 [DEBUG] [Thread-135787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:09.760 [DEBUG] [Thread-135788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:20.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:59:20.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:59:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:59:22.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 59, 11), 1.66, 90.12, 0.0, 22.94, 16.72, 1, 2, 0, 2, 0, 0),)
2026-02-11T20:59:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:59:11
2026-02-11T20:59:22.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:59:22.994 [DEBUG] [Thread-135789] [transport.py] [_log()] starting thread (client mode): 0xa5770520
2026-02-11T20:59:22.994 [DEBUG] [Thread-135789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:59:23.015 [DEBUG] [Thread-135789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:59:23.015 [INFO] [Thread-135789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:59:23.018 [DEBUG] [Thread-135789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:59:23.018 [DEBUG] [Thread-135789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:59:23.018 [DEBUG] [Thread-135789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:59:23.018 [DEBUG] [Thread-135789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:23.018 [DEBUG] [Thread-135789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:23.018 [DEBUG] [Thread-135789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:23.018 [DEBUG] [Thread-135789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] client lang: <none>
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] server lang: <none>
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] kex follows: False
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] Compression: none
2026-02-11T20:59:23.019 [DEBUG] [Thread-135789] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:59:23.036 [DEBUG] [Thread-135789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:59:23.036 [DEBUG] [Thread-135789] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:59:23.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:59:23.037 [DEBUG] [Thread-135789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:59:23.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:59:23.039 [DEBUG] [Thread-135789] [transport.py] [_log()] userauth is OK
2026-02-11T20:59:23.039 [DEBUG] [Thread-135789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:59:23.040 [DEBUG] [Thread-135789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:59:23.040 [DEBUG] [Thread-135789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:59:23.040 [DEBUG] [Thread-135789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:59:23.057 [INFO] [Thread-135789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:59:23.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:59:23.684 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:23.685 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:23.863 [DEBUG] [Thread-135789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:59:23.863 [DEBUG] [Thread-135789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:59:23.864 [DEBUG] [Thread-135789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:59:23.904 [DEBUG] [Thread-135789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:59:23.905 [DEBUG] [Thread-135789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:59:23.908 [DEBUG] [Thread-135789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:59:23.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:59:23.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:59:23.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:59:23.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:59:23.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:59:23.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:59:23.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:59:23.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.790764 -999.00  +17.00   9.77     88  +15.10 1 3 1 3 1     0    0 1.23 -28.61 ----- 15.7 9.8 202.6 18.0 18.8 -3.1 18.7 -3.9 18.5 -2.9 18.9 -2.9
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.790764
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:59:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:59:11', tmtdew=1.66, humidity=90.12, cloud=0.0, wind=22.94, temperature=16.72, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:58:42.010', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:59:23.930 [DEBUG] [Thread-135789] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:59:24.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:59:24.021 [DEBUG] [Thread-135792] [transport.py] [_log()] starting thread (client mode): 0xa57e3940
2026-02-11T20:59:24.021 [DEBUG] [Thread-135792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:59:24.035 [DEBUG] [Thread-135792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:59:24.036 [INFO] [Thread-135792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:59:24.043 [DEBUG] [Thread-135792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:59:24.044 [DEBUG] [Thread-135792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] client lang: <none>
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] server lang: <none>
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] kex follows: False
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:59:24.045 [DEBUG] [Thread-135792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:59:24.046 [DEBUG] [Thread-135792] [transport.py] [_log()] Compression: none
2026-02-11T20:59:24.046 [DEBUG] [Thread-135792] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:59:24.105 [DEBUG] [Thread-135792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:59:24.106 [DEBUG] [Thread-135792] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:59:24.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:59:24.107 [DEBUG] [Thread-135792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:59:24.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:59:24.164 [DEBUG] [Thread-135792] [transport.py] [_log()] userauth is OK
2026-02-11T20:59:24.165 [DEBUG] [Thread-135792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:59:24.165 [DEBUG] [Thread-135792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:59:24.165 [DEBUG] [Thread-135792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:59:24.165 [DEBUG] [Thread-135792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:59:24.184 [INFO] [Thread-135792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:59:24.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:59:24.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:59:24.799 [DEBUG] [Thread-135794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:25.021 [DEBUG] [Thread-135792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:59:25.021 [DEBUG] [Thread-135792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:59:25.069 [DEBUG] [Thread-135792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:59:25.070 [DEBUG] [Thread-135792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:59:25.079 [DEBUG] [Thread-135792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:59:25.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:59:25.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T20:59:25.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:59:25.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:59:25.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:59:25.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:59:25.116 [DEBUG] [Thread-135792] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:59:39.851 [DEBUG] [Thread-135795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:40.614 [DEBUG] [Thread-135796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:54.886 [DEBUG] [Thread-135797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T20:59:55.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T20:59:55.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T20:59:55.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T20:59:57.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 20, 59, 47), 1.67, 90.07, 0.0, 23.33, 16.68, 1, 2, 0, 2, 0, 0),)
2026-02-11T20:59:57.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 20:59:47
2026-02-11T20:59:57.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T20:59:57.853 [DEBUG] [Thread-135798] [transport.py] [_log()] starting thread (client mode): 0xa57738b0
2026-02-11T20:59:57.854 [DEBUG] [Thread-135798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:59:57.873 [DEBUG] [Thread-135798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T20:59:57.873 [INFO] [Thread-135798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] client lang: <none>
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] server lang: <none>
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] kex follows: False
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:59:57.876 [DEBUG] [Thread-135798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:59:57.877 [DEBUG] [Thread-135798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:59:57.877 [DEBUG] [Thread-135798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:59:57.877 [DEBUG] [Thread-135798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:59:57.877 [DEBUG] [Thread-135798] [transport.py] [_log()] Compression: none
2026-02-11T20:59:57.877 [DEBUG] [Thread-135798] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:59:57.894 [DEBUG] [Thread-135798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:59:57.895 [DEBUG] [Thread-135798] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:59:57.895 [DEBUG] [Thread-135798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T20:59:57.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T20:59:57.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:59:57.898 [DEBUG] [Thread-135798] [transport.py] [_log()] userauth is OK
2026-02-11T20:59:57.898 [DEBUG] [Thread-135798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:59:57.898 [DEBUG] [Thread-135798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:59:57.899 [DEBUG] [Thread-135798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T20:59:57.899 [DEBUG] [Thread-135798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:59:57.924 [INFO] [Thread-135798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:59:57.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:59:58.575 [DEBUG] [Thread-135798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:59:58.576 [DEBUG] [Thread-135798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:59:58.576 [DEBUG] [Thread-135798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T20:59:58.616 [DEBUG] [Thread-135798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:59:58.617 [DEBUG] [Thread-135798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:59:58.620 [DEBUG] [Thread-135798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:59:58.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:59:58.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T20:59:58.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T20:59:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T20:59:58.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:59:58.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T20:59:58.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:59:58.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:59:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T20:59:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.791111 -999.00  +16.90  17.49     88  +15.00 1 3 1 3 1     0    0 1.16 -30.34 ----- 15.9 17.5 203.0 24.8 18.9 -3.1 18.6 -2.9 18.5 -3.0 18.9 -3.2
2026-02-11T20:59:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T20:59:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T20:59:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.791111
2026-02-11T20:59:58.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T20:59:58.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T20:59:58.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T20:59:58.647 [DEBUG] [Thread-135798] [transport.py] [_log()] EOF in transport thread
2026-02-11T20:59:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T20:59:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T20:59:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T20:59:47', tmtdew=1.67, humidity=90.07, cloud=0.0, wind=23.33, temperature=16.68, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T18:59:11.990', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T20:59:58.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T20:59:58.754 [DEBUG] [Thread-135801] [transport.py] [_log()] starting thread (client mode): 0xa57b0b80
2026-02-11T20:59:58.754 [DEBUG] [Thread-135801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T20:59:58.769 [DEBUG] [Thread-135801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T20:59:58.770 [INFO] [Thread-135801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T20:59:58.777 [DEBUG] [Thread-135801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] client lang: <none>
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] server lang: <none>
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] kex follows: False
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T20:59:58.778 [DEBUG] [Thread-135801] [transport.py] [_log()] Compression: none
2026-02-11T20:59:58.779 [DEBUG] [Thread-135801] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T20:59:58.836 [DEBUG] [Thread-135801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T20:59:58.837 [DEBUG] [Thread-135801] [transport.py] [_log()] Switch to new keys ...
2026-02-11T20:59:58.837 [DEBUG] [Thread-135801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T20:59:58.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T20:59:58.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T20:59:58.892 [DEBUG] [Thread-135801] [transport.py] [_log()] userauth is OK
2026-02-11T20:59:58.893 [DEBUG] [Thread-135801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T20:59:58.893 [DEBUG] [Thread-135801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T20:59:58.893 [DEBUG] [Thread-135801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T20:59:58.893 [DEBUG] [Thread-135801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T20:59:58.917 [INFO] [Thread-135801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T20:59:58.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T20:59:58.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T20:59:59.811 [DEBUG] [Thread-135801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T20:59:59.811 [DEBUG] [Thread-135801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T20:59:59.859 [DEBUG] [Thread-135801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T20:59:59.860 [DEBUG] [Thread-135801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T20:59:59.873 [DEBUG] [Thread-135801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T20:59:59.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T20:59:59.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')
2026-02-11T20:59:59.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T20:59:59.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T20:59:59.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T20:59:59.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T20:59:59.914 [DEBUG] [Thread-135801] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:00:09.922 [DEBUG] [Thread-135803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:00:23.885 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:00:23.886 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:00:24.973 [DEBUG] [Thread-135804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:00:29.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:00:29.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:00:29.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:00:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 0, 22), 1.67, 90.06, 0.0, 20.08, 16.68, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:00:31.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:00:22
2026-02-11T21:00:32.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:00:32.326 [DEBUG] [Thread-135805] [transport.py] [_log()] starting thread (client mode): 0xa57e34c0
2026-02-11T21:00:32.326 [DEBUG] [Thread-135805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:00:32.345 [DEBUG] [Thread-135805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:00:32.345 [INFO] [Thread-135805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:00:32.348 [DEBUG] [Thread-135805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] client lang: <none>
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] server lang: <none>
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] kex follows: False
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] Compression: none
2026-02-11T21:00:32.349 [DEBUG] [Thread-135805] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:00:32.367 [DEBUG] [Thread-135805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:00:32.368 [DEBUG] [Thread-135805] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:00:32.368 [DEBUG] [Thread-135805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:00:32.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:00:32.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:00:32.370 [DEBUG] [Thread-135805] [transport.py] [_log()] userauth is OK
2026-02-11T21:00:32.371 [DEBUG] [Thread-135805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:00:32.371 [DEBUG] [Thread-135805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:00:32.371 [DEBUG] [Thread-135805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:00:32.371 [DEBUG] [Thread-135805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:00:32.393 [INFO] [Thread-135805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:00:32.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:00:33.014 [DEBUG] [Thread-135805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:00:33.014 [DEBUG] [Thread-135805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:00:33.015 [DEBUG] [Thread-135805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:00:33.056 [DEBUG] [Thread-135805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:00:33.056 [DEBUG] [Thread-135805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:00:33.059 [DEBUG] [Thread-135805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:00:33.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:00:33.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:00:33.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:00:33.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:00:33.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:00:33.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:00:33.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:00:33.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:00:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:00:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.791805 -999.00  +16.90  10.35     88  +15.00 1 3 1 3 1     0    0 1.26 -26.71 ----- 15.8 10.3 207.7 20.2 18.9 -3.2 18.7 -3.0 18.6 -2.9 18.8 -2.8
2026-02-11T21:00:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:00:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:00:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.791805
2026-02-11T21:00:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:00:33.084 [DEBUG] [Thread-135805] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:00:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:00:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:00:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:00:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:00:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:00:22', tmtdew=1.67, humidity=90.06, cloud=0.0, wind=20.08, temperature=16.68, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:00:11.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:00:33.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:00:33.191 [DEBUG] [Thread-135808] [transport.py] [_log()] starting thread (client mode): 0xa2d5f250
2026-02-11T21:00:33.191 [DEBUG] [Thread-135808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:00:33.209 [DEBUG] [Thread-135808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:00:33.209 [INFO] [Thread-135808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:00:33.219 [DEBUG] [Thread-135808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:00:33.219 [DEBUG] [Thread-135808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] client lang: <none>
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] server lang: <none>
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] kex follows: False
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:00:33.220 [DEBUG] [Thread-135808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:00:33.221 [DEBUG] [Thread-135808] [transport.py] [_log()] Compression: none
2026-02-11T21:00:33.221 [DEBUG] [Thread-135808] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:00:33.275 [DEBUG] [Thread-135808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:00:33.276 [DEBUG] [Thread-135808] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:00:33.276 [DEBUG] [Thread-135808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:00:33.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:00:33.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:00:33.333 [DEBUG] [Thread-135808] [transport.py] [_log()] userauth is OK
2026-02-11T21:00:33.333 [DEBUG] [Thread-135808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:00:33.334 [DEBUG] [Thread-135808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:00:33.334 [DEBUG] [Thread-135808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:00:33.334 [DEBUG] [Thread-135808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:00:33.355 [INFO] [Thread-135808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:00:33.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:00:33.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:00:34.155 [DEBUG] [Thread-135808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:00:34.155 [DEBUG] [Thread-135808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:00:34.205 [DEBUG] [Thread-135808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:00:34.206 [DEBUG] [Thread-135808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:00:34.215 [DEBUG] [Thread-135808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:00:34.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:00:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:00:34.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:00:34.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:00:34.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:00:34.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:00:34.257 [DEBUG] [Thread-135808] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:00:40.009 [DEBUG] [Thread-135810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:00:40.700 [DEBUG] [Thread-135811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:00:55.063 [DEBUG] [Thread-135812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:01:04.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:01:04.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:01:04.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:01:06.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 0, 58), 1.61, 90.14, 0.0, 22.67, 16.67, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:01:06.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:00:58
2026-02-11T21:01:06.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:01:06.691 [DEBUG] [Thread-135813] [transport.py] [_log()] starting thread (client mode): 0xa2db6440
2026-02-11T21:01:06.692 [DEBUG] [Thread-135813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:01:06.711 [DEBUG] [Thread-135813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:01:06.711 [INFO] [Thread-135813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] client lang: <none>
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] server lang: <none>
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] kex follows: False
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] Compression: none
2026-02-11T21:01:06.715 [DEBUG] [Thread-135813] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:01:06.730 [DEBUG] [Thread-135813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:01:06.731 [DEBUG] [Thread-135813] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:01:06.731 [DEBUG] [Thread-135813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:01:06.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:01:06.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:01:06.773 [DEBUG] [Thread-135813] [transport.py] [_log()] userauth is OK
2026-02-11T21:01:06.773 [DEBUG] [Thread-135813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:01:06.773 [DEBUG] [Thread-135813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:01:06.773 [DEBUG] [Thread-135813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:01:06.774 [DEBUG] [Thread-135813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:01:06.806 [INFO] [Thread-135813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:01:06.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:01:07.443 [DEBUG] [Thread-135813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:01:07.443 [DEBUG] [Thread-135813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:01:07.444 [DEBUG] [Thread-135813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:01:07.484 [DEBUG] [Thread-135813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:01:07.484 [DEBUG] [Thread-135813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:01:07.487 [DEBUG] [Thread-135813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:01:07.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:01:07.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:01:07.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:01:07.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:01:07.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:01:07.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:01:07.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:01:07.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:01:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:01:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.792152 -999.00  +16.90  11.56     88  +15.00 1 3 1 3 1     0    0 1.37 -22.55 ----- 10.1 11.6 219.8 26.8 18.8 -3.0 18.6 -3.0 18.5 -3.2 18.9 -2.9
2026-02-11T21:01:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:01:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:01:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.792152
2026-02-11T21:01:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:01:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:01:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:01:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:01:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:01:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:00:58', tmtdew=1.61, humidity=90.14, cloud=0.0, wind=22.67, temperature=16.67, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:00:41.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:01:07.509 [DEBUG] [Thread-135813] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:01:07.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:01:07.605 [DEBUG] [Thread-135816] [transport.py] [_log()] starting thread (client mode): 0xa57419c0
2026-02-11T21:01:07.605 [DEBUG] [Thread-135816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:01:07.620 [DEBUG] [Thread-135816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:01:07.620 [INFO] [Thread-135816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:01:07.628 [DEBUG] [Thread-135816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:01:07.628 [DEBUG] [Thread-135816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] client lang: <none>
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] server lang: <none>
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] kex follows: False
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] Compression: none
2026-02-11T21:01:07.629 [DEBUG] [Thread-135816] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:01:07.688 [DEBUG] [Thread-135816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:01:07.689 [DEBUG] [Thread-135816] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:01:07.689 [DEBUG] [Thread-135816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:01:07.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:01:07.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:01:07.745 [DEBUG] [Thread-135816] [transport.py] [_log()] userauth is OK
2026-02-11T21:01:07.745 [DEBUG] [Thread-135816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:01:07.745 [DEBUG] [Thread-135816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:01:07.745 [DEBUG] [Thread-135816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:01:07.745 [DEBUG] [Thread-135816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:01:07.764 [INFO] [Thread-135816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:01:07.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:01:07.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:01:08.605 [DEBUG] [Thread-135816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:01:08.606 [DEBUG] [Thread-135816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:01:08.653 [DEBUG] [Thread-135816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:01:08.654 [DEBUG] [Thread-135816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:01:08.663 [DEBUG] [Thread-135816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:01:08.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:01:08.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:01:08.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
2026-02-11T21:01:08.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:01:08.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:01:08.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:01:08.699 [DEBUG] [Thread-135816] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:01:10.103 [DEBUG] [Thread-135818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:01:24.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:01:24.099 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:01:25.160 [DEBUG] [Thread-135819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:01:38.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:01:38.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:01:38.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:01:40.197 [DEBUG] [Thread-135820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:01:40.782 [DEBUG] [Thread-135821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:01:40.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 0, 58), 1.61, 90.14, 0.0, 22.67, 16.67, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:01:40.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:00:58
2026-02-11T21:01:41.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:01:41.468 [DEBUG] [Thread-135822] [transport.py] [_log()] starting thread (client mode): 0xa5743e20
2026-02-11T21:01:41.469 [DEBUG] [Thread-135822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:01:41.489 [DEBUG] [Thread-135822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:01:41.489 [INFO] [Thread-135822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:01:41.492 [DEBUG] [Thread-135822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] client lang: <none>
2026-02-11T21:01:41.493 [DEBUG] [Thread-135822] [transport.py] [_log()] server lang: <none>
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] kex follows: False
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] Compression: none
2026-02-11T21:01:41.494 [DEBUG] [Thread-135822] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:01:41.511 [DEBUG] [Thread-135822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:01:41.512 [DEBUG] [Thread-135822] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:01:41.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:01:41.513 [DEBUG] [Thread-135822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:01:41.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:01:41.515 [DEBUG] [Thread-135822] [transport.py] [_log()] userauth is OK
2026-02-11T21:01:41.515 [DEBUG] [Thread-135822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:01:41.515 [DEBUG] [Thread-135822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:01:41.515 [DEBUG] [Thread-135822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:01:41.515 [DEBUG] [Thread-135822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:01:41.540 [INFO] [Thread-135822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:01:41.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:01:42.166 [DEBUG] [Thread-135822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:01:42.166 [DEBUG] [Thread-135822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:01:42.166 [DEBUG] [Thread-135822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:01:42.207 [DEBUG] [Thread-135822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:01:42.208 [DEBUG] [Thread-135822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:01:42.211 [DEBUG] [Thread-135822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:01:42.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:01:42.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:01:42.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:01:42.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:01:42.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:01:42.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:01:42.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:01:42.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:01:42.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:01:42.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.792500 -999.00  +16.80  17.55     88  +15.00 1 3 1 3 1     0    0 1.34 -21.90 ----- 15.5 17.6 193.6 22.5 18.8 -3.0 18.7 -3.0 18.5 -3.0 18.8 -3.1
2026-02-11T21:01:42.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:01:42.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:01:42.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.792500
2026-02-11T21:01:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:01:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:01:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:01:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:01:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:01:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:00:58', tmtdew=1.61, humidity=90.14, cloud=0.0, wind=22.67, temperature=16.67, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:01:12.000', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:01:42.239 [DEBUG] [Thread-135822] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:01:42.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:01:42.334 [DEBUG] [Thread-135825] [transport.py] [_log()] starting thread (client mode): 0xa2d05840
2026-02-11T21:01:42.335 [DEBUG] [Thread-135825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:01:42.349 [DEBUG] [Thread-135825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:01:42.349 [INFO] [Thread-135825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:01:42.356 [DEBUG] [Thread-135825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] client lang: <none>
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] server lang: <none>
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] kex follows: False
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:01:42.357 [DEBUG] [Thread-135825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:01:42.358 [DEBUG] [Thread-135825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:01:42.358 [DEBUG] [Thread-135825] [transport.py] [_log()] Compression: none
2026-02-11T21:01:42.358 [DEBUG] [Thread-135825] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:01:42.416 [DEBUG] [Thread-135825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:01:42.417 [DEBUG] [Thread-135825] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:01:42.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:01:42.418 [DEBUG] [Thread-135825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:01:42.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:01:42.472 [DEBUG] [Thread-135825] [transport.py] [_log()] userauth is OK
2026-02-11T21:01:42.472 [DEBUG] [Thread-135825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:01:42.472 [DEBUG] [Thread-135825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:01:42.472 [DEBUG] [Thread-135825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:01:42.472 [DEBUG] [Thread-135825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:01:42.490 [INFO] [Thread-135825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:01:42.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:01:42.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:01:43.315 [DEBUG] [Thread-135825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:01:43.316 [DEBUG] [Thread-135825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:01:43.364 [DEBUG] [Thread-135825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:01:43.364 [DEBUG] [Thread-135825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:01:43.376 [DEBUG] [Thread-135825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:01:43.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:01:43.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:01: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') -> 00000000
2026-02-11T21:01:43.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:01:43.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:01:43.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:01:43.416 [DEBUG] [Thread-135825] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:01:55.235 [DEBUG] [Thread-135827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:02:10.287 [DEBUG] [Thread-135828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:02:13.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:02:13.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:02:13.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:02:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 1, 33), 2.11, 87.35, 0.0, 31.37, 17.2, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:02:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:01:33
2026-02-11T21:02:15.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:02:16.143 [DEBUG] [Thread-135829] [transport.py] [_log()] starting thread (client mode): 0xa2db5d80
2026-02-11T21:02:16.143 [DEBUG] [Thread-135829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:02:16.163 [DEBUG] [Thread-135829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:02:16.163 [INFO] [Thread-135829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:02:16.166 [DEBUG] [Thread-135829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:02:16.166 [DEBUG] [Thread-135829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] client lang: <none>
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] server lang: <none>
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] kex follows: False
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] Compression: none
2026-02-11T21:02:16.167 [DEBUG] [Thread-135829] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:02:16.180 [DEBUG] [Thread-135829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:02:16.180 [DEBUG] [Thread-135829] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:02:16.181 [DEBUG] [Thread-135829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:02:16.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:02:16.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:02:16.224 [DEBUG] [Thread-135829] [transport.py] [_log()] userauth is OK
2026-02-11T21:02:16.225 [DEBUG] [Thread-135829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:02:16.225 [DEBUG] [Thread-135829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:02:16.225 [DEBUG] [Thread-135829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:02:16.225 [DEBUG] [Thread-135829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:02:16.252 [INFO] [Thread-135829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:02:16.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:02:17.015 [DEBUG] [Thread-135829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:02:17.016 [DEBUG] [Thread-135829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:02:17.016 [DEBUG] [Thread-135829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:02:17.056 [DEBUG] [Thread-135829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:02:17.056 [DEBUG] [Thread-135829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:02:17.060 [DEBUG] [Thread-135829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:02:17.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:02:17.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:02:17.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:02:17.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:02:17.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:02:17.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:02:17.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:02:17.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:02:17.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:02:17.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.792847 -999.00  +16.90   7.76     88  +15.00 1 3 1 3 1     0    0 1.26 -24.40 ----- 7.3 7.8 213.4 18.6 18.8 -3.1 18.6 -3.4 18.5 -2.9 18.8 -3.0
2026-02-11T21:02:17.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:02:17.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:02:17.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.792847
2026-02-11T21:02:17.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:02:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:02:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:02:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:02:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:02:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:01:33', tmtdew=2.11, humidity=87.35, cloud=0.0, wind=31.37, temperature=17.2, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:01:41.981', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:02:17.085 [DEBUG] [Thread-135829] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:02:17.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:02:17.179 [DEBUG] [Thread-135832] [transport.py] [_log()] starting thread (client mode): 0xa5773cd0
2026-02-11T21:02:17.179 [DEBUG] [Thread-135832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:02:17.194 [DEBUG] [Thread-135832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:02:17.194 [INFO] [Thread-135832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] client lang: <none>
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] server lang: <none>
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] kex follows: False
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] Compression: none
2026-02-11T21:02:17.202 [DEBUG] [Thread-135832] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:02:17.261 [DEBUG] [Thread-135832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:02:17.261 [DEBUG] [Thread-135832] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:02:17.262 [DEBUG] [Thread-135832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:02:17.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:02:17.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:02:17.316 [DEBUG] [Thread-135832] [transport.py] [_log()] userauth is OK
2026-02-11T21:02:17.316 [DEBUG] [Thread-135832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:02:17.317 [DEBUG] [Thread-135832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:02:17.317 [DEBUG] [Thread-135832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:02:17.317 [DEBUG] [Thread-135832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:02:17.336 [INFO] [Thread-135832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:02:17.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:02:17.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:02:18.154 [DEBUG] [Thread-135832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:02:18.154 [DEBUG] [Thread-135832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:02:18.205 [DEBUG] [Thread-135832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:02:18.206 [DEBUG] [Thread-135832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:02:18.218 [DEBUG] [Thread-135832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:02:18.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:02:18.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:02:18.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:02:18.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:02:18.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:02:18.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:02:18.255 [DEBUG] [Thread-135832] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:02:24.302 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:02:24.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:02:25.324 [DEBUG] [Thread-135834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:02:40.377 [DEBUG] [Thread-135835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:02:40.862 [DEBUG] [Thread-135836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:02:48.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:02:48.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:02:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:02:50.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 2, 10), 1.66, 90.16, 0.0, 24.35, 16.67, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:02:50.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:02:10
2026-02-11T21:02:50.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:02:50.967 [DEBUG] [Thread-135837] [transport.py] [_log()] starting thread (client mode): 0xa5741120
2026-02-11T21:02:50.968 [DEBUG] [Thread-135837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:02:50.988 [DEBUG] [Thread-135837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:02:50.988 [INFO] [Thread-135837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] client lang: <none>
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] server lang: <none>
2026-02-11T21:02:50.991 [DEBUG] [Thread-135837] [transport.py] [_log()] kex follows: False
2026-02-11T21:02:50.992 [DEBUG] [Thread-135837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:02:50.992 [DEBUG] [Thread-135837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:02:50.992 [DEBUG] [Thread-135837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:02:50.992 [DEBUG] [Thread-135837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:02:50.992 [DEBUG] [Thread-135837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:02:50.992 [DEBUG] [Thread-135837] [transport.py] [_log()] Compression: none
2026-02-11T21:02:50.992 [DEBUG] [Thread-135837] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:02:51.009 [DEBUG] [Thread-135837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:02:51.010 [DEBUG] [Thread-135837] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:02:51.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:02:51.011 [DEBUG] [Thread-135837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:02:51.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:02:51.013 [DEBUG] [Thread-135837] [transport.py] [_log()] userauth is OK
2026-02-11T21:02:51.014 [DEBUG] [Thread-135837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:02:51.014 [DEBUG] [Thread-135837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:02:51.014 [DEBUG] [Thread-135837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:02:51.014 [DEBUG] [Thread-135837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:02:51.039 [INFO] [Thread-135837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:02:51.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:02:51.684 [DEBUG] [Thread-135837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:02:51.684 [DEBUG] [Thread-135837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:02:51.685 [DEBUG] [Thread-135837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:02:51.725 [DEBUG] [Thread-135837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:02:51.726 [DEBUG] [Thread-135837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:02:51.729 [DEBUG] [Thread-135837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:02:51.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:02:51.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:02:51.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:02:51.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:02:51.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:02:51.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:02:51.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:02:51.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:02:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:02:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.793194 -999.00  +16.80  17.51     88  +14.90 1 3 1 3 1     0    0 1.30 -24.08 ----- 14.2 17.5 205.0 24.7 18.8 -3.1 18.6 -2.8 18.5 -3.0 18.8 -3.1
2026-02-11T21:02:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:02:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:02:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.793194
2026-02-11T21:02:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:02:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:02:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:02:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:02:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:02:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:02:10', tmtdew=1.66, humidity=90.16, cloud=0.0, wind=24.35, temperature=16.67, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:02:11.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:02:51.757 [DEBUG] [Thread-135837] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:02:51.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:02:51.854 [DEBUG] [Thread-135840] [transport.py] [_log()] starting thread (client mode): 0xa57b0970
2026-02-11T21:02:51.854 [DEBUG] [Thread-135840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:02:51.868 [DEBUG] [Thread-135840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:02:51.868 [INFO] [Thread-135840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] client lang: <none>
2026-02-11T21:02:51.876 [DEBUG] [Thread-135840] [transport.py] [_log()] server lang: <none>
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] kex follows: False
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] Compression: none
2026-02-11T21:02:51.877 [DEBUG] [Thread-135840] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:02:51.936 [DEBUG] [Thread-135840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:02:51.937 [DEBUG] [Thread-135840] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:02:51.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:02:51.938 [DEBUG] [Thread-135840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:02:51.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:02:51.992 [DEBUG] [Thread-135840] [transport.py] [_log()] userauth is OK
2026-02-11T21:02:51.993 [DEBUG] [Thread-135840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:02:51.993 [DEBUG] [Thread-135840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:02:51.993 [DEBUG] [Thread-135840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:02:51.993 [DEBUG] [Thread-135840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:02:52.013 [INFO] [Thread-135840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:02:52.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:02:52.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:02:52.844 [DEBUG] [Thread-135840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:02:52.844 [DEBUG] [Thread-135840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:02:52.892 [DEBUG] [Thread-135840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:02:52.892 [DEBUG] [Thread-135840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:02:52.900 [DEBUG] [Thread-135840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:02:52.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:02:52.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:02:52.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:02:52.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:02:52.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:02:52.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:02:52.933 [DEBUG] [Thread-135840] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:02:55.410 [DEBUG] [Thread-135842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:10.456 [DEBUG] [Thread-135843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:22.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:03:22.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:03:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:03:24.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:24.508 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:25.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 2, 46), 1.65, 90.19, 0.0, 25.66, 16.58, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:03:25.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:02:46
2026-02-11T21:03:25.500 [DEBUG] [Thread-135844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:03:25.959 [DEBUG] [Thread-135845] [transport.py] [_log()] starting thread (client mode): 0xa5771fc0
2026-02-11T21:03:25.960 [DEBUG] [Thread-135845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:03:25.981 [DEBUG] [Thread-135845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:03:25.981 [INFO] [Thread-135845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] client lang: <none>
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] server lang: <none>
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] kex follows: False
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:03:25.984 [DEBUG] [Thread-135845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:03:25.985 [DEBUG] [Thread-135845] [transport.py] [_log()] Compression: none
2026-02-11T21:03:25.985 [DEBUG] [Thread-135845] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:03:26.003 [DEBUG] [Thread-135845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:03:26.004 [DEBUG] [Thread-135845] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:03:26.004 [DEBUG] [Thread-135845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:03:26.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:03:26.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:03:26.006 [DEBUG] [Thread-135845] [transport.py] [_log()] userauth is OK
2026-02-11T21:03:26.006 [DEBUG] [Thread-135845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:03:26.006 [DEBUG] [Thread-135845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:03:26.007 [DEBUG] [Thread-135845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:03:26.007 [DEBUG] [Thread-135845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:03:26.028 [INFO] [Thread-135845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:03:26.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:03:26.649 [DEBUG] [Thread-135845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:03:26.649 [DEBUG] [Thread-135845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:03:26.650 [DEBUG] [Thread-135845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:03:26.690 [DEBUG] [Thread-135845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:03:26.691 [DEBUG] [Thread-135845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:03:26.694 [DEBUG] [Thread-135845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:03:26.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:03:26.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:03:26.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:03:26.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:03:26.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:03:26.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:03:26.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:03:26.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:03:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:03:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.793541 -999.00  +16.90  15.16     88  +15.00 1 3 1 3 1     0    0 1.31 -22.04 ----- 14.3 15.2 198.9 17.6 18.8 -3.0 18.6 -2.8 18.5 -2.8 18.8 -2.8
2026-02-11T21:03:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:03:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:03:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.793541
2026-02-11T21:03:26.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:03:26.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:03:26.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:03:26.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:03:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:03:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:02:46', tmtdew=1.65, humidity=90.19, cloud=0.0, wind=25.66, temperature=16.58, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:02:41.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:03:26.722 [DEBUG] [Thread-135845] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:03:26.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:03:26.815 [DEBUG] [Thread-135848] [transport.py] [_log()] starting thread (client mode): 0xa2db7790
2026-02-11T21:03:26.815 [DEBUG] [Thread-135848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:03:26.830 [DEBUG] [Thread-135848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:03:26.830 [INFO] [Thread-135848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] client lang: <none>
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] server lang: <none>
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] kex follows: False
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:03:26.838 [DEBUG] [Thread-135848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:03:26.839 [DEBUG] [Thread-135848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:03:26.839 [DEBUG] [Thread-135848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:03:26.839 [DEBUG] [Thread-135848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:03:26.839 [DEBUG] [Thread-135848] [transport.py] [_log()] Compression: none
2026-02-11T21:03:26.839 [DEBUG] [Thread-135848] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:03:26.896 [DEBUG] [Thread-135848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:03:26.897 [DEBUG] [Thread-135848] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:03:26.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:03:26.898 [DEBUG] [Thread-135848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:03:26.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:03:26.955 [DEBUG] [Thread-135848] [transport.py] [_log()] userauth is OK
2026-02-11T21:03:26.955 [DEBUG] [Thread-135848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:03:26.955 [DEBUG] [Thread-135848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:03:26.955 [DEBUG] [Thread-135848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:03:26.955 [DEBUG] [Thread-135848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:03:26.973 [INFO] [Thread-135848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:03:26.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:03:26.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:03:27.827 [DEBUG] [Thread-135848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:03:27.827 [DEBUG] [Thread-135848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:03:27.875 [DEBUG] [Thread-135848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:03:27.876 [DEBUG] [Thread-135848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:03:27.885 [DEBUG] [Thread-135848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:03:27.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:03:27.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:03:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:03:27.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:03:27.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:03:27.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:03:27.923 [DEBUG] [Thread-135848] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:03:40.535 [DEBUG] [Thread-135850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:40.937 [DEBUG] [Thread-135851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:55.595 [DEBUG] [Thread-135852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:03:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:03:57.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:03:57.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:04:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 3, 21), 1.64, 90.22, 0.0, 28.21, 16.62, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:04:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:03:21
2026-02-11T21:04:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:04:00.575 [DEBUG] [Thread-135853] [transport.py] [_log()] starting thread (client mode): 0x9eb05060
2026-02-11T21:04:00.575 [DEBUG] [Thread-135853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:04:00.595 [DEBUG] [Thread-135853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:04:00.596 [INFO] [Thread-135853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] client lang: <none>
2026-02-11T21:04:00.597 [DEBUG] [Thread-135853] [transport.py] [_log()] server lang: <none>
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] kex follows: False
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] Compression: none
2026-02-11T21:04:00.598 [DEBUG] [Thread-135853] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:04:00.608 [DEBUG] [Thread-135853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:04:00.609 [DEBUG] [Thread-135853] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:04:00.610 [DEBUG] [Thread-135853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:04:00.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:04:00.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:04:00.613 [DEBUG] [Thread-135853] [transport.py] [_log()] userauth is OK
2026-02-11T21:04:00.613 [DEBUG] [Thread-135853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:04:00.613 [DEBUG] [Thread-135853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:04:00.613 [DEBUG] [Thread-135853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:04:00.613 [DEBUG] [Thread-135853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:04:00.635 [INFO] [Thread-135853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:04:00.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:04:01.235 [DEBUG] [Thread-135853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:04:01.235 [DEBUG] [Thread-135853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:04:01.235 [DEBUG] [Thread-135853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:04:01.275 [DEBUG] [Thread-135853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:04:01.275 [DEBUG] [Thread-135853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:04:01.278 [DEBUG] [Thread-135853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:04:01.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:04:01.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:04:01.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:04:01.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:04:01.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:04:01.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:04:01.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:04:01.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:04:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:04:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.793888 -999.00  +16.80  22.16     88  +14.90 1 3 1 3 1     0    0 1.29 -22.66 ----- 19.4 22.2 200.6 25.2 18.8 -3.4 18.6 -3.9 18.5 -3.1 18.8 -3.3
2026-02-11T21:04:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:04:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:04:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.793888
2026-02-11T21:04:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:04:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:04:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:04:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:04:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:04:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:03:21', tmtdew=1.64, humidity=90.22, cloud=0.0, wind=28.21, temperature=16.62, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:03:11.923', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:04:01.306 [DEBUG] [Thread-135853] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:04:01.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:04:01.407 [DEBUG] [Thread-135856] [transport.py] [_log()] starting thread (client mode): 0xa57439d0
2026-02-11T21:04:01.407 [DEBUG] [Thread-135856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:04:01.421 [DEBUG] [Thread-135856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:04:01.421 [INFO] [Thread-135856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:04:01.429 [DEBUG] [Thread-135856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:04:01.429 [DEBUG] [Thread-135856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:04:01.429 [DEBUG] [Thread-135856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:04:01.429 [DEBUG] [Thread-135856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:01.429 [DEBUG] [Thread-135856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:01.429 [DEBUG] [Thread-135856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] client lang: <none>
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] server lang: <none>
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] kex follows: False
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:04:01.430 [DEBUG] [Thread-135856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:04:01.431 [DEBUG] [Thread-135856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:04:01.431 [DEBUG] [Thread-135856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:04:01.431 [DEBUG] [Thread-135856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:04:01.431 [DEBUG] [Thread-135856] [transport.py] [_log()] Compression: none
2026-02-11T21:04:01.431 [DEBUG] [Thread-135856] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:04:01.491 [DEBUG] [Thread-135856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:04:01.492 [DEBUG] [Thread-135856] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:04:01.492 [DEBUG] [Thread-135856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:04:01.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:04:01.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:04:01.548 [DEBUG] [Thread-135856] [transport.py] [_log()] userauth is OK
2026-02-11T21:04:01.549 [DEBUG] [Thread-135856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:04:01.549 [DEBUG] [Thread-135856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:04:01.549 [DEBUG] [Thread-135856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:04:01.549 [DEBUG] [Thread-135856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:04:01.568 [INFO] [Thread-135856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:04:01.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:04:01.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:04:02.421 [DEBUG] [Thread-135856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:04:02.421 [DEBUG] [Thread-135856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:04:02.468 [DEBUG] [Thread-135856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:04:02.469 [DEBUG] [Thread-135856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:04:02.478 [DEBUG] [Thread-135856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:04:02.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:04:02.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:04:02.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:04:02.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:04:02.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:04:02.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:04:02.513 [DEBUG] [Thread-135856] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:04:10.630 [DEBUG] [Thread-135858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:04:24.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:04:24.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:04:25.682 [DEBUG] [Thread-135859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:04:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:04:32.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:04:32.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
2026-02-11T21:04:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 3, 58), 1.55, 90.18, 0.0, 27.68, 16.6, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:04:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:03:58
2026-02-11T21:04:34.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:04:35.107 [DEBUG] [Thread-135860] [transport.py] [_log()] starting thread (client mode): 0xa2d9dc30
2026-02-11T21:04:35.107 [DEBUG] [Thread-135860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:04:35.127 [DEBUG] [Thread-135860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:04:35.127 [INFO] [Thread-135860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] client lang: <none>
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] server lang: <none>
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] kex follows: False
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] Compression: none
2026-02-11T21:04:35.130 [DEBUG] [Thread-135860] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:04:35.148 [DEBUG] [Thread-135860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:04:35.149 [DEBUG] [Thread-135860] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:04:35.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:04:35.150 [DEBUG] [Thread-135860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:04:35.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:04:35.151 [DEBUG] [Thread-135860] [transport.py] [_log()] userauth is OK
2026-02-11T21:04:35.151 [DEBUG] [Thread-135860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:04:35.151 [DEBUG] [Thread-135860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:04:35.152 [DEBUG] [Thread-135860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:04:35.152 [DEBUG] [Thread-135860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:04:35.175 [INFO] [Thread-135860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:04:35.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:04:35.821 [DEBUG] [Thread-135860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:04:35.821 [DEBUG] [Thread-135860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:04:35.822 [DEBUG] [Thread-135860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:04:35.862 [DEBUG] [Thread-135860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:04:35.863 [DEBUG] [Thread-135860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:04:35.866 [DEBUG] [Thread-135860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:04:35.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:04:35.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:04:35.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:04:35.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:04:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:04:35.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:04:35.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:04:35.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:04:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:04:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.794583 -999.00  +16.80  17.86     88  +14.90 1 3 1 3 1     0    0 1.38 -20.98 ----- 17.7 17.9 205.0 26.1 18.7 -3.3 18.5 -3.5 18.4 -3.1 18.8 -2.9
2026-02-11T21:04:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:04:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:04:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.794583
2026-02-11T21:04:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:04:35.898 [DEBUG] [Thread-135860] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:04:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:04:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:04:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:04:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:04:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:03:58', tmtdew=1.55, humidity=90.18, cloud=0.0, wind=27.68, temperature=16.6, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:04:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:04:35.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:04:35.995 [DEBUG] [Thread-135863] [transport.py] [_log()] starting thread (client mode): 0xa2d05c60
2026-02-11T21:04:35.995 [DEBUG] [Thread-135863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:04:36.010 [DEBUG] [Thread-135863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:04:36.010 [INFO] [Thread-135863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:04:36.018 [DEBUG] [Thread-135863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:04:36.018 [DEBUG] [Thread-135863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:04:36.018 [DEBUG] [Thread-135863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] client lang: <none>
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] server lang: <none>
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] kex follows: False
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] Compression: none
2026-02-11T21:04:36.019 [DEBUG] [Thread-135863] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:04:36.077 [DEBUG] [Thread-135863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:04:36.077 [DEBUG] [Thread-135863] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:04:36.078 [DEBUG] [Thread-135863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:04:36.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:04:36.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:04:36.142 [DEBUG] [Thread-135863] [transport.py] [_log()] userauth is OK
2026-02-11T21:04:36.142 [DEBUG] [Thread-135863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:04:36.142 [DEBUG] [Thread-135863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:04:36.142 [DEBUG] [Thread-135863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:04:36.142 [DEBUG] [Thread-135863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:04:36.166 [INFO] [Thread-135863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:04:36.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:04:36.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:04:37.026 [DEBUG] [Thread-135863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:04:37.026 [DEBUG] [Thread-135863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:04:37.074 [DEBUG] [Thread-135863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:04:37.074 [DEBUG] [Thread-135863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:04:37.084 [DEBUG] [Thread-135863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:04:37.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:04:37.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')
2026-02-11T21:04:37.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:04:37.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:04:37.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:04:37.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:04:37.121 [DEBUG] [Thread-135863] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:04:40.717 [DEBUG] [Thread-135865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:04:41.013 [DEBUG] [Thread-135866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:04:55.779 [DEBUG] [Thread-135867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:05:07.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:05:07.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:05:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:05:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 4, 34), 2.09, 87.42, 0.0, 28.09, 17.07, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:05:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:04:34
2026-02-11T21:05:09.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:05:09.457 [DEBUG] [Thread-135868] [transport.py] [_log()] starting thread (client mode): 0xa2db5150
2026-02-11T21:05:09.458 [DEBUG] [Thread-135868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:05:09.478 [DEBUG] [Thread-135868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:05:09.478 [INFO] [Thread-135868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] client lang: <none>
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] server lang: <none>
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] kex follows: False
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:05:09.482 [DEBUG] [Thread-135868] [transport.py] [_log()] Compression: none
2026-02-11T21:05:09.483 [DEBUG] [Thread-135868] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:05:09.499 [DEBUG] [Thread-135868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:05:09.499 [DEBUG] [Thread-135868] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:05:09.499 [DEBUG] [Thread-135868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:05:09.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:05:09.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:05:09.500 [DEBUG] [Thread-135868] [transport.py] [_log()] userauth is OK
2026-02-11T21:05:09.500 [DEBUG] [Thread-135868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:05:09.500 [DEBUG] [Thread-135868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:05:09.500 [DEBUG] [Thread-135868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:05:09.500 [DEBUG] [Thread-135868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:05:09.509 [INFO] [Thread-135868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:05:09.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:05:10.694 [DEBUG] [Thread-135868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:05:10.695 [DEBUG] [Thread-135868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:05:10.695 [DEBUG] [Thread-135868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:05:10.735 [DEBUG] [Thread-135868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:05:10.735 [DEBUG] [Thread-135868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:05:10.739 [DEBUG] [Thread-135868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:05:10.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:05:10.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:05:10.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:05:10.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:05:10.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:05:10.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:05:10.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:05:10.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:05:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:05:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.794930 -999.00  +16.70  15.12     88  +14.80 1 3 1 3 1     0    0 1.40 -19.20 ----- 14.1 15.1 205.8 28.6 18.7 -3.3 18.5 -3.1 18.5 -3.2 18.7 -3.0
2026-02-11T21:05:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:05:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:05:10.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.794930
2026-02-11T21:05:10.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:05:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:05:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:05:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:05:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:05:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:04:34', tmtdew=2.09, humidity=87.42, cloud=0.0, wind=28.09, temperature=17.07, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:04:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:05:10.777 [DEBUG] [Thread-135868] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:05:10.812 [DEBUG] [Thread-135871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:05:10.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:05:10.875 [DEBUG] [Thread-135872] [transport.py] [_log()] starting thread (client mode): 0xa57431f0
2026-02-11T21:05:10.875 [DEBUG] [Thread-135872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:05:10.893 [DEBUG] [Thread-135872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:05:10.893 [INFO] [Thread-135872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:05:10.901 [DEBUG] [Thread-135872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:05:10.901 [DEBUG] [Thread-135872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:05:10.901 [DEBUG] [Thread-135872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] client lang: <none>
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] server lang: <none>
2026-02-11T21:05:10.902 [DEBUG] [Thread-135872] [transport.py] [_log()] kex follows: False
2026-02-11T21:05:10.903 [DEBUG] [Thread-135872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:05:10.903 [DEBUG] [Thread-135872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:05:10.903 [DEBUG] [Thread-135872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:05:10.903 [DEBUG] [Thread-135872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:05:10.903 [DEBUG] [Thread-135872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:05:10.903 [DEBUG] [Thread-135872] [transport.py] [_log()] Compression: none
2026-02-11T21:05:10.903 [DEBUG] [Thread-135872] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:05:10.958 [DEBUG] [Thread-135872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:05:10.958 [DEBUG] [Thread-135872] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:05:10.959 [DEBUG] [Thread-135872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:05:10.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:05:10.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:05:11.016 [DEBUG] [Thread-135872] [transport.py] [_log()] userauth is OK
2026-02-11T21:05:11.016 [DEBUG] [Thread-135872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:05:11.016 [DEBUG] [Thread-135872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:05:11.016 [DEBUG] [Thread-135872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:05:11.016 [DEBUG] [Thread-135872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:05:11.035 [INFO] [Thread-135872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:05:11.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:05:11.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:05:11.863 [DEBUG] [Thread-135872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:05:11.863 [DEBUG] [Thread-135872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:05:11.911 [DEBUG] [Thread-135872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:05:11.912 [DEBUG] [Thread-135872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:05:11.921 [DEBUG] [Thread-135872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:05:11.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:05:11.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:05:11.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:05:11.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:05:11.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:05:11.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:05:11.957 [DEBUG] [Thread-135872] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:05:24.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:05:24.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:05:25.855 [DEBUG] [Thread-135874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:05:40.891 [DEBUG] [Thread-135875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:05:41.084 [DEBUG] [Thread-135876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:05:41.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:05:41.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:05:41.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:05:43.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 5, 10), 1.59, 90.23, 0.0, 23.78, 16.57, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:05:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:05:10
2026-02-11T21:05:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:05:44.342 [DEBUG] [Thread-135877] [transport.py] [_log()] starting thread (client mode): 0xa2d9f640
2026-02-11T21:05:44.342 [DEBUG] [Thread-135877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:05:44.362 [DEBUG] [Thread-135877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:05:44.362 [INFO] [Thread-135877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] client lang: <none>
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] server lang: <none>
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] kex follows: False
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] Compression: none
2026-02-11T21:05:44.365 [DEBUG] [Thread-135877] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:05:44.382 [DEBUG] [Thread-135877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:05:44.383 [DEBUG] [Thread-135877] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:05:44.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:05:44.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:05:44.384 [DEBUG] [Thread-135877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:05:44.385 [DEBUG] [Thread-135877] [transport.py] [_log()] userauth is OK
2026-02-11T21:05:44.385 [DEBUG] [Thread-135877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:05:44.385 [DEBUG] [Thread-135877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:05:44.385 [DEBUG] [Thread-135877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:05:44.385 [DEBUG] [Thread-135877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:05:44.408 [INFO] [Thread-135877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:05:44.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:05:45.035 [DEBUG] [Thread-135877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:05:45.036 [DEBUG] [Thread-135877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:05:45.036 [DEBUG] [Thread-135877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:05:45.076 [DEBUG] [Thread-135877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:05:45.077 [DEBUG] [Thread-135877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:05:45.080 [DEBUG] [Thread-135877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:05:45.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:05:45.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:05:45.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:05:45.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:05:45.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:05:45.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:05:45.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:05:45.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:05:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:05:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.795277 -999.00  +16.70  22.33     88  +14.80 1 3 1 3 1     0    0 1.40 -19.60 ----- 18.4 22.3 207.0 25.6 18.7 -3.3 18.5 -3.8 18.4 -3.2 18.7 -3.2
2026-02-11T21:05:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:05:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:05:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.795277
2026-02-11T21:05:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:05:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:05:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:05:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:05:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:05:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:05:10', tmtdew=1.59, humidity=90.23, cloud=0.0, wind=23.78, temperature=16.57, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:05:11.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:05:45.107 [DEBUG] [Thread-135877] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:05:45.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:05:45.201 [DEBUG] [Thread-135880] [transport.py] [_log()] starting thread (client mode): 0xa2db6a70
2026-02-11T21:05:45.202 [DEBUG] [Thread-135880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:05:45.216 [DEBUG] [Thread-135880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:05:45.216 [INFO] [Thread-135880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:05:45.224 [DEBUG] [Thread-135880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:05:45.224 [DEBUG] [Thread-135880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:05:45.224 [DEBUG] [Thread-135880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] client lang: <none>
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] server lang: <none>
2026-02-11T21:05:45.225 [DEBUG] [Thread-135880] [transport.py] [_log()] kex follows: False
2026-02-11T21:05:45.226 [DEBUG] [Thread-135880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:05:45.226 [DEBUG] [Thread-135880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:05:45.226 [DEBUG] [Thread-135880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:05:45.226 [DEBUG] [Thread-135880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:05:45.226 [DEBUG] [Thread-135880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:05:45.226 [DEBUG] [Thread-135880] [transport.py] [_log()] Compression: none
2026-02-11T21:05:45.226 [DEBUG] [Thread-135880] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:05:45.284 [DEBUG] [Thread-135880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:05:45.285 [DEBUG] [Thread-135880] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:05:45.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:05:45.286 [DEBUG] [Thread-135880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:05:45.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:05:45.340 [DEBUG] [Thread-135880] [transport.py] [_log()] userauth is OK
2026-02-11T21:05:45.341 [DEBUG] [Thread-135880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:05:45.341 [DEBUG] [Thread-135880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:05:45.341 [DEBUG] [Thread-135880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:05:45.341 [DEBUG] [Thread-135880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:05:45.360 [INFO] [Thread-135880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:05:45.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:05:45.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:05:46.216 [DEBUG] [Thread-135880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:05:46.216 [DEBUG] [Thread-135880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:05:46.264 [DEBUG] [Thread-135880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:05:46.264 [DEBUG] [Thread-135880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:05:46.273 [DEBUG] [Thread-135880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:05:46.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:05:46.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:05:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:05:46.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:05:46.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:05:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:05:46.307 [DEBUG] [Thread-135880] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:05:55.925 [DEBUG] [Thread-135882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:06:10.976 [DEBUG] [Thread-135883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:06:16.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:06:16.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:06:16.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:06:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 5, 45), 1.58, 90.29, 0.0, 24.79, 16.6, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:06:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:05:45
2026-02-11T21:06:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:06:18.782 [DEBUG] [Thread-135884] [transport.py] [_log()] starting thread (client mode): 0xa2d9d960
2026-02-11T21:06:18.782 [DEBUG] [Thread-135884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:06:18.801 [DEBUG] [Thread-135884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:06:18.801 [INFO] [Thread-135884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] client lang: <none>
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] server lang: <none>
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] kex follows: False
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:06:18.804 [DEBUG] [Thread-135884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:06:18.805 [DEBUG] [Thread-135884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:06:18.805 [DEBUG] [Thread-135884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:06:18.805 [DEBUG] [Thread-135884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:06:18.805 [DEBUG] [Thread-135884] [transport.py] [_log()] Compression: none
2026-02-11T21:06:18.805 [DEBUG] [Thread-135884] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:06:18.822 [DEBUG] [Thread-135884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:06:18.823 [DEBUG] [Thread-135884] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:06:18.823 [DEBUG] [Thread-135884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:06:18.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:06:18.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:06:18.825 [DEBUG] [Thread-135884] [transport.py] [_log()] userauth is OK
2026-02-11T21:06:18.826 [DEBUG] [Thread-135884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:06:18.826 [DEBUG] [Thread-135884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:06:18.826 [DEBUG] [Thread-135884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:06:18.826 [DEBUG] [Thread-135884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:06:18.845 [INFO] [Thread-135884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:06:18.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:06:19.496 [DEBUG] [Thread-135884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:06:19.496 [DEBUG] [Thread-135884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:06:19.496 [DEBUG] [Thread-135884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:06:19.537 [DEBUG] [Thread-135884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:06:19.537 [DEBUG] [Thread-135884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:06:19.540 [DEBUG] [Thread-135884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:06:19.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:06:19.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:06:19.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:06:19.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:06:19.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:06:19.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:06:19.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:06:19.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:06:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:06:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.795625 -999.00  +16.70  15.71     88  +14.80 1 3 1 3 1     0    0 1.41 -18.41 ----- 20.2 15.7 191.8 29.3 18.7 -3.1 18.5 -3.1 18.4 -2.9 18.7 -2.9
2026-02-11T21:06:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:06:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:06:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.795625
2026-02-11T21:06:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:06:19.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:06:19.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:06:19.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:06:19.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:06:19.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:05:45', tmtdew=1.58, humidity=90.29, cloud=0.0, wind=24.79, temperature=16.6, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:05:42.000', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:06:19.563 [DEBUG] [Thread-135884] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:06:19.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:06:19.662 [DEBUG] [Thread-135887] [transport.py] [_log()] starting thread (client mode): 0xa2d9da20
2026-02-11T21:06:19.662 [DEBUG] [Thread-135887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:06:19.679 [DEBUG] [Thread-135887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:06:19.679 [INFO] [Thread-135887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] client lang: <none>
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] server lang: <none>
2026-02-11T21:06:19.687 [DEBUG] [Thread-135887] [transport.py] [_log()] kex follows: False
2026-02-11T21:06:19.688 [DEBUG] [Thread-135887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:06:19.688 [DEBUG] [Thread-135887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:06:19.688 [DEBUG] [Thread-135887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:06:19.688 [DEBUG] [Thread-135887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:06:19.688 [DEBUG] [Thread-135887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:06:19.688 [DEBUG] [Thread-135887] [transport.py] [_log()] Compression: none
2026-02-11T21:06:19.688 [DEBUG] [Thread-135887] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:06:19.743 [DEBUG] [Thread-135887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:06:19.744 [DEBUG] [Thread-135887] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:06:19.744 [DEBUG] [Thread-135887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:06:19.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:06:19.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:06:19.800 [DEBUG] [Thread-135887] [transport.py] [_log()] userauth is OK
2026-02-11T21:06:19.800 [DEBUG] [Thread-135887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:06:19.800 [DEBUG] [Thread-135887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:06:19.800 [DEBUG] [Thread-135887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:06:19.800 [DEBUG] [Thread-135887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:06:19.818 [INFO] [Thread-135887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:06:19.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:06:19.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:06:20.647 [DEBUG] [Thread-135887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:06:20.648 [DEBUG] [Thread-135887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:06:20.697 [DEBUG] [Thread-135887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:06:20.697 [DEBUG] [Thread-135887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:06:20.706 [DEBUG] [Thread-135887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:06:20.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:06:20.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:06:20.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:06:20.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:06:20.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:06:20.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:06:20.740 [DEBUG] [Thread-135887] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:06:25.121 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:06:25.123 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:06:26.011 [DEBUG] [Thread-135889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:06:41.070 [DEBUG] [Thread-135890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:06:41.138 [DEBUG] [Thread-135891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:06:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:06:50.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:06:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:06:52.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 6, 21), 1.59, 90.23, 0.0, 27.6, 16.57, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:06:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:06:21
2026-02-11T21:06:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:06:53.044 [DEBUG] [Thread-135892] [transport.py] [_log()] starting thread (client mode): 0xa2d9df00
2026-02-11T21:06:53.044 [DEBUG] [Thread-135892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:06:53.064 [DEBUG] [Thread-135892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:06:53.064 [INFO] [Thread-135892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] client lang: <none>
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] server lang: <none>
2026-02-11T21:06:53.067 [DEBUG] [Thread-135892] [transport.py] [_log()] kex follows: False
2026-02-11T21:06:53.068 [DEBUG] [Thread-135892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:06:53.068 [DEBUG] [Thread-135892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:06:53.068 [DEBUG] [Thread-135892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:06:53.068 [DEBUG] [Thread-135892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:06:53.068 [DEBUG] [Thread-135892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:06:53.068 [DEBUG] [Thread-135892] [transport.py] [_log()] Compression: none
2026-02-11T21:06:53.068 [DEBUG] [Thread-135892] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:06:53.082 [DEBUG] [Thread-135892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:06:53.082 [DEBUG] [Thread-135892] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:06:53.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:06:53.083 [DEBUG] [Thread-135892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:06:53.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:06:53.085 [DEBUG] [Thread-135892] [transport.py] [_log()] userauth is OK
2026-02-11T21:06:53.085 [DEBUG] [Thread-135892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:06:53.085 [DEBUG] [Thread-135892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:06:53.085 [DEBUG] [Thread-135892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:06:53.085 [DEBUG] [Thread-135892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:06:53.121 [INFO] [Thread-135892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:06:53.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:06:53.776 [DEBUG] [Thread-135892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:06:53.776 [DEBUG] [Thread-135892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:06:53.776 [DEBUG] [Thread-135892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:06:53.817 [DEBUG] [Thread-135892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:06:53.818 [DEBUG] [Thread-135892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:06:53.821 [DEBUG] [Thread-135892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:06:53.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:06:53.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:06:53.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:06:53.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:06:53.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:06:53.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:06:53.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:06:53.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:06:53.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:06:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.795972 -999.00  +16.70  21.20     88  +14.80 1 3 1 3 1     0    0 1.43 -16.76 ----- 24.7 21.2 205.3 27.0 18.6 -3.1 18.4 -4.0 18.4 -3.3 18.7 -3.0
2026-02-11T21:06:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:06:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:06:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.795972
2026-02-11T21:06:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:06:53.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:06:53.847 [DEBUG] [Thread-135892] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:06:53.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:06:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:06:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:06:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:06:21', tmtdew=1.59, humidity=90.23, cloud=0.0, wind=27.6, temperature=16.57, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:06:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:06:53.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:06:53.944 [DEBUG] [Thread-135895] [transport.py] [_log()] starting thread (client mode): 0xa2d56740
2026-02-11T21:06:53.944 [DEBUG] [Thread-135895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:06:53.959 [DEBUG] [Thread-135895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:06:53.959 [INFO] [Thread-135895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:06:53.966 [DEBUG] [Thread-135895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] client lang: <none>
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] server lang: <none>
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] kex follows: False
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:06:53.967 [DEBUG] [Thread-135895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:06:53.968 [DEBUG] [Thread-135895] [transport.py] [_log()] Compression: none
2026-02-11T21:06:53.968 [DEBUG] [Thread-135895] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:06:54.024 [DEBUG] [Thread-135895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:06:54.024 [DEBUG] [Thread-135895] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:06:54.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:06:54.025 [DEBUG] [Thread-135895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:06:54.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:06:54.080 [DEBUG] [Thread-135895] [transport.py] [_log()] userauth is OK
2026-02-11T21:06:54.081 [DEBUG] [Thread-135895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:06:54.081 [DEBUG] [Thread-135895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:06:54.081 [DEBUG] [Thread-135895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:06:54.081 [DEBUG] [Thread-135895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:06:54.099 [INFO] [Thread-135895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:06:54.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:06:54.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:06:54.907 [DEBUG] [Thread-135895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:06:54.907 [DEBUG] [Thread-135895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:06:54.955 [DEBUG] [Thread-135895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:06:54.955 [DEBUG] [Thread-135895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:06:54.965 [DEBUG] [Thread-135895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:06:54.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:06:54.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:06:54.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:06:54.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:06:54.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:06:54.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:06:55.001 [DEBUG] [Thread-135895] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:06:56.102 [DEBUG] [Thread-135897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:11.152 [DEBUG] [Thread-135898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:25.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:07:25.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:07:25.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:07:25.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:25.328 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:26.187 [DEBUG] [Thread-135899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 6, 56), 1.59, 90.23, 0.0, 26.63, 16.57, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:07:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:06:56
2026-02-11T21:07:27.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:07:27.600 [DEBUG] [Thread-135900] [transport.py] [_log()] starting thread (client mode): 0xa2d6b160
2026-02-11T21:07:27.600 [DEBUG] [Thread-135900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:07:27.622 [DEBUG] [Thread-135900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:07:27.622 [INFO] [Thread-135900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:07:27.625 [DEBUG] [Thread-135900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:07:27.625 [DEBUG] [Thread-135900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] client lang: <none>
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] server lang: <none>
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] kex follows: False
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] Compression: none
2026-02-11T21:07:27.626 [DEBUG] [Thread-135900] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:07:27.643 [DEBUG] [Thread-135900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:07:27.644 [DEBUG] [Thread-135900] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:07:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:07:27.645 [DEBUG] [Thread-135900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:07:27.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:07:27.647 [DEBUG] [Thread-135900] [transport.py] [_log()] userauth is OK
2026-02-11T21:07:27.647 [DEBUG] [Thread-135900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:07:27.648 [DEBUG] [Thread-135900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:07:27.648 [DEBUG] [Thread-135900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:07:27.648 [DEBUG] [Thread-135900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:07:27.672 [INFO] [Thread-135900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:07:27.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:07:28.319 [DEBUG] [Thread-135900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:07:28.319 [DEBUG] [Thread-135900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:07:28.320 [DEBUG] [Thread-135900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:07:28.360 [DEBUG] [Thread-135900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:07:28.360 [DEBUG] [Thread-135900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:07:28.363 [DEBUG] [Thread-135900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:07:28.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:07:28.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:07:28.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:07:28.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:07:28.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:07:28.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:07:28.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:07:28.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:07:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:07:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.796319 -999.00  +16.60  22.39     88  +14.80 1 3 1 3 1     0    0 1.48 -16.60 ----- 19.0 22.4 203.4 31.3 18.6 -3.2 18.4 -3.4 18.4 -3.1 18.6 -3.1
2026-02-11T21:07:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:07:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:07:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.796319
2026-02-11T21:07:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:07:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:07:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:07:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:07:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:07:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:06:56', tmtdew=1.59, humidity=90.23, cloud=0.0, wind=26.63, temperature=16.57, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:06:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:07:28.388 [DEBUG] [Thread-135900] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:07:28.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:07:28.484 [DEBUG] [Thread-135903] [transport.py] [_log()] starting thread (client mode): 0xa2d9dd80
2026-02-11T21:07:28.484 [DEBUG] [Thread-135903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:07:28.498 [DEBUG] [Thread-135903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:07:28.498 [INFO] [Thread-135903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:07:28.506 [DEBUG] [Thread-135903] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:07:28.506 [DEBUG] [Thread-135903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:07:28.506 [DEBUG] [Thread-135903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:07:28.506 [DEBUG] [Thread-135903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] client lang: <none>
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] server lang: <none>
2026-02-11T21:07:28.507 [DEBUG] [Thread-135903] [transport.py] [_log()] kex follows: False
2026-02-11T21:07:28.508 [DEBUG] [Thread-135903] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:07:28.508 [DEBUG] [Thread-135903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:07:28.508 [DEBUG] [Thread-135903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:07:28.508 [DEBUG] [Thread-135903] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:07:28.508 [DEBUG] [Thread-135903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:07:28.508 [DEBUG] [Thread-135903] [transport.py] [_log()] Compression: none
2026-02-11T21:07:28.508 [DEBUG] [Thread-135903] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:07:28.571 [DEBUG] [Thread-135903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:07:28.572 [DEBUG] [Thread-135903] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:07:28.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:07:28.574 [DEBUG] [Thread-135903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:07:28.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:07:28.635 [DEBUG] [Thread-135903] [transport.py] [_log()] userauth is OK
2026-02-11T21:07:28.635 [DEBUG] [Thread-135903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:07:28.635 [DEBUG] [Thread-135903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:07:28.636 [DEBUG] [Thread-135903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:07:28.636 [DEBUG] [Thread-135903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:07:28.661 [INFO] [Thread-135903] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:07:28.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:07:28.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:07:29.529 [DEBUG] [Thread-135903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:07:29.529 [DEBUG] [Thread-135903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:07:29.578 [DEBUG] [Thread-135903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:07:29.578 [DEBUG] [Thread-135903] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:07:29.587 [DEBUG] [Thread-135903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:07:29.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:07:29.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')
2026-02-11T21:07: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') -> 00000000
2026-02-11T21:07:29.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:07:29.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:07:29.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:07:29.624 [DEBUG] [Thread-135903] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:07:41.220 [DEBUG] [Thread-135905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:41.223 [DEBUG] [Thread-135906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:56.271 [DEBUG] [Thread-135907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:07:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:07:59.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:07:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:08:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 7, 32), 1.59, 90.26, 0.0, 23.45, 16.59, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:08:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:07:32
2026-02-11T21:08:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:08:02.401 [DEBUG] [Thread-135908] [transport.py] [_log()] starting thread (client mode): 0xa57439d0
2026-02-11T21:08:02.401 [DEBUG] [Thread-135908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:08:02.419 [DEBUG] [Thread-135908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:08:02.419 [INFO] [Thread-135908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:08:02.422 [DEBUG] [Thread-135908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] client lang: <none>
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] server lang: <none>
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] kex follows: False
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] Compression: none
2026-02-11T21:08:02.423 [DEBUG] [Thread-135908] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:08:02.440 [DEBUG] [Thread-135908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:08:02.440 [DEBUG] [Thread-135908] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:08:02.441 [DEBUG] [Thread-135908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:08:02.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:08:02.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:08:02.443 [DEBUG] [Thread-135908] [transport.py] [_log()] userauth is OK
2026-02-11T21:08:02.443 [DEBUG] [Thread-135908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:08:02.443 [DEBUG] [Thread-135908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:08:02.443 [DEBUG] [Thread-135908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:08:02.443 [DEBUG] [Thread-135908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:08:02.469 [INFO] [Thread-135908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:08:02.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:08:03.071 [DEBUG] [Thread-135908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:08:03.071 [DEBUG] [Thread-135908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:08:03.071 [DEBUG] [Thread-135908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:08:03.112 [DEBUG] [Thread-135908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:08:03.112 [DEBUG] [Thread-135908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:08:03.114 [DEBUG] [Thread-135908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:08:03.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:08:03.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:08:03.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:08:03.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:08:03.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:08:03.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:08:03.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:08:03.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:08:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:08:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.796666 -999.00  +16.60  21.32     89  +14.80 1 3 1 3 1     0    0 1.45 -16.63 ----- 17.9 21.3 205.6 25.5 18.6 -3.1 18.4 -3.5 18.3 -2.9 18.7 -3.0
2026-02-11T21:08:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:08:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:08:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.796666
2026-02-11T21:08:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:08:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:08:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:08:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:08:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:08:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:07:32', tmtdew=1.59, humidity=90.26, cloud=0.0, wind=23.45, temperature=16.59, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:07:11.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:08:03.135 [DEBUG] [Thread-135908] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:08:03.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:08:03.234 [DEBUG] [Thread-135911] [transport.py] [_log()] starting thread (client mode): 0xa2d6b100
2026-02-11T21:08:03.234 [DEBUG] [Thread-135911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:08:03.249 [DEBUG] [Thread-135911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:08:03.249 [INFO] [Thread-135911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:08:03.256 [DEBUG] [Thread-135911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:08:03.256 [DEBUG] [Thread-135911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] client lang: <none>
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] server lang: <none>
2026-02-11T21:08:03.257 [DEBUG] [Thread-135911] [transport.py] [_log()] kex follows: False
2026-02-11T21:08:03.258 [DEBUG] [Thread-135911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:08:03.258 [DEBUG] [Thread-135911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:08:03.258 [DEBUG] [Thread-135911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:08:03.258 [DEBUG] [Thread-135911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:08:03.258 [DEBUG] [Thread-135911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:08:03.258 [DEBUG] [Thread-135911] [transport.py] [_log()] Compression: none
2026-02-11T21:08:03.258 [DEBUG] [Thread-135911] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:08:03.316 [DEBUG] [Thread-135911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:08:03.316 [DEBUG] [Thread-135911] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:08:03.317 [DEBUG] [Thread-135911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:08:03.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:08:03.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:08:03.373 [DEBUG] [Thread-135911] [transport.py] [_log()] userauth is OK
2026-02-11T21:08:03.373 [DEBUG] [Thread-135911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:08:03.382 [DEBUG] [Thread-135911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:08:03.383 [DEBUG] [Thread-135911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:08:03.383 [DEBUG] [Thread-135911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:08:03.407 [INFO] [Thread-135911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:08:03.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:08:03.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:08:04.249 [DEBUG] [Thread-135911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:08:04.249 [DEBUG] [Thread-135911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:08:04.296 [DEBUG] [Thread-135911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:08:04.296 [DEBUG] [Thread-135911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:08:04.305 [DEBUG] [Thread-135911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:08:04.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:08:04.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:08:04.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:08:04.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:08:04.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:08:04.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:08:04.339 [DEBUG] [Thread-135911] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:08:11.307 [DEBUG] [Thread-135913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:08:25.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:08:25.531 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:08:26.366 [DEBUG] [Thread-135914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:08:34.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:08:34.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:08:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:08:36.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 8, 7), 1.6, 90.18, 0.0, 27.24, 16.59, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:08:36.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:08:07
2026-02-11T21:08:36.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:08:36.762 [DEBUG] [Thread-135915] [transport.py] [_log()] starting thread (client mode): 0xa2d54bb0
2026-02-11T21:08:36.762 [DEBUG] [Thread-135915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:08:36.782 [DEBUG] [Thread-135915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:08:36.782 [INFO] [Thread-135915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:08:36.785 [DEBUG] [Thread-135915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:08:36.785 [DEBUG] [Thread-135915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:08:36.785 [DEBUG] [Thread-135915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:08:36.785 [DEBUG] [Thread-135915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:36.785 [DEBUG] [Thread-135915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:36.785 [DEBUG] [Thread-135915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] client lang: <none>
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] server lang: <none>
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] kex follows: False
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] Compression: none
2026-02-11T21:08:36.786 [DEBUG] [Thread-135915] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:08:36.804 [DEBUG] [Thread-135915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:08:36.805 [DEBUG] [Thread-135915] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:08:36.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:08:36.806 [DEBUG] [Thread-135915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:08:36.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:08:36.808 [DEBUG] [Thread-135915] [transport.py] [_log()] userauth is OK
2026-02-11T21:08:36.808 [DEBUG] [Thread-135915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:08:36.808 [DEBUG] [Thread-135915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:08:36.808 [DEBUG] [Thread-135915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:08:36.808 [DEBUG] [Thread-135915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:08:36.829 [INFO] [Thread-135915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:08:36.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:08:37.463 [DEBUG] [Thread-135915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:08:37.463 [DEBUG] [Thread-135915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:08:37.463 [DEBUG] [Thread-135915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:08:37.504 [DEBUG] [Thread-135915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:08:37.505 [DEBUG] [Thread-135915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:08:37.508 [DEBUG] [Thread-135915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:08:37.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:08:37.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:08:37.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:08:37.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:08:37.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:08:37.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:08:37.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:08:37.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:08:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:08:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.797013 -999.00  +16.60  16.55     89  +14.80 1 3 1 3 1     0    0 1.44 -16.12 ----- 16.2 16.6 220.8 29.2 18.6 -3.2 18.4 -3.0 18.3 -2.9 18.6 -2.9
2026-02-11T21:08:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:08:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:08:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.797013
2026-02-11T21:08:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:08:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:08:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:08:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:08:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:08:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:08:07', tmtdew=1.6, humidity=90.18, cloud=0.0, wind=27.24, temperature=16.59, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:07:41.923', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:08:37.536 [DEBUG] [Thread-135915] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:08:37.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:08:37.632 [DEBUG] [Thread-135918] [transport.py] [_log()] starting thread (client mode): 0xa5772f20
2026-02-11T21:08:37.632 [DEBUG] [Thread-135918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:08:37.647 [DEBUG] [Thread-135918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:08:37.647 [INFO] [Thread-135918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:08:37.654 [DEBUG] [Thread-135918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] client lang: <none>
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] server lang: <none>
2026-02-11T21:08:37.655 [DEBUG] [Thread-135918] [transport.py] [_log()] kex follows: False
2026-02-11T21:08:37.656 [DEBUG] [Thread-135918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:08:37.656 [DEBUG] [Thread-135918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:08:37.656 [DEBUG] [Thread-135918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:08:37.656 [DEBUG] [Thread-135918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:08:37.656 [DEBUG] [Thread-135918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:08:37.656 [DEBUG] [Thread-135918] [transport.py] [_log()] Compression: none
2026-02-11T21:08:37.656 [DEBUG] [Thread-135918] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:08:37.712 [DEBUG] [Thread-135918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:08:37.712 [DEBUG] [Thread-135918] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:08:37.713 [DEBUG] [Thread-135918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:08:37.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:08:37.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:08:37.768 [DEBUG] [Thread-135918] [transport.py] [_log()] userauth is OK
2026-02-11T21:08:37.768 [DEBUG] [Thread-135918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:08:37.768 [DEBUG] [Thread-135918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:08:37.769 [DEBUG] [Thread-135918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:08:37.769 [DEBUG] [Thread-135918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:08:37.788 [INFO] [Thread-135918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:08:37.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:08:37.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:08:38.602 [DEBUG] [Thread-135918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:08:38.602 [DEBUG] [Thread-135918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:08:38.651 [DEBUG] [Thread-135918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:08:38.651 [DEBUG] [Thread-135918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:08:38.660 [DEBUG] [Thread-135918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:08:38.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:08:38.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:08:38.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:08:38.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:08:38.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:08:38.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:08:38.698 [DEBUG] [Thread-135918] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:08:41.288 [DEBUG] [Thread-135920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:08:41.402 [DEBUG] [Thread-135921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:08:56.452 [DEBUG] [Thread-135922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:09:08.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:09:08.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:09:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:09:10.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 8, 44), 1.54, 90.21, 0.0, 25.16, 16.5, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:09:10.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:08:44
2026-02-11T21:09:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:09:11.205 [DEBUG] [Thread-135923] [transport.py] [_log()] starting thread (client mode): 0xa57439d0
2026-02-11T21:09:11.205 [DEBUG] [Thread-135923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:09:11.226 [DEBUG] [Thread-135923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:09:11.226 [INFO] [Thread-135923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] client lang: <none>
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] server lang: <none>
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] kex follows: False
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] Compression: none
2026-02-11T21:09:11.229 [DEBUG] [Thread-135923] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:09:11.247 [DEBUG] [Thread-135923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:09:11.247 [DEBUG] [Thread-135923] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:09:11.248 [DEBUG] [Thread-135923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:09:11.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:09:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:09:11.250 [DEBUG] [Thread-135923] [transport.py] [_log()] userauth is OK
2026-02-11T21:09:11.250 [DEBUG] [Thread-135923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:09:11.250 [DEBUG] [Thread-135923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:09:11.250 [DEBUG] [Thread-135923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:09:11.250 [DEBUG] [Thread-135923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:09:11.275 [INFO] [Thread-135923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:09:11.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:09:11.489 [DEBUG] [Thread-135925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:09:11.904 [DEBUG] [Thread-135923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:09:11.904 [DEBUG] [Thread-135923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:09:11.905 [DEBUG] [Thread-135923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:09:11.946 [DEBUG] [Thread-135923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:09:11.946 [DEBUG] [Thread-135923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:09:11.949 [DEBUG] [Thread-135923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:09:11.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:09:11.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:09:11.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:09:11.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:09:11.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:09:11.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:09:11.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:09:11.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:09:11.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:09:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.797708 -999.00  +16.70  16.21     89  +14.90 1 3 1 3 1     0    0 1.53 -13.53 ----- 20.8 16.2 203.6 23.2 18.6 -2.9 18.4 -3.5 18.3 -2.9 18.7 -2.9
2026-02-11T21:09:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:09:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:09:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.797708
2026-02-11T21:09:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:09:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:09:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:09:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:09:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:09:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:08:44', tmtdew=1.54, humidity=90.21, cloud=0.0, wind=25.16, temperature=16.5, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:08:41.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:09:11.975 [DEBUG] [Thread-135923] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:09:12.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:09:25.735 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:09:25.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:09:26.523 [DEBUG] [Thread-135927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:09:41.361 [DEBUG] [Thread-135928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:09:41.576 [DEBUG] [Thread-135929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:09:56.612 [DEBUG] [Thread-135930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:10:11.657 [DEBUG] [Thread-135931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:10:25.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:10:25.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:10:26.694 [DEBUG] [Thread-135932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:10:41.435 [DEBUG] [Thread-135933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:10:41.731 [DEBUG] [Thread-135934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:10:56.769 [DEBUG] [Thread-135935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:11.808 [DEBUG] [Thread-135936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:24.216 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T21:11:26.146 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:26.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:26.844 [DEBUG] [Thread-135937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:41.512 [DEBUG] [Thread-135938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:41.877 [DEBUG] [Thread-135939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:54.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:11:54.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:11: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
2026-02-11T21:11:56.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 11, 42), 2.06, 87.58, 0.0, 23.25, 17.1, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:11:56.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:11:42
2026-02-11T21:11:56.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:11:56.638 [DEBUG] [Thread-135940] [transport.py] [_log()] starting thread (client mode): 0xa2d6beb0
2026-02-11T21:11:56.638 [DEBUG] [Thread-135940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:11:56.659 [DEBUG] [Thread-135940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:11:56.659 [INFO] [Thread-135940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:11:56.662 [DEBUG] [Thread-135940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:11:56.662 [DEBUG] [Thread-135940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] client lang: <none>
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] server lang: <none>
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] kex follows: False
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] Compression: none
2026-02-11T21:11:56.663 [DEBUG] [Thread-135940] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:11:56.680 [DEBUG] [Thread-135940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:11:56.681 [DEBUG] [Thread-135940] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:11:56.681 [DEBUG] [Thread-135940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:11:56.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:11:56.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:11:56.683 [DEBUG] [Thread-135940] [transport.py] [_log()] userauth is OK
2026-02-11T21:11:56.684 [DEBUG] [Thread-135940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:11:56.684 [DEBUG] [Thread-135940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:11:56.684 [DEBUG] [Thread-135940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:11:56.684 [DEBUG] [Thread-135940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:11:56.709 [INFO] [Thread-135940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:11:56.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:11:56.915 [DEBUG] [Thread-135942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:11:57.354 [DEBUG] [Thread-135940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:11:57.354 [DEBUG] [Thread-135940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:11:57.355 [DEBUG] [Thread-135940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:11:57.395 [DEBUG] [Thread-135940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:11:57.396 [DEBUG] [Thread-135940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:11:57.398 [DEBUG] [Thread-135940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:11:57.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:11:57.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:11:57.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:11:57.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:11:57.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:11:57.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:11:57.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:11:57.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:11:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:11:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.799444 -999.00  +16.60  17.56     89  +14.80 1 3 1 3 1     0    0 1.55 -12.05 ----- 19.1 17.6 202.0 26.8 18.5 -2.8 18.4 -2.9 18.2 -2.7 18.6 -2.7
2026-02-11T21:11:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:11:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:11:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.799444
2026-02-11T21:11:57.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:11:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:11:57.425 [DEBUG] [Thread-135940] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:11:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:11:57.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:11:57.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:11:57.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:11:42', tmtdew=2.06, humidity=87.58, cloud=0.0, wind=23.25, temperature=17.1, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:11:11.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:11:57.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:11:57.529 [DEBUG] [Thread-135944] [transport.py] [_log()] starting thread (client mode): 0xa2d6bd90
2026-02-11T21:11:57.529 [DEBUG] [Thread-135944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:11:57.544 [DEBUG] [Thread-135944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:11:57.544 [INFO] [Thread-135944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:11:57.551 [DEBUG] [Thread-135944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] client lang: <none>
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] server lang: <none>
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] kex follows: False
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] Compression: none
2026-02-11T21:11:57.552 [DEBUG] [Thread-135944] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:11:57.610 [DEBUG] [Thread-135944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:11:57.611 [DEBUG] [Thread-135944] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:11:57.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:11:57.612 [DEBUG] [Thread-135944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:11:57.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:11:57.666 [DEBUG] [Thread-135944] [transport.py] [_log()] userauth is OK
2026-02-11T21:11:57.667 [DEBUG] [Thread-135944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:11:57.667 [DEBUG] [Thread-135944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:11:57.667 [DEBUG] [Thread-135944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:11:57.667 [DEBUG] [Thread-135944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:11:57.686 [INFO] [Thread-135944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:11:57.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:11:57.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:11:58.484 [DEBUG] [Thread-135944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:11:58.484 [DEBUG] [Thread-135944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:11:58.532 [DEBUG] [Thread-135944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:11:58.533 [DEBUG] [Thread-135944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:11:58.542 [DEBUG] [Thread-135944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:11:58.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:11:58.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:11:58.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:11:58.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:11:58.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:11:58.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:11:58.578 [DEBUG] [Thread-135944] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:12:11.954 [DEBUG] [Thread-135946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:12:26.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:12:26.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:12:27.007 [DEBUG] [Thread-135947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:12:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:12:28.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:12:28.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:12:30.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 12, 17), 1.54, 90.73, 0.0, 26.54, 16.55, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:12:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:12:17
2026-02-11T21:12:30.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:12:30.894 [DEBUG] [Thread-135948] [transport.py] [_log()] starting thread (client mode): 0xa575bcd0
2026-02-11T21:12:30.895 [DEBUG] [Thread-135948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:12:30.916 [DEBUG] [Thread-135948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:12:30.916 [INFO] [Thread-135948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:12:30.919 [DEBUG] [Thread-135948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:12:30.919 [DEBUG] [Thread-135948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:12:30.919 [DEBUG] [Thread-135948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:12:30.919 [DEBUG] [Thread-135948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:12:30.919 [DEBUG] [Thread-135948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:12:30.919 [DEBUG] [Thread-135948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:12:30.919 [DEBUG] [Thread-135948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] client lang: <none>
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] server lang: <none>
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] kex follows: False
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] Compression: none
2026-02-11T21:12:30.920 [DEBUG] [Thread-135948] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:12:30.939 [DEBUG] [Thread-135948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:12:30.940 [DEBUG] [Thread-135948] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:12:30.941 [DEBUG] [Thread-135948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:12:30.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:12:30.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:12:30.943 [DEBUG] [Thread-135948] [transport.py] [_log()] userauth is OK
2026-02-11T21:12:30.944 [DEBUG] [Thread-135948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:12:30.944 [DEBUG] [Thread-135948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:12:30.944 [DEBUG] [Thread-135948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:12:30.944 [DEBUG] [Thread-135948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:12:30.968 [INFO] [Thread-135948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:12:30.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:12:31.608 [DEBUG] [Thread-135948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:12:31.608 [DEBUG] [Thread-135948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:12:31.609 [DEBUG] [Thread-135948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:12:31.649 [DEBUG] [Thread-135948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:12:31.650 [DEBUG] [Thread-135948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:12:31.653 [DEBUG] [Thread-135948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:12:31.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:12:31.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:12:31.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:12:31.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:12:31.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:12:31.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:12:31.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:12:31.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:12:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:12:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.799791 -999.00  +16.60  16.70     89  +14.80 1 3 1 3 1     0    0 1.60 -11.90 ----- 19.6 16.7 184.5 28.3 18.5 -3.0 18.3 -2.8 18.3 -2.9 18.5 -2.9
2026-02-11T21:12:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:12:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:12:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.799791
2026-02-11T21:12:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:12:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:12:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:12:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:12:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:12:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:12:17', tmtdew=1.54, humidity=90.73, cloud=0.0, wind=26.54, temperature=16.55, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:11:41.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:12:31.681 [DEBUG] [Thread-135948] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:12:31.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:12:31.791 [DEBUG] [Thread-135951] [transport.py] [_log()] starting thread (client mode): 0xa57e1990
2026-02-11T21:12:31.792 [DEBUG] [Thread-135951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:12:31.807 [DEBUG] [Thread-135951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:12:31.807 [INFO] [Thread-135951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:12:31.814 [DEBUG] [Thread-135951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:12:31.815 [DEBUG] [Thread-135951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:12:31.815 [DEBUG] [Thread-135951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:12:31.815 [DEBUG] [Thread-135951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:12:31.815 [DEBUG] [Thread-135951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:12:31.815 [DEBUG] [Thread-135951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:12:31.815 [DEBUG] [Thread-135951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] client lang: <none>
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] server lang: <none>
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] kex follows: False
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] Compression: none
2026-02-11T21:12:31.816 [DEBUG] [Thread-135951] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:12:31.872 [DEBUG] [Thread-135951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:12:31.873 [DEBUG] [Thread-135951] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:12:31.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:12:31.874 [DEBUG] [Thread-135951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:12:31.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:12:31.928 [DEBUG] [Thread-135951] [transport.py] [_log()] userauth is OK
2026-02-11T21:12:31.929 [DEBUG] [Thread-135951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:12:31.929 [DEBUG] [Thread-135951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:12:31.929 [DEBUG] [Thread-135951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:12:31.929 [DEBUG] [Thread-135951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:12:31.947 [INFO] [Thread-135951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:12:31.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:12:31.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:12:32.791 [DEBUG] [Thread-135951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:12:32.791 [DEBUG] [Thread-135951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:12:32.839 [DEBUG] [Thread-135951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:12:32.840 [DEBUG] [Thread-135951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:12:32.849 [DEBUG] [Thread-135951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:12:32.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:12: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')
2026-02-11T21:12:32.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:12:32.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:12:32.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:12:32.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:12:32.882 [DEBUG] [Thread-135951] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:12:41.586 [DEBUG] [Thread-135953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:12:42.044 [DEBUG] [Thread-135954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:12:57.097 [DEBUG] [Thread-135955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:13:02.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:13:02.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:13:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:13:05.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 12, 53), 1.54, 90.73, 0.0, 25.95, 16.67, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:13:05.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:12:53
2026-02-11T21:13:05.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:13:05.849 [DEBUG] [Thread-135956] [transport.py] [_log()] starting thread (client mode): 0xa2d9f970
2026-02-11T21:13:05.849 [DEBUG] [Thread-135956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:13:05.870 [DEBUG] [Thread-135956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:13:05.870 [INFO] [Thread-135956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:13:05.873 [DEBUG] [Thread-135956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:13:05.873 [DEBUG] [Thread-135956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] client lang: <none>
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] server lang: <none>
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] kex follows: False
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:13:05.874 [DEBUG] [Thread-135956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:13:05.875 [DEBUG] [Thread-135956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:13:05.875 [DEBUG] [Thread-135956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:13:05.875 [DEBUG] [Thread-135956] [transport.py] [_log()] Compression: none
2026-02-11T21:13:05.875 [DEBUG] [Thread-135956] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:13:05.893 [DEBUG] [Thread-135956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:13:05.894 [DEBUG] [Thread-135956] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:13:05.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:13:05.895 [DEBUG] [Thread-135956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:13:05.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:13:05.897 [DEBUG] [Thread-135956] [transport.py] [_log()] userauth is OK
2026-02-11T21:13:05.897 [DEBUG] [Thread-135956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:13:05.897 [DEBUG] [Thread-135956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:13:05.898 [DEBUG] [Thread-135956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:13:05.898 [DEBUG] [Thread-135956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:13:05.923 [INFO] [Thread-135956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:13:05.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:13:06.576 [DEBUG] [Thread-135956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:13:06.577 [DEBUG] [Thread-135956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:13:06.577 [DEBUG] [Thread-135956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:13:06.617 [DEBUG] [Thread-135956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:13:06.617 [DEBUG] [Thread-135956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:13:06.620 [DEBUG] [Thread-135956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:13:06.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:13:06.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:13:06.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:13:06.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:13:06.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:13:06.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:13:06.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:13:06.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:13:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:13:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.800485 -999.00  +16.60  19.11     89  +14.80 1 3 1 3 1     0    0 1.54 -11.53 ----- 16.7 19.1 204.0 23.2 18.5 -2.9 18.3 -3.0 18.2 -2.8 18.6 -2.9
2026-02-11T21:13:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:13:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:13:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.800485
2026-02-11T21:13:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:13:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:13:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:13:06.646 [DEBUG] [Thread-135956] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:13:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:13:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:13:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:12:53', tmtdew=1.54, humidity=90.73, cloud=0.0, wind=25.95, temperature=16.67, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:12:41.904', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:13:06.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:13:06.741 [DEBUG] [Thread-135959] [transport.py] [_log()] starting thread (client mode): 0xa2dc3790
2026-02-11T21:13:06.741 [DEBUG] [Thread-135959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:13:06.756 [DEBUG] [Thread-135959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:13:06.756 [INFO] [Thread-135959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] client lang: <none>
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] server lang: <none>
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] kex follows: False
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:13:06.764 [DEBUG] [Thread-135959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:13:06.765 [DEBUG] [Thread-135959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:13:06.765 [DEBUG] [Thread-135959] [transport.py] [_log()] Compression: none
2026-02-11T21:13:06.765 [DEBUG] [Thread-135959] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:13:06.825 [DEBUG] [Thread-135959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:13:06.826 [DEBUG] [Thread-135959] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:13:06.826 [DEBUG] [Thread-135959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:13:06.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:13:06.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:13:06.882 [DEBUG] [Thread-135959] [transport.py] [_log()] userauth is OK
2026-02-11T21:13:06.882 [DEBUG] [Thread-135959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:13:06.882 [DEBUG] [Thread-135959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:13:06.882 [DEBUG] [Thread-135959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:13:06.883 [DEBUG] [Thread-135959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:13:06.904 [INFO] [Thread-135959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:13:06.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:13:06.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:13:07.783 [DEBUG] [Thread-135959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:13:07.783 [DEBUG] [Thread-135959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:13:07.831 [DEBUG] [Thread-135959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:13:07.831 [DEBUG] [Thread-135959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:13:07.840 [DEBUG] [Thread-135959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:13:07.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:13:07.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')
2026-02-11T21:13:07.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
2026-02-11T21:13:07.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:13:07.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:13:07.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:13:07.877 [DEBUG] [Thread-135959] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:13:12.136 [DEBUG] [Thread-135961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:13:26.550 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:13:26.551 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:13:27.186 [DEBUG] [Thread-135962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:13:37.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:13:37.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:13:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:13:39.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 13, 28), 1.53, 90.81, 0.0, 23.22, 16.49, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:13:39.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:13:28
2026-02-11T21:13:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:13:40.424 [DEBUG] [Thread-135963] [transport.py] [_log()] starting thread (client mode): 0xa2d9fb80
2026-02-11T21:13:40.425 [DEBUG] [Thread-135963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:13:40.445 [DEBUG] [Thread-135963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:13:40.446 [INFO] [Thread-135963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:13:40.449 [DEBUG] [Thread-135963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] client lang: <none>
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] server lang: <none>
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] kex follows: False
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] Compression: none
2026-02-11T21:13:40.450 [DEBUG] [Thread-135963] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:13:40.467 [DEBUG] [Thread-135963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:13:40.468 [DEBUG] [Thread-135963] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:13:40.468 [DEBUG] [Thread-135963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:13:40.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:13:40.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:13:40.469 [DEBUG] [Thread-135963] [transport.py] [_log()] userauth is OK
2026-02-11T21:13:40.469 [DEBUG] [Thread-135963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:13:40.469 [DEBUG] [Thread-135963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:13:40.469 [DEBUG] [Thread-135963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:13:40.469 [DEBUG] [Thread-135963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:13:40.482 [INFO] [Thread-135963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:13:40.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:13:41.130 [DEBUG] [Thread-135963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:13:41.131 [DEBUG] [Thread-135963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:13:41.131 [DEBUG] [Thread-135963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:13:41.171 [DEBUG] [Thread-135963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:13:41.172 [DEBUG] [Thread-135963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:13:41.175 [DEBUG] [Thread-135963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:13:41.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:13:41.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:13:41.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:13:41.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:13:41.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:13:41.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:13:41.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:13:41.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:13:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:13:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.800833 -999.00  +16.60  14.80     89  +14.80 1 3 1 3 1     0    0 1.59 -10.96 ----- 17.8 14.8 202.4 22.1 18.5 -2.7 18.4 -2.5 18.2 -2.8 18.6 -2.6
2026-02-11T21:13:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:13:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:13:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.800833
2026-02-11T21:13:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:13:41.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:13:41.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:13:41.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:13:41.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:13:41.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:13:28', tmtdew=1.53, humidity=90.81, cloud=0.0, wind=23.22, temperature=16.49, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:13:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:13:41.202 [DEBUG] [Thread-135963] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:13:41.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:13:41.307 [DEBUG] [Thread-135966] [transport.py] [_log()] starting thread (client mode): 0xa5742a10
2026-02-11T21:13:41.307 [DEBUG] [Thread-135966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:13:41.322 [DEBUG] [Thread-135966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:13:41.322 [INFO] [Thread-135966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:13:41.330 [DEBUG] [Thread-135966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:13:41.330 [DEBUG] [Thread-135966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] client lang: <none>
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] server lang: <none>
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] kex follows: False
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] Compression: none
2026-02-11T21:13:41.331 [DEBUG] [Thread-135966] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:13:41.391 [DEBUG] [Thread-135966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:13:41.392 [DEBUG] [Thread-135966] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:13:41.392 [DEBUG] [Thread-135966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:13:41.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:13:41.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:13:41.447 [DEBUG] [Thread-135966] [transport.py] [_log()] userauth is OK
2026-02-11T21:13:41.448 [DEBUG] [Thread-135966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:13:41.448 [DEBUG] [Thread-135966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:13:41.448 [DEBUG] [Thread-135966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:13:41.448 [DEBUG] [Thread-135966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:13:41.466 [INFO] [Thread-135966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:13:41.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:13:41.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:13:41.678 [DEBUG] [Thread-135968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:13:42.219 [DEBUG] [Thread-135969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:13:42.280 [DEBUG] [Thread-135966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:13:42.280 [DEBUG] [Thread-135966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:13:42.327 [DEBUG] [Thread-135966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:13:42.328 [DEBUG] [Thread-135966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:13:42.337 [DEBUG] [Thread-135966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:13:42.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:13:42.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:13:42.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:13:42.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:13:42.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:13:42.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:13:42.373 [DEBUG] [Thread-135966] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:13:57.272 [DEBUG] [Thread-135970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:14:12.311 [DEBUG] [Thread-135971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:14:12.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:14:12.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:14:12.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:14:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 14, 3), 1.52, 90.83, 0.0, 25.83, 16.5, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:14:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:14:03
2026-02-11T21:14:14.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:14:14.870 [DEBUG] [Thread-135972] [transport.py] [_log()] starting thread (client mode): 0xa57e2260
2026-02-11T21:14:14.870 [DEBUG] [Thread-135972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:14:14.884 [DEBUG] [Thread-135972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:14:14.885 [INFO] [Thread-135972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:14:14.886 [DEBUG] [Thread-135972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:14:14.886 [DEBUG] [Thread-135972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:14:14.886 [DEBUG] [Thread-135972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:14:14.886 [DEBUG] [Thread-135972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:14.886 [DEBUG] [Thread-135972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:14.886 [DEBUG] [Thread-135972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:14.886 [DEBUG] [Thread-135972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] client lang: <none>
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] server lang: <none>
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] kex follows: False
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] Compression: none
2026-02-11T21:14:14.887 [DEBUG] [Thread-135972] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:14:14.900 [DEBUG] [Thread-135972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:14:14.901 [DEBUG] [Thread-135972] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:14:14.901 [DEBUG] [Thread-135972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:14:14.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:14:14.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:14:14.902 [DEBUG] [Thread-135972] [transport.py] [_log()] userauth is OK
2026-02-11T21:14:14.903 [DEBUG] [Thread-135972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:14:14.903 [DEBUG] [Thread-135972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:14:14.903 [DEBUG] [Thread-135972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:14:14.903 [DEBUG] [Thread-135972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:14:14.927 [INFO] [Thread-135972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:14:14.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:14:15.511 [DEBUG] [Thread-135972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:14:15.511 [DEBUG] [Thread-135972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:14:15.512 [DEBUG] [Thread-135972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:14:15.552 [DEBUG] [Thread-135972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:14:15.552 [DEBUG] [Thread-135972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:14:15.556 [DEBUG] [Thread-135972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:14:15.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:14:15.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:14:15.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:14:15.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:14:15.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:14:15.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:14:15.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:14:15.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:14:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:14:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.801180 -999.00  +16.70  10.50     89  +14.90 1 3 1 3 1     0    0 1.58 -10.61 ----- 11.2 10.5 186.9 17.8 18.6 -2.9 18.4 -2.6 18.2 -2.8 18.6 -2.6
2026-02-11T21:14:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:14:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:14:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.801180
2026-02-11T21:14:15.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:14:15.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:14:15.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:14:15.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:14:15.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:14:15.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:14:03', tmtdew=1.52, humidity=90.83, cloud=0.0, wind=25.83, temperature=16.5, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:13:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:14:15.585 [DEBUG] [Thread-135972] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:14:15.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:14:15.681 [DEBUG] [Thread-135975] [transport.py] [_log()] starting thread (client mode): 0xa2d6aec0
2026-02-11T21:14:15.681 [DEBUG] [Thread-135975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:14:15.696 [DEBUG] [Thread-135975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:14:15.696 [INFO] [Thread-135975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] client lang: <none>
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] server lang: <none>
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] kex follows: False
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:14:15.704 [DEBUG] [Thread-135975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:14:15.705 [DEBUG] [Thread-135975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:14:15.705 [DEBUG] [Thread-135975] [transport.py] [_log()] Compression: none
2026-02-11T21:14:15.705 [DEBUG] [Thread-135975] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:14:15.764 [DEBUG] [Thread-135975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:14:15.764 [DEBUG] [Thread-135975] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:14:15.765 [DEBUG] [Thread-135975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:14:15.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:14:15.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:14:15.821 [DEBUG] [Thread-135975] [transport.py] [_log()] userauth is OK
2026-02-11T21:14:15.821 [DEBUG] [Thread-135975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:14:15.821 [DEBUG] [Thread-135975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:14:15.822 [DEBUG] [Thread-135975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:14:15.822 [DEBUG] [Thread-135975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:14:15.840 [INFO] [Thread-135975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:14:15.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:14:15.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:14:16.655 [DEBUG] [Thread-135975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:14:16.655 [DEBUG] [Thread-135975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:14:16.703 [DEBUG] [Thread-135975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:14:16.703 [DEBUG] [Thread-135975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:14:16.712 [DEBUG] [Thread-135975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:14:16.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:14:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:14:16.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:14:16.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:14:16.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:14:16.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:14:16.755 [DEBUG] [Thread-135975] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:14:26.752 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:14:26.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:14:27.347 [DEBUG] [Thread-135977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:14:41.753 [DEBUG] [Thread-135978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:14:42.396 [DEBUG] [Thread-135979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:14:46.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:14:46.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:14:46.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:14:48.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 14, 39), 2.04, 87.68, 0.0, 29.22, 16.94, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:14:48.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:14:39
2026-02-11T21:14:49.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:14:49.321 [DEBUG] [Thread-135980] [transport.py] [_log()] starting thread (client mode): 0xa2d9f2b0
2026-02-11T21:14:49.321 [DEBUG] [Thread-135980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:14:49.343 [DEBUG] [Thread-135980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:14:49.343 [INFO] [Thread-135980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:14:49.346 [DEBUG] [Thread-135980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] client lang: <none>
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] server lang: <none>
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] kex follows: False
2026-02-11T21:14:49.347 [DEBUG] [Thread-135980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:14:49.348 [DEBUG] [Thread-135980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:14:49.348 [DEBUG] [Thread-135980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:14:49.348 [DEBUG] [Thread-135980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:14:49.348 [DEBUG] [Thread-135980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:14:49.348 [DEBUG] [Thread-135980] [transport.py] [_log()] Compression: none
2026-02-11T21:14:49.348 [DEBUG] [Thread-135980] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:14:49.366 [DEBUG] [Thread-135980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:14:49.367 [DEBUG] [Thread-135980] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:14:49.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:14:49.368 [DEBUG] [Thread-135980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:14:49.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:14:49.371 [DEBUG] [Thread-135980] [transport.py] [_log()] userauth is OK
2026-02-11T21:14:49.371 [DEBUG] [Thread-135980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:14:49.372 [DEBUG] [Thread-135980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:14:49.372 [DEBUG] [Thread-135980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:14:49.372 [DEBUG] [Thread-135980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:14:49.398 [INFO] [Thread-135980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:14:49.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:14:50.022 [DEBUG] [Thread-135980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:14:50.022 [DEBUG] [Thread-135980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:14:50.023 [DEBUG] [Thread-135980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:14:50.063 [DEBUG] [Thread-135980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:14:50.064 [DEBUG] [Thread-135980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:14:50.067 [DEBUG] [Thread-135980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:14:50.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:14:50.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:14:50.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:14:50.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:14:50.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:14:50.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:14:50.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:14:50.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:14:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:14:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.801527 -999.00  +16.70  21.83     88  +14.80 1 3 1 3 1     0    0 1.57 -10.51 ----- 16.8 21.8 199.4 23.4 18.5 -3.1 18.3 -3.2 18.3 -2.7 18.6 -3.0
2026-02-11T21:14:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:14:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:14:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.801527
2026-02-11T21:14:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:14:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:14:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:14:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:14:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:14:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:14:39', tmtdew=2.04, humidity=87.68, cloud=0.0, wind=29.22, temperature=16.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:14:11.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:14:50.096 [DEBUG] [Thread-135980] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:14:50.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:14:50.193 [DEBUG] [Thread-135983] [transport.py] [_log()] starting thread (client mode): 0xa5741cc0
2026-02-11T21:14:50.193 [DEBUG] [Thread-135983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:14:50.208 [DEBUG] [Thread-135983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:14:50.208 [INFO] [Thread-135983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:14:50.216 [DEBUG] [Thread-135983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:14:50.216 [DEBUG] [Thread-135983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:14:50.217 [DEBUG] [Thread-135983] [transport.py] [_log()] client lang: <none>
2026-02-11T21:14:50.218 [DEBUG] [Thread-135983] [transport.py] [_log()] server lang: <none>
2026-02-11T21:14:50.218 [DEBUG] [Thread-135983] [transport.py] [_log()] kex follows: False
2026-02-11T21:14:50.218 [DEBUG] [Thread-135983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:14:50.218 [DEBUG] [Thread-135983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:14:50.218 [DEBUG] [Thread-135983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:14:50.218 [DEBUG] [Thread-135983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:14:50.218 [DEBUG] [Thread-135983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:14:50.219 [DEBUG] [Thread-135983] [transport.py] [_log()] Compression: none
2026-02-11T21:14:50.219 [DEBUG] [Thread-135983] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:14:50.274 [DEBUG] [Thread-135983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:14:50.275 [DEBUG] [Thread-135983] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:14:50.275 [DEBUG] [Thread-135983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:14:50.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:14:50.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:14:50.330 [DEBUG] [Thread-135983] [transport.py] [_log()] userauth is OK
2026-02-11T21:14:50.331 [DEBUG] [Thread-135983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:14:50.331 [DEBUG] [Thread-135983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:14:50.331 [DEBUG] [Thread-135983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:14:50.331 [DEBUG] [Thread-135983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:14:50.350 [INFO] [Thread-135983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:14:50.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:14:50.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:14:51.211 [DEBUG] [Thread-135983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:14:51.211 [DEBUG] [Thread-135983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:14:51.259 [DEBUG] [Thread-135983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:14:51.260 [DEBUG] [Thread-135983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:14:51.269 [DEBUG] [Thread-135983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:14:51.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:14:51.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:14:51.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:14:51.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:14:51.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:14:51.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:14:51.305 [DEBUG] [Thread-135983] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:14:57.432 [DEBUG] [Thread-135985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:12.492 [DEBUG] [Thread-135986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:15:21.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:15:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:15:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 14, 39), 2.04, 87.68, 0.0, 29.22, 16.94, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:15:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:14:39
2026-02-11T21:15:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:15:24.052 [DEBUG] [Thread-135987] [transport.py] [_log()] starting thread (client mode): 0xa57e2e00
2026-02-11T21:15:24.052 [DEBUG] [Thread-135987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:15:24.071 [DEBUG] [Thread-135987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:15:24.071 [INFO] [Thread-135987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:15:24.074 [DEBUG] [Thread-135987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:15:24.074 [DEBUG] [Thread-135987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:15:24.074 [DEBUG] [Thread-135987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] client lang: <none>
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] server lang: <none>
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] kex follows: False
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] Compression: none
2026-02-11T21:15:24.075 [DEBUG] [Thread-135987] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:15:24.091 [DEBUG] [Thread-135987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:15:24.091 [DEBUG] [Thread-135987] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:15:24.091 [DEBUG] [Thread-135987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:15:24.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:15:24.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:15:24.092 [DEBUG] [Thread-135987] [transport.py] [_log()] userauth is OK
2026-02-11T21:15:24.092 [DEBUG] [Thread-135987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:15:24.092 [DEBUG] [Thread-135987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:15:24.092 [DEBUG] [Thread-135987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:15:24.092 [DEBUG] [Thread-135987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:15:24.111 [INFO] [Thread-135987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:15:24.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:15:24.760 [DEBUG] [Thread-135987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:15:24.760 [DEBUG] [Thread-135987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:15:24.761 [DEBUG] [Thread-135987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:15:24.801 [DEBUG] [Thread-135987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:15:24.801 [DEBUG] [Thread-135987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:15:24.804 [DEBUG] [Thread-135987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:15:24.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:15:24.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:15:24.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:15:24.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:15:24.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:15:24.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:15:24.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:15:24.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:15:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:15:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.801874 -999.00  +16.60  16.32     89  +14.80 1 3 1 3 1     0    0 1.51 -11.02 ----- 16.8 16.3 199.1 22.5 18.5 -3.0 18.4 -3.0 18.2 -2.7 18.6 -3.0
2026-02-11T21:15:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:15:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:15:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.801874
2026-02-11T21:15:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:15:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:15:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:15:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:15:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:15:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:14:39', tmtdew=2.04, humidity=87.68, cloud=0.0, wind=29.22, temperature=16.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:14:41.914', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:15:24.828 [DEBUG] [Thread-135987] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:15:24.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:15:24.921 [DEBUG] [Thread-135990] [transport.py] [_log()] starting thread (client mode): 0xa2d6b100
2026-02-11T21:15:24.921 [DEBUG] [Thread-135990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:15:24.935 [DEBUG] [Thread-135990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:15:24.936 [INFO] [Thread-135990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:15:24.943 [DEBUG] [Thread-135990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:15:24.944 [DEBUG] [Thread-135990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:15:24.945 [DEBUG] [Thread-135990] [transport.py] [_log()] client lang: <none>
2026-02-11T21:15:24.945 [DEBUG] [Thread-135990] [transport.py] [_log()] server lang: <none>
2026-02-11T21:15:24.945 [DEBUG] [Thread-135990] [transport.py] [_log()] kex follows: False
2026-02-11T21:15:24.945 [DEBUG] [Thread-135990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:15:24.945 [DEBUG] [Thread-135990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:15:24.945 [DEBUG] [Thread-135990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:15:24.945 [DEBUG] [Thread-135990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:15:24.946 [DEBUG] [Thread-135990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:15:24.946 [DEBUG] [Thread-135990] [transport.py] [_log()] Compression: none
2026-02-11T21:15:24.946 [DEBUG] [Thread-135990] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:15:25.004 [DEBUG] [Thread-135990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:15:25.005 [DEBUG] [Thread-135990] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:15:25.005 [DEBUG] [Thread-135990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:15:25.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:15:25.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:15:25.059 [DEBUG] [Thread-135990] [transport.py] [_log()] userauth is OK
2026-02-11T21:15:25.060 [DEBUG] [Thread-135990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:15:25.060 [DEBUG] [Thread-135990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:15:25.060 [DEBUG] [Thread-135990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:15:25.060 [DEBUG] [Thread-135990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:15:25.084 [INFO] [Thread-135990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:15:25.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:15:25.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:15:25.939 [DEBUG] [Thread-135990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:15:25.940 [DEBUG] [Thread-135990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:15:25.988 [DEBUG] [Thread-135990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:15:25.988 [DEBUG] [Thread-135990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:15:25.997 [DEBUG] [Thread-135990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:15:26.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:15:26.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:15:26.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:15:26.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:15:26.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:15:26.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:15:26.035 [DEBUG] [Thread-135990] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:15:26.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:26.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:27.528 [DEBUG] [Thread-135992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:41.820 [DEBUG] [Thread-135993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:42.585 [DEBUG] [Thread-135994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:56.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:15:56.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:15:56.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:15:57.621 [DEBUG] [Thread-135995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:15:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 15, 15), 1.51, 90.89, 0.0, 20.01, 16.44, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:15:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:15:15
2026-02-11T21:15:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:15:58.412 [DEBUG] [Thread-135996] [transport.py] [_log()] starting thread (client mode): 0xa2d5eec0
2026-02-11T21:15:58.412 [DEBUG] [Thread-135996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:15:58.432 [DEBUG] [Thread-135996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:15:58.432 [INFO] [Thread-135996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:15:58.435 [DEBUG] [Thread-135996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] client lang: <none>
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] server lang: <none>
2026-02-11T21:15:58.436 [DEBUG] [Thread-135996] [transport.py] [_log()] kex follows: False
2026-02-11T21:15:58.437 [DEBUG] [Thread-135996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:15:58.437 [DEBUG] [Thread-135996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:15:58.437 [DEBUG] [Thread-135996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:15:58.437 [DEBUG] [Thread-135996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:15:58.437 [DEBUG] [Thread-135996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:15:58.437 [DEBUG] [Thread-135996] [transport.py] [_log()] Compression: none
2026-02-11T21:15:58.437 [DEBUG] [Thread-135996] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:15:58.457 [DEBUG] [Thread-135996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:15:58.457 [DEBUG] [Thread-135996] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:15:58.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:15:58.459 [DEBUG] [Thread-135996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:15:58.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:15:58.461 [DEBUG] [Thread-135996] [transport.py] [_log()] userauth is OK
2026-02-11T21:15:58.461 [DEBUG] [Thread-135996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:15:58.461 [DEBUG] [Thread-135996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:15:58.462 [DEBUG] [Thread-135996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:15:58.462 [DEBUG] [Thread-135996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:15:58.486 [INFO] [Thread-135996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:15:58.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:15:59.120 [DEBUG] [Thread-135996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:15:59.120 [DEBUG] [Thread-135996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:15:59.121 [DEBUG] [Thread-135996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:15:59.161 [DEBUG] [Thread-135996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:15:59.162 [DEBUG] [Thread-135996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:15:59.165 [DEBUG] [Thread-135996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:15:59.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:15:59.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:15:59.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:15:59.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:15:59.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:15:59.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:15:59.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:15:59.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:15:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:15:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.802222 -999.00  +16.60  22.49     89  +14.80 1 3 1 3 1     0    0 1.54 -11.00 ----- 20.1 22.5 198.0 25.6 18.5 -3.4 18.2 -3.8 18.3 -2.7 18.5 -3.4
2026-02-11T21:15:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:15:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:15:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.802222
2026-02-11T21:15:59.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:15:59.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:15:59.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:15:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:15:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:15:59.190 [DEBUG] [Thread-135996] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:15:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:15:15', tmtdew=1.51, humidity=90.89, cloud=0.0, wind=20.01, temperature=16.44, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:15:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:15:59.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:15:59.285 [DEBUG] [Thread-135999] [transport.py] [_log()] starting thread (client mode): 0xa2d6bac0
2026-02-11T21:15:59.285 [DEBUG] [Thread-135999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:15:59.302 [DEBUG] [Thread-135999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:15:59.302 [INFO] [Thread-135999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] client lang: <none>
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] server lang: <none>
2026-02-11T21:15:59.311 [DEBUG] [Thread-135999] [transport.py] [_log()] kex follows: False
2026-02-11T21:15:59.312 [DEBUG] [Thread-135999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:15:59.312 [DEBUG] [Thread-135999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:15:59.312 [DEBUG] [Thread-135999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:15:59.312 [DEBUG] [Thread-135999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:15:59.312 [DEBUG] [Thread-135999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:15:59.312 [DEBUG] [Thread-135999] [transport.py] [_log()] Compression: none
2026-02-11T21:15:59.312 [DEBUG] [Thread-135999] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:15:59.369 [DEBUG] [Thread-135999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:15:59.370 [DEBUG] [Thread-135999] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:15:59.371 [DEBUG] [Thread-135999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:15:59.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:15:59.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:15:59.431 [DEBUG] [Thread-135999] [transport.py] [_log()] userauth is OK
2026-02-11T21:15:59.431 [DEBUG] [Thread-135999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:15:59.432 [DEBUG] [Thread-135999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:15:59.432 [DEBUG] [Thread-135999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:15:59.432 [DEBUG] [Thread-135999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:15:59.450 [INFO] [Thread-135999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:15:59.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:15:59.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:16:00.314 [DEBUG] [Thread-135999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:16:00.314 [DEBUG] [Thread-135999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:16:00.363 [DEBUG] [Thread-135999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:16:00.363 [DEBUG] [Thread-135999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:16:00.372 [DEBUG] [Thread-135999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:16:00.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:16:00.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:16:00.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:16:00.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:16:00.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:16:00.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:16:00.414 [DEBUG] [Thread-135999] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:16:12.659 [DEBUG] [Thread-136001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:16:27.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:16:27.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:16:27.711 [DEBUG] [Thread-136002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:16:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:16:30.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:16:30.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
2026-02-11T21:16:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 15, 51), 1.45, 90.94, 0.0, 23.47, 16.47, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:16:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:15:51
2026-02-11T21:16:32.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:16:33.057 [DEBUG] [Thread-136003] [transport.py] [_log()] starting thread (client mode): 0xa2d5f490
2026-02-11T21:16:33.058 [DEBUG] [Thread-136003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:16:33.078 [DEBUG] [Thread-136003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:16:33.078 [INFO] [Thread-136003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:16:33.081 [DEBUG] [Thread-136003] [transport.py] [_log()] client lang: <none>
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] server lang: <none>
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] kex follows: False
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] Compression: none
2026-02-11T21:16:33.082 [DEBUG] [Thread-136003] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:16:33.100 [DEBUG] [Thread-136003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:16:33.100 [DEBUG] [Thread-136003] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:16:33.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:16:33.102 [DEBUG] [Thread-136003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:16:33.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:16:33.104 [DEBUG] [Thread-136003] [transport.py] [_log()] userauth is OK
2026-02-11T21:16:33.105 [DEBUG] [Thread-136003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:16:33.105 [DEBUG] [Thread-136003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:16:33.105 [DEBUG] [Thread-136003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:16:33.105 [DEBUG] [Thread-136003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:16:33.131 [INFO] [Thread-136003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:16:33.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:16:33.776 [DEBUG] [Thread-136003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:16:33.777 [DEBUG] [Thread-136003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:16:33.777 [DEBUG] [Thread-136003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:16:33.817 [DEBUG] [Thread-136003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:16:33.818 [DEBUG] [Thread-136003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:16:33.821 [DEBUG] [Thread-136003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:16:33.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:16:33.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:16:33.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:16:33.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:16:33.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:16:33.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:16:33.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:16:33.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:16:33.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:16:33.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.802569 -999.00  +16.50  17.39     89  +14.70 1 3 1 3 1     0    0 1.54 -11.88 ----- 18.1 17.4 203.6 27.2 18.5 -3.4 18.2 -4.2 18.2 -3.1 18.5 -3.0
2026-02-11T21:16:33.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:16:33.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:16:33.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.802569
2026-02-11T21:16:33.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:16:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:16:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:16:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:16:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:16:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:15:51', tmtdew=1.45, humidity=90.94, cloud=0.0, wind=23.47, temperature=16.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:15:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:16:33.848 [DEBUG] [Thread-136003] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:16:33.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:16:33.946 [DEBUG] [Thread-136006] [transport.py] [_log()] starting thread (client mode): 0xa2d5e8c0
2026-02-11T21:16:33.946 [DEBUG] [Thread-136006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:16:33.961 [DEBUG] [Thread-136006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:16:33.961 [INFO] [Thread-136006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:16:33.968 [DEBUG] [Thread-136006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:16:33.968 [DEBUG] [Thread-136006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] client lang: <none>
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] server lang: <none>
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] kex follows: False
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] Compression: none
2026-02-11T21:16:33.969 [DEBUG] [Thread-136006] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:16:34.026 [DEBUG] [Thread-136006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:16:34.027 [DEBUG] [Thread-136006] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:16:34.027 [DEBUG] [Thread-136006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:16:34.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:16:34.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:16:34.084 [DEBUG] [Thread-136006] [transport.py] [_log()] userauth is OK
2026-02-11T21:16:34.084 [DEBUG] [Thread-136006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:16:34.085 [DEBUG] [Thread-136006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:16:34.085 [DEBUG] [Thread-136006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:16:34.085 [DEBUG] [Thread-136006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:16:34.109 [INFO] [Thread-136006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:16:34.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:16:34.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:16:34.939 [DEBUG] [Thread-136006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:16:34.939 [DEBUG] [Thread-136006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:16:34.987 [DEBUG] [Thread-136006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:16:34.987 [DEBUG] [Thread-136006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:16:34.996 [DEBUG] [Thread-136006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:16:35.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:16:35.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:16:35.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:16:35.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:16:35.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:16:35.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:16:35.030 [DEBUG] [Thread-136006] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:16:41.878 [DEBUG] [Thread-136008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:16:42.748 [DEBUG] [Thread-136009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:16:57.799 [DEBUG] [Thread-136010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:17:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:17:05.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:17:05.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:17:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 16, 26), 1.46, 90.93, 0.0, 19.13, 16.47, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:17:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:16:26
2026-02-11T21:17:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:17:07.980 [DEBUG] [Thread-136011] [transport.py] [_log()] starting thread (client mode): 0xa5741cc0
2026-02-11T21:17:07.980 [DEBUG] [Thread-136011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:17:08.000 [DEBUG] [Thread-136011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:17:08.000 [INFO] [Thread-136011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:08.003 [DEBUG] [Thread-136011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] client lang: <none>
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] server lang: <none>
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] kex follows: False
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] Compression: none
2026-02-11T21:17:08.004 [DEBUG] [Thread-136011] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:17:08.012 [DEBUG] [Thread-136011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:17:08.012 [DEBUG] [Thread-136011] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:17:08.013 [DEBUG] [Thread-136011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:17:08.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:17:08.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:17:08.014 [DEBUG] [Thread-136011] [transport.py] [_log()] userauth is OK
2026-02-11T21:17:08.014 [DEBUG] [Thread-136011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:17:08.014 [DEBUG] [Thread-136011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:17:08.014 [DEBUG] [Thread-136011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:17:08.014 [DEBUG] [Thread-136011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:17:08.026 [INFO] [Thread-136011] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:17:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:17:08.656 [DEBUG] [Thread-136011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:17:08.656 [DEBUG] [Thread-136011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:17:08.657 [DEBUG] [Thread-136011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:17:08.697 [DEBUG] [Thread-136011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:17:08.698 [DEBUG] [Thread-136011] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:17:08.701 [DEBUG] [Thread-136011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:17:08.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:17:08.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:17:08.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:17:08.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:17:08.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:17:08.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:17:08.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:17:08.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:17:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:17:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.802916 -999.00  +16.50  17.25     89  +14.70 1 3 1 3 1     0    0 1.51 -11.28 ----- 23.2 17.2 201.0 25.5 18.4 -4.5 18.2 -5.1 18.2 -3.6 18.5 -4.0
2026-02-11T21:17:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:17:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:17:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.802916
2026-02-11T21:17:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:17:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:17:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:17:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:17:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:17:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:16:26', tmtdew=1.46, humidity=90.93, cloud=0.0, wind=19.13, temperature=16.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:16:11.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:17:08.728 [DEBUG] [Thread-136011] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:17:08.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:17:08.823 [DEBUG] [Thread-136014] [transport.py] [_log()] starting thread (client mode): 0x9eb04b80
2026-02-11T21:17:08.823 [DEBUG] [Thread-136014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:17:08.838 [DEBUG] [Thread-136014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:17:08.838 [INFO] [Thread-136014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] client lang: <none>
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] server lang: <none>
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] kex follows: False
2026-02-11T21:17:08.846 [DEBUG] [Thread-136014] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:17:08.847 [DEBUG] [Thread-136014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:17:08.847 [DEBUG] [Thread-136014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:17:08.847 [DEBUG] [Thread-136014] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:17:08.847 [DEBUG] [Thread-136014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:17:08.847 [DEBUG] [Thread-136014] [transport.py] [_log()] Compression: none
2026-02-11T21:17:08.847 [DEBUG] [Thread-136014] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:17:08.909 [DEBUG] [Thread-136014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:17:08.909 [DEBUG] [Thread-136014] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:17:08.910 [DEBUG] [Thread-136014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:17:08.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:17:08.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:17:08.967 [DEBUG] [Thread-136014] [transport.py] [_log()] userauth is OK
2026-02-11T21:17:08.968 [DEBUG] [Thread-136014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:17:08.968 [DEBUG] [Thread-136014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:17:08.968 [DEBUG] [Thread-136014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:17:08.968 [DEBUG] [Thread-136014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:17:08.987 [INFO] [Thread-136014] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:17:08.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:17:08.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:17:09.814 [DEBUG] [Thread-136014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:17:09.814 [DEBUG] [Thread-136014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:17:09.862 [DEBUG] [Thread-136014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:17:09.863 [DEBUG] [Thread-136014] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:17:09.872 [DEBUG] [Thread-136014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:17:09.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:17:09.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:17:09.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:17:09.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:17:09.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:17:09.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:17:09.908 [DEBUG] [Thread-136014] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:17:12.836 [DEBUG] [Thread-136016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:17:27.363 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:17:27.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:17:27.884 [DEBUG] [Thread-136017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:17:39.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:17:39.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:17:39.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:17:41.934 [DEBUG] [Thread-136018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:17:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 17, 2), 1.45, 90.96, 0.0, 19.74, 16.5, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:17:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:17:02
2026-02-11T21:17:42.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:17:42.498 [DEBUG] [Thread-136019] [transport.py] [_log()] starting thread (client mode): 0xa2d6a170
2026-02-11T21:17:42.499 [DEBUG] [Thread-136019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:17:42.518 [DEBUG] [Thread-136019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:17:42.519 [INFO] [Thread-136019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] client lang: <none>
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] server lang: <none>
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] kex follows: False
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] Compression: none
2026-02-11T21:17:42.522 [DEBUG] [Thread-136019] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:17:42.540 [DEBUG] [Thread-136019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:17:42.540 [DEBUG] [Thread-136019] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:17:42.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:17:42.541 [DEBUG] [Thread-136019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:17:42.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:17:42.543 [DEBUG] [Thread-136019] [transport.py] [_log()] userauth is OK
2026-02-11T21:17:42.543 [DEBUG] [Thread-136019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:17:42.544 [DEBUG] [Thread-136019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:17:42.544 [DEBUG] [Thread-136019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:17:42.544 [DEBUG] [Thread-136019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:17:42.580 [INFO] [Thread-136019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:17:42.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:17:42.918 [DEBUG] [Thread-136021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:17:43.188 [DEBUG] [Thread-136019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:17:43.188 [DEBUG] [Thread-136019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:17:43.189 [DEBUG] [Thread-136019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:17:43.229 [DEBUG] [Thread-136019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:17:43.229 [DEBUG] [Thread-136019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:17:43.231 [DEBUG] [Thread-136019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:17:43.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:17:43.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:17:43.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:17:43.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:17:43.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:17:43.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:17:43.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.803610 -999.00  +16.60  14.40     89  +14.80 1 3 1 3 1     0    0 1.48 -11.72 ----- 13.1 14.4 204.2 21.6 18.4 -3.4 18.3 -3.9 18.1 -4.1 18.5 -4.0
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.803610
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:17:43.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:17:02', tmtdew=1.45, humidity=90.96, cloud=0.0, wind=19.74, temperature=16.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:17:11.904', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:17:43.246 [DEBUG] [Thread-136019] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:17:43.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:17:43.334 [DEBUG] [Thread-136023] [transport.py] [_log()] starting thread (client mode): 0xa57c23b0
2026-02-11T21:17:43.334 [DEBUG] [Thread-136023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:17:43.348 [DEBUG] [Thread-136023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:17:43.348 [INFO] [Thread-136023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] client lang: <none>
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] server lang: <none>
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] kex follows: False
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:17:43.357 [DEBUG] [Thread-136023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:17:43.358 [DEBUG] [Thread-136023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:17:43.358 [DEBUG] [Thread-136023] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:17:43.358 [DEBUG] [Thread-136023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:17:43.358 [DEBUG] [Thread-136023] [transport.py] [_log()] Compression: none
2026-02-11T21:17:43.358 [DEBUG] [Thread-136023] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:17:43.421 [DEBUG] [Thread-136023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:17:43.422 [DEBUG] [Thread-136023] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:17:43.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:17:43.422 [DEBUG] [Thread-136023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:17:43.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:17:43.480 [DEBUG] [Thread-136023] [transport.py] [_log()] userauth is OK
2026-02-11T21:17:43.481 [DEBUG] [Thread-136023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:17:43.481 [DEBUG] [Thread-136023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:17:43.481 [DEBUG] [Thread-136023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:17:43.481 [DEBUG] [Thread-136023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:17:43.500 [INFO] [Thread-136023] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:17:43.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:17:43.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:17:44.307 [DEBUG] [Thread-136023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:17:44.307 [DEBUG] [Thread-136023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:17:44.355 [DEBUG] [Thread-136023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:17:44.356 [DEBUG] [Thread-136023] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:17:44.365 [DEBUG] [Thread-136023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:17:44.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:17:44.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:17:44.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:17:44.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:17:44.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:17:44.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:17:44.401 [DEBUG] [Thread-136023] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:17:57.952 [DEBUG] [Thread-136025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:18:13.004 [DEBUG] [Thread-136026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:18:14.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:18:14.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:18:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:18:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 17, 38), 2.02, 87.82, 0.0, 19.44, 16.87, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:18:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:17:38
2026-02-11T21:18:16.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:18:16.952 [DEBUG] [Thread-136027] [transport.py] [_log()] starting thread (client mode): 0xa57c2dd0
2026-02-11T21:18:16.952 [DEBUG] [Thread-136027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:18:16.973 [DEBUG] [Thread-136027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:18:16.974 [INFO] [Thread-136027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] client lang: <none>
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] server lang: <none>
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] kex follows: False
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] Compression: none
2026-02-11T21:18:16.977 [DEBUG] [Thread-136027] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:18:16.995 [DEBUG] [Thread-136027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:18:16.995 [DEBUG] [Thread-136027] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:18:16.996 [DEBUG] [Thread-136027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:18:16.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:18:16.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:18:16.998 [DEBUG] [Thread-136027] [transport.py] [_log()] userauth is OK
2026-02-11T21:18:16.998 [DEBUG] [Thread-136027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:18:16.998 [DEBUG] [Thread-136027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:18:16.998 [DEBUG] [Thread-136027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:18:16.998 [DEBUG] [Thread-136027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:18:17.031 [INFO] [Thread-136027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:18:17.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:18:17.673 [DEBUG] [Thread-136027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:18:17.673 [DEBUG] [Thread-136027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:18:17.673 [DEBUG] [Thread-136027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:18:17.714 [DEBUG] [Thread-136027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:18:17.715 [DEBUG] [Thread-136027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:18:17.718 [DEBUG] [Thread-136027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:18:17.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:18:17.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:18:17.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:18:17.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:18:17.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:18:17.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:18:17.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:18:17.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:18:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:18:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.803958 -999.00  +16.60  22.97     89  +14.80 1 3 1 3 1     0    0 1.52 -11.79 ----- 18.9 23.0 197.2 26.0 18.4 -3.7 18.2 -3.2 18.2 -4.0 18.5 -4.4
2026-02-11T21:18:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:18:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:18:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.803958
2026-02-11T21:18:17.751 [DEBUG] [Thread-136027] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:18:17.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:18:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:18:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:18:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:18:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:18:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:17:38', tmtdew=2.02, humidity=87.82, cloud=0.0, wind=19.44, temperature=16.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:17:41.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:18:17.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:18:17.848 [DEBUG] [Thread-136030] [transport.py] [_log()] starting thread (client mode): 0xa57e2260
2026-02-11T21:18:17.848 [DEBUG] [Thread-136030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:18:17.863 [DEBUG] [Thread-136030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:18:17.863 [INFO] [Thread-136030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:18:17.879 [DEBUG] [Thread-136030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:18:17.879 [DEBUG] [Thread-136030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:18:17.879 [DEBUG] [Thread-136030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:18:17.879 [DEBUG] [Thread-136030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:17.879 [DEBUG] [Thread-136030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] client lang: <none>
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] server lang: <none>
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] kex follows: False
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] Compression: none
2026-02-11T21:18:17.880 [DEBUG] [Thread-136030] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:18:17.929 [DEBUG] [Thread-136030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:18:17.929 [DEBUG] [Thread-136030] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:18:17.930 [DEBUG] [Thread-136030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:18:17.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:18:17.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:18:17.986 [DEBUG] [Thread-136030] [transport.py] [_log()] userauth is OK
2026-02-11T21:18:17.986 [DEBUG] [Thread-136030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:18:17.986 [DEBUG] [Thread-136030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:18:17.986 [DEBUG] [Thread-136030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:18:17.987 [DEBUG] [Thread-136030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:18:18.006 [INFO] [Thread-136030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:18:18.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:18:18.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:18:18.825 [DEBUG] [Thread-136030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:18:18.834 [DEBUG] [Thread-136030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:18:18.872 [DEBUG] [Thread-136030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:18:18.872 [DEBUG] [Thread-136030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:18:18.882 [DEBUG] [Thread-136030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:18:18.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:18:18.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:18:18.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:18:18.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:18:18.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:18:18.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:18:18.918 [DEBUG] [Thread-136030] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:18:27.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:18:27.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:18:28.040 [DEBUG] [Thread-136032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:18:41.992 [DEBUG] [Thread-136033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:18:43.088 [DEBUG] [Thread-136034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:18:48.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:18:48.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:18:48.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:18:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 18, 13), 1.51, 90.89, 0.0, 26.96, 16.37, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:18:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:18:13
2026-02-11T21:18:51.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:18:51.413 [DEBUG] [Thread-136035] [transport.py] [_log()] starting thread (client mode): 0xa2d052d0
2026-02-11T21:18:51.413 [DEBUG] [Thread-136035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:18:51.434 [DEBUG] [Thread-136035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:18:51.434 [INFO] [Thread-136035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:18:51.437 [DEBUG] [Thread-136035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] client lang: <none>
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] server lang: <none>
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] kex follows: False
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] Compression: none
2026-02-11T21:18:51.438 [DEBUG] [Thread-136035] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:18:51.455 [DEBUG] [Thread-136035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:18:51.455 [DEBUG] [Thread-136035] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:18:51.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:18:51.456 [DEBUG] [Thread-136035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:18:51.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:18:51.458 [DEBUG] [Thread-136035] [transport.py] [_log()] userauth is OK
2026-02-11T21:18:51.459 [DEBUG] [Thread-136035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:18:51.459 [DEBUG] [Thread-136035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:18:51.459 [DEBUG] [Thread-136035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:18:51.459 [DEBUG] [Thread-136035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:18:51.494 [INFO] [Thread-136035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:18:51.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:18:52.156 [DEBUG] [Thread-136035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:18:52.156 [DEBUG] [Thread-136035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:18:52.156 [DEBUG] [Thread-136035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:18:52.198 [DEBUG] [Thread-136035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:18:52.198 [DEBUG] [Thread-136035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:18:52.201 [DEBUG] [Thread-136035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:18:52.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:18:52.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:18:52.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:18:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:18:52.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:18:52.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:18:52.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:18:52.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:18:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:18:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.804305 -999.00  +16.50  24.32     89  +14.70 1 3 1 3 1     0    0 1.55 -11.21 ----- 17.8 24.3 207.8 29.1 18.4 -3.0 18.2 -2.8 18.1 -3.8 18.4 -3.3
2026-02-11T21:18:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:18:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:18:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.804305
2026-02-11T21:18:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:18:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:18:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:18:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:18:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:18:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:18:13', tmtdew=1.51, humidity=90.89, cloud=0.0, wind=26.96, temperature=16.37, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:18:11.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:18:52.226 [DEBUG] [Thread-136035] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:18:52.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:18:52.319 [DEBUG] [Thread-136038] [transport.py] [_log()] starting thread (client mode): 0xa57c3940
2026-02-11T21:18:52.319 [DEBUG] [Thread-136038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:18:52.338 [DEBUG] [Thread-136038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:18:52.338 [INFO] [Thread-136038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:18:52.345 [DEBUG] [Thread-136038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] client lang: <none>
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] server lang: <none>
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] kex follows: False
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:18:52.346 [DEBUG] [Thread-136038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:18:52.347 [DEBUG] [Thread-136038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:18:52.347 [DEBUG] [Thread-136038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:18:52.347 [DEBUG] [Thread-136038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:18:52.347 [DEBUG] [Thread-136038] [transport.py] [_log()] Compression: none
2026-02-11T21:18:52.347 [DEBUG] [Thread-136038] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:18:52.407 [DEBUG] [Thread-136038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:18:52.407 [DEBUG] [Thread-136038] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:18:52.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:18:52.408 [DEBUG] [Thread-136038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:18:52.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:18:52.462 [DEBUG] [Thread-136038] [transport.py] [_log()] userauth is OK
2026-02-11T21:18:52.462 [DEBUG] [Thread-136038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:18:52.462 [DEBUG] [Thread-136038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:18:52.463 [DEBUG] [Thread-136038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:18:52.463 [DEBUG] [Thread-136038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:18:52.481 [INFO] [Thread-136038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:18:52.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:18:52.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:18:53.295 [DEBUG] [Thread-136038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:18:53.295 [DEBUG] [Thread-136038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:18:53.345 [DEBUG] [Thread-136038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:18:53.345 [DEBUG] [Thread-136038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:18:53.354 [DEBUG] [Thread-136038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:18:53.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:18:53.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:18: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') -> 00000000
2026-02-11T21:18:53.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:18:53.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:18:53.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:18:53.388 [DEBUG] [Thread-136038] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:18:58.122 [DEBUG] [Thread-136040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:19:13.172 [DEBUG] [Thread-136041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:19:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:19:23.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:19:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:19:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 18, 49), 1.51, 90.89, 0.0, 22.18, 16.4, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:19:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:18:49
2026-02-11T21:19:26.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:19:26.165 [DEBUG] [Thread-136042] [transport.py] [_log()] starting thread (client mode): 0xa2d053f0
2026-02-11T21:19:26.165 [DEBUG] [Thread-136042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:19:26.184 [DEBUG] [Thread-136042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:19:26.185 [INFO] [Thread-136042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:19:26.187 [DEBUG] [Thread-136042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:19:26.187 [DEBUG] [Thread-136042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:19:26.187 [DEBUG] [Thread-136042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:19:26.187 [DEBUG] [Thread-136042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:19:26.187 [DEBUG] [Thread-136042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:19:26.187 [DEBUG] [Thread-136042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] client lang: <none>
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] server lang: <none>
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] kex follows: False
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] Compression: none
2026-02-11T21:19:26.188 [DEBUG] [Thread-136042] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:19:26.205 [DEBUG] [Thread-136042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:19:26.205 [DEBUG] [Thread-136042] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:19:26.206 [DEBUG] [Thread-136042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:19:26.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:19:26.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:19:26.208 [DEBUG] [Thread-136042] [transport.py] [_log()] userauth is OK
2026-02-11T21:19:26.208 [DEBUG] [Thread-136042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:19:26.209 [DEBUG] [Thread-136042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:19:26.209 [DEBUG] [Thread-136042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:19:26.209 [DEBUG] [Thread-136042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:19:26.232 [INFO] [Thread-136042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:19:26.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:19:26.866 [DEBUG] [Thread-136042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:19:26.866 [DEBUG] [Thread-136042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:19:26.866 [DEBUG] [Thread-136042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:19:26.907 [DEBUG] [Thread-136042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:19:26.907 [DEBUG] [Thread-136042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:19:26.910 [DEBUG] [Thread-136042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:19:26.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:19:26.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:19:26.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:19:26.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:19:26.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:19:26.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:19:26.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:19:26.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:19:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:19:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.804652 -999.00  +16.50  15.12     89  +14.70 1 3 1 3 1     0    0 1.48 -12.17 ----- 18.3 15.1 196.3 23.3 18.5 -3.0 18.2 -3.6 18.1 -3.0 18.5 -2.9
2026-02-11T21:19:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:19:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:19:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.804652
2026-02-11T21:19:26.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:19:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:19:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:19:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:19:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:19:26.933 [DEBUG] [Thread-136042] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:19:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:18:49', tmtdew=1.51, humidity=90.89, cloud=0.0, wind=22.18, temperature=16.4, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:18:41.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:19:27.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:19:27.026 [DEBUG] [Thread-136045] [transport.py] [_log()] starting thread (client mode): 0xa2d050f0
2026-02-11T21:19:27.027 [DEBUG] [Thread-136045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:19:27.041 [DEBUG] [Thread-136045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:19:27.041 [INFO] [Thread-136045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] client lang: <none>
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] server lang: <none>
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] kex follows: False
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] Compression: none
2026-02-11T21:19:27.049 [DEBUG] [Thread-136045] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:19:27.106 [DEBUG] [Thread-136045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:19:27.107 [DEBUG] [Thread-136045] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:19:27.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:19:27.108 [DEBUG] [Thread-136045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:19:27.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:19:27.163 [DEBUG] [Thread-136045] [transport.py] [_log()] userauth is OK
2026-02-11T21:19:27.163 [DEBUG] [Thread-136045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:19:27.164 [DEBUG] [Thread-136045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:19:27.164 [DEBUG] [Thread-136045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:19:27.164 [DEBUG] [Thread-136045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:19:27.182 [INFO] [Thread-136045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:19:27.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:19:27.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:19:27.788 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:19:27.789 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:19:28.029 [DEBUG] [Thread-136045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:19:28.029 [DEBUG] [Thread-136045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:19:28.079 [DEBUG] [Thread-136045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:19:28.079 [DEBUG] [Thread-136045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:19:28.088 [DEBUG] [Thread-136045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:19:28.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:19:28.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')
2026-02-11T21:19:28.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:19:28.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:19:28.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:19:28.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:19:28.121 [DEBUG] [Thread-136045] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:19:28.206 [DEBUG] [Thread-136047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:19:42.066 [DEBUG] [Thread-136048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:19:43.247 [DEBUG] [Thread-136049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:19:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:19:58.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:19:58.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:19:58.284 [DEBUG] [Thread-136050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:20:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 19, 25), 1.51, 90.89, 0.0, 23.24, 16.39, 1, 2, 0, 2, 0, 0),)
2026-02-11T21:20:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:19:25
2026-02-11T21:20:00.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:20:00.569 [DEBUG] [Thread-136051] [transport.py] [_log()] starting thread (client mode): 0x9eb04760
2026-02-11T21:20:00.569 [DEBUG] [Thread-136051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:20:00.589 [DEBUG] [Thread-136051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:20:00.589 [INFO] [Thread-136051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] client lang: <none>
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] server lang: <none>
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] kex follows: False
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] Compression: none
2026-02-11T21:20:00.592 [DEBUG] [Thread-136051] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:20:00.610 [DEBUG] [Thread-136051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:20:00.610 [DEBUG] [Thread-136051] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:20:00.611 [DEBUG] [Thread-136051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:20:00.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:20:00.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:20:00.612 [DEBUG] [Thread-136051] [transport.py] [_log()] userauth is OK
2026-02-11T21:20:00.613 [DEBUG] [Thread-136051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:20:00.613 [DEBUG] [Thread-136051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:20:00.613 [DEBUG] [Thread-136051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:20:00.613 [DEBUG] [Thread-136051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:20:00.630 [INFO] [Thread-136051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:20:00.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:20:01.256 [DEBUG] [Thread-136051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:20:01.256 [DEBUG] [Thread-136051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:20:01.256 [DEBUG] [Thread-136051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:20:01.297 [DEBUG] [Thread-136051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:20:01.297 [DEBUG] [Thread-136051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:20:01.300 [DEBUG] [Thread-136051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:20:01.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:20:01.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:20:01.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:20:01.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:20:01.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:20:01.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:20:01.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:20:01.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:20:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:20:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.804999 -999.00  +16.50  20.41     89  +14.70 1 3 1 3 1     0    0 1.50 -12.62 ----- 17.4 20.4 201.2 22.9 18.4 -2.9 18.2 -2.7 18.1 -2.9 18.4 -3.0
2026-02-11T21:20:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:20:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:20:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.804999
2026-02-11T21:20:01.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:20:01.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:20:01.324 [DEBUG] [Thread-136051] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:20:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:20:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:20:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:20:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:19:25', tmtdew=1.51, humidity=90.89, cloud=0.0, wind=23.24, temperature=16.39, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:19:11.914', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:20:01.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:20:01.419 [DEBUG] [Thread-136054] [transport.py] [_log()] starting thread (client mode): 0xa5741cf0
2026-02-11T21:20:01.420 [DEBUG] [Thread-136054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:20:01.434 [DEBUG] [Thread-136054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:20:01.434 [INFO] [Thread-136054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] client lang: <none>
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] server lang: <none>
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] kex follows: False
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] Compression: none
2026-02-11T21:20:01.442 [DEBUG] [Thread-136054] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:20:01.500 [DEBUG] [Thread-136054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:20:01.500 [DEBUG] [Thread-136054] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:20:01.501 [DEBUG] [Thread-136054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:20:01.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:20:01.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:20:01.555 [DEBUG] [Thread-136054] [transport.py] [_log()] userauth is OK
2026-02-11T21:20:01.556 [DEBUG] [Thread-136054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:20:01.556 [DEBUG] [Thread-136054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:20:01.556 [DEBUG] [Thread-136054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:20:01.556 [DEBUG] [Thread-136054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:20:01.577 [INFO] [Thread-136054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:20:01.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:20:01.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:20:02.450 [DEBUG] [Thread-136054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:20:02.451 [DEBUG] [Thread-136054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:20:02.498 [DEBUG] [Thread-136054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:20:02.498 [DEBUG] [Thread-136054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:20:02.506 [DEBUG] [Thread-136054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:20:02.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:20:02.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:20:02.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:20:02.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:20:02.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:20:02.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:20:02.540 [DEBUG] [Thread-136054] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:20:13.319 [DEBUG] [Thread-136056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:20:27.990 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:20:27.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:20:28.372 [DEBUG] [Thread-136057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:20:32.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:20:32.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:20:32.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:20:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 20, 1), 1.48, 91.06, 0.0, 22.13, 16.37, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:20:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:20:01
2026-02-11T21:20:34.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:20:34.946 [DEBUG] [Thread-136058] [transport.py] [_log()] starting thread (client mode): 0xa2d053c0
2026-02-11T21:20:34.946 [DEBUG] [Thread-136058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:20:34.965 [DEBUG] [Thread-136058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:20:34.965 [INFO] [Thread-136058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] client lang: <none>
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] server lang: <none>
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] kex follows: False
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] Compression: none
2026-02-11T21:20:34.968 [DEBUG] [Thread-136058] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:20:34.985 [DEBUG] [Thread-136058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:20:34.985 [DEBUG] [Thread-136058] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:20:34.986 [DEBUG] [Thread-136058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:20:34.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:20:34.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:20:34.988 [DEBUG] [Thread-136058] [transport.py] [_log()] userauth is OK
2026-02-11T21:20:34.988 [DEBUG] [Thread-136058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:20:34.988 [DEBUG] [Thread-136058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:20:34.988 [DEBUG] [Thread-136058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:20:34.988 [DEBUG] [Thread-136058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:20:35.013 [INFO] [Thread-136058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:20:35.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:20:35.654 [DEBUG] [Thread-136058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:20:35.655 [DEBUG] [Thread-136058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:20:35.655 [DEBUG] [Thread-136058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:20:35.696 [DEBUG] [Thread-136058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:20:35.696 [DEBUG] [Thread-136058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:20:35.699 [DEBUG] [Thread-136058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:20:35.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:20:35.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:20:35.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:20:35.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:20:35.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:20:35.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:20:35.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:20:35.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:20:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:20:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.805346 -999.00  +16.50  10.79     89  +14.80 1 3 1 3 1     0    0 1.48 -11.30 ----- 15.3 10.8 186.7 17.4 18.4 -3.1 18.2 -3.5 18.1 -3.0 18.5 -3.2
2026-02-11T21:20:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:20:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:20:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.805346
2026-02-11T21:20:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:20:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:20:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:20:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:20:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:20:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:20:01', tmtdew=1.48, humidity=91.06, cloud=0.0, wind=22.13, temperature=16.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:19:41.894', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:20:35.728 [DEBUG] [Thread-136058] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:20:35.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:20:35.822 [DEBUG] [Thread-136061] [transport.py] [_log()] starting thread (client mode): 0xa2d5ff10
2026-02-11T21:20:35.823 [DEBUG] [Thread-136061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:20:35.838 [DEBUG] [Thread-136061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:20:35.838 [INFO] [Thread-136061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:20:35.845 [DEBUG] [Thread-136061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] client lang: <none>
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] server lang: <none>
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] kex follows: False
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:20:35.846 [DEBUG] [Thread-136061] [transport.py] [_log()] Compression: none
2026-02-11T21:20:35.847 [DEBUG] [Thread-136061] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:20:35.905 [DEBUG] [Thread-136061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:20:35.906 [DEBUG] [Thread-136061] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:20:35.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:20:35.907 [DEBUG] [Thread-136061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:20:35.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:20:35.961 [DEBUG] [Thread-136061] [transport.py] [_log()] userauth is OK
2026-02-11T21:20:35.961 [DEBUG] [Thread-136061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:20:35.961 [DEBUG] [Thread-136061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:20:35.962 [DEBUG] [Thread-136061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:20:35.962 [DEBUG] [Thread-136061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:20:35.986 [INFO] [Thread-136061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:20:35.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:20:35.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:20:36.825 [DEBUG] [Thread-136061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:20:36.825 [DEBUG] [Thread-136061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:20:36.874 [DEBUG] [Thread-136061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:20:36.874 [DEBUG] [Thread-136061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:20:36.883 [DEBUG] [Thread-136061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:20:36.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:20:36.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:20:36.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:20:36.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:20:36.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:20:36.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:20:36.919 [DEBUG] [Thread-136061] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:20:42.148 [DEBUG] [Thread-136063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:20:43.408 [DEBUG] [Thread-136064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:20:58.461 [DEBUG] [Thread-136065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:21:06.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:21:06.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:21:06.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:21:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 20, 37), 1.93, 88.31, 0.0, 31.9, 16.87, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:21:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:20:37
2026-02-11T21:21:09.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:21:09.537 [DEBUG] [Thread-136066] [transport.py] [_log()] starting thread (client mode): 0xa57c2bc0
2026-02-11T21:21:09.537 [DEBUG] [Thread-136066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:21:09.558 [DEBUG] [Thread-136066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:21:09.558 [INFO] [Thread-136066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:21:09.561 [DEBUG] [Thread-136066] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:21:09.561 [DEBUG] [Thread-136066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:21:09.561 [DEBUG] [Thread-136066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:21:09.561 [DEBUG] [Thread-136066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:09.561 [DEBUG] [Thread-136066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:09.561 [DEBUG] [Thread-136066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:09.561 [DEBUG] [Thread-136066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] client lang: <none>
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] server lang: <none>
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] kex follows: False
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] Compression: none
2026-02-11T21:21:09.562 [DEBUG] [Thread-136066] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:21:09.579 [DEBUG] [Thread-136066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:21:09.579 [DEBUG] [Thread-136066] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:21:09.580 [DEBUG] [Thread-136066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:21:09.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:21:09.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:21:09.582 [DEBUG] [Thread-136066] [transport.py] [_log()] userauth is OK
2026-02-11T21:21:09.582 [DEBUG] [Thread-136066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:21:09.582 [DEBUG] [Thread-136066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:21:09.582 [DEBUG] [Thread-136066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:21:09.582 [DEBUG] [Thread-136066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:21:09.607 [INFO] [Thread-136066] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:21:09.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:21:10.263 [DEBUG] [Thread-136066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:21:10.263 [DEBUG] [Thread-136066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:21:10.264 [DEBUG] [Thread-136066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:21:10.304 [DEBUG] [Thread-136066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:21:10.305 [DEBUG] [Thread-136066] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:21:10.308 [DEBUG] [Thread-136066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:21:10.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:21:10.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:21:10.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:21:10.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:21:10.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:21:10.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:21:10.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:21:10.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:21:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:21:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.805694 -999.00  +16.50  17.19     89  +14.70 1 3 1 3 1     0    0 1.53 -10.54 ----- 15.1 17.2 204.2 26.6 18.4 -2.9 18.2 -2.8 18.1 -3.1 18.5 -3.1
2026-02-11T21:21:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:21:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:21:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.805694
2026-02-11T21:21:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:21:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:21:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:21:10.334 [DEBUG] [Thread-136066] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:21:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:21:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:21:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:20:37', tmtdew=1.93, humidity=88.31, cloud=0.0, wind=31.9, temperature=16.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:20:11.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:21:10.424 [DEBUG] [Thread-136069] [transport.py] [_log()] starting thread (client mode): 0xa5741cf0
2026-02-11T21:21:10.424 [DEBUG] [Thread-136069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:21:10.438 [DEBUG] [Thread-136069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:21:10.438 [INFO] [Thread-136069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] client lang: <none>
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] server lang: <none>
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] kex follows: False
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:21:10.447 [DEBUG] [Thread-136069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:21:10.448 [DEBUG] [Thread-136069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:21:10.448 [DEBUG] [Thread-136069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:21:10.448 [DEBUG] [Thread-136069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:21:10.448 [DEBUG] [Thread-136069] [transport.py] [_log()] Compression: none
2026-02-11T21:21:10.448 [DEBUG] [Thread-136069] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:21:10.505 [DEBUG] [Thread-136069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:21:10.506 [DEBUG] [Thread-136069] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:21:10.507 [DEBUG] [Thread-136069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:21:10.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:21:10.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:21:10.566 [DEBUG] [Thread-136069] [transport.py] [_log()] userauth is OK
2026-02-11T21:21:10.566 [DEBUG] [Thread-136069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:21:10.566 [DEBUG] [Thread-136069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:21:10.567 [DEBUG] [Thread-136069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:21:10.567 [DEBUG] [Thread-136069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:21:10.585 [INFO] [Thread-136069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:21:10.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:21:10.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:21:11.404 [DEBUG] [Thread-136069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:21:11.404 [DEBUG] [Thread-136069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:21:11.452 [DEBUG] [Thread-136069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:21:11.453 [DEBUG] [Thread-136069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:21:11.463 [DEBUG] [Thread-136069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:21:11.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:21:11.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:21:11.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:21:11.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:21:11.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:21:11.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:21:11.503 [DEBUG] [Thread-136069] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:21:13.499 [DEBUG] [Thread-136071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:21:28.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:21:28.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:21:28.551 [DEBUG] [Thread-136072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:21:41.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:21:41.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:21:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:21:42.220 [DEBUG] [Thread-136073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:21:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 21, 13), 1.42, 91.12, 0.0, 25.25, 16.27, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:21:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:21:13
2026-02-11T21:21:43.587 [DEBUG] [Thread-136074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:21:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:21:43.847 [DEBUG] [Thread-136075] [transport.py] [_log()] starting thread (client mode): 0xa5742320
2026-02-11T21:21:43.847 [DEBUG] [Thread-136075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:21:43.863 [DEBUG] [Thread-136075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:21:43.863 [INFO] [Thread-136075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] client lang: <none>
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] server lang: <none>
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] kex follows: False
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:21:43.867 [DEBUG] [Thread-136075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:21:43.868 [DEBUG] [Thread-136075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:21:43.868 [DEBUG] [Thread-136075] [transport.py] [_log()] Compression: none
2026-02-11T21:21:43.868 [DEBUG] [Thread-136075] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:21:43.884 [DEBUG] [Thread-136075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:21:43.884 [DEBUG] [Thread-136075] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:21:43.885 [DEBUG] [Thread-136075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:21:43.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:21:43.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:21:43.929 [DEBUG] [Thread-136075] [transport.py] [_log()] userauth is OK
2026-02-11T21:21:43.929 [DEBUG] [Thread-136075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:21:43.929 [DEBUG] [Thread-136075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:21:43.929 [DEBUG] [Thread-136075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:21:43.929 [DEBUG] [Thread-136075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:21:43.954 [INFO] [Thread-136075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:21:43.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:21:44.602 [DEBUG] [Thread-136075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:21:44.603 [DEBUG] [Thread-136075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:21:44.603 [DEBUG] [Thread-136075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:21:44.643 [DEBUG] [Thread-136075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:21:44.644 [DEBUG] [Thread-136075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:21:44.647 [DEBUG] [Thread-136075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:21:44.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:21:44.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:21:44.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:21:44.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:21:44.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:21:44.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:21:44.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:21:44.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:21:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:21:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.806388 -999.00  +16.50  21.11     89  +14.70 1 3 1 3 1     0    0 1.53 -9.54 ----- 17.6 21.1 199.2 24.9 18.4 -3.9 18.1 -4.5 18.1 -2.8 18.4 -3.3
2026-02-11T21:21:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:21:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:21:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.806388
2026-02-11T21:21:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:21:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:21:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:21:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:21:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:21:44.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:21:13', tmtdew=1.42, humidity=91.12, cloud=0.0, wind=25.25, temperature=16.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:21:11.923', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:21:44.671 [DEBUG] [Thread-136075] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:21:44.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:21:44.760 [DEBUG] [Thread-136078] [transport.py] [_log()] starting thread (client mode): 0xa57b1120
2026-02-11T21:21:44.760 [DEBUG] [Thread-136078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:21:44.775 [DEBUG] [Thread-136078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:21:44.775 [INFO] [Thread-136078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:21:44.783 [DEBUG] [Thread-136078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:21:44.783 [DEBUG] [Thread-136078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:21:44.783 [DEBUG] [Thread-136078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:21:44.783 [DEBUG] [Thread-136078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:44.783 [DEBUG] [Thread-136078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] client lang: <none>
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] server lang: <none>
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] kex follows: False
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] Compression: none
2026-02-11T21:21:44.784 [DEBUG] [Thread-136078] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:21:44.842 [DEBUG] [Thread-136078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:21:44.843 [DEBUG] [Thread-136078] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:21:44.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:21:44.844 [DEBUG] [Thread-136078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:21:44.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:21:44.898 [DEBUG] [Thread-136078] [transport.py] [_log()] userauth is OK
2026-02-11T21:21:44.899 [DEBUG] [Thread-136078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:21:44.899 [DEBUG] [Thread-136078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:21:44.908 [DEBUG] [Thread-136078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:21:44.908 [DEBUG] [Thread-136078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:21:44.928 [INFO] [Thread-136078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:21:44.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:21:44.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:21:45.801 [DEBUG] [Thread-136078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:21:45.801 [DEBUG] [Thread-136078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:21:45.849 [DEBUG] [Thread-136078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:21:45.850 [DEBUG] [Thread-136078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:21:45.859 [DEBUG] [Thread-136078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:21:45.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:21:45.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:21:45.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:21:45.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:21:45.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:21:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:21:45.896 [DEBUG] [Thread-136078] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:21:58.622 [DEBUG] [Thread-136080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:22:13.670 [DEBUG] [Thread-136081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:22:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:22:15.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:22:15.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
2026-02-11T21:22:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 21, 49), 1.42, 91.14, 0.0, 28.55, 16.3, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:22:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:21:49
2026-02-11T21:22:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:22:18.300 [DEBUG] [Thread-136082] [transport.py] [_log()] starting thread (client mode): 0xa575bcd0
2026-02-11T21:22:18.300 [DEBUG] [Thread-136082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:22:18.320 [DEBUG] [Thread-136082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:22:18.320 [INFO] [Thread-136082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:22:18.323 [DEBUG] [Thread-136082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:22:18.323 [DEBUG] [Thread-136082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:22:18.323 [DEBUG] [Thread-136082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] client lang: <none>
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] server lang: <none>
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] kex follows: False
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] Compression: none
2026-02-11T21:22:18.324 [DEBUG] [Thread-136082] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:22:18.344 [DEBUG] [Thread-136082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:22:18.345 [DEBUG] [Thread-136082] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:22:18.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:22:18.346 [DEBUG] [Thread-136082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:22:18.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:22:18.348 [DEBUG] [Thread-136082] [transport.py] [_log()] userauth is OK
2026-02-11T21:22:18.348 [DEBUG] [Thread-136082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:22:18.348 [DEBUG] [Thread-136082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:22:18.348 [DEBUG] [Thread-136082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:22:18.349 [DEBUG] [Thread-136082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:22:18.373 [INFO] [Thread-136082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:22:18.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:22:19.037 [DEBUG] [Thread-136082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:22:19.037 [DEBUG] [Thread-136082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:22:19.038 [DEBUG] [Thread-136082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:22:19.078 [DEBUG] [Thread-136082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:22:19.079 [DEBUG] [Thread-136082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:22:19.081 [DEBUG] [Thread-136082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:22:19.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:22:19.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:22:19.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:22:19.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:22:19.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:22:19.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:22:19.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:22:19.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:22:19.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:22:19.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.806735 -999.00  +16.50  15.40     89  +14.70 1 3 1 3 1     0    0 1.54 -9.29 ----- 14.2 15.4 195.4 21.1 18.4 -5.5 18.2 -5.0 18.1 -3.5 18.4 -4.7
2026-02-11T21:22:19.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:22:19.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:22:19.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.806735
2026-02-11T21:22:19.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:22:19.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:22:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:22:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:22:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:22:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:21:49', tmtdew=1.42, humidity=91.14, cloud=0.0, wind=28.55, temperature=16.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:21:41.904', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:22:19.110 [DEBUG] [Thread-136082] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:22:19.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:22:19.207 [DEBUG] [Thread-136085] [transport.py] [_log()] starting thread (client mode): 0x9eb063e0
2026-02-11T21:22:19.207 [DEBUG] [Thread-136085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:22:19.221 [DEBUG] [Thread-136085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:22:19.222 [INFO] [Thread-136085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:22:19.229 [DEBUG] [Thread-136085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:22:19.230 [DEBUG] [Thread-136085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:22:19.230 [DEBUG] [Thread-136085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:22:19.230 [DEBUG] [Thread-136085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] client lang: <none>
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] server lang: <none>
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] kex follows: False
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] Compression: none
2026-02-11T21:22:19.231 [DEBUG] [Thread-136085] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:22:19.287 [DEBUG] [Thread-136085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:22:19.288 [DEBUG] [Thread-136085] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:22:19.288 [DEBUG] [Thread-136085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:22:19.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:22:19.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:22:19.343 [DEBUG] [Thread-136085] [transport.py] [_log()] userauth is OK
2026-02-11T21:22:19.344 [DEBUG] [Thread-136085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:22:19.344 [DEBUG] [Thread-136085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:22:19.344 [DEBUG] [Thread-136085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:22:19.344 [DEBUG] [Thread-136085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:22:19.362 [INFO] [Thread-136085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:22:19.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:22:19.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:22:20.169 [DEBUG] [Thread-136085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:22:20.169 [DEBUG] [Thread-136085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:22:20.217 [DEBUG] [Thread-136085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:22:20.217 [DEBUG] [Thread-136085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:22:20.226 [DEBUG] [Thread-136085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:22:20.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:22:20.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:22:20.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:22:20.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:22:20.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:22:20.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:22:20.262 [DEBUG] [Thread-136085] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:22:28.404 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:22:28.406 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:22:28.710 [DEBUG] [Thread-136087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:22:42.310 [DEBUG] [Thread-136088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:22:43.770 [DEBUG] [Thread-136089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:22:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:22:50.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:22:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:22:52.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 22, 24), 1.41, 91.16, 0.0, 26.59, 16.29, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:22:52.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:22:24
2026-02-11T21:22:52.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:22:53.082 [DEBUG] [Thread-136090] [transport.py] [_log()] starting thread (client mode): 0x9eb048e0
2026-02-11T21:22:53.082 [DEBUG] [Thread-136090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:22:53.103 [DEBUG] [Thread-136090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:22:53.103 [INFO] [Thread-136090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] client lang: <none>
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] server lang: <none>
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] kex follows: False
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] Compression: none
2026-02-11T21:22:53.106 [DEBUG] [Thread-136090] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:22:53.122 [DEBUG] [Thread-136090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:22:53.122 [DEBUG] [Thread-136090] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:22:53.123 [DEBUG] [Thread-136090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:22:53.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:22:53.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:22:53.125 [DEBUG] [Thread-136090] [transport.py] [_log()] userauth is OK
2026-02-11T21:22:53.125 [DEBUG] [Thread-136090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:22:53.125 [DEBUG] [Thread-136090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:22:53.125 [DEBUG] [Thread-136090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:22:53.125 [DEBUG] [Thread-136090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:22:53.143 [INFO] [Thread-136090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:22:53.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:22:53.910 [DEBUG] [Thread-136090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:22:53.910 [DEBUG] [Thread-136090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:22:53.910 [DEBUG] [Thread-136090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:22:53.951 [DEBUG] [Thread-136090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:22:53.952 [DEBUG] [Thread-136090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:22:53.955 [DEBUG] [Thread-136090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:22:53.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:22:53.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:22:53.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:22:53.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:22:53.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:22:53.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:22:53.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:22:53.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:22:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:22:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.807083 -999.00  +16.50  16.03     89  +14.70 1 3 1 3 1     0    0 1.57 -8.14 ----- 19.9 16.0 192.6 24.6 18.4 -3.7 18.1 -3.7 18.1 -5.1 18.4 -4.0
2026-02-11T21:22:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:22:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:22:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.807083
2026-02-11T21:22:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:22:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:22:24', tmtdew=1.41, humidity=91.16, cloud=0.0, wind=26.59, temperature=16.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:22:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:22:53.982 [DEBUG] [Thread-136090] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:22:54.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:22:54.077 [DEBUG] [Thread-136093] [transport.py] [_log()] starting thread (client mode): 0xa2d5e4d0
2026-02-11T21:22:54.077 [DEBUG] [Thread-136093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:22:54.091 [DEBUG] [Thread-136093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:22:54.092 [INFO] [Thread-136093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:22:54.099 [DEBUG] [Thread-136093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] client lang: <none>
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] server lang: <none>
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] kex follows: False
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] Compression: none
2026-02-11T21:22:54.100 [DEBUG] [Thread-136093] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:22:54.160 [DEBUG] [Thread-136093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:22:54.160 [DEBUG] [Thread-136093] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:22:54.161 [DEBUG] [Thread-136093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:22:54.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:22:54.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:22:54.216 [DEBUG] [Thread-136093] [transport.py] [_log()] userauth is OK
2026-02-11T21:22:54.216 [DEBUG] [Thread-136093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:22:54.216 [DEBUG] [Thread-136093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:22:54.216 [DEBUG] [Thread-136093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:22:54.216 [DEBUG] [Thread-136093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:22:54.234 [INFO] [Thread-136093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:22:54.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:22:54.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:22:55.129 [DEBUG] [Thread-136093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:22:55.129 [DEBUG] [Thread-136093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:22:55.177 [DEBUG] [Thread-136093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:22:55.178 [DEBUG] [Thread-136093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:22:55.187 [DEBUG] [Thread-136093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:22:55.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:22:55.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:22:55.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
2026-02-11T21:22:55.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:22:55.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:22:55.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:22:55.223 [DEBUG] [Thread-136093] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:22:58.807 [DEBUG] [Thread-136095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:23:13.867 [DEBUG] [Thread-136096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:23:25.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:23:25.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:23:25.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:23:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 22, 59), 1.36, 91.71, 0.0, 26.89, 16.24, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:23:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:22:59
2026-02-11T21:23:27.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:23:28.100 [DEBUG] [Thread-136097] [transport.py] [_log()] starting thread (client mode): 0xa5743070
2026-02-11T21:23:28.100 [DEBUG] [Thread-136097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:23:28.119 [DEBUG] [Thread-136097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:23:28.119 [INFO] [Thread-136097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:23:28.122 [DEBUG] [Thread-136097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:23:28.122 [DEBUG] [Thread-136097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] client lang: <none>
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] server lang: <none>
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] kex follows: False
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:23:28.123 [DEBUG] [Thread-136097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:23:28.124 [DEBUG] [Thread-136097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:23:28.124 [DEBUG] [Thread-136097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:23:28.124 [DEBUG] [Thread-136097] [transport.py] [_log()] Compression: none
2026-02-11T21:23:28.124 [DEBUG] [Thread-136097] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:23:28.144 [DEBUG] [Thread-136097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:23:28.144 [DEBUG] [Thread-136097] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:23:28.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:23:28.146 [DEBUG] [Thread-136097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:23:28.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:23:28.148 [DEBUG] [Thread-136097] [transport.py] [_log()] userauth is OK
2026-02-11T21:23:28.148 [DEBUG] [Thread-136097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:23:28.148 [DEBUG] [Thread-136097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:23:28.149 [DEBUG] [Thread-136097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:23:28.149 [DEBUG] [Thread-136097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:23:28.183 [INFO] [Thread-136097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:23:28.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:23:28.614 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:23:28.615 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:23:28.831 [DEBUG] [Thread-136097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:23:28.831 [DEBUG] [Thread-136097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:23:28.832 [DEBUG] [Thread-136097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:23:28.872 [DEBUG] [Thread-136097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:23:28.873 [DEBUG] [Thread-136097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:23:28.876 [DEBUG] [Thread-136097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:23:28.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:23:28.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:23:28.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:23:28.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:23:28.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:23:28.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:23:28.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:23:28.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.807430 -999.00  +16.50  17.58     89  +14.70 1 3 1 3 1     0    0 1.59 -7.38 ----- 14.2 17.6 196.8 25.2 18.4 -3.7 18.2 -2.9 18.1 -3.2 18.4 -2.8
2026-02-11T21:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.807430
2026-02-11T21:23:28.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:23:28.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:23:28.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:23:28.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:23:28.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:23:28.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:22:59', tmtdew=1.36, humidity=91.71, cloud=0.0, wind=26.89, temperature=16.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:22:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:23:28.904 [DEBUG] [Thread-136097] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:23:28.906 [DEBUG] [Thread-136100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:23:28.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:23:29.002 [DEBUG] [Thread-136101] [transport.py] [_log()] starting thread (client mode): 0xa5743700
2026-02-11T21:23:29.003 [DEBUG] [Thread-136101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:23:29.017 [DEBUG] [Thread-136101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:23:29.017 [INFO] [Thread-136101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:23:29.025 [DEBUG] [Thread-136101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:23:29.025 [DEBUG] [Thread-136101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:23:29.025 [DEBUG] [Thread-136101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:23:29.025 [DEBUG] [Thread-136101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] client lang: <none>
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] server lang: <none>
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] kex follows: False
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] Compression: none
2026-02-11T21:23:29.026 [DEBUG] [Thread-136101] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:23:29.088 [DEBUG] [Thread-136101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:23:29.089 [DEBUG] [Thread-136101] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:23:29.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:23:29.090 [DEBUG] [Thread-136101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:23:29.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:23:29.144 [DEBUG] [Thread-136101] [transport.py] [_log()] userauth is OK
2026-02-11T21:23:29.145 [DEBUG] [Thread-136101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:23:29.145 [DEBUG] [Thread-136101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:23:29.145 [DEBUG] [Thread-136101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:23:29.145 [DEBUG] [Thread-136101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:23:29.178 [INFO] [Thread-136101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:23:29.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:23:29.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:23:30.002 [DEBUG] [Thread-136101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:23:30.002 [DEBUG] [Thread-136101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:23:30.050 [DEBUG] [Thread-136101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:23:30.051 [DEBUG] [Thread-136101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:23:30.060 [DEBUG] [Thread-136101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:23:30.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:23:30.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:23:30.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:23:30.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:23:30.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:23:30.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:23:30.096 [DEBUG] [Thread-136101] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:23:42.399 [DEBUG] [Thread-136103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:23:43.956 [DEBUG] [Thread-136104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:23:58.989 [DEBUG] [Thread-136105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:24:00.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:24:00.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:24:00.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:24:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 23, 35), 1.92, 88.35, 0.0, 30.41, 16.58, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:24:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:23:35
2026-02-11T21:24:02.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:24:02.506 [DEBUG] [Thread-136106] [transport.py] [_log()] starting thread (client mode): 0xa5743e20
2026-02-11T21:24:02.506 [DEBUG] [Thread-136106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:24:02.527 [DEBUG] [Thread-136106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:24:02.527 [INFO] [Thread-136106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] client lang: <none>
2026-02-11T21:24:02.530 [DEBUG] [Thread-136106] [transport.py] [_log()] server lang: <none>
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] kex follows: False
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] Compression: none
2026-02-11T21:24:02.531 [DEBUG] [Thread-136106] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:24:02.547 [DEBUG] [Thread-136106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:24:02.548 [DEBUG] [Thread-136106] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:24:02.548 [DEBUG] [Thread-136106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:24:02.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:24:02.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:24:02.551 [DEBUG] [Thread-136106] [transport.py] [_log()] userauth is OK
2026-02-11T21:24:02.551 [DEBUG] [Thread-136106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:24:02.551 [DEBUG] [Thread-136106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:24:02.551 [DEBUG] [Thread-136106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:24:02.551 [DEBUG] [Thread-136106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:24:02.576 [INFO] [Thread-136106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:24:02.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:24:03.192 [DEBUG] [Thread-136106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:24:03.192 [DEBUG] [Thread-136106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:24:03.193 [DEBUG] [Thread-136106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:24:03.233 [DEBUG] [Thread-136106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:24:03.233 [DEBUG] [Thread-136106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:24:03.237 [DEBUG] [Thread-136106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:24:03.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:24:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:24:03.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:24:03.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:24:03.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:24:03.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:24:03.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:24:03.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:24:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:24:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.807777 -999.00  +16.50  15.59     89  +14.70 1 3 1 3 1     0    0 1.64 -7.22 ----- 18.5 15.6 192.0 19.6 18.4 -3.0 18.1 -4.1 18.1 -2.7 18.4 -3.1
2026-02-11T21:24:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:24:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:24:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.807777
2026-02-11T21:24:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:24:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:24:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:24:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:24:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:24:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:23:35', tmtdew=1.92, humidity=88.35, cloud=0.0, wind=30.41, temperature=16.58, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:23:11.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:24:03.250 [DEBUG] [Thread-136106] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:24:03.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:24:03.351 [DEBUG] [Thread-136109] [transport.py] [_log()] starting thread (client mode): 0xa2d5e7d0
2026-02-11T21:24:03.351 [DEBUG] [Thread-136109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:24:03.366 [DEBUG] [Thread-136109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:24:03.366 [INFO] [Thread-136109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:24:03.373 [DEBUG] [Thread-136109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] client lang: <none>
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] server lang: <none>
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] kex follows: False
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:24:03.374 [DEBUG] [Thread-136109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:24:03.375 [DEBUG] [Thread-136109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:24:03.375 [DEBUG] [Thread-136109] [transport.py] [_log()] Compression: none
2026-02-11T21:24:03.375 [DEBUG] [Thread-136109] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:24:03.434 [DEBUG] [Thread-136109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:24:03.434 [DEBUG] [Thread-136109] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:24:03.435 [DEBUG] [Thread-136109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:24:03.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:24:03.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:24:03.494 [DEBUG] [Thread-136109] [transport.py] [_log()] userauth is OK
2026-02-11T21:24:03.494 [DEBUG] [Thread-136109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:24:03.494 [DEBUG] [Thread-136109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:24:03.494 [DEBUG] [Thread-136109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:24:03.495 [DEBUG] [Thread-136109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:24:03.513 [INFO] [Thread-136109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:24:03.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:24:03.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:24:04.337 [DEBUG] [Thread-136109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:24:04.338 [DEBUG] [Thread-136109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:24:04.385 [DEBUG] [Thread-136109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:24:04.386 [DEBUG] [Thread-136109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:24:04.395 [DEBUG] [Thread-136109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:24:04.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:24:04.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:24:04.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:24:04.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:24:04.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:24:04.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:24:04.432 [DEBUG] [Thread-136109] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:24:14.027 [DEBUG] [Thread-136111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:24:28.824 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:24:28.825 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:24:29.073 [DEBUG] [Thread-136112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:24:34.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:24:34.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:24:34.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:24:36.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 24, 10), 1.34, 91.77, 0.0, 26.8, 16.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:24:36.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:24:10
2026-02-11T21:24:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:24:36.999 [DEBUG] [Thread-136113] [transport.py] [_log()] starting thread (client mode): 0xa5740b50
2026-02-11T21:24:36.999 [DEBUG] [Thread-136113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:24:37.019 [DEBUG] [Thread-136113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:24:37.019 [INFO] [Thread-136113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:24:37.022 [DEBUG] [Thread-136113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:24:37.022 [DEBUG] [Thread-136113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:24:37.022 [DEBUG] [Thread-136113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:24:37.022 [DEBUG] [Thread-136113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:37.022 [DEBUG] [Thread-136113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:37.022 [DEBUG] [Thread-136113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] client lang: <none>
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] server lang: <none>
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] kex follows: False
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] Compression: none
2026-02-11T21:24:37.023 [DEBUG] [Thread-136113] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:24:37.037 [DEBUG] [Thread-136113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:24:37.038 [DEBUG] [Thread-136113] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:24:37.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:24:37.039 [DEBUG] [Thread-136113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:24:37.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:24:37.041 [DEBUG] [Thread-136113] [transport.py] [_log()] userauth is OK
2026-02-11T21:24:37.042 [DEBUG] [Thread-136113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:24:37.042 [DEBUG] [Thread-136113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:24:37.042 [DEBUG] [Thread-136113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:24:37.042 [DEBUG] [Thread-136113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:24:37.066 [INFO] [Thread-136113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:24:37.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:24:37.697 [DEBUG] [Thread-136113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:24:37.698 [DEBUG] [Thread-136113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:24:37.698 [DEBUG] [Thread-136113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:24:37.738 [DEBUG] [Thread-136113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:24:37.739 [DEBUG] [Thread-136113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:24:37.742 [DEBUG] [Thread-136113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:24:37.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:24:37.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:24:37.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:24:37.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:24:37.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:24:37.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:24:37.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:24:37.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:24:37.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:24:37.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.808471 -999.00  +16.30  21.28     89  +14.60 1 3 1 3 1     0    0 1.64 -7.29 ----- 19.4 21.3 199.6 25.4 18.3 -3.4 18.1 -3.2 18.0 -3.1 18.3 -3.3
2026-02-11T21:24:37.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:24:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:24:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.808471
2026-02-11T21:24:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:24:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:24:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:24:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:24:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:24:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:24:10', tmtdew=1.34, humidity=91.77, cloud=0.0, wind=26.8, temperature=16.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:24:11.894', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:24:37.769 [DEBUG] [Thread-136113] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:24:37.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:24:37.867 [DEBUG] [Thread-136116] [transport.py] [_log()] starting thread (client mode): 0xa2d9dc00
2026-02-11T21:24:37.867 [DEBUG] [Thread-136116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:24:37.881 [DEBUG] [Thread-136116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:24:37.882 [INFO] [Thread-136116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:24:37.889 [DEBUG] [Thread-136116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:24:37.890 [DEBUG] [Thread-136116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:24:37.890 [DEBUG] [Thread-136116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:24:37.890 [DEBUG] [Thread-136116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:37.890 [DEBUG] [Thread-136116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:24:37.890 [DEBUG] [Thread-136116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:37.890 [DEBUG] [Thread-136116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:24:37.891 [DEBUG] [Thread-136116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:24:37.891 [DEBUG] [Thread-136116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:24:37.891 [DEBUG] [Thread-136116] [transport.py] [_log()] client lang: <none>
2026-02-11T21:24:37.891 [DEBUG] [Thread-136116] [transport.py] [_log()] server lang: <none>
2026-02-11T21:24:37.891 [DEBUG] [Thread-136116] [transport.py] [_log()] kex follows: False
2026-02-11T21:24:37.891 [DEBUG] [Thread-136116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:24:37.892 [DEBUG] [Thread-136116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:24:37.892 [DEBUG] [Thread-136116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:24:37.892 [DEBUG] [Thread-136116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:24:37.892 [DEBUG] [Thread-136116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:24:37.892 [DEBUG] [Thread-136116] [transport.py] [_log()] Compression: none
2026-02-11T21:24:37.892 [DEBUG] [Thread-136116] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:24:37.949 [DEBUG] [Thread-136116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:24:37.950 [DEBUG] [Thread-136116] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:24:37.950 [DEBUG] [Thread-136116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:24:37.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:24:37.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:24:38.010 [DEBUG] [Thread-136116] [transport.py] [_log()] userauth is OK
2026-02-11T21:24:38.010 [DEBUG] [Thread-136116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:24:38.010 [DEBUG] [Thread-136116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:24:38.011 [DEBUG] [Thread-136116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:24:38.011 [DEBUG] [Thread-136116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:24:38.030 [INFO] [Thread-136116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:24:38.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:24:38.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:24:38.847 [DEBUG] [Thread-136116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:24:38.847 [DEBUG] [Thread-136116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:24:38.899 [DEBUG] [Thread-136116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:24:38.899 [DEBUG] [Thread-136116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:24:38.911 [DEBUG] [Thread-136116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:24:38.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:24:38.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:24:38.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:24:38.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:24:38.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:24:38.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:24:38.956 [DEBUG] [Thread-136116] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:24:42.458 [DEBUG] [Thread-136118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:24:44.109 [DEBUG] [Thread-136119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:24:59.161 [DEBUG] [Thread-136120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:25:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:25:08.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:25:08.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:25:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 24, 46), 1.33, 91.87, 0.0, 25.62, 16.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:25:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:24:46
2026-02-11T21:25:11.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:25:11.326 [DEBUG] [Thread-136121] [transport.py] [_log()] starting thread (client mode): 0xa2d5c370
2026-02-11T21:25:11.326 [DEBUG] [Thread-136121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:25:11.344 [DEBUG] [Thread-136121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:25:11.345 [INFO] [Thread-136121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] client lang: <none>
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] server lang: <none>
2026-02-11T21:25:11.347 [DEBUG] [Thread-136121] [transport.py] [_log()] kex follows: False
2026-02-11T21:25:11.348 [DEBUG] [Thread-136121] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:25:11.348 [DEBUG] [Thread-136121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:25:11.348 [DEBUG] [Thread-136121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:25:11.348 [DEBUG] [Thread-136121] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:25:11.348 [DEBUG] [Thread-136121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:25:11.348 [DEBUG] [Thread-136121] [transport.py] [_log()] Compression: none
2026-02-11T21:25:11.348 [DEBUG] [Thread-136121] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:25:11.367 [DEBUG] [Thread-136121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:25:11.368 [DEBUG] [Thread-136121] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:25:11.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:25:11.370 [DEBUG] [Thread-136121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:25:11.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:25:11.372 [DEBUG] [Thread-136121] [transport.py] [_log()] userauth is OK
2026-02-11T21:25:11.373 [DEBUG] [Thread-136121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:25:11.373 [DEBUG] [Thread-136121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:25:11.373 [DEBUG] [Thread-136121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:25:11.373 [DEBUG] [Thread-136121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:25:11.401 [INFO] [Thread-136121] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:25:11.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:25:11.984 [DEBUG] [Thread-136121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:25:11.984 [DEBUG] [Thread-136121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:25:11.984 [DEBUG] [Thread-136121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:25:12.025 [DEBUG] [Thread-136121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:25:12.025 [DEBUG] [Thread-136121] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:25:12.028 [DEBUG] [Thread-136121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:25:12.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:25:12.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:25:12.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:25:12.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:25:12.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:25:12.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:25:12.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:25:12.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:25:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:25:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.808819 -999.00  +16.20  19.81     89  +14.50 1 3 1 3 1     0    0 1.61 -6.74 ----- 18.1 19.8 201.6 25.6 18.3 -3.2 18.0 -3.3 18.1 -3.2 18.3 -3.2
2026-02-11T21:25:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:25:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:25:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.808819
2026-02-11T21:25:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:25:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:25:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:25:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:25:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:25:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:24:46', tmtdew=1.33, humidity=91.87, cloud=0.0, wind=25.62, temperature=16.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:24:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:25:12.053 [DEBUG] [Thread-136121] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:25:12.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:25:12.148 [DEBUG] [Thread-136124] [transport.py] [_log()] starting thread (client mode): 0xa575a830
2026-02-11T21:25:12.148 [DEBUG] [Thread-136124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:25:12.168 [DEBUG] [Thread-136124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:25:12.168 [INFO] [Thread-136124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:25:12.176 [DEBUG] [Thread-136124] [transport.py] [_log()] client lang: <none>
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] server lang: <none>
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] kex follows: False
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] Compression: none
2026-02-11T21:25:12.177 [DEBUG] [Thread-136124] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:25:12.235 [DEBUG] [Thread-136124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:25:12.235 [DEBUG] [Thread-136124] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:25:12.236 [DEBUG] [Thread-136124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:25:12.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:25:12.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:25:12.295 [DEBUG] [Thread-136124] [transport.py] [_log()] userauth is OK
2026-02-11T21:25:12.295 [DEBUG] [Thread-136124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:25:12.295 [DEBUG] [Thread-136124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:25:12.295 [DEBUG] [Thread-136124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:25:12.295 [DEBUG] [Thread-136124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:25:12.313 [INFO] [Thread-136124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:25:12.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:25:12.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:25:13.146 [DEBUG] [Thread-136124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:25:13.146 [DEBUG] [Thread-136124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:25:13.195 [DEBUG] [Thread-136124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:25:13.195 [DEBUG] [Thread-136124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:25:13.204 [DEBUG] [Thread-136124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:25:13.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:25:13.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:25:13.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:25:13.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:25:13.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:25:13.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:25:13.238 [DEBUG] [Thread-136124] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:25:14.197 [DEBUG] [Thread-136126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:25:29.027 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:25:29.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:25:29.245 [DEBUG] [Thread-136127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:25:42.526 [DEBUG] [Thread-136128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:25:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:25:43.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:25:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:25:44.281 [DEBUG] [Thread-136129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:25:45.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 25, 21), 1.33, 91.87, 0.0, 21.35, 16.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:25:45.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:25:21
2026-02-11T21:25:45.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:25:45.627 [DEBUG] [Thread-136130] [transport.py] [_log()] starting thread (client mode): 0xa2db7fa0
2026-02-11T21:25:45.627 [DEBUG] [Thread-136130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:25:45.648 [DEBUG] [Thread-136130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:25:45.648 [INFO] [Thread-136130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:25:45.649 [DEBUG] [Thread-136130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:25:45.649 [DEBUG] [Thread-136130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:25:45.649 [DEBUG] [Thread-136130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] client lang: <none>
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] server lang: <none>
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] kex follows: False
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] Compression: none
2026-02-11T21:25:45.650 [DEBUG] [Thread-136130] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:25:45.667 [DEBUG] [Thread-136130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:25:45.667 [DEBUG] [Thread-136130] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:25:45.668 [DEBUG] [Thread-136130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:25:45.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:25:45.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:25:45.669 [DEBUG] [Thread-136130] [transport.py] [_log()] userauth is OK
2026-02-11T21:25:45.670 [DEBUG] [Thread-136130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:25:45.670 [DEBUG] [Thread-136130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:25:45.670 [DEBUG] [Thread-136130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:25:45.670 [DEBUG] [Thread-136130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:25:45.684 [INFO] [Thread-136130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:25:45.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:25:46.300 [DEBUG] [Thread-136130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:25:46.300 [DEBUG] [Thread-136130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:25:46.301 [DEBUG] [Thread-136130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:25:46.341 [DEBUG] [Thread-136130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:25:46.341 [DEBUG] [Thread-136130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:25:46.344 [DEBUG] [Thread-136130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:25:46.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:25:46.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:25:46.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:25:46.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:25:46.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:25:46.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:25:46.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:25:46.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:25:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:25:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.809513 -999.00  +16.30  16.48     89  +14.60 1 3 1 3 1     0    0 1.62 -7.53 ----- 16.7 16.5 196.2 16.9 18.2 -2.9 18.1 -2.6 18.0 -2.8 18.3 -2.8
2026-02-11T21:25:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:25:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:25:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.809513
2026-02-11T21:25:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:25:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:25:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:25:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:25:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:25:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:25:21', tmtdew=1.33, humidity=91.87, cloud=0.0, wind=21.35, temperature=16.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:25:41.923', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:25:46.369 [DEBUG] [Thread-136130] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:25:46.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:25:46.463 [DEBUG] [Thread-136133] [transport.py] [_log()] starting thread (client mode): 0xa57e1f90
2026-02-11T21:25:46.463 [DEBUG] [Thread-136133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:25:46.478 [DEBUG] [Thread-136133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:25:46.478 [INFO] [Thread-136133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] client lang: <none>
2026-02-11T21:25:46.486 [DEBUG] [Thread-136133] [transport.py] [_log()] server lang: <none>
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] kex follows: False
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] Compression: none
2026-02-11T21:25:46.487 [DEBUG] [Thread-136133] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:25:46.544 [DEBUG] [Thread-136133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:25:46.545 [DEBUG] [Thread-136133] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:25:46.545 [DEBUG] [Thread-136133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:25:46.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:25:46.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:25:46.603 [DEBUG] [Thread-136133] [transport.py] [_log()] userauth is OK
2026-02-11T21:25:46.603 [DEBUG] [Thread-136133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:25:46.603 [DEBUG] [Thread-136133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:25:46.603 [DEBUG] [Thread-136133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:25:46.603 [DEBUG] [Thread-136133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:25:46.621 [INFO] [Thread-136133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:25:46.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:25:46.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:25:47.498 [DEBUG] [Thread-136133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:25:47.498 [DEBUG] [Thread-136133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:25:47.546 [DEBUG] [Thread-136133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:25:47.546 [DEBUG] [Thread-136133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:25:47.554 [DEBUG] [Thread-136133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:25:47.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:25:47.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:25:47.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:25:47.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:25:47.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:25:47.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:25:47.588 [DEBUG] [Thread-136133] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:25:59.316 [DEBUG] [Thread-136135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:26:14.367 [DEBUG] [Thread-136136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:26:17.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:26:17.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:26:17.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:26:19.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 25, 57), 1.31, 91.96, 0.0, 23.31, 16.17, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:26:19.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:25:57
2026-02-11T21:26:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:26:19.949 [DEBUG] [Thread-136137] [transport.py] [_log()] starting thread (client mode): 0xa2d9eb00
2026-02-11T21:26:19.949 [DEBUG] [Thread-136137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:26:19.963 [DEBUG] [Thread-136137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:26:19.963 [INFO] [Thread-136137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] client lang: <none>
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] server lang: <none>
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] kex follows: False
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] Compression: none
2026-02-11T21:26:19.967 [DEBUG] [Thread-136137] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:26:19.978 [DEBUG] [Thread-136137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:26:19.979 [DEBUG] [Thread-136137] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:26:19.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:26:19.979 [DEBUG] [Thread-136137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:26:19.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:26:19.980 [DEBUG] [Thread-136137] [transport.py] [_log()] userauth is OK
2026-02-11T21:26:19.980 [DEBUG] [Thread-136137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:26:19.980 [DEBUG] [Thread-136137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:26:19.981 [DEBUG] [Thread-136137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:26:19.981 [DEBUG] [Thread-136137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:26:20.002 [INFO] [Thread-136137] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:26:20.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:26:20.632 [DEBUG] [Thread-136137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:26:20.632 [DEBUG] [Thread-136137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:26:20.632 [DEBUG] [Thread-136137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:26:20.673 [DEBUG] [Thread-136137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:26:20.673 [DEBUG] [Thread-136137] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:26:20.676 [DEBUG] [Thread-136137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:26:20.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:26:20.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:26:20.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:26:20.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:26:20.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:26:20.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:26:20.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:26:20.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:26:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:26:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.809860 -999.00  +16.30  16.68     89  +14.60 1 3 1 3 1     0    0 1.60 -7.74 ----- 15.9 16.7 193.6 19.6 18.3 -3.1 18.1 -3.2 18.0 -2.8 18.4 -3.1
2026-02-11T21:26:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:26:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:26:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.809860
2026-02-11T21:26:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:26:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:26:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:26:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:26:20.698 [DEBUG] [Thread-136137] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:26:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:26:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:25:57', tmtdew=1.31, humidity=91.96, cloud=0.0, wind=23.31, temperature=16.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:26:11.904', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:26:20.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:26:20.795 [DEBUG] [Thread-136140] [transport.py] [_log()] starting thread (client mode): 0xa57730d0
2026-02-11T21:26:20.795 [DEBUG] [Thread-136140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:26:20.810 [DEBUG] [Thread-136140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:26:20.810 [INFO] [Thread-136140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] client lang: <none>
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] server lang: <none>
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] kex follows: False
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] Compression: none
2026-02-11T21:26:20.818 [DEBUG] [Thread-136140] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:26:20.874 [DEBUG] [Thread-136140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:26:20.875 [DEBUG] [Thread-136140] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:26:20.875 [DEBUG] [Thread-136140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:26:20.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:26:20.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:26:20.931 [DEBUG] [Thread-136140] [transport.py] [_log()] userauth is OK
2026-02-11T21:26:20.931 [DEBUG] [Thread-136140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:26:20.931 [DEBUG] [Thread-136140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:26:20.931 [DEBUG] [Thread-136140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:26:20.931 [DEBUG] [Thread-136140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:26:20.944 [INFO] [Thread-136140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:26:20.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:26:20.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:26:21.772 [DEBUG] [Thread-136140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:26:21.773 [DEBUG] [Thread-136140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:26:21.820 [DEBUG] [Thread-136140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:26:21.820 [DEBUG] [Thread-136140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:26:21.829 [DEBUG] [Thread-136140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:26:21.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:26:21.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:26:21.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:26:21.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:26:21.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:26:21.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:26:21.866 [DEBUG] [Thread-136140] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:26:29.231 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:26:29.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:26:29.404 [DEBUG] [Thread-136142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:26:42.600 [DEBUG] [Thread-136143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:26:44.459 [DEBUG] [Thread-136144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:26:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:26:51.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:26:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:26:53.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 26, 33), 1.32, 91.89, 0.0, 22.8, 16.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:26:53.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:26:33
2026-02-11T21:26:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:26:54.580 [DEBUG] [Thread-136145] [transport.py] [_log()] starting thread (client mode): 0xa57403d0
2026-02-11T21:26:54.580 [DEBUG] [Thread-136145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:26:54.591 [DEBUG] [Thread-136145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:26:54.591 [INFO] [Thread-136145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:26:54.593 [DEBUG] [Thread-136145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] client lang: <none>
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] server lang: <none>
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] kex follows: False
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] Compression: none
2026-02-11T21:26:54.594 [DEBUG] [Thread-136145] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:26:54.601 [DEBUG] [Thread-136145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:26:54.601 [DEBUG] [Thread-136145] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:26:54.602 [DEBUG] [Thread-136145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:26:54.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:26:54.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:26:54.603 [DEBUG] [Thread-136145] [transport.py] [_log()] userauth is OK
2026-02-11T21:26:54.603 [DEBUG] [Thread-136145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:26:54.603 [DEBUG] [Thread-136145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:26:54.603 [DEBUG] [Thread-136145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:26:54.603 [DEBUG] [Thread-136145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:26:54.616 [INFO] [Thread-136145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:26:54.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:26:55.174 [DEBUG] [Thread-136145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:26:55.175 [DEBUG] [Thread-136145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:26:55.175 [DEBUG] [Thread-136145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:26:55.215 [DEBUG] [Thread-136145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:26:55.216 [DEBUG] [Thread-136145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:26:55.219 [DEBUG] [Thread-136145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:26:55.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:26:55.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:26:55.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:26:55.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:26:55.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:26:55.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:26:55.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:26:55.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:26:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:26:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.810207 -999.00  +16.40  10.04     89  +14.60 1 3 1 3 1     0    0 1.59 -7.21 ----- 17.3 10.0 215.2 16.7 18.3 -3.4 18.1 -3.4 18.1 -3.3 18.3 -3.3
2026-02-11T21:26:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:26:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:26:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.810207
2026-02-11T21:26:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:26:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:26:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:26:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:26:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:26:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:26:33', tmtdew=1.32, humidity=91.89, cloud=0.0, wind=22.8, temperature=16.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:26:41.885', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:26:55.250 [DEBUG] [Thread-136145] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:26:55.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:26:55.346 [DEBUG] [Thread-136148] [transport.py] [_log()] starting thread (client mode): 0xa57e3820
2026-02-11T21:26:55.346 [DEBUG] [Thread-136148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:26:55.361 [DEBUG] [Thread-136148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:26:55.361 [INFO] [Thread-136148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:26:55.368 [DEBUG] [Thread-136148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] client lang: <none>
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] server lang: <none>
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] kex follows: False
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] Compression: none
2026-02-11T21:26:55.369 [DEBUG] [Thread-136148] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:26:55.428 [DEBUG] [Thread-136148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:26:55.428 [DEBUG] [Thread-136148] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:26:55.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:26:55.429 [DEBUG] [Thread-136148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:26:55.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:26:55.484 [DEBUG] [Thread-136148] [transport.py] [_log()] userauth is OK
2026-02-11T21:26:55.484 [DEBUG] [Thread-136148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:26:55.484 [DEBUG] [Thread-136148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:26:55.484 [DEBUG] [Thread-136148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:26:55.484 [DEBUG] [Thread-136148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:26:55.503 [INFO] [Thread-136148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:26:55.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:26:55.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:26:56.352 [DEBUG] [Thread-136148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:26:56.361 [DEBUG] [Thread-136148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:26:56.400 [DEBUG] [Thread-136148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:26:56.401 [DEBUG] [Thread-136148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:26:56.414 [DEBUG] [Thread-136148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:26:56.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:26:56.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:26:56.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:26:56.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:26:56.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:26:56.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:26:56.460 [DEBUG] [Thread-136148] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:26:59.497 [DEBUG] [Thread-136150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:27:14.549 [DEBUG] [Thread-136151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:27:26.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:27:26.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:27:26.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:27:28.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 27, 8), 1.32, 91.92, 0.0, 23.15, 16.12, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:27:28.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:27:08
2026-02-11T21:27:29.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:27:29.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:27:29.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:27:29.583 [DEBUG] [Thread-136152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:27:29.600 [DEBUG] [Thread-136153] [transport.py] [_log()] starting thread (client mode): 0xa2d6b3d0
2026-02-11T21:27:29.600 [DEBUG] [Thread-136153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:27:29.619 [DEBUG] [Thread-136153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:27:29.620 [INFO] [Thread-136153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:27:29.622 [DEBUG] [Thread-136153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] client lang: <none>
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] server lang: <none>
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] kex follows: False
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] Compression: none
2026-02-11T21:27:29.623 [DEBUG] [Thread-136153] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:27:29.634 [DEBUG] [Thread-136153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:27:29.634 [DEBUG] [Thread-136153] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:27:29.635 [DEBUG] [Thread-136153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:27:29.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:27:29.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:27:29.636 [DEBUG] [Thread-136153] [transport.py] [_log()] userauth is OK
2026-02-11T21:27:29.636 [DEBUG] [Thread-136153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:27:29.636 [DEBUG] [Thread-136153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:27:29.636 [DEBUG] [Thread-136153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:27:29.636 [DEBUG] [Thread-136153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:27:29.655 [INFO] [Thread-136153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:27:29.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:27:30.240 [DEBUG] [Thread-136153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:27:30.240 [DEBUG] [Thread-136153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:27:30.241 [DEBUG] [Thread-136153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:27:30.281 [DEBUG] [Thread-136153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:27:30.281 [DEBUG] [Thread-136153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:27:30.284 [DEBUG] [Thread-136153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:27:30.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:27:30.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:27:30.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:27:30.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:27:30.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:27:30.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:27:30.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:27:30.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:27:30.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:27:30.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.810555 -999.00  +16.30  16.97     89  +14.60 1 3 1 3 1     0    0 1.57 -7.32 ----- 22.7 17.0 191.6 26.5 18.3 -3.5 18.2 -4.0 18.0 -3.5 18.4 -3.7
2026-02-11T21:27:30.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:27:30.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:27:30.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.810555
2026-02-11T21:27:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:27:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:27:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:27:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:27:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:27:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:27:08', tmtdew=1.32, humidity=91.92, cloud=0.0, wind=23.15, temperature=16.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:27:11.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:27:30.323 [DEBUG] [Thread-136153] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:27:30.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:27:30.428 [DEBUG] [Thread-136156] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-11T21:27:30.429 [DEBUG] [Thread-136156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:27:30.444 [DEBUG] [Thread-136156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:27:30.444 [INFO] [Thread-136156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:27:30.454 [DEBUG] [Thread-136156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:27:30.454 [DEBUG] [Thread-136156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:27:30.455 [DEBUG] [Thread-136156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:27:30.455 [DEBUG] [Thread-136156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:27:30.455 [DEBUG] [Thread-136156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:27:30.455 [DEBUG] [Thread-136156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:27:30.455 [DEBUG] [Thread-136156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] client lang: <none>
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] server lang: <none>
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] kex follows: False
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:27:30.456 [DEBUG] [Thread-136156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:27:30.457 [DEBUG] [Thread-136156] [transport.py] [_log()] Compression: none
2026-02-11T21:27:30.457 [DEBUG] [Thread-136156] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:27:30.516 [DEBUG] [Thread-136156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:27:30.517 [DEBUG] [Thread-136156] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:27:30.517 [DEBUG] [Thread-136156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:27:30.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:27:30.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:27:30.579 [DEBUG] [Thread-136156] [transport.py] [_log()] userauth is OK
2026-02-11T21:27:30.580 [DEBUG] [Thread-136156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:27:30.580 [DEBUG] [Thread-136156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:27:30.580 [DEBUG] [Thread-136156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:27:30.580 [DEBUG] [Thread-136156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:27:30.599 [INFO] [Thread-136156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:27:30.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:27:30.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:27:31.448 [DEBUG] [Thread-136156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:27:31.448 [DEBUG] [Thread-136156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:27:31.497 [DEBUG] [Thread-136156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:27:31.498 [DEBUG] [Thread-136156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:27:31.508 [DEBUG] [Thread-136156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:27:31.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:27:31.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:27:31.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:27:31.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:27:31.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:27:31.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:27:31.549 [DEBUG] [Thread-136156] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:27:42.687 [DEBUG] [Thread-136158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:27:44.614 [DEBUG] [Thread-136159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:27:59.666 [DEBUG] [Thread-136160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:28:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:28:01.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:28:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:28:03.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 27, 44), 1.26, 91.96, 0.0, 22.37, 16.07, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:28:03.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:27:44
2026-02-11T21:28:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:28:03.909 [DEBUG] [Thread-136161] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-11T21:28:03.910 [DEBUG] [Thread-136161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:28:03.930 [DEBUG] [Thread-136161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:28:03.930 [INFO] [Thread-136161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:28:03.932 [DEBUG] [Thread-136161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] client lang: <none>
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] server lang: <none>
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] kex follows: False
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] Compression: none
2026-02-11T21:28:03.933 [DEBUG] [Thread-136161] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:28:03.943 [DEBUG] [Thread-136161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:28:03.944 [DEBUG] [Thread-136161] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:28:03.944 [DEBUG] [Thread-136161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:28:03.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:28:03.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:28:03.946 [DEBUG] [Thread-136161] [transport.py] [_log()] userauth is OK
2026-02-11T21:28:03.946 [DEBUG] [Thread-136161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:28:03.946 [DEBUG] [Thread-136161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:28:03.946 [DEBUG] [Thread-136161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:28:03.946 [DEBUG] [Thread-136161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:28:03.971 [INFO] [Thread-136161] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:28:03.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:28:04.623 [DEBUG] [Thread-136161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:28:04.623 [DEBUG] [Thread-136161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:28:04.624 [DEBUG] [Thread-136161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:28:04.664 [DEBUG] [Thread-136161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:28:04.665 [DEBUG] [Thread-136161] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:28:04.668 [DEBUG] [Thread-136161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:28:04.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:28:04.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:28:04.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:28:04.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:28:04.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:28:04.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:28:04.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:28:04.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:28:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:28:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.810902 -999.00  +16.30  16.85     89  +14.60 1 3 1 3 1     0    0 1.58 -7.48 ----- 18.0 16.9 211.8 25.4 18.3 -3.5 18.1 -3.1 18.0 -3.4 18.3 -3.7
2026-02-11T21:28:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:28:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:28:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.810902
2026-02-11T21:28:04.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:28:04.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:28:04.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:28:04.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:28:04.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:28:04.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:27:44', tmtdew=1.26, humidity=91.96, cloud=0.0, wind=22.37, temperature=16.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:27:41.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:28:04.691 [DEBUG] [Thread-136161] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:28:04.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:28:04.785 [DEBUG] [Thread-136164] [transport.py] [_log()] starting thread (client mode): 0xa57b3c70
2026-02-11T21:28:04.785 [DEBUG] [Thread-136164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:28:04.803 [DEBUG] [Thread-136164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:28:04.803 [INFO] [Thread-136164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:28:04.811 [DEBUG] [Thread-136164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:28:04.811 [DEBUG] [Thread-136164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] client lang: <none>
2026-02-11T21:28:04.812 [DEBUG] [Thread-136164] [transport.py] [_log()] server lang: <none>
2026-02-11T21:28:04.813 [DEBUG] [Thread-136164] [transport.py] [_log()] kex follows: False
2026-02-11T21:28:04.813 [DEBUG] [Thread-136164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:28:04.813 [DEBUG] [Thread-136164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:28:04.813 [DEBUG] [Thread-136164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:28:04.813 [DEBUG] [Thread-136164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:28:04.813 [DEBUG] [Thread-136164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:28:04.813 [DEBUG] [Thread-136164] [transport.py] [_log()] Compression: none
2026-02-11T21:28:04.814 [DEBUG] [Thread-136164] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:28:04.870 [DEBUG] [Thread-136164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:28:04.871 [DEBUG] [Thread-136164] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:28:04.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:28:04.873 [DEBUG] [Thread-136164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:28:04.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:28:04.930 [DEBUG] [Thread-136164] [transport.py] [_log()] userauth is OK
2026-02-11T21:28:04.930 [DEBUG] [Thread-136164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:28:04.930 [DEBUG] [Thread-136164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:28:04.930 [DEBUG] [Thread-136164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:28:04.930 [DEBUG] [Thread-136164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:28:04.949 [INFO] [Thread-136164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:28:04.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:28:04.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:28:05.815 [DEBUG] [Thread-136164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:28:05.815 [DEBUG] [Thread-136164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:28:05.864 [DEBUG] [Thread-136164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:28:05.864 [DEBUG] [Thread-136164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:28:05.873 [DEBUG] [Thread-136164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:28:05.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:28:05.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:28:05.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:28:05.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:28:05.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:28:05.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:28:05.914 [DEBUG] [Thread-136164] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:28:14.702 [DEBUG] [Thread-136166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:28:29.642 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:28:29.643 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:28:29.752 [DEBUG] [Thread-136167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:28:35.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:28:35.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:28:35.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:28:37.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 28, 19), 1.25, 92.01, 0.0, 24.79, 16.07, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:28:37.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:28:19
2026-02-11T21:28:38.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:28:38.576 [DEBUG] [Thread-136168] [transport.py] [_log()] starting thread (client mode): 0xa2d5ff40
2026-02-11T21:28:38.576 [DEBUG] [Thread-136168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:28:38.596 [DEBUG] [Thread-136168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:28:38.597 [INFO] [Thread-136168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:28:38.599 [DEBUG] [Thread-136168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:28:38.599 [DEBUG] [Thread-136168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:28:38.599 [DEBUG] [Thread-136168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] client lang: <none>
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] server lang: <none>
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] kex follows: False
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:28:38.600 [DEBUG] [Thread-136168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:28:38.601 [DEBUG] [Thread-136168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:28:38.601 [DEBUG] [Thread-136168] [transport.py] [_log()] Compression: none
2026-02-11T21:28:38.601 [DEBUG] [Thread-136168] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:28:38.622 [DEBUG] [Thread-136168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:28:38.623 [DEBUG] [Thread-136168] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:28:38.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:28:38.624 [DEBUG] [Thread-136168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:28:38.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:28:38.626 [DEBUG] [Thread-136168] [transport.py] [_log()] userauth is OK
2026-02-11T21:28:38.626 [DEBUG] [Thread-136168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:28:38.626 [DEBUG] [Thread-136168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:28:38.627 [DEBUG] [Thread-136168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:28:38.627 [DEBUG] [Thread-136168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:28:38.646 [INFO] [Thread-136168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:28:38.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:28:39.311 [DEBUG] [Thread-136168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:28:39.311 [DEBUG] [Thread-136168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:28:39.312 [DEBUG] [Thread-136168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:28:39.352 [DEBUG] [Thread-136168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:28:39.353 [DEBUG] [Thread-136168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:28:39.356 [DEBUG] [Thread-136168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:28:39.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:28:39.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:28:39.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:28:39.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:28:39.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:28:39.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:28:39.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:28:39.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:28:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:28:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.811249 -999.00  +16.30  10.64     89  +14.50 1 3 1 3 1     0    0 1.59 -7.20 ----- 13.2 10.6 206.4 25.6 18.2 -3.7 18.1 -3.8 18.0 -3.3 18.3 -3.7
2026-02-11T21:28:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:28:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:28:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.811249
2026-02-11T21:28:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:28:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:28:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:28:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:28:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:28:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:28:19', tmtdew=1.25, humidity=92.01, cloud=0.0, wind=24.79, temperature=16.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:28:11.914', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:28:39.391 [DEBUG] [Thread-136168] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:28:39.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:28:39.487 [DEBUG] [Thread-136171] [transport.py] [_log()] starting thread (client mode): 0xa57b0f40
2026-02-11T21:28:39.487 [DEBUG] [Thread-136171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:28:39.504 [DEBUG] [Thread-136171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:28:39.504 [INFO] [Thread-136171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:28:39.512 [DEBUG] [Thread-136171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:28:39.512 [DEBUG] [Thread-136171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:28:39.512 [DEBUG] [Thread-136171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:28:39.512 [DEBUG] [Thread-136171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:39.512 [DEBUG] [Thread-136171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:28:39.512 [DEBUG] [Thread-136171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] client lang: <none>
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] server lang: <none>
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] kex follows: False
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] Compression: none
2026-02-11T21:28:39.513 [DEBUG] [Thread-136171] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:28:39.569 [DEBUG] [Thread-136171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:28:39.570 [DEBUG] [Thread-136171] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:28:39.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:28:39.571 [DEBUG] [Thread-136171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:28:39.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:28:39.629 [DEBUG] [Thread-136171] [transport.py] [_log()] userauth is OK
2026-02-11T21:28:39.630 [DEBUG] [Thread-136171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:28:39.630 [DEBUG] [Thread-136171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:28:39.630 [DEBUG] [Thread-136171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:28:39.630 [DEBUG] [Thread-136171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:28:39.653 [INFO] [Thread-136171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:28:39.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:28:39.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:28:40.510 [DEBUG] [Thread-136171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:28:40.511 [DEBUG] [Thread-136171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:28:40.559 [DEBUG] [Thread-136171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:28:40.559 [DEBUG] [Thread-136171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:28:40.568 [DEBUG] [Thread-136171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:28:40.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:28:40.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:28:40.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:28:40.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:28:40.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:28:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:28:40.608 [DEBUG] [Thread-136171] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:28:42.744 [DEBUG] [Thread-136173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:28:44.787 [DEBUG] [Thread-136174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:28:59.840 [DEBUG] [Thread-136175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:29:10.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:29:10.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:29:10.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:29:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 28, 54), 1.3, 92.02, 0.0, 23.36, 16.09, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:29:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:28:54
2026-02-11T21:29:12.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:29:13.021 [DEBUG] [Thread-136176] [transport.py] [_log()] starting thread (client mode): 0xa2d04c70
2026-02-11T21:29:13.021 [DEBUG] [Thread-136176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:29:13.041 [DEBUG] [Thread-136176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:29:13.041 [INFO] [Thread-136176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] client lang: <none>
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] server lang: <none>
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] kex follows: False
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:29:13.045 [DEBUG] [Thread-136176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:29:13.046 [DEBUG] [Thread-136176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:29:13.046 [DEBUG] [Thread-136176] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:29:13.046 [DEBUG] [Thread-136176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:29:13.046 [DEBUG] [Thread-136176] [transport.py] [_log()] Compression: none
2026-02-11T21:29:13.046 [DEBUG] [Thread-136176] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:29:13.062 [DEBUG] [Thread-136176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:29:13.062 [DEBUG] [Thread-136176] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:29:13.063 [DEBUG] [Thread-136176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:29:13.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:29:13.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:29:13.064 [DEBUG] [Thread-136176] [transport.py] [_log()] userauth is OK
2026-02-11T21:29:13.064 [DEBUG] [Thread-136176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:29:13.064 [DEBUG] [Thread-136176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:29:13.064 [DEBUG] [Thread-136176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:29:13.065 [DEBUG] [Thread-136176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:29:13.088 [INFO] [Thread-136176] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:29:13.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:29:13.743 [DEBUG] [Thread-136176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:29:13.743 [DEBUG] [Thread-136176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:29:13.743 [DEBUG] [Thread-136176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:29:13.783 [DEBUG] [Thread-136176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:29:13.783 [DEBUG] [Thread-136176] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:29:13.786 [DEBUG] [Thread-136176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:29:13.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:29:13.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:29:13.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:29:13.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:29:13.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:29:13.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:29:13.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:29:13.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:29:13.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:29:13.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.811596 -999.00  +16.20  20.79     89  +14.50 1 3 1 3 1     0    0 1.59 -7.09 ----- 18.6 20.8 196.4 30.2 18.2 -3.4 18.0 -4.1 17.9 -3.0 18.3 -3.4
2026-02-11T21:29:13.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:29:13.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:29:13.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.811596
2026-02-11T21:29:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:29:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:29:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:29:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:29:13.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:29:13.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:28:54', tmtdew=1.3, humidity=92.02, cloud=0.0, wind=23.36, temperature=16.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:28:41.894', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:29:13.816 [DEBUG] [Thread-136176] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:29:13.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:29:13.911 [DEBUG] [Thread-136179] [transport.py] [_log()] starting thread (client mode): 0xa2d55ff0
2026-02-11T21:29:13.911 [DEBUG] [Thread-136179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:29:13.925 [DEBUG] [Thread-136179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:29:13.926 [INFO] [Thread-136179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:29:13.933 [DEBUG] [Thread-136179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] client lang: <none>
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] server lang: <none>
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] kex follows: False
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] Compression: none
2026-02-11T21:29:13.934 [DEBUG] [Thread-136179] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:29:13.994 [DEBUG] [Thread-136179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:29:13.994 [DEBUG] [Thread-136179] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:29:13.995 [DEBUG] [Thread-136179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:29:13.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:29:13.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:29:14.050 [DEBUG] [Thread-136179] [transport.py] [_log()] userauth is OK
2026-02-11T21:29:14.050 [DEBUG] [Thread-136179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:29:14.050 [DEBUG] [Thread-136179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:29:14.050 [DEBUG] [Thread-136179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:29:14.050 [DEBUG] [Thread-136179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:29:14.069 [INFO] [Thread-136179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:29:14.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:29:14.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:29:14.876 [DEBUG] [Thread-136181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:29:14.887 [DEBUG] [Thread-136179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:29:14.887 [DEBUG] [Thread-136179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:29:14.936 [DEBUG] [Thread-136179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:29:14.936 [DEBUG] [Thread-136179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:29:14.945 [DEBUG] [Thread-136179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:29:14.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:29: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')
2026-02-11T21:29:14.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:29:14.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:29:14.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:29:14.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:29:14.982 [DEBUG] [Thread-136179] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:29:29.845 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:29:29.846 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:29:29.925 [DEBUG] [Thread-136182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:29:42.812 [DEBUG] [Thread-136183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:29:44.961 [DEBUG] [Thread-136184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:29:45.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:29:45.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:29:45.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:29:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 29, 29), 1.29, 92.07, 0.0, 19.22, 16.07, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:29:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:29:29
2026-02-11T21:29:47.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:29:47.499 [DEBUG] [Thread-136185] [transport.py] [_log()] starting thread (client mode): 0xa2d9c340
2026-02-11T21:29:47.499 [DEBUG] [Thread-136185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:29:47.520 [DEBUG] [Thread-136185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:29:47.520 [INFO] [Thread-136185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:29:47.521 [DEBUG] [Thread-136185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:29:47.521 [DEBUG] [Thread-136185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:29:47.522 [DEBUG] [Thread-136185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:29:47.522 [DEBUG] [Thread-136185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:47.522 [DEBUG] [Thread-136185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:47.522 [DEBUG] [Thread-136185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:47.522 [DEBUG] [Thread-136185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:47.522 [DEBUG] [Thread-136185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:29:47.522 [DEBUG] [Thread-136185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:29:47.523 [DEBUG] [Thread-136185] [transport.py] [_log()] client lang: <none>
2026-02-11T21:29:47.523 [DEBUG] [Thread-136185] [transport.py] [_log()] server lang: <none>
2026-02-11T21:29:47.523 [DEBUG] [Thread-136185] [transport.py] [_log()] kex follows: False
2026-02-11T21:29:47.523 [DEBUG] [Thread-136185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:29:47.523 [DEBUG] [Thread-136185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:29:47.524 [DEBUG] [Thread-136185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:29:47.524 [DEBUG] [Thread-136185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:29:47.524 [DEBUG] [Thread-136185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:29:47.524 [DEBUG] [Thread-136185] [transport.py] [_log()] Compression: none
2026-02-11T21:29:47.532 [DEBUG] [Thread-136185] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:29:47.552 [DEBUG] [Thread-136185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:29:47.553 [DEBUG] [Thread-136185] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:29:47.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:29:47.553 [DEBUG] [Thread-136185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:29:47.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:29:47.556 [DEBUG] [Thread-136185] [transport.py] [_log()] userauth is OK
2026-02-11T21:29:47.556 [DEBUG] [Thread-136185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:29:47.556 [DEBUG] [Thread-136185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:29:47.556 [DEBUG] [Thread-136185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:29:47.556 [DEBUG] [Thread-136185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:29:47.580 [INFO] [Thread-136185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:29:47.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:29:48.275 [DEBUG] [Thread-136185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:29:48.275 [DEBUG] [Thread-136185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:29:48.275 [DEBUG] [Thread-136185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:29:48.317 [DEBUG] [Thread-136185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:29:48.317 [DEBUG] [Thread-136185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:29:48.321 [DEBUG] [Thread-136185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:29:48.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:29:48.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:29:48.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:29:48.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:29:48.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:29:48.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:29:48.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:29:48.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:29:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:29:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.812291 -999.00  +16.30  14.04     89  +14.50 1 3 1 3 1     0    0 1.60 -7.14 ----- 12.3 14.0 216.2 25.3 18.2 -3.0 18.1 -3.3 18.0 -3.0 18.3 -3.2
2026-02-11T21:29:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:29:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:29:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.812291
2026-02-11T21:29:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:29:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:29:48.349 [DEBUG] [Thread-136185] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:29:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:29:48.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:29:48.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:29:48.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:29:29', tmtdew=1.29, humidity=92.07, cloud=0.0, wind=19.22, temperature=16.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:29:41.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:29:48.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:29:48.460 [DEBUG] [Thread-136188] [transport.py] [_log()] starting thread (client mode): 0xa2d6bac0
2026-02-11T21:29:48.460 [DEBUG] [Thread-136188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:29:48.474 [DEBUG] [Thread-136188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:29:48.474 [INFO] [Thread-136188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:29:48.482 [DEBUG] [Thread-136188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:29:48.482 [DEBUG] [Thread-136188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] client lang: <none>
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] server lang: <none>
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] kex follows: False
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:29:48.483 [DEBUG] [Thread-136188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:29:48.484 [DEBUG] [Thread-136188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:29:48.484 [DEBUG] [Thread-136188] [transport.py] [_log()] Compression: none
2026-02-11T21:29:48.484 [DEBUG] [Thread-136188] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:29:48.542 [DEBUG] [Thread-136188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:29:48.543 [DEBUG] [Thread-136188] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:29:48.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:29:48.544 [DEBUG] [Thread-136188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:29:48.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:29:48.598 [DEBUG] [Thread-136188] [transport.py] [_log()] userauth is OK
2026-02-11T21:29:48.598 [DEBUG] [Thread-136188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:29:48.599 [DEBUG] [Thread-136188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:29:48.599 [DEBUG] [Thread-136188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:29:48.599 [DEBUG] [Thread-136188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:29:48.617 [INFO] [Thread-136188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:29:48.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:29:48.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:29:49.427 [DEBUG] [Thread-136188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:29:49.427 [DEBUG] [Thread-136188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:29:49.475 [DEBUG] [Thread-136188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:29:49.475 [DEBUG] [Thread-136188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:29:49.484 [DEBUG] [Thread-136188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:29:49.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:29:49.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:29:49.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:29:49.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:29:49.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:29:49.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:29:49.519 [DEBUG] [Thread-136188] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:29:59.998 [DEBUG] [Thread-136190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:30:15.049 [DEBUG] [Thread-136191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:30:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:30:19.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:30:19.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:30:21.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 30, 5), 1.3, 92.01, 0.0, 21.77, 16.05, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:30:21.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:30:05
2026-02-11T21:30:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:30:22.114 [DEBUG] [Thread-136192] [transport.py] [_log()] starting thread (client mode): 0xa2d69db0
2026-02-11T21:30:22.115 [DEBUG] [Thread-136192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:30:22.135 [DEBUG] [Thread-136192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:30:22.135 [INFO] [Thread-136192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] client lang: <none>
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] server lang: <none>
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] kex follows: False
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] Compression: none
2026-02-11T21:30:22.139 [DEBUG] [Thread-136192] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:30:22.156 [DEBUG] [Thread-136192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:30:22.157 [DEBUG] [Thread-136192] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:30:22.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:30:22.159 [DEBUG] [Thread-136192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:30:22.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:30:22.160 [DEBUG] [Thread-136192] [transport.py] [_log()] userauth is OK
2026-02-11T21:30:22.161 [DEBUG] [Thread-136192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:30:22.161 [DEBUG] [Thread-136192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:30:22.161 [DEBUG] [Thread-136192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:30:22.161 [DEBUG] [Thread-136192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:30:22.185 [INFO] [Thread-136192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:30:22.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:30:22.810 [DEBUG] [Thread-136192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:30:22.810 [DEBUG] [Thread-136192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:30:22.810 [DEBUG] [Thread-136192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:30:22.851 [DEBUG] [Thread-136192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:30:22.851 [DEBUG] [Thread-136192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:30:22.853 [DEBUG] [Thread-136192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:30:22.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:30:22.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:30:22.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:30:22.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:30:22.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:30:22.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:30:22.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.812638 -999.00  +16.30  10.95     89  +14.50 1 3 1 3 1     0    0 1.58 -6.80 ----- 12.1 10.9 214.7 19.6 18.2 -3.0 18.1 -2.7 17.9 -2.7 18.3 -2.7
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.812638
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:30:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:30:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:30:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:30:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:30:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:30:05', tmtdew=1.3, humidity=92.01, cloud=0.0, wind=21.77, temperature=16.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:30:11.923', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:30:22.872 [DEBUG] [Thread-136192] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:30:22.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:30:22.960 [DEBUG] [Thread-136195] [transport.py] [_log()] starting thread (client mode): 0xa2d68ee0
2026-02-11T21:30:22.960 [DEBUG] [Thread-136195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:30:22.979 [DEBUG] [Thread-136195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:30:22.979 [INFO] [Thread-136195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:30:22.986 [DEBUG] [Thread-136195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:30:22.986 [DEBUG] [Thread-136195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] client lang: <none>
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] server lang: <none>
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] kex follows: False
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] Compression: none
2026-02-11T21:30:22.987 [DEBUG] [Thread-136195] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:30:23.045 [DEBUG] [Thread-136195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:30:23.045 [DEBUG] [Thread-136195] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:30:23.045 [DEBUG] [Thread-136195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:30:23.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:30:23.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:30:23.107 [DEBUG] [Thread-136195] [transport.py] [_log()] userauth is OK
2026-02-11T21:30:23.108 [DEBUG] [Thread-136195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:30:23.108 [DEBUG] [Thread-136195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:30:23.108 [DEBUG] [Thread-136195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:30:23.108 [DEBUG] [Thread-136195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:30:23.129 [INFO] [Thread-136195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:30:23.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:30:23.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:30:23.979 [DEBUG] [Thread-136195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:30:23.979 [DEBUG] [Thread-136195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:30:24.030 [DEBUG] [Thread-136195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:30:24.030 [DEBUG] [Thread-136195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:30:24.043 [DEBUG] [Thread-136195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:30:24.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:30:24.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:30:24.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:30:24.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:30:24.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:30:24.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:30:24.095 [DEBUG] [Thread-136195] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:30:30.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:30:30.051 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:30:30.086 [DEBUG] [Thread-136197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:30:42.893 [DEBUG] [Thread-136198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:30:45.136 [DEBUG] [Thread-136199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:30:54.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:30:54.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:30:54.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:30:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 30, 41), 1.81, 88.94, 0.0, 26.89, 16.54, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:30:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:30:41
2026-02-11T21:30:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:30:56.437 [DEBUG] [Thread-136200] [transport.py] [_log()] starting thread (client mode): 0xa2d68dc0
2026-02-11T21:30:56.437 [DEBUG] [Thread-136200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:30:56.457 [DEBUG] [Thread-136200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:30:56.458 [INFO] [Thread-136200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:30:56.461 [DEBUG] [Thread-136200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:30:56.461 [DEBUG] [Thread-136200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:30:56.461 [DEBUG] [Thread-136200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:30:56.461 [DEBUG] [Thread-136200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:56.461 [DEBUG] [Thread-136200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:56.461 [DEBUG] [Thread-136200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:56.461 [DEBUG] [Thread-136200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] client lang: <none>
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] server lang: <none>
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] kex follows: False
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] Compression: none
2026-02-11T21:30:56.462 [DEBUG] [Thread-136200] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:30:56.482 [DEBUG] [Thread-136200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:30:56.483 [DEBUG] [Thread-136200] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:30:56.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:30:56.485 [DEBUG] [Thread-136200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:30:56.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:30:56.487 [DEBUG] [Thread-136200] [transport.py] [_log()] userauth is OK
2026-02-11T21:30:56.487 [DEBUG] [Thread-136200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:30:56.488 [DEBUG] [Thread-136200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:30:56.488 [DEBUG] [Thread-136200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:30:56.488 [DEBUG] [Thread-136200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:30:56.523 [INFO] [Thread-136200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:30:56.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:30:57.164 [DEBUG] [Thread-136200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:30:57.165 [DEBUG] [Thread-136200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:30:57.165 [DEBUG] [Thread-136200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:30:57.206 [DEBUG] [Thread-136200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:30:57.206 [DEBUG] [Thread-136200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:30:57.209 [DEBUG] [Thread-136200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:30:57.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:30:57.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:30:57.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:30:57.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:30:57.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:30:57.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:30:57.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:30:57.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:30:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:30:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.812985 -999.00  +16.30  20.23     89  +14.50 1 3 1 3 1     0    0 1.63 -6.35 ----- 16.1 20.2 205.8 24.1 18.2 -3.0 18.1 -3.0 17.9 -2.8 18.3 -3.0
2026-02-11T21:30:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:30:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:30:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.812985
2026-02-11T21:30:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:30:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:30:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:30:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:30:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:30:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:30:41', tmtdew=1.81, humidity=88.94, cloud=0.0, wind=26.89, temperature=16.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:30:41.904', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:30:57.235 [DEBUG] [Thread-136200] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:30:57.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:30:57.335 [DEBUG] [Thread-136203] [transport.py] [_log()] starting thread (client mode): 0xa2d6a530
2026-02-11T21:30:57.335 [DEBUG] [Thread-136203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:30:57.350 [DEBUG] [Thread-136203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:30:57.350 [INFO] [Thread-136203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:30:57.358 [DEBUG] [Thread-136203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:30:57.358 [DEBUG] [Thread-136203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:30:57.358 [DEBUG] [Thread-136203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:30:57.358 [DEBUG] [Thread-136203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:57.358 [DEBUG] [Thread-136203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:30:57.358 [DEBUG] [Thread-136203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] client lang: <none>
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] server lang: <none>
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] kex follows: False
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:30:57.359 [DEBUG] [Thread-136203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:30:57.360 [DEBUG] [Thread-136203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:30:57.360 [DEBUG] [Thread-136203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:30:57.360 [DEBUG] [Thread-136203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:30:57.360 [DEBUG] [Thread-136203] [transport.py] [_log()] Compression: none
2026-02-11T21:30:57.360 [DEBUG] [Thread-136203] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:30:57.416 [DEBUG] [Thread-136203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:30:57.416 [DEBUG] [Thread-136203] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:30:57.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:30:57.417 [DEBUG] [Thread-136203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:30:57.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:30:57.481 [DEBUG] [Thread-136203] [transport.py] [_log()] userauth is OK
2026-02-11T21:30:57.481 [DEBUG] [Thread-136203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:30:57.481 [DEBUG] [Thread-136203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:30:57.481 [DEBUG] [Thread-136203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:30:57.481 [DEBUG] [Thread-136203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:30:57.500 [INFO] [Thread-136203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:30:57.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:30:57.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:30:58.306 [DEBUG] [Thread-136203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:30:58.306 [DEBUG] [Thread-136203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:30:58.354 [DEBUG] [Thread-136203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:30:58.354 [DEBUG] [Thread-136203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:30:58.363 [DEBUG] [Thread-136203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:30:58.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:30:58.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')
2026-02-11T21:30:58.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:30:58.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:30:58.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:30:58.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:30:58.398 [DEBUG] [Thread-136203] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:31:00.173 [DEBUG] [Thread-136205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:31:15.227 [DEBUG] [Thread-136206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:31:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:31:28.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:31:28.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
2026-02-11T21:31:30.260 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:31:30.261 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:31:30.266 [DEBUG] [Thread-136207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:31:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 31, 16), 1.3, 91.99, 0.0, 25.14, 16.05, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:31:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:31:16
2026-02-11T21:31:30.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:31:31.050 [DEBUG] [Thread-136208] [transport.py] [_log()] starting thread (client mode): 0xa2d57be0
2026-02-11T21:31:31.050 [DEBUG] [Thread-136208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:31:31.071 [DEBUG] [Thread-136208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:31:31.071 [INFO] [Thread-136208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] client lang: <none>
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] server lang: <none>
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] kex follows: False
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] Compression: none
2026-02-11T21:31:31.075 [DEBUG] [Thread-136208] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:31:31.094 [DEBUG] [Thread-136208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:31:31.094 [DEBUG] [Thread-136208] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:31:31.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:31:31.095 [DEBUG] [Thread-136208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:31:31.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:31:31.097 [DEBUG] [Thread-136208] [transport.py] [_log()] userauth is OK
2026-02-11T21:31:31.098 [DEBUG] [Thread-136208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:31:31.098 [DEBUG] [Thread-136208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:31:31.098 [DEBUG] [Thread-136208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:31:31.098 [DEBUG] [Thread-136208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:31:31.115 [INFO] [Thread-136208] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:31:31.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:31:31.732 [DEBUG] [Thread-136208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:31:31.732 [DEBUG] [Thread-136208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:31:31.732 [DEBUG] [Thread-136208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:31:31.773 [DEBUG] [Thread-136208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:31:31.774 [DEBUG] [Thread-136208] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:31:31.777 [DEBUG] [Thread-136208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:31:31.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:31:31.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:31:31.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:31:31.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:31:31.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:31:31.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:31:31.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:31:31.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:31:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:31:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.813332 -999.00  +16.20  10.96     89  +14.50 1 3 1 3 1     0    0 1.59 -6.42 ----- 15.4 11.0 195.3 25.3 18.2 -3.3 18.0 -4.1 17.9 -2.9 18.3 -3.4
2026-02-11T21:31:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:31:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:31:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.813332
2026-02-11T21:31:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:31:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:31:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:31:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:31:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:31:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:31:16', tmtdew=1.3, humidity=91.99, cloud=0.0, wind=25.14, temperature=16.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:31:11.885', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:31:31.805 [DEBUG] [Thread-136208] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:31:31.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:31:31.901 [DEBUG] [Thread-136211] [transport.py] [_log()] starting thread (client mode): 0xa5771d80
2026-02-11T21:31:31.902 [DEBUG] [Thread-136211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:31:31.916 [DEBUG] [Thread-136211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:31:31.917 [INFO] [Thread-136211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:31:31.924 [DEBUG] [Thread-136211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:31:31.924 [DEBUG] [Thread-136211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:31:31.924 [DEBUG] [Thread-136211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:31:31.924 [DEBUG] [Thread-136211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:31:31.924 [DEBUG] [Thread-136211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] client lang: <none>
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] server lang: <none>
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] kex follows: False
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] Compression: none
2026-02-11T21:31:31.925 [DEBUG] [Thread-136211] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:31:31.984 [DEBUG] [Thread-136211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:31:31.984 [DEBUG] [Thread-136211] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:31:31.985 [DEBUG] [Thread-136211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:31:31.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:31:31.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:31:32.040 [DEBUG] [Thread-136211] [transport.py] [_log()] userauth is OK
2026-02-11T21:31:32.040 [DEBUG] [Thread-136211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:31:32.040 [DEBUG] [Thread-136211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:31:32.040 [DEBUG] [Thread-136211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:31:32.040 [DEBUG] [Thread-136211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:31:32.059 [INFO] [Thread-136211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:31:32.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:31:32.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:31:32.908 [DEBUG] [Thread-136211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:31:32.909 [DEBUG] [Thread-136211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:31:32.957 [DEBUG] [Thread-136211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:31:32.957 [DEBUG] [Thread-136211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:31:32.966 [DEBUG] [Thread-136211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:31:32.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:31:32.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:31:32.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:31:32.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:31:32.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:31:32.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:31:33.000 [DEBUG] [Thread-136211] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:31:42.978 [DEBUG] [Thread-136213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:31:45.303 [DEBUG] [Thread-136214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:32:00.366 [DEBUG] [Thread-136215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:32:03.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:32:03.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:32:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:32:04.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 31, 51), 1.25, 92.02, 0.0, 24.77, 15.97, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:32:04.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:31:51
2026-02-11T21:32:05.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:32:05.359 [DEBUG] [Thread-136216] [transport.py] [_log()] starting thread (client mode): 0xa2d6be20
2026-02-11T21:32:05.359 [DEBUG] [Thread-136216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:32:05.379 [DEBUG] [Thread-136216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:32:05.379 [INFO] [Thread-136216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:05.382 [DEBUG] [Thread-136216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] client lang: <none>
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] server lang: <none>
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] kex follows: False
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] Compression: none
2026-02-11T21:32:05.383 [DEBUG] [Thread-136216] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:32:05.400 [DEBUG] [Thread-136216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:32:05.400 [DEBUG] [Thread-136216] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:32:05.401 [DEBUG] [Thread-136216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:32:05.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:32:05.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:32:05.445 [DEBUG] [Thread-136216] [transport.py] [_log()] userauth is OK
2026-02-11T21:32:05.445 [DEBUG] [Thread-136216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:32:05.446 [DEBUG] [Thread-136216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:32:05.446 [DEBUG] [Thread-136216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:32:05.446 [DEBUG] [Thread-136216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:32:05.479 [INFO] [Thread-136216] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:32:05.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:32:06.129 [DEBUG] [Thread-136216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:32:06.129 [DEBUG] [Thread-136216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:32:06.129 [DEBUG] [Thread-136216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:32:06.169 [DEBUG] [Thread-136216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:32:06.170 [DEBUG] [Thread-136216] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:32:06.173 [DEBUG] [Thread-136216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:32:06.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:32:06.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:32:06.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:32:06.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:32:06.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:32:06.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:32:06.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:32:06.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:32:06.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:32:06.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.813680 -999.00  +16.20  15.02     89  +14.50 1 3 1 3 1     0    0 1.58 -6.81 ----- 22.2 15.0 208.6 19.0 18.2 -2.9 18.0 -3.2 17.9 -2.8 18.3 -3.0
2026-02-11T21:32:06.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:32:06.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:32:06.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.813680
2026-02-11T21:32:06.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:32:06.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:32:06.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:32:06.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:32:06.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:32:06.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:31:51', tmtdew=1.25, humidity=92.02, cloud=0.0, wind=24.77, temperature=15.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:31:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:32:06.199 [DEBUG] [Thread-136216] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:32:06.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:32:06.295 [DEBUG] [Thread-136219] [transport.py] [_log()] starting thread (client mode): 0xa57b1810
2026-02-11T21:32:06.295 [DEBUG] [Thread-136219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:32:06.310 [DEBUG] [Thread-136219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:32:06.310 [INFO] [Thread-136219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:32:06.317 [DEBUG] [Thread-136219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] client lang: <none>
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] server lang: <none>
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] kex follows: False
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] Compression: none
2026-02-11T21:32:06.318 [DEBUG] [Thread-136219] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:32:06.378 [DEBUG] [Thread-136219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:32:06.378 [DEBUG] [Thread-136219] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:32:06.378 [DEBUG] [Thread-136219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:32:06.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:32:06.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:32:06.435 [DEBUG] [Thread-136219] [transport.py] [_log()] userauth is OK
2026-02-11T21:32:06.435 [DEBUG] [Thread-136219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:32:06.435 [DEBUG] [Thread-136219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:32:06.436 [DEBUG] [Thread-136219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:32:06.436 [DEBUG] [Thread-136219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:32:06.449 [INFO] [Thread-136219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:32:06.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:32:06.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:32:07.269 [DEBUG] [Thread-136219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:32:07.269 [DEBUG] [Thread-136219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:32:07.319 [DEBUG] [Thread-136219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:32:07.319 [DEBUG] [Thread-136219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:32:07.328 [DEBUG] [Thread-136219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:32:07.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:32: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')
2026-02-11T21:32: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') -> 00000000
2026-02-11T21:32:07.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:32:07.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:32:07.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:32:07.370 [DEBUG] [Thread-136219] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:32:15.404 [DEBUG] [Thread-136221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:32:30.462 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:32:30.463 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:32:30.464 [DEBUG] [Thread-136222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:32:37.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:32:37.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:32:37.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:32:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 32, 27), 1.27, 91.92, 0.0, 24.72, 15.95, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:32:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:32:27
2026-02-11T21:32:39.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:32:39.707 [DEBUG] [Thread-136223] [transport.py] [_log()] starting thread (client mode): 0xa57c2bc0
2026-02-11T21:32:39.707 [DEBUG] [Thread-136223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:32:39.726 [DEBUG] [Thread-136223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:32:39.726 [INFO] [Thread-136223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:32:39.729 [DEBUG] [Thread-136223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] client lang: <none>
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] server lang: <none>
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] kex follows: False
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:32:39.730 [DEBUG] [Thread-136223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:32:39.731 [DEBUG] [Thread-136223] [transport.py] [_log()] Compression: none
2026-02-11T21:32:39.731 [DEBUG] [Thread-136223] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:32:39.751 [DEBUG] [Thread-136223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:32:39.751 [DEBUG] [Thread-136223] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:32:39.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:32:39.752 [DEBUG] [Thread-136223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:32:39.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:32:39.754 [DEBUG] [Thread-136223] [transport.py] [_log()] userauth is OK
2026-02-11T21:32:39.755 [DEBUG] [Thread-136223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:32:39.755 [DEBUG] [Thread-136223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:32:39.755 [DEBUG] [Thread-136223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:32:39.755 [DEBUG] [Thread-136223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:32:39.791 [INFO] [Thread-136223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:32:39.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:32:40.409 [DEBUG] [Thread-136223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:32:40.409 [DEBUG] [Thread-136223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:32:40.409 [DEBUG] [Thread-136223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:32:40.450 [DEBUG] [Thread-136223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:32:40.450 [DEBUG] [Thread-136223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:32:40.454 [DEBUG] [Thread-136223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:32:40.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:32:40.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:32:40.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:32:40.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:32:40.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:32:40.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:32:40.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:32:40.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:32:40.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:32:40.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.814027 -999.00  +16.20  16.77     89  +14.40 1 3 1 3 1     0    0 1.56 -6.87 ----- 14.7 16.8 207.8 25.6 18.2 -3.1 18.0 -3.1 17.9 -3.1 18.2 -3.1
2026-02-11T21:32:40.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:32:40.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:32:40.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.814027
2026-02-11T21:32:40.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:32:40.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:32:40.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:32:40.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:32:40.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:32:40.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:32:27', tmtdew=1.27, humidity=91.92, cloud=0.0, wind=24.72, temperature=15.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:32:11.933', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:32:40.482 [DEBUG] [Thread-136223] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:32:40.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:32:40.579 [DEBUG] [Thread-136226] [transport.py] [_log()] starting thread (client mode): 0xa2d683a0
2026-02-11T21:32:40.579 [DEBUG] [Thread-136226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:32:40.594 [DEBUG] [Thread-136226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:32:40.594 [INFO] [Thread-136226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:32:40.602 [DEBUG] [Thread-136226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:32:40.602 [DEBUG] [Thread-136226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:32:40.603 [DEBUG] [Thread-136226] [transport.py] [_log()] client lang: <none>
2026-02-11T21:32:40.604 [DEBUG] [Thread-136226] [transport.py] [_log()] server lang: <none>
2026-02-11T21:32:40.604 [DEBUG] [Thread-136226] [transport.py] [_log()] kex follows: False
2026-02-11T21:32:40.604 [DEBUG] [Thread-136226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:32:40.604 [DEBUG] [Thread-136226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:32:40.604 [DEBUG] [Thread-136226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:32:40.604 [DEBUG] [Thread-136226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:32:40.604 [DEBUG] [Thread-136226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:32:40.605 [DEBUG] [Thread-136226] [transport.py] [_log()] Compression: none
2026-02-11T21:32:40.605 [DEBUG] [Thread-136226] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:32:40.660 [DEBUG] [Thread-136226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:32:40.661 [DEBUG] [Thread-136226] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:32:40.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:32:40.662 [DEBUG] [Thread-136226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:32:40.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:32:40.716 [DEBUG] [Thread-136226] [transport.py] [_log()] userauth is OK
2026-02-11T21:32:40.716 [DEBUG] [Thread-136226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:32:40.717 [DEBUG] [Thread-136226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:32:40.717 [DEBUG] [Thread-136226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:32:40.717 [DEBUG] [Thread-136226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:32:40.735 [INFO] [Thread-136226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:32:40.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:32:40.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:32:41.559 [DEBUG] [Thread-136226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:32:41.559 [DEBUG] [Thread-136226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:32:41.607 [DEBUG] [Thread-136226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:32:41.607 [DEBUG] [Thread-136226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:32:41.617 [DEBUG] [Thread-136226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:32:41.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:32:41.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:32:41.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:32:41.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:32:41.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:32:41.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:32:41.652 [DEBUG] [Thread-136226] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:32:43.061 [DEBUG] [Thread-136228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:32:45.497 [DEBUG] [Thread-136229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:00.549 [DEBUG] [Thread-136230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:11.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:33:11.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:33:11.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:33:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 33, 2), 1.26, 91.94, 0.0, 22.99, 15.94, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:33:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:33:02
2026-02-11T21:33:13.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:33:14.034 [DEBUG] [Thread-136231] [transport.py] [_log()] starting thread (client mode): 0xa2d9eec0
2026-02-11T21:33:14.034 [DEBUG] [Thread-136231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:33:14.056 [DEBUG] [Thread-136231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:33:14.056 [INFO] [Thread-136231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:33:14.059 [DEBUG] [Thread-136231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:33:14.059 [DEBUG] [Thread-136231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:33:14.059 [DEBUG] [Thread-136231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:33:14.059 [DEBUG] [Thread-136231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:14.059 [DEBUG] [Thread-136231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:14.059 [DEBUG] [Thread-136231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:14.059 [DEBUG] [Thread-136231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] client lang: <none>
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] server lang: <none>
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] kex follows: False
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] Compression: none
2026-02-11T21:33:14.060 [DEBUG] [Thread-136231] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:33:14.076 [DEBUG] [Thread-136231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:33:14.077 [DEBUG] [Thread-136231] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:33:14.077 [DEBUG] [Thread-136231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:33:14.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:33:14.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:33:14.079 [DEBUG] [Thread-136231] [transport.py] [_log()] userauth is OK
2026-02-11T21:33:14.079 [DEBUG] [Thread-136231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:33:14.079 [DEBUG] [Thread-136231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:33:14.080 [DEBUG] [Thread-136231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:33:14.080 [DEBUG] [Thread-136231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:33:14.098 [INFO] [Thread-136231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:33:14.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:33:14.735 [DEBUG] [Thread-136231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:33:14.736 [DEBUG] [Thread-136231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:33:14.736 [DEBUG] [Thread-136231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:33:14.777 [DEBUG] [Thread-136231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:33:14.777 [DEBUG] [Thread-136231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:33:14.780 [DEBUG] [Thread-136231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:33:14.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:33:14.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:33:14.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:33:14.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:33:14.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:33:14.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:33:14.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:33:14.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.814374 -999.00  +16.20  14.61     89  +14.40 1 3 1 3 1     0    0 1.59 -6.46 ----- 16.4 14.6 205.5 29.4 18.2 -3.6 18.0 -3.6 17.9 -3.5 18.2 -3.4
2026-02-11T21:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.814374
2026-02-11T21:33:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:33:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:33:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:33:14.807 [DEBUG] [Thread-136231] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:33:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:33:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:33:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:33:02', tmtdew=1.26, humidity=91.94, cloud=0.0, wind=22.99, temperature=15.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:32:41.914', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:33:14.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:33:14.903 [DEBUG] [Thread-136234] [transport.py] [_log()] starting thread (client mode): 0x9eb05a80
2026-02-11T21:33:14.903 [DEBUG] [Thread-136234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:33:14.918 [DEBUG] [Thread-136234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:33:14.919 [INFO] [Thread-136234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:33:14.926 [DEBUG] [Thread-136234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:33:14.926 [DEBUG] [Thread-136234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] client lang: <none>
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] server lang: <none>
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] kex follows: False
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] Compression: none
2026-02-11T21:33:14.927 [DEBUG] [Thread-136234] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:33:14.984 [DEBUG] [Thread-136234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:33:14.985 [DEBUG] [Thread-136234] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:33:14.985 [DEBUG] [Thread-136234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:33:14.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:33:14.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:33:15.040 [DEBUG] [Thread-136234] [transport.py] [_log()] userauth is OK
2026-02-11T21:33:15.041 [DEBUG] [Thread-136234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:33:15.041 [DEBUG] [Thread-136234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:33:15.041 [DEBUG] [Thread-136234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:33:15.041 [DEBUG] [Thread-136234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:33:15.065 [INFO] [Thread-136234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:33:15.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:33:15.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:33:15.588 [DEBUG] [Thread-136236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:15.902 [DEBUG] [Thread-136234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:33:15.902 [DEBUG] [Thread-136234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:33:15.949 [DEBUG] [Thread-136234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:33:15.949 [DEBUG] [Thread-136234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:33:15.959 [DEBUG] [Thread-136234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:33:15.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:33:15.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:33:15.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:33:15.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:33:15.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:33:15.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:33:15.996 [DEBUG] [Thread-136234] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:33:30.649 [DEBUG] [Thread-136237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:30.664 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:30.665 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:43.139 [DEBUG] [Thread-136238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:45.688 [DEBUG] [Thread-136239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:33:46.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:33:46.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:33:46.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:33:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 33, 37), 1.81, 88.94, 0.0, 19.3, 16.54, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:33:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:33:37
2026-02-11T21:33:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:33:48.390 [DEBUG] [Thread-136240] [transport.py] [_log()] starting thread (client mode): 0xa2d6a050
2026-02-11T21:33:48.390 [DEBUG] [Thread-136240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:33:48.410 [DEBUG] [Thread-136240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:33:48.411 [INFO] [Thread-136240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:33:48.412 [DEBUG] [Thread-136240] [transport.py] [_log()] client lang: <none>
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] server lang: <none>
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] kex follows: False
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] Compression: none
2026-02-11T21:33:48.413 [DEBUG] [Thread-136240] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:33:48.433 [DEBUG] [Thread-136240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:33:48.434 [DEBUG] [Thread-136240] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:33:48.435 [DEBUG] [Thread-136240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:33:48.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:33:48.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:33:48.437 [DEBUG] [Thread-136240] [transport.py] [_log()] userauth is OK
2026-02-11T21:33:48.438 [DEBUG] [Thread-136240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:33:48.438 [DEBUG] [Thread-136240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:33:48.438 [DEBUG] [Thread-136240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:33:48.438 [DEBUG] [Thread-136240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:33:48.464 [INFO] [Thread-136240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:33:48.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:33:49.077 [DEBUG] [Thread-136240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:33:49.078 [DEBUG] [Thread-136240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:33:49.078 [DEBUG] [Thread-136240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:33:49.118 [DEBUG] [Thread-136240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:33:49.119 [DEBUG] [Thread-136240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:33:49.122 [DEBUG] [Thread-136240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:33:49.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:33:49.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:33:49.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:33:49.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:33:49.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:33:49.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:33:49.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:33:49.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:33:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:33:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.814721 -999.00  +16.10  20.41     89  +14.30 1 3 1 3 1     0    0 1.58 -6.74 ----- 14.7 20.4 198.6 28.3 18.1 -4.1 17.9 -3.7 17.9 -3.6 18.2 -3.7
2026-02-11T21:33:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:33:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:33:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.814721
2026-02-11T21:33:49.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:33:49.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:33:49.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:33:49.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:33:49.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:33:49.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:33:37', tmtdew=1.81, humidity=88.94, cloud=0.0, wind=19.3, temperature=16.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:33:11.894', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:33:49.150 [DEBUG] [Thread-136240] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:33:49.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:33:49.243 [DEBUG] [Thread-136243] [transport.py] [_log()] starting thread (client mode): 0xa2d6abc0
2026-02-11T21:33:49.243 [DEBUG] [Thread-136243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:33:49.257 [DEBUG] [Thread-136243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:33:49.257 [INFO] [Thread-136243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:33:49.264 [DEBUG] [Thread-136243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] client lang: <none>
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] server lang: <none>
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] kex follows: False
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] Compression: none
2026-02-11T21:33:49.265 [DEBUG] [Thread-136243] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:33:49.325 [DEBUG] [Thread-136243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:33:49.325 [DEBUG] [Thread-136243] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:33:49.326 [DEBUG] [Thread-136243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:33:49.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:33:49.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:33:49.381 [DEBUG] [Thread-136243] [transport.py] [_log()] userauth is OK
2026-02-11T21:33:49.381 [DEBUG] [Thread-136243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:33:49.381 [DEBUG] [Thread-136243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:33:49.381 [DEBUG] [Thread-136243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:33:49.381 [DEBUG] [Thread-136243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:33:49.403 [INFO] [Thread-136243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:33:49.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:33:49.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:33:50.216 [DEBUG] [Thread-136243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:33:50.216 [DEBUG] [Thread-136243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:33:50.263 [DEBUG] [Thread-136243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:33:50.263 [DEBUG] [Thread-136243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:33:50.272 [DEBUG] [Thread-136243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:33:50.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:33:50.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:33:50.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:33:50.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:33:50.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:33:50.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:33:50.306 [DEBUG] [Thread-136243] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:34:00.725 [DEBUG] [Thread-136245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:34:15.778 [DEBUG] [Thread-136246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:34:20.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:34:20.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:34:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:34:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 34, 12), 1.31, 91.97, 0.0, 22.46, 15.99, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:34:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:34:12
2026-02-11T21:34:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:34:22.877 [DEBUG] [Thread-136247] [transport.py] [_log()] starting thread (client mode): 0xa5772080
2026-02-11T21:34:22.878 [DEBUG] [Thread-136247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:34:22.898 [DEBUG] [Thread-136247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:34:22.898 [INFO] [Thread-136247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] client lang: <none>
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] server lang: <none>
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] kex follows: False
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] Compression: none
2026-02-11T21:34:22.901 [DEBUG] [Thread-136247] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:34:22.918 [DEBUG] [Thread-136247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:34:22.919 [DEBUG] [Thread-136247] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:34:22.919 [DEBUG] [Thread-136247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:34:22.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:34:22.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:34:22.921 [DEBUG] [Thread-136247] [transport.py] [_log()] userauth is OK
2026-02-11T21:34:22.921 [DEBUG] [Thread-136247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:34:22.921 [DEBUG] [Thread-136247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:34:22.921 [DEBUG] [Thread-136247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:34:22.921 [DEBUG] [Thread-136247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:34:22.956 [INFO] [Thread-136247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:34:22.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:34:23.586 [DEBUG] [Thread-136247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:34:23.586 [DEBUG] [Thread-136247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:34:23.586 [DEBUG] [Thread-136247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:34:23.626 [DEBUG] [Thread-136247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:34:23.626 [DEBUG] [Thread-136247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:34:23.630 [DEBUG] [Thread-136247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:34:23.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:34:23.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:34:23.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:34:23.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:34:23.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:34:23.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:34:23.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:34:23.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:34:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:34:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.815416 -999.00  +16.20  19.79     89  +14.40 1 3 1 3 1     0    0 1.61 -6.91 ----- 13.4 19.8 209.0 26.4 18.1 -6.8 17.9 -6.5 17.9 -6.8 18.2 -6.4
2026-02-11T21:34:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:34:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:34:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.815416
2026-02-11T21:34:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:34:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:34:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:34:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:34:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:34:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:34:12', tmtdew=1.31, humidity=91.97, cloud=0.0, wind=22.46, temperature=15.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:34:11.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:34:23.656 [DEBUG] [Thread-136247] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:34:23.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:34:23.753 [DEBUG] [Thread-136250] [transport.py] [_log()] starting thread (client mode): 0xa57b3c70
2026-02-11T21:34:23.753 [DEBUG] [Thread-136250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:34:23.772 [DEBUG] [Thread-136250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:34:23.772 [INFO] [Thread-136250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:34:23.780 [DEBUG] [Thread-136250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:34:23.780 [DEBUG] [Thread-136250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:34:23.780 [DEBUG] [Thread-136250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:34:23.780 [DEBUG] [Thread-136250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:23.780 [DEBUG] [Thread-136250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:23.780 [DEBUG] [Thread-136250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:23.780 [DEBUG] [Thread-136250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] client lang: <none>
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] server lang: <none>
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] kex follows: False
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] Compression: none
2026-02-11T21:34:23.781 [DEBUG] [Thread-136250] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:34:23.838 [DEBUG] [Thread-136250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:34:23.838 [DEBUG] [Thread-136250] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:34:23.839 [DEBUG] [Thread-136250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:34:23.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:34:23.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:34:23.893 [DEBUG] [Thread-136250] [transport.py] [_log()] userauth is OK
2026-02-11T21:34:23.893 [DEBUG] [Thread-136250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:34:23.893 [DEBUG] [Thread-136250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:34:23.893 [DEBUG] [Thread-136250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:34:23.893 [DEBUG] [Thread-136250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:34:23.912 [INFO] [Thread-136250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:34:23.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:34:23.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:34:24.761 [DEBUG] [Thread-136250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:34:24.761 [DEBUG] [Thread-136250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:34:24.810 [DEBUG] [Thread-136250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:34:24.810 [DEBUG] [Thread-136250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:34:24.818 [DEBUG] [Thread-136250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:34:24.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:34:24.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:34:24.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:34:24.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:34:24.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:34:24.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:34:24.855 [DEBUG] [Thread-136250] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:34:30.814 [DEBUG] [Thread-136252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:34:30.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:34:30.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:34:43.204 [DEBUG] [Thread-136253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:34:45.876 [DEBUG] [Thread-136254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:34:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:34:54.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:34:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:34:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 34, 48), 1.25, 91.99, 0.0, 20.47, 15.91, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:34:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:34:48
2026-02-11T21:34:57.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:34:57.233 [DEBUG] [Thread-136255] [transport.py] [_log()] starting thread (client mode): 0xa57731c0
2026-02-11T21:34:57.233 [DEBUG] [Thread-136255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:34:57.254 [DEBUG] [Thread-136255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:34:57.254 [INFO] [Thread-136255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] client lang: <none>
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] server lang: <none>
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] kex follows: False
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] Compression: none
2026-02-11T21:34:57.257 [DEBUG] [Thread-136255] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:34:57.271 [DEBUG] [Thread-136255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:34:57.272 [DEBUG] [Thread-136255] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:34:57.272 [DEBUG] [Thread-136255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:34:57.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:34:57.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:34:57.274 [DEBUG] [Thread-136255] [transport.py] [_log()] userauth is OK
2026-02-11T21:34:57.274 [DEBUG] [Thread-136255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:34:57.274 [DEBUG] [Thread-136255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:34:57.274 [DEBUG] [Thread-136255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:34:57.274 [DEBUG] [Thread-136255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:34:57.294 [INFO] [Thread-136255] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:34:57.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:34:57.943 [DEBUG] [Thread-136255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:34:57.943 [DEBUG] [Thread-136255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:34:57.943 [DEBUG] [Thread-136255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:34:57.984 [DEBUG] [Thread-136255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:34:57.984 [DEBUG] [Thread-136255] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:34:57.987 [DEBUG] [Thread-136255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:34:57.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:34:57.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:34:58.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:34:58.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:34:58.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:34:58.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:34:58.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:34:58.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:34:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:34:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.815763 -999.00  +16.20  16.44     89  +14.40 1 3 1 3 1     0    0 1.62 -5.85 ----- 17.3 16.4 197.4 22.1 18.1 -8.4 17.9 -7.7 17.8 -7.8 18.1 -8.6
2026-02-11T21:34:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:34:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:34:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.815763
2026-02-11T21:34:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:34:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:34:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:34:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:34:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:34:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:34:48', tmtdew=1.25, humidity=91.99, cloud=0.0, wind=20.47, temperature=15.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:34:41.923', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:34:58.007 [DEBUG] [Thread-136255] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:34:58.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:34:58.094 [DEBUG] [Thread-136258] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-11T21:34:58.094 [DEBUG] [Thread-136258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:34:58.108 [DEBUG] [Thread-136258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:34:58.108 [INFO] [Thread-136258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:34:58.116 [DEBUG] [Thread-136258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:34:58.116 [DEBUG] [Thread-136258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:34:58.116 [DEBUG] [Thread-136258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:34:58.116 [DEBUG] [Thread-136258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:58.116 [DEBUG] [Thread-136258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:34:58.116 [DEBUG] [Thread-136258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:58.116 [DEBUG] [Thread-136258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] client lang: <none>
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] server lang: <none>
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] kex follows: False
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:34:58.117 [DEBUG] [Thread-136258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:34:58.118 [DEBUG] [Thread-136258] [transport.py] [_log()] Compression: none
2026-02-11T21:34:58.118 [DEBUG] [Thread-136258] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:34:58.173 [DEBUG] [Thread-136258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:34:58.173 [DEBUG] [Thread-136258] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:34:58.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:34:58.183 [DEBUG] [Thread-136258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:34:58.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:34:58.229 [DEBUG] [Thread-136258] [transport.py] [_log()] userauth is OK
2026-02-11T21:34:58.230 [DEBUG] [Thread-136258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:34:58.230 [DEBUG] [Thread-136258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:34:58.230 [DEBUG] [Thread-136258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:34:58.230 [DEBUG] [Thread-136258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:34:58.253 [INFO] [Thread-136258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:34:58.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:34:58.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:34:59.072 [DEBUG] [Thread-136258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:34:59.073 [DEBUG] [Thread-136258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:34:59.120 [DEBUG] [Thread-136258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:34:59.121 [DEBUG] [Thread-136258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:34:59.130 [DEBUG] [Thread-136258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:34:59.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:34:59.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:34:59.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:34:59.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:34:59.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:34:59.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:34:59.166 [DEBUG] [Thread-136258] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:35:00.911 [DEBUG] [Thread-136260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:35:15.963 [DEBUG] [Thread-136261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:35:29.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:35:29.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:35:29.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:35:31.001 [DEBUG] [Thread-136262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:35:31.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:35:31.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:35:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 34, 48), 1.25, 91.99, 0.0, 20.47, 15.91, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:35:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:34:48
2026-02-11T21:35:31.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:35:32.124 [DEBUG] [Thread-136263] [transport.py] [_log()] starting thread (client mode): 0xa57e3e20
2026-02-11T21:35:32.124 [DEBUG] [Thread-136263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:35:32.145 [DEBUG] [Thread-136263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:35:32.145 [INFO] [Thread-136263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] client lang: <none>
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] server lang: <none>
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] kex follows: False
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:35:32.148 [DEBUG] [Thread-136263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:35:32.149 [DEBUG] [Thread-136263] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:35:32.149 [DEBUG] [Thread-136263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:35:32.149 [DEBUG] [Thread-136263] [transport.py] [_log()] Compression: none
2026-02-11T21:35:32.149 [DEBUG] [Thread-136263] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:35:32.166 [DEBUG] [Thread-136263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:35:32.167 [DEBUG] [Thread-136263] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:35:32.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:35:32.168 [DEBUG] [Thread-136263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:35:32.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:35:32.169 [DEBUG] [Thread-136263] [transport.py] [_log()] userauth is OK
2026-02-11T21:35:32.170 [DEBUG] [Thread-136263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:35:32.170 [DEBUG] [Thread-136263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:35:32.170 [DEBUG] [Thread-136263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:35:32.170 [DEBUG] [Thread-136263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:35:32.184 [INFO] [Thread-136263] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:35:32.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:35:32.782 [DEBUG] [Thread-136263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:35:32.782 [DEBUG] [Thread-136263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:35:32.783 [DEBUG] [Thread-136263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:35:32.823 [DEBUG] [Thread-136263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:35:32.823 [DEBUG] [Thread-136263] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:35:32.827 [DEBUG] [Thread-136263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:35:32.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:35:32.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:35:32.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:35:32.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:35:32.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:35:32.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:35:32.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:35:32.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:35:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:35:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.816110 -999.00  +16.10  14.55     89  +14.40 1 3 1 3 1     0    0 1.62 -5.51 Z.... 18.8 14.6 201.6 24.8 18.0 -7.4 17.9 -8.0 17.8 -8.4 18.1 -8.0
2026-02-11T21:35:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:35:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:35:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.816110
2026-02-11T21:35:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:35:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:35:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:35:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:35:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:35:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:34:48', tmtdew=1.25, humidity=91.99, cloud=0.0, wind=20.47, temperature=15.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:35:11.904', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:35:32.855 [DEBUG] [Thread-136263] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:35:32.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:35:32.958 [DEBUG] [Thread-136266] [transport.py] [_log()] starting thread (client mode): 0xa57b1fc0
2026-02-11T21:35:32.958 [DEBUG] [Thread-136266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:35:32.973 [DEBUG] [Thread-136266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:35:32.973 [INFO] [Thread-136266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:35:32.983 [DEBUG] [Thread-136266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:35:32.984 [DEBUG] [Thread-136266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:35:32.984 [DEBUG] [Thread-136266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:35:32.984 [DEBUG] [Thread-136266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:35:32.984 [DEBUG] [Thread-136266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:35:32.984 [DEBUG] [Thread-136266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:35:32.984 [DEBUG] [Thread-136266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:35:32.984 [DEBUG] [Thread-136266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] client lang: <none>
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] server lang: <none>
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] kex follows: False
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:35:32.985 [DEBUG] [Thread-136266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:35:32.986 [DEBUG] [Thread-136266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:35:32.986 [DEBUG] [Thread-136266] [transport.py] [_log()] Compression: none
2026-02-11T21:35:32.986 [DEBUG] [Thread-136266] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:35:33.047 [DEBUG] [Thread-136266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:35:33.048 [DEBUG] [Thread-136266] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:35:33.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:35:33.050 [DEBUG] [Thread-136266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:35:33.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:35:33.110 [DEBUG] [Thread-136266] [transport.py] [_log()] userauth is OK
2026-02-11T21:35:33.111 [DEBUG] [Thread-136266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:35:33.111 [DEBUG] [Thread-136266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:35:33.111 [DEBUG] [Thread-136266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:35:33.111 [DEBUG] [Thread-136266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:35:33.130 [INFO] [Thread-136266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:35:33.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:35:33.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:35:33.952 [DEBUG] [Thread-136266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:35:33.953 [DEBUG] [Thread-136266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:35:34.000 [DEBUG] [Thread-136266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:35:34.001 [DEBUG] [Thread-136266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:35:34.010 [DEBUG] [Thread-136266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:35:34.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:35:34.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:35:34.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:35:34.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:35:34.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:35:34.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:35:34.049 [DEBUG] [Thread-136266] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:35:43.291 [DEBUG] [Thread-136268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:35:46.036 [DEBUG] [Thread-136269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:36:01.089 [DEBUG] [Thread-136270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:36:04.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:36:04.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:36:04.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:36:06.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 35, 23), 1.26, 91.97, 0.0, 20.19, 15.82, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:36:06.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:35:23
2026-02-11T21:36:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:36:06.674 [DEBUG] [Thread-136271] [transport.py] [_log()] starting thread (client mode): 0xa57b3c70
2026-02-11T21:36:06.675 [DEBUG] [Thread-136271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:36:06.695 [DEBUG] [Thread-136271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:36:06.695 [INFO] [Thread-136271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] client lang: <none>
2026-02-11T21:36:06.699 [DEBUG] [Thread-136271] [transport.py] [_log()] server lang: <none>
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] kex follows: False
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] Compression: none
2026-02-11T21:36:06.700 [DEBUG] [Thread-136271] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:36:06.719 [DEBUG] [Thread-136271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:36:06.719 [DEBUG] [Thread-136271] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:36:06.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:36:06.720 [DEBUG] [Thread-136271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:36:06.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:36:06.722 [DEBUG] [Thread-136271] [transport.py] [_log()] userauth is OK
2026-02-11T21:36:06.723 [DEBUG] [Thread-136271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:36:06.723 [DEBUG] [Thread-136271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:36:06.723 [DEBUG] [Thread-136271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:36:06.723 [DEBUG] [Thread-136271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:36:06.741 [INFO] [Thread-136271] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:36:06.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:36:07.350 [DEBUG] [Thread-136271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:36:07.351 [DEBUG] [Thread-136271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:36:07.351 [DEBUG] [Thread-136271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:36:07.391 [DEBUG] [Thread-136271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:36:07.392 [DEBUG] [Thread-136271] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:36:07.395 [DEBUG] [Thread-136271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:36:07.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:36:07.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:36:07.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:36:07.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:36:07.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:36:07.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:36:07.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:36:07.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:36:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:36:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.816457 -999.00  +16.10  12.59     89  +14.40 1 3 1 3 1     0    0 1.57 -5.98 Z.... 15.7 12.6 207.4 21.6 18.1 -8.9 17.9 -8.7 17.8 -9.3 18.1 -9.5
2026-02-11T21:36:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:36:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:36:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.816457
2026-02-11T21:36:07.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:36:07.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:36:07.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:36:07.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:36:07.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:36:07.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:35:23', tmtdew=1.26, humidity=91.97, cloud=0.0, wind=20.19, temperature=15.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:35:41.885', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:36:07.420 [DEBUG] [Thread-136271] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:36:07.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:36:07.515 [DEBUG] [Thread-136274] [transport.py] [_log()] starting thread (client mode): 0xa57b1150
2026-02-11T21:36:07.515 [DEBUG] [Thread-136274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:36:07.530 [DEBUG] [Thread-136274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:36:07.530 [INFO] [Thread-136274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:36:07.538 [DEBUG] [Thread-136274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:36:07.538 [DEBUG] [Thread-136274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:36:07.538 [DEBUG] [Thread-136274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:36:07.538 [DEBUG] [Thread-136274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:07.538 [DEBUG] [Thread-136274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:07.539 [DEBUG] [Thread-136274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:07.539 [DEBUG] [Thread-136274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:07.539 [DEBUG] [Thread-136274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:36:07.539 [DEBUG] [Thread-136274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:36:07.539 [DEBUG] [Thread-136274] [transport.py] [_log()] client lang: <none>
2026-02-11T21:36:07.539 [DEBUG] [Thread-136274] [transport.py] [_log()] server lang: <none>
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] kex follows: False
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] Compression: none
2026-02-11T21:36:07.540 [DEBUG] [Thread-136274] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:36:07.598 [DEBUG] [Thread-136274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:36:07.599 [DEBUG] [Thread-136274] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:36:07.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:36:07.600 [DEBUG] [Thread-136274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:36:07.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:36:07.656 [DEBUG] [Thread-136274] [transport.py] [_log()] userauth is OK
2026-02-11T21:36:07.657 [DEBUG] [Thread-136274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:36:07.657 [DEBUG] [Thread-136274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:36:07.657 [DEBUG] [Thread-136274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:36:07.657 [DEBUG] [Thread-136274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:36:07.676 [INFO] [Thread-136274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:36:07.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:36:07.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:36:08.497 [DEBUG] [Thread-136274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:36:08.498 [DEBUG] [Thread-136274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:36:08.545 [DEBUG] [Thread-136274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:36:08.545 [DEBUG] [Thread-136274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:36:08.555 [DEBUG] [Thread-136274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:36:08.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:36:08.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:36:08.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:36:08.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:36:08.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:36:08.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:36:08.597 [DEBUG] [Thread-136274] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:36:16.129 [DEBUG] [Thread-136276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:36:31.191 [DEBUG] [Thread-136277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:36:31.274 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:36:31.275 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:36:38.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:36:38.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:36:38.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:36:40.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 35, 59), 1.24, 92.06, 0.0, 19.39, 15.89, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:36:40.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:35:59
2026-02-11T21:36:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:36:41.317 [DEBUG] [Thread-136278] [transport.py] [_log()] starting thread (client mode): 0xa2d6b2b0
2026-02-11T21:36:41.317 [DEBUG] [Thread-136278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:36:41.339 [DEBUG] [Thread-136278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:36:41.339 [INFO] [Thread-136278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:36:41.342 [DEBUG] [Thread-136278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:36:41.342 [DEBUG] [Thread-136278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] client lang: <none>
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] server lang: <none>
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] kex follows: False
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] Compression: none
2026-02-11T21:36:41.343 [DEBUG] [Thread-136278] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:36:41.360 [DEBUG] [Thread-136278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:36:41.361 [DEBUG] [Thread-136278] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:36:41.361 [DEBUG] [Thread-136278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:36:41.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:36:41.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:36:41.364 [DEBUG] [Thread-136278] [transport.py] [_log()] userauth is OK
2026-02-11T21:36:41.364 [DEBUG] [Thread-136278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:36:41.364 [DEBUG] [Thread-136278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:36:41.364 [DEBUG] [Thread-136278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:36:41.364 [DEBUG] [Thread-136278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:36:41.382 [INFO] [Thread-136278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:36:41.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:36:42.027 [DEBUG] [Thread-136278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:36:42.036 [DEBUG] [Thread-136278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:36:42.037 [DEBUG] [Thread-136278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:36:42.068 [DEBUG] [Thread-136278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:36:42.069 [DEBUG] [Thread-136278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:36:42.072 [DEBUG] [Thread-136278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:36:42.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:36:42.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:36:42.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:36:42.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:36:42.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:36:42.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:36:42.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:36:42.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:36:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:36:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.816805 -999.00  +16.10  18.22     89  +14.40 1 3 1 3 1     0    0 1.63 -4.84 z...W 21.3 18.2 193.8 20.6 18.1 -8.9 17.9 -9.2 17.8 -9.7 18.1 -9.6
2026-02-11T21:36:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:36:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:36:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.816805
2026-02-11T21:36:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:36:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:36:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:36:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:36:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:36:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:35:59', tmtdew=1.24, humidity=92.06, cloud=0.0, wind=19.39, temperature=15.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:36:11.952', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:36:42.099 [DEBUG] [Thread-136278] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:36:42.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:36:42.195 [DEBUG] [Thread-136281] [transport.py] [_log()] starting thread (client mode): 0xa2d69c00
2026-02-11T21:36:42.195 [DEBUG] [Thread-136281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:36:42.210 [DEBUG] [Thread-136281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:36:42.210 [INFO] [Thread-136281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] client lang: <none>
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] server lang: <none>
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] kex follows: False
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:36:42.218 [DEBUG] [Thread-136281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:36:42.219 [DEBUG] [Thread-136281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:36:42.219 [DEBUG] [Thread-136281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:36:42.219 [DEBUG] [Thread-136281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:36:42.219 [DEBUG] [Thread-136281] [transport.py] [_log()] Compression: none
2026-02-11T21:36:42.219 [DEBUG] [Thread-136281] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:36:42.274 [DEBUG] [Thread-136281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:36:42.275 [DEBUG] [Thread-136281] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:36:42.275 [DEBUG] [Thread-136281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:36:42.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:36:42.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:36:42.331 [DEBUG] [Thread-136281] [transport.py] [_log()] userauth is OK
2026-02-11T21:36:42.331 [DEBUG] [Thread-136281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:36:42.331 [DEBUG] [Thread-136281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:36:42.331 [DEBUG] [Thread-136281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:36:42.331 [DEBUG] [Thread-136281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:36:42.349 [INFO] [Thread-136281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:36:42.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:36:42.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:36:43.184 [DEBUG] [Thread-136281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:36:43.184 [DEBUG] [Thread-136281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:36:43.235 [DEBUG] [Thread-136281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:36:43.235 [DEBUG] [Thread-136281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:36:43.247 [DEBUG] [Thread-136281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:36:43.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21: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')
2026-02-11T21:36:43.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:36:43.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:36:43.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:36:43.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:36:43.282 [DEBUG] [Thread-136281] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:36:43.362 [DEBUG] [Thread-136283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:36:46.226 [DEBUG] [Thread-136284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:01.278 [DEBUG] [Thread-136285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:13.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:37:13.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:37:13.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:37:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 36, 34), 1.78, 89.11, 0.0, 27.13, 16.38, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:37:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:36:34
2026-02-11T21:37:15.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:37:16.062 [DEBUG] [Thread-136286] [transport.py] [_log()] starting thread (client mode): 0xa2d9c5b0
2026-02-11T21:37:16.062 [DEBUG] [Thread-136286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:37:16.083 [DEBUG] [Thread-136286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:37:16.083 [INFO] [Thread-136286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] client lang: <none>
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] server lang: <none>
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] kex follows: False
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:37:16.087 [DEBUG] [Thread-136286] [transport.py] [_log()] Compression: none
2026-02-11T21:37:16.088 [DEBUG] [Thread-136286] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:37:16.104 [DEBUG] [Thread-136286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:37:16.105 [DEBUG] [Thread-136286] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:37:16.105 [DEBUG] [Thread-136286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:37:16.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:37:16.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:37:16.107 [DEBUG] [Thread-136286] [transport.py] [_log()] userauth is OK
2026-02-11T21:37:16.107 [DEBUG] [Thread-136286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:37:16.107 [DEBUG] [Thread-136286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:37:16.107 [DEBUG] [Thread-136286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:37:16.107 [DEBUG] [Thread-136286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:37:16.128 [INFO] [Thread-136286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:37:16.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:37:16.310 [DEBUG] [Thread-136288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:16.734 [DEBUG] [Thread-136286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:37:16.735 [DEBUG] [Thread-136286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:37:16.735 [DEBUG] [Thread-136286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:37:16.775 [DEBUG] [Thread-136286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:37:16.775 [DEBUG] [Thread-136286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:37:16.778 [DEBUG] [Thread-136286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:37:16.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:37:16.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:37:16.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:37:16.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:37:16.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:37:16.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:37:16.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:37:16.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:37:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:37:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.817151 -999.00  +16.00  16.52     89  +14.30 1 2 1 3 1     0    0 1.60 -4.34 Zn.SW 12.1 16.5 199.0 22.3 18.0 -8.8 17.8 -9.4 17.7 -10.9 18.1 -9.9
2026-02-11T21:37:16.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:37:16.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:37:16.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.817151
2026-02-11T21:37:16.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:37:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:37:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:37:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:37:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T21:37:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:36:34', tmtdew=1.78, humidity=89.11, cloud=0.0, wind=27.13, temperature=16.38, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:36:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:37:16.806 [DEBUG] [Thread-136286] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:37:16.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:37:16.901 [DEBUG] [Thread-136290] [transport.py] [_log()] starting thread (client mode): 0xa2d9d5d0
2026-02-11T21:37:16.902 [DEBUG] [Thread-136290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:37:16.916 [DEBUG] [Thread-136290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:37:16.916 [INFO] [Thread-136290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:37:16.923 [DEBUG] [Thread-136290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:37:16.924 [DEBUG] [Thread-136290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:37:16.924 [DEBUG] [Thread-136290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:37:16.924 [DEBUG] [Thread-136290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:16.924 [DEBUG] [Thread-136290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:16.924 [DEBUG] [Thread-136290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:16.924 [DEBUG] [Thread-136290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:16.924 [DEBUG] [Thread-136290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] client lang: <none>
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] server lang: <none>
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] kex follows: False
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:37:16.925 [DEBUG] [Thread-136290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:37:16.926 [DEBUG] [Thread-136290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:37:16.926 [DEBUG] [Thread-136290] [transport.py] [_log()] Compression: none
2026-02-11T21:37:16.926 [DEBUG] [Thread-136290] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:37:16.983 [DEBUG] [Thread-136290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:37:16.984 [DEBUG] [Thread-136290] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:37:16.985 [DEBUG] [Thread-136290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:37:16.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:37:16.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:37:17.039 [DEBUG] [Thread-136290] [transport.py] [_log()] userauth is OK
2026-02-11T21:37:17.040 [DEBUG] [Thread-136290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:37:17.040 [DEBUG] [Thread-136290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:37:17.040 [DEBUG] [Thread-136290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:37:17.040 [DEBUG] [Thread-136290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:37:17.059 [INFO] [Thread-136290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:37:17.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:37:17.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:37:17.931 [DEBUG] [Thread-136290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:37:17.932 [DEBUG] [Thread-136290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:37:17.979 [DEBUG] [Thread-136290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:37:17.980 [DEBUG] [Thread-136290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:37:17.989 [DEBUG] [Thread-136290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:37:17.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:37:17.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:37:18.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
2026-02-11T21:37:18.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:37:18.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:37:18.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:37:18.026 [DEBUG] [Thread-136290] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:37:31.347 [DEBUG] [Thread-136292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:31.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:31.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:43.419 [DEBUG] [Thread-136293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:46.399 [DEBUG] [Thread-136294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:37:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:37:48.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:37:48.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:37:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 37, 10), 1.31, 91.94, 0.0, 15.46, 15.86, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:37:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:37:10
2026-02-11T21:37:50.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:37:50.824 [DEBUG] [Thread-136295] [transport.py] [_log()] starting thread (client mode): 0xa57b31c0
2026-02-11T21:37:50.824 [DEBUG] [Thread-136295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:37:50.844 [DEBUG] [Thread-136295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:37:50.844 [INFO] [Thread-136295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:37:50.847 [DEBUG] [Thread-136295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:37:50.847 [DEBUG] [Thread-136295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:37:50.847 [DEBUG] [Thread-136295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] client lang: <none>
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] server lang: <none>
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] kex follows: False
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] Compression: none
2026-02-11T21:37:50.848 [DEBUG] [Thread-136295] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:37:50.864 [DEBUG] [Thread-136295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:37:50.865 [DEBUG] [Thread-136295] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:37:50.866 [DEBUG] [Thread-136295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:37:50.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:37:50.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:37:50.868 [DEBUG] [Thread-136295] [transport.py] [_log()] userauth is OK
2026-02-11T21:37:50.868 [DEBUG] [Thread-136295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:37:50.868 [DEBUG] [Thread-136295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:37:50.868 [DEBUG] [Thread-136295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:37:50.868 [DEBUG] [Thread-136295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:37:50.902 [INFO] [Thread-136295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:37:50.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:37:51.541 [DEBUG] [Thread-136295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:37:51.541 [DEBUG] [Thread-136295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:37:51.542 [DEBUG] [Thread-136295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:37:51.583 [DEBUG] [Thread-136295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:37:51.583 [DEBUG] [Thread-136295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:37:51.586 [DEBUG] [Thread-136295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:37:51.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:37:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:37:51.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:37:51.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:37:51.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:37:51.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:37:51.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:37:51.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:37:51.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:37:51.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.817499 -999.00  +16.00  15.93     89  +14.30 1 2 1 3 1     0    0 1.65 -4.32 Zn.SW 17.7 15.9 200.6 25.7 -999.0 -999.0 17.8 -14.8 17.6 -14.2 17.9 -15.1
2026-02-11T21:37:51.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:37:51.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:37:51.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.817499
2026-02-11T21:37:51.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:37:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:37:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:37:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:37:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T21:37:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:37:10', tmtdew=1.31, humidity=91.94, cloud=0.0, wind=15.46, temperature=15.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:37:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:37:51.614 [DEBUG] [Thread-136295] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:37:51.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:37:51.710 [DEBUG] [Thread-136298] [transport.py] [_log()] starting thread (client mode): 0xa57b1630
2026-02-11T21:37:51.710 [DEBUG] [Thread-136298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:37:51.725 [DEBUG] [Thread-136298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:37:51.725 [INFO] [Thread-136298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:37:51.733 [DEBUG] [Thread-136298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] client lang: <none>
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] server lang: <none>
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] kex follows: False
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:37:51.734 [DEBUG] [Thread-136298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:37:51.735 [DEBUG] [Thread-136298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:37:51.735 [DEBUG] [Thread-136298] [transport.py] [_log()] Compression: none
2026-02-11T21:37:51.735 [DEBUG] [Thread-136298] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:37:51.791 [DEBUG] [Thread-136298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:37:51.792 [DEBUG] [Thread-136298] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:37:51.792 [DEBUG] [Thread-136298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:37:51.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:37:51.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:37:51.848 [DEBUG] [Thread-136298] [transport.py] [_log()] userauth is OK
2026-02-11T21:37:51.848 [DEBUG] [Thread-136298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:37:51.848 [DEBUG] [Thread-136298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:37:51.848 [DEBUG] [Thread-136298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:37:51.848 [DEBUG] [Thread-136298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:37:51.870 [INFO] [Thread-136298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:37:51.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:37:51.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:37:52.692 [DEBUG] [Thread-136298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:37:52.693 [DEBUG] [Thread-136298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:37:52.740 [DEBUG] [Thread-136298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:37:52.741 [DEBUG] [Thread-136298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:37:52.750 [DEBUG] [Thread-136298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:37:52.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:37:52.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:37: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') -> 00000000
2026-02-11T21:37:52.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:37:52.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:37:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:37:52.790 [DEBUG] [Thread-136298] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:38:01.438 [DEBUG] [Thread-136300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:38:16.487 [DEBUG] [Thread-136301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:38:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:38:22.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:38:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:38:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 37, 46), 1.28, 92.09, 0.0, 22.62, 15.77, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:38:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:37:46
2026-02-11T21:38:25.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:38:25.283 [DEBUG] [Thread-136302] [transport.py] [_log()] starting thread (client mode): 0xa2d5f310
2026-02-11T21:38:25.283 [DEBUG] [Thread-136302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:38:25.297 [DEBUG] [Thread-136302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:38:25.297 [INFO] [Thread-136302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] client lang: <none>
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] server lang: <none>
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] kex follows: False
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:38:25.298 [DEBUG] [Thread-136302] [transport.py] [_log()] Compression: none
2026-02-11T21:38:25.299 [DEBUG] [Thread-136302] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:38:25.306 [DEBUG] [Thread-136302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:38:25.307 [DEBUG] [Thread-136302] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:38:25.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:38:25.308 [DEBUG] [Thread-136302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:38:25.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:38:25.309 [DEBUG] [Thread-136302] [transport.py] [_log()] userauth is OK
2026-02-11T21:38:25.309 [DEBUG] [Thread-136302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:38:25.309 [DEBUG] [Thread-136302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:38:25.309 [DEBUG] [Thread-136302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:38:25.309 [DEBUG] [Thread-136302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:38:25.328 [INFO] [Thread-136302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:38:25.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:38:25.965 [DEBUG] [Thread-136302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:38:25.965 [DEBUG] [Thread-136302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:38:25.966 [DEBUG] [Thread-136302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:38:26.006 [DEBUG] [Thread-136302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:38:26.007 [DEBUG] [Thread-136302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:38:26.010 [DEBUG] [Thread-136302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:38:26.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:38:26.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:38:26.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:38:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:38:26.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:38:26.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:38:26.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:38:26.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:38:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:38:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.818193 -999.00  +16.00  20.19     89  +14.30 1 3 1 3 1     0    0 1.65 -5.11 ZnESW 19.3 20.2 192.0 24.3 17.9 -8.9 17.7 -8.1 17.6 -8.1 17.9 -9.9
2026-02-11T21:38:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:38:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:38:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.818193
2026-02-11T21:38:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:38:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:38:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:38:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:38:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:38:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:37:46', tmtdew=1.28, humidity=92.09, cloud=0.0, wind=22.62, temperature=15.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:38:11.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T18:49:00')
2026-02-11T21:38:26.038 [DEBUG] [Thread-136302] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:38:26.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:38:26.146 [DEBUG] [Thread-136305] [transport.py] [_log()] starting thread (client mode): 0xa2d5e500
2026-02-11T21:38:26.146 [DEBUG] [Thread-136305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:38:26.160 [DEBUG] [Thread-136305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:38:26.160 [INFO] [Thread-136305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:38:26.168 [DEBUG] [Thread-136305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:38:26.168 [DEBUG] [Thread-136305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:38:26.168 [DEBUG] [Thread-136305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:38:26.168 [DEBUG] [Thread-136305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:38:26.168 [DEBUG] [Thread-136305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] client lang: <none>
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] server lang: <none>
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] kex follows: False
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:38:26.169 [DEBUG] [Thread-136305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:38:26.170 [DEBUG] [Thread-136305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:38:26.170 [DEBUG] [Thread-136305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:38:26.170 [DEBUG] [Thread-136305] [transport.py] [_log()] Compression: none
2026-02-11T21:38:26.170 [DEBUG] [Thread-136305] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:38:26.233 [DEBUG] [Thread-136305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:38:26.234 [DEBUG] [Thread-136305] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:38:26.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:38:26.235 [DEBUG] [Thread-136305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:38:26.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:38:26.296 [DEBUG] [Thread-136305] [transport.py] [_log()] userauth is OK
2026-02-11T21:38:26.296 [DEBUG] [Thread-136305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:38:26.296 [DEBUG] [Thread-136305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:38:26.296 [DEBUG] [Thread-136305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:38:26.296 [DEBUG] [Thread-136305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:38:26.319 [INFO] [Thread-136305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:38:26.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:38:26.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:38:27.223 [DEBUG] [Thread-136305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:38:27.232 [DEBUG] [Thread-136305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:38:27.271 [DEBUG] [Thread-136305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:38:27.271 [DEBUG] [Thread-136305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:38:27.280 [DEBUG] [Thread-136305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:38:27.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:38:27.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:38:27.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:38:27.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:38:27.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:38:27.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:38:27.317 [DEBUG] [Thread-136305] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:38:31.522 [DEBUG] [Thread-136307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:38:31.693 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:38:31.695 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:38:43.497 [DEBUG] [Thread-136308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:38:46.574 [DEBUG] [Thread-136309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:38:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:38:57.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:38:57.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:38:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 38, 21), 1.28, 92.12, 0.0, 19.85, 15.82, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:38:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:38:21
2026-02-11T21:38:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:39:00.137 [DEBUG] [Thread-136310] [transport.py] [_log()] starting thread (client mode): 0xa2d06590
2026-02-11T21:39:00.137 [DEBUG] [Thread-136310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:39:00.157 [DEBUG] [Thread-136310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:39:00.157 [INFO] [Thread-136310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] client lang: <none>
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] server lang: <none>
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] kex follows: False
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:39:00.159 [DEBUG] [Thread-136310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:39:00.160 [DEBUG] [Thread-136310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:39:00.160 [DEBUG] [Thread-136310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:39:00.160 [DEBUG] [Thread-136310] [transport.py] [_log()] Compression: none
2026-02-11T21:39:00.160 [DEBUG] [Thread-136310] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:39:00.176 [DEBUG] [Thread-136310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:39:00.177 [DEBUG] [Thread-136310] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:39:00.177 [DEBUG] [Thread-136310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:39:00.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:39:00.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:39:00.179 [DEBUG] [Thread-136310] [transport.py] [_log()] userauth is OK
2026-02-11T21:39:00.179 [DEBUG] [Thread-136310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:39:00.179 [DEBUG] [Thread-136310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:39:00.179 [DEBUG] [Thread-136310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:39:00.179 [DEBUG] [Thread-136310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:39:00.200 [INFO] [Thread-136310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:39:00.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:39:00.803 [DEBUG] [Thread-136310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:39:00.804 [DEBUG] [Thread-136310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:39:00.804 [DEBUG] [Thread-136310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:39:00.844 [DEBUG] [Thread-136310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:39:00.845 [DEBUG] [Thread-136310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:39:00.848 [DEBUG] [Thread-136310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:39:00.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:39:00.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:39:00.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:39:00.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:39:00.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:39:00.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:39:00.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:39:00.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:39:00.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:39:00.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.818541 -999.00  +16.00  17.92     89  +14.30 1 3 1 3 1     0    0 1.61 -5.27 ZnESW 13.2 17.9 202.6 23.5 17.9 -8.0 17.7 -6.7 17.6 -7.4 17.9 -8.4
2026-02-11T21:39:00.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:39:00.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:39:00.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.818541
2026-02-11T21:39:00.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:39:00.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:39:00.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:39:00.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:39:00.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:39:00.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:38:21', tmtdew=1.28, humidity=92.12, cloud=0.0, wind=19.85, temperature=15.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:38:41.942', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T19:37:00')
2026-02-11T21:39:00.874 [DEBUG] [Thread-136310] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:39:00.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:39:00.968 [DEBUG] [Thread-136313] [transport.py] [_log()] starting thread (client mode): 0xa2d9d5d0
2026-02-11T21:39:00.968 [DEBUG] [Thread-136313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:39:00.986 [DEBUG] [Thread-136313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:39:00.987 [INFO] [Thread-136313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:39:00.994 [DEBUG] [Thread-136313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:39:00.994 [DEBUG] [Thread-136313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] client lang: <none>
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] server lang: <none>
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] kex follows: False
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] Compression: none
2026-02-11T21:39:00.995 [DEBUG] [Thread-136313] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:39:01.052 [DEBUG] [Thread-136313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:39:01.052 [DEBUG] [Thread-136313] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:39:01.053 [DEBUG] [Thread-136313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:39:01.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:39:01.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:39:01.108 [DEBUG] [Thread-136313] [transport.py] [_log()] userauth is OK
2026-02-11T21:39:01.108 [DEBUG] [Thread-136313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:39:01.108 [DEBUG] [Thread-136313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:39:01.108 [DEBUG] [Thread-136313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:39:01.109 [DEBUG] [Thread-136313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:39:01.133 [INFO] [Thread-136313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:39:01.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:39:01.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:39:01.610 [DEBUG] [Thread-136315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:39:01.977 [DEBUG] [Thread-136313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:39:01.978 [DEBUG] [Thread-136313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:39:02.025 [DEBUG] [Thread-136313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:39:02.026 [DEBUG] [Thread-136313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:39:02.035 [DEBUG] [Thread-136313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:39:02.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:39:02.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:39:02.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:39:02.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:39:02.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:39:02.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:39:02.072 [DEBUG] [Thread-136313] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:39:16.645 [DEBUG] [Thread-136316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:39:31.683 [DEBUG] [Thread-136317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:39:31.900 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:39:31.901 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:39:32.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:39:32.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:39:32.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:39:34.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 38, 57), 1.28, 92.11, 0.0, 20.68, 15.81, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:39:34.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:38:57
2026-02-11T21:39:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:39:34.675 [DEBUG] [Thread-136318] [transport.py] [_log()] starting thread (client mode): 0x9eb07fa0
2026-02-11T21:39:34.676 [DEBUG] [Thread-136318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:39:34.696 [DEBUG] [Thread-136318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:39:34.696 [INFO] [Thread-136318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] client lang: <none>
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] server lang: <none>
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] kex follows: False
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:39:34.699 [DEBUG] [Thread-136318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:39:34.700 [DEBUG] [Thread-136318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:39:34.700 [DEBUG] [Thread-136318] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:39:34.700 [DEBUG] [Thread-136318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:39:34.700 [DEBUG] [Thread-136318] [transport.py] [_log()] Compression: none
2026-02-11T21:39:34.700 [DEBUG] [Thread-136318] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:39:34.716 [DEBUG] [Thread-136318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:39:34.717 [DEBUG] [Thread-136318] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:39:34.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:39:34.718 [DEBUG] [Thread-136318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:39:34.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:39:34.720 [DEBUG] [Thread-136318] [transport.py] [_log()] userauth is OK
2026-02-11T21:39:34.720 [DEBUG] [Thread-136318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:39:34.721 [DEBUG] [Thread-136318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:39:34.721 [DEBUG] [Thread-136318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:39:34.721 [DEBUG] [Thread-136318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:39:34.757 [INFO] [Thread-136318] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:39:34.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:39:35.402 [DEBUG] [Thread-136318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:39:35.402 [DEBUG] [Thread-136318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:39:35.403 [DEBUG] [Thread-136318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:39:35.443 [DEBUG] [Thread-136318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:39:35.444 [DEBUG] [Thread-136318] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:39:35.447 [DEBUG] [Thread-136318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:39:35.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:39:35.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:39:35.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:39:35.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:39:35.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:39:35.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:39:35.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:39:35.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:39:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:39:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.818888 -999.00  +16.00  15.23     89  +14.30 1 3 1 3 1     0    0 1.58 -5.12 ZN..W 16.7 15.2 209.3 26.4 17.9 -5.4 17.7 -5.1 17.6 -5.2 17.9 -5.2
2026-02-11T21:39:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:39:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:39:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.818888
2026-02-11T21:39:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:39:35.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:39:35.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:39:35.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:39:35.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:39:35.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:38:57', tmtdew=1.28, humidity=92.11, cloud=0.0, wind=20.68, temperature=15.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:39:11.923', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T19:37:00')
2026-02-11T21:39:35.476 [DEBUG] [Thread-136318] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:39:35.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:39:35.571 [DEBUG] [Thread-136321] [transport.py] [_log()] starting thread (client mode): 0xa2d04220
2026-02-11T21:39:35.571 [DEBUG] [Thread-136321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:39:35.586 [DEBUG] [Thread-136321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:39:35.586 [INFO] [Thread-136321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:39:35.594 [DEBUG] [Thread-136321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:39:35.594 [DEBUG] [Thread-136321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] client lang: <none>
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] server lang: <none>
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] kex follows: False
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] Compression: none
2026-02-11T21:39:35.595 [DEBUG] [Thread-136321] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:39:35.653 [DEBUG] [Thread-136321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:39:35.653 [DEBUG] [Thread-136321] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:39:35.654 [DEBUG] [Thread-136321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:39:35.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:39:35.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:39:35.712 [DEBUG] [Thread-136321] [transport.py] [_log()] userauth is OK
2026-02-11T21:39:35.713 [DEBUG] [Thread-136321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:39:35.713 [DEBUG] [Thread-136321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:39:35.713 [DEBUG] [Thread-136321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:39:35.713 [DEBUG] [Thread-136321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:39:35.731 [INFO] [Thread-136321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:39:35.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:39:35.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:39:36.561 [DEBUG] [Thread-136321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:39:36.561 [DEBUG] [Thread-136321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:39:36.608 [DEBUG] [Thread-136321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:39:36.608 [DEBUG] [Thread-136321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:39:36.618 [DEBUG] [Thread-136321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:39:36.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:39:36.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:39:36.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:39:36.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:39:36.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:39:36.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:39:36.654 [DEBUG] [Thread-136321] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:39:43.585 [DEBUG] [Thread-136323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:39:46.719 [DEBUG] [Thread-136324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:40:01.768 [DEBUG] [Thread-136325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:40:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:40:06.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:40:06.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:40:08.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 39, 33), 1.75, 89.28, 0.0, 23.64, 16.31, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:40:08.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:39:33
2026-02-11T21:40:09.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:40:09.202 [DEBUG] [Thread-136326] [transport.py] [_log()] starting thread (client mode): 0xa57b1810
2026-02-11T21:40:09.202 [DEBUG] [Thread-136326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:40:09.222 [DEBUG] [Thread-136326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:40:09.222 [INFO] [Thread-136326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:09.225 [DEBUG] [Thread-136326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] client lang: <none>
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] server lang: <none>
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] kex follows: False
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] Compression: none
2026-02-11T21:40:09.226 [DEBUG] [Thread-136326] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:40:09.243 [DEBUG] [Thread-136326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:40:09.243 [DEBUG] [Thread-136326] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:40:09.244 [DEBUG] [Thread-136326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:40:09.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:40:09.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:40:09.245 [DEBUG] [Thread-136326] [transport.py] [_log()] userauth is OK
2026-02-11T21:40:09.246 [DEBUG] [Thread-136326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:40:09.246 [DEBUG] [Thread-136326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:40:09.246 [DEBUG] [Thread-136326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:40:09.246 [DEBUG] [Thread-136326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:40:09.271 [INFO] [Thread-136326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:40:09.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:40:10.444 [DEBUG] [Thread-136326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:40:10.445 [DEBUG] [Thread-136326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:40:10.445 [DEBUG] [Thread-136326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:40:10.485 [DEBUG] [Thread-136326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:40:10.486 [DEBUG] [Thread-136326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:40:10.489 [DEBUG] [Thread-136326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:40:10.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:40:10.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:40:10.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:40:10.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:40:10.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:40:10.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:40:10.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:40:10.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:40:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:40:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.819235 -999.00  +16.00  13.31     89  +14.30 1 2 1 3 1     0    0 1.59 -5.70 ZN... 11.0 13.3 207.4 18.9 17.8 -11.3 17.6 -12.0 17.6 -11.3 17.9 -9.4
2026-02-11T21:40:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:40:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:40:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.819235
2026-02-11T21:40:10.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:40:10.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:40:10.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:40:10.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:40:10.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T21:40:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:39:33', tmtdew=1.75, humidity=89.28, cloud=0.0, wind=23.64, temperature=16.31, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:39:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T19:37:00')
2026-02-11T21:40:10.524 [DEBUG] [Thread-136326] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:40:10.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:40:10.619 [DEBUG] [Thread-136329] [transport.py] [_log()] starting thread (client mode): 0xa2d9c550
2026-02-11T21:40:10.619 [DEBUG] [Thread-136329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:40:10.633 [DEBUG] [Thread-136329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:40:10.633 [INFO] [Thread-136329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:40:10.641 [DEBUG] [Thread-136329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:40:10.641 [DEBUG] [Thread-136329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:40:10.641 [DEBUG] [Thread-136329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:40:10.641 [DEBUG] [Thread-136329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] client lang: <none>
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] server lang: <none>
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] kex follows: False
2026-02-11T21:40:10.642 [DEBUG] [Thread-136329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:40:10.643 [DEBUG] [Thread-136329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:40:10.643 [DEBUG] [Thread-136329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:40:10.643 [DEBUG] [Thread-136329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:40:10.643 [DEBUG] [Thread-136329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:40:10.643 [DEBUG] [Thread-136329] [transport.py] [_log()] Compression: none
2026-02-11T21:40:10.643 [DEBUG] [Thread-136329] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:40:10.705 [DEBUG] [Thread-136329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:40:10.705 [DEBUG] [Thread-136329] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:40:10.706 [DEBUG] [Thread-136329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:40:10.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:40:10.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:40:10.760 [DEBUG] [Thread-136329] [transport.py] [_log()] userauth is OK
2026-02-11T21:40:10.761 [DEBUG] [Thread-136329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:40:10.761 [DEBUG] [Thread-136329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:40:10.761 [DEBUG] [Thread-136329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:40:10.761 [DEBUG] [Thread-136329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:40:10.788 [INFO] [Thread-136329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:40:10.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:40:10.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:40:11.618 [DEBUG] [Thread-136329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:40:11.627 [DEBUG] [Thread-136329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:40:11.666 [DEBUG] [Thread-136329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:40:11.667 [DEBUG] [Thread-136329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:40:11.676 [DEBUG] [Thread-136329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:40:11.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:40:11.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')
2026-02-11T21:40:11.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:40:11.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:40:11.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:40:11.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:40:11.713 [DEBUG] [Thread-136329] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:40:16.803 [DEBUG] [Thread-136331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:40:31.863 [DEBUG] [Thread-136332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:40:32.103 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:40:32.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:40:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:40:41.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:40:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:40:43.663 [DEBUG] [Thread-136333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:40:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 40, 9), 1.23, 92.09, 0.0, 23.75, 15.79, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:40:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:40:09
2026-02-11T21:40:44.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:40:44.518 [DEBUG] [Thread-136334] [transport.py] [_log()] starting thread (client mode): 0xa2d6beb0
2026-02-11T21:40:44.518 [DEBUG] [Thread-136334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:40:44.538 [DEBUG] [Thread-136334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:40:44.538 [INFO] [Thread-136334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] client lang: <none>
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] server lang: <none>
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] kex follows: False
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:40:44.541 [DEBUG] [Thread-136334] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:40:44.550 [DEBUG] [Thread-136334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:40:44.550 [DEBUG] [Thread-136334] [transport.py] [_log()] Compression: none
2026-02-11T21:40:44.550 [DEBUG] [Thread-136334] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:40:44.568 [DEBUG] [Thread-136334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:40:44.568 [DEBUG] [Thread-136334] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:40:44.569 [DEBUG] [Thread-136334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:40:44.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:40:44.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:40:44.571 [DEBUG] [Thread-136334] [transport.py] [_log()] userauth is OK
2026-02-11T21:40:44.571 [DEBUG] [Thread-136334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:40:44.571 [DEBUG] [Thread-136334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:40:44.571 [DEBUG] [Thread-136334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:40:44.571 [DEBUG] [Thread-136334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:40:44.596 [INFO] [Thread-136334] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:40:44.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:40:45.187 [DEBUG] [Thread-136334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:40:45.187 [DEBUG] [Thread-136334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:40:45.187 [DEBUG] [Thread-136334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:40:45.228 [DEBUG] [Thread-136334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:40:45.229 [DEBUG] [Thread-136334] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:40:45.232 [DEBUG] [Thread-136334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:40:45.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:40:45.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:40:45.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:40:45.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:40:45.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:40:45.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:40:45.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:40:45.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:40:45.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:40:45.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.819582 -999.00  +16.00  15.60     89  +14.30 1 2 1 3 1     0    0 1.54 -5.97 ZN... 14.7 15.6 201.0 18.5 17.8 -12.3 17.6 -12.1 17.6 -10.9 17.9 -14.0
2026-02-11T21:40:45.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:40:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:40:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.819582
2026-02-11T21:40:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:40:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:40:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:40:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:40:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T21:40:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:40:09', tmtdew=1.23, humidity=92.09, cloud=0.0, wind=23.75, temperature=15.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:40:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T19:37:00')
2026-02-11T21:40:45.259 [DEBUG] [Thread-136334] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:40:45.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:40:45.355 [DEBUG] [Thread-136337] [transport.py] [_log()] starting thread (client mode): 0xa2d9d840
2026-02-11T21:40:45.356 [DEBUG] [Thread-136337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:40:45.370 [DEBUG] [Thread-136337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:40:45.370 [INFO] [Thread-136337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:40:45.378 [DEBUG] [Thread-136337] [transport.py] [_log()] client lang: <none>
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] server lang: <none>
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] kex follows: False
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] Compression: none
2026-02-11T21:40:45.379 [DEBUG] [Thread-136337] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:40:45.437 [DEBUG] [Thread-136337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:40:45.437 [DEBUG] [Thread-136337] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:40:45.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:40:45.439 [DEBUG] [Thread-136337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:40:45.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:40:45.494 [DEBUG] [Thread-136337] [transport.py] [_log()] userauth is OK
2026-02-11T21:40:45.494 [DEBUG] [Thread-136337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:40:45.495 [DEBUG] [Thread-136337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:40:45.495 [DEBUG] [Thread-136337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:40:45.495 [DEBUG] [Thread-136337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:40:45.513 [INFO] [Thread-136337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:40:45.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:40:45.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:40:46.346 [DEBUG] [Thread-136337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:40:46.346 [DEBUG] [Thread-136337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:40:46.393 [DEBUG] [Thread-136337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:40:46.393 [DEBUG] [Thread-136337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:40:46.403 [DEBUG] [Thread-136337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:40:46.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:40:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:40: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') -> 00000000
2026-02-11T21:40:46.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:40:46.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:40:46.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:40:46.439 [DEBUG] [Thread-136337] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:40:46.896 [DEBUG] [Thread-136339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:01.950 [DEBUG] [Thread-136340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:41:16.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:41:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:41:16.984 [DEBUG] [Thread-136341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:18.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 40, 44), 1.23, 92.11, 0.0, 21.6, 15.79, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:41:18.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:40:44
2026-02-11T21:41:18.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:41:18.894 [DEBUG] [Thread-136342] [transport.py] [_log()] starting thread (client mode): 0xa5770a60
2026-02-11T21:41:18.894 [DEBUG] [Thread-136342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:41:18.914 [DEBUG] [Thread-136342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:41:18.914 [INFO] [Thread-136342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:41:18.918 [DEBUG] [Thread-136342] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:41:18.918 [DEBUG] [Thread-136342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] client lang: <none>
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] server lang: <none>
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] kex follows: False
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:41:18.919 [DEBUG] [Thread-136342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:41:18.920 [DEBUG] [Thread-136342] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:41:18.920 [DEBUG] [Thread-136342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:41:18.920 [DEBUG] [Thread-136342] [transport.py] [_log()] Compression: none
2026-02-11T21:41:18.920 [DEBUG] [Thread-136342] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:41:18.933 [DEBUG] [Thread-136342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:41:18.934 [DEBUG] [Thread-136342] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:41:18.935 [DEBUG] [Thread-136342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:41:18.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:41:18.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:41:18.937 [DEBUG] [Thread-136342] [transport.py] [_log()] userauth is OK
2026-02-11T21:41:18.937 [DEBUG] [Thread-136342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:41:18.937 [DEBUG] [Thread-136342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:41:18.937 [DEBUG] [Thread-136342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:41:18.937 [DEBUG] [Thread-136342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:41:18.960 [INFO] [Thread-136342] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:41:18.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:41:19.573 [DEBUG] [Thread-136342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:41:19.574 [DEBUG] [Thread-136342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:41:19.574 [DEBUG] [Thread-136342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:41:19.615 [DEBUG] [Thread-136342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:41:19.615 [DEBUG] [Thread-136342] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:41:19.618 [DEBUG] [Thread-136342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:41:19.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:41:19.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:41:19.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:41:19.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:41:19.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:41:19.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:41:19.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:41:19.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:41:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:41:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.819929 -999.00  +16.10  15.83     89  +14.30 1 3 1 3 1     0    0 1.58 -5.56 ...S. 14.4 15.8 199.9 19.6 17.8 -5.0 17.7 -4.5 17.5 -4.6 17.9 -5.8
2026-02-11T21:41:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:41:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:41:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.819929
2026-02-11T21:41:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:41:19.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:41:19.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:41:19.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:41:19.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:41:19.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:40:44', tmtdew=1.23, humidity=92.11, cloud=0.0, wind=21.6, temperature=15.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:40:41.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, 1.8255, nan, nan, nan, nan, nan, nan, 2.2895000000000003, 1.4245, 1.693249999999999, nan, nan, nan, nan, nan, nan, 1.674999999999999, 1.3237499999999986, nan, nan, nan, nan, nan, nan, nan, 1.2730000000000006, 1.2825000000000006, nan, nan], zp_timestamp='2026-02-11T19:37:00')
2026-02-11T21:41:19.643 [DEBUG] [Thread-136342] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:41:19.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:41:19.730 [DEBUG] [Thread-136345] [transport.py] [_log()] starting thread (client mode): 0xa2d04910
2026-02-11T21:41:19.730 [DEBUG] [Thread-136345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:41:19.746 [DEBUG] [Thread-136345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:41:19.746 [INFO] [Thread-136345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:41:19.753 [DEBUG] [Thread-136345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:41:19.753 [DEBUG] [Thread-136345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] client lang: <none>
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] server lang: <none>
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] kex follows: False
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] Compression: none
2026-02-11T21:41:19.754 [DEBUG] [Thread-136345] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:41:19.812 [DEBUG] [Thread-136345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:41:19.813 [DEBUG] [Thread-136345] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:41:19.813 [DEBUG] [Thread-136345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:41:19.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:41:19.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:41:19.869 [DEBUG] [Thread-136345] [transport.py] [_log()] userauth is OK
2026-02-11T21:41:19.869 [DEBUG] [Thread-136345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:41:19.869 [DEBUG] [Thread-136345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:41:19.869 [DEBUG] [Thread-136345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:41:19.869 [DEBUG] [Thread-136345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:41:19.889 [INFO] [Thread-136345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:41:19.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:41:19.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:41:20.726 [DEBUG] [Thread-136345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:41:20.726 [DEBUG] [Thread-136345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:41:20.775 [DEBUG] [Thread-136345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:41:20.775 [DEBUG] [Thread-136345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:41:20.787 [DEBUG] [Thread-136345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:41:20.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:41:20.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:41:20.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:41:20.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:41:20.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:41:20.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:41:20.819 [DEBUG] [Thread-136345] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:41:32.016 [DEBUG] [Thread-136347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:32.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:32.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:43.738 [DEBUG] [Thread-136348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:47.074 [DEBUG] [Thread-136349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:41:50.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:41:50.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:41:50.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:41:52.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 41, 21), 1.23, 92.14, 0.0, 20.61, 15.77, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:41:52.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:41:21
2026-02-11T21:41:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:41:53.173 [DEBUG] [Thread-136350] [transport.py] [_log()] starting thread (client mode): 0xa2d04d30
2026-02-11T21:41:53.173 [DEBUG] [Thread-136350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:41:53.193 [DEBUG] [Thread-136350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:41:53.193 [INFO] [Thread-136350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] client lang: <none>
2026-02-11T21:41:53.196 [DEBUG] [Thread-136350] [transport.py] [_log()] server lang: <none>
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] kex follows: False
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] Compression: none
2026-02-11T21:41:53.197 [DEBUG] [Thread-136350] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:41:53.218 [DEBUG] [Thread-136350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:41:53.219 [DEBUG] [Thread-136350] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:41:53.219 [DEBUG] [Thread-136350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:41:53.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:41:53.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:41:53.221 [DEBUG] [Thread-136350] [transport.py] [_log()] userauth is OK
2026-02-11T21:41:53.221 [DEBUG] [Thread-136350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:41:53.221 [DEBUG] [Thread-136350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:41:53.222 [DEBUG] [Thread-136350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:41:53.222 [DEBUG] [Thread-136350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:41:53.246 [INFO] [Thread-136350] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:41:53.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:41:53.815 [DEBUG] [Thread-136350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:41:53.815 [DEBUG] [Thread-136350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:41:53.815 [DEBUG] [Thread-136350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:41:53.856 [DEBUG] [Thread-136350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:41:53.856 [DEBUG] [Thread-136350] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:41:53.861 [DEBUG] [Thread-136350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:41:53.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:41:53.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:41:53.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:41:53.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:41:53.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:41:53.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:41:53.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:41:53.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:41:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:41:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.820624 -999.00  +16.00  16.99     89  +14.30 1 3 1 3 1     0    0 1.62 -4.74 ZN.sW 15.2 17.0 206.0 26.6 17.8 -5.2 17.6 -5.3 17.5 -6.1 17.9 -5.5
2026-02-11T21:41:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:41:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:41:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.820624
2026-02-11T21:41:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:41:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:41:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:41:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:41:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:41:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:41:21', tmtdew=1.23, humidity=92.14, cloud=0.0, wind=20.61, temperature=15.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:41:41.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:41:53.880 [DEBUG] [Thread-136350] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:41:53.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:41:53.978 [DEBUG] [Thread-136353] [transport.py] [_log()] starting thread (client mode): 0xa5770160
2026-02-11T21:41:53.979 [DEBUG] [Thread-136353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:41:53.996 [DEBUG] [Thread-136353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:41:53.996 [INFO] [Thread-136353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:41:54.007 [DEBUG] [Thread-136353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] client lang: <none>
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] server lang: <none>
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] kex follows: False
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:41:54.008 [DEBUG] [Thread-136353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:41:54.009 [DEBUG] [Thread-136353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:41:54.009 [DEBUG] [Thread-136353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:41:54.009 [DEBUG] [Thread-136353] [transport.py] [_log()] Compression: none
2026-02-11T21:41:54.009 [DEBUG] [Thread-136353] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:41:54.067 [DEBUG] [Thread-136353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:41:54.068 [DEBUG] [Thread-136353] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:41:54.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:41:54.069 [DEBUG] [Thread-136353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:41:54.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:41:54.127 [DEBUG] [Thread-136353] [transport.py] [_log()] userauth is OK
2026-02-11T21:41:54.127 [DEBUG] [Thread-136353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:41:54.127 [DEBUG] [Thread-136353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:41:54.127 [DEBUG] [Thread-136353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:41:54.127 [DEBUG] [Thread-136353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:41:54.147 [INFO] [Thread-136353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:41:54.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:41:54.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:41:54.967 [DEBUG] [Thread-136353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:41:54.967 [DEBUG] [Thread-136353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:41:55.018 [DEBUG] [Thread-136353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:41:55.018 [DEBUG] [Thread-136353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:41:55.028 [DEBUG] [Thread-136353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:41:55.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:41:55.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')
2026-02-11T21:41:55.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:41:55.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:41:55.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:41:55.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:41:55.073 [DEBUG] [Thread-136353] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:42:02.106 [DEBUG] [Thread-136355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:42:17.148 [DEBUG] [Thread-136356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:42:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:42:25.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:42:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:42:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 41, 56), 1.22, 92.16, 0.0, 23.82, 15.79, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:42:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:41:56
2026-02-11T21:42:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:42:28.028 [DEBUG] [Thread-136357] [transport.py] [_log()] starting thread (client mode): 0xa2d4df30
2026-02-11T21:42:28.028 [DEBUG] [Thread-136357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:42:28.049 [DEBUG] [Thread-136357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:42:28.049 [INFO] [Thread-136357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:42:28.052 [DEBUG] [Thread-136357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] client lang: <none>
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] server lang: <none>
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] kex follows: False
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] Compression: none
2026-02-11T21:42:28.053 [DEBUG] [Thread-136357] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:42:28.070 [DEBUG] [Thread-136357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:42:28.070 [DEBUG] [Thread-136357] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:42:28.071 [DEBUG] [Thread-136357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:42:28.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:42:28.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:42:28.074 [DEBUG] [Thread-136357] [transport.py] [_log()] userauth is OK
2026-02-11T21:42:28.074 [DEBUG] [Thread-136357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:42:28.074 [DEBUG] [Thread-136357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:42:28.074 [DEBUG] [Thread-136357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:42:28.074 [DEBUG] [Thread-136357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:42:28.100 [INFO] [Thread-136357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:42:28.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:42:28.713 [DEBUG] [Thread-136357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:42:28.714 [DEBUG] [Thread-136357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:42:28.714 [DEBUG] [Thread-136357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:42:28.754 [DEBUG] [Thread-136357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:42:28.755 [DEBUG] [Thread-136357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:42:28.758 [DEBUG] [Thread-136357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:42:28.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:42:28.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:42:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:42:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:42:28.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:42:28.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:42:28.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:42:28.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:42:28.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:42:28.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.820971 -999.00  +16.00  13.49     89  +14.30 1 3 1 3 1     0    0 1.60 -5.45 ..... 14.7 13.5 197.2 21.9 17.9 -4.0 17.6 -4.2 17.6 -3.9 17.9 -4.5
2026-02-11T21:42:28.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:42:28.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:42:28.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.820971
2026-02-11T21:42:28.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:42:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:42:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:42:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:42:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:42:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:41:56', tmtdew=1.22, humidity=92.16, cloud=0.0, wind=23.82, temperature=15.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:42:11.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:42:28.779 [DEBUG] [Thread-136357] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:42:28.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:42:28.884 [DEBUG] [Thread-136360] [transport.py] [_log()] starting thread (client mode): 0xa2d4d300
2026-02-11T21:42:28.885 [DEBUG] [Thread-136360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:42:28.900 [DEBUG] [Thread-136360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:42:28.900 [INFO] [Thread-136360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:42:28.908 [DEBUG] [Thread-136360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:42:28.908 [DEBUG] [Thread-136360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:42:28.908 [DEBUG] [Thread-136360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:42:28.908 [DEBUG] [Thread-136360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] client lang: <none>
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] server lang: <none>
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] kex follows: False
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] Compression: none
2026-02-11T21:42:28.909 [DEBUG] [Thread-136360] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:42:28.965 [DEBUG] [Thread-136360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:42:28.966 [DEBUG] [Thread-136360] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:42:28.967 [DEBUG] [Thread-136360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:42:28.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:42:28.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:42:29.021 [DEBUG] [Thread-136360] [transport.py] [_log()] userauth is OK
2026-02-11T21:42:29.021 [DEBUG] [Thread-136360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:42:29.021 [DEBUG] [Thread-136360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:42:29.021 [DEBUG] [Thread-136360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:42:29.021 [DEBUG] [Thread-136360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:42:29.041 [INFO] [Thread-136360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:42:29.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:42:29.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:42:29.907 [DEBUG] [Thread-136360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:42:29.908 [DEBUG] [Thread-136360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:42:29.957 [DEBUG] [Thread-136360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:42:29.957 [DEBUG] [Thread-136360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:42:29.966 [DEBUG] [Thread-136360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:42:29.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:42:29.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:42:29.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:42:29.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:42:29.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:42:29.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:42:30.002 [DEBUG] [Thread-136360] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:42:32.187 [DEBUG] [Thread-136362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:42:32.514 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:42:32.515 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:42:43.824 [DEBUG] [Thread-136363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:42:47.238 [DEBUG] [Thread-136364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:43:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:43:00.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:43:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:43:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 42, 31), 1.23, 92.12, 0.0, 23.77, 15.81, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:43:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:42:31
2026-02-11T21:43:02.283 [DEBUG] [Thread-136365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:43:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:43:02.480 [DEBUG] [Thread-136366] [transport.py] [_log()] starting thread (client mode): 0xa5772860
2026-02-11T21:43:02.480 [DEBUG] [Thread-136366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:43:02.497 [DEBUG] [Thread-136366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:43:02.497 [INFO] [Thread-136366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:43:02.500 [DEBUG] [Thread-136366] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] client lang: <none>
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] server lang: <none>
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] kex follows: False
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:43:02.501 [DEBUG] [Thread-136366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:43:02.502 [DEBUG] [Thread-136366] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:43:02.502 [DEBUG] [Thread-136366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:43:02.502 [DEBUG] [Thread-136366] [transport.py] [_log()] Compression: none
2026-02-11T21:43:02.502 [DEBUG] [Thread-136366] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:43:02.518 [DEBUG] [Thread-136366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:43:02.519 [DEBUG] [Thread-136366] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:43:02.519 [DEBUG] [Thread-136366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:43:02.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:43:02.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:43:02.521 [DEBUG] [Thread-136366] [transport.py] [_log()] userauth is OK
2026-02-11T21:43:02.522 [DEBUG] [Thread-136366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:43:02.522 [DEBUG] [Thread-136366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:43:02.522 [DEBUG] [Thread-136366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:43:02.522 [DEBUG] [Thread-136366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:43:02.547 [INFO] [Thread-136366] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:43:02.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:43:03.211 [DEBUG] [Thread-136366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:43:03.211 [DEBUG] [Thread-136366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:43:03.211 [DEBUG] [Thread-136366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:43:03.252 [DEBUG] [Thread-136366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:43:03.252 [DEBUG] [Thread-136366] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:43:03.255 [DEBUG] [Thread-136366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:43:03.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:43:03.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:43:03.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:43:03.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:43:03.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:43:03.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:43:03.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:43:03.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:43:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:43:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.821318 -999.00  +16.10  16.26     89  +14.30 1 3 1 3 1     0    0 1.59 -4.67 ----- 13.1 16.3 206.4 19.4 17.9 -4.3 17.7 -4.4 17.6 -4.7 17.9 -4.4
2026-02-11T21:43:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:43:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:43:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.821318
2026-02-11T21:43:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:43:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:43:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:43:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:43:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:43:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:42:31', tmtdew=1.23, humidity=92.12, cloud=0.0, wind=23.77, temperature=15.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:42:41.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:43:03.277 [DEBUG] [Thread-136366] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:43:03.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:43:03.368 [DEBUG] [Thread-136369] [transport.py] [_log()] starting thread (client mode): 0xa5773730
2026-02-11T21:43:03.368 [DEBUG] [Thread-136369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:43:03.384 [DEBUG] [Thread-136369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:43:03.384 [INFO] [Thread-136369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:43:03.392 [DEBUG] [Thread-136369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:43:03.392 [DEBUG] [Thread-136369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:43:03.393 [DEBUG] [Thread-136369] [transport.py] [_log()] client lang: <none>
2026-02-11T21:43:03.394 [DEBUG] [Thread-136369] [transport.py] [_log()] server lang: <none>
2026-02-11T21:43:03.394 [DEBUG] [Thread-136369] [transport.py] [_log()] kex follows: False
2026-02-11T21:43:03.394 [DEBUG] [Thread-136369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:43:03.394 [DEBUG] [Thread-136369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:43:03.394 [DEBUG] [Thread-136369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:43:03.394 [DEBUG] [Thread-136369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:43:03.394 [DEBUG] [Thread-136369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:43:03.395 [DEBUG] [Thread-136369] [transport.py] [_log()] Compression: none
2026-02-11T21:43:03.395 [DEBUG] [Thread-136369] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:43:03.451 [DEBUG] [Thread-136369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:43:03.451 [DEBUG] [Thread-136369] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:43:03.452 [DEBUG] [Thread-136369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:43:03.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:43:03.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:43:03.510 [DEBUG] [Thread-136369] [transport.py] [_log()] userauth is OK
2026-02-11T21:43:03.510 [DEBUG] [Thread-136369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:43:03.510 [DEBUG] [Thread-136369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:43:03.511 [DEBUG] [Thread-136369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:43:03.511 [DEBUG] [Thread-136369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:43:03.535 [INFO] [Thread-136369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:43:03.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:43:03.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:43:04.375 [DEBUG] [Thread-136369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:43:04.375 [DEBUG] [Thread-136369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:43:04.423 [DEBUG] [Thread-136369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:43:04.423 [DEBUG] [Thread-136369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:43:04.432 [DEBUG] [Thread-136369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:43:04.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:43:04.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')
2026-02-11T21:43:04.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:43:04.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:43:04.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:43:04.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:43:04.470 [DEBUG] [Thread-136369] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:43:17.324 [DEBUG] [Thread-136371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:43:32.375 [DEBUG] [Thread-136372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:43:32.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:43:32.717 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:43:34.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:43:34.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:43:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:43:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 43, 6), 1.23, 92.12, 0.0, 23.31, 15.79, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:43:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:43:06
2026-02-11T21:43:36.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:43:36.871 [DEBUG] [Thread-136373] [transport.py] [_log()] starting thread (client mode): 0xa2d4f6d0
2026-02-11T21:43:36.872 [DEBUG] [Thread-136373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:43:36.893 [DEBUG] [Thread-136373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:43:36.893 [INFO] [Thread-136373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:36.896 [DEBUG] [Thread-136373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] client lang: <none>
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] server lang: <none>
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] kex follows: False
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] Compression: none
2026-02-11T21:43:36.897 [DEBUG] [Thread-136373] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:43:36.913 [DEBUG] [Thread-136373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:43:36.914 [DEBUG] [Thread-136373] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:43:36.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:43:36.915 [DEBUG] [Thread-136373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:43:36.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:43:36.917 [DEBUG] [Thread-136373] [transport.py] [_log()] userauth is OK
2026-02-11T21:43:36.917 [DEBUG] [Thread-136373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:43:36.917 [DEBUG] [Thread-136373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:43:36.917 [DEBUG] [Thread-136373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:43:36.917 [DEBUG] [Thread-136373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:43:36.941 [INFO] [Thread-136373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:43:36.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:43:37.558 [DEBUG] [Thread-136373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:43:37.559 [DEBUG] [Thread-136373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:43:37.559 [DEBUG] [Thread-136373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:43:37.599 [DEBUG] [Thread-136373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:43:37.599 [DEBUG] [Thread-136373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:43:37.602 [DEBUG] [Thread-136373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:43:37.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:43:37.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:43:37.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:43:37.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:43:37.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:43:37.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:43:37.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:43:37.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:43:37.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:43:37.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.821665 -999.00  +16.10  11.82     89  +14.30 1 3 1 3 1     0    0 1.63 -4.25 ----- 10.1 11.8 210.3 20.0 17.9 -3.7 17.7 -3.7 17.6 -3.5 17.9 -3.8
2026-02-11T21:43:37.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:43:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:43:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.821665
2026-02-11T21:43:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:43:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:43:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:43:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:43:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:43:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:43:06', tmtdew=1.23, humidity=92.12, cloud=0.0, wind=23.31, temperature=15.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:43:11.856', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:43:37.626 [DEBUG] [Thread-136373] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:43:37.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:43:37.721 [DEBUG] [Thread-136376] [transport.py] [_log()] starting thread (client mode): 0xa5759d20
2026-02-11T21:43:37.721 [DEBUG] [Thread-136376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:43:37.736 [DEBUG] [Thread-136376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:43:37.736 [INFO] [Thread-136376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:43:37.744 [DEBUG] [Thread-136376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:43:37.744 [DEBUG] [Thread-136376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:43:37.744 [DEBUG] [Thread-136376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:43:37.744 [DEBUG] [Thread-136376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] client lang: <none>
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] server lang: <none>
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] kex follows: False
2026-02-11T21:43:37.745 [DEBUG] [Thread-136376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:43:37.746 [DEBUG] [Thread-136376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:43:37.746 [DEBUG] [Thread-136376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:43:37.746 [DEBUG] [Thread-136376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:43:37.746 [DEBUG] [Thread-136376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:43:37.746 [DEBUG] [Thread-136376] [transport.py] [_log()] Compression: none
2026-02-11T21:43:37.746 [DEBUG] [Thread-136376] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:43:37.802 [DEBUG] [Thread-136376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:43:37.802 [DEBUG] [Thread-136376] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:43:37.803 [DEBUG] [Thread-136376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:43:37.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:43:37.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:43:37.858 [DEBUG] [Thread-136376] [transport.py] [_log()] userauth is OK
2026-02-11T21:43:37.858 [DEBUG] [Thread-136376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:43:37.859 [DEBUG] [Thread-136376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:43:37.859 [DEBUG] [Thread-136376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:43:37.859 [DEBUG] [Thread-136376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:43:37.877 [INFO] [Thread-136376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:43:37.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:43:37.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:43:38.683 [DEBUG] [Thread-136376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:43:38.684 [DEBUG] [Thread-136376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:43:38.732 [DEBUG] [Thread-136376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:43:38.732 [DEBUG] [Thread-136376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:43:38.741 [DEBUG] [Thread-136376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:43:38.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:43:38.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:43:38.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:43:38.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:43:38.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:43:38.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:43:38.778 [DEBUG] [Thread-136376] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:43:43.892 [DEBUG] [Thread-136378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:43:47.416 [DEBUG] [Thread-136379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:02.475 [DEBUG] [Thread-136380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:08.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:44:08.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:44: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
2026-02-11T21:44:11.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 43, 43), 1.23, 92.14, 0.0, 22.83, 15.87, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:44:11.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:43:43
2026-02-11T21:44:11.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:44:11.734 [DEBUG] [Thread-136381] [transport.py] [_log()] starting thread (client mode): 0xa2d4e170
2026-02-11T21:44:11.734 [DEBUG] [Thread-136381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:44:11.754 [DEBUG] [Thread-136381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:44:11.755 [INFO] [Thread-136381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:44:11.755 [DEBUG] [Thread-136381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] client lang: <none>
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] server lang: <none>
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] kex follows: False
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] Compression: none
2026-02-11T21:44:11.756 [DEBUG] [Thread-136381] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:44:11.764 [DEBUG] [Thread-136381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:44:11.764 [DEBUG] [Thread-136381] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:44:11.764 [DEBUG] [Thread-136381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:44:11.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:44:11.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:44:11.766 [DEBUG] [Thread-136381] [transport.py] [_log()] userauth is OK
2026-02-11T21:44:11.766 [DEBUG] [Thread-136381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:44:11.766 [DEBUG] [Thread-136381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:44:11.766 [DEBUG] [Thread-136381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:44:11.766 [DEBUG] [Thread-136381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:44:11.783 [INFO] [Thread-136381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:44:11.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:44:12.424 [DEBUG] [Thread-136381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:44:12.424 [DEBUG] [Thread-136381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:44:12.425 [DEBUG] [Thread-136381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:44:12.465 [DEBUG] [Thread-136381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:44:12.465 [DEBUG] [Thread-136381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:44:12.469 [DEBUG] [Thread-136381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:44:12.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:44:12.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:44:12.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:44:12.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:44:12.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:44:12.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:44:12.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:44:12.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:44:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:44:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.822013 -999.00  +16.00  13.93     89  +14.30 1 3 1 3 1     0    0 1.63 -4.09 ----- 20.7 13.9 195.8 24.8 17.9 -4.4 17.7 -4.4 17.6 -4.4 17.9 -4.2
2026-02-11T21:44:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:44:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:44:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.822013
2026-02-11T21:44:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:44:12.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:44:12.492 [DEBUG] [Thread-136381] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:44:12.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:44:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:44:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:44:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:43:43', tmtdew=1.23, humidity=92.14, cloud=0.0, wind=22.83, temperature=15.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:43:41.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:44:12.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:44:12.592 [DEBUG] [Thread-136384] [transport.py] [_log()] starting thread (client mode): 0xa2d4d8a0
2026-02-11T21:44:12.593 [DEBUG] [Thread-136384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:44:12.607 [DEBUG] [Thread-136384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:44:12.607 [INFO] [Thread-136384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:44:12.614 [DEBUG] [Thread-136384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] client lang: <none>
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] server lang: <none>
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] kex follows: False
2026-02-11T21:44:12.615 [DEBUG] [Thread-136384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:44:12.616 [DEBUG] [Thread-136384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:44:12.616 [DEBUG] [Thread-136384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:44:12.616 [DEBUG] [Thread-136384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:44:12.616 [DEBUG] [Thread-136384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:44:12.616 [DEBUG] [Thread-136384] [transport.py] [_log()] Compression: none
2026-02-11T21:44:12.616 [DEBUG] [Thread-136384] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:44:12.674 [DEBUG] [Thread-136384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:44:12.675 [DEBUG] [Thread-136384] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:44:12.675 [DEBUG] [Thread-136384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:44:12.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:44:12.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:44:12.730 [DEBUG] [Thread-136384] [transport.py] [_log()] userauth is OK
2026-02-11T21:44:12.731 [DEBUG] [Thread-136384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:44:12.731 [DEBUG] [Thread-136384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:44:12.731 [DEBUG] [Thread-136384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:44:12.731 [DEBUG] [Thread-136384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:44:12.750 [INFO] [Thread-136384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:44:12.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:44:12.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:44:13.559 [DEBUG] [Thread-136384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:44:13.559 [DEBUG] [Thread-136384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:44:13.608 [DEBUG] [Thread-136384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:44:13.608 [DEBUG] [Thread-136384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:44:13.616 [DEBUG] [Thread-136384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:44:13.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:44:13.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:44:13.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:44:13.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:44:13.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:44:13.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:44:13.648 [DEBUG] [Thread-136384] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:44:17.512 [DEBUG] [Thread-136386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:32.575 [DEBUG] [Thread-136387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:32.918 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:32.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:44:43.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:44:43.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:44:43.948 [DEBUG] [Thread-136388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 44, 18), 1.23, 92.14, 0.0, 20.7, 15.86, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:44:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:44:18
2026-02-11T21:44:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:44:46.528 [DEBUG] [Thread-136389] [transport.py] [_log()] starting thread (client mode): 0xa2d4eb00
2026-02-11T21:44:46.529 [DEBUG] [Thread-136389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:44:46.548 [DEBUG] [Thread-136389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:44:46.548 [INFO] [Thread-136389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] client lang: <none>
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] server lang: <none>
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] kex follows: False
2026-02-11T21:44:46.551 [DEBUG] [Thread-136389] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:44:46.552 [DEBUG] [Thread-136389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:44:46.552 [DEBUG] [Thread-136389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:44:46.552 [DEBUG] [Thread-136389] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:44:46.552 [DEBUG] [Thread-136389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:44:46.552 [DEBUG] [Thread-136389] [transport.py] [_log()] Compression: none
2026-02-11T21:44:46.552 [DEBUG] [Thread-136389] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:44:46.569 [DEBUG] [Thread-136389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:44:46.570 [DEBUG] [Thread-136389] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:44:46.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:44:46.571 [DEBUG] [Thread-136389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:44:46.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:44:46.573 [DEBUG] [Thread-136389] [transport.py] [_log()] userauth is OK
2026-02-11T21:44:46.573 [DEBUG] [Thread-136389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:44:46.573 [DEBUG] [Thread-136389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:44:46.574 [DEBUG] [Thread-136389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:44:46.574 [DEBUG] [Thread-136389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:44:46.612 [INFO] [Thread-136389] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:44:46.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:44:47.270 [DEBUG] [Thread-136389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:44:47.271 [DEBUG] [Thread-136389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:44:47.271 [DEBUG] [Thread-136389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:44:47.311 [DEBUG] [Thread-136389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:44:47.311 [DEBUG] [Thread-136389] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:44:47.315 [DEBUG] [Thread-136389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:44:47.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:44:47.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:44:47.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:44:47.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:44:47.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:44:47.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:44:47.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:44:47.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:44:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:44:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.822360 -999.00  +16.00  19.47     89  +14.30 1 3 1 3 1     0    0 1.60 -4.07 ----- 13.2 19.5 199.6 27.1 17.9 -4.9 17.6 -6.0 17.6 -5.9 17.9 -5.3
2026-02-11T21:44:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:44:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:44:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.822360
2026-02-11T21:44:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:44:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:44:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:44:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:44:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:44:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:44:18', tmtdew=1.23, humidity=92.14, cloud=0.0, wind=20.7, temperature=15.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:44:11.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:44:47.341 [DEBUG] [Thread-136389] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:44:47.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:44:47.445 [DEBUG] [Thread-136392] [transport.py] [_log()] starting thread (client mode): 0xa2d4e200
2026-02-11T21:44:47.445 [DEBUG] [Thread-136392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:44:47.459 [DEBUG] [Thread-136392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:44:47.459 [INFO] [Thread-136392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:44:47.466 [DEBUG] [Thread-136392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] client lang: <none>
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] server lang: <none>
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] kex follows: False
2026-02-11T21:44:47.467 [DEBUG] [Thread-136392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:44:47.468 [DEBUG] [Thread-136392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:44:47.468 [DEBUG] [Thread-136392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:44:47.468 [DEBUG] [Thread-136392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:44:47.468 [DEBUG] [Thread-136392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:44:47.468 [DEBUG] [Thread-136392] [transport.py] [_log()] Compression: none
2026-02-11T21:44:47.468 [DEBUG] [Thread-136392] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:44:47.531 [DEBUG] [Thread-136392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:44:47.531 [DEBUG] [Thread-136392] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:44:47.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:44:47.533 [DEBUG] [Thread-136392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:44:47.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:44:47.587 [DEBUG] [Thread-136392] [transport.py] [_log()] userauth is OK
2026-02-11T21:44:47.587 [DEBUG] [Thread-136392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:44:47.588 [DEBUG] [Thread-136392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:44:47.588 [DEBUG] [Thread-136392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:44:47.588 [DEBUG] [Thread-136392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:44:47.611 [INFO] [Thread-136392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:44:47.611 [DEBUG] [Thread-136394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:44:47.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:44:47.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:44:48.435 [DEBUG] [Thread-136392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:44:48.435 [DEBUG] [Thread-136392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:44:48.483 [DEBUG] [Thread-136392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:44:48.484 [DEBUG] [Thread-136392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:44:48.493 [DEBUG] [Thread-136392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:44:48.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:44:48.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:44:48.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:44:48.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:44:48.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:44:48.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:44:48.529 [DEBUG] [Thread-136392] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:45:02.661 [DEBUG] [Thread-136395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:45:17.699 [DEBUG] [Thread-136396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:45:18.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:45:18.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:45:18.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
2026-02-11T21:45:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 44, 53), 1.28, 92.14, 0.0, 26.5, 15.84, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:45:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:44:53
2026-02-11T21:45:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:45:20.901 [DEBUG] [Thread-136397] [transport.py] [_log()] starting thread (client mode): 0xa2d4c3a0
2026-02-11T21:45:20.901 [DEBUG] [Thread-136397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:45:20.921 [DEBUG] [Thread-136397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:45:20.921 [INFO] [Thread-136397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] client lang: <none>
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] server lang: <none>
2026-02-11T21:45:20.925 [DEBUG] [Thread-136397] [transport.py] [_log()] kex follows: False
2026-02-11T21:45:20.926 [DEBUG] [Thread-136397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:45:20.926 [DEBUG] [Thread-136397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:45:20.926 [DEBUG] [Thread-136397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:45:20.926 [DEBUG] [Thread-136397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:45:20.926 [DEBUG] [Thread-136397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:45:20.926 [DEBUG] [Thread-136397] [transport.py] [_log()] Compression: none
2026-02-11T21:45:20.926 [DEBUG] [Thread-136397] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:45:20.936 [DEBUG] [Thread-136397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:45:20.937 [DEBUG] [Thread-136397] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:45:20.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:45:20.938 [DEBUG] [Thread-136397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:45:20.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:45:20.940 [DEBUG] [Thread-136397] [transport.py] [_log()] userauth is OK
2026-02-11T21:45:20.941 [DEBUG] [Thread-136397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:45:20.941 [DEBUG] [Thread-136397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:45:20.941 [DEBUG] [Thread-136397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:45:20.941 [DEBUG] [Thread-136397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:45:20.966 [INFO] [Thread-136397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:45:20.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:45:21.581 [DEBUG] [Thread-136397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:45:21.581 [DEBUG] [Thread-136397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:45:21.582 [DEBUG] [Thread-136397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:45:21.622 [DEBUG] [Thread-136397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:45:21.623 [DEBUG] [Thread-136397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:45:21.626 [DEBUG] [Thread-136397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:45:21.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:45:21.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:45:21.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:45:21.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:45:21.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:45:21.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:45:21.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:45:21.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:45:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:45:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.822707 -999.00  +16.00  17.01     89  +14.30 1 3 1 3 1     0    0 1.63 -3.78 ----- 15.8 17.0 209.4 24.2 17.8 -7.2 17.6 -6.8 17.5 -7.4 17.9 -7.3
2026-02-11T21:45:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:45:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:45:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.822707
2026-02-11T21:45:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:45:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:45:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:45:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:45:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:45:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:44:53', tmtdew=1.28, humidity=92.14, cloud=0.0, wind=26.5, temperature=15.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:44:41.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:45:21.652 [DEBUG] [Thread-136397] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:45:21.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:45:21.745 [DEBUG] [Thread-136400] [transport.py] [_log()] starting thread (client mode): 0x9eb048e0
2026-02-11T21:45:21.746 [DEBUG] [Thread-136400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:45:21.762 [DEBUG] [Thread-136400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:45:21.762 [INFO] [Thread-136400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:45:21.772 [DEBUG] [Thread-136400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:45:21.772 [DEBUG] [Thread-136400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] client lang: <none>
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] server lang: <none>
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] kex follows: False
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:45:21.773 [DEBUG] [Thread-136400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:45:21.774 [DEBUG] [Thread-136400] [transport.py] [_log()] Compression: none
2026-02-11T21:45:21.774 [DEBUG] [Thread-136400] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:45:21.834 [DEBUG] [Thread-136400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:45:21.834 [DEBUG] [Thread-136400] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:45:21.835 [DEBUG] [Thread-136400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:45:21.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:45:21.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:45:21.894 [DEBUG] [Thread-136400] [transport.py] [_log()] userauth is OK
2026-02-11T21:45:21.895 [DEBUG] [Thread-136400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:45:21.895 [DEBUG] [Thread-136400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:45:21.895 [DEBUG] [Thread-136400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:45:21.895 [DEBUG] [Thread-136400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:45:21.913 [INFO] [Thread-136400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:45:21.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:45:21.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:45:22.796 [DEBUG] [Thread-136400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:45:22.796 [DEBUG] [Thread-136400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:45:22.844 [DEBUG] [Thread-136400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:45:22.845 [DEBUG] [Thread-136400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:45:22.854 [DEBUG] [Thread-136400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:45:22.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:45:22.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')
2026-02-11T21:45:22.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
2026-02-11T21:45:22.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:45:22.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:45:22.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:45:22.893 [DEBUG] [Thread-136400] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:45:32.733 [DEBUG] [Thread-136402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:45:33.126 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:45:33.126 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:45:44.012 [DEBUG] [Thread-136403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:45:47.776 [DEBUG] [Thread-136404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:45:52.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:45:52.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:45:52.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:45:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 45, 29), 1.27, 92.16, 0.0, 26.18, 15.86, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:45:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:45:29
2026-02-11T21:45:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:45:55.285 [DEBUG] [Thread-136405] [transport.py] [_log()] starting thread (client mode): 0xa575ac80
2026-02-11T21:45:55.285 [DEBUG] [Thread-136405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:45:55.304 [DEBUG] [Thread-136405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:45:55.305 [INFO] [Thread-136405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] client lang: <none>
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] server lang: <none>
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] kex follows: False
2026-02-11T21:45:55.308 [DEBUG] [Thread-136405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:45:55.309 [DEBUG] [Thread-136405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:45:55.309 [DEBUG] [Thread-136405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:45:55.309 [DEBUG] [Thread-136405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:45:55.309 [DEBUG] [Thread-136405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:45:55.309 [DEBUG] [Thread-136405] [transport.py] [_log()] Compression: none
2026-02-11T21:45:55.309 [DEBUG] [Thread-136405] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:45:55.325 [DEBUG] [Thread-136405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:45:55.325 [DEBUG] [Thread-136405] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:45:55.326 [DEBUG] [Thread-136405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:45:55.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:45:55.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:45:55.328 [DEBUG] [Thread-136405] [transport.py] [_log()] userauth is OK
2026-02-11T21:45:55.328 [DEBUG] [Thread-136405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:45:55.328 [DEBUG] [Thread-136405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:45:55.328 [DEBUG] [Thread-136405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:45:55.328 [DEBUG] [Thread-136405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:45:55.343 [INFO] [Thread-136405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:45:55.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:45:55.962 [DEBUG] [Thread-136405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:45:55.962 [DEBUG] [Thread-136405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:45:55.963 [DEBUG] [Thread-136405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:45:56.004 [DEBUG] [Thread-136405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:45:56.004 [DEBUG] [Thread-136405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:45:56.007 [DEBUG] [Thread-136405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:45:56.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:45:56.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:45:56.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:45:56.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:45:56.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:45:56.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:45:56.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:45:56.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:45:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:45:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.823402 -999.00  +15.90  15.43     89  +14.20 1 3 1 3 1     0    0 1.63 -3.59 ----- 18.4 15.4 197.4 26.3 17.8 -5.1 17.6 -4.8 17.5 -3.9 17.8 -5.1
2026-02-11T21:45:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:45:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:45:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.823402
2026-02-11T21:45:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:45:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:45:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:45:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:45:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:45:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:45:29', tmtdew=1.27, humidity=92.16, cloud=0.0, wind=26.18, temperature=15.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:45:41.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:45:56.037 [DEBUG] [Thread-136405] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:45:56.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:45:56.134 [DEBUG] [Thread-136408] [transport.py] [_log()] starting thread (client mode): 0xa5759930
2026-02-11T21:45:56.134 [DEBUG] [Thread-136408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:45:56.148 [DEBUG] [Thread-136408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:45:56.149 [INFO] [Thread-136408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:45:56.156 [DEBUG] [Thread-136408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:45:56.156 [DEBUG] [Thread-136408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:45:56.156 [DEBUG] [Thread-136408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:45:56.156 [DEBUG] [Thread-136408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] client lang: <none>
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] server lang: <none>
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] kex follows: False
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] Compression: none
2026-02-11T21:45:56.157 [DEBUG] [Thread-136408] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:45:56.214 [DEBUG] [Thread-136408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:45:56.214 [DEBUG] [Thread-136408] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:45:56.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:45:56.216 [DEBUG] [Thread-136408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:45:56.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:45:56.270 [DEBUG] [Thread-136408] [transport.py] [_log()] userauth is OK
2026-02-11T21:45:56.270 [DEBUG] [Thread-136408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:45:56.270 [DEBUG] [Thread-136408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:45:56.271 [DEBUG] [Thread-136408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:45:56.271 [DEBUG] [Thread-136408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:45:56.289 [INFO] [Thread-136408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:45:56.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:45:56.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:45:57.110 [DEBUG] [Thread-136408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:45:57.111 [DEBUG] [Thread-136408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:45:57.158 [DEBUG] [Thread-136408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:45:57.159 [DEBUG] [Thread-136408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:45:57.168 [DEBUG] [Thread-136408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:45:57.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:45:57.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:45:57.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
2026-02-11T21:45:57.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:45:57.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:45:57.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:45:57.204 [DEBUG] [Thread-136408] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:46:02.813 [DEBUG] [Thread-136410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:46:17.864 [DEBUG] [Thread-136411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:46:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:46:27.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:46:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:46:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 46, 5), 1.28, 92.12, 0.0, 24.3, 15.84, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:46:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:46:05
2026-02-11T21:46:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:46:29.883 [DEBUG] [Thread-136412] [transport.py] [_log()] starting thread (client mode): 0xa2d4cf10
2026-02-11T21:46:29.883 [DEBUG] [Thread-136412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:46:29.904 [DEBUG] [Thread-136412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:46:29.905 [INFO] [Thread-136412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] client lang: <none>
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] server lang: <none>
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] kex follows: False
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] Compression: none
2026-02-11T21:46:29.908 [DEBUG] [Thread-136412] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:46:29.924 [DEBUG] [Thread-136412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:46:29.924 [DEBUG] [Thread-136412] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:46:29.925 [DEBUG] [Thread-136412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:46:29.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:46:29.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:46:29.927 [DEBUG] [Thread-136412] [transport.py] [_log()] userauth is OK
2026-02-11T21:46:29.927 [DEBUG] [Thread-136412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:46:29.927 [DEBUG] [Thread-136412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:46:29.927 [DEBUG] [Thread-136412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:46:29.927 [DEBUG] [Thread-136412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:46:29.948 [INFO] [Thread-136412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:46:29.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:46:30.587 [DEBUG] [Thread-136412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:46:30.587 [DEBUG] [Thread-136412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:46:30.588 [DEBUG] [Thread-136412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:46:30.627 [DEBUG] [Thread-136412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:46:30.628 [DEBUG] [Thread-136412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:46:30.631 [DEBUG] [Thread-136412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:46:30.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:46:30.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:46:30.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:46:30.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:46:30.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:46:30.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:46:30.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:46:30.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:46:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:46:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.823749 -999.00  +16.00  17.53     89  +14.30 1 3 1 3 1     0    0 1.62 -3.17 ----- 17.0 17.5 202.2 20.0 17.8 -3.6 17.6 -3.2 17.6 -3.3 17.9 -3.6
2026-02-11T21:46:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:46:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:46:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.823749
2026-02-11T21:46:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:46:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:46:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:46:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:46:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:46:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:46:05', tmtdew=1.28, humidity=92.12, cloud=0.0, wind=24.3, temperature=15.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:46:11.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:46:30.659 [DEBUG] [Thread-136412] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:46:30.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:46:30.756 [DEBUG] [Thread-136415] [transport.py] [_log()] starting thread (client mode): 0xa5758ca0
2026-02-11T21:46:30.756 [DEBUG] [Thread-136415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:46:30.770 [DEBUG] [Thread-136415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:46:30.770 [INFO] [Thread-136415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:46:30.778 [DEBUG] [Thread-136415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:46:30.778 [DEBUG] [Thread-136415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:46:30.778 [DEBUG] [Thread-136415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:46:30.778 [DEBUG] [Thread-136415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:46:30.778 [DEBUG] [Thread-136415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:46:30.778 [DEBUG] [Thread-136415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:46:30.778 [DEBUG] [Thread-136415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] client lang: <none>
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] server lang: <none>
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] kex follows: False
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] Compression: none
2026-02-11T21:46:30.779 [DEBUG] [Thread-136415] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:46:30.835 [DEBUG] [Thread-136415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:46:30.835 [DEBUG] [Thread-136415] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:46:30.836 [DEBUG] [Thread-136415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:46:30.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:46:30.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:46:30.892 [DEBUG] [Thread-136415] [transport.py] [_log()] userauth is OK
2026-02-11T21:46:30.893 [DEBUG] [Thread-136415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:46:30.893 [DEBUG] [Thread-136415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:46:30.893 [DEBUG] [Thread-136415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:46:30.893 [DEBUG] [Thread-136415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:46:30.912 [INFO] [Thread-136415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:46:30.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:46:30.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:46:31.760 [DEBUG] [Thread-136415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:46:31.760 [DEBUG] [Thread-136415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:46:31.808 [DEBUG] [Thread-136415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:46:31.809 [DEBUG] [Thread-136415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:46:31.818 [DEBUG] [Thread-136415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:46:31.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:46:31.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')
2026-02-11T21:46:31.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:46:31.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:46:31.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:46:31.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:46:31.854 [DEBUG] [Thread-136415] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:46:32.898 [DEBUG] [Thread-136417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:46:33.330 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:46:33.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:46:44.083 [DEBUG] [Thread-136418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:46:47.945 [DEBUG] [Thread-136419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:47:01.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:47:01.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:47:01.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:47:02.981 [DEBUG] [Thread-136420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:47:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 46, 42), 1.76, 89.22, 0.0, 24.28, 16.28, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:47:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:46:42
2026-02-11T21:47:04.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:47:04.292 [DEBUG] [Thread-136421] [transport.py] [_log()] starting thread (client mode): 0x9eb07fa0
2026-02-11T21:47:04.292 [DEBUG] [Thread-136421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:47:04.313 [DEBUG] [Thread-136421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:47:04.313 [INFO] [Thread-136421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:47:04.316 [DEBUG] [Thread-136421] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:47:04.316 [DEBUG] [Thread-136421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:47:04.316 [DEBUG] [Thread-136421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:47:04.316 [DEBUG] [Thread-136421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:04.316 [DEBUG] [Thread-136421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:04.316 [DEBUG] [Thread-136421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] client lang: <none>
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] server lang: <none>
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] kex follows: False
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] Compression: none
2026-02-11T21:47:04.317 [DEBUG] [Thread-136421] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:47:04.338 [DEBUG] [Thread-136421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:47:04.338 [DEBUG] [Thread-136421] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:47:04.339 [DEBUG] [Thread-136421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:47:04.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:47:04.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:47:04.341 [DEBUG] [Thread-136421] [transport.py] [_log()] userauth is OK
2026-02-11T21:47:04.341 [DEBUG] [Thread-136421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:47:04.341 [DEBUG] [Thread-136421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:47:04.341 [DEBUG] [Thread-136421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:47:04.341 [DEBUG] [Thread-136421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:47:04.376 [INFO] [Thread-136421] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:47:04.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:47:04.969 [DEBUG] [Thread-136421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:47:04.969 [DEBUG] [Thread-136421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:47:04.969 [DEBUG] [Thread-136421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:47:05.010 [DEBUG] [Thread-136421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:47:05.011 [DEBUG] [Thread-136421] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:47:05.014 [DEBUG] [Thread-136421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:47:05.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:47:05.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:47:05.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:47:05.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:47:05.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:47:05.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:47:05.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:47:05.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:47:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:47:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.824096 -999.00  +16.00  20.17     89  +14.30 1 3 1 3 1     0    0 1.64 -3.24 ----- 16.8 20.2 198.4 24.0 17.8 -3.7 17.6 -4.1 17.5 -3.3 17.9 -3.6
2026-02-11T21:47:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:47:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:47:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.824096
2026-02-11T21:47:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:47:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:47:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:47:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:47:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:47:05.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:46:42', tmtdew=1.76, humidity=89.22, cloud=0.0, wind=24.28, temperature=16.28, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:46:41.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:47:05.043 [DEBUG] [Thread-136421] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:47:05.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:47:05.139 [DEBUG] [Thread-136424] [transport.py] [_log()] starting thread (client mode): 0xa2d06380
2026-02-11T21:47:05.139 [DEBUG] [Thread-136424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:47:05.154 [DEBUG] [Thread-136424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:47:05.154 [INFO] [Thread-136424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] client lang: <none>
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] server lang: <none>
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] kex follows: False
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:47:05.162 [DEBUG] [Thread-136424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:47:05.163 [DEBUG] [Thread-136424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:47:05.163 [DEBUG] [Thread-136424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:47:05.163 [DEBUG] [Thread-136424] [transport.py] [_log()] Compression: none
2026-02-11T21:47:05.163 [DEBUG] [Thread-136424] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:47:05.221 [DEBUG] [Thread-136424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:47:05.222 [DEBUG] [Thread-136424] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:47:05.222 [DEBUG] [Thread-136424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:47:05.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:47:05.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:47:05.277 [DEBUG] [Thread-136424] [transport.py] [_log()] userauth is OK
2026-02-11T21:47:05.277 [DEBUG] [Thread-136424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:47:05.278 [DEBUG] [Thread-136424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:47:05.278 [DEBUG] [Thread-136424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:47:05.278 [DEBUG] [Thread-136424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:47:05.297 [INFO] [Thread-136424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:47:05.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:47:05.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:47:06.182 [DEBUG] [Thread-136424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:47:06.182 [DEBUG] [Thread-136424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:47:06.234 [DEBUG] [Thread-136424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:47:06.234 [DEBUG] [Thread-136424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:47:06.245 [DEBUG] [Thread-136424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:47:06.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:47:06.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:47:06.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:47:06.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:47:06.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:47:06.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:47:06.291 [DEBUG] [Thread-136424] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:47:18.014 [DEBUG] [Thread-136426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:47:33.063 [DEBUG] [Thread-136427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:47:33.532 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:47:33.533 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:47:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:47:36.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:47:36.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:47:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 47, 17), 1.23, 92.09, 0.0, 23.5, 15.84, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:47:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:47:17
2026-02-11T21:47:38.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:47:38.589 [DEBUG] [Thread-136428] [transport.py] [_log()] starting thread (client mode): 0xa2d05600
2026-02-11T21:47:38.589 [DEBUG] [Thread-136428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:47:38.609 [DEBUG] [Thread-136428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:47:38.609 [INFO] [Thread-136428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] client lang: <none>
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] server lang: <none>
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] kex follows: False
2026-02-11T21:47:38.613 [DEBUG] [Thread-136428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:47:38.614 [DEBUG] [Thread-136428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:47:38.614 [DEBUG] [Thread-136428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:47:38.614 [DEBUG] [Thread-136428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:47:38.614 [DEBUG] [Thread-136428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:47:38.614 [DEBUG] [Thread-136428] [transport.py] [_log()] Compression: none
2026-02-11T21:47:38.614 [DEBUG] [Thread-136428] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:47:38.629 [DEBUG] [Thread-136428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:47:38.629 [DEBUG] [Thread-136428] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:47:38.630 [DEBUG] [Thread-136428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:47:38.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:47:38.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:47:38.632 [DEBUG] [Thread-136428] [transport.py] [_log()] userauth is OK
2026-02-11T21:47:38.632 [DEBUG] [Thread-136428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:47:38.632 [DEBUG] [Thread-136428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:47:38.632 [DEBUG] [Thread-136428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:47:38.632 [DEBUG] [Thread-136428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:47:38.668 [INFO] [Thread-136428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:47:38.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:47:39.317 [DEBUG] [Thread-136428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:47:39.317 [DEBUG] [Thread-136428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:47:39.318 [DEBUG] [Thread-136428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:47:39.359 [DEBUG] [Thread-136428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:47:39.359 [DEBUG] [Thread-136428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:47:39.361 [DEBUG] [Thread-136428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:47:39.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:47:39.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:47:39.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:47:39.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:47:39.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:47:39.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:47:39.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:47:39.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:47:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:47:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.824443 -999.00  +16.00  13.41     89  +14.40 1 3 1 3 1     0    0 1.63 -3.36 ----- 13.4 13.4 204.9 20.4 17.8 -3.8 17.6 -4.0 17.5 -3.3 17.8 -3.6
2026-02-11T21:47:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:47:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:47:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.824443
2026-02-11T21:47:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:47:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:47:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:47:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:47:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:47:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:47:17', tmtdew=1.23, humidity=92.09, cloud=0.0, wind=23.5, temperature=15.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:47:11.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.7047499999999998, 2.108250000000001, 1.9362500000000002, nan, nan, nan, nan, nan, 2.516499999999999, 1.8650000000000002, 1.1807499999999997, 2.6784999999999997, nan, nan, nan, nan, nan, 1.1265, 0.6309999999999993, 1.475249999999999, nan, nan, nan, nan, nan, 0.9205000000000005, 0.63375, 1.3559999999999999, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:47:39.385 [DEBUG] [Thread-136428] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:47:39.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:47:39.481 [DEBUG] [Thread-136431] [transport.py] [_log()] starting thread (client mode): 0xa2d5cbe0
2026-02-11T21:47:39.481 [DEBUG] [Thread-136431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:47:39.495 [DEBUG] [Thread-136431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:47:39.496 [INFO] [Thread-136431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:47:39.503 [DEBUG] [Thread-136431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:47:39.503 [DEBUG] [Thread-136431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:47:39.503 [DEBUG] [Thread-136431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] client lang: <none>
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] server lang: <none>
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] kex follows: False
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] Compression: none
2026-02-11T21:47:39.504 [DEBUG] [Thread-136431] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:47:39.562 [DEBUG] [Thread-136431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:47:39.562 [DEBUG] [Thread-136431] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:47:39.563 [DEBUG] [Thread-136431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:47:39.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:47:39.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:47:39.618 [DEBUG] [Thread-136431] [transport.py] [_log()] userauth is OK
2026-02-11T21:47:39.618 [DEBUG] [Thread-136431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:47:39.618 [DEBUG] [Thread-136431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:47:39.618 [DEBUG] [Thread-136431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:47:39.619 [DEBUG] [Thread-136431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:47:39.636 [INFO] [Thread-136431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:47:39.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:47:39.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:47:40.445 [DEBUG] [Thread-136431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:47:40.445 [DEBUG] [Thread-136431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:47:40.493 [DEBUG] [Thread-136431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:47:40.493 [DEBUG] [Thread-136431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:47:40.501 [DEBUG] [Thread-136431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:47:40.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:47:40.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:47:40.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:47:40.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:47:40.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:47:40.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:47:40.536 [DEBUG] [Thread-136431] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:47:44.144 [DEBUG] [Thread-136433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:47:48.098 [DEBUG] [Thread-136434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:03.149 [DEBUG] [Thread-136435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:48:10.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:48: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
2026-02-11T21:48:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 47, 53), 1.23, 92.12, 0.0, 20.4, 15.89, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:48:12.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:47:53
2026-02-11T21:48:12.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:48:12.986 [DEBUG] [Thread-136436] [transport.py] [_log()] starting thread (client mode): 0xa2d05c90
2026-02-11T21:48:12.986 [DEBUG] [Thread-136436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:48:13.002 [DEBUG] [Thread-136436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:48:13.002 [INFO] [Thread-136436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:48:13.005 [DEBUG] [Thread-136436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:48:13.005 [DEBUG] [Thread-136436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:48:13.005 [DEBUG] [Thread-136436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:48:13.005 [DEBUG] [Thread-136436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] client lang: <none>
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] server lang: <none>
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] kex follows: False
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] Compression: none
2026-02-11T21:48:13.006 [DEBUG] [Thread-136436] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:48:13.022 [DEBUG] [Thread-136436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:48:13.023 [DEBUG] [Thread-136436] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:48:13.023 [DEBUG] [Thread-136436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:48:13.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:48:13.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:48:13.025 [DEBUG] [Thread-136436] [transport.py] [_log()] userauth is OK
2026-02-11T21:48:13.025 [DEBUG] [Thread-136436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:48:13.025 [DEBUG] [Thread-136436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:48:13.025 [DEBUG] [Thread-136436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:48:13.025 [DEBUG] [Thread-136436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:48:13.044 [INFO] [Thread-136436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:48:13.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:48:13.693 [DEBUG] [Thread-136436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:48:13.693 [DEBUG] [Thread-136436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:48:13.693 [DEBUG] [Thread-136436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:48:13.734 [DEBUG] [Thread-136436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:48:13.734 [DEBUG] [Thread-136436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:48:13.736 [DEBUG] [Thread-136436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:48:13.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:48:13.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:48:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:48:13.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:48:13.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:48:13.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:48:13.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.824790 -999.00  +16.00  14.75     89  +14.30 1 3 1 3 1     0    0 1.66 -3.36 ----- 11.2 14.8 202.6 23.5 17.8 -3.3 17.7 -3.7 17.6 -3.5 17.9 -3.4
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.824790
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:48:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:47:53', tmtdew=1.23, humidity=92.12, cloud=0.0, wind=20.4, temperature=15.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:47:41.856', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:48:13.755 [DEBUG] [Thread-136436] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:48:13.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:48:13.840 [DEBUG] [Thread-136439] [transport.py] [_log()] starting thread (client mode): 0xa2d04940
2026-02-11T21:48:13.841 [DEBUG] [Thread-136439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:48:13.855 [DEBUG] [Thread-136439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:48:13.855 [INFO] [Thread-136439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:48:13.862 [DEBUG] [Thread-136439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:48:13.862 [DEBUG] [Thread-136439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:48:13.862 [DEBUG] [Thread-136439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:48:13.862 [DEBUG] [Thread-136439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] client lang: <none>
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] server lang: <none>
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] kex follows: False
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] Compression: none
2026-02-11T21:48:13.863 [DEBUG] [Thread-136439] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:48:13.920 [DEBUG] [Thread-136439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:48:13.920 [DEBUG] [Thread-136439] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:48:13.921 [DEBUG] [Thread-136439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:48:13.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:48:13.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:48:13.976 [DEBUG] [Thread-136439] [transport.py] [_log()] userauth is OK
2026-02-11T21:48:13.976 [DEBUG] [Thread-136439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:48:13.976 [DEBUG] [Thread-136439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:48:13.976 [DEBUG] [Thread-136439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:48:13.977 [DEBUG] [Thread-136439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:48:13.995 [INFO] [Thread-136439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:48:13.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:48:13.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:48:14.823 [DEBUG] [Thread-136439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:48:14.824 [DEBUG] [Thread-136439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:48:14.871 [DEBUG] [Thread-136439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:48:14.872 [DEBUG] [Thread-136439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:48:14.881 [DEBUG] [Thread-136439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:48:14.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:48:14.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')
2026-02-11T21:48:14.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:48:14.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:48:14.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:48:14.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:48:14.918 [DEBUG] [Thread-136439] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:48:18.186 [DEBUG] [Thread-136441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:33.237 [DEBUG] [Thread-136442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:33.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:33.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:44.223 [DEBUG] [Thread-136443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:44.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:48:44.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:48:44.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
2026-02-11T21:48:46.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 48, 29), 1.24, 92.09, 0.0, 21.23, 15.91, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:48:46.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:48:29
2026-02-11T21:48:47.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:48:47.342 [DEBUG] [Thread-136444] [transport.py] [_log()] starting thread (client mode): 0xa5759120
2026-02-11T21:48:47.342 [DEBUG] [Thread-136444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:48:47.357 [DEBUG] [Thread-136444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:48:47.358 [INFO] [Thread-136444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] client lang: <none>
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] server lang: <none>
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] kex follows: False
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:48:47.361 [DEBUG] [Thread-136444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:48:47.362 [DEBUG] [Thread-136444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:48:47.362 [DEBUG] [Thread-136444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:48:47.362 [DEBUG] [Thread-136444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:48:47.362 [DEBUG] [Thread-136444] [transport.py] [_log()] Compression: none
2026-02-11T21:48:47.362 [DEBUG] [Thread-136444] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:48:47.380 [DEBUG] [Thread-136444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:48:47.381 [DEBUG] [Thread-136444] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:48:47.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:48:47.382 [DEBUG] [Thread-136444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:48:47.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:48:47.383 [DEBUG] [Thread-136444] [transport.py] [_log()] userauth is OK
2026-02-11T21:48:47.384 [DEBUG] [Thread-136444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:48:47.384 [DEBUG] [Thread-136444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:48:47.384 [DEBUG] [Thread-136444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:48:47.384 [DEBUG] [Thread-136444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:48:47.399 [INFO] [Thread-136444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:48:47.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:48:48.187 [DEBUG] [Thread-136444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:48:48.187 [DEBUG] [Thread-136444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:48:48.188 [DEBUG] [Thread-136444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:48:48.227 [DEBUG] [Thread-136444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:48:48.228 [DEBUG] [Thread-136444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:48:48.231 [DEBUG] [Thread-136444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:48:48.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:48:48.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:48:48.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:48:48.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:48:48.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:48:48.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:48:48.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:48:48.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:48:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:48:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.825138 -999.00  +16.00  17.77     89  +14.30 1 3 1 3 1     0    0 1.64 -3.28 ----- 19.4 17.8 213.8 19.3 17.8 -3.4 17.6 -3.3 17.6 -3.2 17.9 -3.4
2026-02-11T21:48:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:48:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:48:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.825138
2026-02-11T21:48:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:48:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:48:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:48:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:48:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:48:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:48:29', tmtdew=1.24, humidity=92.09, cloud=0.0, wind=21.23, temperature=15.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:48:11.923', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:48:48.257 [DEBUG] [Thread-136444] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:48:48.274 [DEBUG] [Thread-136447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:48:48.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:48:48.353 [DEBUG] [Thread-136448] [transport.py] [_log()] starting thread (client mode): 0xa2d5d540
2026-02-11T21:48:48.354 [DEBUG] [Thread-136448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:48:48.368 [DEBUG] [Thread-136448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:48:48.368 [INFO] [Thread-136448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:48:48.375 [DEBUG] [Thread-136448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:48:48.375 [DEBUG] [Thread-136448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:48:48.375 [DEBUG] [Thread-136448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:48:48.375 [DEBUG] [Thread-136448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:48.375 [DEBUG] [Thread-136448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] client lang: <none>
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] server lang: <none>
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] kex follows: False
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] Compression: none
2026-02-11T21:48:48.376 [DEBUG] [Thread-136448] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:48:48.437 [DEBUG] [Thread-136448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:48:48.437 [DEBUG] [Thread-136448] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:48:48.438 [DEBUG] [Thread-136448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:48:48.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:48:48.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:48:48.495 [DEBUG] [Thread-136448] [transport.py] [_log()] userauth is OK
2026-02-11T21:48:48.495 [DEBUG] [Thread-136448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:48:48.496 [DEBUG] [Thread-136448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:48:48.496 [DEBUG] [Thread-136448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:48:48.496 [DEBUG] [Thread-136448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:48:48.516 [INFO] [Thread-136448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:48:48.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:48:48.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:48:49.373 [DEBUG] [Thread-136448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:48:49.373 [DEBUG] [Thread-136448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:48:49.420 [DEBUG] [Thread-136448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:48:49.420 [DEBUG] [Thread-136448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:48:49.429 [DEBUG] [Thread-136448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:48:49.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:48:49.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:48:49.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:48:49.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:48:49.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:48:49.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:48:49.466 [DEBUG] [Thread-136448] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:49:03.314 [DEBUG] [Thread-136450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:49:18.350 [DEBUG] [Thread-136451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:49:19.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:49:19.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:49:19.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
2026-02-11T21:49:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 49, 4), 1.23, 92.11, 0.0, 20.77, 15.84, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:49:21.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:49:04
2026-02-11T21:49:21.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:49:21.860 [DEBUG] [Thread-136452] [transport.py] [_log()] starting thread (client mode): 0xa2d05780
2026-02-11T21:49:21.861 [DEBUG] [Thread-136452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:49:21.881 [DEBUG] [Thread-136452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:49:21.881 [INFO] [Thread-136452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] client lang: <none>
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] server lang: <none>
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] kex follows: False
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:49:21.884 [DEBUG] [Thread-136452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:49:21.885 [DEBUG] [Thread-136452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:49:21.885 [DEBUG] [Thread-136452] [transport.py] [_log()] Compression: none
2026-02-11T21:49:21.885 [DEBUG] [Thread-136452] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:49:21.903 [DEBUG] [Thread-136452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:49:21.903 [DEBUG] [Thread-136452] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:49:21.904 [DEBUG] [Thread-136452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:49:21.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:49:21.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:49:21.906 [DEBUG] [Thread-136452] [transport.py] [_log()] userauth is OK
2026-02-11T21:49:21.906 [DEBUG] [Thread-136452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:49:21.906 [DEBUG] [Thread-136452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:49:21.906 [DEBUG] [Thread-136452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:49:21.907 [DEBUG] [Thread-136452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:49:21.931 [INFO] [Thread-136452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:49:21.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:49:22.553 [DEBUG] [Thread-136452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:49:22.554 [DEBUG] [Thread-136452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:49:22.554 [DEBUG] [Thread-136452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:49:22.595 [DEBUG] [Thread-136452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:49:22.595 [DEBUG] [Thread-136452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:49:22.598 [DEBUG] [Thread-136452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:49:22.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:49:22.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:49:22.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:49:22.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:49:22.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:49:22.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:49:22.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:49:22.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:49:22.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:49:22.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.825485 -999.00  +16.10  12.32     89  +14.40 1 3 1 3 1     0    0 1.62 -3.22 ----- 7.4 12.3 213.3 16.6 17.8 -3.4 17.7 -3.1 17.6 -3.2 17.9 -3.5
2026-02-11T21:49:22.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:49:22.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:49:22.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.825485
2026-02-11T21:49:22.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:49:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:49:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:49:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:49:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:49:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:49:04', tmtdew=1.23, humidity=92.11, cloud=0.0, wind=20.77, temperature=15.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:48:41.904', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:49:22.627 [DEBUG] [Thread-136452] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:49:22.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:49:22.721 [DEBUG] [Thread-136455] [transport.py] [_log()] starting thread (client mode): 0xa2d5e020
2026-02-11T21:49:22.721 [DEBUG] [Thread-136455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:49:22.735 [DEBUG] [Thread-136455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:49:22.736 [INFO] [Thread-136455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:49:22.743 [DEBUG] [Thread-136455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:49:22.743 [DEBUG] [Thread-136455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:49:22.743 [DEBUG] [Thread-136455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:49:22.743 [DEBUG] [Thread-136455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:22.743 [DEBUG] [Thread-136455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:22.743 [DEBUG] [Thread-136455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] client lang: <none>
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] server lang: <none>
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] kex follows: False
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] Compression: none
2026-02-11T21:49:22.744 [DEBUG] [Thread-136455] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:49:22.800 [DEBUG] [Thread-136455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:49:22.801 [DEBUG] [Thread-136455] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:49:22.802 [DEBUG] [Thread-136455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:49:22.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:49:22.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:49:22.857 [DEBUG] [Thread-136455] [transport.py] [_log()] userauth is OK
2026-02-11T21:49:22.857 [DEBUG] [Thread-136455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:49:22.857 [DEBUG] [Thread-136455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:49:22.857 [DEBUG] [Thread-136455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:49:22.857 [DEBUG] [Thread-136455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:49:22.879 [INFO] [Thread-136455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:49:22.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:49:22.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:49:23.703 [DEBUG] [Thread-136455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:49:23.703 [DEBUG] [Thread-136455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:49:23.751 [DEBUG] [Thread-136455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:49:23.752 [DEBUG] [Thread-136455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:49:23.761 [DEBUG] [Thread-136455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:49:23.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:49:23.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:49:23.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:49:23.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:49:23.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:49:23.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:49:23.798 [DEBUG] [Thread-136455] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:49:33.388 [DEBUG] [Thread-136457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:49:33.939 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:49:33.941 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:49:44.303 [DEBUG] [Thread-136458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:49:48.436 [DEBUG] [Thread-136459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:49:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:49:53.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:49:53.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:49:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 49, 39), 1.74, 89.38, 0.0, 26.25, 16.28, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:49:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:49:39
2026-02-11T21:49:56.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:49:56.170 [DEBUG] [Thread-136460] [transport.py] [_log()] starting thread (client mode): 0xa2d5ea40
2026-02-11T21:49:56.171 [DEBUG] [Thread-136460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:49:56.187 [DEBUG] [Thread-136460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:49:56.187 [INFO] [Thread-136460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] client lang: <none>
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] server lang: <none>
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] kex follows: False
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] Compression: none
2026-02-11T21:49:56.190 [DEBUG] [Thread-136460] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:49:56.206 [DEBUG] [Thread-136460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:49:56.206 [DEBUG] [Thread-136460] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:49:56.207 [DEBUG] [Thread-136460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:49:56.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:49:56.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:49:56.208 [DEBUG] [Thread-136460] [transport.py] [_log()] userauth is OK
2026-02-11T21:49:56.208 [DEBUG] [Thread-136460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:49:56.209 [DEBUG] [Thread-136460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:49:56.209 [DEBUG] [Thread-136460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:49:56.209 [DEBUG] [Thread-136460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:49:56.227 [INFO] [Thread-136460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:49:56.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:49:56.873 [DEBUG] [Thread-136460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:49:56.873 [DEBUG] [Thread-136460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:49:56.874 [DEBUG] [Thread-136460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:49:56.914 [DEBUG] [Thread-136460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:49:56.914 [DEBUG] [Thread-136460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:49:56.918 [DEBUG] [Thread-136460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:49:56.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:49:56.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:49:56.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:49:56.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:49:56.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:49:56.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:49:56.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:49:56.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:49:56.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:49:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.825832 -999.00  +16.10  16.71     89  +14.40 1 3 1 3 1     0    0 1.63 -3.05 ----- 17.1 16.7 210.1 21.3 17.9 -2.7 17.7 -2.7 17.6 -2.6 17.9 -2.7
2026-02-11T21:49:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:49:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:49:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.825832
2026-02-11T21:49:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:49:56.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:49:56.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:49:56.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:49:56.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:49:56.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:49:39', tmtdew=1.74, humidity=89.38, cloud=0.0, wind=26.25, temperature=16.28, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:49:11.885', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:49:56.946 [DEBUG] [Thread-136460] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:49:57.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:49:57.052 [DEBUG] [Thread-136463] [transport.py] [_log()] starting thread (client mode): 0xa57e1f90
2026-02-11T21:49:57.052 [DEBUG] [Thread-136463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:49:57.068 [DEBUG] [Thread-136463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:49:57.068 [INFO] [Thread-136463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:49:57.076 [DEBUG] [Thread-136463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:49:57.076 [DEBUG] [Thread-136463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:49:57.076 [DEBUG] [Thread-136463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:49:57.076 [DEBUG] [Thread-136463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] client lang: <none>
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] server lang: <none>
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] kex follows: False
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:49:57.077 [DEBUG] [Thread-136463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:49:57.078 [DEBUG] [Thread-136463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:49:57.078 [DEBUG] [Thread-136463] [transport.py] [_log()] Compression: none
2026-02-11T21:49:57.078 [DEBUG] [Thread-136463] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:49:57.135 [DEBUG] [Thread-136463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:49:57.135 [DEBUG] [Thread-136463] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:49:57.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:49:57.137 [DEBUG] [Thread-136463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:49:57.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:49:57.191 [DEBUG] [Thread-136463] [transport.py] [_log()] userauth is OK
2026-02-11T21:49:57.191 [DEBUG] [Thread-136463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:49:57.192 [DEBUG] [Thread-136463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:49:57.192 [DEBUG] [Thread-136463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:49:57.192 [DEBUG] [Thread-136463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:49:57.214 [INFO] [Thread-136463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:49:57.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:49:57.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:49:58.034 [DEBUG] [Thread-136463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:49:58.034 [DEBUG] [Thread-136463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:49:58.081 [DEBUG] [Thread-136463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:49:58.081 [DEBUG] [Thread-136463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:49:58.090 [DEBUG] [Thread-136463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:49:58.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:49:58.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:49:58.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:49:58.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:49:58.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:49:58.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:49:58.125 [DEBUG] [Thread-136463] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:50:03.468 [DEBUG] [Thread-136465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:50:18.554 [DEBUG] [Thread-136466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:50:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:50:28.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:50:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:50:30.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 50, 16), 1.26, 92.26, 0.0, 23.08, 15.92, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:50:30.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:50:16
2026-02-11T21:50:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:50:31.025 [DEBUG] [Thread-136467] [transport.py] [_log()] starting thread (client mode): 0xa57e0a00
2026-02-11T21:50:31.025 [DEBUG] [Thread-136467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:50:31.045 [DEBUG] [Thread-136467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:50:31.045 [INFO] [Thread-136467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] client lang: <none>
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] server lang: <none>
2026-02-11T21:50:31.048 [DEBUG] [Thread-136467] [transport.py] [_log()] kex follows: False
2026-02-11T21:50:31.049 [DEBUG] [Thread-136467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:50:31.049 [DEBUG] [Thread-136467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:50:31.049 [DEBUG] [Thread-136467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:50:31.049 [DEBUG] [Thread-136467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:50:31.049 [DEBUG] [Thread-136467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:50:31.049 [DEBUG] [Thread-136467] [transport.py] [_log()] Compression: none
2026-02-11T21:50:31.049 [DEBUG] [Thread-136467] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:50:31.068 [DEBUG] [Thread-136467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:50:31.069 [DEBUG] [Thread-136467] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:50:31.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:50:31.070 [DEBUG] [Thread-136467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:50:31.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:50:31.072 [DEBUG] [Thread-136467] [transport.py] [_log()] userauth is OK
2026-02-11T21:50:31.072 [DEBUG] [Thread-136467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:50:31.072 [DEBUG] [Thread-136467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:50:31.073 [DEBUG] [Thread-136467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:50:31.073 [DEBUG] [Thread-136467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:50:31.097 [INFO] [Thread-136467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:50:31.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:50:31.749 [DEBUG] [Thread-136467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:50:31.749 [DEBUG] [Thread-136467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:50:31.749 [DEBUG] [Thread-136467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:50:31.790 [DEBUG] [Thread-136467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:50:31.791 [DEBUG] [Thread-136467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:50:31.794 [DEBUG] [Thread-136467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:50:31.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:50:31.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:50:31.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:50:31.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:50:31.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:50:31.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:50:31.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:50:31.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:50:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:50:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.826526 -999.00  +16.00  20.04     89  +14.30 1 3 1 3 1     0    0 1.62 -2.79 ----- 17.3 20.0 194.2 24.6 17.9 -3.7 17.6 -3.6 17.6 -3.5 17.9 -3.5
2026-02-11T21:50:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:50:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:50:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.826526
2026-02-11T21:50:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:50:31.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:50:31.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:50:31.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:50:31.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:50:31.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:50:16', tmtdew=1.26, humidity=92.26, cloud=0.0, wind=23.08, temperature=15.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:50:11.846', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:50:31.823 [DEBUG] [Thread-136467] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:50:31.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:50:31.921 [DEBUG] [Thread-136470] [transport.py] [_log()] starting thread (client mode): 0xa2d9eaa0
2026-02-11T21:50:31.921 [DEBUG] [Thread-136470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:50:31.940 [DEBUG] [Thread-136470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:50:31.940 [INFO] [Thread-136470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:50:31.947 [DEBUG] [Thread-136470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] client lang: <none>
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] server lang: <none>
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] kex follows: False
2026-02-11T21:50:31.948 [DEBUG] [Thread-136470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:50:31.949 [DEBUG] [Thread-136470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:50:31.949 [DEBUG] [Thread-136470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:50:31.949 [DEBUG] [Thread-136470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:50:31.949 [DEBUG] [Thread-136470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:50:31.949 [DEBUG] [Thread-136470] [transport.py] [_log()] Compression: none
2026-02-11T21:50:31.949 [DEBUG] [Thread-136470] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:50:32.005 [DEBUG] [Thread-136470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:50:32.006 [DEBUG] [Thread-136470] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:50:32.006 [DEBUG] [Thread-136470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:50:32.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:50:32.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:50:32.061 [DEBUG] [Thread-136470] [transport.py] [_log()] userauth is OK
2026-02-11T21:50:32.061 [DEBUG] [Thread-136470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:50:32.061 [DEBUG] [Thread-136470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:50:32.061 [DEBUG] [Thread-136470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:50:32.061 [DEBUG] [Thread-136470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:50:32.079 [INFO] [Thread-136470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:50:32.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:50:32.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:50:32.939 [DEBUG] [Thread-136470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:50:32.940 [DEBUG] [Thread-136470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:50:32.987 [DEBUG] [Thread-136470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:50:32.987 [DEBUG] [Thread-136470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:50:32.996 [DEBUG] [Thread-136470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:50:33.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:50:33.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:50:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:50:33.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:50:33.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:50:33.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:50:33.030 [DEBUG] [Thread-136470] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:50:33.590 [DEBUG] [Thread-136472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:50:34.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:50:34.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:50:44.381 [DEBUG] [Thread-136473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:50:48.644 [DEBUG] [Thread-136474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:51:03.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:51:03.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:51:03.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:51:03.681 [DEBUG] [Thread-136475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:51:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 50, 52), 1.25, 92.27, 0.0, 23.98, 15.94, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:51:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:50:52
2026-02-11T21:51:05.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:51:05.496 [DEBUG] [Thread-136476] [transport.py] [_log()] starting thread (client mode): 0xa2d9ffa0
2026-02-11T21:51:05.496 [DEBUG] [Thread-136476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:51:05.517 [DEBUG] [Thread-136476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:51:05.517 [INFO] [Thread-136476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] client lang: <none>
2026-02-11T21:51:05.520 [DEBUG] [Thread-136476] [transport.py] [_log()] server lang: <none>
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] kex follows: False
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] Compression: none
2026-02-11T21:51:05.521 [DEBUG] [Thread-136476] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:51:05.538 [DEBUG] [Thread-136476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:51:05.539 [DEBUG] [Thread-136476] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:51:05.539 [DEBUG] [Thread-136476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:51:05.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:51:05.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:51:05.541 [DEBUG] [Thread-136476] [transport.py] [_log()] userauth is OK
2026-02-11T21:51:05.542 [DEBUG] [Thread-136476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:51:05.542 [DEBUG] [Thread-136476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:51:05.542 [DEBUG] [Thread-136476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:51:05.542 [DEBUG] [Thread-136476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:51:05.578 [INFO] [Thread-136476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:51:05.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:51:06.221 [DEBUG] [Thread-136476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:51:06.221 [DEBUG] [Thread-136476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:51:06.221 [DEBUG] [Thread-136476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:51:06.262 [DEBUG] [Thread-136476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:51:06.263 [DEBUG] [Thread-136476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:51:06.266 [DEBUG] [Thread-136476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:51:06.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:51:06.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:51:06.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:51:06.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:51:06.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:51:06.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:51:06.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:51:06.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:51:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:51:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.826874 -999.00  +16.00   8.56     89  +14.40 1 3 1 3 1     0    0 1.62 -2.76 ----- 9.4 8.6 206.4 21.3 17.9 -3.2 17.7 -3.1 17.6 -3.2 17.9 -3.3
2026-02-11T21:51:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:51:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:51:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.826874
2026-02-11T21:51:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:51:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:51:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:51:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:51:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:51:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:50:52', tmtdew=1.25, humidity=92.27, cloud=0.0, wind=23.98, temperature=15.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:50:41.914', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:51:06.295 [DEBUG] [Thread-136476] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:51:06.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:51:06.394 [DEBUG] [Thread-136479] [transport.py] [_log()] starting thread (client mode): 0xa2d044c0
2026-02-11T21:51:06.394 [DEBUG] [Thread-136479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:51:06.409 [DEBUG] [Thread-136479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:51:06.410 [INFO] [Thread-136479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:51:06.417 [DEBUG] [Thread-136479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] client lang: <none>
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] server lang: <none>
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] kex follows: False
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:51:06.418 [DEBUG] [Thread-136479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:51:06.419 [DEBUG] [Thread-136479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:51:06.419 [DEBUG] [Thread-136479] [transport.py] [_log()] Compression: none
2026-02-11T21:51:06.419 [DEBUG] [Thread-136479] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:51:06.476 [DEBUG] [Thread-136479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:51:06.477 [DEBUG] [Thread-136479] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:51:06.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:51:06.478 [DEBUG] [Thread-136479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:51:06.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:51:06.535 [DEBUG] [Thread-136479] [transport.py] [_log()] userauth is OK
2026-02-11T21:51:06.536 [DEBUG] [Thread-136479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:51:06.536 [DEBUG] [Thread-136479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:51:06.536 [DEBUG] [Thread-136479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:51:06.536 [DEBUG] [Thread-136479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:51:06.555 [INFO] [Thread-136479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:51:06.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:51:06.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:51:07.429 [DEBUG] [Thread-136479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:51:07.430 [DEBUG] [Thread-136479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:51:07.477 [DEBUG] [Thread-136479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:51:07.478 [DEBUG] [Thread-136479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:51:07.487 [DEBUG] [Thread-136479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:51:07.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:51:07.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:51:07.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:51:07.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:51:07.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:51:07.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:51:07.524 [DEBUG] [Thread-136479] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:51:18.722 [DEBUG] [Thread-136481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:51:33.781 [DEBUG] [Thread-136482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:51:34.351 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:51:34.352 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:51:37.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:51:37.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:51:37.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:51:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 51, 28), 1.26, 92.21, 0.0, 23.33, 15.89, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:51:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:51:28
2026-02-11T21:51:40.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:51:40.369 [DEBUG] [Thread-136483] [transport.py] [_log()] starting thread (client mode): 0xa57e0ac0
2026-02-11T21:51:40.369 [DEBUG] [Thread-136483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:51:40.389 [DEBUG] [Thread-136483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:51:40.390 [INFO] [Thread-136483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] client lang: <none>
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] server lang: <none>
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] kex follows: False
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:51:40.393 [DEBUG] [Thread-136483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:51:40.394 [DEBUG] [Thread-136483] [transport.py] [_log()] Compression: none
2026-02-11T21:51:40.394 [DEBUG] [Thread-136483] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:51:40.410 [DEBUG] [Thread-136483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:51:40.411 [DEBUG] [Thread-136483] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:51:40.411 [DEBUG] [Thread-136483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:51:40.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:51:40.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:51:40.413 [DEBUG] [Thread-136483] [transport.py] [_log()] userauth is OK
2026-02-11T21:51:40.413 [DEBUG] [Thread-136483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:51:40.413 [DEBUG] [Thread-136483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:51:40.414 [DEBUG] [Thread-136483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:51:40.414 [DEBUG] [Thread-136483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:51:40.432 [INFO] [Thread-136483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:51:40.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:51:41.180 [DEBUG] [Thread-136483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:51:41.180 [DEBUG] [Thread-136483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:51:41.181 [DEBUG] [Thread-136483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:51:41.221 [DEBUG] [Thread-136483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:51:41.222 [DEBUG] [Thread-136483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:51:41.225 [DEBUG] [Thread-136483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:51:41.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:51:41.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:51:41.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:51:41.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:51:41.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:51:41.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:51:41.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:51:41.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:51:41.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:51:41.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.827221 -999.00  +16.00  21.10     89  +14.40 1 3 1 3 1     0    0 1.64 -2.99 ----- 21.3 21.1 194.2 30.2 17.9 -2.8 17.7 -3.1 17.6 -2.6 17.9 -2.8
2026-02-11T21:51:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:51:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:51:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.827221
2026-02-11T21:51:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:51:41.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:51:41.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:51:41.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:51:41.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:51:41.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:51:28', tmtdew=1.26, humidity=92.21, cloud=0.0, wind=23.33, temperature=15.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:51:11.894', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:51:41.251 [DEBUG] [Thread-136483] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:51:41.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:51:41.347 [DEBUG] [Thread-136486] [transport.py] [_log()] starting thread (client mode): 0xa57e0ca0
2026-02-11T21:51:41.347 [DEBUG] [Thread-136486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:51:41.362 [DEBUG] [Thread-136486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:51:41.362 [INFO] [Thread-136486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:51:41.370 [DEBUG] [Thread-136486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] client lang: <none>
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] server lang: <none>
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] kex follows: False
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:51:41.371 [DEBUG] [Thread-136486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:51:41.372 [DEBUG] [Thread-136486] [transport.py] [_log()] Compression: none
2026-02-11T21:51:41.372 [DEBUG] [Thread-136486] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:51:41.434 [DEBUG] [Thread-136486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:51:41.435 [DEBUG] [Thread-136486] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:51:41.435 [DEBUG] [Thread-136486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:51:41.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:51:41.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:51:41.491 [DEBUG] [Thread-136486] [transport.py] [_log()] userauth is OK
2026-02-11T21:51:41.492 [DEBUG] [Thread-136486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:51:41.492 [DEBUG] [Thread-136486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:51:41.492 [DEBUG] [Thread-136486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:51:41.492 [DEBUG] [Thread-136486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:51:41.519 [INFO] [Thread-136486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:51:41.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:51:41.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:51:42.371 [DEBUG] [Thread-136486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:51:42.371 [DEBUG] [Thread-136486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:51:42.421 [DEBUG] [Thread-136486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:51:42.421 [DEBUG] [Thread-136486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:51:42.433 [DEBUG] [Thread-136486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:51:42.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:51:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:51:42.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:51:42.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:51:42.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:51:42.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:51:42.478 [DEBUG] [Thread-136486] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:51:44.457 [DEBUG] [Thread-136488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:51:48.818 [DEBUG] [Thread-136489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:03.876 [DEBUG] [Thread-136490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:52:12.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:52:12.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:52:14.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 52, 4), 1.26, 92.24, 0.0, 22.21, 15.91, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:52:14.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:52:04
2026-02-11T21:52:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:52:15.482 [DEBUG] [Thread-136491] [transport.py] [_log()] starting thread (client mode): 0xa2d04e80
2026-02-11T21:52:15.482 [DEBUG] [Thread-136491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:52:15.503 [DEBUG] [Thread-136491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:52:15.503 [INFO] [Thread-136491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:52:15.506 [DEBUG] [Thread-136491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:52:15.506 [DEBUG] [Thread-136491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:52:15.506 [DEBUG] [Thread-136491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:52:15.506 [DEBUG] [Thread-136491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] client lang: <none>
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] server lang: <none>
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] kex follows: False
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:52:15.507 [DEBUG] [Thread-136491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:52:15.508 [DEBUG] [Thread-136491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:52:15.508 [DEBUG] [Thread-136491] [transport.py] [_log()] Compression: none
2026-02-11T21:52:15.508 [DEBUG] [Thread-136491] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:52:15.529 [DEBUG] [Thread-136491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:52:15.530 [DEBUG] [Thread-136491] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:52:15.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:52:15.531 [DEBUG] [Thread-136491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:52:15.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:52:15.534 [DEBUG] [Thread-136491] [transport.py] [_log()] userauth is OK
2026-02-11T21:52:15.534 [DEBUG] [Thread-136491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:52:15.534 [DEBUG] [Thread-136491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:52:15.534 [DEBUG] [Thread-136491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:52:15.534 [DEBUG] [Thread-136491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:52:15.570 [INFO] [Thread-136491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:52:15.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:52:16.196 [DEBUG] [Thread-136491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:52:16.197 [DEBUG] [Thread-136491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:52:16.197 [DEBUG] [Thread-136491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:52:16.237 [DEBUG] [Thread-136491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:52:16.237 [DEBUG] [Thread-136491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:52:16.240 [DEBUG] [Thread-136491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:52:16.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:52:16.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:52:16.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:52:16.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:52:16.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:52:16.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:52:16.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:52:16.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:52:16.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:52:16.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.827568 -999.00  +16.00  19.50     89  +14.30 1 3 1 3 1     0    0 1.63 -2.68 ----- 17.6 19.5 197.3 24.5 17.9 -2.8 17.6 -2.5 17.6 -2.7 17.9 -2.8
2026-02-11T21:52:16.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:52:16.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:52:16.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.827568
2026-02-11T21:52:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:52:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:52:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:52:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:52:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:52:16.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:52:04', tmtdew=1.26, humidity=92.24, cloud=0.0, wind=22.21, temperature=15.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:51:41.875', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:52:16.267 [DEBUG] [Thread-136491] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:52:16.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:52:16.364 [DEBUG] [Thread-136494] [transport.py] [_log()] starting thread (client mode): 0xa2d06ce0
2026-02-11T21:52:16.364 [DEBUG] [Thread-136494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:52:16.378 [DEBUG] [Thread-136494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:52:16.379 [INFO] [Thread-136494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:52:16.386 [DEBUG] [Thread-136494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] client lang: <none>
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] server lang: <none>
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] kex follows: False
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:52:16.387 [DEBUG] [Thread-136494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:52:16.388 [DEBUG] [Thread-136494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:52:16.388 [DEBUG] [Thread-136494] [transport.py] [_log()] Compression: none
2026-02-11T21:52:16.388 [DEBUG] [Thread-136494] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:52:16.445 [DEBUG] [Thread-136494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:52:16.445 [DEBUG] [Thread-136494] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:52:16.446 [DEBUG] [Thread-136494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:52:16.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:52:16.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:52:16.501 [DEBUG] [Thread-136494] [transport.py] [_log()] userauth is OK
2026-02-11T21:52:16.501 [DEBUG] [Thread-136494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:52:16.502 [DEBUG] [Thread-136494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:52:16.502 [DEBUG] [Thread-136494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:52:16.502 [DEBUG] [Thread-136494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:52:16.520 [INFO] [Thread-136494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:52:16.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:52:16.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:52:17.343 [DEBUG] [Thread-136494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:52:17.343 [DEBUG] [Thread-136494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:52:17.391 [DEBUG] [Thread-136494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:52:17.391 [DEBUG] [Thread-136494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:52:17.401 [DEBUG] [Thread-136494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:52:17.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:52:17.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:52:17.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:52:17.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:52:17.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:52:17.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:52:17.438 [DEBUG] [Thread-136494] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:52:18.913 [DEBUG] [Thread-136496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:33.970 [DEBUG] [Thread-136497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:34.557 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:34.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:44.516 [DEBUG] [Thread-136498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:47.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:52:47.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:52:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:52:49.007 [DEBUG] [Thread-136499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:52:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 52, 40), 1.71, 89.51, 0.0, 22.23, 16.38, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:52:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:52:40
2026-02-11T21:52:49.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:52:49.844 [DEBUG] [Thread-136500] [transport.py] [_log()] starting thread (client mode): 0xa2d68af0
2026-02-11T21:52:49.845 [DEBUG] [Thread-136500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:52:49.866 [DEBUG] [Thread-136500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:52:49.866 [INFO] [Thread-136500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:52:49.869 [DEBUG] [Thread-136500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] client lang: <none>
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] server lang: <none>
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] kex follows: False
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] Compression: none
2026-02-11T21:52:49.870 [DEBUG] [Thread-136500] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:52:49.887 [DEBUG] [Thread-136500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:52:49.887 [DEBUG] [Thread-136500] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:52:49.888 [DEBUG] [Thread-136500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:52:49.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:52:49.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:52:49.890 [DEBUG] [Thread-136500] [transport.py] [_log()] userauth is OK
2026-02-11T21:52:49.890 [DEBUG] [Thread-136500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:52:49.890 [DEBUG] [Thread-136500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:52:49.890 [DEBUG] [Thread-136500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:52:49.891 [DEBUG] [Thread-136500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:52:49.914 [INFO] [Thread-136500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:52:49.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:52:50.524 [DEBUG] [Thread-136500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:52:50.534 [DEBUG] [Thread-136500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:52:50.534 [DEBUG] [Thread-136500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:52:50.566 [DEBUG] [Thread-136500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:52:50.566 [DEBUG] [Thread-136500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:52:50.569 [DEBUG] [Thread-136500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:52:50.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:52:50.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:52:50.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:52:50.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:52:50.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:52:50.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:52:50.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:52:50.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:52:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:52:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.827915 -999.00  +16.00  15.73     89  +14.30 1 3 1 3 1     0    0 1.61 -2.59 ----- 15.2 15.7 195.2 30.7 17.8 -3.1 17.6 -3.7 17.5 -2.8 17.9 -3.0
2026-02-11T21:52:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:52:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:52:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.827915
2026-02-11T21:52:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:52:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:52:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:52:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:52:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:52:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:52:40', tmtdew=1.71, humidity=89.51, cloud=0.0, wind=22.23, temperature=16.38, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:52:11.856', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:52:50.599 [DEBUG] [Thread-136500] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:52:50.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:52:50.695 [DEBUG] [Thread-136503] [transport.py] [_log()] starting thread (client mode): 0xa57e1f90
2026-02-11T21:52:50.696 [DEBUG] [Thread-136503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:52:50.711 [DEBUG] [Thread-136503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:52:50.711 [INFO] [Thread-136503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] client lang: <none>
2026-02-11T21:52:50.719 [DEBUG] [Thread-136503] [transport.py] [_log()] server lang: <none>
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] kex follows: False
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] Compression: none
2026-02-11T21:52:50.720 [DEBUG] [Thread-136503] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:52:50.777 [DEBUG] [Thread-136503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:52:50.777 [DEBUG] [Thread-136503] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:52:50.778 [DEBUG] [Thread-136503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:52:50.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:52:50.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:52:50.836 [DEBUG] [Thread-136503] [transport.py] [_log()] userauth is OK
2026-02-11T21:52:50.836 [DEBUG] [Thread-136503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:52:50.836 [DEBUG] [Thread-136503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:52:50.836 [DEBUG] [Thread-136503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:52:50.836 [DEBUG] [Thread-136503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:52:50.859 [INFO] [Thread-136503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:52:50.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:52:50.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:52:51.706 [DEBUG] [Thread-136503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:52:51.706 [DEBUG] [Thread-136503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:52:51.754 [DEBUG] [Thread-136503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:52:51.755 [DEBUG] [Thread-136503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:52:51.764 [DEBUG] [Thread-136503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:52:51.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:52:51.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:52:51.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:52:51.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:52:51.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:52:51.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:52:51.798 [DEBUG] [Thread-136503] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:53:04.040 [DEBUG] [Thread-136505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:53:19.100 [DEBUG] [Thread-136506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:53:21.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:53:21.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:53:21.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:53:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 53, 16), 1.27, 92.21, 0.0, 24.21, 15.87, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:53:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:53:16
2026-02-11T21:53:23.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:53:24.125 [DEBUG] [Thread-136507] [transport.py] [_log()] starting thread (client mode): 0xa2d054e0
2026-02-11T21:53:24.125 [DEBUG] [Thread-136507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:53:24.140 [DEBUG] [Thread-136507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:53:24.141 [INFO] [Thread-136507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:53:24.143 [DEBUG] [Thread-136507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] client lang: <none>
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] server lang: <none>
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] kex follows: False
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:53:24.144 [DEBUG] [Thread-136507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:53:24.145 [DEBUG] [Thread-136507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:53:24.145 [DEBUG] [Thread-136507] [transport.py] [_log()] Compression: none
2026-02-11T21:53:24.145 [DEBUG] [Thread-136507] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:53:24.163 [DEBUG] [Thread-136507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:53:24.164 [DEBUG] [Thread-136507] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:53:24.164 [DEBUG] [Thread-136507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:53:24.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:53:24.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:53:24.166 [DEBUG] [Thread-136507] [transport.py] [_log()] userauth is OK
2026-02-11T21:53:24.167 [DEBUG] [Thread-136507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:53:24.167 [DEBUG] [Thread-136507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:53:24.167 [DEBUG] [Thread-136507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:53:24.167 [DEBUG] [Thread-136507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:53:24.192 [INFO] [Thread-136507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:53:24.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:53:24.849 [DEBUG] [Thread-136507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:53:24.850 [DEBUG] [Thread-136507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:53:24.850 [DEBUG] [Thread-136507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:53:24.891 [DEBUG] [Thread-136507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:53:24.891 [DEBUG] [Thread-136507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:53:24.894 [DEBUG] [Thread-136507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:53:24.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:53:24.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:53:24.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:53:24.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:53:24.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:53:24.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:53:24.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:53:24.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:53:24.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:53:24.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.828263 -999.00  +16.00  16.85     89  +14.40 1 3 1 3 1     0    0 1.63 -2.61 ----- 15.2 16.9 200.8 21.2 17.8 -2.9 17.6 -3.3 17.6 -3.0 17.9 -2.8
2026-02-11T21:53:24.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:53:24.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:53:24.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.828263
2026-02-11T21:53:24.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:53:24.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:53:24.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:53:24.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:53:24.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:53:24.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:53:16', tmtdew=1.27, humidity=92.21, cloud=0.0, wind=24.21, temperature=15.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:52:41.923', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:53:24.921 [DEBUG] [Thread-136507] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:53:25.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:53:25.016 [DEBUG] [Thread-136510] [transport.py] [_log()] starting thread (client mode): 0xa2d69d50
2026-02-11T21:53:25.016 [DEBUG] [Thread-136510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:53:25.030 [DEBUG] [Thread-136510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:53:25.030 [INFO] [Thread-136510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] client lang: <none>
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] server lang: <none>
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] kex follows: False
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:53:25.038 [DEBUG] [Thread-136510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:53:25.039 [DEBUG] [Thread-136510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:53:25.039 [DEBUG] [Thread-136510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:53:25.039 [DEBUG] [Thread-136510] [transport.py] [_log()] Compression: none
2026-02-11T21:53:25.039 [DEBUG] [Thread-136510] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:53:25.099 [DEBUG] [Thread-136510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:53:25.099 [DEBUG] [Thread-136510] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:53:25.100 [DEBUG] [Thread-136510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:53:25.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:53:25.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:53:25.155 [DEBUG] [Thread-136510] [transport.py] [_log()] userauth is OK
2026-02-11T21:53:25.155 [DEBUG] [Thread-136510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:53:25.155 [DEBUG] [Thread-136510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:53:25.155 [DEBUG] [Thread-136510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:53:25.155 [DEBUG] [Thread-136510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:53:25.174 [INFO] [Thread-136510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:53:25.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:53:25.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:53:26.014 [DEBUG] [Thread-136510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:53:26.014 [DEBUG] [Thread-136510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:53:26.062 [DEBUG] [Thread-136510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:53:26.063 [DEBUG] [Thread-136510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:53:26.072 [DEBUG] [Thread-136510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:53:26.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:53:26.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:53:26.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:53:26.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:53:26.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:53:26.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:53:26.109 [DEBUG] [Thread-136510] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:53:34.135 [DEBUG] [Thread-136512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:53:34.757 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:53:34.758 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:53:44.573 [DEBUG] [Thread-136513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:53:49.189 [DEBUG] [Thread-136514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:53:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:53:56.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:53:56.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:53:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 53, 16), 1.27, 92.21, 0.0, 24.21, 15.87, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:53:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:53:16
2026-02-11T21:53:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:53:58.424 [DEBUG] [Thread-136515] [transport.py] [_log()] starting thread (client mode): 0xa5758ca0
2026-02-11T21:53:58.424 [DEBUG] [Thread-136515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:53:58.444 [DEBUG] [Thread-136515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:53:58.444 [INFO] [Thread-136515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] client lang: <none>
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] server lang: <none>
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] kex follows: False
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] Compression: none
2026-02-11T21:53:58.446 [DEBUG] [Thread-136515] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:53:58.465 [DEBUG] [Thread-136515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:53:58.466 [DEBUG] [Thread-136515] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:53:58.476 [DEBUG] [Thread-136515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:53:58.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:53:58.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:53:58.478 [DEBUG] [Thread-136515] [transport.py] [_log()] userauth is OK
2026-02-11T21:53:58.478 [DEBUG] [Thread-136515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:53:58.478 [DEBUG] [Thread-136515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:53:58.479 [DEBUG] [Thread-136515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:53:58.479 [DEBUG] [Thread-136515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:53:58.504 [INFO] [Thread-136515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:53:58.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:53:59.101 [DEBUG] [Thread-136515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:53:59.102 [DEBUG] [Thread-136515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:53:59.102 [DEBUG] [Thread-136515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:53:59.142 [DEBUG] [Thread-136515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:53:59.143 [DEBUG] [Thread-136515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:53:59.146 [DEBUG] [Thread-136515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:53:59.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:53:59.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:53:59.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:53:59.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:53:59.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:53:59.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:53:59.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:53:59.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:53:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:53:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.828610 -999.00  +16.00  17.02     89  +14.30 1 3 1 3 1     0    0 1.62 -2.84 ----- 20.1 17.0 196.6 21.6 17.9 -3.4 17.7 -3.0 17.6 -3.4 17.9 -3.6
2026-02-11T21:53:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:53:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:53:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.828610
2026-02-11T21:53:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:53:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:53:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:53:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:53:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:53:59.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:53:16', tmtdew=1.27, humidity=92.21, cloud=0.0, wind=24.21, temperature=15.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:53:11.904', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:53:59.174 [DEBUG] [Thread-136515] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:53:59.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:53:59.269 [DEBUG] [Thread-136518] [transport.py] [_log()] starting thread (client mode): 0xa2d6bd90
2026-02-11T21:53:59.269 [DEBUG] [Thread-136518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:53:59.283 [DEBUG] [Thread-136518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:53:59.284 [INFO] [Thread-136518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:53:59.291 [DEBUG] [Thread-136518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:53:59.291 [DEBUG] [Thread-136518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] client lang: <none>
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] server lang: <none>
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] kex follows: False
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] Compression: none
2026-02-11T21:53:59.292 [DEBUG] [Thread-136518] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:53:59.349 [DEBUG] [Thread-136518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:53:59.350 [DEBUG] [Thread-136518] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:53:59.350 [DEBUG] [Thread-136518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:53:59.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:53:59.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:53:59.405 [DEBUG] [Thread-136518] [transport.py] [_log()] userauth is OK
2026-02-11T21:53:59.406 [DEBUG] [Thread-136518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:53:59.406 [DEBUG] [Thread-136518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:53:59.406 [DEBUG] [Thread-136518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:53:59.406 [DEBUG] [Thread-136518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:53:59.424 [INFO] [Thread-136518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:53:59.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:53:59.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:54:00.254 [DEBUG] [Thread-136518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:54:00.255 [DEBUG] [Thread-136518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:54:00.302 [DEBUG] [Thread-136518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:54:00.302 [DEBUG] [Thread-136518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:54:00.312 [DEBUG] [Thread-136518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:54:00.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:54:00.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')
2026-02-11T21:54:00.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:54:00.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:54:00.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:54:00.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:54:00.349 [DEBUG] [Thread-136518] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:54:04.224 [DEBUG] [Thread-136520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:54:19.271 [DEBUG] [Thread-136521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:54:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:54:30.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:54:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:54:32.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 53, 51), 1.23, 92.12, 0.0, 19.52, 15.84, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:54:32.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:53:51
2026-02-11T21:54:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:54:32.911 [DEBUG] [Thread-136522] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-11T21:54:32.912 [DEBUG] [Thread-136522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:54:32.931 [DEBUG] [Thread-136522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:54:32.931 [INFO] [Thread-136522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:54:32.934 [DEBUG] [Thread-136522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:54:32.934 [DEBUG] [Thread-136522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:54:32.934 [DEBUG] [Thread-136522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] client lang: <none>
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] server lang: <none>
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] kex follows: False
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] Compression: none
2026-02-11T21:54:32.935 [DEBUG] [Thread-136522] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:54:32.942 [DEBUG] [Thread-136522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:54:32.943 [DEBUG] [Thread-136522] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:54:32.943 [DEBUG] [Thread-136522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:54:32.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:54:32.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:54:32.944 [DEBUG] [Thread-136522] [transport.py] [_log()] userauth is OK
2026-02-11T21:54:32.944 [DEBUG] [Thread-136522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:54:32.944 [DEBUG] [Thread-136522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:54:32.944 [DEBUG] [Thread-136522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:54:32.944 [DEBUG] [Thread-136522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:54:32.956 [INFO] [Thread-136522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:54:32.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:54:33.731 [DEBUG] [Thread-136522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:54:33.732 [DEBUG] [Thread-136522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:54:33.732 [DEBUG] [Thread-136522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:54:33.773 [DEBUG] [Thread-136522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:54:33.774 [DEBUG] [Thread-136522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:54:33.777 [DEBUG] [Thread-136522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:54:33.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:54:33.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:54:33.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:54:33.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:54:33.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:54:33.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:54:33.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:54:33.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:54:33.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:54:33.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.829304 -999.00  +15.90  17.37     90  +14.30 1 3 1 3 1     0    0 1.63 -2.86 ----- 15.7 17.4 198.8 25.2 17.8 -4.2 17.6 -4.1 17.6 -4.2 17.9 -4.4
2026-02-11T21:54:33.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:54:33.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:54:33.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.829304
2026-02-11T21:54:33.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:54:33.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:54:33.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:54:33.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:54:33.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:54:33.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:53:51', tmtdew=1.23, humidity=92.12, cloud=0.0, wind=19.52, temperature=15.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:54:11.866', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:54:33.804 [DEBUG] [Thread-136522] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:54:33.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:54:33.895 [DEBUG] [Thread-136525] [transport.py] [_log()] starting thread (client mode): 0xa2d6a590
2026-02-11T21:54:33.895 [DEBUG] [Thread-136525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:54:33.909 [DEBUG] [Thread-136525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:54:33.910 [INFO] [Thread-136525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:54:33.917 [DEBUG] [Thread-136525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:54:33.917 [DEBUG] [Thread-136525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:54:33.917 [DEBUG] [Thread-136525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:54:33.917 [DEBUG] [Thread-136525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] client lang: <none>
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] server lang: <none>
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] kex follows: False
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] Compression: none
2026-02-11T21:54:33.918 [DEBUG] [Thread-136525] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:54:33.979 [DEBUG] [Thread-136525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:54:33.980 [DEBUG] [Thread-136525] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:54:33.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:54:33.981 [DEBUG] [Thread-136525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:54:33.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:54:34.037 [DEBUG] [Thread-136525] [transport.py] [_log()] userauth is OK
2026-02-11T21:54:34.037 [DEBUG] [Thread-136525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:54:34.037 [DEBUG] [Thread-136525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:54:34.037 [DEBUG] [Thread-136525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:54:34.037 [DEBUG] [Thread-136525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:54:34.056 [INFO] [Thread-136525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:54:34.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:54:34.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:54:34.306 [DEBUG] [Thread-136527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:54:34.881 [DEBUG] [Thread-136525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:54:34.881 [DEBUG] [Thread-136525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:54:34.929 [DEBUG] [Thread-136525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:54:34.930 [DEBUG] [Thread-136525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:54:34.939 [DEBUG] [Thread-136525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:54:34.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:54:34.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:54:34.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:54:34.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:54:34.960 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:54:34.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:54:34.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:54:34.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:54:34.975 [DEBUG] [Thread-136525] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:54:44.652 [DEBUG] [Thread-136528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:54:49.365 [DEBUG] [Thread-136529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:55:04.404 [DEBUG] [Thread-136530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:55:04.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:55:04.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:55:05.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
2026-02-11T21:55:07.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 54, 26), 1.23, 92.14, 0.0, 20.1, 15.81, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:55:07.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:54:26
2026-02-11T21:55:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:55:07.564 [DEBUG] [Thread-136531] [transport.py] [_log()] starting thread (client mode): 0xa2d9df00
2026-02-11T21:55:07.564 [DEBUG] [Thread-136531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:55:07.584 [DEBUG] [Thread-136531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:55:07.584 [INFO] [Thread-136531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] client lang: <none>
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] server lang: <none>
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] kex follows: False
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] Compression: none
2026-02-11T21:55:07.587 [DEBUG] [Thread-136531] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:55:07.605 [DEBUG] [Thread-136531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:55:07.606 [DEBUG] [Thread-136531] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:55:07.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:55:07.607 [DEBUG] [Thread-136531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:55:07.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:55:07.609 [DEBUG] [Thread-136531] [transport.py] [_log()] userauth is OK
2026-02-11T21:55:07.609 [DEBUG] [Thread-136531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:55:07.609 [DEBUG] [Thread-136531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:55:07.609 [DEBUG] [Thread-136531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:55:07.609 [DEBUG] [Thread-136531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:55:07.633 [INFO] [Thread-136531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:55:07.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:55:08.741 [DEBUG] [Thread-136531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:55:08.741 [DEBUG] [Thread-136531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:55:08.742 [DEBUG] [Thread-136531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:55:08.782 [DEBUG] [Thread-136531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:55:08.783 [DEBUG] [Thread-136531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:55:08.786 [DEBUG] [Thread-136531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:55:08.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:55:08.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:55:08.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:55:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:55:08.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:55:08.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:55:08.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:55:08.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:55:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:55:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.829651 -999.00  +15.90  24.52     90  +14.30 1 3 1 3 1     0    0 1.63 -3.32 ----- 22.6 24.5 197.0 27.5 17.8 -3.9 17.6 -3.6 17.5 -3.6 17.9 -3.9
2026-02-11T21:55:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:55:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:55:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.829651
2026-02-11T21:55:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:55:08.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:55:08.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:55:08.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:55:08.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:55:08.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:54:26', tmtdew=1.23, humidity=92.14, cloud=0.0, wind=20.1, temperature=15.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:54:41.846', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:55:08.814 [DEBUG] [Thread-136531] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:55:08.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:55:19.442 [DEBUG] [Thread-136534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:55:34.502 [DEBUG] [Thread-136535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:55:35.163 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:55:35.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:55:44.708 [DEBUG] [Thread-136536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:55:49.535 [DEBUG] [Thread-136537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:56:04.572 [DEBUG] [Thread-136538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:56:19.607 [DEBUG] [Thread-136539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:56:34.643 [DEBUG] [Thread-136540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:56:35.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:56:35.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:56:44.771 [DEBUG] [Thread-136541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:56:49.684 [DEBUG] [Thread-136542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:04.721 [DEBUG] [Thread-136543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:19.758 [DEBUG] [Thread-136544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:20.823 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T21:57:34.796 [DEBUG] [Thread-136545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:35.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:35.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:44.846 [DEBUG] [Thread-136546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:49.832 [DEBUG] [Thread-136547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:57:50.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:57:50.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:57:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:57:53.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 57, 24), 1.25, 92.27, 0.0, 25.6, 15.81, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:57:53.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:57:24
2026-02-11T21:57:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:57:53.849 [DEBUG] [Thread-136548] [transport.py] [_log()] starting thread (client mode): 0xa57e1300
2026-02-11T21:57:53.849 [DEBUG] [Thread-136548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:57:53.865 [DEBUG] [Thread-136548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:57:53.865 [INFO] [Thread-136548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] client lang: <none>
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] server lang: <none>
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] kex follows: False
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:57:53.868 [DEBUG] [Thread-136548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:57:53.869 [DEBUG] [Thread-136548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:57:53.869 [DEBUG] [Thread-136548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:57:53.869 [DEBUG] [Thread-136548] [transport.py] [_log()] Compression: none
2026-02-11T21:57:53.869 [DEBUG] [Thread-136548] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:57:53.884 [DEBUG] [Thread-136548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:57:53.885 [DEBUG] [Thread-136548] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:57:53.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:57:53.886 [DEBUG] [Thread-136548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:57:53.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:57:53.888 [DEBUG] [Thread-136548] [transport.py] [_log()] userauth is OK
2026-02-11T21:57:53.889 [DEBUG] [Thread-136548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:57:53.889 [DEBUG] [Thread-136548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:57:53.889 [DEBUG] [Thread-136548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:57:53.889 [DEBUG] [Thread-136548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:57:53.917 [INFO] [Thread-136548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:57:53.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:57:54.549 [DEBUG] [Thread-136548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:57:54.549 [DEBUG] [Thread-136548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:57:54.549 [DEBUG] [Thread-136548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:57:54.589 [DEBUG] [Thread-136548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:57:54.590 [DEBUG] [Thread-136548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:57:54.593 [DEBUG] [Thread-136548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:57:54.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:57:54.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:57:54.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:57:54.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:57:54.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:57:54.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:57:54.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:57:54.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:57:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:57:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.831387 -999.00  +15.90  18.51     89  +14.20 1 3 1 3 1     0    0 1.56 -5.32 ----- 17.2 18.5 197.9 22.5 17.8 -4.8 17.5 -5.0 17.4 -4.5 17.8 -4.8
2026-02-11T21:57:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:57:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:57:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.831387
2026-02-11T21:57:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:57:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:57:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:57:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:57:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:57:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:57:24', tmtdew=1.25, humidity=92.27, cloud=0.0, wind=25.6, temperature=15.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:57:11.837', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:57:54.620 [DEBUG] [Thread-136548] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:57:54.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:57:54.716 [DEBUG] [Thread-136551] [transport.py] [_log()] starting thread (client mode): 0xa57e0250
2026-02-11T21:57:54.716 [DEBUG] [Thread-136551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:57:54.731 [DEBUG] [Thread-136551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:57:54.731 [INFO] [Thread-136551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:57:54.738 [DEBUG] [Thread-136551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:57:54.739 [DEBUG] [Thread-136551] [transport.py] [_log()] client lang: <none>
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] server lang: <none>
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] kex follows: False
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:57:54.740 [DEBUG] [Thread-136551] [transport.py] [_log()] Compression: none
2026-02-11T21:57:54.741 [DEBUG] [Thread-136551] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:57:54.799 [DEBUG] [Thread-136551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:57:54.800 [DEBUG] [Thread-136551] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:57:54.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:57:54.801 [DEBUG] [Thread-136551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:57:54.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:57:54.858 [DEBUG] [Thread-136551] [transport.py] [_log()] userauth is OK
2026-02-11T21:57:54.859 [DEBUG] [Thread-136551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:57:54.859 [DEBUG] [Thread-136551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:57:54.859 [DEBUG] [Thread-136551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:57:54.859 [DEBUG] [Thread-136551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:57:54.877 [INFO] [Thread-136551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:57:54.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:57:54.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:57:55.708 [DEBUG] [Thread-136551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:57:55.709 [DEBUG] [Thread-136551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:57:55.756 [DEBUG] [Thread-136551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:57:55.757 [DEBUG] [Thread-136551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:57:55.766 [DEBUG] [Thread-136551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:57:55.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:57:55.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:57:55.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:57:55.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:57:55.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:57:55.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:57:55.803 [DEBUG] [Thread-136551] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:58:04.867 [DEBUG] [Thread-136553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:58:19.926 [DEBUG] [Thread-136554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:58:25.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:58:25.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:58:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:58:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 57, 59), 1.25, 92.27, 0.0, 24.17, 15.79, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:58:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:57:59
2026-02-11T21:58:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:58:28.225 [DEBUG] [Thread-136555] [transport.py] [_log()] starting thread (client mode): 0xa2d9c2b0
2026-02-11T21:58:28.225 [DEBUG] [Thread-136555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:58:28.245 [DEBUG] [Thread-136555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:58:28.245 [INFO] [Thread-136555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] client lang: <none>
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] server lang: <none>
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] kex follows: False
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:58:28.248 [DEBUG] [Thread-136555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:58:28.249 [DEBUG] [Thread-136555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:58:28.249 [DEBUG] [Thread-136555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:58:28.249 [DEBUG] [Thread-136555] [transport.py] [_log()] Compression: none
2026-02-11T21:58:28.249 [DEBUG] [Thread-136555] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:58:28.257 [DEBUG] [Thread-136555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:58:28.258 [DEBUG] [Thread-136555] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:58:28.258 [DEBUG] [Thread-136555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:58:28.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:58:28.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:58:28.260 [DEBUG] [Thread-136555] [transport.py] [_log()] userauth is OK
2026-02-11T21:58:28.260 [DEBUG] [Thread-136555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:58:28.260 [DEBUG] [Thread-136555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:58:28.260 [DEBUG] [Thread-136555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:58:28.261 [DEBUG] [Thread-136555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:58:28.285 [INFO] [Thread-136555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:58:28.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:58:28.870 [DEBUG] [Thread-136555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:58:28.870 [DEBUG] [Thread-136555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:58:28.871 [DEBUG] [Thread-136555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:58:28.911 [DEBUG] [Thread-136555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:58:28.911 [DEBUG] [Thread-136555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:58:28.913 [DEBUG] [Thread-136555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:58:28.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:58:28.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:58:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:58:28.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:58:28.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:58:28.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:58:28.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.831735 -999.00  +15.90  14.70     89  +14.20 1 3 1 3 1     0    0 1.55 -5.32 ----- 18.8 14.7 198.0 23.6 17.7 -5.1 17.5 -4.7 17.5 -4.7 17.8 -5.1
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.831735
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:58:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:58:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:58:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:58:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:57:59', tmtdew=1.25, humidity=92.27, cloud=0.0, wind=24.17, temperature=15.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:57:41.904', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:58:28.935 [DEBUG] [Thread-136555] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:58:29.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:58:29.020 [DEBUG] [Thread-136558] [transport.py] [_log()] starting thread (client mode): 0xa5758e20
2026-02-11T21:58:29.020 [DEBUG] [Thread-136558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:58:29.034 [DEBUG] [Thread-136558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:58:29.034 [INFO] [Thread-136558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:58:29.042 [DEBUG] [Thread-136558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:58:29.042 [DEBUG] [Thread-136558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] client lang: <none>
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] server lang: <none>
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] kex follows: False
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] Compression: none
2026-02-11T21:58:29.043 [DEBUG] [Thread-136558] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:58:29.101 [DEBUG] [Thread-136558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:58:29.102 [DEBUG] [Thread-136558] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:58:29.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:58:29.103 [DEBUG] [Thread-136558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:58:29.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:58:29.157 [DEBUG] [Thread-136558] [transport.py] [_log()] userauth is OK
2026-02-11T21:58:29.157 [DEBUG] [Thread-136558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:58:29.158 [DEBUG] [Thread-136558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:58:29.158 [DEBUG] [Thread-136558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:58:29.158 [DEBUG] [Thread-136558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:58:29.181 [INFO] [Thread-136558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:58:29.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:58:29.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:58:30.031 [DEBUG] [Thread-136558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:58:30.031 [DEBUG] [Thread-136558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:58:30.079 [DEBUG] [Thread-136558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:58:30.079 [DEBUG] [Thread-136558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:58:30.088 [DEBUG] [Thread-136558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:58:30.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:58:30.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')
2026-02-11T21:58:30.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:58:30.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:58:30.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:58:30.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:58:30.125 [DEBUG] [Thread-136558] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:58:34.958 [DEBUG] [Thread-136560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:58:35.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:58:35.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:58:44.927 [DEBUG] [Thread-136561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:58:50.012 [DEBUG] [Thread-136562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:59:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:59:00.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:59:00.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:59:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 58, 34), 1.73, 89.42, 0.0, 28.44, 16.18, 1, 1, 0, 2, 0, 0),)
2026-02-11T21:59:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:58:34
2026-02-11T21:59:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:59:03.281 [DEBUG] [Thread-136563] [transport.py] [_log()] starting thread (client mode): 0xa2d69a20
2026-02-11T21:59:03.281 [DEBUG] [Thread-136563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:59:03.302 [DEBUG] [Thread-136563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:59:03.302 [INFO] [Thread-136563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:59:03.305 [DEBUG] [Thread-136563] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:59:03.305 [DEBUG] [Thread-136563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:59:03.305 [DEBUG] [Thread-136563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] client lang: <none>
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] server lang: <none>
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] kex follows: False
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] Compression: none
2026-02-11T21:59:03.306 [DEBUG] [Thread-136563] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:59:03.322 [DEBUG] [Thread-136563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:59:03.323 [DEBUG] [Thread-136563] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:59:03.324 [DEBUG] [Thread-136563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:59:03.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:59:03.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:59:03.326 [DEBUG] [Thread-136563] [transport.py] [_log()] userauth is OK
2026-02-11T21:59:03.326 [DEBUG] [Thread-136563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:59:03.326 [DEBUG] [Thread-136563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:59:03.326 [DEBUG] [Thread-136563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:59:03.326 [DEBUG] [Thread-136563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:59:03.363 [INFO] [Thread-136563] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:59:03.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:59:04.002 [DEBUG] [Thread-136563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:59:04.003 [DEBUG] [Thread-136563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:59:04.003 [DEBUG] [Thread-136563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:59:04.043 [DEBUG] [Thread-136563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:59:04.044 [DEBUG] [Thread-136563] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:59:04.047 [DEBUG] [Thread-136563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:59:04.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:59:04.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:59:04.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:59:04.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:59:04.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:59:04.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:59:04.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:59:04.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:59:04.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:59:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.832429 -999.00  +15.90  18.30     89  +14.20 1 3 1 3 1     0    0 1.57 -5.10 ----- 19.2 18.3 201.9 22.5 17.7 -5.1 17.5 -4.9 17.5 -4.6 17.8 -5.0
2026-02-11T21:59:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:59:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:59:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.832429
2026-02-11T21:59:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:59:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:59:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:59:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:59:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:59:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:58:34', tmtdew=1.73, humidity=89.42, cloud=0.0, wind=28.44, temperature=16.18, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:58:41.866', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:59:04.075 [DEBUG] [Thread-136563] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:59:04.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:59:04.169 [DEBUG] [Thread-136566] [transport.py] [_log()] starting thread (client mode): 0xa57e27d0
2026-02-11T21:59:04.170 [DEBUG] [Thread-136566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:59:04.184 [DEBUG] [Thread-136566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:59:04.184 [INFO] [Thread-136566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:59:04.191 [DEBUG] [Thread-136566] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:59:04.191 [DEBUG] [Thread-136566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:59:04.191 [DEBUG] [Thread-136566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:59:04.191 [DEBUG] [Thread-136566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:04.191 [DEBUG] [Thread-136566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] client lang: <none>
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] server lang: <none>
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] kex follows: False
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] Compression: none
2026-02-11T21:59:04.192 [DEBUG] [Thread-136566] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:59:04.248 [DEBUG] [Thread-136566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:59:04.249 [DEBUG] [Thread-136566] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:59:04.250 [DEBUG] [Thread-136566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:59:04.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:59:04.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:59:04.304 [DEBUG] [Thread-136566] [transport.py] [_log()] userauth is OK
2026-02-11T21:59:04.305 [DEBUG] [Thread-136566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:59:04.305 [DEBUG] [Thread-136566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:59:04.305 [DEBUG] [Thread-136566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:59:04.305 [DEBUG] [Thread-136566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:59:04.324 [INFO] [Thread-136566] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:59:04.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:59:04.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:59:05.049 [DEBUG] [Thread-136568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:59:05.160 [DEBUG] [Thread-136566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:59:05.160 [DEBUG] [Thread-136566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:59:05.208 [DEBUG] [Thread-136566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:59:05.208 [DEBUG] [Thread-136566] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:59:05.217 [DEBUG] [Thread-136566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:59:05.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:59:05.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')
2026-02-11T21:59:05.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:59:05.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:59:05.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:59:05.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:59:05.254 [DEBUG] [Thread-136566] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:59:20.102 [DEBUG] [Thread-136569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:59:35.136 [DEBUG] [Thread-136570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:59:35.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T21:59:35.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T21:59:35.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T21:59:35.981 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:59:35.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:59:37.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 59, 10), 1.26, 92.24, 0.0, 24.14, 15.68, 2, 2, 0, 2, 0, 0),)
2026-02-11T21:59:37.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:59:10
2026-02-11T21:59:37.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T21:59:37.749 [DEBUG] [Thread-136571] [transport.py] [_log()] starting thread (client mode): 0xa2d5e0b0
2026-02-11T21:59:37.749 [DEBUG] [Thread-136571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:59:37.768 [DEBUG] [Thread-136571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T21:59:37.768 [INFO] [Thread-136571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T21:59:37.769 [DEBUG] [Thread-136571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:59:37.769 [DEBUG] [Thread-136571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T21:59:37.769 [DEBUG] [Thread-136571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:59:37.769 [DEBUG] [Thread-136571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:37.769 [DEBUG] [Thread-136571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:37.769 [DEBUG] [Thread-136571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] client lang: <none>
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] server lang: <none>
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] kex follows: False
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] Compression: none
2026-02-11T21:59:37.770 [DEBUG] [Thread-136571] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:59:37.783 [DEBUG] [Thread-136571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:59:37.783 [DEBUG] [Thread-136571] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:59:37.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T21:59:37.784 [DEBUG] [Thread-136571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T21:59:37.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:59:37.786 [DEBUG] [Thread-136571] [transport.py] [_log()] userauth is OK
2026-02-11T21:59:37.786 [DEBUG] [Thread-136571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:59:37.786 [DEBUG] [Thread-136571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:59:37.786 [DEBUG] [Thread-136571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T21:59:37.786 [DEBUG] [Thread-136571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:59:37.804 [INFO] [Thread-136571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:59:37.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:59:38.621 [DEBUG] [Thread-136571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:59:38.622 [DEBUG] [Thread-136571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:59:38.622 [DEBUG] [Thread-136571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T21:59:38.662 [DEBUG] [Thread-136571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:59:38.662 [DEBUG] [Thread-136571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:59:38.666 [DEBUG] [Thread-136571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:59:38.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:59:38.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T21:59:38.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T21:59:38.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T21:59:38.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:59:38.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T21:59:38.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:59:38.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:59:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T21:59:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.832776 -999.00  +15.80  24.12     89  +14.10 1 3 1 3 1     0    0 1.53 -5.27 ----- 17.8 24.1 198.2 26.9 17.8 -4.0 17.5 -4.0 17.4 -3.7 17.8 -3.7
2026-02-11T21:59:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T21:59:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T21:59:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.832776
2026-02-11T21:59:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T21:59:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T21:59:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T21:59:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T21:59:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T21:59:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:59:10', tmtdew=1.26, humidity=92.24, cloud=0.0, wind=24.14, temperature=15.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:59:11.846', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T21:59:38.693 [DEBUG] [Thread-136571] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:59:38.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T21:59:38.788 [DEBUG] [Thread-136574] [transport.py] [_log()] starting thread (client mode): 0xa2d5c6d0
2026-02-11T21:59:38.788 [DEBUG] [Thread-136574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T21:59:38.803 [DEBUG] [Thread-136574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T21:59:38.803 [INFO] [Thread-136574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T21:59:38.810 [DEBUG] [Thread-136574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T21:59:38.811 [DEBUG] [Thread-136574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T21:59:38.811 [DEBUG] [Thread-136574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T21:59:38.811 [DEBUG] [Thread-136574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] client lang: <none>
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] server lang: <none>
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] kex follows: False
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T21:59:38.812 [DEBUG] [Thread-136574] [transport.py] [_log()] Compression: none
2026-02-11T21:59:38.813 [DEBUG] [Thread-136574] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T21:59:38.869 [DEBUG] [Thread-136574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T21:59:38.870 [DEBUG] [Thread-136574] [transport.py] [_log()] Switch to new keys ...
2026-02-11T21:59:38.870 [DEBUG] [Thread-136574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T21:59:38.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T21:59:38.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T21:59:38.927 [DEBUG] [Thread-136574] [transport.py] [_log()] userauth is OK
2026-02-11T21:59:38.927 [DEBUG] [Thread-136574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T21:59:38.927 [DEBUG] [Thread-136574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T21:59:38.928 [DEBUG] [Thread-136574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T21:59:38.928 [DEBUG] [Thread-136574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T21:59:38.941 [INFO] [Thread-136574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T21:59:38.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T21:59:38.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T21:59:39.757 [DEBUG] [Thread-136574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T21:59:39.758 [DEBUG] [Thread-136574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T21:59:39.805 [DEBUG] [Thread-136574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T21:59:39.805 [DEBUG] [Thread-136574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T21:59:39.815 [DEBUG] [Thread-136574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T21:59:39.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T21:59:39.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T21:59:39.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T21:59:39.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T21:59:39.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T21:59:39.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T21:59:39.851 [DEBUG] [Thread-136574] [transport.py] [_log()] EOF in transport thread
2026-02-11T21:59:45.002 [DEBUG] [Thread-136576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T21:59:50.173 [DEBUG] [Thread-136577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:00:05.229 [DEBUG] [Thread-136578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:00:09.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:00:09.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:00:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:00:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 21, 59, 46), 1.2, 92.77, 0.0, 22.74, 15.68, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:00:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 21:59:46
2026-02-11T22:00:12.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:00:12.515 [DEBUG] [Thread-136579] [transport.py] [_log()] starting thread (client mode): 0xa2d9d690
2026-02-11T22:00:12.515 [DEBUG] [Thread-136579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:00:12.535 [DEBUG] [Thread-136579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:00:12.535 [INFO] [Thread-136579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:00:12.536 [DEBUG] [Thread-136579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] client lang: <none>
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] server lang: <none>
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] kex follows: False
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] Compression: none
2026-02-11T22:00:12.537 [DEBUG] [Thread-136579] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:00:12.549 [DEBUG] [Thread-136579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:00:12.550 [DEBUG] [Thread-136579] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:00:12.550 [DEBUG] [Thread-136579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:00:12.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:00:12.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:00:12.552 [DEBUG] [Thread-136579] [transport.py] [_log()] userauth is OK
2026-02-11T22:00:12.552 [DEBUG] [Thread-136579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:00:12.553 [DEBUG] [Thread-136579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:00:12.553 [DEBUG] [Thread-136579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:00:12.553 [DEBUG] [Thread-136579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:00:12.579 [INFO] [Thread-136579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:00:12.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:00:13.338 [DEBUG] [Thread-136579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:00:13.339 [DEBUG] [Thread-136579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:00:13.339 [DEBUG] [Thread-136579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:00:13.380 [DEBUG] [Thread-136579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:00:13.380 [DEBUG] [Thread-136579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:00:13.383 [DEBUG] [Thread-136579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:00:13.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:00:13.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:00:13.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:00:13.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:00:13.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:00:13.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:00:13.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:00:13.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:00:13.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:00:13.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.833124 -999.00  +15.70  18.99     89  +14.10 1 3 1 3 1     0    0 1.52 -5.37 ----- 18.1 19.0 202.6 25.5 17.7 -3.4 17.5 -3.4 17.4 -3.5 17.8 -3.7
2026-02-11T22:00:13.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:00:13.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:00:13.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.833124
2026-02-11T22:00:13.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:00:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:00:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:00:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:00:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:00:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T21:59:46', tmtdew=1.2, humidity=92.77, cloud=0.0, wind=22.74, temperature=15.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T19:59:41.914', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:00:13.407 [DEBUG] [Thread-136579] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:00:13.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:00:13.504 [DEBUG] [Thread-136582] [transport.py] [_log()] starting thread (client mode): 0xa2d9e110
2026-02-11T22:00:13.504 [DEBUG] [Thread-136582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:00:13.518 [DEBUG] [Thread-136582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:00:13.518 [INFO] [Thread-136582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:00:13.525 [DEBUG] [Thread-136582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:00:13.525 [DEBUG] [Thread-136582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] client lang: <none>
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] server lang: <none>
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] kex follows: False
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] Compression: none
2026-02-11T22:00:13.526 [DEBUG] [Thread-136582] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:00:13.583 [DEBUG] [Thread-136582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:00:13.583 [DEBUG] [Thread-136582] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:00:13.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:00:13.585 [DEBUG] [Thread-136582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:00:13.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:00:13.639 [DEBUG] [Thread-136582] [transport.py] [_log()] userauth is OK
2026-02-11T22:00:13.640 [DEBUG] [Thread-136582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:00:13.640 [DEBUG] [Thread-136582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:00:13.640 [DEBUG] [Thread-136582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:00:13.640 [DEBUG] [Thread-136582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:00:13.664 [INFO] [Thread-136582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:00:13.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:00:13.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:00:14.477 [DEBUG] [Thread-136582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:00:14.477 [DEBUG] [Thread-136582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:00:14.525 [DEBUG] [Thread-136582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:00:14.526 [DEBUG] [Thread-136582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:00:14.535 [DEBUG] [Thread-136582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:00:14.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:00:14.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:00:14.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:00:14.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:00:14.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:00:14.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:00:14.572 [DEBUG] [Thread-136582] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:00:20.265 [DEBUG] [Thread-136584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:00:35.309 [DEBUG] [Thread-136585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:00:36.184 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:00:36.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:00:44.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:00:44.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:00:44.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
2026-02-11T22:00:45.082 [DEBUG] [Thread-136586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:00:46.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 0, 21), 1.19, 92.82, 0.0, 21.69, 15.68, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:00:46.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:00:21
2026-02-11T22:00:46.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:00:47.012 [DEBUG] [Thread-136587] [transport.py] [_log()] starting thread (client mode): 0x9eb06dd0
2026-02-11T22:00:47.012 [DEBUG] [Thread-136587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:00:47.032 [DEBUG] [Thread-136587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:00:47.032 [INFO] [Thread-136587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:00:47.034 [DEBUG] [Thread-136587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] client lang: <none>
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] server lang: <none>
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] kex follows: False
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:00:47.035 [DEBUG] [Thread-136587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:00:47.036 [DEBUG] [Thread-136587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:00:47.036 [DEBUG] [Thread-136587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:00:47.036 [DEBUG] [Thread-136587] [transport.py] [_log()] Compression: none
2026-02-11T22:00:47.036 [DEBUG] [Thread-136587] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:00:47.051 [DEBUG] [Thread-136587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:00:47.051 [DEBUG] [Thread-136587] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:00:47.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:00:47.052 [DEBUG] [Thread-136587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:00:47.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:00:47.055 [DEBUG] [Thread-136587] [transport.py] [_log()] userauth is OK
2026-02-11T22:00:47.055 [DEBUG] [Thread-136587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:00:47.055 [DEBUG] [Thread-136587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:00:47.055 [DEBUG] [Thread-136587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:00:47.055 [DEBUG] [Thread-136587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:00:47.067 [INFO] [Thread-136587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:00:47.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:00:47.709 [DEBUG] [Thread-136587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:00:47.709 [DEBUG] [Thread-136587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:00:47.709 [DEBUG] [Thread-136587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:00:47.750 [DEBUG] [Thread-136587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:00:47.750 [DEBUG] [Thread-136587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:00:47.753 [DEBUG] [Thread-136587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:00:47.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:00:47.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:00:47.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:00:47.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:00:47.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:00:47.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:00:47.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:00:47.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:00:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:00:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.833471 -999.00  +15.70  17.10     90  +14.10 1 3 1 3 1     0    0 1.54 -4.97 ----- 16.7 17.1 201.6 21.0 17.7 -3.2 17.5 -3.0 17.4 -3.2 17.7 -3.2
2026-02-11T22:00:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:00:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:00:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.833471
2026-02-11T22:00:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:00:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:00:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:00:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:00:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:00:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:00:21', tmtdew=1.19, humidity=92.82, cloud=0.0, wind=21.69, temperature=15.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:00:11.894', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:00:47.772 [DEBUG] [Thread-136587] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:00:47.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:00:47.877 [DEBUG] [Thread-136590] [transport.py] [_log()] starting thread (client mode): 0xa2d6a200
2026-02-11T22:00:47.877 [DEBUG] [Thread-136590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:00:47.892 [DEBUG] [Thread-136590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:00:47.892 [INFO] [Thread-136590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:00:47.899 [DEBUG] [Thread-136590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] client lang: <none>
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] server lang: <none>
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] kex follows: False
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] Compression: none
2026-02-11T22:00:47.900 [DEBUG] [Thread-136590] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:00:47.960 [DEBUG] [Thread-136590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:00:47.960 [DEBUG] [Thread-136590] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:00:47.961 [DEBUG] [Thread-136590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:00:47.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:00:47.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:00:48.018 [DEBUG] [Thread-136590] [transport.py] [_log()] userauth is OK
2026-02-11T22:00:48.019 [DEBUG] [Thread-136590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:00:48.019 [DEBUG] [Thread-136590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:00:48.019 [DEBUG] [Thread-136590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:00:48.019 [DEBUG] [Thread-136590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:00:48.045 [INFO] [Thread-136590] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:00:48.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:00:48.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:00:48.875 [DEBUG] [Thread-136590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:00:48.875 [DEBUG] [Thread-136590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:00:48.922 [DEBUG] [Thread-136590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:00:48.922 [DEBUG] [Thread-136590] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:00:48.932 [DEBUG] [Thread-136590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:00:48.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:00:48.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:00:48.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:00:48.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:00:48.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:00:48.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:00:48.967 [DEBUG] [Thread-136590] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:00:50.348 [DEBUG] [Thread-136592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:05.401 [DEBUG] [Thread-136593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:18.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:01:18.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:01:18.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:01:20.435 [DEBUG] [Thread-136594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:21.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 0, 57), 1.2, 92.76, 0.0, 22.36, 15.64, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:01:21.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:00:57
2026-02-11T22:01:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:01:21.686 [DEBUG] [Thread-136595] [transport.py] [_log()] starting thread (client mode): 0xa2d9f790
2026-02-11T22:01:21.686 [DEBUG] [Thread-136595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:01:21.706 [DEBUG] [Thread-136595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:01:21.706 [INFO] [Thread-136595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] client lang: <none>
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] server lang: <none>
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] kex follows: False
2026-02-11T22:01:21.710 [DEBUG] [Thread-136595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:01:21.711 [DEBUG] [Thread-136595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:01:21.711 [DEBUG] [Thread-136595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:01:21.711 [DEBUG] [Thread-136595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:01:21.711 [DEBUG] [Thread-136595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:01:21.711 [DEBUG] [Thread-136595] [transport.py] [_log()] Compression: none
2026-02-11T22:01:21.711 [DEBUG] [Thread-136595] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:01:21.730 [DEBUG] [Thread-136595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:01:21.730 [DEBUG] [Thread-136595] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:01:21.731 [DEBUG] [Thread-136595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:01:21.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:01:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:01:21.733 [DEBUG] [Thread-136595] [transport.py] [_log()] userauth is OK
2026-02-11T22:01:21.733 [DEBUG] [Thread-136595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:01:21.733 [DEBUG] [Thread-136595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:01:21.733 [DEBUG] [Thread-136595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:01:21.733 [DEBUG] [Thread-136595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:01:21.768 [INFO] [Thread-136595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:01:21.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:01:22.413 [DEBUG] [Thread-136595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:01:22.413 [DEBUG] [Thread-136595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:01:22.414 [DEBUG] [Thread-136595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:01:22.454 [DEBUG] [Thread-136595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:01:22.455 [DEBUG] [Thread-136595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:01:22.458 [DEBUG] [Thread-136595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:01:22.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:01:22.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:01:22.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:01:22.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:01:22.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:01:22.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:01:22.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:01:22.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:01:22.490 [DEBUG] [Thread-136595] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:01:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:01:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.833818 -999.00  +15.70  12.56     90  +14.10 1 3 1 3 1     0    0 1.56 -4.50 ----- 15.8 12.6 199.6 27.0 17.7 -3.1 17.5 -4.1 17.4 -3.2 17.8 -3.3
2026-02-11T22:01:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:01:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:01:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.833818
2026-02-11T22:01:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:01:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:01:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:01:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:01:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:01:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:00:57', tmtdew=1.2, humidity=92.76, cloud=0.0, wind=22.36, temperature=15.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:00:41.875', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:01:22.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:01:22.591 [DEBUG] [Thread-136598] [transport.py] [_log()] starting thread (client mode): 0xa2d5cf70
2026-02-11T22:01:22.591 [DEBUG] [Thread-136598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:01:22.606 [DEBUG] [Thread-136598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:01:22.606 [INFO] [Thread-136598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:01:22.613 [DEBUG] [Thread-136598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:01:22.614 [DEBUG] [Thread-136598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:01:22.614 [DEBUG] [Thread-136598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:01:22.614 [DEBUG] [Thread-136598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:22.614 [DEBUG] [Thread-136598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:22.614 [DEBUG] [Thread-136598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:22.614 [DEBUG] [Thread-136598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:22.615 [DEBUG] [Thread-136598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:01:22.615 [DEBUG] [Thread-136598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:01:22.615 [DEBUG] [Thread-136598] [transport.py] [_log()] client lang: <none>
2026-02-11T22:01:22.615 [DEBUG] [Thread-136598] [transport.py] [_log()] server lang: <none>
2026-02-11T22:01:22.615 [DEBUG] [Thread-136598] [transport.py] [_log()] kex follows: False
2026-02-11T22:01:22.615 [DEBUG] [Thread-136598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:01:22.616 [DEBUG] [Thread-136598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:01:22.616 [DEBUG] [Thread-136598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:01:22.616 [DEBUG] [Thread-136598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:01:22.616 [DEBUG] [Thread-136598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:01:22.616 [DEBUG] [Thread-136598] [transport.py] [_log()] Compression: none
2026-02-11T22:01:22.616 [DEBUG] [Thread-136598] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:01:22.674 [DEBUG] [Thread-136598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:01:22.675 [DEBUG] [Thread-136598] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:01:22.676 [DEBUG] [Thread-136598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:01:22.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:01:22.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:01:22.734 [DEBUG] [Thread-136598] [transport.py] [_log()] userauth is OK
2026-02-11T22:01:22.735 [DEBUG] [Thread-136598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:01:22.735 [DEBUG] [Thread-136598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:01:22.735 [DEBUG] [Thread-136598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:01:22.735 [DEBUG] [Thread-136598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:01:22.754 [INFO] [Thread-136598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:01:22.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:01:22.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:01:23.577 [DEBUG] [Thread-136598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:01:23.577 [DEBUG] [Thread-136598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:01:23.625 [DEBUG] [Thread-136598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:01:23.625 [DEBUG] [Thread-136598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:01:23.633 [DEBUG] [Thread-136598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:01:23.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:01:23.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:01:23.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
2026-02-11T22:01:23.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:01:23.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:01:23.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:01:23.669 [DEBUG] [Thread-136598] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:01:35.466 [DEBUG] [Thread-136600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:36.391 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:36.392 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:45.156 [DEBUG] [Thread-136601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:50.521 [DEBUG] [Thread-136602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:01:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:01:53.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:01:53.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:01:55.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 1, 33), 1.72, 89.45, 0.0, 23.89, 16.02, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:01:55.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:01:33
2026-02-11T22:01:56.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:01:56.518 [DEBUG] [Thread-136603] [transport.py] [_log()] starting thread (client mode): 0xa2d9ef20
2026-02-11T22:01:56.518 [DEBUG] [Thread-136603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:01:56.538 [DEBUG] [Thread-136603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:01:56.539 [INFO] [Thread-136603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] client lang: <none>
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] server lang: <none>
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] kex follows: False
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] Compression: none
2026-02-11T22:01:56.542 [DEBUG] [Thread-136603] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:01:56.560 [DEBUG] [Thread-136603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:01:56.560 [DEBUG] [Thread-136603] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:01:56.561 [DEBUG] [Thread-136603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:01:56.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:01:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:01:56.563 [DEBUG] [Thread-136603] [transport.py] [_log()] userauth is OK
2026-02-11T22:01:56.563 [DEBUG] [Thread-136603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:01:56.563 [DEBUG] [Thread-136603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:01:56.564 [DEBUG] [Thread-136603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:01:56.564 [DEBUG] [Thread-136603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:01:56.596 [INFO] [Thread-136603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:01:56.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:01:57.207 [DEBUG] [Thread-136603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:01:57.207 [DEBUG] [Thread-136603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:01:57.207 [DEBUG] [Thread-136603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:01:57.248 [DEBUG] [Thread-136603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:01:57.249 [DEBUG] [Thread-136603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:01:57.252 [DEBUG] [Thread-136603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:01:57.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:01:57.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:01:57.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:01:57.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:01:57.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:01:57.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:01:57.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:01:57.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:01:57.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:01:57.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.834165 -999.00  +15.70  21.84     90  +14.10 1 3 1 3 1     0    0 1.51 -5.11 ----- 17.2 21.8 200.6 24.6 17.7 -3.3 17.4 -4.0 17.4 -3.3 17.7 -3.3
2026-02-11T22:01:57.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:01:57.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:01:57.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.834165
2026-02-11T22:01:57.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:01:57.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:01:57.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:01:57.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:01:57.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:01:57.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:01:33', tmtdew=1.72, humidity=89.45, cloud=0.0, wind=23.89, temperature=16.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:01:11.856', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:01:57.278 [DEBUG] [Thread-136603] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:01:57.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:01:57.373 [DEBUG] [Thread-136606] [transport.py] [_log()] starting thread (client mode): 0xa2d5e8c0
2026-02-11T22:01:57.373 [DEBUG] [Thread-136606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:01:57.388 [DEBUG] [Thread-136606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:01:57.388 [INFO] [Thread-136606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:01:57.395 [DEBUG] [Thread-136606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:01:57.395 [DEBUG] [Thread-136606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] client lang: <none>
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] server lang: <none>
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] kex follows: False
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] Compression: none
2026-02-11T22:01:57.396 [DEBUG] [Thread-136606] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:01:57.453 [DEBUG] [Thread-136606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:01:57.453 [DEBUG] [Thread-136606] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:01:57.454 [DEBUG] [Thread-136606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:01:57.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:01:57.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:01:57.509 [DEBUG] [Thread-136606] [transport.py] [_log()] userauth is OK
2026-02-11T22:01:57.509 [DEBUG] [Thread-136606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:01:57.509 [DEBUG] [Thread-136606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:01:57.510 [DEBUG] [Thread-136606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:01:57.510 [DEBUG] [Thread-136606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:01:57.528 [INFO] [Thread-136606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:01:57.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:01:57.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:01:58.365 [DEBUG] [Thread-136606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:01:58.365 [DEBUG] [Thread-136606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:01:58.413 [DEBUG] [Thread-136606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:01:58.414 [DEBUG] [Thread-136606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:01:58.423 [DEBUG] [Thread-136606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:01:58.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:01:58.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:01:58.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:01:58.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:01:58.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:01:58.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:01:58.460 [DEBUG] [Thread-136606] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:02:05.557 [DEBUG] [Thread-136608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:02:20.608 [DEBUG] [Thread-136609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:02:28.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:02:28.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:02:28.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:02:30.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 2, 9), 1.2, 92.81, 0.0, 20.24, 15.66, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:02:30.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:02:09
2026-02-11T22:02:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:02:30.873 [DEBUG] [Thread-136610] [transport.py] [_log()] starting thread (client mode): 0xa2d06830
2026-02-11T22:02:30.873 [DEBUG] [Thread-136610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:02:30.893 [DEBUG] [Thread-136610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:02:30.893 [INFO] [Thread-136610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] client lang: <none>
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] server lang: <none>
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] kex follows: False
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] Compression: none
2026-02-11T22:02:30.896 [DEBUG] [Thread-136610] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:02:30.917 [DEBUG] [Thread-136610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:02:30.918 [DEBUG] [Thread-136610] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:02:30.918 [DEBUG] [Thread-136610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:02:30.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:02:30.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:02:30.920 [DEBUG] [Thread-136610] [transport.py] [_log()] userauth is OK
2026-02-11T22:02:30.921 [DEBUG] [Thread-136610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:02:30.921 [DEBUG] [Thread-136610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:02:30.921 [DEBUG] [Thread-136610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:02:30.921 [DEBUG] [Thread-136610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:02:30.937 [INFO] [Thread-136610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:02:30.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:02:31.730 [DEBUG] [Thread-136610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:02:31.731 [DEBUG] [Thread-136610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:02:31.731 [DEBUG] [Thread-136610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:02:31.771 [DEBUG] [Thread-136610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:02:31.772 [DEBUG] [Thread-136610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:02:31.775 [DEBUG] [Thread-136610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:02:31.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:02:31.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:02:31.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:02:31.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:02:31.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:02:31.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:02:31.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:02:31.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:02:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:02:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.834512 -999.00  +15.70  22.10     90  +14.10 1 3 1 3 1     0    0 1.55 -5.18 ----- 21.1 22.1 203.0 28.3 17.7 -4.0 17.4 -3.9 17.4 -4.2 17.7 -4.0
2026-02-11T22:02:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:02:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:02:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.834512
2026-02-11T22:02:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:02:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:02:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:02:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:02:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:02:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:02:09', tmtdew=1.2, humidity=92.81, cloud=0.0, wind=20.24, temperature=15.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:01:41.837', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:02:31.803 [DEBUG] [Thread-136610] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:02:31.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:02:31.898 [DEBUG] [Thread-136613] [transport.py] [_log()] starting thread (client mode): 0xa57b1180
2026-02-11T22:02:31.898 [DEBUG] [Thread-136613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:02:31.913 [DEBUG] [Thread-136613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:02:31.913 [INFO] [Thread-136613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:02:31.921 [DEBUG] [Thread-136613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] client lang: <none>
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] server lang: <none>
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] kex follows: False
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] Compression: none
2026-02-11T22:02:31.922 [DEBUG] [Thread-136613] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:02:31.980 [DEBUG] [Thread-136613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:02:31.980 [DEBUG] [Thread-136613] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:02:31.981 [DEBUG] [Thread-136613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:02:31.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:02:31.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:02:32.036 [DEBUG] [Thread-136613] [transport.py] [_log()] userauth is OK
2026-02-11T22:02:32.037 [DEBUG] [Thread-136613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:02:32.037 [DEBUG] [Thread-136613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:02:32.037 [DEBUG] [Thread-136613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:02:32.037 [DEBUG] [Thread-136613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:02:32.062 [INFO] [Thread-136613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:02:32.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:02:32.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:02:32.906 [DEBUG] [Thread-136613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:02:32.906 [DEBUG] [Thread-136613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:02:32.956 [DEBUG] [Thread-136613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:02:32.956 [DEBUG] [Thread-136613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:02:32.964 [DEBUG] [Thread-136613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:02:32.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:02:32.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:02:32.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:02:32.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:02:32.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:02:32.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:02:33.000 [DEBUG] [Thread-136613] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:02:35.641 [DEBUG] [Thread-136615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:02:36.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:02:36.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:02:45.223 [DEBUG] [Thread-136616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:02:50.684 [DEBUG] [Thread-136617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:03:03.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:03:03.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:03:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:03:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 2, 44), 1.19, 92.82, 0.0, 19.71, 15.61, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:03:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:02:44
2026-02-11T22:03:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:03:05.531 [DEBUG] [Thread-136618] [transport.py] [_log()] starting thread (client mode): 0xa2d68bb0
2026-02-11T22:03:05.531 [DEBUG] [Thread-136618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:03:05.552 [DEBUG] [Thread-136618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:03:05.552 [INFO] [Thread-136618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:03:05.555 [DEBUG] [Thread-136618] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:03:05.555 [DEBUG] [Thread-136618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:03:05.555 [DEBUG] [Thread-136618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:03:05.555 [DEBUG] [Thread-136618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:05.555 [DEBUG] [Thread-136618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] client lang: <none>
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] server lang: <none>
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] kex follows: False
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] Compression: none
2026-02-11T22:03:05.556 [DEBUG] [Thread-136618] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:03:05.564 [DEBUG] [Thread-136618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:03:05.564 [DEBUG] [Thread-136618] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:03:05.564 [DEBUG] [Thread-136618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:03:05.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:03:05.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:03:05.566 [DEBUG] [Thread-136618] [transport.py] [_log()] userauth is OK
2026-02-11T22:03:05.566 [DEBUG] [Thread-136618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:03:05.566 [DEBUG] [Thread-136618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:03:05.566 [DEBUG] [Thread-136618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:03:05.566 [DEBUG] [Thread-136618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:03:05.578 [INFO] [Thread-136618] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:03:05.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:03:05.722 [DEBUG] [Thread-136620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:03:06.223 [DEBUG] [Thread-136618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:03:06.223 [DEBUG] [Thread-136618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:03:06.224 [DEBUG] [Thread-136618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:03:06.264 [DEBUG] [Thread-136618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:03:06.265 [DEBUG] [Thread-136618] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:03:06.268 [DEBUG] [Thread-136618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:03:06.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:03:06.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:03:06.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:03:06.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:03:06.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:03:06.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:03:06.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:03:06.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:03:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:03:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.835207 -999.00  +15.70  16.01     90  +14.00 1 3 1 3 1     0    0 1.55 -5.15 ----- 13.4 16.0 192.4 21.5 17.6 -4.9 17.4 -4.6 17.4 -5.6 17.6 -5.4
2026-02-11T22:03:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:03:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:03:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.835207
2026-02-11T22:03:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:03:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:03:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:03:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:03:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:03:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:02:44', tmtdew=1.19, humidity=92.82, cloud=0.0, wind=19.71, temperature=15.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:02:41.885', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:03:06.296 [DEBUG] [Thread-136618] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:03:06.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:03:06.391 [DEBUG] [Thread-136622] [transport.py] [_log()] starting thread (client mode): 0xa2d6b820
2026-02-11T22:03:06.392 [DEBUG] [Thread-136622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:03:06.406 [DEBUG] [Thread-136622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:03:06.406 [INFO] [Thread-136622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] client lang: <none>
2026-02-11T22:03:06.414 [DEBUG] [Thread-136622] [transport.py] [_log()] server lang: <none>
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] kex follows: False
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] Compression: none
2026-02-11T22:03:06.415 [DEBUG] [Thread-136622] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:03:06.472 [DEBUG] [Thread-136622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:03:06.473 [DEBUG] [Thread-136622] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:03:06.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:03:06.474 [DEBUG] [Thread-136622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:03:06.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:03:06.528 [DEBUG] [Thread-136622] [transport.py] [_log()] userauth is OK
2026-02-11T22:03:06.529 [DEBUG] [Thread-136622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:03:06.529 [DEBUG] [Thread-136622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:03:06.529 [DEBUG] [Thread-136622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:03:06.529 [DEBUG] [Thread-136622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:03:06.549 [INFO] [Thread-136622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:03:06.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:03:06.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:03:07.400 [DEBUG] [Thread-136622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:03:07.400 [DEBUG] [Thread-136622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:03:07.450 [DEBUG] [Thread-136622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:03:07.450 [DEBUG] [Thread-136622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:03:07.460 [DEBUG] [Thread-136622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:03:07.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:03:07.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:03:07.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:03:07.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:03:07.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:03:07.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:03:07.498 [DEBUG] [Thread-136622] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:03:20.760 [DEBUG] [Thread-136624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:03:35.806 [DEBUG] [Thread-136625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:03:36.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:03:36.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:03:37.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:03:37.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:03:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:03:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 3, 21), 1.19, 92.82, 0.0, 18.97, 15.64, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:03:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:03:21
2026-02-11T22:03:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:03:40.549 [DEBUG] [Thread-136626] [transport.py] [_log()] starting thread (client mode): 0xa2d9c250
2026-02-11T22:03:40.549 [DEBUG] [Thread-136626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:03:40.570 [DEBUG] [Thread-136626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:03:40.570 [INFO] [Thread-136626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] client lang: <none>
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] server lang: <none>
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] kex follows: False
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] Compression: none
2026-02-11T22:03:40.574 [DEBUG] [Thread-136626] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:03:40.593 [DEBUG] [Thread-136626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:03:40.594 [DEBUG] [Thread-136626] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:03:40.594 [DEBUG] [Thread-136626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:03:40.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:03:40.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:03:40.595 [DEBUG] [Thread-136626] [transport.py] [_log()] userauth is OK
2026-02-11T22:03:40.595 [DEBUG] [Thread-136626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:03:40.595 [DEBUG] [Thread-136626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:03:40.595 [DEBUG] [Thread-136626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:03:40.595 [DEBUG] [Thread-136626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:03:40.607 [INFO] [Thread-136626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:03:40.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:03:41.201 [DEBUG] [Thread-136626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:03:41.201 [DEBUG] [Thread-136626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:03:41.201 [DEBUG] [Thread-136626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:03:41.242 [DEBUG] [Thread-136626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:03:41.243 [DEBUG] [Thread-136626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:03:41.246 [DEBUG] [Thread-136626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:03:41.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:03:41.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:03:41.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:03:41.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:03:41.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:03:41.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:03:41.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:03:41.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:03:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:03:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.835554 -999.00  +15.70  19.91     90  +14.00 1 3 1 3 1     0    0 1.52 -5.09 ----- 17.9 19.9 201.4 25.2 17.6 -4.6 17.4 -4.7 17.4 -5.0 17.7 -4.9
2026-02-11T22:03:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:03:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:03:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.835554
2026-02-11T22:03:41.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:03:41.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:03:41.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:03:41.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:03:41.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:03:41.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:03:21', tmtdew=1.19, humidity=92.82, cloud=0.0, wind=18.97, temperature=15.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:03:11.866', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:03:41.274 [DEBUG] [Thread-136626] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:03:41.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:03:41.371 [DEBUG] [Thread-136629] [transport.py] [_log()] starting thread (client mode): 0xa2d5dd20
2026-02-11T22:03:41.371 [DEBUG] [Thread-136629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:03:41.386 [DEBUG] [Thread-136629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:03:41.386 [INFO] [Thread-136629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:03:41.393 [DEBUG] [Thread-136629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:03:41.394 [DEBUG] [Thread-136629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:03:41.394 [DEBUG] [Thread-136629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:03:41.394 [DEBUG] [Thread-136629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:41.394 [DEBUG] [Thread-136629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:03:41.394 [DEBUG] [Thread-136629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:41.394 [DEBUG] [Thread-136629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:03:41.394 [DEBUG] [Thread-136629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:03:41.395 [DEBUG] [Thread-136629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:03:41.395 [DEBUG] [Thread-136629] [transport.py] [_log()] client lang: <none>
2026-02-11T22:03:41.395 [DEBUG] [Thread-136629] [transport.py] [_log()] server lang: <none>
2026-02-11T22:03:41.395 [DEBUG] [Thread-136629] [transport.py] [_log()] kex follows: False
2026-02-11T22:03:41.395 [DEBUG] [Thread-136629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:03:41.395 [DEBUG] [Thread-136629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:03:41.395 [DEBUG] [Thread-136629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:03:41.396 [DEBUG] [Thread-136629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:03:41.396 [DEBUG] [Thread-136629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:03:41.396 [DEBUG] [Thread-136629] [transport.py] [_log()] Compression: none
2026-02-11T22:03:41.396 [DEBUG] [Thread-136629] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:03:41.451 [DEBUG] [Thread-136629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:03:41.452 [DEBUG] [Thread-136629] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:03:41.452 [DEBUG] [Thread-136629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:03:41.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:03:41.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:03:41.508 [DEBUG] [Thread-136629] [transport.py] [_log()] userauth is OK
2026-02-11T22:03:41.509 [DEBUG] [Thread-136629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:03:41.509 [DEBUG] [Thread-136629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:03:41.509 [DEBUG] [Thread-136629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:03:41.509 [DEBUG] [Thread-136629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:03:41.528 [INFO] [Thread-136629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:03:41.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:03:41.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:03:42.364 [DEBUG] [Thread-136629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:03:42.364 [DEBUG] [Thread-136629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:03:42.413 [DEBUG] [Thread-136629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:03:42.413 [DEBUG] [Thread-136629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:03:42.422 [DEBUG] [Thread-136629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:03:42.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:03:42.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:03:42.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:03:42.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:03:42.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:03:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:03:42.459 [DEBUG] [Thread-136629] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:03:45.297 [DEBUG] [Thread-136631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:03:50.843 [DEBUG] [Thread-136632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:05.896 [DEBUG] [Thread-136633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:04:12.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:04:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:04:14.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 3, 56), 1.16, 92.71, 0.0, 23.26, 15.66, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:04:14.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:03:56
2026-02-11T22:04:14.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:04:14.961 [DEBUG] [Thread-136634] [transport.py] [_log()] starting thread (client mode): 0xa2d5cc10
2026-02-11T22:04:14.961 [DEBUG] [Thread-136634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:04:14.981 [DEBUG] [Thread-136634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:04:14.981 [INFO] [Thread-136634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] client lang: <none>
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] server lang: <none>
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] kex follows: False
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:04:14.985 [DEBUG] [Thread-136634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:04:14.986 [DEBUG] [Thread-136634] [transport.py] [_log()] Compression: none
2026-02-11T22:04:14.986 [DEBUG] [Thread-136634] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:04:15.003 [DEBUG] [Thread-136634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:04:15.003 [DEBUG] [Thread-136634] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:04:15.004 [DEBUG] [Thread-136634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:04:15.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:04:15.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:04:15.006 [DEBUG] [Thread-136634] [transport.py] [_log()] userauth is OK
2026-02-11T22:04:15.007 [DEBUG] [Thread-136634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:04:15.007 [DEBUG] [Thread-136634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:04:15.007 [DEBUG] [Thread-136634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:04:15.007 [DEBUG] [Thread-136634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:04:15.039 [INFO] [Thread-136634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:04:15.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:04:15.679 [DEBUG] [Thread-136634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:04:15.679 [DEBUG] [Thread-136634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:04:15.679 [DEBUG] [Thread-136634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:04:15.720 [DEBUG] [Thread-136634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:04:15.720 [DEBUG] [Thread-136634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:04:15.723 [DEBUG] [Thread-136634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:04:15.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:04:15.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:04:15.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:04:15.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:04:15.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:04:15.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:04:15.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:04:15.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:04:15.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:04:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.835901 -999.00  +15.70  17.68     90  +14.10 1 3 1 3 1     0    0 1.54 -5.32 ----- 18.4 17.7 195.2 25.2 17.6 -5.2 17.3 -5.4 17.3 -5.4 17.7 -5.2
2026-02-11T22:04:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:04:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:04:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.835901
2026-02-11T22:04:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:04:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:04:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:04:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:04:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:04:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:03:56', tmtdew=1.16, humidity=92.71, cloud=0.0, wind=23.26, temperature=15.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:03:41.846', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:04:15.750 [DEBUG] [Thread-136634] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:04:15.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:04:15.851 [DEBUG] [Thread-136637] [transport.py] [_log()] starting thread (client mode): 0x9eb05ab0
2026-02-11T22:04:15.851 [DEBUG] [Thread-136637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:04:15.866 [DEBUG] [Thread-136637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:04:15.867 [INFO] [Thread-136637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:04:15.874 [DEBUG] [Thread-136637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:04:15.875 [DEBUG] [Thread-136637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:04:15.875 [DEBUG] [Thread-136637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:04:15.875 [DEBUG] [Thread-136637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:15.875 [DEBUG] [Thread-136637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:15.875 [DEBUG] [Thread-136637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:15.875 [DEBUG] [Thread-136637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:15.875 [DEBUG] [Thread-136637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:04:15.876 [DEBUG] [Thread-136637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:04:15.876 [DEBUG] [Thread-136637] [transport.py] [_log()] client lang: <none>
2026-02-11T22:04:15.876 [DEBUG] [Thread-136637] [transport.py] [_log()] server lang: <none>
2026-02-11T22:04:15.876 [DEBUG] [Thread-136637] [transport.py] [_log()] kex follows: False
2026-02-11T22:04:15.876 [DEBUG] [Thread-136637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:04:15.876 [DEBUG] [Thread-136637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:04:15.876 [DEBUG] [Thread-136637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:04:15.877 [DEBUG] [Thread-136637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:04:15.877 [DEBUG] [Thread-136637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:04:15.877 [DEBUG] [Thread-136637] [transport.py] [_log()] Compression: none
2026-02-11T22:04:15.877 [DEBUG] [Thread-136637] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:04:15.940 [DEBUG] [Thread-136637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:04:15.941 [DEBUG] [Thread-136637] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:04:15.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:04:15.942 [DEBUG] [Thread-136637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:04:15.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:04:16.000 [DEBUG] [Thread-136637] [transport.py] [_log()] userauth is OK
2026-02-11T22:04:16.001 [DEBUG] [Thread-136637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:04:16.001 [DEBUG] [Thread-136637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:04:16.001 [DEBUG] [Thread-136637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:04:16.001 [DEBUG] [Thread-136637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:04:16.019 [INFO] [Thread-136637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:04:16.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:04:16.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:04:16.853 [DEBUG] [Thread-136637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:04:16.854 [DEBUG] [Thread-136637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:04:16.901 [DEBUG] [Thread-136637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:04:16.901 [DEBUG] [Thread-136637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:04:16.911 [DEBUG] [Thread-136637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:04:16.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:04:16.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:04:16.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:04:16.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:04:16.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:04:16.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:04:16.951 [DEBUG] [Thread-136637] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:04:20.932 [DEBUG] [Thread-136639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:35.990 [DEBUG] [Thread-136640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:37.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:37.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:45.353 [DEBUG] [Thread-136641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:46.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:04:46.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:04:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:04:48.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 4, 31), 1.16, 92.71, 0.0, 22.48, 15.63, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:04:48.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:04:31
2026-02-11T22:04:49.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:04:49.274 [DEBUG] [Thread-136642] [transport.py] [_log()] starting thread (client mode): 0xa2d691b0
2026-02-11T22:04:49.274 [DEBUG] [Thread-136642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:04:49.295 [DEBUG] [Thread-136642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:04:49.295 [INFO] [Thread-136642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] client lang: <none>
2026-02-11T22:04:49.298 [DEBUG] [Thread-136642] [transport.py] [_log()] server lang: <none>
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] kex follows: False
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] Compression: none
2026-02-11T22:04:49.299 [DEBUG] [Thread-136642] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:04:49.313 [DEBUG] [Thread-136642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:04:49.314 [DEBUG] [Thread-136642] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:04:49.314 [DEBUG] [Thread-136642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:04:49.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:04:49.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:04:49.316 [DEBUG] [Thread-136642] [transport.py] [_log()] userauth is OK
2026-02-11T22:04:49.316 [DEBUG] [Thread-136642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:04:49.316 [DEBUG] [Thread-136642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:04:49.316 [DEBUG] [Thread-136642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:04:49.316 [DEBUG] [Thread-136642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:04:49.336 [INFO] [Thread-136642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:04:49.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:04:49.989 [DEBUG] [Thread-136642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:04:49.990 [DEBUG] [Thread-136642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:04:49.990 [DEBUG] [Thread-136642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:04:50.030 [DEBUG] [Thread-136642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:04:50.031 [DEBUG] [Thread-136642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:04:50.034 [DEBUG] [Thread-136642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:04:50.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:04:50.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:04:50.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:04:50.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:04:50.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:04:50.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:04:50.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:04:50.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:04:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:04:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.836248 -999.00  +15.70  16.67     90  +14.10 1 3 1 3 1     0    0 1.52 -5.21 ----- 17.6 16.7 194.4 20.7 17.6 -4.5 17.3 -4.8 17.3 -4.1 17.6 -4.7
2026-02-11T22:04:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:04:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:04:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.836248
2026-02-11T22:04:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:04:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:04:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:04:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:04:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:04:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:04:31', tmtdew=1.16, humidity=92.71, cloud=0.0, wind=22.48, temperature=15.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:04:11.827', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:04:50.060 [DEBUG] [Thread-136642] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:04:50.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:04:50.155 [DEBUG] [Thread-136645] [transport.py] [_log()] starting thread (client mode): 0xa57b3220
2026-02-11T22:04:50.156 [DEBUG] [Thread-136645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:04:50.171 [DEBUG] [Thread-136645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:04:50.171 [INFO] [Thread-136645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:04:50.179 [DEBUG] [Thread-136645] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:04:50.179 [DEBUG] [Thread-136645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:04:50.179 [DEBUG] [Thread-136645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:04:50.179 [DEBUG] [Thread-136645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:50.179 [DEBUG] [Thread-136645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:04:50.179 [DEBUG] [Thread-136645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] client lang: <none>
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] server lang: <none>
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] kex follows: False
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] Compression: none
2026-02-11T22:04:50.180 [DEBUG] [Thread-136645] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:04:50.238 [DEBUG] [Thread-136645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:04:50.239 [DEBUG] [Thread-136645] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:04:50.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:04:50.240 [DEBUG] [Thread-136645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:04:50.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:04:50.294 [DEBUG] [Thread-136645] [transport.py] [_log()] userauth is OK
2026-02-11T22:04:50.294 [DEBUG] [Thread-136645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:04:50.294 [DEBUG] [Thread-136645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:04:50.295 [DEBUG] [Thread-136645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:04:50.295 [DEBUG] [Thread-136645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:04:50.320 [INFO] [Thread-136645] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:04:50.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:04:50.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:04:51.024 [DEBUG] [Thread-136647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:04:51.176 [DEBUG] [Thread-136645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:04:51.176 [DEBUG] [Thread-136645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:04:51.224 [DEBUG] [Thread-136645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:04:51.224 [DEBUG] [Thread-136645] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:04:51.234 [DEBUG] [Thread-136645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:04:51.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:04:51.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:04:51.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:04:51.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:04:51.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:04:51.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:04:51.271 [DEBUG] [Thread-136645] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:05:06.077 [DEBUG] [Thread-136648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:05:21.117 [DEBUG] [Thread-136649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:05:21.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:05:21.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:05:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:05:23.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 5, 7), 1.18, 92.63, 0.0, 22.83, 15.63, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:05:23.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:05:07
2026-02-11T22:05:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:05:23.712 [DEBUG] [Thread-136650] [transport.py] [_log()] starting thread (client mode): 0xa2d4e860
2026-02-11T22:05:23.713 [DEBUG] [Thread-136650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:05:23.733 [DEBUG] [Thread-136650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:05:23.733 [INFO] [Thread-136650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:05:23.735 [DEBUG] [Thread-136650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] client lang: <none>
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] server lang: <none>
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] kex follows: False
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:05:23.736 [DEBUG] [Thread-136650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:05:23.737 [DEBUG] [Thread-136650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:05:23.737 [DEBUG] [Thread-136650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:05:23.737 [DEBUG] [Thread-136650] [transport.py] [_log()] Compression: none
2026-02-11T22:05:23.737 [DEBUG] [Thread-136650] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:05:23.754 [DEBUG] [Thread-136650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:05:23.755 [DEBUG] [Thread-136650] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:05:23.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:05:23.756 [DEBUG] [Thread-136650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:05:23.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:05:23.758 [DEBUG] [Thread-136650] [transport.py] [_log()] userauth is OK
2026-02-11T22:05:23.758 [DEBUG] [Thread-136650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:05:23.758 [DEBUG] [Thread-136650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:05:23.758 [DEBUG] [Thread-136650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:05:23.758 [DEBUG] [Thread-136650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:05:23.782 [INFO] [Thread-136650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:05:23.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:05:24.613 [DEBUG] [Thread-136650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:05:24.613 [DEBUG] [Thread-136650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:05:24.614 [DEBUG] [Thread-136650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:05:24.654 [DEBUG] [Thread-136650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:05:24.655 [DEBUG] [Thread-136650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:05:24.658 [DEBUG] [Thread-136650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:05:24.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:05:24.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:05:24.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:05:24.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:05:24.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:05:24.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:05:24.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:05:24.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:05:24.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:05:24.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.836596 -999.00  +15.70  13.03     90  +14.10 1 3 1 3 1     0    0 1.51 -5.37 ----- 11.5 13.0 187.6 16.1 17.6 -3.9 17.4 -4.2 17.3 -3.8 17.6 -4.3
2026-02-11T22:05:24.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:05:24.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:05:24.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.836596
2026-02-11T22:05:24.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:05:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:05:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:05:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:05:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:05:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:05:07', tmtdew=1.18, humidity=92.63, cloud=0.0, wind=22.83, temperature=15.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:04:41.894', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:05:24.683 [DEBUG] [Thread-136650] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:05:24.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:05:24.780 [DEBUG] [Thread-136653] [transport.py] [_log()] starting thread (client mode): 0xa2d9d240
2026-02-11T22:05:24.780 [DEBUG] [Thread-136653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:05:24.795 [DEBUG] [Thread-136653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:05:24.795 [INFO] [Thread-136653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] client lang: <none>
2026-02-11T22:05:24.803 [DEBUG] [Thread-136653] [transport.py] [_log()] server lang: <none>
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] kex follows: False
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] Compression: none
2026-02-11T22:05:24.804 [DEBUG] [Thread-136653] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:05:24.862 [DEBUG] [Thread-136653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:05:24.862 [DEBUG] [Thread-136653] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:05:24.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:05:24.863 [DEBUG] [Thread-136653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:05:24.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:05:24.918 [DEBUG] [Thread-136653] [transport.py] [_log()] userauth is OK
2026-02-11T22:05:24.918 [DEBUG] [Thread-136653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:05:24.918 [DEBUG] [Thread-136653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:05:24.918 [DEBUG] [Thread-136653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:05:24.918 [DEBUG] [Thread-136653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:05:24.937 [INFO] [Thread-136653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:05:24.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:05:24.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:05:25.760 [DEBUG] [Thread-136653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:05:25.760 [DEBUG] [Thread-136653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:05:25.807 [DEBUG] [Thread-136653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:05:25.807 [DEBUG] [Thread-136653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:05:25.818 [DEBUG] [Thread-136653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:05:25.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:05:25.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:05:25.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:05:25.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:05:25.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:05:25.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:05:25.857 [DEBUG] [Thread-136653] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:05:36.155 [DEBUG] [Thread-136655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:05:37.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:05:37.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:05:45.434 [DEBUG] [Thread-136656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:05:51.218 [DEBUG] [Thread-136657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:05:55.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:05:55.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:05:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:05:57.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 5, 43), 1.75, 89.28, 0.0, 23.29, 16.15, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:05:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:05:43
2026-02-11T22:05:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:05:58.278 [DEBUG] [Thread-136658] [transport.py] [_log()] starting thread (client mode): 0xa2d4f940
2026-02-11T22:05:58.278 [DEBUG] [Thread-136658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:05:58.299 [DEBUG] [Thread-136658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:05:58.299 [INFO] [Thread-136658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:05:58.302 [DEBUG] [Thread-136658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:05:58.302 [DEBUG] [Thread-136658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:05:58.302 [DEBUG] [Thread-136658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:05:58.302 [DEBUG] [Thread-136658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:58.302 [DEBUG] [Thread-136658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:58.302 [DEBUG] [Thread-136658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] client lang: <none>
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] server lang: <none>
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] kex follows: False
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] Compression: none
2026-02-11T22:05:58.303 [DEBUG] [Thread-136658] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:05:58.321 [DEBUG] [Thread-136658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:05:58.322 [DEBUG] [Thread-136658] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:05:58.323 [DEBUG] [Thread-136658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:05:58.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:05:58.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:05:58.325 [DEBUG] [Thread-136658] [transport.py] [_log()] userauth is OK
2026-02-11T22:05:58.325 [DEBUG] [Thread-136658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:05:58.326 [DEBUG] [Thread-136658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:05:58.326 [DEBUG] [Thread-136658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:05:58.326 [DEBUG] [Thread-136658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:05:58.359 [INFO] [Thread-136658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:05:58.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:05:58.980 [DEBUG] [Thread-136658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:05:58.980 [DEBUG] [Thread-136658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:05:58.981 [DEBUG] [Thread-136658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:05:59.021 [DEBUG] [Thread-136658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:05:59.022 [DEBUG] [Thread-136658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:05:59.025 [DEBUG] [Thread-136658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:05:59.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:05:59.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:05:59.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:05:59.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:05:59.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:05:59.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:05:59.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:05:59.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:05:59.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:05:59.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.836943 -999.00  +15.70  17.50     89  +14.10 1 3 1 3 1     0    0 1.51 -5.40 ----- 20.8 17.5 187.0 24.3 17.6 -3.0 17.3 -3.8 17.3 -2.9 17.6 -3.0
2026-02-11T22:05:59.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:05:59.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:05:59.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.836943
2026-02-11T22:05:59.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:05:59.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:05:59.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:05:59.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:05:59.053 [DEBUG] [Thread-136658] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:05:59.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:05:59.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:05:43', tmtdew=1.75, humidity=89.28, cloud=0.0, wind=23.29, temperature=16.15, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:05:11.875', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:05:59.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:05:59.150 [DEBUG] [Thread-136661] [transport.py] [_log()] starting thread (client mode): 0xa2d04b50
2026-02-11T22:05:59.150 [DEBUG] [Thread-136661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:05:59.166 [DEBUG] [Thread-136661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:05:59.166 [INFO] [Thread-136661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:05:59.174 [DEBUG] [Thread-136661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:05:59.174 [DEBUG] [Thread-136661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:05:59.174 [DEBUG] [Thread-136661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:05:59.174 [DEBUG] [Thread-136661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] client lang: <none>
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] server lang: <none>
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] kex follows: False
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] Compression: none
2026-02-11T22:05:59.175 [DEBUG] [Thread-136661] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:05:59.234 [DEBUG] [Thread-136661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:05:59.235 [DEBUG] [Thread-136661] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:05:59.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:05:59.236 [DEBUG] [Thread-136661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:05:59.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:05:59.293 [DEBUG] [Thread-136661] [transport.py] [_log()] userauth is OK
2026-02-11T22:05:59.293 [DEBUG] [Thread-136661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:05:59.293 [DEBUG] [Thread-136661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:05:59.293 [DEBUG] [Thread-136661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:05:59.294 [DEBUG] [Thread-136661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:05:59.312 [INFO] [Thread-136661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:05:59.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:05:59.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:06:00.124 [DEBUG] [Thread-136661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:06:00.124 [DEBUG] [Thread-136661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:06:00.173 [DEBUG] [Thread-136661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:06:00.173 [DEBUG] [Thread-136661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:06:00.182 [DEBUG] [Thread-136661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:06:00.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:06:00.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:06:00.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:06:00.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:06:00.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:06:00.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:06:00.222 [DEBUG] [Thread-136661] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:06:06.257 [DEBUG] [Thread-136663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:06:21.305 [DEBUG] [Thread-136664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:06:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:06:30.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:06:30.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:06:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 6, 17), 1.22, 92.64, 0.0, 24.14, 15.66, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:06:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:06:17
2026-02-11T22:06:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:06:32.646 [DEBUG] [Thread-136665] [transport.py] [_log()] starting thread (client mode): 0x9eb07be0
2026-02-11T22:06:32.646 [DEBUG] [Thread-136665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:06:32.667 [DEBUG] [Thread-136665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:06:32.667 [INFO] [Thread-136665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:06:32.670 [DEBUG] [Thread-136665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:06:32.670 [DEBUG] [Thread-136665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] client lang: <none>
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] server lang: <none>
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] kex follows: False
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:06:32.671 [DEBUG] [Thread-136665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:06:32.672 [DEBUG] [Thread-136665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:06:32.672 [DEBUG] [Thread-136665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:06:32.672 [DEBUG] [Thread-136665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:06:32.672 [DEBUG] [Thread-136665] [transport.py] [_log()] Compression: none
2026-02-11T22:06:32.672 [DEBUG] [Thread-136665] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:06:32.690 [DEBUG] [Thread-136665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:06:32.691 [DEBUG] [Thread-136665] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:06:32.691 [DEBUG] [Thread-136665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:06:32.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:06:32.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:06:32.693 [DEBUG] [Thread-136665] [transport.py] [_log()] userauth is OK
2026-02-11T22:06:32.694 [DEBUG] [Thread-136665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:06:32.694 [DEBUG] [Thread-136665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:06:32.694 [DEBUG] [Thread-136665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:06:32.694 [DEBUG] [Thread-136665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:06:32.718 [INFO] [Thread-136665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:06:32.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:06:33.373 [DEBUG] [Thread-136665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:06:33.373 [DEBUG] [Thread-136665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:06:33.373 [DEBUG] [Thread-136665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:06:33.414 [DEBUG] [Thread-136665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:06:33.415 [DEBUG] [Thread-136665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:06:33.418 [DEBUG] [Thread-136665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:06:33.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:06:33.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:06:33.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:06:33.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:06:33.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:06:33.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:06:33.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:06:33.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:06:33.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:06:33.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.837290 -999.00  +15.70  13.28     90  +14.10 1 3 1 3 1     0    0 1.48 -5.84 ----- 13.9 13.3 182.8 23.5 17.6 -3.1 17.3 -3.6 17.3 -2.9 17.6 -3.0
2026-02-11T22:06:33.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:06:33.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:06:33.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.837290
2026-02-11T22:06:33.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:06:33.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:06:33.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:06:33.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:06:33.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:06:33.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:06:17', tmtdew=1.22, humidity=92.64, cloud=0.0, wind=24.14, temperature=15.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:05:41.856', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:06:33.444 [DEBUG] [Thread-136665] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:06:33.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:06:33.542 [DEBUG] [Thread-136668] [transport.py] [_log()] starting thread (client mode): 0xa2d9ef20
2026-02-11T22:06:33.542 [DEBUG] [Thread-136668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:06:33.561 [DEBUG] [Thread-136668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:06:33.561 [INFO] [Thread-136668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:06:33.575 [DEBUG] [Thread-136668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] client lang: <none>
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] server lang: <none>
2026-02-11T22:06:33.576 [DEBUG] [Thread-136668] [transport.py] [_log()] kex follows: False
2026-02-11T22:06:33.577 [DEBUG] [Thread-136668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:06:33.577 [DEBUG] [Thread-136668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:06:33.577 [DEBUG] [Thread-136668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:06:33.577 [DEBUG] [Thread-136668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:06:33.577 [DEBUG] [Thread-136668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:06:33.577 [DEBUG] [Thread-136668] [transport.py] [_log()] Compression: none
2026-02-11T22:06:33.577 [DEBUG] [Thread-136668] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:06:33.630 [DEBUG] [Thread-136668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:06:33.631 [DEBUG] [Thread-136668] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:06:33.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:06:33.632 [DEBUG] [Thread-136668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:06:33.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:06:33.696 [DEBUG] [Thread-136668] [transport.py] [_log()] userauth is OK
2026-02-11T22:06:33.696 [DEBUG] [Thread-136668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:06:33.696 [DEBUG] [Thread-136668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:06:33.696 [DEBUG] [Thread-136668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:06:33.696 [DEBUG] [Thread-136668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:06:33.715 [INFO] [Thread-136668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:06:33.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:06:33.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:06:34.531 [DEBUG] [Thread-136668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:06:34.531 [DEBUG] [Thread-136668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:06:34.582 [DEBUG] [Thread-136668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:06:34.582 [DEBUG] [Thread-136668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:06:34.592 [DEBUG] [Thread-136668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:06:34.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:06:34.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:06:34.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:06:34.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:06:34.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:06:34.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:06:34.636 [DEBUG] [Thread-136668] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:06:36.344 [DEBUG] [Thread-136670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:06:37.418 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:06:37.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:06:45.511 [DEBUG] [Thread-136671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:06:51.393 [DEBUG] [Thread-136672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:07:04.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:07:04.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:07:04.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:07:06.429 [DEBUG] [Thread-136673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:07:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 6, 53), 1.19, 92.58, 0.0, 26.5, 15.49, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:07:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:06:53
2026-02-11T22:07:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:07:07.567 [DEBUG] [Thread-136674] [transport.py] [_log()] starting thread (client mode): 0xa2d9dd50
2026-02-11T22:07:07.567 [DEBUG] [Thread-136674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:07:07.587 [DEBUG] [Thread-136674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:07:07.587 [INFO] [Thread-136674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:07:07.590 [DEBUG] [Thread-136674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:07:07.590 [DEBUG] [Thread-136674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:07:07.599 [DEBUG] [Thread-136674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:07:07.599 [DEBUG] [Thread-136674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:07.599 [DEBUG] [Thread-136674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] client lang: <none>
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] server lang: <none>
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] kex follows: False
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:07:07.600 [DEBUG] [Thread-136674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:07:07.601 [DEBUG] [Thread-136674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:07:07.601 [DEBUG] [Thread-136674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:07:07.601 [DEBUG] [Thread-136674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:07:07.601 [DEBUG] [Thread-136674] [transport.py] [_log()] Compression: none
2026-02-11T22:07:07.601 [DEBUG] [Thread-136674] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:07:07.620 [DEBUG] [Thread-136674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:07:07.621 [DEBUG] [Thread-136674] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:07:07.621 [DEBUG] [Thread-136674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:07:07.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:07:07.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:07:07.665 [DEBUG] [Thread-136674] [transport.py] [_log()] userauth is OK
2026-02-11T22:07:07.665 [DEBUG] [Thread-136674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:07:07.665 [DEBUG] [Thread-136674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:07:07.665 [DEBUG] [Thread-136674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:07:07.665 [DEBUG] [Thread-136674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:07:07.690 [INFO] [Thread-136674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:07:07.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:07:08.327 [DEBUG] [Thread-136674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:07:08.327 [DEBUG] [Thread-136674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:07:08.327 [DEBUG] [Thread-136674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:07:08.368 [DEBUG] [Thread-136674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:07:08.369 [DEBUG] [Thread-136674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:07:08.372 [DEBUG] [Thread-136674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:07:08.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:07:08.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:07:08.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:07:08.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:07:08.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:07:08.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:07:08.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:07:08.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:07:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:07:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.837637 -999.00  +15.70  11.00     90  +14.10 1 3 1 3 1     0    0 1.50 -6.50 ----- 12.8 11.0 182.2 18.0 17.6 -3.1 17.4 -3.4 17.3 -2.8 17.6 -3.1
2026-02-11T22:07:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:07:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:07:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.837637
2026-02-11T22:07:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:07:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:07:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:07:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:07:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:07:08.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:06:53', tmtdew=1.19, humidity=92.58, cloud=0.0, wind=26.5, temperature=15.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:06:11.837', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:07:08.398 [DEBUG] [Thread-136674] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:07:08.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:07:08.494 [DEBUG] [Thread-136677] [transport.py] [_log()] starting thread (client mode): 0xa57b1960
2026-02-11T22:07:08.494 [DEBUG] [Thread-136677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:07:08.508 [DEBUG] [Thread-136677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:07:08.508 [INFO] [Thread-136677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:07:08.516 [DEBUG] [Thread-136677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:07:08.516 [DEBUG] [Thread-136677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:07:08.516 [DEBUG] [Thread-136677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:07:08.516 [DEBUG] [Thread-136677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:08.516 [DEBUG] [Thread-136677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] client lang: <none>
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] server lang: <none>
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] kex follows: False
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] Compression: none
2026-02-11T22:07:08.517 [DEBUG] [Thread-136677] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:07:08.576 [DEBUG] [Thread-136677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:07:08.577 [DEBUG] [Thread-136677] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:07:08.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:07:08.578 [DEBUG] [Thread-136677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:07:08.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:07:08.632 [DEBUG] [Thread-136677] [transport.py] [_log()] userauth is OK
2026-02-11T22:07:08.633 [DEBUG] [Thread-136677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:07:08.633 [DEBUG] [Thread-136677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:07:08.633 [DEBUG] [Thread-136677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:07:08.633 [DEBUG] [Thread-136677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:07:08.651 [INFO] [Thread-136677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:07:08.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:07:08.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:07:09.490 [DEBUG] [Thread-136677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:07:09.490 [DEBUG] [Thread-136677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:07:09.541 [DEBUG] [Thread-136677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:07:09.542 [DEBUG] [Thread-136677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:07:09.553 [DEBUG] [Thread-136677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:07:09.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:07:09.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:07:09.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:07:09.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:07:09.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:07:09.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:07:09.601 [DEBUG] [Thread-136677] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:07:21.467 [DEBUG] [Thread-136679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:07:36.524 [DEBUG] [Thread-136680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:07:37.636 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:07:37.637 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:07:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:07:39.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:07:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:07:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 7, 29), 1.17, 92.64, 0.0, 25.58, 15.46, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:07:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:07:29
2026-02-11T22:07:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:07:42.592 [DEBUG] [Thread-136681] [transport.py] [_log()] starting thread (client mode): 0x9eb06740
2026-02-11T22:07:42.592 [DEBUG] [Thread-136681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:07:42.613 [DEBUG] [Thread-136681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:07:42.613 [INFO] [Thread-136681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:07:42.616 [DEBUG] [Thread-136681] [transport.py] [_log()] client lang: <none>
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] server lang: <none>
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] kex follows: False
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] Compression: none
2026-02-11T22:07:42.617 [DEBUG] [Thread-136681] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:07:42.636 [DEBUG] [Thread-136681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:07:42.637 [DEBUG] [Thread-136681] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:07:42.637 [DEBUG] [Thread-136681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:07:42.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:07:42.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:07:42.639 [DEBUG] [Thread-136681] [transport.py] [_log()] userauth is OK
2026-02-11T22:07:42.640 [DEBUG] [Thread-136681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:07:42.640 [DEBUG] [Thread-136681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:07:42.640 [DEBUG] [Thread-136681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:07:42.640 [DEBUG] [Thread-136681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:07:42.664 [INFO] [Thread-136681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:07:42.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:07:43.304 [DEBUG] [Thread-136681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:07:43.304 [DEBUG] [Thread-136681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:07:43.305 [DEBUG] [Thread-136681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:07:43.345 [DEBUG] [Thread-136681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:07:43.345 [DEBUG] [Thread-136681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:07:43.348 [DEBUG] [Thread-136681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:07:43.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:07:43.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:07:43.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:07:43.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:07:43.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:07:43.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:07:43.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:07:43.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:07:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:07:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.838332 -999.00  +15.70  14.49     89  +14.10 1 3 1 3 1     0    0 1.51 -5.92 ----- 11.3 14.5 196.4 23.9 17.6 -5.9 17.4 -5.9 17.3 -4.7 17.6 -4.9
2026-02-11T22:07:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:07:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:07:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.838332
2026-02-11T22:07:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:07:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:07:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:07:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:07:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:07:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:07:29', tmtdew=1.17, humidity=92.64, cloud=0.0, wind=25.58, temperature=15.46, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:07:11.885', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:07:43.373 [DEBUG] [Thread-136681] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:07:43.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:07:43.467 [DEBUG] [Thread-136684] [transport.py] [_log()] starting thread (client mode): 0x9eb05a80
2026-02-11T22:07:43.467 [DEBUG] [Thread-136684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:07:43.482 [DEBUG] [Thread-136684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:07:43.483 [INFO] [Thread-136684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:07:43.490 [DEBUG] [Thread-136684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:07:43.490 [DEBUG] [Thread-136684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] client lang: <none>
2026-02-11T22:07:43.491 [DEBUG] [Thread-136684] [transport.py] [_log()] server lang: <none>
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] kex follows: False
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] Compression: none
2026-02-11T22:07:43.492 [DEBUG] [Thread-136684] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:07:43.548 [DEBUG] [Thread-136684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:07:43.548 [DEBUG] [Thread-136684] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:07:43.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:07:43.549 [DEBUG] [Thread-136684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:07:43.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:07:43.611 [DEBUG] [Thread-136684] [transport.py] [_log()] userauth is OK
2026-02-11T22:07:43.611 [DEBUG] [Thread-136684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:07:43.612 [DEBUG] [Thread-136684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:07:43.612 [DEBUG] [Thread-136684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:07:43.612 [DEBUG] [Thread-136684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:07:43.634 [INFO] [Thread-136684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:07:43.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:07:43.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:07:44.466 [DEBUG] [Thread-136684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:07:44.467 [DEBUG] [Thread-136684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:07:44.514 [DEBUG] [Thread-136684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:07:44.514 [DEBUG] [Thread-136684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:07:44.523 [DEBUG] [Thread-136684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:07:44.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:07:44.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:07:44.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:07:44.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:07:44.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:07:44.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:07:44.559 [DEBUG] [Thread-136684] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:07:45.590 [DEBUG] [Thread-136686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:07:51.561 [DEBUG] [Thread-136687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:06.612 [DEBUG] [Thread-136688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:08:14.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:08:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:08:16.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 8, 5), 1.17, 92.69, 0.0, 25.97, 15.48, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:08:16.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:08:05
2026-02-11T22:08:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:08:16.956 [DEBUG] [Thread-136689] [transport.py] [_log()] starting thread (client mode): 0x9eb06530
2026-02-11T22:08:16.957 [DEBUG] [Thread-136689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:08:16.975 [DEBUG] [Thread-136689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:08:16.975 [INFO] [Thread-136689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:08:16.978 [DEBUG] [Thread-136689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:08:16.978 [DEBUG] [Thread-136689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] client lang: <none>
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] server lang: <none>
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] kex follows: False
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:08:16.979 [DEBUG] [Thread-136689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:08:16.980 [DEBUG] [Thread-136689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:08:16.980 [DEBUG] [Thread-136689] [transport.py] [_log()] Compression: none
2026-02-11T22:08:16.980 [DEBUG] [Thread-136689] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:08:16.999 [DEBUG] [Thread-136689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:08:17.000 [DEBUG] [Thread-136689] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:08:17.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:08:17.001 [DEBUG] [Thread-136689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:08:17.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:08:17.003 [DEBUG] [Thread-136689] [transport.py] [_log()] userauth is OK
2026-02-11T22:08:17.003 [DEBUG] [Thread-136689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:08:17.003 [DEBUG] [Thread-136689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:08:17.004 [DEBUG] [Thread-136689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:08:17.004 [DEBUG] [Thread-136689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:08:17.019 [INFO] [Thread-136689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:08:17.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:08:17.807 [DEBUG] [Thread-136689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:08:17.808 [DEBUG] [Thread-136689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:08:17.808 [DEBUG] [Thread-136689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:08:17.848 [DEBUG] [Thread-136689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:08:17.848 [DEBUG] [Thread-136689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:08:17.852 [DEBUG] [Thread-136689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:08:17.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:08:17.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:08:17.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:08:17.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:08:17.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:08:17.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:08:17.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:08:17.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:08:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:08:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.838679 -999.00  +15.70  19.12     89  +14.00 1 3 1 3 1     0    0 1.49 -6.48 ----- 18.9 19.1 180.6 23.4 17.6 -6.1 17.4 -5.9 17.3 -4.5 17.6 -5.9
2026-02-11T22:08:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:08:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:08:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.838679
2026-02-11T22:08:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:08:17.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:08:17.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:08:17.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:08:17.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:08:17.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:08:05', tmtdew=1.17, humidity=92.69, cloud=0.0, wind=25.97, temperature=15.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:07:41.866', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:08:17.884 [DEBUG] [Thread-136689] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:08:17.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:08:17.980 [DEBUG] [Thread-136692] [transport.py] [_log()] starting thread (client mode): 0xa2d4ea70
2026-02-11T22:08:17.980 [DEBUG] [Thread-136692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:08:17.994 [DEBUG] [Thread-136692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:08:17.995 [INFO] [Thread-136692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:08:18.002 [DEBUG] [Thread-136692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:08:18.002 [DEBUG] [Thread-136692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:08:18.002 [DEBUG] [Thread-136692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:08:18.002 [DEBUG] [Thread-136692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:18.002 [DEBUG] [Thread-136692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] client lang: <none>
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] server lang: <none>
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] kex follows: False
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] Compression: none
2026-02-11T22:08:18.003 [DEBUG] [Thread-136692] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:08:18.063 [DEBUG] [Thread-136692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:08:18.064 [DEBUG] [Thread-136692] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:08:18.064 [DEBUG] [Thread-136692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:08:18.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:08:18.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:08:18.119 [DEBUG] [Thread-136692] [transport.py] [_log()] userauth is OK
2026-02-11T22:08:18.120 [DEBUG] [Thread-136692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:08:18.120 [DEBUG] [Thread-136692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:08:18.120 [DEBUG] [Thread-136692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:08:18.120 [DEBUG] [Thread-136692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:08:18.143 [INFO] [Thread-136692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:08:18.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:08:18.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:08:18.984 [DEBUG] [Thread-136692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:08:18.984 [DEBUG] [Thread-136692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:08:19.033 [DEBUG] [Thread-136692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:08:19.033 [DEBUG] [Thread-136692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:08:19.042 [DEBUG] [Thread-136692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:08:19.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:08:19.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:08:19.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:08:19.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:08:19.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:08:19.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:08:19.084 [DEBUG] [Thread-136692] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:08:21.651 [DEBUG] [Thread-136694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:36.704 [DEBUG] [Thread-136695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:37.838 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:37.839 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:45.666 [DEBUG] [Thread-136696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:49.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:08:49.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:08:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:08:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 8, 40), 1.72, 89.45, 0.0, 24.31, 15.89, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:08:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:08:40
2026-02-11T22:08:51.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:08:51.457 [DEBUG] [Thread-136697] [transport.py] [_log()] starting thread (client mode): 0xa2d4dae0
2026-02-11T22:08:51.458 [DEBUG] [Thread-136697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:08:51.478 [DEBUG] [Thread-136697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:08:51.478 [INFO] [Thread-136697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:08:51.481 [DEBUG] [Thread-136697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:08:51.481 [DEBUG] [Thread-136697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] client lang: <none>
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] server lang: <none>
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] kex follows: False
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] Compression: none
2026-02-11T22:08:51.482 [DEBUG] [Thread-136697] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:08:51.498 [DEBUG] [Thread-136697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:08:51.499 [DEBUG] [Thread-136697] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:08:51.499 [DEBUG] [Thread-136697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:08:51.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:08:51.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:08:51.501 [DEBUG] [Thread-136697] [transport.py] [_log()] userauth is OK
2026-02-11T22:08:51.501 [DEBUG] [Thread-136697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:08:51.501 [DEBUG] [Thread-136697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:08:51.501 [DEBUG] [Thread-136697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:08:51.501 [DEBUG] [Thread-136697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:08:51.520 [INFO] [Thread-136697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:08:51.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:08:51.741 [DEBUG] [Thread-136699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:08:52.159 [DEBUG] [Thread-136697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:08:52.159 [DEBUG] [Thread-136697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:08:52.159 [DEBUG] [Thread-136697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:08:52.200 [DEBUG] [Thread-136697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:08:52.201 [DEBUG] [Thread-136697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:08:52.204 [DEBUG] [Thread-136697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:08:52.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:08:52.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:08:52.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:08:52.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:08:52.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:08:52.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:08:52.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:08:52.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:08:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:08:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.839026 -999.00  +15.60  17.17     89  +14.00 1 3 1 3 1     0    0 1.48 -5.94 ----- 14.4 17.2 194.4 28.8 17.6 -5.8 17.3 -5.7 17.2 -5.4 17.6 -5.9
2026-02-11T22:08:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:08:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:08:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.839026
2026-02-11T22:08:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:08:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:08:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:08:52.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:08:52.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:08:52.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:08:40', tmtdew=1.72, humidity=89.45, cloud=0.0, wind=24.31, temperature=15.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:08:11.846', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:08:52.232 [DEBUG] [Thread-136697] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:08:52.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:08:52.329 [DEBUG] [Thread-136701] [transport.py] [_log()] starting thread (client mode): 0xa2d4fb50
2026-02-11T22:08:52.329 [DEBUG] [Thread-136701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:08:52.344 [DEBUG] [Thread-136701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:08:52.344 [INFO] [Thread-136701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] client lang: <none>
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] server lang: <none>
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] kex follows: False
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:08:52.352 [DEBUG] [Thread-136701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:08:52.353 [DEBUG] [Thread-136701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:08:52.353 [DEBUG] [Thread-136701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:08:52.353 [DEBUG] [Thread-136701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:08:52.353 [DEBUG] [Thread-136701] [transport.py] [_log()] Compression: none
2026-02-11T22:08:52.353 [DEBUG] [Thread-136701] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:08:52.412 [DEBUG] [Thread-136701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:08:52.412 [DEBUG] [Thread-136701] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:08:52.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:08:52.413 [DEBUG] [Thread-136701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:08:52.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:08:52.471 [DEBUG] [Thread-136701] [transport.py] [_log()] userauth is OK
2026-02-11T22:08:52.471 [DEBUG] [Thread-136701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:08:52.472 [DEBUG] [Thread-136701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:08:52.472 [DEBUG] [Thread-136701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:08:52.472 [DEBUG] [Thread-136701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:08:52.491 [INFO] [Thread-136701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:08:52.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:08:52.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:08:53.303 [DEBUG] [Thread-136701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:08:53.303 [DEBUG] [Thread-136701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:08:53.351 [DEBUG] [Thread-136701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:08:53.351 [DEBUG] [Thread-136701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:08:53.360 [DEBUG] [Thread-136701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:08:53.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:08:53.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:08:53.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:08:53.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:08:53.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:08:53.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:08:53.393 [DEBUG] [Thread-136701] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:09:06.775 [DEBUG] [Thread-136703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:09:21.835 [DEBUG] [Thread-136704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:09:23.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:09:23.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:09:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:09:25.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 9, 16), 1.15, 92.81, 0.0, 22.0, 15.51, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:09:25.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:09:16
2026-02-11T22:09:26.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:09:26.280 [DEBUG] [Thread-136705] [transport.py] [_log()] starting thread (client mode): 0x9eb050f0
2026-02-11T22:09:26.281 [DEBUG] [Thread-136705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:09:26.300 [DEBUG] [Thread-136705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:09:26.300 [INFO] [Thread-136705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:09:26.303 [DEBUG] [Thread-136705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] client lang: <none>
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] server lang: <none>
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] kex follows: False
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:09:26.304 [DEBUG] [Thread-136705] [transport.py] [_log()] Compression: none
2026-02-11T22:09:26.305 [DEBUG] [Thread-136705] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:09:26.324 [DEBUG] [Thread-136705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:09:26.325 [DEBUG] [Thread-136705] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:09:26.325 [DEBUG] [Thread-136705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:09:26.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:09:26.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:09:26.327 [DEBUG] [Thread-136705] [transport.py] [_log()] userauth is OK
2026-02-11T22:09:26.328 [DEBUG] [Thread-136705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:09:26.328 [DEBUG] [Thread-136705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:09:26.328 [DEBUG] [Thread-136705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:09:26.328 [DEBUG] [Thread-136705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:09:26.353 [INFO] [Thread-136705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:09:26.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:09:26.967 [DEBUG] [Thread-136705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:09:26.968 [DEBUG] [Thread-136705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:09:26.968 [DEBUG] [Thread-136705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:09:27.009 [DEBUG] [Thread-136705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:09:27.009 [DEBUG] [Thread-136705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:09:27.012 [DEBUG] [Thread-136705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:09:27.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:09:27.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:09:27.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:09:27.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:09:27.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:09:27.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:09:27.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:09:27.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:09:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:09:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.839373 -999.00  +15.60  20.33     90  +14.00 1 3 1 3 1     0    0 1.50 -6.05 ----- 14.2 20.3 196.2 24.1 17.5 -7.6 17.3 -7.0 17.2 -7.5 17.6 -7.4
2026-02-11T22:09:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:09:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:09:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.839373
2026-02-11T22:09:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:09:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:09:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:09:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:09:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:09:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:09:16', tmtdew=1.15, humidity=92.81, cloud=0.0, wind=22.0, temperature=15.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:08:41.827', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:09:27.040 [DEBUG] [Thread-136705] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:09:27.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:09:27.135 [DEBUG] [Thread-136708] [transport.py] [_log()] starting thread (client mode): 0x9eb05900
2026-02-11T22:09:27.135 [DEBUG] [Thread-136708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:09:27.149 [DEBUG] [Thread-136708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:09:27.149 [INFO] [Thread-136708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:09:27.157 [DEBUG] [Thread-136708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:09:27.157 [DEBUG] [Thread-136708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:09:27.157 [DEBUG] [Thread-136708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:09:27.157 [DEBUG] [Thread-136708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] client lang: <none>
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] server lang: <none>
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] kex follows: False
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] Compression: none
2026-02-11T22:09:27.158 [DEBUG] [Thread-136708] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:09:27.215 [DEBUG] [Thread-136708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:09:27.215 [DEBUG] [Thread-136708] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:09:27.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:09:27.216 [DEBUG] [Thread-136708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:09:27.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:09:27.270 [DEBUG] [Thread-136708] [transport.py] [_log()] userauth is OK
2026-02-11T22:09:27.271 [DEBUG] [Thread-136708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:09:27.271 [DEBUG] [Thread-136708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:09:27.271 [DEBUG] [Thread-136708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:09:27.271 [DEBUG] [Thread-136708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:09:27.289 [INFO] [Thread-136708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:09:27.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:09:27.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:09:28.145 [DEBUG] [Thread-136708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:09:28.145 [DEBUG] [Thread-136708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:09:28.193 [DEBUG] [Thread-136708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:09:28.194 [DEBUG] [Thread-136708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:09:28.203 [DEBUG] [Thread-136708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:09:28.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:09:28.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:09:28.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:09:28.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:09:28.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:09:28.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:09:28.240 [DEBUG] [Thread-136708] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:09:36.871 [DEBUG] [Thread-136710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:09:38.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:09:38.047 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:09:45.743 [DEBUG] [Thread-136711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:09:51.935 [DEBUG] [Thread-136712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:09:58.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:09:58.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:09:58.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:10:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 9, 16), 1.15, 92.81, 0.0, 22.0, 15.51, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:10:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:09:16
2026-02-11T22:10:00.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:10:00.671 [DEBUG] [Thread-136713] [transport.py] [_log()] starting thread (client mode): 0xa2d4dc30
2026-02-11T22:10:00.671 [DEBUG] [Thread-136713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:10:00.691 [DEBUG] [Thread-136713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:10:00.691 [INFO] [Thread-136713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:10:00.694 [DEBUG] [Thread-136713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:10:00.694 [DEBUG] [Thread-136713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:10:00.694 [DEBUG] [Thread-136713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:10:00.694 [DEBUG] [Thread-136713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:00.694 [DEBUG] [Thread-136713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:00.694 [DEBUG] [Thread-136713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] client lang: <none>
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] server lang: <none>
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] kex follows: False
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] Compression: none
2026-02-11T22:10:00.695 [DEBUG] [Thread-136713] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:10:00.711 [DEBUG] [Thread-136713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:10:00.712 [DEBUG] [Thread-136713] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:10:00.712 [DEBUG] [Thread-136713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:10:00.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:10:00.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:10:00.757 [DEBUG] [Thread-136713] [transport.py] [_log()] userauth is OK
2026-02-11T22:10:00.758 [DEBUG] [Thread-136713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:10:00.758 [DEBUG] [Thread-136713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:10:00.758 [DEBUG] [Thread-136713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:10:00.758 [DEBUG] [Thread-136713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:10:00.790 [INFO] [Thread-136713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:10:00.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:10:01.435 [DEBUG] [Thread-136713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:10:01.436 [DEBUG] [Thread-136713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:10:01.436 [DEBUG] [Thread-136713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:10:01.477 [DEBUG] [Thread-136713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:10:01.477 [DEBUG] [Thread-136713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:10:01.479 [DEBUG] [Thread-136713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:10:01.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:10:01.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:10:01.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:10:01.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:10:01.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:10:01.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:10:01.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.839721 -999.00  +15.60  19.12     89  +13.90 1 3 1 3 1     0    0 1.47 -6.31 ..... 22.4 19.1 195.8 25.1 17.5 -11.0 17.2 -9.9 17.2 -10.0 17.6 -10.8
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.839721
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:10:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:09:16', tmtdew=1.15, humidity=92.81, cloud=0.0, wind=22.0, temperature=15.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:09:11.894', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:10:01.497 [DEBUG] [Thread-136713] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:10:01.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:10:01.588 [DEBUG] [Thread-136716] [transport.py] [_log()] starting thread (client mode): 0xa57b0cd0
2026-02-11T22:10:01.588 [DEBUG] [Thread-136716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:10:01.607 [DEBUG] [Thread-136716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:10:01.607 [INFO] [Thread-136716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:10:01.614 [DEBUG] [Thread-136716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] client lang: <none>
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] server lang: <none>
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] kex follows: False
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:10:01.615 [DEBUG] [Thread-136716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:10:01.616 [DEBUG] [Thread-136716] [transport.py] [_log()] Compression: none
2026-02-11T22:10:01.616 [DEBUG] [Thread-136716] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:10:01.673 [DEBUG] [Thread-136716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:10:01.674 [DEBUG] [Thread-136716] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:10:01.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:10:01.675 [DEBUG] [Thread-136716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:10:01.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:10:01.730 [DEBUG] [Thread-136716] [transport.py] [_log()] userauth is OK
2026-02-11T22:10:01.730 [DEBUG] [Thread-136716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:10:01.731 [DEBUG] [Thread-136716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:10:01.731 [DEBUG] [Thread-136716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:10:01.731 [DEBUG] [Thread-136716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:10:01.749 [INFO] [Thread-136716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:10:01.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:10:01.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:10:02.643 [DEBUG] [Thread-136716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:10:02.644 [DEBUG] [Thread-136716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:10:02.691 [DEBUG] [Thread-136716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:10:02.692 [DEBUG] [Thread-136716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:10:02.701 [DEBUG] [Thread-136716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:10:02.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:10:02.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:10: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') -> 00000000
2026-02-11T22:10:02.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:10:02.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:10:02.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:10:02.738 [DEBUG] [Thread-136716] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:10:06.972 [DEBUG] [Thread-136718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:10:22.028 [DEBUG] [Thread-136719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:10:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:10:32.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:10: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
2026-02-11T22:10:34.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 9, 53), 1.14, 92.84, 0.0, 24.07, 15.48, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:10:34.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:09:53
2026-02-11T22:10:34.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:10:35.107 [DEBUG] [Thread-136720] [transport.py] [_log()] starting thread (client mode): 0xa575b4f0
2026-02-11T22:10:35.107 [DEBUG] [Thread-136720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:10:35.127 [DEBUG] [Thread-136720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:10:35.127 [INFO] [Thread-136720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] client lang: <none>
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] server lang: <none>
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] kex follows: False
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:10:35.131 [DEBUG] [Thread-136720] [transport.py] [_log()] Compression: none
2026-02-11T22:10:35.132 [DEBUG] [Thread-136720] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:10:35.148 [DEBUG] [Thread-136720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:10:35.148 [DEBUG] [Thread-136720] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:10:35.149 [DEBUG] [Thread-136720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:10:35.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:10:35.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:10:35.151 [DEBUG] [Thread-136720] [transport.py] [_log()] userauth is OK
2026-02-11T22:10:35.152 [DEBUG] [Thread-136720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:10:35.152 [DEBUG] [Thread-136720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:10:35.152 [DEBUG] [Thread-136720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:10:35.152 [DEBUG] [Thread-136720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:10:35.176 [INFO] [Thread-136720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:10:35.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:10:35.824 [DEBUG] [Thread-136720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:10:35.825 [DEBUG] [Thread-136720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:10:35.825 [DEBUG] [Thread-136720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:10:35.865 [DEBUG] [Thread-136720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:10:35.866 [DEBUG] [Thread-136720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:10:35.869 [DEBUG] [Thread-136720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:10:35.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:10:35.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:10:35.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:10:35.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:10:35.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:10:35.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:10:35.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:10:35.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:10:35.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:10:35.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.840068 -999.00  +15.60  21.07     90  +13.90 1 3 1 3 1     0    0 1.47 -6.61 ..... 17.8 21.1 200.1 24.9 17.4 -11.7 17.2 -10.1 17.2 -9.8 17.5 -11.5
2026-02-11T22:10:35.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:10:35.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:10:35.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.840068
2026-02-11T22:10:35.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:10:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:10:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:10:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:10:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:10:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:09:53', tmtdew=1.14, humidity=92.84, cloud=0.0, wind=24.07, temperature=15.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:09:41.875', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:10:35.897 [DEBUG] [Thread-136720] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:10:35.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:10:35.992 [DEBUG] [Thread-136723] [transport.py] [_log()] starting thread (client mode): 0xa2d4f790
2026-02-11T22:10:35.993 [DEBUG] [Thread-136723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:10:36.007 [DEBUG] [Thread-136723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:10:36.007 [INFO] [Thread-136723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:10:36.015 [DEBUG] [Thread-136723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] client lang: <none>
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] server lang: <none>
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] kex follows: False
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] Compression: none
2026-02-11T22:10:36.016 [DEBUG] [Thread-136723] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:10:36.074 [DEBUG] [Thread-136723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:10:36.074 [DEBUG] [Thread-136723] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:10:36.075 [DEBUG] [Thread-136723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:10:36.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:10:36.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:10:36.129 [DEBUG] [Thread-136723] [transport.py] [_log()] userauth is OK
2026-02-11T22:10:36.130 [DEBUG] [Thread-136723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:10:36.130 [DEBUG] [Thread-136723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:10:36.130 [DEBUG] [Thread-136723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:10:36.130 [DEBUG] [Thread-136723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:10:36.147 [INFO] [Thread-136723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:10:36.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:10:36.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:10:36.978 [DEBUG] [Thread-136723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:10:36.979 [DEBUG] [Thread-136723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:10:37.026 [DEBUG] [Thread-136723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:10:37.026 [DEBUG] [Thread-136723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:10:37.036 [DEBUG] [Thread-136723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:10:37.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:10:37.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:10:37.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:10:37.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:10:37.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:10:37.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:10:37.067 [DEBUG] [Thread-136725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:10:37.072 [DEBUG] [Thread-136723] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:10:38.248 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:10:38.250 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:10:45.819 [DEBUG] [Thread-136726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:10:52.122 [DEBUG] [Thread-136727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:11:07.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:11:07.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:11:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:11:07.156 [DEBUG] [Thread-136728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:11:09.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 10, 28), 1.15, 92.78, 0.0, 24.83, 15.44, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:11:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:10:28
2026-02-11T22:11:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:11:10.067 [DEBUG] [Thread-136729] [transport.py] [_log()] starting thread (client mode): 0xa2d05720
2026-02-11T22:11:10.067 [DEBUG] [Thread-136729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:11:10.087 [DEBUG] [Thread-136729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:11:10.087 [INFO] [Thread-136729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] client lang: <none>
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] server lang: <none>
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] kex follows: False
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:11:10.089 [DEBUG] [Thread-136729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:11:10.090 [DEBUG] [Thread-136729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:11:10.090 [DEBUG] [Thread-136729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:11:10.090 [DEBUG] [Thread-136729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:11:10.090 [DEBUG] [Thread-136729] [transport.py] [_log()] Compression: none
2026-02-11T22:11:10.090 [DEBUG] [Thread-136729] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:11:10.104 [DEBUG] [Thread-136729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:11:10.105 [DEBUG] [Thread-136729] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:11:10.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:11:10.106 [DEBUG] [Thread-136729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:11:10.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:11:10.108 [DEBUG] [Thread-136729] [transport.py] [_log()] userauth is OK
2026-02-11T22:11:10.108 [DEBUG] [Thread-136729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:11:10.109 [DEBUG] [Thread-136729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:11:10.109 [DEBUG] [Thread-136729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:11:10.109 [DEBUG] [Thread-136729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:11:10.128 [INFO] [Thread-136729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:11:10.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:11:10.876 [DEBUG] [Thread-136729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:11:10.876 [DEBUG] [Thread-136729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:11:10.877 [DEBUG] [Thread-136729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:11:10.918 [DEBUG] [Thread-136729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:11:10.918 [DEBUG] [Thread-136729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:11:10.920 [DEBUG] [Thread-136729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:11:10.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:11:10.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:11:10.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:11:10.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:11:10.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:11:10.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:11:10.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.840415 -999.00  +15.50  21.43     90  +13.90 1 3 1 3 1     0    0 1.46 -6.11 ZN..W 22.1 21.4 200.4 26.2 17.4 -10.6 17.2 -9.4 17.1 -9.8 17.4 -10.1
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.840415
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:11:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:10:28', tmtdew=1.15, humidity=92.78, cloud=0.0, wind=24.83, temperature=15.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:10:11.856', atlas_cloud=3, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:11:10.937 [DEBUG] [Thread-136729] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:11:11.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:11:11.033 [DEBUG] [Thread-136732] [transport.py] [_log()] starting thread (client mode): 0xa2d04c40
2026-02-11T22:11:11.033 [DEBUG] [Thread-136732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:11:11.050 [DEBUG] [Thread-136732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:11:11.050 [INFO] [Thread-136732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] client lang: <none>
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] server lang: <none>
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] kex follows: False
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] Compression: none
2026-02-11T22:11:11.058 [DEBUG] [Thread-136732] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:11:11.122 [DEBUG] [Thread-136732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:11:11.122 [DEBUG] [Thread-136732] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:11:11.123 [DEBUG] [Thread-136732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:11:11.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:11:11.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:11:11.181 [DEBUG] [Thread-136732] [transport.py] [_log()] userauth is OK
2026-02-11T22:11:11.182 [DEBUG] [Thread-136732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:11:11.182 [DEBUG] [Thread-136732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:11:11.182 [DEBUG] [Thread-136732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:11:11.182 [DEBUG] [Thread-136732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:11:11.200 [INFO] [Thread-136732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:11:11.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:11:11.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:11:12.075 [DEBUG] [Thread-136732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:11:12.075 [DEBUG] [Thread-136732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:11:12.124 [DEBUG] [Thread-136732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:11:12.124 [DEBUG] [Thread-136732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:11:12.133 [DEBUG] [Thread-136732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:11:12.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:11:12.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:11:12.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:11:12.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:11:12.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:11:12.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:11:12.173 [DEBUG] [Thread-136732] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:11:22.189 [DEBUG] [Thread-136734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:11:37.242 [DEBUG] [Thread-136735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:11:38.452 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:11:38.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:11:42.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:11:42.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:11:42.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:11:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 11, 3), 1.15, 92.81, 0.0, 23.89, 15.48, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:11:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:11:03
2026-02-11T22:11:45.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:11:45.434 [DEBUG] [Thread-136736] [transport.py] [_log()] starting thread (client mode): 0x9eb048e0
2026-02-11T22:11:45.435 [DEBUG] [Thread-136736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:11:45.455 [DEBUG] [Thread-136736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:11:45.455 [INFO] [Thread-136736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:11:45.458 [DEBUG] [Thread-136736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] client lang: <none>
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] server lang: <none>
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] kex follows: False
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] Compression: none
2026-02-11T22:11:45.459 [DEBUG] [Thread-136736] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:11:45.476 [DEBUG] [Thread-136736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:11:45.477 [DEBUG] [Thread-136736] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:11:45.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:11:45.478 [DEBUG] [Thread-136736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:11:45.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:11:45.480 [DEBUG] [Thread-136736] [transport.py] [_log()] userauth is OK
2026-02-11T22:11:45.480 [DEBUG] [Thread-136736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:11:45.480 [DEBUG] [Thread-136736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:11:45.480 [DEBUG] [Thread-136736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:11:45.481 [DEBUG] [Thread-136736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:11:45.505 [INFO] [Thread-136736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:11:45.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:11:45.888 [DEBUG] [Thread-136738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:11:46.160 [DEBUG] [Thread-136736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:11:46.160 [DEBUG] [Thread-136736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:11:46.161 [DEBUG] [Thread-136736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:11:46.202 [DEBUG] [Thread-136736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:11:46.202 [DEBUG] [Thread-136736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:11:46.205 [DEBUG] [Thread-136736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:11:46.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:11:46.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:11:46.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:11:46.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:11:46.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:11:46.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:11:46.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:11:46.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:11:46.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:11:46.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.841109 -999.00  +15.60  12.47     90  +13.90 1 2 1 3 1     0    0 1.50 -4.84 zNESW 13.4 12.5 198.5 21.2 17.2 -18.9 17.0 -18.0 17.0 -17.4 17.3 -18.6
2026-02-11T22:11:46.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:11:46.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:11:46.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.841109
2026-02-11T22:11:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:11:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:11:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:11:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:11:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:11:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:11:03', tmtdew=1.15, humidity=92.81, cloud=0.0, wind=23.89, temperature=15.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:11:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.7327499999999993, 1.1047500000000001, 1.1467500000000008, 1.2154999999999996, 0.8550000000000004, 0.9222500000000009, 0.6429999999999998, 0.9487500000000004, 1.1084999999999994, 1.6680000000000001, 1.7552500000000002, 1.282, 0.7649999999999997, 0.8627500000000001, 0.6224999999999987, 1.1799999999999997, 1.8432499999999994, 2.1189999999999998, nan, 1.3542499999999986, 0.7864999999999984, 1.0517499999999984, 1.087250000000001, 1.4797500000000001, nan, nan, nan, nan, 1.1660000000000004, 1.5515000000000008, 1.3385000000000007, nan, nan], zp_timestamp='2026-02-11T19:40:00')
2026-02-11T22:11:46.232 [DEBUG] [Thread-136736] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:11:46.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:11:46.327 [DEBUG] [Thread-136740] [transport.py] [_log()] starting thread (client mode): 0xa2d4da20
2026-02-11T22:11:46.327 [DEBUG] [Thread-136740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:11:46.346 [DEBUG] [Thread-136740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:11:46.346 [INFO] [Thread-136740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:11:46.353 [DEBUG] [Thread-136740] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:11:46.354 [DEBUG] [Thread-136740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:11:46.354 [DEBUG] [Thread-136740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:11:46.354 [DEBUG] [Thread-136740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:46.354 [DEBUG] [Thread-136740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:11:46.354 [DEBUG] [Thread-136740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:46.354 [DEBUG] [Thread-136740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:11:46.354 [DEBUG] [Thread-136740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] client lang: <none>
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] server lang: <none>
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] kex follows: False
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:11:46.355 [DEBUG] [Thread-136740] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:11:46.356 [DEBUG] [Thread-136740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:11:46.356 [DEBUG] [Thread-136740] [transport.py] [_log()] Compression: none
2026-02-11T22:11:46.356 [DEBUG] [Thread-136740] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:11:46.412 [DEBUG] [Thread-136740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:11:46.413 [DEBUG] [Thread-136740] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:11:46.413 [DEBUG] [Thread-136740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:11:46.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:11:46.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:11:46.469 [DEBUG] [Thread-136740] [transport.py] [_log()] userauth is OK
2026-02-11T22:11:46.469 [DEBUG] [Thread-136740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:11:46.469 [DEBUG] [Thread-136740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:11:46.470 [DEBUG] [Thread-136740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:11:46.470 [DEBUG] [Thread-136740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:11:46.489 [INFO] [Thread-136740] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:11:46.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:11:46.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:11:47.306 [DEBUG] [Thread-136740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:11:47.306 [DEBUG] [Thread-136740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:11:47.354 [DEBUG] [Thread-136740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:11:47.354 [DEBUG] [Thread-136740] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:11:47.364 [DEBUG] [Thread-136740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:11:47.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:11:47.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')
2026-02-11T22:11:47.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:11:47.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:11:47.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:11:47.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:11:47.401 [DEBUG] [Thread-136740] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:11:52.281 [DEBUG] [Thread-136742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:07.334 [DEBUG] [Thread-136743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:17.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:12:17.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:12:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:12:19.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 11, 40), 1.68, 89.65, 0.0, 24.42, 15.89, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:12:19.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:11:40
2026-02-11T22:12:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:12:20.270 [DEBUG] [Thread-136744] [transport.py] [_log()] starting thread (client mode): 0x9eb07340
2026-02-11T22:12:20.270 [DEBUG] [Thread-136744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:12:20.284 [DEBUG] [Thread-136744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:12:20.284 [INFO] [Thread-136744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] client lang: <none>
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] server lang: <none>
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] kex follows: False
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] Compression: none
2026-02-11T22:12:20.288 [DEBUG] [Thread-136744] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:12:20.307 [DEBUG] [Thread-136744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:12:20.307 [DEBUG] [Thread-136744] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:12:20.308 [DEBUG] [Thread-136744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:12:20.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:12:20.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:12:20.310 [DEBUG] [Thread-136744] [transport.py] [_log()] userauth is OK
2026-02-11T22:12:20.310 [DEBUG] [Thread-136744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:12:20.310 [DEBUG] [Thread-136744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:12:20.310 [DEBUG] [Thread-136744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:12:20.310 [DEBUG] [Thread-136744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:12:20.334 [INFO] [Thread-136744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:12:20.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:12:20.992 [DEBUG] [Thread-136744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:12:20.992 [DEBUG] [Thread-136744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:12:20.992 [DEBUG] [Thread-136744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:12:21.033 [DEBUG] [Thread-136744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:12:21.033 [DEBUG] [Thread-136744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:12:21.036 [DEBUG] [Thread-136744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:12:21.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:12:21.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:12:21.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:12:21.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:12:21.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:12:21.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:12:21.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:12:21.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:12:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:12:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.841457 -999.00  +15.50  15.56     90  +13.90 1 2 1 3 1     0    0 1.52 -4.52 ZnESW 14.5 15.6 202.2 23.2 17.2 -19.0 17.0 -18.3 17.0 -17.5 17.2 -18.7
2026-02-11T22:12:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:12:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:12:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.841457
2026-02-11T22:12:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:12:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:12:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:12:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:12:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:12:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:11:40', tmtdew=1.68, humidity=89.65, cloud=0.0, wind=24.42, temperature=15.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:11:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:10:00')
2026-02-11T22:12:21.063 [DEBUG] [Thread-136744] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:12:21.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:12:21.158 [DEBUG] [Thread-136747] [transport.py] [_log()] starting thread (client mode): 0xa57b1690
2026-02-11T22:12:21.158 [DEBUG] [Thread-136747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:12:21.173 [DEBUG] [Thread-136747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:12:21.173 [INFO] [Thread-136747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:12:21.180 [DEBUG] [Thread-136747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:12:21.181 [DEBUG] [Thread-136747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] client lang: <none>
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] server lang: <none>
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] kex follows: False
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:12:21.182 [DEBUG] [Thread-136747] [transport.py] [_log()] Compression: none
2026-02-11T22:12:21.183 [DEBUG] [Thread-136747] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:12:21.240 [DEBUG] [Thread-136747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:12:21.240 [DEBUG] [Thread-136747] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:12:21.241 [DEBUG] [Thread-136747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:12:21.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:12:21.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:12:21.296 [DEBUG] [Thread-136747] [transport.py] [_log()] userauth is OK
2026-02-11T22:12:21.297 [DEBUG] [Thread-136747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:12:21.297 [DEBUG] [Thread-136747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:12:21.297 [DEBUG] [Thread-136747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:12:21.297 [DEBUG] [Thread-136747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:12:21.320 [INFO] [Thread-136747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:12:21.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:12:21.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:12:22.182 [DEBUG] [Thread-136747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:12:22.182 [DEBUG] [Thread-136747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:12:22.232 [DEBUG] [Thread-136747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:12:22.232 [DEBUG] [Thread-136747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:12:22.245 [DEBUG] [Thread-136747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:12:22.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:12:22.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:12:22.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:12:22.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:12:22.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:12:22.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:12:22.294 [DEBUG] [Thread-136747] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:12:22.372 [DEBUG] [Thread-136749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:37.423 [DEBUG] [Thread-136750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:38.654 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:38.656 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:45.952 [DEBUG] [Thread-136751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:12:52.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:12:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:12:52.460 [DEBUG] [Thread-136752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:12:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 12, 16), 1.19, 92.83, 0.0, 23.29, 15.44, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:12:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:12:16
2026-02-11T22:12:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:12:54.885 [DEBUG] [Thread-136753] [transport.py] [_log()] starting thread (client mode): 0x9eb069b0
2026-02-11T22:12:54.886 [DEBUG] [Thread-136753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:12:54.905 [DEBUG] [Thread-136753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:12:54.906 [INFO] [Thread-136753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:12:54.908 [DEBUG] [Thread-136753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] client lang: <none>
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] server lang: <none>
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] kex follows: False
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] Compression: none
2026-02-11T22:12:54.909 [DEBUG] [Thread-136753] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:12:54.925 [DEBUG] [Thread-136753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:12:54.926 [DEBUG] [Thread-136753] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:12:54.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:12:54.927 [DEBUG] [Thread-136753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:12:54.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:12:54.930 [DEBUG] [Thread-136753] [transport.py] [_log()] userauth is OK
2026-02-11T22:12:54.930 [DEBUG] [Thread-136753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:12:54.930 [DEBUG] [Thread-136753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:12:54.930 [DEBUG] [Thread-136753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:12:54.930 [DEBUG] [Thread-136753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:12:54.945 [INFO] [Thread-136753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:12:54.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:12:55.738 [DEBUG] [Thread-136753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:12:55.738 [DEBUG] [Thread-136753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:12:55.739 [DEBUG] [Thread-136753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:12:55.779 [DEBUG] [Thread-136753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:12:55.779 [DEBUG] [Thread-136753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:12:55.783 [DEBUG] [Thread-136753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:12:55.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:12:55.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:12:55.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:12:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:12:55.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:12:55.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:12:55.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:12:55.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:12:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:12:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.841804 -999.00  +15.50  16.49     90  +13.90 1 2 1 3 1     0    0 1.53 -4.76 ZnESW 19.1 16.5 197.0 23.0 17.1 -18.2 16.9 -17.7 16.9 -17.2 17.2 -18.2
2026-02-11T22:12:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:12:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:12:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.841804
2026-02-11T22:12:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:12:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:12:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:12:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:12:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:12:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:12:16', tmtdew=1.19, humidity=92.83, cloud=0.0, wind=23.29, temperature=15.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:12:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:10:00')
2026-02-11T22:12:55.809 [DEBUG] [Thread-136753] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:12:55.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:12:55.905 [DEBUG] [Thread-136756] [transport.py] [_log()] starting thread (client mode): 0xa57e0460
2026-02-11T22:12:55.905 [DEBUG] [Thread-136756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:12:55.920 [DEBUG] [Thread-136756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:12:55.920 [INFO] [Thread-136756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:12:55.928 [DEBUG] [Thread-136756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:12:55.928 [DEBUG] [Thread-136756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:12:55.928 [DEBUG] [Thread-136756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:12:55.928 [DEBUG] [Thread-136756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:55.928 [DEBUG] [Thread-136756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:12:55.928 [DEBUG] [Thread-136756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] client lang: <none>
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] server lang: <none>
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] kex follows: False
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:12:55.929 [DEBUG] [Thread-136756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:12:55.930 [DEBUG] [Thread-136756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:12:55.930 [DEBUG] [Thread-136756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:12:55.930 [DEBUG] [Thread-136756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:12:55.930 [DEBUG] [Thread-136756] [transport.py] [_log()] Compression: none
2026-02-11T22:12:55.930 [DEBUG] [Thread-136756] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:12:55.988 [DEBUG] [Thread-136756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:12:55.989 [DEBUG] [Thread-136756] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:12:55.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:12:55.990 [DEBUG] [Thread-136756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:12:55.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:12:56.044 [DEBUG] [Thread-136756] [transport.py] [_log()] userauth is OK
2026-02-11T22:12:56.044 [DEBUG] [Thread-136756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:12:56.044 [DEBUG] [Thread-136756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:12:56.044 [DEBUG] [Thread-136756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:12:56.044 [DEBUG] [Thread-136756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:12:56.063 [INFO] [Thread-136756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:12:56.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:12:56.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:12:56.903 [DEBUG] [Thread-136756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:12:56.903 [DEBUG] [Thread-136756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:12:56.950 [DEBUG] [Thread-136756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:12:56.950 [DEBUG] [Thread-136756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:12:56.959 [DEBUG] [Thread-136756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:12:56.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:12: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')
2026-02-11T22:12:56.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:12:56.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:12:56.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:12:56.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:12:56.995 [DEBUG] [Thread-136756] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:13:07.497 [DEBUG] [Thread-136758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:13:22.548 [DEBUG] [Thread-136759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:13:27.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:13:27.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:13:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:13:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 12, 52), 1.14, 92.81, 0.0, 18.4, 15.43, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:13:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:12:52
2026-02-11T22:13:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:13:29.508 [DEBUG] [Thread-136760] [transport.py] [_log()] starting thread (client mode): 0xa2d04970
2026-02-11T22:13:29.508 [DEBUG] [Thread-136760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:13:29.528 [DEBUG] [Thread-136760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:13:29.528 [INFO] [Thread-136760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:13:29.531 [DEBUG] [Thread-136760] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:13:29.531 [DEBUG] [Thread-136760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:13:29.531 [DEBUG] [Thread-136760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:13:29.531 [DEBUG] [Thread-136760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:13:29.531 [DEBUG] [Thread-136760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] client lang: <none>
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] server lang: <none>
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] kex follows: False
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:13:29.532 [DEBUG] [Thread-136760] [transport.py] [_log()] Compression: none
2026-02-11T22:13:29.533 [DEBUG] [Thread-136760] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:13:29.549 [DEBUG] [Thread-136760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:13:29.550 [DEBUG] [Thread-136760] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:13:29.550 [DEBUG] [Thread-136760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:13:29.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:13:29.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:13:29.552 [DEBUG] [Thread-136760] [transport.py] [_log()] userauth is OK
2026-02-11T22:13:29.552 [DEBUG] [Thread-136760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:13:29.553 [DEBUG] [Thread-136760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:13:29.553 [DEBUG] [Thread-136760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:13:29.553 [DEBUG] [Thread-136760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:13:29.589 [INFO] [Thread-136760] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:13:29.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:13:30.219 [DEBUG] [Thread-136760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:13:30.219 [DEBUG] [Thread-136760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:13:30.220 [DEBUG] [Thread-136760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:13:30.260 [DEBUG] [Thread-136760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:13:30.261 [DEBUG] [Thread-136760] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:13:30.264 [DEBUG] [Thread-136760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:13:30.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:13:30.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:13:30.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:13:30.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:13:30.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:13:30.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:13:30.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:13:30.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:13:30.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:13:30.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.842151 -999.00  +15.50  13.92     90  +13.90 1 2 1 3 1     0    0 1.53 -4.81 ZnESW 15.1 13.9 204.2 22.7 17.1 -17.9 16.9 -17.3 16.8 -16.9 17.2 -17.7
2026-02-11T22:13:30.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:13:30.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:13:30.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.842151
2026-02-11T22:13:30.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:13:30.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:13:30.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:13:30.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:13:30.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:13:30.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:12:52', tmtdew=1.14, humidity=92.81, cloud=0.0, wind=18.4, temperature=15.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:12:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:10:00')
2026-02-11T22:13:30.292 [DEBUG] [Thread-136760] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:13:30.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:13:30.388 [DEBUG] [Thread-136763] [transport.py] [_log()] starting thread (client mode): 0x9eb07340
2026-02-11T22:13:30.388 [DEBUG] [Thread-136763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:13:30.402 [DEBUG] [Thread-136763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:13:30.403 [INFO] [Thread-136763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:13:30.411 [DEBUG] [Thread-136763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:13:30.411 [DEBUG] [Thread-136763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:13:30.411 [DEBUG] [Thread-136763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:13:30.411 [DEBUG] [Thread-136763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:13:30.411 [DEBUG] [Thread-136763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] client lang: <none>
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] server lang: <none>
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] kex follows: False
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:13:30.412 [DEBUG] [Thread-136763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:13:30.413 [DEBUG] [Thread-136763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:13:30.413 [DEBUG] [Thread-136763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:13:30.413 [DEBUG] [Thread-136763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:13:30.413 [DEBUG] [Thread-136763] [transport.py] [_log()] Compression: none
2026-02-11T22:13:30.413 [DEBUG] [Thread-136763] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:13:30.466 [DEBUG] [Thread-136763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:13:30.466 [DEBUG] [Thread-136763] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:13:30.466 [DEBUG] [Thread-136763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:13:30.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:13:30.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:13:30.527 [DEBUG] [Thread-136763] [transport.py] [_log()] userauth is OK
2026-02-11T22:13:30.528 [DEBUG] [Thread-136763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:13:30.528 [DEBUG] [Thread-136763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:13:30.528 [DEBUG] [Thread-136763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:13:30.528 [DEBUG] [Thread-136763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:13:30.548 [INFO] [Thread-136763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:13:30.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:13:30.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:13:31.368 [DEBUG] [Thread-136763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:13:31.369 [DEBUG] [Thread-136763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:13:31.417 [DEBUG] [Thread-136763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:13:31.417 [DEBUG] [Thread-136763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:13:31.426 [DEBUG] [Thread-136763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:13:31.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:13:31.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:13:31.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:13:31.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:13:31.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:13:31.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:13:31.463 [DEBUG] [Thread-136763] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:13:37.580 [DEBUG] [Thread-136765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:13:38.859 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:13:38.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:13:46.010 [DEBUG] [Thread-136766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:13:52.632 [DEBUG] [Thread-136767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:14:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:14:01.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:14:01.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:14:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 13, 27), 1.14, 92.81, 0.0, 21.4, 15.44, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:14:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:13:27
2026-02-11T22:14:03.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:14:03.831 [DEBUG] [Thread-136768] [transport.py] [_log()] starting thread (client mode): 0xa57e34c0
2026-02-11T22:14:03.831 [DEBUG] [Thread-136768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:14:03.850 [DEBUG] [Thread-136768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:14:03.850 [INFO] [Thread-136768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] client lang: <none>
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] server lang: <none>
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] kex follows: False
2026-02-11T22:14:03.852 [DEBUG] [Thread-136768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:14:03.853 [DEBUG] [Thread-136768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:14:03.853 [DEBUG] [Thread-136768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:14:03.853 [DEBUG] [Thread-136768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:14:03.853 [DEBUG] [Thread-136768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:14:03.853 [DEBUG] [Thread-136768] [transport.py] [_log()] Compression: none
2026-02-11T22:14:03.853 [DEBUG] [Thread-136768] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:14:03.863 [DEBUG] [Thread-136768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:14:03.863 [DEBUG] [Thread-136768] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:14:03.863 [DEBUG] [Thread-136768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:14:03.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:14:03.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:14:03.865 [DEBUG] [Thread-136768] [transport.py] [_log()] userauth is OK
2026-02-11T22:14:03.865 [DEBUG] [Thread-136768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:14:03.865 [DEBUG] [Thread-136768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:14:03.865 [DEBUG] [Thread-136768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:14:03.865 [DEBUG] [Thread-136768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:14:03.882 [INFO] [Thread-136768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:14:03.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:14:04.532 [DEBUG] [Thread-136768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:14:04.533 [DEBUG] [Thread-136768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:14:04.533 [DEBUG] [Thread-136768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:14:04.573 [DEBUG] [Thread-136768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:14:04.574 [DEBUG] [Thread-136768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:14:04.577 [DEBUG] [Thread-136768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:14:04.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:14:04.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:14:04.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:14:04.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:14:04.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:14:04.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:14:04.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:14:04.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:14:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:14:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.842498 -999.00  +15.50  15.13     90  +13.90 1 2 1 3 1     0    0 1.54 -4.05 ZnESW 16.4 15.1 195.6 19.3 17.1 -18.6 16.9 -17.6 16.8 -17.1 17.1 -18.2
2026-02-11T22:14:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:14:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:14:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.842498
2026-02-11T22:14:04.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:14:04.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:14:04.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:14:04.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:14:04.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:14:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:13:27', tmtdew=1.14, humidity=92.81, cloud=0.0, wind=21.4, temperature=15.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:13:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:10:00')
2026-02-11T22:14:04.604 [DEBUG] [Thread-136768] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:14:04.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:14:04.699 [DEBUG] [Thread-136771] [transport.py] [_log()] starting thread (client mode): 0x9eb06500
2026-02-11T22:14:04.699 [DEBUG] [Thread-136771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:14:04.714 [DEBUG] [Thread-136771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:14:04.714 [INFO] [Thread-136771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:14:04.721 [DEBUG] [Thread-136771] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:14:04.722 [DEBUG] [Thread-136771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:14:04.722 [DEBUG] [Thread-136771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:14:04.722 [DEBUG] [Thread-136771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:04.722 [DEBUG] [Thread-136771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:04.722 [DEBUG] [Thread-136771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:04.722 [DEBUG] [Thread-136771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:04.722 [DEBUG] [Thread-136771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:14:04.723 [DEBUG] [Thread-136771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:14:04.723 [DEBUG] [Thread-136771] [transport.py] [_log()] client lang: <none>
2026-02-11T22:14:04.723 [DEBUG] [Thread-136771] [transport.py] [_log()] server lang: <none>
2026-02-11T22:14:04.723 [DEBUG] [Thread-136771] [transport.py] [_log()] kex follows: False
2026-02-11T22:14:04.723 [DEBUG] [Thread-136771] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:14:04.723 [DEBUG] [Thread-136771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:14:04.723 [DEBUG] [Thread-136771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:14:04.724 [DEBUG] [Thread-136771] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:14:04.724 [DEBUG] [Thread-136771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:14:04.724 [DEBUG] [Thread-136771] [transport.py] [_log()] Compression: none
2026-02-11T22:14:04.724 [DEBUG] [Thread-136771] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:14:04.779 [DEBUG] [Thread-136771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:14:04.780 [DEBUG] [Thread-136771] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:14:04.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:14:04.781 [DEBUG] [Thread-136771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:14:04.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:14:04.836 [DEBUG] [Thread-136771] [transport.py] [_log()] userauth is OK
2026-02-11T22:14:04.836 [DEBUG] [Thread-136771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:14:04.836 [DEBUG] [Thread-136771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:14:04.836 [DEBUG] [Thread-136771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:14:04.836 [DEBUG] [Thread-136771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:14:04.855 [INFO] [Thread-136771] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:14:04.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:14:04.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:14:05.683 [DEBUG] [Thread-136771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:14:05.683 [DEBUG] [Thread-136771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:14:05.732 [DEBUG] [Thread-136771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:14:05.732 [DEBUG] [Thread-136771] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:14:05.741 [DEBUG] [Thread-136771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:14:05.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:14:05.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:14:05.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:14:05.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:14:05.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:14:05.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:14:05.778 [DEBUG] [Thread-136771] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:14:07.670 [DEBUG] [Thread-136773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:14:22.716 [DEBUG] [Thread-136774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:14:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:14:35.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:14:35.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:14:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 14, 3), 1.15, 92.79, 0.0, 21.44, 15.41, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:14:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:14:03
2026-02-11T22:14:37.758 [DEBUG] [Thread-136775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:14:38.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:14:38.235 [DEBUG] [Thread-136776] [transport.py] [_log()] starting thread (client mode): 0xa2d04c40
2026-02-11T22:14:38.235 [DEBUG] [Thread-136776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:14:38.258 [DEBUG] [Thread-136776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:14:38.258 [INFO] [Thread-136776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:14:38.261 [DEBUG] [Thread-136776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:14:38.261 [DEBUG] [Thread-136776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:14:38.261 [DEBUG] [Thread-136776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] client lang: <none>
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] server lang: <none>
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] kex follows: False
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] Compression: none
2026-02-11T22:14:38.262 [DEBUG] [Thread-136776] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:14:38.279 [DEBUG] [Thread-136776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:14:38.280 [DEBUG] [Thread-136776] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:14:38.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:14:38.281 [DEBUG] [Thread-136776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:14:38.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:14:38.283 [DEBUG] [Thread-136776] [transport.py] [_log()] userauth is OK
2026-02-11T22:14:38.283 [DEBUG] [Thread-136776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:14:38.283 [DEBUG] [Thread-136776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:14:38.283 [DEBUG] [Thread-136776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:14:38.284 [DEBUG] [Thread-136776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:14:38.308 [INFO] [Thread-136776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:14:38.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:14:38.923 [DEBUG] [Thread-136776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:14:38.924 [DEBUG] [Thread-136776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:14:38.924 [DEBUG] [Thread-136776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:14:38.965 [DEBUG] [Thread-136776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:14:38.965 [DEBUG] [Thread-136776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:14:38.969 [DEBUG] [Thread-136776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:14:38.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:14:38.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:14:38.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:14:38.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:14:38.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:14:38.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:14:38.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:14:38.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:14:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:14:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.842845 -999.00  +15.50  14.26     90  +13.90 1 1 1 3 1     0    0 1.53 -3.85 ZNESW 14.4 14.3 196.4 18.2 17.0 -18.2 16.8 -18.2 16.8 -16.7 -999.0 -999.0
2026-02-11T22:14:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:14:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:14:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.842845
2026-02-11T22:14:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:14:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:14:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:14:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:14:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:14:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:14:03', tmtdew=1.15, humidity=92.79, cloud=0.0, wind=21.44, temperature=15.41, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:13:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:10:00')
2026-02-11T22:14:38.996 [DEBUG] [Thread-136776] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:14:39.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:14:39.062 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:14:39.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:14:39.095 [DEBUG] [Thread-136779] [transport.py] [_log()] starting thread (client mode): 0xa57b3e80
2026-02-11T22:14:39.095 [DEBUG] [Thread-136779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:14:39.110 [DEBUG] [Thread-136779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:14:39.110 [INFO] [Thread-136779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:14:39.117 [DEBUG] [Thread-136779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] client lang: <none>
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] server lang: <none>
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] kex follows: False
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:14:39.118 [DEBUG] [Thread-136779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:14:39.119 [DEBUG] [Thread-136779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:14:39.119 [DEBUG] [Thread-136779] [transport.py] [_log()] Compression: none
2026-02-11T22:14:39.119 [DEBUG] [Thread-136779] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:14:39.174 [DEBUG] [Thread-136779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:14:39.175 [DEBUG] [Thread-136779] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:14:39.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:14:39.176 [DEBUG] [Thread-136779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:14:39.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:14:39.231 [DEBUG] [Thread-136779] [transport.py] [_log()] userauth is OK
2026-02-11T22:14:39.231 [DEBUG] [Thread-136779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:14:39.231 [DEBUG] [Thread-136779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:14:39.231 [DEBUG] [Thread-136779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:14:39.231 [DEBUG] [Thread-136779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:14:39.250 [INFO] [Thread-136779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:14:39.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:14:39.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:14:40.075 [DEBUG] [Thread-136779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:14:40.075 [DEBUG] [Thread-136779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:14:40.123 [DEBUG] [Thread-136779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:14:40.124 [DEBUG] [Thread-136779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:14:40.133 [DEBUG] [Thread-136779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:14:40.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:14:40.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:14:40.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:14:40.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:14:40.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:14:40.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:14:40.173 [DEBUG] [Thread-136779] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:14:46.067 [DEBUG] [Thread-136781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:14:52.794 [DEBUG] [Thread-136782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:15:07.848 [DEBUG] [Thread-136783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:15:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:15:10.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:15:10.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:15:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 14, 39), 1.68, 89.65, 0.0, 24.21, 15.79, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:15:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:14:39
2026-02-11T22:15:12.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:15:12.705 [DEBUG] [Thread-136784] [transport.py] [_log()] starting thread (client mode): 0xa57e1bd0
2026-02-11T22:15:12.705 [DEBUG] [Thread-136784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:15:12.725 [DEBUG] [Thread-136784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:15:12.725 [INFO] [Thread-136784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:12.728 [DEBUG] [Thread-136784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] client lang: <none>
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] server lang: <none>
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] kex follows: False
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] Compression: none
2026-02-11T22:15:12.729 [DEBUG] [Thread-136784] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:15:12.745 [DEBUG] [Thread-136784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:15:12.746 [DEBUG] [Thread-136784] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:15:12.746 [DEBUG] [Thread-136784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:15:12.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:15:12.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:15:12.748 [DEBUG] [Thread-136784] [transport.py] [_log()] userauth is OK
2026-02-11T22:15:12.748 [DEBUG] [Thread-136784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:15:12.749 [DEBUG] [Thread-136784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:15:12.749 [DEBUG] [Thread-136784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:15:12.749 [DEBUG] [Thread-136784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:15:12.769 [INFO] [Thread-136784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:15:12.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:15:13.495 [DEBUG] [Thread-136784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:15:13.495 [DEBUG] [Thread-136784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:15:13.495 [DEBUG] [Thread-136784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:15:13.536 [DEBUG] [Thread-136784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:15:13.536 [DEBUG] [Thread-136784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:15:13.538 [DEBUG] [Thread-136784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:15:13.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:15:13.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:15:13.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:15:13.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:15:13.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:15:13.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:15:13.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:15:13.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.843540 -999.00  +15.50   9.66     90  +13.90 1 1 1 3 1     0    0 1.53 -3.98 ZNESW 7.5 9.7 202.6 20.6 17.0 -17.5 16.8 -16.8 16.8 -15.8 17.0 -17.2
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.843540
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:15:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:14:39', tmtdew=1.68, humidity=89.65, cloud=0.0, wind=24.21, temperature=15.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:14:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:13:00')
2026-02-11T22:15:13.553 [DEBUG] [Thread-136784] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:15:13.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:15:13.636 [DEBUG] [Thread-136787] [transport.py] [_log()] starting thread (client mode): 0xa2d5f580
2026-02-11T22:15:13.636 [DEBUG] [Thread-136787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:15:13.650 [DEBUG] [Thread-136787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:15:13.650 [INFO] [Thread-136787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:15:13.658 [DEBUG] [Thread-136787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:15:13.658 [DEBUG] [Thread-136787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:15:13.658 [DEBUG] [Thread-136787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:15:13.658 [DEBUG] [Thread-136787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] client lang: <none>
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] server lang: <none>
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] kex follows: False
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] Compression: none
2026-02-11T22:15:13.659 [DEBUG] [Thread-136787] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:15:13.719 [DEBUG] [Thread-136787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:15:13.719 [DEBUG] [Thread-136787] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:15:13.720 [DEBUG] [Thread-136787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:15:13.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:15:13.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:15:13.775 [DEBUG] [Thread-136787] [transport.py] [_log()] userauth is OK
2026-02-11T22:15:13.775 [DEBUG] [Thread-136787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:15:13.775 [DEBUG] [Thread-136787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:15:13.775 [DEBUG] [Thread-136787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:15:13.775 [DEBUG] [Thread-136787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:15:13.800 [INFO] [Thread-136787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:15:13.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:15:13.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:15:14.606 [DEBUG] [Thread-136787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:15:14.606 [DEBUG] [Thread-136787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:15:14.654 [DEBUG] [Thread-136787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:15:14.654 [DEBUG] [Thread-136787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:15:14.665 [DEBUG] [Thread-136787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:15:14.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:15:14.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:15:14.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:15:14.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:15:14.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:15:14.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:15:14.711 [DEBUG] [Thread-136787] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:15:22.882 [DEBUG] [Thread-136789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:15:37.930 [DEBUG] [Thread-136790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:15:39.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:15:39.267 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:15:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:15:44.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:15:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:15:46.153 [DEBUG] [Thread-136791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:15:47.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 15, 14), 1.19, 92.84, 0.0, 16.9, 15.43, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:15:47.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:15:14
2026-02-11T22:15:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:15:47.837 [DEBUG] [Thread-136792] [transport.py] [_log()] starting thread (client mode): 0x9eb04d30
2026-02-11T22:15:47.837 [DEBUG] [Thread-136792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:15:47.857 [DEBUG] [Thread-136792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:15:47.858 [INFO] [Thread-136792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] client lang: <none>
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] server lang: <none>
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] kex follows: False
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] Compression: none
2026-02-11T22:15:47.861 [DEBUG] [Thread-136792] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:15:47.875 [DEBUG] [Thread-136792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:15:47.875 [DEBUG] [Thread-136792] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:15:47.875 [DEBUG] [Thread-136792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:15:47.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:15:47.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:15:47.876 [DEBUG] [Thread-136792] [transport.py] [_log()] userauth is OK
2026-02-11T22:15:47.876 [DEBUG] [Thread-136792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:15:47.876 [DEBUG] [Thread-136792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:15:47.876 [DEBUG] [Thread-136792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:15:47.876 [DEBUG] [Thread-136792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:15:47.892 [INFO] [Thread-136792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:15:47.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:15:48.692 [DEBUG] [Thread-136792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:15:48.692 [DEBUG] [Thread-136792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:15:48.693 [DEBUG] [Thread-136792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:15:48.733 [DEBUG] [Thread-136792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:15:48.733 [DEBUG] [Thread-136792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:15:48.736 [DEBUG] [Thread-136792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:15:48.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:15:48.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:15:48.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:15:48.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:15:48.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:15:48.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:15:48.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:15:48.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:15:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:15:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.843887 -999.00  +15.50  14.41     90  +13.90 1 1 1 3 1     0    0 1.53 -3.97 ZNESW 11.5 14.4 200.0 18.0 17.0 -18.0 16.8 -17.5 16.7 -16.7 17.0 -17.8
2026-02-11T22:15:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:15:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.843887
2026-02-11T22:15:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:15:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:15:14', tmtdew=1.19, humidity=92.84, cloud=0.0, wind=16.9, temperature=15.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:15:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:13:00')
2026-02-11T22:15:48.759 [DEBUG] [Thread-136792] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:15:48.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:15:48.856 [DEBUG] [Thread-136795] [transport.py] [_log()] starting thread (client mode): 0x9eb05990
2026-02-11T22:15:48.856 [DEBUG] [Thread-136795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:15:48.871 [DEBUG] [Thread-136795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:15:48.871 [INFO] [Thread-136795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] client lang: <none>
2026-02-11T22:15:48.879 [DEBUG] [Thread-136795] [transport.py] [_log()] server lang: <none>
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] kex follows: False
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] Compression: none
2026-02-11T22:15:48.880 [DEBUG] [Thread-136795] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:15:48.938 [DEBUG] [Thread-136795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:15:48.939 [DEBUG] [Thread-136795] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:15:48.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:15:48.940 [DEBUG] [Thread-136795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:15:48.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:15:48.998 [DEBUG] [Thread-136795] [transport.py] [_log()] userauth is OK
2026-02-11T22:15:48.998 [DEBUG] [Thread-136795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:15:48.998 [DEBUG] [Thread-136795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:15:48.999 [DEBUG] [Thread-136795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:15:48.999 [DEBUG] [Thread-136795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:15:49.018 [INFO] [Thread-136795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:15:49.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:15:49.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:15:49.885 [DEBUG] [Thread-136795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:15:49.885 [DEBUG] [Thread-136795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:15:49.932 [DEBUG] [Thread-136795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:15:49.932 [DEBUG] [Thread-136795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:15:49.941 [DEBUG] [Thread-136795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:15:49.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:15:49.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:15: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') -> 00000000
2026-02-11T22:15:49.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:15:49.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:15:49.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:15:49.974 [DEBUG] [Thread-136795] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:15:52.963 [DEBUG] [Thread-136797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:08.019 [DEBUG] [Thread-136798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:19.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:16:19.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:16:19.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
2026-02-11T22:16:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 15, 49), 1.19, 92.84, 0.0, 15.74, 15.38, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:16:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:15:49
2026-02-11T22:16:22.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:16:22.284 [DEBUG] [Thread-136799] [transport.py] [_log()] starting thread (client mode): 0xa57e0520
2026-02-11T22:16:22.284 [DEBUG] [Thread-136799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:16:22.305 [DEBUG] [Thread-136799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:16:22.305 [INFO] [Thread-136799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:16:22.308 [DEBUG] [Thread-136799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:16:22.308 [DEBUG] [Thread-136799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:16:22.308 [DEBUG] [Thread-136799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:16:22.308 [DEBUG] [Thread-136799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:22.308 [DEBUG] [Thread-136799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] client lang: <none>
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] server lang: <none>
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] kex follows: False
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] Compression: none
2026-02-11T22:16:22.309 [DEBUG] [Thread-136799] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:16:22.326 [DEBUG] [Thread-136799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:16:22.326 [DEBUG] [Thread-136799] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:16:22.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:16:22.328 [DEBUG] [Thread-136799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:16:22.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:16:22.330 [DEBUG] [Thread-136799] [transport.py] [_log()] userauth is OK
2026-02-11T22:16:22.330 [DEBUG] [Thread-136799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:16:22.330 [DEBUG] [Thread-136799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:16:22.330 [DEBUG] [Thread-136799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:16:22.330 [DEBUG] [Thread-136799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:16:22.345 [INFO] [Thread-136799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:16:22.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:16:22.984 [DEBUG] [Thread-136799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:16:22.984 [DEBUG] [Thread-136799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:16:22.984 [DEBUG] [Thread-136799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:16:23.025 [DEBUG] [Thread-136799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:16:23.025 [DEBUG] [Thread-136799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:16:23.027 [DEBUG] [Thread-136799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:16:23.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:16:23.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:16:23.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:16:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:16:23.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:16:23.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:16:23.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:16:23.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:16:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:16:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.844234 -999.00  +15.50  14.55     90  +13.90 1 1 1 3 1     0    0 1.53 -3.99 ZNESW 8.8 14.6 202.4 17.8 16.9 -18.4 16.8 -18.0 16.7 -17.1 17.0 -18.0
2026-02-11T22:16:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:16:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:16:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.844234
2026-02-11T22:16:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:16:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:16:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:16:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:16:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:16:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:15:49', tmtdew=1.19, humidity=92.84, cloud=0.0, wind=15.74, temperature=15.38, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:15:41.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:13:00')
2026-02-11T22:16:23.047 [DEBUG] [Thread-136799] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:16:23.055 [DEBUG] [Thread-136802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:23.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:16:23.139 [DEBUG] [Thread-136803] [transport.py] [_log()] starting thread (client mode): 0xa2d4dae0
2026-02-11T22:16:23.140 [DEBUG] [Thread-136803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:16:23.158 [DEBUG] [Thread-136803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:16:23.159 [INFO] [Thread-136803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:16:23.166 [DEBUG] [Thread-136803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:16:23.166 [DEBUG] [Thread-136803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:16:23.166 [DEBUG] [Thread-136803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:16:23.166 [DEBUG] [Thread-136803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] client lang: <none>
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] server lang: <none>
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] kex follows: False
2026-02-11T22:16:23.167 [DEBUG] [Thread-136803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:16:23.168 [DEBUG] [Thread-136803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:16:23.168 [DEBUG] [Thread-136803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:16:23.168 [DEBUG] [Thread-136803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:16:23.168 [DEBUG] [Thread-136803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:16:23.168 [DEBUG] [Thread-136803] [transport.py] [_log()] Compression: none
2026-02-11T22:16:23.168 [DEBUG] [Thread-136803] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:16:23.225 [DEBUG] [Thread-136803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:16:23.226 [DEBUG] [Thread-136803] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:16:23.226 [DEBUG] [Thread-136803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:16:23.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:16:23.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:16:23.282 [DEBUG] [Thread-136803] [transport.py] [_log()] userauth is OK
2026-02-11T22:16:23.282 [DEBUG] [Thread-136803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:16:23.282 [DEBUG] [Thread-136803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:16:23.282 [DEBUG] [Thread-136803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:16:23.282 [DEBUG] [Thread-136803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:16:23.301 [INFO] [Thread-136803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:16:23.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:16:23.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:16:24.131 [DEBUG] [Thread-136803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:16:24.131 [DEBUG] [Thread-136803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:16:24.179 [DEBUG] [Thread-136803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:16:24.180 [DEBUG] [Thread-136803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:16:24.189 [DEBUG] [Thread-136803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:16:24.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:16: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')
2026-02-11T22:16:24.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:16:24.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:16:24.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:16:24.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:16:24.224 [DEBUG] [Thread-136803] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:16:38.097 [DEBUG] [Thread-136805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:39.471 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:39.472 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:46.226 [DEBUG] [Thread-136806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:53.133 [DEBUG] [Thread-136807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:16:54.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:16:54.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:16:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:16:56.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 16, 26), 1.18, 92.88, 0.0, 17.87, 15.38, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:16:56.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:16:26
2026-02-11T22:16:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:16:56.670 [DEBUG] [Thread-136808] [transport.py] [_log()] starting thread (client mode): 0xa2d9ee00
2026-02-11T22:16:56.671 [DEBUG] [Thread-136808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:16:56.690 [DEBUG] [Thread-136808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:16:56.690 [INFO] [Thread-136808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:16:56.691 [DEBUG] [Thread-136808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:16:56.691 [DEBUG] [Thread-136808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:16:56.691 [DEBUG] [Thread-136808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:16:56.691 [DEBUG] [Thread-136808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:56.691 [DEBUG] [Thread-136808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:56.691 [DEBUG] [Thread-136808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:56.691 [DEBUG] [Thread-136808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] client lang: <none>
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] server lang: <none>
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] kex follows: False
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] Compression: none
2026-02-11T22:16:56.692 [DEBUG] [Thread-136808] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:16:56.701 [DEBUG] [Thread-136808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:16:56.702 [DEBUG] [Thread-136808] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:16:56.703 [DEBUG] [Thread-136808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:16:56.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:16:56.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:16:56.705 [DEBUG] [Thread-136808] [transport.py] [_log()] userauth is OK
2026-02-11T22:16:56.705 [DEBUG] [Thread-136808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:16:56.705 [DEBUG] [Thread-136808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:16:56.705 [DEBUG] [Thread-136808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:16:56.705 [DEBUG] [Thread-136808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:16:56.723 [INFO] [Thread-136808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:16:56.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:16:57.374 [DEBUG] [Thread-136808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:16:57.374 [DEBUG] [Thread-136808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:16:57.375 [DEBUG] [Thread-136808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:16:57.415 [DEBUG] [Thread-136808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:16:57.415 [DEBUG] [Thread-136808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:16:57.419 [DEBUG] [Thread-136808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:16:57.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:16:57.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:16:57.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:16:57.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:16:57.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:16:57.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:16:57.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:16:57.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:16:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:16:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.844582 -999.00  +15.50  11.46     90  +13.90 1 1 1 3 1     0    0 1.53 -3.92 ZNESW 15.2 11.5 197.6 22.0 16.9 -18.6 16.8 -18.0 16.7 -17.0 17.0 -18.2
2026-02-11T22:16:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:16:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:16:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.844582
2026-02-11T22:16:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:16:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:16:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:16:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:16:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:16:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:16:26', tmtdew=1.18, humidity=92.88, cloud=0.0, wind=17.87, temperature=15.38, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:16:11.885', atlas_cloud=1, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:13:00')
2026-02-11T22:16:57.443 [DEBUG] [Thread-136808] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:16:57.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:16:57.538 [DEBUG] [Thread-136811] [transport.py] [_log()] starting thread (client mode): 0xa2d68b50
2026-02-11T22:16:57.538 [DEBUG] [Thread-136811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:16:57.553 [DEBUG] [Thread-136811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:16:57.553 [INFO] [Thread-136811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:16:57.560 [DEBUG] [Thread-136811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:16:57.560 [DEBUG] [Thread-136811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:16:57.560 [DEBUG] [Thread-136811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:16:57.560 [DEBUG] [Thread-136811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:57.560 [DEBUG] [Thread-136811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:16:57.560 [DEBUG] [Thread-136811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] client lang: <none>
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] server lang: <none>
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] kex follows: False
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] Compression: none
2026-02-11T22:16:57.561 [DEBUG] [Thread-136811] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:16:57.617 [DEBUG] [Thread-136811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:16:57.618 [DEBUG] [Thread-136811] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:16:57.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:16:57.619 [DEBUG] [Thread-136811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:16:57.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:16:57.674 [DEBUG] [Thread-136811] [transport.py] [_log()] userauth is OK
2026-02-11T22:16:57.674 [DEBUG] [Thread-136811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:16:57.674 [DEBUG] [Thread-136811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:16:57.674 [DEBUG] [Thread-136811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:16:57.674 [DEBUG] [Thread-136811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:16:57.693 [INFO] [Thread-136811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:16:57.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:16:57.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:16:58.513 [DEBUG] [Thread-136811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:16:58.513 [DEBUG] [Thread-136811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:16:58.562 [DEBUG] [Thread-136811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:16:58.562 [DEBUG] [Thread-136811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:16:58.571 [DEBUG] [Thread-136811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:16:58.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:16:58.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:16:58.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
2026-02-11T22:16:58.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:16:58.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:16:58.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:16:58.609 [DEBUG] [Thread-136811] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:17:08.172 [DEBUG] [Thread-136813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:17:23.224 [DEBUG] [Thread-136814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:17:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:17:28.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:17:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:17:30.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 17, 2), 1.19, 92.81, 0.0, 17.04, 15.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:17:30.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:17:02
2026-02-11T22:17:30.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:17:31.150 [DEBUG] [Thread-136815] [transport.py] [_log()] starting thread (client mode): 0xa2d5eef0
2026-02-11T22:17:31.150 [DEBUG] [Thread-136815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:17:31.172 [DEBUG] [Thread-136815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:17:31.172 [INFO] [Thread-136815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] client lang: <none>
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] server lang: <none>
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] kex follows: False
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] Compression: none
2026-02-11T22:17:31.175 [DEBUG] [Thread-136815] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:17:31.192 [DEBUG] [Thread-136815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:17:31.193 [DEBUG] [Thread-136815] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:17:31.193 [DEBUG] [Thread-136815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:17:31.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:17:31.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:17:31.195 [DEBUG] [Thread-136815] [transport.py] [_log()] userauth is OK
2026-02-11T22:17:31.196 [DEBUG] [Thread-136815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:17:31.196 [DEBUG] [Thread-136815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:17:31.196 [DEBUG] [Thread-136815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:17:31.196 [DEBUG] [Thread-136815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:17:31.216 [INFO] [Thread-136815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:17:31.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:17:31.814 [DEBUG] [Thread-136815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:17:31.814 [DEBUG] [Thread-136815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:17:31.815 [DEBUG] [Thread-136815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:17:31.855 [DEBUG] [Thread-136815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:17:31.855 [DEBUG] [Thread-136815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:17:31.857 [DEBUG] [Thread-136815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:17:31.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:17:31.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:17:31.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:17:31.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:17:31.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:17:31.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:17:31.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:17:31.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:17:31.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:17:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.844929 -999.00  +15.40  19.47     90  +13.80 1 1 1 3 1     0    0 1.54 -3.83 ZNESW 16.7 19.5 199.2 23.0 16.9 -18.7 16.7 -18.1 16.6 -17.2 16.9 -18.1
2026-02-11T22:17:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:17:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:17:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.844929
2026-02-11T22:17:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:17:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:17:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:17:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:17:31.873 [DEBUG] [Thread-136815] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:17:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:17:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:17:02', tmtdew=1.19, humidity=92.81, cloud=0.0, wind=17.04, temperature=15.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:16:41.866', atlas_cloud=1, atlas_rain=1, zp_data=[3.98975, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.278999999999999, nan, nan, nan, 3.2109999999999994, nan, nan, nan, nan, nan, nan, 2.6825, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:13:00')
2026-02-11T22:17:31.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:17:31.968 [DEBUG] [Thread-136818] [transport.py] [_log()] starting thread (client mode): 0xa2d9e9b0
2026-02-11T22:17:31.968 [DEBUG] [Thread-136818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:17:31.982 [DEBUG] [Thread-136818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:17:31.982 [INFO] [Thread-136818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:17:31.989 [DEBUG] [Thread-136818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:17:31.989 [DEBUG] [Thread-136818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:17:31.989 [DEBUG] [Thread-136818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:17:31.989 [DEBUG] [Thread-136818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:17:31.989 [DEBUG] [Thread-136818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] client lang: <none>
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] server lang: <none>
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] kex follows: False
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] Compression: none
2026-02-11T22:17:31.990 [DEBUG] [Thread-136818] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:17:32.048 [DEBUG] [Thread-136818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:17:32.048 [DEBUG] [Thread-136818] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:17:32.048 [DEBUG] [Thread-136818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:17:32.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:17:32.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:17:32.105 [DEBUG] [Thread-136818] [transport.py] [_log()] userauth is OK
2026-02-11T22:17:32.105 [DEBUG] [Thread-136818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:17:32.105 [DEBUG] [Thread-136818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:17:32.105 [DEBUG] [Thread-136818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:17:32.105 [DEBUG] [Thread-136818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:17:32.123 [INFO] [Thread-136818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:17:32.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:17:32.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:17:32.926 [DEBUG] [Thread-136818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:17:32.926 [DEBUG] [Thread-136818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:17:32.974 [DEBUG] [Thread-136818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:17:32.974 [DEBUG] [Thread-136818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:17:32.983 [DEBUG] [Thread-136818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:17:32.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:17:32.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:17:33.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
2026-02-11T22:17:33.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:17:33.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:17:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:17:33.024 [DEBUG] [Thread-136818] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:17:38.261 [DEBUG] [Thread-136820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:17:39.673 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:17:39.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:17:46.302 [DEBUG] [Thread-136821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:17:53.309 [DEBUG] [Thread-136822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:18:03.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:18:03.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:18:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:18:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 17, 38), 1.67, 89.72, 0.0, 18.6, 15.66, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:18:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:17:38
2026-02-11T22:18:05.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:18:05.441 [DEBUG] [Thread-136823] [transport.py] [_log()] starting thread (client mode): 0xa57e01c0
2026-02-11T22:18:05.441 [DEBUG] [Thread-136823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:18:05.462 [DEBUG] [Thread-136823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:18:05.463 [INFO] [Thread-136823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] client lang: <none>
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] server lang: <none>
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] kex follows: False
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:18:05.466 [DEBUG] [Thread-136823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:18:05.467 [DEBUG] [Thread-136823] [transport.py] [_log()] Compression: none
2026-02-11T22:18:05.467 [DEBUG] [Thread-136823] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:18:05.484 [DEBUG] [Thread-136823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:18:05.484 [DEBUG] [Thread-136823] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:18:05.485 [DEBUG] [Thread-136823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:18:05.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:18:05.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:18:05.487 [DEBUG] [Thread-136823] [transport.py] [_log()] userauth is OK
2026-02-11T22:18:05.487 [DEBUG] [Thread-136823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:18:05.487 [DEBUG] [Thread-136823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:18:05.487 [DEBUG] [Thread-136823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:18:05.487 [DEBUG] [Thread-136823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:18:05.513 [INFO] [Thread-136823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:18:05.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:18:06.143 [DEBUG] [Thread-136823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:18:06.143 [DEBUG] [Thread-136823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:18:06.144 [DEBUG] [Thread-136823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:18:06.184 [DEBUG] [Thread-136823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:18:06.185 [DEBUG] [Thread-136823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:18:06.188 [DEBUG] [Thread-136823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:18:06.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:18:06.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:18:06.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:18:06.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:18:06.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:18:06.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:18:06.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:18:06.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:18:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:18:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.845276 -999.00  +15.40  10.25     90  +13.80 1 1 1 3 1     0    0 1.54 -3.40 ZNESW 13.9 10.2 202.0 20.9 16.9 -18.5 16.6 -17.9 16.6 -16.9 16.9 -18.0
2026-02-11T22:18:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:18:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:18:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.845276
2026-02-11T22:18:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:18:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:18:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:18:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:18:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:18:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:17:38', tmtdew=1.67, humidity=89.72, cloud=0.0, wind=18.6, temperature=15.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:17:11.846', atlas_cloud=1, atlas_rain=1, zp_data=[0.042749999999999844, -0.003750000000000142, 0.05375000000000085, 0.04499999999999815, 0.11050000000000004, 0.039250000000000895, 0.014999999999998792, 0.012750000000000483, 0.058499999999998664, 0.04800000000000004, 0.05824999999999925, 0.09200000000000053, 0.1385000000000005, 0.10824999999999996, 0.026499999999998636, 0.0519999999999996, 0.1092499999999994, 0.25200000000000067, 0.06400000000000006, 0.0832499999999996, 0.14599999999999902, 0.11974999999999802, 0.06625000000000014, 0.05375000000000085, 0.14499999999999957, 0.29550000000000054, 0.2732500000000009, 0.2375000000000007, 0.16999999999999993, 0.12900000000000134, 0.16900000000000048, 0.11550000000000082, 0.15524999999999878], zp_timestamp='2026-02-11T20:17:00')
2026-02-11T22:18:06.216 [DEBUG] [Thread-136823] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:18:06.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:18:06.309 [DEBUG] [Thread-136826] [transport.py] [_log()] starting thread (client mode): 0xa2d4fc70
2026-02-11T22:18:06.309 [DEBUG] [Thread-136826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:18:06.323 [DEBUG] [Thread-136826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:18:06.324 [INFO] [Thread-136826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:18:06.331 [DEBUG] [Thread-136826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] client lang: <none>
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] server lang: <none>
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] kex follows: False
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] Compression: none
2026-02-11T22:18:06.332 [DEBUG] [Thread-136826] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:18:06.389 [DEBUG] [Thread-136826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:18:06.389 [DEBUG] [Thread-136826] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:18:06.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:18:06.390 [DEBUG] [Thread-136826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:18:06.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:18:06.445 [DEBUG] [Thread-136826] [transport.py] [_log()] userauth is OK
2026-02-11T22:18:06.445 [DEBUG] [Thread-136826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:18:06.445 [DEBUG] [Thread-136826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:18:06.445 [DEBUG] [Thread-136826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:18:06.445 [DEBUG] [Thread-136826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:18:06.465 [INFO] [Thread-136826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:18:06.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:18:06.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:18:07.301 [DEBUG] [Thread-136826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:18:07.302 [DEBUG] [Thread-136826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:18:07.349 [DEBUG] [Thread-136826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:18:07.350 [DEBUG] [Thread-136826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:18:07.359 [DEBUG] [Thread-136826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:18:07.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:18:07.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:18:07.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:18:07.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:18:07.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:18:07.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:18:07.396 [DEBUG] [Thread-136826] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:18:08.346 [DEBUG] [Thread-136828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:18:23.411 [DEBUG] [Thread-136829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:18:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:18:37.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:18:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:18:38.450 [DEBUG] [Thread-136830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:18:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 18, 13), 1.13, 92.88, 0.0, 18.07, 15.33, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:18:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:18:13
2026-02-11T22:18:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:18:39.694 [DEBUG] [Thread-136831] [transport.py] [_log()] starting thread (client mode): 0x9eb06200
2026-02-11T22:18:39.694 [DEBUG] [Thread-136831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:18:39.710 [DEBUG] [Thread-136831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:18:39.710 [INFO] [Thread-136831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:18:39.719 [DEBUG] [Thread-136831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:18:39.719 [DEBUG] [Thread-136831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:18:39.719 [DEBUG] [Thread-136831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:18:39.719 [DEBUG] [Thread-136831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:39.719 [DEBUG] [Thread-136831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] client lang: <none>
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] server lang: <none>
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] kex follows: False
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] Compression: none
2026-02-11T22:18:39.720 [DEBUG] [Thread-136831] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:18:39.731 [DEBUG] [Thread-136831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:18:39.731 [DEBUG] [Thread-136831] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:18:39.732 [DEBUG] [Thread-136831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:18:39.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:18:39.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:18:39.734 [DEBUG] [Thread-136831] [transport.py] [_log()] userauth is OK
2026-02-11T22:18:39.734 [DEBUG] [Thread-136831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:18:39.734 [DEBUG] [Thread-136831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:18:39.734 [DEBUG] [Thread-136831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:18:39.734 [DEBUG] [Thread-136831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:18:39.759 [INFO] [Thread-136831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:18:39.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:18:39.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:18:39.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:18:40.536 [DEBUG] [Thread-136831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:18:40.536 [DEBUG] [Thread-136831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:18:40.536 [DEBUG] [Thread-136831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:18:40.576 [DEBUG] [Thread-136831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:18:40.577 [DEBUG] [Thread-136831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:18:40.580 [DEBUG] [Thread-136831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:18:40.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:18:40.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:18:40.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:18:40.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:18:40.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:18:40.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:18:40.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:18:40.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:18:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:18:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.845970 -999.00  +15.30  19.63     90  +13.80 1 1 1 3 1     0    0 1.52 -3.52 ZNESW 17.0 19.6 196.6 22.0 16.8 -18.4 16.6 -18.1 16.6 -16.8 16.8 -17.9
2026-02-11T22:18:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:18:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:18:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.845970
2026-02-11T22:18:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:18:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:18:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:18:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:18:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:18:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:18:13', tmtdew=1.13, humidity=92.88, cloud=0.0, wind=18.07, temperature=15.33, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:18:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[0.042749999999999844, -0.003750000000000142, 0.05375000000000085, 0.04499999999999815, 0.11050000000000004, 0.039250000000000895, 0.014999999999998792, 0.012750000000000483, 0.058499999999998664, 0.04800000000000004, 0.05824999999999925, 0.09200000000000053, 0.1385000000000005, 0.10824999999999996, 0.026499999999998636, 0.0519999999999996, 0.1092499999999994, 0.25200000000000067, 0.06400000000000006, 0.0832499999999996, 0.14599999999999902, 0.11974999999999802, 0.06625000000000014, 0.05375000000000085, 0.14499999999999957, 0.29550000000000054, 0.2732500000000009, 0.2375000000000007, 0.16999999999999993, 0.12900000000000134, 0.16900000000000048, 0.11550000000000082, 0.15524999999999878], zp_timestamp='2026-02-11T20:17:00')
2026-02-11T22:18:40.606 [DEBUG] [Thread-136831] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:18:40.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:18:40.703 [DEBUG] [Thread-136834] [transport.py] [_log()] starting thread (client mode): 0xa575af20
2026-02-11T22:18:40.703 [DEBUG] [Thread-136834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:18:40.718 [DEBUG] [Thread-136834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:18:40.718 [INFO] [Thread-136834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:18:40.725 [DEBUG] [Thread-136834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] client lang: <none>
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] server lang: <none>
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] kex follows: False
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:18:40.726 [DEBUG] [Thread-136834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:18:40.727 [DEBUG] [Thread-136834] [transport.py] [_log()] Compression: none
2026-02-11T22:18:40.727 [DEBUG] [Thread-136834] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:18:40.785 [DEBUG] [Thread-136834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:18:40.785 [DEBUG] [Thread-136834] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:18:40.786 [DEBUG] [Thread-136834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:18:40.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:18:40.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:18:40.841 [DEBUG] [Thread-136834] [transport.py] [_log()] userauth is OK
2026-02-11T22:18:40.842 [DEBUG] [Thread-136834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:18:40.842 [DEBUG] [Thread-136834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:18:40.842 [DEBUG] [Thread-136834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:18:40.842 [DEBUG] [Thread-136834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:18:40.867 [INFO] [Thread-136834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:18:40.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:18:40.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:18:41.682 [DEBUG] [Thread-136834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:18:41.682 [DEBUG] [Thread-136834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:18:41.731 [DEBUG] [Thread-136834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:18:41.731 [DEBUG] [Thread-136834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:18:41.741 [DEBUG] [Thread-136834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:18:41.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:18:41.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:18:41.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:18:41.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:18:41.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:18:41.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:18:41.778 [DEBUG] [Thread-136834] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:18:46.377 [DEBUG] [Thread-136836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:18:53.490 [DEBUG] [Thread-136837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:19:08.545 [DEBUG] [Thread-136838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:19:11.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:19:11.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:19:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:19:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 18, 49), 1.18, 92.91, 0.0, 20.22, 15.29, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:19:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:18:49
2026-02-11T22:19:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:19:14.139 [DEBUG] [Thread-136839] [transport.py] [_log()] starting thread (client mode): 0xa2d69660
2026-02-11T22:19:14.139 [DEBUG] [Thread-136839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:19:14.160 [DEBUG] [Thread-136839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:19:14.160 [INFO] [Thread-136839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:19:14.163 [DEBUG] [Thread-136839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:19:14.163 [DEBUG] [Thread-136839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:19:14.163 [DEBUG] [Thread-136839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:19:14.163 [DEBUG] [Thread-136839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:14.163 [DEBUG] [Thread-136839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] client lang: <none>
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] server lang: <none>
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] kex follows: False
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] Compression: none
2026-02-11T22:19:14.164 [DEBUG] [Thread-136839] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:19:14.181 [DEBUG] [Thread-136839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:19:14.182 [DEBUG] [Thread-136839] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:19:14.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:19:14.183 [DEBUG] [Thread-136839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:19:14.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:19:14.184 [DEBUG] [Thread-136839] [transport.py] [_log()] userauth is OK
2026-02-11T22:19:14.185 [DEBUG] [Thread-136839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:19:14.185 [DEBUG] [Thread-136839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:19:14.185 [DEBUG] [Thread-136839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:19:14.185 [DEBUG] [Thread-136839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:19:14.202 [INFO] [Thread-136839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:19:14.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:19:14.849 [DEBUG] [Thread-136839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:19:14.850 [DEBUG] [Thread-136839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:19:14.850 [DEBUG] [Thread-136839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:19:14.890 [DEBUG] [Thread-136839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:19:14.890 [DEBUG] [Thread-136839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:19:14.893 [DEBUG] [Thread-136839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:19:14.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:19:14.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:19:14.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:19:14.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:19:14.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:19:14.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:19:14.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:19:14.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:19:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:19:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.846318 -999.00  +15.30  16.51     90  +13.70 1 1 1 3 1     0    0 1.56 -3.36 ZNESW 12.8 16.5 199.6 19.9 16.8 -18.4 16.6 -17.4 16.5 -16.7 16.8 -17.9
2026-02-11T22:19:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:19:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:19:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.846318
2026-02-11T22:19:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:19:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:19:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:19:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:19:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:19:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:18:49', tmtdew=1.18, humidity=92.91, cloud=0.0, wind=20.22, temperature=15.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:18:41.875', atlas_cloud=1, atlas_rain=1, zp_data=[0.042749999999999844, -0.003750000000000142, 0.05375000000000085, 0.04499999999999815, 0.11050000000000004, 0.039250000000000895, 0.014999999999998792, 0.012750000000000483, 0.058499999999998664, 0.04800000000000004, 0.05824999999999925, 0.09200000000000053, 0.1385000000000005, 0.10824999999999996, 0.026499999999998636, 0.0519999999999996, 0.1092499999999994, 0.25200000000000067, 0.06400000000000006, 0.0832499999999996, 0.14599999999999902, 0.11974999999999802, 0.06625000000000014, 0.05375000000000085, 0.14499999999999957, 0.29550000000000054, 0.2732500000000009, 0.2375000000000007, 0.16999999999999993, 0.12900000000000134, 0.16900000000000048, 0.11550000000000082, 0.15524999999999878], zp_timestamp='2026-02-11T20:17:00')
2026-02-11T22:19:14.920 [DEBUG] [Thread-136839] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:19:14.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:19:15.008 [DEBUG] [Thread-136842] [transport.py] [_log()] starting thread (client mode): 0x9eb06500
2026-02-11T22:19:15.008 [DEBUG] [Thread-136842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:19:15.023 [DEBUG] [Thread-136842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:19:15.023 [INFO] [Thread-136842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:19:15.030 [DEBUG] [Thread-136842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] client lang: <none>
2026-02-11T22:19:15.031 [DEBUG] [Thread-136842] [transport.py] [_log()] server lang: <none>
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] kex follows: False
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] Compression: none
2026-02-11T22:19:15.032 [DEBUG] [Thread-136842] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:19:15.090 [DEBUG] [Thread-136842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:19:15.091 [DEBUG] [Thread-136842] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:19:15.091 [DEBUG] [Thread-136842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:19:15.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:19:15.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:19:15.146 [DEBUG] [Thread-136842] [transport.py] [_log()] userauth is OK
2026-02-11T22:19:15.146 [DEBUG] [Thread-136842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:19:15.146 [DEBUG] [Thread-136842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:19:15.147 [DEBUG] [Thread-136842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:19:15.147 [DEBUG] [Thread-136842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:19:15.165 [INFO] [Thread-136842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:19:15.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:19:15.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:19:16.008 [DEBUG] [Thread-136842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:19:16.008 [DEBUG] [Thread-136842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:19:16.056 [DEBUG] [Thread-136842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:19:16.056 [DEBUG] [Thread-136842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:19:16.064 [DEBUG] [Thread-136842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:19:16.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:19:16.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:19:16.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:19:16.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:19:16.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:19:16.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:19:16.096 [DEBUG] [Thread-136842] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:19:23.582 [DEBUG] [Thread-136844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:19:38.640 [DEBUG] [Thread-136845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:19:40.083 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:19:40.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:19:46.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:19:46.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:19:46.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:19:46.448 [DEBUG] [Thread-136846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:19:48.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 19, 24), 1.17, 92.93, 0.0, 20.29, 15.31, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:19:48.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:19:24
2026-02-11T22:19:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:19:48.703 [DEBUG] [Thread-136847] [transport.py] [_log()] starting thread (client mode): 0x9eb07790
2026-02-11T22:19:48.703 [DEBUG] [Thread-136847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:19:48.722 [DEBUG] [Thread-136847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:19:48.722 [INFO] [Thread-136847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] client lang: <none>
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] server lang: <none>
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] kex follows: False
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] Compression: none
2026-02-11T22:19:48.725 [DEBUG] [Thread-136847] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:19:48.742 [DEBUG] [Thread-136847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:19:48.743 [DEBUG] [Thread-136847] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:19:48.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:19:48.744 [DEBUG] [Thread-136847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:19:48.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:19:48.746 [DEBUG] [Thread-136847] [transport.py] [_log()] userauth is OK
2026-02-11T22:19:48.746 [DEBUG] [Thread-136847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:19:48.746 [DEBUG] [Thread-136847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:19:48.746 [DEBUG] [Thread-136847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:19:48.746 [DEBUG] [Thread-136847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:19:48.770 [INFO] [Thread-136847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:19:48.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:19:49.449 [DEBUG] [Thread-136847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:19:49.449 [DEBUG] [Thread-136847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:19:49.450 [DEBUG] [Thread-136847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:19:49.490 [DEBUG] [Thread-136847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:19:49.491 [DEBUG] [Thread-136847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:19:49.494 [DEBUG] [Thread-136847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:19:49.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:19:49.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:19:49.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:19:49.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:19:49.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:19:49.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:19:49.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:19:49.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:19:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:19:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.846665 -999.00  +15.30  13.25     90  +13.80 1 1 1 3 1     0    0 1.48 -3.59 ZNESW 10.3 13.2 205.3 17.2 16.8 -18.2 16.6 -17.0 16.5 -16.7 16.8 -17.7
2026-02-11T22:19:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:19:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:19:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.846665
2026-02-11T22:19:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:19:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:19:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:19:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:19:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:19:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:19:24', tmtdew=1.17, humidity=92.93, cloud=0.0, wind=20.29, temperature=15.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:19:11.856', atlas_cloud=1, atlas_rain=1, zp_data=[0.042749999999999844, -0.003750000000000142, 0.05375000000000085, 0.04499999999999815, 0.11050000000000004, 0.039250000000000895, 0.014999999999998792, 0.012750000000000483, 0.058499999999998664, 0.04800000000000004, 0.05824999999999925, 0.09200000000000053, 0.1385000000000005, 0.10824999999999996, 0.026499999999998636, 0.0519999999999996, 0.1092499999999994, 0.25200000000000067, 0.06400000000000006, 0.0832499999999996, 0.14599999999999902, 0.11974999999999802, 0.06625000000000014, 0.05375000000000085, 0.14499999999999957, 0.29550000000000054, 0.2732500000000009, 0.2375000000000007, 0.16999999999999993, 0.12900000000000134, 0.16900000000000048, 0.11550000000000082, 0.15524999999999878], zp_timestamp='2026-02-11T20:17:00')
2026-02-11T22:19:49.521 [DEBUG] [Thread-136847] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:19:49.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:19:49.617 [DEBUG] [Thread-136850] [transport.py] [_log()] starting thread (client mode): 0xa57b3ca0
2026-02-11T22:19:49.618 [DEBUG] [Thread-136850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:19:49.632 [DEBUG] [Thread-136850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:19:49.632 [INFO] [Thread-136850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:19:49.639 [DEBUG] [Thread-136850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:19:49.639 [DEBUG] [Thread-136850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:19:49.639 [DEBUG] [Thread-136850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:19:49.639 [DEBUG] [Thread-136850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:49.639 [DEBUG] [Thread-136850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:19:49.639 [DEBUG] [Thread-136850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] client lang: <none>
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] server lang: <none>
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] kex follows: False
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] Compression: none
2026-02-11T22:19:49.640 [DEBUG] [Thread-136850] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:19:49.698 [DEBUG] [Thread-136850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:19:49.699 [DEBUG] [Thread-136850] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:19:49.700 [DEBUG] [Thread-136850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:19:49.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:19:49.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:19:49.754 [DEBUG] [Thread-136850] [transport.py] [_log()] userauth is OK
2026-02-11T22:19:49.755 [DEBUG] [Thread-136850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:19:49.755 [DEBUG] [Thread-136850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:19:49.755 [DEBUG] [Thread-136850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:19:49.755 [DEBUG] [Thread-136850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:19:49.774 [INFO] [Thread-136850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:19:49.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:19:49.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:19:50.611 [DEBUG] [Thread-136850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:19:50.612 [DEBUG] [Thread-136850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:19:50.659 [DEBUG] [Thread-136850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:19:50.660 [DEBUG] [Thread-136850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:19:50.669 [DEBUG] [Thread-136850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:19:50.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:19:50.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:19:50.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:19:50.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:19:50.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:19:50.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:19:50.705 [DEBUG] [Thread-136850] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:19:53.674 [DEBUG] [Thread-136852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:08.726 [DEBUG] [Thread-136853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:20:20.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:20:20.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:20:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 19, 59), 1.17, 92.96, 0.0, 20.56, 15.28, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:20:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:19:59
2026-02-11T22:20:22.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:20:23.079 [DEBUG] [Thread-136854] [transport.py] [_log()] starting thread (client mode): 0xa5759ab0
2026-02-11T22:20:23.079 [DEBUG] [Thread-136854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:20:23.099 [DEBUG] [Thread-136854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:20:23.099 [INFO] [Thread-136854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:20:23.102 [DEBUG] [Thread-136854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:20:23.102 [DEBUG] [Thread-136854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:20:23.102 [DEBUG] [Thread-136854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:20:23.102 [DEBUG] [Thread-136854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:23.102 [DEBUG] [Thread-136854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] client lang: <none>
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] server lang: <none>
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] kex follows: False
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] Compression: none
2026-02-11T22:20:23.103 [DEBUG] [Thread-136854] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:20:23.120 [DEBUG] [Thread-136854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:20:23.120 [DEBUG] [Thread-136854] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:20:23.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:20:23.122 [DEBUG] [Thread-136854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:20:23.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:20:23.123 [DEBUG] [Thread-136854] [transport.py] [_log()] userauth is OK
2026-02-11T22:20:23.124 [DEBUG] [Thread-136854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:20:23.124 [DEBUG] [Thread-136854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:20:23.124 [DEBUG] [Thread-136854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:20:23.124 [DEBUG] [Thread-136854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:20:23.146 [INFO] [Thread-136854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:20:23.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:20:23.767 [DEBUG] [Thread-136856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:23.775 [DEBUG] [Thread-136854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:20:23.776 [DEBUG] [Thread-136854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:20:23.776 [DEBUG] [Thread-136854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:20:23.816 [DEBUG] [Thread-136854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:20:23.817 [DEBUG] [Thread-136854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:20:23.820 [DEBUG] [Thread-136854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:20:23.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:20:23.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:20:23.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:20:23.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:20:23.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:20:23.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:20:23.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:20:23.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:20:23.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:20:23.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.847012 -999.00  +15.40  10.61     90  +13.80 1 1 1 3 1     0    0 1.52 -3.49 ZNESW 9.1 10.6 210.0 13.9 16.8 -18.0 16.6 -17.0 16.5 -16.6 16.8 -17.7
2026-02-11T22:20:23.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:20:23.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:20:23.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.847012
2026-02-11T22:20:23.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:20:23.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:20:23.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:20:23.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:20:23.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:20:23.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:19:59', tmtdew=1.17, humidity=92.96, cloud=0.0, wind=20.56, temperature=15.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:19:41.837', atlas_cloud=1, atlas_rain=1, zp_data=[0.042749999999999844, -0.003750000000000142, 0.05375000000000085, 0.04499999999999815, 0.11050000000000004, 0.039250000000000895, 0.014999999999998792, 0.012750000000000483, 0.058499999999998664, 0.04800000000000004, 0.05824999999999925, 0.09200000000000053, 0.1385000000000005, 0.10824999999999996, 0.026499999999998636, 0.0519999999999996, 0.1092499999999994, 0.25200000000000067, 0.06400000000000006, 0.0832499999999996, 0.14599999999999902, 0.11974999999999802, 0.06625000000000014, 0.05375000000000085, 0.14499999999999957, 0.29550000000000054, 0.2732500000000009, 0.2375000000000007, 0.16999999999999993, 0.12900000000000134, 0.16900000000000048, 0.11550000000000082, 0.15524999999999878], zp_timestamp='2026-02-11T20:17:00')
2026-02-11T22:20:23.847 [DEBUG] [Thread-136854] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:20:23.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:20:23.955 [DEBUG] [Thread-136858] [transport.py] [_log()] starting thread (client mode): 0xa5758670
2026-02-11T22:20:23.955 [DEBUG] [Thread-136858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:20:23.973 [DEBUG] [Thread-136858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:20:23.973 [INFO] [Thread-136858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:20:23.981 [DEBUG] [Thread-136858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:20:23.981 [DEBUG] [Thread-136858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:20:23.982 [DEBUG] [Thread-136858] [transport.py] [_log()] client lang: <none>
2026-02-11T22:20:23.983 [DEBUG] [Thread-136858] [transport.py] [_log()] server lang: <none>
2026-02-11T22:20:23.983 [DEBUG] [Thread-136858] [transport.py] [_log()] kex follows: False
2026-02-11T22:20:23.983 [DEBUG] [Thread-136858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:20:23.983 [DEBUG] [Thread-136858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:20:23.983 [DEBUG] [Thread-136858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:20:23.983 [DEBUG] [Thread-136858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:20:23.984 [DEBUG] [Thread-136858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:20:23.984 [DEBUG] [Thread-136858] [transport.py] [_log()] Compression: none
2026-02-11T22:20:23.984 [DEBUG] [Thread-136858] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:20:24.040 [DEBUG] [Thread-136858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:20:24.041 [DEBUG] [Thread-136858] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:20:24.041 [DEBUG] [Thread-136858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:20:24.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:20:24.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:20:24.095 [DEBUG] [Thread-136858] [transport.py] [_log()] userauth is OK
2026-02-11T22:20:24.095 [DEBUG] [Thread-136858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:20:24.096 [DEBUG] [Thread-136858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:20:24.096 [DEBUG] [Thread-136858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:20:24.096 [DEBUG] [Thread-136858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:20:24.115 [INFO] [Thread-136858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:20:24.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:20:24.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:20:24.932 [DEBUG] [Thread-136858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:20:24.933 [DEBUG] [Thread-136858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:20:24.980 [DEBUG] [Thread-136858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:20:24.981 [DEBUG] [Thread-136858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:20:24.990 [DEBUG] [Thread-136858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:20:24.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:20:24.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:20:25.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
2026-02-11T22:20:25.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:20:25.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:20:25.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:20:25.026 [DEBUG] [Thread-136858] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:20:38.803 [DEBUG] [Thread-136860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:40.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:40.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:46.526 [DEBUG] [Thread-136861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:53.854 [DEBUG] [Thread-136862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:20:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:20:55.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:20:55.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:20:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 20, 35), 1.62, 89.98, 0.0, 21.45, 15.59, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:20:56.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:20:35
2026-02-11T22:20:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:20:57.292 [DEBUG] [Thread-136863] [transport.py] [_log()] starting thread (client mode): 0xa2d6b250
2026-02-11T22:20:57.293 [DEBUG] [Thread-136863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:20:57.314 [DEBUG] [Thread-136863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:20:57.314 [INFO] [Thread-136863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:20:57.317 [DEBUG] [Thread-136863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] client lang: <none>
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] server lang: <none>
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] kex follows: False
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] Compression: none
2026-02-11T22:20:57.318 [DEBUG] [Thread-136863] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:20:57.336 [DEBUG] [Thread-136863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:20:57.336 [DEBUG] [Thread-136863] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:20:57.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:20:57.337 [DEBUG] [Thread-136863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:20:57.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:20:57.340 [DEBUG] [Thread-136863] [transport.py] [_log()] userauth is OK
2026-02-11T22:20:57.340 [DEBUG] [Thread-136863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:20:57.340 [DEBUG] [Thread-136863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:20:57.340 [DEBUG] [Thread-136863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:20:57.340 [DEBUG] [Thread-136863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:20:57.380 [INFO] [Thread-136863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:20:57.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:20:58.000 [DEBUG] [Thread-136863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:20:58.000 [DEBUG] [Thread-136863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:20:58.001 [DEBUG] [Thread-136863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:20:58.041 [DEBUG] [Thread-136863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:20:58.042 [DEBUG] [Thread-136863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:20:58.045 [DEBUG] [Thread-136863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:20:58.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:20:58.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:20:58.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:20:58.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:20:58.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:20:58.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:20:58.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:20:58.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:20:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:20:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.847359 -999.00  +15.40  12.01     90  +13.80 1 1 1 3 1     0    0 1.54 -3.26 ZNESW 9.3 12.0 209.9 16.2 16.8 -18.4 16.6 -17.2 16.5 -16.7 16.8 -17.8
2026-02-11T22:20:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:20:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:20:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.847359
2026-02-11T22:20:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:20:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:20:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:20:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:20:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:20:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:20:35', tmtdew=1.62, humidity=89.98, cloud=0.0, wind=21.45, temperature=15.59, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:20:11.818', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:19:00')
2026-02-11T22:20:58.072 [DEBUG] [Thread-136863] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:20:58.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:20:58.170 [DEBUG] [Thread-136866] [transport.py] [_log()] starting thread (client mode): 0xa2d68100
2026-02-11T22:20:58.170 [DEBUG] [Thread-136866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:20:58.186 [DEBUG] [Thread-136866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:20:58.186 [INFO] [Thread-136866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:20:58.194 [DEBUG] [Thread-136866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:20:58.194 [DEBUG] [Thread-136866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:20:58.194 [DEBUG] [Thread-136866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] client lang: <none>
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] server lang: <none>
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] kex follows: False
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] Compression: none
2026-02-11T22:20:58.195 [DEBUG] [Thread-136866] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:20:58.252 [DEBUG] [Thread-136866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:20:58.253 [DEBUG] [Thread-136866] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:20:58.253 [DEBUG] [Thread-136866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:20:58.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:20:58.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:20:58.308 [DEBUG] [Thread-136866] [transport.py] [_log()] userauth is OK
2026-02-11T22:20:58.308 [DEBUG] [Thread-136866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:20:58.309 [DEBUG] [Thread-136866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:20:58.309 [DEBUG] [Thread-136866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:20:58.309 [DEBUG] [Thread-136866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:20:58.328 [INFO] [Thread-136866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:20:58.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:20:58.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:20:59.191 [DEBUG] [Thread-136866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:20:59.192 [DEBUG] [Thread-136866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:20:59.239 [DEBUG] [Thread-136866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:20:59.240 [DEBUG] [Thread-136866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:20:59.249 [DEBUG] [Thread-136866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:20:59.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:20:59.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:20:59.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
2026-02-11T22:20:59.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:20:59.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:20:59.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:20:59.285 [DEBUG] [Thread-136866] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:21:08.892 [DEBUG] [Thread-136868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:21:23.957 [DEBUG] [Thread-136869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:21:29.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:21:29.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:21:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:21:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 21, 11), 1.16, 92.98, 0.0, 17.38, 15.28, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:21:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:21:11
2026-02-11T22:21:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:21:31.677 [DEBUG] [Thread-136870] [transport.py] [_log()] starting thread (client mode): 0xa57b1960
2026-02-11T22:21:31.677 [DEBUG] [Thread-136870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:21:31.698 [DEBUG] [Thread-136870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:21:31.698 [INFO] [Thread-136870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] client lang: <none>
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] server lang: <none>
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] kex follows: False
2026-02-11T22:21:31.701 [DEBUG] [Thread-136870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:21:31.702 [DEBUG] [Thread-136870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:21:31.702 [DEBUG] [Thread-136870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:21:31.702 [DEBUG] [Thread-136870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:21:31.702 [DEBUG] [Thread-136870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:21:31.702 [DEBUG] [Thread-136870] [transport.py] [_log()] Compression: none
2026-02-11T22:21:31.702 [DEBUG] [Thread-136870] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:21:31.718 [DEBUG] [Thread-136870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:21:31.719 [DEBUG] [Thread-136870] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:21:31.719 [DEBUG] [Thread-136870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:21:31.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:21:31.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:21:31.721 [DEBUG] [Thread-136870] [transport.py] [_log()] userauth is OK
2026-02-11T22:21:31.721 [DEBUG] [Thread-136870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:21:31.722 [DEBUG] [Thread-136870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:21:31.722 [DEBUG] [Thread-136870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:21:31.722 [DEBUG] [Thread-136870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:21:31.737 [INFO] [Thread-136870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:21:31.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:21:32.377 [DEBUG] [Thread-136870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:21:32.377 [DEBUG] [Thread-136870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:21:32.378 [DEBUG] [Thread-136870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:21:32.418 [DEBUG] [Thread-136870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:21:32.419 [DEBUG] [Thread-136870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:21:32.422 [DEBUG] [Thread-136870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:21:32.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:21:32.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:21:32.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:21:32.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:21:32.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:21:32.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:21:32.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:21:32.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:21:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:21:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.847706 -999.00  +15.40  11.61     90  +13.80 1 1 1 3 1     0    0 1.54 -3.05 ZNESW 12.6 11.6 204.4 17.8 16.8 -18.3 16.6 -17.3 16.4 -16.7 16.7 -17.7
2026-02-11T22:21:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:21:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:21:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.847706
2026-02-11T22:21:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:21:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:21:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:21:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:21:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:21:32.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:21:11', tmtdew=1.16, humidity=92.98, cloud=0.0, wind=17.38, temperature=15.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:20:41.798', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:19:00')
2026-02-11T22:21:32.450 [DEBUG] [Thread-136870] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:21:32.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:21:32.546 [DEBUG] [Thread-136873] [transport.py] [_log()] starting thread (client mode): 0xa2d9d7e0
2026-02-11T22:21:32.546 [DEBUG] [Thread-136873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:21:32.560 [DEBUG] [Thread-136873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:21:32.560 [INFO] [Thread-136873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] client lang: <none>
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] server lang: <none>
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] kex follows: False
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:21:32.568 [DEBUG] [Thread-136873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:21:32.569 [DEBUG] [Thread-136873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:21:32.569 [DEBUG] [Thread-136873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:21:32.569 [DEBUG] [Thread-136873] [transport.py] [_log()] Compression: none
2026-02-11T22:21:32.569 [DEBUG] [Thread-136873] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:21:32.628 [DEBUG] [Thread-136873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:21:32.629 [DEBUG] [Thread-136873] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:21:32.629 [DEBUG] [Thread-136873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:21:32.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:21:32.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:21:32.685 [DEBUG] [Thread-136873] [transport.py] [_log()] userauth is OK
2026-02-11T22:21:32.685 [DEBUG] [Thread-136873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:21:32.685 [DEBUG] [Thread-136873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:21:32.685 [DEBUG] [Thread-136873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:21:32.685 [DEBUG] [Thread-136873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:21:32.704 [INFO] [Thread-136873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:21:32.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:21:32.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:21:33.547 [DEBUG] [Thread-136873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:21:33.548 [DEBUG] [Thread-136873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:21:33.595 [DEBUG] [Thread-136873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:21:33.596 [DEBUG] [Thread-136873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:21:33.605 [DEBUG] [Thread-136873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:21:33.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:21:33.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:21:33.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:21:33.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:21:33.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:21:33.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:21:33.646 [DEBUG] [Thread-136873] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:21:38.998 [DEBUG] [Thread-136875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:21:40.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:21:40.493 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:21:46.593 [DEBUG] [Thread-136876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:21:54.050 [DEBUG] [Thread-136877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:22:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:22:03.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:22:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:22:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 21, 46), 1.16, 93.01, 0.0, 15.03, 15.3, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:22:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:21:46
2026-02-11T22:22:05.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:22:05.985 [DEBUG] [Thread-136878] [transport.py] [_log()] starting thread (client mode): 0xa57b22f0
2026-02-11T22:22:05.985 [DEBUG] [Thread-136878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:22:06.005 [DEBUG] [Thread-136878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:22:06.005 [INFO] [Thread-136878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:22:06.008 [DEBUG] [Thread-136878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:22:06.008 [DEBUG] [Thread-136878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:22:06.008 [DEBUG] [Thread-136878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:22:06.008 [DEBUG] [Thread-136878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:06.008 [DEBUG] [Thread-136878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] client lang: <none>
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] server lang: <none>
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] kex follows: False
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] Compression: none
2026-02-11T22:22:06.009 [DEBUG] [Thread-136878] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:22:06.026 [DEBUG] [Thread-136878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:22:06.027 [DEBUG] [Thread-136878] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:22:06.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:22:06.028 [DEBUG] [Thread-136878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:22:06.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:22:06.030 [DEBUG] [Thread-136878] [transport.py] [_log()] userauth is OK
2026-02-11T22:22:06.030 [DEBUG] [Thread-136878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:22:06.030 [DEBUG] [Thread-136878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:22:06.030 [DEBUG] [Thread-136878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:22:06.030 [DEBUG] [Thread-136878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:22:06.049 [INFO] [Thread-136878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:22:06.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:22:06.674 [DEBUG] [Thread-136878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:22:06.674 [DEBUG] [Thread-136878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:22:06.675 [DEBUG] [Thread-136878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:22:06.715 [DEBUG] [Thread-136878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:22:06.715 [DEBUG] [Thread-136878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:22:06.717 [DEBUG] [Thread-136878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:22:06.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:22:06.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:22:06.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:22:06.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:22:06.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:22:06.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:22:06.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:22:06.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:22:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:22:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.848401 -999.00  +15.40   8.95     90  +13.80 1 1 1 3 1     0    0 1.54 -3.58 ZNESW 6.5 8.9 198.3 15.3 16.8 -18.2 16.6 -17.5 16.4 -16.6 16.7 -17.8
2026-02-11T22:22:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:22:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:22:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.848401
2026-02-11T22:22:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:22:06.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:22:06.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:22:06.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:22:06.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:22:06.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:21:46', tmtdew=1.16, humidity=93.01, cloud=0.0, wind=15.03, temperature=15.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:21:41.846', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:19:00')
2026-02-11T22:22:06.742 [DEBUG] [Thread-136878] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:22:06.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:22:06.836 [DEBUG] [Thread-136881] [transport.py] [_log()] starting thread (client mode): 0x9eb07fa0
2026-02-11T22:22:06.836 [DEBUG] [Thread-136881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:22:06.851 [DEBUG] [Thread-136881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:22:06.851 [INFO] [Thread-136881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] client lang: <none>
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] server lang: <none>
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] kex follows: False
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:22:06.859 [DEBUG] [Thread-136881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:22:06.860 [DEBUG] [Thread-136881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:22:06.860 [DEBUG] [Thread-136881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:22:06.860 [DEBUG] [Thread-136881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:22:06.860 [DEBUG] [Thread-136881] [transport.py] [_log()] Compression: none
2026-02-11T22:22:06.860 [DEBUG] [Thread-136881] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:22:06.917 [DEBUG] [Thread-136881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:22:06.918 [DEBUG] [Thread-136881] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:22:06.918 [DEBUG] [Thread-136881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:22:06.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:22:06.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:22:06.974 [DEBUG] [Thread-136881] [transport.py] [_log()] userauth is OK
2026-02-11T22:22:06.974 [DEBUG] [Thread-136881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:22:06.974 [DEBUG] [Thread-136881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:22:06.974 [DEBUG] [Thread-136881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:22:06.974 [DEBUG] [Thread-136881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:22:06.994 [INFO] [Thread-136881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:22:06.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:22:06.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:22:07.866 [DEBUG] [Thread-136881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:22:07.867 [DEBUG] [Thread-136881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:22:07.914 [DEBUG] [Thread-136881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:22:07.915 [DEBUG] [Thread-136881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:22:07.924 [DEBUG] [Thread-136881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:22:07.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:22:07.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:22: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
2026-02-11T22:22:07.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:22:07.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:22:07.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:22:07.961 [DEBUG] [Thread-136881] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:22:09.088 [DEBUG] [Thread-136883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:22:24.143 [DEBUG] [Thread-136884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:22:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:22:37.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:22:37.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:22:39.180 [DEBUG] [Thread-136885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:22:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 22, 21), 1.16, 92.98, 0.0, 16.87, 15.25, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:22:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:22:21
2026-02-11T22:22:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:22:40.335 [DEBUG] [Thread-136886] [transport.py] [_log()] starting thread (client mode): 0xa2d9ece0
2026-02-11T22:22:40.335 [DEBUG] [Thread-136886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:22:40.354 [DEBUG] [Thread-136886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:22:40.355 [INFO] [Thread-136886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:22:40.358 [DEBUG] [Thread-136886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:22:40.358 [DEBUG] [Thread-136886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:22:40.358 [DEBUG] [Thread-136886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:22:40.358 [DEBUG] [Thread-136886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:40.358 [DEBUG] [Thread-136886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:40.358 [DEBUG] [Thread-136886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] client lang: <none>
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] server lang: <none>
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] kex follows: False
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] Compression: none
2026-02-11T22:22:40.359 [DEBUG] [Thread-136886] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:22:40.374 [DEBUG] [Thread-136886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:22:40.375 [DEBUG] [Thread-136886] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:22:40.375 [DEBUG] [Thread-136886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:22:40.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:22:40.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:22:40.377 [DEBUG] [Thread-136886] [transport.py] [_log()] userauth is OK
2026-02-11T22:22:40.377 [DEBUG] [Thread-136886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:22:40.378 [DEBUG] [Thread-136886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:22:40.378 [DEBUG] [Thread-136886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:22:40.378 [DEBUG] [Thread-136886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:22:40.398 [INFO] [Thread-136886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:22:40.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:22:40.696 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:22:40.697 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:22:41.192 [DEBUG] [Thread-136886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:22:41.192 [DEBUG] [Thread-136886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:22:41.192 [DEBUG] [Thread-136886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:22:41.233 [DEBUG] [Thread-136886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:22:41.234 [DEBUG] [Thread-136886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:22:41.236 [DEBUG] [Thread-136886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:22:41.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:22:41.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:22:41.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:22:41.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:22:41.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:22:41.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:22:41.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:22:41.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:22:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:22:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.848748 -999.00  +15.40  10.63     90  +13.80 1 1 1 3 1     0    0 1.53 -3.24 ZNESW 6.0 10.6 209.3 12.6 16.7 -18.3 16.6 -17.1 16.4 -16.6 16.7 -17.7
2026-02-11T22:22:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:22:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:22:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.848748
2026-02-11T22:22:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:22:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:22:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:22:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:22:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:22:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:22:21', tmtdew=1.16, humidity=92.98, cloud=0.0, wind=16.87, temperature=15.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:22:11.827', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:19:00')
2026-02-11T22:22:41.266 [DEBUG] [Thread-136886] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:22:41.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:22:41.363 [DEBUG] [Thread-136889] [transport.py] [_log()] starting thread (client mode): 0x9eb050f0
2026-02-11T22:22:41.363 [DEBUG] [Thread-136889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:22:41.378 [DEBUG] [Thread-136889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:22:41.378 [INFO] [Thread-136889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:22:41.386 [DEBUG] [Thread-136889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] client lang: <none>
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] server lang: <none>
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] kex follows: False
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] Compression: none
2026-02-11T22:22:41.387 [DEBUG] [Thread-136889] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:22:41.445 [DEBUG] [Thread-136889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:22:41.446 [DEBUG] [Thread-136889] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:22:41.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:22:41.447 [DEBUG] [Thread-136889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:22:41.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:22:41.502 [DEBUG] [Thread-136889] [transport.py] [_log()] userauth is OK
2026-02-11T22:22:41.502 [DEBUG] [Thread-136889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:22:41.503 [DEBUG] [Thread-136889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:22:41.503 [DEBUG] [Thread-136889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:22:41.503 [DEBUG] [Thread-136889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:22:41.522 [INFO] [Thread-136889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:22:41.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:22:41.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:22:42.403 [DEBUG] [Thread-136889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:22:42.404 [DEBUG] [Thread-136889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:22:42.452 [DEBUG] [Thread-136889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:22:42.452 [DEBUG] [Thread-136889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:22:42.463 [DEBUG] [Thread-136889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:22:42.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:22:42.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:22:42.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:22:42.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:22:42.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:22:42.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:22:42.503 [DEBUG] [Thread-136889] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:22:46.650 [DEBUG] [Thread-136891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:22:54.217 [DEBUG] [Thread-136892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:23:09.270 [DEBUG] [Thread-136893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:23:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:23:12.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:23:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:23:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 22, 58), 1.16, 92.98, 0.0, 17.45, 15.26, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:23:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:22:58
2026-02-11T22:23:14.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:23:15.117 [DEBUG] [Thread-136894] [transport.py] [_log()] starting thread (client mode): 0xa2d9f7c0
2026-02-11T22:23:15.117 [DEBUG] [Thread-136894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:23:15.137 [DEBUG] [Thread-136894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:23:15.138 [INFO] [Thread-136894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:23:15.141 [DEBUG] [Thread-136894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:23:15.141 [DEBUG] [Thread-136894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:23:15.141 [DEBUG] [Thread-136894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:23:15.141 [DEBUG] [Thread-136894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:15.141 [DEBUG] [Thread-136894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:15.141 [DEBUG] [Thread-136894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] client lang: <none>
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] server lang: <none>
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] kex follows: False
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:23:15.142 [DEBUG] [Thread-136894] [transport.py] [_log()] Compression: none
2026-02-11T22:23:15.143 [DEBUG] [Thread-136894] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:23:15.161 [DEBUG] [Thread-136894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:23:15.162 [DEBUG] [Thread-136894] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:23:15.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:23:15.163 [DEBUG] [Thread-136894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:23:15.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:23:15.165 [DEBUG] [Thread-136894] [transport.py] [_log()] userauth is OK
2026-02-11T22:23:15.165 [DEBUG] [Thread-136894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:23:15.165 [DEBUG] [Thread-136894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:23:15.165 [DEBUG] [Thread-136894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:23:15.165 [DEBUG] [Thread-136894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:23:15.202 [INFO] [Thread-136894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:23:15.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:23:15.828 [DEBUG] [Thread-136894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:23:15.828 [DEBUG] [Thread-136894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:23:15.828 [DEBUG] [Thread-136894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:23:15.869 [DEBUG] [Thread-136894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:23:15.869 [DEBUG] [Thread-136894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:23:15.872 [DEBUG] [Thread-136894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:23:15.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:23:15.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:23:15.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:23:15.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:23:15.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:23:15.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:23:15.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:23:15.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:23:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:23:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.849095 -999.00  +15.50  11.94     89  +13.80 1 1 1 3 1     0    0 1.54 -2.95 ZNESW 13.1 11.9 215.8 17.0 16.7 -18.0 16.6 -17.5 16.4 -16.5 16.7 -17.5
2026-02-11T22:23:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:23:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:23:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.849095
2026-02-11T22:23:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:23:15.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:23:15.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:23:15.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:23:15.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:23:15.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:22:58', tmtdew=1.16, humidity=92.98, cloud=0.0, wind=17.45, temperature=15.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:22:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:19:00')
2026-02-11T22:23:15.901 [DEBUG] [Thread-136894] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:23:15.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:23:15.999 [DEBUG] [Thread-136897] [transport.py] [_log()] starting thread (client mode): 0xa2d9dd20
2026-02-11T22:23:15.999 [DEBUG] [Thread-136897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:23:16.013 [DEBUG] [Thread-136897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:23:16.014 [INFO] [Thread-136897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:23:16.021 [DEBUG] [Thread-136897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:23:16.021 [DEBUG] [Thread-136897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:23:16.021 [DEBUG] [Thread-136897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] client lang: <none>
2026-02-11T22:23:16.022 [DEBUG] [Thread-136897] [transport.py] [_log()] server lang: <none>
2026-02-11T22:23:16.023 [DEBUG] [Thread-136897] [transport.py] [_log()] kex follows: False
2026-02-11T22:23:16.023 [DEBUG] [Thread-136897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:23:16.023 [DEBUG] [Thread-136897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:23:16.023 [DEBUG] [Thread-136897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:23:16.023 [DEBUG] [Thread-136897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:23:16.023 [DEBUG] [Thread-136897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:23:16.023 [DEBUG] [Thread-136897] [transport.py] [_log()] Compression: none
2026-02-11T22:23:16.024 [DEBUG] [Thread-136897] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:23:16.078 [DEBUG] [Thread-136897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:23:16.079 [DEBUG] [Thread-136897] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:23:16.079 [DEBUG] [Thread-136897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:23:16.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:23:16.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:23:16.134 [DEBUG] [Thread-136897] [transport.py] [_log()] userauth is OK
2026-02-11T22:23:16.135 [DEBUG] [Thread-136897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:23:16.135 [DEBUG] [Thread-136897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:23:16.135 [DEBUG] [Thread-136897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:23:16.135 [DEBUG] [Thread-136897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:23:16.157 [INFO] [Thread-136897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:23:16.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:23:16.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:23:16.985 [DEBUG] [Thread-136897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:23:16.986 [DEBUG] [Thread-136897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:23:17.033 [DEBUG] [Thread-136897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:23:17.034 [DEBUG] [Thread-136897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:23:17.043 [DEBUG] [Thread-136897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:23:17.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:23:17.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:23:17.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:23:17.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:23:17.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:23:17.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:23:17.080 [DEBUG] [Thread-136897] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:23:24.307 [DEBUG] [Thread-136899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:23:39.359 [DEBUG] [Thread-136900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:23:40.909 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:23:40.910 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:23:46.722 [DEBUG] [Thread-136901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:23:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:23:47.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:23:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:23:49.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 23, 34), 1.63, 89.95, 0.0, 17.18, 15.59, 1, 1, 0, 2, 0, 0),)
2026-02-11T22:23:49.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:23:34
2026-02-11T22:23:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:23:49.798 [DEBUG] [Thread-136902] [transport.py] [_log()] starting thread (client mode): 0xa2d9c5e0
2026-02-11T22:23:49.799 [DEBUG] [Thread-136902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:23:49.818 [DEBUG] [Thread-136902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:23:49.818 [INFO] [Thread-136902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:23:49.821 [DEBUG] [Thread-136902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:23:49.821 [DEBUG] [Thread-136902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:23:49.821 [DEBUG] [Thread-136902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:23:49.821 [DEBUG] [Thread-136902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:49.821 [DEBUG] [Thread-136902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] client lang: <none>
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] server lang: <none>
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] kex follows: False
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] Compression: none
2026-02-11T22:23:49.822 [DEBUG] [Thread-136902] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:23:49.840 [DEBUG] [Thread-136902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:23:49.840 [DEBUG] [Thread-136902] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:23:49.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:23:49.841 [DEBUG] [Thread-136902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:23:49.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:23:49.843 [DEBUG] [Thread-136902] [transport.py] [_log()] userauth is OK
2026-02-11T22:23:49.843 [DEBUG] [Thread-136902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:23:49.844 [DEBUG] [Thread-136902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:23:49.844 [DEBUG] [Thread-136902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:23:49.844 [DEBUG] [Thread-136902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:23:49.869 [INFO] [Thread-136902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:23:49.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:23:50.506 [DEBUG] [Thread-136902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:23:50.506 [DEBUG] [Thread-136902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:23:50.506 [DEBUG] [Thread-136902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:23:50.547 [DEBUG] [Thread-136902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:23:50.547 [DEBUG] [Thread-136902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:23:50.550 [DEBUG] [Thread-136902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:23:50.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:23:50.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:23:50.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:23:50.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:23:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:23:50.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:23:50.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:23:50.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:23:50.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:23:50.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.849443 -999.00  +15.40  10.54     90  +13.80 1 1 1 3 1     0    0 1.49 -3.37 ZNESW 7.8 10.5 196.9 17.1 16.7 -18.2 16.6 -17.5 16.4 -16.6 16.7 -17.7
2026-02-11T22:23:50.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:23:50.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:23:50.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.849443
2026-02-11T22:23:50.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:23:50.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:23:50.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:23:50.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:23:50.575 [DEBUG] [Thread-136902] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:23:50.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:23:50.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:23:34', tmtdew=1.63, humidity=89.95, cloud=0.0, wind=17.18, temperature=15.59, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:23:11.875', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:19:00')
2026-02-11T22:23:50.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:23:50.677 [DEBUG] [Thread-136905] [transport.py] [_log()] starting thread (client mode): 0xa2d6b0d0
2026-02-11T22:23:50.677 [DEBUG] [Thread-136905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:23:50.692 [DEBUG] [Thread-136905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:23:50.692 [INFO] [Thread-136905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] client lang: <none>
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] server lang: <none>
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] kex follows: False
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:23:50.700 [DEBUG] [Thread-136905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:23:50.701 [DEBUG] [Thread-136905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:23:50.701 [DEBUG] [Thread-136905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:23:50.701 [DEBUG] [Thread-136905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:23:50.701 [DEBUG] [Thread-136905] [transport.py] [_log()] Compression: none
2026-02-11T22:23:50.701 [DEBUG] [Thread-136905] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:23:50.759 [DEBUG] [Thread-136905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:23:50.759 [DEBUG] [Thread-136905] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:23:50.760 [DEBUG] [Thread-136905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:23:50.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:23:50.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:23:50.815 [DEBUG] [Thread-136905] [transport.py] [_log()] userauth is OK
2026-02-11T22:23:50.815 [DEBUG] [Thread-136905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:23:50.815 [DEBUG] [Thread-136905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:23:50.815 [DEBUG] [Thread-136905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:23:50.816 [DEBUG] [Thread-136905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:23:50.835 [INFO] [Thread-136905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:23:50.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:23:50.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:23:51.686 [DEBUG] [Thread-136905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:23:51.687 [DEBUG] [Thread-136905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:23:51.735 [DEBUG] [Thread-136905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:23:51.735 [DEBUG] [Thread-136905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:23:51.743 [DEBUG] [Thread-136905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:23:51.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:23:51.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:23:51.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:23:51.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:23:51.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:23:51.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:23:51.777 [DEBUG] [Thread-136905] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:23:54.392 [DEBUG] [Thread-136907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:09.449 [DEBUG] [Thread-136908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:24:21.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:24:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:24:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 24, 9), 1.16, 92.99, 0.0, 17.31, 15.23, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:24:23.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:24:09
2026-02-11T22:24:24.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:24:24.382 [DEBUG] [Thread-136909] [transport.py] [_log()] starting thread (client mode): 0xa2d9c4c0
2026-02-11T22:24:24.383 [DEBUG] [Thread-136909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:24:24.401 [DEBUG] [Thread-136909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:24:24.401 [INFO] [Thread-136909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] client lang: <none>
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] server lang: <none>
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] kex follows: False
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] Compression: none
2026-02-11T22:24:24.402 [DEBUG] [Thread-136909] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:24:24.420 [DEBUG] [Thread-136909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:24:24.421 [DEBUG] [Thread-136909] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:24:24.421 [DEBUG] [Thread-136909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:24:24.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:24:24.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:24:24.423 [DEBUG] [Thread-136909] [transport.py] [_log()] userauth is OK
2026-02-11T22:24:24.423 [DEBUG] [Thread-136909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:24:24.424 [DEBUG] [Thread-136909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:24:24.424 [DEBUG] [Thread-136909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:24:24.424 [DEBUG] [Thread-136909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:24:24.444 [INFO] [Thread-136909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:24:24.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:24:24.486 [DEBUG] [Thread-136911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:25.099 [DEBUG] [Thread-136909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:24:25.099 [DEBUG] [Thread-136909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:24:25.099 [DEBUG] [Thread-136909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:24:25.140 [DEBUG] [Thread-136909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:24:25.141 [DEBUG] [Thread-136909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:24:25.144 [DEBUG] [Thread-136909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:24:25.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:24:25.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:24:25.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:24:25.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:24:25.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:24:25.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:24:25.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:24:25.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:24:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:24:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.849790 -999.00  +15.40   7.22     90  +13.80 1 1 1 3 1     0    0 1.54 -2.68 ZNESW 6.4 7.2 228.7 16.0 16.7 -18.2 16.6 -17.9 16.4 -16.7 16.7 -17.9
2026-02-11T22:24:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:24:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:24:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.849790
2026-02-11T22:24:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:24:25.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:24:25.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:24:25.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:24:25.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:24:25.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:24:09', tmtdew=1.16, humidity=92.99, cloud=0.0, wind=17.31, temperature=15.23, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:23:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:22:00')
2026-02-11T22:24:25.171 [DEBUG] [Thread-136909] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:24:25.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:24:25.267 [DEBUG] [Thread-136913] [transport.py] [_log()] starting thread (client mode): 0xa2d9f670
2026-02-11T22:24:25.267 [DEBUG] [Thread-136913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:24:25.281 [DEBUG] [Thread-136913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:24:25.281 [INFO] [Thread-136913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:24:25.288 [DEBUG] [Thread-136913] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:24:25.288 [DEBUG] [Thread-136913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:24:25.288 [DEBUG] [Thread-136913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] client lang: <none>
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] server lang: <none>
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] kex follows: False
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] Compression: none
2026-02-11T22:24:25.289 [DEBUG] [Thread-136913] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:24:25.345 [DEBUG] [Thread-136913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:24:25.345 [DEBUG] [Thread-136913] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:24:25.346 [DEBUG] [Thread-136913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:24:25.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:24:25.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:24:25.407 [DEBUG] [Thread-136913] [transport.py] [_log()] userauth is OK
2026-02-11T22:24:25.408 [DEBUG] [Thread-136913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:24:25.408 [DEBUG] [Thread-136913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:24:25.408 [DEBUG] [Thread-136913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:24:25.409 [DEBUG] [Thread-136913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:24:25.430 [INFO] [Thread-136913] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:24:25.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:24:25.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:24:26.268 [DEBUG] [Thread-136913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:24:26.268 [DEBUG] [Thread-136913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:24:26.316 [DEBUG] [Thread-136913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:24:26.317 [DEBUG] [Thread-136913] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:24:26.326 [DEBUG] [Thread-136913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:24:26.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:24:26.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:24:26.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:24:26.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:24:26.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:24:26.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:24:26.363 [DEBUG] [Thread-136913] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:24:39.524 [DEBUG] [Thread-136915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:41.111 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:41.112 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:46.780 [DEBUG] [Thread-136916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:54.580 [DEBUG] [Thread-136917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:24:56.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:24:56.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:24:56.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
2026-02-11T22:24:58.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 24, 45), 1.15, 93.06, 0.0, 16.52, 15.25, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:24:58.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:24:45
2026-02-11T22:24:58.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:24:58.723 [DEBUG] [Thread-136918] [transport.py] [_log()] starting thread (client mode): 0xa2d9f5e0
2026-02-11T22:24:58.723 [DEBUG] [Thread-136918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:24:58.743 [DEBUG] [Thread-136918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:24:58.743 [INFO] [Thread-136918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] client lang: <none>
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] server lang: <none>
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] kex follows: False
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:24:58.746 [DEBUG] [Thread-136918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:24:58.747 [DEBUG] [Thread-136918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:24:58.747 [DEBUG] [Thread-136918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:24:58.747 [DEBUG] [Thread-136918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:24:58.747 [DEBUG] [Thread-136918] [transport.py] [_log()] Compression: none
2026-02-11T22:24:58.747 [DEBUG] [Thread-136918] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:24:58.764 [DEBUG] [Thread-136918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:24:58.765 [DEBUG] [Thread-136918] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:24:58.765 [DEBUG] [Thread-136918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:24:58.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:24:58.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:24:58.809 [DEBUG] [Thread-136918] [transport.py] [_log()] userauth is OK
2026-02-11T22:24:58.809 [DEBUG] [Thread-136918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:24:58.809 [DEBUG] [Thread-136918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:24:58.809 [DEBUG] [Thread-136918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:24:58.810 [DEBUG] [Thread-136918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:24:58.841 [INFO] [Thread-136918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:24:58.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:24:59.458 [DEBUG] [Thread-136918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:24:59.458 [DEBUG] [Thread-136918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:24:59.458 [DEBUG] [Thread-136918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:24:59.499 [DEBUG] [Thread-136918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:24:59.500 [DEBUG] [Thread-136918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:24:59.503 [DEBUG] [Thread-136918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:24:59.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:24:59.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:24:59.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:24:59.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:24:59.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:24:59.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:24:59.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:24:59.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:24:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:24:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.850137 -999.00  +15.40  13.56     90  +13.80 1 1 1 3 1     0    0 1.54 -2.84 ZNESW 8.0 13.6 194.8 15.4 16.7 -18.2 16.6 -17.2 16.4 -16.7 16.7 -17.7
2026-02-11T22:24:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:24:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:24:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.850137
2026-02-11T22:24:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:24:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:24:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:24:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:24:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:24:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:24:45', tmtdew=1.15, humidity=93.06, cloud=0.0, wind=16.52, temperature=15.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:24:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:22:00')
2026-02-11T22:24:59.530 [DEBUG] [Thread-136918] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:24:59.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:24:59.626 [DEBUG] [Thread-136921] [transport.py] [_log()] starting thread (client mode): 0xa2d5e740
2026-02-11T22:24:59.626 [DEBUG] [Thread-136921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:24:59.641 [DEBUG] [Thread-136921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:24:59.641 [INFO] [Thread-136921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:24:59.648 [DEBUG] [Thread-136921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:24:59.649 [DEBUG] [Thread-136921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] client lang: <none>
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] server lang: <none>
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] kex follows: False
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:24:59.650 [DEBUG] [Thread-136921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:24:59.651 [DEBUG] [Thread-136921] [transport.py] [_log()] Compression: none
2026-02-11T22:24:59.651 [DEBUG] [Thread-136921] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:24:59.707 [DEBUG] [Thread-136921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:24:59.708 [DEBUG] [Thread-136921] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:24:59.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:24:59.710 [DEBUG] [Thread-136921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:24:59.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:24:59.763 [DEBUG] [Thread-136921] [transport.py] [_log()] userauth is OK
2026-02-11T22:24:59.764 [DEBUG] [Thread-136921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:24:59.764 [DEBUG] [Thread-136921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:24:59.764 [DEBUG] [Thread-136921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:24:59.764 [DEBUG] [Thread-136921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:24:59.785 [INFO] [Thread-136921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:24:59.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:24:59.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:25:00.619 [DEBUG] [Thread-136921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:25:00.619 [DEBUG] [Thread-136921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:25:00.667 [DEBUG] [Thread-136921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:25:00.667 [DEBUG] [Thread-136921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:25:00.676 [DEBUG] [Thread-136921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:25:00.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:25:00.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:25:00.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:25:00.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:25:00.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:25:00.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:25:00.714 [DEBUG] [Thread-136921] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:25:09.620 [DEBUG] [Thread-136923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:25:24.682 [DEBUG] [Thread-136924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:25:30.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:25:30.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:25:30.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
2026-02-11T22:25:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 25, 21), 1.15, 93.08, 0.0, 17.1, 15.2, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:25:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:25:21
2026-02-11T22:25:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:25:33.599 [DEBUG] [Thread-136925] [transport.py] [_log()] starting thread (client mode): 0xa2d5cb80
2026-02-11T22:25:33.599 [DEBUG] [Thread-136925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:25:33.620 [DEBUG] [Thread-136925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:25:33.620 [INFO] [Thread-136925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:25:33.623 [DEBUG] [Thread-136925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:25:33.623 [DEBUG] [Thread-136925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:25:33.623 [DEBUG] [Thread-136925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:25:33.623 [DEBUG] [Thread-136925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:25:33.623 [DEBUG] [Thread-136925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] client lang: <none>
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] server lang: <none>
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] kex follows: False
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] Compression: none
2026-02-11T22:25:33.624 [DEBUG] [Thread-136925] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:25:33.641 [DEBUG] [Thread-136925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:25:33.642 [DEBUG] [Thread-136925] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:25:33.642 [DEBUG] [Thread-136925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:25:33.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:25:33.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:25:33.644 [DEBUG] [Thread-136925] [transport.py] [_log()] userauth is OK
2026-02-11T22:25:33.644 [DEBUG] [Thread-136925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:25:33.644 [DEBUG] [Thread-136925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:25:33.644 [DEBUG] [Thread-136925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:25:33.645 [DEBUG] [Thread-136925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:25:33.669 [INFO] [Thread-136925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:25:33.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:25:34.470 [DEBUG] [Thread-136925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:25:34.470 [DEBUG] [Thread-136925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:25:34.470 [DEBUG] [Thread-136925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:25:34.511 [DEBUG] [Thread-136925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:25:34.512 [DEBUG] [Thread-136925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:25:34.515 [DEBUG] [Thread-136925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:25:34.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:25:34.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:25:34.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:25:34.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:25:34.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:25:34.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:25:34.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:25:34.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:25:34.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:25:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.850484 -999.00  +15.40  14.44     89  +13.80 1 1 1 3 1     0    0 1.51 -2.86 ZNESW 14.1 14.4 211.6 18.6 16.6 -18.2 16.6 -17.2 16.4 -16.6 16.6 -17.6
2026-02-11T22:25:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:25:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:25:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.850484
2026-02-11T22:25:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:25:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:25:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:25:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:25:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:25:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:25:21', tmtdew=1.15, humidity=93.08, cloud=0.0, wind=17.1, temperature=15.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:24:41.818', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:22:00')
2026-02-11T22:25:34.543 [DEBUG] [Thread-136925] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:25:34.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:25:34.639 [DEBUG] [Thread-136928] [transport.py] [_log()] starting thread (client mode): 0xa2d5fd90
2026-02-11T22:25:34.639 [DEBUG] [Thread-136928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:25:34.654 [DEBUG] [Thread-136928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:25:34.654 [INFO] [Thread-136928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:25:34.661 [DEBUG] [Thread-136928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] client lang: <none>
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] server lang: <none>
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] kex follows: False
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] Compression: none
2026-02-11T22:25:34.662 [DEBUG] [Thread-136928] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:25:34.720 [DEBUG] [Thread-136928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:25:34.721 [DEBUG] [Thread-136928] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:25:34.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:25:34.722 [DEBUG] [Thread-136928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:25:34.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:25:34.776 [DEBUG] [Thread-136928] [transport.py] [_log()] userauth is OK
2026-02-11T22:25:34.776 [DEBUG] [Thread-136928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:25:34.776 [DEBUG] [Thread-136928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:25:34.776 [DEBUG] [Thread-136928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:25:34.777 [DEBUG] [Thread-136928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:25:34.794 [INFO] [Thread-136928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:25:34.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:25:34.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:25:35.609 [DEBUG] [Thread-136928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:25:35.610 [DEBUG] [Thread-136928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:25:35.661 [DEBUG] [Thread-136928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:25:35.661 [DEBUG] [Thread-136928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:25:35.671 [DEBUG] [Thread-136928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:25:35.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:25:35.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:25:35.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:25:35.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:25:35.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:25:35.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:25:35.708 [DEBUG] [Thread-136928] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:25:39.715 [DEBUG] [Thread-136930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:25:41.311 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:25:41.312 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:25:46.849 [DEBUG] [Thread-136931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:25:54.770 [DEBUG] [Thread-136932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:26:05.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:26:05.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:26:05.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:26:07.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 25, 56), 1.14, 93.11, 0.0, 14.7, 15.16, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:26:07.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:25:56
2026-02-11T22:26:07.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:26:08.059 [DEBUG] [Thread-136933] [transport.py] [_log()] starting thread (client mode): 0xa2d044c0
2026-02-11T22:26:08.059 [DEBUG] [Thread-136933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:26:08.079 [DEBUG] [Thread-136933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:26:08.079 [INFO] [Thread-136933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] client lang: <none>
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] server lang: <none>
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] kex follows: False
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] Compression: none
2026-02-11T22:26:08.082 [DEBUG] [Thread-136933] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:26:08.099 [DEBUG] [Thread-136933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:26:08.100 [DEBUG] [Thread-136933] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:26:08.100 [DEBUG] [Thread-136933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:26:08.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:26:08.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:26:08.101 [DEBUG] [Thread-136933] [transport.py] [_log()] userauth is OK
2026-02-11T22:26:08.101 [DEBUG] [Thread-136933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:26:08.101 [DEBUG] [Thread-136933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:26:08.101 [DEBUG] [Thread-136933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:26:08.101 [DEBUG] [Thread-136933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:26:08.119 [INFO] [Thread-136933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:26:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:26:08.800 [DEBUG] [Thread-136933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:26:08.801 [DEBUG] [Thread-136933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:26:08.801 [DEBUG] [Thread-136933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:26:08.841 [DEBUG] [Thread-136933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:26:08.842 [DEBUG] [Thread-136933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:26:08.845 [DEBUG] [Thread-136933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:26:08.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:26:08.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:26:08.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:26:08.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:26:08.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:26:08.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:26:08.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:26:08.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:26:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:26:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.851179 -999.00  +15.40   7.30     90  +13.80 1 1 1 3 1     0    0 1.52 -2.71 ZNESW 9.4 7.3 190.7 16.8 16.6 -18.3 16.5 -17.5 16.4 -16.7 16.6 -17.9
2026-02-11T22:26:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:26:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:26:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.851179
2026-02-11T22:26:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:26:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:26:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:26:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:26:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:26:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:25:56', tmtdew=1.14, humidity=93.11, cloud=0.0, wind=14.7, temperature=15.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:25:41.866', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:22:00')
2026-02-11T22:26:08.871 [DEBUG] [Thread-136933] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:26:08.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:26:08.966 [DEBUG] [Thread-136936] [transport.py] [_log()] starting thread (client mode): 0xa2d6b760
2026-02-11T22:26:08.966 [DEBUG] [Thread-136936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:26:08.980 [DEBUG] [Thread-136936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:26:08.980 [INFO] [Thread-136936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:26:08.987 [DEBUG] [Thread-136936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:26:08.987 [DEBUG] [Thread-136936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] client lang: <none>
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] server lang: <none>
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] kex follows: False
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] Compression: none
2026-02-11T22:26:08.988 [DEBUG] [Thread-136936] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:26:09.048 [DEBUG] [Thread-136936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:26:09.048 [DEBUG] [Thread-136936] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:26:09.049 [DEBUG] [Thread-136936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:26:09.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:26:09.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:26:09.104 [DEBUG] [Thread-136936] [transport.py] [_log()] userauth is OK
2026-02-11T22:26:09.104 [DEBUG] [Thread-136936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:26:09.104 [DEBUG] [Thread-136936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:26:09.104 [DEBUG] [Thread-136936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:26:09.105 [DEBUG] [Thread-136936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:26:09.123 [INFO] [Thread-136936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:26:09.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:26:09.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:26:09.804 [DEBUG] [Thread-136938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:26:09.954 [DEBUG] [Thread-136936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:26:09.955 [DEBUG] [Thread-136936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:26:10.002 [DEBUG] [Thread-136936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:26:10.003 [DEBUG] [Thread-136936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:26:10.012 [DEBUG] [Thread-136936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:26:10.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:26:10.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:26:10.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:26:10.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:26:10.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:26:10.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:26:10.052 [DEBUG] [Thread-136936] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:26:24.853 [DEBUG] [Thread-136939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:26:39.890 [DEBUG] [Thread-136940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:26:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:26:40.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:26:40.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:26:41.518 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:26:41.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:26:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 26, 31), 1.13, 93.16, 0.0, 14.72, 15.16, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:26:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:26:31
2026-02-11T22:26:42.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:26:42.456 [DEBUG] [Thread-136941] [transport.py] [_log()] starting thread (client mode): 0xa5759ab0
2026-02-11T22:26:42.456 [DEBUG] [Thread-136941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:26:42.476 [DEBUG] [Thread-136941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:26:42.476 [INFO] [Thread-136941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:26:42.479 [DEBUG] [Thread-136941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:26:42.479 [DEBUG] [Thread-136941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:26:42.479 [DEBUG] [Thread-136941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] client lang: <none>
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] server lang: <none>
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] kex follows: False
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] Compression: none
2026-02-11T22:26:42.480 [DEBUG] [Thread-136941] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:26:42.497 [DEBUG] [Thread-136941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:26:42.498 [DEBUG] [Thread-136941] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:26:42.498 [DEBUG] [Thread-136941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:26:42.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:26:42.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:26:42.501 [DEBUG] [Thread-136941] [transport.py] [_log()] userauth is OK
2026-02-11T22:26:42.501 [DEBUG] [Thread-136941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:26:42.501 [DEBUG] [Thread-136941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:26:42.501 [DEBUG] [Thread-136941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:26:42.502 [DEBUG] [Thread-136941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:26:42.520 [INFO] [Thread-136941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:26:42.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:26:43.156 [DEBUG] [Thread-136941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:26:43.156 [DEBUG] [Thread-136941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:26:43.156 [DEBUG] [Thread-136941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:26:43.197 [DEBUG] [Thread-136941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:26:43.197 [DEBUG] [Thread-136941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:26:43.200 [DEBUG] [Thread-136941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:26:43.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:26:43.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:26:43.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:26:43.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:26:43.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:26:43.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:26:43.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:26:43.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:26:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:26:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.851526 -999.00  +15.30  11.65     90  +13.70 1 1 1 3 1     0    0 1.56 -2.80 ZNESW 9.4 11.7 206.2 16.8 16.6 -18.2 16.5 -17.2 16.4 -16.5 16.6 -17.6
2026-02-11T22:26:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:26:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:26:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.851526
2026-02-11T22:26:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:26:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:26:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:26:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:26:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:26:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:26:31', tmtdew=1.13, humidity=93.16, cloud=0.0, wind=14.72, temperature=15.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:26:11.846', atlas_cloud=1, atlas_rain=1, zp_data=[0.02624999999999922, 0.009250000000001535, 0.06825000000000081, 0.05249999999999844, 0.08050000000000068, 0.043750000000001066, 0.04899999999999949, 0.030750000000001165, 0.11350000000000016, 0.027000000000001023, 0.021250000000000213, 0.07249999999999979, 0.07399999999999984, 0.06325000000000003, -0.015000000000000568, 0.038000000000000256, 0.08774999999999977, 0.08450000000000024, -0.027000000000001023, 0.07624999999999815, 0.11099999999999888, 0.0857499999999991, 0.012750000000000483, 0.038750000000000284, 0.07749999999999879, 0.17600000000000016, 0.07324999999999982, 0.058999999999999275, 0.14100000000000001, 0.06400000000000183, 0.10900000000000176, 0.05600000000000094, 0.09974999999999845], zp_timestamp='2026-02-11T20:22:00')
2026-02-11T22:26:43.216 [DEBUG] [Thread-136941] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:26:43.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:26:43.316 [DEBUG] [Thread-136944] [transport.py] [_log()] starting thread (client mode): 0xa2d9d990
2026-02-11T22:26:43.316 [DEBUG] [Thread-136944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:26:43.331 [DEBUG] [Thread-136944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:26:43.331 [INFO] [Thread-136944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:26:43.339 [DEBUG] [Thread-136944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:26:43.339 [DEBUG] [Thread-136944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:26:43.339 [DEBUG] [Thread-136944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:26:43.339 [DEBUG] [Thread-136944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:43.339 [DEBUG] [Thread-136944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] client lang: <none>
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] server lang: <none>
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] kex follows: False
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:26:43.340 [DEBUG] [Thread-136944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:26:43.341 [DEBUG] [Thread-136944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:26:43.341 [DEBUG] [Thread-136944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:26:43.341 [DEBUG] [Thread-136944] [transport.py] [_log()] Compression: none
2026-02-11T22:26:43.341 [DEBUG] [Thread-136944] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:26:43.397 [DEBUG] [Thread-136944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:26:43.397 [DEBUG] [Thread-136944] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:26:43.398 [DEBUG] [Thread-136944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:26:43.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:26:43.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:26:43.453 [DEBUG] [Thread-136944] [transport.py] [_log()] userauth is OK
2026-02-11T22:26:43.453 [DEBUG] [Thread-136944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:26:43.454 [DEBUG] [Thread-136944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:26:43.454 [DEBUG] [Thread-136944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:26:43.454 [DEBUG] [Thread-136944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:26:43.481 [INFO] [Thread-136944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:26:43.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:26:43.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:26:44.315 [DEBUG] [Thread-136944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:26:44.315 [DEBUG] [Thread-136944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:26:44.364 [DEBUG] [Thread-136944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:26:44.364 [DEBUG] [Thread-136944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:26:44.373 [DEBUG] [Thread-136944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:26:44.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:26:44.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:26:44.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:26:44.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:26:44.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:26:44.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:26:44.410 [DEBUG] [Thread-136944] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:26:46.934 [DEBUG] [Thread-136946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:26:54.926 [DEBUG] [Thread-136947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:27:09.986 [DEBUG] [Thread-136948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:27:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:27:14.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:27:14.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:27:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 27, 7), 1.12, 93.22, 0.0, 14.47, 15.18, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:27:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:27:07
2026-02-11T22:27:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:27:16.963 [DEBUG] [Thread-136949] [transport.py] [_log()] starting thread (client mode): 0xa2d9ea10
2026-02-11T22:27:16.963 [DEBUG] [Thread-136949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:27:16.983 [DEBUG] [Thread-136949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:27:16.984 [INFO] [Thread-136949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] client lang: <none>
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] server lang: <none>
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] kex follows: False
2026-02-11T22:27:16.985 [DEBUG] [Thread-136949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:27:16.986 [DEBUG] [Thread-136949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:27:16.986 [DEBUG] [Thread-136949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:27:16.986 [DEBUG] [Thread-136949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:27:16.986 [DEBUG] [Thread-136949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:27:16.986 [DEBUG] [Thread-136949] [transport.py] [_log()] Compression: none
2026-02-11T22:27:16.986 [DEBUG] [Thread-136949] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:27:17.003 [DEBUG] [Thread-136949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:27:17.004 [DEBUG] [Thread-136949] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:27:17.004 [DEBUG] [Thread-136949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:27:17.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:27:17.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:27:17.007 [DEBUG] [Thread-136949] [transport.py] [_log()] userauth is OK
2026-02-11T22:27:17.007 [DEBUG] [Thread-136949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:27:17.007 [DEBUG] [Thread-136949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:27:17.007 [DEBUG] [Thread-136949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:27:17.007 [DEBUG] [Thread-136949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:27:17.032 [INFO] [Thread-136949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:27:17.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:27:17.633 [DEBUG] [Thread-136949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:27:17.633 [DEBUG] [Thread-136949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:27:17.633 [DEBUG] [Thread-136949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:27:17.674 [DEBUG] [Thread-136949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:27:17.674 [DEBUG] [Thread-136949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:27:17.677 [DEBUG] [Thread-136949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:27:17.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:27:17.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:27:17.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:27:17.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:27:17.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:27:17.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:27:17.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:27:17.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:27:17.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:27:17.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.851873 -999.00  +15.30  11.08     90  +13.70 1 1 1 3 1     0    0 1.54 -2.63 ZNESW 11.2 11.1 226.4 17.0 16.6 -18.3 16.5 -17.1 16.3 -16.7 16.6 -17.9
2026-02-11T22:27:17.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:27:17.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:27:17.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.851873
2026-02-11T22:27:17.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:27:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:27:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:27:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:27:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:27:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:27:07', tmtdew=1.12, humidity=93.22, cloud=0.0, wind=14.47, temperature=15.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:26:41.827', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:25:00')
2026-02-11T22:27:17.703 [DEBUG] [Thread-136949] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:27:17.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:27:17.799 [DEBUG] [Thread-136952] [transport.py] [_log()] starting thread (client mode): 0xa2d5fd90
2026-02-11T22:27:17.799 [DEBUG] [Thread-136952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:27:17.813 [DEBUG] [Thread-136952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:27:17.814 [INFO] [Thread-136952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:27:17.821 [DEBUG] [Thread-136952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] client lang: <none>
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] server lang: <none>
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] kex follows: False
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] Compression: none
2026-02-11T22:27:17.822 [DEBUG] [Thread-136952] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:27:17.880 [DEBUG] [Thread-136952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:27:17.881 [DEBUG] [Thread-136952] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:27:17.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:27:17.882 [DEBUG] [Thread-136952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:27:17.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:27:17.937 [DEBUG] [Thread-136952] [transport.py] [_log()] userauth is OK
2026-02-11T22:27:17.937 [DEBUG] [Thread-136952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:27:17.937 [DEBUG] [Thread-136952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:27:17.938 [DEBUG] [Thread-136952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:27:17.938 [DEBUG] [Thread-136952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:27:17.961 [INFO] [Thread-136952] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:27:17.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:27:17.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:27:18.780 [DEBUG] [Thread-136952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:27:18.781 [DEBUG] [Thread-136952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:27:18.828 [DEBUG] [Thread-136952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:27:18.828 [DEBUG] [Thread-136952] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:27:18.837 [DEBUG] [Thread-136952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:27:18.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:27:18.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:27:18.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:27:18.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:27:18.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:27:18.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:27:18.874 [DEBUG] [Thread-136952] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:27:25.029 [DEBUG] [Thread-136954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:27:40.078 [DEBUG] [Thread-136955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:27:41.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:27:41.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:27:47.027 [DEBUG] [Thread-136956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:27:48.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:27:48.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:27:48.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:27:50.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 27, 42), 1.56, 90.35, 0.0, 21.77, 15.53, 1, 2, 0, 2, 0, 0),)
2026-02-11T22:27:50.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:27:42
2026-02-11T22:27:51.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:27:51.332 [DEBUG] [Thread-136957] [transport.py] [_log()] starting thread (client mode): 0xa2d9f580
2026-02-11T22:27:51.332 [DEBUG] [Thread-136957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:27:51.352 [DEBUG] [Thread-136957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:27:51.352 [INFO] [Thread-136957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:27:51.355 [DEBUG] [Thread-136957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] client lang: <none>
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] server lang: <none>
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] kex follows: False
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] Compression: none
2026-02-11T22:27:51.356 [DEBUG] [Thread-136957] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:27:51.373 [DEBUG] [Thread-136957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:27:51.374 [DEBUG] [Thread-136957] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:27:51.375 [DEBUG] [Thread-136957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:27:51.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:27:51.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:27:51.376 [DEBUG] [Thread-136957] [transport.py] [_log()] userauth is OK
2026-02-11T22:27:51.377 [DEBUG] [Thread-136957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:27:51.377 [DEBUG] [Thread-136957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:27:51.377 [DEBUG] [Thread-136957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:27:51.377 [DEBUG] [Thread-136957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:27:51.402 [INFO] [Thread-136957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:27:51.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:27:52.024 [DEBUG] [Thread-136957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:27:52.024 [DEBUG] [Thread-136957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:27:52.025 [DEBUG] [Thread-136957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:27:52.065 [DEBUG] [Thread-136957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:27:52.066 [DEBUG] [Thread-136957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:27:52.069 [DEBUG] [Thread-136957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:27:52.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:27:52.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:27:52.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:27:52.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:27:52.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:27:52.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:27:52.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:27:52.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:27:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:27:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.852220 -999.00  +15.30  10.25     90  +13.70 1 1 1 3 1     0    0 1.56 -2.23 ZNESW 13.6 10.2 187.5 15.1 16.6 -18.4 16.5 -17.1 16.3 -16.6 16.6 -17.5
2026-02-11T22:27:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:27:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:27:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.852220
2026-02-11T22:27:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:27:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:27:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:27:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:27:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:27:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:27:42', tmtdew=1.56, humidity=90.35, cloud=0.0, wind=21.77, temperature=15.53, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:27:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:25:00')
2026-02-11T22:27:52.095 [DEBUG] [Thread-136957] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:27:52.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:27:52.190 [DEBUG] [Thread-136960] [transport.py] [_log()] starting thread (client mode): 0xa2d04190
2026-02-11T22:27:52.190 [DEBUG] [Thread-136960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:27:52.205 [DEBUG] [Thread-136960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:27:52.205 [INFO] [Thread-136960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:27:52.212 [DEBUG] [Thread-136960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:27:52.213 [DEBUG] [Thread-136960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:27:52.213 [DEBUG] [Thread-136960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:27:52.213 [DEBUG] [Thread-136960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:52.213 [DEBUG] [Thread-136960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:27:52.213 [DEBUG] [Thread-136960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:52.213 [DEBUG] [Thread-136960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] client lang: <none>
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] server lang: <none>
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] kex follows: False
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] Compression: none
2026-02-11T22:27:52.214 [DEBUG] [Thread-136960] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:27:52.273 [DEBUG] [Thread-136960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:27:52.273 [DEBUG] [Thread-136960] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:27:52.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:27:52.275 [DEBUG] [Thread-136960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:27:52.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:27:52.328 [DEBUG] [Thread-136960] [transport.py] [_log()] userauth is OK
2026-02-11T22:27:52.328 [DEBUG] [Thread-136960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:27:52.328 [DEBUG] [Thread-136960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:27:52.328 [DEBUG] [Thread-136960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:27:52.329 [DEBUG] [Thread-136960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:27:52.343 [INFO] [Thread-136960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:27:52.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:27:52.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:27:53.150 [DEBUG] [Thread-136960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:27:53.150 [DEBUG] [Thread-136960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:27:53.198 [DEBUG] [Thread-136960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:27:53.198 [DEBUG] [Thread-136960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:27:53.207 [DEBUG] [Thread-136960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:27:53.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:27:53.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:27:53.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:27:53.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:27:53.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:27:53.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:27:53.250 [DEBUG] [Thread-136960] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:27:55.113 [DEBUG] [Thread-136962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:10.166 [DEBUG] [Thread-136963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:28:23.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:28:23.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
2026-02-11T22:28:25.203 [DEBUG] [Thread-136964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:25.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 27, 42), 1.56, 90.35, 0.0, 21.77, 15.53, 1, 2, 0, 2, 0, 0),)
2026-02-11T22:28:25.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:27:42
2026-02-11T22:28:25.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:28:26.014 [DEBUG] [Thread-136965] [transport.py] [_log()] starting thread (client mode): 0xa2d5c400
2026-02-11T22:28:26.014 [DEBUG] [Thread-136965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:28:26.033 [DEBUG] [Thread-136965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:28:26.033 [INFO] [Thread-136965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:28:26.035 [DEBUG] [Thread-136965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] client lang: <none>
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] server lang: <none>
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] kex follows: False
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] Compression: none
2026-02-11T22:28:26.036 [DEBUG] [Thread-136965] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:28:26.053 [DEBUG] [Thread-136965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:28:26.053 [DEBUG] [Thread-136965] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:28:26.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:28:26.054 [DEBUG] [Thread-136965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:28:26.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:28:26.056 [DEBUG] [Thread-136965] [transport.py] [_log()] userauth is OK
2026-02-11T22:28:26.057 [DEBUG] [Thread-136965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:28:26.057 [DEBUG] [Thread-136965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:28:26.057 [DEBUG] [Thread-136965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:28:26.057 [DEBUG] [Thread-136965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:28:26.076 [INFO] [Thread-136965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:28:26.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:28:26.821 [DEBUG] [Thread-136965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:28:26.821 [DEBUG] [Thread-136965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:28:26.822 [DEBUG] [Thread-136965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:28:26.862 [DEBUG] [Thread-136965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:28:26.862 [DEBUG] [Thread-136965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:28:26.866 [DEBUG] [Thread-136965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:28:26.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:28:26.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:28:26.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:28:26.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:28:26.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:28:26.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:28:26.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:28:26.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:28:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:28:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.852567 -999.00  +15.30  10.58     90  +13.70 1 1 1 3 1     0    0 1.58 -1.85 ZNESW 6.8 10.6 214.5 18.4 16.6 -18.2 16.4 -17.3 16.3 -16.5 16.6 -17.8
2026-02-11T22:28:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:28:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:28:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.852567
2026-02-11T22:28:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:28:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:28:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:28:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:28:26.892 [DEBUG] [Thread-136965] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:28:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:28:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:27:42', tmtdew=1.56, humidity=90.35, cloud=0.0, wind=21.77, temperature=15.53, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:27:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:25:00')
2026-02-11T22:28:26.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:28:26.989 [DEBUG] [Thread-136968] [transport.py] [_log()] starting thread (client mode): 0xa2d4c220
2026-02-11T22:28:26.989 [DEBUG] [Thread-136968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:28:27.003 [DEBUG] [Thread-136968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:28:27.004 [INFO] [Thread-136968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:28:27.012 [DEBUG] [Thread-136968] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:28:27.012 [DEBUG] [Thread-136968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] client lang: <none>
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] server lang: <none>
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] kex follows: False
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:28:27.013 [DEBUG] [Thread-136968] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:28:27.014 [DEBUG] [Thread-136968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:28:27.014 [DEBUG] [Thread-136968] [transport.py] [_log()] Compression: none
2026-02-11T22:28:27.014 [DEBUG] [Thread-136968] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:28:27.069 [DEBUG] [Thread-136968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:28:27.069 [DEBUG] [Thread-136968] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:28:27.070 [DEBUG] [Thread-136968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:28:27.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:28:27.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:28:27.125 [DEBUG] [Thread-136968] [transport.py] [_log()] userauth is OK
2026-02-11T22:28:27.125 [DEBUG] [Thread-136968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:28:27.126 [DEBUG] [Thread-136968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:28:27.126 [DEBUG] [Thread-136968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:28:27.126 [DEBUG] [Thread-136968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:28:27.144 [INFO] [Thread-136968] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:28:27.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:28:27.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:28:27.989 [DEBUG] [Thread-136968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:28:27.990 [DEBUG] [Thread-136968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:28:28.038 [DEBUG] [Thread-136968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:28:28.038 [DEBUG] [Thread-136968] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:28:28.047 [DEBUG] [Thread-136968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:28:28.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:28:28.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:28:28.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:28:28.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:28:28.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:28:28.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:28:28.084 [DEBUG] [Thread-136968] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:28:40.240 [DEBUG] [Thread-136970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:41.937 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:41.938 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:47.103 [DEBUG] [Thread-136971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:55.293 [DEBUG] [Thread-136972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:28:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:28:58.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:28:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:29:00.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 28, 18), 1.12, 93.26, 0.0, 16.29, 15.16, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:29:00.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:28:18
2026-02-11T22:29:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:29:00.756 [DEBUG] [Thread-136973] [transport.py] [_log()] starting thread (client mode): 0xa2d05870
2026-02-11T22:29:00.756 [DEBUG] [Thread-136973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:29:00.777 [DEBUG] [Thread-136973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:29:00.777 [INFO] [Thread-136973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:29:00.780 [DEBUG] [Thread-136973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:29:00.780 [DEBUG] [Thread-136973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:29:00.780 [DEBUG] [Thread-136973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:29:00.780 [DEBUG] [Thread-136973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:00.780 [DEBUG] [Thread-136973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:00.780 [DEBUG] [Thread-136973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] client lang: <none>
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] server lang: <none>
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] kex follows: False
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:29:00.781 [DEBUG] [Thread-136973] [transport.py] [_log()] Compression: none
2026-02-11T22:29:00.782 [DEBUG] [Thread-136973] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:29:00.804 [DEBUG] [Thread-136973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:29:00.805 [DEBUG] [Thread-136973] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:29:00.805 [DEBUG] [Thread-136973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:29:00.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:29:00.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:29:00.807 [DEBUG] [Thread-136973] [transport.py] [_log()] userauth is OK
2026-02-11T22:29:00.808 [DEBUG] [Thread-136973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:29:00.808 [DEBUG] [Thread-136973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:29:00.808 [DEBUG] [Thread-136973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:29:00.808 [DEBUG] [Thread-136973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:29:00.833 [INFO] [Thread-136973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:29:00.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:29:01.480 [DEBUG] [Thread-136973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:29:01.480 [DEBUG] [Thread-136973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:29:01.481 [DEBUG] [Thread-136973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:29:01.521 [DEBUG] [Thread-136973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:29:01.522 [DEBUG] [Thread-136973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:29:01.525 [DEBUG] [Thread-136973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:29:01.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:29:01.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:29:01.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:29:01.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:29:01.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:29:01.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:29:01.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:29:01.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:29:01.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:29:01.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.852915 -999.00  +15.30   7.44     90  +13.70 1 1 1 3 1     0    0 1.59 -1.44 ZNESW 10.4 7.4 189.6 17.0 16.6 -18.2 16.4 -17.1 16.3 -16.6 16.6 -17.9
2026-02-11T22:29:01.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:29:01.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:29:01.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.852915
2026-02-11T22:29:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:29:01.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:29:01.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:29:01.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:29:01.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:29:01.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:28:18', tmtdew=1.12, humidity=93.26, cloud=0.0, wind=16.29, temperature=15.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:28:11.856', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:25:00')
2026-02-11T22:29:01.552 [DEBUG] [Thread-136973] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:29:01.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:29:01.648 [DEBUG] [Thread-136976] [transport.py] [_log()] starting thread (client mode): 0xa2d04250
2026-02-11T22:29:01.648 [DEBUG] [Thread-136976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:29:01.662 [DEBUG] [Thread-136976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:29:01.662 [INFO] [Thread-136976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:29:01.669 [DEBUG] [Thread-136976] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] client lang: <none>
2026-02-11T22:29:01.670 [DEBUG] [Thread-136976] [transport.py] [_log()] server lang: <none>
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] kex follows: False
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] Compression: none
2026-02-11T22:29:01.671 [DEBUG] [Thread-136976] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:29:01.738 [DEBUG] [Thread-136976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:29:01.738 [DEBUG] [Thread-136976] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:29:01.739 [DEBUG] [Thread-136976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:29:01.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:29:01.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:29:01.798 [DEBUG] [Thread-136976] [transport.py] [_log()] userauth is OK
2026-02-11T22:29:01.798 [DEBUG] [Thread-136976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:29:01.798 [DEBUG] [Thread-136976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:29:01.798 [DEBUG] [Thread-136976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:29:01.799 [DEBUG] [Thread-136976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:29:01.817 [INFO] [Thread-136976] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:29:01.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:29:01.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:29:02.663 [DEBUG] [Thread-136976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:29:02.663 [DEBUG] [Thread-136976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:29:02.712 [DEBUG] [Thread-136976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:29:02.712 [DEBUG] [Thread-136976] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:29:02.720 [DEBUG] [Thread-136976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:29:02.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:29:02.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:29:02.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:29:02.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:29:02.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:29:02.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:29:02.761 [DEBUG] [Thread-136976] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:29:10.332 [DEBUG] [Thread-136978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:29:25.384 [DEBUG] [Thread-136979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:29:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:29:32.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:29:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:29:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 28, 53), 1.11, 93.27, 0.0, 17.01, 15.16, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:29:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:28:53
2026-02-11T22:29:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:29:35.318 [DEBUG] [Thread-136980] [transport.py] [_log()] starting thread (client mode): 0xa2d5fe80
2026-02-11T22:29:35.318 [DEBUG] [Thread-136980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:29:35.336 [DEBUG] [Thread-136980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:29:35.337 [INFO] [Thread-136980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] client lang: <none>
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] server lang: <none>
2026-02-11T22:29:35.340 [DEBUG] [Thread-136980] [transport.py] [_log()] kex follows: False
2026-02-11T22:29:35.341 [DEBUG] [Thread-136980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:29:35.341 [DEBUG] [Thread-136980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:29:35.341 [DEBUG] [Thread-136980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:29:35.341 [DEBUG] [Thread-136980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:29:35.341 [DEBUG] [Thread-136980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:29:35.341 [DEBUG] [Thread-136980] [transport.py] [_log()] Compression: none
2026-02-11T22:29:35.341 [DEBUG] [Thread-136980] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:29:35.358 [DEBUG] [Thread-136980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:29:35.358 [DEBUG] [Thread-136980] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:29:35.359 [DEBUG] [Thread-136980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:29:35.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:29:35.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:29:35.361 [DEBUG] [Thread-136980] [transport.py] [_log()] userauth is OK
2026-02-11T22:29:35.361 [DEBUG] [Thread-136980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:29:35.361 [DEBUG] [Thread-136980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:29:35.361 [DEBUG] [Thread-136980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:29:35.361 [DEBUG] [Thread-136980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:29:35.384 [INFO] [Thread-136980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:29:35.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:29:36.018 [DEBUG] [Thread-136980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:29:36.018 [DEBUG] [Thread-136980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:29:36.018 [DEBUG] [Thread-136980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:29:36.059 [DEBUG] [Thread-136980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:29:36.060 [DEBUG] [Thread-136980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:29:36.063 [DEBUG] [Thread-136980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:29:36.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:29:36.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:29:36.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:29:36.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:29:36.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:29:36.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:29:36.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:29:36.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:29:36.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:29:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.853609 -999.00  +15.30  11.53     90  +13.70 1 1 1 3 1     0    0 1.58 -1.13 ZNESW 10.4 11.5 212.2 15.0 16.6 -18.1 16.5 -17.1 16.2 -16.4 16.6 -17.4
2026-02-11T22:29:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:29:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:29:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.853609
2026-02-11T22:29:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:29:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:29:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:29:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:29:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:29:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:28:53', tmtdew=1.11, humidity=93.27, cloud=0.0, wind=17.01, temperature=15.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:29:11.818', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:25:00')
2026-02-11T22:29:36.091 [DEBUG] [Thread-136980] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:29:36.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:29:36.186 [DEBUG] [Thread-136983] [transport.py] [_log()] starting thread (client mode): 0xa2d9c2e0
2026-02-11T22:29:36.187 [DEBUG] [Thread-136983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:29:36.203 [DEBUG] [Thread-136983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:29:36.203 [INFO] [Thread-136983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:29:36.211 [DEBUG] [Thread-136983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:29:36.211 [DEBUG] [Thread-136983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] client lang: <none>
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] server lang: <none>
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] kex follows: False
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:29:36.212 [DEBUG] [Thread-136983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:29:36.213 [DEBUG] [Thread-136983] [transport.py] [_log()] Compression: none
2026-02-11T22:29:36.213 [DEBUG] [Thread-136983] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:29:36.274 [DEBUG] [Thread-136983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:29:36.274 [DEBUG] [Thread-136983] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:29:36.275 [DEBUG] [Thread-136983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:29:36.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:29:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:29:36.330 [DEBUG] [Thread-136983] [transport.py] [_log()] userauth is OK
2026-02-11T22:29:36.330 [DEBUG] [Thread-136983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:29:36.330 [DEBUG] [Thread-136983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:29:36.330 [DEBUG] [Thread-136983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:29:36.330 [DEBUG] [Thread-136983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:29:36.349 [INFO] [Thread-136983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:29:36.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:29:36.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:29:37.212 [DEBUG] [Thread-136983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:29:37.213 [DEBUG] [Thread-136983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:29:37.260 [DEBUG] [Thread-136983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:29:37.260 [DEBUG] [Thread-136983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:29:37.269 [DEBUG] [Thread-136983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:29:37.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:29:37.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:29:37.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:29:37.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:29:37.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:29:37.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:29:37.303 [DEBUG] [Thread-136983] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:29:40.423 [DEBUG] [Thread-136985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:29:42.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:29:42.141 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:29:47.175 [DEBUG] [Thread-136986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:29:55.474 [DEBUG] [Thread-136987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:30:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:30:07.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:30:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:30:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 29, 29), 1.11, 93.29, 0.0, 15.77, 15.16, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:30:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:29:29
2026-02-11T22:30:09.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:30:09.895 [DEBUG] [Thread-136988] [transport.py] [_log()] starting thread (client mode): 0xa2d5f850
2026-02-11T22:30:09.896 [DEBUG] [Thread-136988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:30:09.909 [DEBUG] [Thread-136988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:30:09.909 [INFO] [Thread-136988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] client lang: <none>
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] server lang: <none>
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] kex follows: False
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:30:09.910 [DEBUG] [Thread-136988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:30:09.919 [DEBUG] [Thread-136988] [transport.py] [_log()] Compression: none
2026-02-11T22:30:09.919 [DEBUG] [Thread-136988] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:30:09.928 [DEBUG] [Thread-136988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:30:09.929 [DEBUG] [Thread-136988] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:30:09.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:30:09.930 [DEBUG] [Thread-136988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:30:09.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:30:09.932 [DEBUG] [Thread-136988] [transport.py] [_log()] userauth is OK
2026-02-11T22:30:09.932 [DEBUG] [Thread-136988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:30:09.932 [DEBUG] [Thread-136988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:30:09.932 [DEBUG] [Thread-136988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:30:09.932 [DEBUG] [Thread-136988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:30:09.952 [INFO] [Thread-136988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:30:09.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:30:10.511 [DEBUG] [Thread-136990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:30:11.291 [DEBUG] [Thread-136988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:30:11.292 [DEBUG] [Thread-136988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:30:11.292 [DEBUG] [Thread-136988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:30:11.332 [DEBUG] [Thread-136988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:30:11.333 [DEBUG] [Thread-136988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:30:11.336 [DEBUG] [Thread-136988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:30:11.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:30:11.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:30:11.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:30:11.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:30:11.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:30:11.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:30:11.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:30:11.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:30:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:30:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.853956 -999.00  +15.30  18.00     90  +13.70 1 1 1 3 1     0    0 1.59 -1.13 ZNESW 8.2 18.0 213.8 21.0 16.6 -18.3 16.5 -17.1 16.3 -16.6 16.6 -17.7
2026-02-11T22:30:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:30:11.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:30:11.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.853956
2026-02-11T22:30:11.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:30:11.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:30:11.363 [DEBUG] [Thread-136988] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:30:11.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:30:11.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:30:11.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:30:11.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:29:29', tmtdew=1.11, humidity=93.29, cloud=0.0, wind=15.77, temperature=15.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:29:41.798', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:28:00')
2026-02-11T22:30:11.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:30:11.458 [DEBUG] [Thread-136992] [transport.py] [_log()] starting thread (client mode): 0xa57b13c0
2026-02-11T22:30:11.458 [DEBUG] [Thread-136992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:30:11.473 [DEBUG] [Thread-136992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:30:11.473 [INFO] [Thread-136992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:30:11.481 [DEBUG] [Thread-136992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:30:11.481 [DEBUG] [Thread-136992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] client lang: <none>
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] server lang: <none>
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] kex follows: False
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] Compression: none
2026-02-11T22:30:11.482 [DEBUG] [Thread-136992] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:30:11.541 [DEBUG] [Thread-136992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:30:11.541 [DEBUG] [Thread-136992] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:30:11.542 [DEBUG] [Thread-136992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:30:11.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:30:11.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:30:11.601 [DEBUG] [Thread-136992] [transport.py] [_log()] userauth is OK
2026-02-11T22:30:11.602 [DEBUG] [Thread-136992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:30:11.602 [DEBUG] [Thread-136992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:30:11.602 [DEBUG] [Thread-136992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:30:11.602 [DEBUG] [Thread-136992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:30:11.621 [INFO] [Thread-136992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:30:11.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:30:11.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:30:12.452 [DEBUG] [Thread-136992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:30:12.452 [DEBUG] [Thread-136992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:30:12.501 [DEBUG] [Thread-136992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:30:12.501 [DEBUG] [Thread-136992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:30:12.510 [DEBUG] [Thread-136992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:30:12.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:30:12.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:30:12.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:30:12.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:30:12.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:30:12.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:30:12.547 [DEBUG] [Thread-136992] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:30:25.549 [DEBUG] [Thread-136994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:30:40.603 [DEBUG] [Thread-136995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:30:42.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:30:42.350 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:30:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:30:42.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:30:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:30:44.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 30, 4), 1.1, 93.32, 0.0, 16.62, 15.16, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:30:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:30:04
2026-02-11T22:30:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:30:45.129 [DEBUG] [Thread-136996] [transport.py] [_log()] starting thread (client mode): 0xa2d97e20
2026-02-11T22:30:45.129 [DEBUG] [Thread-136996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:30:45.151 [DEBUG] [Thread-136996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:30:45.151 [INFO] [Thread-136996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:30:45.152 [DEBUG] [Thread-136996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:30:45.152 [DEBUG] [Thread-136996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:30:45.152 [DEBUG] [Thread-136996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:30:45.152 [DEBUG] [Thread-136996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] client lang: <none>
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] server lang: <none>
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] kex follows: False
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:30:45.153 [DEBUG] [Thread-136996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:30:45.154 [DEBUG] [Thread-136996] [transport.py] [_log()] Compression: none
2026-02-11T22:30:45.154 [DEBUG] [Thread-136996] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:30:45.172 [DEBUG] [Thread-136996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:30:45.173 [DEBUG] [Thread-136996] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:30:45.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:30:45.175 [DEBUG] [Thread-136996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:30:45.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:30:45.177 [DEBUG] [Thread-136996] [transport.py] [_log()] userauth is OK
2026-02-11T22:30:45.178 [DEBUG] [Thread-136996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:30:45.178 [DEBUG] [Thread-136996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:30:45.178 [DEBUG] [Thread-136996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:30:45.178 [DEBUG] [Thread-136996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:30:45.192 [INFO] [Thread-136996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:30:45.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:30:45.813 [DEBUG] [Thread-136996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:30:45.813 [DEBUG] [Thread-136996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:30:45.814 [DEBUG] [Thread-136996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:30:45.854 [DEBUG] [Thread-136996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:30:45.855 [DEBUG] [Thread-136996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:30:45.858 [DEBUG] [Thread-136996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:30:45.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:30:45.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:30:45.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:30:45.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:30:45.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:30:45.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:30:45.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:30:45.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:30:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:30:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.854303 -999.00  +15.30   8.93     90  +13.70 1 1 1 3 1     0    0 1.61 -1.28 ZNESW 6.9 8.9 207.6 18.2 16.6 -18.2 16.4 -17.3 16.3 -16.5 16.5 -17.5
2026-02-11T22:30:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:30:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:30:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.854303
2026-02-11T22:30:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:30:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:30:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:30:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:30:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:30:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:30:04', tmtdew=1.1, humidity=93.32, cloud=0.0, wind=16.62, temperature=15.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:30:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:28:00')
2026-02-11T22:30:45.885 [DEBUG] [Thread-136996] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:30:45.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:30:45.981 [DEBUG] [Thread-136999] [transport.py] [_log()] starting thread (client mode): 0xa2d972e0
2026-02-11T22:30:45.982 [DEBUG] [Thread-136999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:30:45.995 [DEBUG] [Thread-136999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:30:45.995 [INFO] [Thread-136999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:30:46.003 [DEBUG] [Thread-136999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] client lang: <none>
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] server lang: <none>
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] kex follows: False
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] Compression: none
2026-02-11T22:30:46.004 [DEBUG] [Thread-136999] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:30:46.065 [DEBUG] [Thread-136999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:30:46.066 [DEBUG] [Thread-136999] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:30:46.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:30:46.067 [DEBUG] [Thread-136999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:30:46.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:30:46.121 [DEBUG] [Thread-136999] [transport.py] [_log()] userauth is OK
2026-02-11T22:30:46.121 [DEBUG] [Thread-136999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:30:46.122 [DEBUG] [Thread-136999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:30:46.122 [DEBUG] [Thread-136999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:30:46.122 [DEBUG] [Thread-136999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:30:46.136 [INFO] [Thread-136999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:30:46.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:30:46.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:30:46.979 [DEBUG] [Thread-136999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:30:46.979 [DEBUG] [Thread-136999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:30:47.028 [DEBUG] [Thread-136999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:30:47.028 [DEBUG] [Thread-136999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:30:47.037 [DEBUG] [Thread-136999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:30:47.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:30:47.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:30:47.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:30:47.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:30:47.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:30:47.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:30:47.073 [DEBUG] [Thread-136999] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:30:47.225 [DEBUG] [Thread-137001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:30:55.639 [DEBUG] [Thread-137002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:10.693 [DEBUG] [Thread-137003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:17.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:31:17.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:31:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:31:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 30, 40), 1.5, 90.68, 0.0, 16.09, 15.56, 1, 2, 0, 2, 0, 0),)
2026-02-11T22:31:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:30:40
2026-02-11T22:31:19.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:31:19.441 [DEBUG] [Thread-137004] [transport.py] [_log()] starting thread (client mode): 0xa57b12d0
2026-02-11T22:31:19.441 [DEBUG] [Thread-137004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:31:19.460 [DEBUG] [Thread-137004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:31:19.460 [INFO] [Thread-137004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] client lang: <none>
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] server lang: <none>
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] kex follows: False
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] Compression: none
2026-02-11T22:31:19.462 [DEBUG] [Thread-137004] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:31:19.473 [DEBUG] [Thread-137004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:31:19.473 [DEBUG] [Thread-137004] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:31:19.473 [DEBUG] [Thread-137004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:31:19.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:31:19.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:31:19.475 [DEBUG] [Thread-137004] [transport.py] [_log()] userauth is OK
2026-02-11T22:31:19.475 [DEBUG] [Thread-137004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:31:19.475 [DEBUG] [Thread-137004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:31:19.475 [DEBUG] [Thread-137004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:31:19.475 [DEBUG] [Thread-137004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:31:19.498 [INFO] [Thread-137004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:31:19.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:31:20.047 [DEBUG] [Thread-137004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:31:20.047 [DEBUG] [Thread-137004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:31:20.047 [DEBUG] [Thread-137004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:31:20.088 [DEBUG] [Thread-137004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:31:20.088 [DEBUG] [Thread-137004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:31:20.091 [DEBUG] [Thread-137004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:31:20.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:31:20.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:31:20.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:31:20.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:31:20.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:31:20.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:31:20.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:31:20.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:31:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:31:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.854651 -999.00  +15.30  13.29     90  +13.70 1 1 1 3 1     0    0 1.60 -1.50 ZNESW 12.4 13.3 194.0 18.4 16.6 -18.3 16.4 -16.9 16.2 -16.5 16.6 -17.8
2026-02-11T22:31:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:31:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:31:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.854651
2026-02-11T22:31:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:31:20.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:31:20.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:31:20.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:31:20.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:31:20.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:30:40', tmtdew=1.5, humidity=90.68, cloud=0.0, wind=16.09, temperature=15.56, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:30:41.846', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:28:00')
2026-02-11T22:31:20.116 [DEBUG] [Thread-137004] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:31:20.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:31:20.212 [DEBUG] [Thread-137007] [transport.py] [_log()] starting thread (client mode): 0xa2d97fa0
2026-02-11T22:31:20.212 [DEBUG] [Thread-137007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:31:20.226 [DEBUG] [Thread-137007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:31:20.226 [INFO] [Thread-137007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:31:20.235 [DEBUG] [Thread-137007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:31:20.235 [DEBUG] [Thread-137007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:31:20.235 [DEBUG] [Thread-137007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:31:20.235 [DEBUG] [Thread-137007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:20.235 [DEBUG] [Thread-137007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] client lang: <none>
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] server lang: <none>
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] kex follows: False
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] Compression: none
2026-02-11T22:31:20.236 [DEBUG] [Thread-137007] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:31:20.293 [DEBUG] [Thread-137007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:31:20.294 [DEBUG] [Thread-137007] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:31:20.294 [DEBUG] [Thread-137007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:31:20.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:31:20.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:31:20.349 [DEBUG] [Thread-137007] [transport.py] [_log()] userauth is OK
2026-02-11T22:31:20.349 [DEBUG] [Thread-137007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:31:20.349 [DEBUG] [Thread-137007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:31:20.349 [DEBUG] [Thread-137007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:31:20.349 [DEBUG] [Thread-137007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:31:20.363 [INFO] [Thread-137007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:31:20.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:31:20.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:31:21.195 [DEBUG] [Thread-137007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:31:21.195 [DEBUG] [Thread-137007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:31:21.243 [DEBUG] [Thread-137007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:31:21.243 [DEBUG] [Thread-137007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:31:21.251 [DEBUG] [Thread-137007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:31:21.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:31:21.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:31:21.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:31:21.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:31:21.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:31:21.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:31:21.286 [DEBUG] [Thread-137007] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:31:25.734 [DEBUG] [Thread-137009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:40.787 [DEBUG] [Thread-137010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:42.552 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:42.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:47.295 [DEBUG] [Thread-137011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:51.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:31:51.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:31:51.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:31:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 31, 15), 1.05, 93.32, 0.0, 17.98, 15.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:31:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:31:15
2026-02-11T22:31:54.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:31:54.203 [DEBUG] [Thread-137012] [transport.py] [_log()] starting thread (client mode): 0xa57b3550
2026-02-11T22:31:54.204 [DEBUG] [Thread-137012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:31:54.225 [DEBUG] [Thread-137012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:31:54.225 [INFO] [Thread-137012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] client lang: <none>
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] server lang: <none>
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] kex follows: False
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:31:54.228 [DEBUG] [Thread-137012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:31:54.229 [DEBUG] [Thread-137012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:31:54.229 [DEBUG] [Thread-137012] [transport.py] [_log()] Compression: none
2026-02-11T22:31:54.229 [DEBUG] [Thread-137012] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:31:54.246 [DEBUG] [Thread-137012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:31:54.247 [DEBUG] [Thread-137012] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:31:54.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:31:54.248 [DEBUG] [Thread-137012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:31:54.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:31:54.250 [DEBUG] [Thread-137012] [transport.py] [_log()] userauth is OK
2026-02-11T22:31:54.250 [DEBUG] [Thread-137012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:31:54.250 [DEBUG] [Thread-137012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:31:54.250 [DEBUG] [Thread-137012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:31:54.251 [DEBUG] [Thread-137012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:31:54.276 [INFO] [Thread-137012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:31:54.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:31:54.911 [DEBUG] [Thread-137012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:31:54.911 [DEBUG] [Thread-137012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:31:54.912 [DEBUG] [Thread-137012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:31:54.952 [DEBUG] [Thread-137012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:31:54.952 [DEBUG] [Thread-137012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:31:54.955 [DEBUG] [Thread-137012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:31:54.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:31:54.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:31:54.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:31:54.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:31:54.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:31:54.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:31:54.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:31:54.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:31:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:31:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.854998 -999.00  +15.30   7.94     90  +13.80 1 1 1 3 1     0    0 1.57 -1.95 ZNESW 15.6 7.9 197.6 15.3 16.6 -18.2 16.4 -17.2 16.2 -16.5 16.6 -17.7
2026-02-11T22:31:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:31:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:31:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.854998
2026-02-11T22:31:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:31:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:31:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:31:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:31:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:31:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:31:15', tmtdew=1.05, humidity=93.32, cloud=0.0, wind=17.98, temperature=15.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:31:11.827', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:28:00')
2026-02-11T22:31:54.978 [DEBUG] [Thread-137012] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:31:55.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:31:55.074 [DEBUG] [Thread-137015] [transport.py] [_log()] starting thread (client mode): 0xa2d4fac0
2026-02-11T22:31:55.075 [DEBUG] [Thread-137015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:31:55.089 [DEBUG] [Thread-137015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:31:55.089 [INFO] [Thread-137015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:31:55.097 [DEBUG] [Thread-137015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] client lang: <none>
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] server lang: <none>
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] kex follows: False
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] Compression: none
2026-02-11T22:31:55.098 [DEBUG] [Thread-137015] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:31:55.157 [DEBUG] [Thread-137015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:31:55.158 [DEBUG] [Thread-137015] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:31:55.159 [DEBUG] [Thread-137015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:31:55.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:31:55.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:31:55.214 [DEBUG] [Thread-137015] [transport.py] [_log()] userauth is OK
2026-02-11T22:31:55.214 [DEBUG] [Thread-137015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:31:55.214 [DEBUG] [Thread-137015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:31:55.214 [DEBUG] [Thread-137015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:31:55.215 [DEBUG] [Thread-137015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:31:55.233 [INFO] [Thread-137015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:31:55.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:31:55.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:31:55.827 [DEBUG] [Thread-137017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:31:56.043 [DEBUG] [Thread-137015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:31:56.043 [DEBUG] [Thread-137015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:31:56.091 [DEBUG] [Thread-137015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:31:56.092 [DEBUG] [Thread-137015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:31:56.101 [DEBUG] [Thread-137015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:31:56.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:31:56.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:31:56.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:31:56.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:31:56.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:31:56.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:31:56.136 [DEBUG] [Thread-137015] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:32:10.885 [DEBUG] [Thread-137018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:32:25.920 [DEBUG] [Thread-137019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:32:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:32:26.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:32:26.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:32:28.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 31, 50), 1.04, 93.39, 0.0, 20.2, 15.18, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:32:28.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:31:50
2026-02-11T22:32:28.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:32:28.850 [DEBUG] [Thread-137020] [transport.py] [_log()] starting thread (client mode): 0xa57b19c0
2026-02-11T22:32:28.850 [DEBUG] [Thread-137020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:32:28.872 [DEBUG] [Thread-137020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:32:28.872 [INFO] [Thread-137020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:32:28.876 [DEBUG] [Thread-137020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] client lang: <none>
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] server lang: <none>
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] kex follows: False
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] Compression: none
2026-02-11T22:32:28.877 [DEBUG] [Thread-137020] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:32:28.895 [DEBUG] [Thread-137020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:32:28.896 [DEBUG] [Thread-137020] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:32:28.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:32:28.897 [DEBUG] [Thread-137020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:32:28.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:32:28.899 [DEBUG] [Thread-137020] [transport.py] [_log()] userauth is OK
2026-02-11T22:32:28.899 [DEBUG] [Thread-137020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:32:28.899 [DEBUG] [Thread-137020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:32:28.899 [DEBUG] [Thread-137020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:32:28.899 [DEBUG] [Thread-137020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:32:28.923 [INFO] [Thread-137020] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:32:28.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:32:29.556 [DEBUG] [Thread-137020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:32:29.557 [DEBUG] [Thread-137020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:32:29.557 [DEBUG] [Thread-137020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:32:29.598 [DEBUG] [Thread-137020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:32:29.598 [DEBUG] [Thread-137020] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:32:29.601 [DEBUG] [Thread-137020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:32:29.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:32:29.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:32:29.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:32:29.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:32:29.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:32:29.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:32:29.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:32:29.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:32:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:32:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.855345 -999.00  +15.30  10.97     90  +13.80 1 1 1 3 1     0    0 1.53 -2.36 ZNESW 12.4 11.0 217.1 17.5 16.5 -18.2 16.4 -17.0 16.2 -16.4 16.5 -17.4
2026-02-11T22:32:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:32:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:32:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.855345
2026-02-11T22:32:29.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:32:29.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:32:29.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:32:29.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:32:29.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:32:29.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:31:50', tmtdew=1.04, humidity=93.39, cloud=0.0, wind=20.2, temperature=15.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:31:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08125000000000071, 0.12124999999999986, 0.09999999999999787, 0.14450000000000074, 0.08575000000000088, 0.07349999999999923, 0.05775000000000041, 0.11949999999999861, 0.09149999999999991, 0.08525000000000027, 0.03500000000000014, 0.1039999999999992, 0.11224999999999952, 0.008499999999997954, 0.05799999999999983, 0.1222499999999993, 0.16849999999999987, 0.028999999999999915, 0.04724999999999824, 0.11549999999999727, 0.05874999999999808, 0.021250000000000213, 0.03974999999999973, 0.1949999999999985, 0.14550000000000018, 0.08474999999999966, 0.07350000000000101, 0.15500000000000114, 0.08800000000000097, 0.08900000000000041, 0.057500000000000995, 0.12725000000000009], zp_timestamp='2026-02-11T20:28:00')
2026-02-11T22:32:29.625 [DEBUG] [Thread-137020] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:32:29.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:32:29.721 [DEBUG] [Thread-137023] [transport.py] [_log()] starting thread (client mode): 0xa2d962c0
2026-02-11T22:32:29.721 [DEBUG] [Thread-137023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:32:29.735 [DEBUG] [Thread-137023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:32:29.735 [INFO] [Thread-137023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:32:29.743 [DEBUG] [Thread-137023] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:32:29.743 [DEBUG] [Thread-137023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:32:29.743 [DEBUG] [Thread-137023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:32:29.743 [DEBUG] [Thread-137023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] client lang: <none>
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] server lang: <none>
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] kex follows: False
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] Compression: none
2026-02-11T22:32:29.744 [DEBUG] [Thread-137023] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:32:29.800 [DEBUG] [Thread-137023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:32:29.801 [DEBUG] [Thread-137023] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:32:29.801 [DEBUG] [Thread-137023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:32:29.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:32:29.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:32:29.857 [DEBUG] [Thread-137023] [transport.py] [_log()] userauth is OK
2026-02-11T22:32:29.857 [DEBUG] [Thread-137023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:32:29.857 [DEBUG] [Thread-137023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:32:29.858 [DEBUG] [Thread-137023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:32:29.858 [DEBUG] [Thread-137023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:32:29.879 [INFO] [Thread-137023] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:32:29.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:32:29.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:32:30.761 [DEBUG] [Thread-137023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:32:30.762 [DEBUG] [Thread-137023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:32:30.809 [DEBUG] [Thread-137023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:32:30.810 [DEBUG] [Thread-137023] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:32:30.819 [DEBUG] [Thread-137023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:32:30.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:32:30.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:32:30.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
2026-02-11T22:32:30.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:32:30.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:32:30.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:32:30.856 [DEBUG] [Thread-137023] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:32:40.952 [DEBUG] [Thread-137025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:32:42.756 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:32:42.757 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:32:47.351 [DEBUG] [Thread-137026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:32:56.005 [DEBUG] [Thread-137027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:33:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:33:00.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:33:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:33:02.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 32, 27), 1.03, 93.44, 0.0, 21.67, 15.16, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:33:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:32:27
2026-02-11T22:33:03.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:33:03.334 [DEBUG] [Thread-137028] [transport.py] [_log()] starting thread (client mode): 0xa2d4c4c0
2026-02-11T22:33:03.335 [DEBUG] [Thread-137028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:33:03.355 [DEBUG] [Thread-137028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:33:03.355 [INFO] [Thread-137028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:33:03.358 [DEBUG] [Thread-137028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:33:03.358 [DEBUG] [Thread-137028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:33:03.358 [DEBUG] [Thread-137028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:33:03.358 [DEBUG] [Thread-137028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:03.358 [DEBUG] [Thread-137028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] client lang: <none>
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] server lang: <none>
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] kex follows: False
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] Compression: none
2026-02-11T22:33:03.359 [DEBUG] [Thread-137028] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:33:03.375 [DEBUG] [Thread-137028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:33:03.376 [DEBUG] [Thread-137028] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:33:03.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:33:03.377 [DEBUG] [Thread-137028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:33:03.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:33:03.379 [DEBUG] [Thread-137028] [transport.py] [_log()] userauth is OK
2026-02-11T22:33:03.379 [DEBUG] [Thread-137028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:33:03.379 [DEBUG] [Thread-137028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:33:03.379 [DEBUG] [Thread-137028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:33:03.380 [DEBUG] [Thread-137028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:33:03.404 [INFO] [Thread-137028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:33:03.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:33:04.144 [DEBUG] [Thread-137028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:33:04.144 [DEBUG] [Thread-137028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:33:04.145 [DEBUG] [Thread-137028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:33:04.185 [DEBUG] [Thread-137028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:33:04.186 [DEBUG] [Thread-137028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:33:04.189 [DEBUG] [Thread-137028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:33:04.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:33:04.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:33:04.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:33:04.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:33:04.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:33:04.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:33:04.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:33:04.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:33:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:33:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.856040 -999.00  +15.30   7.68     90  +13.80 1 1 1 3 1     0    0 1.50 -3.05 ZNESW 10.0 7.7 188.1 18.0 16.5 -18.2 16.4 -17.0 16.2 -16.5 16.5 -17.6
2026-02-11T22:33:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:33:04.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:33:04.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.856040
2026-02-11T22:33:04.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:33:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:33:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:33:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:33:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:33:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:32:27', tmtdew=1.03, humidity=93.44, cloud=0.0, wind=21.67, temperature=15.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:32:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.01875000000000071, 0.07324999999999982, 0.03449999999999953, 0.12299999999999933, 0.05925000000000047, 0.09149999999999991, 0.1462500000000002, 0.09299999999999997, 0.027000000000001023, 0.020250000000000767, 0.05299999999999905, 0.08050000000000068, 0.07925000000000004, 0.011999999999998678, 0.06899999999999906, 0.05624999999999858, 0.07150000000000034, 0.0019999999999988916, 0.06974999999999909, 0.1324999999999985, 0.10874999999999879, 0.04425000000000168, 0.04875000000000007, 0.09199999999999875, 0.10350000000000037, 0.09174999999999933, 0.09849999999999959, 0.11899999999999977, 0.10100000000000087, 0.10600000000000165, 0.07650000000000112, 0.08474999999999966], zp_timestamp='2026-02-11T20:31:00')
2026-02-11T22:33:04.216 [DEBUG] [Thread-137028] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:33:04.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:33:04.312 [DEBUG] [Thread-137031] [transport.py] [_log()] starting thread (client mode): 0xa57b2dd0
2026-02-11T22:33:04.312 [DEBUG] [Thread-137031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:33:04.326 [DEBUG] [Thread-137031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:33:04.326 [INFO] [Thread-137031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] client lang: <none>
2026-02-11T22:33:04.334 [DEBUG] [Thread-137031] [transport.py] [_log()] server lang: <none>
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] kex follows: False
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] Compression: none
2026-02-11T22:33:04.335 [DEBUG] [Thread-137031] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:33:04.393 [DEBUG] [Thread-137031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:33:04.394 [DEBUG] [Thread-137031] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:33:04.395 [DEBUG] [Thread-137031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:33:04.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:33:04.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:33:04.452 [DEBUG] [Thread-137031] [transport.py] [_log()] userauth is OK
2026-02-11T22:33:04.452 [DEBUG] [Thread-137031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:33:04.452 [DEBUG] [Thread-137031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:33:04.452 [DEBUG] [Thread-137031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:33:04.452 [DEBUG] [Thread-137031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:33:04.471 [INFO] [Thread-137031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:33:04.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:33:04.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:33:05.295 [DEBUG] [Thread-137031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:33:05.295 [DEBUG] [Thread-137031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:33:05.344 [DEBUG] [Thread-137031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:33:05.344 [DEBUG] [Thread-137031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:33:05.353 [DEBUG] [Thread-137031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:33:05.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:33:05.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:33:05.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:33:05.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:33:05.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:33:05.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:33:05.391 [DEBUG] [Thread-137031] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:33:11.042 [DEBUG] [Thread-137033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:33:26.104 [DEBUG] [Thread-137034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:33:35.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:33:35.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:33:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:33:37.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 33, 3), 1.04, 93.42, 0.0, 22.36, 15.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:33:37.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:33:03
2026-02-11T22:33:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:33:38.165 [DEBUG] [Thread-137035] [transport.py] [_log()] starting thread (client mode): 0xa57b2aa0
2026-02-11T22:33:38.165 [DEBUG] [Thread-137035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:33:38.186 [DEBUG] [Thread-137035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:33:38.186 [INFO] [Thread-137035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:33:38.189 [DEBUG] [Thread-137035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:33:38.189 [DEBUG] [Thread-137035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:33:38.189 [DEBUG] [Thread-137035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:33:38.189 [DEBUG] [Thread-137035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] client lang: <none>
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] server lang: <none>
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] kex follows: False
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] Compression: none
2026-02-11T22:33:38.190 [DEBUG] [Thread-137035] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:33:38.208 [DEBUG] [Thread-137035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:33:38.208 [DEBUG] [Thread-137035] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:33:38.209 [DEBUG] [Thread-137035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:33:38.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:33:38.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:33:38.211 [DEBUG] [Thread-137035] [transport.py] [_log()] userauth is OK
2026-02-11T22:33:38.211 [DEBUG] [Thread-137035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:33:38.211 [DEBUG] [Thread-137035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:33:38.211 [DEBUG] [Thread-137035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:33:38.211 [DEBUG] [Thread-137035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:33:38.236 [INFO] [Thread-137035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:33:38.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:33:38.865 [DEBUG] [Thread-137035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:33:38.865 [DEBUG] [Thread-137035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:33:38.865 [DEBUG] [Thread-137035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:33:38.905 [DEBUG] [Thread-137035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:33:38.906 [DEBUG] [Thread-137035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:33:38.909 [DEBUG] [Thread-137035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:33:38.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:33:38.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:33:38.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:33:38.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:33:38.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:33:38.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:33:38.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:33:38.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:33:38.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:33:38.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.856387 -999.00  +15.30  13.36     90  +13.80 1 1 1 3 1     0    0 1.49 -3.54 ZNESW 12.8 13.4 205.8 19.6 16.4 -18.0 16.4 -17.8 16.1 -16.6 16.4 -17.8
2026-02-11T22:33:38.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:33:38.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:33:38.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.856387
2026-02-11T22:33:38.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:33:38.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:33:38.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:33:38.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:33:38.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:33:38.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:33:03', tmtdew=1.04, humidity=93.42, cloud=0.0, wind=22.36, temperature=15.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:33:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.01875000000000071, 0.07324999999999982, 0.03449999999999953, 0.12299999999999933, 0.05925000000000047, 0.09149999999999991, 0.1462500000000002, 0.09299999999999997, 0.027000000000001023, 0.020250000000000767, 0.05299999999999905, 0.08050000000000068, 0.07925000000000004, 0.011999999999998678, 0.06899999999999906, 0.05624999999999858, 0.07150000000000034, 0.0019999999999988916, 0.06974999999999909, 0.1324999999999985, 0.10874999999999879, 0.04425000000000168, 0.04875000000000007, 0.09199999999999875, 0.10350000000000037, 0.09174999999999933, 0.09849999999999959, 0.11899999999999977, 0.10100000000000087, 0.10600000000000165, 0.07650000000000112, 0.08474999999999966], zp_timestamp='2026-02-11T20:31:00')
2026-02-11T22:33:38.934 [DEBUG] [Thread-137035] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:33:39.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:33:39.031 [DEBUG] [Thread-137038] [transport.py] [_log()] starting thread (client mode): 0xa2d4eef0
2026-02-11T22:33:39.032 [DEBUG] [Thread-137038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:33:39.046 [DEBUG] [Thread-137038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:33:39.046 [INFO] [Thread-137038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] client lang: <none>
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] server lang: <none>
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] kex follows: False
2026-02-11T22:33:39.054 [DEBUG] [Thread-137038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:33:39.055 [DEBUG] [Thread-137038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:33:39.055 [DEBUG] [Thread-137038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:33:39.055 [DEBUG] [Thread-137038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:33:39.055 [DEBUG] [Thread-137038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:33:39.055 [DEBUG] [Thread-137038] [transport.py] [_log()] Compression: none
2026-02-11T22:33:39.055 [DEBUG] [Thread-137038] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:33:39.114 [DEBUG] [Thread-137038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:33:39.115 [DEBUG] [Thread-137038] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:33:39.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:33:39.116 [DEBUG] [Thread-137038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:33:39.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:33:39.170 [DEBUG] [Thread-137038] [transport.py] [_log()] userauth is OK
2026-02-11T22:33:39.171 [DEBUG] [Thread-137038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:33:39.171 [DEBUG] [Thread-137038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:33:39.171 [DEBUG] [Thread-137038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:33:39.171 [DEBUG] [Thread-137038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:33:39.190 [INFO] [Thread-137038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:33:39.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:33:39.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:33:40.014 [DEBUG] [Thread-137038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:33:40.015 [DEBUG] [Thread-137038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:33:40.062 [DEBUG] [Thread-137038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:33:40.063 [DEBUG] [Thread-137038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:33:40.072 [DEBUG] [Thread-137038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:33:40.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:33:40.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:33:40.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:33:40.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:33:40.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:33:40.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:33:40.109 [DEBUG] [Thread-137038] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:33:41.141 [DEBUG] [Thread-137040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:33:42.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:33:42.960 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:33:47.423 [DEBUG] [Thread-137041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:33:56.201 [DEBUG] [Thread-137042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:34:10.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:34:10.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:34:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:34:11.238 [DEBUG] [Thread-137043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:34:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 33, 40), 1.45, 90.98, 0.0, 22.51, 15.49, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:34:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:33:40
2026-02-11T22:34:12.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:34:12.468 [DEBUG] [Thread-137044] [transport.py] [_log()] starting thread (client mode): 0xa2d970a0
2026-02-11T22:34:12.468 [DEBUG] [Thread-137044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:34:12.488 [DEBUG] [Thread-137044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:34:12.488 [INFO] [Thread-137044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:34:12.489 [DEBUG] [Thread-137044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] client lang: <none>
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] server lang: <none>
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] kex follows: False
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:34:12.490 [DEBUG] [Thread-137044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:34:12.491 [DEBUG] [Thread-137044] [transport.py] [_log()] Compression: none
2026-02-11T22:34:12.491 [DEBUG] [Thread-137044] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:34:12.510 [DEBUG] [Thread-137044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:34:12.511 [DEBUG] [Thread-137044] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:34:12.511 [DEBUG] [Thread-137044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:34:12.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:34:12.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:34:12.513 [DEBUG] [Thread-137044] [transport.py] [_log()] userauth is OK
2026-02-11T22:34:12.513 [DEBUG] [Thread-137044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:34:12.513 [DEBUG] [Thread-137044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:34:12.513 [DEBUG] [Thread-137044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:34:12.513 [DEBUG] [Thread-137044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:34:12.529 [INFO] [Thread-137044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:34:12.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:34:13.197 [DEBUG] [Thread-137044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:34:13.197 [DEBUG] [Thread-137044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:34:13.197 [DEBUG] [Thread-137044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:34:13.238 [DEBUG] [Thread-137044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:34:13.238 [DEBUG] [Thread-137044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:34:13.241 [DEBUG] [Thread-137044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:34:13.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:34:13.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:34:13.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:34:13.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:34:13.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:34:13.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:34:13.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:34:13.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:34:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:34:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.856734 -999.00  +15.20   8.95     90  +13.70 1 1 1 3 1     0    0 1.49 -3.84 ZNESW 5.3 8.9 207.4 22.5 16.5 -17.9 16.3 -16.9 16.2 -16.3 16.4 -17.3
2026-02-11T22:34:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:34:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:34:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.856734
2026-02-11T22:34:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:34:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:34:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:34:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:34:13.264 [DEBUG] [Thread-137044] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:34:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:34:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:33:40', tmtdew=1.45, humidity=90.98, cloud=0.0, wind=22.51, temperature=15.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:33:41.818', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.01875000000000071, 0.07324999999999982, 0.03449999999999953, 0.12299999999999933, 0.05925000000000047, 0.09149999999999991, 0.1462500000000002, 0.09299999999999997, 0.027000000000001023, 0.020250000000000767, 0.05299999999999905, 0.08050000000000068, 0.07925000000000004, 0.011999999999998678, 0.06899999999999906, 0.05624999999999858, 0.07150000000000034, 0.0019999999999988916, 0.06974999999999909, 0.1324999999999985, 0.10874999999999879, 0.04425000000000168, 0.04875000000000007, 0.09199999999999875, 0.10350000000000037, 0.09174999999999933, 0.09849999999999959, 0.11899999999999977, 0.10100000000000087, 0.10600000000000165, 0.07650000000000112, 0.08474999999999966], zp_timestamp='2026-02-11T20:31:00')
2026-02-11T22:34:13.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:34:13.360 [DEBUG] [Thread-137047] [transport.py] [_log()] starting thread (client mode): 0xa2d07760
2026-02-11T22:34:13.360 [DEBUG] [Thread-137047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:34:13.378 [DEBUG] [Thread-137047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:34:13.378 [INFO] [Thread-137047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:34:13.386 [DEBUG] [Thread-137047] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] client lang: <none>
2026-02-11T22:34:13.387 [DEBUG] [Thread-137047] [transport.py] [_log()] server lang: <none>
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] kex follows: False
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] Compression: none
2026-02-11T22:34:13.388 [DEBUG] [Thread-137047] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:34:13.449 [DEBUG] [Thread-137047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:34:13.455 [DEBUG] [Thread-137047] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:34:13.455 [DEBUG] [Thread-137047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:34:13.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:34:13.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:34:13.510 [DEBUG] [Thread-137047] [transport.py] [_log()] userauth is OK
2026-02-11T22:34:13.510 [DEBUG] [Thread-137047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:34:13.510 [DEBUG] [Thread-137047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:34:13.510 [DEBUG] [Thread-137047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:34:13.511 [DEBUG] [Thread-137047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:34:13.537 [INFO] [Thread-137047] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:34:13.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:34:13.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:34:14.422 [DEBUG] [Thread-137047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:34:14.423 [DEBUG] [Thread-137047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:34:14.470 [DEBUG] [Thread-137047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:34:14.471 [DEBUG] [Thread-137047] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:34:14.480 [DEBUG] [Thread-137047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:34:14.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:34:14.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:34:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:34:14.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:34:14.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:34:14.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:34:14.519 [DEBUG] [Thread-137047] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:34:26.274 [DEBUG] [Thread-137049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:34:41.327 [DEBUG] [Thread-137050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:34:43.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:34:43.162 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:34:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:34:44.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:34:44.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:34:46.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 34, 16), 1.02, 93.51, 0.0, 18.77, 15.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:34:46.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:34:16
2026-02-11T22:34:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:34:46.917 [DEBUG] [Thread-137051] [transport.py] [_log()] starting thread (client mode): 0xa2d4c040
2026-02-11T22:34:46.917 [DEBUG] [Thread-137051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:34:46.937 [DEBUG] [Thread-137051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:34:46.937 [INFO] [Thread-137051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:34:46.940 [DEBUG] [Thread-137051] [transport.py] [_log()] client lang: <none>
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] server lang: <none>
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] kex follows: False
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] Compression: none
2026-02-11T22:34:46.941 [DEBUG] [Thread-137051] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:34:46.958 [DEBUG] [Thread-137051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:34:46.958 [DEBUG] [Thread-137051] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:34:46.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:34:46.959 [DEBUG] [Thread-137051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:34:46.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:34:46.961 [DEBUG] [Thread-137051] [transport.py] [_log()] userauth is OK
2026-02-11T22:34:46.962 [DEBUG] [Thread-137051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:34:46.962 [DEBUG] [Thread-137051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:34:46.962 [DEBUG] [Thread-137051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:34:46.962 [DEBUG] [Thread-137051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:34:46.987 [INFO] [Thread-137051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:34:46.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:34:47.512 [DEBUG] [Thread-137053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:34:47.614 [DEBUG] [Thread-137051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:34:47.614 [DEBUG] [Thread-137051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:34:47.614 [DEBUG] [Thread-137051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:34:47.655 [DEBUG] [Thread-137051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:34:47.655 [DEBUG] [Thread-137051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:34:47.658 [DEBUG] [Thread-137051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:34:47.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:34:47.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:34:47.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:34:47.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:34:47.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:34:47.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:34:47.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:34:47.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.857081 -999.00  +15.30  10.83     90  +13.80 1 1 1 3 1     0    0 1.50 -4.07 ZNESW 13.1 10.8 217.2 16.3 16.4 -18.0 16.4 -17.0 16.1 -16.4 16.4 -17.5
2026-02-11T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.857081
2026-02-11T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:34:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:34:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:34:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:34:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:34:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:34:16', tmtdew=1.02, humidity=93.51, cloud=0.0, wind=18.77, temperature=15.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:34:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.01875000000000071, 0.07324999999999982, 0.03449999999999953, 0.12299999999999933, 0.05925000000000047, 0.09149999999999991, 0.1462500000000002, 0.09299999999999997, 0.027000000000001023, 0.020250000000000767, 0.05299999999999905, 0.08050000000000068, 0.07925000000000004, 0.011999999999998678, 0.06899999999999906, 0.05624999999999858, 0.07150000000000034, 0.0019999999999988916, 0.06974999999999909, 0.1324999999999985, 0.10874999999999879, 0.04425000000000168, 0.04875000000000007, 0.09199999999999875, 0.10350000000000037, 0.09174999999999933, 0.09849999999999959, 0.11899999999999977, 0.10100000000000087, 0.10600000000000165, 0.07650000000000112, 0.08474999999999966], zp_timestamp='2026-02-11T20:31:00')
2026-02-11T22:34:47.681 [DEBUG] [Thread-137051] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:34:47.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:34:47.776 [DEBUG] [Thread-137055] [transport.py] [_log()] starting thread (client mode): 0xa57b19c0
2026-02-11T22:34:47.777 [DEBUG] [Thread-137055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:34:47.792 [DEBUG] [Thread-137055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:34:47.792 [INFO] [Thread-137055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:34:47.799 [DEBUG] [Thread-137055] [transport.py] [_log()] client lang: <none>
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] server lang: <none>
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] kex follows: False
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] Compression: none
2026-02-11T22:34:47.800 [DEBUG] [Thread-137055] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:34:47.862 [DEBUG] [Thread-137055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:34:47.862 [DEBUG] [Thread-137055] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:34:47.863 [DEBUG] [Thread-137055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:34:47.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:34:47.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:34:47.918 [DEBUG] [Thread-137055] [transport.py] [_log()] userauth is OK
2026-02-11T22:34:47.918 [DEBUG] [Thread-137055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:34:47.918 [DEBUG] [Thread-137055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:34:47.918 [DEBUG] [Thread-137055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:34:47.918 [DEBUG] [Thread-137055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:34:47.939 [INFO] [Thread-137055] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:34:47.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:34:47.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:34:48.791 [DEBUG] [Thread-137055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:34:48.791 [DEBUG] [Thread-137055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:34:48.839 [DEBUG] [Thread-137055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:34:48.840 [DEBUG] [Thread-137055] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:34:48.849 [DEBUG] [Thread-137055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:34:48.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:34:48.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:34:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:34:48.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:34:48.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:34:48.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:34:48.886 [DEBUG] [Thread-137055] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:34:56.362 [DEBUG] [Thread-137057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:11.405 [DEBUG] [Thread-137058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:35:18.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:35:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:35:21.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 34, 53), 1.01, 93.61, 0.0, 18.25, 15.18, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:35:21.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:34:53
2026-02-11T22:35:21.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:35:21.776 [DEBUG] [Thread-137059] [transport.py] [_log()] starting thread (client mode): 0xa57b13c0
2026-02-11T22:35:21.776 [DEBUG] [Thread-137059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:35:21.796 [DEBUG] [Thread-137059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:35:21.796 [INFO] [Thread-137059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:35:21.799 [DEBUG] [Thread-137059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:35:21.799 [DEBUG] [Thread-137059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:35:21.799 [DEBUG] [Thread-137059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:35:21.799 [DEBUG] [Thread-137059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:21.799 [DEBUG] [Thread-137059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:21.799 [DEBUG] [Thread-137059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:21.799 [DEBUG] [Thread-137059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] client lang: <none>
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] server lang: <none>
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] kex follows: False
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] Compression: none
2026-02-11T22:35:21.800 [DEBUG] [Thread-137059] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:35:21.817 [DEBUG] [Thread-137059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:35:21.817 [DEBUG] [Thread-137059] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:35:21.818 [DEBUG] [Thread-137059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:35:21.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:35:21.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:35:21.819 [DEBUG] [Thread-137059] [transport.py] [_log()] userauth is OK
2026-02-11T22:35:21.819 [DEBUG] [Thread-137059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:35:21.820 [DEBUG] [Thread-137059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:35:21.820 [DEBUG] [Thread-137059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:35:21.820 [DEBUG] [Thread-137059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:35:21.844 [INFO] [Thread-137059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:35:21.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:35:22.505 [DEBUG] [Thread-137059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:35:22.505 [DEBUG] [Thread-137059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:35:22.506 [DEBUG] [Thread-137059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:35:22.546 [DEBUG] [Thread-137059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:35:22.546 [DEBUG] [Thread-137059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:35:22.550 [DEBUG] [Thread-137059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:35:22.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:35:22.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:35:22.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:35:22.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:35:22.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:35:22.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:35:22.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:35:22.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:35:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:35:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.857428 -999.00  +15.30   8.54     90  +13.80 1 1 1 3 1     0    0 1.48 -4.69 ZNESW 9.1 8.5 212.7 15.7 16.4 -18.0 16.3 -17.0 16.1 -16.3 16.4 -17.6
2026-02-11T22:35:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:35:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:35:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.857428
2026-02-11T22:35:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:35:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:35:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:35:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:35:22.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:35:22.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:34:53', tmtdew=1.01, humidity=93.61, cloud=0.0, wind=18.25, temperature=15.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:34:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.01875000000000071, 0.07324999999999982, 0.03449999999999953, 0.12299999999999933, 0.05925000000000047, 0.09149999999999991, 0.1462500000000002, 0.09299999999999997, 0.027000000000001023, 0.020250000000000767, 0.05299999999999905, 0.08050000000000068, 0.07925000000000004, 0.011999999999998678, 0.06899999999999906, 0.05624999999999858, 0.07150000000000034, 0.0019999999999988916, 0.06974999999999909, 0.1324999999999985, 0.10874999999999879, 0.04425000000000168, 0.04875000000000007, 0.09199999999999875, 0.10350000000000037, 0.09174999999999933, 0.09849999999999959, 0.11899999999999977, 0.10100000000000087, 0.10600000000000165, 0.07650000000000112, 0.08474999999999966], zp_timestamp='2026-02-11T20:31:00')
2026-02-11T22:35:22.579 [DEBUG] [Thread-137059] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:35:22.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:35:22.673 [DEBUG] [Thread-137062] [transport.py] [_log()] starting thread (client mode): 0xa2d4d720
2026-02-11T22:35:22.674 [DEBUG] [Thread-137062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:35:22.688 [DEBUG] [Thread-137062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:35:22.688 [INFO] [Thread-137062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:35:22.696 [DEBUG] [Thread-137062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:35:22.696 [DEBUG] [Thread-137062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:35:22.696 [DEBUG] [Thread-137062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:35:22.696 [DEBUG] [Thread-137062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] client lang: <none>
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] server lang: <none>
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] kex follows: False
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] Compression: none
2026-02-11T22:35:22.697 [DEBUG] [Thread-137062] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:35:22.754 [DEBUG] [Thread-137062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:35:22.755 [DEBUG] [Thread-137062] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:35:22.755 [DEBUG] [Thread-137062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:35:22.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:35:22.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:35:22.810 [DEBUG] [Thread-137062] [transport.py] [_log()] userauth is OK
2026-02-11T22:35:22.810 [DEBUG] [Thread-137062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:35:22.810 [DEBUG] [Thread-137062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:35:22.811 [DEBUG] [Thread-137062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:35:22.811 [DEBUG] [Thread-137062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:35:22.829 [INFO] [Thread-137062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:35:22.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:35:22.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:35:23.699 [DEBUG] [Thread-137062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:35:23.699 [DEBUG] [Thread-137062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:35:23.748 [DEBUG] [Thread-137062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:35:23.748 [DEBUG] [Thread-137062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:35:23.757 [DEBUG] [Thread-137062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:35:23.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:35:23.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:35:23.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:35:23.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:35:23.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:35:23.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:35:23.793 [DEBUG] [Thread-137062] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:35:26.438 [DEBUG] [Thread-137064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:41.480 [DEBUG] [Thread-137065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:43.364 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:43.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:47.579 [DEBUG] [Thread-137066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:35:53.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:35:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:35:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 35, 28), 1.0, 93.64, 0.0, 18.51, 15.15, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:35:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:35:28
2026-02-11T22:35:56.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:35:56.231 [DEBUG] [Thread-137067] [transport.py] [_log()] starting thread (client mode): 0xa2d4e110
2026-02-11T22:35:56.231 [DEBUG] [Thread-137067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:35:56.251 [DEBUG] [Thread-137067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:35:56.251 [INFO] [Thread-137067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:35:56.254 [DEBUG] [Thread-137067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:35:56.254 [DEBUG] [Thread-137067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:35:56.254 [DEBUG] [Thread-137067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:35:56.254 [DEBUG] [Thread-137067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:56.254 [DEBUG] [Thread-137067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:56.254 [DEBUG] [Thread-137067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] client lang: <none>
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] server lang: <none>
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] kex follows: False
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] Compression: none
2026-02-11T22:35:56.255 [DEBUG] [Thread-137067] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:35:56.272 [DEBUG] [Thread-137067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:35:56.273 [DEBUG] [Thread-137067] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:35:56.273 [DEBUG] [Thread-137067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:35:56.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:35:56.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:35:56.316 [DEBUG] [Thread-137067] [transport.py] [_log()] userauth is OK
2026-02-11T22:35:56.317 [DEBUG] [Thread-137067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:35:56.317 [DEBUG] [Thread-137067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:35:56.317 [DEBUG] [Thread-137067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:35:56.317 [DEBUG] [Thread-137067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:35:56.337 [INFO] [Thread-137067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:35:56.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:35:56.518 [DEBUG] [Thread-137069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:35:57.179 [DEBUG] [Thread-137067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:35:57.179 [DEBUG] [Thread-137067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:35:57.179 [DEBUG] [Thread-137067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:35:57.220 [DEBUG] [Thread-137067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:35:57.220 [DEBUG] [Thread-137067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:35:57.223 [DEBUG] [Thread-137067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:35:57.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:35:57.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:35:57.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:35:57.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:35:57.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:35:57.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:35:57.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:35:57.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:35:57.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:35:57.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.857776 -999.00  +15.30   7.92     90  +13.80 1 1 1 3 1     0    0 1.43 -5.38 ZNESW 7.2 7.9 192.0 15.5 16.4 -16.3 16.3 -16.1 16.1 -14.5 16.4 -15.9
2026-02-11T22:35:57.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:35:57.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:35:57.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.857776
2026-02-11T22:35:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:35:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:35:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:35:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:35:57.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:35:57.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:35:28', tmtdew=1.0, humidity=93.64, cloud=0.0, wind=18.51, temperature=15.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:35:11.846', atlas_cloud=1, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:35:00')
2026-02-11T22:35:57.246 [DEBUG] [Thread-137067] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:35:57.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:35:57.342 [DEBUG] [Thread-137071] [transport.py] [_log()] starting thread (client mode): 0xa2d5cac0
2026-02-11T22:35:57.342 [DEBUG] [Thread-137071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:35:57.363 [DEBUG] [Thread-137071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:35:57.363 [INFO] [Thread-137071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:35:57.370 [DEBUG] [Thread-137071] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] client lang: <none>
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] server lang: <none>
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] kex follows: False
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:35:57.371 [DEBUG] [Thread-137071] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:35:57.372 [DEBUG] [Thread-137071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:35:57.372 [DEBUG] [Thread-137071] [transport.py] [_log()] Compression: none
2026-02-11T22:35:57.372 [DEBUG] [Thread-137071] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:35:57.430 [DEBUG] [Thread-137071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:35:57.430 [DEBUG] [Thread-137071] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:35:57.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:35:57.431 [DEBUG] [Thread-137071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:35:57.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:35:57.486 [DEBUG] [Thread-137071] [transport.py] [_log()] userauth is OK
2026-02-11T22:35:57.486 [DEBUG] [Thread-137071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:35:57.486 [DEBUG] [Thread-137071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:35:57.486 [DEBUG] [Thread-137071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:35:57.486 [DEBUG] [Thread-137071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:35:57.501 [INFO] [Thread-137071] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:35:57.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:35:57.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:35:58.352 [DEBUG] [Thread-137071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:35:58.353 [DEBUG] [Thread-137071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:35:58.401 [DEBUG] [Thread-137071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:35:58.401 [DEBUG] [Thread-137071] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:35:58.410 [DEBUG] [Thread-137071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:35:58.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:35:58.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:35:58.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:35:58.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:35:58.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:35:58.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:35:58.447 [DEBUG] [Thread-137071] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:36:11.556 [DEBUG] [Thread-137073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:36:26.609 [DEBUG] [Thread-137074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:36:28.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:36:28.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:36:28.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:36:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 36, 3), 1.0, 93.64, 0.0, 19.57, 15.11, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:36:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:36:03
2026-02-11T22:36:30.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:36:30.824 [DEBUG] [Thread-137075] [transport.py] [_log()] starting thread (client mode): 0xa57b1fc0
2026-02-11T22:36:30.825 [DEBUG] [Thread-137075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:36:30.847 [DEBUG] [Thread-137075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:36:30.847 [INFO] [Thread-137075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:36:30.850 [DEBUG] [Thread-137075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:36:30.850 [DEBUG] [Thread-137075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:36:30.850 [DEBUG] [Thread-137075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:36:30.850 [DEBUG] [Thread-137075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:36:30.850 [DEBUG] [Thread-137075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] client lang: <none>
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] server lang: <none>
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] kex follows: False
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] Compression: none
2026-02-11T22:36:30.851 [DEBUG] [Thread-137075] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:36:30.868 [DEBUG] [Thread-137075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:36:30.869 [DEBUG] [Thread-137075] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:36:30.870 [DEBUG] [Thread-137075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:36:30.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:36:30.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:36:30.872 [DEBUG] [Thread-137075] [transport.py] [_log()] userauth is OK
2026-02-11T22:36:30.872 [DEBUG] [Thread-137075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:36:30.872 [DEBUG] [Thread-137075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:36:30.872 [DEBUG] [Thread-137075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:36:30.872 [DEBUG] [Thread-137075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:36:30.909 [INFO] [Thread-137075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:36:30.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:36:31.492 [DEBUG] [Thread-137075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:36:31.492 [DEBUG] [Thread-137075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:36:31.493 [DEBUG] [Thread-137075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:36:31.533 [DEBUG] [Thread-137075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:36:31.534 [DEBUG] [Thread-137075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:36:31.537 [DEBUG] [Thread-137075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:36:31.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:36:31.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:36:31.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:36:31.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:36:31.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:36:31.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:36:31.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:36:31.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:36:31.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:36:31.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.858470 -999.00  +15.30  11.32     90  +13.80 1 1 1 3 1     0    0 1.40 -6.50 ZNESW 11.0 11.3 204.2 16.1 16.5 -13.1 16.3 -12.4 16.2 -12.2 16.5 -12.1
2026-02-11T22:36:31.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:36:31.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:36:31.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.858470
2026-02-11T22:36:31.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:36:31.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:36:31.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:36:31.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:36:31.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:36:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:36:03', tmtdew=1.0, humidity=93.64, cloud=0.0, wind=19.57, temperature=15.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:36:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:35:00')
2026-02-11T22:36:31.564 [DEBUG] [Thread-137075] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:36:31.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:36:31.662 [DEBUG] [Thread-137078] [transport.py] [_log()] starting thread (client mode): 0xa2d06d70
2026-02-11T22:36:31.662 [DEBUG] [Thread-137078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:36:31.677 [DEBUG] [Thread-137078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:36:31.677 [INFO] [Thread-137078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:36:31.685 [DEBUG] [Thread-137078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:36:31.685 [DEBUG] [Thread-137078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:36:31.685 [DEBUG] [Thread-137078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] client lang: <none>
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] server lang: <none>
2026-02-11T22:36:31.686 [DEBUG] [Thread-137078] [transport.py] [_log()] kex follows: False
2026-02-11T22:36:31.687 [DEBUG] [Thread-137078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:36:31.687 [DEBUG] [Thread-137078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:36:31.687 [DEBUG] [Thread-137078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:36:31.687 [DEBUG] [Thread-137078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:36:31.687 [DEBUG] [Thread-137078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:36:31.687 [DEBUG] [Thread-137078] [transport.py] [_log()] Compression: none
2026-02-11T22:36:31.687 [DEBUG] [Thread-137078] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:36:31.746 [DEBUG] [Thread-137078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:36:31.747 [DEBUG] [Thread-137078] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:36:31.747 [DEBUG] [Thread-137078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:36:31.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:36:31.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:36:31.806 [DEBUG] [Thread-137078] [transport.py] [_log()] userauth is OK
2026-02-11T22:36:31.806 [DEBUG] [Thread-137078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:36:31.807 [DEBUG] [Thread-137078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:36:31.807 [DEBUG] [Thread-137078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:36:31.807 [DEBUG] [Thread-137078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:36:31.826 [INFO] [Thread-137078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:36:31.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:36:31.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:36:32.644 [DEBUG] [Thread-137078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:36:32.644 [DEBUG] [Thread-137078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:36:32.692 [DEBUG] [Thread-137078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:36:32.693 [DEBUG] [Thread-137078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:36:32.702 [DEBUG] [Thread-137078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:36:32.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:36:32.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')
2026-02-11T22:36:32.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:36:32.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:36:32.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:36:32.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:36:32.745 [DEBUG] [Thread-137078] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:36:41.647 [DEBUG] [Thread-137080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:36:43.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:36:43.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:36:47.655 [DEBUG] [Thread-137081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:36:56.692 [DEBUG] [Thread-137082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:37:02.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:37:02.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:37:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:37:04.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 36, 40), 1.37, 91.45, 0.0, 18.1, 15.53, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:37:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:36:40
2026-02-11T22:37:05.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:37:05.188 [DEBUG] [Thread-137083] [transport.py] [_log()] starting thread (client mode): 0xa2d06e60
2026-02-11T22:37:05.189 [DEBUG] [Thread-137083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:37:05.209 [DEBUG] [Thread-137083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:37:05.209 [INFO] [Thread-137083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] client lang: <none>
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] server lang: <none>
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] kex follows: False
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] Compression: none
2026-02-11T22:37:05.211 [DEBUG] [Thread-137083] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:37:05.219 [DEBUG] [Thread-137083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:37:05.220 [DEBUG] [Thread-137083] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:37:05.220 [DEBUG] [Thread-137083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:37:05.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:37:05.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:37:05.222 [DEBUG] [Thread-137083] [transport.py] [_log()] userauth is OK
2026-02-11T22:37:05.222 [DEBUG] [Thread-137083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:37:05.222 [DEBUG] [Thread-137083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:37:05.222 [DEBUG] [Thread-137083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:37:05.222 [DEBUG] [Thread-137083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:37:05.257 [INFO] [Thread-137083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:37:05.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:37:05.897 [DEBUG] [Thread-137083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:37:05.897 [DEBUG] [Thread-137083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:37:05.897 [DEBUG] [Thread-137083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:37:05.937 [DEBUG] [Thread-137083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:37:05.938 [DEBUG] [Thread-137083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:37:05.941 [DEBUG] [Thread-137083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:37:05.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:37:05.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:37:05.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:37:05.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:37:05.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:37:05.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:37:05.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:37:05.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:37:05.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:37:05.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.858817 -999.00  +15.30   8.63     90  +13.80 1 1 1 3 1     0    0 1.42 -5.68 ZNESW 8.0 8.6 197.3 13.0 16.5 -10.2 16.4 -12.5 16.2 -9.4 16.5 -10.9
2026-02-11T22:37:05.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:37:05.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:37:05.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.858817
2026-02-11T22:37:05.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:37:05.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:37:05.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:37:05.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:37:05.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:37:05.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:36:40', tmtdew=1.37, humidity=91.45, cloud=0.0, wind=18.1, temperature=15.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:36:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:35:00')
2026-02-11T22:37:05.966 [DEBUG] [Thread-137083] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:37:06.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:37:06.062 [DEBUG] [Thread-137086] [transport.py] [_log()] starting thread (client mode): 0xa57b28c0
2026-02-11T22:37:06.062 [DEBUG] [Thread-137086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:37:06.082 [DEBUG] [Thread-137086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:37:06.082 [INFO] [Thread-137086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:37:06.090 [DEBUG] [Thread-137086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:37:06.090 [DEBUG] [Thread-137086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] client lang: <none>
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] server lang: <none>
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] kex follows: False
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:37:06.091 [DEBUG] [Thread-137086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:37:06.092 [DEBUG] [Thread-137086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:37:06.092 [DEBUG] [Thread-137086] [transport.py] [_log()] Compression: none
2026-02-11T22:37:06.092 [DEBUG] [Thread-137086] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:37:06.150 [DEBUG] [Thread-137086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:37:06.150 [DEBUG] [Thread-137086] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:37:06.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:37:06.151 [DEBUG] [Thread-137086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:37:06.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:37:06.206 [DEBUG] [Thread-137086] [transport.py] [_log()] userauth is OK
2026-02-11T22:37:06.207 [DEBUG] [Thread-137086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:37:06.207 [DEBUG] [Thread-137086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:37:06.207 [DEBUG] [Thread-137086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:37:06.207 [DEBUG] [Thread-137086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:37:06.226 [INFO] [Thread-137086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:37:06.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:37:06.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:37:07.055 [DEBUG] [Thread-137086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:37:07.055 [DEBUG] [Thread-137086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:37:07.103 [DEBUG] [Thread-137086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:37:07.103 [DEBUG] [Thread-137086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:37:07.112 [DEBUG] [Thread-137086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:37:07.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:37:07.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:37:07.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:37:07.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:37:07.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:37:07.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:37:07.148 [DEBUG] [Thread-137086] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:37:11.730 [DEBUG] [Thread-137088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:37:26.770 [DEBUG] [Thread-137089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:37:37.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:37:37.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:37:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:37:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 37, 15), 0.93, 93.77, 0.0, 18.93, 15.18, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:37:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:37:15
2026-02-11T22:37:39.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:37:39.747 [DEBUG] [Thread-137090] [transport.py] [_log()] starting thread (client mode): 0xa2d4f010
2026-02-11T22:37:39.747 [DEBUG] [Thread-137090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:37:39.766 [DEBUG] [Thread-137090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:37:39.766 [INFO] [Thread-137090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:37:39.769 [DEBUG] [Thread-137090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] client lang: <none>
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] server lang: <none>
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] kex follows: False
2026-02-11T22:37:39.770 [DEBUG] [Thread-137090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:37:39.771 [DEBUG] [Thread-137090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:37:39.771 [DEBUG] [Thread-137090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:37:39.771 [DEBUG] [Thread-137090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:37:39.771 [DEBUG] [Thread-137090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:37:39.771 [DEBUG] [Thread-137090] [transport.py] [_log()] Compression: none
2026-02-11T22:37:39.771 [DEBUG] [Thread-137090] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:37:39.789 [DEBUG] [Thread-137090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:37:39.790 [DEBUG] [Thread-137090] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:37:39.791 [DEBUG] [Thread-137090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:37:39.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:37:39.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:37:39.794 [DEBUG] [Thread-137090] [transport.py] [_log()] userauth is OK
2026-02-11T22:37:39.794 [DEBUG] [Thread-137090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:37:39.794 [DEBUG] [Thread-137090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:37:39.794 [DEBUG] [Thread-137090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:37:39.794 [DEBUG] [Thread-137090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:37:39.826 [INFO] [Thread-137090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:37:39.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:37:40.455 [DEBUG] [Thread-137090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:37:40.455 [DEBUG] [Thread-137090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:37:40.455 [DEBUG] [Thread-137090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:37:40.496 [DEBUG] [Thread-137090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:37:40.497 [DEBUG] [Thread-137090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:37:40.500 [DEBUG] [Thread-137090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:37:40.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:37:40.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:37:40.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:37:40.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:37:40.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:37:40.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:37:40.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:37:40.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:37:40.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:37:40.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.859164 -999.00  +15.40  15.23     90  +13.80 1 3 1 3 1     0    0 1.42 -5.48 ZNESW 14.2 15.2 208.4 17.0 16.6 -8.8 16.4 -8.6 16.2 -8.2 16.5 -8.8
2026-02-11T22:37:40.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:37:40.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:37:40.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.859164
2026-02-11T22:37:40.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:37:40.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:37:40.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:37:40.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:37:40.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:37:40.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:37:15', tmtdew=0.93, humidity=93.77, cloud=0.0, wind=18.93, temperature=15.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:37:11.770', atlas_cloud=3, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:35:00')
2026-02-11T22:37:40.527 [DEBUG] [Thread-137090] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:37:40.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:37:40.623 [DEBUG] [Thread-137093] [transport.py] [_log()] starting thread (client mode): 0xa2d5f280
2026-02-11T22:37:40.623 [DEBUG] [Thread-137093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:37:40.639 [DEBUG] [Thread-137093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:37:40.639 [INFO] [Thread-137093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:37:40.646 [DEBUG] [Thread-137093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] client lang: <none>
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] server lang: <none>
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] kex follows: False
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:37:40.647 [DEBUG] [Thread-137093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:37:40.648 [DEBUG] [Thread-137093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:37:40.648 [DEBUG] [Thread-137093] [transport.py] [_log()] Compression: none
2026-02-11T22:37:40.648 [DEBUG] [Thread-137093] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:37:40.706 [DEBUG] [Thread-137093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:37:40.707 [DEBUG] [Thread-137093] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:37:40.707 [DEBUG] [Thread-137093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:37:40.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:37:40.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:37:40.762 [DEBUG] [Thread-137093] [transport.py] [_log()] userauth is OK
2026-02-11T22:37:40.762 [DEBUG] [Thread-137093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:37:40.762 [DEBUG] [Thread-137093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:37:40.763 [DEBUG] [Thread-137093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:37:40.763 [DEBUG] [Thread-137093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:37:40.782 [INFO] [Thread-137093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:37:40.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:37:40.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:37:41.631 [DEBUG] [Thread-137093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:37:41.631 [DEBUG] [Thread-137093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:37:41.680 [DEBUG] [Thread-137093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:37:41.680 [DEBUG] [Thread-137093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:37:41.689 [DEBUG] [Thread-137093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:37:41.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:37:41.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:37:41.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:37:41.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:37:41.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:37:41.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:37:41.732 [DEBUG] [Thread-137093] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:37:41.808 [DEBUG] [Thread-137095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:37:43.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:37:43.780 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:37:47.732 [DEBUG] [Thread-137096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:37:56.859 [DEBUG] [Thread-137097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:38:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:38:11.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:38:11.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:38:11.899 [DEBUG] [Thread-137098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:38:13.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 37, 51), 0.93, 94.29, 0.0, 16.99, 15.21, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:38:13.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:37:51
2026-02-11T22:38:13.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:38:14.121 [DEBUG] [Thread-137099] [transport.py] [_log()] starting thread (client mode): 0xa57e0820
2026-02-11T22:38:14.121 [DEBUG] [Thread-137099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:38:14.141 [DEBUG] [Thread-137099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:38:14.141 [INFO] [Thread-137099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] client lang: <none>
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] server lang: <none>
2026-02-11T22:38:14.144 [DEBUG] [Thread-137099] [transport.py] [_log()] kex follows: False
2026-02-11T22:38:14.145 [DEBUG] [Thread-137099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:38:14.145 [DEBUG] [Thread-137099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:38:14.145 [DEBUG] [Thread-137099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:38:14.145 [DEBUG] [Thread-137099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:38:14.145 [DEBUG] [Thread-137099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:38:14.145 [DEBUG] [Thread-137099] [transport.py] [_log()] Compression: none
2026-02-11T22:38:14.145 [DEBUG] [Thread-137099] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:38:14.163 [DEBUG] [Thread-137099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:38:14.164 [DEBUG] [Thread-137099] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:38:14.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:38:14.165 [DEBUG] [Thread-137099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:38:14.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:38:14.167 [DEBUG] [Thread-137099] [transport.py] [_log()] userauth is OK
2026-02-11T22:38:14.167 [DEBUG] [Thread-137099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:38:14.167 [DEBUG] [Thread-137099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:38:14.167 [DEBUG] [Thread-137099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:38:14.167 [DEBUG] [Thread-137099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:38:14.204 [INFO] [Thread-137099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:38:14.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:38:14.837 [DEBUG] [Thread-137099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:38:14.837 [DEBUG] [Thread-137099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:38:14.838 [DEBUG] [Thread-137099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:38:14.879 [DEBUG] [Thread-137099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:38:14.879 [DEBUG] [Thread-137099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:38:14.882 [DEBUG] [Thread-137099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:38:14.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:38:14.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:38:14.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:38:14.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:38:14.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:38:14.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:38:14.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:38:14.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:38:14.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:38:14.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.859512 -999.00  +15.30   8.61     90  +13.90 1 3 1 3 1     0    0 1.39 -6.06 ZNEsW 12.3 8.6 201.1 20.6 16.6 -10.3 16.4 -8.8 16.3 -9.6 16.6 -9.7
2026-02-11T22:38:14.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:38:14.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:38:14.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.859512
2026-02-11T22:38:14.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:38:14.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:38:14.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:38:14.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:38:14.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:38:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:37:51', tmtdew=0.93, humidity=94.29, cloud=0.0, wind=16.99, temperature=15.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:37:41.837', atlas_cloud=3, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:35:00')
2026-02-11T22:38:14.910 [DEBUG] [Thread-137099] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:38:14.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:38:15.004 [DEBUG] [Thread-137102] [transport.py] [_log()] starting thread (client mode): 0xa2d5fb20
2026-02-11T22:38:15.004 [DEBUG] [Thread-137102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:38:15.019 [DEBUG] [Thread-137102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:38:15.019 [INFO] [Thread-137102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] client lang: <none>
2026-02-11T22:38:15.027 [DEBUG] [Thread-137102] [transport.py] [_log()] server lang: <none>
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] kex follows: False
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] Compression: none
2026-02-11T22:38:15.028 [DEBUG] [Thread-137102] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:38:15.086 [DEBUG] [Thread-137102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:38:15.086 [DEBUG] [Thread-137102] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:38:15.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:38:15.087 [DEBUG] [Thread-137102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:38:15.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:38:15.142 [DEBUG] [Thread-137102] [transport.py] [_log()] userauth is OK
2026-02-11T22:38:15.142 [DEBUG] [Thread-137102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:38:15.142 [DEBUG] [Thread-137102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:38:15.142 [DEBUG] [Thread-137102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:38:15.143 [DEBUG] [Thread-137102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:38:15.161 [INFO] [Thread-137102] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:38:15.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:38:15.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:38:16.030 [DEBUG] [Thread-137102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:38:16.030 [DEBUG] [Thread-137102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:38:16.078 [DEBUG] [Thread-137102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:38:16.079 [DEBUG] [Thread-137102] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:38:16.088 [DEBUG] [Thread-137102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:38:16.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:38:16.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:38:16.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:38:16.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:38:16.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:38:16.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:38:16.125 [DEBUG] [Thread-137102] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:38:26.936 [DEBUG] [Thread-137104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:38:41.999 [DEBUG] [Thread-137105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:38:43.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:38:43.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:38:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:38:46.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:38:46.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:38:47.818 [DEBUG] [Thread-137106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:38:47.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 38, 26), 0.92, 94.32, 0.0, 14.22, 15.18, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:38:47.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:38:26
2026-02-11T22:38:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:38:48.540 [DEBUG] [Thread-137107] [transport.py] [_log()] starting thread (client mode): 0xa2d5c9a0
2026-02-11T22:38:48.540 [DEBUG] [Thread-137107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:38:48.554 [DEBUG] [Thread-137107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:38:48.554 [INFO] [Thread-137107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:38:48.556 [DEBUG] [Thread-137107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:38:48.556 [DEBUG] [Thread-137107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:38:48.556 [DEBUG] [Thread-137107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] client lang: <none>
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] server lang: <none>
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] kex follows: False
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] Compression: none
2026-02-11T22:38:48.557 [DEBUG] [Thread-137107] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:38:48.572 [DEBUG] [Thread-137107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:38:48.572 [DEBUG] [Thread-137107] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:38:48.572 [DEBUG] [Thread-137107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:38:48.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:38:48.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:38:48.574 [DEBUG] [Thread-137107] [transport.py] [_log()] userauth is OK
2026-02-11T22:38:48.574 [DEBUG] [Thread-137107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:38:48.574 [DEBUG] [Thread-137107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:38:48.574 [DEBUG] [Thread-137107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:38:48.574 [DEBUG] [Thread-137107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:38:48.590 [INFO] [Thread-137107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:38:48.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:38:49.228 [DEBUG] [Thread-137107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:38:49.228 [DEBUG] [Thread-137107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:38:49.228 [DEBUG] [Thread-137107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:38:49.269 [DEBUG] [Thread-137107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:38:49.269 [DEBUG] [Thread-137107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:38:49.272 [DEBUG] [Thread-137107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:38:49.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:38:49.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:38:49.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:38:49.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:38:49.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:38:49.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:38:49.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:38:49.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:38:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:38:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.859859 -999.00  +15.30  11.78     91  +13.80 1 2 1 3 1     0    0 1.42 -5.89 ZNEsW 12.6 11.8 204.0 21.0 16.6 -10.9 16.4 -9.5 16.3 -11.9 16.6 -11.6
2026-02-11T22:38:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:38:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:38:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.859859
2026-02-11T22:38:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:38:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:38:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:38:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:38:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:38:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:38:26', tmtdew=0.92, humidity=94.32, cloud=0.0, wind=14.22, temperature=15.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:38:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:35:00')
2026-02-11T22:38:49.296 [DEBUG] [Thread-137107] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:38:49.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:38:49.402 [DEBUG] [Thread-137110] [transport.py] [_log()] starting thread (client mode): 0xa2d96aa0
2026-02-11T22:38:49.402 [DEBUG] [Thread-137110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:38:49.417 [DEBUG] [Thread-137110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:38:49.417 [INFO] [Thread-137110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:38:49.424 [DEBUG] [Thread-137110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:38:49.424 [DEBUG] [Thread-137110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:38:49.424 [DEBUG] [Thread-137110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:38:49.424 [DEBUG] [Thread-137110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:49.424 [DEBUG] [Thread-137110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] client lang: <none>
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] server lang: <none>
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] kex follows: False
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:38:49.425 [DEBUG] [Thread-137110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:38:49.426 [DEBUG] [Thread-137110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:38:49.426 [DEBUG] [Thread-137110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:38:49.426 [DEBUG] [Thread-137110] [transport.py] [_log()] Compression: none
2026-02-11T22:38:49.426 [DEBUG] [Thread-137110] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:38:49.481 [DEBUG] [Thread-137110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:38:49.481 [DEBUG] [Thread-137110] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:38:49.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:38:49.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:38:49.482 [DEBUG] [Thread-137110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:38:49.537 [DEBUG] [Thread-137110] [transport.py] [_log()] userauth is OK
2026-02-11T22:38:49.537 [DEBUG] [Thread-137110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:38:49.537 [DEBUG] [Thread-137110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:38:49.537 [DEBUG] [Thread-137110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:38:49.537 [DEBUG] [Thread-137110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:38:49.557 [INFO] [Thread-137110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:38:49.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:38:49.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:38:50.446 [DEBUG] [Thread-137110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:38:50.446 [DEBUG] [Thread-137110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:38:50.494 [DEBUG] [Thread-137110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:38:50.494 [DEBUG] [Thread-137110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:38:50.502 [DEBUG] [Thread-137110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:38:50.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:38:50.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:38:50.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:38:50.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:38:50.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:38:50.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:38:50.535 [DEBUG] [Thread-137110] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:38:57.032 [DEBUG] [Thread-137112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:12.082 [DEBUG] [Thread-137113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:20.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:39:20.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:39:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:39:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 39, 3), 0.92, 94.32, 0.0, 16.45, 15.2, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:39:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:39:03
2026-02-11T22:39:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:39:23.245 [DEBUG] [Thread-137114] [transport.py] [_log()] starting thread (client mode): 0xa2d5f370
2026-02-11T22:39:23.246 [DEBUG] [Thread-137114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:39:23.267 [DEBUG] [Thread-137114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:39:23.267 [INFO] [Thread-137114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] client lang: <none>
2026-02-11T22:39:23.271 [DEBUG] [Thread-137114] [transport.py] [_log()] server lang: <none>
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] kex follows: False
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] Compression: none
2026-02-11T22:39:23.272 [DEBUG] [Thread-137114] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:39:23.288 [DEBUG] [Thread-137114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:39:23.288 [DEBUG] [Thread-137114] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:39:23.289 [DEBUG] [Thread-137114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:39:23.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:39:23.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:39:23.291 [DEBUG] [Thread-137114] [transport.py] [_log()] userauth is OK
2026-02-11T22:39:23.291 [DEBUG] [Thread-137114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:39:23.291 [DEBUG] [Thread-137114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:39:23.292 [DEBUG] [Thread-137114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:39:23.292 [DEBUG] [Thread-137114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:39:23.327 [INFO] [Thread-137114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:39:23.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:39:23.982 [DEBUG] [Thread-137114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:39:23.982 [DEBUG] [Thread-137114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:39:23.982 [DEBUG] [Thread-137114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:39:24.023 [DEBUG] [Thread-137114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:39:24.023 [DEBUG] [Thread-137114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:39:24.026 [DEBUG] [Thread-137114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:39:24.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:39:24.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:39:24.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:39:24.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:39:24.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:39:24.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:39:24.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:39:24.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:39:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:39:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.860206 -999.00  +15.30   8.82     91  +13.90 1 2 1 3 1     0    0 1.38 -6.79 Z..sw 7.1 8.8 227.6 14.7 16.6 -11.2 16.4 -11.2 16.3 -11.0 16.6 -10.9
2026-02-11T22:39:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:39:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:39:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.860206
2026-02-11T22:39:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:39:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:39:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:39:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:39:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:39:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:39:03', tmtdew=0.92, humidity=94.32, cloud=0.0, wind=16.45, temperature=15.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:38:41.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:38:00')
2026-02-11T22:39:24.052 [DEBUG] [Thread-137114] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:39:24.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:39:24.148 [DEBUG] [Thread-137117] [transport.py] [_log()] starting thread (client mode): 0xa2d5cbb0
2026-02-11T22:39:24.148 [DEBUG] [Thread-137117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:39:24.162 [DEBUG] [Thread-137117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:39:24.163 [INFO] [Thread-137117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:39:24.170 [DEBUG] [Thread-137117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:39:24.171 [DEBUG] [Thread-137117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:39:24.171 [DEBUG] [Thread-137117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:39:24.171 [DEBUG] [Thread-137117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:24.171 [DEBUG] [Thread-137117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:24.171 [DEBUG] [Thread-137117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:24.171 [DEBUG] [Thread-137117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:24.171 [DEBUG] [Thread-137117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] client lang: <none>
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] server lang: <none>
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] kex follows: False
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:39:24.172 [DEBUG] [Thread-137117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:39:24.173 [DEBUG] [Thread-137117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:39:24.173 [DEBUG] [Thread-137117] [transport.py] [_log()] Compression: none
2026-02-11T22:39:24.173 [DEBUG] [Thread-137117] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:39:24.230 [DEBUG] [Thread-137117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:39:24.230 [DEBUG] [Thread-137117] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:39:24.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:39:24.231 [DEBUG] [Thread-137117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:39:24.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:39:24.286 [DEBUG] [Thread-137117] [transport.py] [_log()] userauth is OK
2026-02-11T22:39:24.286 [DEBUG] [Thread-137117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:39:24.287 [DEBUG] [Thread-137117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:39:24.287 [DEBUG] [Thread-137117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:39:24.287 [DEBUG] [Thread-137117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:39:24.307 [INFO] [Thread-137117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:39:24.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:39:24.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:39:25.222 [DEBUG] [Thread-137117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:39:25.222 [DEBUG] [Thread-137117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:39:25.270 [DEBUG] [Thread-137117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:39:25.271 [DEBUG] [Thread-137117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:39:25.280 [DEBUG] [Thread-137117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:39:25.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:39:25.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:39:25.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:39:25.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:39:25.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:39:25.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:39:25.317 [DEBUG] [Thread-137117] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:39:27.121 [DEBUG] [Thread-137119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:42.172 [DEBUG] [Thread-137120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:44.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:44.187 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:47.903 [DEBUG] [Thread-137121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:55.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:39:55.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:39:55.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:39:57.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 39, 39), 1.32, 91.75, 0.0, 17.18, 15.59, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:39:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:39:39
2026-02-11T22:39:57.210 [DEBUG] [Thread-137122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:39:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:39:57.703 [DEBUG] [Thread-137123] [transport.py] [_log()] starting thread (client mode): 0xa2d6b910
2026-02-11T22:39:57.703 [DEBUG] [Thread-137123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:39:57.724 [DEBUG] [Thread-137123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:39:57.724 [INFO] [Thread-137123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] client lang: <none>
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] server lang: <none>
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] kex follows: False
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] Compression: none
2026-02-11T22:39:57.727 [DEBUG] [Thread-137123] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:39:57.745 [DEBUG] [Thread-137123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:39:57.745 [DEBUG] [Thread-137123] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:39:57.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:39:57.747 [DEBUG] [Thread-137123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:39:57.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:39:57.749 [DEBUG] [Thread-137123] [transport.py] [_log()] userauth is OK
2026-02-11T22:39:57.749 [DEBUG] [Thread-137123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:39:57.749 [DEBUG] [Thread-137123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:39:57.750 [DEBUG] [Thread-137123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:39:57.750 [DEBUG] [Thread-137123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:39:57.773 [INFO] [Thread-137123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:39:57.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:39:58.404 [DEBUG] [Thread-137123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:39:58.404 [DEBUG] [Thread-137123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:39:58.405 [DEBUG] [Thread-137123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:39:58.445 [DEBUG] [Thread-137123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:39:58.446 [DEBUG] [Thread-137123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:39:58.449 [DEBUG] [Thread-137123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:39:58.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:39:58.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:39:58.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:39:58.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:39:58.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:39:58.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:39:58.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:39:58.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:39:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:39:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.860900 -999.00  +15.30  11.09     91  +13.90 1 2 1 3 1     0    0 1.33 -7.88 z..SW 7.3 11.1 189.4 14.3 16.6 -15.9 16.5 -15.7 16.2 -14.9 16.6 -15.6
2026-02-11T22:39:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:39:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:39:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.860900
2026-02-11T22:39:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:39:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:39:58.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:39:58.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:39:58.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:39:58.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:39:39', tmtdew=1.32, humidity=91.75, cloud=0.0, wind=17.18, temperature=15.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:39:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:38:00')
2026-02-11T22:39:58.475 [DEBUG] [Thread-137123] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:39:58.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:39:58.579 [DEBUG] [Thread-137126] [transport.py] [_log()] starting thread (client mode): 0xa2d5cd00
2026-02-11T22:39:58.579 [DEBUG] [Thread-137126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:39:58.593 [DEBUG] [Thread-137126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:39:58.593 [INFO] [Thread-137126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:39:58.601 [DEBUG] [Thread-137126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:39:58.601 [DEBUG] [Thread-137126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:39:58.601 [DEBUG] [Thread-137126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:39:58.601 [DEBUG] [Thread-137126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:58.601 [DEBUG] [Thread-137126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:39:58.601 [DEBUG] [Thread-137126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:58.601 [DEBUG] [Thread-137126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] client lang: <none>
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] server lang: <none>
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] kex follows: False
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:39:58.602 [DEBUG] [Thread-137126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:39:58.603 [DEBUG] [Thread-137126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:39:58.603 [DEBUG] [Thread-137126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:39:58.603 [DEBUG] [Thread-137126] [transport.py] [_log()] Compression: none
2026-02-11T22:39:58.603 [DEBUG] [Thread-137126] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:39:58.662 [DEBUG] [Thread-137126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:39:58.663 [DEBUG] [Thread-137126] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:39:58.664 [DEBUG] [Thread-137126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:39:58.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:39:58.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:39:58.718 [DEBUG] [Thread-137126] [transport.py] [_log()] userauth is OK
2026-02-11T22:39:58.718 [DEBUG] [Thread-137126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:39:58.719 [DEBUG] [Thread-137126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:39:58.719 [DEBUG] [Thread-137126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:39:58.719 [DEBUG] [Thread-137126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:39:58.739 [INFO] [Thread-137126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:39:58.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:39:58.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:39:59.560 [DEBUG] [Thread-137126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:39:59.561 [DEBUG] [Thread-137126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:39:59.608 [DEBUG] [Thread-137126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:39:59.608 [DEBUG] [Thread-137126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:39:59.618 [DEBUG] [Thread-137126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:39:59.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:39:59.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:39:59.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:39:59.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:39:59.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:39:59.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:39:59.654 [DEBUG] [Thread-137126] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:40:12.248 [DEBUG] [Thread-137128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:40:27.302 [DEBUG] [Thread-137129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:40:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:40:29.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:40:29.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:40:31.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 40, 14), 0.92, 94.32, 0.0, 16.85, 15.13, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:40:31.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:40:14
2026-02-11T22:40:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:40:32.268 [DEBUG] [Thread-137130] [transport.py] [_log()] starting thread (client mode): 0xa2d68700
2026-02-11T22:40:32.268 [DEBUG] [Thread-137130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:40:32.288 [DEBUG] [Thread-137130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:40:32.288 [INFO] [Thread-137130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:40:32.291 [DEBUG] [Thread-137130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:40:32.291 [DEBUG] [Thread-137130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] client lang: <none>
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] server lang: <none>
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] kex follows: False
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:40:32.292 [DEBUG] [Thread-137130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:40:32.293 [DEBUG] [Thread-137130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:40:32.293 [DEBUG] [Thread-137130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:40:32.293 [DEBUG] [Thread-137130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:40:32.293 [DEBUG] [Thread-137130] [transport.py] [_log()] Compression: none
2026-02-11T22:40:32.293 [DEBUG] [Thread-137130] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:40:32.310 [DEBUG] [Thread-137130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:40:32.311 [DEBUG] [Thread-137130] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:40:32.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:40:32.312 [DEBUG] [Thread-137130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:40:32.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:40:32.313 [DEBUG] [Thread-137130] [transport.py] [_log()] userauth is OK
2026-02-11T22:40:32.314 [DEBUG] [Thread-137130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:40:32.314 [DEBUG] [Thread-137130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:40:32.314 [DEBUG] [Thread-137130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:40:32.314 [DEBUG] [Thread-137130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:40:32.350 [INFO] [Thread-137130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:40:32.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:40:32.979 [DEBUG] [Thread-137130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:40:32.979 [DEBUG] [Thread-137130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:40:32.979 [DEBUG] [Thread-137130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:40:33.020 [DEBUG] [Thread-137130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:40:33.020 [DEBUG] [Thread-137130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:40:33.023 [DEBUG] [Thread-137130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:40:33.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:40:33.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:40:33.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:40:33.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:40:33.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:40:33.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:40:33.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:40:33.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:40:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:40:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.861248 -999.00  +15.30  11.88     91  +13.80 1 2 1 3 1     0    0 1.29 -8.41 ZnESw 11.6 11.9 226.2 17.0 16.6 -16.9 16.4 -16.1 16.3 -15.9 16.6 -16.8
2026-02-11T22:40:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:40:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:40:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.861248
2026-02-11T22:40:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:40:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:40:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:40:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:40:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:40:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:40:14', tmtdew=0.92, humidity=94.32, cloud=0.0, wind=16.85, temperature=15.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:40:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:38:00')
2026-02-11T22:40:33.044 [DEBUG] [Thread-137130] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:40:33.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:40:33.138 [DEBUG] [Thread-137133] [transport.py] [_log()] starting thread (client mode): 0xa2d04b50
2026-02-11T22:40:33.138 [DEBUG] [Thread-137133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:40:33.153 [DEBUG] [Thread-137133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:40:33.153 [INFO] [Thread-137133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:40:33.160 [DEBUG] [Thread-137133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:40:33.160 [DEBUG] [Thread-137133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] client lang: <none>
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] server lang: <none>
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] kex follows: False
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] Compression: none
2026-02-11T22:40:33.161 [DEBUG] [Thread-137133] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:40:33.216 [DEBUG] [Thread-137133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:40:33.217 [DEBUG] [Thread-137133] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:40:33.217 [DEBUG] [Thread-137133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:40:33.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:40:33.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:40:33.274 [DEBUG] [Thread-137133] [transport.py] [_log()] userauth is OK
2026-02-11T22:40:33.274 [DEBUG] [Thread-137133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:40:33.274 [DEBUG] [Thread-137133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:40:33.275 [DEBUG] [Thread-137133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:40:33.275 [DEBUG] [Thread-137133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:40:33.293 [INFO] [Thread-137133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:40:33.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:40:33.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:40:34.113 [DEBUG] [Thread-137133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:40:34.114 [DEBUG] [Thread-137133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:40:34.162 [DEBUG] [Thread-137133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:40:34.162 [DEBUG] [Thread-137133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:40:34.171 [DEBUG] [Thread-137133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:40:34.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:40:34.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:40:34.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:40:34.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:40:34.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:40:34.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:40:34.207 [DEBUG] [Thread-137133] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:40:42.340 [DEBUG] [Thread-137135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:40:44.403 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:40:44.404 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:40:47.963 [DEBUG] [Thread-137136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:40:57.394 [DEBUG] [Thread-137137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:41:04.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:41:04.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:41:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:41:06.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 40, 49), 0.92, 94.34, 0.0, 14.49, 15.1, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:41:06.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:40:49
2026-02-11T22:41:07.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:41:07.347 [DEBUG] [Thread-137138] [transport.py] [_log()] starting thread (client mode): 0xa2d07760
2026-02-11T22:41:07.347 [DEBUG] [Thread-137138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:41:07.368 [DEBUG] [Thread-137138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:41:07.368 [INFO] [Thread-137138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:41:07.371 [DEBUG] [Thread-137138] [transport.py] [_log()] client lang: <none>
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] server lang: <none>
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] kex follows: False
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] Compression: none
2026-02-11T22:41:07.372 [DEBUG] [Thread-137138] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:41:07.393 [DEBUG] [Thread-137138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:41:07.394 [DEBUG] [Thread-137138] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:41:07.394 [DEBUG] [Thread-137138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:41:07.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:41:07.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:41:07.396 [DEBUG] [Thread-137138] [transport.py] [_log()] userauth is OK
2026-02-11T22:41:07.397 [DEBUG] [Thread-137138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:41:07.397 [DEBUG] [Thread-137138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:41:07.397 [DEBUG] [Thread-137138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:41:07.397 [DEBUG] [Thread-137138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:41:07.422 [INFO] [Thread-137138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:41:07.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:41:08.099 [DEBUG] [Thread-137138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:41:08.100 [DEBUG] [Thread-137138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:41:08.100 [DEBUG] [Thread-137138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:41:08.141 [DEBUG] [Thread-137138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:41:08.141 [DEBUG] [Thread-137138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:41:08.143 [DEBUG] [Thread-137138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:41:08.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:41:08.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:41:08.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:41:08.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:41:08.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:41:08.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:41:08.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:41:08.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:41:08.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:41:08.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.861595 -999.00  +15.30   7.54     91  +13.80 1 2 1 3 1     0    0 1.33 -8.37 ZnESw 13.3 7.5 201.2 12.4 16.6 -14.0 16.4 -15.5 16.2 -13.7 16.6 -14.7
2026-02-11T22:41:08.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:41:08.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:41:08.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.861595
2026-02-11T22:41:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:41:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:41:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:41:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:41:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:41:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:40:49', tmtdew=0.92, humidity=94.34, cloud=0.0, wind=14.49, temperature=15.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:40:41.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:38:00')
2026-02-11T22:41:08.163 [DEBUG] [Thread-137138] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:41:08.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:41:08.251 [DEBUG] [Thread-137141] [transport.py] [_log()] starting thread (client mode): 0xa2d68a30
2026-02-11T22:41:08.251 [DEBUG] [Thread-137141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:41:08.266 [DEBUG] [Thread-137141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:41:08.266 [INFO] [Thread-137141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] client lang: <none>
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] server lang: <none>
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] kex follows: False
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] Compression: none
2026-02-11T22:41:08.274 [DEBUG] [Thread-137141] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:41:08.335 [DEBUG] [Thread-137141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:41:08.336 [DEBUG] [Thread-137141] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:41:08.336 [DEBUG] [Thread-137141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:41:08.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:41:08.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:41:08.393 [DEBUG] [Thread-137141] [transport.py] [_log()] userauth is OK
2026-02-11T22:41:08.394 [DEBUG] [Thread-137141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:41:08.394 [DEBUG] [Thread-137141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:41:08.394 [DEBUG] [Thread-137141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:41:08.394 [DEBUG] [Thread-137141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:41:08.417 [INFO] [Thread-137141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:41:08.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:41:08.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:41:09.245 [DEBUG] [Thread-137141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:41:09.245 [DEBUG] [Thread-137141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:41:09.293 [DEBUG] [Thread-137141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:41:09.294 [DEBUG] [Thread-137141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:41:09.304 [DEBUG] [Thread-137141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:41:09.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:41:09.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:41:09.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:41:09.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:41:09.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:41:09.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:41:09.345 [DEBUG] [Thread-137141] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:41:12.431 [DEBUG] [Thread-137143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:41:27.484 [DEBUG] [Thread-137144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:41:39.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:41:39.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:41:39.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:41:41.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 41, 25), 0.91, 94.39, 0.0, 16.0, 15.13, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:41:41.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:41:25
2026-02-11T22:41:41.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:41:41.796 [DEBUG] [Thread-137145] [transport.py] [_log()] starting thread (client mode): 0xa2d04040
2026-02-11T22:41:41.796 [DEBUG] [Thread-137145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:41:41.816 [DEBUG] [Thread-137145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:41:41.816 [INFO] [Thread-137145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:41:41.819 [DEBUG] [Thread-137145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] client lang: <none>
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] server lang: <none>
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] kex follows: False
2026-02-11T22:41:41.820 [DEBUG] [Thread-137145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:41:41.821 [DEBUG] [Thread-137145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:41:41.821 [DEBUG] [Thread-137145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:41:41.821 [DEBUG] [Thread-137145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:41:41.821 [DEBUG] [Thread-137145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:41:41.821 [DEBUG] [Thread-137145] [transport.py] [_log()] Compression: none
2026-02-11T22:41:41.821 [DEBUG] [Thread-137145] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:41:41.840 [DEBUG] [Thread-137145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:41:41.841 [DEBUG] [Thread-137145] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:41:41.842 [DEBUG] [Thread-137145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:41:41.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:41:41.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:41:41.845 [DEBUG] [Thread-137145] [transport.py] [_log()] userauth is OK
2026-02-11T22:41:41.845 [DEBUG] [Thread-137145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:41:41.845 [DEBUG] [Thread-137145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:41:41.845 [DEBUG] [Thread-137145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:41:41.846 [DEBUG] [Thread-137145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:41:41.866 [INFO] [Thread-137145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:41:41.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:41:42.500 [DEBUG] [Thread-137145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:41:42.500 [DEBUG] [Thread-137145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:41:42.501 [DEBUG] [Thread-137145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:41:42.522 [DEBUG] [Thread-137147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:41:42.541 [DEBUG] [Thread-137145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:41:42.542 [DEBUG] [Thread-137145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:41:42.545 [DEBUG] [Thread-137145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:41:42.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:41:42.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:41:42.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:41:42.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:41:42.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:41:42.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:41:42.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:41:42.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:41:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:41:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.861942 -999.00  +15.30   9.55     91  +13.80 1 1 1 3 1     0    0 1.30 -8.04 ZNESW 10.1 9.6 209.4 17.4 16.6 -12.8 16.4 -13.3 16.2 -13.1 16.6 -13.5
2026-02-11T22:41:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:41:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:41:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.861942
2026-02-11T22:41:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:41:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:41:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:41:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:41:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:41:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:41:25', tmtdew=0.91, humidity=94.39, cloud=0.0, wind=16.0, temperature=15.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:41:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[0.6877499999999994, 0.18524999999999991, 0.1922499999999996, 0.15799999999999947, 0.2890000000000015, 0.3512500000000003, 0.5429999999999993, 0.6972500000000004, 0.623499999999999, 0.09450000000000003, 0.09825000000000017, 0.08999999999999986, 0.11199999999999832, 0.12574999999999825, 0.13349999999999795, 0.21699999999999875, 0.2322500000000005, 0.16849999999999987, 0.09599999999999831, 0.08624999999999972, 0.18499999999999872, 0.13674999999999926, 0.07925000000000004, 0.13974999999999937, 0.16499999999999915, 0.18650000000000055, 0.161249999999999, 0.22600000000000087, 0.21750000000000114, 0.14499999999999957, 0.15800000000000125, 0.2110000000000003, 0.2762499999999992], zp_timestamp='2026-02-11T20:38:00')
2026-02-11T22:41:42.571 [DEBUG] [Thread-137145] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:41:42.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:41:44.609 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:41:44.610 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:41:48.048 [DEBUG] [Thread-137149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:41:57.560 [DEBUG] [Thread-137150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:42:12.612 [DEBUG] [Thread-137151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:42:27.648 [DEBUG] [Thread-137152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:42:42.689 [DEBUG] [Thread-137153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:42:44.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:42:44.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:42:48.107 [DEBUG] [Thread-137154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:42:57.726 [DEBUG] [Thread-137155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:43:12.761 [DEBUG] [Thread-137156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:43:27.799 [DEBUG] [Thread-137157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:43:42.835 [DEBUG] [Thread-137158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:43:45.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:43:45.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:43:48.166 [DEBUG] [Thread-137159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:43:54.296 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T22:43:57.869 [DEBUG] [Thread-137160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:12.903 [DEBUG] [Thread-137161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:24.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:44:24.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:44:24.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:44:26.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 43, 48), 0.82, 95.11, 0.0, 16.23, 15.1, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:44:26.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:43:48
2026-02-11T22:44:26.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:44:26.750 [DEBUG] [Thread-137162] [transport.py] [_log()] starting thread (client mode): 0x9eb07d30
2026-02-11T22:44:26.750 [DEBUG] [Thread-137162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:44:26.770 [DEBUG] [Thread-137162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:44:26.770 [INFO] [Thread-137162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:44:26.773 [DEBUG] [Thread-137162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] client lang: <none>
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] server lang: <none>
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] kex follows: False
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] Compression: none
2026-02-11T22:44:26.774 [DEBUG] [Thread-137162] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:44:26.790 [DEBUG] [Thread-137162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:44:26.791 [DEBUG] [Thread-137162] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:44:26.792 [DEBUG] [Thread-137162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:44:26.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:44:26.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:44:26.793 [DEBUG] [Thread-137162] [transport.py] [_log()] userauth is OK
2026-02-11T22:44:26.794 [DEBUG] [Thread-137162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:44:26.794 [DEBUG] [Thread-137162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:44:26.794 [DEBUG] [Thread-137162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:44:26.794 [DEBUG] [Thread-137162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:44:26.813 [INFO] [Thread-137162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:44:26.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:44:27.398 [DEBUG] [Thread-137162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:44:27.398 [DEBUG] [Thread-137162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:44:27.399 [DEBUG] [Thread-137162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:44:27.439 [DEBUG] [Thread-137162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:44:27.440 [DEBUG] [Thread-137162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:44:27.443 [DEBUG] [Thread-137162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:44:27.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:44:27.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:44:27.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:44:27.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:44:27.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:44:27.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:44:27.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:44:27.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:44:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:44:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.864025 -999.00  +15.30   5.63     91  +13.80 1 2 1 3 1     0    0 1.33 -7.68 ZneSW 7.4 5.6 184.0 13.5 16.6 -16.3 16.4 -15.5 16.2 -14.9 16.5 -15.9
2026-02-11T22:44:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:44:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:44:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.864025
2026-02-11T22:44:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:44:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:44:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:44:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:44:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:44:27.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:43:48', tmtdew=0.82, humidity=95.11, cloud=0.0, wind=16.23, temperature=15.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:44:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[2.4187499999999993, 2.568250000000001, 1.1782500000000002, 1.709999999999999, 1.8114999999999997, 2.2767500000000007, nan, nan, nan, nan, 1.8622499999999995, 1.4740000000000002, 1.8129999999999997, 1.8207499999999994, 2.1929999999999996, nan, 2.56025, 2.5935000000000006, 1.7449999999999992, 1.6572499999999986, 2.1629999999999985, 2.464249999999998, 3.0287500000000005, nan, nan, nan, 2.49925, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:41:00')
2026-02-11T22:44:27.470 [DEBUG] [Thread-137162] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:44:27.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:44:27.567 [DEBUG] [Thread-137165] [transport.py] [_log()] starting thread (client mode): 0x9eb078b0
2026-02-11T22:44:27.567 [DEBUG] [Thread-137165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:44:27.582 [DEBUG] [Thread-137165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:44:27.582 [INFO] [Thread-137165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:44:27.590 [DEBUG] [Thread-137165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:44:27.590 [DEBUG] [Thread-137165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] client lang: <none>
2026-02-11T22:44:27.591 [DEBUG] [Thread-137165] [transport.py] [_log()] server lang: <none>
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] kex follows: False
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] Compression: none
2026-02-11T22:44:27.592 [DEBUG] [Thread-137165] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:44:27.649 [DEBUG] [Thread-137165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:44:27.650 [DEBUG] [Thread-137165] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:44:27.650 [DEBUG] [Thread-137165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:44:27.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:44:27.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:44:27.705 [DEBUG] [Thread-137165] [transport.py] [_log()] userauth is OK
2026-02-11T22:44:27.705 [DEBUG] [Thread-137165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:44:27.705 [DEBUG] [Thread-137165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:44:27.705 [DEBUG] [Thread-137165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:44:27.705 [DEBUG] [Thread-137165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:44:27.725 [INFO] [Thread-137165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:44:27.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:44:27.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:44:27.939 [DEBUG] [Thread-137167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:28.571 [DEBUG] [Thread-137165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:44:28.571 [DEBUG] [Thread-137165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:44:28.619 [DEBUG] [Thread-137165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:44:28.620 [DEBUG] [Thread-137165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:44:28.629 [DEBUG] [Thread-137165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:44:28.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:44:28.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:44:28.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:44:28.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:44:28.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:44:28.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:44:28.665 [DEBUG] [Thread-137165] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:44:43.003 [DEBUG] [Thread-137168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:45.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:45.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:48.226 [DEBUG] [Thread-137169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:58.041 [DEBUG] [Thread-137170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:44:58.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:44:58.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:44:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:45:00.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 44, 24), 0.82, 95.09, 0.0, 15.51, 15.06, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:45:00.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:44:24
2026-02-11T22:45:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:45:01.445 [DEBUG] [Thread-137171] [transport.py] [_log()] starting thread (client mode): 0xa2d9f550
2026-02-11T22:45:01.445 [DEBUG] [Thread-137171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:45:01.462 [DEBUG] [Thread-137171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:45:01.462 [INFO] [Thread-137171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:45:01.463 [DEBUG] [Thread-137171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] client lang: <none>
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] server lang: <none>
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] kex follows: False
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] Compression: none
2026-02-11T22:45:01.464 [DEBUG] [Thread-137171] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:45:01.475 [DEBUG] [Thread-137171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:45:01.475 [DEBUG] [Thread-137171] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:45:01.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:45:01.476 [DEBUG] [Thread-137171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:45:01.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:45:01.478 [DEBUG] [Thread-137171] [transport.py] [_log()] userauth is OK
2026-02-11T22:45:01.479 [DEBUG] [Thread-137171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:45:01.479 [DEBUG] [Thread-137171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:45:01.479 [DEBUG] [Thread-137171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:45:01.479 [DEBUG] [Thread-137171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:45:01.507 [INFO] [Thread-137171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:45:01.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:45:02.129 [DEBUG] [Thread-137171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:45:02.130 [DEBUG] [Thread-137171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:45:02.130 [DEBUG] [Thread-137171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:45:02.171 [DEBUG] [Thread-137171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:45:02.171 [DEBUG] [Thread-137171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:45:02.173 [DEBUG] [Thread-137171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:45:02.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:45:02.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:45:02.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:45:02.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:45:02.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:45:02.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:45:02.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.864373 -999.00  +15.30  10.38     91  +13.80 1 1 1 3 1     0    0 1.34 -7.84 ZNESW 8.0 10.4 193.8 12.5 16.6 -16.5 16.4 -15.7 16.2 -15.0 16.6 -15.7
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.864373
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:45:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:44:24', tmtdew=0.82, humidity=95.09, cloud=0.0, wind=15.51, temperature=15.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:44:41.827', atlas_cloud=1, atlas_rain=1, zp_data=[2.4187499999999993, 2.568250000000001, 1.1782500000000002, 1.709999999999999, 1.8114999999999997, 2.2767500000000007, nan, nan, nan, nan, 1.8622499999999995, 1.4740000000000002, 1.8129999999999997, 1.8207499999999994, 2.1929999999999996, nan, 2.56025, 2.5935000000000006, 1.7449999999999992, 1.6572499999999986, 2.1629999999999985, 2.464249999999998, 3.0287500000000005, nan, nan, nan, 2.49925, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:43:00')
2026-02-11T22:45:02.186 [DEBUG] [Thread-137171] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:45:02.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:45:02.271 [DEBUG] [Thread-137174] [transport.py] [_log()] starting thread (client mode): 0xa5759de0
2026-02-11T22:45:02.271 [DEBUG] [Thread-137174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:45:02.285 [DEBUG] [Thread-137174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:45:02.285 [INFO] [Thread-137174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] client lang: <none>
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] server lang: <none>
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] kex follows: False
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] Compression: none
2026-02-11T22:45:02.293 [DEBUG] [Thread-137174] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:45:02.352 [DEBUG] [Thread-137174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:45:02.352 [DEBUG] [Thread-137174] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:45:02.352 [DEBUG] [Thread-137174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:45:02.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:45:02.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:45:02.408 [DEBUG] [Thread-137174] [transport.py] [_log()] userauth is OK
2026-02-11T22:45:02.408 [DEBUG] [Thread-137174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:45:02.408 [DEBUG] [Thread-137174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:45:02.408 [DEBUG] [Thread-137174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:45:02.408 [DEBUG] [Thread-137174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:45:02.422 [INFO] [Thread-137174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:45:02.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:45:02.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:45:03.292 [DEBUG] [Thread-137174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:45:03.292 [DEBUG] [Thread-137174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:45:03.340 [DEBUG] [Thread-137174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:45:03.340 [DEBUG] [Thread-137174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:45:03.349 [DEBUG] [Thread-137174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:45:03.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:45:03.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:45:03.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:45:03.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:45:03.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:45:03.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:45:03.384 [DEBUG] [Thread-137174] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:45:13.075 [DEBUG] [Thread-137176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:45:28.131 [DEBUG] [Thread-137177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:45:33.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:45:33.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:45:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:45:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 44, 24), 0.82, 95.09, 0.0, 13.71, 15.06, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:45:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:44:24
2026-02-11T22:45:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:45:35.898 [DEBUG] [Thread-137178] [transport.py] [_log()] starting thread (client mode): 0xa5759840
2026-02-11T22:45:35.898 [DEBUG] [Thread-137178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:45:35.917 [DEBUG] [Thread-137178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:45:35.918 [INFO] [Thread-137178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:45:35.919 [DEBUG] [Thread-137178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] client lang: <none>
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] server lang: <none>
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] kex follows: False
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] Compression: none
2026-02-11T22:45:35.920 [DEBUG] [Thread-137178] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:45:35.932 [DEBUG] [Thread-137178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:45:35.932 [DEBUG] [Thread-137178] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:45:35.933 [DEBUG] [Thread-137178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:45:35.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:45:35.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:45:35.933 [DEBUG] [Thread-137178] [transport.py] [_log()] userauth is OK
2026-02-11T22:45:35.933 [DEBUG] [Thread-137178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:45:35.933 [DEBUG] [Thread-137178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:45:35.933 [DEBUG] [Thread-137178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:45:35.933 [DEBUG] [Thread-137178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:45:35.942 [INFO] [Thread-137178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:45:35.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:45:36.527 [DEBUG] [Thread-137178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:45:36.528 [DEBUG] [Thread-137178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:45:36.528 [DEBUG] [Thread-137178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:45:36.568 [DEBUG] [Thread-137178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:45:36.569 [DEBUG] [Thread-137178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:45:36.576 [DEBUG] [Thread-137178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:45:36.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:45:36.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:45:36.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:45:36.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:45:36.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:45:36.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:45:36.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:45:36.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:45:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:45:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.864720 -999.00  +15.20   6.98     91  +13.80 1 1 1 3 1     0    0 1.30 -7.39 ZNESW 5.8 7.0 224.0 18.4 16.6 -16.3 16.4 -16.1 16.2 -15.6 16.6 -16.7
2026-02-11T22:45:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:45:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:45:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.864720
2026-02-11T22:45:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:45:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:45:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:45:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:45:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:45:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:44:24', tmtdew=0.82, humidity=95.09, cloud=0.0, wind=13.71, temperature=15.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:45:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[2.4187499999999993, 2.568250000000001, 1.1782500000000002, 1.709999999999999, 1.8114999999999997, 2.2767500000000007, nan, nan, nan, nan, 1.8622499999999995, 1.4740000000000002, 1.8129999999999997, 1.8207499999999994, 2.1929999999999996, nan, 2.56025, 2.5935000000000006, 1.7449999999999992, 1.6572499999999986, 2.1629999999999985, 2.464249999999998, 3.0287500000000005, nan, nan, nan, 2.49925, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:43:00')
2026-02-11T22:45:36.597 [DEBUG] [Thread-137178] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:45:36.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:45:36.694 [DEBUG] [Thread-137181] [transport.py] [_log()] starting thread (client mode): 0xa575b4f0
2026-02-11T22:45:36.694 [DEBUG] [Thread-137181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:45:36.709 [DEBUG] [Thread-137181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:45:36.709 [INFO] [Thread-137181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:45:36.717 [DEBUG] [Thread-137181] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:45:36.717 [DEBUG] [Thread-137181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:45:36.718 [DEBUG] [Thread-137181] [transport.py] [_log()] client lang: <none>
2026-02-11T22:45:36.719 [DEBUG] [Thread-137181] [transport.py] [_log()] server lang: <none>
2026-02-11T22:45:36.719 [DEBUG] [Thread-137181] [transport.py] [_log()] kex follows: False
2026-02-11T22:45:36.719 [DEBUG] [Thread-137181] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:45:36.719 [DEBUG] [Thread-137181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:45:36.719 [DEBUG] [Thread-137181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:45:36.720 [DEBUG] [Thread-137181] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:45:36.720 [DEBUG] [Thread-137181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:45:36.720 [DEBUG] [Thread-137181] [transport.py] [_log()] Compression: none
2026-02-11T22:45:36.720 [DEBUG] [Thread-137181] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:45:36.776 [DEBUG] [Thread-137181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:45:36.777 [DEBUG] [Thread-137181] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:45:36.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:45:36.778 [DEBUG] [Thread-137181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:45:36.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:45:36.834 [DEBUG] [Thread-137181] [transport.py] [_log()] userauth is OK
2026-02-11T22:45:36.834 [DEBUG] [Thread-137181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:45:36.834 [DEBUG] [Thread-137181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:45:36.834 [DEBUG] [Thread-137181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:45:36.834 [DEBUG] [Thread-137181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:45:36.853 [INFO] [Thread-137181] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:45:36.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:45:36.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:45:37.662 [DEBUG] [Thread-137181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:45:37.662 [DEBUG] [Thread-137181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:45:37.710 [DEBUG] [Thread-137181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:45:37.710 [DEBUG] [Thread-137181] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:45:37.719 [DEBUG] [Thread-137181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:45:37.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:45:37.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:45:37.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:45:37.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:45:37.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:45:37.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:45:37.757 [DEBUG] [Thread-137181] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:45:43.167 [DEBUG] [Thread-137183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:45:45.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:45:45.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:45:48.300 [DEBUG] [Thread-137184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:45:58.217 [DEBUG] [Thread-137185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:46:07.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:46:07.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:46:07.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:46:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 45, 36), 1.22, 92.38, 0.0, 18.21, 15.4, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:46:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:45:36
2026-02-11T22:46:10.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:46:10.149 [DEBUG] [Thread-137186] [transport.py] [_log()] starting thread (client mode): 0xa2d9f9a0
2026-02-11T22:46:10.150 [DEBUG] [Thread-137186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:46:10.160 [DEBUG] [Thread-137186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:46:10.160 [INFO] [Thread-137186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:46:10.162 [DEBUG] [Thread-137186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:46:10.162 [DEBUG] [Thread-137186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:46:10.162 [DEBUG] [Thread-137186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:46:10.162 [DEBUG] [Thread-137186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:10.162 [DEBUG] [Thread-137186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:10.162 [DEBUG] [Thread-137186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:10.162 [DEBUG] [Thread-137186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] client lang: <none>
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] server lang: <none>
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] kex follows: False
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] Compression: none
2026-02-11T22:46:10.163 [DEBUG] [Thread-137186] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:46:10.176 [DEBUG] [Thread-137186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:46:10.176 [DEBUG] [Thread-137186] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:46:10.177 [DEBUG] [Thread-137186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:46:10.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:46:10.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:46:10.178 [DEBUG] [Thread-137186] [transport.py] [_log()] userauth is OK
2026-02-11T22:46:10.178 [DEBUG] [Thread-137186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:46:10.178 [DEBUG] [Thread-137186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:46:10.178 [DEBUG] [Thread-137186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:46:10.178 [DEBUG] [Thread-137186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:46:10.191 [INFO] [Thread-137186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:46:10.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:46:10.777 [DEBUG] [Thread-137186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:46:10.777 [DEBUG] [Thread-137186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:46:10.778 [DEBUG] [Thread-137186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:46:10.818 [DEBUG] [Thread-137186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:46:10.819 [DEBUG] [Thread-137186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:46:10.822 [DEBUG] [Thread-137186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:46:10.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:46:10.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:46:10.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:46:10.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:46:10.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:46:10.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:46:10.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:46:10.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:46:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:46:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.865067 -999.00  +15.20   5.59     91  +13.80 1 1 1 3 1     0    0 1.34 -7.47 ZNESW 7.4 5.6 235.2 12.2 16.5 -17.5 16.4 -16.0 16.2 -16.0 16.6 -16.8
2026-02-11T22:46:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:46:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:46:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.865067
2026-02-11T22:46:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:46:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:46:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:46:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:46:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T22:46:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:45:36', tmtdew=1.22, humidity=92.38, cloud=0.0, wind=18.21, temperature=15.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:45:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[2.4187499999999993, 2.568250000000001, 1.1782500000000002, 1.709999999999999, 1.8114999999999997, 2.2767500000000007, nan, nan, nan, nan, 1.8622499999999995, 1.4740000000000002, 1.8129999999999997, 1.8207499999999994, 2.1929999999999996, nan, 2.56025, 2.5935000000000006, 1.7449999999999992, 1.6572499999999986, 2.1629999999999985, 2.464249999999998, 3.0287500000000005, nan, nan, nan, 2.49925, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:43:00')
2026-02-11T22:46:10.848 [DEBUG] [Thread-137186] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:46:10.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:46:10.950 [DEBUG] [Thread-137189] [transport.py] [_log()] starting thread (client mode): 0xa2d6b5e0
2026-02-11T22:46:10.950 [DEBUG] [Thread-137189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:46:10.964 [DEBUG] [Thread-137189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:46:10.965 [INFO] [Thread-137189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:46:10.972 [DEBUG] [Thread-137189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:46:10.973 [DEBUG] [Thread-137189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:46:10.973 [DEBUG] [Thread-137189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:46:10.973 [DEBUG] [Thread-137189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:10.973 [DEBUG] [Thread-137189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:10.973 [DEBUG] [Thread-137189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:10.973 [DEBUG] [Thread-137189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] client lang: <none>
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] server lang: <none>
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] kex follows: False
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:46:10.974 [DEBUG] [Thread-137189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:46:10.975 [DEBUG] [Thread-137189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:46:10.975 [DEBUG] [Thread-137189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:46:10.975 [DEBUG] [Thread-137189] [transport.py] [_log()] Compression: none
2026-02-11T22:46:10.975 [DEBUG] [Thread-137189] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:46:11.033 [DEBUG] [Thread-137189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:46:11.033 [DEBUG] [Thread-137189] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:46:11.034 [DEBUG] [Thread-137189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:46:11.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:46:11.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:46:11.088 [DEBUG] [Thread-137189] [transport.py] [_log()] userauth is OK
2026-02-11T22:46:11.088 [DEBUG] [Thread-137189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:46:11.088 [DEBUG] [Thread-137189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:46:11.088 [DEBUG] [Thread-137189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:46:11.089 [DEBUG] [Thread-137189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:46:11.106 [INFO] [Thread-137189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:46:11.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:46:11.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:46:11.968 [DEBUG] [Thread-137189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:46:11.968 [DEBUG] [Thread-137189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:46:12.017 [DEBUG] [Thread-137189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:46:12.017 [DEBUG] [Thread-137189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:46:12.026 [DEBUG] [Thread-137189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:46:12.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:46:12.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:46:12.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:46:12.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:46:12.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:46:12.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:46:12.061 [DEBUG] [Thread-137189] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:46:13.256 [DEBUG] [Thread-137191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:46:28.304 [DEBUG] [Thread-137192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:46:42.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:46:42.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:46:42.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:46:43.343 [DEBUG] [Thread-137193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:46:44.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 46, 12), 0.81, 95.17, 0.0, 14.19, 15.0, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:46:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:46:12
2026-02-11T22:46:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:46:45.036 [DEBUG] [Thread-137194] [transport.py] [_log()] starting thread (client mode): 0xa2d6bd00
2026-02-11T22:46:45.036 [DEBUG] [Thread-137194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:46:45.051 [DEBUG] [Thread-137194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:46:45.052 [INFO] [Thread-137194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] client lang: <none>
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] server lang: <none>
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] kex follows: False
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] Compression: none
2026-02-11T22:46:45.054 [DEBUG] [Thread-137194] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:46:45.063 [DEBUG] [Thread-137194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:46:45.063 [DEBUG] [Thread-137194] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:46:45.063 [DEBUG] [Thread-137194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:46:45.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:46:45.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:46:45.064 [DEBUG] [Thread-137194] [transport.py] [_log()] userauth is OK
2026-02-11T22:46:45.065 [DEBUG] [Thread-137194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:46:45.065 [DEBUG] [Thread-137194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:46:45.065 [DEBUG] [Thread-137194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:46:45.065 [DEBUG] [Thread-137194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:46:45.077 [INFO] [Thread-137194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:46:45.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:46:45.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:46:45.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:46:45.650 [DEBUG] [Thread-137194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:46:45.650 [DEBUG] [Thread-137194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:46:45.650 [DEBUG] [Thread-137194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:46:45.691 [DEBUG] [Thread-137194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:46:45.691 [DEBUG] [Thread-137194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:46:45.695 [DEBUG] [Thread-137194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:46:45.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:46:45.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:46:45.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:46:45.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:46:45.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:46:45.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:46:45.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:46:45.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:46:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:46:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.865761 -999.00  +15.20   6.66     91  +13.80 1 2 1 3 1     0    0 1.33 -6.90 zN.SW 9.0 6.7 204.0 11.7 16.6 -14.5 16.4 -12.7 16.3 -13.2 16.5 -13.3
2026-02-11T22:46:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:46:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:46:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.865761
2026-02-11T22:46:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:46:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:46:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:46:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:46:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:46:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:46:12', tmtdew=0.81, humidity=95.17, cloud=0.0, wind=14.19, temperature=15.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:46:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[2.4187499999999993, 2.568250000000001, 1.1782500000000002, 1.709999999999999, 1.8114999999999997, 2.2767500000000007, nan, nan, nan, nan, 1.8622499999999995, 1.4740000000000002, 1.8129999999999997, 1.8207499999999994, 2.1929999999999996, nan, 2.56025, 2.5935000000000006, 1.7449999999999992, 1.6572499999999986, 2.1629999999999985, 2.464249999999998, 3.0287500000000005, nan, nan, nan, 2.49925, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:43:00')
2026-02-11T22:46:45.720 [DEBUG] [Thread-137194] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:46:45.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:46:45.814 [DEBUG] [Thread-137197] [transport.py] [_log()] starting thread (client mode): 0xa2d9e9b0
2026-02-11T22:46:45.814 [DEBUG] [Thread-137197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:46:45.828 [DEBUG] [Thread-137197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:46:45.828 [INFO] [Thread-137197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:46:45.836 [DEBUG] [Thread-137197] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:46:45.836 [DEBUG] [Thread-137197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:46:45.836 [DEBUG] [Thread-137197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] client lang: <none>
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] server lang: <none>
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] kex follows: False
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] Compression: none
2026-02-11T22:46:45.837 [DEBUG] [Thread-137197] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:46:45.905 [DEBUG] [Thread-137197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:46:45.905 [DEBUG] [Thread-137197] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:46:45.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:46:45.907 [DEBUG] [Thread-137197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:46:45.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:46:45.961 [DEBUG] [Thread-137197] [transport.py] [_log()] userauth is OK
2026-02-11T22:46:45.961 [DEBUG] [Thread-137197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:46:45.961 [DEBUG] [Thread-137197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:46:45.961 [DEBUG] [Thread-137197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:46:45.961 [DEBUG] [Thread-137197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:46:45.980 [INFO] [Thread-137197] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:46:45.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:46:45.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:46:46.804 [DEBUG] [Thread-137197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:46:46.804 [DEBUG] [Thread-137197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:46:46.852 [DEBUG] [Thread-137197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:46:46.852 [DEBUG] [Thread-137197] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:46:46.861 [DEBUG] [Thread-137197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:46:46.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:46:46.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:46:46.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:46:46.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:46:46.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:46:46.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:46:46.896 [DEBUG] [Thread-137197] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:46:48.375 [DEBUG] [Thread-137199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:46:58.382 [DEBUG] [Thread-137200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:47:13.445 [DEBUG] [Thread-137201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:47:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:47:16.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:47:16.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
2026-02-11T22:47:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 46, 47), 0.79, 95.27, 0.0, 14.7, 15.06, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:47:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:46:47
2026-02-11T22:47:19.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:47:19.273 [DEBUG] [Thread-137202] [transport.py] [_log()] starting thread (client mode): 0xa57b1e70
2026-02-11T22:47:19.273 [DEBUG] [Thread-137202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:47:19.285 [DEBUG] [Thread-137202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:47:19.285 [INFO] [Thread-137202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] client lang: <none>
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] server lang: <none>
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] kex follows: False
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] Compression: none
2026-02-11T22:47:19.286 [DEBUG] [Thread-137202] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:47:19.295 [DEBUG] [Thread-137202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:47:19.295 [DEBUG] [Thread-137202] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:47:19.295 [DEBUG] [Thread-137202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:47:19.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:47:19.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:47:19.296 [DEBUG] [Thread-137202] [transport.py] [_log()] userauth is OK
2026-02-11T22:47:19.296 [DEBUG] [Thread-137202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:47:19.296 [DEBUG] [Thread-137202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:47:19.296 [DEBUG] [Thread-137202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:47:19.296 [DEBUG] [Thread-137202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:47:19.305 [INFO] [Thread-137202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:47:19.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:47:19.893 [DEBUG] [Thread-137202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:47:19.893 [DEBUG] [Thread-137202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:47:19.893 [DEBUG] [Thread-137202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:47:19.934 [DEBUG] [Thread-137202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:47:19.934 [DEBUG] [Thread-137202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:47:19.937 [DEBUG] [Thread-137202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:47:19.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:47:19.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:47:19.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:47:19.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:47:19.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:47:19.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:47:19.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:47:19.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:47:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:47:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.866109 -999.00  +15.20  11.51     91  +13.80 1 2 1 3 1     0    0 1.31 -7.44 zNESW 9.8 11.5 212.0 17.2 16.6 -16.2 16.4 -15.8 16.2 -15.7 16.6 -16.4
2026-02-11T22:47:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:47:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:47:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.866109
2026-02-11T22:47:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:47:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:47:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:47:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:47:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:47:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:46:47', tmtdew=0.79, humidity=95.27, cloud=0.0, wind=14.7, temperature=15.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:47:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[2.4187499999999993, 2.568250000000001, 1.1782500000000002, 1.709999999999999, 1.8114999999999997, 2.2767500000000007, nan, nan, nan, nan, 1.8622499999999995, 1.4740000000000002, 1.8129999999999997, 1.8207499999999994, 2.1929999999999996, nan, 2.56025, 2.5935000000000006, 1.7449999999999992, 1.6572499999999986, 2.1629999999999985, 2.464249999999998, 3.0287500000000005, nan, nan, nan, 2.49925, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:43:00')
2026-02-11T22:47:19.955 [DEBUG] [Thread-137202] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:47:20.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:47:20.051 [DEBUG] [Thread-137205] [transport.py] [_log()] starting thread (client mode): 0x9eb04340
2026-02-11T22:47:20.051 [DEBUG] [Thread-137205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:47:20.068 [DEBUG] [Thread-137205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:47:20.068 [INFO] [Thread-137205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] client lang: <none>
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] server lang: <none>
2026-02-11T22:47:20.077 [DEBUG] [Thread-137205] [transport.py] [_log()] kex follows: False
2026-02-11T22:47:20.078 [DEBUG] [Thread-137205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:47:20.078 [DEBUG] [Thread-137205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:47:20.078 [DEBUG] [Thread-137205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:47:20.078 [DEBUG] [Thread-137205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:47:20.078 [DEBUG] [Thread-137205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:47:20.078 [DEBUG] [Thread-137205] [transport.py] [_log()] Compression: none
2026-02-11T22:47:20.078 [DEBUG] [Thread-137205] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:47:20.131 [DEBUG] [Thread-137205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:47:20.132 [DEBUG] [Thread-137205] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:47:20.132 [DEBUG] [Thread-137205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:47:20.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:47:20.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:47:20.188 [DEBUG] [Thread-137205] [transport.py] [_log()] userauth is OK
2026-02-11T22:47:20.188 [DEBUG] [Thread-137205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:47:20.188 [DEBUG] [Thread-137205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:47:20.188 [DEBUG] [Thread-137205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:47:20.188 [DEBUG] [Thread-137205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:47:20.211 [INFO] [Thread-137205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:47:20.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:47:20.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:47:21.067 [DEBUG] [Thread-137205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:47:21.067 [DEBUG] [Thread-137205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:47:21.115 [DEBUG] [Thread-137205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:47:21.115 [DEBUG] [Thread-137205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:47:21.124 [DEBUG] [Thread-137205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:47:21.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:47:21.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:47:21.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:47:21.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:47:21.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:47:21.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:47:21.160 [DEBUG] [Thread-137205] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:47:28.479 [DEBUG] [Thread-137207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:47:43.519 [DEBUG] [Thread-137208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:47:45.834 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:47:45.836 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:47:48.459 [DEBUG] [Thread-137209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:47:51.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:47:51.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:47:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:47:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 47, 24), 0.79, 95.27, 0.0, 12.93, 15.05, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:47:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:47:24
2026-02-11T22:47:54.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:47:54.307 [DEBUG] [Thread-137210] [transport.py] [_log()] starting thread (client mode): 0xa5759de0
2026-02-11T22:47:54.307 [DEBUG] [Thread-137210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:47:54.326 [DEBUG] [Thread-137210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:47:54.326 [INFO] [Thread-137210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:47:54.328 [DEBUG] [Thread-137210] [transport.py] [_log()] client lang: <none>
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] server lang: <none>
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] kex follows: False
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] Compression: none
2026-02-11T22:47:54.329 [DEBUG] [Thread-137210] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:47:54.337 [DEBUG] [Thread-137210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:47:54.338 [DEBUG] [Thread-137210] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:47:54.338 [DEBUG] [Thread-137210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:47:54.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:47:54.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:47:54.339 [DEBUG] [Thread-137210] [transport.py] [_log()] userauth is OK
2026-02-11T22:47:54.339 [DEBUG] [Thread-137210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:47:54.339 [DEBUG] [Thread-137210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:47:54.339 [DEBUG] [Thread-137210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:47:54.339 [DEBUG] [Thread-137210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:47:54.351 [INFO] [Thread-137210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:47:54.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:47:54.930 [DEBUG] [Thread-137210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:47:54.931 [DEBUG] [Thread-137210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:47:54.931 [DEBUG] [Thread-137210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:47:54.971 [DEBUG] [Thread-137210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:47:54.972 [DEBUG] [Thread-137210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:47:54.975 [DEBUG] [Thread-137210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:47:54.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:47:54.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:47:54.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:47:54.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:47:54.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:47:54.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:47:54.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:47:54.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:47:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:47:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.866456 -999.00  +15.20   6.78     91  +13.80 1 2 1 3 1     0    0 1.31 -7.29 zNESW 10.3 6.8 195.1 13.5 16.5 -15.8 16.4 -14.7 16.2 -13.2 16.5 -14.5
2026-02-11T22:47:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:47:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:47:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.866456
2026-02-11T22:47:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:47:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:47:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:47:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:47:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:47:54.999 [DEBUG] [Thread-137210] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:47:55.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:47:24', tmtdew=0.79, humidity=95.27, cloud=0.0, wind=12.93, temperature=15.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:47:41.798', atlas_cloud=2, atlas_rain=1, zp_data=[2.4187499999999993, 2.568250000000001, 1.1782500000000002, 1.709999999999999, 1.8114999999999997, 2.2767500000000007, nan, nan, nan, nan, 1.8622499999999995, 1.4740000000000002, 1.8129999999999997, 1.8207499999999994, 2.1929999999999996, nan, 2.56025, 2.5935000000000006, 1.7449999999999992, 1.6572499999999986, 2.1629999999999985, 2.464249999999998, 3.0287500000000005, nan, nan, nan, 2.49925, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:43:00')
2026-02-11T22:47:55.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:47:55.095 [DEBUG] [Thread-137213] [transport.py] [_log()] starting thread (client mode): 0xa57e25f0
2026-02-11T22:47:55.096 [DEBUG] [Thread-137213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:47:55.109 [DEBUG] [Thread-137213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:47:55.109 [INFO] [Thread-137213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:47:55.117 [DEBUG] [Thread-137213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] client lang: <none>
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] server lang: <none>
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] kex follows: False
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] Compression: none
2026-02-11T22:47:55.118 [DEBUG] [Thread-137213] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:47:55.178 [DEBUG] [Thread-137213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:47:55.179 [DEBUG] [Thread-137213] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:47:55.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:47:55.180 [DEBUG] [Thread-137213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:47:55.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:47:55.236 [DEBUG] [Thread-137213] [transport.py] [_log()] userauth is OK
2026-02-11T22:47:55.237 [DEBUG] [Thread-137213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:47:55.237 [DEBUG] [Thread-137213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:47:55.237 [DEBUG] [Thread-137213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:47:55.237 [DEBUG] [Thread-137213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:47:55.256 [INFO] [Thread-137213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:47:55.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:47:55.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:47:56.083 [DEBUG] [Thread-137213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:47:56.083 [DEBUG] [Thread-137213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:47:56.131 [DEBUG] [Thread-137213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:47:56.131 [DEBUG] [Thread-137213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:47:56.140 [DEBUG] [Thread-137213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:47:56.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:47:56.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:47:56.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:47:56.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:47:56.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:47:56.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:47:56.177 [DEBUG] [Thread-137213] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:47:58.558 [DEBUG] [Thread-137215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:48:13.619 [DEBUG] [Thread-137216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:48:26.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:48:26.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:48:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:48:28.657 [DEBUG] [Thread-137217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:48:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 47, 59), 0.74, 95.32, 0.0, 13.46, 15.06, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:48:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:47:59
2026-02-11T22:48:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:48:29.310 [DEBUG] [Thread-137218] [transport.py] [_log()] starting thread (client mode): 0xa57e3010
2026-02-11T22:48:29.311 [DEBUG] [Thread-137218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:48:29.327 [DEBUG] [Thread-137218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:48:29.327 [INFO] [Thread-137218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:48:29.330 [DEBUG] [Thread-137218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:48:29.330 [DEBUG] [Thread-137218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:48:29.330 [DEBUG] [Thread-137218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] client lang: <none>
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] server lang: <none>
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] kex follows: False
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] Compression: none
2026-02-11T22:48:29.331 [DEBUG] [Thread-137218] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:48:29.349 [DEBUG] [Thread-137218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:48:29.349 [DEBUG] [Thread-137218] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:48:29.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:48:29.350 [DEBUG] [Thread-137218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:48:29.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:48:29.352 [DEBUG] [Thread-137218] [transport.py] [_log()] userauth is OK
2026-02-11T22:48:29.353 [DEBUG] [Thread-137218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:48:29.353 [DEBUG] [Thread-137218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:48:29.353 [DEBUG] [Thread-137218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:48:29.353 [DEBUG] [Thread-137218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:48:29.371 [INFO] [Thread-137218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:48:29.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:48:29.956 [DEBUG] [Thread-137218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:48:29.956 [DEBUG] [Thread-137218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:48:29.957 [DEBUG] [Thread-137218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:48:29.997 [DEBUG] [Thread-137218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:48:29.998 [DEBUG] [Thread-137218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:48:30.002 [DEBUG] [Thread-137218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:48:30.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:48:30.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:48:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:48:30.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:48:30.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:48:30.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:48:30.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:48:30.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:48:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:48:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.866803 -999.00  +15.20  10.70     91  +13.80 1 2 1 3 1     0    0 1.26 -8.03 zNESW 10.7 10.7 202.8 13.8 16.5 -12.7 16.4 -13.1 16.2 -11.4 16.5 -12.3
2026-02-11T22:48:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:48:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:48:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.866803
2026-02-11T22:48:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:48:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:48:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:48:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:48:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:48:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:47:59', tmtdew=0.74, humidity=95.32, cloud=0.0, wind=13.46, temperature=15.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:48:11.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.7907499999999992, 0.49425000000000097, 0.42125000000000057, 0.40149999999999864, 0.5054999999999996, 0.5772500000000012, 0.8449999999999998, 1.0682500000000008, 0.6014999999999997, 0.45700000000000074, 0.3257499999999993, 0.4239999999999995, 0.35999999999999943, 0.26924999999999955, 0.5469999999999997, 0.5275000000000007, 0.4482499999999998, 0.4894999999999996, 0.4859999999999989, 0.3802499999999984, 0.28999999999999915, 0.30274999999999963, 0.6242500000000009, 0.5342500000000001, 0.43650000000000055, 0.6275000000000004, 0.8162500000000001, 0.3745000000000003, 0.3769999999999998, 0.3420000000000014, 0.785000000000001, 0.6030000000000006, 0.35274999999999945], zp_timestamp='2026-02-11T20:46:00')
2026-02-11T22:48:30.029 [DEBUG] [Thread-137218] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:48:30.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:48:30.126 [DEBUG] [Thread-137221] [transport.py] [_log()] starting thread (client mode): 0x9eb07340
2026-02-11T22:48:30.126 [DEBUG] [Thread-137221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:48:30.140 [DEBUG] [Thread-137221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:48:30.140 [INFO] [Thread-137221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] client lang: <none>
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] server lang: <none>
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] kex follows: False
2026-02-11T22:48:30.148 [DEBUG] [Thread-137221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:48:30.149 [DEBUG] [Thread-137221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:48:30.149 [DEBUG] [Thread-137221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:48:30.149 [DEBUG] [Thread-137221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:48:30.149 [DEBUG] [Thread-137221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:48:30.149 [DEBUG] [Thread-137221] [transport.py] [_log()] Compression: none
2026-02-11T22:48:30.149 [DEBUG] [Thread-137221] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:48:30.210 [DEBUG] [Thread-137221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:48:30.210 [DEBUG] [Thread-137221] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:48:30.211 [DEBUG] [Thread-137221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:48:30.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:48:30.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:48:30.268 [DEBUG] [Thread-137221] [transport.py] [_log()] userauth is OK
2026-02-11T22:48:30.269 [DEBUG] [Thread-137221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:48:30.269 [DEBUG] [Thread-137221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:48:30.269 [DEBUG] [Thread-137221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:48:30.269 [DEBUG] [Thread-137221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:48:30.289 [INFO] [Thread-137221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:48:30.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:48:30.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:48:31.107 [DEBUG] [Thread-137221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:48:31.108 [DEBUG] [Thread-137221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:48:31.156 [DEBUG] [Thread-137221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:48:31.156 [DEBUG] [Thread-137221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:48:31.165 [DEBUG] [Thread-137221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:48:31.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:48:31.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:48: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') -> 00000000
2026-02-11T22:48:31.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:48:31.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:48:31.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:48:31.202 [DEBUG] [Thread-137221] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:48:43.696 [DEBUG] [Thread-137223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:48:46.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:48:46.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:48:48.541 [DEBUG] [Thread-137224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:48:58.752 [DEBUG] [Thread-137225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:49:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:49:01.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:49:01.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:49:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 48, 34), 1.17, 92.68, 0.0, 14.64, 15.43, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:49:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:48:34
2026-02-11T22:49:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:49:03.681 [DEBUG] [Thread-137226] [transport.py] [_log()] starting thread (client mode): 0xa2d5fa60
2026-02-11T22:49:03.681 [DEBUG] [Thread-137226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:49:03.696 [DEBUG] [Thread-137226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:49:03.696 [INFO] [Thread-137226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:49:03.699 [DEBUG] [Thread-137226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:49:03.699 [DEBUG] [Thread-137226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] client lang: <none>
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] server lang: <none>
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] kex follows: False
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] Compression: none
2026-02-11T22:49:03.700 [DEBUG] [Thread-137226] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:49:03.717 [DEBUG] [Thread-137226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:49:03.718 [DEBUG] [Thread-137226] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:49:03.718 [DEBUG] [Thread-137226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:49:03.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:49:03.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:49:03.720 [DEBUG] [Thread-137226] [transport.py] [_log()] userauth is OK
2026-02-11T22:49:03.720 [DEBUG] [Thread-137226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:49:03.720 [DEBUG] [Thread-137226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:49:03.720 [DEBUG] [Thread-137226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:49:03.720 [DEBUG] [Thread-137226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:49:03.738 [INFO] [Thread-137226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:49:03.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:49:04.306 [DEBUG] [Thread-137226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:49:04.306 [DEBUG] [Thread-137226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:49:04.306 [DEBUG] [Thread-137226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:49:04.347 [DEBUG] [Thread-137226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:49:04.348 [DEBUG] [Thread-137226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:49:04.351 [DEBUG] [Thread-137226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:49:04.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:49:04.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:49:04.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:49:04.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:49:04.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:49:04.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:49:04.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:49:04.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:49:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:49:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.867150 -999.00  +15.20   7.13     91  +13.70 1 2 1 3 1     0    0 1.29 -7.96 zn.SW 7.1 7.1 212.3 16.1 16.6 -13.1 16.4 -11.7 16.2 -12.0 16.5 -12.0
2026-02-11T22:49:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:49:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:49:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.867150
2026-02-11T22:49:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:49:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:49:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:49:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:49:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:49:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:48:34', tmtdew=1.17, humidity=92.68, cloud=0.0, wind=14.64, temperature=15.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:48:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.7907499999999992, 0.49425000000000097, 0.42125000000000057, 0.40149999999999864, 0.5054999999999996, 0.5772500000000012, 0.8449999999999998, 1.0682500000000008, 0.6014999999999997, 0.45700000000000074, 0.3257499999999993, 0.4239999999999995, 0.35999999999999943, 0.26924999999999955, 0.5469999999999997, 0.5275000000000007, 0.4482499999999998, 0.4894999999999996, 0.4859999999999989, 0.3802499999999984, 0.28999999999999915, 0.30274999999999963, 0.6242500000000009, 0.5342500000000001, 0.43650000000000055, 0.6275000000000004, 0.8162500000000001, 0.3745000000000003, 0.3769999999999998, 0.3420000000000014, 0.785000000000001, 0.6030000000000006, 0.35274999999999945], zp_timestamp='2026-02-11T20:46:00')
2026-02-11T22:49:04.370 [DEBUG] [Thread-137226] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:49:04.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:49:04.468 [DEBUG] [Thread-137229] [transport.py] [_log()] starting thread (client mode): 0xa2d5e0e0
2026-02-11T22:49:04.468 [DEBUG] [Thread-137229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:49:04.482 [DEBUG] [Thread-137229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:49:04.482 [INFO] [Thread-137229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] client lang: <none>
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] server lang: <none>
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] kex follows: False
2026-02-11T22:49:04.490 [DEBUG] [Thread-137229] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:49:04.491 [DEBUG] [Thread-137229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:49:04.491 [DEBUG] [Thread-137229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:49:04.491 [DEBUG] [Thread-137229] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:49:04.491 [DEBUG] [Thread-137229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:49:04.491 [DEBUG] [Thread-137229] [transport.py] [_log()] Compression: none
2026-02-11T22:49:04.491 [DEBUG] [Thread-137229] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:49:04.549 [DEBUG] [Thread-137229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:49:04.549 [DEBUG] [Thread-137229] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:49:04.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:49:04.550 [DEBUG] [Thread-137229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:49:04.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:49:04.608 [DEBUG] [Thread-137229] [transport.py] [_log()] userauth is OK
2026-02-11T22:49:04.608 [DEBUG] [Thread-137229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:49:04.609 [DEBUG] [Thread-137229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:49:04.609 [DEBUG] [Thread-137229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:49:04.609 [DEBUG] [Thread-137229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:49:04.634 [INFO] [Thread-137229] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:49:04.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:49:04.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:49:05.476 [DEBUG] [Thread-137229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:49:05.476 [DEBUG] [Thread-137229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:49:05.523 [DEBUG] [Thread-137229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:49:05.524 [DEBUG] [Thread-137229] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:49:05.533 [DEBUG] [Thread-137229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:49:05.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:49:05.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')
2026-02-11T22:49:05.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:49:05.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:49:05.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:49:05.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:49:05.574 [DEBUG] [Thread-137229] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:49:13.787 [DEBUG] [Thread-137231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:49:28.837 [DEBUG] [Thread-137232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:49:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:49:35.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:49:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:49:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 49, 10), 0.74, 95.32, 0.0, 14.77, 15.07, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:49:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:49:10
2026-02-11T22:49:37.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:49:38.152 [DEBUG] [Thread-137233] [transport.py] [_log()] starting thread (client mode): 0xa2d69a50
2026-02-11T22:49:38.152 [DEBUG] [Thread-137233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:49:38.171 [DEBUG] [Thread-137233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:49:38.171 [INFO] [Thread-137233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:49:38.174 [DEBUG] [Thread-137233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] client lang: <none>
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] server lang: <none>
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] kex follows: False
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:49:38.175 [DEBUG] [Thread-137233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:49:38.176 [DEBUG] [Thread-137233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:49:38.176 [DEBUG] [Thread-137233] [transport.py] [_log()] Compression: none
2026-02-11T22:49:38.176 [DEBUG] [Thread-137233] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:49:38.187 [DEBUG] [Thread-137233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:49:38.188 [DEBUG] [Thread-137233] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:49:38.188 [DEBUG] [Thread-137233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:49:38.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:49:38.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:49:38.190 [DEBUG] [Thread-137233] [transport.py] [_log()] userauth is OK
2026-02-11T22:49:38.190 [DEBUG] [Thread-137233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:49:38.190 [DEBUG] [Thread-137233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:49:38.190 [DEBUG] [Thread-137233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:49:38.190 [DEBUG] [Thread-137233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:49:38.214 [INFO] [Thread-137233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:49:38.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:49:38.796 [DEBUG] [Thread-137233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:49:38.797 [DEBUG] [Thread-137233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:49:38.797 [DEBUG] [Thread-137233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:49:38.837 [DEBUG] [Thread-137233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:49:38.837 [DEBUG] [Thread-137233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:49:38.841 [DEBUG] [Thread-137233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:49:38.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:49:38.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:49:38.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:49:38.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:49:38.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:49:38.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:49:38.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:49:38.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:49:38.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:49:38.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.867498 -999.00  +15.10   4.81     91  +13.70 1 2 1 3 1     0    0 1.28 -7.66 zNESw 2.9 4.8 207.3 15.8 16.5 -11.4 16.4 -12.1 16.2 -11.0 16.5 -11.6
2026-02-11T22:49:38.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:49:38.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:49:38.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.867498
2026-02-11T22:49:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:49:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:49:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:49:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:49:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:49:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:49:10', tmtdew=0.74, humidity=95.32, cloud=0.0, wind=14.77, temperature=15.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:49:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.7907499999999992, 0.49425000000000097, 0.42125000000000057, 0.40149999999999864, 0.5054999999999996, 0.5772500000000012, 0.8449999999999998, 1.0682500000000008, 0.6014999999999997, 0.45700000000000074, 0.3257499999999993, 0.4239999999999995, 0.35999999999999943, 0.26924999999999955, 0.5469999999999997, 0.5275000000000007, 0.4482499999999998, 0.4894999999999996, 0.4859999999999989, 0.3802499999999984, 0.28999999999999915, 0.30274999999999963, 0.6242500000000009, 0.5342500000000001, 0.43650000000000055, 0.6275000000000004, 0.8162500000000001, 0.3745000000000003, 0.3769999999999998, 0.3420000000000014, 0.785000000000001, 0.6030000000000006, 0.35274999999999945], zp_timestamp='2026-02-11T20:46:00')
2026-02-11T22:49:38.869 [DEBUG] [Thread-137233] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:49:38.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:49:38.966 [DEBUG] [Thread-137236] [transport.py] [_log()] starting thread (client mode): 0xa2d6b310
2026-02-11T22:49:38.966 [DEBUG] [Thread-137236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:49:38.981 [DEBUG] [Thread-137236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:49:38.981 [INFO] [Thread-137236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:49:38.989 [DEBUG] [Thread-137236] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:49:38.989 [DEBUG] [Thread-137236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:49:38.989 [DEBUG] [Thread-137236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:49:38.989 [DEBUG] [Thread-137236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:38.989 [DEBUG] [Thread-137236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:49:38.989 [DEBUG] [Thread-137236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] client lang: <none>
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] server lang: <none>
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] kex follows: False
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] Compression: none
2026-02-11T22:49:38.990 [DEBUG] [Thread-137236] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:49:39.047 [DEBUG] [Thread-137236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:49:39.048 [DEBUG] [Thread-137236] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:49:39.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:49:39.049 [DEBUG] [Thread-137236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:49:39.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:49:39.104 [DEBUG] [Thread-137236] [transport.py] [_log()] userauth is OK
2026-02-11T22:49:39.104 [DEBUG] [Thread-137236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:49:39.104 [DEBUG] [Thread-137236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:49:39.104 [DEBUG] [Thread-137236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:49:39.104 [DEBUG] [Thread-137236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:49:39.122 [INFO] [Thread-137236] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:49:39.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:49:39.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:49:39.932 [DEBUG] [Thread-137236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:49:39.932 [DEBUG] [Thread-137236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:49:39.980 [DEBUG] [Thread-137236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:49:39.981 [DEBUG] [Thread-137236] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:49:39.990 [DEBUG] [Thread-137236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:49:40.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:49:40.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:49:40.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:49:40.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:49:40.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:49:40.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:49:40.030 [DEBUG] [Thread-137236] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:49:43.870 [DEBUG] [Thread-137238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:49:46.239 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:49:46.240 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:49:48.597 [DEBUG] [Thread-137239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:49:58.919 [DEBUG] [Thread-137240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:50:10.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:50:10.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:50:10.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:50:11.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 49, 46), 0.69, 95.27, 0.0, 17.17, 14.95, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:50:11.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:49:46
2026-02-11T22:50:12.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:50:12.418 [DEBUG] [Thread-137241] [transport.py] [_log()] starting thread (client mode): 0xa2d6baf0
2026-02-11T22:50:12.418 [DEBUG] [Thread-137241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:50:12.439 [DEBUG] [Thread-137241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:50:12.439 [INFO] [Thread-137241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:50:12.442 [DEBUG] [Thread-137241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:50:12.442 [DEBUG] [Thread-137241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:50:12.442 [DEBUG] [Thread-137241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:50:12.442 [DEBUG] [Thread-137241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:12.442 [DEBUG] [Thread-137241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] client lang: <none>
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] server lang: <none>
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] kex follows: False
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:50:12.443 [DEBUG] [Thread-137241] [transport.py] [_log()] Compression: none
2026-02-11T22:50:12.444 [DEBUG] [Thread-137241] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:50:12.462 [DEBUG] [Thread-137241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:50:12.463 [DEBUG] [Thread-137241] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:50:12.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:50:12.464 [DEBUG] [Thread-137241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:50:12.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:50:12.466 [DEBUG] [Thread-137241] [transport.py] [_log()] userauth is OK
2026-02-11T22:50:12.467 [DEBUG] [Thread-137241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:50:12.467 [DEBUG] [Thread-137241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:50:12.467 [DEBUG] [Thread-137241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:50:12.467 [DEBUG] [Thread-137241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:50:12.491 [INFO] [Thread-137241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:50:12.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:50:13.099 [DEBUG] [Thread-137241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:50:13.099 [DEBUG] [Thread-137241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:50:13.099 [DEBUG] [Thread-137241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:50:13.141 [DEBUG] [Thread-137241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:50:13.141 [DEBUG] [Thread-137241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:50:13.142 [DEBUG] [Thread-137241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:50:13.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:50:13.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:50:13.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:50:13.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:50:13.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:50:13.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:50:13.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:50:13.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:50:13.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:50:13.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.867845 -999.00  +15.20   8.96     91  +13.70 1 3 1 3 1     0    0 1.29 -7.66 zNESw 6.5 9.0 215.0 14.8 16.6 -10.2 16.4 -9.7 16.2 -9.7 16.5 -10.4
2026-02-11T22:50:13.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:50:13.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:50:13.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.867845
2026-02-11T22:50:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:50:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:50:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:50:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:50:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:50:13.166 [DEBUG] [Thread-137241] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:50:13.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:49:46', tmtdew=0.69, humidity=95.27, cloud=0.0, wind=17.17, temperature=14.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:49:41.808', atlas_cloud=3, atlas_rain=1, zp_data=[0.7907499999999992, 0.49425000000000097, 0.42125000000000057, 0.40149999999999864, 0.5054999999999996, 0.5772500000000012, 0.8449999999999998, 1.0682500000000008, 0.6014999999999997, 0.45700000000000074, 0.3257499999999993, 0.4239999999999995, 0.35999999999999943, 0.26924999999999955, 0.5469999999999997, 0.5275000000000007, 0.4482499999999998, 0.4894999999999996, 0.4859999999999989, 0.3802499999999984, 0.28999999999999915, 0.30274999999999963, 0.6242500000000009, 0.5342500000000001, 0.43650000000000055, 0.6275000000000004, 0.8162500000000001, 0.3745000000000003, 0.3769999999999998, 0.3420000000000014, 0.785000000000001, 0.6030000000000006, 0.35274999999999945], zp_timestamp='2026-02-11T20:46:00')
2026-02-11T22:50:13.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:50:13.265 [DEBUG] [Thread-137244] [transport.py] [_log()] starting thread (client mode): 0x9eb07a60
2026-02-11T22:50:13.265 [DEBUG] [Thread-137244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:50:13.280 [DEBUG] [Thread-137244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:50:13.280 [INFO] [Thread-137244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] client lang: <none>
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] server lang: <none>
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] kex follows: False
2026-02-11T22:50:13.288 [DEBUG] [Thread-137244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:50:13.289 [DEBUG] [Thread-137244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:50:13.289 [DEBUG] [Thread-137244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:50:13.289 [DEBUG] [Thread-137244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:50:13.289 [DEBUG] [Thread-137244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:50:13.289 [DEBUG] [Thread-137244] [transport.py] [_log()] Compression: none
2026-02-11T22:50:13.289 [DEBUG] [Thread-137244] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:50:13.347 [DEBUG] [Thread-137244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:50:13.348 [DEBUG] [Thread-137244] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:50:13.348 [DEBUG] [Thread-137244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:50:13.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:50:13.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:50:13.404 [DEBUG] [Thread-137244] [transport.py] [_log()] userauth is OK
2026-02-11T22:50:13.404 [DEBUG] [Thread-137244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:50:13.404 [DEBUG] [Thread-137244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:50:13.404 [DEBUG] [Thread-137244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:50:13.404 [DEBUG] [Thread-137244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:50:13.422 [INFO] [Thread-137244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:50:13.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:50:13.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:50:13.956 [DEBUG] [Thread-137246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:50:14.243 [DEBUG] [Thread-137244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:50:14.243 [DEBUG] [Thread-137244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:50:14.293 [DEBUG] [Thread-137244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:50:14.293 [DEBUG] [Thread-137244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:50:14.302 [DEBUG] [Thread-137244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:50:14.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:50:14.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:50:14.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:50:14.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:50:14.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:50:14.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:50:14.339 [DEBUG] [Thread-137244] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:50:29.011 [DEBUG] [Thread-137247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:50:44.050 [DEBUG] [Thread-137248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:50:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:50:44.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:50:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:50:46.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:50:46.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:50:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 50, 21), 0.69, 95.27, 0.0, 15.39, 14.92, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:50:46.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:50:21
2026-02-11T22:50:47.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:50:47.197 [DEBUG] [Thread-137249] [transport.py] [_log()] starting thread (client mode): 0x9eb05060
2026-02-11T22:50:47.197 [DEBUG] [Thread-137249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:50:47.215 [DEBUG] [Thread-137249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:50:47.215 [INFO] [Thread-137249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] client lang: <none>
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] server lang: <none>
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] kex follows: False
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] Compression: none
2026-02-11T22:50:47.217 [DEBUG] [Thread-137249] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:50:47.224 [DEBUG] [Thread-137249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:50:47.224 [DEBUG] [Thread-137249] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:50:47.224 [DEBUG] [Thread-137249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:50:47.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:50:47.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:50:47.225 [DEBUG] [Thread-137249] [transport.py] [_log()] userauth is OK
2026-02-11T22:50:47.225 [DEBUG] [Thread-137249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:50:47.225 [DEBUG] [Thread-137249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:50:47.225 [DEBUG] [Thread-137249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:50:47.225 [DEBUG] [Thread-137249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:50:47.236 [INFO] [Thread-137249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:50:47.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:50:47.836 [DEBUG] [Thread-137249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:50:47.836 [DEBUG] [Thread-137249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:50:47.836 [DEBUG] [Thread-137249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:50:47.877 [DEBUG] [Thread-137249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:50:47.877 [DEBUG] [Thread-137249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:50:47.879 [DEBUG] [Thread-137249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:50:47.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:50:47.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:50:47.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:50:47.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:50:47.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:50:47.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:50:47.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:50:47.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:50:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:50:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.868539 -999.00  +15.20   4.95     91  +13.80 1 2 1 3 1     0    0 1.28 -7.94 zNe.W 5.6 5.0 215.1 11.1 16.6 -9.7 16.4 -11.5 16.2 -9.8 16.6 -10.2
2026-02-11T22:50:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:50:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:50:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.868539
2026-02-11T22:50:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:50:47.901 [DEBUG] [Thread-137249] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:50:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:50:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:50:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:50:47.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:50:47.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:50:21', tmtdew=0.69, humidity=95.27, cloud=0.0, wind=15.39, temperature=14.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:50:41.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.7907499999999992, 0.49425000000000097, 0.42125000000000057, 0.40149999999999864, 0.5054999999999996, 0.5772500000000012, 0.8449999999999998, 1.0682500000000008, 0.6014999999999997, 0.45700000000000074, 0.3257499999999993, 0.4239999999999995, 0.35999999999999943, 0.26924999999999955, 0.5469999999999997, 0.5275000000000007, 0.4482499999999998, 0.4894999999999996, 0.4859999999999989, 0.3802499999999984, 0.28999999999999915, 0.30274999999999963, 0.6242500000000009, 0.5342500000000001, 0.43650000000000055, 0.6275000000000004, 0.8162500000000001, 0.3745000000000003, 0.3769999999999998, 0.3420000000000014, 0.785000000000001, 0.6030000000000006, 0.35274999999999945], zp_timestamp='2026-02-11T20:46:00')
2026-02-11T22:50:47.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:50:48.001 [DEBUG] [Thread-137252] [transport.py] [_log()] starting thread (client mode): 0xa2d05240
2026-02-11T22:50:48.001 [DEBUG] [Thread-137252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:50:48.016 [DEBUG] [Thread-137252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:50:48.016 [INFO] [Thread-137252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] client lang: <none>
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] server lang: <none>
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] kex follows: False
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:50:48.024 [DEBUG] [Thread-137252] [transport.py] [_log()] Compression: none
2026-02-11T22:50:48.025 [DEBUG] [Thread-137252] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:50:48.087 [DEBUG] [Thread-137252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:50:48.087 [DEBUG] [Thread-137252] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:50:48.088 [DEBUG] [Thread-137252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:50:48.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:50:48.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:50:48.143 [DEBUG] [Thread-137252] [transport.py] [_log()] userauth is OK
2026-02-11T22:50:48.143 [DEBUG] [Thread-137252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:50:48.144 [DEBUG] [Thread-137252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:50:48.144 [DEBUG] [Thread-137252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:50:48.144 [DEBUG] [Thread-137252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:50:48.163 [INFO] [Thread-137252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:50:48.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:50:48.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:50:48.665 [DEBUG] [Thread-137254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:50:49.019 [DEBUG] [Thread-137252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:50:49.019 [DEBUG] [Thread-137252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:50:49.067 [DEBUG] [Thread-137252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:50:49.068 [DEBUG] [Thread-137252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:50:49.078 [DEBUG] [Thread-137252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:50:49.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:50:49.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:50:49.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:50:49.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:50:49.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:50:49.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:50:49.116 [DEBUG] [Thread-137252] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:50:59.087 [DEBUG] [Thread-137255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:51:14.140 [DEBUG] [Thread-137256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:51:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:51:19.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:51:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:51:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 50, 57), 0.69, 95.31, 0.0, 18.03, 14.95, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:51:20.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:50:57
2026-02-11T22:51:21.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:51:21.473 [DEBUG] [Thread-137257] [transport.py] [_log()] starting thread (client mode): 0xa2d6b910
2026-02-11T22:51:21.473 [DEBUG] [Thread-137257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:51:21.494 [DEBUG] [Thread-137257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:51:21.494 [INFO] [Thread-137257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] client lang: <none>
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] server lang: <none>
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] kex follows: False
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] Compression: none
2026-02-11T22:51:21.496 [DEBUG] [Thread-137257] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:51:21.508 [DEBUG] [Thread-137257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:51:21.509 [DEBUG] [Thread-137257] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:51:21.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:51:21.510 [DEBUG] [Thread-137257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:51:21.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:51:21.512 [DEBUG] [Thread-137257] [transport.py] [_log()] userauth is OK
2026-02-11T22:51:21.512 [DEBUG] [Thread-137257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:51:21.512 [DEBUG] [Thread-137257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:51:21.512 [DEBUG] [Thread-137257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:51:21.512 [DEBUG] [Thread-137257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:51:21.536 [INFO] [Thread-137257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:51:21.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:51:22.128 [DEBUG] [Thread-137257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:51:22.128 [DEBUG] [Thread-137257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:51:22.129 [DEBUG] [Thread-137257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:51:22.169 [DEBUG] [Thread-137257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:51:22.170 [DEBUG] [Thread-137257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:51:22.173 [DEBUG] [Thread-137257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:51:22.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:51:22.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:51:22.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:51:22.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:51:22.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:51:22.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:51:22.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:51:22.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:51:22.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:51:22.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.868886 -999.00  +15.20   7.34     91  +13.80 1 2 1 3 1     0    0 1.22 -8.71 zNe.W 10.2 7.3 178.9 10.6 16.6 -13.8 16.4 -12.2 16.3 -13.3 16.5 -13.1
2026-02-11T22:51:22.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:51:22.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:51:22.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.868886
2026-02-11T22:51:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:51:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:51:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:51:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:51:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:51:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:50:57', tmtdew=0.69, humidity=95.31, cloud=0.0, wind=18.03, temperature=14.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:51:11.750', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:49:00')
2026-02-11T22:51:22.197 [DEBUG] [Thread-137257] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:51:22.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:51:22.290 [DEBUG] [Thread-137260] [transport.py] [_log()] starting thread (client mode): 0x9eb063e0
2026-02-11T22:51:22.290 [DEBUG] [Thread-137260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:51:22.305 [DEBUG] [Thread-137260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:51:22.305 [INFO] [Thread-137260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] client lang: <none>
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] server lang: <none>
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] kex follows: False
2026-02-11T22:51:22.313 [DEBUG] [Thread-137260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:51:22.314 [DEBUG] [Thread-137260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:51:22.314 [DEBUG] [Thread-137260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:51:22.314 [DEBUG] [Thread-137260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:51:22.314 [DEBUG] [Thread-137260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:51:22.314 [DEBUG] [Thread-137260] [transport.py] [_log()] Compression: none
2026-02-11T22:51:22.314 [DEBUG] [Thread-137260] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:51:22.371 [DEBUG] [Thread-137260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:51:22.372 [DEBUG] [Thread-137260] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:51:22.372 [DEBUG] [Thread-137260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:51:22.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:51:22.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:51:22.431 [DEBUG] [Thread-137260] [transport.py] [_log()] userauth is OK
2026-02-11T22:51:22.431 [DEBUG] [Thread-137260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:51:22.432 [DEBUG] [Thread-137260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:51:22.432 [DEBUG] [Thread-137260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:51:22.432 [DEBUG] [Thread-137260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:51:22.457 [INFO] [Thread-137260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:51:22.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:51:22.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:51:23.260 [DEBUG] [Thread-137260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:51:23.260 [DEBUG] [Thread-137260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:51:23.309 [DEBUG] [Thread-137260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:51:23.309 [DEBUG] [Thread-137260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:51:23.318 [DEBUG] [Thread-137260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:51:23.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:51:23.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:51:23.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:51:23.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:51:23.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:51:23.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:51:23.351 [DEBUG] [Thread-137260] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:51:29.176 [DEBUG] [Thread-137262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:51:44.223 [DEBUG] [Thread-137263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:51:46.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:51:46.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:51:48.734 [DEBUG] [Thread-137264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:51:53.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:51:53.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:51:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:51:55.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 51, 32), 0.69, 95.32, 0.0, 15.72, 14.95, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:51:55.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:51:32
2026-02-11T22:51:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:51:55.977 [DEBUG] [Thread-137265] [transport.py] [_log()] starting thread (client mode): 0xa57b0b80
2026-02-11T22:51:55.977 [DEBUG] [Thread-137265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:51:55.996 [DEBUG] [Thread-137265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:51:55.996 [INFO] [Thread-137265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:51:55.999 [DEBUG] [Thread-137265] [transport.py] [_log()] client lang: <none>
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] server lang: <none>
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] kex follows: False
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] Compression: none
2026-02-11T22:51:56.000 [DEBUG] [Thread-137265] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:51:56.018 [DEBUG] [Thread-137265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:51:56.019 [DEBUG] [Thread-137265] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:51:56.020 [DEBUG] [Thread-137265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:51:56.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:51:56.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:51:56.022 [DEBUG] [Thread-137265] [transport.py] [_log()] userauth is OK
2026-02-11T22:51:56.023 [DEBUG] [Thread-137265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:51:56.023 [DEBUG] [Thread-137265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:51:56.023 [DEBUG] [Thread-137265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:51:56.023 [DEBUG] [Thread-137265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:51:56.039 [INFO] [Thread-137265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:51:56.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:51:56.615 [DEBUG] [Thread-137265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:51:56.616 [DEBUG] [Thread-137265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:51:56.616 [DEBUG] [Thread-137265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:51:56.656 [DEBUG] [Thread-137265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:51:56.656 [DEBUG] [Thread-137265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:51:56.659 [DEBUG] [Thread-137265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:51:56.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:51:56.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:51:56.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:51:56.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:51:56.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:51:56.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:51:56.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:51:56.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:51:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:51:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.869234 -999.00  +15.20  13.38     91  +13.70 1 2 1 3 1     0    0 1.23 -9.29 Zn.sW 16.2 13.4 198.0 20.1 16.6 -16.2 16.4 -14.1 16.2 -14.8 16.6 -15.4
2026-02-11T22:51:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:51:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:51:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.869234
2026-02-11T22:51:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:51:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:51:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:51:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:51:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:51:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:51:32', tmtdew=0.69, humidity=95.32, cloud=0.0, wind=15.72, temperature=14.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:51:41.818', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:49:00')
2026-02-11T22:51:56.689 [DEBUG] [Thread-137265] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:51:56.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:51:56.787 [DEBUG] [Thread-137268] [transport.py] [_log()] starting thread (client mode): 0xa2d973a0
2026-02-11T22:51:56.788 [DEBUG] [Thread-137268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:51:56.803 [DEBUG] [Thread-137268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:51:56.803 [INFO] [Thread-137268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:51:56.810 [DEBUG] [Thread-137268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] client lang: <none>
2026-02-11T22:51:56.811 [DEBUG] [Thread-137268] [transport.py] [_log()] server lang: <none>
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] kex follows: False
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] Compression: none
2026-02-11T22:51:56.812 [DEBUG] [Thread-137268] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:51:56.871 [DEBUG] [Thread-137268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:51:56.872 [DEBUG] [Thread-137268] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:51:56.872 [DEBUG] [Thread-137268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:51:56.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:51:56.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:51:56.927 [DEBUG] [Thread-137268] [transport.py] [_log()] userauth is OK
2026-02-11T22:51:56.928 [DEBUG] [Thread-137268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:51:56.928 [DEBUG] [Thread-137268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:51:56.928 [DEBUG] [Thread-137268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:51:56.928 [DEBUG] [Thread-137268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:51:56.953 [INFO] [Thread-137268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:51:56.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:51:56.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:51:57.747 [DEBUG] [Thread-137268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:51:57.747 [DEBUG] [Thread-137268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:51:57.795 [DEBUG] [Thread-137268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:51:57.796 [DEBUG] [Thread-137268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:51:57.805 [DEBUG] [Thread-137268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:51:57.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:51:57.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:51:57.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
2026-02-11T22:51:57.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:51:57.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:51:57.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:51:57.842 [DEBUG] [Thread-137268] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:51:59.259 [DEBUG] [Thread-137270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:52:14.302 [DEBUG] [Thread-137271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:52:27.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:52:27.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:52:27.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:52:29.339 [DEBUG] [Thread-137272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:52:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 52, 8), 0.69, 95.32, 0.0, 17.4, 14.97, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:52:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:52:08
2026-02-11T22:52:30.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:52:30.653 [DEBUG] [Thread-137273] [transport.py] [_log()] starting thread (client mode): 0xa57e3010
2026-02-11T22:52:30.653 [DEBUG] [Thread-137273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:52:30.669 [DEBUG] [Thread-137273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:52:30.669 [INFO] [Thread-137273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:52:30.670 [DEBUG] [Thread-137273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:52:30.670 [DEBUG] [Thread-137273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:52:30.670 [DEBUG] [Thread-137273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:52:30.670 [DEBUG] [Thread-137273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:52:30.670 [DEBUG] [Thread-137273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:52:30.670 [DEBUG] [Thread-137273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:52:30.670 [DEBUG] [Thread-137273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] client lang: <none>
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] server lang: <none>
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] kex follows: False
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] Compression: none
2026-02-11T22:52:30.671 [DEBUG] [Thread-137273] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:52:30.679 [DEBUG] [Thread-137273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:52:30.680 [DEBUG] [Thread-137273] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:52:30.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:52:30.681 [DEBUG] [Thread-137273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:52:30.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:52:30.683 [DEBUG] [Thread-137273] [transport.py] [_log()] userauth is OK
2026-02-11T22:52:30.683 [DEBUG] [Thread-137273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:52:30.683 [DEBUG] [Thread-137273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:52:30.683 [DEBUG] [Thread-137273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:52:30.684 [DEBUG] [Thread-137273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:52:30.702 [INFO] [Thread-137273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:52:30.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:52:31.264 [DEBUG] [Thread-137273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:52:31.265 [DEBUG] [Thread-137273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:52:31.265 [DEBUG] [Thread-137273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:52:31.305 [DEBUG] [Thread-137273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:52:31.306 [DEBUG] [Thread-137273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:52:31.310 [DEBUG] [Thread-137273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:52:31.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:52:31.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:52:31.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:52:31.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:52:31.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:52:31.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:52:31.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:52:31.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:52:31.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:52:31.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.869581 -999.00  +15.10  18.45     91  +13.60 1 2 1 3 1     0    0 1.23 -8.98 Z.ESW 13.9 18.4 190.4 19.6 16.5 -16.1 16.4 -16.4 16.2 -16.0 16.4 -17.0
2026-02-11T22:52:31.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:52:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:52:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.869581
2026-02-11T22:52:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:52:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:52:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:52:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:52:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:52:31.335 [DEBUG] [Thread-137273] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:52:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:52:08', tmtdew=0.69, humidity=95.32, cloud=0.0, wind=17.4, temperature=14.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:52:11.798', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:49:00')
2026-02-11T22:52:31.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:52:31.431 [DEBUG] [Thread-137276] [transport.py] [_log()] starting thread (client mode): 0xa2d9feb0
2026-02-11T22:52:31.431 [DEBUG] [Thread-137276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:52:31.446 [DEBUG] [Thread-137276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:52:31.446 [INFO] [Thread-137276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] client lang: <none>
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] server lang: <none>
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] kex follows: False
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:52:31.454 [DEBUG] [Thread-137276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:52:31.455 [DEBUG] [Thread-137276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:52:31.455 [DEBUG] [Thread-137276] [transport.py] [_log()] Compression: none
2026-02-11T22:52:31.455 [DEBUG] [Thread-137276] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:52:31.511 [DEBUG] [Thread-137276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:52:31.512 [DEBUG] [Thread-137276] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:52:31.512 [DEBUG] [Thread-137276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:52:31.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:52:31.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:52:31.567 [DEBUG] [Thread-137276] [transport.py] [_log()] userauth is OK
2026-02-11T22:52:31.568 [DEBUG] [Thread-137276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:52:31.568 [DEBUG] [Thread-137276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:52:31.568 [DEBUG] [Thread-137276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:52:31.568 [DEBUG] [Thread-137276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:52:31.586 [INFO] [Thread-137276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:52:31.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:52:31.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:52:32.437 [DEBUG] [Thread-137276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:52:32.437 [DEBUG] [Thread-137276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:52:32.485 [DEBUG] [Thread-137276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:52:32.485 [DEBUG] [Thread-137276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:52:32.494 [DEBUG] [Thread-137276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:52:32.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:52:32.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:52:32.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:52:32.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:52:32.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:52:32.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:52:32.531 [DEBUG] [Thread-137276] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:52:44.377 [DEBUG] [Thread-137278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:52:46.857 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:52:46.858 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:52:48.792 [DEBUG] [Thread-137279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:52:59.437 [DEBUG] [Thread-137280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:53:02.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:53:02.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:53:02.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:53:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 52, 44), 0.68, 95.87, 0.0, 16.2, 14.92, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:53:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:52:44
2026-02-11T22:53:04.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:53:04.958 [DEBUG] [Thread-137281] [transport.py] [_log()] starting thread (client mode): 0xa2d9da20
2026-02-11T22:53:04.958 [DEBUG] [Thread-137281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:53:04.979 [DEBUG] [Thread-137281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:53:04.979 [INFO] [Thread-137281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:53:04.982 [DEBUG] [Thread-137281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:53:04.982 [DEBUG] [Thread-137281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:53:04.982 [DEBUG] [Thread-137281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:53:04.982 [DEBUG] [Thread-137281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] client lang: <none>
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] server lang: <none>
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] kex follows: False
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] Compression: none
2026-02-11T22:53:04.983 [DEBUG] [Thread-137281] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:53:04.992 [DEBUG] [Thread-137281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:53:04.992 [DEBUG] [Thread-137281] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:53:04.993 [DEBUG] [Thread-137281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:53:04.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:53:04.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:53:04.994 [DEBUG] [Thread-137281] [transport.py] [_log()] userauth is OK
2026-02-11T22:53:04.994 [DEBUG] [Thread-137281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:53:04.995 [DEBUG] [Thread-137281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:53:04.995 [DEBUG] [Thread-137281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:53:04.995 [DEBUG] [Thread-137281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:53:05.013 [INFO] [Thread-137281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:53:05.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:53:05.600 [DEBUG] [Thread-137281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:53:05.600 [DEBUG] [Thread-137281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:53:05.601 [DEBUG] [Thread-137281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:53:05.641 [DEBUG] [Thread-137281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:53:05.642 [DEBUG] [Thread-137281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:53:05.645 [DEBUG] [Thread-137281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:53:05.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:53:05.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:53:05.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:53:05.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:53:05.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:53:05.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:53:05.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:53:05.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:53:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:53:05.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.869581 -999.00  +15.10  18.45     91  +13.60 1 2 1 3 1     0    0 1.23 -8.98 Z.ESW 13.9 18.4 190.4 19.6 16.5 -16.1 16.4 -16.4 16.2 -16.0 16.4 -17.0
2026-02-11T22:53:05.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:53:05.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:53:05.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.869581
2026-02-11T22:53:05.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:53:05.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:53:05.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:53:05.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:53:05.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:53:05.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:52:44', tmtdew=0.68, humidity=95.87, cloud=0.0, wind=16.2, temperature=14.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:52:11.798', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:49:00')
2026-02-11T22:53:05.664 [DEBUG] [Thread-137281] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:53:05.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:53:05.760 [DEBUG] [Thread-137284] [transport.py] [_log()] starting thread (client mode): 0xa2d05a20
2026-02-11T22:53:05.760 [DEBUG] [Thread-137284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:53:05.779 [DEBUG] [Thread-137284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:53:05.779 [INFO] [Thread-137284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:53:05.786 [DEBUG] [Thread-137284] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] client lang: <none>
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] server lang: <none>
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] kex follows: False
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:53:05.787 [DEBUG] [Thread-137284] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:53:05.788 [DEBUG] [Thread-137284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:53:05.788 [DEBUG] [Thread-137284] [transport.py] [_log()] Compression: none
2026-02-11T22:53:05.788 [DEBUG] [Thread-137284] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:53:05.844 [DEBUG] [Thread-137284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:53:05.844 [DEBUG] [Thread-137284] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:53:05.845 [DEBUG] [Thread-137284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:53:05.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:53:05.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:53:05.900 [DEBUG] [Thread-137284] [transport.py] [_log()] userauth is OK
2026-02-11T22:53:05.900 [DEBUG] [Thread-137284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:53:05.900 [DEBUG] [Thread-137284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:53:05.900 [DEBUG] [Thread-137284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:53:05.900 [DEBUG] [Thread-137284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:53:05.919 [INFO] [Thread-137284] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:53:05.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:53:05.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:53:06.784 [DEBUG] [Thread-137284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:53:06.784 [DEBUG] [Thread-137284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:53:06.832 [DEBUG] [Thread-137284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:53:06.832 [DEBUG] [Thread-137284] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:53:06.841 [DEBUG] [Thread-137284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:53:06.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:53:06.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:53:06.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:53:06.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:53:06.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:53:06.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:53:06.872 [DEBUG] [Thread-137284] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:53:14.476 [DEBUG] [Thread-137286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:53:29.524 [DEBUG] [Thread-137287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:53:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:53:36.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:53:36.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
2026-02-11T22:53:38.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 53, 19), 0.68, 95.86, 0.0, 17.29, 14.9, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:53:38.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:53:19
2026-02-11T22:53:39.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:53:39.316 [DEBUG] [Thread-137288] [transport.py] [_log()] starting thread (client mode): 0xa2d06e60
2026-02-11T22:53:39.316 [DEBUG] [Thread-137288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:53:39.337 [DEBUG] [Thread-137288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:53:39.337 [INFO] [Thread-137288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:53:39.340 [DEBUG] [Thread-137288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:53:39.340 [DEBUG] [Thread-137288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:53:39.340 [DEBUG] [Thread-137288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:53:39.340 [DEBUG] [Thread-137288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:39.340 [DEBUG] [Thread-137288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:39.340 [DEBUG] [Thread-137288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:39.340 [DEBUG] [Thread-137288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] client lang: <none>
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] server lang: <none>
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] kex follows: False
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] Compression: none
2026-02-11T22:53:39.341 [DEBUG] [Thread-137288] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:53:39.360 [DEBUG] [Thread-137288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:53:39.361 [DEBUG] [Thread-137288] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:53:39.361 [DEBUG] [Thread-137288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:53:39.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:53:39.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:53:39.363 [DEBUG] [Thread-137288] [transport.py] [_log()] userauth is OK
2026-02-11T22:53:39.364 [DEBUG] [Thread-137288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:53:39.364 [DEBUG] [Thread-137288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:53:39.364 [DEBUG] [Thread-137288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:53:39.364 [DEBUG] [Thread-137288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:53:39.389 [INFO] [Thread-137288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:53:39.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:53:40.016 [DEBUG] [Thread-137288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:53:40.017 [DEBUG] [Thread-137288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:53:40.017 [DEBUG] [Thread-137288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:53:40.058 [DEBUG] [Thread-137288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:53:40.058 [DEBUG] [Thread-137288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:53:40.062 [DEBUG] [Thread-137288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:53:40.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:53:40.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:53:40.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:53:40.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:53:40.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:53:40.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:53:40.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:53:40.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:53:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:53:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.869928 -999.00  +15.10  16.16     91  +13.60 1 2 1 3 1     0    0 1.26 -8.13 Z.ESW 13.9 16.2 195.8 20.7 16.6 -13.3 16.3 -15.3 16.2 -13.6 16.5 -14.4
2026-02-11T22:53:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:53:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:53:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.869928
2026-02-11T22:53:40.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:53:40.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:53:40.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:53:40.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:53:40.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:53:40.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:53:19', tmtdew=0.68, humidity=95.86, cloud=0.0, wind=17.29, temperature=14.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:52:41.779', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:49:00')
2026-02-11T22:53:40.090 [DEBUG] [Thread-137288] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:53:40.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:53:40.185 [DEBUG] [Thread-137291] [transport.py] [_log()] starting thread (client mode): 0xa2d9dc00
2026-02-11T22:53:40.186 [DEBUG] [Thread-137291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:53:40.200 [DEBUG] [Thread-137291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:53:40.200 [INFO] [Thread-137291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:53:40.207 [DEBUG] [Thread-137291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] client lang: <none>
2026-02-11T22:53:40.208 [DEBUG] [Thread-137291] [transport.py] [_log()] server lang: <none>
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] kex follows: False
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] Compression: none
2026-02-11T22:53:40.209 [DEBUG] [Thread-137291] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:53:40.264 [DEBUG] [Thread-137291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:53:40.264 [DEBUG] [Thread-137291] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:53:40.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:53:40.265 [DEBUG] [Thread-137291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:53:40.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:53:40.322 [DEBUG] [Thread-137291] [transport.py] [_log()] userauth is OK
2026-02-11T22:53:40.322 [DEBUG] [Thread-137291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:53:40.322 [DEBUG] [Thread-137291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:53:40.323 [DEBUG] [Thread-137291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:53:40.323 [DEBUG] [Thread-137291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:53:40.341 [INFO] [Thread-137291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:53:40.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:53:40.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:53:41.142 [DEBUG] [Thread-137291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:53:41.142 [DEBUG] [Thread-137291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:53:41.190 [DEBUG] [Thread-137291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:53:41.191 [DEBUG] [Thread-137291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:53:41.200 [DEBUG] [Thread-137291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:53:41.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:53:41.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:53:41.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:53:41.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:53:41.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:53:41.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:53:41.242 [DEBUG] [Thread-137291] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:53:44.558 [DEBUG] [Thread-137293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:53:47.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:53:47.062 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:53:48.853 [DEBUG] [Thread-137294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:53:59.614 [DEBUG] [Thread-137295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:54:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:54:11.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:54:11.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:54:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 53, 55), 0.68, 95.87, 0.0, 18.49, 14.88, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:54:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:53:55
2026-02-11T22:54:13.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:54:13.562 [DEBUG] [Thread-137296] [transport.py] [_log()] starting thread (client mode): 0xa2d696f0
2026-02-11T22:54:13.562 [DEBUG] [Thread-137296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:54:13.583 [DEBUG] [Thread-137296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:54:13.583 [INFO] [Thread-137296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] client lang: <none>
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] server lang: <none>
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] kex follows: False
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:54:13.587 [DEBUG] [Thread-137296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:54:13.588 [DEBUG] [Thread-137296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:54:13.588 [DEBUG] [Thread-137296] [transport.py] [_log()] Compression: none
2026-02-11T22:54:13.588 [DEBUG] [Thread-137296] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:54:13.605 [DEBUG] [Thread-137296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:54:13.605 [DEBUG] [Thread-137296] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:54:13.606 [DEBUG] [Thread-137296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:54:13.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:54:13.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:54:13.608 [DEBUG] [Thread-137296] [transport.py] [_log()] userauth is OK
2026-02-11T22:54:13.608 [DEBUG] [Thread-137296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:54:13.608 [DEBUG] [Thread-137296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:54:13.608 [DEBUG] [Thread-137296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:54:13.608 [DEBUG] [Thread-137296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:54:13.632 [INFO] [Thread-137296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:54:13.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:54:14.279 [DEBUG] [Thread-137296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:54:14.280 [DEBUG] [Thread-137296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:54:14.280 [DEBUG] [Thread-137296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:54:14.321 [DEBUG] [Thread-137296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:54:14.321 [DEBUG] [Thread-137296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:54:14.324 [DEBUG] [Thread-137296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:54:14.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:54:14.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:54:14.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:54:14.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:54:14.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:54:14.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:54:14.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:54:14.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:54:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:54:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.870275 -999.00  +15.10  14.35     91  +13.70 1 2 1 3 1     0    0 1.24 -8.36 ZnESw 9.5 14.3 201.4 20.6 16.5 -11.6 16.3 -13.1 16.1 -12.6 16.4 -13.0
2026-02-11T22:54:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:54:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:54:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.870275
2026-02-11T22:54:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:54:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:54:14.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:54:14.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:54:14.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:54:14.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:53:55', tmtdew=0.68, humidity=95.87, cloud=0.0, wind=18.49, temperature=14.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:53:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:52:00')
2026-02-11T22:54:14.353 [DEBUG] [Thread-137296] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:54:14.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:54:14.451 [DEBUG] [Thread-137299] [transport.py] [_log()] starting thread (client mode): 0xa57b0760
2026-02-11T22:54:14.451 [DEBUG] [Thread-137299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:54:14.466 [DEBUG] [Thread-137299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:54:14.466 [INFO] [Thread-137299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] client lang: <none>
2026-02-11T22:54:14.474 [DEBUG] [Thread-137299] [transport.py] [_log()] server lang: <none>
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] kex follows: False
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] Compression: none
2026-02-11T22:54:14.475 [DEBUG] [Thread-137299] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:54:14.533 [DEBUG] [Thread-137299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:54:14.533 [DEBUG] [Thread-137299] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:54:14.534 [DEBUG] [Thread-137299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:54:14.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:54:14.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:54:14.589 [DEBUG] [Thread-137299] [transport.py] [_log()] userauth is OK
2026-02-11T22:54:14.589 [DEBUG] [Thread-137299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:54:14.590 [DEBUG] [Thread-137299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:54:14.590 [DEBUG] [Thread-137299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:54:14.590 [DEBUG] [Thread-137299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:54:14.609 [INFO] [Thread-137299] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:54:14.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:54:14.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:54:14.651 [DEBUG] [Thread-137301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:54:15.468 [DEBUG] [Thread-137299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:54:15.468 [DEBUG] [Thread-137299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:54:15.516 [DEBUG] [Thread-137299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:54:15.516 [DEBUG] [Thread-137299] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:54:15.524 [DEBUG] [Thread-137299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:54:15.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:54:15.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:54:15.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:54:15.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:54:15.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:54:15.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:54:15.557 [DEBUG] [Thread-137299] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:54:29.708 [DEBUG] [Thread-137302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:54:44.746 [DEBUG] [Thread-137303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:54:45.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:54:45.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:54:45.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:54:47.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:54:47.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:54:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 54, 31), 0.68, 95.87, 0.0, 19.66, 14.85, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:54:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:54:31
2026-02-11T22:54:47.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:54:47.935 [DEBUG] [Thread-137304] [transport.py] [_log()] starting thread (client mode): 0xa2d4d060
2026-02-11T22:54:47.935 [DEBUG] [Thread-137304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:54:47.954 [DEBUG] [Thread-137304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:54:47.954 [INFO] [Thread-137304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] client lang: <none>
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] server lang: <none>
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] kex follows: False
2026-02-11T22:54:47.957 [DEBUG] [Thread-137304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:54:47.958 [DEBUG] [Thread-137304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:54:47.958 [DEBUG] [Thread-137304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:54:47.958 [DEBUG] [Thread-137304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:54:47.958 [DEBUG] [Thread-137304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:54:47.958 [DEBUG] [Thread-137304] [transport.py] [_log()] Compression: none
2026-02-11T22:54:47.958 [DEBUG] [Thread-137304] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:54:47.975 [DEBUG] [Thread-137304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:54:47.976 [DEBUG] [Thread-137304] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:54:47.976 [DEBUG] [Thread-137304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:54:47.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:54:47.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:54:47.978 [DEBUG] [Thread-137304] [transport.py] [_log()] userauth is OK
2026-02-11T22:54:47.978 [DEBUG] [Thread-137304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:54:47.978 [DEBUG] [Thread-137304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:54:47.978 [DEBUG] [Thread-137304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:54:47.978 [DEBUG] [Thread-137304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:54:47.993 [INFO] [Thread-137304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:54:47.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:54:48.757 [DEBUG] [Thread-137304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:54:48.757 [DEBUG] [Thread-137304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:54:48.758 [DEBUG] [Thread-137304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:54:48.799 [DEBUG] [Thread-137304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:54:48.799 [DEBUG] [Thread-137304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:54:48.802 [DEBUG] [Thread-137304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:54:48.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:54:48.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:54:48.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:54:48.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:54:48.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:54:48.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:54:48.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:54:48.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:54:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:54:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.870970 -999.00  +15.10  13.34     91  +13.70 1 2 1 3 1     0    0 1.25 -8.19 Zn.SW 13.4 13.3 193.2 16.1 16.5 -12.8 16.2 -12.5 16.1 -12.3 16.4 -12.9
2026-02-11T22:54:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:54:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:54:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.870970
2026-02-11T22:54:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:54:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:54:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:54:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:54:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:54:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:54:31', tmtdew=0.68, humidity=95.87, cloud=0.0, wind=19.66, temperature=14.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:54:11.808', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:52:00')
2026-02-11T22:54:48.823 [DEBUG] [Thread-137304] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:54:48.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:54:48.926 [DEBUG] [Thread-137307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:54:48.931 [DEBUG] [Thread-137308] [transport.py] [_log()] starting thread (client mode): 0xa5772620
2026-02-11T22:54:48.931 [DEBUG] [Thread-137308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:54:48.945 [DEBUG] [Thread-137308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:54:48.945 [INFO] [Thread-137308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:54:48.952 [DEBUG] [Thread-137308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:54:48.952 [DEBUG] [Thread-137308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] client lang: <none>
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] server lang: <none>
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] kex follows: False
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] Compression: none
2026-02-11T22:54:48.953 [DEBUG] [Thread-137308] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:54:49.009 [DEBUG] [Thread-137308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:54:49.009 [DEBUG] [Thread-137308] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:54:49.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:54:49.011 [DEBUG] [Thread-137308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:54:49.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:54:49.069 [DEBUG] [Thread-137308] [transport.py] [_log()] userauth is OK
2026-02-11T22:54:49.070 [DEBUG] [Thread-137308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:54:49.070 [DEBUG] [Thread-137308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:54:49.070 [DEBUG] [Thread-137308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:54:49.070 [DEBUG] [Thread-137308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:54:49.094 [INFO] [Thread-137308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:54:49.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:54:49.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:54:49.971 [DEBUG] [Thread-137308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:54:49.972 [DEBUG] [Thread-137308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:54:50.019 [DEBUG] [Thread-137308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:54:50.019 [DEBUG] [Thread-137308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:54:50.028 [DEBUG] [Thread-137308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:54:50.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:54:50.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:54:50.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:54:50.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:54:50.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:54:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:54:50.065 [DEBUG] [Thread-137308] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:54:59.786 [DEBUG] [Thread-137310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:55:14.840 [DEBUG] [Thread-137311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:55:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:55:20.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:55:20.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
2026-02-11T22:55:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 55, 8), 0.67, 95.9, 0.0, 18.58, 14.88, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:55:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:55:08
2026-02-11T22:55:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:55:22.602 [DEBUG] [Thread-137312] [transport.py] [_log()] starting thread (client mode): 0xa2d04be0
2026-02-11T22:55:22.602 [DEBUG] [Thread-137312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:55:22.622 [DEBUG] [Thread-137312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:55:22.622 [INFO] [Thread-137312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] client lang: <none>
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] server lang: <none>
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] kex follows: False
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:55:22.625 [DEBUG] [Thread-137312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:55:22.626 [DEBUG] [Thread-137312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:55:22.626 [DEBUG] [Thread-137312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:55:22.626 [DEBUG] [Thread-137312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:55:22.626 [DEBUG] [Thread-137312] [transport.py] [_log()] Compression: none
2026-02-11T22:55:22.626 [DEBUG] [Thread-137312] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:55:22.644 [DEBUG] [Thread-137312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:55:22.644 [DEBUG] [Thread-137312] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:55:22.645 [DEBUG] [Thread-137312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:55:22.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:55:22.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:55:22.647 [DEBUG] [Thread-137312] [transport.py] [_log()] userauth is OK
2026-02-11T22:55:22.647 [DEBUG] [Thread-137312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:55:22.647 [DEBUG] [Thread-137312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:55:22.647 [DEBUG] [Thread-137312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:55:22.647 [DEBUG] [Thread-137312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:55:22.683 [INFO] [Thread-137312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:55:22.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:55:23.323 [DEBUG] [Thread-137312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:55:23.323 [DEBUG] [Thread-137312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:55:23.323 [DEBUG] [Thread-137312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:55:23.364 [DEBUG] [Thread-137312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:55:23.364 [DEBUG] [Thread-137312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:55:23.367 [DEBUG] [Thread-137312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:55:23.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:55:23.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:55:23.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:55:23.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:55:23.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:55:23.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:55:23.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:55:23.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:55:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:55:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.871317 -999.00  +15.10  15.57     91  +13.70 1 2 1 3 1     0    0 1.27 -8.29 Zn.SW 14.4 15.6 190.0 20.3 16.4 -12.4 16.3 -12.9 16.1 -13.6 16.4 -14.4
2026-02-11T22:55:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:55:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:55:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.871317
2026-02-11T22:55:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:55:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:55:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:55:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:55:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T22:55:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:55:08', tmtdew=0.67, humidity=95.9, cloud=0.0, wind=18.58, temperature=14.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:54:41.789', atlas_cloud=2, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:52:00')
2026-02-11T22:55:23.390 [DEBUG] [Thread-137312] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:55:23.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:55:23.485 [DEBUG] [Thread-137315] [transport.py] [_log()] starting thread (client mode): 0xa2d07760
2026-02-11T22:55:23.485 [DEBUG] [Thread-137315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:55:23.499 [DEBUG] [Thread-137315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:55:23.499 [INFO] [Thread-137315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:55:23.506 [DEBUG] [Thread-137315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:55:23.507 [DEBUG] [Thread-137315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:55:23.507 [DEBUG] [Thread-137315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:55:23.507 [DEBUG] [Thread-137315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:23.507 [DEBUG] [Thread-137315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:23.507 [DEBUG] [Thread-137315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:23.507 [DEBUG] [Thread-137315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] client lang: <none>
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] server lang: <none>
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] kex follows: False
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] Compression: none
2026-02-11T22:55:23.508 [DEBUG] [Thread-137315] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:55:23.575 [DEBUG] [Thread-137315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:55:23.576 [DEBUG] [Thread-137315] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:55:23.576 [DEBUG] [Thread-137315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:55:23.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:55:23.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:55:23.634 [DEBUG] [Thread-137315] [transport.py] [_log()] userauth is OK
2026-02-11T22:55:23.634 [DEBUG] [Thread-137315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:55:23.634 [DEBUG] [Thread-137315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:55:23.635 [DEBUG] [Thread-137315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:55:23.635 [DEBUG] [Thread-137315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:55:23.654 [INFO] [Thread-137315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:55:23.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:55:23.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:55:24.460 [DEBUG] [Thread-137315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:55:24.460 [DEBUG] [Thread-137315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:55:24.507 [DEBUG] [Thread-137315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:55:24.508 [DEBUG] [Thread-137315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:55:24.516 [DEBUG] [Thread-137315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:55:24.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:55:24.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:55:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:55:24.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:55:24.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:55:24.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:55:24.553 [DEBUG] [Thread-137315] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:55:29.876 [DEBUG] [Thread-137317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:55:44.925 [DEBUG] [Thread-137318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:55:47.469 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:55:47.470 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:55:49.008 [DEBUG] [Thread-137319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:55:54.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:55:54.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:55:54.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:55:56.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 55, 44), 0.63, 95.86, 0.0, 21.12, 14.82, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:55:56.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:55:44
2026-02-11T22:55:57.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:55:57.300 [DEBUG] [Thread-137320] [transport.py] [_log()] starting thread (client mode): 0xa2d4d960
2026-02-11T22:55:57.300 [DEBUG] [Thread-137320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:55:57.320 [DEBUG] [Thread-137320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:55:57.320 [INFO] [Thread-137320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] client lang: <none>
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] server lang: <none>
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] kex follows: False
2026-02-11T22:55:57.323 [DEBUG] [Thread-137320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:55:57.324 [DEBUG] [Thread-137320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:55:57.324 [DEBUG] [Thread-137320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:55:57.324 [DEBUG] [Thread-137320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:55:57.324 [DEBUG] [Thread-137320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:55:57.324 [DEBUG] [Thread-137320] [transport.py] [_log()] Compression: none
2026-02-11T22:55:57.324 [DEBUG] [Thread-137320] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:55:57.332 [DEBUG] [Thread-137320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:55:57.332 [DEBUG] [Thread-137320] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:55:57.332 [DEBUG] [Thread-137320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:55:57.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:55:57.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:55:57.333 [DEBUG] [Thread-137320] [transport.py] [_log()] userauth is OK
2026-02-11T22:55:57.334 [DEBUG] [Thread-137320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:55:57.334 [DEBUG] [Thread-137320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:55:57.334 [DEBUG] [Thread-137320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:55:57.334 [DEBUG] [Thread-137320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:55:57.355 [INFO] [Thread-137320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:55:57.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:55:57.995 [DEBUG] [Thread-137320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:55:57.995 [DEBUG] [Thread-137320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:55:57.995 [DEBUG] [Thread-137320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:55:58.036 [DEBUG] [Thread-137320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:55:58.036 [DEBUG] [Thread-137320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:55:58.038 [DEBUG] [Thread-137320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:55:58.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:55:58.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:55:58.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:55:58.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:55:58.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:55:58.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:55:58.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:55:58.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:55:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:55:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.871664 -999.00  +15.10  11.63     91  +13.70 1 3 1 3 1     0    0 1.23 -8.25 Z..SW 15.1 11.6 184.6 18.4 16.6 -8.0 16.3 -9.5 16.1 -8.1 16.4 -8.6
2026-02-11T22:55:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:55:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:55:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.871664
2026-02-11T22:55:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:55:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:55:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:55:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:55:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:55:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:55:44', tmtdew=0.63, humidity=95.86, cloud=0.0, wind=21.12, temperature=14.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:55:11.770', atlas_cloud=3, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:52:00')
2026-02-11T22:55:58.057 [DEBUG] [Thread-137320] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:55:58.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:55:58.140 [DEBUG] [Thread-137323] [transport.py] [_log()] starting thread (client mode): 0xa2d4f610
2026-02-11T22:55:58.140 [DEBUG] [Thread-137323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:55:58.154 [DEBUG] [Thread-137323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:55:58.154 [INFO] [Thread-137323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:55:58.161 [DEBUG] [Thread-137323] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] client lang: <none>
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] server lang: <none>
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] kex follows: False
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] Compression: none
2026-02-11T22:55:58.162 [DEBUG] [Thread-137323] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:55:58.220 [DEBUG] [Thread-137323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:55:58.220 [DEBUG] [Thread-137323] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:55:58.220 [DEBUG] [Thread-137323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:55:58.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:55:58.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:55:58.279 [DEBUG] [Thread-137323] [transport.py] [_log()] userauth is OK
2026-02-11T22:55:58.279 [DEBUG] [Thread-137323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:55:58.279 [DEBUG] [Thread-137323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:55:58.279 [DEBUG] [Thread-137323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:55:58.279 [DEBUG] [Thread-137323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:55:58.297 [INFO] [Thread-137323] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:55:58.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:55:58.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:55:59.178 [DEBUG] [Thread-137323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:55:59.178 [DEBUG] [Thread-137323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:55:59.226 [DEBUG] [Thread-137323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:55:59.227 [DEBUG] [Thread-137323] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:55:59.236 [DEBUG] [Thread-137323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:55:59.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:55:59.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:55:59.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:55:59.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:55:59.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:55:59.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:55:59.274 [DEBUG] [Thread-137323] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:55:59.961 [DEBUG] [Thread-137325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:56:15.015 [DEBUG] [Thread-137326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:56:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:56:29.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:56:29.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:56:30.054 [DEBUG] [Thread-137327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:56:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 56, 20), 0.62, 95.92, 0.0, 19.74, 14.8, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:56:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:56:20
2026-02-11T22:56:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:56:31.805 [DEBUG] [Thread-137328] [transport.py] [_log()] starting thread (client mode): 0xa5758b80
2026-02-11T22:56:31.805 [DEBUG] [Thread-137328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:56:31.825 [DEBUG] [Thread-137328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:56:31.825 [INFO] [Thread-137328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:56:31.828 [DEBUG] [Thread-137328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:56:31.828 [DEBUG] [Thread-137328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:56:31.828 [DEBUG] [Thread-137328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:56:31.828 [DEBUG] [Thread-137328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:56:31.828 [DEBUG] [Thread-137328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:56:31.828 [DEBUG] [Thread-137328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] client lang: <none>
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] server lang: <none>
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] kex follows: False
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] Compression: none
2026-02-11T22:56:31.829 [DEBUG] [Thread-137328] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:56:31.846 [DEBUG] [Thread-137328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:56:31.846 [DEBUG] [Thread-137328] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:56:31.847 [DEBUG] [Thread-137328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:56:31.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:56:31.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:56:31.849 [DEBUG] [Thread-137328] [transport.py] [_log()] userauth is OK
2026-02-11T22:56:31.849 [DEBUG] [Thread-137328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:56:31.849 [DEBUG] [Thread-137328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:56:31.849 [DEBUG] [Thread-137328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:56:31.849 [DEBUG] [Thread-137328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:56:31.867 [INFO] [Thread-137328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:56:31.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:56:32.489 [DEBUG] [Thread-137328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:56:32.490 [DEBUG] [Thread-137328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:56:32.490 [DEBUG] [Thread-137328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:56:32.530 [DEBUG] [Thread-137328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:56:32.531 [DEBUG] [Thread-137328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:56:32.534 [DEBUG] [Thread-137328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:56:32.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:56:32.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:56:32.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:56:32.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:56:32.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:56:32.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:56:32.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:56:32.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:56:32.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:56:32.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.872011 -999.00  +15.10  10.00     91  +13.70 1 3 1 3 1     0    0 1.22 -8.30 ZNeSW 13.7 10.0 182.0 17.4 16.5 -9.3 16.3 -8.6 16.1 -10.1 16.5 -9.9
2026-02-11T22:56:32.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:56:32.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:56:32.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.872011
2026-02-11T22:56:32.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:56:32.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:56:32.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:56:32.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:56:32.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:56:32.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:56:20', tmtdew=0.62, humidity=95.92, cloud=0.0, wind=19.74, temperature=14.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:55:41.750', atlas_cloud=3, atlas_rain=1, zp_data=[2.4907499999999994, 1.5762500000000008, 1.37575, 1.9339999999999993, 2.6455, 2.9102500000000004, nan, nan, nan, 1.4530000000000003, 1.2382499999999999, 1.8610000000000007, 2.1149999999999993, 2.23025, 1.679499999999999, 1.7359999999999998, 1.5852499999999994, 1.5095, 1.4869999999999992, 1.605249999999999, 2.1229999999999984, 2.2952499999999993, 2.1522500000000004, 1.5657499999999995, 1.463499999999999, 2.0415, 1.67725, 1.9125000000000005, 2.1739999999999995, 2.3980000000000006, 2.0005000000000006, 2.0570000000000004, nan], zp_timestamp='2026-02-11T20:52:00')
2026-02-11T22:56:32.562 [DEBUG] [Thread-137328] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:56:32.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:56:32.657 [DEBUG] [Thread-137331] [transport.py] [_log()] starting thread (client mode): 0xa5758e20
2026-02-11T22:56:32.657 [DEBUG] [Thread-137331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:56:32.672 [DEBUG] [Thread-137331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:56:32.672 [INFO] [Thread-137331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:56:32.679 [DEBUG] [Thread-137331] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:56:32.680 [DEBUG] [Thread-137331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:56:32.680 [DEBUG] [Thread-137331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:56:32.680 [DEBUG] [Thread-137331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:56:32.680 [DEBUG] [Thread-137331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] client lang: <none>
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] server lang: <none>
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] kex follows: False
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] Compression: none
2026-02-11T22:56:32.681 [DEBUG] [Thread-137331] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:56:32.742 [DEBUG] [Thread-137331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:56:32.742 [DEBUG] [Thread-137331] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:56:32.743 [DEBUG] [Thread-137331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:56:32.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:56:32.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:56:32.798 [DEBUG] [Thread-137331] [transport.py] [_log()] userauth is OK
2026-02-11T22:56:32.799 [DEBUG] [Thread-137331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:56:32.799 [DEBUG] [Thread-137331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:56:32.799 [DEBUG] [Thread-137331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:56:32.799 [DEBUG] [Thread-137331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:56:32.817 [INFO] [Thread-137331] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:56:32.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:56:32.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:56:33.625 [DEBUG] [Thread-137331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:56:33.626 [DEBUG] [Thread-137331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:56:33.674 [DEBUG] [Thread-137331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:56:33.674 [DEBUG] [Thread-137331] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:56:33.683 [DEBUG] [Thread-137331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:56:33.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:56:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:56:33.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:56:33.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:56:33.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:56:33.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:56:33.721 [DEBUG] [Thread-137331] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:56:45.092 [DEBUG] [Thread-137333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:56:47.690 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:56:47.692 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:56:49.093 [DEBUG] [Thread-137334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:57:00.149 [DEBUG] [Thread-137335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:57:03.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:57:03.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:57:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:57:05.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 56, 55), 0.62, 95.94, 0.0, 22.71, 14.83, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:57:05.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:56:55
2026-02-11T22:57:05.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:57:06.051 [DEBUG] [Thread-137336] [transport.py] [_log()] starting thread (client mode): 0xa2d4f0a0
2026-02-11T22:57:06.051 [DEBUG] [Thread-137336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:57:06.072 [DEBUG] [Thread-137336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:57:06.072 [INFO] [Thread-137336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] client lang: <none>
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] server lang: <none>
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] kex follows: False
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] Compression: none
2026-02-11T22:57:06.076 [DEBUG] [Thread-137336] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:57:06.094 [DEBUG] [Thread-137336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:57:06.094 [DEBUG] [Thread-137336] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:57:06.095 [DEBUG] [Thread-137336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:57:06.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:57:06.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:57:06.097 [DEBUG] [Thread-137336] [transport.py] [_log()] userauth is OK
2026-02-11T22:57:06.097 [DEBUG] [Thread-137336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:57:06.097 [DEBUG] [Thread-137336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:57:06.098 [DEBUG] [Thread-137336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:57:06.098 [DEBUG] [Thread-137336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:57:06.115 [INFO] [Thread-137336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:57:06.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:57:06.877 [DEBUG] [Thread-137336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:57:06.877 [DEBUG] [Thread-137336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:57:06.877 [DEBUG] [Thread-137336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:57:06.917 [DEBUG] [Thread-137336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:57:06.917 [DEBUG] [Thread-137336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:57:06.920 [DEBUG] [Thread-137336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:57:06.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:57:06.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:57:06.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:57:06.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:57:06.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:57:06.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:57:06.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:57:06.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.872359 -999.00  +15.00  20.39     91  +13.60 1 3 1 3 1     0    0 1.23 -8.22 ZNeSW 21.9 20.4 178.6 23.9 16.5 -7.3 16.2 -9.1 16.1 -7.7 16.4 -8.1
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.872359
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:57:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:56:55', tmtdew=0.62, humidity=95.94, cloud=0.0, wind=22.71, temperature=14.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:56:11.818', atlas_cloud=3, atlas_rain=1, zp_data=[1.5507499999999999, 1.7102500000000003, 1.26825, 1.0394999999999994, 1.2609999999999992, 1.583750000000001, 2.2139999999999995, nan, nan, 1.5755, 1.2292499999999995, 1.0655000000000001, 1.1349999999999998, 1.2802499999999997, 1.8709999999999996, nan, 2.72225, 2.1099999999999994, 1.3689999999999989, 1.206249999999999, 1.1079999999999988, 1.460749999999999, 2.707250000000001, nan, nan, 2.4555, 1.5467500000000003, 1.1139999999999999, 1.5, 1.7345000000000006, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T22:57:06.940 [DEBUG] [Thread-137336] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:57:07.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:57:07.029 [DEBUG] [Thread-137339] [transport.py] [_log()] starting thread (client mode): 0xa2d4c520
2026-02-11T22:57:07.029 [DEBUG] [Thread-137339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:57:07.045 [DEBUG] [Thread-137339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:57:07.045 [INFO] [Thread-137339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:57:07.052 [DEBUG] [Thread-137339] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] client lang: <none>
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] server lang: <none>
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] kex follows: False
2026-02-11T22:57:07.053 [DEBUG] [Thread-137339] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:57:07.054 [DEBUG] [Thread-137339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:57:07.054 [DEBUG] [Thread-137339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:57:07.054 [DEBUG] [Thread-137339] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:57:07.054 [DEBUG] [Thread-137339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:57:07.054 [DEBUG] [Thread-137339] [transport.py] [_log()] Compression: none
2026-02-11T22:57:07.054 [DEBUG] [Thread-137339] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:57:07.116 [DEBUG] [Thread-137339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:57:07.116 [DEBUG] [Thread-137339] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:57:07.117 [DEBUG] [Thread-137339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:57:07.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:57:07.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:57:07.175 [DEBUG] [Thread-137339] [transport.py] [_log()] userauth is OK
2026-02-11T22:57:07.175 [DEBUG] [Thread-137339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:57:07.176 [DEBUG] [Thread-137339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:57:07.176 [DEBUG] [Thread-137339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:57:07.176 [DEBUG] [Thread-137339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:57:07.202 [INFO] [Thread-137339] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:57:07.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:57:07.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:57:08.040 [DEBUG] [Thread-137339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:57:08.041 [DEBUG] [Thread-137339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:57:08.088 [DEBUG] [Thread-137339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:57:08.088 [DEBUG] [Thread-137339] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:57:08.097 [DEBUG] [Thread-137339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:57:08.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:57:08.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')
2026-02-11T22:57:08.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:57:08.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:57:08.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:57:08.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:57:08.140 [DEBUG] [Thread-137339] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:57:15.186 [DEBUG] [Thread-137341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:57:30.239 [DEBUG] [Thread-137342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:57:38.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:57:38.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:57:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:57:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 57, 30), 0.62, 95.91, 0.0, 21.7, 14.78, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:57:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:57:30
2026-02-11T22:57:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:57:40.465 [DEBUG] [Thread-137343] [transport.py] [_log()] starting thread (client mode): 0x9eb052a0
2026-02-11T22:57:40.465 [DEBUG] [Thread-137343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:57:40.486 [DEBUG] [Thread-137343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:57:40.486 [INFO] [Thread-137343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:57:40.488 [DEBUG] [Thread-137343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] client lang: <none>
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] server lang: <none>
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] kex follows: False
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] Compression: none
2026-02-11T22:57:40.489 [DEBUG] [Thread-137343] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:57:40.508 [DEBUG] [Thread-137343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:57:40.508 [DEBUG] [Thread-137343] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:57:40.509 [DEBUG] [Thread-137343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:57:40.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:57:40.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:57:40.511 [DEBUG] [Thread-137343] [transport.py] [_log()] userauth is OK
2026-02-11T22:57:40.512 [DEBUG] [Thread-137343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:57:40.512 [DEBUG] [Thread-137343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:57:40.512 [DEBUG] [Thread-137343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:57:40.512 [DEBUG] [Thread-137343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:57:40.536 [INFO] [Thread-137343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:57:40.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:57:41.190 [DEBUG] [Thread-137343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:57:41.190 [DEBUG] [Thread-137343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:57:41.191 [DEBUG] [Thread-137343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:57:41.231 [DEBUG] [Thread-137343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:57:41.231 [DEBUG] [Thread-137343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:57:41.235 [DEBUG] [Thread-137343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:57:41.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:57:41.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:57:41.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:57:41.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:57:41.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:57:41.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:57:41.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:57:41.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:57:41.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:57:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.872706 -999.00  +14.90  16.17     91  +13.60 1 3 1 3 1     0    0 1.24 -8.55 Z..SW 20.9 16.2 188.6 23.6 16.4 -6.4 16.1 -7.6 16.1 -7.0 16.4 -7.2
2026-02-11T22:57:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:57:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:57:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.872706
2026-02-11T22:57:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:57:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:57:41.261 [DEBUG] [Thread-137343] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:57:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:57:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:57:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:57:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:57:30', tmtdew=0.62, humidity=95.91, cloud=0.0, wind=21.7, temperature=14.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:56:41.798', atlas_cloud=3, atlas_rain=1, zp_data=[1.5507499999999999, 1.7102500000000003, 1.26825, 1.0394999999999994, 1.2609999999999992, 1.583750000000001, 2.2139999999999995, nan, nan, 1.5755, 1.2292499999999995, 1.0655000000000001, 1.1349999999999998, 1.2802499999999997, 1.8709999999999996, nan, 2.72225, 2.1099999999999994, 1.3689999999999989, 1.206249999999999, 1.1079999999999988, 1.460749999999999, 2.707250000000001, nan, nan, 2.4555, 1.5467500000000003, 1.1139999999999999, 1.5, 1.7345000000000006, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T22:57:41.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:57:41.358 [DEBUG] [Thread-137346] [transport.py] [_log()] starting thread (client mode): 0x9eb04b80
2026-02-11T22:57:41.358 [DEBUG] [Thread-137346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:57:41.374 [DEBUG] [Thread-137346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:57:41.374 [INFO] [Thread-137346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:57:41.381 [DEBUG] [Thread-137346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:57:41.382 [DEBUG] [Thread-137346] [transport.py] [_log()] client lang: <none>
2026-02-11T22:57:41.383 [DEBUG] [Thread-137346] [transport.py] [_log()] server lang: <none>
2026-02-11T22:57:41.383 [DEBUG] [Thread-137346] [transport.py] [_log()] kex follows: False
2026-02-11T22:57:41.383 [DEBUG] [Thread-137346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:57:41.383 [DEBUG] [Thread-137346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:57:41.383 [DEBUG] [Thread-137346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:57:41.383 [DEBUG] [Thread-137346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:57:41.383 [DEBUG] [Thread-137346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:57:41.384 [DEBUG] [Thread-137346] [transport.py] [_log()] Compression: none
2026-02-11T22:57:41.384 [DEBUG] [Thread-137346] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:57:41.439 [DEBUG] [Thread-137346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:57:41.440 [DEBUG] [Thread-137346] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:57:41.441 [DEBUG] [Thread-137346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:57:41.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:57:41.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:57:41.499 [DEBUG] [Thread-137346] [transport.py] [_log()] userauth is OK
2026-02-11T22:57:41.500 [DEBUG] [Thread-137346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:57:41.500 [DEBUG] [Thread-137346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:57:41.500 [DEBUG] [Thread-137346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:57:41.500 [DEBUG] [Thread-137346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:57:41.519 [INFO] [Thread-137346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:57:41.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:57:41.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:57:42.357 [DEBUG] [Thread-137346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:57:42.358 [DEBUG] [Thread-137346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:57:42.405 [DEBUG] [Thread-137346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:57:42.406 [DEBUG] [Thread-137346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:57:42.415 [DEBUG] [Thread-137346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:57:42.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:57:42.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:57:42.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:57:42.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:57:42.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:57:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:57:42.452 [DEBUG] [Thread-137346] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:57:45.276 [DEBUG] [Thread-137348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:57:47.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:57:47.893 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:57:49.181 [DEBUG] [Thread-137349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:00.325 [DEBUG] [Thread-137350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:58:12.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:58:12.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T22:58:14.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 57, 30), 0.62, 95.91, 0.0, 21.7, 14.78, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:58:14.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:57:30
2026-02-11T22:58:15.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:58:15.207 [DEBUG] [Thread-137351] [transport.py] [_log()] starting thread (client mode): 0xa2d4e9e0
2026-02-11T22:58:15.207 [DEBUG] [Thread-137351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:58:15.226 [DEBUG] [Thread-137351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:58:15.227 [INFO] [Thread-137351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] client lang: <none>
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] server lang: <none>
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] kex follows: False
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] Compression: none
2026-02-11T22:58:15.230 [DEBUG] [Thread-137351] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:58:15.245 [DEBUG] [Thread-137351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:58:15.245 [DEBUG] [Thread-137351] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:58:15.246 [DEBUG] [Thread-137351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:58:15.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:58:15.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:58:15.247 [DEBUG] [Thread-137351] [transport.py] [_log()] userauth is OK
2026-02-11T22:58:15.247 [DEBUG] [Thread-137351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:58:15.247 [DEBUG] [Thread-137351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:58:15.248 [DEBUG] [Thread-137351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:58:15.248 [DEBUG] [Thread-137351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:58:15.261 [INFO] [Thread-137351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:58:15.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:58:15.360 [DEBUG] [Thread-137353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:15.914 [DEBUG] [Thread-137351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:58:15.914 [DEBUG] [Thread-137351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:58:15.914 [DEBUG] [Thread-137351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:58:15.955 [DEBUG] [Thread-137351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:58:15.956 [DEBUG] [Thread-137351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:58:15.959 [DEBUG] [Thread-137351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:58:15.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:58:15.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:58:15.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:58:15.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:58:15.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:58:15.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:58:15.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:58:15.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:58:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:58:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.873053 -999.00  +14.90  18.03     91  +13.50 1 3 1 3 1     0    0 1.21 -8.11 Z..SW 13.6 18.0 188.4 22.9 16.5 -5.0 16.2 -6.4 16.1 -5.7 16.4 -5.7
2026-02-11T22:58:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:58:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:58:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.873053
2026-02-11T22:58:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:58:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:58:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:58:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:58:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:58:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:57:30', tmtdew=0.62, humidity=95.91, cloud=0.0, wind=21.7, temperature=14.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:57:11.779', atlas_cloud=3, atlas_rain=1, zp_data=[1.5507499999999999, 1.7102500000000003, 1.26825, 1.0394999999999994, 1.2609999999999992, 1.583750000000001, 2.2139999999999995, nan, nan, 1.5755, 1.2292499999999995, 1.0655000000000001, 1.1349999999999998, 1.2802499999999997, 1.8709999999999996, nan, 2.72225, 2.1099999999999994, 1.3689999999999989, 1.206249999999999, 1.1079999999999988, 1.460749999999999, 2.707250000000001, nan, nan, 2.4555, 1.5467500000000003, 1.1139999999999999, 1.5, 1.7345000000000006, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T22:58:15.987 [DEBUG] [Thread-137351] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:58:16.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:58:16.082 [DEBUG] [Thread-137355] [transport.py] [_log()] starting thread (client mode): 0xa2d95000
2026-02-11T22:58:16.082 [DEBUG] [Thread-137355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:58:16.096 [DEBUG] [Thread-137355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T22:58:16.097 [INFO] [Thread-137355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T22:58:16.104 [DEBUG] [Thread-137355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] client lang: <none>
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] server lang: <none>
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] kex follows: False
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] Compression: none
2026-02-11T22:58:16.105 [DEBUG] [Thread-137355] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:58:16.163 [DEBUG] [Thread-137355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:58:16.164 [DEBUG] [Thread-137355] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:58:16.164 [DEBUG] [Thread-137355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T22:58:16.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T22:58:16.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:58:16.220 [DEBUG] [Thread-137355] [transport.py] [_log()] userauth is OK
2026-02-11T22:58:16.220 [DEBUG] [Thread-137355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:58:16.221 [DEBUG] [Thread-137355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:58:16.221 [DEBUG] [Thread-137355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T22:58:16.221 [DEBUG] [Thread-137355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:58:16.240 [INFO] [Thread-137355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:58:16.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T22:58:16.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:58:17.089 [DEBUG] [Thread-137355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:58:17.089 [DEBUG] [Thread-137355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:58:17.137 [DEBUG] [Thread-137355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:58:17.138 [DEBUG] [Thread-137355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:58:17.147 [DEBUG] [Thread-137355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:58:17.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:58:17.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T22:58:17.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T22:58:17.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:58:17.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:58:17.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:58:17.183 [DEBUG] [Thread-137355] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:58:30.400 [DEBUG] [Thread-137357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:45.461 [DEBUG] [Thread-137358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T22:58:47.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T22:58:47.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
2026-02-11T22:58:48.098 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:48.099 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 22, 58, 5), 0.61, 95.95, 0.0, 22.76, 14.8, 2, 2, 0, 2, 0, 0),)
2026-02-11T22:58:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 22:58:05
2026-02-11T22:58:49.256 [DEBUG] [Thread-137359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:58:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T22:58:49.734 [DEBUG] [Thread-137360] [transport.py] [_log()] starting thread (client mode): 0xa2d95060
2026-02-11T22:58:49.734 [DEBUG] [Thread-137360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T22:58:49.755 [DEBUG] [Thread-137360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T22:58:49.755 [INFO] [Thread-137360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T22:58:49.758 [DEBUG] [Thread-137360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T22:58:49.758 [DEBUG] [Thread-137360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T22:58:49.758 [DEBUG] [Thread-137360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T22:58:49.758 [DEBUG] [Thread-137360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:58:49.758 [DEBUG] [Thread-137360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] client lang: <none>
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] server lang: <none>
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] kex follows: False
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] Compression: none
2026-02-11T22:58:49.759 [DEBUG] [Thread-137360] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T22:58:49.777 [DEBUG] [Thread-137360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T22:58:49.777 [DEBUG] [Thread-137360] [transport.py] [_log()] Switch to new keys ...
2026-02-11T22:58:49.778 [DEBUG] [Thread-137360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T22:58:49.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T22:58:49.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T22:58:49.780 [DEBUG] [Thread-137360] [transport.py] [_log()] userauth is OK
2026-02-11T22:58:49.780 [DEBUG] [Thread-137360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T22:58:49.780 [DEBUG] [Thread-137360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T22:58:49.780 [DEBUG] [Thread-137360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T22:58:49.780 [DEBUG] [Thread-137360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T22:58:49.816 [INFO] [Thread-137360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T22:58:49.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T22:58:50.448 [DEBUG] [Thread-137360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T22:58:50.448 [DEBUG] [Thread-137360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T22:58:50.449 [DEBUG] [Thread-137360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T22:58:50.489 [DEBUG] [Thread-137360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T22:58:50.489 [DEBUG] [Thread-137360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T22:58:50.492 [DEBUG] [Thread-137360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T22:58:50.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T22:58:50.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T22:58:50.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T22:58:50.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T22:58:50.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T22:58:50.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T22:58:50.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T22:58:50.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.873747 -999.00  +14.90  18.08     91  +13.60 1 3 1 3 1     0    0 1.20 -8.26 ----- 20.8 18.1 179.4 23.4 16.5 -3.3 16.3 -3.2 16.2 -2.9 16.5 -3.5
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.873747
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T22:58:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T22:58:05', tmtdew=0.61, humidity=95.95, cloud=0.0, wind=22.76, temperature=14.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T20:58:11.741', atlas_cloud=3, atlas_rain=1, zp_data=[1.5507499999999999, 1.7102500000000003, 1.26825, 1.0394999999999994, 1.2609999999999992, 1.583750000000001, 2.2139999999999995, nan, nan, 1.5755, 1.2292499999999995, 1.0655000000000001, 1.1349999999999998, 1.2802499999999997, 1.8709999999999996, nan, 2.72225, 2.1099999999999994, 1.3689999999999989, 1.206249999999999, 1.1079999999999988, 1.460749999999999, 2.707250000000001, nan, nan, 2.4555, 1.5467500000000003, 1.1139999999999999, 1.5, 1.7345000000000006, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T22:58:50.513 [DEBUG] [Thread-137360] [transport.py] [_log()] EOF in transport thread
2026-02-11T22:58:50.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T22:59:00.498 [DEBUG] [Thread-137363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:59:15.550 [DEBUG] [Thread-137364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:59:30.586 [DEBUG] [Thread-137365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:59:45.621 [DEBUG] [Thread-137366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:59:48.309 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:59:48.310 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T22:59:49.343 [DEBUG] [Thread-137367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:00:00.657 [DEBUG] [Thread-137368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:00:15.690 [DEBUG] [Thread-137369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:00:30.729 [DEBUG] [Thread-137370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:00:45.765 [DEBUG] [Thread-137371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:00:48.513 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:00:48.514 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:00:49.400 [DEBUG] [Thread-137372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:01:00.802 [DEBUG] [Thread-137373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:01:02.391 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T23:01:15.839 [DEBUG] [Thread-137374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:01:30.875 [DEBUG] [Thread-137375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:01:32.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:01:32.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:01:32.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:01:34.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 1, 5), 0.6, 96.01, 0.0, 19.23, 14.77, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:01:34.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:01:05
2026-02-11T23:01:34.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:01:34.727 [DEBUG] [Thread-137376] [transport.py] [_log()] starting thread (client mode): 0xa2d96f80
2026-02-11T23:01:34.727 [DEBUG] [Thread-137376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:01:34.748 [DEBUG] [Thread-137376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:01:34.748 [INFO] [Thread-137376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:01:34.751 [DEBUG] [Thread-137376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:01:34.751 [DEBUG] [Thread-137376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:01:34.751 [DEBUG] [Thread-137376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:01:34.751 [DEBUG] [Thread-137376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:01:34.751 [DEBUG] [Thread-137376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] client lang: <none>
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] server lang: <none>
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] kex follows: False
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:01:34.752 [DEBUG] [Thread-137376] [transport.py] [_log()] Compression: none
2026-02-11T23:01:34.753 [DEBUG] [Thread-137376] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:01:34.771 [DEBUG] [Thread-137376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:01:34.771 [DEBUG] [Thread-137376] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:01:34.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:01:34.773 [DEBUG] [Thread-137376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:01:34.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:01:34.774 [DEBUG] [Thread-137376] [transport.py] [_log()] userauth is OK
2026-02-11T23:01:34.774 [DEBUG] [Thread-137376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:01:34.775 [DEBUG] [Thread-137376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:01:34.775 [DEBUG] [Thread-137376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:01:34.775 [DEBUG] [Thread-137376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:01:34.799 [INFO] [Thread-137376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:01:34.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:01:35.601 [DEBUG] [Thread-137376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:01:35.601 [DEBUG] [Thread-137376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:01:35.602 [DEBUG] [Thread-137376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:01:35.642 [DEBUG] [Thread-137376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:01:35.643 [DEBUG] [Thread-137376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:01:35.646 [DEBUG] [Thread-137376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:01:35.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:01:35.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:01:35.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:01:35.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:01:35.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:01:35.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:01:35.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:01:35.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:01:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:01:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.875483 -999.00  +14.80  18.54     92  +13.50 1 3 1 3 1     0    0 1.21 -8.24 ----- 16.5 18.5 180.8 21.0 16.5 -3.0 16.2 -3.0 16.2 -2.8 16.5 -3.0
2026-02-11T23:01:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:01:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:01:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.875483
2026-02-11T23:01:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:01:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:01:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:01:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:01:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:01:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:01:05', tmtdew=0.6, humidity=96.01, cloud=0.0, wind=19.23, temperature=14.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:00:41.731', atlas_cloud=3, atlas_rain=1, zp_data=[1.5507499999999999, 1.7102500000000003, 1.26825, 1.0394999999999994, 1.2609999999999992, 1.583750000000001, 2.2139999999999995, nan, nan, 1.5755, 1.2292499999999995, 1.0655000000000001, 1.1349999999999998, 1.2802499999999997, 1.8709999999999996, nan, 2.72225, 2.1099999999999994, 1.3689999999999989, 1.206249999999999, 1.1079999999999988, 1.460749999999999, 2.707250000000001, nan, nan, 2.4555, 1.5467500000000003, 1.1139999999999999, 1.5, 1.7345000000000006, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:01:35.673 [DEBUG] [Thread-137376] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:01:35.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:01:35.772 [DEBUG] [Thread-137379] [transport.py] [_log()] starting thread (client mode): 0xa2d4cb50
2026-02-11T23:01:35.772 [DEBUG] [Thread-137379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:01:35.786 [DEBUG] [Thread-137379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:01:35.787 [INFO] [Thread-137379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:01:35.794 [DEBUG] [Thread-137379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:01:35.795 [DEBUG] [Thread-137379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:01:35.796 [DEBUG] [Thread-137379] [transport.py] [_log()] client lang: <none>
2026-02-11T23:01:35.796 [DEBUG] [Thread-137379] [transport.py] [_log()] server lang: <none>
2026-02-11T23:01:35.796 [DEBUG] [Thread-137379] [transport.py] [_log()] kex follows: False
2026-02-11T23:01:35.796 [DEBUG] [Thread-137379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:01:35.796 [DEBUG] [Thread-137379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:01:35.796 [DEBUG] [Thread-137379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:01:35.796 [DEBUG] [Thread-137379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:01:35.797 [DEBUG] [Thread-137379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:01:35.797 [DEBUG] [Thread-137379] [transport.py] [_log()] Compression: none
2026-02-11T23:01:35.797 [DEBUG] [Thread-137379] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:01:35.855 [DEBUG] [Thread-137379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:01:35.856 [DEBUG] [Thread-137379] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:01:35.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:01:35.857 [DEBUG] [Thread-137379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:01:35.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:01:35.914 [DEBUG] [Thread-137379] [transport.py] [_log()] userauth is OK
2026-02-11T23:01:35.914 [DEBUG] [Thread-137379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:01:35.914 [DEBUG] [Thread-137379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:01:35.914 [DEBUG] [Thread-137379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:01:35.914 [DEBUG] [Thread-137379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:01:35.934 [INFO] [Thread-137379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:01:35.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:01:35.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:01:36.752 [DEBUG] [Thread-137379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:01:36.752 [DEBUG] [Thread-137379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:01:36.803 [DEBUG] [Thread-137379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:01:36.803 [DEBUG] [Thread-137379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:01:36.811 [DEBUG] [Thread-137379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:01:36.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:01:36.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:01:36.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:01:36.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:01:36.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:01:36.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:01:36.843 [DEBUG] [Thread-137379] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:01:45.911 [DEBUG] [Thread-137381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:01:48.717 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:01:48.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:01:49.456 [DEBUG] [Thread-137382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:02:00.961 [DEBUG] [Thread-137383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:02:06.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:02:06.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:02:06.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:02:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 1, 40), 1.1, 93.08, 0.0, 21.03, 15.2, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:02:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:01:40
2026-02-11T23:02:09.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:02:09.346 [DEBUG] [Thread-137384] [transport.py] [_log()] starting thread (client mode): 0xa5759840
2026-02-11T23:02:09.346 [DEBUG] [Thread-137384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:02:09.365 [DEBUG] [Thread-137384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:02:09.365 [INFO] [Thread-137384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:02:09.368 [DEBUG] [Thread-137384] [transport.py] [_log()] client lang: <none>
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] server lang: <none>
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] kex follows: False
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] Compression: none
2026-02-11T23:02:09.369 [DEBUG] [Thread-137384] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:02:09.387 [DEBUG] [Thread-137384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:02:09.387 [DEBUG] [Thread-137384] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:02:09.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:02:09.388 [DEBUG] [Thread-137384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:02:09.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:02:09.390 [DEBUG] [Thread-137384] [transport.py] [_log()] userauth is OK
2026-02-11T23:02:09.391 [DEBUG] [Thread-137384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:02:09.391 [DEBUG] [Thread-137384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:02:09.391 [DEBUG] [Thread-137384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:02:09.391 [DEBUG] [Thread-137384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:02:09.427 [INFO] [Thread-137384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:02:09.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:02:10.069 [DEBUG] [Thread-137384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:02:10.070 [DEBUG] [Thread-137384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:02:10.070 [DEBUG] [Thread-137384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:02:10.110 [DEBUG] [Thread-137384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:02:10.111 [DEBUG] [Thread-137384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:02:10.114 [DEBUG] [Thread-137384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:02:10.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:02:10.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:02:10.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:02:10.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:02:10.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:02:10.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:02:10.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:02:10.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:02:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:02:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.875831 -999.00  +14.70  18.32     92  +13.40 1 3 1 3 1     0    0 1.19 -9.03 ----- 19.4 18.3 186.0 24.5 16.5 -2.6 16.3 -2.8 16.2 -2.6 16.5 -2.7
2026-02-11T23:02:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:02:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:02:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.875831
2026-02-11T23:02:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:02:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:02:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:02:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:02:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:02:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:01:40', tmtdew=1.1, humidity=93.08, cloud=0.0, wind=21.03, temperature=15.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:01:11.798', atlas_cloud=3, atlas_rain=1, zp_data=[1.5507499999999999, 1.7102500000000003, 1.26825, 1.0394999999999994, 1.2609999999999992, 1.583750000000001, 2.2139999999999995, nan, nan, 1.5755, 1.2292499999999995, 1.0655000000000001, 1.1349999999999998, 1.2802499999999997, 1.8709999999999996, nan, 2.72225, 2.1099999999999994, 1.3689999999999989, 1.206249999999999, 1.1079999999999988, 1.460749999999999, 2.707250000000001, nan, nan, 2.4555, 1.5467500000000003, 1.1139999999999999, 1.5, 1.7345000000000006, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:02:10.141 [DEBUG] [Thread-137384] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:02:10.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:02:10.237 [DEBUG] [Thread-137387] [transport.py] [_log()] starting thread (client mode): 0xa2d97d90
2026-02-11T23:02:10.237 [DEBUG] [Thread-137387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:02:10.252 [DEBUG] [Thread-137387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:02:10.252 [INFO] [Thread-137387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:02:10.260 [DEBUG] [Thread-137387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] client lang: <none>
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] server lang: <none>
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] kex follows: False
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:02:10.261 [DEBUG] [Thread-137387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:02:10.262 [DEBUG] [Thread-137387] [transport.py] [_log()] Compression: none
2026-02-11T23:02:10.262 [DEBUG] [Thread-137387] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:02:10.321 [DEBUG] [Thread-137387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:02:10.321 [DEBUG] [Thread-137387] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:02:10.322 [DEBUG] [Thread-137387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:02:10.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:02:10.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:02:10.377 [DEBUG] [Thread-137387] [transport.py] [_log()] userauth is OK
2026-02-11T23:02:10.377 [DEBUG] [Thread-137387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:02:10.377 [DEBUG] [Thread-137387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:02:10.377 [DEBUG] [Thread-137387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:02:10.377 [DEBUG] [Thread-137387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:02:10.396 [INFO] [Thread-137387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:02:10.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:02:10.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:02:11.229 [DEBUG] [Thread-137387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:02:11.229 [DEBUG] [Thread-137387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:02:11.278 [DEBUG] [Thread-137387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:02:11.279 [DEBUG] [Thread-137387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:02:11.288 [DEBUG] [Thread-137387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:02:11.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:02:11.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:02:11.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:02:11.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:02:11.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:02:11.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:02:11.322 [DEBUG] [Thread-137387] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:02:15.994 [DEBUG] [Thread-137389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:02:31.035 [DEBUG] [Thread-137390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:02:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:02:41.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:02:41.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:02:43.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 2, 15), 0.6, 96.04, 0.0, 22.51, 14.72, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:02:43.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:02:15
2026-02-11T23:02:43.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:02:43.877 [DEBUG] [Thread-137391] [transport.py] [_log()] starting thread (client mode): 0xa2d06980
2026-02-11T23:02:43.877 [DEBUG] [Thread-137391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:02:43.897 [DEBUG] [Thread-137391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:02:43.897 [INFO] [Thread-137391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] client lang: <none>
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] server lang: <none>
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] kex follows: False
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:02:43.900 [DEBUG] [Thread-137391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:02:43.901 [DEBUG] [Thread-137391] [transport.py] [_log()] Compression: none
2026-02-11T23:02:43.901 [DEBUG] [Thread-137391] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:02:43.917 [DEBUG] [Thread-137391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:02:43.918 [DEBUG] [Thread-137391] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:02:43.918 [DEBUG] [Thread-137391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:02:43.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:02:43.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:02:43.920 [DEBUG] [Thread-137391] [transport.py] [_log()] userauth is OK
2026-02-11T23:02:43.921 [DEBUG] [Thread-137391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:02:43.921 [DEBUG] [Thread-137391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:02:43.921 [DEBUG] [Thread-137391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:02:43.921 [DEBUG] [Thread-137391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:02:43.945 [INFO] [Thread-137391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:02:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:02:44.585 [DEBUG] [Thread-137391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:02:44.586 [DEBUG] [Thread-137391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:02:44.586 [DEBUG] [Thread-137391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:02:44.626 [DEBUG] [Thread-137391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:02:44.626 [DEBUG] [Thread-137391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:02:44.629 [DEBUG] [Thread-137391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:02:44.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:02:44.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:02:44.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:02:44.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:02:44.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:02:44.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:02:44.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:02:44.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:02:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:02:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.876525 -999.00  +14.70  15.03     92  +13.40 1 3 1 3 1     0    0 1.12 -9.57 ----- 18.6 15.0 191.7 24.9 16.5 -2.6 16.3 -2.6 16.2 -2.5 16.6 -2.5
2026-02-11T23:02:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:02:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:02:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.876525
2026-02-11T23:02:44.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:02:44.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:02:44.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:02:44.654 [DEBUG] [Thread-137391] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:02:44.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:02:44.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:02:44.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:02:15', tmtdew=0.6, humidity=96.04, cloud=0.0, wind=22.51, temperature=14.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:02:11.760', atlas_cloud=3, atlas_rain=1, zp_data=[1.5507499999999999, 1.7102500000000003, 1.26825, 1.0394999999999994, 1.2609999999999992, 1.583750000000001, 2.2139999999999995, nan, nan, 1.5755, 1.2292499999999995, 1.0655000000000001, 1.1349999999999998, 1.2802499999999997, 1.8709999999999996, nan, 2.72225, 2.1099999999999994, 1.3689999999999989, 1.206249999999999, 1.1079999999999988, 1.460749999999999, 2.707250000000001, nan, nan, 2.4555, 1.5467500000000003, 1.1139999999999999, 1.5, 1.7345000000000006, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:02:44.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:02:44.751 [DEBUG] [Thread-137394] [transport.py] [_log()] starting thread (client mode): 0xa2d4d030
2026-02-11T23:02:44.751 [DEBUG] [Thread-137394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:02:44.767 [DEBUG] [Thread-137394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:02:44.768 [INFO] [Thread-137394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:02:44.775 [DEBUG] [Thread-137394] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] client lang: <none>
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] server lang: <none>
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] kex follows: False
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:02:44.776 [DEBUG] [Thread-137394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:02:44.777 [DEBUG] [Thread-137394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:02:44.777 [DEBUG] [Thread-137394] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:02:44.777 [DEBUG] [Thread-137394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:02:44.777 [DEBUG] [Thread-137394] [transport.py] [_log()] Compression: none
2026-02-11T23:02:44.777 [DEBUG] [Thread-137394] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:02:44.837 [DEBUG] [Thread-137394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:02:44.838 [DEBUG] [Thread-137394] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:02:44.838 [DEBUG] [Thread-137394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:02:44.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:02:44.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:02:44.892 [DEBUG] [Thread-137394] [transport.py] [_log()] userauth is OK
2026-02-11T23:02:44.893 [DEBUG] [Thread-137394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:02:44.893 [DEBUG] [Thread-137394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:02:44.893 [DEBUG] [Thread-137394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:02:44.893 [DEBUG] [Thread-137394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:02:44.912 [INFO] [Thread-137394] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:02:44.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:02:44.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:02:45.766 [DEBUG] [Thread-137394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:02:45.766 [DEBUG] [Thread-137394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:02:45.814 [DEBUG] [Thread-137394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:02:45.815 [DEBUG] [Thread-137394] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:02:45.824 [DEBUG] [Thread-137394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:02:45.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:02:45.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:02:45.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:02:45.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:02:45.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:02:45.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:02:45.861 [DEBUG] [Thread-137394] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:02:46.073 [DEBUG] [Thread-137396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:02:48.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:02:48.928 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:02:49.535 [DEBUG] [Thread-137397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:01.132 [DEBUG] [Thread-137398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:15.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:03:15.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:03:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:03:16.167 [DEBUG] [Thread-137399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:17.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 2, 51), 0.6, 96.02, 0.0, 24.79, 14.67, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:03:17.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:02:51
2026-02-11T23:03:18.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:03:18.529 [DEBUG] [Thread-137400] [transport.py] [_log()] starting thread (client mode): 0x9eb04a60
2026-02-11T23:03:18.529 [DEBUG] [Thread-137400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:03:18.551 [DEBUG] [Thread-137400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:03:18.551 [INFO] [Thread-137400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:03:18.554 [DEBUG] [Thread-137400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:03:18.554 [DEBUG] [Thread-137400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] client lang: <none>
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] server lang: <none>
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] kex follows: False
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] Compression: none
2026-02-11T23:03:18.555 [DEBUG] [Thread-137400] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:03:18.572 [DEBUG] [Thread-137400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:03:18.573 [DEBUG] [Thread-137400] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:03:18.574 [DEBUG] [Thread-137400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:03:18.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:03:18.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:03:18.576 [DEBUG] [Thread-137400] [transport.py] [_log()] userauth is OK
2026-02-11T23:03:18.576 [DEBUG] [Thread-137400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:03:18.577 [DEBUG] [Thread-137400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:03:18.577 [DEBUG] [Thread-137400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:03:18.577 [DEBUG] [Thread-137400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:03:18.601 [INFO] [Thread-137400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:03:18.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:03:19.233 [DEBUG] [Thread-137400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:03:19.233 [DEBUG] [Thread-137400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:03:19.234 [DEBUG] [Thread-137400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:03:19.275 [DEBUG] [Thread-137400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:03:19.275 [DEBUG] [Thread-137400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:03:19.278 [DEBUG] [Thread-137400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:03:19.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:03:19.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:03:19.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:03:19.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:03:19.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:03:19.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:03:19.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:03:19.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:03:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:03:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.876872 -999.00  +14.70  19.42     91  +13.40 1 3 1 3 1     0    0 1.09 -10.42 ----- 14.7 19.4 185.2 23.1 16.5 -2.6 16.3 -3.3 16.2 -3.3 16.5 -3.3
2026-02-11T23:03:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:03:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:03:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.876872
2026-02-11T23:03:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:03:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:03:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:03:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:03:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:03:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:02:51', tmtdew=0.6, humidity=96.02, cloud=0.0, wind=24.79, temperature=14.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:02:41.741', atlas_cloud=3, atlas_rain=1, zp_data=[2.579249999999999, nan, 2.24575, 2.228999999999999, 2.2794999999999996, nan, nan, nan, nan, nan, 2.5547499999999994, 2.098, 2.3259999999999996, 2.2307499999999996, nan, nan, nan, nan, 3.241999999999999, nan, 2.459999999999999, 2.656749999999999, nan, nan, nan, nan, nan, 2.351000000000001, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:03:19.305 [DEBUG] [Thread-137400] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:03:19.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:03:19.400 [DEBUG] [Thread-137403] [transport.py] [_log()] starting thread (client mode): 0xa2d97400
2026-02-11T23:03:19.400 [DEBUG] [Thread-137403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:03:19.415 [DEBUG] [Thread-137403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:03:19.415 [INFO] [Thread-137403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] client lang: <none>
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] server lang: <none>
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] kex follows: False
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:03:19.423 [DEBUG] [Thread-137403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:03:19.424 [DEBUG] [Thread-137403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:03:19.424 [DEBUG] [Thread-137403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:03:19.424 [DEBUG] [Thread-137403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:03:19.424 [DEBUG] [Thread-137403] [transport.py] [_log()] Compression: none
2026-02-11T23:03:19.424 [DEBUG] [Thread-137403] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:03:19.480 [DEBUG] [Thread-137403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:03:19.481 [DEBUG] [Thread-137403] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:03:19.482 [DEBUG] [Thread-137403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:03:19.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:03:19.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:03:19.536 [DEBUG] [Thread-137403] [transport.py] [_log()] userauth is OK
2026-02-11T23:03:19.537 [DEBUG] [Thread-137403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:03:19.537 [DEBUG] [Thread-137403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:03:19.537 [DEBUG] [Thread-137403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:03:19.537 [DEBUG] [Thread-137403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:03:19.555 [INFO] [Thread-137403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:03:19.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:03:19.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:03:20.350 [DEBUG] [Thread-137403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:03:20.350 [DEBUG] [Thread-137403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:03:20.398 [DEBUG] [Thread-137403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:03:20.398 [DEBUG] [Thread-137403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:03:20.407 [DEBUG] [Thread-137403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:03:20.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:03:20.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:03:20.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:03:20.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:03:20.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:03:20.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:03:20.442 [DEBUG] [Thread-137403] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:03:31.207 [DEBUG] [Thread-137405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:46.272 [DEBUG] [Thread-137406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:49.133 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:49.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:49.602 [DEBUG] [Thread-137407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:03:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:03:50.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:03:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:03:52.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 3, 27), 0.59, 96.11, 0.0, 22.87, 14.67, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:03:52.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:03:27
2026-02-11T23:03:53.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:03:53.279 [DEBUG] [Thread-137408] [transport.py] [_log()] starting thread (client mode): 0xa2d5cf70
2026-02-11T23:03:53.280 [DEBUG] [Thread-137408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:03:53.299 [DEBUG] [Thread-137408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:03:53.299 [INFO] [Thread-137408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:03:53.302 [DEBUG] [Thread-137408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] client lang: <none>
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] server lang: <none>
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] kex follows: False
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] Compression: none
2026-02-11T23:03:53.303 [DEBUG] [Thread-137408] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:03:53.319 [DEBUG] [Thread-137408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:03:53.320 [DEBUG] [Thread-137408] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:03:53.320 [DEBUG] [Thread-137408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:03:53.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:03:53.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:03:53.322 [DEBUG] [Thread-137408] [transport.py] [_log()] userauth is OK
2026-02-11T23:03:53.322 [DEBUG] [Thread-137408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:03:53.322 [DEBUG] [Thread-137408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:03:53.322 [DEBUG] [Thread-137408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:03:53.322 [DEBUG] [Thread-137408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:03:53.346 [INFO] [Thread-137408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:03:53.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:03:53.998 [DEBUG] [Thread-137408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:03:53.999 [DEBUG] [Thread-137408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:03:53.999 [DEBUG] [Thread-137408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:03:54.039 [DEBUG] [Thread-137408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:03:54.039 [DEBUG] [Thread-137408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:03:54.043 [DEBUG] [Thread-137408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:03:54.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:03:54.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:03:54.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:03:54.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:03:54.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:03:54.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:03:54.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:03:54.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:03:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:03:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.877220 -999.00  +14.70  20.67     91  +13.40 1 3 1 3 1     0    0 1.10 -11.08 ----- 21.6 20.7 183.0 24.2 16.5 -3.5 16.3 -4.3 16.2 -5.6 16.5 -5.2
2026-02-11T23:03:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:03:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:03:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.877220
2026-02-11T23:03:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:03:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:03:54.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:03:54.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:03:54.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:03:54.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:03:27', tmtdew=0.59, humidity=96.11, cloud=0.0, wind=22.87, temperature=14.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:03:11.808', atlas_cloud=3, atlas_rain=1, zp_data=[2.579249999999999, nan, 2.24575, 2.228999999999999, 2.2794999999999996, nan, nan, nan, nan, nan, 2.5547499999999994, 2.098, 2.3259999999999996, 2.2307499999999996, nan, nan, nan, nan, 3.241999999999999, nan, 2.459999999999999, 2.656749999999999, nan, nan, nan, nan, nan, 2.351000000000001, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:03:54.071 [DEBUG] [Thread-137408] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:03:54.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:03:54.168 [DEBUG] [Thread-137411] [transport.py] [_log()] starting thread (client mode): 0x9eb04d30
2026-02-11T23:03:54.168 [DEBUG] [Thread-137411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:03:54.183 [DEBUG] [Thread-137411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:03:54.183 [INFO] [Thread-137411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:03:54.191 [DEBUG] [Thread-137411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:03:54.191 [DEBUG] [Thread-137411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:03:54.191 [DEBUG] [Thread-137411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:03:54.191 [DEBUG] [Thread-137411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:54.191 [DEBUG] [Thread-137411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:03:54.191 [DEBUG] [Thread-137411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:54.191 [DEBUG] [Thread-137411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] client lang: <none>
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] server lang: <none>
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] kex follows: False
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:03:54.192 [DEBUG] [Thread-137411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:03:54.193 [DEBUG] [Thread-137411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:03:54.193 [DEBUG] [Thread-137411] [transport.py] [_log()] Compression: none
2026-02-11T23:03:54.193 [DEBUG] [Thread-137411] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:03:54.249 [DEBUG] [Thread-137411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:03:54.250 [DEBUG] [Thread-137411] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:03:54.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:03:54.251 [DEBUG] [Thread-137411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:03:54.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:03:54.310 [DEBUG] [Thread-137411] [transport.py] [_log()] userauth is OK
2026-02-11T23:03:54.310 [DEBUG] [Thread-137411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:03:54.310 [DEBUG] [Thread-137411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:03:54.311 [DEBUG] [Thread-137411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:03:54.311 [DEBUG] [Thread-137411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:03:54.329 [INFO] [Thread-137411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:03:54.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:03:54.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:03:55.138 [DEBUG] [Thread-137411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:03:55.138 [DEBUG] [Thread-137411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:03:55.186 [DEBUG] [Thread-137411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:03:55.187 [DEBUG] [Thread-137411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:03:55.196 [DEBUG] [Thread-137411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:03:55.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:03:55.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')
2026-02-11T23:03:55.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:03:55.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:03:55.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:03:55.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:03:55.234 [DEBUG] [Thread-137411] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:04:01.309 [DEBUG] [Thread-137413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:04:16.360 [DEBUG] [Thread-137414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:04:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:04:25.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:04:25.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
2026-02-11T23:04:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 4, 2), 0.59, 96.09, 0.0, 23.22, 14.68, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:04:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:04:02
2026-02-11T23:04:27.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:04:27.656 [DEBUG] [Thread-137415] [transport.py] [_log()] starting thread (client mode): 0xa2d97400
2026-02-11T23:04:27.656 [DEBUG] [Thread-137415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:04:27.675 [DEBUG] [Thread-137415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:04:27.675 [INFO] [Thread-137415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:04:27.678 [DEBUG] [Thread-137415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:04:27.678 [DEBUG] [Thread-137415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:04:27.678 [DEBUG] [Thread-137415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:04:27.678 [DEBUG] [Thread-137415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:04:27.678 [DEBUG] [Thread-137415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:04:27.678 [DEBUG] [Thread-137415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] client lang: <none>
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] server lang: <none>
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] kex follows: False
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] Compression: none
2026-02-11T23:04:27.679 [DEBUG] [Thread-137415] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:04:27.697 [DEBUG] [Thread-137415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:04:27.698 [DEBUG] [Thread-137415] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:04:27.698 [DEBUG] [Thread-137415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:04:27.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:04:27.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:04:27.700 [DEBUG] [Thread-137415] [transport.py] [_log()] userauth is OK
2026-02-11T23:04:27.701 [DEBUG] [Thread-137415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:04:27.701 [DEBUG] [Thread-137415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:04:27.701 [DEBUG] [Thread-137415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:04:27.701 [DEBUG] [Thread-137415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:04:27.736 [INFO] [Thread-137415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:04:27.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:04:28.503 [DEBUG] [Thread-137415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:04:28.504 [DEBUG] [Thread-137415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:04:28.504 [DEBUG] [Thread-137415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:04:28.545 [DEBUG] [Thread-137415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:04:28.545 [DEBUG] [Thread-137415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:04:28.550 [DEBUG] [Thread-137415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:04:28.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:04:28.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:04:28.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:04:28.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:04:28.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:04:28.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:04:28.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:04:28.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:04:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:04:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.877567 -999.00  +14.70  17.56     91  +13.40 1 3 1 3 1     0    0 1.07 -11.48 Z.E.. 18.2 17.6 183.6 23.0 16.5 -6.4 16.1 -8.0 16.1 -10.0 16.5 -10.3
2026-02-11T23:04:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:04:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:04:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.877567
2026-02-11T23:04:28.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:04:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:04:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:04:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:04:28.580 [DEBUG] [Thread-137415] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:04:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:04:28.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:04:02', tmtdew=0.59, humidity=96.09, cloud=0.0, wind=23.22, temperature=14.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:03:41.789', atlas_cloud=3, atlas_rain=1, zp_data=[2.579249999999999, nan, 2.24575, 2.228999999999999, 2.2794999999999996, nan, nan, nan, nan, nan, 2.5547499999999994, 2.098, 2.3259999999999996, 2.2307499999999996, nan, nan, nan, nan, 3.241999999999999, nan, 2.459999999999999, 2.656749999999999, nan, nan, nan, nan, nan, 2.351000000000001, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:04:28.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:04:28.684 [DEBUG] [Thread-137418] [transport.py] [_log()] starting thread (client mode): 0xa2d5fc10
2026-02-11T23:04:28.684 [DEBUG] [Thread-137418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:04:28.700 [DEBUG] [Thread-137418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:04:28.700 [INFO] [Thread-137418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:04:28.708 [DEBUG] [Thread-137418] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:04:28.708 [DEBUG] [Thread-137418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:04:28.708 [DEBUG] [Thread-137418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:04:28.709 [DEBUG] [Thread-137418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:04:28.709 [DEBUG] [Thread-137418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:04:28.709 [DEBUG] [Thread-137418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:04:28.709 [DEBUG] [Thread-137418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:04:28.709 [DEBUG] [Thread-137418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] client lang: <none>
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] server lang: <none>
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] kex follows: False
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] Compression: none
2026-02-11T23:04:28.710 [DEBUG] [Thread-137418] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:04:28.769 [DEBUG] [Thread-137418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:04:28.770 [DEBUG] [Thread-137418] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:04:28.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:04:28.771 [DEBUG] [Thread-137418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:04:28.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:04:28.829 [DEBUG] [Thread-137418] [transport.py] [_log()] userauth is OK
2026-02-11T23:04:28.829 [DEBUG] [Thread-137418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:04:28.829 [DEBUG] [Thread-137418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:04:28.830 [DEBUG] [Thread-137418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:04:28.830 [DEBUG] [Thread-137418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:04:28.849 [INFO] [Thread-137418] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:04:28.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:04:28.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:04:29.671 [DEBUG] [Thread-137418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:04:29.672 [DEBUG] [Thread-137418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:04:29.720 [DEBUG] [Thread-137418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:04:29.720 [DEBUG] [Thread-137418] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:04:29.729 [DEBUG] [Thread-137418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:04:29.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:04:29.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')
2026-02-11T23:04:29.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:04:29.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:04:29.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:04:29.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:04:29.765 [DEBUG] [Thread-137418] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:04:31.390 [DEBUG] [Thread-137420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:04:46.450 [DEBUG] [Thread-137421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:04:49.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:04:49.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:04:49.688 [DEBUG] [Thread-137422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:04:59.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:04:59.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:04:59.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:05:01.488 [DEBUG] [Thread-137423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:05:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 4, 38), 1.1, 93.05, 0.0, 27.87, 15.1, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:05:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:04:38
2026-02-11T23:05:01.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:05:02.140 [DEBUG] [Thread-137424] [transport.py] [_log()] starting thread (client mode): 0xa2d96140
2026-02-11T23:05:02.141 [DEBUG] [Thread-137424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:05:02.161 [DEBUG] [Thread-137424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:05:02.161 [INFO] [Thread-137424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:05:02.164 [DEBUG] [Thread-137424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:05:02.164 [DEBUG] [Thread-137424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:05:02.164 [DEBUG] [Thread-137424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:05:02.164 [DEBUG] [Thread-137424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:02.164 [DEBUG] [Thread-137424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:02.164 [DEBUG] [Thread-137424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] client lang: <none>
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] server lang: <none>
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] kex follows: False
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] Compression: none
2026-02-11T23:05:02.165 [DEBUG] [Thread-137424] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:05:02.184 [DEBUG] [Thread-137424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:05:02.185 [DEBUG] [Thread-137424] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:05:02.186 [DEBUG] [Thread-137424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:05:02.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:05:02.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:05:02.188 [DEBUG] [Thread-137424] [transport.py] [_log()] userauth is OK
2026-02-11T23:05:02.189 [DEBUG] [Thread-137424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:05:02.189 [DEBUG] [Thread-137424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:05:02.189 [DEBUG] [Thread-137424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:05:02.190 [DEBUG] [Thread-137424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:05:02.211 [INFO] [Thread-137424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:05:02.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:05:02.778 [DEBUG] [Thread-137424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:05:02.778 [DEBUG] [Thread-137424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:05:02.779 [DEBUG] [Thread-137424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:05:02.819 [DEBUG] [Thread-137424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:05:02.820 [DEBUG] [Thread-137424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:05:02.823 [DEBUG] [Thread-137424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:05:02.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:05:02.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:05:02.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:05:02.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:05:02.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:05:02.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:05:02.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:05:02.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:05:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:05:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.877914 -999.00  +14.70  16.95     91  +13.30 1 3 1 3 1     0    0 1.06 -11.00 Z.E.. 15.7 16.9 187.2 21.7 16.4 -10.6 16.2 -10.2 16.1 -8.6 16.4 -9.2
2026-02-11T23:05:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:05:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:05:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.877914
2026-02-11T23:05:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:05:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:05:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:05:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:05:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:05:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:04:38', tmtdew=1.1, humidity=93.05, cloud=0.0, wind=27.87, temperature=15.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:04:11.770', atlas_cloud=3, atlas_rain=1, zp_data=[2.579249999999999, nan, 2.24575, 2.228999999999999, 2.2794999999999996, nan, nan, nan, nan, nan, 2.5547499999999994, 2.098, 2.3259999999999996, 2.2307499999999996, nan, nan, nan, nan, 3.241999999999999, nan, 2.459999999999999, 2.656749999999999, nan, nan, nan, nan, nan, 2.351000000000001, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:05:02.852 [DEBUG] [Thread-137424] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:05:02.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:05:02.953 [DEBUG] [Thread-137427] [transport.py] [_log()] starting thread (client mode): 0xa2d5fb80
2026-02-11T23:05:02.953 [DEBUG] [Thread-137427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:05:02.967 [DEBUG] [Thread-137427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:05:02.967 [INFO] [Thread-137427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:05:02.975 [DEBUG] [Thread-137427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:05:02.975 [DEBUG] [Thread-137427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:05:02.975 [DEBUG] [Thread-137427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:05:02.975 [DEBUG] [Thread-137427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:02.975 [DEBUG] [Thread-137427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] client lang: <none>
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] server lang: <none>
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] kex follows: False
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:05:02.976 [DEBUG] [Thread-137427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:05:02.977 [DEBUG] [Thread-137427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:05:02.977 [DEBUG] [Thread-137427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:05:02.977 [DEBUG] [Thread-137427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:05:02.977 [DEBUG] [Thread-137427] [transport.py] [_log()] Compression: none
2026-02-11T23:05:02.977 [DEBUG] [Thread-137427] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:05:03.036 [DEBUG] [Thread-137427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:05:03.036 [DEBUG] [Thread-137427] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:05:03.036 [DEBUG] [Thread-137427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:05:03.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:05:03.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:05:03.099 [DEBUG] [Thread-137427] [transport.py] [_log()] userauth is OK
2026-02-11T23:05:03.099 [DEBUG] [Thread-137427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:05:03.099 [DEBUG] [Thread-137427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:05:03.100 [DEBUG] [Thread-137427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:05:03.100 [DEBUG] [Thread-137427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:05:03.121 [INFO] [Thread-137427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:05:03.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:05:03.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:05:03.940 [DEBUG] [Thread-137427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:05:03.940 [DEBUG] [Thread-137427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:05:03.989 [DEBUG] [Thread-137427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:05:03.989 [DEBUG] [Thread-137427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:05:03.998 [DEBUG] [Thread-137427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:05:04.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:05:04.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:05:04.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:05:04.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:05:04.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:05:04.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:05:04.038 [DEBUG] [Thread-137427] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:05:16.523 [DEBUG] [Thread-137429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:05:31.586 [DEBUG] [Thread-137430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:05:34.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:05:34.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:05:34.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:05:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 5, 14), 0.6, 96.04, 0.0, 22.07, 14.53, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:05:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:05:14
2026-02-11T23:05:36.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:05:36.798 [DEBUG] [Thread-137431] [transport.py] [_log()] starting thread (client mode): 0xa2d9f6d0
2026-02-11T23:05:36.798 [DEBUG] [Thread-137431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:05:36.819 [DEBUG] [Thread-137431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:05:36.819 [INFO] [Thread-137431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] client lang: <none>
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] server lang: <none>
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] kex follows: False
2026-02-11T23:05:36.822 [DEBUG] [Thread-137431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:05:36.823 [DEBUG] [Thread-137431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:05:36.823 [DEBUG] [Thread-137431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:05:36.823 [DEBUG] [Thread-137431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:05:36.823 [DEBUG] [Thread-137431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:05:36.823 [DEBUG] [Thread-137431] [transport.py] [_log()] Compression: none
2026-02-11T23:05:36.823 [DEBUG] [Thread-137431] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:05:36.840 [DEBUG] [Thread-137431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:05:36.840 [DEBUG] [Thread-137431] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:05:36.841 [DEBUG] [Thread-137431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:05:36.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:05:36.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:05:36.843 [DEBUG] [Thread-137431] [transport.py] [_log()] userauth is OK
2026-02-11T23:05:36.843 [DEBUG] [Thread-137431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:05:36.843 [DEBUG] [Thread-137431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:05:36.843 [DEBUG] [Thread-137431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:05:36.843 [DEBUG] [Thread-137431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:05:36.867 [INFO] [Thread-137431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:05:36.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:05:37.437 [DEBUG] [Thread-137431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:05:37.437 [DEBUG] [Thread-137431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:05:37.437 [DEBUG] [Thread-137431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:05:37.477 [DEBUG] [Thread-137431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:05:37.478 [DEBUG] [Thread-137431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:05:37.481 [DEBUG] [Thread-137431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:05:37.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:05:37.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:05:37.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:05:37.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:05:37.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:05:37.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:05:37.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:05:37.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:05:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:05:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.878261 -999.00  +14.60  20.73     91  +13.20 1 3 1 3 1     0    0 1.08 -11.17 Z.eSw 19.7 20.7 184.4 30.4 16.4 -9.0 16.1 -9.7 16.1 -9.8 16.4 -10.3
2026-02-11T23:05:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:05:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:05:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.878261
2026-02-11T23:05:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:05:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:05:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:05:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:05:37.507 [DEBUG] [Thread-137431] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:05:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:05:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:05:14', tmtdew=0.6, humidity=96.04, cloud=0.0, wind=22.07, temperature=14.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:04:41.750', atlas_cloud=3, atlas_rain=1, zp_data=[2.579249999999999, nan, 2.24575, 2.228999999999999, 2.2794999999999996, nan, nan, nan, nan, nan, 2.5547499999999994, 2.098, 2.3259999999999996, 2.2307499999999996, nan, nan, nan, nan, 3.241999999999999, nan, 2.459999999999999, 2.656749999999999, nan, nan, nan, nan, nan, 2.351000000000001, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T20:56:00')
2026-02-11T23:05:37.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:05:37.604 [DEBUG] [Thread-137434] [transport.py] [_log()] starting thread (client mode): 0xa2d04ac0
2026-02-11T23:05:37.604 [DEBUG] [Thread-137434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:05:37.618 [DEBUG] [Thread-137434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:05:37.619 [INFO] [Thread-137434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:05:37.627 [DEBUG] [Thread-137434] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:05:37.627 [DEBUG] [Thread-137434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:05:37.627 [DEBUG] [Thread-137434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:05:37.627 [DEBUG] [Thread-137434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:37.627 [DEBUG] [Thread-137434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:05:37.627 [DEBUG] [Thread-137434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:37.627 [DEBUG] [Thread-137434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:05:37.628 [DEBUG] [Thread-137434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:05:37.628 [DEBUG] [Thread-137434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:05:37.628 [DEBUG] [Thread-137434] [transport.py] [_log()] client lang: <none>
2026-02-11T23:05:37.628 [DEBUG] [Thread-137434] [transport.py] [_log()] server lang: <none>
2026-02-11T23:05:37.628 [DEBUG] [Thread-137434] [transport.py] [_log()] kex follows: False
2026-02-11T23:05:37.628 [DEBUG] [Thread-137434] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:05:37.629 [DEBUG] [Thread-137434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:05:37.629 [DEBUG] [Thread-137434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:05:37.629 [DEBUG] [Thread-137434] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:05:37.629 [DEBUG] [Thread-137434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:05:37.629 [DEBUG] [Thread-137434] [transport.py] [_log()] Compression: none
2026-02-11T23:05:37.629 [DEBUG] [Thread-137434] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:05:37.685 [DEBUG] [Thread-137434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:05:37.685 [DEBUG] [Thread-137434] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:05:37.686 [DEBUG] [Thread-137434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:05:37.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:05:37.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:05:37.743 [DEBUG] [Thread-137434] [transport.py] [_log()] userauth is OK
2026-02-11T23:05:37.743 [DEBUG] [Thread-137434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:05:37.743 [DEBUG] [Thread-137434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:05:37.743 [DEBUG] [Thread-137434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:05:37.744 [DEBUG] [Thread-137434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:05:37.762 [INFO] [Thread-137434] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:05:37.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:05:37.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:05:38.570 [DEBUG] [Thread-137434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:05:38.570 [DEBUG] [Thread-137434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:05:38.618 [DEBUG] [Thread-137434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:05:38.618 [DEBUG] [Thread-137434] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:05:38.628 [DEBUG] [Thread-137434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:05:38.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:05:38.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:05:38.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:05:38.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:05:38.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:05:38.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:05:38.664 [DEBUG] [Thread-137434] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:05:46.623 [DEBUG] [Thread-137436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:05:49.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:05:49.542 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:05:49.747 [DEBUG] [Thread-137437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:06:01.673 [DEBUG] [Thread-137438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:06:08.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:06:08.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:06:08.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:06:10.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 5, 49), 0.6, 96.01, 0.0, 23.45, 14.5, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:06:10.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:05:49
2026-02-11T23:06:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:06:11.165 [DEBUG] [Thread-137439] [transport.py] [_log()] starting thread (client mode): 0x9eb07ca0
2026-02-11T23:06:11.165 [DEBUG] [Thread-137439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:06:11.185 [DEBUG] [Thread-137439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:06:11.185 [INFO] [Thread-137439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] client lang: <none>
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] server lang: <none>
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] kex follows: False
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] Compression: none
2026-02-11T23:06:11.189 [DEBUG] [Thread-137439] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:06:11.206 [DEBUG] [Thread-137439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:06:11.207 [DEBUG] [Thread-137439] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:06:11.207 [DEBUG] [Thread-137439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:06:11.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:06:11.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:06:11.209 [DEBUG] [Thread-137439] [transport.py] [_log()] userauth is OK
2026-02-11T23:06:11.209 [DEBUG] [Thread-137439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:06:11.209 [DEBUG] [Thread-137439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:06:11.210 [DEBUG] [Thread-137439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:06:11.210 [DEBUG] [Thread-137439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:06:11.230 [INFO] [Thread-137439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:06:11.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:06:11.862 [DEBUG] [Thread-137439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:06:11.863 [DEBUG] [Thread-137439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:06:11.863 [DEBUG] [Thread-137439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:06:11.903 [DEBUG] [Thread-137439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:06:11.904 [DEBUG] [Thread-137439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:06:11.907 [DEBUG] [Thread-137439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:06:11.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:06:11.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:06:11.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:06:11.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:06:11.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:06:11.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:06:11.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:06:11.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:06:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:06:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.878608 -999.00  +14.50  19.99     91  +13.20 1 3 1 3 1     0    0 1.05 -11.84 Z.eSw 22.1 20.0 183.2 30.9 16.4 -9.9 16.1 -8.4 16.0 -6.8 16.4 -6.7
2026-02-11T23:06:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:06:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:06:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.878608
2026-02-11T23:06:11.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:06:11.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:06:11.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:06:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:06:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:06:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:05:49', tmtdew=0.6, humidity=96.01, cloud=0.0, wind=23.45, temperature=14.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:05:11.731', atlas_cloud=3, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:06:11.935 [DEBUG] [Thread-137439] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:06:12.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:06:12.031 [DEBUG] [Thread-137442] [transport.py] [_log()] starting thread (client mode): 0xa2d4d420
2026-02-11T23:06:12.031 [DEBUG] [Thread-137442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:06:12.045 [DEBUG] [Thread-137442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:06:12.045 [INFO] [Thread-137442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:06:12.052 [DEBUG] [Thread-137442] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:06:12.052 [DEBUG] [Thread-137442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:06:12.052 [DEBUG] [Thread-137442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:06:12.052 [DEBUG] [Thread-137442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] client lang: <none>
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] server lang: <none>
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] kex follows: False
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] Compression: none
2026-02-11T23:06:12.053 [DEBUG] [Thread-137442] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:06:12.113 [DEBUG] [Thread-137442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:06:12.114 [DEBUG] [Thread-137442] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:06:12.114 [DEBUG] [Thread-137442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:06:12.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:06:12.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:06:12.169 [DEBUG] [Thread-137442] [transport.py] [_log()] userauth is OK
2026-02-11T23:06:12.170 [DEBUG] [Thread-137442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:06:12.170 [DEBUG] [Thread-137442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:06:12.170 [DEBUG] [Thread-137442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:06:12.170 [DEBUG] [Thread-137442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:06:12.189 [INFO] [Thread-137442] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:06:12.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:06:12.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:06:13.059 [DEBUG] [Thread-137442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:06:13.059 [DEBUG] [Thread-137442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:06:13.108 [DEBUG] [Thread-137442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:06:13.108 [DEBUG] [Thread-137442] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:06:13.116 [DEBUG] [Thread-137442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:06:13.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:06:13.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:06:13.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:06:13.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:06:13.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:06:13.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:06:13.151 [DEBUG] [Thread-137442] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:06:16.709 [DEBUG] [Thread-137444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:06:31.761 [DEBUG] [Thread-137445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:06:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:06:43.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:06:43.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
2026-02-11T23:06:45.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 6, 25), 0.6, 96.04, 0.0, 23.75, 14.52, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:06:45.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:06:25
2026-02-11T23:06:45.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:06:46.015 [DEBUG] [Thread-137446] [transport.py] [_log()] starting thread (client mode): 0xa2d4ef50
2026-02-11T23:06:46.015 [DEBUG] [Thread-137446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:06:46.035 [DEBUG] [Thread-137446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:06:46.036 [INFO] [Thread-137446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:06:46.037 [DEBUG] [Thread-137446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] client lang: <none>
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] server lang: <none>
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] kex follows: False
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] Compression: none
2026-02-11T23:06:46.038 [DEBUG] [Thread-137446] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:06:46.048 [DEBUG] [Thread-137446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:06:46.049 [DEBUG] [Thread-137446] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:06:46.049 [DEBUG] [Thread-137446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:06:46.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:06:46.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:06:46.052 [DEBUG] [Thread-137446] [transport.py] [_log()] userauth is OK
2026-02-11T23:06:46.052 [DEBUG] [Thread-137446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:06:46.052 [DEBUG] [Thread-137446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:06:46.053 [DEBUG] [Thread-137446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:06:46.053 [DEBUG] [Thread-137446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:06:46.074 [INFO] [Thread-137446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:06:46.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:06:46.736 [DEBUG] [Thread-137446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:06:46.736 [DEBUG] [Thread-137446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:06:46.736 [DEBUG] [Thread-137446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:06:46.776 [DEBUG] [Thread-137446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:06:46.776 [DEBUG] [Thread-137446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:06:46.780 [DEBUG] [Thread-137446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:06:46.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:06:46.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:06:46.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:06:46.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:06:46.798 [DEBUG] [Thread-137449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:06:46.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:06:46.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:06:46.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:06:46.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:06:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:06:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.879303 -999.00  +14.50  19.95     91  +13.20 1 3 1 3 1     0    0 1.04 -11.60 Z...w 18.6 19.9 181.8 28.0 16.3 -4.1 16.0 -4.8 16.1 -4.3 16.4 -4.4
2026-02-11T23:06:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:06:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:06:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.879303
2026-02-11T23:06:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:06:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:06:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:06:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:06:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:06:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:06:25', tmtdew=0.6, humidity=96.04, cloud=0.0, wind=23.75, temperature=14.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:06:11.779', atlas_cloud=3, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:06:46.806 [DEBUG] [Thread-137446] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:06:46.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:06:46.900 [DEBUG] [Thread-137450] [transport.py] [_log()] starting thread (client mode): 0x9eb04760
2026-02-11T23:06:46.900 [DEBUG] [Thread-137450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:06:46.915 [DEBUG] [Thread-137450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:06:46.915 [INFO] [Thread-137450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:06:46.923 [DEBUG] [Thread-137450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] client lang: <none>
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] server lang: <none>
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] kex follows: False
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] Compression: none
2026-02-11T23:06:46.924 [DEBUG] [Thread-137450] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:06:46.982 [DEBUG] [Thread-137450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:06:46.983 [DEBUG] [Thread-137450] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:06:46.984 [DEBUG] [Thread-137450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:06:46.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:06:46.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:06:47.041 [DEBUG] [Thread-137450] [transport.py] [_log()] userauth is OK
2026-02-11T23:06:47.042 [DEBUG] [Thread-137450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:06:47.042 [DEBUG] [Thread-137450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:06:47.042 [DEBUG] [Thread-137450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:06:47.042 [DEBUG] [Thread-137450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:06:47.068 [INFO] [Thread-137450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:06:47.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:06:47.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:06:47.912 [DEBUG] [Thread-137450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:06:47.913 [DEBUG] [Thread-137450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:06:47.960 [DEBUG] [Thread-137450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:06:47.960 [DEBUG] [Thread-137450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:06:47.969 [DEBUG] [Thread-137450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:06:47.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:06:47.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:06:47.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:06:47.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:06:47.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:06:47.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:06:48.002 [DEBUG] [Thread-137450] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:06:49.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:06:49.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:06:49.849 [DEBUG] [Thread-137452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:01.834 [DEBUG] [Thread-137453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:16.884 [DEBUG] [Thread-137454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:07:18.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:07:18.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:07:20.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 7), 0.6, 96.01, 0.0, 23.8, 14.45, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:07:20.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:07:00
2026-02-11T23:07:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:07:20.692 [DEBUG] [Thread-137455] [transport.py] [_log()] starting thread (client mode): 0xa2d5e110
2026-02-11T23:07:20.693 [DEBUG] [Thread-137455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:07:20.712 [DEBUG] [Thread-137455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:07:20.712 [INFO] [Thread-137455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:20.715 [DEBUG] [Thread-137455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] client lang: <none>
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] server lang: <none>
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] kex follows: False
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] Compression: none
2026-02-11T23:07:20.716 [DEBUG] [Thread-137455] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:07:20.736 [DEBUG] [Thread-137455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:07:20.737 [DEBUG] [Thread-137455] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:07:20.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:07:20.738 [DEBUG] [Thread-137455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:07:20.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:07:20.740 [DEBUG] [Thread-137455] [transport.py] [_log()] userauth is OK
2026-02-11T23:07:20.740 [DEBUG] [Thread-137455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:07:20.740 [DEBUG] [Thread-137455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:07:20.740 [DEBUG] [Thread-137455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:07:20.741 [DEBUG] [Thread-137455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:07:20.766 [INFO] [Thread-137455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:07:20.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:07:21.511 [DEBUG] [Thread-137455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:07:21.511 [DEBUG] [Thread-137455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:07:21.512 [DEBUG] [Thread-137455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:07:21.552 [DEBUG] [Thread-137455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:07:21.552 [DEBUG] [Thread-137455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:07:21.556 [DEBUG] [Thread-137455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:07:21.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:07:21.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:07:21.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:07:21.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:07:21.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:07:21.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:07:21.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:07:21.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:07:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:07:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.879650 -999.00  +14.50  19.30     92  +13.20 1 3 1 3 1     0    0 1.03 -12.40 ----- 20.2 19.3 181.8 25.9 16.3 -3.5 16.1 -3.0 16.0 -2.8 16.3 -3.1
2026-02-11T23:07:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:07:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:07:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.879650
2026-02-11T23:07:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:07:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:07:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:07:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:07:21.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:07:21.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:07:00', tmtdew=0.6, humidity=96.01, cloud=0.0, wind=23.8, temperature=14.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:06:41.760', atlas_cloud=3, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:07:21.586 [DEBUG] [Thread-137455] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:07:21.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:07:21.671 [DEBUG] [Thread-137458] [transport.py] [_log()] starting thread (client mode): 0xa2d4ec20
2026-02-11T23:07:21.671 [DEBUG] [Thread-137458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:07:21.685 [DEBUG] [Thread-137458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:07:21.685 [INFO] [Thread-137458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] client lang: <none>
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] server lang: <none>
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] kex follows: False
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] Compression: none
2026-02-11T23:07:21.693 [DEBUG] [Thread-137458] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:07:21.753 [DEBUG] [Thread-137458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:07:21.753 [DEBUG] [Thread-137458] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:07:21.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:07:21.755 [DEBUG] [Thread-137458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:07:21.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:07:21.814 [DEBUG] [Thread-137458] [transport.py] [_log()] userauth is OK
2026-02-11T23:07:21.814 [DEBUG] [Thread-137458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:07:21.814 [DEBUG] [Thread-137458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:07:21.815 [DEBUG] [Thread-137458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:07:21.815 [DEBUG] [Thread-137458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:07:21.837 [INFO] [Thread-137458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:07:21.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:07:21.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:07:22.664 [DEBUG] [Thread-137458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:07:22.664 [DEBUG] [Thread-137458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:07:22.713 [DEBUG] [Thread-137458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:07:22.713 [DEBUG] [Thread-137458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:07:22.722 [DEBUG] [Thread-137458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:07:22.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:07:22.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:07:22.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:07:22.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:07:22.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:07:22.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:07:22.759 [DEBUG] [Thread-137458] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:07:31.919 [DEBUG] [Thread-137460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:46.977 [DEBUG] [Thread-137461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:49.920 [DEBUG] [Thread-137462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:49.957 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:49.958 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:07:52.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:07:52.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:07:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:07:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 7, 35), 1.1, 93.05, 0.0, 32.11, 14.94, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:07:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:07:35
2026-02-11T23:07:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:07:55.381 [DEBUG] [Thread-137463] [transport.py] [_log()] starting thread (client mode): 0xa57e3190
2026-02-11T23:07:55.381 [DEBUG] [Thread-137463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:07:55.400 [DEBUG] [Thread-137463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:07:55.401 [INFO] [Thread-137463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:07:55.403 [DEBUG] [Thread-137463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] client lang: <none>
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] server lang: <none>
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] kex follows: False
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] Compression: none
2026-02-11T23:07:55.404 [DEBUG] [Thread-137463] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:07:55.422 [DEBUG] [Thread-137463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:07:55.422 [DEBUG] [Thread-137463] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:07:55.423 [DEBUG] [Thread-137463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:07:55.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:07:55.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:07:55.425 [DEBUG] [Thread-137463] [transport.py] [_log()] userauth is OK
2026-02-11T23:07:55.425 [DEBUG] [Thread-137463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:07:55.425 [DEBUG] [Thread-137463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:07:55.425 [DEBUG] [Thread-137463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:07:55.425 [DEBUG] [Thread-137463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:07:55.450 [INFO] [Thread-137463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:07:55.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:07:56.087 [DEBUG] [Thread-137463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:07:56.087 [DEBUG] [Thread-137463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:07:56.088 [DEBUG] [Thread-137463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:07:56.128 [DEBUG] [Thread-137463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:07:56.129 [DEBUG] [Thread-137463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:07:56.132 [DEBUG] [Thread-137463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:07:56.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:07:56.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:07:56.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:07:56.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:07:56.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:07:56.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:07:56.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:07:56.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:07:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:07:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.879997 -999.00  +14.50  15.19     92  +13.20 1 3 1 3 1     0    0 1.04 -11.98 ----- 20.6 15.2 173.4 27.3 16.3 -2.8 16.0 -3.2 16.0 -3.6 16.4 -3.9
2026-02-11T23:07:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:07:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:07:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.879997
2026-02-11T23:07:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:07:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:07:56.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:07:56.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:07:56.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:07:56.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:07:35', tmtdew=1.1, humidity=93.05, cloud=0.0, wind=32.11, temperature=14.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:07:11.741', atlas_cloud=3, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:07:56.159 [DEBUG] [Thread-137463] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:07:56.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:07:56.256 [DEBUG] [Thread-137466] [transport.py] [_log()] starting thread (client mode): 0xa57b2f50
2026-02-11T23:07:56.257 [DEBUG] [Thread-137466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:07:56.273 [DEBUG] [Thread-137466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:07:56.274 [INFO] [Thread-137466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:07:56.281 [DEBUG] [Thread-137466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:07:56.282 [DEBUG] [Thread-137466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:07:56.282 [DEBUG] [Thread-137466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:07:56.282 [DEBUG] [Thread-137466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:56.282 [DEBUG] [Thread-137466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:07:56.282 [DEBUG] [Thread-137466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:56.282 [DEBUG] [Thread-137466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:07:56.282 [DEBUG] [Thread-137466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] client lang: <none>
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] server lang: <none>
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] kex follows: False
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:07:56.283 [DEBUG] [Thread-137466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:07:56.284 [DEBUG] [Thread-137466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:07:56.284 [DEBUG] [Thread-137466] [transport.py] [_log()] Compression: none
2026-02-11T23:07:56.284 [DEBUG] [Thread-137466] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:07:56.342 [DEBUG] [Thread-137466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:07:56.342 [DEBUG] [Thread-137466] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:07:56.343 [DEBUG] [Thread-137466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:07:56.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:07:56.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:07:56.397 [DEBUG] [Thread-137466] [transport.py] [_log()] userauth is OK
2026-02-11T23:07:56.397 [DEBUG] [Thread-137466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:07:56.397 [DEBUG] [Thread-137466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:07:56.397 [DEBUG] [Thread-137466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:07:56.398 [DEBUG] [Thread-137466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:07:56.421 [INFO] [Thread-137466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:07:56.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:07:56.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:07:57.223 [DEBUG] [Thread-137466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:07:57.223 [DEBUG] [Thread-137466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:07:57.272 [DEBUG] [Thread-137466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:07:57.272 [DEBUG] [Thread-137466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:07:57.283 [DEBUG] [Thread-137466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:07:57.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:07:57.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')
2026-02-11T23:07:57.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:07:57.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:07:57.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:07:57.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:07:57.320 [DEBUG] [Thread-137466] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:08:02.014 [DEBUG] [Thread-137468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:08:17.066 [DEBUG] [Thread-137469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:08:27.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:08:27.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:08:27.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:08:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 8, 11), 0.59, 96.07, 0.0, 27.08, 14.52, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:08:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:08:11
2026-02-11T23:08:29.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:08:29.706 [DEBUG] [Thread-137470] [transport.py] [_log()] starting thread (client mode): 0xa2d94400
2026-02-11T23:08:29.707 [DEBUG] [Thread-137470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:08:29.726 [DEBUG] [Thread-137470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:08:29.727 [INFO] [Thread-137470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] client lang: <none>
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] server lang: <none>
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] kex follows: False
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:08:29.730 [DEBUG] [Thread-137470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:08:29.731 [DEBUG] [Thread-137470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:08:29.731 [DEBUG] [Thread-137470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:08:29.731 [DEBUG] [Thread-137470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:08:29.731 [DEBUG] [Thread-137470] [transport.py] [_log()] Compression: none
2026-02-11T23:08:29.731 [DEBUG] [Thread-137470] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:08:29.746 [DEBUG] [Thread-137470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:08:29.747 [DEBUG] [Thread-137470] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:08:29.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:08:29.748 [DEBUG] [Thread-137470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:08:29.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:08:29.750 [DEBUG] [Thread-137470] [transport.py] [_log()] userauth is OK
2026-02-11T23:08:29.750 [DEBUG] [Thread-137470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:08:29.750 [DEBUG] [Thread-137470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:08:29.750 [DEBUG] [Thread-137470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:08:29.750 [DEBUG] [Thread-137470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:08:29.769 [INFO] [Thread-137470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:08:29.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:08:30.363 [DEBUG] [Thread-137470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:08:30.363 [DEBUG] [Thread-137470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:08:30.364 [DEBUG] [Thread-137470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:08:30.404 [DEBUG] [Thread-137470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:08:30.405 [DEBUG] [Thread-137470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:08:30.408 [DEBUG] [Thread-137470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:08:30.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:08:30.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:08:30.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:08:30.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:08:30.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:08:30.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:08:30.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:08:30.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.880345 -999.00  +14.50  20.32     92  +13.20 1 3 1 3 1     0    0 1.01 -12.98 ----- 19.5 20.3 173.6 24.4 16.3 -4.9 16.1 -6.7 16.0 -8.0 16.3 -8.7
2026-02-11T23:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:08:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.880345
2026-02-11T23:08:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:08:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:08:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:08:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:08:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:08:30.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:08:11', tmtdew=0.59, humidity=96.07, cloud=0.0, wind=27.08, temperature=14.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:07:41.808', atlas_cloud=3, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:08:30.437 [DEBUG] [Thread-137470] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:08:30.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:08:30.533 [DEBUG] [Thread-137473] [transport.py] [_log()] starting thread (client mode): 0xa2d68f10
2026-02-11T23:08:30.533 [DEBUG] [Thread-137473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:08:30.550 [DEBUG] [Thread-137473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:08:30.550 [INFO] [Thread-137473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:08:30.560 [DEBUG] [Thread-137473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:08:30.560 [DEBUG] [Thread-137473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:08:30.560 [DEBUG] [Thread-137473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] client lang: <none>
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] server lang: <none>
2026-02-11T23:08:30.561 [DEBUG] [Thread-137473] [transport.py] [_log()] kex follows: False
2026-02-11T23:08:30.562 [DEBUG] [Thread-137473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:08:30.562 [DEBUG] [Thread-137473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:08:30.562 [DEBUG] [Thread-137473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:08:30.562 [DEBUG] [Thread-137473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:08:30.562 [DEBUG] [Thread-137473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:08:30.562 [DEBUG] [Thread-137473] [transport.py] [_log()] Compression: none
2026-02-11T23:08:30.562 [DEBUG] [Thread-137473] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:08:30.618 [DEBUG] [Thread-137473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:08:30.619 [DEBUG] [Thread-137473] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:08:30.620 [DEBUG] [Thread-137473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:08:30.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:08:30.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:08:30.678 [DEBUG] [Thread-137473] [transport.py] [_log()] userauth is OK
2026-02-11T23:08:30.678 [DEBUG] [Thread-137473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:08:30.678 [DEBUG] [Thread-137473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:08:30.678 [DEBUG] [Thread-137473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:08:30.678 [DEBUG] [Thread-137473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:08:30.696 [INFO] [Thread-137473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:08:30.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:08:30.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:08:31.496 [DEBUG] [Thread-137473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:08:31.496 [DEBUG] [Thread-137473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:08:31.544 [DEBUG] [Thread-137473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:08:31.544 [DEBUG] [Thread-137473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:08:31.554 [DEBUG] [Thread-137473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:08:31.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:08:31.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:08:31.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:08:31.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:08:31.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:08:31.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:08:31.591 [DEBUG] [Thread-137473] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:08:32.103 [DEBUG] [Thread-137475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:08:47.158 [DEBUG] [Thread-137476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:08:49.994 [DEBUG] [Thread-137477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:08:50.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:08:50.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:09:01.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:09:01.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:09:01.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:09:02.191 [DEBUG] [Thread-137478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:09:03.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 8, 46), 0.6, 96.02, 0.0, 20.31, 14.44, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:09:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:08:46
2026-02-11T23:09:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:09:04.039 [DEBUG] [Thread-137479] [transport.py] [_log()] starting thread (client mode): 0xa2d4d450
2026-02-11T23:09:04.039 [DEBUG] [Thread-137479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:09:04.059 [DEBUG] [Thread-137479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:09:04.059 [INFO] [Thread-137479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:04.062 [DEBUG] [Thread-137479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] client lang: <none>
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] server lang: <none>
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] kex follows: False
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] Compression: none
2026-02-11T23:09:04.063 [DEBUG] [Thread-137479] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:09:04.081 [DEBUG] [Thread-137479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:09:04.081 [DEBUG] [Thread-137479] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:09:04.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:09:04.082 [DEBUG] [Thread-137479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:09:04.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:09:04.084 [DEBUG] [Thread-137479] [transport.py] [_log()] userauth is OK
2026-02-11T23:09:04.085 [DEBUG] [Thread-137479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:09:04.085 [DEBUG] [Thread-137479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:09:04.085 [DEBUG] [Thread-137479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:09:04.085 [DEBUG] [Thread-137479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:09:04.120 [INFO] [Thread-137479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:09:04.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:09:04.745 [DEBUG] [Thread-137479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:09:04.746 [DEBUG] [Thread-137479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:09:04.746 [DEBUG] [Thread-137479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:09:04.786 [DEBUG] [Thread-137479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:09:04.787 [DEBUG] [Thread-137479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:09:04.790 [DEBUG] [Thread-137479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:09:04.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:09:04.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:09:04.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:09:04.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:09:04.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:09:04.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:09:04.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:09:04.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:09:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:09:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.880692 -999.00  +14.50  14.69     92  +13.20 1 3 1 3 1     0    0 0.99 -12.71 ----- 21.5 14.7 171.0 22.6 16.3 -8.6 16.1 -8.5 16.0 -9.7 16.3 -9.6
2026-02-11T23:09:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:09:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:09:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.880692
2026-02-11T23:09:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:09:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:09:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:09:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:09:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:09:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:08:46', tmtdew=0.6, humidity=96.02, cloud=0.0, wind=20.31, temperature=14.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:08:11.789', atlas_cloud=3, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:09:04.820 [DEBUG] [Thread-137479] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:09:04.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:09:04.909 [DEBUG] [Thread-137482] [transport.py] [_log()] starting thread (client mode): 0xa2d9e770
2026-02-11T23:09:04.910 [DEBUG] [Thread-137482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:09:04.924 [DEBUG] [Thread-137482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:09:04.925 [INFO] [Thread-137482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:09:04.932 [DEBUG] [Thread-137482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] client lang: <none>
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] server lang: <none>
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] kex follows: False
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:09:04.933 [DEBUG] [Thread-137482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:09:04.934 [DEBUG] [Thread-137482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:09:04.934 [DEBUG] [Thread-137482] [transport.py] [_log()] Compression: none
2026-02-11T23:09:04.934 [DEBUG] [Thread-137482] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:09:04.997 [DEBUG] [Thread-137482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:09:04.997 [DEBUG] [Thread-137482] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:09:04.998 [DEBUG] [Thread-137482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:09:04.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:09:04.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:09:05.053 [DEBUG] [Thread-137482] [transport.py] [_log()] userauth is OK
2026-02-11T23:09:05.054 [DEBUG] [Thread-137482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:09:05.054 [DEBUG] [Thread-137482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:09:05.054 [DEBUG] [Thread-137482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:09:05.054 [DEBUG] [Thread-137482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:09:05.072 [INFO] [Thread-137482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:09:05.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:09:05.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:09:05.912 [DEBUG] [Thread-137482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:09:05.912 [DEBUG] [Thread-137482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:09:05.960 [DEBUG] [Thread-137482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:09:05.961 [DEBUG] [Thread-137482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:09:05.970 [DEBUG] [Thread-137482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:09:05.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:09:05.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:09:05.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:09:05.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:09:05.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:09:06.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:09:06.009 [DEBUG] [Thread-137482] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:09:17.228 [DEBUG] [Thread-137484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:09:32.280 [DEBUG] [Thread-137485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:09:36.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:09:36.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:09:36.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:09:38.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 9, 22), 0.6, 96.04, 0.0, 20.18, 14.44, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:09:38.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:09:22
2026-02-11T23:09:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:09:38.796 [DEBUG] [Thread-137486] [transport.py] [_log()] starting thread (client mode): 0xa2d9d1e0
2026-02-11T23:09:38.796 [DEBUG] [Thread-137486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:09:38.807 [DEBUG] [Thread-137486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:09:38.807 [INFO] [Thread-137486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:09:38.811 [DEBUG] [Thread-137486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] client lang: <none>
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] server lang: <none>
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] kex follows: False
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] Compression: none
2026-02-11T23:09:38.812 [DEBUG] [Thread-137486] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:09:38.831 [DEBUG] [Thread-137486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:09:38.832 [DEBUG] [Thread-137486] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:09:38.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:09:38.833 [DEBUG] [Thread-137486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:09:38.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:09:38.876 [DEBUG] [Thread-137486] [transport.py] [_log()] userauth is OK
2026-02-11T23:09:38.877 [DEBUG] [Thread-137486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:09:38.877 [DEBUG] [Thread-137486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:09:38.877 [DEBUG] [Thread-137486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:09:38.877 [DEBUG] [Thread-137486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:09:38.897 [INFO] [Thread-137486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:09:38.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:09:39.454 [DEBUG] [Thread-137486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:09:39.454 [DEBUG] [Thread-137486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:09:39.455 [DEBUG] [Thread-137486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:09:39.495 [DEBUG] [Thread-137486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:09:39.496 [DEBUG] [Thread-137486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:09:39.499 [DEBUG] [Thread-137486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:09:39.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:09:39.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:09:39.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:09:39.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:09:39.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:09:39.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:09:39.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:09:39.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:09:39.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:09:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.881386 -999.00  +14.40  20.98     92  +13.10 1 3 1 3 1     0    0 1.00 -12.69 ----- 17.6 21.0 179.8 24.3 16.2 -12.4 15.9 -13.4 15.8 -13.4 16.2 -14.7
2026-02-11T23:09:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:09:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:09:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.881386
2026-02-11T23:09:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:09:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:09:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:09:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:09:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-11T23:09:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:09:22', tmtdew=0.6, humidity=96.04, cloud=0.0, wind=20.18, temperature=14.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:09:11.750', atlas_cloud=3, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:09:39.529 [DEBUG] [Thread-137486] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:09:39.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:09:39.626 [DEBUG] [Thread-137489] [transport.py] [_log()] starting thread (client mode): 0xa57b0b80
2026-02-11T23:09:39.627 [DEBUG] [Thread-137489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:09:39.642 [DEBUG] [Thread-137489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:09:39.642 [INFO] [Thread-137489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:09:39.650 [DEBUG] [Thread-137489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:09:39.651 [DEBUG] [Thread-137489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:09:39.651 [DEBUG] [Thread-137489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:09:39.651 [DEBUG] [Thread-137489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:39.651 [DEBUG] [Thread-137489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:09:39.651 [DEBUG] [Thread-137489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] client lang: <none>
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] server lang: <none>
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] kex follows: False
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:09:39.652 [DEBUG] [Thread-137489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:09:39.653 [DEBUG] [Thread-137489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:09:39.653 [DEBUG] [Thread-137489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:09:39.653 [DEBUG] [Thread-137489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:09:39.653 [DEBUG] [Thread-137489] [transport.py] [_log()] Compression: none
2026-02-11T23:09:39.653 [DEBUG] [Thread-137489] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:09:39.715 [DEBUG] [Thread-137489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:09:39.716 [DEBUG] [Thread-137489] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:09:39.716 [DEBUG] [Thread-137489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:09:39.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:09:39.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:09:39.776 [DEBUG] [Thread-137489] [transport.py] [_log()] userauth is OK
2026-02-11T23:09:39.776 [DEBUG] [Thread-137489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:09:39.777 [DEBUG] [Thread-137489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:09:39.777 [DEBUG] [Thread-137489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:09:39.777 [DEBUG] [Thread-137489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:09:39.797 [INFO] [Thread-137489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:09:39.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:09:39.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:09:40.631 [DEBUG] [Thread-137489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:09:40.631 [DEBUG] [Thread-137489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:09:40.680 [DEBUG] [Thread-137489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:09:40.681 [DEBUG] [Thread-137489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:09:40.690 [DEBUG] [Thread-137489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:09:40.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:09:40.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:09:40.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:09:40.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:09:40.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:09:40.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:09:40.727 [DEBUG] [Thread-137489] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:09:47.317 [DEBUG] [Thread-137491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:09:50.067 [DEBUG] [Thread-137492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:09:50.372 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:09:50.373 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:10:02.363 [DEBUG] [Thread-137493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:10:10.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:10:10.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:10:10.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:10:12.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 9, 59), 0.59, 96.07, 0.0, 18.74, 14.4, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:10:12.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:09:59
2026-02-11T23:10:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:10:13.383 [DEBUG] [Thread-137494] [transport.py] [_log()] starting thread (client mode): 0xa2d697e0
2026-02-11T23:10:13.383 [DEBUG] [Thread-137494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:10:13.403 [DEBUG] [Thread-137494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:10:13.403 [INFO] [Thread-137494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:10:13.406 [DEBUG] [Thread-137494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] client lang: <none>
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] server lang: <none>
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] kex follows: False
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:10:13.407 [DEBUG] [Thread-137494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:10:13.408 [DEBUG] [Thread-137494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:10:13.408 [DEBUG] [Thread-137494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:10:13.408 [DEBUG] [Thread-137494] [transport.py] [_log()] Compression: none
2026-02-11T23:10:13.408 [DEBUG] [Thread-137494] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:10:13.424 [DEBUG] [Thread-137494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:10:13.424 [DEBUG] [Thread-137494] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:10:13.425 [DEBUG] [Thread-137494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:10:13.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:10:13.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:10:13.427 [DEBUG] [Thread-137494] [transport.py] [_log()] userauth is OK
2026-02-11T23:10:13.427 [DEBUG] [Thread-137494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:10:13.427 [DEBUG] [Thread-137494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:10:13.427 [DEBUG] [Thread-137494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:10:13.427 [DEBUG] [Thread-137494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:10:13.446 [INFO] [Thread-137494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:10:13.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:10:14.698 [DEBUG] [Thread-137494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:10:14.699 [DEBUG] [Thread-137494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:10:14.699 [DEBUG] [Thread-137494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:10:14.739 [DEBUG] [Thread-137494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:10:14.740 [DEBUG] [Thread-137494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:10:14.743 [DEBUG] [Thread-137494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:10:14.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:10:14.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:10:14.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:10:14.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:10:14.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:10:14.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:10:14.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:10:14.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:10:14.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:10:14.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.882081 -999.00  +14.40  16.87     92  +13.10 1 2 1 3 1     0    0 0.98 -13.16 Z..sW 16.6 16.9 184.8 26.7 16.1 -18.3 15.8 -18.5 15.8 -17.1 16.1 -18.0
2026-02-11T23:10:14.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:10:14.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:10:14.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.882081
2026-02-11T23:10:14.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:10:14.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:10:14.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:10:14.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:10:14.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:10:14.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:09:59', tmtdew=0.59, humidity=96.07, cloud=0.0, wind=18.74, temperature=14.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:10:11.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:10:14.772 [DEBUG] [Thread-137494] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:10:14.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:10:14.868 [DEBUG] [Thread-137497] [transport.py] [_log()] starting thread (client mode): 0xa2d6a9e0
2026-02-11T23:10:14.869 [DEBUG] [Thread-137497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:10:14.883 [DEBUG] [Thread-137497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:10:14.883 [INFO] [Thread-137497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:10:14.891 [DEBUG] [Thread-137497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:10:14.891 [DEBUG] [Thread-137497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:10:14.891 [DEBUG] [Thread-137497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:10:14.891 [DEBUG] [Thread-137497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] client lang: <none>
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] server lang: <none>
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] kex follows: False
2026-02-11T23:10:14.892 [DEBUG] [Thread-137497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:10:14.893 [DEBUG] [Thread-137497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:10:14.893 [DEBUG] [Thread-137497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:10:14.893 [DEBUG] [Thread-137497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:10:14.893 [DEBUG] [Thread-137497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:10:14.893 [DEBUG] [Thread-137497] [transport.py] [_log()] Compression: none
2026-02-11T23:10:14.893 [DEBUG] [Thread-137497] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:10:14.950 [DEBUG] [Thread-137497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:10:14.950 [DEBUG] [Thread-137497] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:10:14.951 [DEBUG] [Thread-137497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:10:14.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:10:14.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:10:15.009 [DEBUG] [Thread-137497] [transport.py] [_log()] userauth is OK
2026-02-11T23:10:15.009 [DEBUG] [Thread-137497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:10:15.010 [DEBUG] [Thread-137497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:10:15.010 [DEBUG] [Thread-137497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:10:15.010 [DEBUG] [Thread-137497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:10:15.028 [INFO] [Thread-137497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:10:15.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:10:15.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:10:15.867 [DEBUG] [Thread-137497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:10:15.867 [DEBUG] [Thread-137497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:10:15.916 [DEBUG] [Thread-137497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:10:15.916 [DEBUG] [Thread-137497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:10:15.926 [DEBUG] [Thread-137497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:10:15.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:10:15.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:10:15.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:10:15.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:10:15.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:10:15.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:10:15.970 [DEBUG] [Thread-137497] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:10:17.403 [DEBUG] [Thread-137499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:10:32.464 [DEBUG] [Thread-137500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:10:45.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:10:45.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:10:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:10:47.497 [DEBUG] [Thread-137501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:10:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 10, 34), 1.09, 93.11, 0.0, 23.15, 14.74, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:10:48.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:10:34
2026-02-11T23:10:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:10:48.592 [DEBUG] [Thread-137502] [transport.py] [_log()] starting thread (client mode): 0xa2d690c0
2026-02-11T23:10:48.592 [DEBUG] [Thread-137502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:10:48.612 [DEBUG] [Thread-137502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:10:48.612 [INFO] [Thread-137502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] client lang: <none>
2026-02-11T23:10:48.616 [DEBUG] [Thread-137502] [transport.py] [_log()] server lang: <none>
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] kex follows: False
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] Compression: none
2026-02-11T23:10:48.617 [DEBUG] [Thread-137502] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:10:48.635 [DEBUG] [Thread-137502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:10:48.636 [DEBUG] [Thread-137502] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:10:48.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:10:48.637 [DEBUG] [Thread-137502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:10:48.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:10:48.640 [DEBUG] [Thread-137502] [transport.py] [_log()] userauth is OK
2026-02-11T23:10:48.640 [DEBUG] [Thread-137502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:10:48.640 [DEBUG] [Thread-137502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:10:48.640 [DEBUG] [Thread-137502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:10:48.640 [DEBUG] [Thread-137502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:10:48.664 [INFO] [Thread-137502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:10:48.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:10:49.245 [DEBUG] [Thread-137502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:10:49.245 [DEBUG] [Thread-137502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:10:49.245 [DEBUG] [Thread-137502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:10:49.286 [DEBUG] [Thread-137502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:10:49.286 [DEBUG] [Thread-137502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:10:49.289 [DEBUG] [Thread-137502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:10:49.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:10:49.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:10:49.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:10:49.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:10:49.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:10:49.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:10:49.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:10:49.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:10:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:10:49.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.882081 -999.00  +14.40  16.87     92  +13.10 1 2 1 3 1     0    0 0.98 -13.16 Z..sW 16.6 16.9 184.8 26.7 16.1 -18.3 15.8 -18.5 15.8 -17.1 16.1 -18.0
2026-02-11T23:10:49.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:10:49.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:10:49.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.882081
2026-02-11T23:10:49.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:10:49.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:10:49.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:10:49.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:10:49.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:10:49.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:10:34', tmtdew=1.09, humidity=93.11, cloud=0.0, wind=23.15, temperature=14.74, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:10:11.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:10:49.311 [DEBUG] [Thread-137502] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:10:49.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:10:49.413 [DEBUG] [Thread-137505] [transport.py] [_log()] starting thread (client mode): 0xa57e26b0
2026-02-11T23:10:49.413 [DEBUG] [Thread-137505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:10:49.428 [DEBUG] [Thread-137505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:10:49.428 [INFO] [Thread-137505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:10:49.435 [DEBUG] [Thread-137505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:10:49.435 [DEBUG] [Thread-137505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] client lang: <none>
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] server lang: <none>
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] kex follows: False
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] Compression: none
2026-02-11T23:10:49.436 [DEBUG] [Thread-137505] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:10:49.495 [DEBUG] [Thread-137505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:10:49.495 [DEBUG] [Thread-137505] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:10:49.496 [DEBUG] [Thread-137505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:10:49.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:10:49.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:10:49.553 [DEBUG] [Thread-137505] [transport.py] [_log()] userauth is OK
2026-02-11T23:10:49.553 [DEBUG] [Thread-137505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:10:49.554 [DEBUG] [Thread-137505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:10:49.554 [DEBUG] [Thread-137505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:10:49.554 [DEBUG] [Thread-137505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:10:49.572 [INFO] [Thread-137505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:10:49.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:10:49.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:10:50.128 [DEBUG] [Thread-137507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:10:50.384 [DEBUG] [Thread-137505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:10:50.384 [DEBUG] [Thread-137505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:10:50.432 [DEBUG] [Thread-137505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:10:50.432 [DEBUG] [Thread-137505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:10:50.441 [DEBUG] [Thread-137505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:10:50.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:10: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')
2026-02-11T23:10:50.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:10:50.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:10:50.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:10:50.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:10:50.475 [DEBUG] [Thread-137505] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:10:50.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:10:50.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:02.531 [DEBUG] [Thread-137508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:17.586 [DEBUG] [Thread-137509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:20.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:11:20.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:11:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:11:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 11, 10), 0.59, 96.06, 0.0, 20.03, 14.37, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:11:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:11:10
2026-02-11T23:11:22.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:11:22.963 [DEBUG] [Thread-137510] [transport.py] [_log()] starting thread (client mode): 0xa57e0ca0
2026-02-11T23:11:22.963 [DEBUG] [Thread-137510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:11:22.983 [DEBUG] [Thread-137510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:11:22.983 [INFO] [Thread-137510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:11:22.986 [DEBUG] [Thread-137510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:11:22.986 [DEBUG] [Thread-137510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:11:22.986 [DEBUG] [Thread-137510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] client lang: <none>
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] server lang: <none>
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] kex follows: False
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] Compression: none
2026-02-11T23:11:22.987 [DEBUG] [Thread-137510] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:11:23.005 [DEBUG] [Thread-137510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:11:23.006 [DEBUG] [Thread-137510] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:11:23.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:11:23.006 [DEBUG] [Thread-137510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:11:23.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:11:23.048 [DEBUG] [Thread-137510] [transport.py] [_log()] userauth is OK
2026-02-11T23:11:23.049 [DEBUG] [Thread-137510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:11:23.049 [DEBUG] [Thread-137510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:11:23.049 [DEBUG] [Thread-137510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:11:23.049 [DEBUG] [Thread-137510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:11:23.068 [INFO] [Thread-137510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:11:23.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:11:23.673 [DEBUG] [Thread-137510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:11:23.673 [DEBUG] [Thread-137510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:11:23.673 [DEBUG] [Thread-137510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:11:23.714 [DEBUG] [Thread-137510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:11:23.715 [DEBUG] [Thread-137510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:11:23.718 [DEBUG] [Thread-137510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:11:23.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:11:23.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:11:23.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:11:23.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:11:23.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:11:23.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:11:23.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:11:23.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:11:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:11:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.882428 -999.00  +14.40  22.14     92  +13.10 1 1 1 3 1     0    0 0.98 -12.25 ZNESW 17.2 22.1 181.2 24.4 16.1 -18.5 15.7 -18.0 15.7 -15.6 16.0 -16.6
2026-02-11T23:11:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:11:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:11:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.882428
2026-02-11T23:11:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:11:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:11:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:11:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:11:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:11:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:11:10', tmtdew=0.59, humidity=96.06, cloud=0.0, wind=20.03, temperature=14.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:10:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:11:23.745 [DEBUG] [Thread-137510] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:11:23.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:11:23.840 [DEBUG] [Thread-137513] [transport.py] [_log()] starting thread (client mode): 0x9eb06830
2026-02-11T23:11:23.840 [DEBUG] [Thread-137513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:11:23.856 [DEBUG] [Thread-137513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:11:23.856 [INFO] [Thread-137513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:11:23.865 [DEBUG] [Thread-137513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] client lang: <none>
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] server lang: <none>
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] kex follows: False
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:11:23.866 [DEBUG] [Thread-137513] [transport.py] [_log()] Compression: none
2026-02-11T23:11:23.867 [DEBUG] [Thread-137513] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:11:23.929 [DEBUG] [Thread-137513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:11:23.930 [DEBUG] [Thread-137513] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:11:23.930 [DEBUG] [Thread-137513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:11:23.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:11:23.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:11:23.990 [DEBUG] [Thread-137513] [transport.py] [_log()] userauth is OK
2026-02-11T23:11:23.990 [DEBUG] [Thread-137513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:11:23.990 [DEBUG] [Thread-137513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:11:23.991 [DEBUG] [Thread-137513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:11:23.991 [DEBUG] [Thread-137513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:11:24.012 [INFO] [Thread-137513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:11:24.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:11:24.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:11:24.818 [DEBUG] [Thread-137513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:11:24.818 [DEBUG] [Thread-137513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:11:24.866 [DEBUG] [Thread-137513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:11:24.867 [DEBUG] [Thread-137513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:11:24.876 [DEBUG] [Thread-137513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:11:24.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:11:24.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')
2026-02-11T23:11:24.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
2026-02-11T23:11:24.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:11:24.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:11:24.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:11:24.913 [DEBUG] [Thread-137513] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:11:32.621 [DEBUG] [Thread-137515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:47.674 [DEBUG] [Thread-137516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:50.188 [DEBUG] [Thread-137517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:50.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:50.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:11:54.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:11:54.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:11:54.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:11:56.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 11, 46), 0.59, 96.07, 0.0, 18.14, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:11:56.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:11:46
2026-02-11T23:11:57.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:11:57.294 [DEBUG] [Thread-137518] [transport.py] [_log()] starting thread (client mode): 0xa57b0970
2026-02-11T23:11:57.294 [DEBUG] [Thread-137518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:11:57.314 [DEBUG] [Thread-137518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:11:57.315 [INFO] [Thread-137518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] client lang: <none>
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] server lang: <none>
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] kex follows: False
2026-02-11T23:11:57.318 [DEBUG] [Thread-137518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:11:57.319 [DEBUG] [Thread-137518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:11:57.319 [DEBUG] [Thread-137518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:11:57.319 [DEBUG] [Thread-137518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:11:57.319 [DEBUG] [Thread-137518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:11:57.319 [DEBUG] [Thread-137518] [transport.py] [_log()] Compression: none
2026-02-11T23:11:57.319 [DEBUG] [Thread-137518] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:11:57.337 [DEBUG] [Thread-137518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:11:57.337 [DEBUG] [Thread-137518] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:11:57.338 [DEBUG] [Thread-137518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:11:57.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:11:57.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:11:57.340 [DEBUG] [Thread-137518] [transport.py] [_log()] userauth is OK
2026-02-11T23:11:57.340 [DEBUG] [Thread-137518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:11:57.340 [DEBUG] [Thread-137518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:11:57.340 [DEBUG] [Thread-137518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:11:57.340 [DEBUG] [Thread-137518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:11:57.364 [INFO] [Thread-137518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:11:57.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:11:57.976 [DEBUG] [Thread-137518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:11:57.976 [DEBUG] [Thread-137518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:11:57.976 [DEBUG] [Thread-137518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:11:58.017 [DEBUG] [Thread-137518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:11:58.018 [DEBUG] [Thread-137518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:11:58.021 [DEBUG] [Thread-137518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:11:58.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:11:58.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:11:58.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:11:58.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:11:58.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:11:58.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:11:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:11:58.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:11:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:11:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.882775 -999.00  +14.30  19.33     92  +13.10 1 2 1 3 1     0    0 0.98 -12.65 ZnESW 19.0 19.3 184.0 23.5 16.0 -15.3 15.7 -13.6 15.6 -11.0 16.0 -16.6
2026-02-11T23:11:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:11:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:11:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.882775
2026-02-11T23:11:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:11:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:11:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:11:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:11:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:11:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:11:46', tmtdew=0.59, humidity=96.07, cloud=0.0, wind=18.14, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:11:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[1.87275, 2.2952500000000002, 1.96375, 2.0134999999999996, 2.0314999999999994, 2.0222500000000005, 1.9800000000000004, nan, nan, nan, 2.0772499999999994, 2.223, nan, 2.081249999999999, 2.358999999999999, 2.454999999999999, nan, 2.7974999999999994, 2.4349999999999996, nan, nan, 2.7217499999999983, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T21:05:00')
2026-02-11T23:11:58.046 [DEBUG] [Thread-137518] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:11:58.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:11:58.142 [DEBUG] [Thread-137521] [transport.py] [_log()] starting thread (client mode): 0x9eb05900
2026-02-11T23:11:58.142 [DEBUG] [Thread-137521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:11:58.156 [DEBUG] [Thread-137521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:11:58.156 [INFO] [Thread-137521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:11:58.163 [DEBUG] [Thread-137521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:11:58.163 [DEBUG] [Thread-137521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] client lang: <none>
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] server lang: <none>
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] kex follows: False
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] Compression: none
2026-02-11T23:11:58.164 [DEBUG] [Thread-137521] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:11:58.220 [DEBUG] [Thread-137521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:11:58.220 [DEBUG] [Thread-137521] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:11:58.221 [DEBUG] [Thread-137521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:11:58.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:11:58.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:11:58.277 [DEBUG] [Thread-137521] [transport.py] [_log()] userauth is OK
2026-02-11T23:11:58.278 [DEBUG] [Thread-137521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:11:58.278 [DEBUG] [Thread-137521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:11:58.278 [DEBUG] [Thread-137521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:11:58.278 [DEBUG] [Thread-137521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:11:58.297 [INFO] [Thread-137521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:11:58.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:11:58.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:11:59.110 [DEBUG] [Thread-137521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:11:59.111 [DEBUG] [Thread-137521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:11:59.158 [DEBUG] [Thread-137521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:11:59.158 [DEBUG] [Thread-137521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:11:59.168 [DEBUG] [Thread-137521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:11:59.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:11:59.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:11:59.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
2026-02-11T23:11:59.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:11:59.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:11:59.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:11:59.204 [DEBUG] [Thread-137521] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:12:02.712 [DEBUG] [Thread-137523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:12:17.764 [DEBUG] [Thread-137524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:12:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:12:29.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:12:29.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
2026-02-11T23:12:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 12, 21), 0.59, 96.09, 0.0, 19.97, 14.39, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:12:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:12:21
2026-02-11T23:12:31.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:12:31.550 [DEBUG] [Thread-137525] [transport.py] [_log()] starting thread (client mode): 0x9eb07790
2026-02-11T23:12:31.550 [DEBUG] [Thread-137525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:12:31.569 [DEBUG] [Thread-137525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:12:31.570 [INFO] [Thread-137525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:12:31.573 [DEBUG] [Thread-137525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] client lang: <none>
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] server lang: <none>
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] kex follows: False
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] Compression: none
2026-02-11T23:12:31.574 [DEBUG] [Thread-137525] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:12:31.594 [DEBUG] [Thread-137525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:12:31.594 [DEBUG] [Thread-137525] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:12:31.595 [DEBUG] [Thread-137525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:12:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:12:31.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:12:31.597 [DEBUG] [Thread-137525] [transport.py] [_log()] userauth is OK
2026-02-11T23:12:31.597 [DEBUG] [Thread-137525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:12:31.597 [DEBUG] [Thread-137525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:12:31.598 [DEBUG] [Thread-137525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:12:31.598 [DEBUG] [Thread-137525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:12:31.633 [INFO] [Thread-137525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:12:31.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:12:32.305 [DEBUG] [Thread-137525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:12:32.305 [DEBUG] [Thread-137525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:12:32.306 [DEBUG] [Thread-137525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:12:32.346 [DEBUG] [Thread-137525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:12:32.346 [DEBUG] [Thread-137525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:12:32.349 [DEBUG] [Thread-137525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:12:32.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:12:32.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:12:32.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:12:32.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:12:32.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:12:32.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:12:32.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:12:32.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:12:32.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:12:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.883122 -999.00  +14.30  17.14     92  +13.10 1 2 1 3 1     0    0 0.92 -13.90 ZnESW 15.3 17.1 175.2 23.1 15.9 -11.9 15.7 -11.2 15.7 -10.1 16.0 -12.2
2026-02-11T23:12:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:12:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:12:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.883122
2026-02-11T23:12:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:12:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:12:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:12:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:12:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:12:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:12:21', tmtdew=0.59, humidity=96.09, cloud=0.0, wind=19.97, temperature=14.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:11:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:10:00')
2026-02-11T23:12:32.374 [DEBUG] [Thread-137525] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:12:32.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:12:32.472 [DEBUG] [Thread-137528] [transport.py] [_log()] starting thread (client mode): 0xa2d9e0e0
2026-02-11T23:12:32.472 [DEBUG] [Thread-137528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:12:32.487 [DEBUG] [Thread-137528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:12:32.488 [INFO] [Thread-137528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:12:32.495 [DEBUG] [Thread-137528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] client lang: <none>
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] server lang: <none>
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] kex follows: False
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] Compression: none
2026-02-11T23:12:32.496 [DEBUG] [Thread-137528] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:12:32.553 [DEBUG] [Thread-137528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:12:32.554 [DEBUG] [Thread-137528] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:12:32.555 [DEBUG] [Thread-137528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:12:32.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:12:32.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:12:32.610 [DEBUG] [Thread-137528] [transport.py] [_log()] userauth is OK
2026-02-11T23:12:32.610 [DEBUG] [Thread-137528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:12:32.610 [DEBUG] [Thread-137528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:12:32.611 [DEBUG] [Thread-137528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:12:32.611 [DEBUG] [Thread-137528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:12:32.630 [INFO] [Thread-137528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:12:32.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:12:32.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:12:32.799 [DEBUG] [Thread-137530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:12:33.514 [DEBUG] [Thread-137528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:12:33.514 [DEBUG] [Thread-137528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:12:33.562 [DEBUG] [Thread-137528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:12:33.563 [DEBUG] [Thread-137528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:12:33.572 [DEBUG] [Thread-137528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:12:33.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:12:33.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:12:33.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:12:33.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:12:33.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:12:33.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:12:33.611 [DEBUG] [Thread-137528] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:12:47.844 [DEBUG] [Thread-137531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:12:50.256 [DEBUG] [Thread-137532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:12:51.003 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:12:51.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:13:02.876 [DEBUG] [Thread-137533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:13:03.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:13:03.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:13:03.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:13:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 12, 57), 0.58, 96.12, 0.0, 18.69, 14.32, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:13:05.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:12:57
2026-02-11T23:13:06.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:13:06.433 [DEBUG] [Thread-137534] [transport.py] [_log()] starting thread (client mode): 0x9eb04460
2026-02-11T23:13:06.433 [DEBUG] [Thread-137534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:13:06.457 [DEBUG] [Thread-137534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:13:06.458 [INFO] [Thread-137534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:13:06.461 [DEBUG] [Thread-137534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:13:06.461 [DEBUG] [Thread-137534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] client lang: <none>
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] server lang: <none>
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] kex follows: False
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] Compression: none
2026-02-11T23:13:06.462 [DEBUG] [Thread-137534] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:13:06.480 [DEBUG] [Thread-137534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:13:06.481 [DEBUG] [Thread-137534] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:13:06.482 [DEBUG] [Thread-137534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:13:06.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:13:06.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:13:06.483 [DEBUG] [Thread-137534] [transport.py] [_log()] userauth is OK
2026-02-11T23:13:06.484 [DEBUG] [Thread-137534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:13:06.484 [DEBUG] [Thread-137534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:13:06.484 [DEBUG] [Thread-137534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:13:06.484 [DEBUG] [Thread-137534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:13:06.507 [INFO] [Thread-137534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:13:06.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:13:07.333 [DEBUG] [Thread-137534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:13:07.333 [DEBUG] [Thread-137534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:13:07.333 [DEBUG] [Thread-137534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:13:07.375 [DEBUG] [Thread-137534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:13:07.375 [DEBUG] [Thread-137534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:13:07.377 [DEBUG] [Thread-137534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:13:07.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:13:07.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:13:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:13:07.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:13:07.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:13:07.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:13:07.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.883469 -999.00  +14.30  16.55     92  +13.10 1 1 1 3 1     0    0 0.91 -15.29 ZNESW 16.6 16.6 188.4 19.9 16.0 -10.9 15.7 -10.9 15.7 -11.8 15.9 -11.2
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.883469
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:13:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:12:57', tmtdew=0.58, humidity=96.12, cloud=0.0, wind=18.69, temperature=14.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:12:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:10:00')
2026-02-11T23:13:07.398 [DEBUG] [Thread-137534] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:13:07.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:13:07.482 [DEBUG] [Thread-137537] [transport.py] [_log()] starting thread (client mode): 0x9eb07dc0
2026-02-11T23:13:07.482 [DEBUG] [Thread-137537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:13:07.497 [DEBUG] [Thread-137537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:13:07.497 [INFO] [Thread-137537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] client lang: <none>
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] server lang: <none>
2026-02-11T23:13:07.505 [DEBUG] [Thread-137537] [transport.py] [_log()] kex follows: False
2026-02-11T23:13:07.506 [DEBUG] [Thread-137537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:13:07.506 [DEBUG] [Thread-137537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:13:07.506 [DEBUG] [Thread-137537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:13:07.506 [DEBUG] [Thread-137537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:13:07.506 [DEBUG] [Thread-137537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:13:07.506 [DEBUG] [Thread-137537] [transport.py] [_log()] Compression: none
2026-02-11T23:13:07.506 [DEBUG] [Thread-137537] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:13:07.566 [DEBUG] [Thread-137537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:13:07.567 [DEBUG] [Thread-137537] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:13:07.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:13:07.568 [DEBUG] [Thread-137537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:13:07.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:13:07.625 [DEBUG] [Thread-137537] [transport.py] [_log()] userauth is OK
2026-02-11T23:13:07.626 [DEBUG] [Thread-137537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:13:07.626 [DEBUG] [Thread-137537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:13:07.626 [DEBUG] [Thread-137537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:13:07.626 [DEBUG] [Thread-137537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:13:07.650 [INFO] [Thread-137537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:13:07.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:13:07.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:13:08.483 [DEBUG] [Thread-137537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:13:08.483 [DEBUG] [Thread-137537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:13:08.531 [DEBUG] [Thread-137537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:13:08.532 [DEBUG] [Thread-137537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:13:08.541 [DEBUG] [Thread-137537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:13:08.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:13:08.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:13:08.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:13:08.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:13:08.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:13:08.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:13:08.580 [DEBUG] [Thread-137537] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:13:17.910 [DEBUG] [Thread-137539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:13:32.974 [DEBUG] [Thread-137540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:13:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:13:38.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:13:38.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:13:40.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 13, 32), 0.59, 96.09, 0.0, 20.26, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:13:40.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:13:32
2026-02-11T23:13:40.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:13:41.056 [DEBUG] [Thread-137541] [transport.py] [_log()] starting thread (client mode): 0x9eb07940
2026-02-11T23:13:41.056 [DEBUG] [Thread-137541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:13:41.076 [DEBUG] [Thread-137541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:13:41.076 [INFO] [Thread-137541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] client lang: <none>
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] server lang: <none>
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] kex follows: False
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] Compression: none
2026-02-11T23:13:41.079 [DEBUG] [Thread-137541] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:13:41.098 [DEBUG] [Thread-137541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:13:41.099 [DEBUG] [Thread-137541] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:13:41.099 [DEBUG] [Thread-137541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:13:41.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:13:41.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:13:41.141 [DEBUG] [Thread-137541] [transport.py] [_log()] userauth is OK
2026-02-11T23:13:41.141 [DEBUG] [Thread-137541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:13:41.141 [DEBUG] [Thread-137541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:13:41.142 [DEBUG] [Thread-137541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:13:41.142 [DEBUG] [Thread-137541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:13:41.174 [INFO] [Thread-137541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:13:41.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:13:41.800 [DEBUG] [Thread-137541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:13:41.801 [DEBUG] [Thread-137541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:13:41.801 [DEBUG] [Thread-137541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:13:41.841 [DEBUG] [Thread-137541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:13:41.841 [DEBUG] [Thread-137541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:13:41.845 [DEBUG] [Thread-137541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:13:41.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:13:41.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:13:41.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:13:41.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:13:41.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:13:41.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:13:41.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:13:41.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:13:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:13:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.883817 -999.00  +14.40  14.13     92  +13.10 1 2 1 3 1     0    0 0.88 -14.05 ZNe.w 12.7 14.1 190.8 17.1 15.9 -12.7 15.7 -14.5 15.6 -15.9 16.0 -12.1
2026-02-11T23:13:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:13:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:13:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.883817
2026-02-11T23:13:41.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:13:41.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:13:41.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:13:41.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:13:41.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:13:41.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:13:32', tmtdew=0.59, humidity=96.09, cloud=0.0, wind=20.26, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:12:41.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:10:00')
2026-02-11T23:13:41.872 [DEBUG] [Thread-137541] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:13:41.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:13:41.970 [DEBUG] [Thread-137544] [transport.py] [_log()] starting thread (client mode): 0x9eb05ab0
2026-02-11T23:13:41.971 [DEBUG] [Thread-137544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:13:41.986 [DEBUG] [Thread-137544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:13:41.986 [INFO] [Thread-137544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:13:41.994 [DEBUG] [Thread-137544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:13:41.994 [DEBUG] [Thread-137544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:13:41.994 [DEBUG] [Thread-137544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] client lang: <none>
2026-02-11T23:13:41.995 [DEBUG] [Thread-137544] [transport.py] [_log()] server lang: <none>
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] kex follows: False
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] Compression: none
2026-02-11T23:13:41.996 [DEBUG] [Thread-137544] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:13:42.053 [DEBUG] [Thread-137544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:13:42.054 [DEBUG] [Thread-137544] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:13:42.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:13:42.055 [DEBUG] [Thread-137544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:13:42.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:13:42.109 [DEBUG] [Thread-137544] [transport.py] [_log()] userauth is OK
2026-02-11T23:13:42.110 [DEBUG] [Thread-137544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:13:42.110 [DEBUG] [Thread-137544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:13:42.110 [DEBUG] [Thread-137544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:13:42.110 [DEBUG] [Thread-137544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:13:42.128 [INFO] [Thread-137544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:13:42.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:13:42.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:13:42.935 [DEBUG] [Thread-137544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:13:42.935 [DEBUG] [Thread-137544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:13:42.983 [DEBUG] [Thread-137544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:13:42.983 [DEBUG] [Thread-137544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:13:42.992 [DEBUG] [Thread-137544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:13:43.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:13:43.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:13:43.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:13:43.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:13:43.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:13:43.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:13:43.026 [DEBUG] [Thread-137544] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:13:48.007 [DEBUG] [Thread-137546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:13:50.311 [DEBUG] [Thread-137547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:13:51.210 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:13:51.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:03.063 [DEBUG] [Thread-137548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:13.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:14:13.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:14:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:14:15.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 13, 32), 0.59, 96.09, 0.0, 20.26, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:14:15.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:13:32
2026-02-11T23:14:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:14:15.600 [DEBUG] [Thread-137549] [transport.py] [_log()] starting thread (client mode): 0xa57b25f0
2026-02-11T23:14:15.600 [DEBUG] [Thread-137549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:14:15.621 [DEBUG] [Thread-137549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:14:15.622 [INFO] [Thread-137549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:14:15.625 [DEBUG] [Thread-137549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:14:15.625 [DEBUG] [Thread-137549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:14:15.625 [DEBUG] [Thread-137549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:14:15.625 [DEBUG] [Thread-137549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:15.625 [DEBUG] [Thread-137549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:15.625 [DEBUG] [Thread-137549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:15.625 [DEBUG] [Thread-137549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] client lang: <none>
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] server lang: <none>
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] kex follows: False
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] Compression: none
2026-02-11T23:14:15.626 [DEBUG] [Thread-137549] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:14:15.644 [DEBUG] [Thread-137549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:14:15.645 [DEBUG] [Thread-137549] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:14:15.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:14:15.646 [DEBUG] [Thread-137549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:14:15.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:14:15.648 [DEBUG] [Thread-137549] [transport.py] [_log()] userauth is OK
2026-02-11T23:14:15.648 [DEBUG] [Thread-137549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:14:15.649 [DEBUG] [Thread-137549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:14:15.649 [DEBUG] [Thread-137549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:14:15.649 [DEBUG] [Thread-137549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:14:15.675 [INFO] [Thread-137549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:14:15.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:14:16.328 [DEBUG] [Thread-137549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:14:16.328 [DEBUG] [Thread-137549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:14:16.329 [DEBUG] [Thread-137549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:14:16.369 [DEBUG] [Thread-137549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:14:16.369 [DEBUG] [Thread-137549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:14:16.372 [DEBUG] [Thread-137549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:14:16.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:14:16.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:14:16.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:14:16.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:14:16.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:14:16.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:14:16.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:14:16.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:14:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:14:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.884511 -999.00  +14.30  12.29     92  +13.10 1 2 1 3 1     0    0 0.97 -12.78 Z.eSW 12.5 12.3 193.4 19.3 15.9 -15.6 15.7 -15.6 15.6 -16.2 15.9 -15.9
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.884511
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:14:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:13:32', tmtdew=0.59, humidity=96.09, cloud=0.0, wind=20.26, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:13:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:10:00')
2026-02-11T23:14:16.392 [DEBUG] [Thread-137549] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:14:16.474 [DEBUG] [Thread-137552] [transport.py] [_log()] starting thread (client mode): 0xa2d9d8a0
2026-02-11T23:14:16.475 [DEBUG] [Thread-137552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:14:16.490 [DEBUG] [Thread-137552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:14:16.491 [INFO] [Thread-137552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:14:16.498 [DEBUG] [Thread-137552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] client lang: <none>
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] server lang: <none>
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] kex follows: False
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:14:16.499 [DEBUG] [Thread-137552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:14:16.500 [DEBUG] [Thread-137552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:14:16.500 [DEBUG] [Thread-137552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:14:16.500 [DEBUG] [Thread-137552] [transport.py] [_log()] Compression: none
2026-02-11T23:14:16.500 [DEBUG] [Thread-137552] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:14:16.558 [DEBUG] [Thread-137552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:14:16.558 [DEBUG] [Thread-137552] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:14:16.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:14:16.559 [DEBUG] [Thread-137552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:14:16.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:14:16.613 [DEBUG] [Thread-137552] [transport.py] [_log()] userauth is OK
2026-02-11T23:14:16.614 [DEBUG] [Thread-137552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:14:16.614 [DEBUG] [Thread-137552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:14:16.614 [DEBUG] [Thread-137552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:14:16.614 [DEBUG] [Thread-137552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:14:16.636 [INFO] [Thread-137552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:14:16.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:14:16.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:14:17.464 [DEBUG] [Thread-137552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:14:17.465 [DEBUG] [Thread-137552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:14:17.512 [DEBUG] [Thread-137552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:14:17.513 [DEBUG] [Thread-137552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:14:17.522 [DEBUG] [Thread-137552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:14:17.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:14:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:14:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:14:17.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:14:17.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:14:17.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:14:17.557 [DEBUG] [Thread-137552] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:14:18.100 [DEBUG] [Thread-137554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:33.157 [DEBUG] [Thread-137555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:47.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:14:47.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:14:47.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:14:48.194 [DEBUG] [Thread-137556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:49.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 14, 8), 0.58, 96.12, 0.0, 19.73, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:14:49.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:14:08
2026-02-11T23:14:49.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:14:50.131 [DEBUG] [Thread-137557] [transport.py] [_log()] starting thread (client mode): 0xa2d9ca90
2026-02-11T23:14:50.131 [DEBUG] [Thread-137557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:14:50.151 [DEBUG] [Thread-137557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:14:50.151 [INFO] [Thread-137557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] client lang: <none>
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] server lang: <none>
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] kex follows: False
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:14:50.154 [DEBUG] [Thread-137557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:14:50.155 [DEBUG] [Thread-137557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:14:50.155 [DEBUG] [Thread-137557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:14:50.155 [DEBUG] [Thread-137557] [transport.py] [_log()] Compression: none
2026-02-11T23:14:50.155 [DEBUG] [Thread-137557] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:14:50.163 [DEBUG] [Thread-137557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:14:50.163 [DEBUG] [Thread-137557] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:14:50.163 [DEBUG] [Thread-137557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:14:50.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:14:50.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:14:50.205 [DEBUG] [Thread-137557] [transport.py] [_log()] userauth is OK
2026-02-11T23:14:50.205 [DEBUG] [Thread-137557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:14:50.205 [DEBUG] [Thread-137557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:14:50.205 [DEBUG] [Thread-137557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:14:50.205 [DEBUG] [Thread-137557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:14:50.225 [INFO] [Thread-137557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:14:50.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:14:50.390 [DEBUG] [Thread-137559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:50.865 [DEBUG] [Thread-137557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:14:50.865 [DEBUG] [Thread-137557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:14:50.866 [DEBUG] [Thread-137557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:14:50.906 [DEBUG] [Thread-137557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:14:50.907 [DEBUG] [Thread-137557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:14:50.910 [DEBUG] [Thread-137557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:14:50.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:14:50.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:14:50.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:14:50.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:14:50.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:14:50.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:14:50.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:14:50.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:14:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:14:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.884858 -999.00  +14.40  10.79     92  +13.10 1 2 1 3 1     0    0 0.90 -14.66 Z.eSW 8.2 10.8 184.4 16.3 15.8 -17.1 15.7 -15.9 15.6 -16.5 15.9 -17.2
2026-02-11T23:14:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:14:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:14:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.884858
2026-02-11T23:14:50.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:14:50.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:14:50.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:14:50.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:14:50.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:14:50.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:14:08', tmtdew=0.58, humidity=96.12, cloud=0.0, wind=19.73, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:14:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:10:00')
2026-02-11T23:14:50.937 [DEBUG] [Thread-137557] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:14:51.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:14:51.029 [DEBUG] [Thread-137561] [transport.py] [_log()] starting thread (client mode): 0xa57b3d60
2026-02-11T23:14:51.030 [DEBUG] [Thread-137561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:14:51.045 [DEBUG] [Thread-137561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:14:51.045 [INFO] [Thread-137561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:14:51.053 [DEBUG] [Thread-137561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:14:51.053 [DEBUG] [Thread-137561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:14:51.053 [DEBUG] [Thread-137561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:14:51.053 [DEBUG] [Thread-137561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] client lang: <none>
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] server lang: <none>
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] kex follows: False
2026-02-11T23:14:51.054 [DEBUG] [Thread-137561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:14:51.055 [DEBUG] [Thread-137561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:14:51.055 [DEBUG] [Thread-137561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:14:51.055 [DEBUG] [Thread-137561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:14:51.055 [DEBUG] [Thread-137561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:14:51.055 [DEBUG] [Thread-137561] [transport.py] [_log()] Compression: none
2026-02-11T23:14:51.055 [DEBUG] [Thread-137561] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:14:51.113 [DEBUG] [Thread-137561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:14:51.114 [DEBUG] [Thread-137561] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:14:51.114 [DEBUG] [Thread-137561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:14:51.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:14:51.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:14:51.169 [DEBUG] [Thread-137561] [transport.py] [_log()] userauth is OK
2026-02-11T23:14:51.170 [DEBUG] [Thread-137561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:14:51.170 [DEBUG] [Thread-137561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:14:51.170 [DEBUG] [Thread-137561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:14:51.170 [DEBUG] [Thread-137561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:14:51.189 [INFO] [Thread-137561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:14:51.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:14:51.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:14:51.412 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:51.413 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:14:52.029 [DEBUG] [Thread-137561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:14:52.029 [DEBUG] [Thread-137561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:14:52.076 [DEBUG] [Thread-137561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:14:52.076 [DEBUG] [Thread-137561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:14:52.086 [DEBUG] [Thread-137561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:14:52.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:14:52.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:14:52.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:14:52.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:14:52.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:14:52.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:14:52.121 [DEBUG] [Thread-137561] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:15:03.229 [DEBUG] [Thread-137563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:15:18.278 [DEBUG] [Thread-137564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:15:22.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:15:22.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:15:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:15:24.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 14, 44), 0.59, 96.11, 0.0, 19.5, 14.3, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:15:24.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:14:44
2026-02-11T23:15:25.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:15:25.385 [DEBUG] [Thread-137565] [transport.py] [_log()] starting thread (client mode): 0xa2d5e3b0
2026-02-11T23:15:25.386 [DEBUG] [Thread-137565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:15:25.406 [DEBUG] [Thread-137565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:15:25.406 [INFO] [Thread-137565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:15:25.409 [DEBUG] [Thread-137565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] client lang: <none>
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] server lang: <none>
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] kex follows: False
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] Compression: none
2026-02-11T23:15:25.410 [DEBUG] [Thread-137565] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:15:25.430 [DEBUG] [Thread-137565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:15:25.431 [DEBUG] [Thread-137565] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:15:25.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:15:25.432 [DEBUG] [Thread-137565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:15:25.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:15:25.434 [DEBUG] [Thread-137565] [transport.py] [_log()] userauth is OK
2026-02-11T23:15:25.434 [DEBUG] [Thread-137565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:15:25.435 [DEBUG] [Thread-137565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:15:25.435 [DEBUG] [Thread-137565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:15:25.435 [DEBUG] [Thread-137565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:15:25.460 [INFO] [Thread-137565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:15:25.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:15:26.119 [DEBUG] [Thread-137565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:15:26.119 [DEBUG] [Thread-137565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:15:26.119 [DEBUG] [Thread-137565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:15:26.159 [DEBUG] [Thread-137565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:15:26.160 [DEBUG] [Thread-137565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:15:26.163 [DEBUG] [Thread-137565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:15:26.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:15:26.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:15:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:15:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:15:26.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:15:26.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:15:26.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:15:26.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:15:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:15:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.885205 -999.00  +14.40  11.61     92  +13.10 1 2 1 3 1     0    0 0.89 -15.57 ZNEsW 10.6 11.6 188.0 15.8 15.8 -18.1 15.7 -17.0 15.6 -16.5 15.9 -17.7
2026-02-11T23:15:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:15:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:15:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.885205
2026-02-11T23:15:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:15:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:15:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:15:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:15:26.190 [DEBUG] [Thread-137565] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:15:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:15:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:14:44', tmtdew=0.59, humidity=96.11, cloud=0.0, wind=19.5, temperature=14.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:14:41.712', atlas_cloud=2, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:13:00')
2026-02-11T23:15:26.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:15:26.287 [DEBUG] [Thread-137568] [transport.py] [_log()] starting thread (client mode): 0x9eb050f0
2026-02-11T23:15:26.287 [DEBUG] [Thread-137568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:15:26.302 [DEBUG] [Thread-137568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:15:26.302 [INFO] [Thread-137568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] client lang: <none>
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] server lang: <none>
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] kex follows: False
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:15:26.310 [DEBUG] [Thread-137568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:15:26.311 [DEBUG] [Thread-137568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:15:26.311 [DEBUG] [Thread-137568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:15:26.311 [DEBUG] [Thread-137568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:15:26.311 [DEBUG] [Thread-137568] [transport.py] [_log()] Compression: none
2026-02-11T23:15:26.311 [DEBUG] [Thread-137568] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:15:26.373 [DEBUG] [Thread-137568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:15:26.374 [DEBUG] [Thread-137568] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:15:26.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:15:26.375 [DEBUG] [Thread-137568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:15:26.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:15:26.435 [DEBUG] [Thread-137568] [transport.py] [_log()] userauth is OK
2026-02-11T23:15:26.436 [DEBUG] [Thread-137568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:15:26.436 [DEBUG] [Thread-137568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:15:26.436 [DEBUG] [Thread-137568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:15:26.436 [DEBUG] [Thread-137568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:15:26.453 [INFO] [Thread-137568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:15:26.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:15:26.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:15:27.300 [DEBUG] [Thread-137568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:15:27.300 [DEBUG] [Thread-137568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:15:27.348 [DEBUG] [Thread-137568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:15:27.349 [DEBUG] [Thread-137568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:15:27.358 [DEBUG] [Thread-137568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:15:27.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:15:27.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:15:27.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:15:27.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:15:27.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:15:27.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:15:27.395 [DEBUG] [Thread-137568] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:15:33.314 [DEBUG] [Thread-137570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:15:48.365 [DEBUG] [Thread-137571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:15:50.463 [DEBUG] [Thread-137572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:15:51.616 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:15:51.617 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:15:57.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:15:57.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:15:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:15:59.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 15, 19), 0.58, 96.12, 0.0, 19.2, 14.3, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:15:59.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:15:19
2026-02-11T23:16:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:16:00.239 [DEBUG] [Thread-137573] [transport.py] [_log()] starting thread (client mode): 0xa2d5e0b0
2026-02-11T23:16:00.239 [DEBUG] [Thread-137573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:16:00.259 [DEBUG] [Thread-137573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:16:00.259 [INFO] [Thread-137573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:00.262 [DEBUG] [Thread-137573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] client lang: <none>
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] server lang: <none>
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] kex follows: False
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] Compression: none
2026-02-11T23:16:00.263 [DEBUG] [Thread-137573] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:16:00.277 [DEBUG] [Thread-137573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:16:00.278 [DEBUG] [Thread-137573] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:16:00.278 [DEBUG] [Thread-137573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:16:00.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:16:00.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:16:00.280 [DEBUG] [Thread-137573] [transport.py] [_log()] userauth is OK
2026-02-11T23:16:00.280 [DEBUG] [Thread-137573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:16:00.280 [DEBUG] [Thread-137573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:16:00.281 [DEBUG] [Thread-137573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:16:00.281 [DEBUG] [Thread-137573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:16:00.298 [INFO] [Thread-137573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:16:00.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:16:00.937 [DEBUG] [Thread-137573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:16:00.938 [DEBUG] [Thread-137573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:16:00.938 [DEBUG] [Thread-137573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:16:00.978 [DEBUG] [Thread-137573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:16:00.979 [DEBUG] [Thread-137573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:16:00.982 [DEBUG] [Thread-137573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:16:00.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:16:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:16:00.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:16:00.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:16:01.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:16:01.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:16:01.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:16:01.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:16:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:16:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.885553 -999.00  +14.40  11.45     92  +13.10 1 2 1 3 1     0    0 0.92 -13.16 ZNEsW 13.0 11.4 178.0 14.7 15.8 -17.8 15.6 -16.6 15.6 -16.2 15.8 -17.5
2026-02-11T23:16:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:16:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:16:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.885553
2026-02-11T23:16:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:16:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:16:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:16:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:16:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:16:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:15:19', tmtdew=0.58, humidity=96.12, cloud=0.0, wind=19.2, temperature=14.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:15:11.779', atlas_cloud=2, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:13:00')
2026-02-11T23:16:01.011 [DEBUG] [Thread-137573] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:16:01.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:16:01.106 [DEBUG] [Thread-137576] [transport.py] [_log()] starting thread (client mode): 0xa57e0190
2026-02-11T23:16:01.106 [DEBUG] [Thread-137576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:16:01.121 [DEBUG] [Thread-137576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:16:01.122 [INFO] [Thread-137576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:16:01.129 [DEBUG] [Thread-137576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] client lang: <none>
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] server lang: <none>
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] kex follows: False
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] Compression: none
2026-02-11T23:16:01.130 [DEBUG] [Thread-137576] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:16:01.192 [DEBUG] [Thread-137576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:16:01.193 [DEBUG] [Thread-137576] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:16:01.193 [DEBUG] [Thread-137576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:16:01.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:16:01.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:16:01.250 [DEBUG] [Thread-137576] [transport.py] [_log()] userauth is OK
2026-02-11T23:16:01.250 [DEBUG] [Thread-137576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:16:01.250 [DEBUG] [Thread-137576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:16:01.250 [DEBUG] [Thread-137576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:16:01.251 [DEBUG] [Thread-137576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:16:01.275 [INFO] [Thread-137576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:16:01.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:16:01.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:16:02.126 [DEBUG] [Thread-137576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:16:02.126 [DEBUG] [Thread-137576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:16:02.175 [DEBUG] [Thread-137576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:16:02.175 [DEBUG] [Thread-137576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:16:02.184 [DEBUG] [Thread-137576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:16:02.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:16:02.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:16: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
2026-02-11T23:16:02.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:16:02.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:16:02.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:16:02.222 [DEBUG] [Thread-137576] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:16:03.405 [DEBUG] [Thread-137578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:16:18.459 [DEBUG] [Thread-137579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:16:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:16:32.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:16:32.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:16:33.497 [DEBUG] [Thread-137580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:16:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 15, 56), 0.59, 96.11, 0.0, 18.3, 14.29, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:16:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:15:56
2026-02-11T23:16:34.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:16:34.686 [DEBUG] [Thread-137581] [transport.py] [_log()] starting thread (client mode): 0xa2d5e980
2026-02-11T23:16:34.686 [DEBUG] [Thread-137581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:16:34.707 [DEBUG] [Thread-137581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:16:34.707 [INFO] [Thread-137581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] client lang: <none>
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] server lang: <none>
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] kex follows: False
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] Compression: none
2026-02-11T23:16:34.709 [DEBUG] [Thread-137581] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:16:34.723 [DEBUG] [Thread-137581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:16:34.724 [DEBUG] [Thread-137581] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:16:34.724 [DEBUG] [Thread-137581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:16:34.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:16:34.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:16:34.726 [DEBUG] [Thread-137581] [transport.py] [_log()] userauth is OK
2026-02-11T23:16:34.726 [DEBUG] [Thread-137581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:16:34.726 [DEBUG] [Thread-137581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:16:34.726 [DEBUG] [Thread-137581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:16:34.726 [DEBUG] [Thread-137581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:16:34.740 [INFO] [Thread-137581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:16:34.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:16:35.516 [DEBUG] [Thread-137581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:16:35.516 [DEBUG] [Thread-137581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:16:35.517 [DEBUG] [Thread-137581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:16:35.557 [DEBUG] [Thread-137581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:16:35.558 [DEBUG] [Thread-137581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:16:35.561 [DEBUG] [Thread-137581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:16:35.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:16:35.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:16:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:16:35.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:16:35.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:16:35.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:16:35.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:16:35.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:16:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:16:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.885900 -999.00  +14.40  14.13     92  +13.10 1 2 1 3 1     0    0 0.95 -12.90 ZNEsW 11.0 14.1 182.8 18.5 15.8 -18.0 15.6 -17.7 15.5 -16.4 15.8 -17.7
2026-02-11T23:16:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:16:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:16:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.885900
2026-02-11T23:16:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:16:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:16:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:16:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:16:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:16:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:15:56', tmtdew=0.59, humidity=96.11, cloud=0.0, wind=18.3, temperature=14.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:15:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:13:00')
2026-02-11T23:16:35.588 [DEBUG] [Thread-137581] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:16:35.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:16:35.681 [DEBUG] [Thread-137584] [transport.py] [_log()] starting thread (client mode): 0xa57e2590
2026-02-11T23:16:35.681 [DEBUG] [Thread-137584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:16:35.696 [DEBUG] [Thread-137584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:16:35.696 [INFO] [Thread-137584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:16:35.703 [DEBUG] [Thread-137584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:16:35.704 [DEBUG] [Thread-137584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:16:35.704 [DEBUG] [Thread-137584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:16:35.704 [DEBUG] [Thread-137584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] client lang: <none>
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] server lang: <none>
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] kex follows: False
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] Compression: none
2026-02-11T23:16:35.705 [DEBUG] [Thread-137584] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:16:35.761 [DEBUG] [Thread-137584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:16:35.762 [DEBUG] [Thread-137584] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:16:35.762 [DEBUG] [Thread-137584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:16:35.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:16:35.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:16:35.816 [DEBUG] [Thread-137584] [transport.py] [_log()] userauth is OK
2026-02-11T23:16:35.817 [DEBUG] [Thread-137584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:16:35.817 [DEBUG] [Thread-137584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:16:35.817 [DEBUG] [Thread-137584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:16:35.817 [DEBUG] [Thread-137584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:16:35.837 [INFO] [Thread-137584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:16:35.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:16:35.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:16:36.641 [DEBUG] [Thread-137584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:16:36.642 [DEBUG] [Thread-137584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:16:36.689 [DEBUG] [Thread-137584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:16:36.690 [DEBUG] [Thread-137584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:16:36.699 [DEBUG] [Thread-137584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:16:36.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:16:36.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:16:36.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:16:36.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:16:36.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:16:36.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:16:36.736 [DEBUG] [Thread-137584] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:16:48.534 [DEBUG] [Thread-137586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:16:50.549 [DEBUG] [Thread-137587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:16:51.830 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:16:51.831 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:17:03.588 [DEBUG] [Thread-137588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:17:06.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:17:06.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:17: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
2026-02-11T23:17:08.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 16, 32), 0.57, 96.17, 0.0, 18.47, 14.29, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:17:08.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:16:32
2026-02-11T23:17:09.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:17:09.325 [DEBUG] [Thread-137589] [transport.py] [_log()] starting thread (client mode): 0xa2d6a4d0
2026-02-11T23:17:09.325 [DEBUG] [Thread-137589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:17:09.344 [DEBUG] [Thread-137589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:17:09.344 [INFO] [Thread-137589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] client lang: <none>
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] server lang: <none>
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] kex follows: False
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:17:09.346 [DEBUG] [Thread-137589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:17:09.347 [DEBUG] [Thread-137589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:17:09.347 [DEBUG] [Thread-137589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:17:09.347 [DEBUG] [Thread-137589] [transport.py] [_log()] Compression: none
2026-02-11T23:17:09.347 [DEBUG] [Thread-137589] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:17:09.359 [DEBUG] [Thread-137589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:17:09.359 [DEBUG] [Thread-137589] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:17:09.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:17:09.360 [DEBUG] [Thread-137589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:17:09.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:17:09.361 [DEBUG] [Thread-137589] [transport.py] [_log()] userauth is OK
2026-02-11T23:17:09.361 [DEBUG] [Thread-137589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:17:09.362 [DEBUG] [Thread-137589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:17:09.362 [DEBUG] [Thread-137589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:17:09.362 [DEBUG] [Thread-137589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:17:09.379 [INFO] [Thread-137589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:17:09.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:17:10.030 [DEBUG] [Thread-137589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:17:10.030 [DEBUG] [Thread-137589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:17:10.030 [DEBUG] [Thread-137589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:17:10.071 [DEBUG] [Thread-137589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:17:10.071 [DEBUG] [Thread-137589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:17:10.074 [DEBUG] [Thread-137589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:17:10.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:17:10.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:17:10.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:17:10.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:17:10.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:17:10.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:17:10.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:17:10.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:17:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:17:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.886247 -999.00  +14.40  10.57     92  +13.10 1 1 1 3 1     0    0 0.99 -11.66 ZNESW 11.1 10.6 191.8 13.0 15.8 -18.1 15.6 -17.3 15.5 -16.5 15.8 -17.6
2026-02-11T23:17:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:17:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:17:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.886247
2026-02-11T23:17:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:17:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:17:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:17:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:17:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:17:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:16:32', tmtdew=0.57, humidity=96.17, cloud=0.0, wind=18.47, temperature=14.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:16:11.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:13:00')
2026-02-11T23:17:10.097 [DEBUG] [Thread-137589] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:17:10.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:17:10.205 [DEBUG] [Thread-137592] [transport.py] [_log()] starting thread (client mode): 0xa57e2770
2026-02-11T23:17:10.205 [DEBUG] [Thread-137592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:17:10.219 [DEBUG] [Thread-137592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:17:10.219 [INFO] [Thread-137592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:17:10.227 [DEBUG] [Thread-137592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:17:10.227 [DEBUG] [Thread-137592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:17:10.227 [DEBUG] [Thread-137592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] client lang: <none>
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] server lang: <none>
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] kex follows: False
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] Compression: none
2026-02-11T23:17:10.228 [DEBUG] [Thread-137592] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:17:10.288 [DEBUG] [Thread-137592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:17:10.288 [DEBUG] [Thread-137592] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:17:10.289 [DEBUG] [Thread-137592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:17:10.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:17:10.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:17:10.349 [DEBUG] [Thread-137592] [transport.py] [_log()] userauth is OK
2026-02-11T23:17:10.350 [DEBUG] [Thread-137592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:17:10.350 [DEBUG] [Thread-137592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:17:10.350 [DEBUG] [Thread-137592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:17:10.350 [DEBUG] [Thread-137592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:17:10.368 [INFO] [Thread-137592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:17:10.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:17:10.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:17:11.197 [DEBUG] [Thread-137592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:17:11.198 [DEBUG] [Thread-137592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:17:11.247 [DEBUG] [Thread-137592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:17:11.247 [DEBUG] [Thread-137592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:17:11.258 [DEBUG] [Thread-137592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:17:11.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:17:11.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:17:11.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:17:11.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:17:11.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:17:11.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:17:11.292 [DEBUG] [Thread-137592] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:17:18.620 [DEBUG] [Thread-137594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:17:33.678 [DEBUG] [Thread-137595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:17:41.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:17:41.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:17:41.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:17:43.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 17, 7), 0.58, 96.16, 0.0, 19.74, 14.25, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:17:43.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:17:07
2026-02-11T23:17:43.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:17:43.834 [DEBUG] [Thread-137596] [transport.py] [_log()] starting thread (client mode): 0xa2d5ca60
2026-02-11T23:17:43.834 [DEBUG] [Thread-137596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:17:43.854 [DEBUG] [Thread-137596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:17:43.854 [INFO] [Thread-137596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] client lang: <none>
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] server lang: <none>
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] kex follows: False
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:17:43.857 [DEBUG] [Thread-137596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:17:43.858 [DEBUG] [Thread-137596] [transport.py] [_log()] Compression: none
2026-02-11T23:17:43.858 [DEBUG] [Thread-137596] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:17:43.876 [DEBUG] [Thread-137596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:17:43.877 [DEBUG] [Thread-137596] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:17:43.877 [DEBUG] [Thread-137596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:17:43.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:17:43.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:17:43.879 [DEBUG] [Thread-137596] [transport.py] [_log()] userauth is OK
2026-02-11T23:17:43.879 [DEBUG] [Thread-137596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:17:43.880 [DEBUG] [Thread-137596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:17:43.880 [DEBUG] [Thread-137596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:17:43.880 [DEBUG] [Thread-137596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:17:43.901 [INFO] [Thread-137596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:17:43.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:17:44.558 [DEBUG] [Thread-137596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:17:44.558 [DEBUG] [Thread-137596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:17:44.559 [DEBUG] [Thread-137596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:17:44.599 [DEBUG] [Thread-137596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:17:44.600 [DEBUG] [Thread-137596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:17:44.603 [DEBUG] [Thread-137596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:17:44.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:17:44.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:17:44.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:17:44.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:17:44.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:17:44.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:17:44.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:17:44.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:17:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:17:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.886594 -999.00  +14.40  13.22     92  +13.10 1 1 1 3 1     0    0 0.96 -12.35 ZNESW 12.6 13.2 180.0 15.0 15.8 -18.2 15.6 -17.5 15.5 -16.6 15.8 -17.7
2026-02-11T23:17:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:17:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:17:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.886594
2026-02-11T23:17:44.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:17:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:17:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:17:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:17:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:17:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:17:07', tmtdew=0.58, humidity=96.16, cloud=0.0, wind=19.74, temperature=14.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:16:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.6192499999999992, 1.9472500000000004, 1.7392500000000002, 1.458499999999999, 1.5635000000000003, 1.5977500000000004, 1.6599999999999993, nan, 2.4354999999999993, 2.17, 1.6942499999999994, 1.4809999999999999, 1.5675, 1.6292499999999999, nan, 2.890999999999999, nan, 2.301, 2.2079999999999993, nan, 1.5839999999999987, 1.6522499999999987, nan, nan, nan, 1.5470000000000006, nan, nan, 2.2120000000000006, 1.9380000000000006, nan, nan, nan], zp_timestamp='2026-02-11T21:13:00')
2026-02-11T23:17:44.628 [DEBUG] [Thread-137596] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:17:44.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:17:44.736 [DEBUG] [Thread-137599] [transport.py] [_log()] starting thread (client mode): 0xa2d5cc10
2026-02-11T23:17:44.736 [DEBUG] [Thread-137599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:17:44.750 [DEBUG] [Thread-137599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:17:44.751 [INFO] [Thread-137599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:17:44.758 [DEBUG] [Thread-137599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:17:44.758 [DEBUG] [Thread-137599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:17:44.758 [DEBUG] [Thread-137599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:17:44.758 [DEBUG] [Thread-137599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:44.758 [DEBUG] [Thread-137599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:17:44.758 [DEBUG] [Thread-137599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] client lang: <none>
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] server lang: <none>
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] kex follows: False
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] Compression: none
2026-02-11T23:17:44.759 [DEBUG] [Thread-137599] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:17:44.817 [DEBUG] [Thread-137599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:17:44.817 [DEBUG] [Thread-137599] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:17:44.818 [DEBUG] [Thread-137599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:17:44.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:17:44.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:17:44.874 [DEBUG] [Thread-137599] [transport.py] [_log()] userauth is OK
2026-02-11T23:17:44.874 [DEBUG] [Thread-137599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:17:44.874 [DEBUG] [Thread-137599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:17:44.874 [DEBUG] [Thread-137599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:17:44.874 [DEBUG] [Thread-137599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:17:44.898 [INFO] [Thread-137599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:17:44.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:17:44.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:17:45.712 [DEBUG] [Thread-137599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:17:45.713 [DEBUG] [Thread-137599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:17:45.761 [DEBUG] [Thread-137599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:17:45.761 [DEBUG] [Thread-137599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:17:45.771 [DEBUG] [Thread-137599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:17:45.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:17:45.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')
2026-02-11T23:17:45.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:17:45.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:17:45.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:17:45.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:17:45.808 [DEBUG] [Thread-137599] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:17:48.715 [DEBUG] [Thread-137601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:17:50.622 [DEBUG] [Thread-137602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:17:52.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:17:52.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:03.775 [DEBUG] [Thread-137603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:18:15.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:18:15.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:18:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 17, 43), 0.57, 96.17, 0.0, 18.79, 14.25, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:18:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:17:43
2026-02-11T23:18:18.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:18:18.200 [DEBUG] [Thread-137604] [transport.py] [_log()] starting thread (client mode): 0xa2d4f7c0
2026-02-11T23:18:18.201 [DEBUG] [Thread-137604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:18:18.220 [DEBUG] [Thread-137604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:18:18.220 [INFO] [Thread-137604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:18:18.223 [DEBUG] [Thread-137604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] client lang: <none>
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] server lang: <none>
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] kex follows: False
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] Compression: none
2026-02-11T23:18:18.224 [DEBUG] [Thread-137604] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:18:18.241 [DEBUG] [Thread-137604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:18:18.242 [DEBUG] [Thread-137604] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:18:18.243 [DEBUG] [Thread-137604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:18:18.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:18:18.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:18:18.245 [DEBUG] [Thread-137604] [transport.py] [_log()] userauth is OK
2026-02-11T23:18:18.245 [DEBUG] [Thread-137604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:18:18.245 [DEBUG] [Thread-137604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:18:18.245 [DEBUG] [Thread-137604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:18:18.246 [DEBUG] [Thread-137604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:18:18.271 [INFO] [Thread-137604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:18:18.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:18:18.814 [DEBUG] [Thread-137606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:18.921 [DEBUG] [Thread-137604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:18:18.922 [DEBUG] [Thread-137604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:18:18.922 [DEBUG] [Thread-137604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:18:18.962 [DEBUG] [Thread-137604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:18:18.963 [DEBUG] [Thread-137604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:18:18.966 [DEBUG] [Thread-137604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:18:18.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:18:18.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:18:18.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:18:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:18:18.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:18:18.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:18:18.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:18:18.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:18:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:18:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.887289 -999.00  +14.40   8.95     92  +13.10 1 1 1 3 1     0    0 1.03 -10.20 ZNESW 13.9 8.9 193.7 19.8 15.8 -18.1 15.6 -17.1 15.4 -16.5 15.8 -17.7
2026-02-11T23:18:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:18:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:18:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.887289
2026-02-11T23:18:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:18:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:18:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:18:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:18:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:18:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:17:43', tmtdew=0.57, humidity=96.17, cloud=0.0, wind=18.79, temperature=14.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:17:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[0.49074999999999935, 0.5772500000000003, 0.7012500000000008, 0.7064999999999992, 0.6694999999999993, 0.5382500000000014, 0.41350000000000087, 0.5362500000000008, 0.519499999999999, 0.6660000000000004, 0.6687499999999993, 0.7409999999999997, 0.7389999999999999, 0.5757499999999993, 0.488999999999999, 0.488999999999999, 0.6372499999999999, 0.9135, 1.0059999999999993, 0.9557499999999983, 0.7424999999999988, 0.6447499999999984, 0.46825000000000117, 0.6247499999999997, 0.7119999999999989, 1.3040000000000003, 1.24275, 1.1010000000000009, 1.0495, 0.8320000000000007, 0.6895000000000007, 0.8100000000000005, 0.9267499999999993], zp_timestamp='2026-02-11T21:17:00')
2026-02-11T23:18:18.995 [DEBUG] [Thread-137604] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:18:19.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:18:19.092 [DEBUG] [Thread-137608] [transport.py] [_log()] starting thread (client mode): 0xa2d058a0
2026-02-11T23:18:19.093 [DEBUG] [Thread-137608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:18:19.107 [DEBUG] [Thread-137608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:18:19.107 [INFO] [Thread-137608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:18:19.115 [DEBUG] [Thread-137608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:18:19.115 [DEBUG] [Thread-137608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] client lang: <none>
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] server lang: <none>
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] kex follows: False
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] Compression: none
2026-02-11T23:18:19.116 [DEBUG] [Thread-137608] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:18:19.172 [DEBUG] [Thread-137608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:18:19.172 [DEBUG] [Thread-137608] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:18:19.172 [DEBUG] [Thread-137608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:18:19.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:18:19.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:18:19.230 [DEBUG] [Thread-137608] [transport.py] [_log()] userauth is OK
2026-02-11T23:18:19.231 [DEBUG] [Thread-137608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:18:19.231 [DEBUG] [Thread-137608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:18:19.231 [DEBUG] [Thread-137608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:18:19.231 [DEBUG] [Thread-137608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:18:19.252 [INFO] [Thread-137608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:18:19.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:18:19.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:18:20.063 [DEBUG] [Thread-137608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:18:20.063 [DEBUG] [Thread-137608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:18:20.111 [DEBUG] [Thread-137608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:18:20.111 [DEBUG] [Thread-137608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:18:20.121 [DEBUG] [Thread-137608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:18:20.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:18:20.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:18: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
2026-02-11T23:18:20.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:18:20.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:18:20.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:18:20.165 [DEBUG] [Thread-137608] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:18:33.851 [DEBUG] [Thread-137610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:48.913 [DEBUG] [Thread-137611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:50.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:18:50.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:18:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:18:50.708 [DEBUG] [Thread-137612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:52.245 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:52.246 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:18:52.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 18, 18), 0.57, 96.17, 0.0, 19.59, 14.2, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:18:52.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:18:18
2026-02-11T23:18:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:18:53.202 [DEBUG] [Thread-137613] [transport.py] [_log()] starting thread (client mode): 0xa2d052a0
2026-02-11T23:18:53.202 [DEBUG] [Thread-137613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:18:53.221 [DEBUG] [Thread-137613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:18:53.221 [INFO] [Thread-137613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] client lang: <none>
2026-02-11T23:18:53.225 [DEBUG] [Thread-137613] [transport.py] [_log()] server lang: <none>
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] kex follows: False
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] Compression: none
2026-02-11T23:18:53.226 [DEBUG] [Thread-137613] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:18:53.241 [DEBUG] [Thread-137613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:18:53.242 [DEBUG] [Thread-137613] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:18:53.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:18:53.243 [DEBUG] [Thread-137613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:18:53.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:18:53.245 [DEBUG] [Thread-137613] [transport.py] [_log()] userauth is OK
2026-02-11T23:18:53.245 [DEBUG] [Thread-137613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:18:53.245 [DEBUG] [Thread-137613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:18:53.245 [DEBUG] [Thread-137613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:18:53.246 [DEBUG] [Thread-137613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:18:53.281 [INFO] [Thread-137613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:18:53.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:18:53.902 [DEBUG] [Thread-137613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:18:53.903 [DEBUG] [Thread-137613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:18:53.903 [DEBUG] [Thread-137613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:18:53.943 [DEBUG] [Thread-137613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:18:53.944 [DEBUG] [Thread-137613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:18:53.947 [DEBUG] [Thread-137613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:18:53.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:18:53.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:18:53.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:18:53.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:18:53.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:18:53.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:18:53.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:18:53.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:18:53.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:18:53.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.887636 -999.00  +14.40  16.16     91  +13.10 1 2 1 3 1     0    0 1.04 -9.46 zNESW 16.0 16.2 193.2 18.1 15.7 -18.0 15.6 -17.1 15.4 -16.4 15.7 -17.5
2026-02-11T23:18:53.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:18:53.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:18:53.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.887636
2026-02-11T23:18:53.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:18:53.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:18:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:18:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:18:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:18:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:18:18', tmtdew=0.57, humidity=96.17, cloud=0.0, wind=19.59, temperature=14.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:18:11.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.49074999999999935, 0.5772500000000003, 0.7012500000000008, 0.7064999999999992, 0.6694999999999993, 0.5382500000000014, 0.41350000000000087, 0.5362500000000008, 0.519499999999999, 0.6660000000000004, 0.6687499999999993, 0.7409999999999997, 0.7389999999999999, 0.5757499999999993, 0.488999999999999, 0.488999999999999, 0.6372499999999999, 0.9135, 1.0059999999999993, 0.9557499999999983, 0.7424999999999988, 0.6447499999999984, 0.46825000000000117, 0.6247499999999997, 0.7119999999999989, 1.3040000000000003, 1.24275, 1.1010000000000009, 1.0495, 0.8320000000000007, 0.6895000000000007, 0.8100000000000005, 0.9267499999999993], zp_timestamp='2026-02-11T21:17:00')
2026-02-11T23:18:53.974 [DEBUG] [Thread-137613] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:18:54.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:18:54.080 [DEBUG] [Thread-137616] [transport.py] [_log()] starting thread (client mode): 0xa2d5e7d0
2026-02-11T23:18:54.080 [DEBUG] [Thread-137616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:18:54.096 [DEBUG] [Thread-137616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:18:54.096 [INFO] [Thread-137616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:18:54.103 [DEBUG] [Thread-137616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:18:54.103 [DEBUG] [Thread-137616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] client lang: <none>
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] server lang: <none>
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] kex follows: False
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] Compression: none
2026-02-11T23:18:54.104 [DEBUG] [Thread-137616] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:18:54.160 [DEBUG] [Thread-137616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:18:54.161 [DEBUG] [Thread-137616] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:18:54.161 [DEBUG] [Thread-137616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:18:54.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:18:54.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:18:54.217 [DEBUG] [Thread-137616] [transport.py] [_log()] userauth is OK
2026-02-11T23:18:54.217 [DEBUG] [Thread-137616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:18:54.218 [DEBUG] [Thread-137616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:18:54.218 [DEBUG] [Thread-137616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:18:54.218 [DEBUG] [Thread-137616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:18:54.242 [INFO] [Thread-137616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:18:54.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:18:54.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:18:55.089 [DEBUG] [Thread-137616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:18:55.089 [DEBUG] [Thread-137616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:18:55.136 [DEBUG] [Thread-137616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:18:55.137 [DEBUG] [Thread-137616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:18:55.146 [DEBUG] [Thread-137616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:18:55.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:18:55.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:18:55.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:18:55.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:18:55.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:18:55.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:18:55.183 [DEBUG] [Thread-137616] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:19:03.950 [DEBUG] [Thread-137618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:19:19.000 [DEBUG] [Thread-137619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:19:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:19:25.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:19:25.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
2026-02-11T23:19:27.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 18, 55), 0.57, 96.21, 0.0, 23.1, 14.24, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:19:27.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:18:55
2026-02-11T23:19:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:19:28.328 [DEBUG] [Thread-137620] [transport.py] [_log()] starting thread (client mode): 0xa57b1810
2026-02-11T23:19:28.328 [DEBUG] [Thread-137620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:19:28.347 [DEBUG] [Thread-137620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:19:28.348 [INFO] [Thread-137620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] client lang: <none>
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] server lang: <none>
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] kex follows: False
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:19:28.349 [DEBUG] [Thread-137620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:19:28.350 [DEBUG] [Thread-137620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:19:28.350 [DEBUG] [Thread-137620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:19:28.350 [DEBUG] [Thread-137620] [transport.py] [_log()] Compression: none
2026-02-11T23:19:28.350 [DEBUG] [Thread-137620] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:19:28.359 [DEBUG] [Thread-137620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:19:28.359 [DEBUG] [Thread-137620] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:19:28.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:19:28.361 [DEBUG] [Thread-137620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:19:28.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:19:28.363 [DEBUG] [Thread-137620] [transport.py] [_log()] userauth is OK
2026-02-11T23:19:28.363 [DEBUG] [Thread-137620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:19:28.363 [DEBUG] [Thread-137620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:19:28.363 [DEBUG] [Thread-137620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:19:28.363 [DEBUG] [Thread-137620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:19:28.382 [INFO] [Thread-137620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:19:28.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:19:28.966 [DEBUG] [Thread-137620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:19:28.966 [DEBUG] [Thread-137620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:19:28.967 [DEBUG] [Thread-137620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:19:29.007 [DEBUG] [Thread-137620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:19:29.008 [DEBUG] [Thread-137620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:19:29.011 [DEBUG] [Thread-137620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:19:29.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:19:29.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:19:29.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:19:29.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:19:29.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:19:29.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:19:29.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:19:29.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:19:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:19:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.887983 -999.00  +14.40  12.66     91  +13.10 1 2 1 3 1     0    0 1.06 -9.09 zNESW 13.6 12.7 185.8 16.2 15.7 -18.0 15.5 -17.6 15.4 -16.5 15.7 -17.4
2026-02-11T23:19:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:19:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:19:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.887983
2026-02-11T23:19:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:19:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:19:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:19:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:19:29.040 [DEBUG] [Thread-137620] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:19:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:19:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:18:55', tmtdew=0.57, humidity=96.21, cloud=0.0, wind=23.1, temperature=14.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:18:41.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.49074999999999935, 0.5772500000000003, 0.7012500000000008, 0.7064999999999992, 0.6694999999999993, 0.5382500000000014, 0.41350000000000087, 0.5362500000000008, 0.519499999999999, 0.6660000000000004, 0.6687499999999993, 0.7409999999999997, 0.7389999999999999, 0.5757499999999993, 0.488999999999999, 0.488999999999999, 0.6372499999999999, 0.9135, 1.0059999999999993, 0.9557499999999983, 0.7424999999999988, 0.6447499999999984, 0.46825000000000117, 0.6247499999999997, 0.7119999999999989, 1.3040000000000003, 1.24275, 1.1010000000000009, 1.0495, 0.8320000000000007, 0.6895000000000007, 0.8100000000000005, 0.9267499999999993], zp_timestamp='2026-02-11T21:17:00')
2026-02-11T23:19:29.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:19:29.138 [DEBUG] [Thread-137623] [transport.py] [_log()] starting thread (client mode): 0xa2d97370
2026-02-11T23:19:29.139 [DEBUG] [Thread-137623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:19:29.153 [DEBUG] [Thread-137623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:19:29.153 [INFO] [Thread-137623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:19:29.162 [DEBUG] [Thread-137623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] client lang: <none>
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] server lang: <none>
2026-02-11T23:19:29.163 [DEBUG] [Thread-137623] [transport.py] [_log()] kex follows: False
2026-02-11T23:19:29.164 [DEBUG] [Thread-137623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:19:29.164 [DEBUG] [Thread-137623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:19:29.164 [DEBUG] [Thread-137623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:19:29.164 [DEBUG] [Thread-137623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:19:29.164 [DEBUG] [Thread-137623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:19:29.164 [DEBUG] [Thread-137623] [transport.py] [_log()] Compression: none
2026-02-11T23:19:29.164 [DEBUG] [Thread-137623] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:19:29.225 [DEBUG] [Thread-137623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:19:29.225 [DEBUG] [Thread-137623] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:19:29.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:19:29.226 [DEBUG] [Thread-137623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:19:29.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:19:29.286 [DEBUG] [Thread-137623] [transport.py] [_log()] userauth is OK
2026-02-11T23:19:29.286 [DEBUG] [Thread-137623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:19:29.286 [DEBUG] [Thread-137623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:19:29.286 [DEBUG] [Thread-137623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:19:29.287 [DEBUG] [Thread-137623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:19:29.305 [INFO] [Thread-137623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:19:29.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:19:29.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:19:30.160 [DEBUG] [Thread-137623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:19:30.160 [DEBUG] [Thread-137623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:19:30.207 [DEBUG] [Thread-137623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:19:30.208 [DEBUG] [Thread-137623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:19:30.217 [DEBUG] [Thread-137623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:19:30.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:19:30.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:19:30.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
2026-02-11T23:19:30.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:19:30.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:19:30.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:19:30.258 [DEBUG] [Thread-137623] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:19:34.032 [DEBUG] [Thread-137625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:19:49.090 [DEBUG] [Thread-137626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:19:50.786 [DEBUG] [Thread-137627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:19:52.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:19:52.448 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:20:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:20:00.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:20:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:20:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 19, 31), 0.56, 96.24, 0.0, 19.83, 14.24, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:20:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:19:31
2026-02-11T23:20:02.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:20:02.719 [DEBUG] [Thread-137628] [transport.py] [_log()] starting thread (client mode): 0xa2d5ff10
2026-02-11T23:20:02.720 [DEBUG] [Thread-137628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:20:02.741 [DEBUG] [Thread-137628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:20:02.741 [INFO] [Thread-137628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:20:02.742 [DEBUG] [Thread-137628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:20:02.742 [DEBUG] [Thread-137628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:20:02.742 [DEBUG] [Thread-137628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:20:02.742 [DEBUG] [Thread-137628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] client lang: <none>
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] server lang: <none>
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] kex follows: False
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] Compression: none
2026-02-11T23:20:02.743 [DEBUG] [Thread-137628] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:20:02.751 [DEBUG] [Thread-137628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:20:02.751 [DEBUG] [Thread-137628] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:20:02.751 [DEBUG] [Thread-137628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:20:02.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:20:02.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:20:02.752 [DEBUG] [Thread-137628] [transport.py] [_log()] userauth is OK
2026-02-11T23:20:02.752 [DEBUG] [Thread-137628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:20:02.752 [DEBUG] [Thread-137628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:20:02.753 [DEBUG] [Thread-137628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:20:02.753 [DEBUG] [Thread-137628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:20:02.765 [INFO] [Thread-137628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:20:02.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:20:03.708 [DEBUG] [Thread-137628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:20:03.708 [DEBUG] [Thread-137628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:20:03.709 [DEBUG] [Thread-137628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:20:03.750 [DEBUG] [Thread-137628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:20:03.750 [DEBUG] [Thread-137628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:20:03.752 [DEBUG] [Thread-137628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:20:03.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:20:03.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:20:03.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:20:03.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:20:03.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:20:03.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:20:03.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:20:03.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:20:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:20:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.888330 -999.00  +14.40  10.99     91  +13.10 1 2 1 3 1     0    0 1.09 -8.00 zNESW 14.7 11.0 200.6 16.2 15.7 -18.0 -999.0 -999.0 15.4 -16.5 15.7 -17.6
2026-02-11T23:20:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:20:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:20:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.888330
2026-02-11T23:20:03.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:20:03.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:20:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:20:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:20:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:20:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:19:31', tmtdew=0.56, humidity=96.24, cloud=0.0, wind=19.83, temperature=14.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:19:11.712', atlas_cloud=2, atlas_rain=1, zp_data=[0.49074999999999935, 0.5772500000000003, 0.7012500000000008, 0.7064999999999992, 0.6694999999999993, 0.5382500000000014, 0.41350000000000087, 0.5362500000000008, 0.519499999999999, 0.6660000000000004, 0.6687499999999993, 0.7409999999999997, 0.7389999999999999, 0.5757499999999993, 0.488999999999999, 0.488999999999999, 0.6372499999999999, 0.9135, 1.0059999999999993, 0.9557499999999983, 0.7424999999999988, 0.6447499999999984, 0.46825000000000117, 0.6247499999999997, 0.7119999999999989, 1.3040000000000003, 1.24275, 1.1010000000000009, 1.0495, 0.8320000000000007, 0.6895000000000007, 0.8100000000000005, 0.9267499999999993], zp_timestamp='2026-02-11T21:17:00')
2026-02-11T23:20:03.780 [DEBUG] [Thread-137628] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:20:03.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:20:04.125 [DEBUG] [Thread-137631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:20:19.178 [DEBUG] [Thread-137632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:20:34.214 [DEBUG] [Thread-137633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:20:49.248 [DEBUG] [Thread-137634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:20:50.846 [DEBUG] [Thread-137635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:20:52.653 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:20:52.654 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:21:04.280 [DEBUG] [Thread-137636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:21:19.317 [DEBUG] [Thread-137637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:21:34.353 [DEBUG] [Thread-137638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:21:49.393 [DEBUG] [Thread-137639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:21:50.919 [DEBUG] [Thread-137640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:21:52.856 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:21:52.857 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:22:04.432 [DEBUG] [Thread-137641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:22:16.248 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T23:22:19.468 [DEBUG] [Thread-137642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:22:34.509 [DEBUG] [Thread-137643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:22:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:22:46.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:22:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:22:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 22, 31), 0.58, 96.16, 0.0, 18.76, 14.3, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:22:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:22:31
2026-02-11T23:22:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:22:48.827 [DEBUG] [Thread-137644] [transport.py] [_log()] starting thread (client mode): 0xa2d5e0e0
2026-02-11T23:22:48.827 [DEBUG] [Thread-137644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:22:48.848 [DEBUG] [Thread-137644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:22:48.848 [INFO] [Thread-137644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:22:48.851 [DEBUG] [Thread-137644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:22:48.851 [DEBUG] [Thread-137644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:22:48.851 [DEBUG] [Thread-137644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] client lang: <none>
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] server lang: <none>
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] kex follows: False
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] Compression: none
2026-02-11T23:22:48.852 [DEBUG] [Thread-137644] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:22:48.868 [DEBUG] [Thread-137644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:22:48.869 [DEBUG] [Thread-137644] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:22:48.869 [DEBUG] [Thread-137644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:22:48.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:22:48.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:22:48.871 [DEBUG] [Thread-137644] [transport.py] [_log()] userauth is OK
2026-02-11T23:22:48.872 [DEBUG] [Thread-137644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:22:48.872 [DEBUG] [Thread-137644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:22:48.872 [DEBUG] [Thread-137644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:22:48.872 [DEBUG] [Thread-137644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:22:48.898 [INFO] [Thread-137644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:22:48.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:22:49.546 [DEBUG] [Thread-137646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:22:49.690 [DEBUG] [Thread-137644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:22:49.691 [DEBUG] [Thread-137644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:22:49.691 [DEBUG] [Thread-137644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:22:49.731 [DEBUG] [Thread-137644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:22:49.732 [DEBUG] [Thread-137644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:22:49.735 [DEBUG] [Thread-137644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:22:49.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:22:49.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:22:49.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:22:49.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:22:49.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:22:49.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:22:49.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:22:49.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:22:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:22:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.890414 -999.00  +14.40  14.77     91  +13.10 1 2 1 3 1     0    0 1.16 -4.80 zNESW 16.3 14.8 180.4 16.8 15.7 -18.0 15.4 -17.4 15.3 -16.3 15.6 -17.6
2026-02-11T23:22:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:22:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:22:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.890414
2026-02-11T23:22:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:22:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:22:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:22:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:22:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:22:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:22:31', tmtdew=0.58, humidity=96.16, cloud=0.0, wind=18.76, temperature=14.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:22:11.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:19:00')
2026-02-11T23:22:49.764 [DEBUG] [Thread-137644] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:22:49.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:22:49.860 [DEBUG] [Thread-137648] [transport.py] [_log()] starting thread (client mode): 0xa2d9ca90
2026-02-11T23:22:49.860 [DEBUG] [Thread-137648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:22:49.875 [DEBUG] [Thread-137648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:22:49.875 [INFO] [Thread-137648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] client lang: <none>
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] server lang: <none>
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] kex follows: False
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:22:49.882 [DEBUG] [Thread-137648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:22:49.883 [DEBUG] [Thread-137648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:22:49.883 [DEBUG] [Thread-137648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:22:49.883 [DEBUG] [Thread-137648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:22:49.883 [DEBUG] [Thread-137648] [transport.py] [_log()] Compression: none
2026-02-11T23:22:49.883 [DEBUG] [Thread-137648] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:22:49.938 [DEBUG] [Thread-137648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:22:49.938 [DEBUG] [Thread-137648] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:22:49.938 [DEBUG] [Thread-137648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:22:49.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:22:49.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:22:49.996 [DEBUG] [Thread-137648] [transport.py] [_log()] userauth is OK
2026-02-11T23:22:49.996 [DEBUG] [Thread-137648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:22:49.996 [DEBUG] [Thread-137648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:22:49.996 [DEBUG] [Thread-137648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:22:49.996 [DEBUG] [Thread-137648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:22:50.010 [INFO] [Thread-137648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:22:50.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:22:50.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:22:50.851 [DEBUG] [Thread-137648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:22:50.851 [DEBUG] [Thread-137648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:22:50.899 [DEBUG] [Thread-137648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:22:50.900 [DEBUG] [Thread-137648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:22:50.909 [DEBUG] [Thread-137648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:22:50.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:22:50.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:22:50.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:22:50.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:22:50.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:22:50.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:22:50.943 [DEBUG] [Thread-137648] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:22:50.975 [DEBUG] [Thread-137650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:22:53.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:22:53.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:04.581 [DEBUG] [Thread-137651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:19.635 [DEBUG] [Thread-137652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:20.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:23:20.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:23:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:23:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 23, 6), 0.57, 96.17, 0.0, 17.98, 14.32, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:23:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:23:06
2026-02-11T23:23:23.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:23:23.416 [DEBUG] [Thread-137653] [transport.py] [_log()] starting thread (client mode): 0xa2d4cc40
2026-02-11T23:23:23.417 [DEBUG] [Thread-137653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:23:23.437 [DEBUG] [Thread-137653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:23:23.437 [INFO] [Thread-137653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:23:23.440 [DEBUG] [Thread-137653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:23:23.440 [DEBUG] [Thread-137653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:23:23.440 [DEBUG] [Thread-137653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:23:23.440 [DEBUG] [Thread-137653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] client lang: <none>
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] server lang: <none>
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] kex follows: False
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] Compression: none
2026-02-11T23:23:23.441 [DEBUG] [Thread-137653] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:23:23.458 [DEBUG] [Thread-137653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:23:23.459 [DEBUG] [Thread-137653] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:23:23.460 [DEBUG] [Thread-137653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:23:23.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:23:23.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:23:23.462 [DEBUG] [Thread-137653] [transport.py] [_log()] userauth is OK
2026-02-11T23:23:23.462 [DEBUG] [Thread-137653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:23:23.462 [DEBUG] [Thread-137653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:23:23.462 [DEBUG] [Thread-137653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:23:23.463 [DEBUG] [Thread-137653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:23:23.483 [INFO] [Thread-137653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:23:23.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:23:24.120 [DEBUG] [Thread-137653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:23:24.121 [DEBUG] [Thread-137653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:23:24.121 [DEBUG] [Thread-137653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:23:24.161 [DEBUG] [Thread-137653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:23:24.161 [DEBUG] [Thread-137653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:23:24.165 [DEBUG] [Thread-137653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:23:24.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:23:24.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:23:24.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:23:24.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:23:24.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:23:24.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:23:24.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:23:24.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:23:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:23:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.890761 -999.00  +14.40  17.86     91  +13.10 1 2 1 3 1     0    0 1.19 -3.80 .NESW 14.1 17.9 181.6 21.5 15.6 -18.0 15.4 -17.5 15.3 -16.5 15.6 -17.6
2026-02-11T23:23:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:23:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:23:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.890761
2026-02-11T23:23:24.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:23:24.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:23:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:23:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:23:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:23:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:23:06', tmtdew=0.57, humidity=96.17, cloud=0.0, wind=17.98, temperature=14.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:22:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:19:00')
2026-02-11T23:23:24.190 [DEBUG] [Thread-137653] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:23:24.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:23:24.287 [DEBUG] [Thread-137656] [transport.py] [_log()] starting thread (client mode): 0xa2d4fa90
2026-02-11T23:23:24.287 [DEBUG] [Thread-137656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:23:24.301 [DEBUG] [Thread-137656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:23:24.302 [INFO] [Thread-137656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:23:24.309 [DEBUG] [Thread-137656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:23:24.309 [DEBUG] [Thread-137656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:23:24.310 [DEBUG] [Thread-137656] [transport.py] [_log()] client lang: <none>
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] server lang: <none>
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] kex follows: False
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:23:24.311 [DEBUG] [Thread-137656] [transport.py] [_log()] Compression: none
2026-02-11T23:23:24.312 [DEBUG] [Thread-137656] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:23:24.373 [DEBUG] [Thread-137656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:23:24.373 [DEBUG] [Thread-137656] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:23:24.374 [DEBUG] [Thread-137656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:23:24.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:23:24.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:23:24.429 [DEBUG] [Thread-137656] [transport.py] [_log()] userauth is OK
2026-02-11T23:23:24.429 [DEBUG] [Thread-137656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:23:24.429 [DEBUG] [Thread-137656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:23:24.430 [DEBUG] [Thread-137656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:23:24.430 [DEBUG] [Thread-137656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:23:24.448 [INFO] [Thread-137656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:23:24.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:23:24.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:23:25.267 [DEBUG] [Thread-137656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:23:25.267 [DEBUG] [Thread-137656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:23:25.318 [DEBUG] [Thread-137656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:23:25.318 [DEBUG] [Thread-137656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:23:25.330 [DEBUG] [Thread-137656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:23:25.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:23:25.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:23:25.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:23:25.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:23:25.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:23:25.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:23:25.382 [DEBUG] [Thread-137656] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:23:34.670 [DEBUG] [Thread-137658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:49.718 [DEBUG] [Thread-137659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:51.033 [DEBUG] [Thread-137660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:53.261 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:53.262 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:23:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:23:55.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:23:55.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:23:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 23, 42), 1.05, 93.35, 0.0, 21.0, 14.67, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:23:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:23:42
2026-02-11T23:23:57.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:23:57.817 [DEBUG] [Thread-137661] [transport.py] [_log()] starting thread (client mode): 0xa2d4c7c0
2026-02-11T23:23:57.817 [DEBUG] [Thread-137661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:23:57.836 [DEBUG] [Thread-137661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:23:57.836 [INFO] [Thread-137661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:23:57.839 [DEBUG] [Thread-137661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:23:57.839 [DEBUG] [Thread-137661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:23:57.839 [DEBUG] [Thread-137661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:23:57.839 [DEBUG] [Thread-137661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:57.839 [DEBUG] [Thread-137661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:57.839 [DEBUG] [Thread-137661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:57.839 [DEBUG] [Thread-137661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] client lang: <none>
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] server lang: <none>
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] kex follows: False
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] Compression: none
2026-02-11T23:23:57.840 [DEBUG] [Thread-137661] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:23:57.857 [DEBUG] [Thread-137661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:23:57.857 [DEBUG] [Thread-137661] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:23:57.858 [DEBUG] [Thread-137661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:23:57.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:23:57.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:23:57.860 [DEBUG] [Thread-137661] [transport.py] [_log()] userauth is OK
2026-02-11T23:23:57.861 [DEBUG] [Thread-137661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:23:57.861 [DEBUG] [Thread-137661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:23:57.861 [DEBUG] [Thread-137661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:23:57.861 [DEBUG] [Thread-137661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:23:57.882 [INFO] [Thread-137661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:23:57.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:23:58.512 [DEBUG] [Thread-137661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:23:58.512 [DEBUG] [Thread-137661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:23:58.512 [DEBUG] [Thread-137661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:23:58.552 [DEBUG] [Thread-137661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:23:58.552 [DEBUG] [Thread-137661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:23:58.556 [DEBUG] [Thread-137661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:23:58.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:23:58.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:23:58.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:23:58.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:23:58.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:23:58.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:23:58.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:23:58.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:23:58.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:23:58.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.891108 -999.00  +14.40  16.86     91  +13.10 1 2 1 3 1     0    0 1.17 -3.37 zNESW 18.6 16.9 182.6 22.7 15.6 -17.9 15.4 -17.4 15.3 -16.5 15.6 -17.5
2026-02-11T23:23:58.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:23:58.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:23:58.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.891108
2026-02-11T23:23:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:23:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:23:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:23:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:23:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:23:58.582 [DEBUG] [Thread-137661] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:23:58.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:23:42', tmtdew=1.05, humidity=93.35, cloud=0.0, wind=21.0, temperature=14.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:23:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:19:00')
2026-02-11T23:23:58.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:23:58.686 [DEBUG] [Thread-137664] [transport.py] [_log()] starting thread (client mode): 0xa2d97880
2026-02-11T23:23:58.686 [DEBUG] [Thread-137664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:23:58.701 [DEBUG] [Thread-137664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:23:58.701 [INFO] [Thread-137664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:23:58.709 [DEBUG] [Thread-137664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:23:58.709 [DEBUG] [Thread-137664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:23:58.709 [DEBUG] [Thread-137664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] client lang: <none>
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] server lang: <none>
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] kex follows: False
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] Compression: none
2026-02-11T23:23:58.710 [DEBUG] [Thread-137664] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:23:58.768 [DEBUG] [Thread-137664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:23:58.769 [DEBUG] [Thread-137664] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:23:58.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:23:58.770 [DEBUG] [Thread-137664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:23:58.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:23:58.824 [DEBUG] [Thread-137664] [transport.py] [_log()] userauth is OK
2026-02-11T23:23:58.825 [DEBUG] [Thread-137664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:23:58.825 [DEBUG] [Thread-137664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:23:58.825 [DEBUG] [Thread-137664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:23:58.825 [DEBUG] [Thread-137664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:23:58.844 [INFO] [Thread-137664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:23:58.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:23:58.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:23:59.668 [DEBUG] [Thread-137664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:23:59.668 [DEBUG] [Thread-137664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:23:59.716 [DEBUG] [Thread-137664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:23:59.717 [DEBUG] [Thread-137664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:23:59.726 [DEBUG] [Thread-137664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:23:59.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:23:59.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:23:59.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:23:59.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:23:59.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:23:59.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:23:59.763 [DEBUG] [Thread-137664] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:24:04.761 [DEBUG] [Thread-137666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:24:19.813 [DEBUG] [Thread-137667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:24:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:24:29.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:24:29.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:24:31.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 24, 17), 0.58, 96.12, 0.0, 17.06, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:24:31.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:24:17
2026-02-11T23:24:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:24:32.222 [DEBUG] [Thread-137668] [transport.py] [_log()] starting thread (client mode): 0x9eb29e10
2026-02-11T23:24:32.223 [DEBUG] [Thread-137668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:24:32.242 [DEBUG] [Thread-137668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:24:32.242 [INFO] [Thread-137668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:24:32.245 [DEBUG] [Thread-137668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] client lang: <none>
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] server lang: <none>
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] kex follows: False
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] Compression: none
2026-02-11T23:24:32.246 [DEBUG] [Thread-137668] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:24:32.262 [DEBUG] [Thread-137668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:24:32.263 [DEBUG] [Thread-137668] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:24:32.263 [DEBUG] [Thread-137668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:24:32.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:24:32.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:24:32.265 [DEBUG] [Thread-137668] [transport.py] [_log()] userauth is OK
2026-02-11T23:24:32.265 [DEBUG] [Thread-137668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:24:32.265 [DEBUG] [Thread-137668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:24:32.266 [DEBUG] [Thread-137668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:24:32.266 [DEBUG] [Thread-137668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:24:32.291 [INFO] [Thread-137668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:24:32.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:24:32.904 [DEBUG] [Thread-137668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:24:32.905 [DEBUG] [Thread-137668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:24:32.905 [DEBUG] [Thread-137668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:24:32.945 [DEBUG] [Thread-137668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:24:32.945 [DEBUG] [Thread-137668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:24:32.948 [DEBUG] [Thread-137668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:24:32.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:24:32.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:24:32.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:24:32.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:24:32.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:24:32.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:24:32.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:24:32.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:24:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:24:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.891802 -999.00  +14.40  17.94     91  +13.10 1 2 1 3 1     0    0 1.22 -3.07 .NESW 17.8 17.9 184.0 22.4 15.6 -17.7 15.4 -17.2 15.3 -16.5 15.6 -17.5
2026-02-11T23:24:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:24:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:24:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.891802
2026-02-11T23:24:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:24:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:24:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:24:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:24:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:24:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:24:17', tmtdew=0.58, humidity=96.12, cloud=0.0, wind=17.06, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:24:11.693', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:23:00')
2026-02-11T23:24:32.971 [DEBUG] [Thread-137668] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:24:33.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:24:33.072 [DEBUG] [Thread-137671] [transport.py] [_log()] starting thread (client mode): 0x9eb2a140
2026-02-11T23:24:33.072 [DEBUG] [Thread-137671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:24:33.088 [DEBUG] [Thread-137671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:24:33.088 [INFO] [Thread-137671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:24:33.097 [DEBUG] [Thread-137671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:24:33.097 [DEBUG] [Thread-137671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:24:33.097 [DEBUG] [Thread-137671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:24:33.097 [DEBUG] [Thread-137671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:24:33.097 [DEBUG] [Thread-137671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:24:33.097 [DEBUG] [Thread-137671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:24:33.097 [DEBUG] [Thread-137671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] client lang: <none>
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] server lang: <none>
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] kex follows: False
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:24:33.098 [DEBUG] [Thread-137671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:24:33.099 [DEBUG] [Thread-137671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:24:33.099 [DEBUG] [Thread-137671] [transport.py] [_log()] Compression: none
2026-02-11T23:24:33.099 [DEBUG] [Thread-137671] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:24:33.158 [DEBUG] [Thread-137671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:24:33.158 [DEBUG] [Thread-137671] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:24:33.159 [DEBUG] [Thread-137671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:24:33.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:24:33.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:24:33.217 [DEBUG] [Thread-137671] [transport.py] [_log()] userauth is OK
2026-02-11T23:24:33.218 [DEBUG] [Thread-137671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:24:33.218 [DEBUG] [Thread-137671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:24:33.218 [DEBUG] [Thread-137671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:24:33.218 [DEBUG] [Thread-137671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:24:33.240 [INFO] [Thread-137671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:24:33.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:24:33.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:24:34.047 [DEBUG] [Thread-137671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:24:34.047 [DEBUG] [Thread-137671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:24:34.099 [DEBUG] [Thread-137671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:24:34.099 [DEBUG] [Thread-137671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:24:34.108 [DEBUG] [Thread-137671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:24:34.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:24:34.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:24:34.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:24:34.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:24:34.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:24:34.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:24:34.145 [DEBUG] [Thread-137671] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:24:34.849 [DEBUG] [Thread-137673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:24:49.900 [DEBUG] [Thread-137674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:24:51.089 [DEBUG] [Thread-137675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:24:53.471 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:24:53.472 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:25:04.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:25:04.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:25:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:25:04.936 [DEBUG] [Thread-137676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:25:06.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 24, 54), 0.59, 96.11, 0.0, 20.17, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:25:06.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:24:54
2026-02-11T23:25:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:25:07.336 [DEBUG] [Thread-137677] [transport.py] [_log()] starting thread (client mode): 0xa2d066e0
2026-02-11T23:25:07.336 [DEBUG] [Thread-137677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:25:07.357 [DEBUG] [Thread-137677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:25:07.357 [INFO] [Thread-137677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] client lang: <none>
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] server lang: <none>
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] kex follows: False
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:25:07.361 [DEBUG] [Thread-137677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:25:07.362 [DEBUG] [Thread-137677] [transport.py] [_log()] Compression: none
2026-02-11T23:25:07.362 [DEBUG] [Thread-137677] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:25:07.379 [DEBUG] [Thread-137677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:25:07.380 [DEBUG] [Thread-137677] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:25:07.380 [DEBUG] [Thread-137677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:25:07.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:25:07.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:25:07.382 [DEBUG] [Thread-137677] [transport.py] [_log()] userauth is OK
2026-02-11T23:25:07.382 [DEBUG] [Thread-137677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:25:07.383 [DEBUG] [Thread-137677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:25:07.383 [DEBUG] [Thread-137677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:25:07.383 [DEBUG] [Thread-137677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:25:07.402 [INFO] [Thread-137677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:25:07.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:25:09.622 [DEBUG] [Thread-137677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:25:09.623 [DEBUG] [Thread-137677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:25:09.623 [DEBUG] [Thread-137677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:25:09.663 [DEBUG] [Thread-137677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:25:09.663 [DEBUG] [Thread-137677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:25:09.667 [DEBUG] [Thread-137677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:25:09.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:25:09.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:25:09.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:25:09.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:25:09.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:25:09.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:25:09.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:25:09.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:25:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:25:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.892150 -999.00  +14.40  14.62     91  +13.10 1 2 1 3 1     0    0 1.25 -2.75 .NESW 13.9 14.6 180.8 21.7 15.6 -17.7 15.4 -17.0 15.3 -16.3 15.6 -17.3
2026-02-11T23:25:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:25:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:25:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.892150
2026-02-11T23:25:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:25:09.698 [DEBUG] [Thread-137677] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:25:09.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:25:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:25:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:25:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:25:09.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:24:54', tmtdew=0.59, humidity=96.11, cloud=0.0, wind=20.17, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:24:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:23:00')
2026-02-11T23:25:09.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:25:09.794 [DEBUG] [Thread-137680] [transport.py] [_log()] starting thread (client mode): 0xa2d06590
2026-02-11T23:25:09.794 [DEBUG] [Thread-137680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:25:09.808 [DEBUG] [Thread-137680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:25:09.809 [INFO] [Thread-137680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:25:09.816 [DEBUG] [Thread-137680] [transport.py] [_log()] client lang: <none>
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] server lang: <none>
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] kex follows: False
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] Compression: none
2026-02-11T23:25:09.817 [DEBUG] [Thread-137680] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:25:09.876 [DEBUG] [Thread-137680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:25:09.877 [DEBUG] [Thread-137680] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:25:09.877 [DEBUG] [Thread-137680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:25:09.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:25:09.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:25:09.932 [DEBUG] [Thread-137680] [transport.py] [_log()] userauth is OK
2026-02-11T23:25:09.933 [DEBUG] [Thread-137680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:25:09.933 [DEBUG] [Thread-137680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:25:09.933 [DEBUG] [Thread-137680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:25:09.934 [DEBUG] [Thread-137680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:25:09.954 [INFO] [Thread-137680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:25:09.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:25:09.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:25:10.790 [DEBUG] [Thread-137680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:25:10.790 [DEBUG] [Thread-137680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:25:10.839 [DEBUG] [Thread-137680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:25:10.839 [DEBUG] [Thread-137680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:25:10.848 [DEBUG] [Thread-137680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:25:10.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:25:10.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:25:10.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:25:10.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:25:10.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:25:10.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:25:10.885 [DEBUG] [Thread-137680] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:25:19.973 [DEBUG] [Thread-137682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:25:35.025 [DEBUG] [Thread-137683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:25:40.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:25:40.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:25:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:25:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 25, 30), 0.58, 96.12, 0.0, 20.15, 14.37, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:25:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:25:30
2026-02-11T23:25:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:25:43.260 [DEBUG] [Thread-137684] [transport.py] [_log()] starting thread (client mode): 0xa2d04be0
2026-02-11T23:25:43.260 [DEBUG] [Thread-137684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:25:43.278 [DEBUG] [Thread-137684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:25:43.279 [INFO] [Thread-137684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:25:43.281 [DEBUG] [Thread-137684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] client lang: <none>
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] server lang: <none>
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] kex follows: False
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:25:43.282 [DEBUG] [Thread-137684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:25:43.283 [DEBUG] [Thread-137684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:25:43.283 [DEBUG] [Thread-137684] [transport.py] [_log()] Compression: none
2026-02-11T23:25:43.283 [DEBUG] [Thread-137684] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:25:43.291 [DEBUG] [Thread-137684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:25:43.291 [DEBUG] [Thread-137684] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:25:43.292 [DEBUG] [Thread-137684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:25:43.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:25:43.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:25:43.293 [DEBUG] [Thread-137684] [transport.py] [_log()] userauth is OK
2026-02-11T23:25:43.293 [DEBUG] [Thread-137684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:25:43.293 [DEBUG] [Thread-137684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:25:43.293 [DEBUG] [Thread-137684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:25:43.293 [DEBUG] [Thread-137684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:25:43.316 [INFO] [Thread-137684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:25:43.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:25:43.906 [DEBUG] [Thread-137684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:25:43.906 [DEBUG] [Thread-137684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:25:43.907 [DEBUG] [Thread-137684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:25:43.947 [DEBUG] [Thread-137684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:25:43.947 [DEBUG] [Thread-137684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:25:43.949 [DEBUG] [Thread-137684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:25:43.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:25:43.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:25:43.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:25:43.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:25:43.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:25:43.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:25:43.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:25:43.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:25:43.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:25:43.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.892497 -999.00  +14.50  19.51     91  +13.10 1 2 1 3 1     0    0 1.26 -1.77 .NESW 18.1 19.5 182.0 22.4 15.6 -17.8 15.4 -17.0 15.3 -16.3 15.6 -17.2
2026-02-11T23:25:43.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:25:43.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:25:43.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.892497
2026-02-11T23:25:43.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:25:43.971 [DEBUG] [Thread-137684] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:25:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:25:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:25:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:25:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:25:43.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:25:30', tmtdew=0.58, humidity=96.12, cloud=0.0, wind=20.15, temperature=14.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:25:11.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:23:00')
2026-02-11T23:25:44.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:25:44.068 [DEBUG] [Thread-137687] [transport.py] [_log()] starting thread (client mode): 0xa2d97520
2026-02-11T23:25:44.068 [DEBUG] [Thread-137687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:25:44.089 [DEBUG] [Thread-137687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:25:44.089 [INFO] [Thread-137687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:25:44.100 [DEBUG] [Thread-137687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] client lang: <none>
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] server lang: <none>
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] kex follows: False
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:25:44.101 [DEBUG] [Thread-137687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:25:44.102 [DEBUG] [Thread-137687] [transport.py] [_log()] Compression: none
2026-02-11T23:25:44.102 [DEBUG] [Thread-137687] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:25:44.160 [DEBUG] [Thread-137687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:25:44.161 [DEBUG] [Thread-137687] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:25:44.161 [DEBUG] [Thread-137687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:25:44.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:25:44.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:25:44.216 [DEBUG] [Thread-137687] [transport.py] [_log()] userauth is OK
2026-02-11T23:25:44.216 [DEBUG] [Thread-137687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:25:44.216 [DEBUG] [Thread-137687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:25:44.216 [DEBUG] [Thread-137687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:25:44.216 [DEBUG] [Thread-137687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:25:44.236 [INFO] [Thread-137687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:25:44.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:25:44.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:25:45.087 [DEBUG] [Thread-137687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:25:45.088 [DEBUG] [Thread-137687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:25:45.135 [DEBUG] [Thread-137687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:25:45.135 [DEBUG] [Thread-137687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:25:45.144 [DEBUG] [Thread-137687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:25:45.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:25:45.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:25:45.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:25:45.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:25:45.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:25:45.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:25:45.179 [DEBUG] [Thread-137687] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:25:50.058 [DEBUG] [Thread-137689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:25:51.168 [DEBUG] [Thread-137690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:25:53.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:25:53.676 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:05.113 [DEBUG] [Thread-137691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:26:15.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:26:15.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:26:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 26, 6), 0.59, 96.07, 0.0, 19.23, 14.35, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:26:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:26:06
2026-02-11T23:26:17.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:26:17.843 [DEBUG] [Thread-137692] [transport.py] [_log()] starting thread (client mode): 0xa2d04c10
2026-02-11T23:26:17.843 [DEBUG] [Thread-137692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:26:17.861 [DEBUG] [Thread-137692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:26:17.861 [INFO] [Thread-137692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] client lang: <none>
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] server lang: <none>
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] kex follows: False
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:26:17.864 [DEBUG] [Thread-137692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:26:17.865 [DEBUG] [Thread-137692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:26:17.865 [DEBUG] [Thread-137692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:26:17.865 [DEBUG] [Thread-137692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:26:17.865 [DEBUG] [Thread-137692] [transport.py] [_log()] Compression: none
2026-02-11T23:26:17.865 [DEBUG] [Thread-137692] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:26:17.878 [DEBUG] [Thread-137692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:26:17.879 [DEBUG] [Thread-137692] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:26:17.879 [DEBUG] [Thread-137692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:26:17.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:26:17.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:26:17.882 [DEBUG] [Thread-137692] [transport.py] [_log()] userauth is OK
2026-02-11T23:26:17.882 [DEBUG] [Thread-137692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:26:17.882 [DEBUG] [Thread-137692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:26:17.882 [DEBUG] [Thread-137692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:26:17.882 [DEBUG] [Thread-137692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:26:17.905 [INFO] [Thread-137692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:26:17.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:26:18.555 [DEBUG] [Thread-137692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:26:18.556 [DEBUG] [Thread-137692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:26:18.556 [DEBUG] [Thread-137692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:26:18.596 [DEBUG] [Thread-137692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:26:18.597 [DEBUG] [Thread-137692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:26:18.600 [DEBUG] [Thread-137692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:26:18.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:26:18.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:26:18.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:26:18.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:26:18.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:26:18.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:26:18.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:26:18.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:26:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:26:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.892844 -999.00  +14.50  17.88     91  +13.10 1 2 1 3 1     0    0 1.28 -0.96 .NESW 17.2 17.9 191.2 24.0 15.6 -17.8 15.4 -17.4 15.3 -16.5 15.6 -17.5
2026-02-11T23:26:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:26:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:26:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.892844
2026-02-11T23:26:18.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:26:18.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:26:18.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:26:18.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:26:18.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:26:18.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:26:06', tmtdew=0.59, humidity=96.07, cloud=0.0, wind=19.23, temperature=14.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:25:41.722', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:23:00')
2026-02-11T23:26:18.628 [DEBUG] [Thread-137692] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:26:18.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:26:18.724 [DEBUG] [Thread-137695] [transport.py] [_log()] starting thread (client mode): 0x9eb29f90
2026-02-11T23:26:18.724 [DEBUG] [Thread-137695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:26:18.743 [DEBUG] [Thread-137695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:26:18.743 [INFO] [Thread-137695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:26:18.751 [DEBUG] [Thread-137695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:26:18.751 [DEBUG] [Thread-137695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:26:18.751 [DEBUG] [Thread-137695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:26:18.751 [DEBUG] [Thread-137695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:18.751 [DEBUG] [Thread-137695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] client lang: <none>
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] server lang: <none>
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] kex follows: False
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:26:18.752 [DEBUG] [Thread-137695] [transport.py] [_log()] Compression: none
2026-02-11T23:26:18.753 [DEBUG] [Thread-137695] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:26:18.812 [DEBUG] [Thread-137695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:26:18.812 [DEBUG] [Thread-137695] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:26:18.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:26:18.814 [DEBUG] [Thread-137695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:26:18.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:26:18.873 [DEBUG] [Thread-137695] [transport.py] [_log()] userauth is OK
2026-02-11T23:26:18.874 [DEBUG] [Thread-137695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:26:18.874 [DEBUG] [Thread-137695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:26:18.874 [DEBUG] [Thread-137695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:26:18.874 [DEBUG] [Thread-137695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:26:18.893 [INFO] [Thread-137695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:26:18.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:26:18.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:26:19.716 [DEBUG] [Thread-137695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:26:19.716 [DEBUG] [Thread-137695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:26:19.764 [DEBUG] [Thread-137695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:26:19.764 [DEBUG] [Thread-137695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:26:19.773 [DEBUG] [Thread-137695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:26:19.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:26:19.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:26:19.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:26:19.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:26:19.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:26:19.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:26:19.808 [DEBUG] [Thread-137695] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:26:20.151 [DEBUG] [Thread-137697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:35.200 [DEBUG] [Thread-137698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:49.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:26:49.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:26:49.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:26:50.241 [DEBUG] [Thread-137699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:51.246 [DEBUG] [Thread-137700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 26, 41), 1.08, 93.18, 0.0, 20.85, 14.77, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:26:51.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:26:41
2026-02-11T23:26:52.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:26:52.448 [DEBUG] [Thread-137701] [transport.py] [_log()] starting thread (client mode): 0x9eb2bc40
2026-02-11T23:26:52.448 [DEBUG] [Thread-137701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:26:52.469 [DEBUG] [Thread-137701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:26:52.469 [INFO] [Thread-137701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] client lang: <none>
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] server lang: <none>
2026-02-11T23:26:52.473 [DEBUG] [Thread-137701] [transport.py] [_log()] kex follows: False
2026-02-11T23:26:52.474 [DEBUG] [Thread-137701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:26:52.474 [DEBUG] [Thread-137701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:26:52.474 [DEBUG] [Thread-137701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:26:52.474 [DEBUG] [Thread-137701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:26:52.474 [DEBUG] [Thread-137701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:26:52.474 [DEBUG] [Thread-137701] [transport.py] [_log()] Compression: none
2026-02-11T23:26:52.474 [DEBUG] [Thread-137701] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:26:52.491 [DEBUG] [Thread-137701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:26:52.492 [DEBUG] [Thread-137701] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:26:52.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:26:52.493 [DEBUG] [Thread-137701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:26:52.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:26:52.495 [DEBUG] [Thread-137701] [transport.py] [_log()] userauth is OK
2026-02-11T23:26:52.496 [DEBUG] [Thread-137701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:26:52.496 [DEBUG] [Thread-137701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:26:52.496 [DEBUG] [Thread-137701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:26:52.496 [DEBUG] [Thread-137701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:26:52.519 [INFO] [Thread-137701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:26:52.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:26:53.159 [DEBUG] [Thread-137701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:26:53.159 [DEBUG] [Thread-137701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:26:53.159 [DEBUG] [Thread-137701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:26:53.201 [DEBUG] [Thread-137701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:26:53.201 [DEBUG] [Thread-137701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:26:53.204 [DEBUG] [Thread-137701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:26:53.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:26:53.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:26:53.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:26:53.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:26:53.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:26:53.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:26:53.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:26:53.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:26:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:26:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.893191 -999.00  +14.50  17.54     91  +13.10 1 2 1 3 1     0    0 1.31 -0.22 zNESW 14.3 17.5 184.0 26.2 15.5 -18.0 15.4 -17.4 15.3 -16.4 15.6 -17.5
2026-02-11T23:26:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:26:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:26:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.893191
2026-02-11T23:26:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:26:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:26:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:26:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:26:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:26:53.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:26:41', tmtdew=1.08, humidity=93.18, cloud=0.0, wind=20.85, temperature=14.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:26:11.702', atlas_cloud=2, atlas_rain=1, zp_data=[0.7007499999999993, 0.1542500000000011, 0.18925000000000125, 0.2704999999999984, 0.42549999999999955, 0.3487500000000008, 0.39700000000000024, 0.6242500000000009, 0.551499999999999, 0.08900000000000041, 0.010249999999999204, 0.10800000000000054, 0.19200000000000017, 0.11824999999999974, 0.11299999999999955, 0.20999999999999908, 0.22025000000000006, 0.10449999999999982, 0.061500000000000554, 0.061249999999997584, 0.11699999999999733, 0.039749999999997954, 0.03725000000000023, 0.10374999999999979, 0.08899999999999864, 0.10250000000000092, 0.06925000000000026, 0.08650000000000091, 0.16949999999999932, 0.19700000000000095, 0.12400000000000055, 0.18100000000000094, 0.1117499999999989], zp_timestamp='2026-02-11T21:23:00')
2026-02-11T23:26:53.226 [DEBUG] [Thread-137701] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:26:53.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:26:53.321 [DEBUG] [Thread-137704] [transport.py] [_log()] starting thread (client mode): 0xa2d4cdf0
2026-02-11T23:26:53.321 [DEBUG] [Thread-137704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:26:53.335 [DEBUG] [Thread-137704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:26:53.335 [INFO] [Thread-137704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:26:53.343 [DEBUG] [Thread-137704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:26:53.343 [DEBUG] [Thread-137704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:26:53.343 [DEBUG] [Thread-137704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] client lang: <none>
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] server lang: <none>
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] kex follows: False
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] Compression: none
2026-02-11T23:26:53.344 [DEBUG] [Thread-137704] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:26:53.401 [DEBUG] [Thread-137704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:26:53.402 [DEBUG] [Thread-137704] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:26:53.402 [DEBUG] [Thread-137704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:26:53.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:26:53.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:26:53.464 [DEBUG] [Thread-137704] [transport.py] [_log()] userauth is OK
2026-02-11T23:26:53.464 [DEBUG] [Thread-137704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:26:53.464 [DEBUG] [Thread-137704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:26:53.464 [DEBUG] [Thread-137704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:26:53.464 [DEBUG] [Thread-137704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:26:53.483 [INFO] [Thread-137704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:26:53.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:26:53.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:26:53.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:53.883 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:26:54.304 [DEBUG] [Thread-137704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:26:54.304 [DEBUG] [Thread-137704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:26:54.352 [DEBUG] [Thread-137704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:26:54.353 [DEBUG] [Thread-137704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:26:54.362 [DEBUG] [Thread-137704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:26:54.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:26:54.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:26:54.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:26:54.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:26:54.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:26:54.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:26:54.399 [DEBUG] [Thread-137704] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:27:05.278 [DEBUG] [Thread-137706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:27:20.340 [DEBUG] [Thread-137707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:27:24.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:27:24.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:27:24.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:27:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 27, 18), 0.59, 96.06, 0.0, 21.19, 14.42, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:27:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:27:18
2026-02-11T23:27:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:27:26.894 [DEBUG] [Thread-137708] [transport.py] [_log()] starting thread (client mode): 0x9eb2a920
2026-02-11T23:27:26.895 [DEBUG] [Thread-137708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:27:26.906 [DEBUG] [Thread-137708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:27:26.906 [INFO] [Thread-137708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] client lang: <none>
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] server lang: <none>
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] kex follows: False
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] Compression: none
2026-02-11T23:27:26.909 [DEBUG] [Thread-137708] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:27:26.921 [DEBUG] [Thread-137708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:27:26.922 [DEBUG] [Thread-137708] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:27:26.922 [DEBUG] [Thread-137708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:27:26.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:27:26.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:27:26.923 [DEBUG] [Thread-137708] [transport.py] [_log()] userauth is OK
2026-02-11T23:27:26.923 [DEBUG] [Thread-137708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:27:26.923 [DEBUG] [Thread-137708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:27:26.923 [DEBUG] [Thread-137708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:27:26.923 [DEBUG] [Thread-137708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:27:26.936 [INFO] [Thread-137708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:27:26.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:27:27.713 [DEBUG] [Thread-137708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:27:27.714 [DEBUG] [Thread-137708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:27:27.714 [DEBUG] [Thread-137708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:27:27.754 [DEBUG] [Thread-137708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:27:27.754 [DEBUG] [Thread-137708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:27:27.757 [DEBUG] [Thread-137708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:27:27.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:27:27.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:27:27.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:27:27.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:27:27.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:27:27.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:27:27.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:27:27.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:27:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:27:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.893539 -999.00  +14.50  14.13     91  +13.10 1 2 1 3 1     0    0 1.33 0.46 zNESW 11.6 14.1 186.4 19.7 15.6 -17.8 15.4 -17.3 15.2 -16.3 15.6 -17.6
2026-02-11T23:27:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:27:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:27:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.893539
2026-02-11T23:27:27.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:27:27.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:27:27.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:27:27.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:27:27.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:27:27.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:27:18', tmtdew=0.59, humidity=96.06, cloud=0.0, wind=21.19, temperature=14.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:26:41.770', atlas_cloud=2, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:25:00')
2026-02-11T23:27:27.784 [DEBUG] [Thread-137708] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:27:27.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:27:27.880 [DEBUG] [Thread-137711] [transport.py] [_log()] starting thread (client mode): 0x9eb2bd90
2026-02-11T23:27:27.881 [DEBUG] [Thread-137711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:27:27.897 [DEBUG] [Thread-137711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:27:27.897 [INFO] [Thread-137711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:27:27.905 [DEBUG] [Thread-137711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:27:27.905 [DEBUG] [Thread-137711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:27:27.905 [DEBUG] [Thread-137711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:27:27.905 [DEBUG] [Thread-137711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] client lang: <none>
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] server lang: <none>
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] kex follows: False
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:27:27.906 [DEBUG] [Thread-137711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:27:27.907 [DEBUG] [Thread-137711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:27:27.907 [DEBUG] [Thread-137711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:27:27.907 [DEBUG] [Thread-137711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:27:27.907 [DEBUG] [Thread-137711] [transport.py] [_log()] Compression: none
2026-02-11T23:27:27.907 [DEBUG] [Thread-137711] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:27:27.966 [DEBUG] [Thread-137711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:27:27.966 [DEBUG] [Thread-137711] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:27:27.967 [DEBUG] [Thread-137711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:27:27.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:27:27.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:27:28.026 [DEBUG] [Thread-137711] [transport.py] [_log()] userauth is OK
2026-02-11T23:27:28.026 [DEBUG] [Thread-137711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:27:28.026 [DEBUG] [Thread-137711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:27:28.027 [DEBUG] [Thread-137711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:27:28.027 [DEBUG] [Thread-137711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:27:28.046 [INFO] [Thread-137711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:27:28.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:27:28.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:27:28.899 [DEBUG] [Thread-137711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:27:28.899 [DEBUG] [Thread-137711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:27:28.946 [DEBUG] [Thread-137711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:27:28.947 [DEBUG] [Thread-137711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:27:28.957 [DEBUG] [Thread-137711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:27:28.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:27:28.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:27:28.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:27:28.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:27:28.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:27:28.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:27:28.999 [DEBUG] [Thread-137711] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:27:35.377 [DEBUG] [Thread-137713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:27:50.430 [DEBUG] [Thread-137714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:27:51.337 [DEBUG] [Thread-137715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:27:54.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:27:54.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:27:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:27:59.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:27:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:28:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 27, 18), 0.59, 96.06, 0.0, 21.19, 14.42, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:28:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:27:18
2026-02-11T23:28:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:28:01.457 [DEBUG] [Thread-137716] [transport.py] [_log()] starting thread (client mode): 0xa2d95060
2026-02-11T23:28:01.458 [DEBUG] [Thread-137716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:28:01.477 [DEBUG] [Thread-137716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:28:01.477 [INFO] [Thread-137716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:28:01.480 [DEBUG] [Thread-137716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] client lang: <none>
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] server lang: <none>
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] kex follows: False
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] Compression: none
2026-02-11T23:28:01.481 [DEBUG] [Thread-137716] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:28:01.499 [DEBUG] [Thread-137716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:28:01.499 [DEBUG] [Thread-137716] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:28:01.500 [DEBUG] [Thread-137716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:28:01.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:28:01.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:28:01.502 [DEBUG] [Thread-137716] [transport.py] [_log()] userauth is OK
2026-02-11T23:28:01.502 [DEBUG] [Thread-137716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:28:01.502 [DEBUG] [Thread-137716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:28:01.502 [DEBUG] [Thread-137716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:28:01.502 [DEBUG] [Thread-137716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:28:01.524 [INFO] [Thread-137716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:28:01.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:28:02.151 [DEBUG] [Thread-137716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:28:02.151 [DEBUG] [Thread-137716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:28:02.151 [DEBUG] [Thread-137716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:28:02.193 [DEBUG] [Thread-137716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:28:02.193 [DEBUG] [Thread-137716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:28:02.196 [DEBUG] [Thread-137716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:28:02.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:28:02.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:28:02.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:28:02.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:28:02.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:28:02.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:28:02.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:28:02.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:28:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:28:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.894233 -999.00  +14.40  14.29     91  +13.10 1 2 1 3 1     0    0 1.34 1.74 zNESW 13.2 14.3 178.8 18.9 15.6 -17.8 15.4 -17.2 15.2 -16.3 15.6 -17.2
2026-02-11T23:28:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:28:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:28:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.894233
2026-02-11T23:28:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:28:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:28:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:28:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:28:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:28:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:27:18', tmtdew=0.59, humidity=96.06, cloud=0.0, wind=21.19, temperature=14.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:27:41.731', atlas_cloud=2, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:25:00')
2026-02-11T23:28:02.224 [DEBUG] [Thread-137716] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:28:02.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:28:02.322 [DEBUG] [Thread-137719] [transport.py] [_log()] starting thread (client mode): 0xa2d07370
2026-02-11T23:28:02.323 [DEBUG] [Thread-137719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:28:02.340 [DEBUG] [Thread-137719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:28:02.340 [INFO] [Thread-137719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] client lang: <none>
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] server lang: <none>
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] kex follows: False
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] Compression: none
2026-02-11T23:28:02.348 [DEBUG] [Thread-137719] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:28:02.404 [DEBUG] [Thread-137719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:28:02.404 [DEBUG] [Thread-137719] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:28:02.404 [DEBUG] [Thread-137719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:28:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:28:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:28:02.465 [DEBUG] [Thread-137719] [transport.py] [_log()] userauth is OK
2026-02-11T23:28:02.465 [DEBUG] [Thread-137719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:28:02.465 [DEBUG] [Thread-137719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:28:02.465 [DEBUG] [Thread-137719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:28:02.465 [DEBUG] [Thread-137719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:28:02.479 [INFO] [Thread-137719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:28:02.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:28:02.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:28:03.332 [DEBUG] [Thread-137719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:28:03.332 [DEBUG] [Thread-137719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:28:03.381 [DEBUG] [Thread-137719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:28:03.381 [DEBUG] [Thread-137719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:28:03.390 [DEBUG] [Thread-137719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:28:03.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:28:03.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:28:03.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
2026-02-11T23:28:03.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:28:03.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:28:03.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:28:03.426 [DEBUG] [Thread-137719] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:28:05.463 [DEBUG] [Thread-137721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:28:20.514 [DEBUG] [Thread-137722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:28:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:28:33.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:28:33.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:28:35.551 [DEBUG] [Thread-137723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:28:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 27, 53), 0.66, 95.98, 0.0, 17.01, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:28:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:27:53
2026-02-11T23:28:36.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:28:36.418 [DEBUG] [Thread-137724] [transport.py] [_log()] starting thread (client mode): 0xa57b2fb0
2026-02-11T23:28:36.418 [DEBUG] [Thread-137724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:28:36.439 [DEBUG] [Thread-137724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:28:36.439 [INFO] [Thread-137724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:28:36.442 [DEBUG] [Thread-137724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:28:36.442 [DEBUG] [Thread-137724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:28:36.442 [DEBUG] [Thread-137724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:28:36.442 [DEBUG] [Thread-137724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:36.442 [DEBUG] [Thread-137724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:36.442 [DEBUG] [Thread-137724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:36.442 [DEBUG] [Thread-137724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] client lang: <none>
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] server lang: <none>
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] kex follows: False
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] Compression: none
2026-02-11T23:28:36.443 [DEBUG] [Thread-137724] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:28:36.460 [DEBUG] [Thread-137724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:28:36.460 [DEBUG] [Thread-137724] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:28:36.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:28:36.462 [DEBUG] [Thread-137724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:28:36.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:28:36.464 [DEBUG] [Thread-137724] [transport.py] [_log()] userauth is OK
2026-02-11T23:28:36.464 [DEBUG] [Thread-137724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:28:36.464 [DEBUG] [Thread-137724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:28:36.464 [DEBUG] [Thread-137724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:28:36.464 [DEBUG] [Thread-137724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:28:36.499 [INFO] [Thread-137724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:28:36.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:28:37.135 [DEBUG] [Thread-137724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:28:37.135 [DEBUG] [Thread-137724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:28:37.135 [DEBUG] [Thread-137724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:28:37.175 [DEBUG] [Thread-137724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:28:37.176 [DEBUG] [Thread-137724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:28:37.179 [DEBUG] [Thread-137724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:28:37.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:28:37.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:28:37.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:28:37.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:28:37.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:28:37.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:28:37.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:28:37.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:28:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:28:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.894580 -999.00  +14.40  13.72     91  +13.10 1 2 1 3 1     0    0 1.35 1.80 zNESW 13.6 13.7 182.6 18.0 15.6 -17.8 15.3 -17.2 15.2 -16.4 15.5 -17.3
2026-02-11T23:28:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:28:37.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:28:37.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.894580
2026-02-11T23:28:37.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:28:37.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:28:37.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:28:37.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:28:37.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:28:37.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:27:53', tmtdew=0.66, humidity=95.98, cloud=0.0, wind=17.01, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:28:11.712', atlas_cloud=2, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:25:00')
2026-02-11T23:28:37.208 [DEBUG] [Thread-137724] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:28:37.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:28:37.305 [DEBUG] [Thread-137727] [transport.py] [_log()] starting thread (client mode): 0xa2d5cc70
2026-02-11T23:28:37.305 [DEBUG] [Thread-137727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:28:37.320 [DEBUG] [Thread-137727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:28:37.320 [INFO] [Thread-137727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:28:37.329 [DEBUG] [Thread-137727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:28:37.329 [DEBUG] [Thread-137727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] client lang: <none>
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] server lang: <none>
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] kex follows: False
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] Compression: none
2026-02-11T23:28:37.330 [DEBUG] [Thread-137727] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:28:37.388 [DEBUG] [Thread-137727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:28:37.389 [DEBUG] [Thread-137727] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:28:37.390 [DEBUG] [Thread-137727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:28:37.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:28:37.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:28:37.444 [DEBUG] [Thread-137727] [transport.py] [_log()] userauth is OK
2026-02-11T23:28:37.445 [DEBUG] [Thread-137727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:28:37.445 [DEBUG] [Thread-137727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:28:37.445 [DEBUG] [Thread-137727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:28:37.445 [DEBUG] [Thread-137727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:28:37.463 [INFO] [Thread-137727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:28:37.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:28:37.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:28:38.299 [DEBUG] [Thread-137727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:28:38.299 [DEBUG] [Thread-137727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:28:38.347 [DEBUG] [Thread-137727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:28:38.347 [DEBUG] [Thread-137727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:28:38.356 [DEBUG] [Thread-137727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:28:38.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:28:38.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:28:38.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:28:38.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:28:38.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:28:38.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:28:38.389 [DEBUG] [Thread-137727] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:28:50.587 [DEBUG] [Thread-137729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:28:51.412 [DEBUG] [Thread-137730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:28:54.287 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:28:54.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:29:05.637 [DEBUG] [Thread-137731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:29:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:29:08.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:29:08.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:29:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 28, 28), 0.67, 95.93, 0.0, 15.88, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:29:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:28:28
2026-02-11T23:29:10.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:29:10.823 [DEBUG] [Thread-137732] [transport.py] [_log()] starting thread (client mode): 0xa57b13c0
2026-02-11T23:29:10.824 [DEBUG] [Thread-137732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:29:10.845 [DEBUG] [Thread-137732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:29:10.845 [INFO] [Thread-137732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] client lang: <none>
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] server lang: <none>
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] kex follows: False
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] Compression: none
2026-02-11T23:29:10.848 [DEBUG] [Thread-137732] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:29:10.866 [DEBUG] [Thread-137732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:29:10.867 [DEBUG] [Thread-137732] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:29:10.867 [DEBUG] [Thread-137732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:29:10.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:29:10.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:29:10.869 [DEBUG] [Thread-137732] [transport.py] [_log()] userauth is OK
2026-02-11T23:29:10.869 [DEBUG] [Thread-137732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:29:10.870 [DEBUG] [Thread-137732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:29:10.870 [DEBUG] [Thread-137732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:29:10.870 [DEBUG] [Thread-137732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:29:10.894 [INFO] [Thread-137732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:29:10.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:29:11.547 [DEBUG] [Thread-137732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:29:11.548 [DEBUG] [Thread-137732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:29:11.548 [DEBUG] [Thread-137732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:29:11.588 [DEBUG] [Thread-137732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:29:11.589 [DEBUG] [Thread-137732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:29:11.591 [DEBUG] [Thread-137732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:29:11.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:29:11.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:29:11.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:29:11.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:29:11.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:29:11.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:29:11.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:29:11.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:29:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:29:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.894927 -999.00  +14.50  15.60     91  +13.10 1 2 1 3 1     0    0 1.38 2.41 zNESW 13.4 15.6 181.0 20.3 15.5 -17.7 15.4 -17.1 15.2 -16.2 15.6 -17.3
2026-02-11T23:29:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:29:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:29:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.894927
2026-02-11T23:29:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:29:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:29:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:29:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:29:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:29:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:28:28', tmtdew=0.67, humidity=95.93, cloud=0.0, wind=15.88, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:28:41.693', atlas_cloud=2, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:25:00')
2026-02-11T23:29:11.618 [DEBUG] [Thread-137732] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:29:11.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:29:11.721 [DEBUG] [Thread-137735] [transport.py] [_log()] starting thread (client mode): 0xa2d06980
2026-02-11T23:29:11.721 [DEBUG] [Thread-137735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:29:11.736 [DEBUG] [Thread-137735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:29:11.736 [INFO] [Thread-137735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:29:11.743 [DEBUG] [Thread-137735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:29:11.743 [DEBUG] [Thread-137735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:29:11.743 [DEBUG] [Thread-137735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:29:11.743 [DEBUG] [Thread-137735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:11.743 [DEBUG] [Thread-137735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] client lang: <none>
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] server lang: <none>
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] kex follows: False
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] Compression: none
2026-02-11T23:29:11.744 [DEBUG] [Thread-137735] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:29:11.801 [DEBUG] [Thread-137735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:29:11.802 [DEBUG] [Thread-137735] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:29:11.802 [DEBUG] [Thread-137735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:29:11.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:29:11.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:29:11.857 [DEBUG] [Thread-137735] [transport.py] [_log()] userauth is OK
2026-02-11T23:29:11.857 [DEBUG] [Thread-137735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:29:11.857 [DEBUG] [Thread-137735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:29:11.857 [DEBUG] [Thread-137735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:29:11.858 [DEBUG] [Thread-137735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:29:11.878 [INFO] [Thread-137735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:29:11.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:29:11.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:29:12.700 [DEBUG] [Thread-137735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:29:12.700 [DEBUG] [Thread-137735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:29:12.748 [DEBUG] [Thread-137735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:29:12.749 [DEBUG] [Thread-137735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:29:12.758 [DEBUG] [Thread-137735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:29:12.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:29:12.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:29:12.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:29:12.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:29:12.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:29:12.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:29:12.795 [DEBUG] [Thread-137735] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:29:20.674 [DEBUG] [Thread-137737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:29:35.733 [DEBUG] [Thread-137738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:29:42.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:29:42.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:29:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:29:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 29, 5), 0.67, 95.91, 0.0, 18.19, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:29:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:29:05
2026-02-11T23:29:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:29:45.677 [DEBUG] [Thread-137739] [transport.py] [_log()] starting thread (client mode): 0xa57b0460
2026-02-11T23:29:45.677 [DEBUG] [Thread-137739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:29:45.697 [DEBUG] [Thread-137739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:29:45.697 [INFO] [Thread-137739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:29:45.700 [DEBUG] [Thread-137739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:29:45.700 [DEBUG] [Thread-137739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:29:45.700 [DEBUG] [Thread-137739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] client lang: <none>
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] server lang: <none>
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] kex follows: False
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] Compression: none
2026-02-11T23:29:45.701 [DEBUG] [Thread-137739] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:29:45.718 [DEBUG] [Thread-137739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:29:45.719 [DEBUG] [Thread-137739] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:29:45.719 [DEBUG] [Thread-137739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:29:45.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:29:45.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:29:45.721 [DEBUG] [Thread-137739] [transport.py] [_log()] userauth is OK
2026-02-11T23:29:45.722 [DEBUG] [Thread-137739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:29:45.722 [DEBUG] [Thread-137739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:29:45.722 [DEBUG] [Thread-137739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:29:45.722 [DEBUG] [Thread-137739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:29:45.757 [INFO] [Thread-137739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:29:45.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:29:46.378 [DEBUG] [Thread-137739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:29:46.378 [DEBUG] [Thread-137739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:29:46.378 [DEBUG] [Thread-137739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:29:46.419 [DEBUG] [Thread-137739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:29:46.419 [DEBUG] [Thread-137739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:29:46.422 [DEBUG] [Thread-137739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:29:46.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:29:46.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:29:46.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:29:46.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:29:46.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:29:46.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:29:46.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:29:46.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:29:46.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:29:46.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.895275 -999.00  +14.50  15.49     91  +13.10 1 1 1 3 1     0    0 1.38 3.04 ZNESW 14.6 15.5 200.8 23.2 15.5 -17.8 15.4 -17.2 15.2 -16.3 15.5 -17.4
2026-02-11T23:29:46.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:29:46.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:29:46.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.895275
2026-02-11T23:29:46.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:29:46.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:29:46.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:29:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:29:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:29:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:29:05', tmtdew=0.67, humidity=95.91, cloud=0.0, wind=18.19, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:29:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:25:00')
2026-02-11T23:29:46.445 [DEBUG] [Thread-137739] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:29:46.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:29:46.538 [DEBUG] [Thread-137742] [transport.py] [_log()] starting thread (client mode): 0xa57b3220
2026-02-11T23:29:46.539 [DEBUG] [Thread-137742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:29:46.553 [DEBUG] [Thread-137742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:29:46.553 [INFO] [Thread-137742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:29:46.561 [DEBUG] [Thread-137742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:29:46.561 [DEBUG] [Thread-137742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] client lang: <none>
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] server lang: <none>
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] kex follows: False
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:29:46.562 [DEBUG] [Thread-137742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:29:46.563 [DEBUG] [Thread-137742] [transport.py] [_log()] Compression: none
2026-02-11T23:29:46.563 [DEBUG] [Thread-137742] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:29:46.620 [DEBUG] [Thread-137742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:29:46.621 [DEBUG] [Thread-137742] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:29:46.622 [DEBUG] [Thread-137742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:29:46.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:29:46.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:29:46.680 [DEBUG] [Thread-137742] [transport.py] [_log()] userauth is OK
2026-02-11T23:29:46.680 [DEBUG] [Thread-137742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:29:46.680 [DEBUG] [Thread-137742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:29:46.680 [DEBUG] [Thread-137742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:29:46.680 [DEBUG] [Thread-137742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:29:46.699 [INFO] [Thread-137742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:29:46.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:29:46.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:29:47.532 [DEBUG] [Thread-137742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:29:47.532 [DEBUG] [Thread-137742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:29:47.580 [DEBUG] [Thread-137742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:29:47.580 [DEBUG] [Thread-137742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:29:47.589 [DEBUG] [Thread-137742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:29:47.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:29:47.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')
2026-02-11T23:29:47.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:29:47.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:29:47.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:29:47.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:29:47.624 [DEBUG] [Thread-137742] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:29:50.769 [DEBUG] [Thread-137744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:29:51.467 [DEBUG] [Thread-137745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:29:54.493 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:29:54.494 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:05.822 [DEBUG] [Thread-137746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:30:17.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:30:17.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
2026-02-11T23:30:19.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 29, 40), 1.13, 92.85, 0.0, 20.89, 14.61, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:30:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:29:40
2026-02-11T23:30:20.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:30:20.512 [DEBUG] [Thread-137747] [transport.py] [_log()] starting thread (client mode): 0xa2d95210
2026-02-11T23:30:20.512 [DEBUG] [Thread-137747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:30:20.530 [DEBUG] [Thread-137747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:30:20.530 [INFO] [Thread-137747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] client lang: <none>
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] server lang: <none>
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] kex follows: False
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:30:20.534 [DEBUG] [Thread-137747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:30:20.535 [DEBUG] [Thread-137747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:30:20.535 [DEBUG] [Thread-137747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:30:20.535 [DEBUG] [Thread-137747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:30:20.535 [DEBUG] [Thread-137747] [transport.py] [_log()] Compression: none
2026-02-11T23:30:20.535 [DEBUG] [Thread-137747] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:30:20.551 [DEBUG] [Thread-137747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:30:20.551 [DEBUG] [Thread-137747] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:30:20.552 [DEBUG] [Thread-137747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:30:20.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:30:20.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:30:20.553 [DEBUG] [Thread-137747] [transport.py] [_log()] userauth is OK
2026-02-11T23:30:20.554 [DEBUG] [Thread-137747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:30:20.554 [DEBUG] [Thread-137747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:30:20.554 [DEBUG] [Thread-137747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:30:20.554 [DEBUG] [Thread-137747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:30:20.579 [INFO] [Thread-137747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:30:20.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:30:20.853 [DEBUG] [Thread-137749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:21.192 [DEBUG] [Thread-137747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:30:21.192 [DEBUG] [Thread-137747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:30:21.193 [DEBUG] [Thread-137747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:30:21.233 [DEBUG] [Thread-137747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:30:21.233 [DEBUG] [Thread-137747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:30:21.236 [DEBUG] [Thread-137747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:30:21.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:30:21.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:30:21.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:30:21.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:30:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:30:21.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:30:21.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:30:21.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:30:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:30:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.895622 -999.00  +14.50  13.46     91  +13.10 1 1 1 3 1     0    0 1.45 3.61 ZNESW 14.9 13.5 184.8 19.9 15.5 -17.8 15.3 -17.2 15.2 -16.4 15.5 -17.4
2026-02-11T23:30:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:30:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:30:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.895622
2026-02-11T23:30:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:30:21.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:30:21.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:30:21.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:30:21.263 [DEBUG] [Thread-137747] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:30:21.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:30:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:29:40', tmtdew=1.13, humidity=92.85, cloud=0.0, wind=20.89, temperature=14.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:29:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:29:00')
2026-02-11T23:30:21.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:30:21.357 [DEBUG] [Thread-137751] [transport.py] [_log()] starting thread (client mode): 0xa2d5c9a0
2026-02-11T23:30:21.357 [DEBUG] [Thread-137751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:30:21.371 [DEBUG] [Thread-137751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:30:21.371 [INFO] [Thread-137751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] client lang: <none>
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] server lang: <none>
2026-02-11T23:30:21.379 [DEBUG] [Thread-137751] [transport.py] [_log()] kex follows: False
2026-02-11T23:30:21.380 [DEBUG] [Thread-137751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:30:21.380 [DEBUG] [Thread-137751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:30:21.380 [DEBUG] [Thread-137751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:30:21.380 [DEBUG] [Thread-137751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:30:21.380 [DEBUG] [Thread-137751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:30:21.380 [DEBUG] [Thread-137751] [transport.py] [_log()] Compression: none
2026-02-11T23:30:21.380 [DEBUG] [Thread-137751] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:30:21.437 [DEBUG] [Thread-137751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:30:21.438 [DEBUG] [Thread-137751] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:30:21.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:30:21.439 [DEBUG] [Thread-137751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:30:21.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:30:21.493 [DEBUG] [Thread-137751] [transport.py] [_log()] userauth is OK
2026-02-11T23:30:21.494 [DEBUG] [Thread-137751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:30:21.494 [DEBUG] [Thread-137751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:30:21.494 [DEBUG] [Thread-137751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:30:21.494 [DEBUG] [Thread-137751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:30:21.513 [INFO] [Thread-137751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:30:21.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:30:21.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:30:22.334 [DEBUG] [Thread-137751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:30:22.335 [DEBUG] [Thread-137751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:30:22.383 [DEBUG] [Thread-137751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:30:22.383 [DEBUG] [Thread-137751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:30:22.392 [DEBUG] [Thread-137751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:30:22.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:30:22.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:30:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:30:22.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:30:22.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:30:22.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:30:22.429 [DEBUG] [Thread-137751] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:30:35.885 [DEBUG] [Thread-137753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:50.944 [DEBUG] [Thread-137754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:51.538 [DEBUG] [Thread-137755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:30:52.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:30:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:30:54.697 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:54.698 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:30:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 30, 16), 0.67, 95.38, 0.0, 17.89, 14.35, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:30:54.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:30:16
2026-02-11T23:30:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:30:55.275 [DEBUG] [Thread-137756] [transport.py] [_log()] starting thread (client mode): 0xa2d5cc70
2026-02-11T23:30:55.275 [DEBUG] [Thread-137756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:30:55.295 [DEBUG] [Thread-137756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:30:55.295 [INFO] [Thread-137756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:30:55.299 [DEBUG] [Thread-137756] [transport.py] [_log()] client lang: <none>
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] server lang: <none>
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] kex follows: False
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] Compression: none
2026-02-11T23:30:55.300 [DEBUG] [Thread-137756] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:30:55.320 [DEBUG] [Thread-137756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:30:55.320 [DEBUG] [Thread-137756] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:30:55.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:30:55.322 [DEBUG] [Thread-137756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:30:55.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:30:55.364 [DEBUG] [Thread-137756] [transport.py] [_log()] userauth is OK
2026-02-11T23:30:55.364 [DEBUG] [Thread-137756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:30:55.364 [DEBUG] [Thread-137756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:30:55.364 [DEBUG] [Thread-137756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:30:55.365 [DEBUG] [Thread-137756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:30:55.386 [INFO] [Thread-137756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:30:55.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:30:56.028 [DEBUG] [Thread-137756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:30:56.028 [DEBUG] [Thread-137756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:30:56.029 [DEBUG] [Thread-137756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:30:56.068 [DEBUG] [Thread-137756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:30:56.069 [DEBUG] [Thread-137756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:30:56.072 [DEBUG] [Thread-137756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:30:56.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:30:56.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:30:56.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:30:56.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:30:56.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:30:56.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:30:56.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:30:56.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:30:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:30:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.895969 -999.00  +14.50  16.73     91  +13.10 1 1 1 3 1     0    0 1.47 4.15 ZNESW 13.0 16.7 178.6 22.5 15.5 -17.8 15.4 -17.2 15.2 -16.4 15.5 -17.3
2026-02-11T23:30:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:30:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:30:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.895969
2026-02-11T23:30:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:30:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:30:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:30:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:30:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:30:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:30:16', tmtdew=0.67, humidity=95.38, cloud=0.0, wind=17.89, temperature=14.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:30:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:29:00')
2026-02-11T23:30:56.100 [DEBUG] [Thread-137756] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:30:56.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:30:56.197 [DEBUG] [Thread-137759] [transport.py] [_log()] starting thread (client mode): 0xa2d4eb60
2026-02-11T23:30:56.197 [DEBUG] [Thread-137759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:30:56.212 [DEBUG] [Thread-137759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:30:56.212 [INFO] [Thread-137759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:30:56.219 [DEBUG] [Thread-137759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:30:56.220 [DEBUG] [Thread-137759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:30:56.220 [DEBUG] [Thread-137759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:30:56.220 [DEBUG] [Thread-137759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:56.220 [DEBUG] [Thread-137759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:30:56.220 [DEBUG] [Thread-137759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:56.220 [DEBUG] [Thread-137759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:30:56.221 [DEBUG] [Thread-137759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:30:56.221 [DEBUG] [Thread-137759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:30:56.221 [DEBUG] [Thread-137759] [transport.py] [_log()] client lang: <none>
2026-02-11T23:30:56.221 [DEBUG] [Thread-137759] [transport.py] [_log()] server lang: <none>
2026-02-11T23:30:56.221 [DEBUG] [Thread-137759] [transport.py] [_log()] kex follows: False
2026-02-11T23:30:56.221 [DEBUG] [Thread-137759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:30:56.222 [DEBUG] [Thread-137759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:30:56.222 [DEBUG] [Thread-137759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:30:56.222 [DEBUG] [Thread-137759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:30:56.222 [DEBUG] [Thread-137759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:30:56.222 [DEBUG] [Thread-137759] [transport.py] [_log()] Compression: none
2026-02-11T23:30:56.222 [DEBUG] [Thread-137759] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:30:56.279 [DEBUG] [Thread-137759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:30:56.280 [DEBUG] [Thread-137759] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:30:56.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:30:56.281 [DEBUG] [Thread-137759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:30:56.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:30:56.336 [DEBUG] [Thread-137759] [transport.py] [_log()] userauth is OK
2026-02-11T23:30:56.336 [DEBUG] [Thread-137759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:30:56.336 [DEBUG] [Thread-137759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:30:56.337 [DEBUG] [Thread-137759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:30:56.337 [DEBUG] [Thread-137759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:30:56.359 [INFO] [Thread-137759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:30:56.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:30:56.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:30:57.159 [DEBUG] [Thread-137759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:30:57.159 [DEBUG] [Thread-137759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:30:57.207 [DEBUG] [Thread-137759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:30:57.207 [DEBUG] [Thread-137759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:30:57.217 [DEBUG] [Thread-137759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:30:57.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:30:57.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:30:57.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:30:57.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:30:57.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:30:57.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:30:57.259 [DEBUG] [Thread-137759] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:31:05.979 [DEBUG] [Thread-137761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:31:21.030 [DEBUG] [Thread-137762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:31:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:31:27.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:31:27.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:31:29.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 30, 52), 0.67, 95.38, 0.0, 23.13, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:31:29.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:30:52
2026-02-11T23:31:29.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:31:29.841 [DEBUG] [Thread-137763] [transport.py] [_log()] starting thread (client mode): 0xa2d6bd00
2026-02-11T23:31:29.841 [DEBUG] [Thread-137763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:31:29.860 [DEBUG] [Thread-137763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:31:29.861 [INFO] [Thread-137763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] client lang: <none>
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] server lang: <none>
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] kex follows: False
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:31:29.864 [DEBUG] [Thread-137763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:31:29.865 [DEBUG] [Thread-137763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:31:29.865 [DEBUG] [Thread-137763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:31:29.865 [DEBUG] [Thread-137763] [transport.py] [_log()] Compression: none
2026-02-11T23:31:29.865 [DEBUG] [Thread-137763] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:31:29.881 [DEBUG] [Thread-137763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:31:29.881 [DEBUG] [Thread-137763] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:31:29.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:31:29.882 [DEBUG] [Thread-137763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:31:29.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:31:29.884 [DEBUG] [Thread-137763] [transport.py] [_log()] userauth is OK
2026-02-11T23:31:29.885 [DEBUG] [Thread-137763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:31:29.885 [DEBUG] [Thread-137763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:31:29.885 [DEBUG] [Thread-137763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:31:29.885 [DEBUG] [Thread-137763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:31:29.920 [INFO] [Thread-137763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:31:29.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:31:30.528 [DEBUG] [Thread-137763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:31:30.528 [DEBUG] [Thread-137763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:31:30.528 [DEBUG] [Thread-137763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:31:30.569 [DEBUG] [Thread-137763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:31:30.570 [DEBUG] [Thread-137763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:31:30.573 [DEBUG] [Thread-137763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:31:30.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:31:30.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:31:30.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:31:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:31:30.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:31:30.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:31:30.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:31:30.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:31:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:31:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.896663 -999.00  +14.50  13.52     91  +13.10 1 1 1 3 1     0    0 1.46 4.76 ZNESW 14.5 13.5 180.4 18.6 15.5 -17.9 15.3 -17.2 15.2 -16.3 15.5 -17.4
2026-02-11T23:31:30.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:31:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:31:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.896663
2026-02-11T23:31:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:31:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:31:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:31:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:31:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:31:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:30:52', tmtdew=0.67, humidity=95.38, cloud=0.0, wind=23.13, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:31:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:29:00')
2026-02-11T23:31:30.602 [DEBUG] [Thread-137763] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:31:30.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:31:30.697 [DEBUG] [Thread-137766] [transport.py] [_log()] starting thread (client mode): 0x9eb052a0
2026-02-11T23:31:30.697 [DEBUG] [Thread-137766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:31:30.716 [DEBUG] [Thread-137766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:31:30.717 [INFO] [Thread-137766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:31:30.724 [DEBUG] [Thread-137766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] client lang: <none>
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] server lang: <none>
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] kex follows: False
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:31:30.725 [DEBUG] [Thread-137766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:31:30.726 [DEBUG] [Thread-137766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:31:30.726 [DEBUG] [Thread-137766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:31:30.726 [DEBUG] [Thread-137766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:31:30.726 [DEBUG] [Thread-137766] [transport.py] [_log()] Compression: none
2026-02-11T23:31:30.726 [DEBUG] [Thread-137766] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:31:30.784 [DEBUG] [Thread-137766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:31:30.785 [DEBUG] [Thread-137766] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:31:30.786 [DEBUG] [Thread-137766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:31:30.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:31:30.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:31:30.840 [DEBUG] [Thread-137766] [transport.py] [_log()] userauth is OK
2026-02-11T23:31:30.841 [DEBUG] [Thread-137766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:31:30.841 [DEBUG] [Thread-137766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:31:30.841 [DEBUG] [Thread-137766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:31:30.841 [DEBUG] [Thread-137766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:31:30.865 [INFO] [Thread-137766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:31:30.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:31:30.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:31:31.697 [DEBUG] [Thread-137766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:31:31.697 [DEBUG] [Thread-137766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:31:31.745 [DEBUG] [Thread-137766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:31:31.746 [DEBUG] [Thread-137766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:31:31.755 [DEBUG] [Thread-137766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:31:31.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:31:31.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:31:31.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:31:31.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:31:31.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:31:31.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:31:31.791 [DEBUG] [Thread-137766] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:31:36.066 [DEBUG] [Thread-137768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:31:51.127 [DEBUG] [Thread-137769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:31:51.596 [DEBUG] [Thread-137770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:31:54.900 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:31:54.901 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:32:01.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:32:01.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:32:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:32:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 31, 28), 0.67, 95.41, 0.0, 21.26, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:32:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:31:28
2026-02-11T23:32:04.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:32:04.322 [DEBUG] [Thread-137771] [transport.py] [_log()] starting thread (client mode): 0xa2d050f0
2026-02-11T23:32:04.323 [DEBUG] [Thread-137771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:32:04.343 [DEBUG] [Thread-137771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:32:04.343 [INFO] [Thread-137771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] client lang: <none>
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] server lang: <none>
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] kex follows: False
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] Compression: none
2026-02-11T23:32:04.346 [DEBUG] [Thread-137771] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:32:04.365 [DEBUG] [Thread-137771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:32:04.366 [DEBUG] [Thread-137771] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:32:04.366 [DEBUG] [Thread-137771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:32:04.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:32:04.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:32:04.368 [DEBUG] [Thread-137771] [transport.py] [_log()] userauth is OK
2026-02-11T23:32:04.368 [DEBUG] [Thread-137771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:32:04.368 [DEBUG] [Thread-137771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:32:04.369 [DEBUG] [Thread-137771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:32:04.369 [DEBUG] [Thread-137771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:32:04.392 [INFO] [Thread-137771] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:32:04.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:32:05.035 [DEBUG] [Thread-137771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:32:05.035 [DEBUG] [Thread-137771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:32:05.036 [DEBUG] [Thread-137771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:32:05.076 [DEBUG] [Thread-137771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:32:05.076 [DEBUG] [Thread-137771] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:32:05.079 [DEBUG] [Thread-137771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:32:05.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:32:05.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:32:05.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:32:05.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:32:05.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:32:05.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:32:05.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:32:05.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:32:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:32:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.897011 -999.00  +14.40  19.61     91  +13.10 1 2 1 3 1     0    0 1.45 4.72 zNESW 20.1 19.6 184.0 23.9 15.5 -17.8 15.3 -17.4 15.2 -16.3 15.4 -17.4
2026-02-11T23:32:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:32:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:32:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.897011
2026-02-11T23:32:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:32:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:32:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:32:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:32:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:32:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:31:28', tmtdew=0.67, humidity=95.41, cloud=0.0, wind=21.26, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:31:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:29:00')
2026-02-11T23:32:05.103 [DEBUG] [Thread-137771] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:32:05.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:32:05.199 [DEBUG] [Thread-137774] [transport.py] [_log()] starting thread (client mode): 0xa2d6b1f0
2026-02-11T23:32:05.199 [DEBUG] [Thread-137774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:32:05.213 [DEBUG] [Thread-137774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:32:05.213 [INFO] [Thread-137774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] client lang: <none>
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] server lang: <none>
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] kex follows: False
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] Compression: none
2026-02-11T23:32:05.221 [DEBUG] [Thread-137774] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:32:05.277 [DEBUG] [Thread-137774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:32:05.278 [DEBUG] [Thread-137774] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:32:05.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:32:05.279 [DEBUG] [Thread-137774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:32:05.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:32:05.333 [DEBUG] [Thread-137774] [transport.py] [_log()] userauth is OK
2026-02-11T23:32:05.333 [DEBUG] [Thread-137774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:32:05.334 [DEBUG] [Thread-137774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:32:05.334 [DEBUG] [Thread-137774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:32:05.334 [DEBUG] [Thread-137774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:32:05.356 [INFO] [Thread-137774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:32:05.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:32:05.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:32:06.163 [DEBUG] [Thread-137776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:32:06.204 [DEBUG] [Thread-137774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:32:06.205 [DEBUG] [Thread-137774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:32:06.253 [DEBUG] [Thread-137774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:32:06.253 [DEBUG] [Thread-137774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:32:06.262 [DEBUG] [Thread-137774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:32:06.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:32:06.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:32:06.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:32:06.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:32:06.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:32:06.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:32:06.297 [DEBUG] [Thread-137774] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:32:21.210 [DEBUG] [Thread-137777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:32:36.246 [DEBUG] [Thread-137778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:32:36.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:32:36.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:32:36.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:32:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 32, 4), 0.67, 95.39, 0.0, 22.32, 14.32, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:32:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:32:04
2026-02-11T23:32:38.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:32:38.919 [DEBUG] [Thread-137779] [transport.py] [_log()] starting thread (client mode): 0x9eb05990
2026-02-11T23:32:38.919 [DEBUG] [Thread-137779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:32:38.939 [DEBUG] [Thread-137779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:32:38.939 [INFO] [Thread-137779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] client lang: <none>
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] server lang: <none>
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] kex follows: False
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] Compression: none
2026-02-11T23:32:38.942 [DEBUG] [Thread-137779] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:32:38.961 [DEBUG] [Thread-137779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:32:38.961 [DEBUG] [Thread-137779] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:32:38.962 [DEBUG] [Thread-137779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:32:38.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:32:38.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:32:38.964 [DEBUG] [Thread-137779] [transport.py] [_log()] userauth is OK
2026-02-11T23:32:38.964 [DEBUG] [Thread-137779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:32:38.964 [DEBUG] [Thread-137779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:32:38.964 [DEBUG] [Thread-137779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:32:38.964 [DEBUG] [Thread-137779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:32:38.988 [INFO] [Thread-137779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:32:38.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:32:39.645 [DEBUG] [Thread-137779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:32:39.645 [DEBUG] [Thread-137779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:32:39.645 [DEBUG] [Thread-137779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:32:39.686 [DEBUG] [Thread-137779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:32:39.687 [DEBUG] [Thread-137779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:32:39.690 [DEBUG] [Thread-137779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:32:39.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:32:39.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:32:39.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:32:39.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:32:39.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:32:39.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:32:39.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:32:39.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:32:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:32:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.897358 -999.00  +14.40  17.01     91  +13.10 1 2 1 3 1     0    0 1.45 4.73 zNESW 16.8 17.0 175.2 24.8 15.5 -17.8 15.3 -17.1 15.2 -16.3 15.5 -17.4
2026-02-11T23:32:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:32:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:32:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.897358
2026-02-11T23:32:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:32:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:32:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:32:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:32:39.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:32:39.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:32:04', tmtdew=0.67, humidity=95.39, cloud=0.0, wind=22.32, temperature=14.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:32:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[1.4177499999999998, 0.20925000000000082, 0.17625000000000135, 0.6664999999999992, 1.0964999999999998, 1.0452500000000011, 1.0459999999999994, 1.3872499999999999, 1.4154999999999998, 0.06300000000000061, 0.01624999999999943, 0.14599999999999902, 0.254999999999999, 0.1797500000000003, 0.2419999999999991, 0.5799999999999992, 0.22424999999999962, 0.10650000000000048, 0.039499999999998536, 0.05674999999999919, 0.0779999999999994, 0.0642499999999977, 0.02925000000000111, 0.09474999999999945, 0.0909999999999993, 0.05749999999999922, 0.0807500000000001, 0.10449999999999982, 0.15249999999999986, 0.14450000000000074, 0.08500000000000085, 0.11800000000000033, 0.03324999999999889], zp_timestamp='2026-02-11T21:29:00')
2026-02-11T23:32:39.718 [DEBUG] [Thread-137779] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:32:39.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:32:39.817 [DEBUG] [Thread-137782] [transport.py] [_log()] starting thread (client mode): 0xa2d695d0
2026-02-11T23:32:39.817 [DEBUG] [Thread-137782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:32:39.832 [DEBUG] [Thread-137782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:32:39.832 [INFO] [Thread-137782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] client lang: <none>
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] server lang: <none>
2026-02-11T23:32:39.843 [DEBUG] [Thread-137782] [transport.py] [_log()] kex follows: False
2026-02-11T23:32:39.844 [DEBUG] [Thread-137782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:32:39.844 [DEBUG] [Thread-137782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:32:39.844 [DEBUG] [Thread-137782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:32:39.844 [DEBUG] [Thread-137782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:32:39.844 [DEBUG] [Thread-137782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:32:39.844 [DEBUG] [Thread-137782] [transport.py] [_log()] Compression: none
2026-02-11T23:32:39.844 [DEBUG] [Thread-137782] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:32:39.900 [DEBUG] [Thread-137782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:32:39.900 [DEBUG] [Thread-137782] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:32:39.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:32:39.901 [DEBUG] [Thread-137782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:32:39.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:32:39.955 [DEBUG] [Thread-137782] [transport.py] [_log()] userauth is OK
2026-02-11T23:32:39.955 [DEBUG] [Thread-137782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:32:39.955 [DEBUG] [Thread-137782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:32:39.955 [DEBUG] [Thread-137782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:32:39.955 [DEBUG] [Thread-137782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:32:39.976 [INFO] [Thread-137782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:32:39.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:32:39.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:32:40.806 [DEBUG] [Thread-137782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:32:40.806 [DEBUG] [Thread-137782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:32:40.854 [DEBUG] [Thread-137782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:32:40.855 [DEBUG] [Thread-137782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:32:40.864 [DEBUG] [Thread-137782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:32:40.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:32:40.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')
2026-02-11T23:32:40.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
2026-02-11T23:32:40.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:32:40.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:32:40.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:32:40.902 [DEBUG] [Thread-137782] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:32:51.281 [DEBUG] [Thread-137784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:32:51.661 [DEBUG] [Thread-137785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:32:55.110 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:32:55.111 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:33:06.336 [DEBUG] [Thread-137786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:33:10.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:33:10.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:33:10.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:33:12.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 32, 39), 1.14, 92.78, 0.0, 20.32, 14.61, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:33:12.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:32:39
2026-02-11T23:33:13.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:33:13.421 [DEBUG] [Thread-137787] [transport.py] [_log()] starting thread (client mode): 0xa2d4c160
2026-02-11T23:33:13.422 [DEBUG] [Thread-137787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:33:13.442 [DEBUG] [Thread-137787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:33:13.442 [INFO] [Thread-137787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:33:13.445 [DEBUG] [Thread-137787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:33:13.445 [DEBUG] [Thread-137787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:33:13.445 [DEBUG] [Thread-137787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:33:13.445 [DEBUG] [Thread-137787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] client lang: <none>
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] server lang: <none>
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] kex follows: False
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:33:13.446 [DEBUG] [Thread-137787] [transport.py] [_log()] Compression: none
2026-02-11T23:33:13.447 [DEBUG] [Thread-137787] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:33:13.464 [DEBUG] [Thread-137787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:33:13.465 [DEBUG] [Thread-137787] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:33:13.465 [DEBUG] [Thread-137787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:33:13.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:33:13.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:33:13.467 [DEBUG] [Thread-137787] [transport.py] [_log()] userauth is OK
2026-02-11T23:33:13.468 [DEBUG] [Thread-137787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:33:13.468 [DEBUG] [Thread-137787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:33:13.468 [DEBUG] [Thread-137787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:33:13.468 [DEBUG] [Thread-137787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:33:13.485 [INFO] [Thread-137787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:33:13.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:33:14.128 [DEBUG] [Thread-137787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:33:14.128 [DEBUG] [Thread-137787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:33:14.129 [DEBUG] [Thread-137787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:33:14.169 [DEBUG] [Thread-137787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:33:14.169 [DEBUG] [Thread-137787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:33:14.173 [DEBUG] [Thread-137787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:33:14.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:33:14.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:33:14.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:33:14.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:33:14.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:33:14.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:33:14.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:33:14.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:33:14.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:33:14.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.897705 -999.00  +14.40  17.72     91  +13.00 1 1 1 3 1     0    0 1.51 5.49 ZNESW 17.1 17.7 184.2 20.4 15.5 -17.8 15.3 -17.0 15.2 -16.3 15.4 -17.3
2026-02-11T23:33:14.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:33:14.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:33:14.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.897705
2026-02-11T23:33:14.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:33:14.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:33:14.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:33:14.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:33:14.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:33:14.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:32:39', tmtdew=1.14, humidity=92.78, cloud=0.0, wind=20.32, temperature=14.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:32:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.7077499999999999, 0.06225000000000058, 0.07624999999999993, 0.2184999999999988, 1.1755000000000004, 0.9802500000000007, 1.1254999999999997, 1.7492500000000009, 0.6904999999999992, 0.06600000000000072, -0.008750000000000924, 0.08900000000000041, 0.19699999999999918, 0.15224999999999866, 0.16000000000000014, 0.3614999999999995, 0.12924999999999898, 0.10350000000000037, 0.03399999999999892, 0.02824999999999811, 0.08699999999999797, 0.04574999999999818, 0.03125, 0.09074999999999989, 0.10499999999999865, 0.08499999999999908, 0.027749999999999275, 0.05150000000000077, 0.1479999999999997, 0.14150000000000063, 0.0940000000000012, 0.14000000000000057, 0.06974999999999909], zp_timestamp='2026-02-11T21:31:00')
2026-02-11T23:33:14.192 [DEBUG] [Thread-137787] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:33:14.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:33:14.287 [DEBUG] [Thread-137790] [transport.py] [_log()] starting thread (client mode): 0x9eb2a890
2026-02-11T23:33:14.287 [DEBUG] [Thread-137790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:33:14.303 [DEBUG] [Thread-137790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:33:14.303 [INFO] [Thread-137790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:33:14.311 [DEBUG] [Thread-137790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:33:14.311 [DEBUG] [Thread-137790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:33:14.311 [DEBUG] [Thread-137790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:33:14.311 [DEBUG] [Thread-137790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:14.311 [DEBUG] [Thread-137790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:14.311 [DEBUG] [Thread-137790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:14.311 [DEBUG] [Thread-137790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] client lang: <none>
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] server lang: <none>
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] kex follows: False
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:33:14.312 [DEBUG] [Thread-137790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:33:14.313 [DEBUG] [Thread-137790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:33:14.313 [DEBUG] [Thread-137790] [transport.py] [_log()] Compression: none
2026-02-11T23:33:14.313 [DEBUG] [Thread-137790] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:33:14.369 [DEBUG] [Thread-137790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:33:14.370 [DEBUG] [Thread-137790] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:33:14.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:33:14.371 [DEBUG] [Thread-137790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:33:14.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:33:14.425 [DEBUG] [Thread-137790] [transport.py] [_log()] userauth is OK
2026-02-11T23:33:14.425 [DEBUG] [Thread-137790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:33:14.426 [DEBUG] [Thread-137790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:33:14.426 [DEBUG] [Thread-137790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:33:14.426 [DEBUG] [Thread-137790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:33:14.446 [INFO] [Thread-137790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:33:14.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:33:14.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:33:15.294 [DEBUG] [Thread-137790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:33:15.294 [DEBUG] [Thread-137790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:33:15.343 [DEBUG] [Thread-137790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:33:15.343 [DEBUG] [Thread-137790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:33:15.352 [DEBUG] [Thread-137790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:33:15.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:33: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')
2026-02-11T23:33:15.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:33:15.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:33:15.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:33:15.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:33:15.389 [DEBUG] [Thread-137790] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:33:21.372 [DEBUG] [Thread-137792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:33:36.423 [DEBUG] [Thread-137793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:33:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:33:45.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:33:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:33:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 33, 14), 0.73, 95.34, 0.0, 20.4, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:33:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:33:14
2026-02-11T23:33:47.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:33:47.838 [DEBUG] [Thread-137794] [transport.py] [_log()] starting thread (client mode): 0xa57e21a0
2026-02-11T23:33:47.838 [DEBUG] [Thread-137794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:33:47.859 [DEBUG] [Thread-137794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:33:47.860 [INFO] [Thread-137794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:33:47.863 [DEBUG] [Thread-137794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:33:47.863 [DEBUG] [Thread-137794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:33:47.863 [DEBUG] [Thread-137794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] client lang: <none>
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] server lang: <none>
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] kex follows: False
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] Compression: none
2026-02-11T23:33:47.864 [DEBUG] [Thread-137794] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:33:47.884 [DEBUG] [Thread-137794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:33:47.885 [DEBUG] [Thread-137794] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:33:47.885 [DEBUG] [Thread-137794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:33:47.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:33:47.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:33:47.888 [DEBUG] [Thread-137794] [transport.py] [_log()] userauth is OK
2026-02-11T23:33:47.888 [DEBUG] [Thread-137794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:33:47.888 [DEBUG] [Thread-137794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:33:47.888 [DEBUG] [Thread-137794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:33:47.888 [DEBUG] [Thread-137794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:33:47.915 [INFO] [Thread-137794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:33:47.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:33:48.555 [DEBUG] [Thread-137794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:33:48.556 [DEBUG] [Thread-137794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:33:48.556 [DEBUG] [Thread-137794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:33:48.597 [DEBUG] [Thread-137794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:33:48.597 [DEBUG] [Thread-137794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:33:48.600 [DEBUG] [Thread-137794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:33:48.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:33:48.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:33:48.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:33:48.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:33:48.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:33:48.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:33:48.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:33:48.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:33:48.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:33:48.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.898052 -999.00  +14.40  13.80     91  +13.00 1 1 1 3 1     0    0 1.54 6.10 ZNESW 14.8 13.8 185.0 20.9 15.5 -17.8 15.3 -17.3 15.2 -16.2 15.5 -17.5
2026-02-11T23:33:48.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:33:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:33:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.898052
2026-02-11T23:33:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:33:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:33:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:33:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:33:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:33:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:33:14', tmtdew=0.73, humidity=95.34, cloud=0.0, wind=20.4, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:33:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.7077499999999999, 0.06225000000000058, 0.07624999999999993, 0.2184999999999988, 1.1755000000000004, 0.9802500000000007, 1.1254999999999997, 1.7492500000000009, 0.6904999999999992, 0.06600000000000072, -0.008750000000000924, 0.08900000000000041, 0.19699999999999918, 0.15224999999999866, 0.16000000000000014, 0.3614999999999995, 0.12924999999999898, 0.10350000000000037, 0.03399999999999892, 0.02824999999999811, 0.08699999999999797, 0.04574999999999818, 0.03125, 0.09074999999999989, 0.10499999999999865, 0.08499999999999908, 0.027749999999999275, 0.05150000000000077, 0.1479999999999997, 0.14150000000000063, 0.0940000000000012, 0.14000000000000057, 0.06974999999999909], zp_timestamp='2026-02-11T21:31:00')
2026-02-11T23:33:48.627 [DEBUG] [Thread-137794] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:33:48.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:33:48.721 [DEBUG] [Thread-137797] [transport.py] [_log()] starting thread (client mode): 0x9eb04ca0
2026-02-11T23:33:48.721 [DEBUG] [Thread-137797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:33:48.735 [DEBUG] [Thread-137797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:33:48.736 [INFO] [Thread-137797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:33:48.743 [DEBUG] [Thread-137797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] client lang: <none>
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] server lang: <none>
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] kex follows: False
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] Compression: none
2026-02-11T23:33:48.744 [DEBUG] [Thread-137797] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:33:48.802 [DEBUG] [Thread-137797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:33:48.802 [DEBUG] [Thread-137797] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:33:48.803 [DEBUG] [Thread-137797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:33:48.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:33:48.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:33:48.866 [DEBUG] [Thread-137797] [transport.py] [_log()] userauth is OK
2026-02-11T23:33:48.866 [DEBUG] [Thread-137797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:33:48.867 [DEBUG] [Thread-137797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:33:48.867 [DEBUG] [Thread-137797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:33:48.867 [DEBUG] [Thread-137797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:33:48.886 [INFO] [Thread-137797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:33:48.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:33:48.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:33:49.715 [DEBUG] [Thread-137797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:33:49.715 [DEBUG] [Thread-137797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:33:49.762 [DEBUG] [Thread-137797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:33:49.762 [DEBUG] [Thread-137797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:33:49.772 [DEBUG] [Thread-137797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:33:49.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:33:49.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')
2026-02-11T23:33:49.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:33:49.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:33:49.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:33:49.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:33:49.809 [DEBUG] [Thread-137797] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:33:51.459 [DEBUG] [Thread-137799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:33:51.747 [DEBUG] [Thread-137800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:33:55.315 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:33:55.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:06.509 [DEBUG] [Thread-137801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:34:19.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:34:19.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:34:21.547 [DEBUG] [Thread-137802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:21.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 33, 51), 0.73, 95.36, 0.0, 18.63, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:34:21.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:33:51
2026-02-11T23:34:22.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:34:22.328 [DEBUG] [Thread-137803] [transport.py] [_log()] starting thread (client mode): 0xa57b1630
2026-02-11T23:34:22.329 [DEBUG] [Thread-137803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:34:22.348 [DEBUG] [Thread-137803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:34:22.348 [INFO] [Thread-137803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:22.351 [DEBUG] [Thread-137803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] client lang: <none>
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] server lang: <none>
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] kex follows: False
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] Compression: none
2026-02-11T23:34:22.352 [DEBUG] [Thread-137803] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:34:22.369 [DEBUG] [Thread-137803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:34:22.370 [DEBUG] [Thread-137803] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:34:22.370 [DEBUG] [Thread-137803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:34:22.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:34:22.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:34:22.372 [DEBUG] [Thread-137803] [transport.py] [_log()] userauth is OK
2026-02-11T23:34:22.372 [DEBUG] [Thread-137803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:34:22.373 [DEBUG] [Thread-137803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:34:22.373 [DEBUG] [Thread-137803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:34:22.373 [DEBUG] [Thread-137803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:34:22.410 [INFO] [Thread-137803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:34:22.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:34:23.064 [DEBUG] [Thread-137803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:34:23.064 [DEBUG] [Thread-137803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:34:23.064 [DEBUG] [Thread-137803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:34:23.105 [DEBUG] [Thread-137803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:34:23.105 [DEBUG] [Thread-137803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:34:23.108 [DEBUG] [Thread-137803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:34:23.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:34:23.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:34:23.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:34:23.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:34:23.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:34:23.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:34:23.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:34:23.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:34:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:34:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.898399 -999.00  +14.40  17.68     91  +13.00 1 1 1 3 1     0    0 1.52 6.55 ZNESW 16.4 17.7 183.7 22.8 15.5 -17.7 15.2 -17.1 15.1 -16.2 15.4 -17.1
2026-02-11T23:34:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:34:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:34:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.898399
2026-02-11T23:34:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:34:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:34:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:34:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:34:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:34:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:33:51', tmtdew=0.73, humidity=95.36, cloud=0.0, wind=18.63, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:33:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.7077499999999999, 0.06225000000000058, 0.07624999999999993, 0.2184999999999988, 1.1755000000000004, 0.9802500000000007, 1.1254999999999997, 1.7492500000000009, 0.6904999999999992, 0.06600000000000072, -0.008750000000000924, 0.08900000000000041, 0.19699999999999918, 0.15224999999999866, 0.16000000000000014, 0.3614999999999995, 0.12924999999999898, 0.10350000000000037, 0.03399999999999892, 0.02824999999999811, 0.08699999999999797, 0.04574999999999818, 0.03125, 0.09074999999999989, 0.10499999999999865, 0.08499999999999908, 0.027749999999999275, 0.05150000000000077, 0.1479999999999997, 0.14150000000000063, 0.0940000000000012, 0.14000000000000057, 0.06974999999999909], zp_timestamp='2026-02-11T21:31:00')
2026-02-11T23:34:23.131 [DEBUG] [Thread-137803] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:34:23.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:34:23.228 [DEBUG] [Thread-137806] [transport.py] [_log()] starting thread (client mode): 0xa2d5dbd0
2026-02-11T23:34:23.229 [DEBUG] [Thread-137806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:34:23.243 [DEBUG] [Thread-137806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:34:23.243 [INFO] [Thread-137806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:34:23.251 [DEBUG] [Thread-137806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:34:23.251 [DEBUG] [Thread-137806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:34:23.251 [DEBUG] [Thread-137806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] client lang: <none>
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] server lang: <none>
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] kex follows: False
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] Compression: none
2026-02-11T23:34:23.252 [DEBUG] [Thread-137806] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:34:23.313 [DEBUG] [Thread-137806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:34:23.313 [DEBUG] [Thread-137806] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:34:23.314 [DEBUG] [Thread-137806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:34:23.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:34:23.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:34:23.371 [DEBUG] [Thread-137806] [transport.py] [_log()] userauth is OK
2026-02-11T23:34:23.371 [DEBUG] [Thread-137806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:34:23.372 [DEBUG] [Thread-137806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:34:23.372 [DEBUG] [Thread-137806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:34:23.372 [DEBUG] [Thread-137806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:34:23.389 [INFO] [Thread-137806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:34:23.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:34:23.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:34:24.207 [DEBUG] [Thread-137806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:34:24.207 [DEBUG] [Thread-137806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:34:24.255 [DEBUG] [Thread-137806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:34:24.256 [DEBUG] [Thread-137806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:34:24.265 [DEBUG] [Thread-137806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:34:24.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:34:24.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:34:24.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
2026-02-11T23:34:24.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:34:24.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:34:24.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:34:24.302 [DEBUG] [Thread-137806] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:34:36.582 [DEBUG] [Thread-137808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:51.634 [DEBUG] [Thread-137809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:51.829 [DEBUG] [Thread-137810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:54.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:34:54.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:34:54.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:34:55.518 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:55.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:34:56.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 34, 26), 0.73, 95.34, 0.0, 19.34, 14.35, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:34:56.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:34:26
2026-02-11T23:34:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:34:57.530 [DEBUG] [Thread-137811] [transport.py] [_log()] starting thread (client mode): 0xa2d9f610
2026-02-11T23:34:57.530 [DEBUG] [Thread-137811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:34:57.553 [DEBUG] [Thread-137811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:34:57.553 [INFO] [Thread-137811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:34:57.557 [DEBUG] [Thread-137811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:34:57.557 [DEBUG] [Thread-137811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:34:57.557 [DEBUG] [Thread-137811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:34:57.557 [DEBUG] [Thread-137811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:57.557 [DEBUG] [Thread-137811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:57.557 [DEBUG] [Thread-137811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] client lang: <none>
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] server lang: <none>
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] kex follows: False
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:34:57.558 [DEBUG] [Thread-137811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:34:57.559 [DEBUG] [Thread-137811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:34:57.559 [DEBUG] [Thread-137811] [transport.py] [_log()] Compression: none
2026-02-11T23:34:57.559 [DEBUG] [Thread-137811] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:34:57.580 [DEBUG] [Thread-137811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:34:57.580 [DEBUG] [Thread-137811] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:34:57.581 [DEBUG] [Thread-137811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:34:57.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:34:57.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:34:57.583 [DEBUG] [Thread-137811] [transport.py] [_log()] userauth is OK
2026-02-11T23:34:57.583 [DEBUG] [Thread-137811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:34:57.583 [DEBUG] [Thread-137811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:34:57.584 [DEBUG] [Thread-137811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:34:57.584 [DEBUG] [Thread-137811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:34:57.621 [INFO] [Thread-137811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:34:57.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:34:58.276 [DEBUG] [Thread-137811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:34:58.276 [DEBUG] [Thread-137811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:34:58.277 [DEBUG] [Thread-137811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:34:58.317 [DEBUG] [Thread-137811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:34:58.318 [DEBUG] [Thread-137811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:34:58.321 [DEBUG] [Thread-137811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:34:58.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:34:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:34:58.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:34:58.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:34:58.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:34:58.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:34:58.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:34:58.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:34:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:34:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.899094 -999.00  +14.40  19.04     91  +13.00 1 1 1 3 1     0    0 1.54 7.15 ZNESW 19.6 19.0 176.2 23.8 15.5 -17.7 15.3 -17.2 15.1 -16.2 15.4 -17.3
2026-02-11T23:34:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:34:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:34:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.899094
2026-02-11T23:34:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:34:58.354 [DEBUG] [Thread-137811] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:34:58.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:34:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:34:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:34:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:34:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:34:26', tmtdew=0.73, humidity=95.34, cloud=0.0, wind=19.34, temperature=14.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:34:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.7077499999999999, 0.06225000000000058, 0.07624999999999993, 0.2184999999999988, 1.1755000000000004, 0.9802500000000007, 1.1254999999999997, 1.7492500000000009, 0.6904999999999992, 0.06600000000000072, -0.008750000000000924, 0.08900000000000041, 0.19699999999999918, 0.15224999999999866, 0.16000000000000014, 0.3614999999999995, 0.12924999999999898, 0.10350000000000037, 0.03399999999999892, 0.02824999999999811, 0.08699999999999797, 0.04574999999999818, 0.03125, 0.09074999999999989, 0.10499999999999865, 0.08499999999999908, 0.027749999999999275, 0.05150000000000077, 0.1479999999999997, 0.14150000000000063, 0.0940000000000012, 0.14000000000000057, 0.06974999999999909], zp_timestamp='2026-02-11T21:31:00')
2026-02-11T23:34:58.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:34:58.454 [DEBUG] [Thread-137814] [transport.py] [_log()] starting thread (client mode): 0xa2d4e890
2026-02-11T23:34:58.454 [DEBUG] [Thread-137814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:34:58.468 [DEBUG] [Thread-137814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:34:58.468 [INFO] [Thread-137814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] client lang: <none>
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] server lang: <none>
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] kex follows: False
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] Compression: none
2026-02-11T23:34:58.476 [DEBUG] [Thread-137814] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:34:58.536 [DEBUG] [Thread-137814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:34:58.537 [DEBUG] [Thread-137814] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:34:58.538 [DEBUG] [Thread-137814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:34:58.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:34:58.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:34:58.597 [DEBUG] [Thread-137814] [transport.py] [_log()] userauth is OK
2026-02-11T23:34:58.597 [DEBUG] [Thread-137814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:34:58.598 [DEBUG] [Thread-137814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:34:58.598 [DEBUG] [Thread-137814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:34:58.598 [DEBUG] [Thread-137814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:34:58.617 [INFO] [Thread-137814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:34:58.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:34:58.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:34:59.434 [DEBUG] [Thread-137814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:34:59.444 [DEBUG] [Thread-137814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:34:59.484 [DEBUG] [Thread-137814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:34:59.484 [DEBUG] [Thread-137814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:34:59.493 [DEBUG] [Thread-137814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:34:59.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:34:59.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:34: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') -> 00000000
2026-02-11T23:34:59.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:34:59.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:34:59.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:34:59.531 [DEBUG] [Thread-137814] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:35:06.675 [DEBUG] [Thread-137816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:35:21.724 [DEBUG] [Thread-137817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:35:29.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:35:29.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:35:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:35:31.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 35, 1), 0.73, 95.36, 0.0, 18.88, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:35:31.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:35:01
2026-02-11T23:35:31.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:35:31.966 [DEBUG] [Thread-137818] [transport.py] [_log()] starting thread (client mode): 0xa2d9fe50
2026-02-11T23:35:31.967 [DEBUG] [Thread-137818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:35:31.986 [DEBUG] [Thread-137818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:35:31.987 [INFO] [Thread-137818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:35:31.990 [DEBUG] [Thread-137818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:35:31.990 [DEBUG] [Thread-137818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:35:31.990 [DEBUG] [Thread-137818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:35:31.990 [DEBUG] [Thread-137818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:35:31.990 [DEBUG] [Thread-137818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] client lang: <none>
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] server lang: <none>
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] kex follows: False
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] Compression: none
2026-02-11T23:35:31.991 [DEBUG] [Thread-137818] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:35:32.008 [DEBUG] [Thread-137818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:35:32.009 [DEBUG] [Thread-137818] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:35:32.009 [DEBUG] [Thread-137818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:35:32.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:35:32.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:35:32.011 [DEBUG] [Thread-137818] [transport.py] [_log()] userauth is OK
2026-02-11T23:35:32.012 [DEBUG] [Thread-137818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:35:32.012 [DEBUG] [Thread-137818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:35:32.012 [DEBUG] [Thread-137818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:35:32.012 [DEBUG] [Thread-137818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:35:32.037 [INFO] [Thread-137818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:35:32.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:35:32.668 [DEBUG] [Thread-137818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:35:32.668 [DEBUG] [Thread-137818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:35:32.668 [DEBUG] [Thread-137818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:35:32.709 [DEBUG] [Thread-137818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:35:32.710 [DEBUG] [Thread-137818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:35:32.713 [DEBUG] [Thread-137818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:35:32.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:35:32.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:35:32.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:35:32.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:35:32.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:35:32.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:35:32.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:35:32.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:35:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:35:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.899441 -999.00  +14.40  18.34     91  +13.00 1 1 1 3 1     0    0 1.53 7.28 ZNESW 18.8 18.3 173.8 24.2 15.4 -17.7 15.2 -17.1 15.2 -16.1 15.4 -17.2
2026-02-11T23:35:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:35:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:35:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.899441
2026-02-11T23:35:32.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:35:32.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:35:32.739 [DEBUG] [Thread-137818] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:35:32.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:35:32.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:35:32.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:35:32.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:35:01', tmtdew=0.73, humidity=95.36, cloud=0.0, wind=18.88, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:35:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.7077499999999999, 0.06225000000000058, 0.07624999999999993, 0.2184999999999988, 1.1755000000000004, 0.9802500000000007, 1.1254999999999997, 1.7492500000000009, 0.6904999999999992, 0.06600000000000072, -0.008750000000000924, 0.08900000000000041, 0.19699999999999918, 0.15224999999999866, 0.16000000000000014, 0.3614999999999995, 0.12924999999999898, 0.10350000000000037, 0.03399999999999892, 0.02824999999999811, 0.08699999999999797, 0.04574999999999818, 0.03125, 0.09074999999999989, 0.10499999999999865, 0.08499999999999908, 0.027749999999999275, 0.05150000000000077, 0.1479999999999997, 0.14150000000000063, 0.0940000000000012, 0.14000000000000057, 0.06974999999999909], zp_timestamp='2026-02-11T21:31:00')
2026-02-11T23:35:32.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:35:32.827 [DEBUG] [Thread-137821] [transport.py] [_log()] starting thread (client mode): 0x9eb06740
2026-02-11T23:35:32.828 [DEBUG] [Thread-137821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:35:32.842 [DEBUG] [Thread-137821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:35:32.842 [INFO] [Thread-137821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:35:32.849 [DEBUG] [Thread-137821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:35:32.850 [DEBUG] [Thread-137821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] client lang: <none>
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] server lang: <none>
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] kex follows: False
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:35:32.851 [DEBUG] [Thread-137821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:35:32.852 [DEBUG] [Thread-137821] [transport.py] [_log()] Compression: none
2026-02-11T23:35:32.852 [DEBUG] [Thread-137821] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:35:32.908 [DEBUG] [Thread-137821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:35:32.909 [DEBUG] [Thread-137821] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:35:32.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:35:32.911 [DEBUG] [Thread-137821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:35:32.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:35:32.965 [DEBUG] [Thread-137821] [transport.py] [_log()] userauth is OK
2026-02-11T23:35:32.965 [DEBUG] [Thread-137821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:35:32.965 [DEBUG] [Thread-137821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:35:32.965 [DEBUG] [Thread-137821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:35:32.965 [DEBUG] [Thread-137821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:35:32.987 [INFO] [Thread-137821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:35:32.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:35:32.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:35:33.802 [DEBUG] [Thread-137821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:35:33.802 [DEBUG] [Thread-137821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:35:33.851 [DEBUG] [Thread-137821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:35:33.851 [DEBUG] [Thread-137821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:35:33.860 [DEBUG] [Thread-137821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:35:33.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:35:33.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:35:33.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:35:33.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:35:33.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:35:33.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:35:33.895 [DEBUG] [Thread-137821] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:35:36.761 [DEBUG] [Thread-137823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:35:51.815 [DEBUG] [Thread-137824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:35:51.910 [DEBUG] [Thread-137825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:35:55.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:35:55.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:36:03.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:36:03.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:36:03.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
2026-02-11T23:36:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 35, 38), 1.16, 92.69, 0.0, 22.27, 14.61, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:36:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:35:38
2026-02-11T23:36:06.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:36:06.332 [DEBUG] [Thread-137826] [transport.py] [_log()] starting thread (client mode): 0xa2d9fd60
2026-02-11T23:36:06.332 [DEBUG] [Thread-137826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:36:06.352 [DEBUG] [Thread-137826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:36:06.352 [INFO] [Thread-137826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] client lang: <none>
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] server lang: <none>
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] kex follows: False
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:36:06.355 [DEBUG] [Thread-137826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:36:06.356 [DEBUG] [Thread-137826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:36:06.356 [DEBUG] [Thread-137826] [transport.py] [_log()] Compression: none
2026-02-11T23:36:06.356 [DEBUG] [Thread-137826] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:36:06.368 [DEBUG] [Thread-137826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:36:06.369 [DEBUG] [Thread-137826] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:36:06.369 [DEBUG] [Thread-137826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:36:06.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:36:06.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:36:06.369 [DEBUG] [Thread-137826] [transport.py] [_log()] userauth is OK
2026-02-11T23:36:06.369 [DEBUG] [Thread-137826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:36:06.369 [DEBUG] [Thread-137826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:36:06.369 [DEBUG] [Thread-137826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:36:06.369 [DEBUG] [Thread-137826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:36:06.378 [INFO] [Thread-137826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:36:06.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:36:06.855 [DEBUG] [Thread-137828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:36:06.985 [DEBUG] [Thread-137826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:36:06.985 [DEBUG] [Thread-137826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:36:06.985 [DEBUG] [Thread-137826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:36:07.027 [DEBUG] [Thread-137826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:36:07.027 [DEBUG] [Thread-137826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:36:07.030 [DEBUG] [Thread-137826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:36:07.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:36:07.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:36:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:36:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:36:07.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:36:07.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:36:07.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:36:07.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:36:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:36:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.899788 -999.00  +14.40  14.87     91  +13.00 1 1 1 3 1     0    0 1.55 7.08 ZNESW 17.3 14.9 159.4 22.8 15.4 -17.6 15.2 -16.8 15.2 -16.2 15.4 -17.1
2026-02-11T23:36:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:36:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:36:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.899788
2026-02-11T23:36:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:36:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:36:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:36:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:36:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:36:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:35:38', tmtdew=1.16, humidity=92.69, cloud=0.0, wind=22.27, temperature=14.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:35:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.7077499999999999, 0.06225000000000058, 0.07624999999999993, 0.2184999999999988, 1.1755000000000004, 0.9802500000000007, 1.1254999999999997, 1.7492500000000009, 0.6904999999999992, 0.06600000000000072, -0.008750000000000924, 0.08900000000000041, 0.19699999999999918, 0.15224999999999866, 0.16000000000000014, 0.3614999999999995, 0.12924999999999898, 0.10350000000000037, 0.03399999999999892, 0.02824999999999811, 0.08699999999999797, 0.04574999999999818, 0.03125, 0.09074999999999989, 0.10499999999999865, 0.08499999999999908, 0.027749999999999275, 0.05150000000000077, 0.1479999999999997, 0.14150000000000063, 0.0940000000000012, 0.14000000000000057, 0.06974999999999909], zp_timestamp='2026-02-11T21:31:00')
2026-02-11T23:36:07.058 [DEBUG] [Thread-137826] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:36:07.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:36:07.151 [DEBUG] [Thread-137830] [transport.py] [_log()] starting thread (client mode): 0xa2d9eec0
2026-02-11T23:36:07.151 [DEBUG] [Thread-137830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:36:07.166 [DEBUG] [Thread-137830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:36:07.167 [INFO] [Thread-137830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] client lang: <none>
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] server lang: <none>
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] kex follows: False
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:36:07.176 [DEBUG] [Thread-137830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:36:07.177 [DEBUG] [Thread-137830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:36:07.177 [DEBUG] [Thread-137830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:36:07.177 [DEBUG] [Thread-137830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:36:07.177 [DEBUG] [Thread-137830] [transport.py] [_log()] Compression: none
2026-02-11T23:36:07.177 [DEBUG] [Thread-137830] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:36:07.242 [DEBUG] [Thread-137830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:36:07.242 [DEBUG] [Thread-137830] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:36:07.243 [DEBUG] [Thread-137830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:36:07.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:36:07.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:36:07.298 [DEBUG] [Thread-137830] [transport.py] [_log()] userauth is OK
2026-02-11T23:36:07.299 [DEBUG] [Thread-137830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:36:07.299 [DEBUG] [Thread-137830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:36:07.299 [DEBUG] [Thread-137830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:36:07.299 [DEBUG] [Thread-137830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:36:07.318 [INFO] [Thread-137830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:36:07.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:36:07.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:36:08.147 [DEBUG] [Thread-137830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:36:08.148 [DEBUG] [Thread-137830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:36:08.155 [DEBUG] [Thread-137830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:36:08.157 [DEBUG] [Thread-137830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:36:08.166 [DEBUG] [Thread-137830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:36:08.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:36:08.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:36:08.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:36:08.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:36:08.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:36:08.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:36:08.200 [DEBUG] [Thread-137830] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:36:21.890 [DEBUG] [Thread-137832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:36:36.939 [DEBUG] [Thread-137833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:36:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:36:38.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:36:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:36:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 36, 13), 0.73, 95.31, 0.0, 18.12, 14.32, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:36:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:36:13
2026-02-11T23:36:40.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:36:40.894 [DEBUG] [Thread-137834] [transport.py] [_log()] starting thread (client mode): 0xa2d94c70
2026-02-11T23:36:40.895 [DEBUG] [Thread-137834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:36:40.915 [DEBUG] [Thread-137834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:36:40.915 [INFO] [Thread-137834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:36:40.918 [DEBUG] [Thread-137834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:36:40.918 [DEBUG] [Thread-137834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:36:40.918 [DEBUG] [Thread-137834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:36:40.918 [DEBUG] [Thread-137834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:40.918 [DEBUG] [Thread-137834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:40.918 [DEBUG] [Thread-137834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:40.918 [DEBUG] [Thread-137834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] client lang: <none>
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] server lang: <none>
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] kex follows: False
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] Compression: none
2026-02-11T23:36:40.919 [DEBUG] [Thread-137834] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:36:40.938 [DEBUG] [Thread-137834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:36:40.939 [DEBUG] [Thread-137834] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:36:40.939 [DEBUG] [Thread-137834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:36:40.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:36:40.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:36:40.941 [DEBUG] [Thread-137834] [transport.py] [_log()] userauth is OK
2026-02-11T23:36:40.942 [DEBUG] [Thread-137834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:36:40.942 [DEBUG] [Thread-137834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:36:40.942 [DEBUG] [Thread-137834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:36:40.942 [DEBUG] [Thread-137834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:36:40.979 [INFO] [Thread-137834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:36:40.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:36:41.632 [DEBUG] [Thread-137834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:36:41.633 [DEBUG] [Thread-137834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:36:41.633 [DEBUG] [Thread-137834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:36:41.673 [DEBUG] [Thread-137834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:36:41.674 [DEBUG] [Thread-137834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:36:41.677 [DEBUG] [Thread-137834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:36:41.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:36:41.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:36:41.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:36:41.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:36:41.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:36:41.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:36:41.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:36:41.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:36:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:36:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.900136 -999.00  +14.40  18.46     91  +13.00 1 1 1 3 1     0    0 1.55 6.89 ZNESW 18.6 18.5 174.2 21.8 15.5 -17.8 15.2 -16.9 15.1 -16.2 15.4 -17.2
2026-02-11T23:36:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:36:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:36:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.900136
2026-02-11T23:36:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:36:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:36:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:36:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:36:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:36:41.704 [DEBUG] [Thread-137834] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:36:41.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:36:13', tmtdew=0.73, humidity=95.31, cloud=0.0, wind=18.12, temperature=14.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:36:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:35:00')
2026-02-11T23:36:41.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:36:41.800 [DEBUG] [Thread-137837] [transport.py] [_log()] starting thread (client mode): 0xa2d97d30
2026-02-11T23:36:41.800 [DEBUG] [Thread-137837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:36:41.814 [DEBUG] [Thread-137837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:36:41.815 [INFO] [Thread-137837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:36:41.822 [DEBUG] [Thread-137837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] client lang: <none>
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] server lang: <none>
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] kex follows: False
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:36:41.823 [DEBUG] [Thread-137837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:36:41.824 [DEBUG] [Thread-137837] [transport.py] [_log()] Compression: none
2026-02-11T23:36:41.824 [DEBUG] [Thread-137837] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:36:41.883 [DEBUG] [Thread-137837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:36:41.883 [DEBUG] [Thread-137837] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:36:41.884 [DEBUG] [Thread-137837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:36:41.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:36:41.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:36:41.939 [DEBUG] [Thread-137837] [transport.py] [_log()] userauth is OK
2026-02-11T23:36:41.940 [DEBUG] [Thread-137837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:36:41.940 [DEBUG] [Thread-137837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:36:41.940 [DEBUG] [Thread-137837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:36:41.940 [DEBUG] [Thread-137837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:36:41.963 [INFO] [Thread-137837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:36:41.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:36:41.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:36:42.786 [DEBUG] [Thread-137837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:36:42.786 [DEBUG] [Thread-137837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:36:42.833 [DEBUG] [Thread-137837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:36:42.834 [DEBUG] [Thread-137837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:36:42.843 [DEBUG] [Thread-137837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:36:42.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:36:42.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:36:42.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:36:42.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:36:42.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:36:42.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:36:42.878 [DEBUG] [Thread-137837] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:36:51.974 [DEBUG] [Thread-137839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:36:51.983 [DEBUG] [Thread-137840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:36:55.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:36:55.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:37:07.026 [DEBUG] [Thread-137841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:37:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:37:12.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:37:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:37:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 36, 48), 0.79, 95.29, 0.0, 18.99, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:37:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:36:48
2026-02-11T23:37:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:37:15.353 [DEBUG] [Thread-137842] [transport.py] [_log()] starting thread (client mode): 0xa2d97d90
2026-02-11T23:37:15.353 [DEBUG] [Thread-137842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:37:15.372 [DEBUG] [Thread-137842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:37:15.373 [INFO] [Thread-137842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] client lang: <none>
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] server lang: <none>
2026-02-11T23:37:15.376 [DEBUG] [Thread-137842] [transport.py] [_log()] kex follows: False
2026-02-11T23:37:15.377 [DEBUG] [Thread-137842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:37:15.377 [DEBUG] [Thread-137842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:37:15.377 [DEBUG] [Thread-137842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:37:15.377 [DEBUG] [Thread-137842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:37:15.377 [DEBUG] [Thread-137842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:37:15.377 [DEBUG] [Thread-137842] [transport.py] [_log()] Compression: none
2026-02-11T23:37:15.377 [DEBUG] [Thread-137842] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:37:15.390 [DEBUG] [Thread-137842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:37:15.390 [DEBUG] [Thread-137842] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:37:15.391 [DEBUG] [Thread-137842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:37:15.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:37:15.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:37:15.394 [DEBUG] [Thread-137842] [transport.py] [_log()] userauth is OK
2026-02-11T23:37:15.394 [DEBUG] [Thread-137842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:37:15.394 [DEBUG] [Thread-137842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:37:15.394 [DEBUG] [Thread-137842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:37:15.394 [DEBUG] [Thread-137842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:37:15.409 [INFO] [Thread-137842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:37:15.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:37:16.012 [DEBUG] [Thread-137842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:37:16.013 [DEBUG] [Thread-137842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:37:16.013 [DEBUG] [Thread-137842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:37:16.053 [DEBUG] [Thread-137842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:37:16.054 [DEBUG] [Thread-137842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:37:16.057 [DEBUG] [Thread-137842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:37:16.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:37:16.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:37:16.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:37:16.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:37:16.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:37:16.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:37:16.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:37:16.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:37:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:37:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.900483 -999.00  +14.40  18.17     91  +13.00 1 1 1 3 1     0    0 1.55 6.94 ZNESW 19.0 18.2 173.2 21.1 15.4 -17.8 15.2 -17.2 15.2 -16.4 15.4 -17.2
2026-02-11T23:37:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:37:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:37:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.900483
2026-02-11T23:37:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:37:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:37:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:37:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:37:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:37:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:36:48', tmtdew=0.79, humidity=95.29, cloud=0.0, wind=18.99, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:36:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:35:00')
2026-02-11T23:37:16.083 [DEBUG] [Thread-137842] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:37:16.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:37:16.166 [DEBUG] [Thread-137845] [transport.py] [_log()] starting thread (client mode): 0xa2d95f60
2026-02-11T23:37:16.166 [DEBUG] [Thread-137845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:37:16.180 [DEBUG] [Thread-137845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:37:16.181 [INFO] [Thread-137845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:37:16.188 [DEBUG] [Thread-137845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:37:16.188 [DEBUG] [Thread-137845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:37:16.188 [DEBUG] [Thread-137845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] client lang: <none>
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] server lang: <none>
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] kex follows: False
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] Compression: none
2026-02-11T23:37:16.189 [DEBUG] [Thread-137845] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:37:16.250 [DEBUG] [Thread-137845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:37:16.250 [DEBUG] [Thread-137845] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:37:16.251 [DEBUG] [Thread-137845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:37:16.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:37:16.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:37:16.309 [DEBUG] [Thread-137845] [transport.py] [_log()] userauth is OK
2026-02-11T23:37:16.309 [DEBUG] [Thread-137845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:37:16.309 [DEBUG] [Thread-137845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:37:16.310 [DEBUG] [Thread-137845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:37:16.310 [DEBUG] [Thread-137845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:37:16.329 [INFO] [Thread-137845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:37:16.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:37:16.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:37:17.164 [DEBUG] [Thread-137845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:37:17.164 [DEBUG] [Thread-137845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:37:17.213 [DEBUG] [Thread-137845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:37:17.214 [DEBUG] [Thread-137845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:37:17.224 [DEBUG] [Thread-137845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:37:17.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:37: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')
2026-02-11T23:37:17.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:37:17.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:37:17.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:37:17.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:37:17.263 [DEBUG] [Thread-137845] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:37:22.063 [DEBUG] [Thread-137847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:37:37.112 [DEBUG] [Thread-137848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:37:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:37:47.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:37:47.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
2026-02-11T23:37:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 37, 23), 0.8, 95.21, 0.0, 17.17, 14.32, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:37:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:37:23
2026-02-11T23:37:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:37:49.602 [DEBUG] [Thread-137849] [transport.py] [_log()] starting thread (client mode): 0xa2d97e50
2026-02-11T23:37:49.602 [DEBUG] [Thread-137849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:37:49.622 [DEBUG] [Thread-137849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:37:49.622 [INFO] [Thread-137849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:49.626 [DEBUG] [Thread-137849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] client lang: <none>
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] server lang: <none>
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] kex follows: False
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] Compression: none
2026-02-11T23:37:49.627 [DEBUG] [Thread-137849] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:37:49.644 [DEBUG] [Thread-137849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:37:49.644 [DEBUG] [Thread-137849] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:37:49.645 [DEBUG] [Thread-137849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:37:49.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:37:49.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:37:49.647 [DEBUG] [Thread-137849] [transport.py] [_log()] userauth is OK
2026-02-11T23:37:49.648 [DEBUG] [Thread-137849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:37:49.648 [DEBUG] [Thread-137849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:37:49.648 [DEBUG] [Thread-137849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:37:49.648 [DEBUG] [Thread-137849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:37:49.669 [INFO] [Thread-137849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:37:49.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:37:50.330 [DEBUG] [Thread-137849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:37:50.330 [DEBUG] [Thread-137849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:37:50.331 [DEBUG] [Thread-137849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:37:50.371 [DEBUG] [Thread-137849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:37:50.372 [DEBUG] [Thread-137849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:37:50.375 [DEBUG] [Thread-137849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:37:50.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:37:50.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:37:50.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:37:50.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:37:50.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:37:50.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:37:50.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:37:50.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:37:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:37:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.900830 -999.00  +14.40  17.69     91  +13.00 1 1 1 3 1     0    0 1.58 8.16 ZNESW 16.3 17.7 171.8 21.5 15.5 -17.8 15.3 -16.8 15.1 -16.3 15.4 -17.2
2026-02-11T23:37:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:37:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:37:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.900830
2026-02-11T23:37:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:37:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:37:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:37:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:37:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:37:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:37:23', tmtdew=0.8, humidity=95.21, cloud=0.0, wind=17.17, temperature=14.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:37:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:35:00')
2026-02-11T23:37:50.403 [DEBUG] [Thread-137849] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:37:50.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:37:50.499 [DEBUG] [Thread-137852] [transport.py] [_log()] starting thread (client mode): 0xa2d96fe0
2026-02-11T23:37:50.499 [DEBUG] [Thread-137852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:37:50.517 [DEBUG] [Thread-137852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:37:50.517 [INFO] [Thread-137852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:37:50.529 [DEBUG] [Thread-137852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:37:50.529 [DEBUG] [Thread-137852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:37:50.529 [DEBUG] [Thread-137852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] client lang: <none>
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] server lang: <none>
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] kex follows: False
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:37:50.530 [DEBUG] [Thread-137852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:37:50.531 [DEBUG] [Thread-137852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:37:50.531 [DEBUG] [Thread-137852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:37:50.531 [DEBUG] [Thread-137852] [transport.py] [_log()] Compression: none
2026-02-11T23:37:50.531 [DEBUG] [Thread-137852] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:37:50.589 [DEBUG] [Thread-137852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:37:50.590 [DEBUG] [Thread-137852] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:37:50.590 [DEBUG] [Thread-137852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:37:50.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:37:50.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:37:50.645 [DEBUG] [Thread-137852] [transport.py] [_log()] userauth is OK
2026-02-11T23:37:50.645 [DEBUG] [Thread-137852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:37:50.645 [DEBUG] [Thread-137852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:37:50.645 [DEBUG] [Thread-137852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:37:50.646 [DEBUG] [Thread-137852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:37:50.664 [INFO] [Thread-137852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:37:50.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:37:50.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:37:51.535 [DEBUG] [Thread-137852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:37:51.536 [DEBUG] [Thread-137852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:37:51.583 [DEBUG] [Thread-137852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:37:51.583 [DEBUG] [Thread-137852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:37:51.592 [DEBUG] [Thread-137852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:37:51.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:37:51.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:37:51.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:37:51.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:37:51.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:37:51.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:37:51.629 [DEBUG] [Thread-137852] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:37:52.068 [DEBUG] [Thread-137854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:37:52.149 [DEBUG] [Thread-137855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:37:56.128 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:37:56.129 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:07.204 [DEBUG] [Thread-137856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:38:21.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:38:21.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:38:22.241 [DEBUG] [Thread-137857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 37, 58), 0.8, 94.74, 0.0, 17.49, 14.39, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:38:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:37:58
2026-02-11T23:38:24.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:38:24.208 [DEBUG] [Thread-137858] [transport.py] [_log()] starting thread (client mode): 0xa2d95450
2026-02-11T23:38:24.208 [DEBUG] [Thread-137858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:38:24.231 [DEBUG] [Thread-137858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:38:24.231 [INFO] [Thread-137858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:38:24.234 [DEBUG] [Thread-137858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:38:24.234 [DEBUG] [Thread-137858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] client lang: <none>
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] server lang: <none>
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] kex follows: False
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] Compression: none
2026-02-11T23:38:24.235 [DEBUG] [Thread-137858] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:38:24.252 [DEBUG] [Thread-137858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:38:24.253 [DEBUG] [Thread-137858] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:38:24.253 [DEBUG] [Thread-137858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:38:24.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:38:24.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:38:24.255 [DEBUG] [Thread-137858] [transport.py] [_log()] userauth is OK
2026-02-11T23:38:24.255 [DEBUG] [Thread-137858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:38:24.256 [DEBUG] [Thread-137858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:38:24.256 [DEBUG] [Thread-137858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:38:24.256 [DEBUG] [Thread-137858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:38:24.280 [INFO] [Thread-137858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:38:24.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:38:24.911 [DEBUG] [Thread-137858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:38:24.911 [DEBUG] [Thread-137858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:38:24.912 [DEBUG] [Thread-137858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:38:24.952 [DEBUG] [Thread-137858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:38:24.953 [DEBUG] [Thread-137858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:38:24.956 [DEBUG] [Thread-137858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:38:24.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:38:24.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:38:24.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:38:24.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:38:24.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:38:24.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:38:24.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:38:24.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:38:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:38:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.901524 -999.00  +14.40  10.52     91  +13.00 1 1 1 3 1     0    0 1.65 9.29 ZNESW 14.6 10.5 170.6 21.5 15.4 -17.8 15.3 -17.2 15.1 -16.4 15.4 -17.3
2026-02-11T23:38:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:38:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:38:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.901524
2026-02-11T23:38:24.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:38:24.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:38:24.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:38:24.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:38:24.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:38:24.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:37:58', tmtdew=0.8, humidity=94.74, cloud=0.0, wind=17.49, temperature=14.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:38:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:35:00')
2026-02-11T23:38:24.985 [DEBUG] [Thread-137858] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:38:25.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:38:25.080 [DEBUG] [Thread-137861] [transport.py] [_log()] starting thread (client mode): 0xa2d94670
2026-02-11T23:38:25.081 [DEBUG] [Thread-137861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:38:25.096 [DEBUG] [Thread-137861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:38:25.096 [INFO] [Thread-137861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:38:25.104 [DEBUG] [Thread-137861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:38:25.104 [DEBUG] [Thread-137861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:38:25.104 [DEBUG] [Thread-137861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:38:25.104 [DEBUG] [Thread-137861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:38:25.104 [DEBUG] [Thread-137861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:38:25.104 [DEBUG] [Thread-137861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] client lang: <none>
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] server lang: <none>
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] kex follows: False
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:38:25.105 [DEBUG] [Thread-137861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:38:25.106 [DEBUG] [Thread-137861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:38:25.106 [DEBUG] [Thread-137861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:38:25.106 [DEBUG] [Thread-137861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:38:25.106 [DEBUG] [Thread-137861] [transport.py] [_log()] Compression: none
2026-02-11T23:38:25.106 [DEBUG] [Thread-137861] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:38:25.166 [DEBUG] [Thread-137861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:38:25.167 [DEBUG] [Thread-137861] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:38:25.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:38:25.169 [DEBUG] [Thread-137861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:38:25.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:38:25.238 [DEBUG] [Thread-137861] [transport.py] [_log()] userauth is OK
2026-02-11T23:38:25.238 [DEBUG] [Thread-137861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:38:25.238 [DEBUG] [Thread-137861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:38:25.238 [DEBUG] [Thread-137861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:38:25.238 [DEBUG] [Thread-137861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:38:25.257 [INFO] [Thread-137861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:38:25.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:38:25.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:38:26.099 [DEBUG] [Thread-137861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:38:26.099 [DEBUG] [Thread-137861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:38:26.148 [DEBUG] [Thread-137861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:38:26.148 [DEBUG] [Thread-137861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:38:26.156 [DEBUG] [Thread-137861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:38:26.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:38:26.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:38:26.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:38:26.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:38:26.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:38:26.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:38:26.189 [DEBUG] [Thread-137861] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:38:37.275 [DEBUG] [Thread-137863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:52.146 [DEBUG] [Thread-137864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:52.336 [DEBUG] [Thread-137865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:38:56.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:38:56.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:38:56.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:56.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:38:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 38, 34), 1.22, 92.29, 0.0, 21.49, 14.61, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:38:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:38:34
2026-02-11T23:38:59.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:38:59.357 [DEBUG] [Thread-137866] [transport.py] [_log()] starting thread (client mode): 0xa2d97b80
2026-02-11T23:38:59.357 [DEBUG] [Thread-137866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:38:59.377 [DEBUG] [Thread-137866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:38:59.377 [INFO] [Thread-137866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] client lang: <none>
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] server lang: <none>
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] kex follows: False
2026-02-11T23:38:59.380 [DEBUG] [Thread-137866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:38:59.381 [DEBUG] [Thread-137866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:38:59.381 [DEBUG] [Thread-137866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:38:59.381 [DEBUG] [Thread-137866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:38:59.381 [DEBUG] [Thread-137866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:38:59.381 [DEBUG] [Thread-137866] [transport.py] [_log()] Compression: none
2026-02-11T23:38:59.381 [DEBUG] [Thread-137866] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:38:59.399 [DEBUG] [Thread-137866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:38:59.400 [DEBUG] [Thread-137866] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:38:59.400 [DEBUG] [Thread-137866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:38:59.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:38:59.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:38:59.403 [DEBUG] [Thread-137866] [transport.py] [_log()] userauth is OK
2026-02-11T23:38:59.403 [DEBUG] [Thread-137866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:38:59.403 [DEBUG] [Thread-137866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:38:59.403 [DEBUG] [Thread-137866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:38:59.403 [DEBUG] [Thread-137866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:38:59.428 [INFO] [Thread-137866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:38:59.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:39:00.056 [DEBUG] [Thread-137866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:39:00.056 [DEBUG] [Thread-137866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:39:00.056 [DEBUG] [Thread-137866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:39:00.097 [DEBUG] [Thread-137866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:39:00.097 [DEBUG] [Thread-137866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:39:00.099 [DEBUG] [Thread-137866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:39:00.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:39:00.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:39:00.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:39:00.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:39:00.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:39:00.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:39:00.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:39:00.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.901872 -999.00  +14.40  14.37     91  +13.00 1 1 1 3 1     0    0 1.63 9.52 ZNESW 13.6 14.4 164.6 16.8 15.5 -17.7 15.2 -17.1 15.1 -16.2 15.4 -17.2
2026-02-11T23:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.901872
2026-02-11T23:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:39:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:39:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:39:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:39:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:39:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:38:34', tmtdew=1.22, humidity=92.29, cloud=0.0, wind=21.49, temperature=14.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:38:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:35:00')
2026-02-11T23:39:00.123 [DEBUG] [Thread-137866] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:39:00.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:39:00.213 [DEBUG] [Thread-137869] [transport.py] [_log()] starting thread (client mode): 0xa2d94970
2026-02-11T23:39:00.213 [DEBUG] [Thread-137869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:39:00.227 [DEBUG] [Thread-137869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:39:00.227 [INFO] [Thread-137869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:39:00.235 [DEBUG] [Thread-137869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:39:00.235 [DEBUG] [Thread-137869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:39:00.235 [DEBUG] [Thread-137869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:39:00.235 [DEBUG] [Thread-137869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] client lang: <none>
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] server lang: <none>
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] kex follows: False
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] Compression: none
2026-02-11T23:39:00.236 [DEBUG] [Thread-137869] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:39:00.295 [DEBUG] [Thread-137869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:39:00.296 [DEBUG] [Thread-137869] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:39:00.296 [DEBUG] [Thread-137869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:39:00.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:39:00.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:39:00.354 [DEBUG] [Thread-137869] [transport.py] [_log()] userauth is OK
2026-02-11T23:39:00.355 [DEBUG] [Thread-137869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:39:00.355 [DEBUG] [Thread-137869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:39:00.355 [DEBUG] [Thread-137869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:39:00.355 [DEBUG] [Thread-137869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:39:00.374 [INFO] [Thread-137869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:39:00.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:39:00.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:39:01.185 [DEBUG] [Thread-137869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:39:01.185 [DEBUG] [Thread-137869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:39:01.234 [DEBUG] [Thread-137869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:39:01.235 [DEBUG] [Thread-137869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:39:01.244 [DEBUG] [Thread-137869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:39:01.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:39:01.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:39:01.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:39:01.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:39:01.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:39:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:39:01.282 [DEBUG] [Thread-137869] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:39:07.376 [DEBUG] [Thread-137871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:39:22.434 [DEBUG] [Thread-137872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:39:31.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:39:31.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:39:31.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:39:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 39, 9), 0.81, 94.66, 0.0, 20.54, 14.37, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:39:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:39:09
2026-02-11T23:39:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:39:33.733 [DEBUG] [Thread-137873] [transport.py] [_log()] starting thread (client mode): 0xa2d966b0
2026-02-11T23:39:33.734 [DEBUG] [Thread-137873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:39:33.753 [DEBUG] [Thread-137873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:39:33.753 [INFO] [Thread-137873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:39:33.756 [DEBUG] [Thread-137873] [transport.py] [_log()] client lang: <none>
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] server lang: <none>
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] kex follows: False
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] Compression: none
2026-02-11T23:39:33.757 [DEBUG] [Thread-137873] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:39:33.773 [DEBUG] [Thread-137873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:39:33.774 [DEBUG] [Thread-137873] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:39:33.774 [DEBUG] [Thread-137873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:39:33.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:39:33.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:39:33.776 [DEBUG] [Thread-137873] [transport.py] [_log()] userauth is OK
2026-02-11T23:39:33.776 [DEBUG] [Thread-137873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:39:33.777 [DEBUG] [Thread-137873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:39:33.777 [DEBUG] [Thread-137873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:39:33.777 [DEBUG] [Thread-137873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:39:33.802 [INFO] [Thread-137873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:39:33.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:39:34.378 [DEBUG] [Thread-137873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:39:34.378 [DEBUG] [Thread-137873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:39:34.378 [DEBUG] [Thread-137873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:39:34.420 [DEBUG] [Thread-137873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:39:34.420 [DEBUG] [Thread-137873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:39:34.423 [DEBUG] [Thread-137873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:39:34.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:39:34.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:39:34.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:39:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:39:34.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:39:34.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:39:34.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:39:34.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:39:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:39:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.902219 -999.00  +14.40  16.70     91  +13.00 1 1 1 3 1     0    0 1.65 9.71 ZNESW 17.8 16.7 169.1 19.3 15.4 -17.8 15.2 -16.6 15.1 -16.2 15.4 -17.3
2026-02-11T23:39:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:39:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:39:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.902219
2026-02-11T23:39:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:39:34.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:39:34.451 [DEBUG] [Thread-137873] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:39:34.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:39:34.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:39:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:39:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:39:09', tmtdew=0.81, humidity=94.66, cloud=0.0, wind=20.54, temperature=14.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:39:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:37:00')
2026-02-11T23:39:34.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:39:34.561 [DEBUG] [Thread-137876] [transport.py] [_log()] starting thread (client mode): 0xa2d96710
2026-02-11T23:39:34.562 [DEBUG] [Thread-137876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:39:34.576 [DEBUG] [Thread-137876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:39:34.576 [INFO] [Thread-137876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:39:34.584 [DEBUG] [Thread-137876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:39:34.584 [DEBUG] [Thread-137876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] client lang: <none>
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] server lang: <none>
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] kex follows: False
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:39:34.585 [DEBUG] [Thread-137876] [transport.py] [_log()] Compression: none
2026-02-11T23:39:34.586 [DEBUG] [Thread-137876] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:39:34.644 [DEBUG] [Thread-137876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:39:34.644 [DEBUG] [Thread-137876] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:39:34.645 [DEBUG] [Thread-137876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:39:34.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:39:34.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:39:34.706 [DEBUG] [Thread-137876] [transport.py] [_log()] userauth is OK
2026-02-11T23:39:34.706 [DEBUG] [Thread-137876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:39:34.707 [DEBUG] [Thread-137876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:39:34.707 [DEBUG] [Thread-137876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:39:34.707 [DEBUG] [Thread-137876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:39:34.725 [INFO] [Thread-137876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:39:34.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:39:34.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:39:35.544 [DEBUG] [Thread-137876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:39:35.544 [DEBUG] [Thread-137876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:39:35.592 [DEBUG] [Thread-137876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:39:35.593 [DEBUG] [Thread-137876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:39:35.602 [DEBUG] [Thread-137876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:39:35.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:39:35.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:39:35.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:39:35.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:39:35.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:39:35.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:39:35.639 [DEBUG] [Thread-137876] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:39:37.472 [DEBUG] [Thread-137878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:39:52.214 [DEBUG] [Thread-137879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:39:52.527 [DEBUG] [Thread-137880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:39:56.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:39:56.536 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:40:05.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:40:05.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:40:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:40:07.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 39, 46), 0.81, 94.66, 0.0, 16.43, 14.37, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:40:07.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:39:46
2026-02-11T23:40:07.563 [DEBUG] [Thread-137881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:40:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:40:08.066 [DEBUG] [Thread-137882] [transport.py] [_log()] starting thread (client mode): 0xa2d95330
2026-02-11T23:40:08.066 [DEBUG] [Thread-137882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:40:08.079 [DEBUG] [Thread-137882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:40:08.079 [INFO] [Thread-137882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] client lang: <none>
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] server lang: <none>
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] kex follows: False
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] Compression: none
2026-02-11T23:40:08.081 [DEBUG] [Thread-137882] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:40:08.089 [DEBUG] [Thread-137882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:40:08.089 [DEBUG] [Thread-137882] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:40:08.089 [DEBUG] [Thread-137882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:40:08.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:40:08.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:40:08.090 [DEBUG] [Thread-137882] [transport.py] [_log()] userauth is OK
2026-02-11T23:40:08.090 [DEBUG] [Thread-137882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:40:08.090 [DEBUG] [Thread-137882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:40:08.090 [DEBUG] [Thread-137882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:40:08.090 [DEBUG] [Thread-137882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:40:08.120 [INFO] [Thread-137882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:40:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:40:08.741 [DEBUG] [Thread-137882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:40:08.741 [DEBUG] [Thread-137882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:40:08.741 [DEBUG] [Thread-137882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:40:08.781 [DEBUG] [Thread-137882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:40:08.781 [DEBUG] [Thread-137882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:40:08.785 [DEBUG] [Thread-137882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:40:08.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:40:08.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:40:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:40:08.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:40:08.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:40:08.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:40:08.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:40:08.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:40:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:40:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.902566 -999.00  +14.40  12.61     91  +13.00 1 1 1 3 1     0    0 1.64 9.71 ZNESW 10.3 12.6 173.4 23.0 15.4 -17.7 15.2 -17.1 15.1 -16.4 15.4 -17.4
2026-02-11T23:40:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:40:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:40:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.902566
2026-02-11T23:40:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:40:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:40:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:40:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:40:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:40:08.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:39:46', tmtdew=0.81, humidity=94.66, cloud=0.0, wind=16.43, temperature=14.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:39:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:37:00')
2026-02-11T23:40:08.811 [DEBUG] [Thread-137882] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:40:08.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:40:08.907 [DEBUG] [Thread-137885] [transport.py] [_log()] starting thread (client mode): 0xa2d97670
2026-02-11T23:40:08.907 [DEBUG] [Thread-137885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:40:08.921 [DEBUG] [Thread-137885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:40:08.922 [INFO] [Thread-137885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:40:08.929 [DEBUG] [Thread-137885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:40:08.929 [DEBUG] [Thread-137885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:40:08.929 [DEBUG] [Thread-137885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] client lang: <none>
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] server lang: <none>
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] kex follows: False
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] Compression: none
2026-02-11T23:40:08.930 [DEBUG] [Thread-137885] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:40:08.998 [DEBUG] [Thread-137885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:40:08.998 [DEBUG] [Thread-137885] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:40:08.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:40:08.999 [DEBUG] [Thread-137885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:40:09.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:40:09.055 [DEBUG] [Thread-137885] [transport.py] [_log()] userauth is OK
2026-02-11T23:40:09.056 [DEBUG] [Thread-137885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:40:09.056 [DEBUG] [Thread-137885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:40:09.056 [DEBUG] [Thread-137885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:40:09.056 [DEBUG] [Thread-137885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:40:09.076 [INFO] [Thread-137885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:40:09.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:40:09.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:40:09.903 [DEBUG] [Thread-137885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:40:09.903 [DEBUG] [Thread-137885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:40:09.950 [DEBUG] [Thread-137885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:40:09.950 [DEBUG] [Thread-137885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:40:09.959 [DEBUG] [Thread-137885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:40:09.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:40:09.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:40:09.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:40:09.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:40:09.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:40:09.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:40:09.995 [DEBUG] [Thread-137885] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:40:22.602 [DEBUG] [Thread-137887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:40:37.650 [DEBUG] [Thread-137888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:40:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:40:40.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:40:40.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
2026-02-11T23:40:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 40, 22), 0.81, 94.64, 0.0, 18.03, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:40:42.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:40:22
2026-02-11T23:40:42.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:40:42.905 [DEBUG] [Thread-137889] [transport.py] [_log()] starting thread (client mode): 0xa8197dc0
2026-02-11T23:40:42.905 [DEBUG] [Thread-137889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:40:42.924 [DEBUG] [Thread-137889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:40:42.924 [INFO] [Thread-137889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] client lang: <none>
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] server lang: <none>
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] kex follows: False
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] Compression: none
2026-02-11T23:40:42.927 [DEBUG] [Thread-137889] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:40:42.944 [DEBUG] [Thread-137889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:40:42.945 [DEBUG] [Thread-137889] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:40:42.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:40:42.946 [DEBUG] [Thread-137889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:40:42.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:40:42.947 [DEBUG] [Thread-137889] [transport.py] [_log()] userauth is OK
2026-02-11T23:40:42.947 [DEBUG] [Thread-137889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:40:42.947 [DEBUG] [Thread-137889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:40:42.947 [DEBUG] [Thread-137889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:40:42.947 [DEBUG] [Thread-137889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:40:42.967 [INFO] [Thread-137889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:40:42.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:40:43.614 [DEBUG] [Thread-137889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:40:43.615 [DEBUG] [Thread-137889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:40:43.615 [DEBUG] [Thread-137889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:40:43.656 [DEBUG] [Thread-137889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:40:43.656 [DEBUG] [Thread-137889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:40:43.659 [DEBUG] [Thread-137889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:40:43.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:40:43.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:40:43.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:40:43.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:40:43.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:40:43.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:40:43.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.902913 -999.00  +14.40  14.67     91  +13.00 1 1 1 3 1     0    0 1.64 10.14 ZNESW 12.8 14.7 165.4 17.9 15.4 -17.8 15.2 -17.2 15.1 -16.3 15.4 -17.2
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.902913
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:40:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:40:22', tmtdew=0.81, humidity=94.64, cloud=0.0, wind=18.03, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:40:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:37:00')
2026-02-11T23:40:43.680 [DEBUG] [Thread-137889] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:40:43.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:40:43.769 [DEBUG] [Thread-137892] [transport.py] [_log()] starting thread (client mode): 0xa2d95360
2026-02-11T23:40:43.769 [DEBUG] [Thread-137892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:40:43.784 [DEBUG] [Thread-137892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:40:43.785 [INFO] [Thread-137892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] client lang: <none>
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] server lang: <none>
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] kex follows: False
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:40:43.794 [DEBUG] [Thread-137892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:40:43.795 [DEBUG] [Thread-137892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:40:43.795 [DEBUG] [Thread-137892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:40:43.795 [DEBUG] [Thread-137892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:40:43.795 [DEBUG] [Thread-137892] [transport.py] [_log()] Compression: none
2026-02-11T23:40:43.795 [DEBUG] [Thread-137892] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:40:43.853 [DEBUG] [Thread-137892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:40:43.854 [DEBUG] [Thread-137892] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:40:43.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:40:43.854 [DEBUG] [Thread-137892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:40:43.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:40:43.912 [DEBUG] [Thread-137892] [transport.py] [_log()] userauth is OK
2026-02-11T23:40:43.913 [DEBUG] [Thread-137892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:40:43.913 [DEBUG] [Thread-137892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:40:43.913 [DEBUG] [Thread-137892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:40:43.913 [DEBUG] [Thread-137892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:40:43.932 [INFO] [Thread-137892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:40:43.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:40:43.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:40:44.761 [DEBUG] [Thread-137892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:40:44.761 [DEBUG] [Thread-137892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:40:44.813 [DEBUG] [Thread-137892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:40:44.813 [DEBUG] [Thread-137892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:40:44.826 [DEBUG] [Thread-137892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:40:44.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:40:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:40:44.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:40:44.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:40:44.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:40:44.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:40:44.870 [DEBUG] [Thread-137892] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:40:52.269 [DEBUG] [Thread-137894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:40:52.684 [DEBUG] [Thread-137895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:40:56.741 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:40:56.742 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:41:07.736 [DEBUG] [Thread-137896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:41:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:41:14.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:41:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:41:16.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 40, 57), 0.87, 94.61, 0.0, 18.9, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:41:16.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:40:57
2026-02-11T23:41:17.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:41:17.290 [DEBUG] [Thread-137897] [transport.py] [_log()] starting thread (client mode): 0xa2d974f0
2026-02-11T23:41:17.290 [DEBUG] [Thread-137897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:41:17.311 [DEBUG] [Thread-137897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:41:17.311 [INFO] [Thread-137897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:41:17.313 [DEBUG] [Thread-137897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] client lang: <none>
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] server lang: <none>
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] kex follows: False
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] Compression: none
2026-02-11T23:41:17.314 [DEBUG] [Thread-137897] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:41:17.333 [DEBUG] [Thread-137897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:41:17.334 [DEBUG] [Thread-137897] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:41:17.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:41:17.335 [DEBUG] [Thread-137897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:41:17.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:41:17.337 [DEBUG] [Thread-137897] [transport.py] [_log()] userauth is OK
2026-02-11T23:41:17.337 [DEBUG] [Thread-137897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:41:17.337 [DEBUG] [Thread-137897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:41:17.337 [DEBUG] [Thread-137897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:41:17.337 [DEBUG] [Thread-137897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:41:17.362 [INFO] [Thread-137897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:41:17.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:41:18.006 [DEBUG] [Thread-137897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:41:18.006 [DEBUG] [Thread-137897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:41:18.006 [DEBUG] [Thread-137897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:41:18.047 [DEBUG] [Thread-137897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:41:18.048 [DEBUG] [Thread-137897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:41:18.051 [DEBUG] [Thread-137897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:41:18.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:41:18.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:41:18.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:41:18.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:41:18.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:41:18.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:41:18.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:41:18.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:41:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:41:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.903260 -999.00  +14.40  16.88     91  +13.00 1 1 1 3 1     0    0 1.67 10.25 ZNESW 17.6 16.9 165.4 20.6 15.4 -17.8 15.3 -17.1 15.1 -16.2 15.4 -17.3
2026-02-11T23:41:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:41:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:41:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.903260
2026-02-11T23:41:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:41:18.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:41:18.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:41:18.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:41:18.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:41:18.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:40:57', tmtdew=0.87, humidity=94.61, cloud=0.0, wind=18.9, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:40:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:37:00')
2026-02-11T23:41:18.079 [DEBUG] [Thread-137897] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:41:18.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:41:18.174 [DEBUG] [Thread-137900] [transport.py] [_log()] starting thread (client mode): 0xa2d967d0
2026-02-11T23:41:18.174 [DEBUG] [Thread-137900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:41:18.188 [DEBUG] [Thread-137900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:41:18.188 [INFO] [Thread-137900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:41:18.196 [DEBUG] [Thread-137900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] client lang: <none>
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] server lang: <none>
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] kex follows: False
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:41:18.197 [DEBUG] [Thread-137900] [transport.py] [_log()] Compression: none
2026-02-11T23:41:18.198 [DEBUG] [Thread-137900] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:41:18.256 [DEBUG] [Thread-137900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:41:18.257 [DEBUG] [Thread-137900] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:41:18.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:41:18.258 [DEBUG] [Thread-137900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:41:18.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:41:18.313 [DEBUG] [Thread-137900] [transport.py] [_log()] userauth is OK
2026-02-11T23:41:18.314 [DEBUG] [Thread-137900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:41:18.314 [DEBUG] [Thread-137900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:41:18.314 [DEBUG] [Thread-137900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:41:18.314 [DEBUG] [Thread-137900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:41:18.332 [INFO] [Thread-137900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:41:18.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:41:18.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:41:19.148 [DEBUG] [Thread-137900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:41:19.148 [DEBUG] [Thread-137900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:41:19.197 [DEBUG] [Thread-137900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:41:19.197 [DEBUG] [Thread-137900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:41:19.207 [DEBUG] [Thread-137900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:41:19.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:41:19.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:41:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:41:19.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:41:19.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:41:19.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:41:19.246 [DEBUG] [Thread-137900] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:41:22.771 [DEBUG] [Thread-137902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:41:37.825 [DEBUG] [Thread-137903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:41:49.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:41:49.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:41:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:41:51.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 41, 33), 0.87, 94.61, 0.0, 20.41, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:41:51.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:41:33
2026-02-11T23:41:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:41:51.622 [DEBUG] [Thread-137904] [transport.py] [_log()] starting thread (client mode): 0xa2d9c760
2026-02-11T23:41:51.622 [DEBUG] [Thread-137904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:41:51.642 [DEBUG] [Thread-137904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:41:51.643 [INFO] [Thread-137904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:41:51.645 [DEBUG] [Thread-137904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] client lang: <none>
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] server lang: <none>
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] kex follows: False
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] Compression: none
2026-02-11T23:41:51.646 [DEBUG] [Thread-137904] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:41:51.666 [DEBUG] [Thread-137904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:41:51.667 [DEBUG] [Thread-137904] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:41:51.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:41:51.668 [DEBUG] [Thread-137904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:41:51.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:41:51.670 [DEBUG] [Thread-137904] [transport.py] [_log()] userauth is OK
2026-02-11T23:41:51.670 [DEBUG] [Thread-137904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:41:51.670 [DEBUG] [Thread-137904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:41:51.670 [DEBUG] [Thread-137904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:41:51.671 [DEBUG] [Thread-137904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:41:51.694 [INFO] [Thread-137904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:41:51.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:41:52.326 [DEBUG] [Thread-137906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:41:52.326 [DEBUG] [Thread-137904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:41:52.326 [DEBUG] [Thread-137904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:41:52.326 [DEBUG] [Thread-137904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:41:52.367 [DEBUG] [Thread-137904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:41:52.367 [DEBUG] [Thread-137904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:41:52.371 [DEBUG] [Thread-137904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:41:52.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:41:52.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:41:52.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:41:52.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:41:52.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:41:52.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:41:52.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:41:52.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:41:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:41:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.903955 -999.00  +14.40  12.33     91  +13.00 1 1 1 3 1     0    0 1.64 8.69 ZNESW 12.7 12.3 174.8 19.0 15.4 -17.8 15.2 -16.7 15.1 -16.3 15.4 -17.3
2026-02-11T23:41:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:41:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:41:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.903955
2026-02-11T23:41:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:41:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:41:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:41:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:41:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:41:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:41:33', tmtdew=0.87, humidity=94.61, cloud=0.0, wind=20.41, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:41:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[2.072749999999999, 0.12124999999999986, 0.14225000000000065, 0.4914999999999985, 1.4314999999999998, 1.2877500000000008, 1.5969999999999995, nan, 0.3644999999999996, 0.09200000000000053, 0.025249999999999773, 0.14300000000000068, 0.2809999999999988, 0.1792499999999997, 0.22999999999999865, 0.395999999999999, 0.21124999999999972, 0.15549999999999997, 0.08799999999999919, 0.10824999999999818, 0.13899999999999935, 0.05824999999999747, 0.055749999999999744, 0.11175000000000068, 0.13599999999999923, 0.10200000000000031, 0.07774999999999999, 0.06600000000000072, 0.1880000000000006, 0.1620000000000008, 0.11300000000000132, 0.1769999999999996, 0.10574999999999868], zp_timestamp='2026-02-11T21:37:00')
2026-02-11T23:41:52.392 [DEBUG] [Thread-137904] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:41:52.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:41:52.486 [DEBUG] [Thread-137908] [transport.py] [_log()] starting thread (client mode): 0xa2d9e890
2026-02-11T23:41:52.487 [DEBUG] [Thread-137908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:41:52.501 [DEBUG] [Thread-137908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:41:52.502 [INFO] [Thread-137908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:41:52.509 [DEBUG] [Thread-137908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:41:52.509 [DEBUG] [Thread-137908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] client lang: <none>
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] server lang: <none>
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] kex follows: False
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] Compression: none
2026-02-11T23:41:52.510 [DEBUG] [Thread-137908] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:41:52.569 [DEBUG] [Thread-137908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:41:52.570 [DEBUG] [Thread-137908] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:41:52.570 [DEBUG] [Thread-137908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:41:52.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:41:52.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:41:52.626 [DEBUG] [Thread-137908] [transport.py] [_log()] userauth is OK
2026-02-11T23:41:52.626 [DEBUG] [Thread-137908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:41:52.626 [DEBUG] [Thread-137908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:41:52.627 [DEBUG] [Thread-137908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:41:52.627 [DEBUG] [Thread-137908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:41:52.646 [INFO] [Thread-137908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:41:52.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:41:52.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:41:52.860 [DEBUG] [Thread-137910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:41:53.512 [DEBUG] [Thread-137908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:41:53.513 [DEBUG] [Thread-137908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:41:53.560 [DEBUG] [Thread-137908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:41:53.561 [DEBUG] [Thread-137908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:41:53.570 [DEBUG] [Thread-137908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:41:53.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:41:53.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:41: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') -> 00000000
2026-02-11T23:41:53.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:41:53.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:41:53.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:41:53.607 [DEBUG] [Thread-137908] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:41:56.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:41:56.946 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:07.920 [DEBUG] [Thread-137911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:22.952 [DEBUG] [Thread-137912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:42:23.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:42:23.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:42:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 42, 9), 0.87, 94.58, 0.0, 20.84, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:42:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:42:09
2026-02-11T23:42:26.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:42:26.233 [DEBUG] [Thread-137913] [transport.py] [_log()] starting thread (client mode): 0xa2d95330
2026-02-11T23:42:26.233 [DEBUG] [Thread-137913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:42:26.253 [DEBUG] [Thread-137913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:42:26.253 [INFO] [Thread-137913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] client lang: <none>
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] server lang: <none>
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] kex follows: False
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:42:26.256 [DEBUG] [Thread-137913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:42:26.257 [DEBUG] [Thread-137913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:42:26.257 [DEBUG] [Thread-137913] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:42:26.257 [DEBUG] [Thread-137913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:42:26.257 [DEBUG] [Thread-137913] [transport.py] [_log()] Compression: none
2026-02-11T23:42:26.257 [DEBUG] [Thread-137913] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:42:26.275 [DEBUG] [Thread-137913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:42:26.276 [DEBUG] [Thread-137913] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:42:26.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:42:26.277 [DEBUG] [Thread-137913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:42:26.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:42:26.279 [DEBUG] [Thread-137913] [transport.py] [_log()] userauth is OK
2026-02-11T23:42:26.279 [DEBUG] [Thread-137913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:42:26.279 [DEBUG] [Thread-137913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:42:26.279 [DEBUG] [Thread-137913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:42:26.279 [DEBUG] [Thread-137913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:42:26.294 [INFO] [Thread-137913] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:42:26.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:42:26.888 [DEBUG] [Thread-137913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:42:26.888 [DEBUG] [Thread-137913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:42:26.889 [DEBUG] [Thread-137913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:42:26.929 [DEBUG] [Thread-137913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:42:26.930 [DEBUG] [Thread-137913] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:42:26.933 [DEBUG] [Thread-137913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:42:26.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:42:26.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:42:26.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:42:26.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:42:26.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:42:26.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:42:26.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:42:26.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:42:26.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:42:26.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.904302 -999.00  +14.40  14.75     91  +13.00 1 1 1 3 1     0    0 1.57 8.21 ZNESW 14.1 14.8 178.4 19.5 15.4 -17.8 15.2 -16.6 15.1 -16.4 15.4 -17.2
2026-02-11T23:42:26.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:42:26.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:42:26.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.904302
2026-02-11T23:42:26.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:42:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:42:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:42:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:42:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:42:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:42:09', tmtdew=0.87, humidity=94.58, cloud=0.0, wind=20.84, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:42:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[2.0342499999999992, 0.052250000000000796, 0.09325000000000117, 0.24349999999999916, 1.3834999999999997, 0.9382500000000009, 1.242, nan, 0.23749999999999893, 0.06550000000000011, -0.011750000000001037, 0.09200000000000053, 0.20699999999999896, 0.1222499999999993, 0.12549999999999883, 0.18900000000000006, 0.1352499999999992, 0.1144999999999996, 0.05599999999999916, 0.06424999999999947, 0.09699999999999953, 0.044749999999998735, 0.03575000000000017, 0.05075000000000074, 0.0909999999999993, 0.11550000000000082, 0.05674999999999919, 0.06550000000000011, 0.08900000000000041, 0.13700000000000045, 0.08300000000000018, 0.1490000000000009, 0.13874999999999993], zp_timestamp='2026-02-11T21:40:00')
2026-02-11T23:42:26.961 [DEBUG] [Thread-137913] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:42:27.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:42:27.056 [DEBUG] [Thread-137916] [transport.py] [_log()] starting thread (client mode): 0xa2d95b70
2026-02-11T23:42:27.056 [DEBUG] [Thread-137916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:42:27.070 [DEBUG] [Thread-137916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:42:27.071 [INFO] [Thread-137916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:42:27.081 [DEBUG] [Thread-137916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:42:27.081 [DEBUG] [Thread-137916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:42:27.081 [DEBUG] [Thread-137916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:42:27.081 [DEBUG] [Thread-137916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:42:27.081 [DEBUG] [Thread-137916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] client lang: <none>
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] server lang: <none>
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] kex follows: False
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] Compression: none
2026-02-11T23:42:27.082 [DEBUG] [Thread-137916] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:42:27.143 [DEBUG] [Thread-137916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:42:27.144 [DEBUG] [Thread-137916] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:42:27.144 [DEBUG] [Thread-137916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:42:27.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:42:27.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:42:27.202 [DEBUG] [Thread-137916] [transport.py] [_log()] userauth is OK
2026-02-11T23:42:27.202 [DEBUG] [Thread-137916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:42:27.202 [DEBUG] [Thread-137916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:42:27.203 [DEBUG] [Thread-137916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:42:27.203 [DEBUG] [Thread-137916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:42:27.222 [INFO] [Thread-137916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:42:27.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:42:27.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:42:28.040 [DEBUG] [Thread-137916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:42:28.040 [DEBUG] [Thread-137916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:42:28.089 [DEBUG] [Thread-137916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:42:28.089 [DEBUG] [Thread-137916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:42:28.103 [DEBUG] [Thread-137916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:42:28.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:42:28.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:42:28.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:42:28.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:42:28.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:42:28.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:42:28.141 [DEBUG] [Thread-137916] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:42:37.990 [DEBUG] [Thread-137918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:52.394 [DEBUG] [Thread-137919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:53.042 [DEBUG] [Thread-137920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:57.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:57.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:42:58.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:42:58.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:42:58.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:43:00.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 42, 45), 0.82, 94.59, 0.0, 22.8, 14.27, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:43:00.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:42:45
2026-02-11T23:43:00.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:43:00.612 [DEBUG] [Thread-137921] [transport.py] [_log()] starting thread (client mode): 0xa2d9e3b0
2026-02-11T23:43:00.612 [DEBUG] [Thread-137921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:43:00.624 [DEBUG] [Thread-137921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:43:00.624 [INFO] [Thread-137921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:43:00.625 [DEBUG] [Thread-137921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] client lang: <none>
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] server lang: <none>
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] kex follows: False
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] Compression: none
2026-02-11T23:43:00.626 [DEBUG] [Thread-137921] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:43:00.634 [DEBUG] [Thread-137921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:43:00.635 [DEBUG] [Thread-137921] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:43:00.635 [DEBUG] [Thread-137921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:43:00.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:43:00.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:43:00.636 [DEBUG] [Thread-137921] [transport.py] [_log()] userauth is OK
2026-02-11T23:43:00.636 [DEBUG] [Thread-137921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:43:00.637 [DEBUG] [Thread-137921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:43:00.637 [DEBUG] [Thread-137921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:43:00.637 [DEBUG] [Thread-137921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:43:00.665 [INFO] [Thread-137921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:43:00.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:43:01.269 [DEBUG] [Thread-137921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:43:01.270 [DEBUG] [Thread-137921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:43:01.270 [DEBUG] [Thread-137921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:43:01.310 [DEBUG] [Thread-137921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:43:01.311 [DEBUG] [Thread-137921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:43:01.314 [DEBUG] [Thread-137921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:43:01.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:43:01.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:43:01.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:43:01.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:43:01.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:43:01.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:43:01.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:43:01.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:43:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:43:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.904649 -999.00  +14.40  18.22     91  +13.00 1 1 1 3 1     0    0 1.59 8.17 ZNESW 16.1 18.2 168.6 21.8 15.4 -17.0 15.2 -15.9 15.1 -15.9 15.4 -17.1
2026-02-11T23:43:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:43:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:43:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.904649
2026-02-11T23:43:01.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:43:01.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:43:01.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:43:01.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:43:01.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:43:01.338 [DEBUG] [Thread-137921] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:43:01.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:42:45', tmtdew=0.82, humidity=94.59, cloud=0.0, wind=22.8, temperature=14.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:42:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[2.0342499999999992, 0.052250000000000796, 0.09325000000000117, 0.24349999999999916, 1.3834999999999997, 0.9382500000000009, 1.242, nan, 0.23749999999999893, 0.06550000000000011, -0.011750000000001037, 0.09200000000000053, 0.20699999999999896, 0.1222499999999993, 0.12549999999999883, 0.18900000000000006, 0.1352499999999992, 0.1144999999999996, 0.05599999999999916, 0.06424999999999947, 0.09699999999999953, 0.044749999999998735, 0.03575000000000017, 0.05075000000000074, 0.0909999999999993, 0.11550000000000082, 0.05674999999999919, 0.06550000000000011, 0.08900000000000041, 0.13700000000000045, 0.08300000000000018, 0.1490000000000009, 0.13874999999999993], zp_timestamp='2026-02-11T21:40:00')
2026-02-11T23:43:01.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:43:01.430 [DEBUG] [Thread-137924] [transport.py] [_log()] starting thread (client mode): 0xa2d9c190
2026-02-11T23:43:01.430 [DEBUG] [Thread-137924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:43:01.446 [DEBUG] [Thread-137924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:43:01.446 [INFO] [Thread-137924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:43:01.454 [DEBUG] [Thread-137924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:43:01.454 [DEBUG] [Thread-137924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:43:01.454 [DEBUG] [Thread-137924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] client lang: <none>
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] server lang: <none>
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] kex follows: False
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] Compression: none
2026-02-11T23:43:01.455 [DEBUG] [Thread-137924] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:43:01.511 [DEBUG] [Thread-137924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:43:01.511 [DEBUG] [Thread-137924] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:43:01.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:43:01.512 [DEBUG] [Thread-137924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:43:01.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:43:01.566 [DEBUG] [Thread-137924] [transport.py] [_log()] userauth is OK
2026-02-11T23:43:01.566 [DEBUG] [Thread-137924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:43:01.566 [DEBUG] [Thread-137924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:43:01.566 [DEBUG] [Thread-137924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:43:01.566 [DEBUG] [Thread-137924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:43:01.581 [INFO] [Thread-137924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:43:01.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:43:01.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:43:02.464 [DEBUG] [Thread-137924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:43:02.464 [DEBUG] [Thread-137924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:43:02.512 [DEBUG] [Thread-137924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:43:02.512 [DEBUG] [Thread-137924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:43:02.521 [DEBUG] [Thread-137924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:43:02.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:43:02.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:43:02.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:43:02.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:43:02.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:43:02.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:43:02.553 [DEBUG] [Thread-137924] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:43:08.081 [DEBUG] [Thread-137926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:43:23.134 [DEBUG] [Thread-137927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:43:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:43:32.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:43: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
2026-02-11T23:43:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 43, 20), 0.82, 94.59, 0.0, 23.06, 14.27, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:43:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:43:20
2026-02-11T23:43:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:43:34.949 [DEBUG] [Thread-137928] [transport.py] [_log()] starting thread (client mode): 0xa2d9c460
2026-02-11T23:43:34.949 [DEBUG] [Thread-137928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:43:34.969 [DEBUG] [Thread-137928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:43:34.969 [INFO] [Thread-137928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] client lang: <none>
2026-02-11T23:43:34.970 [DEBUG] [Thread-137928] [transport.py] [_log()] server lang: <none>
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] kex follows: False
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] Compression: none
2026-02-11T23:43:34.971 [DEBUG] [Thread-137928] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:43:34.979 [DEBUG] [Thread-137928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:43:34.979 [DEBUG] [Thread-137928] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:43:34.979 [DEBUG] [Thread-137928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:43:34.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:43:34.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:43:34.981 [DEBUG] [Thread-137928] [transport.py] [_log()] userauth is OK
2026-02-11T23:43:34.981 [DEBUG] [Thread-137928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:43:34.981 [DEBUG] [Thread-137928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:43:34.981 [DEBUG] [Thread-137928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:43:34.981 [DEBUG] [Thread-137928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:43:34.998 [INFO] [Thread-137928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:43:34.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:43:35.583 [DEBUG] [Thread-137928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:43:35.584 [DEBUG] [Thread-137928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:43:35.584 [DEBUG] [Thread-137928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:43:35.624 [DEBUG] [Thread-137928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:43:35.625 [DEBUG] [Thread-137928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:43:35.628 [DEBUG] [Thread-137928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:43:35.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:43:35.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:43:35.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:43:35.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:43:35.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:43:35.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:43:35.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:43:35.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:43:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:43:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.904997 -999.00  +14.40  15.82     91  +13.00 1 1 1 3 1     0    0 1.61 7.94 ZNESW 14.3 15.8 172.0 18.7 15.4 -15.9 15.2 -14.5 15.1 -15.0 15.4 -16.3
2026-02-11T23:43:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:43:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:43:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.904997
2026-02-11T23:43:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:43:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:43:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:43:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:43:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:43:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:43:20', tmtdew=0.82, humidity=94.59, cloud=0.0, wind=23.06, temperature=14.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:43:11.741', atlas_cloud=1, atlas_rain=1, zp_data=[2.0342499999999992, 0.052250000000000796, 0.09325000000000117, 0.24349999999999916, 1.3834999999999997, 0.9382500000000009, 1.242, nan, 0.23749999999999893, 0.06550000000000011, -0.011750000000001037, 0.09200000000000053, 0.20699999999999896, 0.1222499999999993, 0.12549999999999883, 0.18900000000000006, 0.1352499999999992, 0.1144999999999996, 0.05599999999999916, 0.06424999999999947, 0.09699999999999953, 0.044749999999998735, 0.03575000000000017, 0.05075000000000074, 0.0909999999999993, 0.11550000000000082, 0.05674999999999919, 0.06550000000000011, 0.08900000000000041, 0.13700000000000045, 0.08300000000000018, 0.1490000000000009, 0.13874999999999993], zp_timestamp='2026-02-11T21:40:00')
2026-02-11T23:43:35.657 [DEBUG] [Thread-137928] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:43:35.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:43:35.754 [DEBUG] [Thread-137931] [transport.py] [_log()] starting thread (client mode): 0xa2d9d030
2026-02-11T23:43:35.755 [DEBUG] [Thread-137931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:43:35.773 [DEBUG] [Thread-137931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:43:35.773 [INFO] [Thread-137931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:43:35.781 [DEBUG] [Thread-137931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] client lang: <none>
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] server lang: <none>
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] kex follows: False
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] Compression: none
2026-02-11T23:43:35.782 [DEBUG] [Thread-137931] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:43:35.839 [DEBUG] [Thread-137931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:43:35.839 [DEBUG] [Thread-137931] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:43:35.840 [DEBUG] [Thread-137931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:43:35.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:43:35.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:43:35.895 [DEBUG] [Thread-137931] [transport.py] [_log()] userauth is OK
2026-02-11T23:43:35.896 [DEBUG] [Thread-137931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:43:35.896 [DEBUG] [Thread-137931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:43:35.896 [DEBUG] [Thread-137931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:43:35.896 [DEBUG] [Thread-137931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:43:35.918 [INFO] [Thread-137931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:43:35.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:43:35.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:43:36.748 [DEBUG] [Thread-137931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:43:36.748 [DEBUG] [Thread-137931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:43:36.799 [DEBUG] [Thread-137931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:43:36.799 [DEBUG] [Thread-137931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:43:36.809 [DEBUG] [Thread-137931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:43:36.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:43:36.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:43:36.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:43:36.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:43:36.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:43:36.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:43:36.845 [DEBUG] [Thread-137931] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:43:38.171 [DEBUG] [Thread-137933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:43:52.454 [DEBUG] [Thread-137934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:43:53.226 [DEBUG] [Thread-137935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:43:57.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:43:57.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:44:06.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:44:06.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:44:06.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:44:08.263 [DEBUG] [Thread-137936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:44:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 43, 55), 0.83, 94.56, 0.0, 21.61, 14.29, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:44:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:43:55
2026-02-11T23:44:09.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:44:09.367 [DEBUG] [Thread-137937] [transport.py] [_log()] starting thread (client mode): 0xa2d97e80
2026-02-11T23:44:09.367 [DEBUG] [Thread-137937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:44:09.379 [DEBUG] [Thread-137937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:44:09.380 [INFO] [Thread-137937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] client lang: <none>
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] server lang: <none>
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] kex follows: False
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] Compression: none
2026-02-11T23:44:09.383 [DEBUG] [Thread-137937] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:44:09.392 [DEBUG] [Thread-137937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:44:09.392 [DEBUG] [Thread-137937] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:44:09.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:44:09.393 [DEBUG] [Thread-137937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:44:09.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:44:09.395 [DEBUG] [Thread-137937] [transport.py] [_log()] userauth is OK
2026-02-11T23:44:09.395 [DEBUG] [Thread-137937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:44:09.395 [DEBUG] [Thread-137937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:44:09.395 [DEBUG] [Thread-137937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:44:09.395 [DEBUG] [Thread-137937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:44:09.415 [INFO] [Thread-137937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:44:09.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:44:10.091 [DEBUG] [Thread-137937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:44:10.092 [DEBUG] [Thread-137937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:44:10.092 [DEBUG] [Thread-137937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:44:10.132 [DEBUG] [Thread-137937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:44:10.133 [DEBUG] [Thread-137937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:44:10.136 [DEBUG] [Thread-137937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:44:10.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:44:10.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:44:10.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:44:10.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:44:10.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:44:10.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:44:10.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:44:10.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:44:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:44:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.905344 -999.00  +14.40  16.37     91  +13.00 1 1 1 3 1     0    0 1.61 7.69 ZNESW 15.4 16.4 166.6 18.8 15.4 -14.4 15.2 -13.3 15.1 -14.3 15.4 -15.5
2026-02-11T23:44:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:44:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:44:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.905344
2026-02-11T23:44:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:44:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:44:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:44:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:44:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:44:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:43:55', tmtdew=0.83, humidity=94.56, cloud=0.0, wind=21.61, temperature=14.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:43:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[2.0342499999999992, 0.052250000000000796, 0.09325000000000117, 0.24349999999999916, 1.3834999999999997, 0.9382500000000009, 1.242, nan, 0.23749999999999893, 0.06550000000000011, -0.011750000000001037, 0.09200000000000053, 0.20699999999999896, 0.1222499999999993, 0.12549999999999883, 0.18900000000000006, 0.1352499999999992, 0.1144999999999996, 0.05599999999999916, 0.06424999999999947, 0.09699999999999953, 0.044749999999998735, 0.03575000000000017, 0.05075000000000074, 0.0909999999999993, 0.11550000000000082, 0.05674999999999919, 0.06550000000000011, 0.08900000000000041, 0.13700000000000045, 0.08300000000000018, 0.1490000000000009, 0.13874999999999993], zp_timestamp='2026-02-11T21:40:00')
2026-02-11T23:44:10.157 [DEBUG] [Thread-137937] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:44:10.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:44:23.301 [DEBUG] [Thread-137940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:44:38.350 [DEBUG] [Thread-137941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:44:52.538 [DEBUG] [Thread-137942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:44:53.385 [DEBUG] [Thread-137943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:44:57.564 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:44:57.565 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:45:08.420 [DEBUG] [Thread-137944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:45:23.456 [DEBUG] [Thread-137945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:45:38.493 [DEBUG] [Thread-137946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:45:52.626 [DEBUG] [Thread-137947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:45:53.530 [DEBUG] [Thread-137948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:45:57.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:45:57.778 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:46:08.568 [DEBUG] [Thread-137949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:46:22.135 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-11T23:46:23.604 [DEBUG] [Thread-137950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:46:38.644 [DEBUG] [Thread-137951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:46:52.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:46:52.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:46:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:46:52.709 [DEBUG] [Thread-137952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:46:53.683 [DEBUG] [Thread-137953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:46:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 46, 18), 0.78, 95.05, 0.0, 19.66, 14.31, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:46:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:46:18
2026-02-11T23:46:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:46:54.585 [DEBUG] [Thread-137954] [transport.py] [_log()] starting thread (client mode): 0xa2d974c0
2026-02-11T23:46:54.585 [DEBUG] [Thread-137954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:46:54.605 [DEBUG] [Thread-137954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:46:54.606 [INFO] [Thread-137954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] client lang: <none>
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] server lang: <none>
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] kex follows: False
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:46:54.609 [DEBUG] [Thread-137954] [transport.py] [_log()] Compression: none
2026-02-11T23:46:54.610 [DEBUG] [Thread-137954] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:46:54.628 [DEBUG] [Thread-137954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:46:54.629 [DEBUG] [Thread-137954] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:46:54.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:46:54.630 [DEBUG] [Thread-137954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:46:54.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:46:54.632 [DEBUG] [Thread-137954] [transport.py] [_log()] userauth is OK
2026-02-11T23:46:54.633 [DEBUG] [Thread-137954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:46:54.633 [DEBUG] [Thread-137954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:46:54.633 [DEBUG] [Thread-137954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:46:54.633 [DEBUG] [Thread-137954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:46:54.657 [INFO] [Thread-137954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:46:54.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:46:55.243 [DEBUG] [Thread-137954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:46:55.243 [DEBUG] [Thread-137954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:46:55.244 [DEBUG] [Thread-137954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:46:55.284 [DEBUG] [Thread-137954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:46:55.285 [DEBUG] [Thread-137954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:46:55.288 [DEBUG] [Thread-137954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:46:55.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:46:55.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:46:55.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:46:55.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:46:55.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:46:55.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:46:55.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:46:55.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:46:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:46:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.907080 -999.00  +14.30  19.71     91  +13.00 1 2 1 3 1     0    0 1.52 4.73 .N..W 17.3 19.7 164.6 22.6 15.5 -11.7 15.3 -10.7 15.2 -12.1 15.5 -13.0
2026-02-11T23:46:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:46:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:46:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.907080
2026-02-11T23:46:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:46:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:46:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:46:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:46:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:46:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:46:18', tmtdew=0.78, humidity=95.05, cloud=0.0, wind=19.66, temperature=14.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:46:11.712', atlas_cloud=2, atlas_rain=1, zp_data=[2.0342499999999992, 0.052250000000000796, 0.09325000000000117, 0.24349999999999916, 1.3834999999999997, 0.9382500000000009, 1.242, nan, 0.23749999999999893, 0.06550000000000011, -0.011750000000001037, 0.09200000000000053, 0.20699999999999896, 0.1222499999999993, 0.12549999999999883, 0.18900000000000006, 0.1352499999999992, 0.1144999999999996, 0.05599999999999916, 0.06424999999999947, 0.09699999999999953, 0.044749999999998735, 0.03575000000000017, 0.05075000000000074, 0.0909999999999993, 0.11550000000000082, 0.05674999999999919, 0.06550000000000011, 0.08900000000000041, 0.13700000000000045, 0.08300000000000018, 0.1490000000000009, 0.13874999999999993], zp_timestamp='2026-02-11T21:43:00')
2026-02-11T23:46:55.315 [DEBUG] [Thread-137954] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:46:55.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:46:55.411 [DEBUG] [Thread-137957] [transport.py] [_log()] starting thread (client mode): 0xa2d97b50
2026-02-11T23:46:55.412 [DEBUG] [Thread-137957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:46:55.427 [DEBUG] [Thread-137957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:46:55.427 [INFO] [Thread-137957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] client lang: <none>
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] server lang: <none>
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] kex follows: False
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:46:55.435 [DEBUG] [Thread-137957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:46:55.436 [DEBUG] [Thread-137957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:46:55.436 [DEBUG] [Thread-137957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:46:55.436 [DEBUG] [Thread-137957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:46:55.436 [DEBUG] [Thread-137957] [transport.py] [_log()] Compression: none
2026-02-11T23:46:55.436 [DEBUG] [Thread-137957] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:46:55.494 [DEBUG] [Thread-137957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:46:55.495 [DEBUG] [Thread-137957] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:46:55.496 [DEBUG] [Thread-137957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:46:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:46:55.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:46:55.554 [DEBUG] [Thread-137957] [transport.py] [_log()] userauth is OK
2026-02-11T23:46:55.554 [DEBUG] [Thread-137957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:46:55.554 [DEBUG] [Thread-137957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:46:55.554 [DEBUG] [Thread-137957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:46:55.555 [DEBUG] [Thread-137957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:46:55.575 [INFO] [Thread-137957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:46:55.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:46:55.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:46:56.383 [DEBUG] [Thread-137957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:46:56.383 [DEBUG] [Thread-137957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:46:56.432 [DEBUG] [Thread-137957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:46:56.432 [DEBUG] [Thread-137957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:46:56.441 [DEBUG] [Thread-137957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:46:56.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:46:56.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:46:56.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:46:56.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:46:56.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:46:56.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:46:56.477 [DEBUG] [Thread-137957] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:46:57.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:46:57.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:47:08.720 [DEBUG] [Thread-137959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:47:23.784 [DEBUG] [Thread-137960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:47:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:47:26.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:47:26.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
2026-02-11T23:47:28.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 46, 55), 0.77, 95.1, 0.0, 16.59, 14.32, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:47:28.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:46:55
2026-02-11T23:47:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:47:28.817 [DEBUG] [Thread-137961] [transport.py] [_log()] starting thread (client mode): 0xa2d9dc60
2026-02-11T23:47:28.818 [DEBUG] [Thread-137961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:47:28.838 [DEBUG] [Thread-137961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:47:28.838 [INFO] [Thread-137961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:47:28.842 [DEBUG] [Thread-137961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:47:28.842 [DEBUG] [Thread-137961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:47:28.842 [DEBUG] [Thread-137961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:47:28.842 [DEBUG] [Thread-137961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:47:28.842 [DEBUG] [Thread-137961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:47:28.842 [DEBUG] [Thread-137961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] client lang: <none>
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] server lang: <none>
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] kex follows: False
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:47:28.843 [DEBUG] [Thread-137961] [transport.py] [_log()] Compression: none
2026-02-11T23:47:28.844 [DEBUG] [Thread-137961] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:47:28.862 [DEBUG] [Thread-137961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:47:28.863 [DEBUG] [Thread-137961] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:47:28.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:47:28.865 [DEBUG] [Thread-137961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:47:28.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:47:28.867 [DEBUG] [Thread-137961] [transport.py] [_log()] userauth is OK
2026-02-11T23:47:28.867 [DEBUG] [Thread-137961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:47:28.868 [DEBUG] [Thread-137961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:47:28.868 [DEBUG] [Thread-137961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:47:28.868 [DEBUG] [Thread-137961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:47:28.885 [INFO] [Thread-137961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:47:28.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:47:29.517 [DEBUG] [Thread-137961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:47:29.518 [DEBUG] [Thread-137961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:47:29.518 [DEBUG] [Thread-137961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:47:29.558 [DEBUG] [Thread-137961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:47:29.559 [DEBUG] [Thread-137961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:47:29.562 [DEBUG] [Thread-137961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:47:29.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:47:29.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:47:29.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:47:29.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:47:29.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:47:29.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:47:29.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:47:29.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:47:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:47:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.907427 -999.00  +14.30  15.69     91  +13.00 1 2 1 3 1     0    0 1.49 4.24 .N..W 16.1 15.7 160.2 19.8 15.6 -12.7 15.4 -11.3 15.2 -12.4 15.4 -13.8
2026-02-11T23:47:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:47:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:47:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.907427
2026-02-11T23:47:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:47:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:47:29.588 [DEBUG] [Thread-137961] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:47:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:47:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:47:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:47:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:46:55', tmtdew=0.77, humidity=95.1, cloud=0.0, wind=16.59, temperature=14.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:46:41.693', atlas_cloud=2, atlas_rain=1, zp_data=[2.0342499999999992, 0.052250000000000796, 0.09325000000000117, 0.24349999999999916, 1.3834999999999997, 0.9382500000000009, 1.242, nan, 0.23749999999999893, 0.06550000000000011, -0.011750000000001037, 0.09200000000000053, 0.20699999999999896, 0.1222499999999993, 0.12549999999999883, 0.18900000000000006, 0.1352499999999992, 0.1144999999999996, 0.05599999999999916, 0.06424999999999947, 0.09699999999999953, 0.044749999999998735, 0.03575000000000017, 0.05075000000000074, 0.0909999999999993, 0.11550000000000082, 0.05674999999999919, 0.06550000000000011, 0.08900000000000041, 0.13700000000000045, 0.08300000000000018, 0.1490000000000009, 0.13874999999999993], zp_timestamp='2026-02-11T21:43:00')
2026-02-11T23:47:29.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:47:29.684 [DEBUG] [Thread-137964] [transport.py] [_log()] starting thread (client mode): 0xa2d9cb20
2026-02-11T23:47:29.685 [DEBUG] [Thread-137964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:47:29.699 [DEBUG] [Thread-137964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:47:29.699 [INFO] [Thread-137964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] client lang: <none>
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] server lang: <none>
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] kex follows: False
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:47:29.707 [DEBUG] [Thread-137964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:47:29.708 [DEBUG] [Thread-137964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:47:29.708 [DEBUG] [Thread-137964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:47:29.708 [DEBUG] [Thread-137964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:47:29.708 [DEBUG] [Thread-137964] [transport.py] [_log()] Compression: none
2026-02-11T23:47:29.708 [DEBUG] [Thread-137964] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:47:29.767 [DEBUG] [Thread-137964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:47:29.767 [DEBUG] [Thread-137964] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:47:29.768 [DEBUG] [Thread-137964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:47:29.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:47:29.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:47:29.826 [DEBUG] [Thread-137964] [transport.py] [_log()] userauth is OK
2026-02-11T23:47:29.826 [DEBUG] [Thread-137964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:47:29.826 [DEBUG] [Thread-137964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:47:29.827 [DEBUG] [Thread-137964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:47:29.827 [DEBUG] [Thread-137964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:47:29.845 [INFO] [Thread-137964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:47:29.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:47:29.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:47:30.720 [DEBUG] [Thread-137964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:47:30.720 [DEBUG] [Thread-137964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:47:30.769 [DEBUG] [Thread-137964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:47:30.769 [DEBUG] [Thread-137964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:47:30.778 [DEBUG] [Thread-137964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:47:30.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:47:30.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')
2026-02-11T23:47:30.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:47:30.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:47:30.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:47:30.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:47:30.815 [DEBUG] [Thread-137964] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:47:38.822 [DEBUG] [Thread-137966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:47:52.781 [DEBUG] [Thread-137967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:47:53.881 [DEBUG] [Thread-137968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:47:58.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:47:58.187 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:48:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:48:00.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:48:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:48:02.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 47, 30), 0.76, 95.13, 0.0, 18.12, 14.35, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:48:02.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:47:30
2026-02-11T23:48:03.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:48:03.512 [DEBUG] [Thread-137969] [transport.py] [_log()] starting thread (client mode): 0xa2d9fa00
2026-02-11T23:48:03.512 [DEBUG] [Thread-137969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:48:03.528 [DEBUG] [Thread-137969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:48:03.528 [INFO] [Thread-137969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:48:03.531 [DEBUG] [Thread-137969] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:48:03.531 [DEBUG] [Thread-137969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] client lang: <none>
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] server lang: <none>
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] kex follows: False
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] Compression: none
2026-02-11T23:48:03.532 [DEBUG] [Thread-137969] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:48:03.552 [DEBUG] [Thread-137969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:48:03.552 [DEBUG] [Thread-137969] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:48:03.553 [DEBUG] [Thread-137969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:48:03.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:48:03.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:48:03.555 [DEBUG] [Thread-137969] [transport.py] [_log()] userauth is OK
2026-02-11T23:48:03.556 [DEBUG] [Thread-137969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:48:03.556 [DEBUG] [Thread-137969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:48:03.556 [DEBUG] [Thread-137969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:48:03.556 [DEBUG] [Thread-137969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:48:03.580 [INFO] [Thread-137969] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:48:03.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:48:04.222 [DEBUG] [Thread-137969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:48:04.222 [DEBUG] [Thread-137969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:48:04.223 [DEBUG] [Thread-137969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:48:04.264 [DEBUG] [Thread-137969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:48:04.264 [DEBUG] [Thread-137969] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:48:04.267 [DEBUG] [Thread-137969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:48:04.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:48:04.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:48:04.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:48:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:48:04.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:48:04.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:48:04.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:48:04.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:48:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:48:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.907774 -999.00  +14.30  10.47     91  +13.00 1 2 1 3 1     0    0 1.45 3.49 .N..W 12.5 10.5 164.8 18.0 15.5 -14.0 15.3 -13.0 15.2 -13.3 15.4 -14.5
2026-02-11T23:48:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:48:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:48:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.907774
2026-02-11T23:48:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:48:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:48:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:48:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:48:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:48:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:47:30', tmtdew=0.76, humidity=95.13, cloud=0.0, wind=18.12, temperature=14.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:47:11.674', atlas_cloud=2, atlas_rain=1, zp_data=[2.0342499999999992, 0.052250000000000796, 0.09325000000000117, 0.24349999999999916, 1.3834999999999997, 0.9382500000000009, 1.242, nan, 0.23749999999999893, 0.06550000000000011, -0.011750000000001037, 0.09200000000000053, 0.20699999999999896, 0.1222499999999993, 0.12549999999999883, 0.18900000000000006, 0.1352499999999992, 0.1144999999999996, 0.05599999999999916, 0.06424999999999947, 0.09699999999999953, 0.044749999999998735, 0.03575000000000017, 0.05075000000000074, 0.0909999999999993, 0.11550000000000082, 0.05674999999999919, 0.06550000000000011, 0.08900000000000041, 0.13700000000000045, 0.08300000000000018, 0.1490000000000009, 0.13874999999999993], zp_timestamp='2026-02-11T21:43:00')
2026-02-11T23:48:04.294 [DEBUG] [Thread-137969] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:48:04.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:48:04.389 [DEBUG] [Thread-137972] [transport.py] [_log()] starting thread (client mode): 0xa2d96ad0
2026-02-11T23:48:04.390 [DEBUG] [Thread-137972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:48:04.406 [DEBUG] [Thread-137972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:48:04.406 [INFO] [Thread-137972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:48:04.415 [DEBUG] [Thread-137972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] client lang: <none>
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] server lang: <none>
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] kex follows: False
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] Compression: none
2026-02-11T23:48:04.416 [DEBUG] [Thread-137972] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:48:04.474 [DEBUG] [Thread-137972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:48:04.475 [DEBUG] [Thread-137972] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:48:04.476 [DEBUG] [Thread-137972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:48:04.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:48:04.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:48:04.535 [DEBUG] [Thread-137972] [transport.py] [_log()] userauth is OK
2026-02-11T23:48:04.535 [DEBUG] [Thread-137972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:48:04.536 [DEBUG] [Thread-137972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:48:04.536 [DEBUG] [Thread-137972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:48:04.536 [DEBUG] [Thread-137972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:48:04.554 [INFO] [Thread-137972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:48:04.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:48:04.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:48:05.412 [DEBUG] [Thread-137972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:48:05.412 [DEBUG] [Thread-137972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:48:05.461 [DEBUG] [Thread-137972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:48:05.461 [DEBUG] [Thread-137972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:48:05.472 [DEBUG] [Thread-137972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:48:05.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:48:05.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')
2026-02-11T23:48:05.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:48:05.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:48:05.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:48:05.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:48:05.515 [DEBUG] [Thread-137972] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:48:08.918 [DEBUG] [Thread-137974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:48:23.974 [DEBUG] [Thread-137975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:48:35.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:48:35.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:48: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
2026-02-11T23:48:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 48, 5), 0.76, 95.15, 0.0, 19.09, 14.39, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:48:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:48:05
2026-02-11T23:48:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:48:37.892 [DEBUG] [Thread-137976] [transport.py] [_log()] starting thread (client mode): 0xa2d94070
2026-02-11T23:48:37.892 [DEBUG] [Thread-137976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:48:37.913 [DEBUG] [Thread-137976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:48:37.913 [INFO] [Thread-137976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] client lang: <none>
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] server lang: <none>
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] kex follows: False
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:48:37.916 [DEBUG] [Thread-137976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:48:37.917 [DEBUG] [Thread-137976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:48:37.917 [DEBUG] [Thread-137976] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:48:37.917 [DEBUG] [Thread-137976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:48:37.917 [DEBUG] [Thread-137976] [transport.py] [_log()] Compression: none
2026-02-11T23:48:37.917 [DEBUG] [Thread-137976] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:48:37.935 [DEBUG] [Thread-137976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:48:37.936 [DEBUG] [Thread-137976] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:48:37.936 [DEBUG] [Thread-137976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:48:37.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:48:37.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:48:37.938 [DEBUG] [Thread-137976] [transport.py] [_log()] userauth is OK
2026-02-11T23:48:37.939 [DEBUG] [Thread-137976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:48:37.939 [DEBUG] [Thread-137976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:48:37.939 [DEBUG] [Thread-137976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:48:37.940 [DEBUG] [Thread-137976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:48:37.975 [INFO] [Thread-137976] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:48:37.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:48:38.637 [DEBUG] [Thread-137976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:48:38.637 [DEBUG] [Thread-137976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:48:38.638 [DEBUG] [Thread-137976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:48:38.679 [DEBUG] [Thread-137976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:48:38.679 [DEBUG] [Thread-137976] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:48:38.682 [DEBUG] [Thread-137976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:48:38.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:48:38.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:48:38.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:48:38.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:48:38.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:48:38.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:48:38.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:48:38.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:48:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:48:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.908121 -999.00  +14.30  12.97     91  +13.00 1 2 1 3 1     0    0 1.46 2.79 .N..W 14.0 13.0 177.1 16.6 15.5 -15.1 15.3 -14.7 15.1 -13.8 15.4 -14.9
2026-02-11T23:48:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:48:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:48:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.908121
2026-02-11T23:48:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:48:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:48:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:48:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:48:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:48:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:48:05', tmtdew=0.76, humidity=95.15, cloud=0.0, wind=19.09, temperature=14.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:47:41.654', atlas_cloud=2, atlas_rain=1, zp_data=[2.29925, 1.4082500000000007, 1.4122500000000002, 1.475999999999999, 1.912, 1.6842500000000005, 1.722999999999999, nan, 1.0484999999999989, 1.8315000000000001, 1.5342499999999992, 0.9139999999999997, 0.6619999999999999, 0.45924999999999905, 0.4989999999999988, 0.653999999999999, 1.0402500000000012, 2.7195, 1.708499999999999, 0.6312499999999988, 0.35449999999999804, 0.22674999999999912, 0.25125000000000064, 0.37074999999999925, 1.081999999999999, 1.3425000000000002, 0.7567500000000003, 0.5095000000000001, 0.45500000000000007, 0.3180000000000014, 0.32500000000000107, 0.3500000000000014, 0.9067499999999988], zp_timestamp='2026-02-11T21:47:00')
2026-02-11T23:48:38.709 [DEBUG] [Thread-137976] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:48:38.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:48:38.806 [DEBUG] [Thread-137979] [transport.py] [_log()] starting thread (client mode): 0xa2d9dff0
2026-02-11T23:48:38.806 [DEBUG] [Thread-137979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:48:38.822 [DEBUG] [Thread-137979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:48:38.822 [INFO] [Thread-137979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:48:38.830 [DEBUG] [Thread-137979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:48:38.830 [DEBUG] [Thread-137979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] client lang: <none>
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] server lang: <none>
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] kex follows: False
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:48:38.831 [DEBUG] [Thread-137979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:48:38.832 [DEBUG] [Thread-137979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:48:38.832 [DEBUG] [Thread-137979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:48:38.832 [DEBUG] [Thread-137979] [transport.py] [_log()] Compression: none
2026-02-11T23:48:38.832 [DEBUG] [Thread-137979] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:48:38.887 [DEBUG] [Thread-137979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:48:38.888 [DEBUG] [Thread-137979] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:48:38.888 [DEBUG] [Thread-137979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:48:38.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:48:38.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:48:38.943 [DEBUG] [Thread-137979] [transport.py] [_log()] userauth is OK
2026-02-11T23:48:38.943 [DEBUG] [Thread-137979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:48:38.943 [DEBUG] [Thread-137979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:48:38.943 [DEBUG] [Thread-137979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:48:38.943 [DEBUG] [Thread-137979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:48:38.965 [INFO] [Thread-137979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:48:38.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:48:38.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:48:39.012 [DEBUG] [Thread-137981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:48:39.777 [DEBUG] [Thread-137979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:48:39.777 [DEBUG] [Thread-137979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:48:39.826 [DEBUG] [Thread-137979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:48:39.826 [DEBUG] [Thread-137979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:48:39.836 [DEBUG] [Thread-137979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:48:39.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:48:39.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')
2026-02-11T23:48:39.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
2026-02-11T23:48:39.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:48:39.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:48:39.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:48:39.873 [DEBUG] [Thread-137979] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:48:52.848 [DEBUG] [Thread-137982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:48:54.064 [DEBUG] [Thread-137983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:48:58.389 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:48:58.390 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:49:09.099 [DEBUG] [Thread-137984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:49:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:49:09.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:49:09.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
2026-02-11T23:49:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 48, 42), 1.22, 92.29, 0.0, 21.52, 14.71, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:49:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:48:42
2026-02-11T23:49:12.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:49:12.292 [DEBUG] [Thread-137985] [transport.py] [_log()] starting thread (client mode): 0xa57e03a0
2026-02-11T23:49:12.292 [DEBUG] [Thread-137985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:49:12.314 [DEBUG] [Thread-137985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:49:12.314 [INFO] [Thread-137985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:49:12.317 [DEBUG] [Thread-137985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:49:12.317 [DEBUG] [Thread-137985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] client lang: <none>
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] server lang: <none>
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] kex follows: False
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:49:12.318 [DEBUG] [Thread-137985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:49:12.319 [DEBUG] [Thread-137985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:49:12.319 [DEBUG] [Thread-137985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:49:12.319 [DEBUG] [Thread-137985] [transport.py] [_log()] Compression: none
2026-02-11T23:49:12.319 [DEBUG] [Thread-137985] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:49:12.335 [DEBUG] [Thread-137985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:49:12.335 [DEBUG] [Thread-137985] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:49:12.336 [DEBUG] [Thread-137985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:49:12.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:49:12.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:49:12.338 [DEBUG] [Thread-137985] [transport.py] [_log()] userauth is OK
2026-02-11T23:49:12.338 [DEBUG] [Thread-137985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:49:12.338 [DEBUG] [Thread-137985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:49:12.338 [DEBUG] [Thread-137985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:49:12.338 [DEBUG] [Thread-137985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:49:12.356 [INFO] [Thread-137985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:49:12.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:49:13.125 [DEBUG] [Thread-137985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:49:13.125 [DEBUG] [Thread-137985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:49:13.126 [DEBUG] [Thread-137985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:49:13.167 [DEBUG] [Thread-137985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:49:13.168 [DEBUG] [Thread-137985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:49:13.170 [DEBUG] [Thread-137985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:49:13.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:49:13.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:49:13.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:49:13.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:49:13.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:49:13.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:49:13.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:49:13.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:49:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:49:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.908816 -999.00  +14.30  11.64     91  +13.00 1 2 1 3 1     0    0 1.41 2.01 zNeSW 12.9 11.6 174.0 18.1 15.5 -17.6 15.3 -16.5 15.2 -16.0 15.4 -17.0
2026-02-11T23:49:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:49:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:49:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.908816
2026-02-11T23:49:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:49:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:49:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:49:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:49:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:49:13.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:48:42', tmtdew=1.22, humidity=92.29, cloud=0.0, wind=21.52, temperature=14.71, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:48:41.702', atlas_cloud=2, atlas_rain=1, zp_data=[2.29925, 1.4082500000000007, 1.4122500000000002, 1.475999999999999, 1.912, 1.6842500000000005, 1.722999999999999, nan, 1.0484999999999989, 1.8315000000000001, 1.5342499999999992, 0.9139999999999997, 0.6619999999999999, 0.45924999999999905, 0.4989999999999988, 0.653999999999999, 1.0402500000000012, 2.7195, 1.708499999999999, 0.6312499999999988, 0.35449999999999804, 0.22674999999999912, 0.25125000000000064, 0.37074999999999925, 1.081999999999999, 1.3425000000000002, 0.7567500000000003, 0.5095000000000001, 0.45500000000000007, 0.3180000000000014, 0.32500000000000107, 0.3500000000000014, 0.9067499999999988], zp_timestamp='2026-02-11T21:47:00')
2026-02-11T23:49:13.191 [DEBUG] [Thread-137985] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:49:13.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:49:13.286 [DEBUG] [Thread-137988] [transport.py] [_log()] starting thread (client mode): 0xa57e0d60
2026-02-11T23:49:13.286 [DEBUG] [Thread-137988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:49:13.302 [DEBUG] [Thread-137988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:49:13.303 [INFO] [Thread-137988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:49:13.310 [DEBUG] [Thread-137988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:49:13.310 [DEBUG] [Thread-137988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:49:13.310 [DEBUG] [Thread-137988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:49:13.310 [DEBUG] [Thread-137988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:13.310 [DEBUG] [Thread-137988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:13.310 [DEBUG] [Thread-137988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] client lang: <none>
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] server lang: <none>
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] kex follows: False
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] Compression: none
2026-02-11T23:49:13.311 [DEBUG] [Thread-137988] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:49:13.366 [DEBUG] [Thread-137988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:49:13.367 [DEBUG] [Thread-137988] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:49:13.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:49:13.368 [DEBUG] [Thread-137988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:49:13.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:49:13.423 [DEBUG] [Thread-137988] [transport.py] [_log()] userauth is OK
2026-02-11T23:49:13.423 [DEBUG] [Thread-137988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:49:13.423 [DEBUG] [Thread-137988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:49:13.423 [DEBUG] [Thread-137988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:49:13.423 [DEBUG] [Thread-137988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:49:13.446 [INFO] [Thread-137988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:49:13.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:49:13.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:49:14.278 [DEBUG] [Thread-137988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:49:14.279 [DEBUG] [Thread-137988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:49:14.327 [DEBUG] [Thread-137988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:49:14.327 [DEBUG] [Thread-137988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:49:14.336 [DEBUG] [Thread-137988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:49:14.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:49:14.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:49:14.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:49:14.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:49:14.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:49:14.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:49:14.371 [DEBUG] [Thread-137988] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:49:24.135 [DEBUG] [Thread-137990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:49:39.192 [DEBUG] [Thread-137991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:49:44.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:49:44.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:49:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:49:46.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 49, 17), 0.76, 95.13, 0.0, 17.73, 14.36, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:49:46.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:49:17
2026-02-11T23:49:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:49:47.084 [DEBUG] [Thread-137992] [transport.py] [_log()] starting thread (client mode): 0xa57e2ef0
2026-02-11T23:49:47.084 [DEBUG] [Thread-137992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:49:47.104 [DEBUG] [Thread-137992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:49:47.105 [INFO] [Thread-137992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] client lang: <none>
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] server lang: <none>
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] kex follows: False
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] Compression: none
2026-02-11T23:49:47.108 [DEBUG] [Thread-137992] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:49:47.129 [DEBUG] [Thread-137992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:49:47.130 [DEBUG] [Thread-137992] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:49:47.130 [DEBUG] [Thread-137992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:49:47.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:49:47.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:49:47.133 [DEBUG] [Thread-137992] [transport.py] [_log()] userauth is OK
2026-02-11T23:49:47.133 [DEBUG] [Thread-137992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:49:47.133 [DEBUG] [Thread-137992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:49:47.133 [DEBUG] [Thread-137992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:49:47.133 [DEBUG] [Thread-137992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:49:47.158 [INFO] [Thread-137992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:49:47.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:49:47.785 [DEBUG] [Thread-137992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:49:47.785 [DEBUG] [Thread-137992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:49:47.786 [DEBUG] [Thread-137992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:49:47.826 [DEBUG] [Thread-137992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:49:47.826 [DEBUG] [Thread-137992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:49:47.829 [DEBUG] [Thread-137992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:49:47.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:49:47.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:49:47.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:49:47.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:49:47.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:49:47.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:49:47.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:49:47.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:49:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:49:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.909163 -999.00  +14.30  12.12     91  +13.00 1 1 1 3 1     0    0 1.39 1.43 ZNESW 12.9 12.1 176.2 18.0 15.5 -17.7 15.3 -17.1 15.2 -16.2 15.4 -17.2
2026-02-11T23:49:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:49:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:49:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.909163
2026-02-11T23:49:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:49:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:49:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:49:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:49:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:49:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:49:17', tmtdew=0.76, humidity=95.13, cloud=0.0, wind=17.73, temperature=14.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:49:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[2.29925, 1.4082500000000007, 1.4122500000000002, 1.475999999999999, 1.912, 1.6842500000000005, 1.722999999999999, nan, 1.0484999999999989, 1.8315000000000001, 1.5342499999999992, 0.9139999999999997, 0.6619999999999999, 0.45924999999999905, 0.4989999999999988, 0.653999999999999, 1.0402500000000012, 2.7195, 1.708499999999999, 0.6312499999999988, 0.35449999999999804, 0.22674999999999912, 0.25125000000000064, 0.37074999999999925, 1.081999999999999, 1.3425000000000002, 0.7567500000000003, 0.5095000000000001, 0.45500000000000007, 0.3180000000000014, 0.32500000000000107, 0.3500000000000014, 0.9067499999999988], zp_timestamp='2026-02-11T21:47:00')
2026-02-11T23:49:47.855 [DEBUG] [Thread-137992] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:49:47.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:49:47.958 [DEBUG] [Thread-137995] [transport.py] [_log()] starting thread (client mode): 0xa57e0d30
2026-02-11T23:49:47.958 [DEBUG] [Thread-137995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:49:47.973 [DEBUG] [Thread-137995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:49:47.973 [INFO] [Thread-137995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] client lang: <none>
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] server lang: <none>
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] kex follows: False
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:49:47.983 [DEBUG] [Thread-137995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:49:47.984 [DEBUG] [Thread-137995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:49:47.984 [DEBUG] [Thread-137995] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:49:47.984 [DEBUG] [Thread-137995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:49:47.984 [DEBUG] [Thread-137995] [transport.py] [_log()] Compression: none
2026-02-11T23:49:47.984 [DEBUG] [Thread-137995] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:49:48.041 [DEBUG] [Thread-137995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:49:48.041 [DEBUG] [Thread-137995] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:49:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:49:48.041 [DEBUG] [Thread-137995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:49:48.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:49:48.100 [DEBUG] [Thread-137995] [transport.py] [_log()] userauth is OK
2026-02-11T23:49:48.100 [DEBUG] [Thread-137995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:49:48.101 [DEBUG] [Thread-137995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:49:48.101 [DEBUG] [Thread-137995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:49:48.101 [DEBUG] [Thread-137995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:49:48.125 [INFO] [Thread-137995] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:49:48.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:49:48.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:49:48.967 [DEBUG] [Thread-137995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:49:48.967 [DEBUG] [Thread-137995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:49:49.015 [DEBUG] [Thread-137995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:49:49.016 [DEBUG] [Thread-137995] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:49:49.025 [DEBUG] [Thread-137995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:49:49.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:49:49.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:49:49.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:49:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:49:49.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:49:49.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:49:49.066 [DEBUG] [Thread-137995] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:49:52.916 [DEBUG] [Thread-137997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:49:54.228 [DEBUG] [Thread-137998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:49:58.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:49:58.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:50:09.291 [DEBUG] [Thread-137999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:50:19.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:50:19.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:50:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:50:21.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 49, 52), 0.76, 95.13, 0.0, 22.92, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:50:21.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:49:52
2026-02-11T23:50:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:50:22.099 [DEBUG] [Thread-138000] [transport.py] [_log()] starting thread (client mode): 0xa57e37c0
2026-02-11T23:50:22.099 [DEBUG] [Thread-138000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:50:22.120 [DEBUG] [Thread-138000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:50:22.120 [INFO] [Thread-138000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:50:22.123 [DEBUG] [Thread-138000] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:50:22.123 [DEBUG] [Thread-138000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:50:22.123 [DEBUG] [Thread-138000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:50:22.123 [DEBUG] [Thread-138000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:22.123 [DEBUG] [Thread-138000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:22.123 [DEBUG] [Thread-138000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] client lang: <none>
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] server lang: <none>
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] kex follows: False
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] Compression: none
2026-02-11T23:50:22.124 [DEBUG] [Thread-138000] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:50:22.140 [DEBUG] [Thread-138000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:50:22.141 [DEBUG] [Thread-138000] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:50:22.142 [DEBUG] [Thread-138000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:50:22.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:50:22.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:50:22.185 [DEBUG] [Thread-138000] [transport.py] [_log()] userauth is OK
2026-02-11T23:50:22.185 [DEBUG] [Thread-138000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:50:22.185 [DEBUG] [Thread-138000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:50:22.185 [DEBUG] [Thread-138000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:50:22.185 [DEBUG] [Thread-138000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:50:22.217 [INFO] [Thread-138000] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:50:22.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:50:22.954 [DEBUG] [Thread-138000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:50:22.955 [DEBUG] [Thread-138000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:50:22.955 [DEBUG] [Thread-138000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:50:22.996 [DEBUG] [Thread-138000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:50:22.996 [DEBUG] [Thread-138000] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:50:22.998 [DEBUG] [Thread-138000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:50:23.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:50:23.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:50:23.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:50:23.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:50:23.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:50:23.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:50:23.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:50:23.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:50:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:50:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.909510 -999.00  +14.30  14.38     91  +13.00 1 1 1 3 1     0    0 1.37 0.78 ZNESW 15.7 14.4 176.8 20.6 15.4 -17.7 15.3 -16.9 15.1 -16.3 15.4 -17.3
2026-02-11T23:50:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:50:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:50:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.909510
2026-02-11T23:50:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:50:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:50:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:50:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:50:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:50:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:49:52', tmtdew=0.76, humidity=95.13, cloud=0.0, wind=22.92, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:49:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[2.29925, 1.4082500000000007, 1.4122500000000002, 1.475999999999999, 1.912, 1.6842500000000005, 1.722999999999999, nan, 1.0484999999999989, 1.8315000000000001, 1.5342499999999992, 0.9139999999999997, 0.6619999999999999, 0.45924999999999905, 0.4989999999999988, 0.653999999999999, 1.0402500000000012, 2.7195, 1.708499999999999, 0.6312499999999988, 0.35449999999999804, 0.22674999999999912, 0.25125000000000064, 0.37074999999999925, 1.081999999999999, 1.3425000000000002, 0.7567500000000003, 0.5095000000000001, 0.45500000000000007, 0.3180000000000014, 0.32500000000000107, 0.3500000000000014, 0.9067499999999988], zp_timestamp='2026-02-11T21:47:00')
2026-02-11T23:50:23.021 [DEBUG] [Thread-138000] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:50:23.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:50:23.114 [DEBUG] [Thread-138003] [transport.py] [_log()] starting thread (client mode): 0xa57e3dc0
2026-02-11T23:50:23.114 [DEBUG] [Thread-138003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:50:23.129 [DEBUG] [Thread-138003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:50:23.129 [INFO] [Thread-138003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:50:23.136 [DEBUG] [Thread-138003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:50:23.136 [DEBUG] [Thread-138003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:50:23.136 [DEBUG] [Thread-138003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] client lang: <none>
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] server lang: <none>
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] kex follows: False
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] Compression: none
2026-02-11T23:50:23.137 [DEBUG] [Thread-138003] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:50:23.195 [DEBUG] [Thread-138003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:50:23.195 [DEBUG] [Thread-138003] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:50:23.196 [DEBUG] [Thread-138003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:50:23.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:50:23.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:50:23.252 [DEBUG] [Thread-138003] [transport.py] [_log()] userauth is OK
2026-02-11T23:50:23.252 [DEBUG] [Thread-138003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:50:23.252 [DEBUG] [Thread-138003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:50:23.252 [DEBUG] [Thread-138003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:50:23.252 [DEBUG] [Thread-138003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:50:23.271 [INFO] [Thread-138003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:50:23.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:50:23.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:50:24.103 [DEBUG] [Thread-138003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:50:24.104 [DEBUG] [Thread-138003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:50:24.151 [DEBUG] [Thread-138003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:50:24.152 [DEBUG] [Thread-138003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:50:24.161 [DEBUG] [Thread-138003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:50:24.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:50:24.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')
2026-02-11T23:50:24.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:50:24.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:50:24.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:50:24.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:50:24.196 [DEBUG] [Thread-138003] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:50:24.325 [DEBUG] [Thread-138005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:50:39.376 [DEBUG] [Thread-138006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:50:52.988 [DEBUG] [Thread-138007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:50:54.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:50:54.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:50:54.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:50:54.412 [DEBUG] [Thread-138008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:50:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 50, 28), 0.76, 95.16, 0.0, 21.44, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:50:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:50:28
2026-02-11T23:50:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:50:56.530 [DEBUG] [Thread-138009] [transport.py] [_log()] starting thread (client mode): 0xa57e2620
2026-02-11T23:50:56.530 [DEBUG] [Thread-138009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:50:56.550 [DEBUG] [Thread-138009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:50:56.550 [INFO] [Thread-138009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:50:56.553 [DEBUG] [Thread-138009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] client lang: <none>
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] server lang: <none>
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] kex follows: False
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] Compression: none
2026-02-11T23:50:56.554 [DEBUG] [Thread-138009] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:50:56.574 [DEBUG] [Thread-138009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:50:56.575 [DEBUG] [Thread-138009] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:50:56.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:50:56.576 [DEBUG] [Thread-138009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:50:56.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:50:56.578 [DEBUG] [Thread-138009] [transport.py] [_log()] userauth is OK
2026-02-11T23:50:56.579 [DEBUG] [Thread-138009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:50:56.579 [DEBUG] [Thread-138009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:50:56.579 [DEBUG] [Thread-138009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:50:56.579 [DEBUG] [Thread-138009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:50:56.615 [INFO] [Thread-138009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:50:56.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:50:57.279 [DEBUG] [Thread-138009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:50:57.280 [DEBUG] [Thread-138009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:50:57.280 [DEBUG] [Thread-138009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:50:57.320 [DEBUG] [Thread-138009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:50:57.321 [DEBUG] [Thread-138009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:50:57.324 [DEBUG] [Thread-138009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:50:57.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:50:57.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:50:57.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:50:57.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:50:57.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:50:57.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:50:57.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:50:57.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:50:57.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:50:57.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.909857 -999.00  +14.30  12.26     91  +13.00 1 1 1 3 1     0    0 1.39 0.14 ZNESW 14.9 12.3 169.0 21.2 15.4 -17.9 15.2 -17.3 15.1 -16.2 15.4 -17.2
2026-02-11T23:50:57.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:50:57.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:50:57.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.909857
2026-02-11T23:50:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:50:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:50:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:50:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:50:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:50:57.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:50:28', tmtdew=0.76, humidity=95.16, cloud=0.0, wind=21.44, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:50:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[2.29925, 1.4082500000000007, 1.4122500000000002, 1.475999999999999, 1.912, 1.6842500000000005, 1.722999999999999, nan, 1.0484999999999989, 1.8315000000000001, 1.5342499999999992, 0.9139999999999997, 0.6619999999999999, 0.45924999999999905, 0.4989999999999988, 0.653999999999999, 1.0402500000000012, 2.7195, 1.708499999999999, 0.6312499999999988, 0.35449999999999804, 0.22674999999999912, 0.25125000000000064, 0.37074999999999925, 1.081999999999999, 1.3425000000000002, 0.7567500000000003, 0.5095000000000001, 0.45500000000000007, 0.3180000000000014, 0.32500000000000107, 0.3500000000000014, 0.9067499999999988], zp_timestamp='2026-02-11T21:47:00')
2026-02-11T23:50:57.356 [DEBUG] [Thread-138009] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:50:57.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:50:57.452 [DEBUG] [Thread-138012] [transport.py] [_log()] starting thread (client mode): 0xa57e37f0
2026-02-11T23:50:57.452 [DEBUG] [Thread-138012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:50:57.467 [DEBUG] [Thread-138012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:50:57.467 [INFO] [Thread-138012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:50:57.475 [DEBUG] [Thread-138012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] client lang: <none>
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] server lang: <none>
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] kex follows: False
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:50:57.476 [DEBUG] [Thread-138012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:50:57.477 [DEBUG] [Thread-138012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:50:57.477 [DEBUG] [Thread-138012] [transport.py] [_log()] Compression: none
2026-02-11T23:50:57.477 [DEBUG] [Thread-138012] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:50:57.536 [DEBUG] [Thread-138012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:50:57.537 [DEBUG] [Thread-138012] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:50:57.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:50:57.538 [DEBUG] [Thread-138012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:50:57.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:50:57.594 [DEBUG] [Thread-138012] [transport.py] [_log()] userauth is OK
2026-02-11T23:50:57.594 [DEBUG] [Thread-138012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:50:57.594 [DEBUG] [Thread-138012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:50:57.594 [DEBUG] [Thread-138012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:50:57.594 [DEBUG] [Thread-138012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:50:57.613 [INFO] [Thread-138012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:50:57.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:50:57.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:50:58.440 [DEBUG] [Thread-138012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:50:58.441 [DEBUG] [Thread-138012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:50:58.488 [DEBUG] [Thread-138012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:50:58.488 [DEBUG] [Thread-138012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:50:58.496 [DEBUG] [Thread-138012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:50:58.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:50:58.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:50:58.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:50:58.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:50:58.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:50:58.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:50:58.529 [DEBUG] [Thread-138012] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:50:58.797 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:50:58.798 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:51:09.453 [DEBUG] [Thread-138014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:51:24.498 [DEBUG] [Thread-138015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:51:28.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:51:28.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:51:28.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
2026-02-11T23:51:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 51, 3), 0.76, 95.16, 0.0, 21.3, 14.34, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:51:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:51:03
2026-02-11T23:51:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:51:30.858 [DEBUG] [Thread-138016] [transport.py] [_log()] starting thread (client mode): 0xa57e2aa0
2026-02-11T23:51:30.859 [DEBUG] [Thread-138016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:51:30.879 [DEBUG] [Thread-138016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:51:30.879 [INFO] [Thread-138016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:51:30.882 [DEBUG] [Thread-138016] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] client lang: <none>
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] server lang: <none>
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] kex follows: False
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] Compression: none
2026-02-11T23:51:30.883 [DEBUG] [Thread-138016] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:51:30.901 [DEBUG] [Thread-138016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:51:30.902 [DEBUG] [Thread-138016] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:51:30.902 [DEBUG] [Thread-138016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:51:30.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:51:30.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:51:30.905 [DEBUG] [Thread-138016] [transport.py] [_log()] userauth is OK
2026-02-11T23:51:30.905 [DEBUG] [Thread-138016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:51:30.905 [DEBUG] [Thread-138016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:51:30.905 [DEBUG] [Thread-138016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:51:30.905 [DEBUG] [Thread-138016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:51:30.931 [INFO] [Thread-138016] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:51:30.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:51:31.551 [DEBUG] [Thread-138016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:51:31.551 [DEBUG] [Thread-138016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:51:31.551 [DEBUG] [Thread-138016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:51:31.592 [DEBUG] [Thread-138016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:51:31.593 [DEBUG] [Thread-138016] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:51:31.595 [DEBUG] [Thread-138016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:51:31.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:51:31.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:51:31.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:51:31.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:51:31.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:51:31.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:51:31.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:51:31.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:51:31.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:51:31.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.910205 -999.00  +14.30  13.81     91  +13.00 1 1 1 3 1     0    0 1.37 -0.39 ZNESW 13.1 13.8 164.8 18.8 15.4 -17.8 15.2 -16.7 15.1 -16.2 15.4 -17.4
2026-02-11T23:51:31.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:51:31.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:51:31.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.910205
2026-02-11T23:51:31.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:51:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:51:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:51:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:51:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:51:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:51:03', tmtdew=0.76, humidity=95.16, cloud=0.0, wind=21.3, temperature=14.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:50:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:50:00')
2026-02-11T23:51:31.621 [DEBUG] [Thread-138016] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:51:31.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:51:31.717 [DEBUG] [Thread-138019] [transport.py] [_log()] starting thread (client mode): 0xa57e32e0
2026-02-11T23:51:31.717 [DEBUG] [Thread-138019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:51:31.732 [DEBUG] [Thread-138019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:51:31.732 [INFO] [Thread-138019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:51:31.740 [DEBUG] [Thread-138019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] client lang: <none>
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] server lang: <none>
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] kex follows: False
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] Compression: none
2026-02-11T23:51:31.741 [DEBUG] [Thread-138019] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:51:31.801 [DEBUG] [Thread-138019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:51:31.801 [DEBUG] [Thread-138019] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:51:31.802 [DEBUG] [Thread-138019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:51:31.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:51:31.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:51:31.856 [DEBUG] [Thread-138019] [transport.py] [_log()] userauth is OK
2026-02-11T23:51:31.857 [DEBUG] [Thread-138019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:51:31.857 [DEBUG] [Thread-138019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:51:31.857 [DEBUG] [Thread-138019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:51:31.857 [DEBUG] [Thread-138019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:51:31.876 [INFO] [Thread-138019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:51:31.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:51:31.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:51:32.695 [DEBUG] [Thread-138019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:51:32.696 [DEBUG] [Thread-138019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:51:32.744 [DEBUG] [Thread-138019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:51:32.744 [DEBUG] [Thread-138019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:51:32.753 [DEBUG] [Thread-138019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:51:32.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:51:32.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:51: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
2026-02-11T23:51:32.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:51:32.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:51:32.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:51:32.791 [DEBUG] [Thread-138019] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:51:39.540 [DEBUG] [Thread-138021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:51:53.049 [DEBUG] [Thread-138022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:51:54.604 [DEBUG] [Thread-138023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:51:59.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:51:59.002 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:52:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:52:02.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:52:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:52:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 51, 38), 1.21, 92.36, 0.0, 22.44, 14.68, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:52:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:51:38
2026-02-11T23:52:05.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:52:05.401 [DEBUG] [Thread-138024] [transport.py] [_log()] starting thread (client mode): 0xa57e3700
2026-02-11T23:52:05.401 [DEBUG] [Thread-138024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:52:05.422 [DEBUG] [Thread-138024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:52:05.422 [INFO] [Thread-138024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:52:05.425 [DEBUG] [Thread-138024] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:52:05.425 [DEBUG] [Thread-138024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:52:05.425 [DEBUG] [Thread-138024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:52:05.425 [DEBUG] [Thread-138024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] client lang: <none>
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] server lang: <none>
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] kex follows: False
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] Compression: none
2026-02-11T23:52:05.426 [DEBUG] [Thread-138024] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:52:05.445 [DEBUG] [Thread-138024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:52:05.446 [DEBUG] [Thread-138024] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:52:05.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:52:05.447 [DEBUG] [Thread-138024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:52:05.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:52:05.449 [DEBUG] [Thread-138024] [transport.py] [_log()] userauth is OK
2026-02-11T23:52:05.449 [DEBUG] [Thread-138024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:52:05.449 [DEBUG] [Thread-138024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:52:05.449 [DEBUG] [Thread-138024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:52:05.450 [DEBUG] [Thread-138024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:52:05.473 [INFO] [Thread-138024] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:52:05.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:52:06.110 [DEBUG] [Thread-138024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:52:06.111 [DEBUG] [Thread-138024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:52:06.111 [DEBUG] [Thread-138024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:52:06.152 [DEBUG] [Thread-138024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:52:06.153 [DEBUG] [Thread-138024] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:52:06.156 [DEBUG] [Thread-138024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:52:06.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:52:06.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:52:06.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:52:06.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:52:06.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:52:06.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:52:06.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:52:06.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:52:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:52:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.910552 -999.00  +14.30  15.62     91  +13.00 1 1 1 3 1     0    0 1.34 -0.95 ZNESW 12.9 15.6 180.4 17.4 15.4 -17.8 15.2 -17.1 15.1 -16.1 15.4 -17.3
2026-02-11T23:52:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:52:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:52:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.910552
2026-02-11T23:52:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:52:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:52:06.184 [DEBUG] [Thread-138024] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:52:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:52:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:52:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:52:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:51:38', tmtdew=1.21, humidity=92.36, cloud=0.0, wind=22.44, temperature=14.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:51:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:50:00')
2026-02-11T23:52:06.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:52:06.283 [DEBUG] [Thread-138027] [transport.py] [_log()] starting thread (client mode): 0xa57e0e80
2026-02-11T23:52:06.283 [DEBUG] [Thread-138027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:52:06.299 [DEBUG] [Thread-138027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:52:06.299 [INFO] [Thread-138027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:52:06.306 [DEBUG] [Thread-138027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] client lang: <none>
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] server lang: <none>
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] kex follows: False
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:52:06.307 [DEBUG] [Thread-138027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:52:06.308 [DEBUG] [Thread-138027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:52:06.308 [DEBUG] [Thread-138027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:52:06.308 [DEBUG] [Thread-138027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:52:06.308 [DEBUG] [Thread-138027] [transport.py] [_log()] Compression: none
2026-02-11T23:52:06.308 [DEBUG] [Thread-138027] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:52:06.368 [DEBUG] [Thread-138027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:52:06.368 [DEBUG] [Thread-138027] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:52:06.369 [DEBUG] [Thread-138027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:52:06.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:52:06.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:52:06.429 [DEBUG] [Thread-138027] [transport.py] [_log()] userauth is OK
2026-02-11T23:52:06.430 [DEBUG] [Thread-138027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:52:06.430 [DEBUG] [Thread-138027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:52:06.430 [DEBUG] [Thread-138027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:52:06.430 [DEBUG] [Thread-138027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:52:06.456 [INFO] [Thread-138027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:52:06.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:52:06.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:52:07.273 [DEBUG] [Thread-138027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:52:07.273 [DEBUG] [Thread-138027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:52:07.321 [DEBUG] [Thread-138027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:52:07.322 [DEBUG] [Thread-138027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:52:07.332 [DEBUG] [Thread-138027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:52:07.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:52:07.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:52:07.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:52:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:52:07.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:52:07.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:52:07.373 [DEBUG] [Thread-138027] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:52:09.641 [DEBUG] [Thread-138029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:52:24.695 [DEBUG] [Thread-138030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:52:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:52:37.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:52:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:52:39.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 52, 14), 0.81, 95.16, 0.0, 17.06, 14.31, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:52:39.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:52:14
2026-02-11T23:52:39.733 [DEBUG] [Thread-138031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:52:39.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:52:39.922 [DEBUG] [Thread-138032] [transport.py] [_log()] starting thread (client mode): 0xa8197dc0
2026-02-11T23:52:39.922 [DEBUG] [Thread-138032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:52:39.943 [DEBUG] [Thread-138032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:52:39.943 [INFO] [Thread-138032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] client lang: <none>
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] server lang: <none>
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] kex follows: False
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] Compression: none
2026-02-11T23:52:39.946 [DEBUG] [Thread-138032] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:52:39.963 [DEBUG] [Thread-138032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:52:39.964 [DEBUG] [Thread-138032] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:52:39.965 [DEBUG] [Thread-138032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:52:39.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:52:39.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:52:39.967 [DEBUG] [Thread-138032] [transport.py] [_log()] userauth is OK
2026-02-11T23:52:39.967 [DEBUG] [Thread-138032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:52:39.967 [DEBUG] [Thread-138032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:52:39.967 [DEBUG] [Thread-138032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:52:39.967 [DEBUG] [Thread-138032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:52:39.987 [INFO] [Thread-138032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:52:39.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:52:40.763 [DEBUG] [Thread-138032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:52:40.763 [DEBUG] [Thread-138032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:52:40.764 [DEBUG] [Thread-138032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:52:40.804 [DEBUG] [Thread-138032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:52:40.805 [DEBUG] [Thread-138032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:52:40.808 [DEBUG] [Thread-138032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:52:40.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:52:40.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:52:40.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:52:40.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:52:40.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:52:40.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:52:40.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:52:40.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:52:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:52:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.911246 -999.00  +14.30  14.78     91  +13.00 1 1 1 3 1     0    0 1.31 -2.24 ZNESW 13.5 14.8 165.8 19.3 15.4 -17.7 15.2 -16.7 15.1 -16.1 15.4 -17.1
2026-02-11T23:52:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:52:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:52:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.911246
2026-02-11T23:52:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:52:40.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:52:40.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:52:40.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:52:40.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:52:40.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:52:14', tmtdew=0.81, humidity=95.16, cloud=0.0, wind=17.06, temperature=14.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:52:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:50:00')
2026-02-11T23:52:40.834 [DEBUG] [Thread-138032] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:52:40.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:52:40.930 [DEBUG] [Thread-138035] [transport.py] [_log()] starting thread (client mode): 0xa2d9e410
2026-02-11T23:52:40.931 [DEBUG] [Thread-138035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:52:40.945 [DEBUG] [Thread-138035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:52:40.945 [INFO] [Thread-138035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:52:40.953 [DEBUG] [Thread-138035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:52:40.953 [DEBUG] [Thread-138035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:52:40.953 [DEBUG] [Thread-138035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:52:40.953 [DEBUG] [Thread-138035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] client lang: <none>
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] server lang: <none>
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] kex follows: False
2026-02-11T23:52:40.954 [DEBUG] [Thread-138035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:52:40.955 [DEBUG] [Thread-138035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:52:40.955 [DEBUG] [Thread-138035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:52:40.955 [DEBUG] [Thread-138035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:52:40.955 [DEBUG] [Thread-138035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:52:40.955 [DEBUG] [Thread-138035] [transport.py] [_log()] Compression: none
2026-02-11T23:52:40.955 [DEBUG] [Thread-138035] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:52:41.014 [DEBUG] [Thread-138035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:52:41.015 [DEBUG] [Thread-138035] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:52:41.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:52:41.016 [DEBUG] [Thread-138035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:52:41.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:52:41.074 [DEBUG] [Thread-138035] [transport.py] [_log()] userauth is OK
2026-02-11T23:52:41.074 [DEBUG] [Thread-138035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:52:41.074 [DEBUG] [Thread-138035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:52:41.075 [DEBUG] [Thread-138035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:52:41.075 [DEBUG] [Thread-138035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:52:41.093 [INFO] [Thread-138035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:52:41.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:52:41.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:52:41.895 [DEBUG] [Thread-138035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:52:41.896 [DEBUG] [Thread-138035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:52:41.946 [DEBUG] [Thread-138035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:52:41.954 [DEBUG] [Thread-138035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:52:41.966 [DEBUG] [Thread-138035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:52:41.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:52:41.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:52:41.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:52:41.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:52:41.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:52:41.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:52:42.003 [DEBUG] [Thread-138035] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:52:53.107 [DEBUG] [Thread-138037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:52:54.771 [DEBUG] [Thread-138038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:52:59.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:52:59.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:53:09.826 [DEBUG] [Thread-138039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:53:12.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:53:12.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:53:12.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:53:13.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 52, 50), 0.75, 95.2, 0.0, 17.77, 14.32, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:53:13.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:52:50
2026-02-11T23:53:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:53:14.406 [DEBUG] [Thread-138040] [transport.py] [_log()] starting thread (client mode): 0xa57e0460
2026-02-11T23:53:14.406 [DEBUG] [Thread-138040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:53:14.427 [DEBUG] [Thread-138040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:53:14.427 [INFO] [Thread-138040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:53:14.430 [DEBUG] [Thread-138040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] client lang: <none>
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] server lang: <none>
2026-02-11T23:53:14.431 [DEBUG] [Thread-138040] [transport.py] [_log()] kex follows: False
2026-02-11T23:53:14.432 [DEBUG] [Thread-138040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:53:14.432 [DEBUG] [Thread-138040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:53:14.432 [DEBUG] [Thread-138040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:53:14.432 [DEBUG] [Thread-138040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:53:14.432 [DEBUG] [Thread-138040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:53:14.432 [DEBUG] [Thread-138040] [transport.py] [_log()] Compression: none
2026-02-11T23:53:14.432 [DEBUG] [Thread-138040] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:53:14.451 [DEBUG] [Thread-138040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:53:14.452 [DEBUG] [Thread-138040] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:53:14.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:53:14.453 [DEBUG] [Thread-138040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:53:14.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:53:14.455 [DEBUG] [Thread-138040] [transport.py] [_log()] userauth is OK
2026-02-11T23:53:14.455 [DEBUG] [Thread-138040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:53:14.456 [DEBUG] [Thread-138040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:53:14.456 [DEBUG] [Thread-138040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:53:14.456 [DEBUG] [Thread-138040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:53:14.480 [INFO] [Thread-138040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:53:14.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:53:15.088 [DEBUG] [Thread-138040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:53:15.088 [DEBUG] [Thread-138040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:53:15.089 [DEBUG] [Thread-138040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:53:15.129 [DEBUG] [Thread-138040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:53:15.129 [DEBUG] [Thread-138040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:53:15.133 [DEBUG] [Thread-138040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:53:15.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:53:15.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:53:15.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:53:15.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:53:15.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:53:15.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:53:15.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:53:15.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:53:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:53:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.911594 -999.00  +14.30  13.30     91  +13.00 1 1 1 3 1     0    0 1.28 -3.12 ZNESW 14.6 13.3 176.6 17.4 15.4 -17.6 15.2 -16.8 15.1 -16.2 15.4 -17.2
2026-02-11T23:53:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:53:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:53:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.911594
2026-02-11T23:53:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:53:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:53:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:53:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:53:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-11T23:53:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:52:50', tmtdew=0.75, humidity=95.2, cloud=0.0, wind=17.77, temperature=14.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:52:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:50:00')
2026-02-11T23:53:15.161 [DEBUG] [Thread-138040] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:53:15.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:53:15.256 [DEBUG] [Thread-138043] [transport.py] [_log()] starting thread (client mode): 0xa57e3610
2026-02-11T23:53:15.256 [DEBUG] [Thread-138043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:53:15.271 [DEBUG] [Thread-138043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:53:15.271 [INFO] [Thread-138043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:53:15.278 [DEBUG] [Thread-138043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] client lang: <none>
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] server lang: <none>
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] kex follows: False
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] Compression: none
2026-02-11T23:53:15.279 [DEBUG] [Thread-138043] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:53:15.337 [DEBUG] [Thread-138043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:53:15.338 [DEBUG] [Thread-138043] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:53:15.339 [DEBUG] [Thread-138043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:53:15.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:53:15.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:53:15.393 [DEBUG] [Thread-138043] [transport.py] [_log()] userauth is OK
2026-02-11T23:53:15.394 [DEBUG] [Thread-138043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:53:15.394 [DEBUG] [Thread-138043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:53:15.394 [DEBUG] [Thread-138043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:53:15.394 [DEBUG] [Thread-138043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:53:15.413 [INFO] [Thread-138043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:53:15.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:53:15.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:53:16.267 [DEBUG] [Thread-138043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:53:16.268 [DEBUG] [Thread-138043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:53:16.315 [DEBUG] [Thread-138043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:53:16.316 [DEBUG] [Thread-138043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:53:16.325 [DEBUG] [Thread-138043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:53:16.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:53:16.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:53:16.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:53:16.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:53:16.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:53:16.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:53:16.361 [DEBUG] [Thread-138043] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:53:24.863 [DEBUG] [Thread-138045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:53:39.919 [DEBUG] [Thread-138046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:53:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:53:46.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:53:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:53:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 53, 26), 0.75, 95.21, 0.0, 16.89, 14.31, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:53:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:53:26
2026-02-11T23:53:49.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:53:49.203 [DEBUG] [Thread-138047] [transport.py] [_log()] starting thread (client mode): 0xa2d9f580
2026-02-11T23:53:49.203 [DEBUG] [Thread-138047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:53:49.223 [DEBUG] [Thread-138047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:53:49.223 [INFO] [Thread-138047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:53:49.226 [DEBUG] [Thread-138047] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:53:49.226 [DEBUG] [Thread-138047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] client lang: <none>
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] server lang: <none>
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] kex follows: False
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:53:49.227 [DEBUG] [Thread-138047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:53:49.228 [DEBUG] [Thread-138047] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:53:49.228 [DEBUG] [Thread-138047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:53:49.228 [DEBUG] [Thread-138047] [transport.py] [_log()] Compression: none
2026-02-11T23:53:49.228 [DEBUG] [Thread-138047] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:53:49.246 [DEBUG] [Thread-138047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:53:49.247 [DEBUG] [Thread-138047] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:53:49.247 [DEBUG] [Thread-138047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:53:49.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:53:49.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:53:49.249 [DEBUG] [Thread-138047] [transport.py] [_log()] userauth is OK
2026-02-11T23:53:49.249 [DEBUG] [Thread-138047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:53:49.250 [DEBUG] [Thread-138047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:53:49.250 [DEBUG] [Thread-138047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:53:49.250 [DEBUG] [Thread-138047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:53:49.269 [INFO] [Thread-138047] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:53:49.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:53:49.906 [DEBUG] [Thread-138047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:53:49.907 [DEBUG] [Thread-138047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:53:49.907 [DEBUG] [Thread-138047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:53:49.947 [DEBUG] [Thread-138047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:53:49.948 [DEBUG] [Thread-138047] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:53:49.950 [DEBUG] [Thread-138047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:53:49.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:53:49.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:53:49.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:53:49.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:53:49.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:53:49.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:53:49.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:53:49.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:53:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:53:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.911941 -999.00  +14.30   9.77     91  +13.00 1 2 1 3 1     0    0 1.23 -3.72 zNESW 13.7 9.8 179.6 18.3 15.4 -17.7 15.2 -17.0 15.0 -16.1 15.4 -17.2
2026-02-11T23:53:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:53:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:53:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.911941
2026-02-11T23:53:49.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:53:49.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:53:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:53:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:53:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:53:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:53:26', tmtdew=0.75, humidity=95.21, cloud=0.0, wind=16.89, temperature=14.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:53:11.702', atlas_cloud=2, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:50:00')
2026-02-11T23:53:49.976 [DEBUG] [Thread-138047] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:53:50.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:53:50.073 [DEBUG] [Thread-138050] [transport.py] [_log()] starting thread (client mode): 0xa2d9c490
2026-02-11T23:53:50.073 [DEBUG] [Thread-138050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:53:50.087 [DEBUG] [Thread-138050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:53:50.087 [INFO] [Thread-138050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:53:50.095 [DEBUG] [Thread-138050] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:53:50.095 [DEBUG] [Thread-138050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:53:50.095 [DEBUG] [Thread-138050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:53:50.095 [DEBUG] [Thread-138050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:50.095 [DEBUG] [Thread-138050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] client lang: <none>
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] server lang: <none>
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] kex follows: False
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] Compression: none
2026-02-11T23:53:50.096 [DEBUG] [Thread-138050] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:53:50.372 [DEBUG] [Thread-138050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:53:50.372 [DEBUG] [Thread-138050] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:53:50.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:53:50.373 [DEBUG] [Thread-138050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:53:50.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:53:50.430 [DEBUG] [Thread-138050] [transport.py] [_log()] userauth is OK
2026-02-11T23:53:50.431 [DEBUG] [Thread-138050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:53:50.431 [DEBUG] [Thread-138050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:53:50.431 [DEBUG] [Thread-138050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:53:50.431 [DEBUG] [Thread-138050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:53:50.451 [INFO] [Thread-138050] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:53:50.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:53:50.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:53:51.305 [DEBUG] [Thread-138050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:53:51.305 [DEBUG] [Thread-138050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:53:51.354 [DEBUG] [Thread-138050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:53:51.355 [DEBUG] [Thread-138050] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:53:51.364 [DEBUG] [Thread-138050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:53:51.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:53:51.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:53:51.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:53:51.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:53:51.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:53:51.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:53:51.401 [DEBUG] [Thread-138050] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:53:53.196 [DEBUG] [Thread-138052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:53:54.954 [DEBUG] [Thread-138053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:53:59.408 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:53:59.409 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:10.008 [DEBUG] [Thread-138054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:21.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:54:21.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:54: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
2026-02-11T23:54:23.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 54, 1), 0.75, 95.21, 0.0, 16.48, 14.29, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:54:23.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:54:01
2026-02-11T23:54:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:54:24.371 [DEBUG] [Thread-138055] [transport.py] [_log()] starting thread (client mode): 0xa2d9cc10
2026-02-11T23:54:24.372 [DEBUG] [Thread-138055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:54:24.390 [DEBUG] [Thread-138055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:54:24.391 [INFO] [Thread-138055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] client lang: <none>
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] server lang: <none>
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] kex follows: False
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] Compression: none
2026-02-11T23:54:24.394 [DEBUG] [Thread-138055] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:54:24.411 [DEBUG] [Thread-138055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:54:24.412 [DEBUG] [Thread-138055] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:54:24.413 [DEBUG] [Thread-138055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:54:24.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:54:24.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:54:24.415 [DEBUG] [Thread-138055] [transport.py] [_log()] userauth is OK
2026-02-11T23:54:24.415 [DEBUG] [Thread-138055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:54:24.415 [DEBUG] [Thread-138055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:54:24.415 [DEBUG] [Thread-138055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:54:24.415 [DEBUG] [Thread-138055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:54:24.440 [INFO] [Thread-138055] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:54:24.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:54:25.047 [DEBUG] [Thread-138057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:25.062 [DEBUG] [Thread-138055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:54:25.062 [DEBUG] [Thread-138055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:54:25.062 [DEBUG] [Thread-138055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:54:25.103 [DEBUG] [Thread-138055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:54:25.104 [DEBUG] [Thread-138055] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:54:25.107 [DEBUG] [Thread-138055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:54:25.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:54:25.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:54:25.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:54:25.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:54:25.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:54:25.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:54:25.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:54:25.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:54:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:54:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.912288 -999.00  +14.30  12.54     91  +13.00 1 2 1 3 1     0    0 1.25 -4.22 zNESW 13.1 12.5 174.4 17.2 15.4 -17.6 15.2 -16.7 15.1 -16.3 15.3 -17.2
2026-02-11T23:54:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:54:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:54:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.912288
2026-02-11T23:54:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:54:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:54:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:54:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:54:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:54:25.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:54:01', tmtdew=0.75, humidity=95.21, cloud=0.0, wind=16.48, temperature=14.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:53:41.683', atlas_cloud=2, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:52:00')
2026-02-11T23:54:25.136 [DEBUG] [Thread-138055] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:54:25.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:54:25.233 [DEBUG] [Thread-138059] [transport.py] [_log()] starting thread (client mode): 0xa2d9eb90
2026-02-11T23:54:25.233 [DEBUG] [Thread-138059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:54:25.249 [DEBUG] [Thread-138059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:54:25.249 [INFO] [Thread-138059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:54:25.256 [DEBUG] [Thread-138059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:54:25.256 [DEBUG] [Thread-138059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:54:25.257 [DEBUG] [Thread-138059] [transport.py] [_log()] client lang: <none>
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] server lang: <none>
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] kex follows: False
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:54:25.258 [DEBUG] [Thread-138059] [transport.py] [_log()] Compression: none
2026-02-11T23:54:25.259 [DEBUG] [Thread-138059] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:54:25.314 [DEBUG] [Thread-138059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:54:25.314 [DEBUG] [Thread-138059] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:54:25.315 [DEBUG] [Thread-138059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:54:25.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:54:25.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:54:25.371 [DEBUG] [Thread-138059] [transport.py] [_log()] userauth is OK
2026-02-11T23:54:25.371 [DEBUG] [Thread-138059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:54:25.371 [DEBUG] [Thread-138059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:54:25.372 [DEBUG] [Thread-138059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:54:25.372 [DEBUG] [Thread-138059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:54:25.391 [INFO] [Thread-138059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:54:25.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:54:25.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:54:26.261 [DEBUG] [Thread-138059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:54:26.262 [DEBUG] [Thread-138059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:54:26.311 [DEBUG] [Thread-138059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:54:26.311 [DEBUG] [Thread-138059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:54:26.322 [DEBUG] [Thread-138059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:54:26.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:54:26.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')
2026-02-11T23:54:26.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:54:26.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:54:26.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:54:26.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:54:26.363 [DEBUG] [Thread-138059] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:54:40.083 [DEBUG] [Thread-138061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:53.282 [DEBUG] [Thread-138062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:55.135 [DEBUG] [Thread-138063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:54:56.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:54:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:54:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 54, 37), 1.21, 92.36, 0.0, 22.05, 14.58, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:54:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:54:37
2026-02-11T23:54:58.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:54:58.880 [DEBUG] [Thread-138064] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-11T23:54:58.880 [DEBUG] [Thread-138064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:54:58.896 [DEBUG] [Thread-138064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:54:58.896 [INFO] [Thread-138064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] client lang: <none>
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] server lang: <none>
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] kex follows: False
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:54:58.899 [DEBUG] [Thread-138064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:54:58.900 [DEBUG] [Thread-138064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:54:58.900 [DEBUG] [Thread-138064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:54:58.900 [DEBUG] [Thread-138064] [transport.py] [_log()] Compression: none
2026-02-11T23:54:58.900 [DEBUG] [Thread-138064] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:54:58.918 [DEBUG] [Thread-138064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:54:58.918 [DEBUG] [Thread-138064] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:54:58.919 [DEBUG] [Thread-138064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:54:58.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:54:58.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:54:58.921 [DEBUG] [Thread-138064] [transport.py] [_log()] userauth is OK
2026-02-11T23:54:58.921 [DEBUG] [Thread-138064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:54:58.921 [DEBUG] [Thread-138064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:54:58.921 [DEBUG] [Thread-138064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:54:58.921 [DEBUG] [Thread-138064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:54:58.946 [INFO] [Thread-138064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:54:58.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:54:59.582 [DEBUG] [Thread-138064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:54:59.582 [DEBUG] [Thread-138064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:54:59.583 [DEBUG] [Thread-138064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:54:59.611 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:59.612 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:54:59.624 [DEBUG] [Thread-138064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:54:59.624 [DEBUG] [Thread-138064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:54:59.627 [DEBUG] [Thread-138064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:54:59.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:54:59.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:54:59.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:54:59.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:54:59.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:54:59.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:54:59.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:54:59.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:54:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:54:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.912635 -999.00  +14.30  11.59     91  +13.00 1 2 1 3 1     0    0 1.24 -4.43 zNESW 13.7 11.6 161.4 20.7 15.4 -17.7 15.2 -17.0 15.0 -16.3 15.3 -17.2
2026-02-11T23:54:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:54:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:54:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.912635
2026-02-11T23:54:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:54:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:54:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:54:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:54:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:54:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:54:37', tmtdew=1.21, humidity=92.36, cloud=0.0, wind=22.05, temperature=14.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:54:11.664', atlas_cloud=2, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:52:00')
2026-02-11T23:54:59.656 [DEBUG] [Thread-138064] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:54:59.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:54:59.751 [DEBUG] [Thread-138067] [transport.py] [_log()] starting thread (client mode): 0xa57e1ea0
2026-02-11T23:54:59.751 [DEBUG] [Thread-138067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:54:59.766 [DEBUG] [Thread-138067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:54:59.766 [INFO] [Thread-138067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:54:59.773 [DEBUG] [Thread-138067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:54:59.774 [DEBUG] [Thread-138067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:54:59.774 [DEBUG] [Thread-138067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:54:59.774 [DEBUG] [Thread-138067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:59.774 [DEBUG] [Thread-138067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] client lang: <none>
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] server lang: <none>
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] kex follows: False
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] Compression: none
2026-02-11T23:54:59.775 [DEBUG] [Thread-138067] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:54:59.835 [DEBUG] [Thread-138067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:54:59.836 [DEBUG] [Thread-138067] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:54:59.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:54:59.837 [DEBUG] [Thread-138067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:54:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:54:59.894 [DEBUG] [Thread-138067] [transport.py] [_log()] userauth is OK
2026-02-11T23:54:59.894 [DEBUG] [Thread-138067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:54:59.895 [DEBUG] [Thread-138067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:54:59.895 [DEBUG] [Thread-138067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:54:59.895 [DEBUG] [Thread-138067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:54:59.918 [INFO] [Thread-138067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:54:59.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:54:59.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:55:00.730 [DEBUG] [Thread-138067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:55:00.730 [DEBUG] [Thread-138067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:55:00.780 [DEBUG] [Thread-138067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:55:00.780 [DEBUG] [Thread-138067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:55:00.791 [DEBUG] [Thread-138067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:55:00.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:55:00.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:55:00.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:55:00.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:55:00.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:55:00.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:55:00.831 [DEBUG] [Thread-138067] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:55:10.171 [DEBUG] [Thread-138069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:55:25.231 [DEBUG] [Thread-138070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:55:30.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:55:30.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:55:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:55:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 55, 12), 0.7, 95.21, 0.0, 18.53, 14.26, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:55:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:55:12
2026-02-11T23:55:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:55:33.870 [DEBUG] [Thread-138071] [transport.py] [_log()] starting thread (client mode): 0xa57e0310
2026-02-11T23:55:33.870 [DEBUG] [Thread-138071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:55:33.890 [DEBUG] [Thread-138071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:55:33.890 [INFO] [Thread-138071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:55:33.891 [DEBUG] [Thread-138071] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:55:33.891 [DEBUG] [Thread-138071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:55:33.891 [DEBUG] [Thread-138071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:55:33.891 [DEBUG] [Thread-138071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:55:33.891 [DEBUG] [Thread-138071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:55:33.891 [DEBUG] [Thread-138071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] client lang: <none>
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] server lang: <none>
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] kex follows: False
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] Compression: none
2026-02-11T23:55:33.892 [DEBUG] [Thread-138071] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:55:33.911 [DEBUG] [Thread-138071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:55:33.912 [DEBUG] [Thread-138071] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:55:33.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:55:33.913 [DEBUG] [Thread-138071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:55:33.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:55:33.914 [DEBUG] [Thread-138071] [transport.py] [_log()] userauth is OK
2026-02-11T23:55:33.915 [DEBUG] [Thread-138071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:55:33.915 [DEBUG] [Thread-138071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:55:33.915 [DEBUG] [Thread-138071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:55:33.915 [DEBUG] [Thread-138071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:55:33.932 [INFO] [Thread-138071] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:55:33.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:55:34.734 [DEBUG] [Thread-138071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:55:34.734 [DEBUG] [Thread-138071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:55:34.735 [DEBUG] [Thread-138071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:55:34.775 [DEBUG] [Thread-138071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:55:34.775 [DEBUG] [Thread-138071] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:55:34.778 [DEBUG] [Thread-138071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:55:34.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:55:34.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:55:34.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:55:34.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:55:34.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:55:34.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:55:34.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:55:34.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:55:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:55:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.912982 -999.00  +14.30  15.02     91  +13.00 1 2 1 3 1     0    0 1.21 -5.09 zNESW 16.8 15.0 167.6 19.1 15.4 -17.6 15.2 -16.8 15.1 -16.1 15.3 -17.3
2026-02-11T23:55:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:55:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:55:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.912982
2026-02-11T23:55:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:55:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:55:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:55:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:55:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:55:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:55:12', tmtdew=0.7, humidity=95.21, cloud=0.0, wind=18.53, temperature=14.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:54:41.645', atlas_cloud=2, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:52:00')
2026-02-11T23:55:34.801 [DEBUG] [Thread-138071] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:55:34.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:55:34.897 [DEBUG] [Thread-138074] [transport.py] [_log()] starting thread (client mode): 0xa57e0760
2026-02-11T23:55:34.897 [DEBUG] [Thread-138074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:55:34.915 [DEBUG] [Thread-138074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:55:34.915 [INFO] [Thread-138074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:55:34.922 [DEBUG] [Thread-138074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] client lang: <none>
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] server lang: <none>
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] kex follows: False
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:55:34.923 [DEBUG] [Thread-138074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:55:34.924 [DEBUG] [Thread-138074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:55:34.924 [DEBUG] [Thread-138074] [transport.py] [_log()] Compression: none
2026-02-11T23:55:34.924 [DEBUG] [Thread-138074] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:55:34.982 [DEBUG] [Thread-138074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:55:34.982 [DEBUG] [Thread-138074] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:55:34.983 [DEBUG] [Thread-138074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:55:34.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:55:34.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:55:35.038 [DEBUG] [Thread-138074] [transport.py] [_log()] userauth is OK
2026-02-11T23:55:35.038 [DEBUG] [Thread-138074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:55:35.038 [DEBUG] [Thread-138074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:55:35.038 [DEBUG] [Thread-138074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:55:35.039 [DEBUG] [Thread-138074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:55:35.061 [INFO] [Thread-138074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:55:35.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:55:35.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:55:35.870 [DEBUG] [Thread-138074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:55:35.870 [DEBUG] [Thread-138074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:55:35.918 [DEBUG] [Thread-138074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:55:35.918 [DEBUG] [Thread-138074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:55:35.927 [DEBUG] [Thread-138074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:55:35.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:55:35.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:55:35.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:55:35.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:55:35.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:55:35.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:55:35.961 [DEBUG] [Thread-138074] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:55:40.267 [DEBUG] [Thread-138076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:55:53.367 [DEBUG] [Thread-138077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:55:55.317 [DEBUG] [Thread-138078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:55:59.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:55:59.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:56:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:56:05.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:56:05.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
2026-02-11T23:56:07.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 55, 48), 0.74, 95.26, 0.0, 19.02, 14.26, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:56:07.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:55:48
2026-02-11T23:56:08.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:56:08.614 [DEBUG] [Thread-138079] [transport.py] [_log()] starting thread (client mode): 0xa2d9fee0
2026-02-11T23:56:08.614 [DEBUG] [Thread-138079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:56:08.634 [DEBUG] [Thread-138079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:56:08.634 [INFO] [Thread-138079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:56:08.637 [DEBUG] [Thread-138079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] client lang: <none>
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] server lang: <none>
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] kex follows: False
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] Compression: none
2026-02-11T23:56:08.638 [DEBUG] [Thread-138079] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:56:08.656 [DEBUG] [Thread-138079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:56:08.657 [DEBUG] [Thread-138079] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:56:08.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:56:08.658 [DEBUG] [Thread-138079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:56:08.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:56:08.660 [DEBUG] [Thread-138079] [transport.py] [_log()] userauth is OK
2026-02-11T23:56:08.660 [DEBUG] [Thread-138079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:56:08.660 [DEBUG] [Thread-138079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:56:08.660 [DEBUG] [Thread-138079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:56:08.660 [DEBUG] [Thread-138079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:56:08.685 [INFO] [Thread-138079] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:56:08.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:56:09.300 [DEBUG] [Thread-138079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:56:09.301 [DEBUG] [Thread-138079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:56:09.301 [DEBUG] [Thread-138079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:56:09.341 [DEBUG] [Thread-138079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:56:09.342 [DEBUG] [Thread-138079] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:56:09.345 [DEBUG] [Thread-138079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:56:09.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:56:09.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:56:09.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:56:09.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:56:09.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:56:09.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:56:09.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:56:09.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:56:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:56:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.913677 -999.00  +14.20  18.97     91  +12.90 1 2 1 3 1     0    0 1.18 -5.70 .NESW 16.6 19.0 176.4 20.8 15.3 -17.8 15.2 -16.8 15.0 -16.2 15.3 -17.2
2026-02-11T23:56:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:56:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:56:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.913677
2026-02-11T23:56:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:56:09.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:56:09.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:56:09.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:56:09.375 [DEBUG] [Thread-138079] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:56:09.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:56:09.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:55:48', tmtdew=0.74, humidity=95.26, cloud=0.0, wind=19.02, temperature=14.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:55:41.693', atlas_cloud=2, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:52:00')
2026-02-11T23:56:09.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:56:09.472 [DEBUG] [Thread-138082] [transport.py] [_log()] starting thread (client mode): 0xa2d9dd50
2026-02-11T23:56:09.472 [DEBUG] [Thread-138082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:56:09.487 [DEBUG] [Thread-138082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:56:09.487 [INFO] [Thread-138082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:56:09.495 [DEBUG] [Thread-138082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:56:09.496 [DEBUG] [Thread-138082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] client lang: <none>
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] server lang: <none>
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] kex follows: False
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:56:09.497 [DEBUG] [Thread-138082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:56:09.498 [DEBUG] [Thread-138082] [transport.py] [_log()] Compression: none
2026-02-11T23:56:09.498 [DEBUG] [Thread-138082] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:56:09.556 [DEBUG] [Thread-138082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:56:09.556 [DEBUG] [Thread-138082] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:56:09.557 [DEBUG] [Thread-138082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:56:09.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:56:09.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:56:09.615 [DEBUG] [Thread-138082] [transport.py] [_log()] userauth is OK
2026-02-11T23:56:09.616 [DEBUG] [Thread-138082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:56:09.616 [DEBUG] [Thread-138082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:56:09.616 [DEBUG] [Thread-138082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:56:09.616 [DEBUG] [Thread-138082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:56:09.635 [INFO] [Thread-138082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:56:09.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:56:09.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:56:10.357 [DEBUG] [Thread-138084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:56:10.490 [DEBUG] [Thread-138082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:56:10.491 [DEBUG] [Thread-138082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:56:10.539 [DEBUG] [Thread-138082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:56:10.539 [DEBUG] [Thread-138082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:56:10.548 [DEBUG] [Thread-138082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:56:10.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:56:10.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:56:10.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:56:10.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:56:10.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:56:10.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:56:10.588 [DEBUG] [Thread-138082] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:56:25.408 [DEBUG] [Thread-138085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:56:40.447 [DEBUG] [Thread-138086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:56:40.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:56:40.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:56:40.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:56:42.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 56, 23), 0.75, 95.25, 0.0, 19.83, 14.26, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:56:42.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:56:23
2026-02-11T23:56:42.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:56:43.156 [DEBUG] [Thread-138087] [transport.py] [_log()] starting thread (client mode): 0xa2d9ff70
2026-02-11T23:56:43.156 [DEBUG] [Thread-138087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:56:43.176 [DEBUG] [Thread-138087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:56:43.176 [INFO] [Thread-138087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:56:43.179 [DEBUG] [Thread-138087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:56:43.179 [DEBUG] [Thread-138087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] client lang: <none>
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] server lang: <none>
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] kex follows: False
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:56:43.180 [DEBUG] [Thread-138087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:56:43.181 [DEBUG] [Thread-138087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:56:43.181 [DEBUG] [Thread-138087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:56:43.181 [DEBUG] [Thread-138087] [transport.py] [_log()] Compression: none
2026-02-11T23:56:43.181 [DEBUG] [Thread-138087] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:56:43.199 [DEBUG] [Thread-138087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:56:43.200 [DEBUG] [Thread-138087] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:56:43.200 [DEBUG] [Thread-138087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:56:43.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:56:43.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:56:43.202 [DEBUG] [Thread-138087] [transport.py] [_log()] userauth is OK
2026-02-11T23:56:43.202 [DEBUG] [Thread-138087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:56:43.202 [DEBUG] [Thread-138087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:56:43.202 [DEBUG] [Thread-138087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:56:43.202 [DEBUG] [Thread-138087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:56:43.226 [INFO] [Thread-138087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:56:43.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:56:43.853 [DEBUG] [Thread-138087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:56:43.854 [DEBUG] [Thread-138087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:56:43.854 [DEBUG] [Thread-138087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:56:43.894 [DEBUG] [Thread-138087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:56:43.894 [DEBUG] [Thread-138087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:56:43.897 [DEBUG] [Thread-138087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:56:43.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:56:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:56:43.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:56:43.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:56:43.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:56:43.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:56:43.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:56:43.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:56:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:56:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.914024 -999.00  +14.20  17.04     91  +12.90 1 2 1 3 1     0    0 1.18 -5.87 .NESW 15.3 17.0 181.2 22.9 15.2 -17.5 15.1 -17.1 15.0 -16.4 15.3 -17.2
2026-02-11T23:56:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:56:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:56:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.914024
2026-02-11T23:56:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:56:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:56:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:56:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:56:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:56:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:56:23', tmtdew=0.75, humidity=95.25, cloud=0.0, wind=19.83, temperature=14.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:56:11.674', atlas_cloud=2, atlas_rain=1, zp_data=[2.4967499999999996, 0.2292500000000004, 0.32225000000000037, 0.5454999999999997, 1.5745000000000005, 1.7527500000000007, 1.5424999999999995, nan, 0.285499999999999, 0.2970000000000006, 0.23925000000000018, 0.3310000000000013, 0.46300000000000097, 0.31675000000000075, 0.28249999999999886, 0.21199999999999974, 0.2217500000000001, 0.3185000000000002, 0.3725000000000005, 0.16225000000000023, 0.16999999999999815, 0.13674999999999926, 0.11425000000000018, 0.1382500000000011, 0.20699999999999896, 0.26149999999999984, 0.31975000000000087, 0.23399999999999999, 0.19399999999999906, 0.13150000000000084, 0.12400000000000055, 0.1720000000000006, 0.22474999999999845], zp_timestamp='2026-02-11T21:52:00')
2026-02-11T23:56:43.923 [DEBUG] [Thread-138087] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:56:44.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:56:44.025 [DEBUG] [Thread-138090] [transport.py] [_log()] starting thread (client mode): 0xa2d97010
2026-02-11T23:56:44.025 [DEBUG] [Thread-138090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:56:44.041 [DEBUG] [Thread-138090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:56:44.042 [INFO] [Thread-138090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] client lang: <none>
2026-02-11T23:56:44.050 [DEBUG] [Thread-138090] [transport.py] [_log()] server lang: <none>
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] kex follows: False
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] Compression: none
2026-02-11T23:56:44.051 [DEBUG] [Thread-138090] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:56:44.107 [DEBUG] [Thread-138090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:56:44.107 [DEBUG] [Thread-138090] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:56:44.108 [DEBUG] [Thread-138090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:56:44.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:56:44.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:56:44.163 [DEBUG] [Thread-138090] [transport.py] [_log()] userauth is OK
2026-02-11T23:56:44.164 [DEBUG] [Thread-138090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:56:44.164 [DEBUG] [Thread-138090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:56:44.164 [DEBUG] [Thread-138090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:56:44.164 [DEBUG] [Thread-138090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:56:44.183 [INFO] [Thread-138090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:56:44.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:56:44.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:56:45.025 [DEBUG] [Thread-138090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:56:45.025 [DEBUG] [Thread-138090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:56:45.076 [DEBUG] [Thread-138090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:56:45.076 [DEBUG] [Thread-138090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:56:45.089 [DEBUG] [Thread-138090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:56:45.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:56:45.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:56:45.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:56:45.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:56:45.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:56:45.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:56:45.142 [DEBUG] [Thread-138090] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:56:53.442 [DEBUG] [Thread-138092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:56:55.488 [DEBUG] [Thread-138093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:57:00.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:57:00.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:57:10.539 [DEBUG] [Thread-138094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:57:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:57:15.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:57:15.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
2026-02-11T23:57:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 56, 59), 0.76, 95.18, 0.0, 17.93, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:57:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:56:59
2026-02-11T23:57:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:57:17.448 [DEBUG] [Thread-138095] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-11T23:57:17.448 [DEBUG] [Thread-138095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:57:17.467 [DEBUG] [Thread-138095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:57:17.468 [INFO] [Thread-138095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] client lang: <none>
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] server lang: <none>
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] kex follows: False
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] Compression: none
2026-02-11T23:57:17.471 [DEBUG] [Thread-138095] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:57:17.488 [DEBUG] [Thread-138095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:57:17.488 [DEBUG] [Thread-138095] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:57:17.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:57:17.489 [DEBUG] [Thread-138095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:57:17.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:57:17.492 [DEBUG] [Thread-138095] [transport.py] [_log()] userauth is OK
2026-02-11T23:57:17.492 [DEBUG] [Thread-138095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:57:17.492 [DEBUG] [Thread-138095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:57:17.492 [DEBUG] [Thread-138095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:57:17.492 [DEBUG] [Thread-138095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:57:17.517 [INFO] [Thread-138095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:57:17.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:57:18.131 [DEBUG] [Thread-138095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:57:18.131 [DEBUG] [Thread-138095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:57:18.132 [DEBUG] [Thread-138095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:57:18.172 [DEBUG] [Thread-138095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:57:18.173 [DEBUG] [Thread-138095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:57:18.176 [DEBUG] [Thread-138095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:57:18.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:57:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:57:18.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:57:18.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:57:18.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:57:18.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:57:18.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:57:18.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:57:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:57:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.914371 -999.00  +14.20  11.40     91  +12.90 1 2 1 3 1     0    0 1.15 -5.95 .NESW 11.4 11.4 178.0 18.0 15.2 -16.9 15.1 -16.5 15.0 -16.1 15.3 -17.0
2026-02-11T23:57:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:57:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:57:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.914371
2026-02-11T23:57:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:57:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:57:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:57:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:57:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:57:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:56:59', tmtdew=0.76, humidity=95.18, cloud=0.0, wind=17.93, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:56:41.654', atlas_cloud=2, atlas_rain=1, zp_data=[2.36975, 0.2522500000000001, 0.3512500000000003, 0.8219999999999992, 1.9145000000000003, 1.7807500000000012, nan, nan, 0.5019999999999989, 0.1479999999999997, 0.07075000000000031, 0.31099999999999994, 0.6149999999999993, 0.3537499999999998, 0.41849999999999987, 0.4299999999999997, 0.22524999999999906, 0.1634999999999991, 0.12700000000000067, 0.1297499999999978, 0.1769999999999996, 0.10874999999999879, 0.1427499999999995, 0.19775000000000098, 0.15249999999999808, 0.14500000000000135, 0.1147500000000008, 0.12449999999999939, 0.13700000000000045, 0.136000000000001, 0.09600000000000186, 0.21600000000000108, 0.19574999999999854], zp_timestamp='2026-02-11T21:55:00')
2026-02-11T23:57:18.201 [DEBUG] [Thread-138095] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:57:18.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:57:18.301 [DEBUG] [Thread-138098] [transport.py] [_log()] starting thread (client mode): 0xa57e02e0
2026-02-11T23:57:18.301 [DEBUG] [Thread-138098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:57:18.315 [DEBUG] [Thread-138098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:57:18.315 [INFO] [Thread-138098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:57:18.323 [DEBUG] [Thread-138098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:57:18.323 [DEBUG] [Thread-138098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:57:18.323 [DEBUG] [Thread-138098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:57:18.323 [DEBUG] [Thread-138098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:18.323 [DEBUG] [Thread-138098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] client lang: <none>
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] server lang: <none>
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] kex follows: False
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:57:18.324 [DEBUG] [Thread-138098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:57:18.325 [DEBUG] [Thread-138098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:57:18.325 [DEBUG] [Thread-138098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:57:18.325 [DEBUG] [Thread-138098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:57:18.325 [DEBUG] [Thread-138098] [transport.py] [_log()] Compression: none
2026-02-11T23:57:18.325 [DEBUG] [Thread-138098] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:57:18.383 [DEBUG] [Thread-138098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:57:18.384 [DEBUG] [Thread-138098] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:57:18.384 [DEBUG] [Thread-138098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:57:18.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:57:18.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:57:18.440 [DEBUG] [Thread-138098] [transport.py] [_log()] userauth is OK
2026-02-11T23:57:18.440 [DEBUG] [Thread-138098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:57:18.440 [DEBUG] [Thread-138098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:57:18.440 [DEBUG] [Thread-138098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:57:18.440 [DEBUG] [Thread-138098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:57:18.458 [INFO] [Thread-138098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:57:18.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:57:18.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:57:19.230 [DEBUG] [Thread-138098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:57:19.230 [DEBUG] [Thread-138098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:57:19.280 [DEBUG] [Thread-138098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:57:19.281 [DEBUG] [Thread-138098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:57:19.291 [DEBUG] [Thread-138098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:57:19.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:57:19.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:57:19.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:57:19.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:57:19.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:57:19.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:57:19.330 [DEBUG] [Thread-138098] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:57:25.576 [DEBUG] [Thread-138100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:57:40.638 [DEBUG] [Thread-138101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:57:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:57:49.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:57:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:57:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 57, 35), 1.18, 92.52, 0.0, 19.97, 14.55, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:57:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:57:35
2026-02-11T23:57:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:57:51.795 [DEBUG] [Thread-138102] [transport.py] [_log()] starting thread (client mode): 0xa2d958a0
2026-02-11T23:57:51.795 [DEBUG] [Thread-138102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:57:51.815 [DEBUG] [Thread-138102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:57:51.815 [INFO] [Thread-138102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:57:51.818 [DEBUG] [Thread-138102] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:57:51.818 [DEBUG] [Thread-138102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:57:51.818 [DEBUG] [Thread-138102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:57:51.818 [DEBUG] [Thread-138102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] client lang: <none>
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] server lang: <none>
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] kex follows: False
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] Compression: none
2026-02-11T23:57:51.819 [DEBUG] [Thread-138102] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:57:51.832 [DEBUG] [Thread-138102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:57:51.832 [DEBUG] [Thread-138102] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:57:51.833 [DEBUG] [Thread-138102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:57:51.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:57:51.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:57:51.835 [DEBUG] [Thread-138102] [transport.py] [_log()] userauth is OK
2026-02-11T23:57:51.835 [DEBUG] [Thread-138102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:57:51.835 [DEBUG] [Thread-138102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:57:51.835 [DEBUG] [Thread-138102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:57:51.835 [DEBUG] [Thread-138102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:57:51.860 [INFO] [Thread-138102] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:57:51.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:57:52.460 [DEBUG] [Thread-138102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:57:52.460 [DEBUG] [Thread-138102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:57:52.461 [DEBUG] [Thread-138102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:57:52.501 [DEBUG] [Thread-138102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:57:52.502 [DEBUG] [Thread-138102] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:57:52.505 [DEBUG] [Thread-138102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:57:52.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:57:52.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:57:52.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:57:52.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:57:52.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:57:52.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:57:52.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:57:52.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:57:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:57:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.914719 -999.00  +14.20  13.36     91  +12.90 1 2 1 3 1     0    0 1.16 -6.01 .NESW 13.4 13.4 182.4 17.9 15.3 -16.9 15.1 -16.5 15.0 -15.9 15.3 -16.8
2026-02-11T23:57:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:57:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:57:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.914719
2026-02-11T23:57:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:57:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:57:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:57:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:57:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:57:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:57:35', tmtdew=1.18, humidity=92.52, cloud=0.0, wind=19.97, temperature=14.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:57:11.722', atlas_cloud=2, atlas_rain=1, zp_data=[2.36975, 0.2522500000000001, 0.3512500000000003, 0.8219999999999992, 1.9145000000000003, 1.7807500000000012, nan, nan, 0.5019999999999989, 0.1479999999999997, 0.07075000000000031, 0.31099999999999994, 0.6149999999999993, 0.3537499999999998, 0.41849999999999987, 0.4299999999999997, 0.22524999999999906, 0.1634999999999991, 0.12700000000000067, 0.1297499999999978, 0.1769999999999996, 0.10874999999999879, 0.1427499999999995, 0.19775000000000098, 0.15249999999999808, 0.14500000000000135, 0.1147500000000008, 0.12449999999999939, 0.13700000000000045, 0.136000000000001, 0.09600000000000186, 0.21600000000000108, 0.19574999999999854], zp_timestamp='2026-02-11T21:55:00')
2026-02-11T23:57:52.532 [DEBUG] [Thread-138102] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:57:52.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:57:52.627 [DEBUG] [Thread-138105] [transport.py] [_log()] starting thread (client mode): 0xa2d9da20
2026-02-11T23:57:52.628 [DEBUG] [Thread-138105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:57:52.643 [DEBUG] [Thread-138105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:57:52.643 [INFO] [Thread-138105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:57:52.651 [DEBUG] [Thread-138105] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] client lang: <none>
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] server lang: <none>
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] kex follows: False
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] Compression: none
2026-02-11T23:57:52.652 [DEBUG] [Thread-138105] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:57:52.711 [DEBUG] [Thread-138105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:57:52.711 [DEBUG] [Thread-138105] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:57:52.711 [DEBUG] [Thread-138105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:57:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:57:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:57:52.768 [DEBUG] [Thread-138105] [transport.py] [_log()] userauth is OK
2026-02-11T23:57:52.768 [DEBUG] [Thread-138105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:57:52.768 [DEBUG] [Thread-138105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:57:52.768 [DEBUG] [Thread-138105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:57:52.768 [DEBUG] [Thread-138105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:57:52.786 [INFO] [Thread-138105] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:57:52.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:57:52.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:57:53.499 [DEBUG] [Thread-138107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:57:53.597 [DEBUG] [Thread-138105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:57:53.597 [DEBUG] [Thread-138105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:57:53.645 [DEBUG] [Thread-138105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:57:53.645 [DEBUG] [Thread-138105] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:57:53.654 [DEBUG] [Thread-138105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:57:53.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:57:53.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:57:53.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:57:53.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:57:53.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:57:53.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:57:53.693 [DEBUG] [Thread-138105] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:57:55.672 [DEBUG] [Thread-138108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:00.226 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:00.227 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:10.726 [DEBUG] [Thread-138109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:58:23.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:58:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:58:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 58, 10), 0.74, 95.3, 0.0, 18.19, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:58:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:58:10
2026-02-11T23:58:25.762 [DEBUG] [Thread-138110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:58:26.237 [DEBUG] [Thread-138111] [transport.py] [_log()] starting thread (client mode): 0xa2d9ff40
2026-02-11T23:58:26.237 [DEBUG] [Thread-138111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:58:26.257 [DEBUG] [Thread-138111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:58:26.257 [INFO] [Thread-138111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] client lang: <none>
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] server lang: <none>
2026-02-11T23:58:26.260 [DEBUG] [Thread-138111] [transport.py] [_log()] kex follows: False
2026-02-11T23:58:26.261 [DEBUG] [Thread-138111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:58:26.261 [DEBUG] [Thread-138111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:58:26.261 [DEBUG] [Thread-138111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:58:26.261 [DEBUG] [Thread-138111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:58:26.261 [DEBUG] [Thread-138111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:58:26.261 [DEBUG] [Thread-138111] [transport.py] [_log()] Compression: none
2026-02-11T23:58:26.261 [DEBUG] [Thread-138111] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:58:26.277 [DEBUG] [Thread-138111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:58:26.278 [DEBUG] [Thread-138111] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:58:26.278 [DEBUG] [Thread-138111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:58:26.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:58:26.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:58:26.280 [DEBUG] [Thread-138111] [transport.py] [_log()] userauth is OK
2026-02-11T23:58:26.280 [DEBUG] [Thread-138111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:58:26.281 [DEBUG] [Thread-138111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:58:26.281 [DEBUG] [Thread-138111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:58:26.281 [DEBUG] [Thread-138111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:58:26.299 [INFO] [Thread-138111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:58:26.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:58:27.085 [DEBUG] [Thread-138111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:58:27.086 [DEBUG] [Thread-138111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:58:27.086 [DEBUG] [Thread-138111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:58:27.126 [DEBUG] [Thread-138111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:58:27.127 [DEBUG] [Thread-138111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:58:27.130 [DEBUG] [Thread-138111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:58:27.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:58:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:58:27.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:58:27.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:58:27.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:58:27.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:58:27.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:58:27.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:58:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:58:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.915066 -999.00  +14.20  12.92     91  +12.90 1 2 1 3 1     0    0 1.17 -6.22 .NESW 12.9 12.9 172.8 20.7 15.2 -16.3 15.1 -15.7 15.0 -15.5 15.3 -16.7
2026-02-11T23:58:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:58:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:58:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.915066
2026-02-11T23:58:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:58:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:58:27.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:58:27.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:58:27.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:58:27.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:58:10', tmtdew=0.74, humidity=95.3, cloud=0.0, wind=18.19, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:57:41.702', atlas_cloud=2, atlas_rain=1, zp_data=[2.36975, 0.2522500000000001, 0.3512500000000003, 0.8219999999999992, 1.9145000000000003, 1.7807500000000012, nan, nan, 0.5019999999999989, 0.1479999999999997, 0.07075000000000031, 0.31099999999999994, 0.6149999999999993, 0.3537499999999998, 0.41849999999999987, 0.4299999999999997, 0.22524999999999906, 0.1634999999999991, 0.12700000000000067, 0.1297499999999978, 0.1769999999999996, 0.10874999999999879, 0.1427499999999995, 0.19775000000000098, 0.15249999999999808, 0.14500000000000135, 0.1147500000000008, 0.12449999999999939, 0.13700000000000045, 0.136000000000001, 0.09600000000000186, 0.21600000000000108, 0.19574999999999854], zp_timestamp='2026-02-11T21:55:00')
2026-02-11T23:58:27.156 [DEBUG] [Thread-138111] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:58:27.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:58:27.261 [DEBUG] [Thread-138114] [transport.py] [_log()] starting thread (client mode): 0xa57e3700
2026-02-11T23:58:27.261 [DEBUG] [Thread-138114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:58:27.275 [DEBUG] [Thread-138114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:58:27.275 [INFO] [Thread-138114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:58:27.283 [DEBUG] [Thread-138114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] client lang: <none>
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] server lang: <none>
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] kex follows: False
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] Compression: none
2026-02-11T23:58:27.284 [DEBUG] [Thread-138114] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:58:27.340 [DEBUG] [Thread-138114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:58:27.340 [DEBUG] [Thread-138114] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:58:27.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:58:27.341 [DEBUG] [Thread-138114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:58:27.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:58:27.398 [DEBUG] [Thread-138114] [transport.py] [_log()] userauth is OK
2026-02-11T23:58:27.399 [DEBUG] [Thread-138114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:58:27.399 [DEBUG] [Thread-138114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:58:27.399 [DEBUG] [Thread-138114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:58:27.399 [DEBUG] [Thread-138114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:58:27.417 [INFO] [Thread-138114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:58:27.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:58:27.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:58:28.250 [DEBUG] [Thread-138114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:58:28.251 [DEBUG] [Thread-138114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:58:28.298 [DEBUG] [Thread-138114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:58:28.299 [DEBUG] [Thread-138114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:58:28.308 [DEBUG] [Thread-138114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:58:28.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:58:28.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:58:28.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:58:28.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:58:28.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:58:28.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:58:28.344 [DEBUG] [Thread-138114] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:58:40.801 [DEBUG] [Thread-138116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:53.570 [DEBUG] [Thread-138117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:55.851 [DEBUG] [Thread-138118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:58:58.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:58:58.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:58:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:59:00.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 58, 45), 0.74, 95.3, 0.0, 18.79, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:59:00.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:58:45
2026-02-11T23:59:00.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:59:00.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:59:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:59:00.802 [DEBUG] [Thread-138119] [transport.py] [_log()] starting thread (client mode): 0xa2d94c10
2026-02-11T23:59:00.802 [DEBUG] [Thread-138119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:59:00.822 [DEBUG] [Thread-138119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:59:00.822 [INFO] [Thread-138119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:59:00.825 [DEBUG] [Thread-138119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:59:00.825 [DEBUG] [Thread-138119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:59:00.825 [DEBUG] [Thread-138119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:59:00.825 [DEBUG] [Thread-138119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:00.825 [DEBUG] [Thread-138119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:00.825 [DEBUG] [Thread-138119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:00.825 [DEBUG] [Thread-138119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] client lang: <none>
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] server lang: <none>
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] kex follows: False
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] Compression: none
2026-02-11T23:59:00.826 [DEBUG] [Thread-138119] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:59:00.844 [DEBUG] [Thread-138119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:59:00.844 [DEBUG] [Thread-138119] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:59:00.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:59:00.845 [DEBUG] [Thread-138119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:59:00.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:59:00.847 [DEBUG] [Thread-138119] [transport.py] [_log()] userauth is OK
2026-02-11T23:59:00.847 [DEBUG] [Thread-138119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:59:00.848 [DEBUG] [Thread-138119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:59:00.848 [DEBUG] [Thread-138119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:59:00.848 [DEBUG] [Thread-138119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:59:00.869 [INFO] [Thread-138119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:59:00.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:59:01.506 [DEBUG] [Thread-138119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:59:01.507 [DEBUG] [Thread-138119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:59:01.507 [DEBUG] [Thread-138119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:59:01.547 [DEBUG] [Thread-138119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:59:01.548 [DEBUG] [Thread-138119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:59:01.551 [DEBUG] [Thread-138119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:59:01.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:59:01.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:59:01.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:59:01.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:59:01.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:59:01.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:59:01.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:59:01.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:59:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:59:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.915413 -999.00  +14.20  17.67     91  +12.90 1 2 1 3 1     0    0 1.12 -6.77 .NESW 17.7 17.7 171.2 23.0 15.3 -16.3 15.1 -15.9 15.0 -15.1 15.3 -16.4
2026-02-11T23:59:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:59:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:59:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.915413
2026-02-11T23:59:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:59:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:59:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:59:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:59:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:59:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:58:45', tmtdew=0.74, humidity=95.3, cloud=0.0, wind=18.79, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:58:11.683', atlas_cloud=2, atlas_rain=1, zp_data=[2.36975, 0.2522500000000001, 0.3512500000000003, 0.8219999999999992, 1.9145000000000003, 1.7807500000000012, nan, nan, 0.5019999999999989, 0.1479999999999997, 0.07075000000000031, 0.31099999999999994, 0.6149999999999993, 0.3537499999999998, 0.41849999999999987, 0.4299999999999997, 0.22524999999999906, 0.1634999999999991, 0.12700000000000067, 0.1297499999999978, 0.1769999999999996, 0.10874999999999879, 0.1427499999999995, 0.19775000000000098, 0.15249999999999808, 0.14500000000000135, 0.1147500000000008, 0.12449999999999939, 0.13700000000000045, 0.136000000000001, 0.09600000000000186, 0.21600000000000108, 0.19574999999999854], zp_timestamp='2026-02-11T21:55:00')
2026-02-11T23:59:01.578 [DEBUG] [Thread-138119] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:59:01.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:59:01.669 [DEBUG] [Thread-138122] [transport.py] [_log()] starting thread (client mode): 0xa57e1f90
2026-02-11T23:59:01.669 [DEBUG] [Thread-138122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:59:01.683 [DEBUG] [Thread-138122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:59:01.683 [INFO] [Thread-138122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:01.691 [DEBUG] [Thread-138122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] client lang: <none>
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] server lang: <none>
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] kex follows: False
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:59:01.692 [DEBUG] [Thread-138122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:59:01.693 [DEBUG] [Thread-138122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:59:01.693 [DEBUG] [Thread-138122] [transport.py] [_log()] Compression: none
2026-02-11T23:59:01.693 [DEBUG] [Thread-138122] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:59:01.749 [DEBUG] [Thread-138122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:59:01.749 [DEBUG] [Thread-138122] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:59:01.750 [DEBUG] [Thread-138122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:59:01.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:59:01.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:59:01.808 [DEBUG] [Thread-138122] [transport.py] [_log()] userauth is OK
2026-02-11T23:59:01.809 [DEBUG] [Thread-138122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:59:01.809 [DEBUG] [Thread-138122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:59:01.809 [DEBUG] [Thread-138122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:59:01.809 [DEBUG] [Thread-138122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:59:01.828 [INFO] [Thread-138122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:59:01.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:59:01.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:59:02.651 [DEBUG] [Thread-138122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:59:02.652 [DEBUG] [Thread-138122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:59:02.699 [DEBUG] [Thread-138122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:59:02.699 [DEBUG] [Thread-138122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:59:02.708 [DEBUG] [Thread-138122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:59:02.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:59:02.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-11T23:59:02.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:59:02.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:59:02.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:59:02.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:59:02.744 [DEBUG] [Thread-138122] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:59:10.888 [DEBUG] [Thread-138124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:59:25.940 [DEBUG] [Thread-138125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:59:32.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-11T23:59:32.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-11T23:59:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-11T23:59:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 59, 21), 0.74, 95.28, 0.0, 17.73, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-11T23:59:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:59:21
2026-02-11T23:59:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-11T23:59:35.405 [DEBUG] [Thread-138126] [transport.py] [_log()] starting thread (client mode): 0xa2d96230
2026-02-11T23:59:35.405 [DEBUG] [Thread-138126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:59:35.426 [DEBUG] [Thread-138126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-11T23:59:35.426 [INFO] [Thread-138126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-11T23:59:35.429 [DEBUG] [Thread-138126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:59:35.429 [DEBUG] [Thread-138126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-11T23:59:35.429 [DEBUG] [Thread-138126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:59:35.429 [DEBUG] [Thread-138126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:35.429 [DEBUG] [Thread-138126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:35.429 [DEBUG] [Thread-138126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] client lang: <none>
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] server lang: <none>
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] kex follows: False
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] Compression: none
2026-02-11T23:59:35.430 [DEBUG] [Thread-138126] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:59:35.448 [DEBUG] [Thread-138126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:59:35.449 [DEBUG] [Thread-138126] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:59:35.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-11T23:59:35.450 [DEBUG] [Thread-138126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-11T23:59:35.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:59:35.452 [DEBUG] [Thread-138126] [transport.py] [_log()] userauth is OK
2026-02-11T23:59:35.452 [DEBUG] [Thread-138126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:59:35.453 [DEBUG] [Thread-138126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:59:35.453 [DEBUG] [Thread-138126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-11T23:59:35.453 [DEBUG] [Thread-138126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:59:35.476 [INFO] [Thread-138126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:59:35.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:59:36.113 [DEBUG] [Thread-138126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:59:36.114 [DEBUG] [Thread-138126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:59:36.114 [DEBUG] [Thread-138126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-11T23:59:36.154 [DEBUG] [Thread-138126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:59:36.155 [DEBUG] [Thread-138126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:59:36.158 [DEBUG] [Thread-138126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:59:36.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:59:36.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-11T23:59:36.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-11T23:59:36.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-11T23:59:36.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:59:36.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-11T23:59:36.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:59:36.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:59:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-11T23:59:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.916107 -999.00  +14.20  14.39     92  +12.90 1 2 1 3 1     0    0 1.10 -8.12 .NESW 14.4 14.4 171.6 20.0 15.3 -14.4 15.1 -14.3 15.0 -14.9 15.3 -15.8
2026-02-11T23:59:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-11T23:59:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-11T23:59:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.916107
2026-02-11T23:59:36.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-11T23:59:36.186 [DEBUG] [Thread-138126] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:59:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-11T23:59:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-11T23:59:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-11T23:59:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-11T23:59:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:59:21', tmtdew=0.74, humidity=95.28, cloud=0.0, wind=17.73, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:59:11.645', atlas_cloud=2, atlas_rain=1, zp_data=[2.36975, 0.2522500000000001, 0.3512500000000003, 0.8219999999999992, 1.9145000000000003, 1.7807500000000012, nan, nan, 0.5019999999999989, 0.1479999999999997, 0.07075000000000031, 0.31099999999999994, 0.6149999999999993, 0.3537499999999998, 0.41849999999999987, 0.4299999999999997, 0.22524999999999906, 0.1634999999999991, 0.12700000000000067, 0.1297499999999978, 0.1769999999999996, 0.10874999999999879, 0.1427499999999995, 0.19775000000000098, 0.15249999999999808, 0.14500000000000135, 0.1147500000000008, 0.12449999999999939, 0.13700000000000045, 0.136000000000001, 0.09600000000000186, 0.21600000000000108, 0.19574999999999854], zp_timestamp='2026-02-11T21:55:00')
2026-02-11T23:59:36.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-11T23:59:36.276 [DEBUG] [Thread-138129] [transport.py] [_log()] starting thread (client mode): 0xa2d94a30
2026-02-11T23:59:36.277 [DEBUG] [Thread-138129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-11T23:59:36.291 [DEBUG] [Thread-138129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-11T23:59:36.291 [INFO] [Thread-138129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] client lang: <none>
2026-02-11T23:59:36.299 [DEBUG] [Thread-138129] [transport.py] [_log()] server lang: <none>
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] kex follows: False
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] === Key exchange agreements ===
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] Compression: none
2026-02-11T23:59:36.300 [DEBUG] [Thread-138129] [transport.py] [_log()] === End of kex handshake ===
2026-02-11T23:59:36.356 [DEBUG] [Thread-138129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-11T23:59:36.357 [DEBUG] [Thread-138129] [transport.py] [_log()] Switch to new keys ...
2026-02-11T23:59:36.357 [DEBUG] [Thread-138129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-11T23:59:36.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-11T23:59:36.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-11T23:59:36.412 [DEBUG] [Thread-138129] [transport.py] [_log()] userauth is OK
2026-02-11T23:59:36.412 [DEBUG] [Thread-138129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-11T23:59:36.413 [DEBUG] [Thread-138129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-11T23:59:36.413 [DEBUG] [Thread-138129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-11T23:59:36.413 [DEBUG] [Thread-138129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-11T23:59:36.432 [INFO] [Thread-138129] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-11T23:59:36.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-11T23:59:36.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-11T23:59:37.244 [DEBUG] [Thread-138129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-11T23:59:37.244 [DEBUG] [Thread-138129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-11T23:59:37.291 [DEBUG] [Thread-138129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-11T23:59:37.292 [DEBUG] [Thread-138129] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-11T23:59:37.301 [DEBUG] [Thread-138129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-11T23:59:37.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-11T23:59:37.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')
2026-02-11T23:59:37.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-11T23:59:37.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-11T23:59:37.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-11T23:59:37.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-11T23:59:37.338 [DEBUG] [Thread-138129] [transport.py] [_log()] EOF in transport thread
2026-02-11T23:59:40.978 [DEBUG] [Thread-138131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:59:53.641 [DEBUG] [Thread-138132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-11T23:59:56.026 [DEBUG] [Thread-138133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:00.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:00.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:07.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:00:07.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:00:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:00:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 11, 23, 59, 56), 0.69, 95.3, 0.0, 20.5, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:00:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-11 23:59:56
2026-02-12T00:00:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:00:09.808 [DEBUG] [Thread-138134] [transport.py] [_log()] starting thread (client mode): 0xa2dc2b90
2026-02-12T00:00:09.808 [DEBUG] [Thread-138134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:00:09.823 [DEBUG] [Thread-138134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:00:09.824 [INFO] [Thread-138134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] client lang: <none>
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] server lang: <none>
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] kex follows: False
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:00:09.827 [DEBUG] [Thread-138134] [transport.py] [_log()] Compression: none
2026-02-12T00:00:09.828 [DEBUG] [Thread-138134] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:00:09.836 [DEBUG] [Thread-138134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:00:09.836 [DEBUG] [Thread-138134] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:00:09.836 [DEBUG] [Thread-138134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:00:09.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:00:09.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:00:09.838 [DEBUG] [Thread-138134] [transport.py] [_log()] userauth is OK
2026-02-12T00:00:09.838 [DEBUG] [Thread-138134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:00:09.838 [DEBUG] [Thread-138134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:00:09.838 [DEBUG] [Thread-138134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:00:09.838 [DEBUG] [Thread-138134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:00:09.853 [INFO] [Thread-138134] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:00:09.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:00:11.062 [DEBUG] [Thread-138136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:22.616 [DEBUG] [Thread-138134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:00:22.616 [DEBUG] [Thread-138134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:00:22.617 [DEBUG] [Thread-138134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:00:22.658 [DEBUG] [Thread-138134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:00:22.658 [DEBUG] [Thread-138134] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:00:22.661 [DEBUG] [Thread-138134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:00:22.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:00:22.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:00:22.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:00:22.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:00:22.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:00:22.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:00:22.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:00:22.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:00:22.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:00:22.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.916455 -999.00  +14.20  16.93     92  +12.90 1 2 1 3 1     0    0 1.11 -7.31 .NESW 16.9 16.9 180.4 21.0 15.4 -11.4 15.1 -11.3 15.0 -13.2 15.3 -13.5
2026-02-12T00:00:22.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:00:22.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:00:22.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.916455
2026-02-12T00:00:22.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:00:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:00:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:00:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:00:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T00:00:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-11T23:59:56', tmtdew=0.69, humidity=95.3, cloud=0.0, wind=20.5, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T21:59:41.712', atlas_cloud=2, atlas_rain=1, zp_data=[2.36975, 0.2522500000000001, 0.3512500000000003, 0.8219999999999992, 1.9145000000000003, 1.7807500000000012, nan, nan, 0.5019999999999989, 0.1479999999999997, 0.07075000000000031, 0.31099999999999994, 0.6149999999999993, 0.3537499999999998, 0.41849999999999987, 0.4299999999999997, 0.22524999999999906, 0.1634999999999991, 0.12700000000000067, 0.1297499999999978, 0.1769999999999996, 0.10874999999999879, 0.1427499999999995, 0.19775000000000098, 0.15249999999999808, 0.14500000000000135, 0.1147500000000008, 0.12449999999999939, 0.13700000000000045, 0.136000000000001, 0.09600000000000186, 0.21600000000000108, 0.19574999999999854], zp_timestamp='2026-02-11T21:55:00')
2026-02-12T00:00:22.848 [DEBUG] [Thread-138134] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:00:22.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:00:22.946 [DEBUG] [Thread-138138] [transport.py] [_log()] starting thread (client mode): 0xa2dc3e20
2026-02-12T00:00:22.947 [DEBUG] [Thread-138138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:00:22.961 [DEBUG] [Thread-138138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:00:22.961 [INFO] [Thread-138138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:00:22.968 [DEBUG] [Thread-138138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] client lang: <none>
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] server lang: <none>
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] kex follows: False
2026-02-12T00:00:22.969 [DEBUG] [Thread-138138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:00:22.970 [DEBUG] [Thread-138138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:00:22.970 [DEBUG] [Thread-138138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:00:22.970 [DEBUG] [Thread-138138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:00:22.970 [DEBUG] [Thread-138138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:00:22.970 [DEBUG] [Thread-138138] [transport.py] [_log()] Compression: none
2026-02-12T00:00:22.970 [DEBUG] [Thread-138138] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:00:23.028 [DEBUG] [Thread-138138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:00:23.029 [DEBUG] [Thread-138138] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:00:23.030 [DEBUG] [Thread-138138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:00:23.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:00:23.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:00:23.084 [DEBUG] [Thread-138138] [transport.py] [_log()] userauth is OK
2026-02-12T00:00:23.085 [DEBUG] [Thread-138138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:00:23.085 [DEBUG] [Thread-138138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:00:23.085 [DEBUG] [Thread-138138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:00:23.085 [DEBUG] [Thread-138138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:00:23.105 [INFO] [Thread-138138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:00:23.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:00:23.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:00:23.917 [DEBUG] [Thread-138138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:00:23.918 [DEBUG] [Thread-138138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:00:23.966 [DEBUG] [Thread-138138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:00:23.966 [DEBUG] [Thread-138138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:00:23.975 [DEBUG] [Thread-138138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:00:23.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:00: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')
2026-02-12T00:00:23.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:00:24.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:00:24.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:00:24.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:00:24.012 [DEBUG] [Thread-138138] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:00:26.097 [DEBUG] [Thread-138140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:41.137 [DEBUG] [Thread-138141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:53.699 [DEBUG] [Thread-138142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:54.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:00:54.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:00:54.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:00:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 0, 32), 0.68, 95.31, 0.0, 18.69, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:00:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:00:32
2026-02-12T00:00:56.175 [DEBUG] [Thread-138143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:00:56.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:00:56.399 [DEBUG] [Thread-138144] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-12T00:00:56.399 [DEBUG] [Thread-138144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:00:56.419 [DEBUG] [Thread-138144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:00:56.419 [INFO] [Thread-138144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:00:56.422 [DEBUG] [Thread-138144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:00:56.422 [DEBUG] [Thread-138144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] client lang: <none>
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] server lang: <none>
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] kex follows: False
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:00:56.423 [DEBUG] [Thread-138144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:00:56.424 [DEBUG] [Thread-138144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:00:56.424 [DEBUG] [Thread-138144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:00:56.424 [DEBUG] [Thread-138144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:00:56.424 [DEBUG] [Thread-138144] [transport.py] [_log()] Compression: none
2026-02-12T00:00:56.424 [DEBUG] [Thread-138144] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:00:56.441 [DEBUG] [Thread-138144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:00:56.441 [DEBUG] [Thread-138144] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:00:56.442 [DEBUG] [Thread-138144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:00:56.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:00:56.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:00:56.484 [DEBUG] [Thread-138144] [transport.py] [_log()] userauth is OK
2026-02-12T00:00:56.484 [DEBUG] [Thread-138144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:00:56.484 [DEBUG] [Thread-138144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:00:56.484 [DEBUG] [Thread-138144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:00:56.484 [DEBUG] [Thread-138144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:00:56.512 [INFO] [Thread-138144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:00:56.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:00:57.165 [DEBUG] [Thread-138144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:00:57.165 [DEBUG] [Thread-138144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:00:57.165 [DEBUG] [Thread-138144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:00:57.206 [DEBUG] [Thread-138144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:00:57.207 [DEBUG] [Thread-138144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:00:57.210 [DEBUG] [Thread-138144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:00:57.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:00:57.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:00:57.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:00:57.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:00:57.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:00:57.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:00:57.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:00:57.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:00:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:00:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.916802 -999.00  +14.20  13.91     92  +12.90 1 3 1 3 1     0    0 1.11 -7.09 .NESW 13.9 13.9 175.4 20.3 15.3 -9.1 15.2 -8.9 15.0 -10.5 15.3 -11.2
2026-02-12T00:00:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:00:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:00:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.916802
2026-02-12T00:00:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:00:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:00:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:00:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:00:57.238 [DEBUG] [Thread-138144] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:00:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:00:57.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:00:32', tmtdew=0.68, humidity=95.31, cloud=0.0, wind=18.69, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:00:11.693', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T21:59:00')
2026-02-12T00:00:57.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:00:57.341 [DEBUG] [Thread-138147] [transport.py] [_log()] starting thread (client mode): 0xa2dc0d30
2026-02-12T00:00:57.341 [DEBUG] [Thread-138147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:00:57.355 [DEBUG] [Thread-138147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:00:57.355 [INFO] [Thread-138147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:00:57.362 [DEBUG] [Thread-138147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] client lang: <none>
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] server lang: <none>
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] kex follows: False
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] Compression: none
2026-02-12T00:00:57.363 [DEBUG] [Thread-138147] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:00:57.421 [DEBUG] [Thread-138147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:00:57.422 [DEBUG] [Thread-138147] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:00:57.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:00:57.423 [DEBUG] [Thread-138147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:00:57.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:00:57.481 [DEBUG] [Thread-138147] [transport.py] [_log()] userauth is OK
2026-02-12T00:00:57.482 [DEBUG] [Thread-138147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:00:57.482 [DEBUG] [Thread-138147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:00:57.482 [DEBUG] [Thread-138147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:00:57.482 [DEBUG] [Thread-138147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:00:57.505 [INFO] [Thread-138147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:00:57.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:00:57.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:00:58.311 [DEBUG] [Thread-138147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:00:58.311 [DEBUG] [Thread-138147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:00:58.359 [DEBUG] [Thread-138147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:00:58.360 [DEBUG] [Thread-138147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:00:58.368 [DEBUG] [Thread-138147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:00:58.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:00:58.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:00:58.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:00:58.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:00:58.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:00:58.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:00:58.406 [DEBUG] [Thread-138147] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:01:00.839 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:01:00.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:01:11.212 [DEBUG] [Thread-138149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:01:26.268 [DEBUG] [Thread-138150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:01:28.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:01:28.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:01:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:01:30.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 1, 7), 0.68, 95.35, 0.0, 19.55, 14.24, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:01:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:01:07
2026-02-12T00:01:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:01:30.732 [DEBUG] [Thread-138151] [transport.py] [_log()] starting thread (client mode): 0xa2dc08b0
2026-02-12T00:01:30.732 [DEBUG] [Thread-138151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:01:30.752 [DEBUG] [Thread-138151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:01:30.753 [INFO] [Thread-138151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:01:30.753 [DEBUG] [Thread-138151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] client lang: <none>
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] server lang: <none>
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] kex follows: False
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] Compression: none
2026-02-12T00:01:30.754 [DEBUG] [Thread-138151] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:01:30.763 [DEBUG] [Thread-138151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:01:30.763 [DEBUG] [Thread-138151] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:01:30.764 [DEBUG] [Thread-138151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:01:30.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:01:30.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:01:30.765 [DEBUG] [Thread-138151] [transport.py] [_log()] userauth is OK
2026-02-12T00:01:30.765 [DEBUG] [Thread-138151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:01:30.765 [DEBUG] [Thread-138151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:01:30.765 [DEBUG] [Thread-138151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:01:30.766 [DEBUG] [Thread-138151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:01:30.783 [INFO] [Thread-138151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:01:30.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:01:31.433 [DEBUG] [Thread-138151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:01:31.433 [DEBUG] [Thread-138151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:01:31.434 [DEBUG] [Thread-138151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:01:31.475 [DEBUG] [Thread-138151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:01:31.475 [DEBUG] [Thread-138151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:01:31.478 [DEBUG] [Thread-138151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:01:31.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:01:31.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:01:31.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:01:31.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:01:31.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:01:31.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:01:31.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:01:31.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:01:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:01:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.917149 -999.00  +14.20  14.07     92  +12.90 1 3 1 3 1     0    0 1.16 -6.98 .NESW 14.1 14.1 163.2 17.6 15.4 -7.9 15.2 -7.3 15.1 -8.4 15.3 -9.4
2026-02-12T00:01:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:01:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:01:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.917149
2026-02-12T00:01:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:01:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:01:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:01:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:01:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:01:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:01:07', tmtdew=0.68, humidity=95.35, cloud=0.0, wind=19.55, temperature=14.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:00:41.674', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T21:59:00')
2026-02-12T00:01:31.506 [DEBUG] [Thread-138151] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:01:31.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:01:31.601 [DEBUG] [Thread-138154] [transport.py] [_log()] starting thread (client mode): 0xa2dc2f50
2026-02-12T00:01:31.601 [DEBUG] [Thread-138154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:01:31.616 [DEBUG] [Thread-138154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:01:31.616 [INFO] [Thread-138154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:01:31.623 [DEBUG] [Thread-138154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:01:31.624 [DEBUG] [Thread-138154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:01:31.624 [DEBUG] [Thread-138154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:01:31.624 [DEBUG] [Thread-138154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:01:31.624 [DEBUG] [Thread-138154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:01:31.624 [DEBUG] [Thread-138154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] client lang: <none>
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] server lang: <none>
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] kex follows: False
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] Compression: none
2026-02-12T00:01:31.625 [DEBUG] [Thread-138154] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:01:31.681 [DEBUG] [Thread-138154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:01:31.682 [DEBUG] [Thread-138154] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:01:31.683 [DEBUG] [Thread-138154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:01:31.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:01:31.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:01:31.737 [DEBUG] [Thread-138154] [transport.py] [_log()] userauth is OK
2026-02-12T00:01:31.738 [DEBUG] [Thread-138154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:01:31.738 [DEBUG] [Thread-138154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:01:31.738 [DEBUG] [Thread-138154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:01:31.738 [DEBUG] [Thread-138154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:01:31.757 [INFO] [Thread-138154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:01:31.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:01:31.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:01:32.588 [DEBUG] [Thread-138154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:01:32.588 [DEBUG] [Thread-138154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:01:32.638 [DEBUG] [Thread-138154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:01:32.638 [DEBUG] [Thread-138154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:01:32.648 [DEBUG] [Thread-138154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:01:32.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:01:32.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:01:32.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:01:32.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:01:32.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:01:32.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:01:32.689 [DEBUG] [Thread-138154] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:01:41.306 [DEBUG] [Thread-138156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:01:53.770 [DEBUG] [Thread-138157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:01:56.356 [DEBUG] [Thread-138158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:02:01.042 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:02:01.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:02:02.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:02:02.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:02:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:02:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 1, 43), 0.67, 95.4, 0.0, 20.17, 14.19, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:02:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:01:43
2026-02-12T00:02:04.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:02:04.986 [DEBUG] [Thread-138159] [transport.py] [_log()] starting thread (client mode): 0xa2dc3610
2026-02-12T00:02:04.986 [DEBUG] [Thread-138159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:02:05.006 [DEBUG] [Thread-138159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:02:05.006 [INFO] [Thread-138159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] client lang: <none>
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] server lang: <none>
2026-02-12T00:02:05.009 [DEBUG] [Thread-138159] [transport.py] [_log()] kex follows: False
2026-02-12T00:02:05.010 [DEBUG] [Thread-138159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:02:05.010 [DEBUG] [Thread-138159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:02:05.010 [DEBUG] [Thread-138159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:02:05.010 [DEBUG] [Thread-138159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:02:05.010 [DEBUG] [Thread-138159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:02:05.010 [DEBUG] [Thread-138159] [transport.py] [_log()] Compression: none
2026-02-12T00:02:05.010 [DEBUG] [Thread-138159] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:02:05.028 [DEBUG] [Thread-138159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:02:05.029 [DEBUG] [Thread-138159] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:02:05.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:02:05.031 [DEBUG] [Thread-138159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:02:05.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:02:05.033 [DEBUG] [Thread-138159] [transport.py] [_log()] userauth is OK
2026-02-12T00:02:05.034 [DEBUG] [Thread-138159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:02:05.034 [DEBUG] [Thread-138159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:02:05.034 [DEBUG] [Thread-138159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:02:05.034 [DEBUG] [Thread-138159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:02:05.060 [INFO] [Thread-138159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:02:05.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:02:05.701 [DEBUG] [Thread-138159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:02:05.702 [DEBUG] [Thread-138159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:02:05.702 [DEBUG] [Thread-138159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:02:05.742 [DEBUG] [Thread-138159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:02:05.743 [DEBUG] [Thread-138159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:02:05.746 [DEBUG] [Thread-138159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:02:05.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:02:05.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:02:05.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:02:05.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:02:05.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:02:05.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:02:05.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:02:05.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:02:05.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:02:05.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.917496 -999.00  +14.20  17.14     92  +12.90 1 3 1 3 1     0    0 1.10 -7.15 .NeSW 17.1 17.1 174.0 20.2 15.4 -6.4 15.2 -6.0 15.0 -7.7 15.4 -8.3
2026-02-12T00:02:05.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:02:05.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:02:05.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.917496
2026-02-12T00:02:05.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:02:05.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:02:05.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:02:05.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:02:05.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:02:05.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:01:43', tmtdew=0.67, humidity=95.4, cloud=0.0, wind=20.17, temperature=14.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:01:11.654', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T21:59:00')
2026-02-12T00:02:05.772 [DEBUG] [Thread-138159] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:02:05.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:02:05.869 [DEBUG] [Thread-138162] [transport.py] [_log()] starting thread (client mode): 0xa2dc0b20
2026-02-12T00:02:05.869 [DEBUG] [Thread-138162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:02:05.884 [DEBUG] [Thread-138162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:02:05.884 [INFO] [Thread-138162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:02:05.891 [DEBUG] [Thread-138162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] client lang: <none>
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] server lang: <none>
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] kex follows: False
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] Compression: none
2026-02-12T00:02:05.892 [DEBUG] [Thread-138162] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:02:05.951 [DEBUG] [Thread-138162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:02:05.951 [DEBUG] [Thread-138162] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:02:05.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:02:05.953 [DEBUG] [Thread-138162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:02:05.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:02:06.009 [DEBUG] [Thread-138162] [transport.py] [_log()] userauth is OK
2026-02-12T00:02:06.010 [DEBUG] [Thread-138162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:02:06.010 [DEBUG] [Thread-138162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:02:06.010 [DEBUG] [Thread-138162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:02:06.010 [DEBUG] [Thread-138162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:02:06.029 [INFO] [Thread-138162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:02:06.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:02:06.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:02:06.859 [DEBUG] [Thread-138162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:02:06.859 [DEBUG] [Thread-138162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:02:06.907 [DEBUG] [Thread-138162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:02:06.908 [DEBUG] [Thread-138162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:02:06.917 [DEBUG] [Thread-138162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:02:06.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:02:06.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:02:06.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:02:06.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:02:06.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:02:06.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:02:06.954 [DEBUG] [Thread-138162] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:02:11.386 [DEBUG] [Thread-138164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:02:26.440 [DEBUG] [Thread-138165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:02:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:02:36.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:02:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:02:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 2, 19), 0.67, 95.4, 0.0, 21.91, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:02:38.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:02:19
2026-02-12T00:02:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:02:39.531 [DEBUG] [Thread-138166] [transport.py] [_log()] starting thread (client mode): 0xa2dc2020
2026-02-12T00:02:39.531 [DEBUG] [Thread-138166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:02:39.554 [DEBUG] [Thread-138166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:02:39.554 [INFO] [Thread-138166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:02:39.557 [DEBUG] [Thread-138166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:02:39.557 [DEBUG] [Thread-138166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:02:39.557 [DEBUG] [Thread-138166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] client lang: <none>
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] server lang: <none>
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] kex follows: False
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] Compression: none
2026-02-12T00:02:39.558 [DEBUG] [Thread-138166] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:02:39.572 [DEBUG] [Thread-138166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:02:39.573 [DEBUG] [Thread-138166] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:02:39.573 [DEBUG] [Thread-138166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:02:39.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:02:39.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:02:39.575 [DEBUG] [Thread-138166] [transport.py] [_log()] userauth is OK
2026-02-12T00:02:39.576 [DEBUG] [Thread-138166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:02:39.576 [DEBUG] [Thread-138166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:02:39.576 [DEBUG] [Thread-138166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:02:39.576 [DEBUG] [Thread-138166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:02:39.600 [INFO] [Thread-138166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:02:39.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:02:40.263 [DEBUG] [Thread-138166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:02:40.263 [DEBUG] [Thread-138166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:02:40.264 [DEBUG] [Thread-138166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:02:40.304 [DEBUG] [Thread-138166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:02:40.305 [DEBUG] [Thread-138166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:02:40.308 [DEBUG] [Thread-138166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:02:40.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:02:40.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:02:40.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:02:40.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:02:40.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:02:40.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:02:40.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:02:40.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:02:40.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:02:40.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.917843 -999.00  +14.20  18.95     91  +12.90 1 3 1 3 1     0    0 1.10 -8.57 .N..W 18.9 18.9 181.8 22.6 15.5 -5.1 15.3 -5.5 15.1 -6.4 15.4 -6.7
2026-02-12T00:02:40.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:02:40.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:02:40.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.917843
2026-02-12T00:02:40.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:02:40.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:02:40.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:02:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:02:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:02:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:02:19', tmtdew=0.67, humidity=95.4, cloud=0.0, wind=21.91, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:01:41.635', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T21:59:00')
2026-02-12T00:02:40.336 [DEBUG] [Thread-138166] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:02:40.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:02:40.439 [DEBUG] [Thread-138169] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-12T00:02:40.440 [DEBUG] [Thread-138169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:02:40.455 [DEBUG] [Thread-138169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:02:40.455 [INFO] [Thread-138169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] client lang: <none>
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] server lang: <none>
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] kex follows: False
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:02:40.463 [DEBUG] [Thread-138169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:02:40.464 [DEBUG] [Thread-138169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:02:40.464 [DEBUG] [Thread-138169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:02:40.464 [DEBUG] [Thread-138169] [transport.py] [_log()] Compression: none
2026-02-12T00:02:40.464 [DEBUG] [Thread-138169] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:02:40.521 [DEBUG] [Thread-138169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:02:40.522 [DEBUG] [Thread-138169] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:02:40.523 [DEBUG] [Thread-138169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:02:40.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:02:40.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:02:40.578 [DEBUG] [Thread-138169] [transport.py] [_log()] userauth is OK
2026-02-12T00:02:40.578 [DEBUG] [Thread-138169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:02:40.578 [DEBUG] [Thread-138169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:02:40.578 [DEBUG] [Thread-138169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:02:40.578 [DEBUG] [Thread-138169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:02:40.597 [INFO] [Thread-138169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:02:40.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:02:40.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:02:41.437 [DEBUG] [Thread-138169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:02:41.437 [DEBUG] [Thread-138169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:02:41.477 [DEBUG] [Thread-138171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:02:41.485 [DEBUG] [Thread-138169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:02:41.485 [DEBUG] [Thread-138169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:02:41.495 [DEBUG] [Thread-138169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:02:41.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:02:41.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:02:41.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:02:41.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:02:41.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:02:41.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:02:41.530 [DEBUG] [Thread-138169] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:02:53.844 [DEBUG] [Thread-138172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:02:56.538 [DEBUG] [Thread-138173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:03:01.251 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:03:01.252 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:03:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:03:11.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:03:11.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:03:11.577 [DEBUG] [Thread-138174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:03:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 2, 55), 0.73, 95.36, 0.0, 19.76, 14.19, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:03:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:02:55
2026-02-12T00:03:13.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:03:14.046 [DEBUG] [Thread-138175] [transport.py] [_log()] starting thread (client mode): 0xa2d976d0
2026-02-12T00:03:14.046 [DEBUG] [Thread-138175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:03:14.067 [DEBUG] [Thread-138175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:03:14.067 [INFO] [Thread-138175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] client lang: <none>
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] server lang: <none>
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] kex follows: False
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] Compression: none
2026-02-12T00:03:14.070 [DEBUG] [Thread-138175] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:03:14.091 [DEBUG] [Thread-138175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:03:14.091 [DEBUG] [Thread-138175] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:03:14.092 [DEBUG] [Thread-138175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:03:14.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:03:14.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:03:14.094 [DEBUG] [Thread-138175] [transport.py] [_log()] userauth is OK
2026-02-12T00:03:14.094 [DEBUG] [Thread-138175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:03:14.094 [DEBUG] [Thread-138175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:03:14.094 [DEBUG] [Thread-138175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:03:14.094 [DEBUG] [Thread-138175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:03:14.119 [INFO] [Thread-138175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:03:14.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:03:14.876 [DEBUG] [Thread-138175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:03:14.876 [DEBUG] [Thread-138175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:03:14.876 [DEBUG] [Thread-138175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:03:14.916 [DEBUG] [Thread-138175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:03:14.917 [DEBUG] [Thread-138175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:03:14.920 [DEBUG] [Thread-138175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:03:14.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:03:14.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:03:14.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:03:14.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:03:14.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:03:14.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:03:14.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:03:14.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:03:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:03:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.918538 -999.00  +14.20  14.69     91  +12.90 1 3 1 3 1     0    0 1.07 -8.66 .N..W 14.7 14.7 164.2 23.2 15.5 -3.3 15.3 -3.3 15.2 -3.8 15.5 -4.0
2026-02-12T00:03:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:03:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:03:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.918538
2026-02-12T00:03:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:03:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:03:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:03:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:03:14.944 [DEBUG] [Thread-138175] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:03:14.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:03:14.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:02:55', tmtdew=0.73, humidity=95.36, cloud=0.0, wind=19.76, temperature=14.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:02:41.683', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T21:59:00')
2026-02-12T00:03:15.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:03:15.040 [DEBUG] [Thread-138178] [transport.py] [_log()] starting thread (client mode): 0xa2d957b0
2026-02-12T00:03:15.040 [DEBUG] [Thread-138178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:03:15.053 [DEBUG] [Thread-138178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:03:15.053 [INFO] [Thread-138178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:03:15.061 [DEBUG] [Thread-138178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:03:15.061 [DEBUG] [Thread-138178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:03:15.061 [DEBUG] [Thread-138178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:03:15.061 [DEBUG] [Thread-138178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:15.061 [DEBUG] [Thread-138178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] client lang: <none>
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] server lang: <none>
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] kex follows: False
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:03:15.062 [DEBUG] [Thread-138178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:03:15.063 [DEBUG] [Thread-138178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:03:15.063 [DEBUG] [Thread-138178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:03:15.063 [DEBUG] [Thread-138178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:03:15.063 [DEBUG] [Thread-138178] [transport.py] [_log()] Compression: none
2026-02-12T00:03:15.063 [DEBUG] [Thread-138178] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:03:15.118 [DEBUG] [Thread-138178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:03:15.118 [DEBUG] [Thread-138178] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:03:15.119 [DEBUG] [Thread-138178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:03:15.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:03:15.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:03:15.181 [DEBUG] [Thread-138178] [transport.py] [_log()] userauth is OK
2026-02-12T00:03:15.182 [DEBUG] [Thread-138178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:03:15.182 [DEBUG] [Thread-138178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:03:15.182 [DEBUG] [Thread-138178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:03:15.182 [DEBUG] [Thread-138178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:03:15.201 [INFO] [Thread-138178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:03:15.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:03:15.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:03:16.001 [DEBUG] [Thread-138178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:03:16.001 [DEBUG] [Thread-138178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:03:16.050 [DEBUG] [Thread-138178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:03:16.050 [DEBUG] [Thread-138178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:03:16.059 [DEBUG] [Thread-138178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:03:16.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:03:16.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:03:16.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:03:16.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:03:16.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:03:16.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:03:16.095 [DEBUG] [Thread-138178] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:03:26.614 [DEBUG] [Thread-138180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:03:41.676 [DEBUG] [Thread-138181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:03:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:03:46.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:03:46.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:03:48.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 3, 30), 0.73, 95.36, 0.0, 20.86, 14.19, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:03:48.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:03:30
2026-02-12T00:03:48.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:03:48.808 [DEBUG] [Thread-138182] [transport.py] [_log()] starting thread (client mode): 0xa2d95f30
2026-02-12T00:03:48.808 [DEBUG] [Thread-138182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:03:48.828 [DEBUG] [Thread-138182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:03:48.828 [INFO] [Thread-138182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] client lang: <none>
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] server lang: <none>
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] kex follows: False
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:03:48.831 [DEBUG] [Thread-138182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:03:48.832 [DEBUG] [Thread-138182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:03:48.832 [DEBUG] [Thread-138182] [transport.py] [_log()] Compression: none
2026-02-12T00:03:48.832 [DEBUG] [Thread-138182] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:03:48.847 [DEBUG] [Thread-138182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:03:48.847 [DEBUG] [Thread-138182] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:03:48.848 [DEBUG] [Thread-138182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:03:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:03:48.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:03:48.850 [DEBUG] [Thread-138182] [transport.py] [_log()] userauth is OK
2026-02-12T00:03:48.850 [DEBUG] [Thread-138182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:03:48.850 [DEBUG] [Thread-138182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:03:48.851 [DEBUG] [Thread-138182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:03:48.851 [DEBUG] [Thread-138182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:03:48.875 [INFO] [Thread-138182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:03:48.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:03:49.503 [DEBUG] [Thread-138182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:03:49.503 [DEBUG] [Thread-138182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:03:49.504 [DEBUG] [Thread-138182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:03:49.544 [DEBUG] [Thread-138182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:03:49.545 [DEBUG] [Thread-138182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:03:49.548 [DEBUG] [Thread-138182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:03:49.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:03:49.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:03:49.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:03:49.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:03:49.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:03:49.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:03:49.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:03:49.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:03:49.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:03:49.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.918885 -999.00  +14.20  18.46     91  +12.90 1 3 1 3 1     0    0 1.07 -8.08 ....W 18.5 18.5 170.2 21.4 15.6 -3.0 15.4 -2.9 15.2 -3.4 15.6 -3.6
2026-02-12T00:03:49.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:03:49.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:03:49.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.918885
2026-02-12T00:03:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:03:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:03:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:03:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:03:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:03:49.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:03:30', tmtdew=0.73, humidity=95.36, cloud=0.0, wind=20.86, temperature=14.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:03:11.664', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T22:01:00')
2026-02-12T00:03:49.574 [DEBUG] [Thread-138182] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:03:49.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:03:49.670 [DEBUG] [Thread-138185] [transport.py] [_log()] starting thread (client mode): 0xa2dc1c00
2026-02-12T00:03:49.670 [DEBUG] [Thread-138185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:03:49.684 [DEBUG] [Thread-138185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:03:49.684 [INFO] [Thread-138185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:03:49.692 [DEBUG] [Thread-138185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] client lang: <none>
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] server lang: <none>
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] kex follows: False
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] Compression: none
2026-02-12T00:03:49.693 [DEBUG] [Thread-138185] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:03:49.751 [DEBUG] [Thread-138185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:03:49.751 [DEBUG] [Thread-138185] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:03:49.752 [DEBUG] [Thread-138185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:03:49.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:03:49.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:03:49.810 [DEBUG] [Thread-138185] [transport.py] [_log()] userauth is OK
2026-02-12T00:03:49.811 [DEBUG] [Thread-138185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:03:49.811 [DEBUG] [Thread-138185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:03:49.811 [DEBUG] [Thread-138185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:03:49.811 [DEBUG] [Thread-138185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:03:49.831 [INFO] [Thread-138185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:03:49.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:03:49.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:03:50.621 [DEBUG] [Thread-138185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:03:50.621 [DEBUG] [Thread-138185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:03:50.669 [DEBUG] [Thread-138185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:03:50.669 [DEBUG] [Thread-138185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:03:50.678 [DEBUG] [Thread-138185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:03:50.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:03:50.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:03:50.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:03:50.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:03:50.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:03:50.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:03:50.716 [DEBUG] [Thread-138185] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:03:53.910 [DEBUG] [Thread-138187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:03:56.715 [DEBUG] [Thread-138188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:01.454 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:01.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:11.768 [DEBUG] [Thread-138189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:04:20.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:04:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:04:23.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 4, 6), 0.73, 95.36, 0.0, 20.68, 14.17, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:04:23.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:04:06
2026-02-12T00:04:23.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:04:23.751 [DEBUG] [Thread-138190] [transport.py] [_log()] starting thread (client mode): 0xa2d95fc0
2026-02-12T00:04:23.751 [DEBUG] [Thread-138190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:04:23.771 [DEBUG] [Thread-138190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:04:23.771 [INFO] [Thread-138190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] client lang: <none>
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] server lang: <none>
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] kex follows: False
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] Compression: none
2026-02-12T00:04:23.774 [DEBUG] [Thread-138190] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:04:23.791 [DEBUG] [Thread-138190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:04:23.791 [DEBUG] [Thread-138190] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:04:23.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:04:23.792 [DEBUG] [Thread-138190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:04:23.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:04:23.795 [DEBUG] [Thread-138190] [transport.py] [_log()] userauth is OK
2026-02-12T00:04:23.795 [DEBUG] [Thread-138190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:04:23.795 [DEBUG] [Thread-138190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:04:23.795 [DEBUG] [Thread-138190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:04:23.795 [DEBUG] [Thread-138190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:04:23.820 [INFO] [Thread-138190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:04:23.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:04:24.452 [DEBUG] [Thread-138190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:04:24.453 [DEBUG] [Thread-138190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:04:24.453 [DEBUG] [Thread-138190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:04:24.493 [DEBUG] [Thread-138190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:04:24.493 [DEBUG] [Thread-138190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:04:24.497 [DEBUG] [Thread-138190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:04:24.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:04:24.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:04:24.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:04:24.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:04:24.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:04:24.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:04:24.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:04:24.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:04:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:04:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.919232 -999.00  +14.20  19.29     91  +12.90 1 3 1 3 1     0    0 1.12 -7.61 ....W 19.3 19.3 176.4 22.8 15.7 -2.6 15.4 -2.7 15.2 -2.8 15.6 -3.0
2026-02-12T00:04:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:04:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:04:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.919232
2026-02-12T00:04:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:04:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:04:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:04:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:04:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:04:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:04:06', tmtdew=0.73, humidity=95.36, cloud=0.0, wind=20.68, temperature=14.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:03:41.645', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T22:01:00')
2026-02-12T00:04:24.523 [DEBUG] [Thread-138190] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:04:24.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:04:24.618 [DEBUG] [Thread-138193] [transport.py] [_log()] starting thread (client mode): 0xa2d963e0
2026-02-12T00:04:24.618 [DEBUG] [Thread-138193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:04:24.632 [DEBUG] [Thread-138193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:04:24.633 [INFO] [Thread-138193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:24.640 [DEBUG] [Thread-138193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] client lang: <none>
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] server lang: <none>
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] kex follows: False
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] Compression: none
2026-02-12T00:04:24.641 [DEBUG] [Thread-138193] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:04:24.699 [DEBUG] [Thread-138193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:04:24.699 [DEBUG] [Thread-138193] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:04:24.700 [DEBUG] [Thread-138193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:04:24.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:04:24.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:04:24.759 [DEBUG] [Thread-138193] [transport.py] [_log()] userauth is OK
2026-02-12T00:04:24.760 [DEBUG] [Thread-138193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:04:24.760 [DEBUG] [Thread-138193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:04:24.760 [DEBUG] [Thread-138193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:04:24.760 [DEBUG] [Thread-138193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:04:24.778 [INFO] [Thread-138193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:04:24.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:04:24.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:04:25.611 [DEBUG] [Thread-138193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:04:25.611 [DEBUG] [Thread-138193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:04:25.659 [DEBUG] [Thread-138193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:04:25.659 [DEBUG] [Thread-138193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:04:25.668 [DEBUG] [Thread-138193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:04:25.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:04:25.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')
2026-02-12T00:04:25.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:04:25.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:04:25.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:04:25.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:04:25.704 [DEBUG] [Thread-138193] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:04:26.807 [DEBUG] [Thread-138195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:41.871 [DEBUG] [Thread-138196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:53.985 [DEBUG] [Thread-138197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:55.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:04:55.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:04:55.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:04:56.906 [DEBUG] [Thread-138198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:04:57.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 4, 41), 1.16, 92.66, 0.0, 24.38, 14.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:04:57.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:04:41
2026-02-12T00:04:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:04:58.123 [DEBUG] [Thread-138199] [transport.py] [_log()] starting thread (client mode): 0xa2dc2a70
2026-02-12T00:04:58.123 [DEBUG] [Thread-138199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:04:58.143 [DEBUG] [Thread-138199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:04:58.143 [INFO] [Thread-138199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] client lang: <none>
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] server lang: <none>
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] kex follows: False
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] Compression: none
2026-02-12T00:04:58.147 [DEBUG] [Thread-138199] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:04:58.164 [DEBUG] [Thread-138199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:04:58.165 [DEBUG] [Thread-138199] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:04:58.165 [DEBUG] [Thread-138199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:04:58.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:04:58.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:04:58.167 [DEBUG] [Thread-138199] [transport.py] [_log()] userauth is OK
2026-02-12T00:04:58.167 [DEBUG] [Thread-138199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:04:58.167 [DEBUG] [Thread-138199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:04:58.168 [DEBUG] [Thread-138199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:04:58.168 [DEBUG] [Thread-138199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:04:58.183 [INFO] [Thread-138199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:04:58.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:04:59.138 [DEBUG] [Thread-138199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:04:59.139 [DEBUG] [Thread-138199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:04:59.139 [DEBUG] [Thread-138199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:04:59.180 [DEBUG] [Thread-138199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:04:59.181 [DEBUG] [Thread-138199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:04:59.183 [DEBUG] [Thread-138199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:04:59.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:04:59.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:04:59.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:04:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:04:59.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:04:59.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:04:59.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:04:59.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:04:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:04:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.919579 -999.00  +14.20  17.59     91  +12.80 1 3 1 3 1     0    0 1.15 -7.13 ----- 17.6 17.6 171.6 22.3 15.7 -2.7 15.5 -2.4 15.3 -2.6 15.6 -2.9
2026-02-12T00:04:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:04:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:04:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.919579
2026-02-12T00:04:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:04:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:04:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:04:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:04:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:04:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:04:41', tmtdew=1.16, humidity=92.66, cloud=0.0, wind=24.38, temperature=14.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:04:11.626', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T22:01:00')
2026-02-12T00:04:59.211 [DEBUG] [Thread-138199] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:04:59.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:04:59.302 [DEBUG] [Thread-138202] [transport.py] [_log()] starting thread (client mode): 0xa2d972b0
2026-02-12T00:04:59.302 [DEBUG] [Thread-138202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:04:59.319 [DEBUG] [Thread-138202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:04:59.320 [INFO] [Thread-138202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:04:59.328 [DEBUG] [Thread-138202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] client lang: <none>
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] server lang: <none>
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] kex follows: False
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:04:59.329 [DEBUG] [Thread-138202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:04:59.330 [DEBUG] [Thread-138202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:04:59.330 [DEBUG] [Thread-138202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:04:59.330 [DEBUG] [Thread-138202] [transport.py] [_log()] Compression: none
2026-02-12T00:04:59.330 [DEBUG] [Thread-138202] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:04:59.390 [DEBUG] [Thread-138202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:04:59.390 [DEBUG] [Thread-138202] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:04:59.391 [DEBUG] [Thread-138202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:04:59.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:04:59.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:04:59.453 [DEBUG] [Thread-138202] [transport.py] [_log()] userauth is OK
2026-02-12T00:04:59.453 [DEBUG] [Thread-138202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:04:59.454 [DEBUG] [Thread-138202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:04:59.454 [DEBUG] [Thread-138202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:04:59.454 [DEBUG] [Thread-138202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:04:59.477 [INFO] [Thread-138202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:04:59.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:04:59.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:05:00.276 [DEBUG] [Thread-138202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:05:00.276 [DEBUG] [Thread-138202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:05:00.327 [DEBUG] [Thread-138202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:05:00.328 [DEBUG] [Thread-138202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:05:00.337 [DEBUG] [Thread-138202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:05:00.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:05:00.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:05:00.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:05:00.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:05:00.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:05:00.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:05:00.373 [DEBUG] [Thread-138202] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:05:01.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:05:01.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:05:11.943 [DEBUG] [Thread-138204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:05:26.994 [DEBUG] [Thread-138205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:05:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:05:30.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:05:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:05:32.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 5, 17), 0.74, 95.3, 0.0, 22.39, 14.19, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:05:32.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:05:17
2026-02-12T00:05:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:05:32.869 [DEBUG] [Thread-138206] [transport.py] [_log()] starting thread (client mode): 0xa2dc0580
2026-02-12T00:05:32.869 [DEBUG] [Thread-138206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:05:32.890 [DEBUG] [Thread-138206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:05:32.890 [INFO] [Thread-138206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] client lang: <none>
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] server lang: <none>
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] kex follows: False
2026-02-12T00:05:32.893 [DEBUG] [Thread-138206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:05:32.894 [DEBUG] [Thread-138206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:05:32.894 [DEBUG] [Thread-138206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:05:32.894 [DEBUG] [Thread-138206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:05:32.894 [DEBUG] [Thread-138206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:05:32.894 [DEBUG] [Thread-138206] [transport.py] [_log()] Compression: none
2026-02-12T00:05:32.894 [DEBUG] [Thread-138206] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:05:32.910 [DEBUG] [Thread-138206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:05:32.911 [DEBUG] [Thread-138206] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:05:32.911 [DEBUG] [Thread-138206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:05:32.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:05:32.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:05:32.913 [DEBUG] [Thread-138206] [transport.py] [_log()] userauth is OK
2026-02-12T00:05:32.913 [DEBUG] [Thread-138206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:05:32.913 [DEBUG] [Thread-138206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:05:32.913 [DEBUG] [Thread-138206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:05:32.913 [DEBUG] [Thread-138206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:05:32.937 [INFO] [Thread-138206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:05:32.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:05:33.579 [DEBUG] [Thread-138206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:05:33.579 [DEBUG] [Thread-138206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:05:33.579 [DEBUG] [Thread-138206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:05:33.619 [DEBUG] [Thread-138206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:05:33.620 [DEBUG] [Thread-138206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:05:33.623 [DEBUG] [Thread-138206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:05:33.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:05:33.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:05:33.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:05:33.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:05:33.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:05:33.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:05:33.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:05:33.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:05:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:05:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.919927 -999.00  +14.20  16.05     91  +12.90 1 3 1 3 1     0    0 1.13 -6.83 ----- 16.1 16.1 160.4 20.2 15.7 -3.1 15.4 -3.1 15.3 -2.9 15.6 -3.1
2026-02-12T00:05:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:05:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:05:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.919927
2026-02-12T00:05:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:05:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:05:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:05:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:05:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:05:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:05:17', tmtdew=0.74, humidity=95.3, cloud=0.0, wind=22.39, temperature=14.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:04:41.693', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T22:01:00')
2026-02-12T00:05:33.651 [DEBUG] [Thread-138206] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:05:33.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:05:33.748 [DEBUG] [Thread-138209] [transport.py] [_log()] starting thread (client mode): 0xa2dc3430
2026-02-12T00:05:33.748 [DEBUG] [Thread-138209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:05:33.763 [DEBUG] [Thread-138209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:05:33.763 [INFO] [Thread-138209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:05:33.771 [DEBUG] [Thread-138209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:05:33.771 [DEBUG] [Thread-138209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:05:33.771 [DEBUG] [Thread-138209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:05:33.771 [DEBUG] [Thread-138209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:05:33.771 [DEBUG] [Thread-138209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] client lang: <none>
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] server lang: <none>
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] kex follows: False
2026-02-12T00:05:33.772 [DEBUG] [Thread-138209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:05:33.773 [DEBUG] [Thread-138209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:05:33.773 [DEBUG] [Thread-138209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:05:33.773 [DEBUG] [Thread-138209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:05:33.773 [DEBUG] [Thread-138209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:05:33.773 [DEBUG] [Thread-138209] [transport.py] [_log()] Compression: none
2026-02-12T00:05:33.773 [DEBUG] [Thread-138209] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:05:33.831 [DEBUG] [Thread-138209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:05:33.832 [DEBUG] [Thread-138209] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:05:33.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:05:33.833 [DEBUG] [Thread-138209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:05:33.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:05:33.887 [DEBUG] [Thread-138209] [transport.py] [_log()] userauth is OK
2026-02-12T00:05:33.887 [DEBUG] [Thread-138209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:05:33.887 [DEBUG] [Thread-138209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:05:33.887 [DEBUG] [Thread-138209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:05:33.887 [DEBUG] [Thread-138209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:05:33.907 [INFO] [Thread-138209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:05:33.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:05:33.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:05:34.780 [DEBUG] [Thread-138209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:05:34.781 [DEBUG] [Thread-138209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:05:34.828 [DEBUG] [Thread-138209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:05:34.829 [DEBUG] [Thread-138209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:05:34.839 [DEBUG] [Thread-138209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:05:34.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:05:34.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:05:34.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
2026-02-12T00:05:34.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:05:34.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:05:34.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:05:34.876 [DEBUG] [Thread-138209] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:05:42.032 [DEBUG] [Thread-138211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:05:54.060 [DEBUG] [Thread-138212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:05:57.082 [DEBUG] [Thread-138213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:06:01.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:06:01.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:06:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:06:04.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:06:04.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:06:06.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 5, 52), 0.79, 95.28, 0.0, 21.14, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:06:06.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:05:52
2026-02-12T00:06:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:06:07.460 [DEBUG] [Thread-138214] [transport.py] [_log()] starting thread (client mode): 0xa2d9e260
2026-02-12T00:06:07.460 [DEBUG] [Thread-138214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:06:07.480 [DEBUG] [Thread-138214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:06:07.480 [INFO] [Thread-138214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:06:07.483 [DEBUG] [Thread-138214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] client lang: <none>
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] server lang: <none>
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] kex follows: False
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] Compression: none
2026-02-12T00:06:07.484 [DEBUG] [Thread-138214] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:06:07.503 [DEBUG] [Thread-138214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:06:07.503 [DEBUG] [Thread-138214] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:06:07.504 [DEBUG] [Thread-138214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:06:07.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:06:07.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:06:07.505 [DEBUG] [Thread-138214] [transport.py] [_log()] userauth is OK
2026-02-12T00:06:07.505 [DEBUG] [Thread-138214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:06:07.505 [DEBUG] [Thread-138214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:06:07.505 [DEBUG] [Thread-138214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:06:07.505 [DEBUG] [Thread-138214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:06:07.521 [INFO] [Thread-138214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:06:07.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:06:08.333 [DEBUG] [Thread-138214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:06:08.333 [DEBUG] [Thread-138214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:06:08.333 [DEBUG] [Thread-138214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:06:08.374 [DEBUG] [Thread-138214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:06:08.375 [DEBUG] [Thread-138214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:06:08.378 [DEBUG] [Thread-138214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:06:08.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:06:08.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:06:08.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:06:08.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:06:08.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:06:08.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:06:08.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:06:08.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:06:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:06:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.920274 -999.00  +14.30  12.99     91  +12.90 1 3 1 3 1     0    0 1.17 -5.31 ----- 13.0 13.0 170.6 18.1 15.7 -3.9 15.5 -3.6 15.4 -3.7 15.7 -3.9
2026-02-12T00:06:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:06:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:06:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.920274
2026-02-12T00:06:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:06:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:06:08.403 [DEBUG] [Thread-138214] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:06:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:06:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:06:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:06:08.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:05:52', tmtdew=0.79, humidity=95.28, cloud=0.0, wind=21.14, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:05:11.674', atlas_cloud=3, atlas_rain=1, zp_data=[2.9597499999999997, 1.3447500000000012, 1.54425, nan, nan, 2.1187500000000004, nan, nan, nan, 1.3390000000000004, 0.9342499999999996, 0.6924999999999999, 1.2504999999999997, 0.6352499999999992, 0.8865000000000007, 1.2519999999999998, 0.7797499999999999, 1.4779999999999998, 1.0169999999999995, 0.3232499999999998, 0.27199999999999847, 0.17074999999999818, 0.28025000000000055, 0.5847499999999997, 0.7209999999999992, 1.931, 0.5517500000000002, 0.27449999999999974, 0.29499999999999993, 0.1695000000000011, 0.26500000000000057, 0.5180000000000007, nan], zp_timestamp='2026-02-11T22:01:00')
2026-02-12T00:06:08.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:06:08.502 [DEBUG] [Thread-138217] [transport.py] [_log()] starting thread (client mode): 0xa2d9cc10
2026-02-12T00:06:08.502 [DEBUG] [Thread-138217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:06:08.517 [DEBUG] [Thread-138217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:06:08.517 [INFO] [Thread-138217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] client lang: <none>
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] server lang: <none>
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] kex follows: False
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] Compression: none
2026-02-12T00:06:08.525 [DEBUG] [Thread-138217] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:06:08.587 [DEBUG] [Thread-138217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:06:08.588 [DEBUG] [Thread-138217] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:06:08.588 [DEBUG] [Thread-138217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:06:08.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:06:08.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:06:08.643 [DEBUG] [Thread-138217] [transport.py] [_log()] userauth is OK
2026-02-12T00:06:08.643 [DEBUG] [Thread-138217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:06:08.643 [DEBUG] [Thread-138217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:06:08.644 [DEBUG] [Thread-138217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:06:08.644 [DEBUG] [Thread-138217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:06:08.669 [INFO] [Thread-138217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:06:08.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:06:08.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:06:09.492 [DEBUG] [Thread-138217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:06:09.493 [DEBUG] [Thread-138217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:06:09.540 [DEBUG] [Thread-138217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:06:09.541 [DEBUG] [Thread-138217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:06:09.550 [DEBUG] [Thread-138217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:06:09.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:06:09.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:06:09.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:06:09.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:06:09.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:06:09.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:06:09.588 [DEBUG] [Thread-138217] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:06:12.123 [DEBUG] [Thread-138219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:06:27.179 [DEBUG] [Thread-138220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:06:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:06:39.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:06:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:06:41.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 6, 27), 0.81, 95.18, 0.0, 21.03, 14.17, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:06:41.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:06:27
2026-02-12T00:06:42.216 [DEBUG] [Thread-138221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:06:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:06:42.529 [DEBUG] [Thread-138222] [transport.py] [_log()] starting thread (client mode): 0xa2d967a0
2026-02-12T00:06:42.529 [DEBUG] [Thread-138222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:06:42.549 [DEBUG] [Thread-138222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:06:42.549 [INFO] [Thread-138222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] client lang: <none>
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] server lang: <none>
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] kex follows: False
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] Compression: none
2026-02-12T00:06:42.552 [DEBUG] [Thread-138222] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:06:42.569 [DEBUG] [Thread-138222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:06:42.570 [DEBUG] [Thread-138222] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:06:42.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:06:42.571 [DEBUG] [Thread-138222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:06:42.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:06:42.573 [DEBUG] [Thread-138222] [transport.py] [_log()] userauth is OK
2026-02-12T00:06:42.574 [DEBUG] [Thread-138222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:06:42.574 [DEBUG] [Thread-138222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:06:42.574 [DEBUG] [Thread-138222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:06:42.574 [DEBUG] [Thread-138222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:06:42.593 [INFO] [Thread-138222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:06:42.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:06:43.231 [DEBUG] [Thread-138222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:06:43.232 [DEBUG] [Thread-138222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:06:43.232 [DEBUG] [Thread-138222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:06:43.273 [DEBUG] [Thread-138222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:06:43.273 [DEBUG] [Thread-138222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:06:43.276 [DEBUG] [Thread-138222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:06:43.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:06:43.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:06:43.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:06:43.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:06:43.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:06:43.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:06:43.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:06:43.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:06:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:06:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.920968 -999.00  +14.30  12.48     91  +12.90 1 3 1 3 1     0    0 1.24 -4.35 ----- 12.5 12.5 171.6 20.4 15.7 -2.9 15.6 -3.2 15.4 -3.2 15.7 -3.5
2026-02-12T00:06:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:06:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:06:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.920968
2026-02-12T00:06:43.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:06:43.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:06:43.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:06:43.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:06:43.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:06:43.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:06:27', tmtdew=0.81, humidity=95.18, cloud=0.0, wind=21.03, temperature=14.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:06:11.635', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:06:43.300 [DEBUG] [Thread-138222] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:06:43.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:06:43.398 [DEBUG] [Thread-138225] [transport.py] [_log()] starting thread (client mode): 0xa2d96a40
2026-02-12T00:06:43.399 [DEBUG] [Thread-138225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:06:43.417 [DEBUG] [Thread-138225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:06:43.418 [INFO] [Thread-138225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:06:43.425 [DEBUG] [Thread-138225] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] client lang: <none>
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] server lang: <none>
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] kex follows: False
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:06:43.426 [DEBUG] [Thread-138225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:06:43.427 [DEBUG] [Thread-138225] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:06:43.427 [DEBUG] [Thread-138225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:06:43.427 [DEBUG] [Thread-138225] [transport.py] [_log()] Compression: none
2026-02-12T00:06:43.427 [DEBUG] [Thread-138225] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:06:43.487 [DEBUG] [Thread-138225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:06:43.488 [DEBUG] [Thread-138225] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:06:43.488 [DEBUG] [Thread-138225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:06:43.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:06:43.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:06:43.550 [DEBUG] [Thread-138225] [transport.py] [_log()] userauth is OK
2026-02-12T00:06:43.550 [DEBUG] [Thread-138225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:06:43.550 [DEBUG] [Thread-138225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:06:43.550 [DEBUG] [Thread-138225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:06:43.550 [DEBUG] [Thread-138225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:06:43.572 [INFO] [Thread-138225] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:06:43.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:06:43.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:06:44.419 [DEBUG] [Thread-138225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:06:44.419 [DEBUG] [Thread-138225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:06:44.467 [DEBUG] [Thread-138225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:06:44.467 [DEBUG] [Thread-138225] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:06:44.475 [DEBUG] [Thread-138225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:06:44.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:06:44.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')
2026-02-12T00:06:44.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:06:44.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:06:44.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:06:44.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:06:44.509 [DEBUG] [Thread-138225] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:06:54.117 [DEBUG] [Thread-138227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:06:57.251 [DEBUG] [Thread-138228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:07:02.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:07:02.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:07:12.302 [DEBUG] [Thread-138229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:07:14.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:07:14.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:07:14.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:07:16.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 7, 3), 0.8, 95.2, 0.0, 21.31, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:07:16.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:07:03
2026-02-12T00:07:16.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:07:16.872 [DEBUG] [Thread-138230] [transport.py] [_log()] starting thread (client mode): 0xa2d9da20
2026-02-12T00:07:16.872 [DEBUG] [Thread-138230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:07:16.890 [DEBUG] [Thread-138230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:07:16.891 [INFO] [Thread-138230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] client lang: <none>
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] server lang: <none>
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] kex follows: False
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] Compression: none
2026-02-12T00:07:16.894 [DEBUG] [Thread-138230] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:07:16.913 [DEBUG] [Thread-138230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:07:16.913 [DEBUG] [Thread-138230] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:07:16.914 [DEBUG] [Thread-138230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:07:16.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:07:16.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:07:16.916 [DEBUG] [Thread-138230] [transport.py] [_log()] userauth is OK
2026-02-12T00:07:16.916 [DEBUG] [Thread-138230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:07:16.916 [DEBUG] [Thread-138230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:07:16.916 [DEBUG] [Thread-138230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:07:16.917 [DEBUG] [Thread-138230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:07:16.943 [INFO] [Thread-138230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:07:16.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:07:17.594 [DEBUG] [Thread-138230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:07:17.594 [DEBUG] [Thread-138230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:07:17.595 [DEBUG] [Thread-138230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:07:17.635 [DEBUG] [Thread-138230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:07:17.636 [DEBUG] [Thread-138230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:07:17.639 [DEBUG] [Thread-138230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:07:17.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:07:17.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:07:17.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:07:17.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:07:17.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:07:17.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:07:17.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:07:17.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:07:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:07:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.921316 -999.00  +14.30  17.16     91  +12.90 1 3 1 3 1     0    0 1.23 -3.72 ----- 17.2 17.2 181.6 24.8 15.8 -3.2 15.6 -3.5 15.4 -3.4 15.7 -3.7
2026-02-12T00:07:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:07:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:07:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.921316
2026-02-12T00:07:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:07:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:07:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:07:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:07:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:07:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:07:03', tmtdew=0.8, humidity=95.2, cloud=0.0, wind=21.31, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:06:41.702', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:07:17.668 [DEBUG] [Thread-138230] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:07:17.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:07:17.760 [DEBUG] [Thread-138233] [transport.py] [_log()] starting thread (client mode): 0xa2d9e020
2026-02-12T00:07:17.760 [DEBUG] [Thread-138233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:07:17.774 [DEBUG] [Thread-138233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:07:17.774 [INFO] [Thread-138233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:07:17.782 [DEBUG] [Thread-138233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:07:17.782 [DEBUG] [Thread-138233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:07:17.782 [DEBUG] [Thread-138233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:07:17.782 [DEBUG] [Thread-138233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:17.782 [DEBUG] [Thread-138233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:17.782 [DEBUG] [Thread-138233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:17.782 [DEBUG] [Thread-138233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] client lang: <none>
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] server lang: <none>
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] kex follows: False
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] Compression: none
2026-02-12T00:07:17.783 [DEBUG] [Thread-138233] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:07:17.839 [DEBUG] [Thread-138233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:07:17.840 [DEBUG] [Thread-138233] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:07:17.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:07:17.841 [DEBUG] [Thread-138233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:07:17.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:07:17.896 [DEBUG] [Thread-138233] [transport.py] [_log()] userauth is OK
2026-02-12T00:07:17.896 [DEBUG] [Thread-138233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:07:17.896 [DEBUG] [Thread-138233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:07:17.896 [DEBUG] [Thread-138233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:07:17.896 [DEBUG] [Thread-138233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:07:17.914 [INFO] [Thread-138233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:07:17.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:07:17.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:07:18.715 [DEBUG] [Thread-138233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:07:18.716 [DEBUG] [Thread-138233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:07:18.763 [DEBUG] [Thread-138233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:07:18.763 [DEBUG] [Thread-138233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:07:18.772 [DEBUG] [Thread-138233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:07:18.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:07:18.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:07:18.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:07:18.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:07:18.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:07:18.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:07:18.810 [DEBUG] [Thread-138233] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:07:27.339 [DEBUG] [Thread-138235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:07:42.402 [DEBUG] [Thread-138236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:07:48.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:07:48.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:07:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:07:50.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 7, 38), 1.22, 92.3, 0.0, 24.17, 14.51, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:07:50.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:07:38
2026-02-12T00:07:51.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:07:51.295 [DEBUG] [Thread-138237] [transport.py] [_log()] starting thread (client mode): 0xa2d9ea40
2026-02-12T00:07:51.295 [DEBUG] [Thread-138237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:07:51.315 [DEBUG] [Thread-138237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:07:51.315 [INFO] [Thread-138237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:07:51.318 [DEBUG] [Thread-138237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:07:51.318 [DEBUG] [Thread-138237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] client lang: <none>
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] server lang: <none>
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] kex follows: False
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] Compression: none
2026-02-12T00:07:51.319 [DEBUG] [Thread-138237] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:07:51.336 [DEBUG] [Thread-138237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:07:51.337 [DEBUG] [Thread-138237] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:07:51.337 [DEBUG] [Thread-138237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:07:51.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:07:51.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:07:51.381 [DEBUG] [Thread-138237] [transport.py] [_log()] userauth is OK
2026-02-12T00:07:51.381 [DEBUG] [Thread-138237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:07:51.381 [DEBUG] [Thread-138237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:07:51.381 [DEBUG] [Thread-138237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:07:51.381 [DEBUG] [Thread-138237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:07:51.402 [INFO] [Thread-138237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:07:51.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:07:52.039 [DEBUG] [Thread-138237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:07:52.039 [DEBUG] [Thread-138237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:07:52.040 [DEBUG] [Thread-138237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:07:52.080 [DEBUG] [Thread-138237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:07:52.081 [DEBUG] [Thread-138237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:07:52.084 [DEBUG] [Thread-138237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:07:52.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:07:52.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:07:52.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:07:52.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:07:52.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:07:52.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:07:52.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:07:52.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:07:52.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:07:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.921663 -999.00  +14.30  18.75     91  +12.90 1 3 1 3 1     0    0 1.24 -2.72 ----- 18.8 18.8 179.4 21.7 15.8 -2.8 15.6 -2.7 15.4 -3.2 15.8 -3.3
2026-02-12T00:07:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:07:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:07:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.921663
2026-02-12T00:07:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:07:52.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:07:52.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:07:52.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:07:52.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:07:52.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:07:38', tmtdew=1.22, humidity=92.3, cloud=0.0, wind=24.17, temperature=14.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:07:11.683', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:07:52.107 [DEBUG] [Thread-138237] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:07:52.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:07:52.202 [DEBUG] [Thread-138240] [transport.py] [_log()] starting thread (client mode): 0xa2d9ca00
2026-02-12T00:07:52.203 [DEBUG] [Thread-138240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:07:52.218 [DEBUG] [Thread-138240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:07:52.218 [INFO] [Thread-138240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:07:52.225 [DEBUG] [Thread-138240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:07:52.226 [DEBUG] [Thread-138240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] client lang: <none>
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] server lang: <none>
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] kex follows: False
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:07:52.227 [DEBUG] [Thread-138240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:07:52.228 [DEBUG] [Thread-138240] [transport.py] [_log()] Compression: none
2026-02-12T00:07:52.228 [DEBUG] [Thread-138240] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:07:52.288 [DEBUG] [Thread-138240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:07:52.289 [DEBUG] [Thread-138240] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:07:52.289 [DEBUG] [Thread-138240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:07:52.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:07:52.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:07:52.343 [DEBUG] [Thread-138240] [transport.py] [_log()] userauth is OK
2026-02-12T00:07:52.344 [DEBUG] [Thread-138240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:07:52.344 [DEBUG] [Thread-138240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:07:52.344 [DEBUG] [Thread-138240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:07:52.344 [DEBUG] [Thread-138240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:07:52.362 [INFO] [Thread-138240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:07:52.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:07:52.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:07:53.245 [DEBUG] [Thread-138240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:07:53.245 [DEBUG] [Thread-138240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:07:53.294 [DEBUG] [Thread-138240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:07:53.294 [DEBUG] [Thread-138240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:07:53.302 [DEBUG] [Thread-138240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:07:53.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:07:53.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')
2026-02-12T00:07:53.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
2026-02-12T00:07:53.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:07:53.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:07:53.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:07:53.335 [DEBUG] [Thread-138240] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:07:54.189 [DEBUG] [Thread-138242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:07:57.439 [DEBUG] [Thread-138243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:02.282 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:02.284 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:12.495 [DEBUG] [Thread-138244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:08:23.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:08:23.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:08:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 8, 13), 0.82, 95.1, 0.0, 20.68, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:08:25.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:08:13
2026-02-12T00:08:25.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:08:25.863 [DEBUG] [Thread-138245] [transport.py] [_log()] starting thread (client mode): 0xa2d97d90
2026-02-12T00:08:25.863 [DEBUG] [Thread-138245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:08:25.881 [DEBUG] [Thread-138245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:08:25.882 [INFO] [Thread-138245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:08:25.885 [DEBUG] [Thread-138245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] client lang: <none>
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] server lang: <none>
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] kex follows: False
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] Compression: none
2026-02-12T00:08:25.886 [DEBUG] [Thread-138245] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:08:25.903 [DEBUG] [Thread-138245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:08:25.903 [DEBUG] [Thread-138245] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:08:25.904 [DEBUG] [Thread-138245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:08:25.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:08:25.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:08:25.905 [DEBUG] [Thread-138245] [transport.py] [_log()] userauth is OK
2026-02-12T00:08:25.906 [DEBUG] [Thread-138245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:08:25.906 [DEBUG] [Thread-138245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:08:25.906 [DEBUG] [Thread-138245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:08:25.906 [DEBUG] [Thread-138245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:08:25.929 [INFO] [Thread-138245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:08:25.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:08:26.572 [DEBUG] [Thread-138245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:08:26.572 [DEBUG] [Thread-138245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:08:26.572 [DEBUG] [Thread-138245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:08:26.613 [DEBUG] [Thread-138245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:08:26.613 [DEBUG] [Thread-138245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:08:26.616 [DEBUG] [Thread-138245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:08:26.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:08:26.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:08:26.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:08:26.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:08:26.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:08:26.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:08:26.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:08:26.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:08:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:08:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.922010 -999.00  +14.30  16.10     91  +12.90 1 3 1 3 1     0    0 1.25 -2.06 ----- 16.1 16.1 178.4 22.7 15.8 -2.6 15.6 -3.1 15.5 -2.8 15.8 -3.1
2026-02-12T00:08:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:08:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:08:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.922010
2026-02-12T00:08:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:08:26.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:08:26.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:08:26.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:08:26.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:08:26.648 [DEBUG] [Thread-138245] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:08:26.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:08:13', tmtdew=0.82, humidity=95.1, cloud=0.0, wind=20.68, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:07:41.664', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:08:26.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:08:26.745 [DEBUG] [Thread-138248] [transport.py] [_log()] starting thread (client mode): 0xa2dc08b0
2026-02-12T00:08:26.746 [DEBUG] [Thread-138248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:08:26.760 [DEBUG] [Thread-138248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:08:26.760 [INFO] [Thread-138248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:08:26.767 [DEBUG] [Thread-138248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] client lang: <none>
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] server lang: <none>
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] kex follows: False
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] Compression: none
2026-02-12T00:08:26.768 [DEBUG] [Thread-138248] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:08:26.827 [DEBUG] [Thread-138248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:08:26.828 [DEBUG] [Thread-138248] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:08:26.828 [DEBUG] [Thread-138248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:08:26.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:08:26.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:08:26.883 [DEBUG] [Thread-138248] [transport.py] [_log()] userauth is OK
2026-02-12T00:08:26.883 [DEBUG] [Thread-138248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:08:26.884 [DEBUG] [Thread-138248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:08:26.884 [DEBUG] [Thread-138248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:08:26.884 [DEBUG] [Thread-138248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:08:26.902 [INFO] [Thread-138248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:08:26.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:08:26.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:08:27.529 [DEBUG] [Thread-138250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:27.694 [DEBUG] [Thread-138248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:08:27.694 [DEBUG] [Thread-138248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:08:27.742 [DEBUG] [Thread-138248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:08:27.742 [DEBUG] [Thread-138248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:08:27.752 [DEBUG] [Thread-138248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:08:27.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:08:27.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:08:27.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:08:27.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:08:27.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:08:27.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:08:27.784 [DEBUG] [Thread-138248] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:08:42.581 [DEBUG] [Thread-138251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:54.256 [DEBUG] [Thread-138252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:57.617 [DEBUG] [Thread-138253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:08:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:08:57.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:08:57.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:08:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 8, 48), 0.82, 94.58, 0.0, 22.14, 14.16, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:08:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:08:48
2026-02-12T00:08:59.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:09:00.099 [DEBUG] [Thread-138254] [transport.py] [_log()] starting thread (client mode): 0xa57e1a80
2026-02-12T00:09:00.099 [DEBUG] [Thread-138254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:09:00.119 [DEBUG] [Thread-138254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:09:00.120 [INFO] [Thread-138254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] client lang: <none>
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] server lang: <none>
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] kex follows: False
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] Compression: none
2026-02-12T00:09:00.123 [DEBUG] [Thread-138254] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:09:00.140 [DEBUG] [Thread-138254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:09:00.141 [DEBUG] [Thread-138254] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:09:00.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:09:00.142 [DEBUG] [Thread-138254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:09:00.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:09:00.144 [DEBUG] [Thread-138254] [transport.py] [_log()] userauth is OK
2026-02-12T00:09:00.144 [DEBUG] [Thread-138254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:09:00.144 [DEBUG] [Thread-138254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:09:00.145 [DEBUG] [Thread-138254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:09:00.145 [DEBUG] [Thread-138254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:09:00.163 [INFO] [Thread-138254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:09:00.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:09:00.963 [DEBUG] [Thread-138254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:09:00.963 [DEBUG] [Thread-138254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:09:00.964 [DEBUG] [Thread-138254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:09:01.004 [DEBUG] [Thread-138254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:09:01.005 [DEBUG] [Thread-138254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:09:01.008 [DEBUG] [Thread-138254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:09:01.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:09:01.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:09:01.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:09:01.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:09:01.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:09:01.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:09:01.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:09:01.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:09:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:09:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.922357 -999.00  +14.30  17.69     91  +12.80 1 3 1 3 1     0    0 1.30 -1.24 ----- 17.7 17.7 179.4 23.5 15.8 -2.5 15.6 -3.1 15.5 -2.6 15.8 -2.8
2026-02-12T00:09:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:09:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:09:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.922357
2026-02-12T00:09:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:09:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:09:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:09:01.036 [DEBUG] [Thread-138254] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:09:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:09:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:09:01.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:08:48', tmtdew=0.82, humidity=94.58, cloud=0.0, wind=22.14, temperature=14.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:08:11.645', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:09:01.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:09:01.131 [DEBUG] [Thread-138257] [transport.py] [_log()] starting thread (client mode): 0xa57e0610
2026-02-12T00:09:01.131 [DEBUG] [Thread-138257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:09:01.145 [DEBUG] [Thread-138257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:09:01.146 [INFO] [Thread-138257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:09:01.153 [DEBUG] [Thread-138257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:09:01.153 [DEBUG] [Thread-138257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] client lang: <none>
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] server lang: <none>
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] kex follows: False
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] Compression: none
2026-02-12T00:09:01.154 [DEBUG] [Thread-138257] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:09:01.212 [DEBUG] [Thread-138257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:09:01.213 [DEBUG] [Thread-138257] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:09:01.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:09:01.214 [DEBUG] [Thread-138257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:09:01.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:09:01.271 [DEBUG] [Thread-138257] [transport.py] [_log()] userauth is OK
2026-02-12T00:09:01.272 [DEBUG] [Thread-138257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:09:01.272 [DEBUG] [Thread-138257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:09:01.272 [DEBUG] [Thread-138257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:09:01.272 [DEBUG] [Thread-138257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:09:01.291 [INFO] [Thread-138257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:09:01.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:09:01.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:09:02.104 [DEBUG] [Thread-138257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:09:02.105 [DEBUG] [Thread-138257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:09:02.152 [DEBUG] [Thread-138257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:09:02.152 [DEBUG] [Thread-138257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:09:02.161 [DEBUG] [Thread-138257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:09:02.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:09:02.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:09:02.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:09:02.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:09:02.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:09:02.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:09:02.198 [DEBUG] [Thread-138257] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:09:02.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:09:02.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:09:12.654 [DEBUG] [Thread-138259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:09:27.716 [DEBUG] [Thread-138260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:09:32.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:09:32.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:09:32.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:09:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 9, 24), 0.82, 94.58, 0.0, 22.62, 14.17, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:09:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:09:24
2026-02-12T00:09:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:09:34.539 [DEBUG] [Thread-138261] [transport.py] [_log()] starting thread (client mode): 0xa57e1bd0
2026-02-12T00:09:34.539 [DEBUG] [Thread-138261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:09:34.549 [DEBUG] [Thread-138261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:09:34.549 [INFO] [Thread-138261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:09:34.553 [DEBUG] [Thread-138261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:09:34.558 [DEBUG] [Thread-138261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:09:34.558 [DEBUG] [Thread-138261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] client lang: <none>
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] server lang: <none>
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] kex follows: False
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] Compression: none
2026-02-12T00:09:34.559 [DEBUG] [Thread-138261] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:09:34.579 [DEBUG] [Thread-138261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:09:34.579 [DEBUG] [Thread-138261] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:09:34.580 [DEBUG] [Thread-138261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:09:34.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:09:34.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:09:34.582 [DEBUG] [Thread-138261] [transport.py] [_log()] userauth is OK
2026-02-12T00:09:34.582 [DEBUG] [Thread-138261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:09:34.582 [DEBUG] [Thread-138261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:09:34.582 [DEBUG] [Thread-138261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:09:34.582 [DEBUG] [Thread-138261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:09:34.617 [INFO] [Thread-138261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:09:34.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:09:35.261 [DEBUG] [Thread-138261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:09:35.261 [DEBUG] [Thread-138261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:09:35.262 [DEBUG] [Thread-138261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:09:35.302 [DEBUG] [Thread-138261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:09:35.303 [DEBUG] [Thread-138261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:09:35.306 [DEBUG] [Thread-138261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:09:35.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:09:35.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:09:35.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:09:35.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:09:35.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:09:35.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:09:35.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:09:35.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:09:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:09:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.922704 -999.00  +14.20  19.41     91  +12.80 1 3 1 3 1     0    0 1.32 -0.33 ----- 19.4 19.4 182.0 26.1 15.8 -3.0 15.6 -3.3 15.5 -2.7 15.8 -2.8
2026-02-12T00:09:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:09:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:09:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.922704
2026-02-12T00:09:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:09:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:09:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:09:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:09:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:09:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:09:24', tmtdew=0.82, humidity=94.58, cloud=0.0, wind=22.62, temperature=14.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:08:41.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:09:35.335 [DEBUG] [Thread-138261] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:09:35.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:09:35.430 [DEBUG] [Thread-138264] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ff0
2026-02-12T00:09:35.431 [DEBUG] [Thread-138264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:09:35.450 [DEBUG] [Thread-138264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:09:35.450 [INFO] [Thread-138264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:09:35.457 [DEBUG] [Thread-138264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:09:35.457 [DEBUG] [Thread-138264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] client lang: <none>
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] server lang: <none>
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] kex follows: False
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:09:35.458 [DEBUG] [Thread-138264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:09:35.459 [DEBUG] [Thread-138264] [transport.py] [_log()] Compression: none
2026-02-12T00:09:35.459 [DEBUG] [Thread-138264] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:09:35.516 [DEBUG] [Thread-138264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:09:35.517 [DEBUG] [Thread-138264] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:09:35.517 [DEBUG] [Thread-138264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:09:35.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:09:35.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:09:35.572 [DEBUG] [Thread-138264] [transport.py] [_log()] userauth is OK
2026-02-12T00:09:35.573 [DEBUG] [Thread-138264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:09:35.573 [DEBUG] [Thread-138264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:09:35.573 [DEBUG] [Thread-138264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:09:35.573 [DEBUG] [Thread-138264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:09:35.592 [INFO] [Thread-138264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:09:35.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:09:35.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:09:36.426 [DEBUG] [Thread-138264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:09:36.427 [DEBUG] [Thread-138264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:09:36.474 [DEBUG] [Thread-138264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:09:36.475 [DEBUG] [Thread-138264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:09:36.484 [DEBUG] [Thread-138264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:09:36.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:09:36.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:09:36.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:09:36.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:09:36.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:09:36.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:09:36.521 [DEBUG] [Thread-138264] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:09:42.754 [DEBUG] [Thread-138266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:09:54.316 [DEBUG] [Thread-138267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:09:57.805 [DEBUG] [Thread-138268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:10:02.694 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:10:02.695 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:10:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:10:06.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:10:06.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:10:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 9, 59), 0.83, 94.55, 0.0, 22.69, 14.17, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:10:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:09:59
2026-02-12T00:10:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:10:09.360 [DEBUG] [Thread-138269] [transport.py] [_log()] starting thread (client mode): 0xa57e3ac0
2026-02-12T00:10:09.360 [DEBUG] [Thread-138269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:10:09.381 [DEBUG] [Thread-138269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:10:09.381 [INFO] [Thread-138269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] client lang: <none>
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] server lang: <none>
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] kex follows: False
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] Compression: none
2026-02-12T00:10:09.384 [DEBUG] [Thread-138269] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:10:09.399 [DEBUG] [Thread-138269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:10:09.400 [DEBUG] [Thread-138269] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:10:09.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:10:09.401 [DEBUG] [Thread-138269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:10:09.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:10:09.403 [DEBUG] [Thread-138269] [transport.py] [_log()] userauth is OK
2026-02-12T00:10:09.403 [DEBUG] [Thread-138269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:10:09.403 [DEBUG] [Thread-138269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:10:09.403 [DEBUG] [Thread-138269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:10:09.403 [DEBUG] [Thread-138269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:10:09.429 [INFO] [Thread-138269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:10:09.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:10:10.643 [DEBUG] [Thread-138269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:10:10.643 [DEBUG] [Thread-138269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:10:10.644 [DEBUG] [Thread-138269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:10:10.684 [DEBUG] [Thread-138269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:10:10.684 [DEBUG] [Thread-138269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:10:10.688 [DEBUG] [Thread-138269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:10:10.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:10:10.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:10:10.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:10:10.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:10:10.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:10:10.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:10:10.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:10:10.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:10:10.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:10:10.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.923052 -999.00  +14.20  16.86     91  +12.80 1 3 1 3 1     0    0 1.36 0.28 ----- 16.9 16.9 180.4 24.5 15.8 -3.7 15.6 -3.8 15.5 -3.9 15.8 -4.0
2026-02-12T00:10:10.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:10:10.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:10:10.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.923052
2026-02-12T00:10:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:10:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:10:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:10:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:10:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:10:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:09:59', tmtdew=0.83, humidity=94.55, cloud=0.0, wind=22.69, temperature=14.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:09:11.693', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:10:10.711 [DEBUG] [Thread-138269] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:10:10.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:10:10.807 [DEBUG] [Thread-138272] [transport.py] [_log()] starting thread (client mode): 0xa57e0df0
2026-02-12T00:10:10.807 [DEBUG] [Thread-138272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:10:10.822 [DEBUG] [Thread-138272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:10:10.822 [INFO] [Thread-138272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:10:10.830 [DEBUG] [Thread-138272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:10:10.830 [DEBUG] [Thread-138272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:10:10.830 [DEBUG] [Thread-138272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:10:10.830 [DEBUG] [Thread-138272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:10.831 [DEBUG] [Thread-138272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:10.831 [DEBUG] [Thread-138272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:10.831 [DEBUG] [Thread-138272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:10.831 [DEBUG] [Thread-138272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:10:10.831 [DEBUG] [Thread-138272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:10:10.831 [DEBUG] [Thread-138272] [transport.py] [_log()] client lang: <none>
2026-02-12T00:10:10.831 [DEBUG] [Thread-138272] [transport.py] [_log()] server lang: <none>
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] kex follows: False
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] Compression: none
2026-02-12T00:10:10.832 [DEBUG] [Thread-138272] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:10:10.889 [DEBUG] [Thread-138272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:10:10.889 [DEBUG] [Thread-138272] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:10:10.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:10:10.891 [DEBUG] [Thread-138272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:10:10.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:10:10.945 [DEBUG] [Thread-138272] [transport.py] [_log()] userauth is OK
2026-02-12T00:10:10.945 [DEBUG] [Thread-138272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:10:10.945 [DEBUG] [Thread-138272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:10:10.945 [DEBUG] [Thread-138272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:10:10.945 [DEBUG] [Thread-138272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:10:10.963 [INFO] [Thread-138272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:10:10.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:10:10.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:10:11.787 [DEBUG] [Thread-138272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:10:11.787 [DEBUG] [Thread-138272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:10:11.835 [DEBUG] [Thread-138272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:10:11.836 [DEBUG] [Thread-138272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:10:11.845 [DEBUG] [Thread-138272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:10:11.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:10:11.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:10:11.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:10:11.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:10:11.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:10:11.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:10:11.881 [DEBUG] [Thread-138272] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:10:12.844 [DEBUG] [Thread-138274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:10:27.896 [DEBUG] [Thread-138275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:10:41.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:10:41.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:10:41.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:10:42.926 [DEBUG] [Thread-138276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:10:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 10, 34), 1.26, 92.06, 0.0, 23.96, 14.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:10:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:10:34
2026-02-12T00:10:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:10:44.504 [DEBUG] [Thread-138277] [transport.py] [_log()] starting thread (client mode): 0xa57e1480
2026-02-12T00:10:44.504 [DEBUG] [Thread-138277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:10:44.525 [DEBUG] [Thread-138277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:10:44.525 [INFO] [Thread-138277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] client lang: <none>
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] server lang: <none>
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] kex follows: False
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] Compression: none
2026-02-12T00:10:44.528 [DEBUG] [Thread-138277] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:10:44.544 [DEBUG] [Thread-138277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:10:44.545 [DEBUG] [Thread-138277] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:10:44.545 [DEBUG] [Thread-138277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:10:44.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:10:44.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:10:44.547 [DEBUG] [Thread-138277] [transport.py] [_log()] userauth is OK
2026-02-12T00:10:44.548 [DEBUG] [Thread-138277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:10:44.548 [DEBUG] [Thread-138277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:10:44.548 [DEBUG] [Thread-138277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:10:44.548 [DEBUG] [Thread-138277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:10:44.571 [INFO] [Thread-138277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:10:44.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:10:45.153 [DEBUG] [Thread-138277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:10:45.153 [DEBUG] [Thread-138277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:10:45.154 [DEBUG] [Thread-138277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:10:45.194 [DEBUG] [Thread-138277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:10:45.195 [DEBUG] [Thread-138277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:10:45.198 [DEBUG] [Thread-138277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:10:45.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:10:45.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:10:45.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:10:45.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:10:45.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:10:45.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:10:45.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:10:45.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:10:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:10:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.924093 -999.00  +14.20  14.65     91  +12.80 1 3 1 3 1     0    0 1.43 2.27 ----- 14.7 14.7 173.2 22.1 15.8 -2.8 15.6 -2.8 15.5 -2.7 15.8 -3.2
2026-02-12T00:10:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:10:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:10:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.924093
2026-02-12T00:10:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:10:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:10:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:10:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:10:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:10:45.229 [DEBUG] [Thread-138277] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:10:45.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:10:34', tmtdew=1.26, humidity=92.06, cloud=0.0, wind=23.96, temperature=14.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:10:41.635', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:10:45.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:10:45.338 [DEBUG] [Thread-138280] [transport.py] [_log()] starting thread (client mode): 0xa2d96770
2026-02-12T00:10:45.338 [DEBUG] [Thread-138280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:10:45.353 [DEBUG] [Thread-138280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:10:45.354 [INFO] [Thread-138280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:10:45.361 [DEBUG] [Thread-138280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:10:45.362 [DEBUG] [Thread-138280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] client lang: <none>
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] server lang: <none>
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] kex follows: False
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:10:45.363 [DEBUG] [Thread-138280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:10:45.364 [DEBUG] [Thread-138280] [transport.py] [_log()] Compression: none
2026-02-12T00:10:45.364 [DEBUG] [Thread-138280] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:10:45.421 [DEBUG] [Thread-138280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:10:45.422 [DEBUG] [Thread-138280] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:10:45.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:10:45.423 [DEBUG] [Thread-138280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:10:45.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:10:45.477 [DEBUG] [Thread-138280] [transport.py] [_log()] userauth is OK
2026-02-12T00:10:45.477 [DEBUG] [Thread-138280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:10:45.478 [DEBUG] [Thread-138280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:10:45.478 [DEBUG] [Thread-138280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:10:45.478 [DEBUG] [Thread-138280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:10:45.497 [INFO] [Thread-138280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:10:45.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:10:45.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:10:46.378 [DEBUG] [Thread-138280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:10:46.379 [DEBUG] [Thread-138280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:10:46.427 [DEBUG] [Thread-138280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:10:46.427 [DEBUG] [Thread-138280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:10:46.435 [DEBUG] [Thread-138280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:10:46.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:10:46.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:10:46.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:10:46.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:10:46.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:10:46.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:10:46.469 [DEBUG] [Thread-138280] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:10:54.384 [DEBUG] [Thread-138282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:10:57.961 [DEBUG] [Thread-138283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:11:02.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:11:02.899 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:11:13.000 [DEBUG] [Thread-138284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:11:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:11:16.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:11:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:11:18.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 10, 34), 1.26, 92.06, 0.0, 23.96, 14.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:11:18.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:10:34
2026-02-12T00:11:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:11:18.862 [DEBUG] [Thread-138285] [transport.py] [_log()] starting thread (client mode): 0xa57e2470
2026-02-12T00:11:18.862 [DEBUG] [Thread-138285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:11:18.884 [DEBUG] [Thread-138285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:11:18.884 [INFO] [Thread-138285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:11:18.887 [DEBUG] [Thread-138285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] client lang: <none>
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] server lang: <none>
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] kex follows: False
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] Compression: none
2026-02-12T00:11:18.888 [DEBUG] [Thread-138285] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:11:18.908 [DEBUG] [Thread-138285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:11:18.909 [DEBUG] [Thread-138285] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:11:18.911 [DEBUG] [Thread-138285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:11:18.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:11:18.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:11:18.913 [DEBUG] [Thread-138285] [transport.py] [_log()] userauth is OK
2026-02-12T00:11:18.913 [DEBUG] [Thread-138285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:11:18.913 [DEBUG] [Thread-138285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:11:18.913 [DEBUG] [Thread-138285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:11:18.913 [DEBUG] [Thread-138285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:11:18.928 [INFO] [Thread-138285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:11:18.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:11:19.527 [DEBUG] [Thread-138285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:11:19.527 [DEBUG] [Thread-138285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:11:19.528 [DEBUG] [Thread-138285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:11:19.568 [DEBUG] [Thread-138285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:11:19.568 [DEBUG] [Thread-138285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:11:19.571 [DEBUG] [Thread-138285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:11:19.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:11:19.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:11:19.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:11:19.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:11:19.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:11:19.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:11:19.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:11:19.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:11:19.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:11:19.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.924441 -999.00  +14.20  15.82     91  +12.90 1 3 1 3 1     0    0 1.41 2.55 ----- 15.8 15.8 175.5 25.1 15.9 -2.7 15.6 -2.8 15.6 -2.8 15.8 -3.0
2026-02-12T00:11:19.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:11:19.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:11:19.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.924441
2026-02-12T00:11:19.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:11:19.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:11:19.589 [DEBUG] [Thread-138285] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:11:19.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:11:19.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:11:19.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:11:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:10:34', tmtdew=1.26, humidity=92.06, cloud=0.0, wind=23.96, temperature=14.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:11:11.702', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:11:19.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:11:19.682 [DEBUG] [Thread-138288] [transport.py] [_log()] starting thread (client mode): 0xa57e0670
2026-02-12T00:11:19.682 [DEBUG] [Thread-138288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:11:19.697 [DEBUG] [Thread-138288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:11:19.697 [INFO] [Thread-138288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:11:19.704 [DEBUG] [Thread-138288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:11:19.705 [DEBUG] [Thread-138288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] client lang: <none>
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] server lang: <none>
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] kex follows: False
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:11:19.706 [DEBUG] [Thread-138288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:11:19.707 [DEBUG] [Thread-138288] [transport.py] [_log()] Compression: none
2026-02-12T00:11:19.707 [DEBUG] [Thread-138288] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:11:19.764 [DEBUG] [Thread-138288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:11:19.765 [DEBUG] [Thread-138288] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:11:19.765 [DEBUG] [Thread-138288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:11:19.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:11:19.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:11:19.821 [DEBUG] [Thread-138288] [transport.py] [_log()] userauth is OK
2026-02-12T00:11:19.821 [DEBUG] [Thread-138288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:11:19.822 [DEBUG] [Thread-138288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:11:19.822 [DEBUG] [Thread-138288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:11:19.822 [DEBUG] [Thread-138288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:11:19.841 [INFO] [Thread-138288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:11:19.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:11:19.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:11:20.652 [DEBUG] [Thread-138288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:11:20.652 [DEBUG] [Thread-138288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:11:20.700 [DEBUG] [Thread-138288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:11:20.700 [DEBUG] [Thread-138288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:11:20.710 [DEBUG] [Thread-138288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:11:20.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:11:20.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:11:20.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
2026-02-12T00:11:20.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:11:20.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:11:20.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:11:20.746 [DEBUG] [Thread-138288] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:11:28.035 [DEBUG] [Thread-138290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:11:43.085 [DEBUG] [Thread-138291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:11:50.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:11:50.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:11:50.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
2026-02-12T00:11:53.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 11, 10), 0.84, 94.5, 0.0, 21.39, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:11:53.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:11:10
2026-02-12T00:11:53.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:11:53.758 [DEBUG] [Thread-138292] [transport.py] [_log()] starting thread (client mode): 0xa57e1750
2026-02-12T00:11:53.758 [DEBUG] [Thread-138292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:11:53.772 [DEBUG] [Thread-138292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:11:53.773 [INFO] [Thread-138292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:11:53.775 [DEBUG] [Thread-138292] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:11:53.775 [DEBUG] [Thread-138292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] client lang: <none>
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] server lang: <none>
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] kex follows: False
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] Compression: none
2026-02-12T00:11:53.776 [DEBUG] [Thread-138292] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:11:53.786 [DEBUG] [Thread-138292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:11:53.786 [DEBUG] [Thread-138292] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:11:53.787 [DEBUG] [Thread-138292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:11:53.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:11:53.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:11:53.788 [DEBUG] [Thread-138292] [transport.py] [_log()] userauth is OK
2026-02-12T00:11:53.788 [DEBUG] [Thread-138292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:11:53.788 [DEBUG] [Thread-138292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:11:53.788 [DEBUG] [Thread-138292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:11:53.788 [DEBUG] [Thread-138292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:11:53.806 [INFO] [Thread-138292] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:11:53.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:11:54.394 [DEBUG] [Thread-138292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:11:54.395 [DEBUG] [Thread-138292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:11:54.395 [DEBUG] [Thread-138292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:11:54.435 [DEBUG] [Thread-138292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:11:54.435 [DEBUG] [Thread-138292] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:11:54.436 [DEBUG] [Thread-138292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:11:54.443 [DEBUG] [Thread-138294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:11:54.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:11:54.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:11:54.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:11:54.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:11:54.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:11:54.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:11:54.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:11:54.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:11:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:11:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.924788 -999.00  +14.20  14.75     91  +12.80 1 3 1 3 1     0    0 1.41 2.73 ----- 14.8 14.8 179.0 22.5 15.8 -2.6 15.6 -3.0 15.5 -2.6 15.9 -2.9
2026-02-12T00:11:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:11:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:11:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.924788
2026-02-12T00:11:54.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:11:54.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:11:54.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:11:54.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:11:54.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:11:54.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:11:10', tmtdew=0.84, humidity=94.5, cloud=0.0, wind=21.39, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:11:41.683', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:11:54.451 [DEBUG] [Thread-138292] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:11:54.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:11:54.535 [DEBUG] [Thread-138296] [transport.py] [_log()] starting thread (client mode): 0xa2d9f790
2026-02-12T00:11:54.536 [DEBUG] [Thread-138296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:11:54.549 [DEBUG] [Thread-138296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:11:54.550 [INFO] [Thread-138296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:11:54.557 [DEBUG] [Thread-138296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] client lang: <none>
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] server lang: <none>
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] kex follows: False
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:11:54.558 [DEBUG] [Thread-138296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:11:54.559 [DEBUG] [Thread-138296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:11:54.559 [DEBUG] [Thread-138296] [transport.py] [_log()] Compression: none
2026-02-12T00:11:54.559 [DEBUG] [Thread-138296] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:11:54.617 [DEBUG] [Thread-138296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:11:54.618 [DEBUG] [Thread-138296] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:11:54.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:11:54.619 [DEBUG] [Thread-138296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:11:54.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:11:54.673 [DEBUG] [Thread-138296] [transport.py] [_log()] userauth is OK
2026-02-12T00:11:54.673 [DEBUG] [Thread-138296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:11:54.674 [DEBUG] [Thread-138296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:11:54.674 [DEBUG] [Thread-138296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:11:54.674 [DEBUG] [Thread-138296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:11:54.693 [INFO] [Thread-138296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:11:54.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:11:54.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:11:55.485 [DEBUG] [Thread-138296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:11:55.485 [DEBUG] [Thread-138296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:11:55.533 [DEBUG] [Thread-138296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:11:55.533 [DEBUG] [Thread-138296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:11:55.542 [DEBUG] [Thread-138296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:11:55.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:11:55.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:11:55.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:11:55.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:11:55.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:11:55.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:11:55.578 [DEBUG] [Thread-138296] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:11:58.120 [DEBUG] [Thread-138298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:03.106 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:03.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:13.168 [DEBUG] [Thread-138299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:25.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:12:25.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:12:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:12:27.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 11, 46), 0.89, 94.48, 0.0, 22.04, 14.19, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:12:27.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:11:46
2026-02-12T00:12:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:12:27.924 [DEBUG] [Thread-138300] [transport.py] [_log()] starting thread (client mode): 0x9eb04b80
2026-02-12T00:12:27.924 [DEBUG] [Thread-138300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:12:27.943 [DEBUG] [Thread-138300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:12:27.943 [INFO] [Thread-138300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] client lang: <none>
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] server lang: <none>
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] kex follows: False
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:12:27.945 [DEBUG] [Thread-138300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:12:27.946 [DEBUG] [Thread-138300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:12:27.946 [DEBUG] [Thread-138300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:12:27.946 [DEBUG] [Thread-138300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:12:27.946 [DEBUG] [Thread-138300] [transport.py] [_log()] Compression: none
2026-02-12T00:12:27.946 [DEBUG] [Thread-138300] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:12:27.954 [DEBUG] [Thread-138300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:12:27.954 [DEBUG] [Thread-138300] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:12:27.954 [DEBUG] [Thread-138300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:12:27.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:12:27.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:12:27.956 [DEBUG] [Thread-138300] [transport.py] [_log()] userauth is OK
2026-02-12T00:12:27.956 [DEBUG] [Thread-138300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:12:27.956 [DEBUG] [Thread-138300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:12:27.956 [DEBUG] [Thread-138300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:12:27.956 [DEBUG] [Thread-138300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:12:27.973 [INFO] [Thread-138300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:12:27.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:12:28.203 [DEBUG] [Thread-138302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:28.556 [DEBUG] [Thread-138300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:12:28.556 [DEBUG] [Thread-138300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:12:28.557 [DEBUG] [Thread-138300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:12:28.597 [DEBUG] [Thread-138300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:12:28.597 [DEBUG] [Thread-138300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:12:28.601 [DEBUG] [Thread-138300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:12:28.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:12:28.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:12:28.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:12:28.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:12:28.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:12:28.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:12:28.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:12:28.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:12:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:12:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.925135 -999.00  +14.20  14.36     91  +12.90 1 3 1 3 1     0    0 1.41 3.11 ----- 14.4 14.4 182.6 23.4 15.9 -2.6 15.6 -2.5 15.5 -2.6 15.8 -2.7
2026-02-12T00:12:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:12:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:12:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.925135
2026-02-12T00:12:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:12:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:12:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:12:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:12:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:12:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:11:46', tmtdew=0.89, humidity=94.48, cloud=0.0, wind=22.04, temperature=14.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:12:11.664', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:12:28.632 [DEBUG] [Thread-138300] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:12:28.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:12:28.727 [DEBUG] [Thread-138304] [transport.py] [_log()] starting thread (client mode): 0xa57e0a00
2026-02-12T00:12:28.727 [DEBUG] [Thread-138304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:12:28.742 [DEBUG] [Thread-138304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:12:28.742 [INFO] [Thread-138304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:12:28.749 [DEBUG] [Thread-138304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] client lang: <none>
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] server lang: <none>
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] kex follows: False
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] Compression: none
2026-02-12T00:12:28.750 [DEBUG] [Thread-138304] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:12:28.810 [DEBUG] [Thread-138304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:12:28.810 [DEBUG] [Thread-138304] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:12:28.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:12:28.812 [DEBUG] [Thread-138304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:12:28.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:12:28.866 [DEBUG] [Thread-138304] [transport.py] [_log()] userauth is OK
2026-02-12T00:12:28.866 [DEBUG] [Thread-138304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:12:28.866 [DEBUG] [Thread-138304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:12:28.866 [DEBUG] [Thread-138304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:12:28.866 [DEBUG] [Thread-138304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:12:28.891 [INFO] [Thread-138304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:12:28.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:12:28.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:12:29.712 [DEBUG] [Thread-138304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:12:29.712 [DEBUG] [Thread-138304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:12:29.760 [DEBUG] [Thread-138304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:12:29.761 [DEBUG] [Thread-138304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:12:29.770 [DEBUG] [Thread-138304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:12:29.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:12:29.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:12: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
2026-02-12T00:12:29.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:12:29.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:12:29.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:12:29.809 [DEBUG] [Thread-138304] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:12:43.236 [DEBUG] [Thread-138306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:54.514 [DEBUG] [Thread-138307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:58.283 [DEBUG] [Thread-138308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:12:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:12:59.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:12:59.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:13:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 12, 22), 0.89, 94.48, 0.0, 20.89, 14.16, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:13:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:12:22
2026-02-12T00:13:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:13:02.286 [DEBUG] [Thread-138309] [transport.py] [_log()] starting thread (client mode): 0xa57e3340
2026-02-12T00:13:02.286 [DEBUG] [Thread-138309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:13:02.303 [DEBUG] [Thread-138309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:13:02.303 [INFO] [Thread-138309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:13:02.304 [DEBUG] [Thread-138309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] client lang: <none>
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] server lang: <none>
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] kex follows: False
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] Compression: none
2026-02-12T00:13:02.305 [DEBUG] [Thread-138309] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:13:02.319 [DEBUG] [Thread-138309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:13:02.320 [DEBUG] [Thread-138309] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:13:02.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:13:02.321 [DEBUG] [Thread-138309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:13:02.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:13:02.322 [DEBUG] [Thread-138309] [transport.py] [_log()] userauth is OK
2026-02-12T00:13:02.323 [DEBUG] [Thread-138309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:13:02.323 [DEBUG] [Thread-138309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:13:02.323 [DEBUG] [Thread-138309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:13:02.323 [DEBUG] [Thread-138309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:13:02.346 [INFO] [Thread-138309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:13:02.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:13:02.963 [DEBUG] [Thread-138309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:13:02.963 [DEBUG] [Thread-138309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:13:02.964 [DEBUG] [Thread-138309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:13:03.004 [DEBUG] [Thread-138309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:13:03.004 [DEBUG] [Thread-138309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:13:03.006 [DEBUG] [Thread-138309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:13:03.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:13:03.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:13:03.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:13:03.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:13:03.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:13:03.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:13:03.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:13:03.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:13:03.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:13:03.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.925482 -999.00  +14.30  16.78     91  +12.90 1 3 1 3 1     0    0 1.44 3.52 ----- 16.8 16.8 181.4 19.6 15.8 -2.4 15.6 -2.9 -999.0 -999.0 15.9 -2.6
2026-02-12T00:13:03.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:13:03.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:13:03.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.925482
2026-02-12T00:13:03.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:13:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:13:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:13:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:13:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:13:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:12:22', tmtdew=0.89, humidity=94.48, cloud=0.0, wind=20.89, temperature=14.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:12:41.645', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:13:03.025 [DEBUG] [Thread-138309] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:13:03.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:13:03.122 [DEBUG] [Thread-138312] [transport.py] [_log()] starting thread (client mode): 0xa57e2770
2026-02-12T00:13:03.122 [DEBUG] [Thread-138312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:13:03.136 [DEBUG] [Thread-138312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:13:03.136 [INFO] [Thread-138312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] client lang: <none>
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] server lang: <none>
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] kex follows: False
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:13:03.144 [DEBUG] [Thread-138312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:13:03.145 [DEBUG] [Thread-138312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:13:03.145 [DEBUG] [Thread-138312] [transport.py] [_log()] Compression: none
2026-02-12T00:13:03.145 [DEBUG] [Thread-138312] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:13:03.201 [DEBUG] [Thread-138312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:13:03.201 [DEBUG] [Thread-138312] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:13:03.202 [DEBUG] [Thread-138312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:13:03.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:13:03.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:13:03.258 [DEBUG] [Thread-138312] [transport.py] [_log()] userauth is OK
2026-02-12T00:13:03.258 [DEBUG] [Thread-138312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:13:03.258 [DEBUG] [Thread-138312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:13:03.258 [DEBUG] [Thread-138312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:13:03.258 [DEBUG] [Thread-138312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:13:03.277 [INFO] [Thread-138312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:13:03.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:13:03.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:13:03.311 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:13:03.312 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:13:04.158 [DEBUG] [Thread-138312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:13:04.158 [DEBUG] [Thread-138312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:13:04.206 [DEBUG] [Thread-138312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:13:04.206 [DEBUG] [Thread-138312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:13:04.215 [DEBUG] [Thread-138312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:13:04.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:13:04.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:13:04.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:13:04.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:13:04.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:13:04.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:13:04.249 [DEBUG] [Thread-138312] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:13:13.319 [DEBUG] [Thread-138314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:13:28.377 [DEBUG] [Thread-138315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:13:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:13:34.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:13:34.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:13:36.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 12, 57), 0.89, 94.5, 0.0, 20.4, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:13:36.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:12:57
2026-02-12T00:13:36.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:13:36.763 [DEBUG] [Thread-138316] [transport.py] [_log()] starting thread (client mode): 0xa2d9eb30
2026-02-12T00:13:36.763 [DEBUG] [Thread-138316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:13:36.784 [DEBUG] [Thread-138316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:13:36.784 [INFO] [Thread-138316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:13:36.787 [DEBUG] [Thread-138316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:13:36.787 [DEBUG] [Thread-138316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:13:36.787 [DEBUG] [Thread-138316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:13:36.787 [DEBUG] [Thread-138316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:36.787 [DEBUG] [Thread-138316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:36.787 [DEBUG] [Thread-138316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:36.787 [DEBUG] [Thread-138316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] client lang: <none>
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] server lang: <none>
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] kex follows: False
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] Compression: none
2026-02-12T00:13:36.788 [DEBUG] [Thread-138316] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:13:36.802 [DEBUG] [Thread-138316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:13:36.803 [DEBUG] [Thread-138316] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:13:36.803 [DEBUG] [Thread-138316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:13:36.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:13:36.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:13:36.845 [DEBUG] [Thread-138316] [transport.py] [_log()] userauth is OK
2026-02-12T00:13:36.845 [DEBUG] [Thread-138316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:13:36.845 [DEBUG] [Thread-138316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:13:36.846 [DEBUG] [Thread-138316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:13:36.846 [DEBUG] [Thread-138316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:13:36.865 [INFO] [Thread-138316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:13:36.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:13:37.442 [DEBUG] [Thread-138316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:13:37.442 [DEBUG] [Thread-138316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:13:37.443 [DEBUG] [Thread-138316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:13:37.483 [DEBUG] [Thread-138316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:13:37.483 [DEBUG] [Thread-138316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:13:37.486 [DEBUG] [Thread-138316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:13:37.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:13:37.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:13:37.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:13:37.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:13:37.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:13:37.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:13:37.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:13:37.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:13:37.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:13:37.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.925829 -999.00  +14.30  15.63     91  +12.90 1 3 1 3 1     0    0 1.46 3.79 ----- 15.6 15.6 183.4 18.2 15.9 -2.3 15.7 -2.2 15.6 -2.2 16.0 -2.3
2026-02-12T00:13:37.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:13:37.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:13:37.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.925829
2026-02-12T00:13:37.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:13:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:13:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:13:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:13:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:13:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:12:57', tmtdew=0.89, humidity=94.5, cloud=0.0, wind=20.4, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:13:11.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:13:37.513 [DEBUG] [Thread-138316] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:13:37.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:13:37.610 [DEBUG] [Thread-138319] [transport.py] [_log()] starting thread (client mode): 0xa2d9f160
2026-02-12T00:13:37.610 [DEBUG] [Thread-138319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:13:37.624 [DEBUG] [Thread-138319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:13:37.624 [INFO] [Thread-138319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:13:37.632 [DEBUG] [Thread-138319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:13:37.632 [DEBUG] [Thread-138319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:13:37.632 [DEBUG] [Thread-138319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:13:37.632 [DEBUG] [Thread-138319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] client lang: <none>
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] server lang: <none>
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] kex follows: False
2026-02-12T00:13:37.633 [DEBUG] [Thread-138319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:13:37.634 [DEBUG] [Thread-138319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:13:37.634 [DEBUG] [Thread-138319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:13:37.634 [DEBUG] [Thread-138319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:13:37.634 [DEBUG] [Thread-138319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:13:37.634 [DEBUG] [Thread-138319] [transport.py] [_log()] Compression: none
2026-02-12T00:13:37.634 [DEBUG] [Thread-138319] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:13:37.690 [DEBUG] [Thread-138319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:13:37.691 [DEBUG] [Thread-138319] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:13:37.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:13:37.693 [DEBUG] [Thread-138319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:13:37.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:13:37.750 [DEBUG] [Thread-138319] [transport.py] [_log()] userauth is OK
2026-02-12T00:13:37.751 [DEBUG] [Thread-138319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:13:37.751 [DEBUG] [Thread-138319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:13:37.751 [DEBUG] [Thread-138319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:13:37.751 [DEBUG] [Thread-138319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:13:37.770 [INFO] [Thread-138319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:13:37.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:13:37.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:13:38.552 [DEBUG] [Thread-138319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:13:38.553 [DEBUG] [Thread-138319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:13:38.601 [DEBUG] [Thread-138319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:13:38.601 [DEBUG] [Thread-138319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:13:38.610 [DEBUG] [Thread-138319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:13:38.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:13:38.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:13:38.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:13:38.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:13:38.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:13:38.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:13:38.651 [DEBUG] [Thread-138319] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:13:43.418 [DEBUG] [Thread-138321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:13:54.587 [DEBUG] [Thread-138322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:13:58.471 [DEBUG] [Thread-138323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:14:03.513 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:14:03.514 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:14:08.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:14:08.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:14:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:14:10.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 13, 33), 0.89, 94.48, 0.0, 20.98, 14.26, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:14:10.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:13:33
2026-02-12T00:14:10.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:14:11.140 [DEBUG] [Thread-138324] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-12T00:14:11.140 [DEBUG] [Thread-138324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:14:11.155 [DEBUG] [Thread-138324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:14:11.155 [INFO] [Thread-138324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] client lang: <none>
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] server lang: <none>
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] kex follows: False
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] Compression: none
2026-02-12T00:14:11.157 [DEBUG] [Thread-138324] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:14:11.166 [DEBUG] [Thread-138324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:14:11.167 [DEBUG] [Thread-138324] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:14:11.167 [DEBUG] [Thread-138324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:14:11.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:14:11.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:14:11.168 [DEBUG] [Thread-138324] [transport.py] [_log()] userauth is OK
2026-02-12T00:14:11.168 [DEBUG] [Thread-138324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:14:11.168 [DEBUG] [Thread-138324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:14:11.168 [DEBUG] [Thread-138324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:14:11.168 [DEBUG] [Thread-138324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:14:11.183 [INFO] [Thread-138324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:14:11.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:14:11.732 [DEBUG] [Thread-138324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:14:11.732 [DEBUG] [Thread-138324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:14:11.732 [DEBUG] [Thread-138324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:14:11.773 [DEBUG] [Thread-138324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:14:11.774 [DEBUG] [Thread-138324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:14:11.777 [DEBUG] [Thread-138324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:14:11.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:14:11.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:14:11.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:14:11.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:14:11.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:14:11.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:14:11.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:14:11.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:14:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:14:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.926177 -999.00  +14.30  13.13     91  +12.90 1 3 1 3 1     0    0 1.48 4.42 ----- 13.1 13.1 174.8 14.7 15.9 -2.4 15.7 -2.2 15.6 -2.2 15.9 -2.3
2026-02-12T00:14:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:14:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:14:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.926177
2026-02-12T00:14:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:14:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:14:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:14:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:14:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:14:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:13:33', tmtdew=0.89, humidity=94.48, cloud=0.0, wind=20.98, temperature=14.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:13:41.693', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:14:11.799 [DEBUG] [Thread-138324] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:14:11.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:14:11.895 [DEBUG] [Thread-138327] [transport.py] [_log()] starting thread (client mode): 0xa57e3b50
2026-02-12T00:14:11.896 [DEBUG] [Thread-138327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:14:11.910 [DEBUG] [Thread-138327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:14:11.910 [INFO] [Thread-138327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:14:11.922 [DEBUG] [Thread-138327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] client lang: <none>
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] server lang: <none>
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] kex follows: False
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] Compression: none
2026-02-12T00:14:11.923 [DEBUG] [Thread-138327] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:14:11.982 [DEBUG] [Thread-138327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:14:11.983 [DEBUG] [Thread-138327] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:14:11.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:14:11.984 [DEBUG] [Thread-138327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:14:11.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:14:12.038 [DEBUG] [Thread-138327] [transport.py] [_log()] userauth is OK
2026-02-12T00:14:12.038 [DEBUG] [Thread-138327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:14:12.039 [DEBUG] [Thread-138327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:14:12.039 [DEBUG] [Thread-138327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:14:12.039 [DEBUG] [Thread-138327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:14:12.057 [INFO] [Thread-138327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:14:12.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:14:12.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:14:12.861 [DEBUG] [Thread-138327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:14:12.861 [DEBUG] [Thread-138327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:14:12.909 [DEBUG] [Thread-138327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:14:12.909 [DEBUG] [Thread-138327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:14:12.918 [DEBUG] [Thread-138327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:14:12.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:14:12.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:14:12.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:14:12.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:14:12.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:14:12.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:14:12.954 [DEBUG] [Thread-138327] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:14:13.513 [DEBUG] [Thread-138329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:14:28.569 [DEBUG] [Thread-138330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:14:42.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:14:42.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:14:42.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
2026-02-12T00:14:43.606 [DEBUG] [Thread-138331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:14:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 14, 8), 0.89, 94.47, 0.0, 20.31, 14.24, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:14:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:14:08
2026-02-12T00:14:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:14:45.747 [DEBUG] [Thread-138332] [transport.py] [_log()] starting thread (client mode): 0xa2d9df90
2026-02-12T00:14:45.748 [DEBUG] [Thread-138332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:14:45.767 [DEBUG] [Thread-138332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:14:45.767 [INFO] [Thread-138332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:14:45.770 [DEBUG] [Thread-138332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] client lang: <none>
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] server lang: <none>
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] kex follows: False
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:14:45.771 [DEBUG] [Thread-138332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:14:45.772 [DEBUG] [Thread-138332] [transport.py] [_log()] Compression: none
2026-02-12T00:14:45.772 [DEBUG] [Thread-138332] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:14:45.790 [DEBUG] [Thread-138332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:14:45.790 [DEBUG] [Thread-138332] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:14:45.791 [DEBUG] [Thread-138332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:14:45.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:14:45.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:14:45.832 [DEBUG] [Thread-138332] [transport.py] [_log()] userauth is OK
2026-02-12T00:14:45.833 [DEBUG] [Thread-138332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:14:45.833 [DEBUG] [Thread-138332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:14:45.833 [DEBUG] [Thread-138332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:14:45.833 [DEBUG] [Thread-138332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:14:45.864 [INFO] [Thread-138332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:14:45.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:14:46.500 [DEBUG] [Thread-138332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:14:46.501 [DEBUG] [Thread-138332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:14:46.501 [DEBUG] [Thread-138332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:14:46.541 [DEBUG] [Thread-138332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:14:46.541 [DEBUG] [Thread-138332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:14:46.544 [DEBUG] [Thread-138332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:14:46.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:14:46.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:14:46.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:14:46.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:14:46.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:14:46.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:14:46.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:14:46.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:14:46.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:14:46.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.926524 -999.00  +14.40  16.68     91  +13.00 1 3 1 3 1     0    0 1.50 5.24 ----- 16.7 16.7 185.4 22.3 16.0 -2.2 15.7 -2.1 15.6 -2.2 16.0 -2.3
2026-02-12T00:14:46.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:14:46.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:14:46.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.926524
2026-02-12T00:14:46.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:14:46.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:14:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:14:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:14:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:14:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:14:08', tmtdew=0.89, humidity=94.47, cloud=0.0, wind=20.31, temperature=14.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:14:11.674', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:14:46.567 [DEBUG] [Thread-138332] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:14:46.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:14:46.671 [DEBUG] [Thread-138335] [transport.py] [_log()] starting thread (client mode): 0xa2d9e800
2026-02-12T00:14:46.671 [DEBUG] [Thread-138335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:14:46.686 [DEBUG] [Thread-138335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:14:46.686 [INFO] [Thread-138335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:14:46.693 [DEBUG] [Thread-138335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] client lang: <none>
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] server lang: <none>
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] kex follows: False
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] Compression: none
2026-02-12T00:14:46.694 [DEBUG] [Thread-138335] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:14:46.754 [DEBUG] [Thread-138335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:14:46.755 [DEBUG] [Thread-138335] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:14:46.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:14:46.755 [DEBUG] [Thread-138335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:14:46.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:14:46.810 [DEBUG] [Thread-138335] [transport.py] [_log()] userauth is OK
2026-02-12T00:14:46.810 [DEBUG] [Thread-138335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:14:46.810 [DEBUG] [Thread-138335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:14:46.810 [DEBUG] [Thread-138335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:14:46.810 [DEBUG] [Thread-138335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:14:46.832 [INFO] [Thread-138335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:14:46.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:14:46.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:14:47.640 [DEBUG] [Thread-138335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:14:47.640 [DEBUG] [Thread-138335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:14:47.688 [DEBUG] [Thread-138335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:14:47.688 [DEBUG] [Thread-138335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:14:47.697 [DEBUG] [Thread-138335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:14:47.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:14:47.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:14:47.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:14:47.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:14:47.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:14:47.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:14:47.731 [DEBUG] [Thread-138335] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:14:54.674 [DEBUG] [Thread-138337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:14:58.640 [DEBUG] [Thread-138338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:15:03.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:15:03.716 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:15:13.701 [DEBUG] [Thread-138339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:15:17.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:15:17.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:15:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:15:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 14, 43), 0.84, 94.47, 0.0, 23.73, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:15:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:14:43
2026-02-12T00:15:19.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:15:20.023 [DEBUG] [Thread-138340] [transport.py] [_log()] starting thread (client mode): 0xa57e0100
2026-02-12T00:15:20.023 [DEBUG] [Thread-138340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:15:20.042 [DEBUG] [Thread-138340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:15:20.042 [INFO] [Thread-138340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] client lang: <none>
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] server lang: <none>
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] kex follows: False
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:15:20.045 [DEBUG] [Thread-138340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:15:20.046 [DEBUG] [Thread-138340] [transport.py] [_log()] Compression: none
2026-02-12T00:15:20.046 [DEBUG] [Thread-138340] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:15:20.061 [DEBUG] [Thread-138340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:15:20.061 [DEBUG] [Thread-138340] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:15:20.062 [DEBUG] [Thread-138340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:15:20.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:15:20.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:15:20.063 [DEBUG] [Thread-138340] [transport.py] [_log()] userauth is OK
2026-02-12T00:15:20.063 [DEBUG] [Thread-138340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:15:20.063 [DEBUG] [Thread-138340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:15:20.063 [DEBUG] [Thread-138340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:15:20.063 [DEBUG] [Thread-138340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:15:20.077 [INFO] [Thread-138340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:15:20.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:15:20.714 [DEBUG] [Thread-138340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:15:20.715 [DEBUG] [Thread-138340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:15:20.715 [DEBUG] [Thread-138340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:15:20.755 [DEBUG] [Thread-138340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:15:20.756 [DEBUG] [Thread-138340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:15:20.759 [DEBUG] [Thread-138340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:15:20.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:15:20.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:15:20.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:15:20.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:15:20.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:15:20.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:15:20.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:15:20.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:15:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:15:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.927218 -999.00  +14.40  16.01     91  +12.90 1 3 1 3 1     0    0 1.55 6.46 ----- 16.0 16.0 189.0 19.4 16.0 -2.2 15.7 -2.6 15.6 -2.1 16.0 -2.4
2026-02-12T00:15:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:15:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:15:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.927218
2026-02-12T00:15:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:15:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:15:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:15:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:15:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:15:20.792 [DEBUG] [Thread-138340] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:15:20.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:14:43', tmtdew=0.84, humidity=94.47, cloud=0.0, wind=23.73, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:15:11.635', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:15:20.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:15:20.889 [DEBUG] [Thread-138343] [transport.py] [_log()] starting thread (client mode): 0xa2d9cd60
2026-02-12T00:15:20.889 [DEBUG] [Thread-138343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:15:20.903 [DEBUG] [Thread-138343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:15:20.903 [INFO] [Thread-138343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] client lang: <none>
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] server lang: <none>
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] kex follows: False
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] Compression: none
2026-02-12T00:15:20.911 [DEBUG] [Thread-138343] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:15:20.969 [DEBUG] [Thread-138343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:15:20.970 [DEBUG] [Thread-138343] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:15:20.970 [DEBUG] [Thread-138343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:15:20.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:15:20.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:15:21.028 [DEBUG] [Thread-138343] [transport.py] [_log()] userauth is OK
2026-02-12T00:15:21.028 [DEBUG] [Thread-138343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:15:21.029 [DEBUG] [Thread-138343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:15:21.029 [DEBUG] [Thread-138343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:15:21.029 [DEBUG] [Thread-138343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:15:21.053 [INFO] [Thread-138343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:15:21.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:15:21.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:15:21.860 [DEBUG] [Thread-138343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:15:21.861 [DEBUG] [Thread-138343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:15:21.908 [DEBUG] [Thread-138343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:15:21.908 [DEBUG] [Thread-138343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:15:21.917 [DEBUG] [Thread-138343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:15:21.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:15:21.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:15:21.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:15:21.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:15:21.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:15:21.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:15:21.960 [DEBUG] [Thread-138343] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:15:28.740 [DEBUG] [Thread-138345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:15:43.795 [DEBUG] [Thread-138346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:15:51.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:15:51.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:15:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:15:54.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 15, 20), 0.84, 94.45, 0.0, 23.4, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:15:54.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:15:20
2026-02-12T00:15:54.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:15:54.568 [DEBUG] [Thread-138347] [transport.py] [_log()] starting thread (client mode): 0xa57e2c20
2026-02-12T00:15:54.569 [DEBUG] [Thread-138347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:15:54.588 [DEBUG] [Thread-138347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:15:54.588 [INFO] [Thread-138347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:15:54.591 [DEBUG] [Thread-138347] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] client lang: <none>
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] server lang: <none>
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] kex follows: False
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] Compression: none
2026-02-12T00:15:54.592 [DEBUG] [Thread-138347] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:15:54.609 [DEBUG] [Thread-138347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:15:54.610 [DEBUG] [Thread-138347] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:15:54.610 [DEBUG] [Thread-138347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:15:54.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:15:54.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:15:54.612 [DEBUG] [Thread-138347] [transport.py] [_log()] userauth is OK
2026-02-12T00:15:54.612 [DEBUG] [Thread-138347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:15:54.612 [DEBUG] [Thread-138347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:15:54.613 [DEBUG] [Thread-138347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:15:54.613 [DEBUG] [Thread-138347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:15:54.637 [INFO] [Thread-138347] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:15:54.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:15:54.746 [DEBUG] [Thread-138349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:15:55.277 [DEBUG] [Thread-138347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:15:55.277 [DEBUG] [Thread-138347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:15:55.278 [DEBUG] [Thread-138347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:15:55.318 [DEBUG] [Thread-138347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:15:55.319 [DEBUG] [Thread-138347] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:15:55.322 [DEBUG] [Thread-138347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:15:55.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:15:55.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:15:55.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:15:55.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:15:55.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:15:55.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:15:55.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:15:55.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:15:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:15:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.927565 -999.00  +14.40  14.95     91  +12.90 1 3 1 3 1     0    0 1.56 7.07 ----- 14.9 14.9 191.2 21.0 16.0 -2.4 15.8 -2.4 15.7 -2.2 16.0 -2.3
2026-02-12T00:15:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:15:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:15:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.927565
2026-02-12T00:15:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:15:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:15:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:15:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:15:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:15:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:15:20', tmtdew=0.84, humidity=94.45, cloud=0.0, wind=23.4, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:15:41.616', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:15:55.348 [DEBUG] [Thread-138347] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:15:55.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:15:55.448 [DEBUG] [Thread-138351] [transport.py] [_log()] starting thread (client mode): 0xa57e2710
2026-02-12T00:15:55.448 [DEBUG] [Thread-138351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:15:55.463 [DEBUG] [Thread-138351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:15:55.463 [INFO] [Thread-138351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:15:55.470 [DEBUG] [Thread-138351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:15:55.471 [DEBUG] [Thread-138351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:15:55.471 [DEBUG] [Thread-138351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:15:55.471 [DEBUG] [Thread-138351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:55.471 [DEBUG] [Thread-138351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:15:55.471 [DEBUG] [Thread-138351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] client lang: <none>
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] server lang: <none>
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] kex follows: False
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:15:55.472 [DEBUG] [Thread-138351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:15:55.473 [DEBUG] [Thread-138351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:15:55.473 [DEBUG] [Thread-138351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:15:55.473 [DEBUG] [Thread-138351] [transport.py] [_log()] Compression: none
2026-02-12T00:15:55.473 [DEBUG] [Thread-138351] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:15:55.531 [DEBUG] [Thread-138351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:15:55.532 [DEBUG] [Thread-138351] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:15:55.532 [DEBUG] [Thread-138351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:15:55.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:15:55.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:15:55.587 [DEBUG] [Thread-138351] [transport.py] [_log()] userauth is OK
2026-02-12T00:15:55.587 [DEBUG] [Thread-138351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:15:55.587 [DEBUG] [Thread-138351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:15:55.588 [DEBUG] [Thread-138351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:15:55.588 [DEBUG] [Thread-138351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:15:55.607 [INFO] [Thread-138351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:15:55.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:15:55.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:15:56.488 [DEBUG] [Thread-138351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:15:56.488 [DEBUG] [Thread-138351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:15:56.536 [DEBUG] [Thread-138351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:15:56.537 [DEBUG] [Thread-138351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:15:56.546 [DEBUG] [Thread-138351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:15:56.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:15:56.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:15: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') -> 00000000
2026-02-12T00:15:56.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:15:56.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:15:56.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:15:56.582 [DEBUG] [Thread-138351] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:15:58.831 [DEBUG] [Thread-138353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:16:03.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:16:03.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:16:13.893 [DEBUG] [Thread-138354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:16:26.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:16:26.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:16:26.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:16:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 15, 55), 0.84, 94.45, 0.0, 21.98, 14.24, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:16:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:15:55
2026-02-12T00:16:28.928 [DEBUG] [Thread-138355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:16:29.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:16:29.156 [DEBUG] [Thread-138356] [transport.py] [_log()] starting thread (client mode): 0xa2dc3970
2026-02-12T00:16:29.156 [DEBUG] [Thread-138356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:16:29.176 [DEBUG] [Thread-138356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:16:29.176 [INFO] [Thread-138356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:16:29.179 [DEBUG] [Thread-138356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:16:29.179 [DEBUG] [Thread-138356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] client lang: <none>
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] server lang: <none>
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] kex follows: False
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:16:29.180 [DEBUG] [Thread-138356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:16:29.181 [DEBUG] [Thread-138356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:16:29.181 [DEBUG] [Thread-138356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:16:29.181 [DEBUG] [Thread-138356] [transport.py] [_log()] Compression: none
2026-02-12T00:16:29.181 [DEBUG] [Thread-138356] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:16:29.199 [DEBUG] [Thread-138356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:16:29.200 [DEBUG] [Thread-138356] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:16:29.200 [DEBUG] [Thread-138356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:16:29.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:16:29.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:16:29.202 [DEBUG] [Thread-138356] [transport.py] [_log()] userauth is OK
2026-02-12T00:16:29.203 [DEBUG] [Thread-138356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:16:29.203 [DEBUG] [Thread-138356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:16:29.203 [DEBUG] [Thread-138356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:16:29.203 [DEBUG] [Thread-138356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:16:29.227 [INFO] [Thread-138356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:16:29.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:16:29.827 [DEBUG] [Thread-138356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:16:29.827 [DEBUG] [Thread-138356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:16:29.828 [DEBUG] [Thread-138356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:16:29.868 [DEBUG] [Thread-138356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:16:29.868 [DEBUG] [Thread-138356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:16:29.870 [DEBUG] [Thread-138356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:16:29.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:16:29.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:16:29.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:16:29.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:16:29.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:16:29.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:16:29.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:16:29.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:16:29.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:16:29.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.927913 -999.00  +14.30  16.91     91  +13.00 1 3 1 3 1     0    0 1.53 7.57 ----- 16.9 16.9 190.2 21.1 16.0 -2.4 15.8 -2.4 15.7 -2.3 16.0 -2.3
2026-02-12T00:16:29.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:16:29.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:16:29.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.927913
2026-02-12T00:16:29.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:16:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:16:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:16:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:16:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:16:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:15:55', tmtdew=0.84, humidity=94.45, cloud=0.0, wind=21.98, temperature=14.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:16:11.683', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:16:29.889 [DEBUG] [Thread-138356] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:16:29.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:16:29.984 [DEBUG] [Thread-138359] [transport.py] [_log()] starting thread (client mode): 0xa2dc37f0
2026-02-12T00:16:29.984 [DEBUG] [Thread-138359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:16:29.999 [DEBUG] [Thread-138359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:16:29.999 [INFO] [Thread-138359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:16:30.007 [DEBUG] [Thread-138359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:16:30.007 [DEBUG] [Thread-138359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:16:30.007 [DEBUG] [Thread-138359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] client lang: <none>
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] server lang: <none>
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] kex follows: False
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:16:30.008 [DEBUG] [Thread-138359] [transport.py] [_log()] Compression: none
2026-02-12T00:16:30.009 [DEBUG] [Thread-138359] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:16:30.071 [DEBUG] [Thread-138359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:16:30.071 [DEBUG] [Thread-138359] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:16:30.072 [DEBUG] [Thread-138359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:16:30.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:16:30.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:16:30.127 [DEBUG] [Thread-138359] [transport.py] [_log()] userauth is OK
2026-02-12T00:16:30.127 [DEBUG] [Thread-138359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:16:30.128 [DEBUG] [Thread-138359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:16:30.128 [DEBUG] [Thread-138359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:16:30.128 [DEBUG] [Thread-138359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:16:30.147 [INFO] [Thread-138359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:16:30.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:16:30.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:16:30.969 [DEBUG] [Thread-138359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:16:30.969 [DEBUG] [Thread-138359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:16:31.017 [DEBUG] [Thread-138359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:16:31.017 [DEBUG] [Thread-138359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:16:31.026 [DEBUG] [Thread-138359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:16:31.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:16:31.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:16:31.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:16:31.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:16:31.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:16:31.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:16:31.060 [DEBUG] [Thread-138359] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:16:43.964 [DEBUG] [Thread-138361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:16:54.835 [DEBUG] [Thread-138362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:16:59.016 [DEBUG] [Thread-138363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:17:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:17:01.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:17:01.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:17:02.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 16, 30), 0.84, 94.48, 0.0, 19.87, 14.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:17:02.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:16:30
2026-02-12T00:17:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:17:03.471 [DEBUG] [Thread-138364] [transport.py] [_log()] starting thread (client mode): 0xa57e2aa0
2026-02-12T00:17:03.471 [DEBUG] [Thread-138364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:17:03.491 [DEBUG] [Thread-138364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:17:03.491 [INFO] [Thread-138364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] client lang: <none>
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] server lang: <none>
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] kex follows: False
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] Compression: none
2026-02-12T00:17:03.495 [DEBUG] [Thread-138364] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:17:03.512 [DEBUG] [Thread-138364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:17:03.513 [DEBUG] [Thread-138364] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:17:03.513 [DEBUG] [Thread-138364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:17:03.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:17:03.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:17:03.557 [DEBUG] [Thread-138364] [transport.py] [_log()] userauth is OK
2026-02-12T00:17:03.558 [DEBUG] [Thread-138364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:17:03.558 [DEBUG] [Thread-138364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:17:03.558 [DEBUG] [Thread-138364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:17:03.558 [DEBUG] [Thread-138364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:17:03.580 [INFO] [Thread-138364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:17:03.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:17:04.121 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:17:04.122 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:17:04.217 [DEBUG] [Thread-138364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:17:04.217 [DEBUG] [Thread-138364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:17:04.217 [DEBUG] [Thread-138364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:17:04.258 [DEBUG] [Thread-138364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:17:04.259 [DEBUG] [Thread-138364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:17:04.262 [DEBUG] [Thread-138364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:17:04.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:17:04.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:17:04.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:17:04.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:17:04.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:17:04.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:17:04.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:17:04.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:17:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:17:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.928260 -999.00  +14.40   9.63     91  +13.00 1 3 1 3 1     0    0 1.58 8.20 ----- 9.6 9.6 177.4 14.6 16.0 -2.6 15.8 -2.4 15.7 -2.5 16.1 -2.6
2026-02-12T00:17:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:17:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:17:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.928260
2026-02-12T00:17:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:17:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:17:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:17:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:17:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:17:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:16:30', tmtdew=0.84, humidity=94.48, cloud=0.0, wind=19.87, temperature=14.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:16:41.664', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:17:04.290 [DEBUG] [Thread-138364] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:17:04.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:17:04.384 [DEBUG] [Thread-138367] [transport.py] [_log()] starting thread (client mode): 0xa57e2f20
2026-02-12T00:17:04.384 [DEBUG] [Thread-138367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:17:04.398 [DEBUG] [Thread-138367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:17:04.398 [INFO] [Thread-138367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:17:04.405 [DEBUG] [Thread-138367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:17:04.405 [DEBUG] [Thread-138367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] client lang: <none>
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] server lang: <none>
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] kex follows: False
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] Compression: none
2026-02-12T00:17:04.406 [DEBUG] [Thread-138367] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:17:04.464 [DEBUG] [Thread-138367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:17:04.465 [DEBUG] [Thread-138367] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:17:04.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:17:04.466 [DEBUG] [Thread-138367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:17:04.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:17:04.523 [DEBUG] [Thread-138367] [transport.py] [_log()] userauth is OK
2026-02-12T00:17:04.523 [DEBUG] [Thread-138367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:17:04.523 [DEBUG] [Thread-138367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:17:04.523 [DEBUG] [Thread-138367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:17:04.523 [DEBUG] [Thread-138367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:17:04.541 [INFO] [Thread-138367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:17:04.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:17:04.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:17:05.347 [DEBUG] [Thread-138367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:17:05.347 [DEBUG] [Thread-138367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:17:05.395 [DEBUG] [Thread-138367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:17:05.396 [DEBUG] [Thread-138367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:17:05.405 [DEBUG] [Thread-138367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:17:05.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:17:05.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:17:05.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:17:05.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:17:05.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:17:05.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:17:05.442 [DEBUG] [Thread-138367] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:17:14.053 [DEBUG] [Thread-138369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:17:29.095 [DEBUG] [Thread-138370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:17:35.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:17:35.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:17:35.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:17:37.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 17, 5), 0.84, 94.5, 0.0, 21.58, 14.24, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:17:37.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:17:05
2026-02-12T00:17:37.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:17:37.800 [DEBUG] [Thread-138371] [transport.py] [_log()] starting thread (client mode): 0xa57e0ee0
2026-02-12T00:17:37.800 [DEBUG] [Thread-138371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:17:37.820 [DEBUG] [Thread-138371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:17:37.820 [INFO] [Thread-138371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:17:37.823 [DEBUG] [Thread-138371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] client lang: <none>
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] server lang: <none>
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] kex follows: False
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] Compression: none
2026-02-12T00:17:37.824 [DEBUG] [Thread-138371] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:17:37.834 [DEBUG] [Thread-138371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:17:37.835 [DEBUG] [Thread-138371] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:17:37.835 [DEBUG] [Thread-138371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:17:37.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:17:37.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:17:37.838 [DEBUG] [Thread-138371] [transport.py] [_log()] userauth is OK
2026-02-12T00:17:37.838 [DEBUG] [Thread-138371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:17:37.838 [DEBUG] [Thread-138371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:17:37.838 [DEBUG] [Thread-138371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:17:37.838 [DEBUG] [Thread-138371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:17:37.852 [INFO] [Thread-138371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:17:37.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:17:38.465 [DEBUG] [Thread-138371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:17:38.465 [DEBUG] [Thread-138371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:17:38.465 [DEBUG] [Thread-138371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:17:38.506 [DEBUG] [Thread-138371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:17:38.507 [DEBUG] [Thread-138371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:17:38.510 [DEBUG] [Thread-138371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:17:38.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:17:38.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:17:38.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:17:38.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:17:38.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:17:38.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:17:38.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:17:38.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:17:38.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:17:38.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.928607 -999.00  +14.30  11.95     91  +13.00 1 3 1 3 1     0    0 1.61 8.41 ----- 11.9 11.9 186.6 22.1 16.1 -2.8 15.8 -3.2 15.7 -2.8 16.0 -3.0
2026-02-12T00:17:38.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:17:38.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:17:38.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.928607
2026-02-12T00:17:38.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:17:38.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:17:38.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:17:38.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:17:38.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:17:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:17:05', tmtdew=0.84, humidity=94.5, cloud=0.0, wind=21.58, temperature=14.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:17:11.645', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:17:38.536 [DEBUG] [Thread-138371] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:17:38.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:17:44.135 [DEBUG] [Thread-138374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:17:54.917 [DEBUG] [Thread-138375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:17:59.188 [DEBUG] [Thread-138376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:18:04.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:18:04.328 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:18:14.223 [DEBUG] [Thread-138377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:18:29.260 [DEBUG] [Thread-138378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:18:44.299 [DEBUG] [Thread-138379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:18:54.985 [DEBUG] [Thread-138380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:18:59.335 [DEBUG] [Thread-138381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:19:04.528 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:19:04.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:19:14.369 [DEBUG] [Thread-138382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:19:29.409 [DEBUG] [Thread-138383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:19:44.445 [DEBUG] [Thread-138384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:19:53.272 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T00:19:55.043 [DEBUG] [Thread-138385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:19:59.481 [DEBUG] [Thread-138386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:04.746 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:04.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:14.517 [DEBUG] [Thread-138387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:23.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:20:23.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:20:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:20:25.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 20, 2), 0.76, 95.15, 0.0, 22.48, 14.19, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:20:25.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:20:02
2026-02-12T00:20:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:20:26.058 [DEBUG] [Thread-138388] [transport.py] [_log()] starting thread (client mode): 0xa2d9d900
2026-02-12T00:20:26.058 [DEBUG] [Thread-138388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:20:26.068 [DEBUG] [Thread-138388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:20:26.068 [INFO] [Thread-138388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] client lang: <none>
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] server lang: <none>
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] kex follows: False
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] Compression: none
2026-02-12T00:20:26.070 [DEBUG] [Thread-138388] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:20:26.078 [DEBUG] [Thread-138388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:20:26.078 [DEBUG] [Thread-138388] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:20:26.079 [DEBUG] [Thread-138388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:20:26.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:20:26.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:20:26.080 [DEBUG] [Thread-138388] [transport.py] [_log()] userauth is OK
2026-02-12T00:20:26.080 [DEBUG] [Thread-138388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:20:26.080 [DEBUG] [Thread-138388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:20:26.080 [DEBUG] [Thread-138388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:20:26.080 [DEBUG] [Thread-138388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:20:26.099 [INFO] [Thread-138388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:20:26.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:20:26.674 [DEBUG] [Thread-138388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:20:26.674 [DEBUG] [Thread-138388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:20:26.674 [DEBUG] [Thread-138388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:20:26.715 [DEBUG] [Thread-138388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:20:26.716 [DEBUG] [Thread-138388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:20:26.719 [DEBUG] [Thread-138388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:20:26.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:20:26.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:20:26.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:20:26.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:20:26.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:20:26.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:20:26.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:20:26.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:20:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:20:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.930690 -999.00  +14.30  16.55     91  +13.00 1 3 1 3 1     0    0 1.52 5.53 ----- 16.6 16.6 199.8 18.5 16.1 -2.4 15.8 -2.8 15.7 -2.3 16.1 -2.6
2026-02-12T00:20:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:20:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:20:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.930690
2026-02-12T00:20:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:20:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:20:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:20:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:20:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:20:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:20:02', tmtdew=0.76, humidity=95.15, cloud=0.0, wind=22.48, temperature=14.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:20:11.616', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:20:26.748 [DEBUG] [Thread-138388] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:20:26.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:20:26.844 [DEBUG] [Thread-138391] [transport.py] [_log()] starting thread (client mode): 0xa57e33a0
2026-02-12T00:20:26.844 [DEBUG] [Thread-138391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:20:26.859 [DEBUG] [Thread-138391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:20:26.859 [INFO] [Thread-138391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:20:26.867 [DEBUG] [Thread-138391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:20:26.867 [DEBUG] [Thread-138391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:20:26.867 [DEBUG] [Thread-138391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:20:26.867 [DEBUG] [Thread-138391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:20:26.867 [DEBUG] [Thread-138391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] client lang: <none>
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] server lang: <none>
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] kex follows: False
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] Compression: none
2026-02-12T00:20:26.868 [DEBUG] [Thread-138391] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:20:26.924 [DEBUG] [Thread-138391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:20:26.924 [DEBUG] [Thread-138391] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:20:26.925 [DEBUG] [Thread-138391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:20:26.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:20:26.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:20:26.981 [DEBUG] [Thread-138391] [transport.py] [_log()] userauth is OK
2026-02-12T00:20:26.981 [DEBUG] [Thread-138391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:20:26.981 [DEBUG] [Thread-138391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:20:26.981 [DEBUG] [Thread-138391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:20:26.981 [DEBUG] [Thread-138391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:20:26.999 [INFO] [Thread-138391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:20:27.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:20:27.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:20:27.793 [DEBUG] [Thread-138391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:20:27.793 [DEBUG] [Thread-138391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:20:27.841 [DEBUG] [Thread-138391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:20:27.842 [DEBUG] [Thread-138391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:20:27.854 [DEBUG] [Thread-138391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:20:27.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:20:27.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')
2026-02-12T00:20:27.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:20:27.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:20:27.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:20:27.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:20:27.900 [DEBUG] [Thread-138391] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:20:29.551 [DEBUG] [Thread-138393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:44.606 [DEBUG] [Thread-138394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:55.111 [DEBUG] [Thread-138395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:20:57.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:20:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:20:59.644 [DEBUG] [Thread-138396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:20:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 20, 38), 1.23, 92.23, 0.0, 24.77, 14.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:20:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:20:38
2026-02-12T00:21:00.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:21:00.361 [DEBUG] [Thread-138397] [transport.py] [_log()] starting thread (client mode): 0xa57e3430
2026-02-12T00:21:00.361 [DEBUG] [Thread-138397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:21:00.381 [DEBUG] [Thread-138397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:21:00.381 [INFO] [Thread-138397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:00.384 [DEBUG] [Thread-138397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] client lang: <none>
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] server lang: <none>
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] kex follows: False
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] Compression: none
2026-02-12T00:21:00.385 [DEBUG] [Thread-138397] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:21:00.400 [DEBUG] [Thread-138397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:21:00.401 [DEBUG] [Thread-138397] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:21:00.401 [DEBUG] [Thread-138397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:21:00.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:21:00.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:21:00.403 [DEBUG] [Thread-138397] [transport.py] [_log()] userauth is OK
2026-02-12T00:21:00.403 [DEBUG] [Thread-138397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:21:00.404 [DEBUG] [Thread-138397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:21:00.404 [DEBUG] [Thread-138397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:21:00.404 [DEBUG] [Thread-138397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:21:00.428 [INFO] [Thread-138397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:21:00.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:21:01.045 [DEBUG] [Thread-138397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:21:01.045 [DEBUG] [Thread-138397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:21:01.045 [DEBUG] [Thread-138397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:21:01.086 [DEBUG] [Thread-138397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:21:01.087 [DEBUG] [Thread-138397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:21:01.090 [DEBUG] [Thread-138397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:21:01.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:21:01.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:21:01.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:21:01.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:21:01.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:21:01.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:21:01.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:21:01.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:21:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:21:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.931038 -999.00  +14.20  17.06     91  +12.90 1 3 1 3 1     0    0 1.47 4.99 ----- 17.1 17.1 188.0 24.7 16.0 -2.5 15.8 -3.0 15.7 -2.4 16.1 -2.6
2026-02-12T00:21:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:21:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:21:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.931038
2026-02-12T00:21:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:21:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:21:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:21:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:21:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:21:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:20:38', tmtdew=1.23, humidity=92.23, cloud=0.0, wind=24.77, temperature=14.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:20:41.683', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:21:01.118 [DEBUG] [Thread-138397] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:21:01.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:21:01.215 [DEBUG] [Thread-138400] [transport.py] [_log()] starting thread (client mode): 0xa2dc23e0
2026-02-12T00:21:01.215 [DEBUG] [Thread-138400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:21:01.231 [DEBUG] [Thread-138400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:21:01.231 [INFO] [Thread-138400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:21:01.239 [DEBUG] [Thread-138400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:21:01.239 [DEBUG] [Thread-138400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] client lang: <none>
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] server lang: <none>
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] kex follows: False
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] Compression: none
2026-02-12T00:21:01.240 [DEBUG] [Thread-138400] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:21:01.295 [DEBUG] [Thread-138400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:21:01.295 [DEBUG] [Thread-138400] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:21:01.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:21:01.295 [DEBUG] [Thread-138400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:21:01.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:21:01.352 [DEBUG] [Thread-138400] [transport.py] [_log()] userauth is OK
2026-02-12T00:21:01.353 [DEBUG] [Thread-138400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:21:01.353 [DEBUG] [Thread-138400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:21:01.353 [DEBUG] [Thread-138400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:21:01.353 [DEBUG] [Thread-138400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:21:01.379 [INFO] [Thread-138400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:21:01.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:21:01.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:21:02.222 [DEBUG] [Thread-138400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:21:02.222 [DEBUG] [Thread-138400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:21:02.272 [DEBUG] [Thread-138400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:21:02.272 [DEBUG] [Thread-138400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:21:02.285 [DEBUG] [Thread-138400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:21:02.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:21:02.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:21:02.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:21:02.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:21:02.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:21:02.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:21:02.330 [DEBUG] [Thread-138400] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:21:04.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:21:04.960 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:21:14.681 [DEBUG] [Thread-138402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:21:29.731 [DEBUG] [Thread-138403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:21:32.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:21:32.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:21:32.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
2026-02-12T00:21:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 21, 14), 0.7, 95.21, 0.0, 21.88, 14.12, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:21:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:21:14
2026-02-12T00:21:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:21:34.631 [DEBUG] [Thread-138404] [transport.py] [_log()] starting thread (client mode): 0xa57e3ca0
2026-02-12T00:21:34.631 [DEBUG] [Thread-138404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:21:34.651 [DEBUG] [Thread-138404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:21:34.652 [INFO] [Thread-138404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] client lang: <none>
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] server lang: <none>
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] kex follows: False
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] Compression: none
2026-02-12T00:21:34.655 [DEBUG] [Thread-138404] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:21:34.673 [DEBUG] [Thread-138404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:21:34.674 [DEBUG] [Thread-138404] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:21:34.674 [DEBUG] [Thread-138404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:21:34.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:21:34.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:21:34.676 [DEBUG] [Thread-138404] [transport.py] [_log()] userauth is OK
2026-02-12T00:21:34.677 [DEBUG] [Thread-138404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:21:34.677 [DEBUG] [Thread-138404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:21:34.677 [DEBUG] [Thread-138404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:21:34.677 [DEBUG] [Thread-138404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:21:34.701 [INFO] [Thread-138404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:21:34.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:21:35.349 [DEBUG] [Thread-138404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:21:35.350 [DEBUG] [Thread-138404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:21:35.350 [DEBUG] [Thread-138404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:21:35.390 [DEBUG] [Thread-138404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:21:35.391 [DEBUG] [Thread-138404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:21:35.394 [DEBUG] [Thread-138404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:21:35.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:21:35.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:21:35.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:21:35.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:21:35.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:21:35.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:21:35.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:21:35.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:21:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:21:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.931385 -999.00  +14.20  12.29     91  +12.90 1 3 1 3 1     0    0 1.49 4.77 ----- 12.3 12.3 190.8 19.3 16.0 -2.2 15.8 -2.7 15.7 -2.2 16.1 -2.3
2026-02-12T00:21:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:21:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:21:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.931385
2026-02-12T00:21:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:21:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:21:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:21:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:21:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:21:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:21:14', tmtdew=0.7, humidity=95.21, cloud=0.0, wind=21.88, temperature=14.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:21:11.664', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:21:35.419 [DEBUG] [Thread-138404] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:21:35.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:21:35.513 [DEBUG] [Thread-138407] [transport.py] [_log()] starting thread (client mode): 0xa2d9d600
2026-02-12T00:21:35.513 [DEBUG] [Thread-138407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:21:35.528 [DEBUG] [Thread-138407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:21:35.528 [INFO] [Thread-138407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] client lang: <none>
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] server lang: <none>
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] kex follows: False
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:21:35.536 [DEBUG] [Thread-138407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:21:35.537 [DEBUG] [Thread-138407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:21:35.537 [DEBUG] [Thread-138407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:21:35.537 [DEBUG] [Thread-138407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:21:35.537 [DEBUG] [Thread-138407] [transport.py] [_log()] Compression: none
2026-02-12T00:21:35.537 [DEBUG] [Thread-138407] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:21:35.597 [DEBUG] [Thread-138407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:21:35.597 [DEBUG] [Thread-138407] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:21:35.598 [DEBUG] [Thread-138407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:21:35.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:21:35.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:21:35.653 [DEBUG] [Thread-138407] [transport.py] [_log()] userauth is OK
2026-02-12T00:21:35.653 [DEBUG] [Thread-138407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:21:35.653 [DEBUG] [Thread-138407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:21:35.653 [DEBUG] [Thread-138407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:21:35.653 [DEBUG] [Thread-138407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:21:35.678 [INFO] [Thread-138407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:21:35.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:21:35.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:21:36.506 [DEBUG] [Thread-138407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:21:36.506 [DEBUG] [Thread-138407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:21:36.553 [DEBUG] [Thread-138407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:21:36.554 [DEBUG] [Thread-138407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:21:36.563 [DEBUG] [Thread-138407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:21:36.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:21: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')
2026-02-12T00:21:36.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:21:36.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:21:36.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:21:36.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:21:36.599 [DEBUG] [Thread-138407] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:21:44.769 [DEBUG] [Thread-138409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:21:55.168 [DEBUG] [Thread-138410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:21:59.820 [DEBUG] [Thread-138411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:22:05.162 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:22:05.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:22:06.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:22:06.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:22:06.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:22:08.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 21, 50), 0.71, 95.67, 0.0, 21.3, 14.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:22:08.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:21:50
2026-02-12T00:22:09.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:22:09.631 [DEBUG] [Thread-138412] [transport.py] [_log()] starting thread (client mode): 0xa2d97550
2026-02-12T00:22:09.631 [DEBUG] [Thread-138412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:22:09.646 [DEBUG] [Thread-138412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:22:09.646 [INFO] [Thread-138412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:22:09.647 [DEBUG] [Thread-138412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:22:09.647 [DEBUG] [Thread-138412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:22:09.647 [DEBUG] [Thread-138412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] client lang: <none>
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] server lang: <none>
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] kex follows: False
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] Compression: none
2026-02-12T00:22:09.648 [DEBUG] [Thread-138412] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:22:09.660 [DEBUG] [Thread-138412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:22:09.661 [DEBUG] [Thread-138412] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:22:09.661 [DEBUG] [Thread-138412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:22:09.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:22:09.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:22:09.662 [DEBUG] [Thread-138412] [transport.py] [_log()] userauth is OK
2026-02-12T00:22:09.663 [DEBUG] [Thread-138412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:22:09.663 [DEBUG] [Thread-138412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:22:09.663 [DEBUG] [Thread-138412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:22:09.663 [DEBUG] [Thread-138412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:22:09.680 [INFO] [Thread-138412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:22:09.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:22:10.293 [DEBUG] [Thread-138412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:22:10.293 [DEBUG] [Thread-138412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:22:10.294 [DEBUG] [Thread-138412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:22:10.334 [DEBUG] [Thread-138412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:22:10.334 [DEBUG] [Thread-138412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:22:10.337 [DEBUG] [Thread-138412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:22:10.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:22:10.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:22:10.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:22:10.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:22:10.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:22:10.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:22:10.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:22:10.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:22:10.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:22:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.931732 -999.00  +14.20  15.39     91  +12.90 1 3 1 3 1     0    0 1.45 4.20 ----- 15.4 15.4 193.6 21.2 16.1 -2.3 15.8 -2.4 15.7 -2.1 16.1 -2.3
2026-02-12T00:22:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:22:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:22:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.931732
2026-02-12T00:22:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:22:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:22:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:22:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:22:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:22:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:21:50', tmtdew=0.71, humidity=95.67, cloud=0.0, wind=21.3, temperature=14.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:21:41.645', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:22:10.360 [DEBUG] [Thread-138412] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:22:10.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:22:10.456 [DEBUG] [Thread-138415] [transport.py] [_log()] starting thread (client mode): 0xa2d97880
2026-02-12T00:22:10.456 [DEBUG] [Thread-138415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:22:10.471 [DEBUG] [Thread-138415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:22:10.471 [INFO] [Thread-138415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] client lang: <none>
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] server lang: <none>
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] kex follows: False
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:22:10.479 [DEBUG] [Thread-138415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:22:10.480 [DEBUG] [Thread-138415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:22:10.480 [DEBUG] [Thread-138415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:22:10.480 [DEBUG] [Thread-138415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:22:10.480 [DEBUG] [Thread-138415] [transport.py] [_log()] Compression: none
2026-02-12T00:22:10.480 [DEBUG] [Thread-138415] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:22:10.537 [DEBUG] [Thread-138415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:22:10.537 [DEBUG] [Thread-138415] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:22:10.538 [DEBUG] [Thread-138415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:22:10.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:22:10.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:22:10.597 [DEBUG] [Thread-138415] [transport.py] [_log()] userauth is OK
2026-02-12T00:22:10.598 [DEBUG] [Thread-138415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:22:10.598 [DEBUG] [Thread-138415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:22:10.598 [DEBUG] [Thread-138415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:22:10.598 [DEBUG] [Thread-138415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:22:10.616 [INFO] [Thread-138415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:22:10.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:22:10.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:22:11.432 [DEBUG] [Thread-138415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:22:11.432 [DEBUG] [Thread-138415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:22:11.480 [DEBUG] [Thread-138415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:22:11.480 [DEBUG] [Thread-138415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:22:11.490 [DEBUG] [Thread-138415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:22:11.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:22:11.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:22:11.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:22:11.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:22:11.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:22:11.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:22:11.526 [DEBUG] [Thread-138415] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:22:14.857 [DEBUG] [Thread-138417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:22:29.908 [DEBUG] [Thread-138418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:22:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:22:41.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:22:41.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:22:43.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 22, 26), 0.7, 95.73, 0.0, 22.71, 14.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:22:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:22:26
2026-02-12T00:22:43.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:22:43.996 [DEBUG] [Thread-138419] [transport.py] [_log()] starting thread (client mode): 0xa2dc3820
2026-02-12T00:22:43.996 [DEBUG] [Thread-138419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:22:44.016 [DEBUG] [Thread-138419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:22:44.016 [INFO] [Thread-138419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] client lang: <none>
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] server lang: <none>
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] kex follows: False
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:22:44.019 [DEBUG] [Thread-138419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:22:44.020 [DEBUG] [Thread-138419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:22:44.020 [DEBUG] [Thread-138419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:22:44.020 [DEBUG] [Thread-138419] [transport.py] [_log()] Compression: none
2026-02-12T00:22:44.020 [DEBUG] [Thread-138419] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:22:44.037 [DEBUG] [Thread-138419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:22:44.038 [DEBUG] [Thread-138419] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:22:44.038 [DEBUG] [Thread-138419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:22:44.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:22:44.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:22:44.040 [DEBUG] [Thread-138419] [transport.py] [_log()] userauth is OK
2026-02-12T00:22:44.040 [DEBUG] [Thread-138419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:22:44.040 [DEBUG] [Thread-138419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:22:44.040 [DEBUG] [Thread-138419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:22:44.040 [DEBUG] [Thread-138419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:22:44.055 [INFO] [Thread-138419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:22:44.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:22:44.708 [DEBUG] [Thread-138419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:22:44.708 [DEBUG] [Thread-138419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:22:44.708 [DEBUG] [Thread-138419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:22:44.749 [DEBUG] [Thread-138419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:22:44.750 [DEBUG] [Thread-138419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:22:44.752 [DEBUG] [Thread-138419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:22:44.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:22:44.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:22:44.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:22:44.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:22:44.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:22:44.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:22:44.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:22:44.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:22:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:22:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.932079 -999.00  +14.20  14.66     91  +12.90 1 3 1 3 1     0    0 1.46 3.87 ----- 14.7 14.7 197.2 23.4 16.0 -2.4 15.8 -2.6 15.7 -2.5 16.0 -2.4
2026-02-12T00:22:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:22:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:22:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.932079
2026-02-12T00:22:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:22:44.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:22:44.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:22:44.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:22:44.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:22:44.780 [DEBUG] [Thread-138419] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:22:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:22:26', tmtdew=0.7, humidity=95.73, cloud=0.0, wind=22.71, temperature=14.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:22:11.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:22:44.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:22:44.879 [DEBUG] [Thread-138422] [transport.py] [_log()] starting thread (client mode): 0xa2dc39a0
2026-02-12T00:22:44.879 [DEBUG] [Thread-138422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:22:44.893 [DEBUG] [Thread-138422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:22:44.893 [INFO] [Thread-138422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:22:44.901 [DEBUG] [Thread-138422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] client lang: <none>
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] server lang: <none>
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] kex follows: False
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] Compression: none
2026-02-12T00:22:44.902 [DEBUG] [Thread-138422] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:22:44.945 [DEBUG] [Thread-138424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:22:44.961 [DEBUG] [Thread-138422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:22:44.961 [DEBUG] [Thread-138422] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:22:44.962 [DEBUG] [Thread-138422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:22:44.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:22:44.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:22:45.017 [DEBUG] [Thread-138422] [transport.py] [_log()] userauth is OK
2026-02-12T00:22:45.017 [DEBUG] [Thread-138422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:22:45.018 [DEBUG] [Thread-138422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:22:45.018 [DEBUG] [Thread-138422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:22:45.018 [DEBUG] [Thread-138422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:22:45.042 [INFO] [Thread-138422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:22:45.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:22:45.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:22:45.866 [DEBUG] [Thread-138422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:22:45.866 [DEBUG] [Thread-138422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:22:45.914 [DEBUG] [Thread-138422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:22:45.915 [DEBUG] [Thread-138422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:22:45.924 [DEBUG] [Thread-138422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:22:45.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:22:45.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')
2026-02-12T00:22:45.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
2026-02-12T00:22:45.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:22:45.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:22:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:22:45.959 [DEBUG] [Thread-138422] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:22:55.266 [DEBUG] [Thread-138425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:00.002 [DEBUG] [Thread-138426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:05.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:05.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:15.044 [DEBUG] [Thread-138427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:23:15.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:23:15.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
2026-02-12T00:23:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 23, 2), 0.69, 95.76, 0.0, 24.61, 14.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:23:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:23:02
2026-02-12T00:23:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:23:19.028 [DEBUG] [Thread-138428] [transport.py] [_log()] starting thread (client mode): 0xa2d97b20
2026-02-12T00:23:19.029 [DEBUG] [Thread-138428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:23:19.049 [DEBUG] [Thread-138428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:23:19.049 [INFO] [Thread-138428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] client lang: <none>
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] server lang: <none>
2026-02-12T00:23:19.052 [DEBUG] [Thread-138428] [transport.py] [_log()] kex follows: False
2026-02-12T00:23:19.053 [DEBUG] [Thread-138428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:23:19.053 [DEBUG] [Thread-138428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:23:19.053 [DEBUG] [Thread-138428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:23:19.053 [DEBUG] [Thread-138428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:23:19.053 [DEBUG] [Thread-138428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:23:19.053 [DEBUG] [Thread-138428] [transport.py] [_log()] Compression: none
2026-02-12T00:23:19.053 [DEBUG] [Thread-138428] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:23:19.071 [DEBUG] [Thread-138428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:23:19.071 [DEBUG] [Thread-138428] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:23:19.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:23:19.072 [DEBUG] [Thread-138428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:23:19.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:23:19.075 [DEBUG] [Thread-138428] [transport.py] [_log()] userauth is OK
2026-02-12T00:23:19.075 [DEBUG] [Thread-138428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:23:19.075 [DEBUG] [Thread-138428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:23:19.075 [DEBUG] [Thread-138428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:23:19.075 [DEBUG] [Thread-138428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:23:19.107 [INFO] [Thread-138428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:23:19.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:23:19.741 [DEBUG] [Thread-138428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:23:19.741 [DEBUG] [Thread-138428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:23:19.742 [DEBUG] [Thread-138428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:23:19.782 [DEBUG] [Thread-138428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:23:19.782 [DEBUG] [Thread-138428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:23:19.784 [DEBUG] [Thread-138428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:23:19.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:23:19.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:23:19.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:23:19.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:23:19.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:23:19.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:23:19.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:23:19.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.932426 -999.00  +14.20  15.34     92  +12.90 1 3 1 3 1     0    0 1.44 3.25 ----- 15.3 15.3 198.6 24.2 16.0 -2.3 15.8 -2.4 15.7 -2.2 16.0 -2.4
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.932426
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:23:19.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:23:02', tmtdew=0.69, humidity=95.76, cloud=0.0, wind=24.61, temperature=14.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:22:41.606', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:23:19.805 [DEBUG] [Thread-138428] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:23:19.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:23:19.901 [DEBUG] [Thread-138431] [transport.py] [_log()] starting thread (client mode): 0xa2d94e80
2026-02-12T00:23:19.901 [DEBUG] [Thread-138431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:23:19.920 [DEBUG] [Thread-138431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:23:19.920 [INFO] [Thread-138431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:23:19.927 [DEBUG] [Thread-138431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:23:19.927 [DEBUG] [Thread-138431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:23:19.927 [DEBUG] [Thread-138431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:23:19.927 [DEBUG] [Thread-138431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:19.927 [DEBUG] [Thread-138431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] client lang: <none>
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] server lang: <none>
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] kex follows: False
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] Compression: none
2026-02-12T00:23:19.928 [DEBUG] [Thread-138431] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:23:19.984 [DEBUG] [Thread-138431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:23:19.985 [DEBUG] [Thread-138431] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:23:19.985 [DEBUG] [Thread-138431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:23:19.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:23:19.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:23:20.041 [DEBUG] [Thread-138431] [transport.py] [_log()] userauth is OK
2026-02-12T00:23:20.041 [DEBUG] [Thread-138431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:23:20.041 [DEBUG] [Thread-138431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:23:20.041 [DEBUG] [Thread-138431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:23:20.041 [DEBUG] [Thread-138431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:23:20.064 [INFO] [Thread-138431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:23:20.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:23:20.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:23:20.915 [DEBUG] [Thread-138431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:23:20.915 [DEBUG] [Thread-138431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:23:20.965 [DEBUG] [Thread-138431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:23:20.965 [DEBUG] [Thread-138431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:23:20.973 [DEBUG] [Thread-138431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:23:20.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:23:20.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:23:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:23:20.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:23:20.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:23:20.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:23:21.005 [DEBUG] [Thread-138431] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:23:30.080 [DEBUG] [Thread-138433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:45.136 [DEBUG] [Thread-138434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:23:51.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:23:51.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:23:52.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 23, 38), 1.19, 92.5, 0.0, 26.82, 14.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:23:52.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:23:38
2026-02-12T00:23:53.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:23:53.492 [DEBUG] [Thread-138435] [transport.py] [_log()] starting thread (client mode): 0xa2d967d0
2026-02-12T00:23:53.492 [DEBUG] [Thread-138435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:23:53.512 [DEBUG] [Thread-138435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:23:53.513 [INFO] [Thread-138435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] client lang: <none>
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] server lang: <none>
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] kex follows: False
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] Compression: none
2026-02-12T00:23:53.516 [DEBUG] [Thread-138435] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:23:53.534 [DEBUG] [Thread-138435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:23:53.535 [DEBUG] [Thread-138435] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:23:53.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:23:53.536 [DEBUG] [Thread-138435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:23:53.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:23:53.538 [DEBUG] [Thread-138435] [transport.py] [_log()] userauth is OK
2026-02-12T00:23:53.538 [DEBUG] [Thread-138435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:23:53.538 [DEBUG] [Thread-138435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:23:53.538 [DEBUG] [Thread-138435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:23:53.538 [DEBUG] [Thread-138435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:23:53.559 [INFO] [Thread-138435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:23:53.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:23:54.186 [DEBUG] [Thread-138435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:23:54.186 [DEBUG] [Thread-138435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:23:54.186 [DEBUG] [Thread-138435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:23:54.226 [DEBUG] [Thread-138435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:23:54.227 [DEBUG] [Thread-138435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:23:54.230 [DEBUG] [Thread-138435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:23:54.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:23:54.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:23:54.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:23:54.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:23:54.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:23:54.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:23:54.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:23:54.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:23:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:23:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.933121 -999.00  +14.20  15.97     92  +12.90 1 3 1 3 1     0    0 1.41 1.78 ----- 16.0 16.0 189.8 20.6 16.0 -2.3 15.7 -2.3 15.7 -2.2 16.1 -2.3
2026-02-12T00:23:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:23:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:23:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.933121
2026-02-12T00:23:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:23:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:23:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:23:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:23:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:23:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:23:38', tmtdew=1.19, humidity=92.5, cloud=0.0, wind=26.82, temperature=14.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:23:41.654', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:23:54.258 [DEBUG] [Thread-138435] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:23:54.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:23:54.355 [DEBUG] [Thread-138438] [transport.py] [_log()] starting thread (client mode): 0xa2dc34c0
2026-02-12T00:23:54.356 [DEBUG] [Thread-138438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:23:54.370 [DEBUG] [Thread-138438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:23:54.370 [INFO] [Thread-138438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:23:54.377 [DEBUG] [Thread-138438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:23:54.377 [DEBUG] [Thread-138438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] client lang: <none>
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] server lang: <none>
2026-02-12T00:23:54.378 [DEBUG] [Thread-138438] [transport.py] [_log()] kex follows: False
2026-02-12T00:23:54.379 [DEBUG] [Thread-138438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:23:54.379 [DEBUG] [Thread-138438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:23:54.379 [DEBUG] [Thread-138438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:23:54.379 [DEBUG] [Thread-138438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:23:54.379 [DEBUG] [Thread-138438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:23:54.379 [DEBUG] [Thread-138438] [transport.py] [_log()] Compression: none
2026-02-12T00:23:54.379 [DEBUG] [Thread-138438] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:23:54.437 [DEBUG] [Thread-138438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:23:54.437 [DEBUG] [Thread-138438] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:23:54.438 [DEBUG] [Thread-138438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:23:54.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:23:54.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:23:54.493 [DEBUG] [Thread-138438] [transport.py] [_log()] userauth is OK
2026-02-12T00:23:54.493 [DEBUG] [Thread-138438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:23:54.494 [DEBUG] [Thread-138438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:23:54.494 [DEBUG] [Thread-138438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:23:54.494 [DEBUG] [Thread-138438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:23:54.512 [INFO] [Thread-138438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:23:54.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:23:54.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:23:55.305 [DEBUG] [Thread-138438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:23:55.305 [DEBUG] [Thread-138438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:23:55.339 [DEBUG] [Thread-138440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:23:55.353 [DEBUG] [Thread-138438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:23:55.353 [DEBUG] [Thread-138438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:23:55.361 [DEBUG] [Thread-138438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:23:55.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:23:55.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:23:55.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:23:55.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:23:55.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:23:55.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:23:55.396 [DEBUG] [Thread-138438] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:24:00.171 [DEBUG] [Thread-138441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:24:05.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:24:05.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:24:15.225 [DEBUG] [Thread-138442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:24:25.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:24:25.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:24:25.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:24:27.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 24, 13), 0.68, 95.83, 0.0, 20.66, 14.07, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:24:27.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:24:13
2026-02-12T00:24:27.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:24:27.805 [DEBUG] [Thread-138443] [transport.py] [_log()] starting thread (client mode): 0xa2dc1f30
2026-02-12T00:24:27.805 [DEBUG] [Thread-138443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:24:27.827 [DEBUG] [Thread-138443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:24:27.827 [INFO] [Thread-138443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:24:27.830 [DEBUG] [Thread-138443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:24:27.830 [DEBUG] [Thread-138443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:24:27.830 [DEBUG] [Thread-138443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] client lang: <none>
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] server lang: <none>
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] kex follows: False
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:24:27.831 [DEBUG] [Thread-138443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:24:27.832 [DEBUG] [Thread-138443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:24:27.832 [DEBUG] [Thread-138443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:24:27.832 [DEBUG] [Thread-138443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:24:27.832 [DEBUG] [Thread-138443] [transport.py] [_log()] Compression: none
2026-02-12T00:24:27.832 [DEBUG] [Thread-138443] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:24:27.852 [DEBUG] [Thread-138443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:24:27.853 [DEBUG] [Thread-138443] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:24:27.853 [DEBUG] [Thread-138443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:24:27.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:24:27.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:24:27.856 [DEBUG] [Thread-138443] [transport.py] [_log()] userauth is OK
2026-02-12T00:24:27.856 [DEBUG] [Thread-138443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:24:27.856 [DEBUG] [Thread-138443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:24:27.856 [DEBUG] [Thread-138443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:24:27.856 [DEBUG] [Thread-138443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:24:27.894 [INFO] [Thread-138443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:24:27.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:24:28.512 [DEBUG] [Thread-138443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:24:28.512 [DEBUG] [Thread-138443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:24:28.513 [DEBUG] [Thread-138443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:24:28.554 [DEBUG] [Thread-138443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:24:28.554 [DEBUG] [Thread-138443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:24:28.557 [DEBUG] [Thread-138443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:24:28.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:24:28.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:24:28.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:24:28.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:24:28.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:24:28.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:24:28.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:24:28.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:24:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:24:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.933468 -999.00  +14.10  13.95     92  +12.80 1 3 1 3 1     0    0 1.37 1.23 ----- 13.9 13.9 194.2 23.3 16.0 -2.4 15.7 -3.2 15.7 -2.4 16.0 -2.4
2026-02-12T00:24:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:24:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:24:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.933468
2026-02-12T00:24:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:24:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:24:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:24:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:24:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:24:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:24:13', tmtdew=0.68, humidity=95.83, cloud=0.0, wind=20.66, temperature=14.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:24:11.635', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:24:28.585 [DEBUG] [Thread-138443] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:24:28.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:24:28.685 [DEBUG] [Thread-138446] [transport.py] [_log()] starting thread (client mode): 0x9eb04f70
2026-02-12T00:24:28.685 [DEBUG] [Thread-138446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:24:28.699 [DEBUG] [Thread-138446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:24:28.699 [INFO] [Thread-138446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:24:28.707 [DEBUG] [Thread-138446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] client lang: <none>
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] server lang: <none>
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] kex follows: False
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] Compression: none
2026-02-12T00:24:28.708 [DEBUG] [Thread-138446] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:24:28.765 [DEBUG] [Thread-138446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:24:28.765 [DEBUG] [Thread-138446] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:24:28.765 [DEBUG] [Thread-138446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:24:28.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:24:28.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:24:28.821 [DEBUG] [Thread-138446] [transport.py] [_log()] userauth is OK
2026-02-12T00:24:28.822 [DEBUG] [Thread-138446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:24:28.822 [DEBUG] [Thread-138446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:24:28.822 [DEBUG] [Thread-138446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:24:28.822 [DEBUG] [Thread-138446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:24:28.845 [INFO] [Thread-138446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:24:28.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:24:28.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:24:29.684 [DEBUG] [Thread-138446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:24:29.685 [DEBUG] [Thread-138446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:24:29.733 [DEBUG] [Thread-138446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:24:29.733 [DEBUG] [Thread-138446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:24:29.743 [DEBUG] [Thread-138446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:24:29.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:24:29.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:24:29.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:24:29.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:24:29.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:24:29.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:24:29.780 [DEBUG] [Thread-138446] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:24:30.260 [DEBUG] [Thread-138448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:24:45.313 [DEBUG] [Thread-138449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:24:55.415 [DEBUG] [Thread-138450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:24:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:24:59.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:24:59.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
2026-02-12T00:25:00.353 [DEBUG] [Thread-138451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:25:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 24, 48), 0.62, 95.88, 0.0, 19.18, 14.02, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:25:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:24:48
2026-02-12T00:25:02.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:25:02.191 [DEBUG] [Thread-138452] [transport.py] [_log()] starting thread (client mode): 0xa2d94040
2026-02-12T00:25:02.191 [DEBUG] [Thread-138452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:25:02.210 [DEBUG] [Thread-138452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:25:02.210 [INFO] [Thread-138452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:25:02.213 [DEBUG] [Thread-138452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] client lang: <none>
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] server lang: <none>
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] kex follows: False
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] Compression: none
2026-02-12T00:25:02.214 [DEBUG] [Thread-138452] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:25:02.222 [DEBUG] [Thread-138452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:25:02.223 [DEBUG] [Thread-138452] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:25:02.223 [DEBUG] [Thread-138452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:25:02.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:25:02.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:25:02.225 [DEBUG] [Thread-138452] [transport.py] [_log()] userauth is OK
2026-02-12T00:25:02.225 [DEBUG] [Thread-138452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:25:02.225 [DEBUG] [Thread-138452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:25:02.225 [DEBUG] [Thread-138452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:25:02.225 [DEBUG] [Thread-138452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:25:02.243 [INFO] [Thread-138452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:25:02.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:25:02.817 [DEBUG] [Thread-138452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:25:02.818 [DEBUG] [Thread-138452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:25:02.818 [DEBUG] [Thread-138452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:25:02.859 [DEBUG] [Thread-138452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:25:02.859 [DEBUG] [Thread-138452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:25:02.862 [DEBUG] [Thread-138452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:25:02.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:25:02.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:25:02.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:25:02.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:25:02.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:25:02.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:25:02.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:25:02.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:25:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:25:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.933815 -999.00  +14.10  12.16     92  +12.90 1 3 1 3 1     0    0 1.36 0.31 ----- 12.2 12.2 189.8 21.2 16.0 -2.3 15.8 -2.2 15.6 -2.1 16.0 -2.2
2026-02-12T00:25:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:25:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:25:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.933815
2026-02-12T00:25:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:25:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:25:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:25:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:25:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:25:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:24:48', tmtdew=0.62, humidity=95.88, cloud=0.0, wind=19.18, temperature=14.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:24:41.616', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:25:02.876 [DEBUG] [Thread-138452] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:25:02.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:25:02.982 [DEBUG] [Thread-138455] [transport.py] [_log()] starting thread (client mode): 0x9eb040d0
2026-02-12T00:25:02.982 [DEBUG] [Thread-138455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:25:02.997 [DEBUG] [Thread-138455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:25:02.997 [INFO] [Thread-138455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:25:03.004 [DEBUG] [Thread-138455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:25:03.004 [DEBUG] [Thread-138455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:25:03.004 [DEBUG] [Thread-138455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:25:03.004 [DEBUG] [Thread-138455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:03.004 [DEBUG] [Thread-138455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:03.004 [DEBUG] [Thread-138455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:03.004 [DEBUG] [Thread-138455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] client lang: <none>
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] server lang: <none>
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] kex follows: False
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] Compression: none
2026-02-12T00:25:03.005 [DEBUG] [Thread-138455] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:25:03.066 [DEBUG] [Thread-138455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:25:03.066 [DEBUG] [Thread-138455] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:25:03.067 [DEBUG] [Thread-138455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:25:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:25:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:25:03.122 [DEBUG] [Thread-138455] [transport.py] [_log()] userauth is OK
2026-02-12T00:25:03.122 [DEBUG] [Thread-138455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:25:03.122 [DEBUG] [Thread-138455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:25:03.122 [DEBUG] [Thread-138455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:25:03.122 [DEBUG] [Thread-138455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:25:03.144 [INFO] [Thread-138455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:25:03.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:25:03.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:25:04.006 [DEBUG] [Thread-138455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:25:04.006 [DEBUG] [Thread-138455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:25:04.054 [DEBUG] [Thread-138455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:25:04.054 [DEBUG] [Thread-138455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:25:04.063 [DEBUG] [Thread-138455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:25:04.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:25:04.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')
2026-02-12T00:25:04.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:25:04.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:25:04.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:25:04.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:25:04.099 [DEBUG] [Thread-138455] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:25:05.783 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:25:05.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:25:15.390 [DEBUG] [Thread-138457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:25:30.441 [DEBUG] [Thread-138458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:25:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:25:34.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:25:34.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:25:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 25, 23), 0.62, 95.9, 0.0, 20.64, 14.06, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:25:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:25:23
2026-02-12T00:25:36.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:25:36.805 [DEBUG] [Thread-138459] [transport.py] [_log()] starting thread (client mode): 0xa2dc06d0
2026-02-12T00:25:36.805 [DEBUG] [Thread-138459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:25:36.829 [DEBUG] [Thread-138459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:25:36.829 [INFO] [Thread-138459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:25:36.832 [DEBUG] [Thread-138459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:25:36.832 [DEBUG] [Thread-138459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] client lang: <none>
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] server lang: <none>
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] kex follows: False
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] Compression: none
2026-02-12T00:25:36.833 [DEBUG] [Thread-138459] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:25:36.850 [DEBUG] [Thread-138459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:25:36.850 [DEBUG] [Thread-138459] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:25:36.850 [DEBUG] [Thread-138459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:25:36.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:25:36.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:25:36.851 [DEBUG] [Thread-138459] [transport.py] [_log()] userauth is OK
2026-02-12T00:25:36.852 [DEBUG] [Thread-138459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:25:36.852 [DEBUG] [Thread-138459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:25:36.852 [DEBUG] [Thread-138459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:25:36.852 [DEBUG] [Thread-138459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:25:36.870 [INFO] [Thread-138459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:25:36.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:25:37.470 [DEBUG] [Thread-138459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:25:37.471 [DEBUG] [Thread-138459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:25:37.471 [DEBUG] [Thread-138459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:25:37.512 [DEBUG] [Thread-138459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:25:37.512 [DEBUG] [Thread-138459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:25:37.516 [DEBUG] [Thread-138459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:25:37.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:25:37.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:25:37.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:25:37.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:25:37.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:25:37.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:25:37.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:25:37.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:25:37.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:25:37.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.934162 -999.00  +14.10  16.54     92  +12.80 1 3 1 3 1     0    0 1.31 -0.55 ----- 16.5 16.5 194.6 21.6 16.0 -2.5 15.8 -2.8 15.7 -2.3 16.0 -2.7
2026-02-12T00:25:37.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:25:37.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:25:37.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.934162
2026-02-12T00:25:37.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:25:37.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:25:37.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:25:37.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:25:37.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:25:37.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:25:23', tmtdew=0.62, humidity=95.9, cloud=0.0, wind=20.64, temperature=14.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:25:11.597', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:25:37.540 [DEBUG] [Thread-138459] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:25:37.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:25:37.639 [DEBUG] [Thread-138462] [transport.py] [_log()] starting thread (client mode): 0xa2dc1900
2026-02-12T00:25:37.639 [DEBUG] [Thread-138462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:25:37.657 [DEBUG] [Thread-138462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:25:37.657 [INFO] [Thread-138462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:25:37.666 [DEBUG] [Thread-138462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] client lang: <none>
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] server lang: <none>
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] kex follows: False
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:25:37.667 [DEBUG] [Thread-138462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:25:37.668 [DEBUG] [Thread-138462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:25:37.668 [DEBUG] [Thread-138462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:25:37.668 [DEBUG] [Thread-138462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:25:37.668 [DEBUG] [Thread-138462] [transport.py] [_log()] Compression: none
2026-02-12T00:25:37.668 [DEBUG] [Thread-138462] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:25:37.725 [DEBUG] [Thread-138462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:25:37.726 [DEBUG] [Thread-138462] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:25:37.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:25:37.727 [DEBUG] [Thread-138462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:25:37.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:25:37.787 [DEBUG] [Thread-138462] [transport.py] [_log()] userauth is OK
2026-02-12T00:25:37.787 [DEBUG] [Thread-138462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:25:37.788 [DEBUG] [Thread-138462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:25:37.788 [DEBUG] [Thread-138462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:25:37.788 [DEBUG] [Thread-138462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:25:37.808 [INFO] [Thread-138462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:25:37.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:25:37.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:25:38.591 [DEBUG] [Thread-138462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:25:38.591 [DEBUG] [Thread-138462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:25:38.643 [DEBUG] [Thread-138462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:25:38.643 [DEBUG] [Thread-138462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:25:38.655 [DEBUG] [Thread-138462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:25:38.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:25:38.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:25:38.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
2026-02-12T00:25:38.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:25:38.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:25:38.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:25:38.696 [DEBUG] [Thread-138462] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:25:45.476 [DEBUG] [Thread-138464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:25:55.495 [DEBUG] [Thread-138465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:26:00.526 [DEBUG] [Thread-138466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:26:05.986 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:26:05.987 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:26:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:26:08.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:26:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:26:10.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 25, 23), 0.62, 95.9, 0.0, 20.64, 14.06, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:26:10.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:25:23
2026-02-12T00:26:11.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:26:11.162 [DEBUG] [Thread-138467] [transport.py] [_log()] starting thread (client mode): 0x9eb079a0
2026-02-12T00:26:11.162 [DEBUG] [Thread-138467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:26:11.182 [DEBUG] [Thread-138467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:26:11.182 [INFO] [Thread-138467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:26:11.185 [DEBUG] [Thread-138467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:26:11.185 [DEBUG] [Thread-138467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] client lang: <none>
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] server lang: <none>
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] kex follows: False
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] Compression: none
2026-02-12T00:26:11.186 [DEBUG] [Thread-138467] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:26:11.204 [DEBUG] [Thread-138467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:26:11.204 [DEBUG] [Thread-138467] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:26:11.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:26:11.205 [DEBUG] [Thread-138467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:26:11.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:26:11.207 [DEBUG] [Thread-138467] [transport.py] [_log()] userauth is OK
2026-02-12T00:26:11.208 [DEBUG] [Thread-138467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:26:11.208 [DEBUG] [Thread-138467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:26:11.208 [DEBUG] [Thread-138467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:26:11.208 [DEBUG] [Thread-138467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:26:11.231 [INFO] [Thread-138467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:26:11.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:26:11.848 [DEBUG] [Thread-138467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:26:11.848 [DEBUG] [Thread-138467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:26:11.848 [DEBUG] [Thread-138467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:26:11.888 [DEBUG] [Thread-138467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:26:11.889 [DEBUG] [Thread-138467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:26:11.892 [DEBUG] [Thread-138467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:26:11.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:26:11.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:26:11.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:26:11.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:26:11.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:26:11.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:26:11.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:26:11.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:26:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:26:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.934510 -999.00  +14.10  14.38     92  +12.80 1 3 1 3 1     0    0 1.32 -1.05 ----- 14.4 14.4 184.8 22.6 16.0 -2.4 15.7 -3.0 15.7 -2.4 16.0 -2.4
2026-02-12T00:26:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:26:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:26:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.934510
2026-02-12T00:26:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:26:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:26:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:26:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:26:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:26:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:25:23', tmtdew=0.62, humidity=95.9, cloud=0.0, wind=20.64, temperature=14.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:25:41.664', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:26:11.920 [DEBUG] [Thread-138467] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:26:12.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:26:12.014 [DEBUG] [Thread-138470] [transport.py] [_log()] starting thread (client mode): 0x9eb06c50
2026-02-12T00:26:12.015 [DEBUG] [Thread-138470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:26:12.028 [DEBUG] [Thread-138470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:26:12.028 [INFO] [Thread-138470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] client lang: <none>
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] server lang: <none>
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] kex follows: False
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] Compression: none
2026-02-12T00:26:12.036 [DEBUG] [Thread-138470] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:26:12.094 [DEBUG] [Thread-138470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:26:12.095 [DEBUG] [Thread-138470] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:26:12.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:26:12.096 [DEBUG] [Thread-138470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:26:12.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:26:12.150 [DEBUG] [Thread-138470] [transport.py] [_log()] userauth is OK
2026-02-12T00:26:12.151 [DEBUG] [Thread-138470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:26:12.151 [DEBUG] [Thread-138470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:26:12.151 [DEBUG] [Thread-138470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:26:12.151 [DEBUG] [Thread-138470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:26:12.170 [INFO] [Thread-138470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:26:12.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:26:12.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:26:12.953 [DEBUG] [Thread-138470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:26:12.953 [DEBUG] [Thread-138470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:26:13.001 [DEBUG] [Thread-138470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:26:13.001 [DEBUG] [Thread-138470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:26:13.009 [DEBUG] [Thread-138470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:26:13.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:26:13.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:26:13.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:26:13.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:26:13.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:26:13.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:26:13.050 [DEBUG] [Thread-138470] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:26:15.565 [DEBUG] [Thread-138472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:26:30.617 [DEBUG] [Thread-138473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:26:43.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:26:43.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:26:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:26:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 26, 35), 1.13, 92.86, 0.0, 23.85, 14.42, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:26:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:26:35
2026-02-12T00:26:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:26:45.548 [DEBUG] [Thread-138474] [transport.py] [_log()] starting thread (client mode): 0xa2d94f70
2026-02-12T00:26:45.548 [DEBUG] [Thread-138474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:26:45.569 [DEBUG] [Thread-138474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:26:45.569 [INFO] [Thread-138474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] client lang: <none>
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] server lang: <none>
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] kex follows: False
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] Compression: none
2026-02-12T00:26:45.572 [DEBUG] [Thread-138474] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:26:45.590 [DEBUG] [Thread-138474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:26:45.591 [DEBUG] [Thread-138474] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:26:45.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:26:45.592 [DEBUG] [Thread-138474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:26:45.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:26:45.594 [DEBUG] [Thread-138474] [transport.py] [_log()] userauth is OK
2026-02-12T00:26:45.595 [DEBUG] [Thread-138474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:26:45.595 [DEBUG] [Thread-138474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:26:45.595 [DEBUG] [Thread-138474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:26:45.595 [DEBUG] [Thread-138474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:26:45.616 [INFO] [Thread-138474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:26:45.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:26:45.651 [DEBUG] [Thread-138476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:26:46.225 [DEBUG] [Thread-138474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:26:46.226 [DEBUG] [Thread-138474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:26:46.226 [DEBUG] [Thread-138474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:26:46.266 [DEBUG] [Thread-138474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:26:46.267 [DEBUG] [Thread-138474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:26:46.270 [DEBUG] [Thread-138474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:26:46.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:26:46.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:26:46.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:26:46.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:26:46.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:26:46.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:26:46.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:26:46.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:26:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:26:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.934857 -999.00  +14.10   9.49     92  +12.80 1 3 1 3 1     0    0 1.29 -1.64 ----- 9.5 9.5 181.0 18.0 16.0 -2.2 15.8 -2.3 15.7 -2.1 16.1 -2.1
2026-02-12T00:26:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:26:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:26:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.934857
2026-02-12T00:26:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:26:46.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:26:46.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:26:46.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:26:46.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:26:46.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:26:35', tmtdew=1.13, humidity=92.86, cloud=0.0, wind=23.85, temperature=14.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:26:11.645', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:26:46.296 [DEBUG] [Thread-138474] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:26:46.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:26:46.393 [DEBUG] [Thread-138478] [transport.py] [_log()] starting thread (client mode): 0xa2d94040
2026-02-12T00:26:46.393 [DEBUG] [Thread-138478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:26:46.407 [DEBUG] [Thread-138478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:26:46.407 [INFO] [Thread-138478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:26:46.414 [DEBUG] [Thread-138478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:26:46.414 [DEBUG] [Thread-138478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:26:46.414 [DEBUG] [Thread-138478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:26:46.414 [DEBUG] [Thread-138478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] client lang: <none>
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] server lang: <none>
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] kex follows: False
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] Compression: none
2026-02-12T00:26:46.415 [DEBUG] [Thread-138478] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:26:46.474 [DEBUG] [Thread-138478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:26:46.475 [DEBUG] [Thread-138478] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:26:46.476 [DEBUG] [Thread-138478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:26:46.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:26:46.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:26:46.531 [DEBUG] [Thread-138478] [transport.py] [_log()] userauth is OK
2026-02-12T00:26:46.531 [DEBUG] [Thread-138478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:26:46.531 [DEBUG] [Thread-138478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:26:46.531 [DEBUG] [Thread-138478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:26:46.531 [DEBUG] [Thread-138478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:26:46.550 [INFO] [Thread-138478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:26:46.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:26:46.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:26:47.404 [DEBUG] [Thread-138478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:26:47.404 [DEBUG] [Thread-138478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:26:47.452 [DEBUG] [Thread-138478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:26:47.452 [DEBUG] [Thread-138478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:26:47.462 [DEBUG] [Thread-138478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:26:47.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:26:47.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:26:47.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:26:47.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:26:47.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:26:47.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:26:47.498 [DEBUG] [Thread-138478] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:26:55.571 [DEBUG] [Thread-138480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:00.689 [DEBUG] [Thread-138481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:06.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:06.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:15.754 [DEBUG] [Thread-138482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:27:17.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:27:17.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:27:19.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 27, 10), 0.6, 96.0, 0.0, 20.19, 14.01, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:27:19.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:27:10
2026-02-12T00:27:19.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:27:20.056 [DEBUG] [Thread-138483] [transport.py] [_log()] starting thread (client mode): 0x9eb05ea0
2026-02-12T00:27:20.057 [DEBUG] [Thread-138483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:27:20.077 [DEBUG] [Thread-138483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:27:20.077 [INFO] [Thread-138483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:27:20.080 [DEBUG] [Thread-138483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:27:20.080 [DEBUG] [Thread-138483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:27:20.080 [DEBUG] [Thread-138483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] client lang: <none>
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] server lang: <none>
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] kex follows: False
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] Compression: none
2026-02-12T00:27:20.081 [DEBUG] [Thread-138483] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:27:20.098 [DEBUG] [Thread-138483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:27:20.098 [DEBUG] [Thread-138483] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:27:20.099 [DEBUG] [Thread-138483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:27:20.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:27:20.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:27:20.101 [DEBUG] [Thread-138483] [transport.py] [_log()] userauth is OK
2026-02-12T00:27:20.101 [DEBUG] [Thread-138483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:27:20.101 [DEBUG] [Thread-138483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:27:20.101 [DEBUG] [Thread-138483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:27:20.101 [DEBUG] [Thread-138483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:27:20.137 [INFO] [Thread-138483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:27:20.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:27:20.780 [DEBUG] [Thread-138483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:27:20.781 [DEBUG] [Thread-138483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:27:20.781 [DEBUG] [Thread-138483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:27:20.821 [DEBUG] [Thread-138483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:27:20.822 [DEBUG] [Thread-138483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:27:20.825 [DEBUG] [Thread-138483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:27:20.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:27:20.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:27:20.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:27:20.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:27:20.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:27:20.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:27:20.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:27:20.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:27:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:27:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.935204 -999.00  +14.10  12.87     92  +12.90 1 3 1 3 1     0    0 1.29 -2.30 ----- 12.9 12.9 202.8 18.2 16.0 -2.3 15.7 -2.6 15.7 -2.2 16.0 -2.2
2026-02-12T00:27:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:27:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:27:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.935204
2026-02-12T00:27:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:27:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:27:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:27:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:27:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:27:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:27:10', tmtdew=0.6, humidity=96.0, cloud=0.0, wind=20.19, temperature=14.01, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:26:41.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:27:20.853 [DEBUG] [Thread-138483] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:27:20.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:27:20.941 [DEBUG] [Thread-138486] [transport.py] [_log()] starting thread (client mode): 0xa2d971f0
2026-02-12T00:27:20.941 [DEBUG] [Thread-138486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:27:20.956 [DEBUG] [Thread-138486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:27:20.956 [INFO] [Thread-138486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] client lang: <none>
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] server lang: <none>
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] kex follows: False
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:27:20.963 [DEBUG] [Thread-138486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:27:20.964 [DEBUG] [Thread-138486] [transport.py] [_log()] Compression: none
2026-02-12T00:27:20.964 [DEBUG] [Thread-138486] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:27:21.023 [DEBUG] [Thread-138486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:27:21.023 [DEBUG] [Thread-138486] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:27:21.024 [DEBUG] [Thread-138486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:27:21.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:27:21.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:27:21.078 [DEBUG] [Thread-138486] [transport.py] [_log()] userauth is OK
2026-02-12T00:27:21.079 [DEBUG] [Thread-138486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:27:21.079 [DEBUG] [Thread-138486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:27:21.079 [DEBUG] [Thread-138486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:27:21.079 [DEBUG] [Thread-138486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:27:21.098 [INFO] [Thread-138486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:27:21.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:27:21.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:27:21.970 [DEBUG] [Thread-138486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:27:21.970 [DEBUG] [Thread-138486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:27:22.018 [DEBUG] [Thread-138486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:27:22.018 [DEBUG] [Thread-138486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:27:22.028 [DEBUG] [Thread-138486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:27:22.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:27:22.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')
2026-02-12T00:27:22.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
2026-02-12T00:27:22.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:27:22.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:27:22.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:27:22.063 [DEBUG] [Thread-138486] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:27:30.790 [DEBUG] [Thread-138488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:45.836 [DEBUG] [Thread-138489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:27:52.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:27:52.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
2026-02-12T00:27:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 27, 10), 0.6, 96.0, 0.0, 20.19, 14.01, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:27:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:27:10
2026-02-12T00:27:55.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:27:55.174 [DEBUG] [Thread-138490] [transport.py] [_log()] starting thread (client mode): 0x9eb05120
2026-02-12T00:27:55.174 [DEBUG] [Thread-138490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:27:55.196 [DEBUG] [Thread-138490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:27:55.196 [INFO] [Thread-138490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:27:55.199 [DEBUG] [Thread-138490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:27:55.199 [DEBUG] [Thread-138490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:27:55.199 [DEBUG] [Thread-138490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:27:55.199 [DEBUG] [Thread-138490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] client lang: <none>
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] server lang: <none>
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] kex follows: False
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] Compression: none
2026-02-12T00:27:55.200 [DEBUG] [Thread-138490] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:27:55.218 [DEBUG] [Thread-138490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:27:55.219 [DEBUG] [Thread-138490] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:27:55.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:27:55.220 [DEBUG] [Thread-138490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:27:55.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:27:55.222 [DEBUG] [Thread-138490] [transport.py] [_log()] userauth is OK
2026-02-12T00:27:55.222 [DEBUG] [Thread-138490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:27:55.222 [DEBUG] [Thread-138490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:27:55.222 [DEBUG] [Thread-138490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:27:55.222 [DEBUG] [Thread-138490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:27:55.250 [INFO] [Thread-138490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:27:55.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:27:55.647 [DEBUG] [Thread-138492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:27:55.903 [DEBUG] [Thread-138490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:27:55.904 [DEBUG] [Thread-138490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:27:55.904 [DEBUG] [Thread-138490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:27:55.945 [DEBUG] [Thread-138490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:27:55.945 [DEBUG] [Thread-138490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:27:55.948 [DEBUG] [Thread-138490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:27:55.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:27:55.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:27:55.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:27:55.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:27:55.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:27:55.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:27:55.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:27:55.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:27:55.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:27:55.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.935899 -999.00  +14.10  10.14     92  +12.80 1 3 1 3 1     0    0 1.23 -3.55 ----- 10.1 10.1 185.2 17.4 16.0 -2.3 15.8 -2.7 15.7 -2.4 16.0 -2.3
2026-02-12T00:27:55.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:27:55.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:27:55.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.935899
2026-02-12T00:27:55.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:27:55.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:27:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:27:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:27:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:27:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:27:10', tmtdew=0.6, humidity=96.0, cloud=0.0, wind=20.19, temperature=14.01, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:27:41.674', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:27:55.967 [DEBUG] [Thread-138490] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:27:56.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:27:56.064 [DEBUG] [Thread-138494] [transport.py] [_log()] starting thread (client mode): 0x9eb04910
2026-02-12T00:27:56.065 [DEBUG] [Thread-138494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:27:56.080 [DEBUG] [Thread-138494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:27:56.080 [INFO] [Thread-138494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:27:56.087 [DEBUG] [Thread-138494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:27:56.088 [DEBUG] [Thread-138494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:27:56.088 [DEBUG] [Thread-138494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:27:56.088 [DEBUG] [Thread-138494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] client lang: <none>
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] server lang: <none>
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] kex follows: False
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:27:56.089 [DEBUG] [Thread-138494] [transport.py] [_log()] Compression: none
2026-02-12T00:27:56.090 [DEBUG] [Thread-138494] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:27:56.145 [DEBUG] [Thread-138494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:27:56.145 [DEBUG] [Thread-138494] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:27:56.145 [DEBUG] [Thread-138494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:27:56.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:27:56.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:27:56.202 [DEBUG] [Thread-138494] [transport.py] [_log()] userauth is OK
2026-02-12T00:27:56.203 [DEBUG] [Thread-138494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:27:56.203 [DEBUG] [Thread-138494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:27:56.203 [DEBUG] [Thread-138494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:27:56.203 [DEBUG] [Thread-138494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:27:56.222 [INFO] [Thread-138494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:27:56.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:27:56.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:27:57.025 [DEBUG] [Thread-138494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:27:57.025 [DEBUG] [Thread-138494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:27:57.074 [DEBUG] [Thread-138494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:27:57.074 [DEBUG] [Thread-138494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:27:57.083 [DEBUG] [Thread-138494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:27:57.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:27:57.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:27:57.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:27:57.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:27:57.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:27:57.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:27:57.119 [DEBUG] [Thread-138494] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:28:00.872 [DEBUG] [Thread-138496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:28:06.398 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:28:06.399 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:28:15.932 [DEBUG] [Thread-138497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:28:27.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:28:27.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:28:27.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:28:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 27, 46), 0.6, 96.03, 0.0, 20.75, 13.99, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:28:29.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:27:46
2026-02-12T00:28:29.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:28:29.812 [DEBUG] [Thread-138498] [transport.py] [_log()] starting thread (client mode): 0xa2dc3f40
2026-02-12T00:28:29.812 [DEBUG] [Thread-138498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:28:29.831 [DEBUG] [Thread-138498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:28:29.831 [INFO] [Thread-138498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:28:29.833 [DEBUG] [Thread-138498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:28:29.833 [DEBUG] [Thread-138498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] client lang: <none>
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] server lang: <none>
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] kex follows: False
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] Compression: none
2026-02-12T00:28:29.834 [DEBUG] [Thread-138498] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:28:29.849 [DEBUG] [Thread-138498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:28:29.850 [DEBUG] [Thread-138498] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:28:29.850 [DEBUG] [Thread-138498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:28:29.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:28:29.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:28:29.852 [DEBUG] [Thread-138498] [transport.py] [_log()] userauth is OK
2026-02-12T00:28:29.852 [DEBUG] [Thread-138498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:28:29.853 [DEBUG] [Thread-138498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:28:29.853 [DEBUG] [Thread-138498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:28:29.853 [DEBUG] [Thread-138498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:28:29.878 [INFO] [Thread-138498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:28:29.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:28:30.539 [DEBUG] [Thread-138498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:28:30.540 [DEBUG] [Thread-138498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:28:30.540 [DEBUG] [Thread-138498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:28:30.580 [DEBUG] [Thread-138498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:28:30.580 [DEBUG] [Thread-138498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:28:30.584 [DEBUG] [Thread-138498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:28:30.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:28:30.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:28:30.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:28:30.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:28:30.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:28:30.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:28:30.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:28:30.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:28:30.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:28:30.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.936246 -999.00  +14.10  12.78     92  +12.80 1 3 1 3 1     0    0 1.17 -4.12 ----- 12.8 12.8 194.8 20.6 16.0 -2.4 15.8 -2.4 15.7 -2.1 16.0 -2.5
2026-02-12T00:28:30.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:28:30.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:28:30.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.936246
2026-02-12T00:28:30.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:28:30.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:28:30.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:28:30.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:28:30.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:28:30.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:27:46', tmtdew=0.6, humidity=96.03, cloud=0.0, wind=20.75, temperature=13.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:28:11.654', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:28:30.610 [DEBUG] [Thread-138498] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:28:30.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:28:30.969 [DEBUG] [Thread-138501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:28:46.021 [DEBUG] [Thread-138502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:28:55.705 [DEBUG] [Thread-138503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:29:01.057 [DEBUG] [Thread-138504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:29:06.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:29:06.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:29:16.095 [DEBUG] [Thread-138505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:29:31.135 [DEBUG] [Thread-138506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:29:46.166 [DEBUG] [Thread-138507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:29:55.783 [DEBUG] [Thread-138508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:30:01.200 [DEBUG] [Thread-138509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:30:06.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:30:06.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:30:16.238 [DEBUG] [Thread-138510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:30:31.272 [DEBUG] [Thread-138511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:30:44.536 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T00:30:46.309 [DEBUG] [Thread-138512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:30:55.844 [DEBUG] [Thread-138513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:31:01.349 [DEBUG] [Thread-138514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:31:07.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:31:07.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:31:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:31:14.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:31:14.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
2026-02-12T00:31:16.391 [DEBUG] [Thread-138515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:31:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 30, 45), 0.58, 96.15, 0.0, 22.02, 13.99, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:31:16.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:30:45
2026-02-12T00:31:17.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:31:17.185 [DEBUG] [Thread-138516] [transport.py] [_log()] starting thread (client mode): 0xa2dc11e0
2026-02-12T00:31:17.185 [DEBUG] [Thread-138516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:31:17.213 [DEBUG] [Thread-138516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:31:17.214 [INFO] [Thread-138516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:31:17.215 [DEBUG] [Thread-138516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] client lang: <none>
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] server lang: <none>
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] kex follows: False
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] Compression: none
2026-02-12T00:31:17.216 [DEBUG] [Thread-138516] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:31:17.234 [DEBUG] [Thread-138516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:31:17.235 [DEBUG] [Thread-138516] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:31:17.235 [DEBUG] [Thread-138516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:31:17.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:31:17.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:31:17.238 [DEBUG] [Thread-138516] [transport.py] [_log()] userauth is OK
2026-02-12T00:31:17.238 [DEBUG] [Thread-138516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:31:17.238 [DEBUG] [Thread-138516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:31:17.238 [DEBUG] [Thread-138516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:31:17.239 [DEBUG] [Thread-138516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:31:17.274 [INFO] [Thread-138516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:31:17.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:31:17.931 [DEBUG] [Thread-138516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:31:17.932 [DEBUG] [Thread-138516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:31:17.932 [DEBUG] [Thread-138516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:31:17.972 [DEBUG] [Thread-138516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:31:17.972 [DEBUG] [Thread-138516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:31:17.975 [DEBUG] [Thread-138516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:31:17.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:31:17.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:31:17.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:31:17.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:31:17.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:31:17.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:31:17.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:31:17.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:31:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:31:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.937981 -999.00  +14.00  15.73     92  +12.80 1 3 1 3 1     0    0 1.16 -6.31 ----- 15.7 15.7 193.8 23.2 -999.0 -999.0 15.6 -2.6 15.6 -2.2 15.9 -2.1
2026-02-12T00:31:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:31:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:31:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.937981
2026-02-12T00:31:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:31:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:31:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:31:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:31:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:31:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:30:45', tmtdew=0.58, humidity=96.15, cloud=0.0, wind=22.02, temperature=13.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:30:41.558', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:31:18.000 [DEBUG] [Thread-138516] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:31:18.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:31:18.096 [DEBUG] [Thread-138519] [transport.py] [_log()] starting thread (client mode): 0xa2dc1b40
2026-02-12T00:31:18.096 [DEBUG] [Thread-138519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:31:18.110 [DEBUG] [Thread-138519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:31:18.110 [INFO] [Thread-138519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:31:18.118 [DEBUG] [Thread-138519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:31:18.118 [DEBUG] [Thread-138519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:31:18.118 [DEBUG] [Thread-138519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] client lang: <none>
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] server lang: <none>
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] kex follows: False
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] Compression: none
2026-02-12T00:31:18.119 [DEBUG] [Thread-138519] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:31:18.176 [DEBUG] [Thread-138519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:31:18.177 [DEBUG] [Thread-138519] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:31:18.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:31:18.178 [DEBUG] [Thread-138519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:31:18.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:31:18.232 [DEBUG] [Thread-138519] [transport.py] [_log()] userauth is OK
2026-02-12T00:31:18.232 [DEBUG] [Thread-138519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:31:18.232 [DEBUG] [Thread-138519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:31:18.232 [DEBUG] [Thread-138519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:31:18.232 [DEBUG] [Thread-138519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:31:18.246 [INFO] [Thread-138519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:31:18.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:31:18.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:31:19.042 [DEBUG] [Thread-138519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:31:19.042 [DEBUG] [Thread-138519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:31:19.091 [DEBUG] [Thread-138519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:31:19.091 [DEBUG] [Thread-138519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:31:19.100 [DEBUG] [Thread-138519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:31:19.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:31:19.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:31:19.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:31:19.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:31:19.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:31:19.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:31:19.137 [DEBUG] [Thread-138519] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:31:31.430 [DEBUG] [Thread-138521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:31:46.482 [DEBUG] [Thread-138522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:31:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:31:49.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:31:49.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:31:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 31, 20), 0.58, 96.16, 0.0, 21.07, 13.97, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:31:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:31:20
2026-02-12T00:31:51.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:31:51.551 [DEBUG] [Thread-138523] [transport.py] [_log()] starting thread (client mode): 0xa2d97820
2026-02-12T00:31:51.551 [DEBUG] [Thread-138523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:31:51.571 [DEBUG] [Thread-138523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:31:51.571 [INFO] [Thread-138523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:31:51.574 [DEBUG] [Thread-138523] [transport.py] [_log()] client lang: <none>
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] server lang: <none>
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] kex follows: False
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] Compression: none
2026-02-12T00:31:51.575 [DEBUG] [Thread-138523] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:31:51.594 [DEBUG] [Thread-138523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:31:51.595 [DEBUG] [Thread-138523] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:31:51.596 [DEBUG] [Thread-138523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:31:51.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:31:51.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:31:51.636 [DEBUG] [Thread-138523] [transport.py] [_log()] userauth is OK
2026-02-12T00:31:51.637 [DEBUG] [Thread-138523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:31:51.637 [DEBUG] [Thread-138523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:31:51.637 [DEBUG] [Thread-138523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:31:51.637 [DEBUG] [Thread-138523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:31:51.672 [INFO] [Thread-138523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:31:51.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:31:52.325 [DEBUG] [Thread-138523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:31:52.325 [DEBUG] [Thread-138523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:31:52.325 [DEBUG] [Thread-138523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:31:52.366 [DEBUG] [Thread-138523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:31:52.366 [DEBUG] [Thread-138523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:31:52.369 [DEBUG] [Thread-138523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:31:52.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:31:52.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:31:52.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:31:52.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:31:52.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:31:52.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:31:52.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:31:52.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:31:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:31:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.938676 -999.00  +14.00  16.80     92  +12.80 1 3 1 3 1     0    0 1.10 -7.36 ----- 16.8 16.8 195.8 21.5 15.9 -2.3 15.7 -2.4 15.6 -2.1 16.0 -2.4
2026-02-12T00:31:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:31:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:31:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.938676
2026-02-12T00:31:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:31:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:31:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:31:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:31:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:31:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:31:20', tmtdew=0.58, humidity=96.16, cloud=0.0, wind=21.07, temperature=13.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:31:41.606', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:31:52.393 [DEBUG] [Thread-138523] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:31:52.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:31:52.490 [DEBUG] [Thread-138526] [transport.py] [_log()] starting thread (client mode): 0x9eb04820
2026-02-12T00:31:52.490 [DEBUG] [Thread-138526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:31:52.505 [DEBUG] [Thread-138526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:31:52.505 [INFO] [Thread-138526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:31:52.512 [DEBUG] [Thread-138526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:31:52.512 [DEBUG] [Thread-138526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:31:52.512 [DEBUG] [Thread-138526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] client lang: <none>
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] server lang: <none>
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] kex follows: False
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] Compression: none
2026-02-12T00:31:52.513 [DEBUG] [Thread-138526] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:31:52.571 [DEBUG] [Thread-138526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:31:52.571 [DEBUG] [Thread-138526] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:31:52.572 [DEBUG] [Thread-138526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:31:52.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:31:52.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:31:52.628 [DEBUG] [Thread-138526] [transport.py] [_log()] userauth is OK
2026-02-12T00:31:52.628 [DEBUG] [Thread-138526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:31:52.628 [DEBUG] [Thread-138526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:31:52.628 [DEBUG] [Thread-138526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:31:52.628 [DEBUG] [Thread-138526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:31:52.646 [INFO] [Thread-138526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:31:52.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:31:52.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:31:53.472 [DEBUG] [Thread-138526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:31:53.472 [DEBUG] [Thread-138526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:31:53.520 [DEBUG] [Thread-138526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:31:53.520 [DEBUG] [Thread-138526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:31:53.528 [DEBUG] [Thread-138526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:31:53.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:31:53.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:31:53.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:31:53.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:31:53.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:31:53.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:31:53.559 [DEBUG] [Thread-138526] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:31:55.901 [DEBUG] [Thread-138528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:01.515 [DEBUG] [Thread-138529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:07.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:07.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:16.576 [DEBUG] [Thread-138530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:32:23.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:32:23.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:32:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 31, 56), 0.63, 96.16, 0.0, 20.91, 13.96, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:32:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:31:56
2026-02-12T00:32:25.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:32:25.955 [DEBUG] [Thread-138531] [transport.py] [_log()] starting thread (client mode): 0x9eb06bc0
2026-02-12T00:32:25.955 [DEBUG] [Thread-138531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:32:25.975 [DEBUG] [Thread-138531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:32:25.975 [INFO] [Thread-138531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:32:25.978 [DEBUG] [Thread-138531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] client lang: <none>
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] server lang: <none>
2026-02-12T00:32:25.979 [DEBUG] [Thread-138531] [transport.py] [_log()] kex follows: False
2026-02-12T00:32:25.980 [DEBUG] [Thread-138531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:32:25.980 [DEBUG] [Thread-138531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:32:25.980 [DEBUG] [Thread-138531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:32:25.980 [DEBUG] [Thread-138531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:32:25.980 [DEBUG] [Thread-138531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:32:25.980 [DEBUG] [Thread-138531] [transport.py] [_log()] Compression: none
2026-02-12T00:32:25.980 [DEBUG] [Thread-138531] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:32:25.991 [DEBUG] [Thread-138531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:32:25.991 [DEBUG] [Thread-138531] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:32:25.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:32:25.992 [DEBUG] [Thread-138531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:32:25.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:32:26.033 [DEBUG] [Thread-138531] [transport.py] [_log()] userauth is OK
2026-02-12T00:32:26.034 [DEBUG] [Thread-138531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:32:26.034 [DEBUG] [Thread-138531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:32:26.034 [DEBUG] [Thread-138531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:32:26.034 [DEBUG] [Thread-138531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:32:26.059 [INFO] [Thread-138531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:32:26.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:32:26.692 [DEBUG] [Thread-138531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:32:26.692 [DEBUG] [Thread-138531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:32:26.692 [DEBUG] [Thread-138531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:32:26.733 [DEBUG] [Thread-138531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:32:26.733 [DEBUG] [Thread-138531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:32:26.737 [DEBUG] [Thread-138531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:32:26.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:32:26.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:32:26.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:32:26.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:32:26.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:32:26.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:32:26.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:32:26.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:32:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:32:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.939023 -999.00  +14.10  19.01     92  +12.80 1 3 1 3 1     0    0 1.09 -7.89 ----- 19.0 19.0 190.6 23.3 16.0 -2.5 15.7 -2.5 15.7 -2.2 16.0 -2.2
2026-02-12T00:32:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:32:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:32:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.939023
2026-02-12T00:32:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:32:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:32:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:32:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:32:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:32:26.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:31:56', tmtdew=0.63, humidity=96.16, cloud=0.0, wind=20.91, temperature=13.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:32:11.587', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:32:26.767 [DEBUG] [Thread-138531] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:32:26.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:32:26.862 [DEBUG] [Thread-138534] [transport.py] [_log()] starting thread (client mode): 0xa2dc2d70
2026-02-12T00:32:26.862 [DEBUG] [Thread-138534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:32:26.876 [DEBUG] [Thread-138534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:32:26.876 [INFO] [Thread-138534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:32:26.886 [DEBUG] [Thread-138534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] client lang: <none>
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] server lang: <none>
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] kex follows: False
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] Compression: none
2026-02-12T00:32:26.887 [DEBUG] [Thread-138534] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:32:26.947 [DEBUG] [Thread-138534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:32:26.947 [DEBUG] [Thread-138534] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:32:26.948 [DEBUG] [Thread-138534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:32:26.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:32:26.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:32:27.004 [DEBUG] [Thread-138534] [transport.py] [_log()] userauth is OK
2026-02-12T00:32:27.004 [DEBUG] [Thread-138534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:32:27.004 [DEBUG] [Thread-138534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:32:27.004 [DEBUG] [Thread-138534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:32:27.004 [DEBUG] [Thread-138534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:32:27.018 [INFO] [Thread-138534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:32:27.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:32:27.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:32:27.856 [DEBUG] [Thread-138534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:32:27.857 [DEBUG] [Thread-138534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:32:27.905 [DEBUG] [Thread-138534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:32:27.905 [DEBUG] [Thread-138534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:32:27.914 [DEBUG] [Thread-138534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:32:27.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:32:27.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:32:27.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:32:27.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:32:27.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:32:27.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:32:27.951 [DEBUG] [Thread-138534] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:32:31.613 [DEBUG] [Thread-138536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:46.673 [DEBUG] [Thread-138537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:55.977 [DEBUG] [Thread-138538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:32:57.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:32:57.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:32:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:32:59.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 32, 31), 0.62, 96.18, 0.0, 19.5, 13.96, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:32:59.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:32:31
2026-02-12T00:33:00.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:33:00.324 [DEBUG] [Thread-138539] [transport.py] [_log()] starting thread (client mode): 0xa2dc3850
2026-02-12T00:33:00.325 [DEBUG] [Thread-138539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:33:00.345 [DEBUG] [Thread-138539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:33:00.345 [INFO] [Thread-138539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:33:00.348 [DEBUG] [Thread-138539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] client lang: <none>
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] server lang: <none>
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] kex follows: False
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] Compression: none
2026-02-12T00:33:00.349 [DEBUG] [Thread-138539] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:33:00.365 [DEBUG] [Thread-138539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:33:00.366 [DEBUG] [Thread-138539] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:33:00.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:33:00.367 [DEBUG] [Thread-138539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:33:00.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:33:00.369 [DEBUG] [Thread-138539] [transport.py] [_log()] userauth is OK
2026-02-12T00:33:00.369 [DEBUG] [Thread-138539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:33:00.369 [DEBUG] [Thread-138539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:33:00.370 [DEBUG] [Thread-138539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:33:00.370 [DEBUG] [Thread-138539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:33:00.394 [INFO] [Thread-138539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:33:00.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:33:01.062 [DEBUG] [Thread-138539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:33:01.062 [DEBUG] [Thread-138539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:33:01.063 [DEBUG] [Thread-138539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:33:01.103 [DEBUG] [Thread-138539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:33:01.104 [DEBUG] [Thread-138539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:33:01.107 [DEBUG] [Thread-138539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:33:01.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:33:01.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:33:01.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:33:01.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:33:01.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:33:01.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:33:01.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:33:01.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:33:01.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:33:01.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.939371 -999.00  +14.00  13.67     92  +12.70 1 3 1 3 1     0    0 1.09 -7.96 ----- 13.7 13.7 187.0 22.8 15.9 -2.4 15.7 -2.5 15.7 -2.3 16.0 -2.4
2026-02-12T00:33:01.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:33:01.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:33:01.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.939371
2026-02-12T00:33:01.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:33:01.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:33:01.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:33:01.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:33:01.134 [DEBUG] [Thread-138539] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:33:01.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:33:01.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:32:31', tmtdew=0.62, humidity=96.18, cloud=0.0, wind=19.5, temperature=13.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:32:41.654', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:33:01.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:33:01.230 [DEBUG] [Thread-138542] [transport.py] [_log()] starting thread (client mode): 0x9eb072b0
2026-02-12T00:33:01.230 [DEBUG] [Thread-138542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:33:01.244 [DEBUG] [Thread-138542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:33:01.245 [INFO] [Thread-138542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] client lang: <none>
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] server lang: <none>
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] kex follows: False
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] Compression: none
2026-02-12T00:33:01.252 [DEBUG] [Thread-138542] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:33:01.308 [DEBUG] [Thread-138542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:33:01.308 [DEBUG] [Thread-138542] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:33:01.309 [DEBUG] [Thread-138542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:33:01.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:33:01.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:33:01.365 [DEBUG] [Thread-138542] [transport.py] [_log()] userauth is OK
2026-02-12T00:33:01.365 [DEBUG] [Thread-138542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:33:01.365 [DEBUG] [Thread-138542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:33:01.365 [DEBUG] [Thread-138542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:33:01.366 [DEBUG] [Thread-138542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:33:01.385 [INFO] [Thread-138542] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:33:01.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:33:01.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:33:01.706 [DEBUG] [Thread-138544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:33:02.199 [DEBUG] [Thread-138542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:33:02.200 [DEBUG] [Thread-138542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:33:02.247 [DEBUG] [Thread-138542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:33:02.247 [DEBUG] [Thread-138542] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:33:02.256 [DEBUG] [Thread-138542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:33:02.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:33:02.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:33:02.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:33:02.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:33:02.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:33:02.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:33:02.292 [DEBUG] [Thread-138542] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:33:07.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:33:07.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:33:16.761 [DEBUG] [Thread-138545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:33:31.798 [DEBUG] [Thread-138546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:33:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:33:32.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:33:32.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:33:34.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 33, 7), 0.62, 96.16, 0.0, 23.04, 13.94, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:33:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:33:07
2026-02-12T00:33:34.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:33:35.140 [DEBUG] [Thread-138547] [transport.py] [_log()] starting thread (client mode): 0xa2d9e1d0
2026-02-12T00:33:35.140 [DEBUG] [Thread-138547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:33:35.161 [DEBUG] [Thread-138547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:33:35.161 [INFO] [Thread-138547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:33:35.163 [DEBUG] [Thread-138547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:33:35.163 [DEBUG] [Thread-138547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:33:35.163 [DEBUG] [Thread-138547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:33:35.163 [DEBUG] [Thread-138547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:35.163 [DEBUG] [Thread-138547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:35.163 [DEBUG] [Thread-138547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:35.163 [DEBUG] [Thread-138547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] client lang: <none>
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] server lang: <none>
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] kex follows: False
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] Compression: none
2026-02-12T00:33:35.164 [DEBUG] [Thread-138547] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:33:35.175 [DEBUG] [Thread-138547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:33:35.176 [DEBUG] [Thread-138547] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:33:35.176 [DEBUG] [Thread-138547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:33:35.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:33:35.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:33:35.178 [DEBUG] [Thread-138547] [transport.py] [_log()] userauth is OK
2026-02-12T00:33:35.178 [DEBUG] [Thread-138547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:33:35.178 [DEBUG] [Thread-138547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:33:35.178 [DEBUG] [Thread-138547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:33:35.178 [DEBUG] [Thread-138547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:33:35.197 [INFO] [Thread-138547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:33:35.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:33:35.829 [DEBUG] [Thread-138547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:33:35.830 [DEBUG] [Thread-138547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:33:35.830 [DEBUG] [Thread-138547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:33:35.870 [DEBUG] [Thread-138547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:33:35.871 [DEBUG] [Thread-138547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:33:35.874 [DEBUG] [Thread-138547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:33:35.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:33:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:33:35.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:33:35.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:33:35.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:33:35.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:33:35.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:33:35.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:33:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:33:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.939718 -999.00  +14.00  21.88     92  +12.80 1 3 1 3 1     0    0 1.08 -8.26 ----- 21.9 21.9 211.2 27.2 15.9 -2.5 15.7 -2.2 15.7 -2.2 16.0 -2.2
2026-02-12T00:33:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:33:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:33:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.939718
2026-02-12T00:33:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:33:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:33:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:33:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:33:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:33:35.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:33:07', tmtdew=0.62, humidity=96.16, cloud=0.0, wind=23.04, temperature=13.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:33:11.635', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:33:35.902 [DEBUG] [Thread-138547] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:33:35.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:33:36.001 [DEBUG] [Thread-138550] [transport.py] [_log()] starting thread (client mode): 0xa2dc28f0
2026-02-12T00:33:36.001 [DEBUG] [Thread-138550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:33:36.016 [DEBUG] [Thread-138550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:33:36.016 [INFO] [Thread-138550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:33:36.024 [DEBUG] [Thread-138550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] client lang: <none>
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] server lang: <none>
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] kex follows: False
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:33:36.025 [DEBUG] [Thread-138550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:33:36.026 [DEBUG] [Thread-138550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:33:36.026 [DEBUG] [Thread-138550] [transport.py] [_log()] Compression: none
2026-02-12T00:33:36.026 [DEBUG] [Thread-138550] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:33:36.087 [DEBUG] [Thread-138550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:33:36.087 [DEBUG] [Thread-138550] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:33:36.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:33:36.088 [DEBUG] [Thread-138550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:33:36.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:33:36.145 [DEBUG] [Thread-138550] [transport.py] [_log()] userauth is OK
2026-02-12T00:33:36.145 [DEBUG] [Thread-138550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:33:36.145 [DEBUG] [Thread-138550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:33:36.146 [DEBUG] [Thread-138550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:33:36.146 [DEBUG] [Thread-138550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:33:36.169 [INFO] [Thread-138550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:33:36.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:33:36.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:33:36.972 [DEBUG] [Thread-138550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:33:36.972 [DEBUG] [Thread-138550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:33:37.020 [DEBUG] [Thread-138550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:33:37.020 [DEBUG] [Thread-138550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:33:37.028 [DEBUG] [Thread-138550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:33:37.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:33:37.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:33:37.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:33:37.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:33:37.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:33:37.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:33:37.060 [DEBUG] [Thread-138550] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:33:46.835 [DEBUG] [Thread-138552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:33:56.060 [DEBUG] [Thread-138553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:34:01.881 [DEBUG] [Thread-138554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:34:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:34:07.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:34:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:34:07.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:34:07.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:34:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 33, 42), 1.04, 93.39, 0.0, 27.63, 14.25, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:34:09.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:33:42
2026-02-12T00:34:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:34:09.609 [DEBUG] [Thread-138555] [transport.py] [_log()] starting thread (client mode): 0xa2d9c7f0
2026-02-12T00:34:09.609 [DEBUG] [Thread-138555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:34:09.630 [DEBUG] [Thread-138555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:34:09.630 [INFO] [Thread-138555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:34:09.631 [DEBUG] [Thread-138555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] client lang: <none>
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] server lang: <none>
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] kex follows: False
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] Compression: none
2026-02-12T00:34:09.632 [DEBUG] [Thread-138555] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:34:09.641 [DEBUG] [Thread-138555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:34:09.642 [DEBUG] [Thread-138555] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:34:09.642 [DEBUG] [Thread-138555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:34:09.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:34:09.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:34:09.644 [DEBUG] [Thread-138555] [transport.py] [_log()] userauth is OK
2026-02-12T00:34:09.644 [DEBUG] [Thread-138555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:34:09.644 [DEBUG] [Thread-138555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:34:09.644 [DEBUG] [Thread-138555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:34:09.644 [DEBUG] [Thread-138555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:34:09.669 [INFO] [Thread-138555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:34:09.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:34:10.312 [DEBUG] [Thread-138555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:34:10.312 [DEBUG] [Thread-138555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:34:10.313 [DEBUG] [Thread-138555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:34:10.353 [DEBUG] [Thread-138555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:34:10.354 [DEBUG] [Thread-138555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:34:10.357 [DEBUG] [Thread-138555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:34:10.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:34:10.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:34:10.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:34:10.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:34:10.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:34:10.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:34:10.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:34:10.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:34:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:34:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.940065 -999.00  +14.00  16.43     92  +12.70 1 3 1 3 1     0    0 1.05 -8.74 ----- 16.4 16.4 199.2 27.6 15.9 -2.4 15.7 -3.4 15.6 -2.4 16.0 -2.7
2026-02-12T00:34:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:34:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:34:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.940065
2026-02-12T00:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:34:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:33:42', tmtdew=1.04, humidity=93.39, cloud=0.0, wind=27.63, temperature=14.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:33:41.616', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:34:10.383 [DEBUG] [Thread-138555] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:34:10.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:34:10.477 [DEBUG] [Thread-138558] [transport.py] [_log()] starting thread (client mode): 0x9eb05090
2026-02-12T00:34:10.477 [DEBUG] [Thread-138558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:34:10.492 [DEBUG] [Thread-138558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:34:10.492 [INFO] [Thread-138558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:34:10.499 [DEBUG] [Thread-138558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:34:10.500 [DEBUG] [Thread-138558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:34:10.500 [DEBUG] [Thread-138558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:34:10.500 [DEBUG] [Thread-138558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:10.500 [DEBUG] [Thread-138558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] client lang: <none>
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] server lang: <none>
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] kex follows: False
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] Compression: none
2026-02-12T00:34:10.501 [DEBUG] [Thread-138558] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:34:10.556 [DEBUG] [Thread-138558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:34:10.556 [DEBUG] [Thread-138558] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:34:10.557 [DEBUG] [Thread-138558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:34:10.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:34:10.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:34:10.619 [DEBUG] [Thread-138558] [transport.py] [_log()] userauth is OK
2026-02-12T00:34:10.620 [DEBUG] [Thread-138558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:34:10.620 [DEBUG] [Thread-138558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:34:10.620 [DEBUG] [Thread-138558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:34:10.620 [DEBUG] [Thread-138558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:34:10.642 [INFO] [Thread-138558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:34:10.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:34:10.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:34:11.479 [DEBUG] [Thread-138558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:34:11.479 [DEBUG] [Thread-138558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:34:11.530 [DEBUG] [Thread-138558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:34:11.530 [DEBUG] [Thread-138558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:34:11.540 [DEBUG] [Thread-138558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:34:11.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:34: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')
2026-02-12T00:34:11.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:34:11.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:34:11.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:34:11.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:34:11.576 [DEBUG] [Thread-138558] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:34:16.915 [DEBUG] [Thread-138560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:34:31.966 [DEBUG] [Thread-138561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:34:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:34:41.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:34:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:34:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 34, 17), 0.57, 96.2, 0.0, 24.28, 13.91, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:34:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:34:17
2026-02-12T00:34:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:34:44.013 [DEBUG] [Thread-138562] [transport.py] [_log()] starting thread (client mode): 0xa2d971f0
2026-02-12T00:34:44.013 [DEBUG] [Thread-138562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:34:44.033 [DEBUG] [Thread-138562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:34:44.033 [INFO] [Thread-138562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] client lang: <none>
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] server lang: <none>
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] kex follows: False
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] Compression: none
2026-02-12T00:34:44.036 [DEBUG] [Thread-138562] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:34:44.053 [DEBUG] [Thread-138562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:34:44.054 [DEBUG] [Thread-138562] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:34:44.054 [DEBUG] [Thread-138562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:34:44.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:34:44.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:34:44.055 [DEBUG] [Thread-138562] [transport.py] [_log()] userauth is OK
2026-02-12T00:34:44.055 [DEBUG] [Thread-138562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:34:44.055 [DEBUG] [Thread-138562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:34:44.055 [DEBUG] [Thread-138562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:34:44.055 [DEBUG] [Thread-138562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:34:44.064 [INFO] [Thread-138562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:34:44.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:34:44.683 [DEBUG] [Thread-138562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:34:44.683 [DEBUG] [Thread-138562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:34:44.684 [DEBUG] [Thread-138562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:34:44.724 [DEBUG] [Thread-138562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:34:44.725 [DEBUG] [Thread-138562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:34:44.728 [DEBUG] [Thread-138562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:34:44.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:34:44.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:34:44.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:34:44.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:34:44.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:34:44.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:34:44.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:34:44.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:34:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:34:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.940412 -999.00  +14.00  20.35     92  +12.70 1 3 1 3 1     0    0 1.03 -9.29 ----- 20.4 20.4 200.8 24.6 15.9 -2.5 15.7 -2.4 15.6 -2.4 15.9 -2.7
2026-02-12T00:34:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:34:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:34:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.940412
2026-02-12T00:34:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:34:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:34:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:34:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:34:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:34:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:34:17', tmtdew=0.57, humidity=96.2, cloud=0.0, wind=24.28, temperature=13.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:34:11.597', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:34:44.756 [DEBUG] [Thread-138562] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:34:44.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:34:44.855 [DEBUG] [Thread-138565] [transport.py] [_log()] starting thread (client mode): 0xa57e2ec0
2026-02-12T00:34:44.855 [DEBUG] [Thread-138565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:34:44.872 [DEBUG] [Thread-138565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:34:44.872 [INFO] [Thread-138565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:34:44.880 [DEBUG] [Thread-138565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:34:44.880 [DEBUG] [Thread-138565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:34:44.880 [DEBUG] [Thread-138565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:34:44.880 [DEBUG] [Thread-138565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] client lang: <none>
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] server lang: <none>
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] kex follows: False
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] Compression: none
2026-02-12T00:34:44.881 [DEBUG] [Thread-138565] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:34:44.937 [DEBUG] [Thread-138565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:34:44.938 [DEBUG] [Thread-138565] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:34:44.938 [DEBUG] [Thread-138565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:34:44.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:34:44.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:34:44.994 [DEBUG] [Thread-138565] [transport.py] [_log()] userauth is OK
2026-02-12T00:34:44.994 [DEBUG] [Thread-138565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:34:44.994 [DEBUG] [Thread-138565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:34:44.994 [DEBUG] [Thread-138565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:34:44.994 [DEBUG] [Thread-138565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:34:45.013 [INFO] [Thread-138565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:34:45.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:34:45.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:34:45.848 [DEBUG] [Thread-138565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:34:45.848 [DEBUG] [Thread-138565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:34:45.896 [DEBUG] [Thread-138565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:34:45.896 [DEBUG] [Thread-138565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:34:45.907 [DEBUG] [Thread-138565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:34:45.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:34:45.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:34:45.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:34:45.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:34:45.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:34:45.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:34:45.943 [DEBUG] [Thread-138565] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:34:47.002 [DEBUG] [Thread-138567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:34:56.135 [DEBUG] [Thread-138568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:35:02.054 [DEBUG] [Thread-138569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:35:07.835 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:35:07.836 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:35:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:35:15.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:35:15.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:35:17.091 [DEBUG] [Thread-138570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:35:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 34, 54), 0.56, 96.25, 0.0, 22.48, 13.88, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:35:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:34:54
2026-02-12T00:35:18.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:35:18.583 [DEBUG] [Thread-138571] [transport.py] [_log()] starting thread (client mode): 0x9eb04910
2026-02-12T00:35:18.583 [DEBUG] [Thread-138571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:35:18.603 [DEBUG] [Thread-138571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:35:18.603 [INFO] [Thread-138571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:35:18.606 [DEBUG] [Thread-138571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:35:18.606 [DEBUG] [Thread-138571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] client lang: <none>
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] server lang: <none>
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] kex follows: False
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] Compression: none
2026-02-12T00:35:18.607 [DEBUG] [Thread-138571] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:35:18.615 [DEBUG] [Thread-138571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:35:18.616 [DEBUG] [Thread-138571] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:35:18.616 [DEBUG] [Thread-138571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:35:18.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:35:18.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:35:18.618 [DEBUG] [Thread-138571] [transport.py] [_log()] userauth is OK
2026-02-12T00:35:18.618 [DEBUG] [Thread-138571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:35:18.618 [DEBUG] [Thread-138571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:35:18.618 [DEBUG] [Thread-138571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:35:18.618 [DEBUG] [Thread-138571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:35:18.642 [INFO] [Thread-138571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:35:18.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:35:19.248 [DEBUG] [Thread-138571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:35:19.248 [DEBUG] [Thread-138571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:35:19.249 [DEBUG] [Thread-138571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:35:19.289 [DEBUG] [Thread-138571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:35:19.290 [DEBUG] [Thread-138571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:35:19.293 [DEBUG] [Thread-138571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:35:19.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:35:19.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:35:19.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:35:19.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:35:19.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:35:19.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:35:19.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:35:19.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:35:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:35:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.940759 -999.00  +14.00  21.53     92  +12.70 1 3 1 3 1     0    0 1.04 -9.15 ----- 21.5 21.5 205.6 26.7 15.9 -2.4 15.7 -2.7 15.7 -2.3 15.9 -2.5
2026-02-12T00:35:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:35:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:35:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.940759
2026-02-12T00:35:19.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:35:19.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:35:19.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:35:19.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:35:19.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:35:19.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:34:54', tmtdew=0.56, humidity=96.25, cloud=0.0, wind=22.48, temperature=13.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:34:41.578', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:35:19.319 [DEBUG] [Thread-138571] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:35:19.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:35:19.417 [DEBUG] [Thread-138574] [transport.py] [_log()] starting thread (client mode): 0xa2d9e470
2026-02-12T00:35:19.417 [DEBUG] [Thread-138574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:35:19.431 [DEBUG] [Thread-138574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:35:19.431 [INFO] [Thread-138574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:35:19.439 [DEBUG] [Thread-138574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] client lang: <none>
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] server lang: <none>
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] kex follows: False
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] Compression: none
2026-02-12T00:35:19.440 [DEBUG] [Thread-138574] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:35:19.496 [DEBUG] [Thread-138574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:35:19.497 [DEBUG] [Thread-138574] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:35:19.497 [DEBUG] [Thread-138574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:35:19.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:35:19.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:35:19.552 [DEBUG] [Thread-138574] [transport.py] [_log()] userauth is OK
2026-02-12T00:35:19.552 [DEBUG] [Thread-138574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:35:19.553 [DEBUG] [Thread-138574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:35:19.553 [DEBUG] [Thread-138574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:35:19.553 [DEBUG] [Thread-138574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:35:19.573 [INFO] [Thread-138574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:35:19.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:35:19.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:35:20.422 [DEBUG] [Thread-138574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:35:20.422 [DEBUG] [Thread-138574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:35:20.470 [DEBUG] [Thread-138574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:35:20.470 [DEBUG] [Thread-138574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:35:20.479 [DEBUG] [Thread-138574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:35:20.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:35:20.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:35:20.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:35:20.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:35:20.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:35:20.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:35:20.513 [DEBUG] [Thread-138574] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:35:32.130 [DEBUG] [Thread-138576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:35:47.188 [DEBUG] [Thread-138577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:35:50.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:35:50.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:35:50.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:35:52.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 35, 29), 0.57, 96.21, 0.0, 20.86, 13.88, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:35:52.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:35:29
2026-02-12T00:35:52.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:35:52.935 [DEBUG] [Thread-138578] [transport.py] [_log()] starting thread (client mode): 0xa57e3490
2026-02-12T00:35:52.935 [DEBUG] [Thread-138578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:35:52.957 [DEBUG] [Thread-138578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:35:52.957 [INFO] [Thread-138578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] client lang: <none>
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] server lang: <none>
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] kex follows: False
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:35:52.960 [DEBUG] [Thread-138578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:35:52.961 [DEBUG] [Thread-138578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:35:52.961 [DEBUG] [Thread-138578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:35:52.961 [DEBUG] [Thread-138578] [transport.py] [_log()] Compression: none
2026-02-12T00:35:52.961 [DEBUG] [Thread-138578] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:35:52.976 [DEBUG] [Thread-138578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:35:52.976 [DEBUG] [Thread-138578] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:35:52.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:35:52.976 [DEBUG] [Thread-138578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:35:52.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:35:52.977 [DEBUG] [Thread-138578] [transport.py] [_log()] userauth is OK
2026-02-12T00:35:52.977 [DEBUG] [Thread-138578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:35:52.977 [DEBUG] [Thread-138578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:35:52.977 [DEBUG] [Thread-138578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:35:52.977 [DEBUG] [Thread-138578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:35:52.993 [INFO] [Thread-138578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:35:52.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:35:53.630 [DEBUG] [Thread-138578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:35:53.631 [DEBUG] [Thread-138578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:35:53.631 [DEBUG] [Thread-138578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:35:53.672 [DEBUG] [Thread-138578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:35:53.672 [DEBUG] [Thread-138578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:35:53.675 [DEBUG] [Thread-138578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:35:53.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:35:53.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:35:53.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:35:53.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:35:53.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:35:53.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:35:53.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:35:53.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:35:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:35:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.941454 -999.00  +14.00  16.26     92  +12.70 1 3 1 3 1     0    0 1.02 -9.93 ----- 16.3 16.3 192.8 26.7 15.9 -2.5 15.6 -2.3 15.6 -2.5 15.9 -2.3
2026-02-12T00:35:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:35:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:35:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.941454
2026-02-12T00:35:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:35:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:35:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:35:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:35:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:35:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:35:29', tmtdew=0.57, humidity=96.21, cloud=0.0, wind=20.86, temperature=13.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:35:41.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:35:53.701 [DEBUG] [Thread-138578] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:35:53.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:35:53.797 [DEBUG] [Thread-138581] [transport.py] [_log()] starting thread (client mode): 0xa2d9c0a0
2026-02-12T00:35:53.797 [DEBUG] [Thread-138581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:35:53.811 [DEBUG] [Thread-138581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:35:53.812 [INFO] [Thread-138581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:35:53.819 [DEBUG] [Thread-138581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:35:53.819 [DEBUG] [Thread-138581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:35:53.819 [DEBUG] [Thread-138581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] client lang: <none>
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] server lang: <none>
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] kex follows: False
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] Compression: none
2026-02-12T00:35:53.820 [DEBUG] [Thread-138581] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:35:53.878 [DEBUG] [Thread-138581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:35:53.879 [DEBUG] [Thread-138581] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:35:53.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:35:53.880 [DEBUG] [Thread-138581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:35:53.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:35:53.935 [DEBUG] [Thread-138581] [transport.py] [_log()] userauth is OK
2026-02-12T00:35:53.935 [DEBUG] [Thread-138581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:35:53.935 [DEBUG] [Thread-138581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:35:53.935 [DEBUG] [Thread-138581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:35:53.935 [DEBUG] [Thread-138581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:35:53.954 [INFO] [Thread-138581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:35:53.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:35:53.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:35:54.761 [DEBUG] [Thread-138581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:35:54.761 [DEBUG] [Thread-138581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:35:54.808 [DEBUG] [Thread-138581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:35:54.808 [DEBUG] [Thread-138581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:35:54.818 [DEBUG] [Thread-138581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:35:54.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:35:54.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')
2026-02-12T00:35:54.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:35:54.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:35:54.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:35:54.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:35:54.854 [DEBUG] [Thread-138581] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:35:56.207 [DEBUG] [Thread-138583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:36:02.219 [DEBUG] [Thread-138584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:36:08.044 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:36:08.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:36:17.267 [DEBUG] [Thread-138585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:36:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:36:24.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:36:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:36:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 36, 4), 0.56, 96.26, 0.0, 20.8, 13.89, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:36:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:36:04
2026-02-12T00:36:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:36:27.246 [DEBUG] [Thread-138586] [transport.py] [_log()] starting thread (client mode): 0xa2dc2080
2026-02-12T00:36:27.246 [DEBUG] [Thread-138586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:36:27.266 [DEBUG] [Thread-138586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:36:27.266 [INFO] [Thread-138586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:36:27.269 [DEBUG] [Thread-138586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:36:27.269 [DEBUG] [Thread-138586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] client lang: <none>
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] server lang: <none>
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] kex follows: False
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] Compression: none
2026-02-12T00:36:27.270 [DEBUG] [Thread-138586] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:36:27.278 [DEBUG] [Thread-138586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:36:27.279 [DEBUG] [Thread-138586] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:36:27.279 [DEBUG] [Thread-138586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:36:27.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:36:27.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:36:27.281 [DEBUG] [Thread-138586] [transport.py] [_log()] userauth is OK
2026-02-12T00:36:27.281 [DEBUG] [Thread-138586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:36:27.281 [DEBUG] [Thread-138586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:36:27.281 [DEBUG] [Thread-138586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:36:27.282 [DEBUG] [Thread-138586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:36:27.305 [INFO] [Thread-138586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:36:27.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:36:27.956 [DEBUG] [Thread-138586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:36:27.956 [DEBUG] [Thread-138586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:36:27.956 [DEBUG] [Thread-138586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:36:27.997 [DEBUG] [Thread-138586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:36:27.998 [DEBUG] [Thread-138586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:36:28.001 [DEBUG] [Thread-138586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:36:28.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:36:28.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:36:28.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:36:28.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:36:28.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:36:28.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:36:28.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:36:28.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:36:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:36:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.941801 -999.00  +14.00  19.56     92  +12.70 1 3 1 3 1     0    0 1.01 -10.28 ----- 19.6 19.6 202.4 25.9 15.9 -2.4 15.6 -2.8 15.6 -2.4 15.9 -2.7
2026-02-12T00:36:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:36:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:36:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.941801
2026-02-12T00:36:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:36:28.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:36:28.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:36:28.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:36:28.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:36:28.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:36:04', tmtdew=0.56, humidity=96.26, cloud=0.0, wind=20.8, temperature=13.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:36:11.606', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:36:28.024 [DEBUG] [Thread-138586] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:36:28.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:36:32.304 [DEBUG] [Thread-138589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:36:47.363 [DEBUG] [Thread-138590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:36:56.281 [DEBUG] [Thread-138591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:37:02.396 [DEBUG] [Thread-138592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:37:08.248 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:37:08.250 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:37:17.435 [DEBUG] [Thread-138593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:37:32.474 [DEBUG] [Thread-138594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:37:47.510 [DEBUG] [Thread-138595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:37:56.353 [DEBUG] [Thread-138596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:38:02.546 [DEBUG] [Thread-138597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:38:08.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:38:08.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:38:17.579 [DEBUG] [Thread-138598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:38:32.616 [DEBUG] [Thread-138599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:38:39.671 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T00:38:47.653 [DEBUG] [Thread-138600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:38:56.408 [DEBUG] [Thread-138601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:39:02.691 [DEBUG] [Thread-138602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:39:08.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:39:08.664 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:39:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:39:09.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:39:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:39:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 38, 28), 0.57, 96.21, 0.0, 23.57, 13.79, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:39:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:38:28
2026-02-12T00:39:11.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:39:12.059 [DEBUG] [Thread-138603] [transport.py] [_log()] starting thread (client mode): 0xa2d9c520
2026-02-12T00:39:12.059 [DEBUG] [Thread-138603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:39:12.080 [DEBUG] [Thread-138603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:39:12.080 [INFO] [Thread-138603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] client lang: <none>
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] server lang: <none>
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] kex follows: False
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] Compression: none
2026-02-12T00:39:12.083 [DEBUG] [Thread-138603] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:39:12.094 [DEBUG] [Thread-138603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:39:12.094 [DEBUG] [Thread-138603] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:39:12.094 [DEBUG] [Thread-138603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:39:12.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:39:12.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:39:12.137 [DEBUG] [Thread-138603] [transport.py] [_log()] userauth is OK
2026-02-12T00:39:12.137 [DEBUG] [Thread-138603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:39:12.137 [DEBUG] [Thread-138603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:39:12.137 [DEBUG] [Thread-138603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:39:12.137 [DEBUG] [Thread-138603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:39:12.161 [INFO] [Thread-138603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:39:12.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:39:12.726 [DEBUG] [Thread-138603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:39:12.726 [DEBUG] [Thread-138603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:39:12.726 [DEBUG] [Thread-138603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:39:12.767 [DEBUG] [Thread-138603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:39:12.767 [DEBUG] [Thread-138603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:39:12.771 [DEBUG] [Thread-138603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:39:12.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:39:12.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:39:12.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:39:12.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:39:12.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:39:12.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:39:12.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:39:12.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:39:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:39:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.943537 -999.00  +14.00  19.22     92  +12.70 1 3 1 3 1     0    0 0.96 -9.91 ----- 19.2 19.2 191.8 23.5 15.8 -2.5 15.6 -2.2 15.5 -2.5 15.9 -2.4
2026-02-12T00:39:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:39:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:39:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.943537
2026-02-12T00:39:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:39:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:39:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:39:12.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:39:12.791 [DEBUG] [Thread-138603] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:39:12.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:39:12.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:38:28', tmtdew=0.57, humidity=96.21, cloud=0.0, wind=23.57, temperature=13.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:38:41.597', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:39:12.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:39:12.895 [DEBUG] [Thread-138606] [transport.py] [_log()] starting thread (client mode): 0x9eb050c0
2026-02-12T00:39:12.895 [DEBUG] [Thread-138606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:39:12.914 [DEBUG] [Thread-138606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:39:12.914 [INFO] [Thread-138606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:39:12.924 [DEBUG] [Thread-138606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:39:12.924 [DEBUG] [Thread-138606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] client lang: <none>
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] server lang: <none>
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] kex follows: False
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:39:12.925 [DEBUG] [Thread-138606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:39:12.926 [DEBUG] [Thread-138606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:39:12.926 [DEBUG] [Thread-138606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:39:12.926 [DEBUG] [Thread-138606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:39:12.926 [DEBUG] [Thread-138606] [transport.py] [_log()] Compression: none
2026-02-12T00:39:12.926 [DEBUG] [Thread-138606] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:39:12.979 [DEBUG] [Thread-138606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:39:12.980 [DEBUG] [Thread-138606] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:39:12.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:39:12.981 [DEBUG] [Thread-138606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:39:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:39:13.035 [DEBUG] [Thread-138606] [transport.py] [_log()] userauth is OK
2026-02-12T00:39:13.035 [DEBUG] [Thread-138606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:39:13.035 [DEBUG] [Thread-138606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:39:13.035 [DEBUG] [Thread-138606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:39:13.036 [DEBUG] [Thread-138606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:39:13.054 [INFO] [Thread-138606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:39:13.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:39:13.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:39:13.876 [DEBUG] [Thread-138606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:39:13.877 [DEBUG] [Thread-138606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:39:13.924 [DEBUG] [Thread-138606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:39:13.925 [DEBUG] [Thread-138606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:39:13.935 [DEBUG] [Thread-138606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:39:13.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:39:13.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:39:13.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:39:13.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:39:13.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:39:13.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:39:13.971 [DEBUG] [Thread-138606] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:39:17.729 [DEBUG] [Thread-138608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:39:32.781 [DEBUG] [Thread-138609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:39:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:39:43.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:39:43.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:39:45.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 39, 4), 0.56, 96.26, 0.0, 22.18, 13.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:39:45.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:39:04
2026-02-12T00:39:46.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:39:46.312 [DEBUG] [Thread-138610] [transport.py] [_log()] starting thread (client mode): 0xa57e2bc0
2026-02-12T00:39:46.312 [DEBUG] [Thread-138610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:39:46.330 [DEBUG] [Thread-138610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:39:46.331 [INFO] [Thread-138610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] client lang: <none>
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] server lang: <none>
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] kex follows: False
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:39:46.332 [DEBUG] [Thread-138610] [transport.py] [_log()] Compression: none
2026-02-12T00:39:46.333 [DEBUG] [Thread-138610] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:39:46.343 [DEBUG] [Thread-138610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:39:46.343 [DEBUG] [Thread-138610] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:39:46.344 [DEBUG] [Thread-138610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:39:46.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:39:46.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:39:46.346 [DEBUG] [Thread-138610] [transport.py] [_log()] userauth is OK
2026-02-12T00:39:46.346 [DEBUG] [Thread-138610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:39:46.346 [DEBUG] [Thread-138610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:39:46.346 [DEBUG] [Thread-138610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:39:46.346 [DEBUG] [Thread-138610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:39:46.382 [INFO] [Thread-138610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:39:46.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:39:47.001 [DEBUG] [Thread-138610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:39:47.001 [DEBUG] [Thread-138610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:39:47.002 [DEBUG] [Thread-138610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:39:47.042 [DEBUG] [Thread-138610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:39:47.042 [DEBUG] [Thread-138610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:39:47.045 [DEBUG] [Thread-138610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:39:47.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:39:47.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:39:47.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:39:47.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:39:47.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:39:47.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:39:47.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:39:47.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:39:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:39:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.944232 -999.00  +13.90  17.18     92  +12.60 1 3 1 3 1     0    0 1.01 -9.20 ----- 17.2 17.2 196.4 24.9 15.8 -2.5 15.6 -3.0 15.5 -2.6 15.8 -2.5
2026-02-12T00:39:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:39:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:39:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.944232
2026-02-12T00:39:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:39:47.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:39:47.071 [DEBUG] [Thread-138610] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:39:47.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:39:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:39:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:39:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:39:04', tmtdew=0.56, humidity=96.26, cloud=0.0, wind=22.18, temperature=13.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:39:41.645', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:39:47.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:39:47.167 [DEBUG] [Thread-138613] [transport.py] [_log()] starting thread (client mode): 0xa2d9d180
2026-02-12T00:39:47.167 [DEBUG] [Thread-138613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:39:47.181 [DEBUG] [Thread-138613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:39:47.182 [INFO] [Thread-138613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:39:47.189 [DEBUG] [Thread-138613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:39:47.189 [DEBUG] [Thread-138613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] client lang: <none>
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] server lang: <none>
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] kex follows: False
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] Compression: none
2026-02-12T00:39:47.190 [DEBUG] [Thread-138613] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:39:47.245 [DEBUG] [Thread-138613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:39:47.245 [DEBUG] [Thread-138613] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:39:47.245 [DEBUG] [Thread-138613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:39:47.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:39:47.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:39:47.302 [DEBUG] [Thread-138613] [transport.py] [_log()] userauth is OK
2026-02-12T00:39:47.302 [DEBUG] [Thread-138613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:39:47.302 [DEBUG] [Thread-138613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:39:47.302 [DEBUG] [Thread-138613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:39:47.302 [DEBUG] [Thread-138613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:39:47.315 [INFO] [Thread-138613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:39:47.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:39:47.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:39:47.818 [DEBUG] [Thread-138615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:39:48.157 [DEBUG] [Thread-138613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:39:48.157 [DEBUG] [Thread-138613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:39:48.205 [DEBUG] [Thread-138613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:39:48.205 [DEBUG] [Thread-138613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:39:48.214 [DEBUG] [Thread-138613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:39:48.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:39:48.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:39:48.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:39:48.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:39:48.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:39:48.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:39:48.250 [DEBUG] [Thread-138613] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:39:56.475 [DEBUG] [Thread-138616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:02.876 [DEBUG] [Thread-138617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:08.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:08.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:17.912 [DEBUG] [Thread-138618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:40:18.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:40:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:40:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 39, 39), 1.01, 93.56, 0.0, 29.5, 14.22, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:40:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:39:39
2026-02-12T00:40:20.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:40:21.071 [DEBUG] [Thread-138619] [transport.py] [_log()] starting thread (client mode): 0xa2dc28f0
2026-02-12T00:40:21.071 [DEBUG] [Thread-138619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:40:21.090 [DEBUG] [Thread-138619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:40:21.090 [INFO] [Thread-138619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:40:21.093 [DEBUG] [Thread-138619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] client lang: <none>
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] server lang: <none>
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] kex follows: False
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:40:21.094 [DEBUG] [Thread-138619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:40:21.095 [DEBUG] [Thread-138619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:40:21.095 [DEBUG] [Thread-138619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:40:21.095 [DEBUG] [Thread-138619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:40:21.095 [DEBUG] [Thread-138619] [transport.py] [_log()] Compression: none
2026-02-12T00:40:21.095 [DEBUG] [Thread-138619] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:40:21.111 [DEBUG] [Thread-138619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:40:21.111 [DEBUG] [Thread-138619] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:40:21.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:40:21.112 [DEBUG] [Thread-138619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:40:21.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:40:21.114 [DEBUG] [Thread-138619] [transport.py] [_log()] userauth is OK
2026-02-12T00:40:21.114 [DEBUG] [Thread-138619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:40:21.115 [DEBUG] [Thread-138619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:40:21.115 [DEBUG] [Thread-138619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:40:21.115 [DEBUG] [Thread-138619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:40:21.132 [INFO] [Thread-138619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:40:21.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:40:21.779 [DEBUG] [Thread-138619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:40:21.779 [DEBUG] [Thread-138619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:40:21.779 [DEBUG] [Thread-138619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:40:21.820 [DEBUG] [Thread-138619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:40:21.820 [DEBUG] [Thread-138619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:40:21.823 [DEBUG] [Thread-138619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:40:21.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:40:21.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:40:21.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:40:21.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:40:21.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:40:21.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:40:21.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:40:21.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:40:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:40:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.944579 -999.00  +13.90  16.59     92  +12.60 1 3 1 3 1     0    0 1.03 -9.10 ----- 16.6 16.6 185.4 26.1 15.8 -2.6 15.5 -2.5 15.5 -2.5 15.8 -2.8
2026-02-12T00:40:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:40:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:40:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.944579
2026-02-12T00:40:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:40:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:40:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:40:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:40:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:40:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:39:39', tmtdew=1.01, humidity=93.56, cloud=0.0, wind=29.5, temperature=14.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:40:11.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:40:21.847 [DEBUG] [Thread-138619] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:40:21.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:40:21.940 [DEBUG] [Thread-138622] [transport.py] [_log()] starting thread (client mode): 0xa2dc3940
2026-02-12T00:40:21.940 [DEBUG] [Thread-138622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:40:21.955 [DEBUG] [Thread-138622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:40:21.955 [INFO] [Thread-138622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:40:21.962 [DEBUG] [Thread-138622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:40:21.962 [DEBUG] [Thread-138622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] client lang: <none>
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] server lang: <none>
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] kex follows: False
2026-02-12T00:40:21.963 [DEBUG] [Thread-138622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:40:21.964 [DEBUG] [Thread-138622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:40:21.964 [DEBUG] [Thread-138622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:40:21.964 [DEBUG] [Thread-138622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:40:21.964 [DEBUG] [Thread-138622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:40:21.964 [DEBUG] [Thread-138622] [transport.py] [_log()] Compression: none
2026-02-12T00:40:21.964 [DEBUG] [Thread-138622] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:40:22.025 [DEBUG] [Thread-138622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:40:22.026 [DEBUG] [Thread-138622] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:40:22.027 [DEBUG] [Thread-138622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:40:22.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:40:22.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:40:22.081 [DEBUG] [Thread-138622] [transport.py] [_log()] userauth is OK
2026-02-12T00:40:22.081 [DEBUG] [Thread-138622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:40:22.081 [DEBUG] [Thread-138622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:40:22.081 [DEBUG] [Thread-138622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:40:22.081 [DEBUG] [Thread-138622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:40:22.102 [INFO] [Thread-138622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:40:22.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:40:22.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:40:22.889 [DEBUG] [Thread-138622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:40:22.889 [DEBUG] [Thread-138622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:40:22.937 [DEBUG] [Thread-138622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:40:22.937 [DEBUG] [Thread-138622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:40:22.947 [DEBUG] [Thread-138622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:40:22.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:40:22.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:40:22.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:40:22.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:40:22.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:40:22.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:40:22.985 [DEBUG] [Thread-138622] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:40:32.945 [DEBUG] [Thread-138624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:48.002 [DEBUG] [Thread-138625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:40:53.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:40:53.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:40:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 40, 14), 0.56, 96.26, 0.0, 22.78, 13.79, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:40:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:40:14
2026-02-12T00:40:55.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:40:55.867 [DEBUG] [Thread-138626] [transport.py] [_log()] starting thread (client mode): 0xa57e32b0
2026-02-12T00:40:55.867 [DEBUG] [Thread-138626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:40:55.887 [DEBUG] [Thread-138626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:40:55.888 [INFO] [Thread-138626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:55.891 [DEBUG] [Thread-138626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] client lang: <none>
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] server lang: <none>
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] kex follows: False
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] Compression: none
2026-02-12T00:40:55.892 [DEBUG] [Thread-138626] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:40:55.909 [DEBUG] [Thread-138626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:40:55.910 [DEBUG] [Thread-138626] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:40:55.910 [DEBUG] [Thread-138626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:40:55.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:40:55.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:40:55.912 [DEBUG] [Thread-138626] [transport.py] [_log()] userauth is OK
2026-02-12T00:40:55.912 [DEBUG] [Thread-138626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:40:55.912 [DEBUG] [Thread-138626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:40:55.913 [DEBUG] [Thread-138626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:40:55.913 [DEBUG] [Thread-138626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:40:55.948 [INFO] [Thread-138626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:40:55.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:40:56.533 [DEBUG] [Thread-138628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:40:56.572 [DEBUG] [Thread-138626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:40:56.572 [DEBUG] [Thread-138626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:40:56.573 [DEBUG] [Thread-138626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:40:56.613 [DEBUG] [Thread-138626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:40:56.614 [DEBUG] [Thread-138626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:40:56.617 [DEBUG] [Thread-138626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:40:56.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:40:56.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:40:56.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:40:56.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:40:56.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:40:56.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:40:56.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:40:56.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:40:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:40:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.944926 -999.00  +13.90  16.31     92  +12.60 1 3 1 3 1     0    0 1.02 -9.14 ----- 16.3 16.3 198.4 25.6 15.8 -2.6 15.4 -2.3 15.5 -2.5 15.8 -2.5
2026-02-12T00:40:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:40:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:40:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.944926
2026-02-12T00:40:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:40:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:40:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:40:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:40:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:40:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:40:14', tmtdew=0.56, humidity=96.26, cloud=0.0, wind=22.78, temperature=13.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:40:41.606', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:40:56.643 [DEBUG] [Thread-138626] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:40:56.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:40:56.742 [DEBUG] [Thread-138630] [transport.py] [_log()] starting thread (client mode): 0xa57e2680
2026-02-12T00:40:56.742 [DEBUG] [Thread-138630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:40:56.758 [DEBUG] [Thread-138630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:40:56.759 [INFO] [Thread-138630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:40:56.770 [DEBUG] [Thread-138630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:40:56.770 [DEBUG] [Thread-138630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:40:56.770 [DEBUG] [Thread-138630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:40:56.770 [DEBUG] [Thread-138630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:56.770 [DEBUG] [Thread-138630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:40:56.770 [DEBUG] [Thread-138630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] client lang: <none>
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] server lang: <none>
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] kex follows: False
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] Compression: none
2026-02-12T00:40:56.771 [DEBUG] [Thread-138630] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:40:56.829 [DEBUG] [Thread-138630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:40:56.830 [DEBUG] [Thread-138630] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:40:56.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:40:56.831 [DEBUG] [Thread-138630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:40:56.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:40:56.895 [DEBUG] [Thread-138630] [transport.py] [_log()] userauth is OK
2026-02-12T00:40:56.895 [DEBUG] [Thread-138630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:40:56.895 [DEBUG] [Thread-138630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:40:56.895 [DEBUG] [Thread-138630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:40:56.895 [DEBUG] [Thread-138630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:40:56.916 [INFO] [Thread-138630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:40:56.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:40:56.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:40:57.733 [DEBUG] [Thread-138630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:40:57.734 [DEBUG] [Thread-138630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:40:57.784 [DEBUG] [Thread-138630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:40:57.785 [DEBUG] [Thread-138630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:40:57.795 [DEBUG] [Thread-138630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:40:57.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:40:57.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:40:57.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:40:57.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:40:57.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:40:57.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:40:57.837 [DEBUG] [Thread-138630] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:41:03.038 [DEBUG] [Thread-138632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:41:09.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:41:09.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:41:18.088 [DEBUG] [Thread-138633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:41:27.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:41:27.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:41:27.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
2026-02-12T00:41:29.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 40, 50), 0.56, 96.23, 0.0, 25.41, 13.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:41:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:40:50
2026-02-12T00:41:30.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:41:30.424 [DEBUG] [Thread-138634] [transport.py] [_log()] starting thread (client mode): 0x9eb06d10
2026-02-12T00:41:30.424 [DEBUG] [Thread-138634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:41:30.445 [DEBUG] [Thread-138634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:41:30.446 [INFO] [Thread-138634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] client lang: <none>
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] server lang: <none>
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] kex follows: False
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] Compression: none
2026-02-12T00:41:30.450 [DEBUG] [Thread-138634] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:41:30.468 [DEBUG] [Thread-138634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:41:30.469 [DEBUG] [Thread-138634] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:41:30.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:41:30.470 [DEBUG] [Thread-138634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:41:30.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:41:30.472 [DEBUG] [Thread-138634] [transport.py] [_log()] userauth is OK
2026-02-12T00:41:30.472 [DEBUG] [Thread-138634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:41:30.472 [DEBUG] [Thread-138634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:41:30.473 [DEBUG] [Thread-138634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:41:30.473 [DEBUG] [Thread-138634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:41:30.497 [INFO] [Thread-138634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:41:30.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:41:31.136 [DEBUG] [Thread-138634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:41:31.136 [DEBUG] [Thread-138634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:41:31.137 [DEBUG] [Thread-138634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:41:31.178 [DEBUG] [Thread-138634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:41:31.178 [DEBUG] [Thread-138634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:41:31.181 [DEBUG] [Thread-138634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:41:31.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:41:31.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:41:31.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:41:31.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:41:31.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:41:31.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:41:31.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:41:31.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:41:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:41:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.945273 -999.00  +13.90  16.89     92  +12.60 1 3 1 3 1     0    0 1.04 -9.03 ----- 16.9 16.9 186.8 21.7 15.8 -2.9 15.5 -2.5 15.4 -2.5 15.8 -2.9
2026-02-12T00:41:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:41:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:41:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.945273
2026-02-12T00:41:31.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:41:31.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:41:31.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:41:31.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:41:31.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:41:31.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:40:50', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=25.41, temperature=13.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:41:11.587', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:41:31.212 [DEBUG] [Thread-138634] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:41:31.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:41:31.307 [DEBUG] [Thread-138637] [transport.py] [_log()] starting thread (client mode): 0x9eb06d40
2026-02-12T00:41:31.307 [DEBUG] [Thread-138637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:41:31.321 [DEBUG] [Thread-138637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:41:31.321 [INFO] [Thread-138637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:41:31.329 [DEBUG] [Thread-138637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:41:31.329 [DEBUG] [Thread-138637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:41:31.329 [DEBUG] [Thread-138637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:41:31.329 [DEBUG] [Thread-138637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:41:31.329 [DEBUG] [Thread-138637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:41:31.329 [DEBUG] [Thread-138637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] client lang: <none>
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] server lang: <none>
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] kex follows: False
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] Compression: none
2026-02-12T00:41:31.330 [DEBUG] [Thread-138637] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:41:31.388 [DEBUG] [Thread-138637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:41:31.388 [DEBUG] [Thread-138637] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:41:31.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:41:31.390 [DEBUG] [Thread-138637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:41:31.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:41:31.444 [DEBUG] [Thread-138637] [transport.py] [_log()] userauth is OK
2026-02-12T00:41:31.445 [DEBUG] [Thread-138637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:41:31.445 [DEBUG] [Thread-138637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:41:31.445 [DEBUG] [Thread-138637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:41:31.445 [DEBUG] [Thread-138637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:41:31.464 [INFO] [Thread-138637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:41:31.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:41:31.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:41:32.282 [DEBUG] [Thread-138637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:41:32.282 [DEBUG] [Thread-138637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:41:32.330 [DEBUG] [Thread-138637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:41:32.330 [DEBUG] [Thread-138637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:41:32.339 [DEBUG] [Thread-138637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:41:32.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:41:32.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')
2026-02-12T00:41:32.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:41:32.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:41:32.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:41:32.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:41:32.377 [DEBUG] [Thread-138637] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:41:33.123 [DEBUG] [Thread-138639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:41:48.175 [DEBUG] [Thread-138640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:41:56.628 [DEBUG] [Thread-138641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:42:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:42:02.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:42:02.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
2026-02-12T00:42:03.210 [DEBUG] [Thread-138642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:42:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 41, 26), 0.56, 96.23, 0.0, 22.59, 13.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:42:04.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:41:26
2026-02-12T00:42:04.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:42:04.687 [DEBUG] [Thread-138643] [transport.py] [_log()] starting thread (client mode): 0x9eb06c20
2026-02-12T00:42:04.687 [DEBUG] [Thread-138643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:42:04.708 [DEBUG] [Thread-138643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:42:04.708 [INFO] [Thread-138643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] client lang: <none>
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] server lang: <none>
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] kex follows: False
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] Compression: none
2026-02-12T00:42:04.711 [DEBUG] [Thread-138643] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:42:04.729 [DEBUG] [Thread-138643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:42:04.729 [DEBUG] [Thread-138643] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:42:04.730 [DEBUG] [Thread-138643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:42:04.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:42:04.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:42:04.731 [DEBUG] [Thread-138643] [transport.py] [_log()] userauth is OK
2026-02-12T00:42:04.732 [DEBUG] [Thread-138643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:42:04.732 [DEBUG] [Thread-138643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:42:04.732 [DEBUG] [Thread-138643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:42:04.732 [DEBUG] [Thread-138643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:42:04.753 [INFO] [Thread-138643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:42:04.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:42:05.417 [DEBUG] [Thread-138643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:42:05.418 [DEBUG] [Thread-138643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:42:05.418 [DEBUG] [Thread-138643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:42:05.458 [DEBUG] [Thread-138643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:42:05.458 [DEBUG] [Thread-138643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:42:05.462 [DEBUG] [Thread-138643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:42:05.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:42:05.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:42:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:42:05.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:42:05.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:42:05.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:42:05.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:42:05.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:42:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:42:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.945620 -999.00  +13.90  14.50     92  +12.60 1 3 1 3 1     0    0 1.06 -6.90 ----- 14.5 14.5 197.0 19.2 15.8 -2.7 15.5 -2.7 15.4 -2.5 15.8 -2.6
2026-02-12T00:42:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:42:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:42:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.945620
2026-02-12T00:42:05.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:42:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:42:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:42:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:42:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:42:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:41:26', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=22.59, temperature=13.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:41:41.568', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:42:05.488 [DEBUG] [Thread-138643] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:42:05.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:42:05.594 [DEBUG] [Thread-138646] [transport.py] [_log()] starting thread (client mode): 0x9eb051b0
2026-02-12T00:42:05.594 [DEBUG] [Thread-138646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:42:05.609 [DEBUG] [Thread-138646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:42:05.609 [INFO] [Thread-138646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] client lang: <none>
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] server lang: <none>
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] kex follows: False
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:42:05.616 [DEBUG] [Thread-138646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:42:05.617 [DEBUG] [Thread-138646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:42:05.617 [DEBUG] [Thread-138646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:42:05.617 [DEBUG] [Thread-138646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:42:05.617 [DEBUG] [Thread-138646] [transport.py] [_log()] Compression: none
2026-02-12T00:42:05.617 [DEBUG] [Thread-138646] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:42:05.679 [DEBUG] [Thread-138646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:42:05.680 [DEBUG] [Thread-138646] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:42:05.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:42:05.681 [DEBUG] [Thread-138646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:42:05.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:42:05.735 [DEBUG] [Thread-138646] [transport.py] [_log()] userauth is OK
2026-02-12T00:42:05.735 [DEBUG] [Thread-138646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:42:05.736 [DEBUG] [Thread-138646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:42:05.736 [DEBUG] [Thread-138646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:42:05.736 [DEBUG] [Thread-138646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:42:05.755 [INFO] [Thread-138646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:42:05.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:42:05.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:42:06.581 [DEBUG] [Thread-138646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:42:06.581 [DEBUG] [Thread-138646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:42:06.628 [DEBUG] [Thread-138646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:42:06.628 [DEBUG] [Thread-138646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:42:06.637 [DEBUG] [Thread-138646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:42:06.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:42:06.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:42:06.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:42:06.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:42:06.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:42:06.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:42:06.674 [DEBUG] [Thread-138646] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:42:09.271 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:42:09.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:42:18.246 [DEBUG] [Thread-138648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:42:33.291 [DEBUG] [Thread-138649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:42:36.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:42:36.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:42:36.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:42:38.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 42, 2), 0.56, 96.25, 0.0, 20.87, 13.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:42:38.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:42:02
2026-02-12T00:42:38.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:42:39.058 [DEBUG] [Thread-138650] [transport.py] [_log()] starting thread (client mode): 0xa57c3190
2026-02-12T00:42:39.058 [DEBUG] [Thread-138650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:42:39.078 [DEBUG] [Thread-138650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:42:39.078 [INFO] [Thread-138650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:42:39.081 [DEBUG] [Thread-138650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:42:39.081 [DEBUG] [Thread-138650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:42:39.081 [DEBUG] [Thread-138650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:42:39.081 [DEBUG] [Thread-138650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:39.081 [DEBUG] [Thread-138650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] client lang: <none>
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] server lang: <none>
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] kex follows: False
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] Compression: none
2026-02-12T00:42:39.082 [DEBUG] [Thread-138650] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:42:39.097 [DEBUG] [Thread-138650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:42:39.097 [DEBUG] [Thread-138650] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:42:39.097 [DEBUG] [Thread-138650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:42:39.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:42:39.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:42:39.098 [DEBUG] [Thread-138650] [transport.py] [_log()] userauth is OK
2026-02-12T00:42:39.098 [DEBUG] [Thread-138650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:42:39.098 [DEBUG] [Thread-138650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:42:39.098 [DEBUG] [Thread-138650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:42:39.098 [DEBUG] [Thread-138650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:42:39.107 [INFO] [Thread-138650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:42:39.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:42:39.793 [DEBUG] [Thread-138650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:42:39.793 [DEBUG] [Thread-138650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:42:39.793 [DEBUG] [Thread-138650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:42:39.834 [DEBUG] [Thread-138650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:42:39.834 [DEBUG] [Thread-138650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:42:39.836 [DEBUG] [Thread-138650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:42:39.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:42:39.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:42:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:42:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:42:39.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:42:39.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:42:39.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.945968 -999.00  +13.90  21.83     91  +12.60 1 3 1 3 1     0    0 1.08 -6.52 ----- 21.8 21.8 194.8 24.7 15.7 -2.9 15.5 -2.9 15.4 -2.8 15.8 -2.8
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.945968
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:42:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:42:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:42:02', tmtdew=0.56, humidity=96.25, cloud=0.0, wind=20.87, temperature=13.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:42:11.635', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:42:39.856 [DEBUG] [Thread-138650] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:42:39.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:42:39.940 [DEBUG] [Thread-138653] [transport.py] [_log()] starting thread (client mode): 0xa57c1f90
2026-02-12T00:42:39.940 [DEBUG] [Thread-138653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:42:39.956 [DEBUG] [Thread-138653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:42:39.956 [INFO] [Thread-138653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:42:39.963 [DEBUG] [Thread-138653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:42:39.963 [DEBUG] [Thread-138653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:42:39.964 [DEBUG] [Thread-138653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:42:39.964 [DEBUG] [Thread-138653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:39.964 [DEBUG] [Thread-138653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:42:39.964 [DEBUG] [Thread-138653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:39.964 [DEBUG] [Thread-138653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] client lang: <none>
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] server lang: <none>
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] kex follows: False
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] Compression: none
2026-02-12T00:42:39.965 [DEBUG] [Thread-138653] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:42:40.026 [DEBUG] [Thread-138653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:42:40.027 [DEBUG] [Thread-138653] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:42:40.028 [DEBUG] [Thread-138653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:42:40.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:42:40.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:42:40.083 [DEBUG] [Thread-138653] [transport.py] [_log()] userauth is OK
2026-02-12T00:42:40.083 [DEBUG] [Thread-138653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:42:40.084 [DEBUG] [Thread-138653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:42:40.084 [DEBUG] [Thread-138653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:42:40.084 [DEBUG] [Thread-138653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:42:40.101 [INFO] [Thread-138653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:42:40.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:42:40.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:42:40.904 [DEBUG] [Thread-138653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:42:40.904 [DEBUG] [Thread-138653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:42:40.952 [DEBUG] [Thread-138653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:42:40.952 [DEBUG] [Thread-138653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:42:40.962 [DEBUG] [Thread-138653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:42:40.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:42:40.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:42: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
2026-02-12T00:42:40.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:42:40.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:42:40.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:42:41.000 [DEBUG] [Thread-138653] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:42:48.326 [DEBUG] [Thread-138655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:42:56.704 [DEBUG] [Thread-138656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:43:03.378 [DEBUG] [Thread-138657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:43:09.473 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:43:09.474 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:43:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:43:11.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:43:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:43:12.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 42, 37), 1.02, 93.53, 0.0, 24.95, 14.15, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:43:12.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:42:37
2026-02-12T00:43:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:43:13.324 [DEBUG] [Thread-138658] [transport.py] [_log()] starting thread (client mode): 0xa57c24a0
2026-02-12T00:43:13.324 [DEBUG] [Thread-138658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:43:13.343 [DEBUG] [Thread-138658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:43:13.343 [INFO] [Thread-138658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:43:13.346 [DEBUG] [Thread-138658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:43:13.346 [DEBUG] [Thread-138658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:43:13.346 [DEBUG] [Thread-138658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] client lang: <none>
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] server lang: <none>
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] kex follows: False
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] Compression: none
2026-02-12T00:43:13.347 [DEBUG] [Thread-138658] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:43:13.364 [DEBUG] [Thread-138658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:43:13.364 [DEBUG] [Thread-138658] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:43:13.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:43:13.365 [DEBUG] [Thread-138658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:43:13.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:43:13.367 [DEBUG] [Thread-138658] [transport.py] [_log()] userauth is OK
2026-02-12T00:43:13.368 [DEBUG] [Thread-138658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:43:13.368 [DEBUG] [Thread-138658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:43:13.368 [DEBUG] [Thread-138658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:43:13.368 [DEBUG] [Thread-138658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:43:13.394 [INFO] [Thread-138658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:43:13.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:43:14.072 [DEBUG] [Thread-138658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:43:14.072 [DEBUG] [Thread-138658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:43:14.073 [DEBUG] [Thread-138658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:43:14.113 [DEBUG] [Thread-138658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:43:14.114 [DEBUG] [Thread-138658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:43:14.117 [DEBUG] [Thread-138658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:43:14.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:43:14.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:43:14.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:43:14.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:43:14.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:43:14.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:43:14.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:43:14.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:43:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:43:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.946315 -999.00  +13.90  13.29     92  +12.70 1 3 1 3 1     0    0 1.08 -6.24 ----- 13.3 13.3 196.4 17.3 15.7 -2.8 15.5 -2.9 15.4 -2.7 15.8 -2.9
2026-02-12T00:43:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:43:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:43:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.946315
2026-02-12T00:43:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:43:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:43:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:43:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:43:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:43:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:42:37', tmtdew=1.02, humidity=93.53, cloud=0.0, wind=24.95, temperature=14.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:42:41.616', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:43:14.145 [DEBUG] [Thread-138658] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:43:14.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:43:14.244 [DEBUG] [Thread-138661] [transport.py] [_log()] starting thread (client mode): 0xa57c3f10
2026-02-12T00:43:14.244 [DEBUG] [Thread-138661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:43:14.258 [DEBUG] [Thread-138661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:43:14.258 [INFO] [Thread-138661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:43:14.265 [DEBUG] [Thread-138661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] client lang: <none>
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] server lang: <none>
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] kex follows: False
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] Compression: none
2026-02-12T00:43:14.266 [DEBUG] [Thread-138661] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:43:14.325 [DEBUG] [Thread-138661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:43:14.326 [DEBUG] [Thread-138661] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:43:14.326 [DEBUG] [Thread-138661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:43:14.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:43:14.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:43:14.386 [DEBUG] [Thread-138661] [transport.py] [_log()] userauth is OK
2026-02-12T00:43:14.386 [DEBUG] [Thread-138661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:43:14.386 [DEBUG] [Thread-138661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:43:14.386 [DEBUG] [Thread-138661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:43:14.386 [DEBUG] [Thread-138661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:43:14.404 [INFO] [Thread-138661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:43:14.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:43:14.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:43:15.278 [DEBUG] [Thread-138661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:43:15.278 [DEBUG] [Thread-138661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:43:15.326 [DEBUG] [Thread-138661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:43:15.327 [DEBUG] [Thread-138661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:43:15.336 [DEBUG] [Thread-138661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:43:15.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:43:15.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:43:15.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:43:15.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:43:15.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:43:15.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:43:15.374 [DEBUG] [Thread-138661] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:43:18.414 [DEBUG] [Thread-138663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:43:33.466 [DEBUG] [Thread-138664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:43:45.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:43:45.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:43:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:43:47.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 43, 12), 0.57, 96.21, 0.0, 24.47, 13.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:43:47.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:43:12
2026-02-12T00:43:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:43:47.704 [DEBUG] [Thread-138665] [transport.py] [_log()] starting thread (client mode): 0xa57e26e0
2026-02-12T00:43:47.704 [DEBUG] [Thread-138665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:43:47.724 [DEBUG] [Thread-138665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:43:47.724 [INFO] [Thread-138665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:43:47.728 [DEBUG] [Thread-138665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] client lang: <none>
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] server lang: <none>
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] kex follows: False
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] Compression: none
2026-02-12T00:43:47.729 [DEBUG] [Thread-138665] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:43:47.746 [DEBUG] [Thread-138665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:43:47.747 [DEBUG] [Thread-138665] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:43:47.747 [DEBUG] [Thread-138665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:43:47.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:43:47.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:43:47.750 [DEBUG] [Thread-138665] [transport.py] [_log()] userauth is OK
2026-02-12T00:43:47.750 [DEBUG] [Thread-138665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:43:47.750 [DEBUG] [Thread-138665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:43:47.750 [DEBUG] [Thread-138665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:43:47.750 [DEBUG] [Thread-138665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:43:47.767 [INFO] [Thread-138665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:43:47.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:43:48.430 [DEBUG] [Thread-138665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:43:48.430 [DEBUG] [Thread-138665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:43:48.430 [DEBUG] [Thread-138665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:43:48.471 [DEBUG] [Thread-138665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:43:48.471 [DEBUG] [Thread-138665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:43:48.474 [DEBUG] [Thread-138665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:43:48.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:43:48.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:43:48.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:43:48.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:43:48.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:43:48.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:43:48.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:43:48.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:43:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:43:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.946662 -999.00  +13.90  20.36     91  +12.60 1 3 1 3 1     0    0 1.10 -5.67 ----- 20.4 20.4 194.6 25.6 15.7 -2.8 15.4 -3.0 15.4 -2.8 15.8 -2.9
2026-02-12T00:43:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:43:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:43:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.946662
2026-02-12T00:43:48.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:43:48.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:43:48.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:43:48.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:43:48.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:43:48.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:43:12', tmtdew=0.57, humidity=96.21, cloud=0.0, wind=24.47, temperature=13.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:43:11.597', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:43:48.498 [DEBUG] [Thread-138665] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:43:48.504 [DEBUG] [Thread-138668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:43:48.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:43:48.591 [DEBUG] [Thread-138669] [transport.py] [_log()] starting thread (client mode): 0xa57e0670
2026-02-12T00:43:48.591 [DEBUG] [Thread-138669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:43:48.607 [DEBUG] [Thread-138669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:43:48.608 [INFO] [Thread-138669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:43:48.615 [DEBUG] [Thread-138669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] client lang: <none>
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] server lang: <none>
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] kex follows: False
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] Compression: none
2026-02-12T00:43:48.616 [DEBUG] [Thread-138669] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:43:48.673 [DEBUG] [Thread-138669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:43:48.674 [DEBUG] [Thread-138669] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:43:48.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:43:48.675 [DEBUG] [Thread-138669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:43:48.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:43:48.729 [DEBUG] [Thread-138669] [transport.py] [_log()] userauth is OK
2026-02-12T00:43:48.730 [DEBUG] [Thread-138669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:43:48.730 [DEBUG] [Thread-138669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:43:48.730 [DEBUG] [Thread-138669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:43:48.730 [DEBUG] [Thread-138669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:43:48.748 [INFO] [Thread-138669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:43:48.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:43:48.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:43:49.562 [DEBUG] [Thread-138669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:43:49.562 [DEBUG] [Thread-138669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:43:49.610 [DEBUG] [Thread-138669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:43:49.611 [DEBUG] [Thread-138669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:43:49.620 [DEBUG] [Thread-138669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:43:49.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:43:49.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')
2026-02-12T00:43:49.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:43:49.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:43:49.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:43:49.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:43:49.656 [DEBUG] [Thread-138669] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:43:56.777 [DEBUG] [Thread-138671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:03.548 [DEBUG] [Thread-138672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:09.683 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:09.684 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:18.584 [DEBUG] [Thread-138673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:19.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:44:19.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:44:19.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:44:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 43, 48), 0.56, 96.23, 0.0, 21.84, 13.74, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:44:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:43:48
2026-02-12T00:44:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:44:22.018 [DEBUG] [Thread-138674] [transport.py] [_log()] starting thread (client mode): 0xa57e2c50
2026-02-12T00:44:22.018 [DEBUG] [Thread-138674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:44:22.039 [DEBUG] [Thread-138674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:44:22.039 [INFO] [Thread-138674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:44:22.042 [DEBUG] [Thread-138674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:44:22.042 [DEBUG] [Thread-138674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:44:22.042 [DEBUG] [Thread-138674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:44:22.042 [DEBUG] [Thread-138674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:22.042 [DEBUG] [Thread-138674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:22.042 [DEBUG] [Thread-138674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:22.042 [DEBUG] [Thread-138674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] client lang: <none>
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] server lang: <none>
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] kex follows: False
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] Compression: none
2026-02-12T00:44:22.043 [DEBUG] [Thread-138674] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:44:22.058 [DEBUG] [Thread-138674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:44:22.059 [DEBUG] [Thread-138674] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:44:22.059 [DEBUG] [Thread-138674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:44:22.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:44:22.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:44:22.061 [DEBUG] [Thread-138674] [transport.py] [_log()] userauth is OK
2026-02-12T00:44:22.061 [DEBUG] [Thread-138674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:44:22.062 [DEBUG] [Thread-138674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:44:22.062 [DEBUG] [Thread-138674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:44:22.062 [DEBUG] [Thread-138674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:44:22.081 [INFO] [Thread-138674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:44:22.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:44:22.755 [DEBUG] [Thread-138674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:44:22.755 [DEBUG] [Thread-138674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:44:22.756 [DEBUG] [Thread-138674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:44:22.796 [DEBUG] [Thread-138674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:44:22.796 [DEBUG] [Thread-138674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:44:22.799 [DEBUG] [Thread-138674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:44:22.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:44:22.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:44:22.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:44:22.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:44:22.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:44:22.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:44:22.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:44:22.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:44:22.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:44:22.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.947356 -999.00  +13.90  20.64     91  +12.60 1 3 1 3 1     0    0 1.15 -4.41 ----- 20.6 20.6 197.6 29.1 15.7 -2.8 15.4 -3.4 15.4 -3.0 15.8 -2.9
2026-02-12T00:44:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:44:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:44:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.947356
2026-02-12T00:44:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:44:22.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:44:22.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:44:22.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:44:22.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:44:22.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:43:48', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=21.84, temperature=13.74, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:44:11.558', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:44:22.826 [DEBUG] [Thread-138674] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:44:22.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:44:22.923 [DEBUG] [Thread-138677] [transport.py] [_log()] starting thread (client mode): 0xa57c1330
2026-02-12T00:44:22.923 [DEBUG] [Thread-138677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:44:22.937 [DEBUG] [Thread-138677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:44:22.937 [INFO] [Thread-138677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:44:22.944 [DEBUG] [Thread-138677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:44:22.944 [DEBUG] [Thread-138677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] client lang: <none>
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] server lang: <none>
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] kex follows: False
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:44:22.945 [DEBUG] [Thread-138677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:44:22.946 [DEBUG] [Thread-138677] [transport.py] [_log()] Compression: none
2026-02-12T00:44:22.946 [DEBUG] [Thread-138677] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:44:23.003 [DEBUG] [Thread-138677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:44:23.004 [DEBUG] [Thread-138677] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:44:23.004 [DEBUG] [Thread-138677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:44:23.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:44:23.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:44:23.060 [DEBUG] [Thread-138677] [transport.py] [_log()] userauth is OK
2026-02-12T00:44:23.060 [DEBUG] [Thread-138677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:44:23.060 [DEBUG] [Thread-138677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:44:23.060 [DEBUG] [Thread-138677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:44:23.060 [DEBUG] [Thread-138677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:44:23.080 [INFO] [Thread-138677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:44:23.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:44:23.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:44:23.892 [DEBUG] [Thread-138677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:44:23.892 [DEBUG] [Thread-138677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:44:23.941 [DEBUG] [Thread-138677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:44:23.941 [DEBUG] [Thread-138677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:44:23.949 [DEBUG] [Thread-138677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:44:23.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:44:23.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:44:23.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:44:23.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:44:23.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:44:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:44:23.985 [DEBUG] [Thread-138677] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:44:33.621 [DEBUG] [Thread-138679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:48.677 [DEBUG] [Thread-138680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:44:54.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:44:54.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:44:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 44, 23), 0.57, 96.18, 0.0, 24.01, 13.69, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:44:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:44:23
2026-02-12T00:44:56.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:44:56.340 [DEBUG] [Thread-138681] [transport.py] [_log()] starting thread (client mode): 0xa57c3520
2026-02-12T00:44:56.340 [DEBUG] [Thread-138681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:44:56.360 [DEBUG] [Thread-138681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:44:56.360 [INFO] [Thread-138681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:44:56.363 [DEBUG] [Thread-138681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:44:56.363 [DEBUG] [Thread-138681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:44:56.363 [DEBUG] [Thread-138681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:44:56.363 [DEBUG] [Thread-138681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:56.363 [DEBUG] [Thread-138681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:56.363 [DEBUG] [Thread-138681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:56.363 [DEBUG] [Thread-138681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] client lang: <none>
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] server lang: <none>
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] kex follows: False
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:44:56.364 [DEBUG] [Thread-138681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:44:56.365 [DEBUG] [Thread-138681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:44:56.365 [DEBUG] [Thread-138681] [transport.py] [_log()] Compression: none
2026-02-12T00:44:56.365 [DEBUG] [Thread-138681] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:44:56.381 [DEBUG] [Thread-138681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:44:56.382 [DEBUG] [Thread-138681] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:44:56.382 [DEBUG] [Thread-138681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:44:56.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:44:56.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:44:56.384 [DEBUG] [Thread-138681] [transport.py] [_log()] userauth is OK
2026-02-12T00:44:56.385 [DEBUG] [Thread-138681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:44:56.385 [DEBUG] [Thread-138681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:44:56.385 [DEBUG] [Thread-138681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:44:56.386 [DEBUG] [Thread-138681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:44:56.400 [INFO] [Thread-138681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:44:56.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:44:56.850 [DEBUG] [Thread-138683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:44:57.059 [DEBUG] [Thread-138681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:44:57.059 [DEBUG] [Thread-138681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:44:57.059 [DEBUG] [Thread-138681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:44:57.100 [DEBUG] [Thread-138681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:44:57.101 [DEBUG] [Thread-138681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:44:57.104 [DEBUG] [Thread-138681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:44:57.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:44:57.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:44:57.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:44:57.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:44:57.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:44:57.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:44:57.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:44:57.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:44:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:44:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.947704 -999.00  +13.90  17.70     92  +12.60 1 3 1 3 1     0    0 1.18 -4.27 ----- 17.7 17.7 193.6 26.4 15.7 -2.9 15.4 -2.6 15.4 -2.7 15.8 -2.9
2026-02-12T00:44:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:44:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:44:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.947704
2026-02-12T00:44:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:44:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:44:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:44:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:44:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:44:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:44:23', tmtdew=0.57, humidity=96.18, cloud=0.0, wind=24.01, temperature=13.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:44:41.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:44:57.132 [DEBUG] [Thread-138681] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:44:57.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:44:57.231 [DEBUG] [Thread-138685] [transport.py] [_log()] starting thread (client mode): 0xa57e3d00
2026-02-12T00:44:57.231 [DEBUG] [Thread-138685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:44:57.245 [DEBUG] [Thread-138685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:44:57.245 [INFO] [Thread-138685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:44:57.252 [DEBUG] [Thread-138685] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] client lang: <none>
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] server lang: <none>
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] kex follows: False
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:44:57.253 [DEBUG] [Thread-138685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:44:57.254 [DEBUG] [Thread-138685] [transport.py] [_log()] Compression: none
2026-02-12T00:44:57.254 [DEBUG] [Thread-138685] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:44:57.311 [DEBUG] [Thread-138685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:44:57.312 [DEBUG] [Thread-138685] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:44:57.313 [DEBUG] [Thread-138685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:44:57.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:44:57.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:44:57.368 [DEBUG] [Thread-138685] [transport.py] [_log()] userauth is OK
2026-02-12T00:44:57.368 [DEBUG] [Thread-138685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:44:57.368 [DEBUG] [Thread-138685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:44:57.369 [DEBUG] [Thread-138685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:44:57.369 [DEBUG] [Thread-138685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:44:57.386 [INFO] [Thread-138685] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:44:57.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:44:57.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:44:58.188 [DEBUG] [Thread-138685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:44:58.188 [DEBUG] [Thread-138685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:44:58.236 [DEBUG] [Thread-138685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:44:58.236 [DEBUG] [Thread-138685] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:44:58.245 [DEBUG] [Thread-138685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:44:58.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:44:58.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:44:58.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:44:58.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:44:58.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:44:58.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:44:58.281 [DEBUG] [Thread-138685] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:45:03.713 [DEBUG] [Thread-138687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:45:09.889 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:45:09.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:45:18.775 [DEBUG] [Thread-138688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:45:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:45:28.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:45:28.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:45:30.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 44, 58), 0.56, 96.23, 0.0, 23.38, 13.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:45:30.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:44:58
2026-02-12T00:45:30.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:45:30.584 [DEBUG] [Thread-138689] [transport.py] [_log()] starting thread (client mode): 0x9eb053c0
2026-02-12T00:45:30.584 [DEBUG] [Thread-138689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:45:30.604 [DEBUG] [Thread-138689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:45:30.604 [INFO] [Thread-138689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] client lang: <none>
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] server lang: <none>
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] kex follows: False
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] Compression: none
2026-02-12T00:45:30.606 [DEBUG] [Thread-138689] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:45:30.626 [DEBUG] [Thread-138689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:45:30.626 [DEBUG] [Thread-138689] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:45:30.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:45:30.627 [DEBUG] [Thread-138689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:45:30.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:45:30.630 [DEBUG] [Thread-138689] [transport.py] [_log()] userauth is OK
2026-02-12T00:45:30.630 [DEBUG] [Thread-138689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:45:30.630 [DEBUG] [Thread-138689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:45:30.630 [DEBUG] [Thread-138689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:45:30.630 [DEBUG] [Thread-138689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:45:30.667 [INFO] [Thread-138689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:45:30.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:45:31.311 [DEBUG] [Thread-138689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:45:31.311 [DEBUG] [Thread-138689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:45:31.311 [DEBUG] [Thread-138689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:45:31.352 [DEBUG] [Thread-138689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:45:31.353 [DEBUG] [Thread-138689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:45:31.356 [DEBUG] [Thread-138689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:45:31.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:45:31.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:45:31.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:45:31.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:45:31.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:45:31.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:45:31.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:45:31.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:45:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:45:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.948051 -999.00  +13.90  19.62     92  +12.60 1 3 1 3 1     0    0 1.18 -2.84 ----- 19.6 19.6 194.4 24.0 15.7 -2.9 15.5 -2.4 15.4 -2.5 15.7 -2.7
2026-02-12T00:45:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:45:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:45:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.948051
2026-02-12T00:45:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:45:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:45:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:45:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:45:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:45:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:44:58', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=23.38, temperature=13.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:45:11.606', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:45:31.381 [DEBUG] [Thread-138689] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:45:31.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:45:31.480 [DEBUG] [Thread-138692] [transport.py] [_log()] starting thread (client mode): 0x9eb06bc0
2026-02-12T00:45:31.480 [DEBUG] [Thread-138692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:45:31.500 [DEBUG] [Thread-138692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:45:31.500 [INFO] [Thread-138692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:45:31.508 [DEBUG] [Thread-138692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:45:31.508 [DEBUG] [Thread-138692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:45:31.508 [DEBUG] [Thread-138692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:45:31.508 [DEBUG] [Thread-138692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:45:31.508 [DEBUG] [Thread-138692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:45:31.508 [DEBUG] [Thread-138692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] client lang: <none>
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] server lang: <none>
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] kex follows: False
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] Compression: none
2026-02-12T00:45:31.509 [DEBUG] [Thread-138692] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:45:31.569 [DEBUG] [Thread-138692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:45:31.569 [DEBUG] [Thread-138692] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:45:31.570 [DEBUG] [Thread-138692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:45:31.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:45:31.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:45:31.627 [DEBUG] [Thread-138692] [transport.py] [_log()] userauth is OK
2026-02-12T00:45:31.627 [DEBUG] [Thread-138692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:45:31.628 [DEBUG] [Thread-138692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:45:31.628 [DEBUG] [Thread-138692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:45:31.628 [DEBUG] [Thread-138692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:45:31.652 [INFO] [Thread-138692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:45:31.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:45:31.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:45:32.502 [DEBUG] [Thread-138692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:45:32.503 [DEBUG] [Thread-138692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:45:32.550 [DEBUG] [Thread-138692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:45:32.551 [DEBUG] [Thread-138692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:45:32.560 [DEBUG] [Thread-138692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:45:32.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:45:32.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:45:32.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:45:32.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:45:32.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:45:32.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:45:32.597 [DEBUG] [Thread-138692] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:45:33.812 [DEBUG] [Thread-138694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:45:48.874 [DEBUG] [Thread-138695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:45:56.936 [DEBUG] [Thread-138696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:46:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:46:02.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:46:02.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:46:03.913 [DEBUG] [Thread-138697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:46:04.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 45, 34), 1.04, 93.36, 0.0, 22.69, 14.09, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:46:04.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:45:34
2026-02-12T00:46:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:46:04.909 [DEBUG] [Thread-138698] [transport.py] [_log()] starting thread (client mode): 0xa57e0c70
2026-02-12T00:46:04.910 [DEBUG] [Thread-138698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:46:04.931 [DEBUG] [Thread-138698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:46:04.931 [INFO] [Thread-138698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:46:04.934 [DEBUG] [Thread-138698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:46:04.934 [DEBUG] [Thread-138698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] client lang: <none>
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] server lang: <none>
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] kex follows: False
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] Compression: none
2026-02-12T00:46:04.935 [DEBUG] [Thread-138698] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:46:04.954 [DEBUG] [Thread-138698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:46:04.954 [DEBUG] [Thread-138698] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:46:04.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:46:04.956 [DEBUG] [Thread-138698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:46:04.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:46:04.958 [DEBUG] [Thread-138698] [transport.py] [_log()] userauth is OK
2026-02-12T00:46:04.958 [DEBUG] [Thread-138698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:46:04.958 [DEBUG] [Thread-138698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:46:04.959 [DEBUG] [Thread-138698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:46:04.959 [DEBUG] [Thread-138698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:46:04.973 [INFO] [Thread-138698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:46:04.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:46:05.550 [DEBUG] [Thread-138698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:46:05.550 [DEBUG] [Thread-138698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:46:05.550 [DEBUG] [Thread-138698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:46:05.592 [DEBUG] [Thread-138698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:46:05.592 [DEBUG] [Thread-138698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:46:05.595 [DEBUG] [Thread-138698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:46:05.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:46:05.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:46:05.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:46:05.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:46:05.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:46:05.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:46:05.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:46:05.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:46:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:46:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.948398 -999.00  +13.80  20.18     92  +12.60 1 3 1 3 1     0    0 1.19 -2.14 ----- 20.2 20.2 198.0 25.4 18.3 -5.2 15.4 -3.0 15.4 -2.7 15.7 -2.8
2026-02-12T00:46:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:46:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:46:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.948398
2026-02-12T00:46:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:46:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:46:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:46:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:46:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:46:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:45:34', tmtdew=1.04, humidity=93.36, cloud=0.0, wind=22.69, temperature=14.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:45:41.587', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:46:05.621 [DEBUG] [Thread-138698] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:46:05.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:46:05.716 [DEBUG] [Thread-138701] [transport.py] [_log()] starting thread (client mode): 0x9eb055d0
2026-02-12T00:46:05.717 [DEBUG] [Thread-138701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:46:05.731 [DEBUG] [Thread-138701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:46:05.731 [INFO] [Thread-138701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:46:05.739 [DEBUG] [Thread-138701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:46:05.739 [DEBUG] [Thread-138701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:46:05.739 [DEBUG] [Thread-138701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:46:05.739 [DEBUG] [Thread-138701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] client lang: <none>
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] server lang: <none>
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] kex follows: False
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] Compression: none
2026-02-12T00:46:05.740 [DEBUG] [Thread-138701] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:46:05.799 [DEBUG] [Thread-138701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:46:05.800 [DEBUG] [Thread-138701] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:46:05.800 [DEBUG] [Thread-138701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:46:05.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:46:05.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:46:05.863 [DEBUG] [Thread-138701] [transport.py] [_log()] userauth is OK
2026-02-12T00:46:05.863 [DEBUG] [Thread-138701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:46:05.864 [DEBUG] [Thread-138701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:46:05.864 [DEBUG] [Thread-138701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:46:05.864 [DEBUG] [Thread-138701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:46:05.883 [INFO] [Thread-138701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:46:05.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:46:05.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:46:06.703 [DEBUG] [Thread-138701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:46:06.703 [DEBUG] [Thread-138701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:46:06.751 [DEBUG] [Thread-138701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:46:06.752 [DEBUG] [Thread-138701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:46:06.761 [DEBUG] [Thread-138701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:46:06.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:46: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')
2026-02-12T00:46: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
2026-02-12T00:46:06.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:46:06.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:46:06.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:46:06.799 [DEBUG] [Thread-138701] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:46:10.092 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:46:10.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:46:18.952 [DEBUG] [Thread-138703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:46:34.003 [DEBUG] [Thread-138704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:46:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:46:36.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:46:36.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:46:38.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 46, 10), 0.57, 96.21, 0.0, 20.7, 13.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:46:38.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:46:10
2026-02-12T00:46:39.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:46:39.420 [DEBUG] [Thread-138705] [transport.py] [_log()] starting thread (client mode): 0xa57e1150
2026-02-12T00:46:39.420 [DEBUG] [Thread-138705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:46:39.439 [DEBUG] [Thread-138705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:46:39.439 [INFO] [Thread-138705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] client lang: <none>
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] server lang: <none>
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] kex follows: False
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:46:39.443 [DEBUG] [Thread-138705] [transport.py] [_log()] Compression: none
2026-02-12T00:46:39.444 [DEBUG] [Thread-138705] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:46:39.461 [DEBUG] [Thread-138705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:46:39.461 [DEBUG] [Thread-138705] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:46:39.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:46:39.462 [DEBUG] [Thread-138705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:46:39.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:46:39.464 [DEBUG] [Thread-138705] [transport.py] [_log()] userauth is OK
2026-02-12T00:46:39.464 [DEBUG] [Thread-138705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:46:39.464 [DEBUG] [Thread-138705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:46:39.464 [DEBUG] [Thread-138705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:46:39.464 [DEBUG] [Thread-138705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:46:39.485 [INFO] [Thread-138705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:46:39.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:46:40.114 [DEBUG] [Thread-138705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:46:40.114 [DEBUG] [Thread-138705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:46:40.115 [DEBUG] [Thread-138705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:46:40.155 [DEBUG] [Thread-138705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:46:40.156 [DEBUG] [Thread-138705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:46:40.159 [DEBUG] [Thread-138705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:46:40.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:46:40.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:46:40.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:46:40.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:46:40.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:46:40.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:46:40.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:46:40.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:46:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:46:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.948745 -999.00  +13.80  16.55     92  +12.60 1 3 1 3 1     0    0 1.26 -1.45 ----- 16.6 16.6 184.6 20.9 15.7 -2.7 15.4 -3.5 15.4 -3.2 15.8 -3.9
2026-02-12T00:46:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:46:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:46:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.948745
2026-02-12T00:46:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:46:40.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:46:40.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:46:40.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:46:40.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:46:40.182 [DEBUG] [Thread-138705] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:46:40.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:46:10', tmtdew=0.57, humidity=96.21, cloud=0.0, wind=20.7, temperature=13.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:46:11.568', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:46:40.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:46:40.283 [DEBUG] [Thread-138708] [transport.py] [_log()] starting thread (client mode): 0x9eb053f0
2026-02-12T00:46:40.283 [DEBUG] [Thread-138708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:46:40.298 [DEBUG] [Thread-138708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:46:40.298 [INFO] [Thread-138708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] client lang: <none>
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] server lang: <none>
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] kex follows: False
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:46:40.306 [DEBUG] [Thread-138708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:46:40.307 [DEBUG] [Thread-138708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:46:40.307 [DEBUG] [Thread-138708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:46:40.307 [DEBUG] [Thread-138708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:46:40.307 [DEBUG] [Thread-138708] [transport.py] [_log()] Compression: none
2026-02-12T00:46:40.307 [DEBUG] [Thread-138708] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:46:40.366 [DEBUG] [Thread-138708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:46:40.367 [DEBUG] [Thread-138708] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:46:40.367 [DEBUG] [Thread-138708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:46:40.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:46:40.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:46:40.422 [DEBUG] [Thread-138708] [transport.py] [_log()] userauth is OK
2026-02-12T00:46:40.423 [DEBUG] [Thread-138708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:46:40.423 [DEBUG] [Thread-138708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:46:40.423 [DEBUG] [Thread-138708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:46:40.423 [DEBUG] [Thread-138708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:46:40.441 [INFO] [Thread-138708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:46:40.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:46:40.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:46:41.241 [DEBUG] [Thread-138708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:46:41.241 [DEBUG] [Thread-138708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:46:41.291 [DEBUG] [Thread-138708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:46:41.291 [DEBUG] [Thread-138708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:46:41.301 [DEBUG] [Thread-138708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:46:41.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:46:41.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')
2026-02-12T00:46:41.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:46:41.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:46:41.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:46:41.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:46:41.343 [DEBUG] [Thread-138708] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:46:49.040 [DEBUG] [Thread-138710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:46:57.022 [DEBUG] [Thread-138711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:47:04.104 [DEBUG] [Thread-138712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:47:10.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:47:10.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:47:11.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:47:11.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:47:11.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:47:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 46, 45), 0.57, 96.21, 0.0, 23.41, 13.71, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:47:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:46:45
2026-02-12T00:47:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:47:13.739 [DEBUG] [Thread-138713] [transport.py] [_log()] starting thread (client mode): 0xa57e31c0
2026-02-12T00:47:13.739 [DEBUG] [Thread-138713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:47:13.760 [DEBUG] [Thread-138713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:47:13.760 [INFO] [Thread-138713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:47:13.761 [DEBUG] [Thread-138713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:47:13.761 [DEBUG] [Thread-138713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:47:13.761 [DEBUG] [Thread-138713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] client lang: <none>
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] server lang: <none>
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] kex follows: False
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] Compression: none
2026-02-12T00:47:13.762 [DEBUG] [Thread-138713] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:47:13.776 [DEBUG] [Thread-138713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:47:13.777 [DEBUG] [Thread-138713] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:47:13.777 [DEBUG] [Thread-138713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:47:13.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:47:13.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:47:13.779 [DEBUG] [Thread-138713] [transport.py] [_log()] userauth is OK
2026-02-12T00:47:13.779 [DEBUG] [Thread-138713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:47:13.779 [DEBUG] [Thread-138713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:47:13.779 [DEBUG] [Thread-138713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:47:13.779 [DEBUG] [Thread-138713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:47:13.799 [INFO] [Thread-138713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:47:13.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:47:14.447 [DEBUG] [Thread-138713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:47:14.447 [DEBUG] [Thread-138713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:47:14.447 [DEBUG] [Thread-138713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:47:14.488 [DEBUG] [Thread-138713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:47:14.489 [DEBUG] [Thread-138713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:47:14.492 [DEBUG] [Thread-138713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:47:14.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:47:14.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:47:14.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:47:14.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:47:14.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:47:14.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:47:14.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:47:14.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:47:14.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:47:14.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.949092 -999.00  +13.80  13.04     92  +12.50 1 3 1 3 1     0    0 1.24 -1.58 ----- 13.0 13.0 184.0 24.9 15.7 -3.8 15.4 -2.9 15.4 -3.1 15.7 -3.0
2026-02-12T00:47:14.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:47:14.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:47:14.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.949092
2026-02-12T00:47:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:47:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:47:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:47:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:47:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:47:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:46:45', tmtdew=0.57, humidity=96.21, cloud=0.0, wind=23.41, temperature=13.71, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:46:41.549', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:47:14.515 [DEBUG] [Thread-138713] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:47:14.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:47:14.610 [DEBUG] [Thread-138716] [transport.py] [_log()] starting thread (client mode): 0xa57e0580
2026-02-12T00:47:14.611 [DEBUG] [Thread-138716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:47:14.626 [DEBUG] [Thread-138716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:47:14.626 [INFO] [Thread-138716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] client lang: <none>
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] server lang: <none>
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] kex follows: False
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:47:14.634 [DEBUG] [Thread-138716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:47:14.635 [DEBUG] [Thread-138716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:47:14.635 [DEBUG] [Thread-138716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:47:14.635 [DEBUG] [Thread-138716] [transport.py] [_log()] Compression: none
2026-02-12T00:47:14.635 [DEBUG] [Thread-138716] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:47:14.694 [DEBUG] [Thread-138716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:47:14.694 [DEBUG] [Thread-138716] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:47:14.695 [DEBUG] [Thread-138716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:47:14.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:47:14.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:47:14.750 [DEBUG] [Thread-138716] [transport.py] [_log()] userauth is OK
2026-02-12T00:47:14.750 [DEBUG] [Thread-138716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:47:14.750 [DEBUG] [Thread-138716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:47:14.750 [DEBUG] [Thread-138716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:47:14.751 [DEBUG] [Thread-138716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:47:14.769 [INFO] [Thread-138716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:47:14.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:47:14.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:47:15.609 [DEBUG] [Thread-138716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:47:15.610 [DEBUG] [Thread-138716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:47:15.657 [DEBUG] [Thread-138716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:47:15.657 [DEBUG] [Thread-138716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:47:15.667 [DEBUG] [Thread-138716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:47:15.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:47:15.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:47:15.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
2026-02-12T00:47:15.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:47:15.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:47:15.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:47:15.704 [DEBUG] [Thread-138716] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:47:19.140 [DEBUG] [Thread-138718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:47:34.189 [DEBUG] [Thread-138719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:47:45.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:47:45.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:47:45.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:47:47.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 47, 21), 0.57, 96.18, 0.0, 21.74, 13.69, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:47:47.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:47:21
2026-02-12T00:47:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:47:48.157 [DEBUG] [Thread-138720] [transport.py] [_log()] starting thread (client mode): 0xa57c14e0
2026-02-12T00:47:48.157 [DEBUG] [Thread-138720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:47:48.177 [DEBUG] [Thread-138720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:47:48.177 [INFO] [Thread-138720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] client lang: <none>
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] server lang: <none>
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] kex follows: False
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:47:48.181 [DEBUG] [Thread-138720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:47:48.182 [DEBUG] [Thread-138720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:47:48.182 [DEBUG] [Thread-138720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:47:48.182 [DEBUG] [Thread-138720] [transport.py] [_log()] Compression: none
2026-02-12T00:47:48.182 [DEBUG] [Thread-138720] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:47:48.201 [DEBUG] [Thread-138720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:47:48.202 [DEBUG] [Thread-138720] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:47:48.202 [DEBUG] [Thread-138720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:47:48.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:47:48.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:47:48.204 [DEBUG] [Thread-138720] [transport.py] [_log()] userauth is OK
2026-02-12T00:47:48.204 [DEBUG] [Thread-138720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:47:48.205 [DEBUG] [Thread-138720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:47:48.205 [DEBUG] [Thread-138720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:47:48.205 [DEBUG] [Thread-138720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:47:48.229 [INFO] [Thread-138720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:47:48.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:47:48.865 [DEBUG] [Thread-138720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:47:48.865 [DEBUG] [Thread-138720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:47:48.866 [DEBUG] [Thread-138720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:47:48.906 [DEBUG] [Thread-138720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:47:48.907 [DEBUG] [Thread-138720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:47:48.909 [DEBUG] [Thread-138720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:47:48.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:47:48.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:47:48.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:47:48.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:47:48.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:47:48.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:47:48.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:47:48.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:47:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:47:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.949440 -999.00  +13.80  12.95     92  +12.50 1 3 1 3 1     0    0 1.24 -0.72 ----- 12.9 12.9 187.4 26.8 15.7 -2.7 15.4 -4.1 15.3 -3.7 15.7 -4.1
2026-02-12T00:47:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:47:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:47:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.949440
2026-02-12T00:47:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:47:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:47:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:47:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:47:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:47:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:47:21', tmtdew=0.57, humidity=96.18, cloud=0.0, wind=21.74, temperature=13.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:47:11.616', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:47:48.937 [DEBUG] [Thread-138720] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:47:49.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:47:49.034 [DEBUG] [Thread-138723] [transport.py] [_log()] starting thread (client mode): 0x9eb06bc0
2026-02-12T00:47:49.034 [DEBUG] [Thread-138723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:47:49.049 [DEBUG] [Thread-138723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:47:49.049 [INFO] [Thread-138723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:47:49.056 [DEBUG] [Thread-138723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:47:49.056 [DEBUG] [Thread-138723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:47:49.056 [DEBUG] [Thread-138723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:47:49.056 [DEBUG] [Thread-138723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] client lang: <none>
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] server lang: <none>
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] kex follows: False
2026-02-12T00:47:49.057 [DEBUG] [Thread-138723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:47:49.058 [DEBUG] [Thread-138723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:47:49.058 [DEBUG] [Thread-138723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:47:49.058 [DEBUG] [Thread-138723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:47:49.058 [DEBUG] [Thread-138723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:47:49.058 [DEBUG] [Thread-138723] [transport.py] [_log()] Compression: none
2026-02-12T00:47:49.058 [DEBUG] [Thread-138723] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:47:49.112 [DEBUG] [Thread-138723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:47:49.113 [DEBUG] [Thread-138723] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:47:49.113 [DEBUG] [Thread-138723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:47:49.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:47:49.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:47:49.169 [DEBUG] [Thread-138723] [transport.py] [_log()] userauth is OK
2026-02-12T00:47:49.169 [DEBUG] [Thread-138723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:47:49.169 [DEBUG] [Thread-138723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:47:49.169 [DEBUG] [Thread-138723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:47:49.169 [DEBUG] [Thread-138723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:47:49.188 [INFO] [Thread-138723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:47:49.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:47:49.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:47:49.225 [DEBUG] [Thread-138725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:47:50.050 [DEBUG] [Thread-138723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:47:50.051 [DEBUG] [Thread-138723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:47:50.098 [DEBUG] [Thread-138723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:47:50.098 [DEBUG] [Thread-138723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:47:50.107 [DEBUG] [Thread-138723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:47:50.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:47:50.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:47:50.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:47:50.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:47:50.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:47:50.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:47:50.143 [DEBUG] [Thread-138723] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:47:57.090 [DEBUG] [Thread-138726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:04.278 [DEBUG] [Thread-138727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:10.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:10.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:19.315 [DEBUG] [Thread-138728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:20.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:48:20.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:48:20.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
2026-02-12T00:48:22.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 47, 57), 0.52, 96.18, 0.0, 24.08, 13.74, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:48:22.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:47:57
2026-02-12T00:48:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:48:22.551 [DEBUG] [Thread-138729] [transport.py] [_log()] starting thread (client mode): 0x9eb04f70
2026-02-12T00:48:22.551 [DEBUG] [Thread-138729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:48:22.572 [DEBUG] [Thread-138729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:48:22.572 [INFO] [Thread-138729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:48:22.575 [DEBUG] [Thread-138729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:48:22.575 [DEBUG] [Thread-138729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:48:22.575 [DEBUG] [Thread-138729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:48:22.575 [DEBUG] [Thread-138729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:22.575 [DEBUG] [Thread-138729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:22.575 [DEBUG] [Thread-138729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] client lang: <none>
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] server lang: <none>
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] kex follows: False
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] Compression: none
2026-02-12T00:48:22.576 [DEBUG] [Thread-138729] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:48:22.593 [DEBUG] [Thread-138729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:48:22.594 [DEBUG] [Thread-138729] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:48:22.595 [DEBUG] [Thread-138729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:48:22.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:48:22.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:48:22.637 [DEBUG] [Thread-138729] [transport.py] [_log()] userauth is OK
2026-02-12T00:48:22.637 [DEBUG] [Thread-138729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:48:22.638 [DEBUG] [Thread-138729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:48:22.638 [DEBUG] [Thread-138729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:48:22.638 [DEBUG] [Thread-138729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:48:22.669 [INFO] [Thread-138729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:48:22.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:48:23.310 [DEBUG] [Thread-138729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:48:23.311 [DEBUG] [Thread-138729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:48:23.311 [DEBUG] [Thread-138729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:48:23.351 [DEBUG] [Thread-138729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:48:23.352 [DEBUG] [Thread-138729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:48:23.355 [DEBUG] [Thread-138729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:48:23.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:48:23.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:48:23.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:48:23.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:48:23.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:48:23.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:48:23.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:48:23.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:48:23.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:48:23.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.950134 -999.00  +13.80  12.93     92  +12.60 1 3 1 3 1     0    0 1.26 -0.78 ----- 12.9 12.9 192.6 24.6 15.7 -2.8 15.3 -2.7 15.3 -2.3 15.7 -2.4
2026-02-12T00:48:23.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:48:23.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:48:23.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.950134
2026-02-12T00:48:23.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:48:23.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:48:23.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:48:23.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:48:23.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:48:23.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:47:57', tmtdew=0.52, humidity=96.18, cloud=0.0, wind=24.08, temperature=13.74, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:48:11.578', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:48:23.380 [DEBUG] [Thread-138729] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:48:23.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:48:23.474 [DEBUG] [Thread-138732] [transport.py] [_log()] starting thread (client mode): 0x9eb07100
2026-02-12T00:48:23.475 [DEBUG] [Thread-138732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:48:23.489 [DEBUG] [Thread-138732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:48:23.489 [INFO] [Thread-138732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:48:23.496 [DEBUG] [Thread-138732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] client lang: <none>
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] server lang: <none>
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] kex follows: False
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] Compression: none
2026-02-12T00:48:23.497 [DEBUG] [Thread-138732] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:48:23.558 [DEBUG] [Thread-138732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:48:23.559 [DEBUG] [Thread-138732] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:48:23.559 [DEBUG] [Thread-138732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:48:23.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:48:23.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:48:23.619 [DEBUG] [Thread-138732] [transport.py] [_log()] userauth is OK
2026-02-12T00:48:23.622 [DEBUG] [Thread-138732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:48:23.622 [DEBUG] [Thread-138732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:48:23.622 [DEBUG] [Thread-138732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:48:23.622 [DEBUG] [Thread-138732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:48:23.641 [INFO] [Thread-138732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:48:23.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:48:23.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:48:24.471 [DEBUG] [Thread-138732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:48:24.471 [DEBUG] [Thread-138732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:48:24.519 [DEBUG] [Thread-138732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:48:24.520 [DEBUG] [Thread-138732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:48:24.529 [DEBUG] [Thread-138732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:48:24.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:48:24.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:48:24.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:48:24.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:48:24.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:48:24.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:48:24.565 [DEBUG] [Thread-138732] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:48:34.351 [DEBUG] [Thread-138734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:49.407 [DEBUG] [Thread-138735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:54.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:48:54.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:48:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:48:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 48, 33), 1.03, 93.43, 0.0, 26.32, 14.12, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:48:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:48:33
2026-02-12T00:48:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:48:57.156 [DEBUG] [Thread-138736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:48:57.258 [DEBUG] [Thread-138737] [transport.py] [_log()] starting thread (client mode): 0x9eb06140
2026-02-12T00:48:57.258 [DEBUG] [Thread-138737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:48:57.278 [DEBUG] [Thread-138737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:48:57.278 [INFO] [Thread-138737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:48:57.281 [DEBUG] [Thread-138737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] client lang: <none>
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] server lang: <none>
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] kex follows: False
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] Compression: none
2026-02-12T00:48:57.282 [DEBUG] [Thread-138737] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:48:57.298 [DEBUG] [Thread-138737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:48:57.298 [DEBUG] [Thread-138737] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:48:57.299 [DEBUG] [Thread-138737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:48:57.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:48:57.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:48:57.300 [DEBUG] [Thread-138737] [transport.py] [_log()] userauth is OK
2026-02-12T00:48:57.301 [DEBUG] [Thread-138737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:48:57.301 [DEBUG] [Thread-138737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:48:57.301 [DEBUG] [Thread-138737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:48:57.301 [DEBUG] [Thread-138737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:48:57.325 [INFO] [Thread-138737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:48:57.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:48:57.920 [DEBUG] [Thread-138737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:48:57.921 [DEBUG] [Thread-138737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:48:57.921 [DEBUG] [Thread-138737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:48:57.961 [DEBUG] [Thread-138737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:48:57.962 [DEBUG] [Thread-138737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:48:57.965 [DEBUG] [Thread-138737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:48:57.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:48:57.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:48:57.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:48:57.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:48:57.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:48:57.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:48:57.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:48:57.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:48:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:48:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.950481 -999.00  +13.70  18.10     92  +12.50 1 3 1 3 1     0    0 1.24 -0.49 ----- 18.1 18.1 193.0 23.3 15.7 -2.6 15.3 -2.5 15.3 -2.4 15.6 -2.6
2026-02-12T00:48:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:48:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:48:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.950481
2026-02-12T00:48:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:48:57.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:48:57.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:48:57.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:48:57.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:48:57.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:48:33', tmtdew=1.03, humidity=93.43, cloud=0.0, wind=26.32, temperature=14.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:48:41.558', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:48:57.991 [DEBUG] [Thread-138737] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:48:58.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:48:58.087 [DEBUG] [Thread-138740] [transport.py] [_log()] starting thread (client mode): 0xa57c2c50
2026-02-12T00:48:58.088 [DEBUG] [Thread-138740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:48:58.102 [DEBUG] [Thread-138740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:48:58.102 [INFO] [Thread-138740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:48:58.111 [DEBUG] [Thread-138740] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:48:58.111 [DEBUG] [Thread-138740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:48:58.111 [DEBUG] [Thread-138740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:48:58.111 [DEBUG] [Thread-138740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:58.111 [DEBUG] [Thread-138740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:48:58.111 [DEBUG] [Thread-138740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] client lang: <none>
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] server lang: <none>
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] kex follows: False
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] Compression: none
2026-02-12T00:48:58.112 [DEBUG] [Thread-138740] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:48:58.168 [DEBUG] [Thread-138740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:48:58.168 [DEBUG] [Thread-138740] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:48:58.169 [DEBUG] [Thread-138740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:48:58.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:48:58.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:48:58.226 [DEBUG] [Thread-138740] [transport.py] [_log()] userauth is OK
2026-02-12T00:48:58.227 [DEBUG] [Thread-138740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:48:58.227 [DEBUG] [Thread-138740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:48:58.227 [DEBUG] [Thread-138740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:48:58.227 [DEBUG] [Thread-138740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:48:58.246 [INFO] [Thread-138740] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:48:58.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:48:58.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:48:59.042 [DEBUG] [Thread-138740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:48:59.042 [DEBUG] [Thread-138740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:48:59.090 [DEBUG] [Thread-138740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:48:59.091 [DEBUG] [Thread-138740] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:48:59.100 [DEBUG] [Thread-138740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:48:59.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:48:59.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:48:59.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:48:59.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:48:59.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:48:59.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:48:59.137 [DEBUG] [Thread-138740] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:49:04.442 [DEBUG] [Thread-138742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:49:10.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:49:10.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:49:19.492 [DEBUG] [Thread-138743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:49:29.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:49:29.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:49:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:49:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 49, 9), 0.57, 96.2, 0.0, 22.99, 13.71, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:49:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:49:09
2026-02-12T00:49:31.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:49:31.532 [DEBUG] [Thread-138744] [transport.py] [_log()] starting thread (client mode): 0xa57c24d0
2026-02-12T00:49:31.532 [DEBUG] [Thread-138744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:49:31.552 [DEBUG] [Thread-138744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:49:31.552 [INFO] [Thread-138744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:49:31.555 [DEBUG] [Thread-138744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:49:31.555 [DEBUG] [Thread-138744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:49:31.555 [DEBUG] [Thread-138744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:49:31.555 [DEBUG] [Thread-138744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:49:31.555 [DEBUG] [Thread-138744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:49:31.555 [DEBUG] [Thread-138744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] client lang: <none>
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] server lang: <none>
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] kex follows: False
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] Compression: none
2026-02-12T00:49:31.556 [DEBUG] [Thread-138744] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:49:31.575 [DEBUG] [Thread-138744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:49:31.575 [DEBUG] [Thread-138744] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:49:31.576 [DEBUG] [Thread-138744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:49:31.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:49:31.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:49:31.578 [DEBUG] [Thread-138744] [transport.py] [_log()] userauth is OK
2026-02-12T00:49:31.578 [DEBUG] [Thread-138744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:49:31.578 [DEBUG] [Thread-138744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:49:31.578 [DEBUG] [Thread-138744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:49:31.578 [DEBUG] [Thread-138744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:49:31.604 [INFO] [Thread-138744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:49:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:49:32.226 [DEBUG] [Thread-138744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:49:32.227 [DEBUG] [Thread-138744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:49:32.227 [DEBUG] [Thread-138744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:49:32.267 [DEBUG] [Thread-138744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:49:32.268 [DEBUG] [Thread-138744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:49:32.271 [DEBUG] [Thread-138744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:49:32.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:49:32.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:49:32.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:49:32.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:49:32.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:49:32.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:49:32.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:49:32.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:49:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:49:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.950829 -999.00  +13.70  16.45     92  +12.40 1 3 1 3 1     0    0 1.30 -0.33 ----- 16.4 16.4 195.2 22.7 15.6 -2.6 15.3 -2.7 15.3 -2.3 15.6 -2.4
2026-02-12T00:49:32.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:49:32.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:49:32.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.950829
2026-02-12T00:49:32.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:49:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:49:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:49:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:49:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:49:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:49:09', tmtdew=0.57, humidity=96.2, cloud=0.0, wind=22.99, temperature=13.71, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:49:11.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:49:32.298 [DEBUG] [Thread-138744] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:49:32.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:49:32.394 [DEBUG] [Thread-138747] [transport.py] [_log()] starting thread (client mode): 0xa2d97010
2026-02-12T00:49:32.394 [DEBUG] [Thread-138747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:49:32.409 [DEBUG] [Thread-138747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:49:32.409 [INFO] [Thread-138747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:49:32.417 [DEBUG] [Thread-138747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:49:32.417 [DEBUG] [Thread-138747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:49:32.417 [DEBUG] [Thread-138747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:49:32.417 [DEBUG] [Thread-138747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:49:32.417 [DEBUG] [Thread-138747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] client lang: <none>
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] server lang: <none>
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] kex follows: False
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] Compression: none
2026-02-12T00:49:32.418 [DEBUG] [Thread-138747] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:49:32.476 [DEBUG] [Thread-138747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:49:32.476 [DEBUG] [Thread-138747] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:49:32.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:49:32.477 [DEBUG] [Thread-138747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:49:32.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:49:32.532 [DEBUG] [Thread-138747] [transport.py] [_log()] userauth is OK
2026-02-12T00:49:32.533 [DEBUG] [Thread-138747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:49:32.533 [DEBUG] [Thread-138747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:49:32.533 [DEBUG] [Thread-138747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:49:32.533 [DEBUG] [Thread-138747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:49:32.551 [INFO] [Thread-138747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:49:32.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:49:32.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:49:33.354 [DEBUG] [Thread-138747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:49:33.354 [DEBUG] [Thread-138747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:49:33.402 [DEBUG] [Thread-138747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:49:33.402 [DEBUG] [Thread-138747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:49:33.412 [DEBUG] [Thread-138747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:49:33.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:49:33.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:49:33.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:49:33.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:49:33.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:49:33.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:49:33.448 [DEBUG] [Thread-138747] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:49:34.529 [DEBUG] [Thread-138749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:49:49.581 [DEBUG] [Thread-138750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:49:57.214 [DEBUG] [Thread-138751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:50:03.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:50:03.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:50:03.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:50:04.618 [DEBUG] [Thread-138752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:50:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 49, 44), 0.58, 96.13, 0.0, 23.34, 13.58, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:50:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:49:44
2026-02-12T00:50:05.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:50:05.869 [DEBUG] [Thread-138753] [transport.py] [_log()] starting thread (client mode): 0xa2d94550
2026-02-12T00:50:05.869 [DEBUG] [Thread-138753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:50:05.882 [DEBUG] [Thread-138753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:50:05.882 [INFO] [Thread-138753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] client lang: <none>
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] server lang: <none>
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] kex follows: False
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] Compression: none
2026-02-12T00:50:05.884 [DEBUG] [Thread-138753] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:50:05.894 [DEBUG] [Thread-138753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:50:05.895 [DEBUG] [Thread-138753] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:50:05.895 [DEBUG] [Thread-138753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:50:05.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:50:05.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:50:05.897 [DEBUG] [Thread-138753] [transport.py] [_log()] userauth is OK
2026-02-12T00:50:05.897 [DEBUG] [Thread-138753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:50:05.897 [DEBUG] [Thread-138753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:50:05.897 [DEBUG] [Thread-138753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:50:05.897 [DEBUG] [Thread-138753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:50:05.910 [INFO] [Thread-138753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:50:05.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:50:09.132 [DEBUG] [Thread-138753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:50:09.133 [DEBUG] [Thread-138753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:50:09.133 [DEBUG] [Thread-138753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:50:09.173 [DEBUG] [Thread-138753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:50:09.173 [DEBUG] [Thread-138753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:50:09.177 [DEBUG] [Thread-138753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:50:09.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:50:09.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:50:09.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:50:09.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:50:09.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:50:09.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:50:09.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:50:09.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:50:09.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:50:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.951176 -999.00  +13.70  19.35     92  +12.50 1 3 1 3 1     0    0 1.28 -0.25 ----- 19.4 19.4 195.2 23.0 15.6 -2.5 15.3 -3.3 15.3 -2.3 15.6 -2.6
2026-02-12T00:50:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:50:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:50:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.951176
2026-02-12T00:50:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:50:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:50:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:50:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:50:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:50:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:49:44', tmtdew=0.58, humidity=96.13, cloud=0.0, wind=23.34, temperature=13.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:49:41.606', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:50:09.203 [DEBUG] [Thread-138753] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:50:09.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:50:09.300 [DEBUG] [Thread-138756] [transport.py] [_log()] starting thread (client mode): 0xa57c1660
2026-02-12T00:50:09.300 [DEBUG] [Thread-138756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:50:09.314 [DEBUG] [Thread-138756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:50:09.314 [INFO] [Thread-138756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:50:09.324 [DEBUG] [Thread-138756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] client lang: <none>
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] server lang: <none>
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] kex follows: False
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:50:09.325 [DEBUG] [Thread-138756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:50:09.326 [DEBUG] [Thread-138756] [transport.py] [_log()] Compression: none
2026-02-12T00:50:09.326 [DEBUG] [Thread-138756] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:50:09.381 [DEBUG] [Thread-138756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:50:09.382 [DEBUG] [Thread-138756] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:50:09.382 [DEBUG] [Thread-138756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:50:09.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:50:09.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:50:09.442 [DEBUG] [Thread-138756] [transport.py] [_log()] userauth is OK
2026-02-12T00:50:09.442 [DEBUG] [Thread-138756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:50:09.442 [DEBUG] [Thread-138756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:50:09.442 [DEBUG] [Thread-138756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:50:09.442 [DEBUG] [Thread-138756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:50:09.464 [INFO] [Thread-138756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:50:09.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:50:09.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:50:10.276 [DEBUG] [Thread-138756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:50:10.276 [DEBUG] [Thread-138756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:50:10.324 [DEBUG] [Thread-138756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:50:10.325 [DEBUG] [Thread-138756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:50:10.334 [DEBUG] [Thread-138756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:50:10.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:50:10.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:50:10.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:50:10.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:50:10.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:50:10.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:50:10.371 [DEBUG] [Thread-138756] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:50:10.912 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:50:10.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:50:19.654 [DEBUG] [Thread-138758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:50:34.709 [DEBUG] [Thread-138759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:50:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:50:40.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:50:40.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:50:42.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 50, 19), 0.56, 96.23, 0.0, 24.91, 13.58, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:50:42.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:50:19
2026-02-12T00:50:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:50:43.400 [DEBUG] [Thread-138760] [transport.py] [_log()] starting thread (client mode): 0xa57c2050
2026-02-12T00:50:43.400 [DEBUG] [Thread-138760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:50:43.421 [DEBUG] [Thread-138760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:50:43.421 [INFO] [Thread-138760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:50:43.424 [DEBUG] [Thread-138760] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:50:43.424 [DEBUG] [Thread-138760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] client lang: <none>
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] server lang: <none>
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] kex follows: False
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] Compression: none
2026-02-12T00:50:43.425 [DEBUG] [Thread-138760] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:50:43.443 [DEBUG] [Thread-138760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:50:43.443 [DEBUG] [Thread-138760] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:50:43.444 [DEBUG] [Thread-138760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:50:43.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:50:43.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:50:43.446 [DEBUG] [Thread-138760] [transport.py] [_log()] userauth is OK
2026-02-12T00:50:43.446 [DEBUG] [Thread-138760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:50:43.446 [DEBUG] [Thread-138760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:50:43.446 [DEBUG] [Thread-138760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:50:43.446 [DEBUG] [Thread-138760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:50:43.467 [INFO] [Thread-138760] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:50:43.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:50:44.126 [DEBUG] [Thread-138760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:50:44.127 [DEBUG] [Thread-138760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:50:44.127 [DEBUG] [Thread-138760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:50:44.167 [DEBUG] [Thread-138760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:50:44.167 [DEBUG] [Thread-138760] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:50:44.170 [DEBUG] [Thread-138760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:50:44.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:50:44.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:50:44.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:50:44.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:50:44.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:50:44.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:50:44.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:50:44.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:50:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:50:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.951523 -999.00  +13.60  11.48     92  +12.40 1 3 1 3 1     0    0 1.28 -0.46 ----- 11.5 11.5 186.6 21.2 15.6 -2.4 15.3 -3.3 15.3 -2.6 15.6 -2.6
2026-02-12T00:50:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:50:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:50:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.951523
2026-02-12T00:50:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:50:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:50:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:50:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:50:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:50:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:50:19', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=24.91, temperature=13.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:50:11.587', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:50:44.194 [DEBUG] [Thread-138760] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:50:44.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:50:44.295 [DEBUG] [Thread-138763] [transport.py] [_log()] starting thread (client mode): 0x9eb04c40
2026-02-12T00:50:44.295 [DEBUG] [Thread-138763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:50:44.309 [DEBUG] [Thread-138763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:50:44.310 [INFO] [Thread-138763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:50:44.317 [DEBUG] [Thread-138763] [transport.py] [_log()] client lang: <none>
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] server lang: <none>
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] kex follows: False
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] Compression: none
2026-02-12T00:50:44.318 [DEBUG] [Thread-138763] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:50:44.375 [DEBUG] [Thread-138763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:50:44.376 [DEBUG] [Thread-138763] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:50:44.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:50:44.377 [DEBUG] [Thread-138763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:50:44.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:50:44.432 [DEBUG] [Thread-138763] [transport.py] [_log()] userauth is OK
2026-02-12T00:50:44.432 [DEBUG] [Thread-138763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:50:44.432 [DEBUG] [Thread-138763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:50:44.432 [DEBUG] [Thread-138763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:50:44.433 [DEBUG] [Thread-138763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:50:44.452 [INFO] [Thread-138763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:50:44.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:50:44.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:50:45.269 [DEBUG] [Thread-138763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:50:45.270 [DEBUG] [Thread-138763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:50:45.317 [DEBUG] [Thread-138763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:50:45.318 [DEBUG] [Thread-138763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:50:45.327 [DEBUG] [Thread-138763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:50:45.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:50:45.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:50:45.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:50:45.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:50:45.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:50:45.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:50:45.364 [DEBUG] [Thread-138763] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:50:49.746 [DEBUG] [Thread-138765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:50:57.271 [DEBUG] [Thread-138766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:51:04.804 [DEBUG] [Thread-138767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:51:11.117 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:51:11.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:51:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:51:15.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:51:15.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:51:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 50, 55), 0.56, 96.23, 0.0, 21.77, 13.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:51:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:50:55
2026-02-12T00:51:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:51:17.809 [DEBUG] [Thread-138768] [transport.py] [_log()] starting thread (client mode): 0xa2d94700
2026-02-12T00:51:17.809 [DEBUG] [Thread-138768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:51:17.830 [DEBUG] [Thread-138768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:51:17.830 [INFO] [Thread-138768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:51:17.833 [DEBUG] [Thread-138768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:51:17.833 [DEBUG] [Thread-138768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:51:17.833 [DEBUG] [Thread-138768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:51:17.833 [DEBUG] [Thread-138768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:17.833 [DEBUG] [Thread-138768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:17.833 [DEBUG] [Thread-138768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] client lang: <none>
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] server lang: <none>
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] kex follows: False
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] Compression: none
2026-02-12T00:51:17.834 [DEBUG] [Thread-138768] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:51:17.855 [DEBUG] [Thread-138768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:51:17.855 [DEBUG] [Thread-138768] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:51:17.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:51:17.857 [DEBUG] [Thread-138768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:51:17.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:51:17.859 [DEBUG] [Thread-138768] [transport.py] [_log()] userauth is OK
2026-02-12T00:51:17.859 [DEBUG] [Thread-138768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:51:17.859 [DEBUG] [Thread-138768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:51:17.860 [DEBUG] [Thread-138768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:51:17.860 [DEBUG] [Thread-138768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:51:17.881 [INFO] [Thread-138768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:51:17.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:51:18.535 [DEBUG] [Thread-138768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:51:18.535 [DEBUG] [Thread-138768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:51:18.535 [DEBUG] [Thread-138768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:51:18.576 [DEBUG] [Thread-138768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:51:18.577 [DEBUG] [Thread-138768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:51:18.580 [DEBUG] [Thread-138768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:51:18.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:51:18.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:51:18.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:51:18.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:51:18.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:51:18.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:51:18.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:51:18.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:51:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:51:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.951870 -999.00  +13.60  16.21     92  +12.40 1 3 1 3 1     0    0 1.23 -0.50 ----- 16.2 16.2 197.6 25.0 15.6 -2.9 15.2 -3.7 15.2 -3.0 15.6 -3.4
2026-02-12T00:51:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:51:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:51:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.951870
2026-02-12T00:51:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:51:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:51:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:51:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:51:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:51:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:50:55', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=21.77, temperature=13.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:50:41.568', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:51:18.606 [DEBUG] [Thread-138768] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:51:18.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:51:18.705 [DEBUG] [Thread-138771] [transport.py] [_log()] starting thread (client mode): 0x9eb05810
2026-02-12T00:51:18.705 [DEBUG] [Thread-138771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:51:18.719 [DEBUG] [Thread-138771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:51:18.720 [INFO] [Thread-138771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:51:18.727 [DEBUG] [Thread-138771] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:51:18.727 [DEBUG] [Thread-138771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] client lang: <none>
2026-02-12T00:51:18.728 [DEBUG] [Thread-138771] [transport.py] [_log()] server lang: <none>
2026-02-12T00:51:18.729 [DEBUG] [Thread-138771] [transport.py] [_log()] kex follows: False
2026-02-12T00:51:18.729 [DEBUG] [Thread-138771] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:51:18.729 [DEBUG] [Thread-138771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:51:18.729 [DEBUG] [Thread-138771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:51:18.729 [DEBUG] [Thread-138771] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:51:18.729 [DEBUG] [Thread-138771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:51:18.729 [DEBUG] [Thread-138771] [transport.py] [_log()] Compression: none
2026-02-12T00:51:18.730 [DEBUG] [Thread-138771] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:51:18.788 [DEBUG] [Thread-138771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:51:18.789 [DEBUG] [Thread-138771] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:51:18.789 [DEBUG] [Thread-138771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:51:18.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:51:18.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:51:18.844 [DEBUG] [Thread-138771] [transport.py] [_log()] userauth is OK
2026-02-12T00:51:18.844 [DEBUG] [Thread-138771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:51:18.844 [DEBUG] [Thread-138771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:51:18.844 [DEBUG] [Thread-138771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:51:18.844 [DEBUG] [Thread-138771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:51:18.863 [INFO] [Thread-138771] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:51:18.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:51:18.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:51:19.686 [DEBUG] [Thread-138771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:51:19.687 [DEBUG] [Thread-138771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:51:19.734 [DEBUG] [Thread-138771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:51:19.735 [DEBUG] [Thread-138771] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:51:19.744 [DEBUG] [Thread-138771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:51:19.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:51:19.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:51:19.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:51:19.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:51:19.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:51:19.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:51:19.781 [DEBUG] [Thread-138771] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:51:19.840 [DEBUG] [Thread-138773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:51:34.884 [DEBUG] [Thread-138774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:51:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:51:49.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:51:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:51:49.920 [DEBUG] [Thread-138775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:51:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 51, 30), 0.37, 97.5, 0.0, 20.64, 8.84, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:51:51.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:51:30
2026-02-12T00:51:52.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:51:52.200 [DEBUG] [Thread-138776] [transport.py] [_log()] starting thread (client mode): 0x9eb07100
2026-02-12T00:51:52.200 [DEBUG] [Thread-138776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:51:52.220 [DEBUG] [Thread-138776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:51:52.220 [INFO] [Thread-138776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:51:52.223 [DEBUG] [Thread-138776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:51:52.223 [DEBUG] [Thread-138776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:51:52.223 [DEBUG] [Thread-138776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:51:52.223 [DEBUG] [Thread-138776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:52.223 [DEBUG] [Thread-138776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:52.223 [DEBUG] [Thread-138776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] client lang: <none>
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] server lang: <none>
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] kex follows: False
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] Compression: none
2026-02-12T00:51:52.224 [DEBUG] [Thread-138776] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:51:52.243 [DEBUG] [Thread-138776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:51:52.243 [DEBUG] [Thread-138776] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:51:52.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:51:52.245 [DEBUG] [Thread-138776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:51:52.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:51:52.247 [DEBUG] [Thread-138776] [transport.py] [_log()] userauth is OK
2026-02-12T00:51:52.247 [DEBUG] [Thread-138776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:51:52.247 [DEBUG] [Thread-138776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:51:52.248 [DEBUG] [Thread-138776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:51:52.248 [DEBUG] [Thread-138776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:51:52.264 [INFO] [Thread-138776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:51:52.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:51:52.890 [DEBUG] [Thread-138776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:51:52.891 [DEBUG] [Thread-138776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:51:52.891 [DEBUG] [Thread-138776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:51:52.931 [DEBUG] [Thread-138776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:51:52.931 [DEBUG] [Thread-138776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:51:52.934 [DEBUG] [Thread-138776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:51:52.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:51:52.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:51:52.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:51:52.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:51:52.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:51:52.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:51:52.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:51:52.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:51:52.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:51:52.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.952217 -999.00  +13.60  14.31     92  +12.40 1 3 1 3 1     0    0 1.24 -0.59 ----- 14.3 14.3 191.2 21.8 15.5 -3.2 15.3 -3.4 15.2 -3.3 15.6 -3.5
2026-02-12T00:51:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:51:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:51:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.952217
2026-02-12T00:51:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:51:52.958 [DEBUG] [Thread-138776] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:51:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:51:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:51:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:51:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:51:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:51:30', tmtdew=0.37, humidity=97.5, cloud=0.0, wind=20.64, temperature=8.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:51:11.549', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:51:53.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:51:53.069 [DEBUG] [Thread-138779] [transport.py] [_log()] starting thread (client mode): 0xa2d9d180
2026-02-12T00:51:53.069 [DEBUG] [Thread-138779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:51:53.085 [DEBUG] [Thread-138779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:51:53.085 [INFO] [Thread-138779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:51:53.092 [DEBUG] [Thread-138779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:51:53.092 [DEBUG] [Thread-138779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:51:53.092 [DEBUG] [Thread-138779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:51:53.092 [DEBUG] [Thread-138779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:53.092 [DEBUG] [Thread-138779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:51:53.092 [DEBUG] [Thread-138779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] client lang: <none>
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] server lang: <none>
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] kex follows: False
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] Compression: none
2026-02-12T00:51:53.093 [DEBUG] [Thread-138779] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:51:53.150 [DEBUG] [Thread-138779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:51:53.151 [DEBUG] [Thread-138779] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:51:53.151 [DEBUG] [Thread-138779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:51:53.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:51:53.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:51:53.208 [DEBUG] [Thread-138779] [transport.py] [_log()] userauth is OK
2026-02-12T00:51:53.208 [DEBUG] [Thread-138779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:51:53.208 [DEBUG] [Thread-138779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:51:53.208 [DEBUG] [Thread-138779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:51:53.208 [DEBUG] [Thread-138779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:51:53.226 [INFO] [Thread-138779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:51:53.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:51:53.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:51:54.032 [DEBUG] [Thread-138779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:51:54.033 [DEBUG] [Thread-138779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:51:54.080 [DEBUG] [Thread-138779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:51:54.081 [DEBUG] [Thread-138779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:51:54.090 [DEBUG] [Thread-138779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:51:54.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:51:54.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')
2026-02-12T00:51:54.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:51:54.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:51:54.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:51:54.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:51:54.122 [DEBUG] [Thread-138779] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:51:57.341 [DEBUG] [Thread-138781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:04.956 [DEBUG] [Thread-138782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:11.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:11.334 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:20.007 [DEBUG] [Thread-138783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:24.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:52:24.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:52: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
2026-02-12T00:52:25.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 52, 6), 0.37, 97.54, 0.0, 19.52, 8.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:52:25.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:52:06
2026-02-12T00:52:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:52:26.428 [DEBUG] [Thread-138784] [transport.py] [_log()] starting thread (client mode): 0xa2dc2da0
2026-02-12T00:52:26.429 [DEBUG] [Thread-138784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:52:26.448 [DEBUG] [Thread-138784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:52:26.448 [INFO] [Thread-138784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:52:26.451 [DEBUG] [Thread-138784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:52:26.451 [DEBUG] [Thread-138784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:52:26.451 [DEBUG] [Thread-138784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:52:26.451 [DEBUG] [Thread-138784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:52:26.451 [DEBUG] [Thread-138784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:52:26.451 [DEBUG] [Thread-138784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] client lang: <none>
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] server lang: <none>
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] kex follows: False
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] Compression: none
2026-02-12T00:52:26.452 [DEBUG] [Thread-138784] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:52:26.470 [DEBUG] [Thread-138784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:52:26.470 [DEBUG] [Thread-138784] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:52:26.471 [DEBUG] [Thread-138784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:52:26.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:52:26.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:52:26.473 [DEBUG] [Thread-138784] [transport.py] [_log()] userauth is OK
2026-02-12T00:52:26.473 [DEBUG] [Thread-138784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:52:26.473 [DEBUG] [Thread-138784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:52:26.474 [DEBUG] [Thread-138784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:52:26.474 [DEBUG] [Thread-138784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:52:26.497 [INFO] [Thread-138784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:52:26.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:52:27.125 [DEBUG] [Thread-138784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:52:27.125 [DEBUG] [Thread-138784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:52:27.125 [DEBUG] [Thread-138784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:52:27.165 [DEBUG] [Thread-138784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:52:27.166 [DEBUG] [Thread-138784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:52:27.169 [DEBUG] [Thread-138784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:52:27.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:52:27.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:52:27.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:52:27.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:52:27.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:52:27.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:52:27.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:52:27.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:52:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:52:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.952912 -999.00  +13.50  19.85     92  +12.40 1 3 1 3 1     0    0 1.21 -0.83 ----- 19.9 19.9 199.4 21.7 15.6 -3.1 15.3 -3.7 15.2 -3.9 15.5 -3.6
2026-02-12T00:52:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:52:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:52:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.952912
2026-02-12T00:52:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:52:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:52:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:52:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:52:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:52:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:52:06', tmtdew=0.37, humidity=97.54, cloud=0.0, wind=19.52, temperature=8.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:52:11.597', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:52:27.197 [DEBUG] [Thread-138784] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:52:27.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:52:27.294 [DEBUG] [Thread-138787] [transport.py] [_log()] starting thread (client mode): 0x9eb06950
2026-02-12T00:52:27.294 [DEBUG] [Thread-138787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:52:27.309 [DEBUG] [Thread-138787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:52:27.309 [INFO] [Thread-138787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:52:27.317 [DEBUG] [Thread-138787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:52:27.317 [DEBUG] [Thread-138787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:52:27.317 [DEBUG] [Thread-138787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:52:27.317 [DEBUG] [Thread-138787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:52:27.317 [DEBUG] [Thread-138787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:52:27.317 [DEBUG] [Thread-138787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:52:27.317 [DEBUG] [Thread-138787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] client lang: <none>
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] server lang: <none>
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] kex follows: False
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] Compression: none
2026-02-12T00:52:27.318 [DEBUG] [Thread-138787] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:52:27.375 [DEBUG] [Thread-138787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:52:27.375 [DEBUG] [Thread-138787] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:52:27.376 [DEBUG] [Thread-138787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:52:27.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:52:27.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:52:27.431 [DEBUG] [Thread-138787] [transport.py] [_log()] userauth is OK
2026-02-12T00:52:27.431 [DEBUG] [Thread-138787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:52:27.431 [DEBUG] [Thread-138787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:52:27.431 [DEBUG] [Thread-138787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:52:27.431 [DEBUG] [Thread-138787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:52:27.450 [INFO] [Thread-138787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:52:27.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:52:27.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:52:28.302 [DEBUG] [Thread-138787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:52:28.303 [DEBUG] [Thread-138787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:52:28.353 [DEBUG] [Thread-138787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:52:28.353 [DEBUG] [Thread-138787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:52:28.369 [DEBUG] [Thread-138787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:52:28.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:52:28.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:52:28.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:52:28.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:52:28.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:52:28.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:52:28.413 [DEBUG] [Thread-138787] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:52:35.045 [DEBUG] [Thread-138789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:50.099 [DEBUG] [Thread-138790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:57.413 [DEBUG] [Thread-138791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:52:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:52:58.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:52:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:53:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 52, 41), 0.5, 96.81, 0.0, 23.82, 6.76, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:53:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:52:41
2026-02-12T00:53:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:53:00.840 [DEBUG] [Thread-138792] [transport.py] [_log()] starting thread (client mode): 0xa2dc1330
2026-02-12T00:53:00.840 [DEBUG] [Thread-138792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:53:00.862 [DEBUG] [Thread-138792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:53:00.862 [INFO] [Thread-138792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] client lang: <none>
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] server lang: <none>
2026-02-12T00:53:00.865 [DEBUG] [Thread-138792] [transport.py] [_log()] kex follows: False
2026-02-12T00:53:00.866 [DEBUG] [Thread-138792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:53:00.866 [DEBUG] [Thread-138792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:53:00.866 [DEBUG] [Thread-138792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:53:00.866 [DEBUG] [Thread-138792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:53:00.866 [DEBUG] [Thread-138792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:53:00.866 [DEBUG] [Thread-138792] [transport.py] [_log()] Compression: none
2026-02-12T00:53:00.866 [DEBUG] [Thread-138792] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:53:00.884 [DEBUG] [Thread-138792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:53:00.885 [DEBUG] [Thread-138792] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:53:00.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:53:00.886 [DEBUG] [Thread-138792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:53:00.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:53:00.889 [DEBUG] [Thread-138792] [transport.py] [_log()] userauth is OK
2026-02-12T00:53:00.889 [DEBUG] [Thread-138792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:53:00.889 [DEBUG] [Thread-138792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:53:00.889 [DEBUG] [Thread-138792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:53:00.889 [DEBUG] [Thread-138792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:53:00.925 [INFO] [Thread-138792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:53:00.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:53:01.539 [DEBUG] [Thread-138792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:53:01.539 [DEBUG] [Thread-138792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:53:01.540 [DEBUG] [Thread-138792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:53:01.581 [DEBUG] [Thread-138792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:53:01.581 [DEBUG] [Thread-138792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:53:01.584 [DEBUG] [Thread-138792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:53:01.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:53:01.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:53:01.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:53:01.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:53:01.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:53:01.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:53:01.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:53:01.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:53:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:53:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.953259 -999.00  +13.50  14.23     92  +12.40 1 3 1 3 1     0    0 1.22 -1.42 ----- 14.2 14.2 198.7 25.4 15.6 -4.1 15.2 -6.0 15.2 -5.8 15.5 -6.1
2026-02-12T00:53:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:53:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:53:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.953259
2026-02-12T00:53:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:53:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:53:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:53:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:53:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:53:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:52:41', tmtdew=0.5, humidity=96.81, cloud=0.0, wind=23.82, temperature=6.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:52:41.578', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:53:01.607 [DEBUG] [Thread-138792] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:53:01.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:53:01.705 [DEBUG] [Thread-138795] [transport.py] [_log()] starting thread (client mode): 0xa2dc12d0
2026-02-12T00:53:01.705 [DEBUG] [Thread-138795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:53:01.721 [DEBUG] [Thread-138795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:53:01.721 [INFO] [Thread-138795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:53:01.729 [DEBUG] [Thread-138795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:53:01.729 [DEBUG] [Thread-138795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:53:01.729 [DEBUG] [Thread-138795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] client lang: <none>
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] server lang: <none>
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] kex follows: False
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:53:01.730 [DEBUG] [Thread-138795] [transport.py] [_log()] Compression: none
2026-02-12T00:53:01.731 [DEBUG] [Thread-138795] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:53:01.786 [DEBUG] [Thread-138795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:53:01.787 [DEBUG] [Thread-138795] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:53:01.787 [DEBUG] [Thread-138795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:53:01.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:53:01.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:53:01.843 [DEBUG] [Thread-138795] [transport.py] [_log()] userauth is OK
2026-02-12T00:53:01.843 [DEBUG] [Thread-138795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:53:01.843 [DEBUG] [Thread-138795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:53:01.843 [DEBUG] [Thread-138795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:53:01.843 [DEBUG] [Thread-138795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:53:01.862 [INFO] [Thread-138795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:53:01.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:53:01.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:53:02.709 [DEBUG] [Thread-138795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:53:02.710 [DEBUG] [Thread-138795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:53:02.757 [DEBUG] [Thread-138795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:53:02.757 [DEBUG] [Thread-138795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:53:02.767 [DEBUG] [Thread-138795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:53:02.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:53:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:53:02.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:53:02.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:53:02.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:53:02.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:53:02.803 [DEBUG] [Thread-138795] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:53:05.135 [DEBUG] [Thread-138797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:53:11.540 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:53:11.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:53:20.191 [DEBUG] [Thread-138798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:53:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:53:32.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:53:32.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:53:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 53, 17), 0.36, 97.56, 0.0, 22.07, 8.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:53:34.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:53:17
2026-02-12T00:53:34.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:53:35.115 [DEBUG] [Thread-138799] [transport.py] [_log()] starting thread (client mode): 0x9eb06fe0
2026-02-12T00:53:35.116 [DEBUG] [Thread-138799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:53:35.136 [DEBUG] [Thread-138799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:53:35.136 [INFO] [Thread-138799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:53:35.139 [DEBUG] [Thread-138799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:53:35.139 [DEBUG] [Thread-138799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:53:35.139 [DEBUG] [Thread-138799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:53:35.139 [DEBUG] [Thread-138799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:35.139 [DEBUG] [Thread-138799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] client lang: <none>
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] server lang: <none>
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] kex follows: False
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] Compression: none
2026-02-12T00:53:35.140 [DEBUG] [Thread-138799] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:53:35.158 [DEBUG] [Thread-138799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:53:35.158 [DEBUG] [Thread-138799] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:53:35.159 [DEBUG] [Thread-138799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:53:35.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:53:35.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:53:35.201 [DEBUG] [Thread-138799] [transport.py] [_log()] userauth is OK
2026-02-12T00:53:35.201 [DEBUG] [Thread-138799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:53:35.201 [DEBUG] [Thread-138799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:53:35.201 [DEBUG] [Thread-138799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:53:35.201 [DEBUG] [Thread-138799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:53:35.222 [INFO] [Thread-138799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:53:35.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:53:35.225 [DEBUG] [Thread-138801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:53:35.851 [DEBUG] [Thread-138799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:53:35.851 [DEBUG] [Thread-138799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:53:35.851 [DEBUG] [Thread-138799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:53:35.891 [DEBUG] [Thread-138799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:53:35.892 [DEBUG] [Thread-138799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:53:35.895 [DEBUG] [Thread-138799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:53:35.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:53:35.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:53:35.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:53:35.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:53:35.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:53:35.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:53:35.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:53:35.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:53:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:53:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.953606 -999.00  +13.50  16.06     92  +12.40 1 3 1 3 1     0    0 1.19 -2.36 ----- 16.1 16.1 193.2 21.0 15.4 -6.7 15.2 -8.7 15.2 -9.4 15.5 -9.9
2026-02-12T00:53:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:53:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:53:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.953606
2026-02-12T00:53:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:53:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:53:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:53:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:53:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:53:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:53:17', tmtdew=0.36, humidity=97.56, cloud=0.0, wind=22.07, temperature=8.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:53:11.558', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:53:35.922 [DEBUG] [Thread-138799] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:53:36.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:53:36.018 [DEBUG] [Thread-138803] [transport.py] [_log()] starting thread (client mode): 0xa57e30d0
2026-02-12T00:53:36.018 [DEBUG] [Thread-138803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:53:36.032 [DEBUG] [Thread-138803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:53:36.033 [INFO] [Thread-138803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:53:36.040 [DEBUG] [Thread-138803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:53:36.040 [DEBUG] [Thread-138803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] client lang: <none>
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] server lang: <none>
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] kex follows: False
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] Compression: none
2026-02-12T00:53:36.041 [DEBUG] [Thread-138803] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:53:36.098 [DEBUG] [Thread-138803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:53:36.098 [DEBUG] [Thread-138803] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:53:36.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:53:36.100 [DEBUG] [Thread-138803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:53:36.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:53:36.154 [DEBUG] [Thread-138803] [transport.py] [_log()] userauth is OK
2026-02-12T00:53:36.154 [DEBUG] [Thread-138803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:53:36.155 [DEBUG] [Thread-138803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:53:36.155 [DEBUG] [Thread-138803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:53:36.155 [DEBUG] [Thread-138803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:53:36.174 [INFO] [Thread-138803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:53:36.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:53:36.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:53:36.977 [DEBUG] [Thread-138803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:53:36.977 [DEBUG] [Thread-138803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:53:37.025 [DEBUG] [Thread-138803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:53:37.026 [DEBUG] [Thread-138803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:53:37.035 [DEBUG] [Thread-138803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:53:37.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:53:37.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:53:37.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:53:37.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:53:37.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:53:37.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:53:37.071 [DEBUG] [Thread-138803] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:53:50.263 [DEBUG] [Thread-138805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:53:57.485 [DEBUG] [Thread-138806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:54:05.315 [DEBUG] [Thread-138807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:54:07.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:54:07.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:54:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:54:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 53, 52), 0.36, 97.59, 0.0, 19.92, 8.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:54:08.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:53:52
2026-02-12T00:54:09.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:54:09.319 [DEBUG] [Thread-138808] [transport.py] [_log()] starting thread (client mode): 0xa2d95ed0
2026-02-12T00:54:09.320 [DEBUG] [Thread-138808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:54:09.341 [DEBUG] [Thread-138808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:54:09.341 [INFO] [Thread-138808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] client lang: <none>
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] server lang: <none>
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] kex follows: False
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:54:09.344 [DEBUG] [Thread-138808] [transport.py] [_log()] Compression: none
2026-02-12T00:54:09.345 [DEBUG] [Thread-138808] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:54:09.361 [DEBUG] [Thread-138808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:54:09.362 [DEBUG] [Thread-138808] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:54:09.362 [DEBUG] [Thread-138808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:54:09.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:54:09.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:54:09.364 [DEBUG] [Thread-138808] [transport.py] [_log()] userauth is OK
2026-02-12T00:54:09.364 [DEBUG] [Thread-138808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:54:09.364 [DEBUG] [Thread-138808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:54:09.365 [DEBUG] [Thread-138808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:54:09.365 [DEBUG] [Thread-138808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:54:09.383 [INFO] [Thread-138808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:54:09.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:54:10.031 [DEBUG] [Thread-138808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:54:10.031 [DEBUG] [Thread-138808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:54:10.032 [DEBUG] [Thread-138808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:54:10.072 [DEBUG] [Thread-138808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:54:10.073 [DEBUG] [Thread-138808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:54:10.076 [DEBUG] [Thread-138808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:54:10.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:54:10.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:54:10.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:54:10.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:54:10.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:54:10.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:54:10.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:54:10.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:54:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:54:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.953954 -999.00  +13.50  13.17     92  +12.30 1 3 1 3 1     0    0 1.18 -2.59 ----- 13.2 13.2 185.0 20.4 15.4 -9.8 15.1 -10.8 15.2 -10.9 15.4 -10.9
2026-02-12T00:54:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:54:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:54:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.953954
2026-02-12T00:54:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:54:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:54:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:54:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:54:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:54:10.105 [DEBUG] [Thread-138808] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:54:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:53:52', tmtdew=0.36, humidity=97.59, cloud=0.0, wind=19.92, temperature=8.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:53:41.626', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:54:10.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:54:10.200 [DEBUG] [Thread-138811] [transport.py] [_log()] starting thread (client mode): 0xa57d7160
2026-02-12T00:54:10.201 [DEBUG] [Thread-138811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:54:10.219 [DEBUG] [Thread-138811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:54:10.219 [INFO] [Thread-138811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:54:10.226 [DEBUG] [Thread-138811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:54:10.227 [DEBUG] [Thread-138811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:54:10.227 [DEBUG] [Thread-138811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:54:10.227 [DEBUG] [Thread-138811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:10.227 [DEBUG] [Thread-138811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:10.227 [DEBUG] [Thread-138811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:10.227 [DEBUG] [Thread-138811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] client lang: <none>
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] server lang: <none>
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] kex follows: False
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:54:10.228 [DEBUG] [Thread-138811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:54:10.229 [DEBUG] [Thread-138811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:54:10.229 [DEBUG] [Thread-138811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:54:10.229 [DEBUG] [Thread-138811] [transport.py] [_log()] Compression: none
2026-02-12T00:54:10.229 [DEBUG] [Thread-138811] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:54:10.287 [DEBUG] [Thread-138811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:54:10.288 [DEBUG] [Thread-138811] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:54:10.288 [DEBUG] [Thread-138811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:54:10.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:54:10.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:54:10.346 [DEBUG] [Thread-138811] [transport.py] [_log()] userauth is OK
2026-02-12T00:54:10.347 [DEBUG] [Thread-138811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:54:10.347 [DEBUG] [Thread-138811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:54:10.347 [DEBUG] [Thread-138811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:54:10.347 [DEBUG] [Thread-138811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:54:10.365 [INFO] [Thread-138811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:54:10.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:54:10.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:54:11.177 [DEBUG] [Thread-138811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:54:11.177 [DEBUG] [Thread-138811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:54:11.225 [DEBUG] [Thread-138811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:54:11.226 [DEBUG] [Thread-138811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:54:11.235 [DEBUG] [Thread-138811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:54:11.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:54:11.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:54:11.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:54:11.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:54:11.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:54:11.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:54:11.276 [DEBUG] [Thread-138811] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:54:11.758 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:54:11.759 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:54:20.355 [DEBUG] [Thread-138813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:54:35.405 [DEBUG] [Thread-138814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:54:41.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:54:41.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:54:41.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:54:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 54, 28), 0.35, 97.61, 0.0, 20.36, 8.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:54:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:54:28
2026-02-12T00:54:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:54:43.628 [DEBUG] [Thread-138815] [transport.py] [_log()] starting thread (client mode): 0xa57d48e0
2026-02-12T00:54:43.628 [DEBUG] [Thread-138815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:54:43.649 [DEBUG] [Thread-138815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:54:43.649 [INFO] [Thread-138815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:54:43.650 [DEBUG] [Thread-138815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] client lang: <none>
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] server lang: <none>
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] kex follows: False
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] Compression: none
2026-02-12T00:54:43.651 [DEBUG] [Thread-138815] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:54:43.665 [DEBUG] [Thread-138815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:54:43.665 [DEBUG] [Thread-138815] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:54:43.666 [DEBUG] [Thread-138815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:54:43.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:54:43.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:54:43.667 [DEBUG] [Thread-138815] [transport.py] [_log()] userauth is OK
2026-02-12T00:54:43.667 [DEBUG] [Thread-138815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:54:43.667 [DEBUG] [Thread-138815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:54:43.667 [DEBUG] [Thread-138815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:54:43.667 [DEBUG] [Thread-138815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:54:43.686 [INFO] [Thread-138815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:54:43.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:54:44.441 [DEBUG] [Thread-138815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:54:44.441 [DEBUG] [Thread-138815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:54:44.441 [DEBUG] [Thread-138815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:54:44.481 [DEBUG] [Thread-138815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:54:44.481 [DEBUG] [Thread-138815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:54:44.483 [DEBUG] [Thread-138815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:54:44.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:54:44.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:54:44.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:54:44.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:54:44.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:54:44.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:54:44.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:54:44.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:54:44.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:54:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.954301 -999.00  +13.50  11.54     92  +12.30 1 3 1 3 1     0    0 1.15 -2.66 ----- 11.5 11.5 186.6 21.9 15.4 -10.0 15.0 -10.4 15.0 -11.2 15.4 -11.8
2026-02-12T00:54:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:54:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:54:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.954301
2026-02-12T00:54:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:54:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:54:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:54:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:54:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:54:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:54:28', tmtdew=0.35, humidity=97.61, cloud=0.0, wind=20.36, temperature=8.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:54:11.606', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:54:44.507 [DEBUG] [Thread-138815] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:54:44.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:54:44.603 [DEBUG] [Thread-138818] [transport.py] [_log()] starting thread (client mode): 0xa57d7130
2026-02-12T00:54:44.604 [DEBUG] [Thread-138818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:54:44.618 [DEBUG] [Thread-138818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:54:44.618 [INFO] [Thread-138818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:54:44.625 [DEBUG] [Thread-138818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:54:44.625 [DEBUG] [Thread-138818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:54:44.625 [DEBUG] [Thread-138818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] client lang: <none>
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] server lang: <none>
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] kex follows: False
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:54:44.626 [DEBUG] [Thread-138818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:54:44.627 [DEBUG] [Thread-138818] [transport.py] [_log()] Compression: none
2026-02-12T00:54:44.627 [DEBUG] [Thread-138818] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:54:44.686 [DEBUG] [Thread-138818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:54:44.686 [DEBUG] [Thread-138818] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:54:44.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:54:44.687 [DEBUG] [Thread-138818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:54:44.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:54:44.742 [DEBUG] [Thread-138818] [transport.py] [_log()] userauth is OK
2026-02-12T00:54:44.742 [DEBUG] [Thread-138818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:54:44.742 [DEBUG] [Thread-138818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:54:44.743 [DEBUG] [Thread-138818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:54:44.743 [DEBUG] [Thread-138818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:54:44.761 [INFO] [Thread-138818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:54:44.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:54:44.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:54:45.578 [DEBUG] [Thread-138818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:54:45.579 [DEBUG] [Thread-138818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:54:45.626 [DEBUG] [Thread-138818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:54:45.627 [DEBUG] [Thread-138818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:54:45.636 [DEBUG] [Thread-138818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:54:45.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:54:45.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:54:45.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:54:45.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:54:45.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:54:45.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:54:45.672 [DEBUG] [Thread-138818] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:54:50.441 [DEBUG] [Thread-138820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:54:57.563 [DEBUG] [Thread-138821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:55:05.484 [DEBUG] [Thread-138822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:55:11.970 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:55:11.972 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:55:15.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:55:15.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:55:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:55:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 55, 3), 0.36, 97.59, 0.0, 20.57, 8.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:55:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:55:03
2026-02-12T00:55:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:55:17.987 [DEBUG] [Thread-138823] [transport.py] [_log()] starting thread (client mode): 0xa57d4700
2026-02-12T00:55:17.987 [DEBUG] [Thread-138823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:55:18.006 [DEBUG] [Thread-138823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:55:18.007 [INFO] [Thread-138823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] client lang: <none>
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] server lang: <none>
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] kex follows: False
2026-02-12T00:55:18.010 [DEBUG] [Thread-138823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:55:18.011 [DEBUG] [Thread-138823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:55:18.011 [DEBUG] [Thread-138823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:55:18.011 [DEBUG] [Thread-138823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:55:18.011 [DEBUG] [Thread-138823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:55:18.011 [DEBUG] [Thread-138823] [transport.py] [_log()] Compression: none
2026-02-12T00:55:18.011 [DEBUG] [Thread-138823] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:55:18.031 [DEBUG] [Thread-138823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:55:18.032 [DEBUG] [Thread-138823] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:55:18.032 [DEBUG] [Thread-138823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:55:18.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:55:18.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:55:18.034 [DEBUG] [Thread-138823] [transport.py] [_log()] userauth is OK
2026-02-12T00:55:18.035 [DEBUG] [Thread-138823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:55:18.035 [DEBUG] [Thread-138823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:55:18.035 [DEBUG] [Thread-138823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:55:18.035 [DEBUG] [Thread-138823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:55:18.070 [INFO] [Thread-138823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:55:18.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:55:18.708 [DEBUG] [Thread-138823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:55:18.709 [DEBUG] [Thread-138823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:55:18.709 [DEBUG] [Thread-138823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:55:18.749 [DEBUG] [Thread-138823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:55:18.749 [DEBUG] [Thread-138823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:55:18.752 [DEBUG] [Thread-138823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:55:18.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:55:18.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:55:18.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:55:18.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:55:18.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:55:18.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:55:18.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:55:18.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:55:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:55:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.954648 -999.00  +13.50  12.63     92  +12.30 1 2 1 3 1     0    0 1.17 -2.94 Z..SW 12.6 12.6 178.4 16.3 15.3 -10.4 15.1 -10.3 15.0 -11.2 15.4 -12.4
2026-02-12T00:55:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:55:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:55:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.954648
2026-02-12T00:55:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:55:18.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:55:18.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:55:18.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:55:18.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T00:55:18.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:55:03', tmtdew=0.36, humidity=97.59, cloud=0.0, wind=20.57, temperature=8.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:54:41.587', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:55:18.775 [DEBUG] [Thread-138823] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:55:18.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:55:18.874 [DEBUG] [Thread-138826] [transport.py] [_log()] starting thread (client mode): 0xa57d4cd0
2026-02-12T00:55:18.874 [DEBUG] [Thread-138826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:55:18.888 [DEBUG] [Thread-138826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:55:18.888 [INFO] [Thread-138826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:55:18.896 [DEBUG] [Thread-138826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:55:18.896 [DEBUG] [Thread-138826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:55:18.896 [DEBUG] [Thread-138826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:55:18.896 [DEBUG] [Thread-138826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] client lang: <none>
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] server lang: <none>
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] kex follows: False
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] Compression: none
2026-02-12T00:55:18.897 [DEBUG] [Thread-138826] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:55:18.953 [DEBUG] [Thread-138826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:55:18.954 [DEBUG] [Thread-138826] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:55:18.954 [DEBUG] [Thread-138826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:55:18.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:55:18.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:55:19.009 [DEBUG] [Thread-138826] [transport.py] [_log()] userauth is OK
2026-02-12T00:55:19.009 [DEBUG] [Thread-138826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:55:19.009 [DEBUG] [Thread-138826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:55:19.009 [DEBUG] [Thread-138826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:55:19.010 [DEBUG] [Thread-138826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:55:19.027 [INFO] [Thread-138826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:55:19.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:55:19.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:55:19.870 [DEBUG] [Thread-138826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:55:19.871 [DEBUG] [Thread-138826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:55:19.918 [DEBUG] [Thread-138826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:55:19.918 [DEBUG] [Thread-138826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:55:19.931 [DEBUG] [Thread-138826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:55:19.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:55:19.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:55:19.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:55:19.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:55:19.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:55:19.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:55:19.965 [DEBUG] [Thread-138826] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:55:20.518 [DEBUG] [Thread-138828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:55:35.566 [DEBUG] [Thread-138829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:55:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:55:49.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:55:49.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:55:50.605 [DEBUG] [Thread-138830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:55:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 55, 38), 0.49, 96.88, 0.0, 22.87, 6.66, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:55:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:55:38
2026-02-12T00:55:52.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:55:52.266 [DEBUG] [Thread-138831] [transport.py] [_log()] starting thread (client mode): 0xa2d947c0
2026-02-12T00:55:52.266 [DEBUG] [Thread-138831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:55:52.286 [DEBUG] [Thread-138831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:55:52.286 [INFO] [Thread-138831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:55:52.289 [DEBUG] [Thread-138831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:55:52.289 [DEBUG] [Thread-138831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:55:52.289 [DEBUG] [Thread-138831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] client lang: <none>
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] server lang: <none>
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] kex follows: False
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:55:52.290 [DEBUG] [Thread-138831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:55:52.291 [DEBUG] [Thread-138831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:55:52.291 [DEBUG] [Thread-138831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:55:52.291 [DEBUG] [Thread-138831] [transport.py] [_log()] Compression: none
2026-02-12T00:55:52.291 [DEBUG] [Thread-138831] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:55:52.308 [DEBUG] [Thread-138831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:55:52.309 [DEBUG] [Thread-138831] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:55:52.309 [DEBUG] [Thread-138831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:55:52.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:55:52.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:55:52.312 [DEBUG] [Thread-138831] [transport.py] [_log()] userauth is OK
2026-02-12T00:55:52.312 [DEBUG] [Thread-138831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:55:52.312 [DEBUG] [Thread-138831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:55:52.312 [DEBUG] [Thread-138831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:55:52.313 [DEBUG] [Thread-138831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:55:52.331 [INFO] [Thread-138831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:55:52.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:55:52.961 [DEBUG] [Thread-138831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:55:52.961 [DEBUG] [Thread-138831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:55:52.961 [DEBUG] [Thread-138831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:55:53.002 [DEBUG] [Thread-138831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:55:53.002 [DEBUG] [Thread-138831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:55:53.005 [DEBUG] [Thread-138831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:55:53.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:55:53.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:55:53.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:55:53.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:55:53.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:55:53.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:55:53.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:55:53.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:55:53.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.955342 -999.00  +13.40  13.38     92  +12.30 1 2 1 3 1     0    0 1.12 -3.63 Z...W 13.4 13.4 180.8 21.5 15.2 -10.7 15.0 -10.1 15.0 -10.6 15.3 -11.5
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.955342
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T00:55:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:55:38', tmtdew=0.49, humidity=96.88, cloud=0.0, wind=22.87, temperature=6.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:55:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:55:53.027 [DEBUG] [Thread-138831] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:55:53.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:55:53.116 [DEBUG] [Thread-138834] [transport.py] [_log()] starting thread (client mode): 0xa2d979a0
2026-02-12T00:55:53.116 [DEBUG] [Thread-138834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:55:53.130 [DEBUG] [Thread-138834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:55:53.130 [INFO] [Thread-138834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:55:53.138 [DEBUG] [Thread-138834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:55:53.138 [DEBUG] [Thread-138834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:55:53.138 [DEBUG] [Thread-138834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:55:53.138 [DEBUG] [Thread-138834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] client lang: <none>
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] server lang: <none>
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] kex follows: False
2026-02-12T00:55:53.139 [DEBUG] [Thread-138834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:55:53.140 [DEBUG] [Thread-138834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:55:53.140 [DEBUG] [Thread-138834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:55:53.140 [DEBUG] [Thread-138834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:55:53.140 [DEBUG] [Thread-138834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:55:53.140 [DEBUG] [Thread-138834] [transport.py] [_log()] Compression: none
2026-02-12T00:55:53.140 [DEBUG] [Thread-138834] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:55:53.197 [DEBUG] [Thread-138834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:55:53.197 [DEBUG] [Thread-138834] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:55:53.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:55:53.198 [DEBUG] [Thread-138834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:55:53.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:55:53.253 [DEBUG] [Thread-138834] [transport.py] [_log()] userauth is OK
2026-02-12T00:55:53.254 [DEBUG] [Thread-138834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:55:53.254 [DEBUG] [Thread-138834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:55:53.263 [DEBUG] [Thread-138834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:55:53.263 [DEBUG] [Thread-138834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:55:53.288 [INFO] [Thread-138834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:55:53.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:55:53.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:55:54.087 [DEBUG] [Thread-138834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:55:54.087 [DEBUG] [Thread-138834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:55:54.135 [DEBUG] [Thread-138834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:55:54.135 [DEBUG] [Thread-138834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:55:54.144 [DEBUG] [Thread-138834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:55:54.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:55:54.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:55:54.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:55:54.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:55:54.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:55:54.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:55:54.179 [DEBUG] [Thread-138834] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:55:57.648 [DEBUG] [Thread-138836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:05.645 [DEBUG] [Thread-138837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:12.176 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:12.178 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:20.697 [DEBUG] [Thread-138838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:56:24.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:56:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:56:26.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 56, 14), 0.35, 97.64, 0.0, 17.98, 8.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:56:26.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:56:14
2026-02-12T00:56:26.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:56:26.648 [DEBUG] [Thread-138839] [transport.py] [_log()] starting thread (client mode): 0xa57d6290
2026-02-12T00:56:26.648 [DEBUG] [Thread-138839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:56:26.667 [DEBUG] [Thread-138839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:56:26.667 [INFO] [Thread-138839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:56:26.670 [DEBUG] [Thread-138839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] client lang: <none>
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] server lang: <none>
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] kex follows: False
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:56:26.671 [DEBUG] [Thread-138839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:56:26.672 [DEBUG] [Thread-138839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:56:26.672 [DEBUG] [Thread-138839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:56:26.672 [DEBUG] [Thread-138839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:56:26.672 [DEBUG] [Thread-138839] [transport.py] [_log()] Compression: none
2026-02-12T00:56:26.672 [DEBUG] [Thread-138839] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:56:26.689 [DEBUG] [Thread-138839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:56:26.689 [DEBUG] [Thread-138839] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:56:26.690 [DEBUG] [Thread-138839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:56:26.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:56:26.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:56:26.692 [DEBUG] [Thread-138839] [transport.py] [_log()] userauth is OK
2026-02-12T00:56:26.692 [DEBUG] [Thread-138839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:56:26.692 [DEBUG] [Thread-138839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:56:26.692 [DEBUG] [Thread-138839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:56:26.692 [DEBUG] [Thread-138839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:56:26.717 [INFO] [Thread-138839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:56:26.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:56:27.334 [DEBUG] [Thread-138839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:56:27.334 [DEBUG] [Thread-138839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:56:27.335 [DEBUG] [Thread-138839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:56:27.375 [DEBUG] [Thread-138839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:56:27.376 [DEBUG] [Thread-138839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:56:27.379 [DEBUG] [Thread-138839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:56:27.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:56:27.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:56:27.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:56:27.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:56:27.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:56:27.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:56:27.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:56:27.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:56:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:56:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.955689 -999.00  +13.40  16.04     93  +12.30 1 3 1 3 1     0    0 1.10 -3.95 Zn..W 16.0 16.0 180.6 20.3 15.3 -10.0 14.9 -10.1 14.9 -9.7 15.3 -10.0
2026-02-12T00:56:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:56:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:56:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.955689
2026-02-12T00:56:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:56:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:56:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:56:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:56:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:56:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:56:14', tmtdew=0.35, humidity=97.64, cloud=0.0, wind=17.98, temperature=8.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:56:11.530', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:56:27.401 [DEBUG] [Thread-138839] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:56:27.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:56:27.500 [DEBUG] [Thread-138842] [transport.py] [_log()] starting thread (client mode): 0xa57d6a70
2026-02-12T00:56:27.500 [DEBUG] [Thread-138842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:56:27.515 [DEBUG] [Thread-138842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:56:27.515 [INFO] [Thread-138842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:56:27.522 [DEBUG] [Thread-138842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:56:27.522 [DEBUG] [Thread-138842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:56:27.523 [DEBUG] [Thread-138842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:56:27.523 [DEBUG] [Thread-138842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:56:27.523 [DEBUG] [Thread-138842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:56:27.523 [DEBUG] [Thread-138842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:56:27.523 [DEBUG] [Thread-138842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:56:27.523 [DEBUG] [Thread-138842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:56:27.523 [DEBUG] [Thread-138842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:56:27.524 [DEBUG] [Thread-138842] [transport.py] [_log()] client lang: <none>
2026-02-12T00:56:27.524 [DEBUG] [Thread-138842] [transport.py] [_log()] server lang: <none>
2026-02-12T00:56:27.524 [DEBUG] [Thread-138842] [transport.py] [_log()] kex follows: False
2026-02-12T00:56:27.524 [DEBUG] [Thread-138842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:56:27.524 [DEBUG] [Thread-138842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:56:27.524 [DEBUG] [Thread-138842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:56:27.524 [DEBUG] [Thread-138842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:56:27.525 [DEBUG] [Thread-138842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:56:27.525 [DEBUG] [Thread-138842] [transport.py] [_log()] Compression: none
2026-02-12T00:56:27.525 [DEBUG] [Thread-138842] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:56:27.582 [DEBUG] [Thread-138842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:56:27.583 [DEBUG] [Thread-138842] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:56:27.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:56:27.584 [DEBUG] [Thread-138842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:56:27.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:56:27.641 [DEBUG] [Thread-138842] [transport.py] [_log()] userauth is OK
2026-02-12T00:56:27.642 [DEBUG] [Thread-138842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:56:27.642 [DEBUG] [Thread-138842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:56:27.642 [DEBUG] [Thread-138842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:56:27.642 [DEBUG] [Thread-138842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:56:27.660 [INFO] [Thread-138842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:56:27.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:56:27.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:56:28.476 [DEBUG] [Thread-138842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:56:28.476 [DEBUG] [Thread-138842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:56:28.525 [DEBUG] [Thread-138842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:56:28.525 [DEBUG] [Thread-138842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:56:28.534 [DEBUG] [Thread-138842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:56:28.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:56:28.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:56: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') -> 00000000
2026-02-12T00:56:28.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:56:28.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:56:28.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:56:28.571 [DEBUG] [Thread-138842] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:56:35.737 [DEBUG] [Thread-138844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:50.787 [DEBUG] [Thread-138845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:57.705 [DEBUG] [Thread-138846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:56:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:56:58.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:56:58.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
2026-02-12T00:57:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 56, 49), 0.34, 97.69, 0.0, 15.67, 8.76, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:57:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:56:49
2026-02-12T00:57:00.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:57:01.032 [DEBUG] [Thread-138847] [transport.py] [_log()] starting thread (client mode): 0xa2d9fa60
2026-02-12T00:57:01.032 [DEBUG] [Thread-138847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:57:01.052 [DEBUG] [Thread-138847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:57:01.052 [INFO] [Thread-138847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] client lang: <none>
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] server lang: <none>
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] kex follows: False
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] Compression: none
2026-02-12T00:57:01.056 [DEBUG] [Thread-138847] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:57:01.065 [DEBUG] [Thread-138847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:57:01.065 [DEBUG] [Thread-138847] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:57:01.066 [DEBUG] [Thread-138847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:57:01.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:57:01.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:57:01.067 [DEBUG] [Thread-138847] [transport.py] [_log()] userauth is OK
2026-02-12T00:57:01.067 [DEBUG] [Thread-138847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:57:01.068 [DEBUG] [Thread-138847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:57:01.068 [DEBUG] [Thread-138847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:57:01.068 [DEBUG] [Thread-138847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:57:01.103 [INFO] [Thread-138847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:57:01.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:57:01.713 [DEBUG] [Thread-138847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:57:01.714 [DEBUG] [Thread-138847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:57:01.714 [DEBUG] [Thread-138847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:57:01.755 [DEBUG] [Thread-138847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:57:01.755 [DEBUG] [Thread-138847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:57:01.759 [DEBUG] [Thread-138847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:57:01.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:57:01.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:57:01.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:57:01.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:57:01.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:57:01.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:57:01.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:57:01.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:57:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:57:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.956037 -999.00  +13.40  17.56     93  +12.20 1 3 1 3 1     0    0 1.10 -4.45 Zn..W 17.6 17.6 180.6 22.8 15.2 -8.9 15.0 -9.5 14.9 -9.8 15.2 -10.0
2026-02-12T00:57:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:57:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:57:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.956037
2026-02-12T00:57:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:57:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:57:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:57:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:57:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:57:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:56:49', tmtdew=0.34, humidity=97.69, cloud=0.0, wind=15.67, temperature=8.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:56:41.597', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.270249999999999, nan, nan, nan, nan, nan, nan, 1.705, 1.7440000000000007, nan, nan, nan], zp_timestamp='2026-02-11T22:02:00')
2026-02-12T00:57:01.784 [DEBUG] [Thread-138847] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:57:01.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:57:01.898 [DEBUG] [Thread-138850] [transport.py] [_log()] starting thread (client mode): 0xa2d9efe0
2026-02-12T00:57:01.898 [DEBUG] [Thread-138850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:57:01.912 [DEBUG] [Thread-138850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T00:57:01.912 [INFO] [Thread-138850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] client lang: <none>
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] server lang: <none>
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] kex follows: False
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] Compression: none
2026-02-12T00:57:01.920 [DEBUG] [Thread-138850] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:57:01.977 [DEBUG] [Thread-138850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:57:01.978 [DEBUG] [Thread-138850] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:57:01.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T00:57:01.979 [DEBUG] [Thread-138850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T00:57:01.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:57:02.037 [DEBUG] [Thread-138850] [transport.py] [_log()] userauth is OK
2026-02-12T00:57:02.037 [DEBUG] [Thread-138850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:57:02.037 [DEBUG] [Thread-138850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:57:02.037 [DEBUG] [Thread-138850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T00:57:02.037 [DEBUG] [Thread-138850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:57:02.060 [INFO] [Thread-138850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:57:02.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T00:57:02.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:57:02.895 [DEBUG] [Thread-138850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:57:02.895 [DEBUG] [Thread-138850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:57:02.944 [DEBUG] [Thread-138850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:57:02.945 [DEBUG] [Thread-138850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:57:02.953 [DEBUG] [Thread-138850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:57:02.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:57:02.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T00:57:02.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T00:57:02.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:57:02.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:57:02.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:57:02.986 [DEBUG] [Thread-138850] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:57:05.826 [DEBUG] [Thread-138852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:57:12.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:57:12.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:57:20.878 [DEBUG] [Thread-138853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:57:33.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T00:57:33.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T00:57:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T00:57:34.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 57, 24), 0.34, 97.69, 0.0, 15.12, 8.76, 2, 2, 0, 2, 0, 0),)
2026-02-12T00:57:34.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:57:24
2026-02-12T00:57:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T00:57:35.365 [DEBUG] [Thread-138854] [transport.py] [_log()] starting thread (client mode): 0xa57d6bc0
2026-02-12T00:57:35.365 [DEBUG] [Thread-138854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T00:57:35.386 [DEBUG] [Thread-138854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T00:57:35.386 [INFO] [Thread-138854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T00:57:35.389 [DEBUG] [Thread-138854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T00:57:35.389 [DEBUG] [Thread-138854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T00:57:35.389 [DEBUG] [Thread-138854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T00:57:35.389 [DEBUG] [Thread-138854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] client lang: <none>
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] server lang: <none>
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] kex follows: False
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] Compression: none
2026-02-12T00:57:35.390 [DEBUG] [Thread-138854] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T00:57:35.407 [DEBUG] [Thread-138854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T00:57:35.408 [DEBUG] [Thread-138854] [transport.py] [_log()] Switch to new keys ...
2026-02-12T00:57:35.408 [DEBUG] [Thread-138854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T00:57:35.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T00:57:35.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T00:57:35.410 [DEBUG] [Thread-138854] [transport.py] [_log()] userauth is OK
2026-02-12T00:57:35.410 [DEBUG] [Thread-138854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T00:57:35.411 [DEBUG] [Thread-138854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T00:57:35.411 [DEBUG] [Thread-138854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T00:57:35.411 [DEBUG] [Thread-138854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T00:57:35.429 [INFO] [Thread-138854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T00:57:35.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T00:57:35.911 [DEBUG] [Thread-138856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:57:36.062 [DEBUG] [Thread-138854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T00:57:36.062 [DEBUG] [Thread-138854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T00:57:36.063 [DEBUG] [Thread-138854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T00:57:36.103 [DEBUG] [Thread-138854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T00:57:36.104 [DEBUG] [Thread-138854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T00:57:36.107 [DEBUG] [Thread-138854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T00:57:36.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T00:57:36.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T00:57:36.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T00:57:36.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T00:57:36.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T00:57:36.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T00:57:36.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T00:57:36.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T00:57:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T00:57:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.956384 -999.00  +13.30  16.24     93  +12.20 1 3 1 3 1     0    0 1.08 -4.99 Z..SW 16.2 16.2 180.8 21.5 15.2 -9.2 14.9 -9.4 14.8 -8.7 15.2 -10.1
2026-02-12T00:57:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T00:57:36.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T00:57:36.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.956384
2026-02-12T00:57:36.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T00:57:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T00:57:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T00:57:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T00:57:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T00:57:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:57:24', tmtdew=0.34, humidity=97.69, cloud=0.0, wind=15.12, temperature=8.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:57:11.578', atlas_cloud=3, atlas_rain=1, zp_data=[1.9572499999999993, nan, 1.7312500000000002, 1.8684999999999992, 1.7805, 1.8522500000000006, 2.1479999999999997, 2.375750000000001, nan, nan, 1.7522499999999992, 1.4644999999999992, 1.6020000000000003, 1.64325, 2.4959999999999996, nan, nan, 3.1384999999999996, 1.6649999999999991, 1.5942499999999988, 1.512999999999999, 1.880749999999999, 1.1982500000000007, nan, nan, 2.2829999999999995, 1.8057499999999997, 1.9939999999999998, 1.763, 1.705000000000001, nan, nan, nan], zp_timestamp='2026-02-11T22:55:00')
2026-02-12T00:57:36.135 [DEBUG] [Thread-138854] [transport.py] [_log()] EOF in transport thread
2026-02-12T00:57:36.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T00:57:50.950 [DEBUG] [Thread-138858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:57:57.801 [DEBUG] [Thread-138859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:58:06.002 [DEBUG] [Thread-138860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:58:12.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:58:12.587 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:58:21.036 [DEBUG] [Thread-138861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:58:36.072 [DEBUG] [Thread-138862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:58:51.110 [DEBUG] [Thread-138863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:58:57.867 [DEBUG] [Thread-138864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:59:06.146 [DEBUG] [Thread-138865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:59:12.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:59:12.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:59:21.182 [DEBUG] [Thread-138866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:59:36.215 [DEBUG] [Thread-138867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:59:49.431 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T00:59:51.253 [DEBUG] [Thread-138868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T00:59:57.925 [DEBUG] [Thread-138869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:06.292 [DEBUG] [Thread-138870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:12.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:12.992 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:19.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:00:19.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:00:19.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:00:21.327 [DEBUG] [Thread-138871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:21.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 0, 59, 45), 0.34, 97.69, 0.0, 18.12, 8.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:00:21.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 00:59:45
2026-02-12T01:00:21.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:00:21.905 [DEBUG] [Thread-138872] [transport.py] [_log()] starting thread (client mode): 0xa2d9d930
2026-02-12T01:00:21.906 [DEBUG] [Thread-138872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:00:21.921 [DEBUG] [Thread-138872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:00:21.921 [INFO] [Thread-138872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:00:21.924 [DEBUG] [Thread-138872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] client lang: <none>
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] server lang: <none>
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] kex follows: False
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] Compression: none
2026-02-12T01:00:21.925 [DEBUG] [Thread-138872] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:00:21.942 [DEBUG] [Thread-138872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:00:21.943 [DEBUG] [Thread-138872] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:00:21.943 [DEBUG] [Thread-138872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:00:21.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:00:21.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:00:21.944 [DEBUG] [Thread-138872] [transport.py] [_log()] userauth is OK
2026-02-12T01:00:21.944 [DEBUG] [Thread-138872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:00:21.944 [DEBUG] [Thread-138872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:00:21.944 [DEBUG] [Thread-138872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:00:21.944 [DEBUG] [Thread-138872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:00:21.954 [INFO] [Thread-138872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:00:21.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:00:23.655 [DEBUG] [Thread-138872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:00:23.655 [DEBUG] [Thread-138872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:00:23.656 [DEBUG] [Thread-138872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:00:23.696 [DEBUG] [Thread-138872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:00:23.696 [DEBUG] [Thread-138872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:00:23.700 [DEBUG] [Thread-138872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:00:23.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:00:23.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:00:23.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:00:23.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:00:23.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:00:23.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:00:23.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:00:23.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:00:23.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:00:23.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.958120 -999.00  +13.20  16.02     93  +12.10 1 3 1 3 1     0    0 1.00 -7.34 Z...W 16.0 16.0 179.4 24.3 15.1 -7.3 14.8 -7.9 14.8 -7.2 15.1 -7.4
2026-02-12T01:00:23.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:00:23.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:00:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.958120
2026-02-12T01:00:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:00:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:00:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:00:23.727 [DEBUG] [Thread-138872] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:00:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:00:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:00:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T00:59:45', tmtdew=0.34, humidity=97.69, cloud=0.0, wind=18.12, temperature=8.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T22:59:41.568', atlas_cloud=3, atlas_rain=1, zp_data=[1.9572499999999993, nan, 1.7312500000000002, 1.8684999999999992, 1.7805, 1.8522500000000006, 2.1479999999999997, 2.375750000000001, nan, nan, 1.7522499999999992, 1.4644999999999992, 1.6020000000000003, 1.64325, 2.4959999999999996, nan, nan, 3.1384999999999996, 1.6649999999999991, 1.5942499999999988, 1.512999999999999, 1.880749999999999, 1.1982500000000007, nan, nan, 2.2829999999999995, 1.8057499999999997, 1.9939999999999998, 1.763, 1.705000000000001, nan, nan, nan], zp_timestamp='2026-02-11T22:55:00')
2026-02-12T01:00:23.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:00:23.820 [DEBUG] [Thread-138875] [transport.py] [_log()] starting thread (client mode): 0xa2dc0cd0
2026-02-12T01:00:23.820 [DEBUG] [Thread-138875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:00:23.834 [DEBUG] [Thread-138875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:00:23.834 [INFO] [Thread-138875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:00:23.841 [DEBUG] [Thread-138875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] client lang: <none>
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] server lang: <none>
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] kex follows: False
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:00:23.842 [DEBUG] [Thread-138875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:00:23.843 [DEBUG] [Thread-138875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:00:23.843 [DEBUG] [Thread-138875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:00:23.843 [DEBUG] [Thread-138875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:00:23.843 [DEBUG] [Thread-138875] [transport.py] [_log()] Compression: none
2026-02-12T01:00:23.843 [DEBUG] [Thread-138875] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:00:23.899 [DEBUG] [Thread-138875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:00:23.900 [DEBUG] [Thread-138875] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:00:23.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:00:23.901 [DEBUG] [Thread-138875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:00:23.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:00:23.956 [DEBUG] [Thread-138875] [transport.py] [_log()] userauth is OK
2026-02-12T01:00:23.957 [DEBUG] [Thread-138875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:00:23.957 [DEBUG] [Thread-138875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:00:23.957 [DEBUG] [Thread-138875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:00:23.957 [DEBUG] [Thread-138875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:00:23.975 [INFO] [Thread-138875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:00:23.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:00:23.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:00:24.798 [DEBUG] [Thread-138875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:00:24.799 [DEBUG] [Thread-138875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:00:24.847 [DEBUG] [Thread-138875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:00:24.847 [DEBUG] [Thread-138875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:00:24.856 [DEBUG] [Thread-138875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:00:24.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:00:24.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')
2026-02-12T01:00:24.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:00:24.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:00:24.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:00:24.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:00:24.893 [DEBUG] [Thread-138875] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:00:36.364 [DEBUG] [Thread-138877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:51.428 [DEBUG] [Thread-138878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:00:54.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:00:54.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
2026-02-12T01:00:56.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 0, 21), 0.34, 97.7, 0.0, 15.85, 8.71, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:00:56.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:00:21
2026-02-12T01:00:57.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:00:57.281 [DEBUG] [Thread-138879] [transport.py] [_log()] starting thread (client mode): 0xa2dc2290
2026-02-12T01:00:57.281 [DEBUG] [Thread-138879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:00:57.302 [DEBUG] [Thread-138879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:00:57.302 [INFO] [Thread-138879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:00:57.305 [DEBUG] [Thread-138879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] client lang: <none>
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] server lang: <none>
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] kex follows: False
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] Compression: none
2026-02-12T01:00:57.306 [DEBUG] [Thread-138879] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:00:57.324 [DEBUG] [Thread-138879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:00:57.324 [DEBUG] [Thread-138879] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:00:57.325 [DEBUG] [Thread-138879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:00:57.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:00:57.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:00:57.327 [DEBUG] [Thread-138879] [transport.py] [_log()] userauth is OK
2026-02-12T01:00:57.327 [DEBUG] [Thread-138879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:00:57.327 [DEBUG] [Thread-138879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:00:57.327 [DEBUG] [Thread-138879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:00:57.327 [DEBUG] [Thread-138879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:00:57.352 [INFO] [Thread-138879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:00:57.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:00:57.932 [DEBUG] [Thread-138879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:00:57.932 [DEBUG] [Thread-138879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:00:57.933 [DEBUG] [Thread-138879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:00:57.973 [DEBUG] [Thread-138879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:00:57.973 [DEBUG] [Thread-138879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:00:57.975 [DEBUG] [Thread-138879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:00:57.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:00:57.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:00:57.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:00:57.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:00:57.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:00:57.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:00:57.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:00:57.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:00:57.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:00:57.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.958467 -999.00  +13.20  17.09     93  +12.10 1 2 1 3 1     0    0 0.96 -7.89 Z...W 17.1 17.1 178.2 22.8 15.1 -8.6 14.8 -10.1 14.8 -10.0 15.1 -7.9
2026-02-12T01:00:57.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:00:57.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:00:57.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.958467
2026-02-12T01:00:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:00:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:00:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:00:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:00:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:00:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:00:21', tmtdew=0.34, humidity=97.7, cloud=0.0, wind=15.85, temperature=8.71, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:00:11.549', atlas_cloud=2, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T22:59:00')
2026-02-12T01:00:57.989 [DEBUG] [Thread-138879] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:00:58.014 [DEBUG] [Thread-138882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:00:58.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:00:58.071 [DEBUG] [Thread-138883] [transport.py] [_log()] starting thread (client mode): 0xa2d957e0
2026-02-12T01:00:58.071 [DEBUG] [Thread-138883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:00:58.086 [DEBUG] [Thread-138883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:00:58.086 [INFO] [Thread-138883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:00:58.093 [DEBUG] [Thread-138883] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:00:58.093 [DEBUG] [Thread-138883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:00:58.093 [DEBUG] [Thread-138883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] client lang: <none>
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] server lang: <none>
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] kex follows: False
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] Compression: none
2026-02-12T01:00:58.094 [DEBUG] [Thread-138883] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:00:58.151 [DEBUG] [Thread-138883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:00:58.152 [DEBUG] [Thread-138883] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:00:58.152 [DEBUG] [Thread-138883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:00:58.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:00:58.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:00:58.208 [DEBUG] [Thread-138883] [transport.py] [_log()] userauth is OK
2026-02-12T01:00:58.208 [DEBUG] [Thread-138883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:00:58.208 [DEBUG] [Thread-138883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:00:58.209 [DEBUG] [Thread-138883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:00:58.209 [DEBUG] [Thread-138883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:00:58.227 [INFO] [Thread-138883] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:00:58.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:00:58.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:00:59.015 [DEBUG] [Thread-138883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:00:59.015 [DEBUG] [Thread-138883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:00:59.064 [DEBUG] [Thread-138883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:00:59.064 [DEBUG] [Thread-138883] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:00:59.074 [DEBUG] [Thread-138883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:00:59.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:00:59.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:00:59.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
2026-02-12T01:00:59.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:00:59.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:00:59.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:00:59.112 [DEBUG] [Thread-138883] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:01:06.468 [DEBUG] [Thread-138885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:01:13.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:01:13.197 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:01:21.528 [DEBUG] [Thread-138886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:01:29.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:01:29.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:01:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:01:31.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 0, 56), 0.33, 97.73, 0.0, 19.13, 8.66, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:01:31.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:00:56
2026-02-12T01:01:31.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:01:31.549 [DEBUG] [Thread-138887] [transport.py] [_log()] starting thread (client mode): 0xa57e05e0
2026-02-12T01:01:31.549 [DEBUG] [Thread-138887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:01:31.571 [DEBUG] [Thread-138887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:01:31.571 [INFO] [Thread-138887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:01:31.574 [DEBUG] [Thread-138887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:01:31.574 [DEBUG] [Thread-138887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:01:31.574 [DEBUG] [Thread-138887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:01:31.574 [DEBUG] [Thread-138887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] client lang: <none>
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] server lang: <none>
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] kex follows: False
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] Compression: none
2026-02-12T01:01:31.575 [DEBUG] [Thread-138887] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:01:31.593 [DEBUG] [Thread-138887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:01:31.594 [DEBUG] [Thread-138887] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:01:31.594 [DEBUG] [Thread-138887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:01:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:01:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:01:31.596 [DEBUG] [Thread-138887] [transport.py] [_log()] userauth is OK
2026-02-12T01:01:31.597 [DEBUG] [Thread-138887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:01:31.597 [DEBUG] [Thread-138887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:01:31.597 [DEBUG] [Thread-138887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:01:31.597 [DEBUG] [Thread-138887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:01:31.622 [INFO] [Thread-138887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:01:31.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:01:32.377 [DEBUG] [Thread-138887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:01:32.377 [DEBUG] [Thread-138887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:01:32.378 [DEBUG] [Thread-138887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:01:32.418 [DEBUG] [Thread-138887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:01:32.419 [DEBUG] [Thread-138887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:01:32.425 [DEBUG] [Thread-138887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:01:32.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:01:32.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:01:32.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:01:32.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:01:32.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:01:32.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:01:32.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:01:32.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:01:32.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:01:32.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.958815 -999.00  +13.20  16.69     93  +12.10 1 3 1 3 1     0    0 0.96 -7.95 z.eSw 16.7 16.7 185.2 21.9 15.1 -9.3 14.8 -9.1 14.8 -8.9 15.1 -10.4
2026-02-12T01:01:32.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:01:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:01:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.958815
2026-02-12T01:01:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:01:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:01:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:01:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:01:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:01:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:00:56', tmtdew=0.33, humidity=97.73, cloud=0.0, wind=19.13, temperature=8.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:00:41.616', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T22:59:00')
2026-02-12T01:01:32.449 [DEBUG] [Thread-138887] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:01:32.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:01:32.543 [DEBUG] [Thread-138890] [transport.py] [_log()] starting thread (client mode): 0xa57e0340
2026-02-12T01:01:32.544 [DEBUG] [Thread-138890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:01:32.559 [DEBUG] [Thread-138890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:01:32.559 [INFO] [Thread-138890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:01:32.567 [DEBUG] [Thread-138890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:01:32.567 [DEBUG] [Thread-138890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:01:32.567 [DEBUG] [Thread-138890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:01:32.567 [DEBUG] [Thread-138890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:01:32.567 [DEBUG] [Thread-138890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] client lang: <none>
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] server lang: <none>
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] kex follows: False
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:01:32.568 [DEBUG] [Thread-138890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:01:32.569 [DEBUG] [Thread-138890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:01:32.569 [DEBUG] [Thread-138890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:01:32.569 [DEBUG] [Thread-138890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:01:32.569 [DEBUG] [Thread-138890] [transport.py] [_log()] Compression: none
2026-02-12T01:01:32.569 [DEBUG] [Thread-138890] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:01:32.624 [DEBUG] [Thread-138890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:01:32.625 [DEBUG] [Thread-138890] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:01:32.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:01:32.626 [DEBUG] [Thread-138890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:01:32.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:01:32.681 [DEBUG] [Thread-138890] [transport.py] [_log()] userauth is OK
2026-02-12T01:01:32.681 [DEBUG] [Thread-138890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:01:32.681 [DEBUG] [Thread-138890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:01:32.681 [DEBUG] [Thread-138890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:01:32.681 [DEBUG] [Thread-138890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:01:32.701 [INFO] [Thread-138890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:01:32.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:01:32.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:01:33.510 [DEBUG] [Thread-138890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:01:33.510 [DEBUG] [Thread-138890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:01:33.557 [DEBUG] [Thread-138890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:01:33.557 [DEBUG] [Thread-138890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:01:33.566 [DEBUG] [Thread-138890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:01:33.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:01:33.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:01:33.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:01:33.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:01:33.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:01:33.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:01:33.603 [DEBUG] [Thread-138890] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:01:36.565 [DEBUG] [Thread-138892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:01:51.614 [DEBUG] [Thread-138893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:01:58.081 [DEBUG] [Thread-138894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:02:03.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:02:03.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:02:03.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:02:05.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 1, 31), 0.33, 97.74, 0.0, 19.53, 8.67, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:02:05.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:01:31
2026-02-12T01:02:06.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:02:06.281 [DEBUG] [Thread-138895] [transport.py] [_log()] starting thread (client mode): 0xa57d72e0
2026-02-12T01:02:06.281 [DEBUG] [Thread-138895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:02:06.301 [DEBUG] [Thread-138895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:02:06.301 [INFO] [Thread-138895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:02:06.304 [DEBUG] [Thread-138895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] client lang: <none>
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] server lang: <none>
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] kex follows: False
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:02:06.310 [DEBUG] [Thread-138895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:02:06.311 [DEBUG] [Thread-138895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:02:06.311 [DEBUG] [Thread-138895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:02:06.311 [DEBUG] [Thread-138895] [transport.py] [_log()] Compression: none
2026-02-12T01:02:06.311 [DEBUG] [Thread-138895] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:02:06.328 [DEBUG] [Thread-138895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:02:06.329 [DEBUG] [Thread-138895] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:02:06.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:02:06.330 [DEBUG] [Thread-138895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:02:06.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:02:06.332 [DEBUG] [Thread-138895] [transport.py] [_log()] userauth is OK
2026-02-12T01:02:06.332 [DEBUG] [Thread-138895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:02:06.332 [DEBUG] [Thread-138895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:02:06.333 [DEBUG] [Thread-138895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:02:06.333 [DEBUG] [Thread-138895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:02:06.356 [INFO] [Thread-138895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:02:06.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:02:06.649 [DEBUG] [Thread-138897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:02:06.987 [DEBUG] [Thread-138895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:02:06.987 [DEBUG] [Thread-138895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:02:06.988 [DEBUG] [Thread-138895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:02:07.028 [DEBUG] [Thread-138895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:02:07.029 [DEBUG] [Thread-138895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:02:07.032 [DEBUG] [Thread-138895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:02:07.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:02:07.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:02:07.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:02:07.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:02:07.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:02:07.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:02:07.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:02:07.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:02:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:02:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.959162 -999.00  +13.20  15.85     93  +12.10 1 3 1 3 1     0    0 0.95 -8.25 z.eSw 15.8 15.8 182.4 18.4 15.0 -6.6 14.8 -7.5 14.8 -7.9 15.1 -8.1
2026-02-12T01:02:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:02:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:02:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.959162
2026-02-12T01:02:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:02:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:02:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:02:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:02:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:02:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:01:31', tmtdew=0.33, humidity=97.74, cloud=0.0, wind=19.53, temperature=8.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:01:11.597', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T22:59:00')
2026-02-12T01:02:07.061 [DEBUG] [Thread-138895] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:02:07.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:02:07.160 [DEBUG] [Thread-138899] [transport.py] [_log()] starting thread (client mode): 0xa2d9fa60
2026-02-12T01:02:07.160 [DEBUG] [Thread-138899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:02:07.173 [DEBUG] [Thread-138899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:02:07.173 [INFO] [Thread-138899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:07.183 [DEBUG] [Thread-138899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] client lang: <none>
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] server lang: <none>
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] kex follows: False
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] Compression: none
2026-02-12T01:02:07.184 [DEBUG] [Thread-138899] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:02:07.239 [DEBUG] [Thread-138899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:02:07.240 [DEBUG] [Thread-138899] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:02:07.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:02:07.241 [DEBUG] [Thread-138899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:02:07.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:02:07.296 [DEBUG] [Thread-138899] [transport.py] [_log()] userauth is OK
2026-02-12T01:02:07.296 [DEBUG] [Thread-138899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:02:07.296 [DEBUG] [Thread-138899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:02:07.296 [DEBUG] [Thread-138899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:02:07.297 [DEBUG] [Thread-138899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:02:07.315 [INFO] [Thread-138899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:02:07.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:02:07.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:02:08.150 [DEBUG] [Thread-138899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:02:08.150 [DEBUG] [Thread-138899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:02:08.199 [DEBUG] [Thread-138899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:02:08.199 [DEBUG] [Thread-138899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:02:08.208 [DEBUG] [Thread-138899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:02:08.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:02:08.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:02:08.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:02:08.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:02:08.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:02:08.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:02:08.248 [DEBUG] [Thread-138899] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:02:13.397 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:02:13.398 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:02:21.688 [DEBUG] [Thread-138901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:02:36.737 [DEBUG] [Thread-138902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:02:38.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:02:38.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:02:38.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:02:40.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 2, 7), 0.33, 97.74, 0.0, 20.03, 8.66, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:02:40.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:02:07
2026-02-12T01:02:40.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:02:41.109 [DEBUG] [Thread-138903] [transport.py] [_log()] starting thread (client mode): 0xa2d97ac0
2026-02-12T01:02:41.109 [DEBUG] [Thread-138903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:02:41.129 [DEBUG] [Thread-138903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:02:41.130 [INFO] [Thread-138903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:02:41.132 [DEBUG] [Thread-138903] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] client lang: <none>
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] server lang: <none>
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] kex follows: False
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] Compression: none
2026-02-12T01:02:41.133 [DEBUG] [Thread-138903] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:02:41.150 [DEBUG] [Thread-138903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:02:41.151 [DEBUG] [Thread-138903] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:02:41.151 [DEBUG] [Thread-138903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:02:41.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:02:41.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:02:41.154 [DEBUG] [Thread-138903] [transport.py] [_log()] userauth is OK
2026-02-12T01:02:41.154 [DEBUG] [Thread-138903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:02:41.154 [DEBUG] [Thread-138903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:02:41.154 [DEBUG] [Thread-138903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:02:41.154 [DEBUG] [Thread-138903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:02:41.179 [INFO] [Thread-138903] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:02:41.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:02:41.839 [DEBUG] [Thread-138903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:02:41.839 [DEBUG] [Thread-138903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:02:41.840 [DEBUG] [Thread-138903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:02:41.881 [DEBUG] [Thread-138903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:02:41.881 [DEBUG] [Thread-138903] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:02:41.884 [DEBUG] [Thread-138903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:02:41.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:02:41.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:02:41.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:02:41.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:02:41.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:02:41.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:02:41.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:02:41.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:02:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:02:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.959509 -999.00  +13.20  19.03     93  +12.10 1 3 1 3 1     0    0 0.94 -8.79 Zn.sW 19.0 19.0 185.8 23.3 15.1 -6.5 14.7 -7.5 14.8 -7.7 15.1 -7.6
2026-02-12T01:02:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:02:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:02:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.959509
2026-02-12T01:02:41.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:02:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:02:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:02:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:02:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:02:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:02:07', tmtdew=0.33, humidity=97.74, cloud=0.0, wind=20.03, temperature=8.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:01:41.578', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T22:59:00')
2026-02-12T01:02:41.910 [DEBUG] [Thread-138903] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:02:41.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:02:42.007 [DEBUG] [Thread-138906] [transport.py] [_log()] starting thread (client mode): 0xa57d6080
2026-02-12T01:02:42.007 [DEBUG] [Thread-138906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:02:42.022 [DEBUG] [Thread-138906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:02:42.022 [INFO] [Thread-138906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:02:42.030 [DEBUG] [Thread-138906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:02:42.030 [DEBUG] [Thread-138906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:02:42.030 [DEBUG] [Thread-138906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:02:42.030 [DEBUG] [Thread-138906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:42.030 [DEBUG] [Thread-138906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:02:42.030 [DEBUG] [Thread-138906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] client lang: <none>
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] server lang: <none>
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] kex follows: False
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:02:42.031 [DEBUG] [Thread-138906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:02:42.032 [DEBUG] [Thread-138906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:02:42.032 [DEBUG] [Thread-138906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:02:42.032 [DEBUG] [Thread-138906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:02:42.032 [DEBUG] [Thread-138906] [transport.py] [_log()] Compression: none
2026-02-12T01:02:42.032 [DEBUG] [Thread-138906] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:02:42.087 [DEBUG] [Thread-138906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:02:42.088 [DEBUG] [Thread-138906] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:02:42.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:02:42.089 [DEBUG] [Thread-138906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:02:42.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:02:42.143 [DEBUG] [Thread-138906] [transport.py] [_log()] userauth is OK
2026-02-12T01:02:42.144 [DEBUG] [Thread-138906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:02:42.144 [DEBUG] [Thread-138906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:02:42.144 [DEBUG] [Thread-138906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:02:42.144 [DEBUG] [Thread-138906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:02:42.163 [INFO] [Thread-138906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:02:42.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:02:42.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:02:42.981 [DEBUG] [Thread-138906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:02:42.981 [DEBUG] [Thread-138906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:02:43.030 [DEBUG] [Thread-138906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:02:43.030 [DEBUG] [Thread-138906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:02:43.038 [DEBUG] [Thread-138906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:02:43.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:02:43.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:02:43.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:02:43.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:02:43.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:02:43.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:02:43.071 [DEBUG] [Thread-138906] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:02:51.778 [DEBUG] [Thread-138908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:02:58.166 [DEBUG] [Thread-138909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:03:06.831 [DEBUG] [Thread-138910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:03:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:03:13.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:03:13.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:03:13.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:03:13.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:03:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 2, 42), 0.44, 97.14, 0.0, 23.25, 6.61, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:03:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:02:42
2026-02-12T01:03:15.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:03:15.564 [DEBUG] [Thread-138911] [transport.py] [_log()] starting thread (client mode): 0xa57e1150
2026-02-12T01:03:15.565 [DEBUG] [Thread-138911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:03:15.585 [DEBUG] [Thread-138911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:03:15.585 [INFO] [Thread-138911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:03:15.588 [DEBUG] [Thread-138911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:03:15.588 [DEBUG] [Thread-138911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:03:15.588 [DEBUG] [Thread-138911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:03:15.588 [DEBUG] [Thread-138911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:15.588 [DEBUG] [Thread-138911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] client lang: <none>
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] server lang: <none>
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] kex follows: False
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:03:15.589 [DEBUG] [Thread-138911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:03:15.590 [DEBUG] [Thread-138911] [transport.py] [_log()] Compression: none
2026-02-12T01:03:15.590 [DEBUG] [Thread-138911] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:03:15.608 [DEBUG] [Thread-138911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:03:15.609 [DEBUG] [Thread-138911] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:03:15.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:03:15.609 [DEBUG] [Thread-138911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:03:15.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:03:15.610 [DEBUG] [Thread-138911] [transport.py] [_log()] userauth is OK
2026-02-12T01:03:15.610 [DEBUG] [Thread-138911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:03:15.610 [DEBUG] [Thread-138911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:03:15.610 [DEBUG] [Thread-138911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:03:15.610 [DEBUG] [Thread-138911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:03:15.627 [INFO] [Thread-138911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:03:15.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:03:16.288 [DEBUG] [Thread-138911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:03:16.288 [DEBUG] [Thread-138911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:03:16.288 [DEBUG] [Thread-138911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:03:16.328 [DEBUG] [Thread-138911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:03:16.329 [DEBUG] [Thread-138911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:03:16.332 [DEBUG] [Thread-138911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:03:16.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:03:16.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:03:16.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:03:16.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:03:16.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:03:16.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:03:16.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:03:16.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:03:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:03:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.960203 -999.00  +13.20  15.56     92  +12.10 1 3 1 3 1     0    0 0.93 -9.36 ....W 15.6 15.6 186.4 20.3 15.0 -5.7 14.8 -5.8 14.8 -5.7 15.1 -6.6
2026-02-12T01:03:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:03:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:03:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.960203
2026-02-12T01:03:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:03:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:03:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:03:16.359 [DEBUG] [Thread-138911] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:03:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:03:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:03:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:02:42', tmtdew=0.44, humidity=97.14, cloud=0.0, wind=23.25, temperature=6.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:02:41.539', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T22:59:00')
2026-02-12T01:03:16.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:03:16.456 [DEBUG] [Thread-138914] [transport.py] [_log()] starting thread (client mode): 0xa57e01c0
2026-02-12T01:03:16.456 [DEBUG] [Thread-138914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:03:16.470 [DEBUG] [Thread-138914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:03:16.471 [INFO] [Thread-138914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:03:16.479 [DEBUG] [Thread-138914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:03:16.479 [DEBUG] [Thread-138914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:03:16.479 [DEBUG] [Thread-138914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:03:16.479 [DEBUG] [Thread-138914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] client lang: <none>
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] server lang: <none>
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] kex follows: False
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:03:16.480 [DEBUG] [Thread-138914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:03:16.481 [DEBUG] [Thread-138914] [transport.py] [_log()] Compression: none
2026-02-12T01:03:16.481 [DEBUG] [Thread-138914] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:03:16.536 [DEBUG] [Thread-138914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:03:16.536 [DEBUG] [Thread-138914] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:03:16.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:03:16.538 [DEBUG] [Thread-138914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:03:16.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:03:16.596 [DEBUG] [Thread-138914] [transport.py] [_log()] userauth is OK
2026-02-12T01:03:16.596 [DEBUG] [Thread-138914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:03:16.596 [DEBUG] [Thread-138914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:03:16.597 [DEBUG] [Thread-138914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:03:16.597 [DEBUG] [Thread-138914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:03:16.616 [INFO] [Thread-138914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:03:16.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:03:16.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:03:17.450 [DEBUG] [Thread-138914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:03:17.450 [DEBUG] [Thread-138914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:03:17.498 [DEBUG] [Thread-138914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:03:17.499 [DEBUG] [Thread-138914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:03:17.508 [DEBUG] [Thread-138914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:03:17.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:03:17.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:03:17.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:03:17.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:03:17.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:03:17.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:03:17.544 [DEBUG] [Thread-138914] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:03:21.867 [DEBUG] [Thread-138916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:03:36.917 [DEBUG] [Thread-138917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:03:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:03:47.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:03:47.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:03:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 3, 18), 0.33, 97.74, 0.0, 18.0, 8.63, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:03:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:03:18
2026-02-12T01:03:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:03:49.841 [DEBUG] [Thread-138918] [transport.py] [_log()] starting thread (client mode): 0xa57d6e90
2026-02-12T01:03:49.842 [DEBUG] [Thread-138918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:03:49.858 [DEBUG] [Thread-138918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:03:49.858 [INFO] [Thread-138918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:03:49.861 [DEBUG] [Thread-138918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:03:49.861 [DEBUG] [Thread-138918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:03:49.861 [DEBUG] [Thread-138918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:03:49.861 [DEBUG] [Thread-138918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:49.861 [DEBUG] [Thread-138918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] client lang: <none>
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] server lang: <none>
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] kex follows: False
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] Compression: none
2026-02-12T01:03:49.862 [DEBUG] [Thread-138918] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:03:49.885 [DEBUG] [Thread-138918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:03:49.885 [DEBUG] [Thread-138918] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:03:49.886 [DEBUG] [Thread-138918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:03:49.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:03:49.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:03:49.887 [DEBUG] [Thread-138918] [transport.py] [_log()] userauth is OK
2026-02-12T01:03:49.888 [DEBUG] [Thread-138918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:03:49.888 [DEBUG] [Thread-138918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:03:49.888 [DEBUG] [Thread-138918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:03:49.888 [DEBUG] [Thread-138918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:03:49.911 [INFO] [Thread-138918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:03:49.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:03:50.539 [DEBUG] [Thread-138918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:03:50.539 [DEBUG] [Thread-138918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:03:50.539 [DEBUG] [Thread-138918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:03:50.580 [DEBUG] [Thread-138918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:03:50.580 [DEBUG] [Thread-138918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:03:50.583 [DEBUG] [Thread-138918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:03:50.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:03:50.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:03:50.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:03:50.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:03:50.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:03:50.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:03:50.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:03:50.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:03:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:03:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.960550 -999.00  +13.20  16.18     92  +12.10 1 3 1 3 1     0    0 0.90 -10.11 ....W 16.2 16.2 182.2 20.6 15.0 -4.8 14.8 -5.1 14.7 -5.1 15.1 -5.8
2026-02-12T01:03:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:03:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:03:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.960550
2026-02-12T01:03:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:03:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:03:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:03:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:03:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:03:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:03:18', tmtdew=0.33, humidity=97.74, cloud=0.0, wind=18.0, temperature=8.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:03:11.520', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:03:50.606 [DEBUG] [Thread-138918] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:03:50.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:03:50.704 [DEBUG] [Thread-138921] [transport.py] [_log()] starting thread (client mode): 0xa57d56f0
2026-02-12T01:03:50.704 [DEBUG] [Thread-138921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:03:50.721 [DEBUG] [Thread-138921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:03:50.722 [INFO] [Thread-138921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:03:50.730 [DEBUG] [Thread-138921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:03:50.730 [DEBUG] [Thread-138921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:03:50.730 [DEBUG] [Thread-138921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] client lang: <none>
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] server lang: <none>
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] kex follows: False
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] Compression: none
2026-02-12T01:03:50.731 [DEBUG] [Thread-138921] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:03:50.788 [DEBUG] [Thread-138921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:03:50.789 [DEBUG] [Thread-138921] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:03:50.789 [DEBUG] [Thread-138921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:03:50.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:03:50.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:03:50.850 [DEBUG] [Thread-138921] [transport.py] [_log()] userauth is OK
2026-02-12T01:03:50.850 [DEBUG] [Thread-138921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:03:50.850 [DEBUG] [Thread-138921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:03:50.850 [DEBUG] [Thread-138921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:03:50.850 [DEBUG] [Thread-138921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:03:50.870 [INFO] [Thread-138921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:03:50.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:03:50.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:03:51.679 [DEBUG] [Thread-138921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:03:51.679 [DEBUG] [Thread-138921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:03:51.730 [DEBUG] [Thread-138921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:03:51.731 [DEBUG] [Thread-138921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:03:51.742 [DEBUG] [Thread-138921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:03:51.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:03:51.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:03: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
2026-02-12T01:03:51.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:03:51.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:03:51.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:03:51.782 [DEBUG] [Thread-138921] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:03:51.948 [DEBUG] [Thread-138923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:03:58.241 [DEBUG] [Thread-138924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:06.998 [DEBUG] [Thread-138925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:13.807 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:13.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:04:21.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:04:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:04:22.037 [DEBUG] [Thread-138926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 3, 52), 0.33, 97.75, 0.0, 20.1, 8.63, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:04:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:03:52
2026-02-12T01:04:24.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:04:24.316 [DEBUG] [Thread-138927] [transport.py] [_log()] starting thread (client mode): 0xa2d9dfc0
2026-02-12T01:04:24.317 [DEBUG] [Thread-138927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:04:24.332 [DEBUG] [Thread-138927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:04:24.332 [INFO] [Thread-138927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] client lang: <none>
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] server lang: <none>
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] kex follows: False
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] Compression: none
2026-02-12T01:04:24.335 [DEBUG] [Thread-138927] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:04:24.352 [DEBUG] [Thread-138927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:04:24.353 [DEBUG] [Thread-138927] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:04:24.353 [DEBUG] [Thread-138927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:04:24.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:04:24.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:04:24.355 [DEBUG] [Thread-138927] [transport.py] [_log()] userauth is OK
2026-02-12T01:04:24.356 [DEBUG] [Thread-138927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:04:24.356 [DEBUG] [Thread-138927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:04:24.356 [DEBUG] [Thread-138927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:04:24.356 [DEBUG] [Thread-138927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:04:24.372 [INFO] [Thread-138927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:04:24.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:04:25.091 [DEBUG] [Thread-138927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:04:25.091 [DEBUG] [Thread-138927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:04:25.092 [DEBUG] [Thread-138927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:04:25.132 [DEBUG] [Thread-138927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:04:25.133 [DEBUG] [Thread-138927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:04:25.136 [DEBUG] [Thread-138927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:04:25.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:04:25.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:04:25.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:04:25.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:04:25.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:04:25.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:04:25.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:04:25.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:04:25.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:04:25.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.960898 -999.00  +13.20  15.42     92  +12.10 1 3 1 3 1     0    0 0.91 -10.41 ....W 15.4 15.4 184.4 23.0 15.1 -4.6 14.8 -4.9 14.7 -5.0 15.1 -5.2
2026-02-12T01:04:25.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:04:25.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:04:25.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.960898
2026-02-12T01:04:25.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:04:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:04:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:04:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:04:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:04:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:03:52', tmtdew=0.33, humidity=97.75, cloud=0.0, wind=20.1, temperature=8.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:03:41.587', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:04:25.164 [DEBUG] [Thread-138927] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:04:25.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:04:25.260 [DEBUG] [Thread-138930] [transport.py] [_log()] starting thread (client mode): 0x9eb05ff0
2026-02-12T01:04:25.260 [DEBUG] [Thread-138930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:04:25.274 [DEBUG] [Thread-138930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:04:25.275 [INFO] [Thread-138930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:04:25.282 [DEBUG] [Thread-138930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:04:25.282 [DEBUG] [Thread-138930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:04:25.282 [DEBUG] [Thread-138930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:04:25.282 [DEBUG] [Thread-138930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:04:25.282 [DEBUG] [Thread-138930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:04:25.282 [DEBUG] [Thread-138930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:04:25.282 [DEBUG] [Thread-138930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] client lang: <none>
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] server lang: <none>
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] kex follows: False
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] Compression: none
2026-02-12T01:04:25.283 [DEBUG] [Thread-138930] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:04:25.339 [DEBUG] [Thread-138930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:04:25.340 [DEBUG] [Thread-138930] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:04:25.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:04:25.341 [DEBUG] [Thread-138930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:04:25.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:04:25.396 [DEBUG] [Thread-138930] [transport.py] [_log()] userauth is OK
2026-02-12T01:04:25.396 [DEBUG] [Thread-138930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:04:25.396 [DEBUG] [Thread-138930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:04:25.396 [DEBUG] [Thread-138930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:04:25.396 [DEBUG] [Thread-138930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:04:25.416 [INFO] [Thread-138930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:04:25.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:04:25.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:04:26.235 [DEBUG] [Thread-138930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:04:26.235 [DEBUG] [Thread-138930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:04:26.283 [DEBUG] [Thread-138930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:04:26.284 [DEBUG] [Thread-138930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:04:26.293 [DEBUG] [Thread-138930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:04:26.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:04:26.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:04:26.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:04:26.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:04:26.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:04:26.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:04:26.329 [DEBUG] [Thread-138930] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:04:37.073 [DEBUG] [Thread-138932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:52.127 [DEBUG] [Thread-138933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:56.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:04:56.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:04:56.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
2026-02-12T01:04:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 4, 27), 0.33, 97.77, 0.0, 19.92, 8.61, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:04:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:04:27
2026-02-12T01:04:58.314 [DEBUG] [Thread-138934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:04:58.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:04:58.706 [DEBUG] [Thread-138935] [transport.py] [_log()] starting thread (client mode): 0xa57d54b0
2026-02-12T01:04:58.706 [DEBUG] [Thread-138935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:04:58.726 [DEBUG] [Thread-138935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:04:58.726 [INFO] [Thread-138935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] client lang: <none>
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] server lang: <none>
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] kex follows: False
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:04:58.727 [DEBUG] [Thread-138935] [transport.py] [_log()] Compression: none
2026-02-12T01:04:58.728 [DEBUG] [Thread-138935] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:04:58.743 [DEBUG] [Thread-138935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:04:58.743 [DEBUG] [Thread-138935] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:04:58.744 [DEBUG] [Thread-138935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:04:58.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:04:58.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:04:58.744 [DEBUG] [Thread-138935] [transport.py] [_log()] userauth is OK
2026-02-12T01:04:58.744 [DEBUG] [Thread-138935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:04:58.744 [DEBUG] [Thread-138935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:04:58.744 [DEBUG] [Thread-138935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:04:58.744 [DEBUG] [Thread-138935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:04:58.759 [INFO] [Thread-138935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:04:58.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:04:59.852 [DEBUG] [Thread-138935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:04:59.852 [DEBUG] [Thread-138935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:04:59.853 [DEBUG] [Thread-138935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:04:59.894 [DEBUG] [Thread-138935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:04:59.894 [DEBUG] [Thread-138935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:04:59.897 [DEBUG] [Thread-138935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:04:59.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:04:59.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:04:59.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:04:59.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:04:59.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:04:59.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:04:59.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:04:59.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:04:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:04:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.961245 -999.00  +13.20  16.44     92  +12.10 1 3 1 3 1     0    0 0.87 -10.06 ..... 16.4 16.4 181.4 22.8 15.1 -4.5 14.8 -4.8 14.7 -5.0 15.1 -5.6
2026-02-12T01:04:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:04:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:04:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.961245
2026-02-12T01:04:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:04:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:04:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:04:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:04:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:04:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:04:27', tmtdew=0.33, humidity=97.77, cloud=0.0, wind=19.92, temperature=8.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:04:11.568', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:04:59.925 [DEBUG] [Thread-138935] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:05:00.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:05:00.019 [DEBUG] [Thread-138938] [transport.py] [_log()] starting thread (client mode): 0xa57e3850
2026-02-12T01:05:00.019 [DEBUG] [Thread-138938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:05:00.033 [DEBUG] [Thread-138938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:05:00.033 [INFO] [Thread-138938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:05:00.040 [DEBUG] [Thread-138938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] client lang: <none>
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] server lang: <none>
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] kex follows: False
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] Compression: none
2026-02-12T01:05:00.041 [DEBUG] [Thread-138938] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:05:00.099 [DEBUG] [Thread-138938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:05:00.100 [DEBUG] [Thread-138938] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:05:00.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:05:00.101 [DEBUG] [Thread-138938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:05:00.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:05:00.155 [DEBUG] [Thread-138938] [transport.py] [_log()] userauth is OK
2026-02-12T01:05:00.156 [DEBUG] [Thread-138938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:05:00.156 [DEBUG] [Thread-138938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:05:00.156 [DEBUG] [Thread-138938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:05:00.156 [DEBUG] [Thread-138938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:05:00.175 [INFO] [Thread-138938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:05:00.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:05:00.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:05:00.988 [DEBUG] [Thread-138938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:05:00.988 [DEBUG] [Thread-138938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:05:01.036 [DEBUG] [Thread-138938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:05:01.037 [DEBUG] [Thread-138938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:05:01.046 [DEBUG] [Thread-138938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:05:01.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:05:01.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:05:01.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:05:01.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:05:01.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:05:01.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:05:01.082 [DEBUG] [Thread-138938] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:05:07.173 [DEBUG] [Thread-138940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:05:14.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:05:14.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:05:22.226 [DEBUG] [Thread-138941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:05:31.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:05:31.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:05:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:05:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 5, 3), 0.33, 97.76, 0.0, 19.43, 8.61, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:05:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:05:03
2026-02-12T01:05:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:05:33.466 [DEBUG] [Thread-138942] [transport.py] [_log()] starting thread (client mode): 0xa2d9dfc0
2026-02-12T01:05:33.466 [DEBUG] [Thread-138942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:05:33.486 [DEBUG] [Thread-138942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:05:33.486 [INFO] [Thread-138942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:05:33.489 [DEBUG] [Thread-138942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:05:33.489 [DEBUG] [Thread-138942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:05:33.489 [DEBUG] [Thread-138942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] client lang: <none>
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] server lang: <none>
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] kex follows: False
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] Compression: none
2026-02-12T01:05:33.490 [DEBUG] [Thread-138942] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:05:33.507 [DEBUG] [Thread-138942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:05:33.508 [DEBUG] [Thread-138942] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:05:33.508 [DEBUG] [Thread-138942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:05:33.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:05:33.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:05:33.510 [DEBUG] [Thread-138942] [transport.py] [_log()] userauth is OK
2026-02-12T01:05:33.511 [DEBUG] [Thread-138942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:05:33.511 [DEBUG] [Thread-138942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:05:33.511 [DEBUG] [Thread-138942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:05:33.511 [DEBUG] [Thread-138942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:05:33.535 [INFO] [Thread-138942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:05:33.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:05:35.992 [DEBUG] [Thread-138942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:05:35.992 [DEBUG] [Thread-138942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:05:35.993 [DEBUG] [Thread-138942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:05:36.033 [DEBUG] [Thread-138942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:05:36.033 [DEBUG] [Thread-138942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:05:36.037 [DEBUG] [Thread-138942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:05:36.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:05:36.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:05:36.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:05:36.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:05:36.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:05:36.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:05:36.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:05:36.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:05:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:05:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.961592 -999.00  +13.20  17.11     92  +12.00 1 3 1 3 1     0    0 0.88 -9.86 ..... 17.1 17.1 186.2 21.5 15.1 -4.7 14.8 -4.2 14.8 -4.8 15.1 -5.3
2026-02-12T01:05:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:05:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:05:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.961592
2026-02-12T01:05:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:05:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:05:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:05:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:05:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:05:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:05:03', tmtdew=0.33, humidity=97.76, cloud=0.0, wind=19.43, temperature=8.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:04:41.549', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:05:36.063 [DEBUG] [Thread-138942] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:05:36.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:05:36.163 [DEBUG] [Thread-138945] [transport.py] [_log()] starting thread (client mode): 0x9eb06680
2026-02-12T01:05:36.164 [DEBUG] [Thread-138945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:05:36.178 [DEBUG] [Thread-138945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:05:36.178 [INFO] [Thread-138945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:05:36.185 [DEBUG] [Thread-138945] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:05:36.186 [DEBUG] [Thread-138945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] client lang: <none>
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] server lang: <none>
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] kex follows: False
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:05:36.187 [DEBUG] [Thread-138945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:05:36.188 [DEBUG] [Thread-138945] [transport.py] [_log()] Compression: none
2026-02-12T01:05:36.188 [DEBUG] [Thread-138945] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:05:36.244 [DEBUG] [Thread-138945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:05:36.245 [DEBUG] [Thread-138945] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:05:36.246 [DEBUG] [Thread-138945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:05:36.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:05:36.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:05:36.303 [DEBUG] [Thread-138945] [transport.py] [_log()] userauth is OK
2026-02-12T01:05:36.304 [DEBUG] [Thread-138945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:05:36.304 [DEBUG] [Thread-138945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:05:36.304 [DEBUG] [Thread-138945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:05:36.304 [DEBUG] [Thread-138945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:05:36.323 [INFO] [Thread-138945] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:05:36.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:05:36.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:05:37.178 [DEBUG] [Thread-138945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:05:37.178 [DEBUG] [Thread-138945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:05:37.227 [DEBUG] [Thread-138945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:05:37.227 [DEBUG] [Thread-138945] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:05:37.237 [DEBUG] [Thread-138945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:05:37.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:05:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:05:37.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:05:37.263 [DEBUG] [Thread-138947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:05:37.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:05:37.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:05:37.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:05:37.273 [DEBUG] [Thread-138945] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:05:52.322 [DEBUG] [Thread-138948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:05:58.398 [DEBUG] [Thread-138949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:06:07.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:06:07.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:06:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:06:07.356 [DEBUG] [Thread-138950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:06:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 5, 38), 0.44, 97.16, 0.0, 19.27, 6.59, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:06:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:05:38
2026-02-12T01:06:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:06:09.617 [DEBUG] [Thread-138951] [transport.py] [_log()] starting thread (client mode): 0xa57d4550
2026-02-12T01:06:09.617 [DEBUG] [Thread-138951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:06:09.636 [DEBUG] [Thread-138951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:06:09.637 [INFO] [Thread-138951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] client lang: <none>
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] server lang: <none>
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] kex follows: False
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] Compression: none
2026-02-12T01:06:09.640 [DEBUG] [Thread-138951] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:06:09.656 [DEBUG] [Thread-138951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:06:09.657 [DEBUG] [Thread-138951] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:06:09.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:06:09.658 [DEBUG] [Thread-138951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:06:09.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:06:09.660 [DEBUG] [Thread-138951] [transport.py] [_log()] userauth is OK
2026-02-12T01:06:09.660 [DEBUG] [Thread-138951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:06:09.660 [DEBUG] [Thread-138951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:06:09.660 [DEBUG] [Thread-138951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:06:09.660 [DEBUG] [Thread-138951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:06:09.684 [INFO] [Thread-138951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:06:09.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:06:10.335 [DEBUG] [Thread-138951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:06:10.336 [DEBUG] [Thread-138951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:06:10.336 [DEBUG] [Thread-138951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:06:10.376 [DEBUG] [Thread-138951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:06:10.377 [DEBUG] [Thread-138951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:06:10.380 [DEBUG] [Thread-138951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:06:10.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:06:10.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:06:10.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:06:10.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:06:10.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:06:10.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:06:10.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:06:10.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:06:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:06:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.961939 -999.00  +13.20  17.25     92  +12.00 1 3 1 3 1     0    0 0.90 -9.78 ..... 17.2 17.2 187.4 22.9 15.1 -3.8 14.8 -4.3 14.7 -4.3 15.1 -5.0
2026-02-12T01:06:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:06:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:06:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.961939
2026-02-12T01:06:10.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:06:10.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:06:10.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:06:10.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:06:10.408 [DEBUG] [Thread-138951] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:06:10.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:06:10.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:05:38', tmtdew=0.44, humidity=97.16, cloud=0.0, wind=19.27, temperature=6.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:05:11.530', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:06:10.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:06:10.503 [DEBUG] [Thread-138954] [transport.py] [_log()] starting thread (client mode): 0xa2dc0cd0
2026-02-12T01:06:10.504 [DEBUG] [Thread-138954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:06:10.518 [DEBUG] [Thread-138954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:06:10.518 [INFO] [Thread-138954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] client lang: <none>
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] server lang: <none>
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] kex follows: False
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:06:10.526 [DEBUG] [Thread-138954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:06:10.527 [DEBUG] [Thread-138954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:06:10.527 [DEBUG] [Thread-138954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:06:10.527 [DEBUG] [Thread-138954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:06:10.527 [DEBUG] [Thread-138954] [transport.py] [_log()] Compression: none
2026-02-12T01:06:10.527 [DEBUG] [Thread-138954] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:06:10.585 [DEBUG] [Thread-138954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:06:10.585 [DEBUG] [Thread-138954] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:06:10.586 [DEBUG] [Thread-138954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:06:10.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:06:10.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:06:10.649 [DEBUG] [Thread-138954] [transport.py] [_log()] userauth is OK
2026-02-12T01:06:10.649 [DEBUG] [Thread-138954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:06:10.649 [DEBUG] [Thread-138954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:06:10.650 [DEBUG] [Thread-138954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:06:10.650 [DEBUG] [Thread-138954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:06:10.668 [INFO] [Thread-138954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:06:10.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:06:10.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:06:11.477 [DEBUG] [Thread-138954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:06:11.477 [DEBUG] [Thread-138954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:06:11.525 [DEBUG] [Thread-138954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:06:11.526 [DEBUG] [Thread-138954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:06:11.537 [DEBUG] [Thread-138954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:06:11.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:06:11.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:06:11.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:06:11.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:06:11.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:06:11.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:06:11.573 [DEBUG] [Thread-138954] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:06:14.226 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:06:14.228 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:06:22.395 [DEBUG] [Thread-138956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:06:37.451 [DEBUG] [Thread-138957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:06:41.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:06:41.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:06:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:06:44.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 6, 14), 0.33, 97.75, 0.0, 18.0, 8.6, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:06:44.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:06:14
2026-02-12T01:06:44.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:06:44.695 [DEBUG] [Thread-138958] [transport.py] [_log()] starting thread (client mode): 0xa57c0af0
2026-02-12T01:06:44.695 [DEBUG] [Thread-138958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:06:44.710 [DEBUG] [Thread-138958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:06:44.710 [INFO] [Thread-138958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:06:44.713 [DEBUG] [Thread-138958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] client lang: <none>
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] server lang: <none>
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] kex follows: False
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:06:44.714 [DEBUG] [Thread-138958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:06:44.715 [DEBUG] [Thread-138958] [transport.py] [_log()] Compression: none
2026-02-12T01:06:44.715 [DEBUG] [Thread-138958] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:06:44.732 [DEBUG] [Thread-138958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:06:44.733 [DEBUG] [Thread-138958] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:06:44.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:06:44.735 [DEBUG] [Thread-138958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:06:44.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:06:44.737 [DEBUG] [Thread-138958] [transport.py] [_log()] userauth is OK
2026-02-12T01:06:44.737 [DEBUG] [Thread-138958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:06:44.737 [DEBUG] [Thread-138958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:06:44.737 [DEBUG] [Thread-138958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:06:44.737 [DEBUG] [Thread-138958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:06:44.763 [INFO] [Thread-138958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:06:44.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:06:45.389 [DEBUG] [Thread-138958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:06:45.390 [DEBUG] [Thread-138958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:06:45.390 [DEBUG] [Thread-138958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:06:45.430 [DEBUG] [Thread-138958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:06:45.431 [DEBUG] [Thread-138958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:06:45.434 [DEBUG] [Thread-138958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:06:45.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:06:45.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:06:45.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:06:45.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:06:45.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:06:45.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:06:45.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:06:45.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:06:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:06:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.962634 -999.00  +13.10  19.32     92  +12.00 1 3 1 3 1     0    0 0.84 -10.74 ....W 19.3 19.3 180.0 21.1 15.0 -4.7 14.8 -4.8 14.8 -5.0 15.1 -5.2
2026-02-12T01:06:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:06:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:06:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.962634
2026-02-12T01:06:45.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:06:45.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:06:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:06:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:06:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:06:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:06:14', tmtdew=0.33, humidity=97.75, cloud=0.0, wind=18.0, temperature=8.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:06:11.578', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:06:45.461 [DEBUG] [Thread-138958] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:06:45.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:06:45.559 [DEBUG] [Thread-138961] [transport.py] [_log()] starting thread (client mode): 0xa57d4250
2026-02-12T01:06:45.559 [DEBUG] [Thread-138961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:06:45.574 [DEBUG] [Thread-138961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:06:45.574 [INFO] [Thread-138961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:06:45.581 [DEBUG] [Thread-138961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:06:45.582 [DEBUG] [Thread-138961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:06:45.582 [DEBUG] [Thread-138961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:06:45.582 [DEBUG] [Thread-138961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:45.582 [DEBUG] [Thread-138961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:06:45.582 [DEBUG] [Thread-138961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:45.582 [DEBUG] [Thread-138961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] client lang: <none>
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] server lang: <none>
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] kex follows: False
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:06:45.583 [DEBUG] [Thread-138961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:06:45.584 [DEBUG] [Thread-138961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:06:45.584 [DEBUG] [Thread-138961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:06:45.584 [DEBUG] [Thread-138961] [transport.py] [_log()] Compression: none
2026-02-12T01:06:45.584 [DEBUG] [Thread-138961] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:06:45.639 [DEBUG] [Thread-138961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:06:45.640 [DEBUG] [Thread-138961] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:06:45.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:06:45.641 [DEBUG] [Thread-138961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:06:45.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:06:45.695 [DEBUG] [Thread-138961] [transport.py] [_log()] userauth is OK
2026-02-12T01:06:45.696 [DEBUG] [Thread-138961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:06:45.696 [DEBUG] [Thread-138961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:06:45.696 [DEBUG] [Thread-138961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:06:45.696 [DEBUG] [Thread-138961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:06:45.714 [INFO] [Thread-138961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:06:45.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:06:45.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:06:46.538 [DEBUG] [Thread-138961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:06:46.538 [DEBUG] [Thread-138961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:06:46.585 [DEBUG] [Thread-138961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:06:46.586 [DEBUG] [Thread-138961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:06:46.595 [DEBUG] [Thread-138961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:06:46.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:06:46.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:06:46.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:06:46.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:06:46.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:06:46.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:06:46.631 [DEBUG] [Thread-138961] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:06:52.490 [DEBUG] [Thread-138963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:06:58.474 [DEBUG] [Thread-138964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:07:07.542 [DEBUG] [Thread-138965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:07:14.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:07:14.434 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:07:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:07:16.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:07:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:07:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 6, 49), 0.49, 96.64, 0.0, 17.94, 13.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:07:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:06:49
2026-02-12T01:07:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:07:19.373 [DEBUG] [Thread-138966] [transport.py] [_log()] starting thread (client mode): 0xa57e1bd0
2026-02-12T01:07:19.373 [DEBUG] [Thread-138966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:07:19.390 [DEBUG] [Thread-138966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:07:19.390 [INFO] [Thread-138966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] client lang: <none>
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] server lang: <none>
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] kex follows: False
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] Compression: none
2026-02-12T01:07:19.391 [DEBUG] [Thread-138966] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:07:19.401 [DEBUG] [Thread-138966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:07:19.401 [DEBUG] [Thread-138966] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:07:19.402 [DEBUG] [Thread-138966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:07:19.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:07:19.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:07:19.403 [DEBUG] [Thread-138966] [transport.py] [_log()] userauth is OK
2026-02-12T01:07:19.403 [DEBUG] [Thread-138966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:07:19.403 [DEBUG] [Thread-138966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:07:19.403 [DEBUG] [Thread-138966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:07:19.403 [DEBUG] [Thread-138966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:07:19.420 [INFO] [Thread-138966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:07:19.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:07:20.147 [DEBUG] [Thread-138966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:07:20.147 [DEBUG] [Thread-138966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:07:20.147 [DEBUG] [Thread-138966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:07:20.188 [DEBUG] [Thread-138966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:07:20.188 [DEBUG] [Thread-138966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:07:20.191 [DEBUG] [Thread-138966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:07:20.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:07:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:07:20.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:07:20.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:07:20.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:07:20.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:07:20.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:07:20.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:07:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:07:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.962981 -999.00  +13.10  19.31     92  +12.00 1 3 1 3 1     0    0 0.88 -10.01 ....W 19.3 19.3 182.4 24.6 15.0 -4.8 14.7 -4.9 14.7 -4.8 15.1 -5.2
2026-02-12T01:07:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:07:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:07:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.962981
2026-02-12T01:07:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:07:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:07:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:07:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:07:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:07:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:06:49', tmtdew=0.49, humidity=96.64, cloud=0.0, wind=17.94, temperature=13.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:06:41.558', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:07:20.217 [DEBUG] [Thread-138966] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:07:20.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:07:20.311 [DEBUG] [Thread-138969] [transport.py] [_log()] starting thread (client mode): 0xa57d5630
2026-02-12T01:07:20.311 [DEBUG] [Thread-138969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:07:20.326 [DEBUG] [Thread-138969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:07:20.326 [INFO] [Thread-138969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:07:20.333 [DEBUG] [Thread-138969] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:07:20.333 [DEBUG] [Thread-138969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:07:20.333 [DEBUG] [Thread-138969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:07:20.333 [DEBUG] [Thread-138969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:20.333 [DEBUG] [Thread-138969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:20.333 [DEBUG] [Thread-138969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] client lang: <none>
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] server lang: <none>
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] kex follows: False
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] Compression: none
2026-02-12T01:07:20.334 [DEBUG] [Thread-138969] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:07:20.390 [DEBUG] [Thread-138969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:07:20.390 [DEBUG] [Thread-138969] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:07:20.391 [DEBUG] [Thread-138969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:07:20.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:07:20.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:07:20.447 [DEBUG] [Thread-138969] [transport.py] [_log()] userauth is OK
2026-02-12T01:07:20.447 [DEBUG] [Thread-138969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:07:20.447 [DEBUG] [Thread-138969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:07:20.447 [DEBUG] [Thread-138969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:07:20.447 [DEBUG] [Thread-138969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:07:20.466 [INFO] [Thread-138969] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:07:20.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:07:20.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:07:21.291 [DEBUG] [Thread-138969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:07:21.291 [DEBUG] [Thread-138969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:07:21.339 [DEBUG] [Thread-138969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:07:21.339 [DEBUG] [Thread-138969] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:07:21.348 [DEBUG] [Thread-138969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:07:21.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:07:21.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:07:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:07:21.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:07:21.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:07:21.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:07:21.385 [DEBUG] [Thread-138969] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:07:22.579 [DEBUG] [Thread-138971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:07:37.634 [DEBUG] [Thread-138972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:07:51.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:07:51.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:07:51.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
2026-02-12T01:07:52.673 [DEBUG] [Thread-138973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:07:53.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 7, 25), 0.48, 96.71, 0.0, 18.9, 13.14, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:07:53.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:07:25
2026-02-12T01:07:53.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:07:53.678 [DEBUG] [Thread-138974] [transport.py] [_log()] starting thread (client mode): 0xa57d5db0
2026-02-12T01:07:53.678 [DEBUG] [Thread-138974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:07:53.698 [DEBUG] [Thread-138974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:07:53.698 [INFO] [Thread-138974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] client lang: <none>
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] server lang: <none>
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] kex follows: False
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:07:53.701 [DEBUG] [Thread-138974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:07:53.702 [DEBUG] [Thread-138974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:07:53.702 [DEBUG] [Thread-138974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:07:53.702 [DEBUG] [Thread-138974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:07:53.702 [DEBUG] [Thread-138974] [transport.py] [_log()] Compression: none
2026-02-12T01:07:53.702 [DEBUG] [Thread-138974] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:07:53.717 [DEBUG] [Thread-138974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:07:53.718 [DEBUG] [Thread-138974] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:07:53.718 [DEBUG] [Thread-138974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:07:53.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:07:53.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:07:53.720 [DEBUG] [Thread-138974] [transport.py] [_log()] userauth is OK
2026-02-12T01:07:53.721 [DEBUG] [Thread-138974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:07:53.721 [DEBUG] [Thread-138974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:07:53.721 [DEBUG] [Thread-138974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:07:53.721 [DEBUG] [Thread-138974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:07:53.746 [INFO] [Thread-138974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:07:53.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:07:54.388 [DEBUG] [Thread-138974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:07:54.388 [DEBUG] [Thread-138974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:07:54.388 [DEBUG] [Thread-138974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:07:54.429 [DEBUG] [Thread-138974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:07:54.430 [DEBUG] [Thread-138974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:07:54.433 [DEBUG] [Thread-138974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:07:54.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:07:54.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:07:54.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:07:54.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:07:54.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:07:54.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:07:54.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:07:54.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:07:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:07:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.963328 -999.00  +13.10  16.42     92  +11.90 1 3 1 3 1     0    0 0.88 -10.22 ....W 16.4 16.4 178.8 22.6 15.0 -4.1 14.7 -4.5 14.6 -4.6 15.0 -5.1
2026-02-12T01:07:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:07:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:07:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.963328
2026-02-12T01:07:54.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:07:54.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:07:54.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:07:54.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:07:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:07:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:07:25', tmtdew=0.48, humidity=96.71, cloud=0.0, wind=18.9, temperature=13.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:07:11.539', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:07:54.461 [DEBUG] [Thread-138974] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:07:54.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:07:54.557 [DEBUG] [Thread-138977] [transport.py] [_log()] starting thread (client mode): 0xa57c0d90
2026-02-12T01:07:54.557 [DEBUG] [Thread-138977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:07:54.572 [DEBUG] [Thread-138977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:07:54.572 [INFO] [Thread-138977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:07:54.580 [DEBUG] [Thread-138977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:07:54.580 [DEBUG] [Thread-138977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:07:54.580 [DEBUG] [Thread-138977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] client lang: <none>
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] server lang: <none>
2026-02-12T01:07:54.581 [DEBUG] [Thread-138977] [transport.py] [_log()] kex follows: False
2026-02-12T01:07:54.582 [DEBUG] [Thread-138977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:07:54.582 [DEBUG] [Thread-138977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:07:54.582 [DEBUG] [Thread-138977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:07:54.582 [DEBUG] [Thread-138977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:07:54.584 [DEBUG] [Thread-138977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:07:54.585 [DEBUG] [Thread-138977] [transport.py] [_log()] Compression: none
2026-02-12T01:07:54.585 [DEBUG] [Thread-138977] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:07:54.639 [DEBUG] [Thread-138977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:07:54.639 [DEBUG] [Thread-138977] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:07:54.640 [DEBUG] [Thread-138977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:07:54.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:07:54.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:07:54.695 [DEBUG] [Thread-138977] [transport.py] [_log()] userauth is OK
2026-02-12T01:07:54.695 [DEBUG] [Thread-138977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:07:54.695 [DEBUG] [Thread-138977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:07:54.696 [DEBUG] [Thread-138977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:07:54.696 [DEBUG] [Thread-138977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:07:54.714 [INFO] [Thread-138977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:07:54.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:07:54.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:07:55.514 [DEBUG] [Thread-138977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:07:55.514 [DEBUG] [Thread-138977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:07:55.562 [DEBUG] [Thread-138977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:07:55.562 [DEBUG] [Thread-138977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:07:55.572 [DEBUG] [Thread-138977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:07:55.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:07:55.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:07:55.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:07:55.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:07:55.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:07:55.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:07:55.609 [DEBUG] [Thread-138977] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:07:58.538 [DEBUG] [Thread-138979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:08:07.707 [DEBUG] [Thread-138980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:08:14.638 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:08:14.639 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:08:22.761 [DEBUG] [Thread-138981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:08:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:08:25.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:08:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:08:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 8), 0.49, 96.66, 0.0, 19.11, 13.13, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:08:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:08:00
2026-02-12T01:08:28.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:08:28.581 [DEBUG] [Thread-138982] [transport.py] [_log()] starting thread (client mode): 0xa57c0550
2026-02-12T01:08:28.582 [DEBUG] [Thread-138982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:08:28.597 [DEBUG] [Thread-138982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:08:28.597 [INFO] [Thread-138982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] client lang: <none>
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] server lang: <none>
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] kex follows: False
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:08:28.601 [DEBUG] [Thread-138982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:08:28.602 [DEBUG] [Thread-138982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:08:28.602 [DEBUG] [Thread-138982] [transport.py] [_log()] Compression: none
2026-02-12T01:08:28.602 [DEBUG] [Thread-138982] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:08:28.620 [DEBUG] [Thread-138982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:08:28.620 [DEBUG] [Thread-138982] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:08:28.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:08:28.622 [DEBUG] [Thread-138982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:08:28.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:08:28.624 [DEBUG] [Thread-138982] [transport.py] [_log()] userauth is OK
2026-02-12T01:08:28.624 [DEBUG] [Thread-138982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:08:28.625 [DEBUG] [Thread-138982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:08:28.625 [DEBUG] [Thread-138982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:08:28.625 [DEBUG] [Thread-138982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:08:28.648 [INFO] [Thread-138982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:08:28.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:08:29.292 [DEBUG] [Thread-138982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:08:29.292 [DEBUG] [Thread-138982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:08:29.293 [DEBUG] [Thread-138982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:08:29.333 [DEBUG] [Thread-138982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:08:29.333 [DEBUG] [Thread-138982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:08:29.335 [DEBUG] [Thread-138982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:08:29.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:08:29.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:08:29.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:08:29.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:08:29.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:08:29.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:08:29.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.963675 -999.00  +13.10  17.90     92  +12.00 1 3 1 3 1     0    0 0.90 -9.13 z..s. 17.9 17.9 181.6 20.9 15.0 -4.9 14.8 -4.3 14.7 -4.1 15.0 -5.0
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.963675
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:08:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:08:00', tmtdew=0.49, humidity=96.66, cloud=0.0, wind=19.11, temperature=13.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:07:41.520', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:08:29.359 [DEBUG] [Thread-138982] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:08:29.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:08:29.449 [DEBUG] [Thread-138985] [transport.py] [_log()] starting thread (client mode): 0xa57c35b0
2026-02-12T01:08:29.449 [DEBUG] [Thread-138985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:08:29.464 [DEBUG] [Thread-138985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:08:29.464 [INFO] [Thread-138985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:08:29.471 [DEBUG] [Thread-138985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:08:29.471 [DEBUG] [Thread-138985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:08:29.471 [DEBUG] [Thread-138985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:08:29.471 [DEBUG] [Thread-138985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] client lang: <none>
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] server lang: <none>
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] kex follows: False
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] Compression: none
2026-02-12T01:08:29.472 [DEBUG] [Thread-138985] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:08:29.531 [DEBUG] [Thread-138985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:08:29.531 [DEBUG] [Thread-138985] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:08:29.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:08:29.533 [DEBUG] [Thread-138985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:08:29.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:08:29.587 [DEBUG] [Thread-138985] [transport.py] [_log()] userauth is OK
2026-02-12T01:08:29.587 [DEBUG] [Thread-138985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:08:29.587 [DEBUG] [Thread-138985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:08:29.587 [DEBUG] [Thread-138985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:08:29.587 [DEBUG] [Thread-138985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:08:29.612 [INFO] [Thread-138985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:08:29.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:08:29.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:08:30.405 [DEBUG] [Thread-138985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:08:30.405 [DEBUG] [Thread-138985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:08:30.453 [DEBUG] [Thread-138985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:08:30.454 [DEBUG] [Thread-138985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:08:30.463 [DEBUG] [Thread-138985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:08:30.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:08:30.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:08:30.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:08:30.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:08:30.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:08:30.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:08:30.508 [DEBUG] [Thread-138985] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:08:37.797 [DEBUG] [Thread-138987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:08:52.850 [DEBUG] [Thread-138988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:08:58.605 [DEBUG] [Thread-138989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:09:00.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:09:00.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:09:00.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
2026-02-12T01:09:02.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 8, 36), 0.87, 94.42, 0.0, 24.21, 13.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:09:02.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:08:36
2026-02-12T01:09:02.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:09:02.971 [DEBUG] [Thread-138990] [transport.py] [_log()] starting thread (client mode): 0xa57c1690
2026-02-12T01:09:02.972 [DEBUG] [Thread-138990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:09:02.991 [DEBUG] [Thread-138990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:09:02.991 [INFO] [Thread-138990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] client lang: <none>
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] server lang: <none>
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] kex follows: False
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:09:02.994 [DEBUG] [Thread-138990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:09:02.995 [DEBUG] [Thread-138990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:09:02.995 [DEBUG] [Thread-138990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:09:02.995 [DEBUG] [Thread-138990] [transport.py] [_log()] Compression: none
2026-02-12T01:09:02.995 [DEBUG] [Thread-138990] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:09:03.012 [DEBUG] [Thread-138990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:09:03.013 [DEBUG] [Thread-138990] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:09:03.013 [DEBUG] [Thread-138990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:09:03.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:09:03.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:09:03.015 [DEBUG] [Thread-138990] [transport.py] [_log()] userauth is OK
2026-02-12T01:09:03.016 [DEBUG] [Thread-138990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:09:03.016 [DEBUG] [Thread-138990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:09:03.016 [DEBUG] [Thread-138990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:09:03.016 [DEBUG] [Thread-138990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:09:03.052 [INFO] [Thread-138990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:09:03.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:09:03.691 [DEBUG] [Thread-138990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:09:03.691 [DEBUG] [Thread-138990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:09:03.692 [DEBUG] [Thread-138990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:09:03.732 [DEBUG] [Thread-138990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:09:03.733 [DEBUG] [Thread-138990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:09:03.736 [DEBUG] [Thread-138990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:09:03.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:09:03.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:09:03.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:09:03.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:09:03.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:09:03.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:09:03.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:09:03.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:09:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:09:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.964023 -999.00  +13.10  16.03     92  +12.00 1 3 1 3 1     0    0 0.84 -10.78 z..s. 16.0 16.0 186.0 21.1 15.0 -3.5 14.8 -4.1 14.7 -4.1 15.0 -4.5
2026-02-12T01:09:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:09:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:09:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.964023
2026-02-12T01:09:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:09:03.760 [DEBUG] [Thread-138990] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:09:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:09:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:09:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:09:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:09:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:08:36', tmtdew=0.87, humidity=94.42, cloud=0.0, wind=24.21, temperature=13.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:08:11.587', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:09:03.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:09:03.856 [DEBUG] [Thread-138993] [transport.py] [_log()] starting thread (client mode): 0xa2d9f5e0
2026-02-12T01:09:03.856 [DEBUG] [Thread-138993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:09:03.870 [DEBUG] [Thread-138993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:09:03.870 [INFO] [Thread-138993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:09:03.878 [DEBUG] [Thread-138993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:09:03.879 [DEBUG] [Thread-138993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:09:03.879 [DEBUG] [Thread-138993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:09:03.879 [DEBUG] [Thread-138993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:03.879 [DEBUG] [Thread-138993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:03.879 [DEBUG] [Thread-138993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] client lang: <none>
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] server lang: <none>
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] kex follows: False
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] Compression: none
2026-02-12T01:09:03.880 [DEBUG] [Thread-138993] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:09:03.933 [DEBUG] [Thread-138993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:09:03.934 [DEBUG] [Thread-138993] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:09:03.934 [DEBUG] [Thread-138993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:09:03.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:09:03.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:09:03.991 [DEBUG] [Thread-138993] [transport.py] [_log()] userauth is OK
2026-02-12T01:09:03.991 [DEBUG] [Thread-138993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:09:03.991 [DEBUG] [Thread-138993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:09:03.991 [DEBUG] [Thread-138993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:09:03.991 [DEBUG] [Thread-138993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:09:04.004 [INFO] [Thread-138993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:09:04.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:09:04.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:09:04.851 [DEBUG] [Thread-138993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:09:04.851 [DEBUG] [Thread-138993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:09:04.898 [DEBUG] [Thread-138993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:09:04.899 [DEBUG] [Thread-138993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:09:04.908 [DEBUG] [Thread-138993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:09:04.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:09:04.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:09:04.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:09:04.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:09:04.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:09:04.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:09:04.947 [DEBUG] [Thread-138993] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:09:07.889 [DEBUG] [Thread-138995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:09:14.855 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:09:14.856 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:09:22.948 [DEBUG] [Thread-138996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:09:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:09:34.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:09:34.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
2026-02-12T01:09:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 9, 13), 0.49, 96.64, 0.0, 18.7, 13.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:09:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:09:13
2026-02-12T01:09:37.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:09:37.267 [DEBUG] [Thread-138997] [transport.py] [_log()] starting thread (client mode): 0xa57c2530
2026-02-12T01:09:37.267 [DEBUG] [Thread-138997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:09:37.287 [DEBUG] [Thread-138997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:09:37.287 [INFO] [Thread-138997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:37.290 [DEBUG] [Thread-138997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] client lang: <none>
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] server lang: <none>
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] kex follows: False
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] Compression: none
2026-02-12T01:09:37.291 [DEBUG] [Thread-138997] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:09:37.309 [DEBUG] [Thread-138997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:09:37.309 [DEBUG] [Thread-138997] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:09:37.310 [DEBUG] [Thread-138997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:09:37.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:09:37.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:09:37.312 [DEBUG] [Thread-138997] [transport.py] [_log()] userauth is OK
2026-02-12T01:09:37.312 [DEBUG] [Thread-138997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:09:37.313 [DEBUG] [Thread-138997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:09:37.313 [DEBUG] [Thread-138997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:09:37.313 [DEBUG] [Thread-138997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:09:37.336 [INFO] [Thread-138997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:09:37.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:09:37.979 [DEBUG] [Thread-138997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:09:37.979 [DEBUG] [Thread-138997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:09:37.979 [DEBUG] [Thread-138997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:09:37.985 [DEBUG] [Thread-138999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:09:38.020 [DEBUG] [Thread-138997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:09:38.021 [DEBUG] [Thread-138997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:09:38.024 [DEBUG] [Thread-138997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:09:38.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:09:38.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:09:38.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:09:38.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:09:38.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:09:38.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:09:38.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:09:38.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:09:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:09:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.964370 -999.00  +13.10  16.25     92  +11.90 1 3 1 3 1     0    0 0.86 -10.43 ....w 16.2 16.2 177.8 22.4 15.0 -4.0 14.7 -5.2 14.7 -4.7 15.0 -4.2
2026-02-12T01:09:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:09:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:09:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.964370
2026-02-12T01:09:38.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:09:38.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:09:38.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:09:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:09:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:09:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:09:13', tmtdew=0.49, humidity=96.64, cloud=0.0, wind=18.7, temperature=13.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:08:41.568', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:09:38.052 [DEBUG] [Thread-138997] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:09:38.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:09:38.149 [DEBUG] [Thread-139001] [transport.py] [_log()] starting thread (client mode): 0x9eb07280
2026-02-12T01:09:38.149 [DEBUG] [Thread-139001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:09:38.163 [DEBUG] [Thread-139001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:09:38.164 [INFO] [Thread-139001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:09:38.171 [DEBUG] [Thread-139001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:09:38.171 [DEBUG] [Thread-139001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:09:38.171 [DEBUG] [Thread-139001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] client lang: <none>
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] server lang: <none>
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] kex follows: False
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] Compression: none
2026-02-12T01:09:38.172 [DEBUG] [Thread-139001] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:09:38.228 [DEBUG] [Thread-139001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:09:38.229 [DEBUG] [Thread-139001] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:09:38.229 [DEBUG] [Thread-139001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:09:38.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:09:38.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:09:38.285 [DEBUG] [Thread-139001] [transport.py] [_log()] userauth is OK
2026-02-12T01:09:38.285 [DEBUG] [Thread-139001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:09:38.285 [DEBUG] [Thread-139001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:09:38.285 [DEBUG] [Thread-139001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:09:38.285 [DEBUG] [Thread-139001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:09:38.308 [INFO] [Thread-139001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:09:38.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:09:38.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:09:39.173 [DEBUG] [Thread-139001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:09:39.173 [DEBUG] [Thread-139001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:09:39.221 [DEBUG] [Thread-139001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:09:39.222 [DEBUG] [Thread-139001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:09:39.231 [DEBUG] [Thread-139001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:09:39.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:09:39.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')
2026-02-12T01:09:39.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:09:39.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:09:39.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:09:39.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:09:39.269 [DEBUG] [Thread-139001] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:09:53.020 [DEBUG] [Thread-139003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:09:58.662 [DEBUG] [Thread-139004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:10:08.065 [DEBUG] [Thread-139005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:10:09.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:10:09.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:10:09.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:10:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 9, 48), 0.49, 96.64, 0.0, 18.61, 13.16, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:10:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:09:48
2026-02-12T01:10:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:10:11.560 [DEBUG] [Thread-139006] [transport.py] [_log()] starting thread (client mode): 0xa2dc0cd0
2026-02-12T01:10:11.560 [DEBUG] [Thread-139006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:10:11.579 [DEBUG] [Thread-139006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:10:11.579 [INFO] [Thread-139006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] client lang: <none>
2026-02-12T01:10:11.582 [DEBUG] [Thread-139006] [transport.py] [_log()] server lang: <none>
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] kex follows: False
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] Compression: none
2026-02-12T01:10:11.583 [DEBUG] [Thread-139006] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:10:11.600 [DEBUG] [Thread-139006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:10:11.600 [DEBUG] [Thread-139006] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:10:11.601 [DEBUG] [Thread-139006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:10:11.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:10:11.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:10:11.602 [DEBUG] [Thread-139006] [transport.py] [_log()] userauth is OK
2026-02-12T01:10:11.603 [DEBUG] [Thread-139006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:10:11.603 [DEBUG] [Thread-139006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:10:11.603 [DEBUG] [Thread-139006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:10:11.603 [DEBUG] [Thread-139006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:10:11.626 [INFO] [Thread-139006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:10:11.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:10:15.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:10:15.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:10:17.349 [DEBUG] [Thread-139006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:10:17.349 [DEBUG] [Thread-139006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:10:17.350 [DEBUG] [Thread-139006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:10:17.390 [DEBUG] [Thread-139006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:10:17.390 [DEBUG] [Thread-139006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:10:17.394 [DEBUG] [Thread-139006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:10:17.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:10:17.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:10:17.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:10:17.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:10:17.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:10:17.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:10:17.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:10:17.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:10:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:10:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.965411 -999.00  +13.10  19.07     92  +12.00 1 3 1 3 1     0    0 0.90 -9.22 ----- 19.1 19.1 181.4 23.3 14.9 -7.2 14.7 -7.9 14.6 -8.0 15.0 -7.7
2026-02-12T01:10:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:10:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:10:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.965411
2026-02-12T01:10:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:10:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:10:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:10:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:10:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:10:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:09:48', tmtdew=0.49, humidity=96.64, cloud=0.0, wind=18.61, temperature=13.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:10:11.510', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:10:17.421 [DEBUG] [Thread-139006] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:10:17.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:10:17.516 [DEBUG] [Thread-139008] [transport.py] [_log()] starting thread (client mode): 0xa2dc2da0
2026-02-12T01:10:17.517 [DEBUG] [Thread-139008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:10:17.531 [DEBUG] [Thread-139008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:10:17.531 [INFO] [Thread-139008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:10:17.538 [DEBUG] [Thread-139008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:10:17.539 [DEBUG] [Thread-139008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:10:17.539 [DEBUG] [Thread-139008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:10:17.539 [DEBUG] [Thread-139008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:17.539 [DEBUG] [Thread-139008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:17.539 [DEBUG] [Thread-139008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:17.539 [DEBUG] [Thread-139008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] client lang: <none>
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] server lang: <none>
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] kex follows: False
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:10:17.540 [DEBUG] [Thread-139008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:10:17.541 [DEBUG] [Thread-139008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:10:17.541 [DEBUG] [Thread-139008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:10:17.541 [DEBUG] [Thread-139008] [transport.py] [_log()] Compression: none
2026-02-12T01:10:17.541 [DEBUG] [Thread-139008] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:10:17.603 [DEBUG] [Thread-139008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:10:17.604 [DEBUG] [Thread-139008] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:10:17.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:10:17.605 [DEBUG] [Thread-139008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:10:17.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:10:17.658 [DEBUG] [Thread-139008] [transport.py] [_log()] userauth is OK
2026-02-12T01:10:17.659 [DEBUG] [Thread-139008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:10:17.659 [DEBUG] [Thread-139008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:10:17.659 [DEBUG] [Thread-139008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:10:17.659 [DEBUG] [Thread-139008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:10:17.687 [INFO] [Thread-139008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:10:17.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:10:17.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:10:18.476 [DEBUG] [Thread-139008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:10:18.477 [DEBUG] [Thread-139008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:10:18.524 [DEBUG] [Thread-139008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:10:18.525 [DEBUG] [Thread-139008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:10:18.534 [DEBUG] [Thread-139008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:10:18.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:10:18.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:10:18.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:10:18.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:10:18.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:10:18.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:10:18.570 [DEBUG] [Thread-139008] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:10:23.096 [DEBUG] [Thread-139010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:10:38.145 [DEBUG] [Thread-139011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:10:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:10:48.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:10:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:10:50.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 10, 23), 0.49, 96.66, 0.0, 16.73, 13.16, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:10:50.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:10:23
2026-02-12T01:10:50.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:10:51.067 [DEBUG] [Thread-139012] [transport.py] [_log()] starting thread (client mode): 0x9eb07550
2026-02-12T01:10:51.067 [DEBUG] [Thread-139012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:10:51.079 [DEBUG] [Thread-139012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:10:51.079 [INFO] [Thread-139012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:10:51.082 [DEBUG] [Thread-139012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:10:51.082 [DEBUG] [Thread-139012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:10:51.082 [DEBUG] [Thread-139012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] client lang: <none>
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] server lang: <none>
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] kex follows: False
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] Compression: none
2026-02-12T01:10:51.083 [DEBUG] [Thread-139012] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:10:51.090 [DEBUG] [Thread-139012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:10:51.090 [DEBUG] [Thread-139012] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:10:51.090 [DEBUG] [Thread-139012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:10:51.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:10:51.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:10:51.091 [DEBUG] [Thread-139012] [transport.py] [_log()] userauth is OK
2026-02-12T01:10:51.091 [DEBUG] [Thread-139012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:10:51.091 [DEBUG] [Thread-139012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:10:51.091 [DEBUG] [Thread-139012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:10:51.091 [DEBUG] [Thread-139012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:10:51.109 [INFO] [Thread-139012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:10:51.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:10:51.687 [DEBUG] [Thread-139012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:10:51.687 [DEBUG] [Thread-139012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:10:51.687 [DEBUG] [Thread-139012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:10:51.729 [DEBUG] [Thread-139012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:10:51.729 [DEBUG] [Thread-139012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:10:51.732 [DEBUG] [Thread-139012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:10:51.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:10:51.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:10:51.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:10:51.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:10:51.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:10:51.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:10:51.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:10:51.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:10:51.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:10:51.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.965759 -999.00  +13.00  18.15     92  +11.90 1 3 1 3 1     0    0 0.93 -8.61 Z..S. 18.1 18.1 168.0 26.0 14.9 -7.2 14.7 -6.7 14.6 -6.5 15.0 -8.0
2026-02-12T01:10:51.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:10:51.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:10:51.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.965759
2026-02-12T01:10:51.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:10:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:10:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:10:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:10:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:10:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:10:23', tmtdew=0.49, humidity=96.66, cloud=0.0, wind=16.73, temperature=13.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:10:41.578', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:10:51.751 [DEBUG] [Thread-139012] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:10:51.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:10:51.845 [DEBUG] [Thread-139015] [transport.py] [_log()] starting thread (client mode): 0x9eb07c40
2026-02-12T01:10:51.845 [DEBUG] [Thread-139015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:10:51.861 [DEBUG] [Thread-139015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:10:51.861 [INFO] [Thread-139015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:10:51.868 [DEBUG] [Thread-139015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] client lang: <none>
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] server lang: <none>
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] kex follows: False
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:10:51.869 [DEBUG] [Thread-139015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:10:51.870 [DEBUG] [Thread-139015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:10:51.870 [DEBUG] [Thread-139015] [transport.py] [_log()] Compression: none
2026-02-12T01:10:51.870 [DEBUG] [Thread-139015] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:10:51.930 [DEBUG] [Thread-139015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:10:51.931 [DEBUG] [Thread-139015] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:10:51.931 [DEBUG] [Thread-139015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:10:51.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:10:51.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:10:51.989 [DEBUG] [Thread-139015] [transport.py] [_log()] userauth is OK
2026-02-12T01:10:51.990 [DEBUG] [Thread-139015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:10:51.990 [DEBUG] [Thread-139015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:10:51.990 [DEBUG] [Thread-139015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:10:51.990 [DEBUG] [Thread-139015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:10:52.008 [INFO] [Thread-139015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:10:52.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:10:52.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:10:52.811 [DEBUG] [Thread-139015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:10:52.811 [DEBUG] [Thread-139015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:10:53.017 [DEBUG] [Thread-139015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:10:53.017 [DEBUG] [Thread-139015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:10:53.025 [DEBUG] [Thread-139015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:10:53.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:10:53.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')
2026-02-12T01:10:53.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:10:53.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:10:53.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:10:53.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:10:53.063 [DEBUG] [Thread-139015] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:10:53.183 [DEBUG] [Thread-139017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:10:58.728 [DEBUG] [Thread-139018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:08.242 [DEBUG] [Thread-139019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:15.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:15.274 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:11:23.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:11:23.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
2026-02-12T01:11:23.278 [DEBUG] [Thread-139020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 10, 58), 0.54, 96.64, 0.0, 24.0, 13.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:11:25.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:10:58
2026-02-12T01:11:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:11:25.637 [DEBUG] [Thread-139021] [transport.py] [_log()] starting thread (client mode): 0xa57e1900
2026-02-12T01:11:25.637 [DEBUG] [Thread-139021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:11:25.657 [DEBUG] [Thread-139021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:11:25.657 [INFO] [Thread-139021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:11:25.662 [DEBUG] [Thread-139021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:11:25.662 [DEBUG] [Thread-139021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:11:25.662 [DEBUG] [Thread-139021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:11:25.662 [DEBUG] [Thread-139021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:11:25.662 [DEBUG] [Thread-139021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:11:25.662 [DEBUG] [Thread-139021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] client lang: <none>
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] server lang: <none>
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] kex follows: False
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] Compression: none
2026-02-12T01:11:25.663 [DEBUG] [Thread-139021] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:11:25.683 [DEBUG] [Thread-139021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:11:25.684 [DEBUG] [Thread-139021] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:11:25.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:11:25.685 [DEBUG] [Thread-139021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:11:25.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:11:25.687 [DEBUG] [Thread-139021] [transport.py] [_log()] userauth is OK
2026-02-12T01:11:25.687 [DEBUG] [Thread-139021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:11:25.687 [DEBUG] [Thread-139021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:11:25.687 [DEBUG] [Thread-139021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:11:25.687 [DEBUG] [Thread-139021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:11:25.702 [INFO] [Thread-139021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:11:25.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:11:26.266 [DEBUG] [Thread-139021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:11:26.266 [DEBUG] [Thread-139021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:11:26.266 [DEBUG] [Thread-139021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:11:26.307 [DEBUG] [Thread-139021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:11:26.307 [DEBUG] [Thread-139021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:11:26.310 [DEBUG] [Thread-139021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:11:26.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:11:26.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:11:26.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:11:26.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:11:26.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:11:26.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:11:26.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:11:26.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:11:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:11:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.966106 -999.00  +13.10  10.58     92  +11.90 1 3 1 3 1     0    0 0.95 -7.69 Z..S. 10.6 10.6 184.4 16.9 14.9 -5.3 14.7 -5.3 14.6 -5.0 14.9 -6.5
2026-02-12T01:11:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:11:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:11:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.966106
2026-02-12T01:11:26.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:11:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:11:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:11:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:11:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:11:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:10:58', tmtdew=0.54, humidity=96.64, cloud=0.0, wind=24.0, temperature=13.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:11:11.558', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:11:26.335 [DEBUG] [Thread-139021] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:11:26.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:11:26.431 [DEBUG] [Thread-139024] [transport.py] [_log()] starting thread (client mode): 0x9eb05270
2026-02-12T01:11:26.431 [DEBUG] [Thread-139024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:11:26.445 [DEBUG] [Thread-139024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:11:26.445 [INFO] [Thread-139024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:11:26.453 [DEBUG] [Thread-139024] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:11:26.453 [DEBUG] [Thread-139024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:11:26.453 [DEBUG] [Thread-139024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:11:26.453 [DEBUG] [Thread-139024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:11:26.453 [DEBUG] [Thread-139024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:11:26.453 [DEBUG] [Thread-139024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:11:26.453 [DEBUG] [Thread-139024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] client lang: <none>
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] server lang: <none>
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] kex follows: False
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] Compression: none
2026-02-12T01:11:26.454 [DEBUG] [Thread-139024] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:11:26.515 [DEBUG] [Thread-139024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:11:26.516 [DEBUG] [Thread-139024] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:11:26.517 [DEBUG] [Thread-139024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:11:26.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:11:26.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:11:26.571 [DEBUG] [Thread-139024] [transport.py] [_log()] userauth is OK
2026-02-12T01:11:26.572 [DEBUG] [Thread-139024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:11:26.572 [DEBUG] [Thread-139024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:11:26.572 [DEBUG] [Thread-139024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:11:26.572 [DEBUG] [Thread-139024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:11:26.590 [INFO] [Thread-139024] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:11:26.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:11:26.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:11:27.377 [DEBUG] [Thread-139024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:11:27.378 [DEBUG] [Thread-139024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:11:27.427 [DEBUG] [Thread-139024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:11:27.427 [DEBUG] [Thread-139024] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:11:27.436 [DEBUG] [Thread-139024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:11:27.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:11:27.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:11:27.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:11:27.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:11:27.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:11:27.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:11:27.478 [DEBUG] [Thread-139024] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:11:38.314 [DEBUG] [Thread-139026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:53.364 [DEBUG] [Thread-139027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:11:57.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:11:57.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:11:58.792 [DEBUG] [Thread-139028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:11:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 11, 33), 0.91, 94.12, 0.0, 25.79, 13.36, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:11:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:11:33
2026-02-12T01:12:00.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:12:00.338 [DEBUG] [Thread-139029] [transport.py] [_log()] starting thread (client mode): 0x9eb04fa0
2026-02-12T01:12:00.338 [DEBUG] [Thread-139029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:12:00.358 [DEBUG] [Thread-139029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:12:00.359 [INFO] [Thread-139029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:12:00.362 [DEBUG] [Thread-139029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:12:00.362 [DEBUG] [Thread-139029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:12:00.362 [DEBUG] [Thread-139029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:12:00.362 [DEBUG] [Thread-139029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:00.362 [DEBUG] [Thread-139029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:00.362 [DEBUG] [Thread-139029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] client lang: <none>
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] server lang: <none>
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] kex follows: False
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] Compression: none
2026-02-12T01:12:00.363 [DEBUG] [Thread-139029] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:12:00.382 [DEBUG] [Thread-139029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:12:00.383 [DEBUG] [Thread-139029] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:12:00.383 [DEBUG] [Thread-139029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:12:00.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:12:00.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:12:00.385 [DEBUG] [Thread-139029] [transport.py] [_log()] userauth is OK
2026-02-12T01:12:00.385 [DEBUG] [Thread-139029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:12:00.386 [DEBUG] [Thread-139029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:12:00.386 [DEBUG] [Thread-139029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:12:00.386 [DEBUG] [Thread-139029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:12:00.410 [INFO] [Thread-139029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:12:00.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:12:00.986 [DEBUG] [Thread-139029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:12:00.987 [DEBUG] [Thread-139029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:12:00.987 [DEBUG] [Thread-139029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:12:01.027 [DEBUG] [Thread-139029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:12:01.027 [DEBUG] [Thread-139029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:12:01.028 [DEBUG] [Thread-139029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:12:01.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:12:01.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:12:01.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:12:01.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:12:01.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:12:01.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:12:01.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.966106 -999.00  +13.10  10.58     92  +11.90 1 3 1 3 1     0    0 0.95 -7.69 Z..S. 10.6 10.6 184.4 16.9 14.9 -5.3 14.7 -5.3 14.6 -5.0 14.9 -6.5
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.966106
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:12:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:11:33', tmtdew=0.91, humidity=94.12, cloud=0.0, wind=25.79, temperature=13.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:11:11.558', atlas_cloud=3, atlas_rain=1, zp_data=[2.6667499999999995, nan, 1.4432500000000008, 2.7704999999999993, 2.4415000000000004, 2.343250000000001, nan, nan, nan, nan, 3.2002499999999996, nan, 2.2649999999999997, 2.0302499999999997, 2.9689999999999994, nan, nan, nan, nan, nan, 2.158999999999999, 1.8062499999999986, 2.463750000000001, nan, nan, nan, nan, nan, 2.093, 1.3895000000000008, 1.721000000000001, nan, nan], zp_timestamp='2026-02-11T23:02:00')
2026-02-12T01:12:01.043 [DEBUG] [Thread-139029] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:12:01.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:12:01.128 [DEBUG] [Thread-139032] [transport.py] [_log()] starting thread (client mode): 0xa2d9f250
2026-02-12T01:12:01.128 [DEBUG] [Thread-139032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:12:01.143 [DEBUG] [Thread-139032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:12:01.143 [INFO] [Thread-139032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:12:01.151 [DEBUG] [Thread-139032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:12:01.151 [DEBUG] [Thread-139032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:12:01.151 [DEBUG] [Thread-139032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:12:01.151 [DEBUG] [Thread-139032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:01.151 [DEBUG] [Thread-139032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] client lang: <none>
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] server lang: <none>
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] kex follows: False
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] Compression: none
2026-02-12T01:12:01.152 [DEBUG] [Thread-139032] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:12:01.213 [DEBUG] [Thread-139032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:12:01.214 [DEBUG] [Thread-139032] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:12:01.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:12:01.215 [DEBUG] [Thread-139032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:12:01.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:12:01.274 [DEBUG] [Thread-139032] [transport.py] [_log()] userauth is OK
2026-02-12T01:12:01.275 [DEBUG] [Thread-139032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:12:01.275 [DEBUG] [Thread-139032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:12:01.275 [DEBUG] [Thread-139032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:12:01.275 [DEBUG] [Thread-139032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:12:01.293 [INFO] [Thread-139032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:12:01.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:12:01.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:12:02.127 [DEBUG] [Thread-139032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:12:02.127 [DEBUG] [Thread-139032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:12:02.175 [DEBUG] [Thread-139032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:12:02.176 [DEBUG] [Thread-139032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:12:02.185 [DEBUG] [Thread-139032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:12:02.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:12:02.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:12:02.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:12:02.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:12:02.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:12:02.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:12:02.225 [DEBUG] [Thread-139032] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:12:08.403 [DEBUG] [Thread-139034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:12:15.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:12:15.478 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:12:23.458 [DEBUG] [Thread-139035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:12:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:12:32.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:12:32.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:12:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 12, 9), 0.5, 96.58, 0.0, 19.92, 13.03, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:12:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:12:09
2026-02-12T01:12:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:12:34.666 [DEBUG] [Thread-139036] [transport.py] [_log()] starting thread (client mode): 0xa2d94820
2026-02-12T01:12:34.667 [DEBUG] [Thread-139036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:12:34.688 [DEBUG] [Thread-139036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:12:34.688 [INFO] [Thread-139036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:12:34.691 [DEBUG] [Thread-139036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:12:34.691 [DEBUG] [Thread-139036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:12:34.691 [DEBUG] [Thread-139036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] client lang: <none>
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] server lang: <none>
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] kex follows: False
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] Compression: none
2026-02-12T01:12:34.692 [DEBUG] [Thread-139036] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:12:34.709 [DEBUG] [Thread-139036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:12:34.710 [DEBUG] [Thread-139036] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:12:34.710 [DEBUG] [Thread-139036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:12:34.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:12:34.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:12:34.713 [DEBUG] [Thread-139036] [transport.py] [_log()] userauth is OK
2026-02-12T01:12:34.713 [DEBUG] [Thread-139036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:12:34.713 [DEBUG] [Thread-139036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:12:34.713 [DEBUG] [Thread-139036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:12:34.713 [DEBUG] [Thread-139036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:12:34.734 [INFO] [Thread-139036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:12:34.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:12:35.336 [DEBUG] [Thread-139036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:12:35.337 [DEBUG] [Thread-139036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:12:35.337 [DEBUG] [Thread-139036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:12:35.378 [DEBUG] [Thread-139036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:12:35.378 [DEBUG] [Thread-139036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:12:35.382 [DEBUG] [Thread-139036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:12:35.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:12:35.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:12:35.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:12:35.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:12:35.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:12:35.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:12:35.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:12:35.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:12:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:12:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.966453 -999.00  +13.10  17.41     92  +11.90 1 3 1 3 1     0    0 0.92 -7.26 Z..SW 17.4 17.4 184.6 23.0 14.9 -5.7 14.7 -6.7 14.6 -6.9 15.0 -5.8
2026-02-12T01:12:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:12:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:12:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.966453
2026-02-12T01:12:35.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:12:35.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:12:35.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:12:35.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:12:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:12:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:12:09', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=19.92, temperature=13.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:11:41.539', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 3.011499999999999, 2.6725000000000003, nan, nan, nan, nan, nan, 2.5962499999999995, nan, 2.2539999999999996, 2.5302499999999997, 2.545, nan, nan, nan, nan, nan, 1.6324999999999985, 2.005749999999999, nan, nan, nan, nan, nan, nan, 0.9465000000000003, 0.5405000000000024, nan, nan, nan], zp_timestamp='2026-02-11T23:11:00')
2026-02-12T01:12:35.409 [DEBUG] [Thread-139036] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:12:35.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:12:35.505 [DEBUG] [Thread-139039] [transport.py] [_log()] starting thread (client mode): 0xa2d955a0
2026-02-12T01:12:35.505 [DEBUG] [Thread-139039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:12:35.520 [DEBUG] [Thread-139039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:12:35.520 [INFO] [Thread-139039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] client lang: <none>
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] server lang: <none>
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] kex follows: False
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:12:35.528 [DEBUG] [Thread-139039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:12:35.529 [DEBUG] [Thread-139039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:12:35.529 [DEBUG] [Thread-139039] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:12:35.529 [DEBUG] [Thread-139039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:12:35.529 [DEBUG] [Thread-139039] [transport.py] [_log()] Compression: none
2026-02-12T01:12:35.529 [DEBUG] [Thread-139039] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:12:35.584 [DEBUG] [Thread-139039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:12:35.585 [DEBUG] [Thread-139039] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:12:35.586 [DEBUG] [Thread-139039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:12:35.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:12:35.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:12:35.645 [DEBUG] [Thread-139039] [transport.py] [_log()] userauth is OK
2026-02-12T01:12:35.645 [DEBUG] [Thread-139039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:12:35.646 [DEBUG] [Thread-139039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:12:35.646 [DEBUG] [Thread-139039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:12:35.646 [DEBUG] [Thread-139039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:12:35.664 [INFO] [Thread-139039] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:12:35.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:12:35.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:12:36.475 [DEBUG] [Thread-139039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:12:36.476 [DEBUG] [Thread-139039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:12:36.523 [DEBUG] [Thread-139039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:12:36.524 [DEBUG] [Thread-139039] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:12:36.533 [DEBUG] [Thread-139039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:12:36.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:12:36.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:12:36.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:12:36.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:12:36.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:12:36.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:12:36.570 [DEBUG] [Thread-139039] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:12:38.496 [DEBUG] [Thread-139041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:12:53.551 [DEBUG] [Thread-139042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:12:58.867 [DEBUG] [Thread-139043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:13:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:13:06.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:13:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:13:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 12, 45), 0.5, 96.61, 0.0, 16.97, 13.06, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:13:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:12:45
2026-02-12T01:13:08.587 [DEBUG] [Thread-139044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:13:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:13:08.999 [DEBUG] [Thread-139045] [transport.py] [_log()] starting thread (client mode): 0xa57e13c0
2026-02-12T01:13:08.999 [DEBUG] [Thread-139045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:13:09.018 [DEBUG] [Thread-139045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:13:09.018 [INFO] [Thread-139045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:13:09.021 [DEBUG] [Thread-139045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:13:09.021 [DEBUG] [Thread-139045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:13:09.021 [DEBUG] [Thread-139045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:13:09.021 [DEBUG] [Thread-139045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] client lang: <none>
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] server lang: <none>
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] kex follows: False
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] Compression: none
2026-02-12T01:13:09.022 [DEBUG] [Thread-139045] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:13:09.040 [DEBUG] [Thread-139045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:13:09.041 [DEBUG] [Thread-139045] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:13:09.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:13:09.042 [DEBUG] [Thread-139045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:13:09.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:13:09.044 [DEBUG] [Thread-139045] [transport.py] [_log()] userauth is OK
2026-02-12T01:13:09.044 [DEBUG] [Thread-139045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:13:09.044 [DEBUG] [Thread-139045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:13:09.044 [DEBUG] [Thread-139045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:13:09.044 [DEBUG] [Thread-139045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:13:09.068 [INFO] [Thread-139045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:13:09.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:13:09.795 [DEBUG] [Thread-139045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:13:09.796 [DEBUG] [Thread-139045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:13:09.796 [DEBUG] [Thread-139045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:13:09.836 [DEBUG] [Thread-139045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:13:09.836 [DEBUG] [Thread-139045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:13:09.840 [DEBUG] [Thread-139045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:13:09.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:13:09.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:13:09.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:13:09.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:13:09.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:13:09.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:13:09.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:13:09.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:13:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:13:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.966800 -999.00  +13.10  17.42     92  +11.90 1 3 1 3 1     0    0 0.93 -7.16 ....W 17.4 17.4 180.8 21.2 14.9 -8.6 14.7 -9.6 14.6 -9.1 14.9 -7.2
2026-02-12T01:13:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:13:09.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:13:09.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.966800
2026-02-12T01:13:09.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:13:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:13:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:13:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:13:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:13:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:12:45', tmtdew=0.5, humidity=96.61, cloud=0.0, wind=16.97, temperature=13.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:12:11.520', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 3.011499999999999, 2.6725000000000003, nan, nan, nan, nan, nan, 2.5962499999999995, nan, 2.2539999999999996, 2.5302499999999997, 2.545, nan, nan, nan, nan, nan, 1.6324999999999985, 2.005749999999999, nan, nan, nan, nan, nan, nan, 0.9465000000000003, 0.5405000000000024, nan, nan, nan], zp_timestamp='2026-02-11T23:11:00')
2026-02-12T01:13:09.862 [DEBUG] [Thread-139045] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:13:09.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:13:09.959 [DEBUG] [Thread-139048] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fd0
2026-02-12T01:13:09.960 [DEBUG] [Thread-139048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:13:09.974 [DEBUG] [Thread-139048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:13:09.974 [INFO] [Thread-139048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:09.982 [DEBUG] [Thread-139048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] client lang: <none>
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] server lang: <none>
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] kex follows: False
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] Compression: none
2026-02-12T01:13:09.983 [DEBUG] [Thread-139048] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:13:10.039 [DEBUG] [Thread-139048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:13:10.040 [DEBUG] [Thread-139048] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:13:10.040 [DEBUG] [Thread-139048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:13:10.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:13:10.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:13:10.095 [DEBUG] [Thread-139048] [transport.py] [_log()] userauth is OK
2026-02-12T01:13:10.096 [DEBUG] [Thread-139048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:13:10.096 [DEBUG] [Thread-139048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:13:10.096 [DEBUG] [Thread-139048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:13:10.096 [DEBUG] [Thread-139048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:13:10.115 [INFO] [Thread-139048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:13:10.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:13:10.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:13:10.922 [DEBUG] [Thread-139048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:13:10.922 [DEBUG] [Thread-139048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:13:10.970 [DEBUG] [Thread-139048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:13:10.970 [DEBUG] [Thread-139048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:13:10.980 [DEBUG] [Thread-139048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:13:10.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:13:10.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:13:10.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:13:11.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:13:11.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:13:11.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:13:11.015 [DEBUG] [Thread-139048] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:13:15.679 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:13:15.681 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:13:23.623 [DEBUG] [Thread-139050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:13:38.668 [DEBUG] [Thread-139051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:13:41.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:13:41.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:13:41.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
2026-02-12T01:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 13, 20), 0.5, 96.58, 0.0, 19.16, 13.08, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:13:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:13:20
2026-02-12T01:13:43.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:13:43.402 [DEBUG] [Thread-139052] [transport.py] [_log()] starting thread (client mode): 0xa2d9db10
2026-02-12T01:13:43.402 [DEBUG] [Thread-139052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:13:43.422 [DEBUG] [Thread-139052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:13:43.422 [INFO] [Thread-139052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:13:43.425 [DEBUG] [Thread-139052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:13:43.425 [DEBUG] [Thread-139052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:13:43.425 [DEBUG] [Thread-139052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:13:43.425 [DEBUG] [Thread-139052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] client lang: <none>
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] server lang: <none>
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] kex follows: False
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] Compression: none
2026-02-12T01:13:43.426 [DEBUG] [Thread-139052] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:13:43.442 [DEBUG] [Thread-139052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:13:43.443 [DEBUG] [Thread-139052] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:13:43.444 [DEBUG] [Thread-139052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:13:43.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:13:43.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:13:43.446 [DEBUG] [Thread-139052] [transport.py] [_log()] userauth is OK
2026-02-12T01:13:43.446 [DEBUG] [Thread-139052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:13:43.446 [DEBUG] [Thread-139052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:13:43.446 [DEBUG] [Thread-139052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:13:43.446 [DEBUG] [Thread-139052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:13:43.482 [INFO] [Thread-139052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:13:43.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:13:44.136 [DEBUG] [Thread-139052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:13:44.136 [DEBUG] [Thread-139052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:13:44.137 [DEBUG] [Thread-139052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:13:44.178 [DEBUG] [Thread-139052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:13:44.178 [DEBUG] [Thread-139052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:13:44.181 [DEBUG] [Thread-139052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:13:44.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:13:44.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:13:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:13:44.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:13:44.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:13:44.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:13:44.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:13:44.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:13:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:13:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.967148 -999.00  +13.10  15.93     92  +11.90 1 3 1 3 1     0    0 0.99 -6.25 ....W 15.9 15.9 178.6 20.1 14.9 -9.2 14.7 -9.4 14.6 -9.1 14.9 -10.0
2026-02-12T01:13:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:13:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:13:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.967148
2026-02-12T01:13:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:13:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:13:44.209 [DEBUG] [Thread-139052] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:13:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:13:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:13:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:13:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:13:20', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=19.16, temperature=13.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:12:41.587', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 3.011499999999999, 2.6725000000000003, nan, nan, nan, nan, nan, 2.5962499999999995, nan, 2.2539999999999996, 2.5302499999999997, 2.545, nan, nan, nan, nan, nan, 1.6324999999999985, 2.005749999999999, nan, nan, nan, nan, nan, nan, 0.9465000000000003, 0.5405000000000024, nan, nan, nan], zp_timestamp='2026-02-11T23:11:00')
2026-02-12T01:13:44.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:13:44.313 [DEBUG] [Thread-139055] [transport.py] [_log()] starting thread (client mode): 0x9eb072b0
2026-02-12T01:13:44.313 [DEBUG] [Thread-139055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:13:44.328 [DEBUG] [Thread-139055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:13:44.328 [INFO] [Thread-139055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:13:44.335 [DEBUG] [Thread-139055] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] client lang: <none>
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] server lang: <none>
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] kex follows: False
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:13:44.336 [DEBUG] [Thread-139055] [transport.py] [_log()] Compression: none
2026-02-12T01:13:44.337 [DEBUG] [Thread-139055] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:13:44.395 [DEBUG] [Thread-139055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:13:44.395 [DEBUG] [Thread-139055] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:13:44.396 [DEBUG] [Thread-139055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:13:44.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:13:44.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:13:44.450 [DEBUG] [Thread-139055] [transport.py] [_log()] userauth is OK
2026-02-12T01:13:44.450 [DEBUG] [Thread-139055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:13:44.450 [DEBUG] [Thread-139055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:13:44.450 [DEBUG] [Thread-139055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:13:44.450 [DEBUG] [Thread-139055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:13:44.468 [INFO] [Thread-139055] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:13:44.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:13:44.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:13:45.285 [DEBUG] [Thread-139055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:13:45.286 [DEBUG] [Thread-139055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:13:45.333 [DEBUG] [Thread-139055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:13:45.334 [DEBUG] [Thread-139055] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:13:45.343 [DEBUG] [Thread-139055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:13:45.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:13:45.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:13:45.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:13:45.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:13:45.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:13:45.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:13:45.380 [DEBUG] [Thread-139055] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:13:53.704 [DEBUG] [Thread-139057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:13:58.940 [DEBUG] [Thread-139058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:14:08.757 [DEBUG] [Thread-139059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:14:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:14:15.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:14:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:14:15.884 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:14:15.885 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:14:17.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 13, 55), 0.52, 96.5, 0.0, 18.46, 13.04, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:14:17.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:13:55
2026-02-12T01:14:17.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:14:17.675 [DEBUG] [Thread-139060] [transport.py] [_log()] starting thread (client mode): 0xa2d9c5b0
2026-02-12T01:14:17.676 [DEBUG] [Thread-139060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:14:17.697 [DEBUG] [Thread-139060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:14:17.697 [INFO] [Thread-139060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:14:17.700 [DEBUG] [Thread-139060] [transport.py] [_log()] client lang: <none>
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] server lang: <none>
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] kex follows: False
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] Compression: none
2026-02-12T01:14:17.701 [DEBUG] [Thread-139060] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:14:17.720 [DEBUG] [Thread-139060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:14:17.720 [DEBUG] [Thread-139060] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:14:17.721 [DEBUG] [Thread-139060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:14:17.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:14:17.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:14:17.723 [DEBUG] [Thread-139060] [transport.py] [_log()] userauth is OK
2026-02-12T01:14:17.723 [DEBUG] [Thread-139060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:14:17.723 [DEBUG] [Thread-139060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:14:17.723 [DEBUG] [Thread-139060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:14:17.723 [DEBUG] [Thread-139060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:14:17.748 [INFO] [Thread-139060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:14:17.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:14:18.404 [DEBUG] [Thread-139060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:14:18.404 [DEBUG] [Thread-139060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:14:18.405 [DEBUG] [Thread-139060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:14:18.445 [DEBUG] [Thread-139060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:14:18.446 [DEBUG] [Thread-139060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:14:18.449 [DEBUG] [Thread-139060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:14:18.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:14:18.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:14:18.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:14:18.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:14:18.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:14:18.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:14:18.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:14:18.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:14:18.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:14:18.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.967842 -999.00  +13.10  12.31     92  +11.90 1 2 1 3 1     0    0 1.02 -4.47 ZN..W 12.3 12.3 173.2 16.2 14.8 -11.9 14.7 -11.9 14.6 -11.4 14.9 -11.2
2026-02-12T01:14:18.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:14:18.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:14:18.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.967842
2026-02-12T01:14:18.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:14:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:14:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:14:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:14:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:14:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:13:55', tmtdew=0.52, humidity=96.5, cloud=0.0, wind=18.46, temperature=13.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:13:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 3.011499999999999, 2.6725000000000003, nan, nan, nan, nan, nan, 2.5962499999999995, nan, 2.2539999999999996, 2.5302499999999997, 2.545, nan, nan, nan, nan, nan, 1.6324999999999985, 2.005749999999999, nan, nan, nan, nan, nan, nan, 0.9465000000000003, 0.5405000000000024, nan, nan, nan], zp_timestamp='2026-02-11T23:11:00')
2026-02-12T01:14:18.474 [DEBUG] [Thread-139060] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:14:18.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:14:18.568 [DEBUG] [Thread-139063] [transport.py] [_log()] starting thread (client mode): 0xa57c2200
2026-02-12T01:14:18.568 [DEBUG] [Thread-139063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:14:18.582 [DEBUG] [Thread-139063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:14:18.583 [INFO] [Thread-139063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:14:18.590 [DEBUG] [Thread-139063] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:14:18.590 [DEBUG] [Thread-139063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] client lang: <none>
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] server lang: <none>
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] kex follows: False
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] Compression: none
2026-02-12T01:14:18.591 [DEBUG] [Thread-139063] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:14:18.649 [DEBUG] [Thread-139063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:14:18.650 [DEBUG] [Thread-139063] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:14:18.650 [DEBUG] [Thread-139063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:14:18.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:14:18.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:14:18.705 [DEBUG] [Thread-139063] [transport.py] [_log()] userauth is OK
2026-02-12T01:14:18.706 [DEBUG] [Thread-139063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:14:18.706 [DEBUG] [Thread-139063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:14:18.706 [DEBUG] [Thread-139063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:14:18.706 [DEBUG] [Thread-139063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:14:18.724 [INFO] [Thread-139063] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:14:18.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:14:18.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:14:19.504 [DEBUG] [Thread-139063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:14:19.504 [DEBUG] [Thread-139063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:14:19.552 [DEBUG] [Thread-139063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:14:19.553 [DEBUG] [Thread-139063] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:14:19.562 [DEBUG] [Thread-139063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:14:19.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:14:19.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:14:19.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:14:19.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:14:19.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:14:19.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:14:19.599 [DEBUG] [Thread-139063] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:14:23.798 [DEBUG] [Thread-139065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:14:38.860 [DEBUG] [Thread-139066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:14:49.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:14:49.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:14:49.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:14:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 14, 31), 0.52, 96.48, 0.0, 17.2, 13.06, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:14:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:14:31
2026-02-12T01:14:51.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:14:51.995 [DEBUG] [Thread-139067] [transport.py] [_log()] starting thread (client mode): 0xa57c0ca0
2026-02-12T01:14:51.995 [DEBUG] [Thread-139067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:14:52.014 [DEBUG] [Thread-139067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:14:52.014 [INFO] [Thread-139067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:14:52.017 [DEBUG] [Thread-139067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] client lang: <none>
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] server lang: <none>
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] kex follows: False
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] Compression: none
2026-02-12T01:14:52.018 [DEBUG] [Thread-139067] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:14:52.035 [DEBUG] [Thread-139067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:14:52.036 [DEBUG] [Thread-139067] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:14:52.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:14:52.037 [DEBUG] [Thread-139067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:14:52.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:14:52.039 [DEBUG] [Thread-139067] [transport.py] [_log()] userauth is OK
2026-02-12T01:14:52.039 [DEBUG] [Thread-139067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:14:52.039 [DEBUG] [Thread-139067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:14:52.040 [DEBUG] [Thread-139067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:14:52.040 [DEBUG] [Thread-139067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:14:52.076 [INFO] [Thread-139067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:14:52.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:14:52.713 [DEBUG] [Thread-139067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:14:52.713 [DEBUG] [Thread-139067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:14:52.714 [DEBUG] [Thread-139067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:14:52.755 [DEBUG] [Thread-139067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:14:52.755 [DEBUG] [Thread-139067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:14:52.758 [DEBUG] [Thread-139067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:14:52.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:14:52.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:14:52.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:14:52.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:14:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:14:52.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:14:52.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:14:52.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:14:52.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:14:52.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.968189 -999.00  +13.10  15.44     92  +11.90 1 1 1 3 1     0    0 1.07 -3.46 ZNESW 15.4 15.4 189.8 22.9 14.9 -11.9 14.6 -12.1 14.5 -11.8 14.9 -12.3
2026-02-12T01:14:52.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:14:52.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:14:52.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.968189
2026-02-12T01:14:52.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:14:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:14:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:14:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:14:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:14:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:14:31', tmtdew=0.52, humidity=96.48, cloud=0.0, wind=17.2, temperature=13.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:14:11.530', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 3.011499999999999, 2.6725000000000003, nan, nan, nan, nan, nan, 2.5962499999999995, nan, 2.2539999999999996, 2.5302499999999997, 2.545, nan, nan, nan, nan, nan, 1.6324999999999985, 2.005749999999999, nan, nan, nan, nan, nan, nan, 0.9465000000000003, 0.5405000000000024, nan, nan, nan], zp_timestamp='2026-02-11T23:11:00')
2026-02-12T01:14:52.787 [DEBUG] [Thread-139067] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:14:52.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:14:52.885 [DEBUG] [Thread-139070] [transport.py] [_log()] starting thread (client mode): 0xa57c2200
2026-02-12T01:14:52.885 [DEBUG] [Thread-139070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:14:52.899 [DEBUG] [Thread-139070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:14:52.899 [INFO] [Thread-139070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:14:52.907 [DEBUG] [Thread-139070] [transport.py] [_log()] client lang: <none>
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] server lang: <none>
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] kex follows: False
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] Compression: none
2026-02-12T01:14:52.908 [DEBUG] [Thread-139070] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:14:52.966 [DEBUG] [Thread-139070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:14:52.966 [DEBUG] [Thread-139070] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:14:52.967 [DEBUG] [Thread-139070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:14:52.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:14:52.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:14:53.023 [DEBUG] [Thread-139070] [transport.py] [_log()] userauth is OK
2026-02-12T01:14:53.023 [DEBUG] [Thread-139070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:14:53.023 [DEBUG] [Thread-139070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:14:53.024 [DEBUG] [Thread-139070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:14:53.024 [DEBUG] [Thread-139070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:14:53.042 [INFO] [Thread-139070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:14:53.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:14:53.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:14:53.830 [DEBUG] [Thread-139070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:14:53.830 [DEBUG] [Thread-139070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:14:53.878 [DEBUG] [Thread-139070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:14:53.878 [DEBUG] [Thread-139070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:14:53.887 [DEBUG] [Thread-139070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:14:53.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:14:53.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')
2026-02-12T01:14:53.897 [DEBUG] [Thread-139072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:14:53.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:14:53.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:14:53.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:14:53.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:14:53.921 [DEBUG] [Thread-139070] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:14:59.016 [DEBUG] [Thread-139073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:15:08.948 [DEBUG] [Thread-139074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:15:16.088 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:15:16.090 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:15:23.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:15:23.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:15:23.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:15:23.986 [DEBUG] [Thread-139075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:15:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 15, 7), 0.53, 96.45, 0.0, 18.37, 13.03, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:15:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:15:07
2026-02-12T01:15:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:15:26.322 [DEBUG] [Thread-139076] [transport.py] [_log()] starting thread (client mode): 0xa2d9feb0
2026-02-12T01:15:26.322 [DEBUG] [Thread-139076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:15:26.343 [DEBUG] [Thread-139076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:15:26.343 [INFO] [Thread-139076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:15:26.346 [DEBUG] [Thread-139076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] client lang: <none>
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] server lang: <none>
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] kex follows: False
2026-02-12T01:15:26.347 [DEBUG] [Thread-139076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:15:26.348 [DEBUG] [Thread-139076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:15:26.348 [DEBUG] [Thread-139076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:15:26.348 [DEBUG] [Thread-139076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:15:26.348 [DEBUG] [Thread-139076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:15:26.348 [DEBUG] [Thread-139076] [transport.py] [_log()] Compression: none
2026-02-12T01:15:26.348 [DEBUG] [Thread-139076] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:15:26.367 [DEBUG] [Thread-139076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:15:26.368 [DEBUG] [Thread-139076] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:15:26.368 [DEBUG] [Thread-139076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:15:26.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:15:26.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:15:26.370 [DEBUG] [Thread-139076] [transport.py] [_log()] userauth is OK
2026-02-12T01:15:26.371 [DEBUG] [Thread-139076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:15:26.371 [DEBUG] [Thread-139076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:15:26.371 [DEBUG] [Thread-139076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:15:26.371 [DEBUG] [Thread-139076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:15:26.396 [INFO] [Thread-139076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:15:26.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:15:27.051 [DEBUG] [Thread-139076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:15:27.052 [DEBUG] [Thread-139076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:15:27.052 [DEBUG] [Thread-139076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:15:27.092 [DEBUG] [Thread-139076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:15:27.092 [DEBUG] [Thread-139076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:15:27.095 [DEBUG] [Thread-139076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:15:27.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:15:27.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:15:27.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:15:27.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:15:27.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:15:27.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:15:27.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:15:27.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:15:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:15:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.968536 -999.00  +13.10  15.79     92  +11.90 1 1 1 3 1     0    0 1.09 -2.55 ZNESW 15.8 15.8 188.6 21.5 14.8 -13.0 14.6 -12.9 14.5 -12.8 14.8 -12.7
2026-02-12T01:15:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:15:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:15:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.968536
2026-02-12T01:15:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:15:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:15:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:15:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:15:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:15:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:15:07', tmtdew=0.53, humidity=96.45, cloud=0.0, wind=18.37, temperature=13.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:14:41.510', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 3.011499999999999, 2.6725000000000003, nan, nan, nan, nan, nan, 2.5962499999999995, nan, 2.2539999999999996, 2.5302499999999997, 2.545, nan, nan, nan, nan, nan, 1.6324999999999985, 2.005749999999999, nan, nan, nan, nan, nan, nan, 0.9465000000000003, 0.5405000000000024, nan, nan, nan], zp_timestamp='2026-02-11T23:11:00')
2026-02-12T01:15:27.121 [DEBUG] [Thread-139076] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:15:27.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:15:27.217 [DEBUG] [Thread-139079] [transport.py] [_log()] starting thread (client mode): 0xa57d7880
2026-02-12T01:15:27.217 [DEBUG] [Thread-139079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:15:27.231 [DEBUG] [Thread-139079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:15:27.232 [INFO] [Thread-139079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:15:27.239 [DEBUG] [Thread-139079] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:15:27.239 [DEBUG] [Thread-139079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:15:27.239 [DEBUG] [Thread-139079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] client lang: <none>
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] server lang: <none>
2026-02-12T01:15:27.240 [DEBUG] [Thread-139079] [transport.py] [_log()] kex follows: False
2026-02-12T01:15:27.241 [DEBUG] [Thread-139079] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:15:27.241 [DEBUG] [Thread-139079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:15:27.241 [DEBUG] [Thread-139079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:15:27.241 [DEBUG] [Thread-139079] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:15:27.241 [DEBUG] [Thread-139079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:15:27.241 [DEBUG] [Thread-139079] [transport.py] [_log()] Compression: none
2026-02-12T01:15:27.241 [DEBUG] [Thread-139079] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:15:27.298 [DEBUG] [Thread-139079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:15:27.299 [DEBUG] [Thread-139079] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:15:27.300 [DEBUG] [Thread-139079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:15:27.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:15:27.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:15:27.355 [DEBUG] [Thread-139079] [transport.py] [_log()] userauth is OK
2026-02-12T01:15:27.355 [DEBUG] [Thread-139079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:15:27.356 [DEBUG] [Thread-139079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:15:27.356 [DEBUG] [Thread-139079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:15:27.356 [DEBUG] [Thread-139079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:15:27.374 [INFO] [Thread-139079] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:15:27.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:15:27.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:15:28.250 [DEBUG] [Thread-139079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:15:28.251 [DEBUG] [Thread-139079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:15:28.298 [DEBUG] [Thread-139079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:15:28.298 [DEBUG] [Thread-139079] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:15:28.308 [DEBUG] [Thread-139079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:15:28.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:15:28.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:15:28.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:15:28.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:15:28.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:15:28.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:15:28.349 [DEBUG] [Thread-139079] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:15:39.023 [DEBUG] [Thread-139081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:15:54.075 [DEBUG] [Thread-139082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:15:58.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:15:58.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:15:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:15:59.102 [DEBUG] [Thread-139083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:16:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 15, 42), 0.95, 93.92, 0.0, 22.41, 13.42, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:16:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:15:42
2026-02-12T01:16:01.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:16:01.269 [DEBUG] [Thread-139084] [transport.py] [_log()] starting thread (client mode): 0xa57d6b60
2026-02-12T01:16:01.269 [DEBUG] [Thread-139084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:16:01.289 [DEBUG] [Thread-139084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:16:01.289 [INFO] [Thread-139084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] client lang: <none>
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] server lang: <none>
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] kex follows: False
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] Compression: none
2026-02-12T01:16:01.292 [DEBUG] [Thread-139084] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:16:01.309 [DEBUG] [Thread-139084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:16:01.309 [DEBUG] [Thread-139084] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:16:01.310 [DEBUG] [Thread-139084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:16:01.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:16:01.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:16:01.311 [DEBUG] [Thread-139084] [transport.py] [_log()] userauth is OK
2026-02-12T01:16:01.312 [DEBUG] [Thread-139084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:16:01.312 [DEBUG] [Thread-139084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:16:01.312 [DEBUG] [Thread-139084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:16:01.312 [DEBUG] [Thread-139084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:16:01.347 [INFO] [Thread-139084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:16:01.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:16:01.992 [DEBUG] [Thread-139084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:16:01.992 [DEBUG] [Thread-139084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:16:01.992 [DEBUG] [Thread-139084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:16:02.032 [DEBUG] [Thread-139084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:16:02.033 [DEBUG] [Thread-139084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:16:02.036 [DEBUG] [Thread-139084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:16:02.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:16:02.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:16:02.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:16:02.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:16:02.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:16:02.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:16:02.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:16:02.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:16:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:16:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.968884 -999.00  +13.10  13.15     92  +11.90 1 2 1 3 1     0    0 1.13 -1.45 ZN.sW 13.2 13.2 182.6 18.8 14.8 -12.6 14.6 -11.5 14.5 -11.6 14.8 -13.2
2026-02-12T01:16:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:16:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:16:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.968884
2026-02-12T01:16:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:16:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:16:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:16:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:16:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:16:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:15:42', tmtdew=0.95, humidity=93.92, cloud=0.0, wind=22.41, temperature=13.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:15:11.578', atlas_cloud=2, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:14:00')
2026-02-12T01:16:02.063 [DEBUG] [Thread-139084] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:16:02.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:16:02.163 [DEBUG] [Thread-139087] [transport.py] [_log()] starting thread (client mode): 0xa2dc3ee0
2026-02-12T01:16:02.163 [DEBUG] [Thread-139087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:16:02.177 [DEBUG] [Thread-139087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:16:02.177 [INFO] [Thread-139087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:16:02.185 [DEBUG] [Thread-139087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:16:02.185 [DEBUG] [Thread-139087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:16:02.185 [DEBUG] [Thread-139087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:16:02.185 [DEBUG] [Thread-139087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:02.185 [DEBUG] [Thread-139087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] client lang: <none>
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] server lang: <none>
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] kex follows: False
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:16:02.186 [DEBUG] [Thread-139087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:16:02.187 [DEBUG] [Thread-139087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:16:02.187 [DEBUG] [Thread-139087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:16:02.187 [DEBUG] [Thread-139087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:16:02.187 [DEBUG] [Thread-139087] [transport.py] [_log()] Compression: none
2026-02-12T01:16:02.187 [DEBUG] [Thread-139087] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:16:02.242 [DEBUG] [Thread-139087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:16:02.243 [DEBUG] [Thread-139087] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:16:02.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:16:02.244 [DEBUG] [Thread-139087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:16:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:16:02.298 [DEBUG] [Thread-139087] [transport.py] [_log()] userauth is OK
2026-02-12T01:16:02.298 [DEBUG] [Thread-139087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:16:02.299 [DEBUG] [Thread-139087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:16:02.299 [DEBUG] [Thread-139087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:16:02.299 [DEBUG] [Thread-139087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:16:02.318 [INFO] [Thread-139087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:16:02.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:16:02.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:16:03.131 [DEBUG] [Thread-139087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:16:03.131 [DEBUG] [Thread-139087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:16:03.179 [DEBUG] [Thread-139087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:16:03.179 [DEBUG] [Thread-139087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:16:03.188 [DEBUG] [Thread-139087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:16:03.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:16:03.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:16:03.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
2026-02-12T01:16:03.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:16:03.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:16:03.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:16:03.222 [DEBUG] [Thread-139087] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:16:09.113 [DEBUG] [Thread-139089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:16:16.294 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:16:16.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:16:24.164 [DEBUG] [Thread-139090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:16:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:16:33.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:16:33.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:16:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 16, 17), 0.53, 96.41, 0.0, 20.54, 12.95, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:16:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:16:17
2026-02-12T01:16:36.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:16:36.381 [DEBUG] [Thread-139091] [transport.py] [_log()] starting thread (client mode): 0xa57d49d0
2026-02-12T01:16:36.381 [DEBUG] [Thread-139091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:16:36.401 [DEBUG] [Thread-139091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:16:36.401 [INFO] [Thread-139091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:16:36.404 [DEBUG] [Thread-139091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:16:36.404 [DEBUG] [Thread-139091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:16:36.404 [DEBUG] [Thread-139091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:16:36.404 [DEBUG] [Thread-139091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:36.404 [DEBUG] [Thread-139091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] client lang: <none>
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] server lang: <none>
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] kex follows: False
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] Compression: none
2026-02-12T01:16:36.405 [DEBUG] [Thread-139091] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:16:36.422 [DEBUG] [Thread-139091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:16:36.422 [DEBUG] [Thread-139091] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:16:36.423 [DEBUG] [Thread-139091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:16:36.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:16:36.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:16:36.425 [DEBUG] [Thread-139091] [transport.py] [_log()] userauth is OK
2026-02-12T01:16:36.425 [DEBUG] [Thread-139091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:16:36.425 [DEBUG] [Thread-139091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:16:36.425 [DEBUG] [Thread-139091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:16:36.425 [DEBUG] [Thread-139091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:16:36.443 [INFO] [Thread-139091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:16:36.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:16:37.244 [DEBUG] [Thread-139091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:16:37.244 [DEBUG] [Thread-139091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:16:37.245 [DEBUG] [Thread-139091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:16:37.285 [DEBUG] [Thread-139091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:16:37.285 [DEBUG] [Thread-139091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:16:37.287 [DEBUG] [Thread-139091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:16:37.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:16:37.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:16:37.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:16:37.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:16:37.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:16:37.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:16:37.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:16:37.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:16:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:16:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.969231 -999.00  +13.10  15.08     92  +11.90 1 3 1 3 1     0    0 1.13 -1.02 ZNeSW 15.1 15.1 181.2 19.6 14.8 -10.1 14.6 -9.5 14.5 -9.5 14.8 -11.4
2026-02-12T01:16:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:16:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:16:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.969231
2026-02-12T01:16:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:16:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:16:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:16:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:16:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:16:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:16:17', tmtdew=0.53, humidity=96.41, cloud=0.0, wind=20.54, temperature=12.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:15:41.558', atlas_cloud=3, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:14:00')
2026-02-12T01:16:37.305 [DEBUG] [Thread-139091] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:16:37.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:16:37.390 [DEBUG] [Thread-139094] [transport.py] [_log()] starting thread (client mode): 0xa2dc1630
2026-02-12T01:16:37.390 [DEBUG] [Thread-139094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:16:37.404 [DEBUG] [Thread-139094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:16:37.404 [INFO] [Thread-139094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] client lang: <none>
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] server lang: <none>
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] kex follows: False
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] Compression: none
2026-02-12T01:16:37.414 [DEBUG] [Thread-139094] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:16:37.470 [DEBUG] [Thread-139094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:16:37.471 [DEBUG] [Thread-139094] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:16:37.471 [DEBUG] [Thread-139094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:16:37.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:16:37.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:16:37.528 [DEBUG] [Thread-139094] [transport.py] [_log()] userauth is OK
2026-02-12T01:16:37.528 [DEBUG] [Thread-139094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:16:37.528 [DEBUG] [Thread-139094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:16:37.528 [DEBUG] [Thread-139094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:16:37.528 [DEBUG] [Thread-139094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:16:37.541 [INFO] [Thread-139094] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:16:37.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:16:37.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:16:38.349 [DEBUG] [Thread-139094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:16:38.350 [DEBUG] [Thread-139094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:16:38.397 [DEBUG] [Thread-139094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:16:38.397 [DEBUG] [Thread-139094] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:16:38.406 [DEBUG] [Thread-139094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:16:38.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:16:38.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')
2026-02-12T01:16:38.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:16:38.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:16:38.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:16:38.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:16:38.440 [DEBUG] [Thread-139094] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:16:39.196 [DEBUG] [Thread-139096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:16:54.253 [DEBUG] [Thread-139097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:16:59.176 [DEBUG] [Thread-139098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:17:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:17:08.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:17:08.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:17:09.289 [DEBUG] [Thread-139099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:17:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 16, 53), 0.54, 96.38, 0.0, 20.75, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:17:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:16:53
2026-02-12T01:17:10.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:17:11.013 [DEBUG] [Thread-139100] [transport.py] [_log()] starting thread (client mode): 0xa57d4b50
2026-02-12T01:17:11.013 [DEBUG] [Thread-139100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:17:11.034 [DEBUG] [Thread-139100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:17:11.034 [INFO] [Thread-139100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:17:11.036 [DEBUG] [Thread-139100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] client lang: <none>
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] server lang: <none>
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] kex follows: False
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] Compression: none
2026-02-12T01:17:11.037 [DEBUG] [Thread-139100] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:17:11.054 [DEBUG] [Thread-139100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:17:11.055 [DEBUG] [Thread-139100] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:17:11.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:17:11.056 [DEBUG] [Thread-139100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:17:11.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:17:11.058 [DEBUG] [Thread-139100] [transport.py] [_log()] userauth is OK
2026-02-12T01:17:11.058 [DEBUG] [Thread-139100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:17:11.058 [DEBUG] [Thread-139100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:17:11.058 [DEBUG] [Thread-139100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:17:11.058 [DEBUG] [Thread-139100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:17:11.077 [INFO] [Thread-139100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:17:11.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:17:11.720 [DEBUG] [Thread-139100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:17:11.720 [DEBUG] [Thread-139100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:17:11.721 [DEBUG] [Thread-139100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:17:11.761 [DEBUG] [Thread-139100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:17:11.761 [DEBUG] [Thread-139100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:17:11.765 [DEBUG] [Thread-139100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:17:11.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:17:11.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:17:11.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:17:11.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:17:11.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:17:11.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:17:11.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:17:11.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:17:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:17:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.969578 -999.00  +13.10  15.02     92  +11.90 1 3 1 3 1     0    0 1.13 -0.58 ZNeSW 15.0 15.0 180.0 21.4 14.8 -9.5 14.5 -10.0 14.5 -9.6 14.8 -10.0
2026-02-12T01:17:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:17:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:17:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.969578
2026-02-12T01:17:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:17:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:17:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:17:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:17:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:17:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:16:53', tmtdew=0.54, humidity=96.38, cloud=0.0, wind=20.75, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:16:11.539', atlas_cloud=3, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:14:00')
2026-02-12T01:17:11.791 [DEBUG] [Thread-139100] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:17:11.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:17:11.890 [DEBUG] [Thread-139103] [transport.py] [_log()] starting thread (client mode): 0xa57d6d10
2026-02-12T01:17:11.890 [DEBUG] [Thread-139103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:17:11.905 [DEBUG] [Thread-139103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:17:11.905 [INFO] [Thread-139103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] client lang: <none>
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] server lang: <none>
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] kex follows: False
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] Compression: none
2026-02-12T01:17:11.917 [DEBUG] [Thread-139103] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:17:11.975 [DEBUG] [Thread-139103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:17:11.976 [DEBUG] [Thread-139103] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:17:11.976 [DEBUG] [Thread-139103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:17:11.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:17:11.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:17:12.032 [DEBUG] [Thread-139103] [transport.py] [_log()] userauth is OK
2026-02-12T01:17:12.032 [DEBUG] [Thread-139103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:17:12.032 [DEBUG] [Thread-139103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:17:12.032 [DEBUG] [Thread-139103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:17:12.032 [DEBUG] [Thread-139103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:17:12.051 [INFO] [Thread-139103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:17:12.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:17:12.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:17:12.869 [DEBUG] [Thread-139103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:17:12.870 [DEBUG] [Thread-139103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:17:12.917 [DEBUG] [Thread-139103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:17:12.917 [DEBUG] [Thread-139103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:17:12.925 [DEBUG] [Thread-139103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:17:12.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:17:12.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:17:12.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
2026-02-12T01:17:12.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:17:12.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:17:12.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:17:12.958 [DEBUG] [Thread-139103] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:17:16.500 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:17:16.501 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:17:24.325 [DEBUG] [Thread-139105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:17:39.378 [DEBUG] [Thread-139106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:17:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:17:42.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:17:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:17:44.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 17, 29), 0.54, 96.33, 0.0, 20.82, 12.9, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:17:44.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:17:29
2026-02-12T01:17:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:17:45.416 [DEBUG] [Thread-139107] [transport.py] [_log()] starting thread (client mode): 0xa5771c30
2026-02-12T01:17:45.416 [DEBUG] [Thread-139107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:17:45.436 [DEBUG] [Thread-139107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:17:45.436 [INFO] [Thread-139107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] client lang: <none>
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] server lang: <none>
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] kex follows: False
2026-02-12T01:17:45.438 [DEBUG] [Thread-139107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:17:45.439 [DEBUG] [Thread-139107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:17:45.439 [DEBUG] [Thread-139107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:17:45.439 [DEBUG] [Thread-139107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:17:45.439 [DEBUG] [Thread-139107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:17:45.439 [DEBUG] [Thread-139107] [transport.py] [_log()] Compression: none
2026-02-12T01:17:45.439 [DEBUG] [Thread-139107] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:17:45.457 [DEBUG] [Thread-139107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:17:45.458 [DEBUG] [Thread-139107] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:17:45.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:17:45.459 [DEBUG] [Thread-139107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:17:45.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:17:45.461 [DEBUG] [Thread-139107] [transport.py] [_log()] userauth is OK
2026-02-12T01:17:45.462 [DEBUG] [Thread-139107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:17:45.462 [DEBUG] [Thread-139107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:17:45.462 [DEBUG] [Thread-139107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:17:45.462 [DEBUG] [Thread-139107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:17:45.487 [INFO] [Thread-139107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:17:45.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:17:46.145 [DEBUG] [Thread-139107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:17:46.145 [DEBUG] [Thread-139107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:17:46.145 [DEBUG] [Thread-139107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:17:46.186 [DEBUG] [Thread-139107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:17:46.187 [DEBUG] [Thread-139107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:17:46.190 [DEBUG] [Thread-139107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:17:46.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:17:46.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:17:46.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:17:46.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:17:46.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:17:46.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:17:46.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:17:46.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:17:46.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:17:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.970272 -999.00  +13.10  13.50     92  +11.80 1 2 1 3 1     0    0 1.17 0.72 ZN.sW 13.5 13.5 182.0 17.2 14.8 -12.2 14.5 -11.4 14.5 -10.2 14.8 -11.5
2026-02-12T01:17:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:17:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:17:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.970272
2026-02-12T01:17:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:17:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:17:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:17:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:17:46.214 [DEBUG] [Thread-139107] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:17:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:17:46.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:17:29', tmtdew=0.54, humidity=96.33, cloud=0.0, wind=20.82, temperature=12.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:17:11.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:14:00')
2026-02-12T01:17:46.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:17:46.311 [DEBUG] [Thread-139110] [transport.py] [_log()] starting thread (client mode): 0xa2dc0820
2026-02-12T01:17:46.311 [DEBUG] [Thread-139110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:17:46.326 [DEBUG] [Thread-139110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:17:46.326 [INFO] [Thread-139110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:17:46.333 [DEBUG] [Thread-139110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:17:46.334 [DEBUG] [Thread-139110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:17:46.334 [DEBUG] [Thread-139110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:17:46.334 [DEBUG] [Thread-139110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:46.334 [DEBUG] [Thread-139110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:17:46.334 [DEBUG] [Thread-139110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:46.334 [DEBUG] [Thread-139110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:17:46.335 [DEBUG] [Thread-139110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:17:46.335 [DEBUG] [Thread-139110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:17:46.335 [DEBUG] [Thread-139110] [transport.py] [_log()] client lang: <none>
2026-02-12T01:17:46.335 [DEBUG] [Thread-139110] [transport.py] [_log()] server lang: <none>
2026-02-12T01:17:46.335 [DEBUG] [Thread-139110] [transport.py] [_log()] kex follows: False
2026-02-12T01:17:46.335 [DEBUG] [Thread-139110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:17:46.335 [DEBUG] [Thread-139110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:17:46.336 [DEBUG] [Thread-139110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:17:46.336 [DEBUG] [Thread-139110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:17:46.336 [DEBUG] [Thread-139110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:17:46.336 [DEBUG] [Thread-139110] [transport.py] [_log()] Compression: none
2026-02-12T01:17:46.336 [DEBUG] [Thread-139110] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:17:46.392 [DEBUG] [Thread-139110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:17:46.393 [DEBUG] [Thread-139110] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:17:46.393 [DEBUG] [Thread-139110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:17:46.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:17:46.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:17:46.451 [DEBUG] [Thread-139110] [transport.py] [_log()] userauth is OK
2026-02-12T01:17:46.452 [DEBUG] [Thread-139110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:17:46.452 [DEBUG] [Thread-139110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:17:46.452 [DEBUG] [Thread-139110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:17:46.452 [DEBUG] [Thread-139110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:17:46.470 [INFO] [Thread-139110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:17:46.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:17:46.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:17:47.298 [DEBUG] [Thread-139110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:17:47.299 [DEBUG] [Thread-139110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:17:47.347 [DEBUG] [Thread-139110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:17:47.347 [DEBUG] [Thread-139110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:17:47.355 [DEBUG] [Thread-139110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:17:47.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:17:47.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:17:47.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:17:47.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:17:47.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:17:47.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:17:47.386 [DEBUG] [Thread-139110] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:17:54.413 [DEBUG] [Thread-139112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:17:59.241 [DEBUG] [Thread-139113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:18:09.465 [DEBUG] [Thread-139114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:18:16.702 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:18:16.704 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:18:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:18:17.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:18:17.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
2026-02-12T01:18:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 18, 4), 0.53, 96.4, 0.0, 20.5, 12.96, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:18:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:18:04
2026-02-12T01:18:19.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:18:19.840 [DEBUG] [Thread-139115] [transport.py] [_log()] starting thread (client mode): 0xa57c3400
2026-02-12T01:18:19.840 [DEBUG] [Thread-139115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:18:19.861 [DEBUG] [Thread-139115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:18:19.861 [INFO] [Thread-139115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] client lang: <none>
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] server lang: <none>
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] kex follows: False
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:18:19.862 [DEBUG] [Thread-139115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:18:19.863 [DEBUG] [Thread-139115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:18:19.863 [DEBUG] [Thread-139115] [transport.py] [_log()] Compression: none
2026-02-12T01:18:19.863 [DEBUG] [Thread-139115] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:18:19.875 [DEBUG] [Thread-139115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:18:19.875 [DEBUG] [Thread-139115] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:18:19.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:18:19.876 [DEBUG] [Thread-139115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:18:19.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:18:19.878 [DEBUG] [Thread-139115] [transport.py] [_log()] userauth is OK
2026-02-12T01:18:19.878 [DEBUG] [Thread-139115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:18:19.879 [DEBUG] [Thread-139115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:18:19.879 [DEBUG] [Thread-139115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:18:19.879 [DEBUG] [Thread-139115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:18:19.901 [INFO] [Thread-139115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:18:19.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:18:20.550 [DEBUG] [Thread-139115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:18:20.550 [DEBUG] [Thread-139115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:18:20.550 [DEBUG] [Thread-139115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:18:20.591 [DEBUG] [Thread-139115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:18:20.591 [DEBUG] [Thread-139115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:18:20.595 [DEBUG] [Thread-139115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:18:20.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:18:20.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:18:20.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:18:20.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:18:20.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:18:20.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:18:20.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:18:20.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:18:20.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:18:20.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.970620 -999.00  +13.10  15.39     91  +11.80 1 2 1 3 1     0    0 1.20 1.55 ZNesW 15.4 15.4 198.0 22.3 14.8 -13.8 14.5 -14.5 14.4 -11.3 14.8 -12.8
2026-02-12T01:18:20.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:18:20.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:18:20.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.970620
2026-02-12T01:18:20.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:18:20.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:18:20.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:18:20.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:18:20.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:18:20.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:18:04', tmtdew=0.53, humidity=96.4, cloud=0.0, wind=20.5, temperature=12.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:17:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:14:00')
2026-02-12T01:18:20.622 [DEBUG] [Thread-139115] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:18:20.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:18:20.721 [DEBUG] [Thread-139118] [transport.py] [_log()] starting thread (client mode): 0xa57d46a0
2026-02-12T01:18:20.722 [DEBUG] [Thread-139118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:18:20.735 [DEBUG] [Thread-139118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:18:20.736 [INFO] [Thread-139118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:18:20.743 [DEBUG] [Thread-139118] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:18:20.744 [DEBUG] [Thread-139118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:18:20.744 [DEBUG] [Thread-139118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:18:20.744 [DEBUG] [Thread-139118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:20.744 [DEBUG] [Thread-139118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:20.744 [DEBUG] [Thread-139118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:20.744 [DEBUG] [Thread-139118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:20.744 [DEBUG] [Thread-139118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] client lang: <none>
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] server lang: <none>
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] kex follows: False
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:18:20.745 [DEBUG] [Thread-139118] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:18:20.746 [DEBUG] [Thread-139118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:18:20.746 [DEBUG] [Thread-139118] [transport.py] [_log()] Compression: none
2026-02-12T01:18:20.746 [DEBUG] [Thread-139118] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:18:20.803 [DEBUG] [Thread-139118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:18:20.804 [DEBUG] [Thread-139118] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:18:20.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:18:20.806 [DEBUG] [Thread-139118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:18:20.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:18:20.863 [DEBUG] [Thread-139118] [transport.py] [_log()] userauth is OK
2026-02-12T01:18:20.863 [DEBUG] [Thread-139118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:18:20.864 [DEBUG] [Thread-139118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:18:20.864 [DEBUG] [Thread-139118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:18:20.864 [DEBUG] [Thread-139118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:18:20.883 [INFO] [Thread-139118] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:18:20.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:18:20.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:18:21.680 [DEBUG] [Thread-139118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:18:21.681 [DEBUG] [Thread-139118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:18:21.728 [DEBUG] [Thread-139118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:18:21.729 [DEBUG] [Thread-139118] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:18:21.738 [DEBUG] [Thread-139118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:18:21.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:18:21.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:18:21.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:18:21.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:18:21.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:18:21.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:18:21.775 [DEBUG] [Thread-139118] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:18:24.499 [DEBUG] [Thread-139120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:18:39.550 [DEBUG] [Thread-139121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:18:51.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:18:51.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:18:51.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:18:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 18, 40), 0.98, 93.73, 0.0, 22.37, 13.26, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:18:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:18:40
2026-02-12T01:18:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:18:54.563 [DEBUG] [Thread-139122] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fd0
2026-02-12T01:18:54.564 [DEBUG] [Thread-139122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:18:54.583 [DEBUG] [Thread-139122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:18:54.584 [INFO] [Thread-139122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] client lang: <none>
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] server lang: <none>
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] kex follows: False
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] Compression: none
2026-02-12T01:18:54.587 [DEBUG] [Thread-139122] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:18:54.594 [DEBUG] [Thread-139124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:18:54.604 [DEBUG] [Thread-139122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:18:54.604 [DEBUG] [Thread-139122] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:18:54.605 [DEBUG] [Thread-139122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:18:54.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:18:54.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:18:54.649 [DEBUG] [Thread-139122] [transport.py] [_log()] userauth is OK
2026-02-12T01:18:54.649 [DEBUG] [Thread-139122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:18:54.649 [DEBUG] [Thread-139122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:18:54.649 [DEBUG] [Thread-139122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:18:54.649 [DEBUG] [Thread-139122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:18:54.670 [INFO] [Thread-139122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:18:54.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:18:55.290 [DEBUG] [Thread-139122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:18:55.290 [DEBUG] [Thread-139122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:18:55.291 [DEBUG] [Thread-139122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:18:55.331 [DEBUG] [Thread-139122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:18:55.331 [DEBUG] [Thread-139122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:18:55.335 [DEBUG] [Thread-139122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:18:55.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:18:55.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:18:55.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:18:55.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:18:55.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:18:55.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:18:55.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:18:55.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:18:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:18:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.970967 -999.00  +13.10  15.71     91  +11.80 1 1 1 3 1     0    0 1.24 2.61 ZNESW 15.7 15.7 178.4 21.7 14.7 -15.9 14.5 -16.7 14.4 -13.8 14.7 -15.0
2026-02-12T01:18:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:18:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:18:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.970967
2026-02-12T01:18:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:18:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:18:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:18:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:18:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:18:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:18:40', tmtdew=0.98, humidity=93.73, cloud=0.0, wind=22.37, temperature=13.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:18:11.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:17:00')
2026-02-12T01:18:55.366 [DEBUG] [Thread-139122] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:18:55.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:18:55.462 [DEBUG] [Thread-139126] [transport.py] [_log()] starting thread (client mode): 0xa5770af0
2026-02-12T01:18:55.462 [DEBUG] [Thread-139126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:18:55.478 [DEBUG] [Thread-139126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:18:55.478 [INFO] [Thread-139126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:18:55.486 [DEBUG] [Thread-139126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:18:55.486 [DEBUG] [Thread-139126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:18:55.487 [DEBUG] [Thread-139126] [transport.py] [_log()] client lang: <none>
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] server lang: <none>
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] kex follows: False
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:18:55.488 [DEBUG] [Thread-139126] [transport.py] [_log()] Compression: none
2026-02-12T01:18:55.489 [DEBUG] [Thread-139126] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:18:55.546 [DEBUG] [Thread-139126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:18:55.547 [DEBUG] [Thread-139126] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:18:55.547 [DEBUG] [Thread-139126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:18:55.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:18:55.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:18:55.601 [DEBUG] [Thread-139126] [transport.py] [_log()] userauth is OK
2026-02-12T01:18:55.602 [DEBUG] [Thread-139126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:18:55.602 [DEBUG] [Thread-139126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:18:55.602 [DEBUG] [Thread-139126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:18:55.602 [DEBUG] [Thread-139126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:18:55.621 [INFO] [Thread-139126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:18:55.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:18:55.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:18:56.437 [DEBUG] [Thread-139126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:18:56.437 [DEBUG] [Thread-139126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:18:56.485 [DEBUG] [Thread-139126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:18:56.486 [DEBUG] [Thread-139126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:18:56.494 [DEBUG] [Thread-139126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:18:56.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:18:56.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:18:56.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:18:56.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:18:56.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:18:56.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:18:56.531 [DEBUG] [Thread-139126] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:18:59.298 [DEBUG] [Thread-139128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:19:09.631 [DEBUG] [Thread-139129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:19:16.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:19:16.907 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:19:24.688 [DEBUG] [Thread-139130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:19:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:19:26.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:19:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:19:28.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 19, 17), 0.49, 96.36, 0.0, 19.32, 12.86, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:19:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:19:17
2026-02-12T01:19:29.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:19:29.235 [DEBUG] [Thread-139131] [transport.py] [_log()] starting thread (client mode): 0xa2dc26b0
2026-02-12T01:19:29.235 [DEBUG] [Thread-139131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:19:29.255 [DEBUG] [Thread-139131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:19:29.255 [INFO] [Thread-139131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] client lang: <none>
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] server lang: <none>
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] kex follows: False
2026-02-12T01:19:29.258 [DEBUG] [Thread-139131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:19:29.259 [DEBUG] [Thread-139131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:19:29.259 [DEBUG] [Thread-139131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:19:29.259 [DEBUG] [Thread-139131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:19:29.259 [DEBUG] [Thread-139131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:19:29.259 [DEBUG] [Thread-139131] [transport.py] [_log()] Compression: none
2026-02-12T01:19:29.259 [DEBUG] [Thread-139131] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:19:29.273 [DEBUG] [Thread-139131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:19:29.274 [DEBUG] [Thread-139131] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:19:29.275 [DEBUG] [Thread-139131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:19:29.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:19:29.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:19:29.276 [DEBUG] [Thread-139131] [transport.py] [_log()] userauth is OK
2026-02-12T01:19:29.277 [DEBUG] [Thread-139131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:19:29.277 [DEBUG] [Thread-139131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:19:29.277 [DEBUG] [Thread-139131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:19:29.277 [DEBUG] [Thread-139131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:19:29.301 [INFO] [Thread-139131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:19:29.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:19:30.090 [DEBUG] [Thread-139131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:19:30.090 [DEBUG] [Thread-139131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:19:30.091 [DEBUG] [Thread-139131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:19:30.131 [DEBUG] [Thread-139131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:19:30.131 [DEBUG] [Thread-139131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:19:30.134 [DEBUG] [Thread-139131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:19:30.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:19:30.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:19:30.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:19:30.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:19:30.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:19:30.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:19:30.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:19:30.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:19:30.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:19:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.971314 -999.00  +13.10  13.54     91  +11.80 1 1 1 3 1     0    0 1.28 3.59 ZNESW 13.5 13.5 178.6 18.1 14.7 -17.0 14.4 -16.9 14.3 -15.4 14.7 -16.8
2026-02-12T01:19:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:19:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:19:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.971314
2026-02-12T01:19:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:19:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:19:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:19:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:19:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:19:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:19:17', tmtdew=0.49, humidity=96.36, cloud=0.0, wind=19.32, temperature=12.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:18:41.530', atlas_cloud=1, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:17:00')
2026-02-12T01:19:30.159 [DEBUG] [Thread-139131] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:19:30.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:19:30.256 [DEBUG] [Thread-139134] [transport.py] [_log()] starting thread (client mode): 0xa57d4640
2026-02-12T01:19:30.256 [DEBUG] [Thread-139134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:19:30.275 [DEBUG] [Thread-139134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:19:30.275 [INFO] [Thread-139134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:19:30.283 [DEBUG] [Thread-139134] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:19:30.283 [DEBUG] [Thread-139134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:19:30.284 [DEBUG] [Thread-139134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:19:30.284 [DEBUG] [Thread-139134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] client lang: <none>
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] server lang: <none>
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] kex follows: False
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] Compression: none
2026-02-12T01:19:30.285 [DEBUG] [Thread-139134] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:19:30.341 [DEBUG] [Thread-139134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:19:30.341 [DEBUG] [Thread-139134] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:19:30.342 [DEBUG] [Thread-139134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:19:30.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:19:30.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:19:30.397 [DEBUG] [Thread-139134] [transport.py] [_log()] userauth is OK
2026-02-12T01:19:30.397 [DEBUG] [Thread-139134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:19:30.397 [DEBUG] [Thread-139134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:19:30.397 [DEBUG] [Thread-139134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:19:30.398 [DEBUG] [Thread-139134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:19:30.416 [INFO] [Thread-139134] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:19:30.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:19:30.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:19:31.274 [DEBUG] [Thread-139134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:19:31.274 [DEBUG] [Thread-139134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:19:31.322 [DEBUG] [Thread-139134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:19:31.322 [DEBUG] [Thread-139134] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:19:31.331 [DEBUG] [Thread-139134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:19:31.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:19:31.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:19:31.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:19:31.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:19:31.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:19:31.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:19:31.368 [DEBUG] [Thread-139134] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:19:39.725 [DEBUG] [Thread-139136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:19:54.777 [DEBUG] [Thread-139137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:19:59.356 [DEBUG] [Thread-139138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:20:01.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:20:01.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:20:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:20:03.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 19, 52), 0.54, 96.35, 0.0, 22.37, 12.91, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:20:03.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:19:52
2026-02-12T01:20:04.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:20:04.292 [DEBUG] [Thread-139139] [transport.py] [_log()] starting thread (client mode): 0xa57c16f0
2026-02-12T01:20:04.293 [DEBUG] [Thread-139139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:20:04.312 [DEBUG] [Thread-139139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:20:04.312 [INFO] [Thread-139139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] client lang: <none>
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] server lang: <none>
2026-02-12T01:20:04.316 [DEBUG] [Thread-139139] [transport.py] [_log()] kex follows: False
2026-02-12T01:20:04.317 [DEBUG] [Thread-139139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:20:04.317 [DEBUG] [Thread-139139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:20:04.317 [DEBUG] [Thread-139139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:20:04.317 [DEBUG] [Thread-139139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:20:04.317 [DEBUG] [Thread-139139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:20:04.317 [DEBUG] [Thread-139139] [transport.py] [_log()] Compression: none
2026-02-12T01:20:04.317 [DEBUG] [Thread-139139] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:20:04.336 [DEBUG] [Thread-139139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:20:04.337 [DEBUG] [Thread-139139] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:20:04.337 [DEBUG] [Thread-139139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:20:04.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:20:04.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:20:04.339 [DEBUG] [Thread-139139] [transport.py] [_log()] userauth is OK
2026-02-12T01:20:04.339 [DEBUG] [Thread-139139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:20:04.339 [DEBUG] [Thread-139139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:20:04.340 [DEBUG] [Thread-139139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:20:04.340 [DEBUG] [Thread-139139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:20:04.375 [INFO] [Thread-139139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:20:04.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:20:06.757 [DEBUG] [Thread-139139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:20:06.757 [DEBUG] [Thread-139139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:20:06.757 [DEBUG] [Thread-139139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:20:06.798 [DEBUG] [Thread-139139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:20:06.799 [DEBUG] [Thread-139139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:20:06.802 [DEBUG] [Thread-139139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:20:06.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:20:06.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:20:06.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:20:06.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:20:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:20:06.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:20:06.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:20:06.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:20:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:20:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.971661 -999.00  +13.00  14.59     92  +11.80 1 1 1 3 1     0    0 1.28 4.13 ZNESW 14.6 14.6 181.6 18.4 14.6 -17.5 14.4 -16.6 14.3 -16.0 14.7 -17.1
2026-02-12T01:20:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:20:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:20:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.971661
2026-02-12T01:20:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:20:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:20:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:20:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:20:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:20:06.831 [DEBUG] [Thread-139139] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:20:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:19:52', tmtdew=0.54, humidity=96.35, cloud=0.0, wind=22.37, temperature=12.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:19:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:17:00')
2026-02-12T01:20:06.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:20:06.936 [DEBUG] [Thread-139142] [transport.py] [_log()] starting thread (client mode): 0xa57c1c30
2026-02-12T01:20:06.936 [DEBUG] [Thread-139142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:20:06.950 [DEBUG] [Thread-139142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:20:06.951 [INFO] [Thread-139142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] client lang: <none>
2026-02-12T01:20:06.958 [DEBUG] [Thread-139142] [transport.py] [_log()] server lang: <none>
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] kex follows: False
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] Compression: none
2026-02-12T01:20:06.959 [DEBUG] [Thread-139142] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:20:07.016 [DEBUG] [Thread-139142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:20:07.017 [DEBUG] [Thread-139142] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:20:07.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:20:07.018 [DEBUG] [Thread-139142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:20:07.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:20:07.072 [DEBUG] [Thread-139142] [transport.py] [_log()] userauth is OK
2026-02-12T01:20:07.072 [DEBUG] [Thread-139142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:20:07.073 [DEBUG] [Thread-139142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:20:07.073 [DEBUG] [Thread-139142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:20:07.073 [DEBUG] [Thread-139142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:20:07.092 [INFO] [Thread-139142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:20:07.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:20:07.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:20:07.941 [DEBUG] [Thread-139142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:20:07.942 [DEBUG] [Thread-139142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:20:07.989 [DEBUG] [Thread-139142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:20:07.989 [DEBUG] [Thread-139142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:20:07.999 [DEBUG] [Thread-139142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:20:08.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:20:08.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:20:08.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:20:08.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:20:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:20:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:20:08.035 [DEBUG] [Thread-139142] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:20:09.814 [DEBUG] [Thread-139144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:20:17.113 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:20:17.115 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:20:24.864 [DEBUG] [Thread-139145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:20:38.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:20:38.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:20:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:20:39.902 [DEBUG] [Thread-139146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:20:40.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 20, 27), 0.55, 96.3, 0.0, 21.4, 12.91, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:20:40.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:20:27
2026-02-12T01:20:40.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:20:41.022 [DEBUG] [Thread-139147] [transport.py] [_log()] starting thread (client mode): 0xa2dc1fc0
2026-02-12T01:20:41.022 [DEBUG] [Thread-139147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:20:41.042 [DEBUG] [Thread-139147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:20:41.042 [INFO] [Thread-139147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:20:41.045 [DEBUG] [Thread-139147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] client lang: <none>
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] server lang: <none>
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] kex follows: False
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:20:41.046 [DEBUG] [Thread-139147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:20:41.047 [DEBUG] [Thread-139147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:20:41.047 [DEBUG] [Thread-139147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:20:41.047 [DEBUG] [Thread-139147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:20:41.047 [DEBUG] [Thread-139147] [transport.py] [_log()] Compression: none
2026-02-12T01:20:41.047 [DEBUG] [Thread-139147] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:20:41.066 [DEBUG] [Thread-139147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:20:41.067 [DEBUG] [Thread-139147] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:20:41.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:20:41.068 [DEBUG] [Thread-139147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:20:41.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:20:41.069 [DEBUG] [Thread-139147] [transport.py] [_log()] userauth is OK
2026-02-12T01:20:41.070 [DEBUG] [Thread-139147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:20:41.070 [DEBUG] [Thread-139147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:20:41.070 [DEBUG] [Thread-139147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:20:41.070 [DEBUG] [Thread-139147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:20:41.093 [INFO] [Thread-139147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:20:41.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:20:41.748 [DEBUG] [Thread-139147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:20:41.749 [DEBUG] [Thread-139147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:20:41.749 [DEBUG] [Thread-139147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:20:41.790 [DEBUG] [Thread-139147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:20:41.790 [DEBUG] [Thread-139147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:20:41.793 [DEBUG] [Thread-139147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:20:41.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:20:41.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:20:41.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:20:41.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:20:41.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:20:41.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:20:41.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:20:41.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:20:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:20:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.972008 -999.00  +13.00  11.67     92  +11.70 1 1 1 3 1     0    0 1.32 4.97 ZNESW 11.7 11.7 179.2 20.8 14.6 -17.5 14.3 -16.7 14.3 -16.1 14.7 -17.2
2026-02-12T01:20:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:20:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:20:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.972008
2026-02-12T01:20:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:20:41.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:20:41.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:20:41.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:20:41.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:20:41.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:20:27', tmtdew=0.55, humidity=96.3, cloud=0.0, wind=21.4, temperature=12.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:19:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:17:00')
2026-02-12T01:20:41.822 [DEBUG] [Thread-139147] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:20:41.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:20:41.924 [DEBUG] [Thread-139150] [transport.py] [_log()] starting thread (client mode): 0xa2dc3eb0
2026-02-12T01:20:41.924 [DEBUG] [Thread-139150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:20:41.938 [DEBUG] [Thread-139150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:20:41.939 [INFO] [Thread-139150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:20:41.946 [DEBUG] [Thread-139150] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:20:41.946 [DEBUG] [Thread-139150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:20:41.946 [DEBUG] [Thread-139150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] client lang: <none>
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] server lang: <none>
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] kex follows: False
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:20:41.947 [DEBUG] [Thread-139150] [transport.py] [_log()] Compression: none
2026-02-12T01:20:41.948 [DEBUG] [Thread-139150] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:20:42.003 [DEBUG] [Thread-139150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:20:42.004 [DEBUG] [Thread-139150] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:20:42.004 [DEBUG] [Thread-139150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:20:42.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:20:42.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:20:42.059 [DEBUG] [Thread-139150] [transport.py] [_log()] userauth is OK
2026-02-12T01:20:42.060 [DEBUG] [Thread-139150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:20:42.060 [DEBUG] [Thread-139150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:20:42.060 [DEBUG] [Thread-139150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:20:42.060 [DEBUG] [Thread-139150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:20:42.079 [INFO] [Thread-139150] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:20:42.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:20:42.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:20:42.873 [DEBUG] [Thread-139150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:20:42.873 [DEBUG] [Thread-139150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:20:42.922 [DEBUG] [Thread-139150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:20:42.922 [DEBUG] [Thread-139150] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:20:42.931 [DEBUG] [Thread-139150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:20:42.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:20:42.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:20:42.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:20:42.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:20:42.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:20:42.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:20:42.964 [DEBUG] [Thread-139150] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:20:54.936 [DEBUG] [Thread-139152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:20:59.413 [DEBUG] [Thread-139153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:21:09.984 [DEBUG] [Thread-139154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:21:12.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:21:12.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:21:12.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:21:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 21, 3), 0.55, 96.26, 0.0, 21.53, 12.88, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:21:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:21:03
2026-02-12T01:21:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:21:15.420 [DEBUG] [Thread-139155] [transport.py] [_log()] starting thread (client mode): 0xa5770520
2026-02-12T01:21:15.420 [DEBUG] [Thread-139155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:21:15.436 [DEBUG] [Thread-139155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:21:15.436 [INFO] [Thread-139155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] client lang: <none>
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] server lang: <none>
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] kex follows: False
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] Compression: none
2026-02-12T01:21:15.440 [DEBUG] [Thread-139155] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:21:15.457 [DEBUG] [Thread-139155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:21:15.457 [DEBUG] [Thread-139155] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:21:15.458 [DEBUG] [Thread-139155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:21:15.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:21:15.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:21:15.459 [DEBUG] [Thread-139155] [transport.py] [_log()] userauth is OK
2026-02-12T01:21:15.460 [DEBUG] [Thread-139155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:21:15.460 [DEBUG] [Thread-139155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:21:15.460 [DEBUG] [Thread-139155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:21:15.460 [DEBUG] [Thread-139155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:21:15.484 [INFO] [Thread-139155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:21:15.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:21:16.290 [DEBUG] [Thread-139155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:21:16.290 [DEBUG] [Thread-139155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:21:16.290 [DEBUG] [Thread-139155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:21:16.331 [DEBUG] [Thread-139155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:21:16.332 [DEBUG] [Thread-139155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:21:16.335 [DEBUG] [Thread-139155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:21:16.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:21:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:21:16.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:21:16.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:21:16.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:21:16.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:21:16.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:21:16.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:21:16.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:21:16.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.972702 -999.00  +12.90  10.75     91  +11.70 1 1 1 3 1     0    0 1.39 6.79 ZNESW 10.8 10.8 205.8 18.9 14.5 -17.7 14.3 -16.8 14.2 -16.2 14.6 -17.3
2026-02-12T01:21:16.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:21:16.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:21:16.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.972702
2026-02-12T01:21:16.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:21:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:21:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:21:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:21:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:21:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:21:03', tmtdew=0.55, humidity=96.26, cloud=0.0, wind=21.53, temperature=12.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:20:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.9807499999999996, 1.4512500000000008, 0.9162500000000007, 1.051499999999999, 0.8245000000000005, 0.9937500000000012, 1.013, 1.2032500000000006, 1.3884999999999996, 1.755, 1.3472499999999998, 1.6799999999999997, 1.04, 0.9677499999999988, 1.1789999999999994, 1.3469999999999995, 1.4372499999999997, 1.7289999999999992, 1.6129999999999995, 2.0242499999999986, 1.3039999999999985, 1.0452499999999985, 1.2287500000000007, 1.57925, 1.8779999999999992, 1.1915000000000004, 1.5037500000000001, nan, 1.4165, 0.9820000000000011, 1.3800000000000008, nan, 1.8677499999999991], zp_timestamp='2026-02-11T23:17:00')
2026-02-12T01:21:16.364 [DEBUG] [Thread-139155] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:21:16.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:21:16.461 [DEBUG] [Thread-139158] [transport.py] [_log()] starting thread (client mode): 0xa5772bc0
2026-02-12T01:21:16.461 [DEBUG] [Thread-139158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:21:16.476 [DEBUG] [Thread-139158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:21:16.476 [INFO] [Thread-139158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] client lang: <none>
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] server lang: <none>
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] kex follows: False
2026-02-12T01:21:16.484 [DEBUG] [Thread-139158] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:21:16.485 [DEBUG] [Thread-139158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:21:16.485 [DEBUG] [Thread-139158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:21:16.485 [DEBUG] [Thread-139158] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:21:16.485 [DEBUG] [Thread-139158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:21:16.485 [DEBUG] [Thread-139158] [transport.py] [_log()] Compression: none
2026-02-12T01:21:16.485 [DEBUG] [Thread-139158] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:21:16.542 [DEBUG] [Thread-139158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:21:16.543 [DEBUG] [Thread-139158] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:21:16.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:21:16.544 [DEBUG] [Thread-139158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:21:16.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:21:16.599 [DEBUG] [Thread-139158] [transport.py] [_log()] userauth is OK
2026-02-12T01:21:16.599 [DEBUG] [Thread-139158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:21:16.599 [DEBUG] [Thread-139158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:21:16.600 [DEBUG] [Thread-139158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:21:16.600 [DEBUG] [Thread-139158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:21:16.619 [INFO] [Thread-139158] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:21:16.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:21:16.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:21:17.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:21:17.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:21:17.433 [DEBUG] [Thread-139158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:21:17.434 [DEBUG] [Thread-139158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:21:17.481 [DEBUG] [Thread-139158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:21:17.481 [DEBUG] [Thread-139158] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:21:17.490 [DEBUG] [Thread-139158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:21:17.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:21:17.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:21:17.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:21:17.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:21:17.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:21:17.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:21:17.526 [DEBUG] [Thread-139158] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:21:25.020 [DEBUG] [Thread-139160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:21:40.074 [DEBUG] [Thread-139161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:21:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:21:47.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:21:47.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:21:49.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 21, 39), 1.01, 93.53, 0.0, 19.23, 13.16, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:21:49.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:21:39
2026-02-12T01:21:49.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:21:49.949 [DEBUG] [Thread-139162] [transport.py] [_log()] starting thread (client mode): 0xa57d5cf0
2026-02-12T01:21:49.949 [DEBUG] [Thread-139162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:21:49.969 [DEBUG] [Thread-139162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:21:49.969 [INFO] [Thread-139162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:21:49.972 [DEBUG] [Thread-139162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] client lang: <none>
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] server lang: <none>
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] kex follows: False
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:21:49.973 [DEBUG] [Thread-139162] [transport.py] [_log()] Compression: none
2026-02-12T01:21:49.974 [DEBUG] [Thread-139162] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:21:49.991 [DEBUG] [Thread-139162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:21:49.991 [DEBUG] [Thread-139162] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:21:49.992 [DEBUG] [Thread-139162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:21:49.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:21:49.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:21:49.994 [DEBUG] [Thread-139162] [transport.py] [_log()] userauth is OK
2026-02-12T01:21:49.994 [DEBUG] [Thread-139162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:21:49.994 [DEBUG] [Thread-139162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:21:49.994 [DEBUG] [Thread-139162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:21:49.994 [DEBUG] [Thread-139162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:21:50.012 [INFO] [Thread-139162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:21:50.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:21:50.603 [DEBUG] [Thread-139162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:21:50.604 [DEBUG] [Thread-139162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:21:50.604 [DEBUG] [Thread-139162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:21:50.644 [DEBUG] [Thread-139162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:21:50.645 [DEBUG] [Thread-139162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:21:50.648 [DEBUG] [Thread-139162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:21:50.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:21:50.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:21:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:21:50.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:21:50.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:21:50.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:21:50.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:21:50.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:21:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:21:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.973050 -999.00  +13.00  10.90     91  +11.70 1 1 1 3 1     0    0 1.42 7.75 ZNESW 10.9 10.9 182.2 14.6 14.5 -17.4 14.3 -16.6 14.2 -16.2 14.5 -17.1
2026-02-12T01:21:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:21:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:21:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.973050
2026-02-12T01:21:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:21:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:21:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:21:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:21:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:21:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:21:39', tmtdew=1.01, humidity=93.53, cloud=0.0, wind=19.23, temperature=13.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:21:11.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:20:00')
2026-02-12T01:21:50.676 [DEBUG] [Thread-139162] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:21:50.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:21:50.773 [DEBUG] [Thread-139165] [transport.py] [_log()] starting thread (client mode): 0xa57d7d00
2026-02-12T01:21:50.773 [DEBUG] [Thread-139165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:21:50.788 [DEBUG] [Thread-139165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:21:50.788 [INFO] [Thread-139165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:21:50.795 [DEBUG] [Thread-139165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] client lang: <none>
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] server lang: <none>
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] kex follows: False
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] Compression: none
2026-02-12T01:21:50.796 [DEBUG] [Thread-139165] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:21:50.858 [DEBUG] [Thread-139165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:21:50.858 [DEBUG] [Thread-139165] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:21:50.859 [DEBUG] [Thread-139165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:21:50.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:21:50.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:21:50.914 [DEBUG] [Thread-139165] [transport.py] [_log()] userauth is OK
2026-02-12T01:21:50.915 [DEBUG] [Thread-139165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:21:50.915 [DEBUG] [Thread-139165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:21:50.915 [DEBUG] [Thread-139165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:21:50.915 [DEBUG] [Thread-139165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:21:50.933 [INFO] [Thread-139165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:21:50.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:21:50.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:21:51.762 [DEBUG] [Thread-139165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:21:51.762 [DEBUG] [Thread-139165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:21:51.810 [DEBUG] [Thread-139165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:21:51.811 [DEBUG] [Thread-139165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:21:51.820 [DEBUG] [Thread-139165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:21:51.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:21:51.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:21:51.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:21:51.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:21:51.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:21:51.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:21:51.857 [DEBUG] [Thread-139165] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:21:55.111 [DEBUG] [Thread-139167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:21:59.478 [DEBUG] [Thread-139168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:10.173 [DEBUG] [Thread-139169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:17.520 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:17.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:22:21.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:22:21.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:22:23.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 22, 14), 0.56, 96.25, 0.0, 17.84, 12.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:22:23.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:22:14
2026-02-12T01:22:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:22:24.254 [DEBUG] [Thread-139170] [transport.py] [_log()] starting thread (client mode): 0xa5770820
2026-02-12T01:22:24.255 [DEBUG] [Thread-139170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:22:24.271 [DEBUG] [Thread-139170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:22:24.271 [INFO] [Thread-139170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:22:24.272 [DEBUG] [Thread-139170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:22:24.272 [DEBUG] [Thread-139170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:22:24.272 [DEBUG] [Thread-139170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:22:24.272 [DEBUG] [Thread-139170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] client lang: <none>
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] server lang: <none>
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] kex follows: False
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] Compression: none
2026-02-12T01:22:24.273 [DEBUG] [Thread-139170] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:22:24.284 [DEBUG] [Thread-139170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:22:24.284 [DEBUG] [Thread-139170] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:22:24.285 [DEBUG] [Thread-139170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:22:24.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:22:24.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:22:24.286 [DEBUG] [Thread-139170] [transport.py] [_log()] userauth is OK
2026-02-12T01:22:24.286 [DEBUG] [Thread-139170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:22:24.286 [DEBUG] [Thread-139170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:22:24.287 [DEBUG] [Thread-139170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:22:24.287 [DEBUG] [Thread-139170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:22:24.309 [INFO] [Thread-139170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:22:24.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:22:24.910 [DEBUG] [Thread-139170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:22:24.910 [DEBUG] [Thread-139170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:22:24.910 [DEBUG] [Thread-139170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:22:24.951 [DEBUG] [Thread-139170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:22:24.952 [DEBUG] [Thread-139170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:22:24.955 [DEBUG] [Thread-139170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:22:24.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:22:24.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:22:24.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:22:24.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:22:24.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:22:24.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:22:24.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:22:24.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:22:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:22:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.973397 -999.00  +12.90  12.79     91  +11.60 1 1 1 3 1     0    0 1.43 8.34 ZNESW 12.8 12.8 188.0 18.7 14.5 -17.6 14.3 -17.6 14.2 -16.0 14.5 -17.4
2026-02-12T01:22:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:22:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:22:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.973397
2026-02-12T01:22:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:22:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:22:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:22:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:22:24.981 [DEBUG] [Thread-139170] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:22:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:22:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:22:14', tmtdew=0.56, humidity=96.25, cloud=0.0, wind=17.84, temperature=12.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:21:41.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:20:00')
2026-02-12T01:22:25.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:22:25.077 [DEBUG] [Thread-139173] [transport.py] [_log()] starting thread (client mode): 0xa5773130
2026-02-12T01:22:25.077 [DEBUG] [Thread-139173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:22:25.096 [DEBUG] [Thread-139173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:22:25.096 [INFO] [Thread-139173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] client lang: <none>
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] server lang: <none>
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] kex follows: False
2026-02-12T01:22:25.104 [DEBUG] [Thread-139173] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:22:25.105 [DEBUG] [Thread-139173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:22:25.105 [DEBUG] [Thread-139173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:22:25.105 [DEBUG] [Thread-139173] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:22:25.105 [DEBUG] [Thread-139173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:22:25.105 [DEBUG] [Thread-139173] [transport.py] [_log()] Compression: none
2026-02-12T01:22:25.105 [DEBUG] [Thread-139173] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:22:25.161 [DEBUG] [Thread-139173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:22:25.162 [DEBUG] [Thread-139173] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:22:25.162 [DEBUG] [Thread-139173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:22:25.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:22:25.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:22:25.209 [DEBUG] [Thread-139175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:25.219 [DEBUG] [Thread-139173] [transport.py] [_log()] userauth is OK
2026-02-12T01:22:25.219 [DEBUG] [Thread-139173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:22:25.220 [DEBUG] [Thread-139173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:22:25.220 [DEBUG] [Thread-139173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:22:25.220 [DEBUG] [Thread-139173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:22:25.238 [INFO] [Thread-139173] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:22:25.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:22:25.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:22:26.069 [DEBUG] [Thread-139173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:22:26.069 [DEBUG] [Thread-139173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:22:26.117 [DEBUG] [Thread-139173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:22:26.118 [DEBUG] [Thread-139173] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:22:26.127 [DEBUG] [Thread-139173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:22:26.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:22:26.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:22:26.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
2026-02-12T01:22:26.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:22:26.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:22:26.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:22:26.164 [DEBUG] [Thread-139173] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:22:40.271 [DEBUG] [Thread-139176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:55.307 [DEBUG] [Thread-139177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:56.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:22:56.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:22:56.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:22:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 22, 14), 0.56, 96.25, 0.0, 17.84, 12.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:22:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:22:14
2026-02-12T01:22:59.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:22:59.195 [DEBUG] [Thread-139178] [transport.py] [_log()] starting thread (client mode): 0xa57c1210
2026-02-12T01:22:59.195 [DEBUG] [Thread-139178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:22:59.215 [DEBUG] [Thread-139178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:22:59.215 [INFO] [Thread-139178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] client lang: <none>
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] server lang: <none>
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] kex follows: False
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:22:59.218 [DEBUG] [Thread-139178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:22:59.219 [DEBUG] [Thread-139178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:22:59.219 [DEBUG] [Thread-139178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:22:59.219 [DEBUG] [Thread-139178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:22:59.219 [DEBUG] [Thread-139178] [transport.py] [_log()] Compression: none
2026-02-12T01:22:59.219 [DEBUG] [Thread-139178] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:22:59.236 [DEBUG] [Thread-139178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:22:59.237 [DEBUG] [Thread-139178] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:22:59.237 [DEBUG] [Thread-139178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:22:59.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:22:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:22:59.239 [DEBUG] [Thread-139178] [transport.py] [_log()] userauth is OK
2026-02-12T01:22:59.239 [DEBUG] [Thread-139178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:22:59.239 [DEBUG] [Thread-139178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:22:59.239 [DEBUG] [Thread-139178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:22:59.239 [DEBUG] [Thread-139178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:22:59.257 [INFO] [Thread-139178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:22:59.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:22:59.566 [DEBUG] [Thread-139180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:22:59.894 [DEBUG] [Thread-139178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:22:59.894 [DEBUG] [Thread-139178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:22:59.894 [DEBUG] [Thread-139178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:22:59.935 [DEBUG] [Thread-139178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:22:59.935 [DEBUG] [Thread-139178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:22:59.938 [DEBUG] [Thread-139178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:22:59.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:22:59.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:22:59.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:22:59.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:22:59.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:22:59.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:22:59.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:22:59.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:22:59.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:22:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.973745 -999.00  +12.90  11.51     91  +11.60 1 1 1 3 1     0    0 1.50 9.92 ZNESW 11.5 11.5 194.2 14.7 14.4 -17.5 14.2 -17.0 14.2 -16.1 14.5 -17.2
2026-02-12T01:22:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:22:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:22:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.973745
2026-02-12T01:22:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:22:59.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:22:59.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:22:59.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:22:59.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:22:59.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:22:14', tmtdew=0.56, humidity=96.25, cloud=0.0, wind=17.84, temperature=12.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:22:11.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:20:00')
2026-02-12T01:22:59.962 [DEBUG] [Thread-139178] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:23:00.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:23:00.057 [DEBUG] [Thread-139182] [transport.py] [_log()] starting thread (client mode): 0xa57d43a0
2026-02-12T01:23:00.057 [DEBUG] [Thread-139182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:23:00.072 [DEBUG] [Thread-139182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:23:00.072 [INFO] [Thread-139182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:23:00.079 [DEBUG] [Thread-139182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:23:00.079 [DEBUG] [Thread-139182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:23:00.079 [DEBUG] [Thread-139182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:23:00.079 [DEBUG] [Thread-139182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] client lang: <none>
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] server lang: <none>
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] kex follows: False
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] Compression: none
2026-02-12T01:23:00.080 [DEBUG] [Thread-139182] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:23:00.135 [DEBUG] [Thread-139182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:23:00.136 [DEBUG] [Thread-139182] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:23:00.136 [DEBUG] [Thread-139182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:23:00.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:23:00.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:23:00.192 [DEBUG] [Thread-139182] [transport.py] [_log()] userauth is OK
2026-02-12T01:23:00.192 [DEBUG] [Thread-139182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:23:00.192 [DEBUG] [Thread-139182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:23:00.193 [DEBUG] [Thread-139182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:23:00.193 [DEBUG] [Thread-139182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:23:00.211 [INFO] [Thread-139182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:23:00.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:23:00.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:23:01.027 [DEBUG] [Thread-139182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:23:01.027 [DEBUG] [Thread-139182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:23:01.075 [DEBUG] [Thread-139182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:23:01.076 [DEBUG] [Thread-139182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:23:01.084 [DEBUG] [Thread-139182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:23:01.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:23:01.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:23:01.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:23:01.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:23:01.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:23:01.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:23:01.117 [DEBUG] [Thread-139182] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:23:10.340 [DEBUG] [Thread-139184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:23:17.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:23:17.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:23:25.392 [DEBUG] [Thread-139185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:23:31.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:23:31.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:23:31.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:23:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 22, 50), 0.55, 96.3, 0.0, 21.12, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:23:33.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:22:50
2026-02-12T01:23:33.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:23:33.553 [DEBUG] [Thread-139186] [transport.py] [_log()] starting thread (client mode): 0xa5773070
2026-02-12T01:23:33.553 [DEBUG] [Thread-139186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:23:33.573 [DEBUG] [Thread-139186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:23:33.573 [INFO] [Thread-139186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] client lang: <none>
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] server lang: <none>
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] kex follows: False
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] Compression: none
2026-02-12T01:23:33.576 [DEBUG] [Thread-139186] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:23:33.595 [DEBUG] [Thread-139186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:23:33.595 [DEBUG] [Thread-139186] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:23:33.596 [DEBUG] [Thread-139186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:23:33.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:23:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:23:33.598 [DEBUG] [Thread-139186] [transport.py] [_log()] userauth is OK
2026-02-12T01:23:33.598 [DEBUG] [Thread-139186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:23:33.598 [DEBUG] [Thread-139186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:23:33.598 [DEBUG] [Thread-139186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:23:33.598 [DEBUG] [Thread-139186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:23:33.633 [INFO] [Thread-139186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:23:33.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:23:34.245 [DEBUG] [Thread-139186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:23:34.245 [DEBUG] [Thread-139186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:23:34.245 [DEBUG] [Thread-139186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:23:34.285 [DEBUG] [Thread-139186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:23:34.285 [DEBUG] [Thread-139186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:23:34.289 [DEBUG] [Thread-139186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:23:34.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:23:34.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:23:34.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:23:34.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:23:34.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:23:34.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:23:34.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:23:34.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:23:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:23:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.974092 -999.00  +12.90  16.47     91  +11.60 1 1 1 3 1     0    0 1.50 10.18 ZNESW 16.5 16.5 183.6 19.6 14.4 -17.7 14.2 -17.2 14.2 -16.1 14.4 -17.2
2026-02-12T01:23:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:23:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:23:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.974092
2026-02-12T01:23:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:23:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:23:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:23:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:23:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:23:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:22:50', tmtdew=0.55, humidity=96.3, cloud=0.0, wind=21.12, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:22:41.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:20:00')
2026-02-12T01:23:34.316 [DEBUG] [Thread-139186] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:23:34.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:23:34.413 [DEBUG] [Thread-139189] [transport.py] [_log()] starting thread (client mode): 0xa2d94ca0
2026-02-12T01:23:34.413 [DEBUG] [Thread-139189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:23:34.427 [DEBUG] [Thread-139189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:23:34.427 [INFO] [Thread-139189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:23:34.435 [DEBUG] [Thread-139189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:23:34.435 [DEBUG] [Thread-139189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:23:34.435 [DEBUG] [Thread-139189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] client lang: <none>
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] server lang: <none>
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] kex follows: False
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] Compression: none
2026-02-12T01:23:34.436 [DEBUG] [Thread-139189] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:23:34.492 [DEBUG] [Thread-139189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:23:34.493 [DEBUG] [Thread-139189] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:23:34.493 [DEBUG] [Thread-139189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:23:34.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:23:34.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:23:34.548 [DEBUG] [Thread-139189] [transport.py] [_log()] userauth is OK
2026-02-12T01:23:34.549 [DEBUG] [Thread-139189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:23:34.549 [DEBUG] [Thread-139189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:23:34.549 [DEBUG] [Thread-139189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:23:34.549 [DEBUG] [Thread-139189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:23:34.567 [INFO] [Thread-139189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:23:34.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:23:34.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:23:35.394 [DEBUG] [Thread-139189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:23:35.399 [DEBUG] [Thread-139189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:23:35.442 [DEBUG] [Thread-139189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:23:35.442 [DEBUG] [Thread-139189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:23:35.452 [DEBUG] [Thread-139189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:23:35.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:23:35.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:23:35.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:23:35.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:23:35.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:23:35.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:23:35.488 [DEBUG] [Thread-139189] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:23:40.430 [DEBUG] [Thread-139191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:23:55.482 [DEBUG] [Thread-139192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:23:59.643 [DEBUG] [Thread-139193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:24:05.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:24:05.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:24:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:24:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 23, 26), 0.55, 96.26, 0.0, 21.47, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:24:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:23:26
2026-02-12T01:24:07.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:24:07.835 [DEBUG] [Thread-139194] [transport.py] [_log()] starting thread (client mode): 0xa5770a90
2026-02-12T01:24:07.835 [DEBUG] [Thread-139194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:24:07.853 [DEBUG] [Thread-139194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:24:07.854 [INFO] [Thread-139194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] client lang: <none>
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] server lang: <none>
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] kex follows: False
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] Compression: none
2026-02-12T01:24:07.857 [DEBUG] [Thread-139194] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:24:07.880 [DEBUG] [Thread-139194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:24:07.880 [DEBUG] [Thread-139194] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:24:07.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:24:07.882 [DEBUG] [Thread-139194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:24:07.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:24:07.884 [DEBUG] [Thread-139194] [transport.py] [_log()] userauth is OK
2026-02-12T01:24:07.885 [DEBUG] [Thread-139194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:24:07.885 [DEBUG] [Thread-139194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:24:07.885 [DEBUG] [Thread-139194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:24:07.885 [DEBUG] [Thread-139194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:24:07.903 [INFO] [Thread-139194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:24:07.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:24:08.681 [DEBUG] [Thread-139194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:24:08.682 [DEBUG] [Thread-139194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:24:08.682 [DEBUG] [Thread-139194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:24:08.722 [DEBUG] [Thread-139194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:24:08.723 [DEBUG] [Thread-139194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:24:08.726 [DEBUG] [Thread-139194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:24:08.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:24:08.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:24:08.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:24:08.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:24:08.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:24:08.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:24:08.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:24:08.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:24:08.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:24:08.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.974439 -999.00  +12.90  11.85     91  +11.60 1 1 1 3 1     0    0 1.53 10.85 ZNESW 11.8 11.8 181.6 17.6 14.3 -17.8 14.1 -17.0 14.1 -16.3 14.4 -17.2
2026-02-12T01:24:08.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:24:08.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:24:08.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.974439
2026-02-12T01:24:08.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:24:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:24:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:24:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:24:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:24:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:23:26', tmtdew=0.55, humidity=96.26, cloud=0.0, wind=21.47, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:23:11.530', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:20:00')
2026-02-12T01:24:08.751 [DEBUG] [Thread-139194] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:24:08.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:24:08.852 [DEBUG] [Thread-139197] [transport.py] [_log()] starting thread (client mode): 0xa57d5cf0
2026-02-12T01:24:08.852 [DEBUG] [Thread-139197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:24:08.866 [DEBUG] [Thread-139197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:24:08.867 [INFO] [Thread-139197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:24:08.874 [DEBUG] [Thread-139197] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] client lang: <none>
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] server lang: <none>
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] kex follows: False
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:24:08.875 [DEBUG] [Thread-139197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:24:08.876 [DEBUG] [Thread-139197] [transport.py] [_log()] Compression: none
2026-02-12T01:24:08.876 [DEBUG] [Thread-139197] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:24:08.932 [DEBUG] [Thread-139197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:24:08.932 [DEBUG] [Thread-139197] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:24:08.933 [DEBUG] [Thread-139197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:24:08.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:24:08.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:24:08.987 [DEBUG] [Thread-139197] [transport.py] [_log()] userauth is OK
2026-02-12T01:24:08.988 [DEBUG] [Thread-139197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:24:08.988 [DEBUG] [Thread-139197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:24:08.988 [DEBUG] [Thread-139197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:24:08.988 [DEBUG] [Thread-139197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:24:09.006 [INFO] [Thread-139197] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:24:09.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:24:09.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:24:09.803 [DEBUG] [Thread-139197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:24:09.803 [DEBUG] [Thread-139197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:24:09.851 [DEBUG] [Thread-139197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:24:09.851 [DEBUG] [Thread-139197] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:24:09.861 [DEBUG] [Thread-139197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:24:09.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:24:09.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:24:09.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:24:09.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:24:09.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:24:09.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:24:09.897 [DEBUG] [Thread-139197] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:24:10.522 [DEBUG] [Thread-139199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:24:17.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:24:17.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:24:25.578 [DEBUG] [Thread-139200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:24:39.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:24:39.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:24:39.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
2026-02-12T01:24:40.614 [DEBUG] [Thread-139201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:24:41.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 24, 1), 0.56, 96.23, 0.0, 21.97, 12.68, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:24:41.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:24:01
2026-02-12T01:24:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:24:42.202 [DEBUG] [Thread-139202] [transport.py] [_log()] starting thread (client mode): 0xa2d9c5b0
2026-02-12T01:24:42.202 [DEBUG] [Thread-139202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:24:42.223 [DEBUG] [Thread-139202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:24:42.223 [INFO] [Thread-139202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] client lang: <none>
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] server lang: <none>
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] kex follows: False
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] Compression: none
2026-02-12T01:24:42.227 [DEBUG] [Thread-139202] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:24:42.244 [DEBUG] [Thread-139202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:24:42.245 [DEBUG] [Thread-139202] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:24:42.245 [DEBUG] [Thread-139202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:24:42.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:24:42.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:24:42.247 [DEBUG] [Thread-139202] [transport.py] [_log()] userauth is OK
2026-02-12T01:24:42.248 [DEBUG] [Thread-139202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:24:42.248 [DEBUG] [Thread-139202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:24:42.248 [DEBUG] [Thread-139202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:24:42.248 [DEBUG] [Thread-139202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:24:42.267 [INFO] [Thread-139202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:24:42.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:24:42.881 [DEBUG] [Thread-139202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:24:42.881 [DEBUG] [Thread-139202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:24:42.881 [DEBUG] [Thread-139202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:24:42.922 [DEBUG] [Thread-139202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:24:42.922 [DEBUG] [Thread-139202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:24:42.924 [DEBUG] [Thread-139202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:24:42.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:24:42.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:24:42.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:24:42.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:24:42.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:24:42.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:24:42.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:24:42.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:24:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.975133 -999.00  +12.80  13.23     92  +11.50 1 1 1 3 1     0    0 1.55 12.20 ZNESW 13.2 13.2 184.4 18.2 14.3 -17.5 14.1 -17.4 14.1 -16.1 14.3 -17.0
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.975133
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:24:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:24:01', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=21.97, temperature=12.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:24:11.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:23:00')
2026-02-12T01:24:42.945 [DEBUG] [Thread-139202] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:24:43.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:24:43.035 [DEBUG] [Thread-139205] [transport.py] [_log()] starting thread (client mode): 0xa2d9cb80
2026-02-12T01:24:43.035 [DEBUG] [Thread-139205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:24:43.049 [DEBUG] [Thread-139205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:24:43.049 [INFO] [Thread-139205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:24:43.056 [DEBUG] [Thread-139205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:24:43.057 [DEBUG] [Thread-139205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:24:43.058 [DEBUG] [Thread-139205] [transport.py] [_log()] client lang: <none>
2026-02-12T01:24:43.058 [DEBUG] [Thread-139205] [transport.py] [_log()] server lang: <none>
2026-02-12T01:24:43.058 [DEBUG] [Thread-139205] [transport.py] [_log()] kex follows: False
2026-02-12T01:24:43.058 [DEBUG] [Thread-139205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:24:43.058 [DEBUG] [Thread-139205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:24:43.058 [DEBUG] [Thread-139205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:24:43.058 [DEBUG] [Thread-139205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:24:43.059 [DEBUG] [Thread-139205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:24:43.059 [DEBUG] [Thread-139205] [transport.py] [_log()] Compression: none
2026-02-12T01:24:43.059 [DEBUG] [Thread-139205] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:24:43.114 [DEBUG] [Thread-139205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:24:43.114 [DEBUG] [Thread-139205] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:24:43.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:24:43.115 [DEBUG] [Thread-139205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:24:43.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:24:43.171 [DEBUG] [Thread-139205] [transport.py] [_log()] userauth is OK
2026-02-12T01:24:43.171 [DEBUG] [Thread-139205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:24:43.171 [DEBUG] [Thread-139205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:24:43.171 [DEBUG] [Thread-139205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:24:43.171 [DEBUG] [Thread-139205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:24:43.192 [INFO] [Thread-139205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:24:43.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:24:43.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:24:43.996 [DEBUG] [Thread-139205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:24:43.996 [DEBUG] [Thread-139205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:24:44.044 [DEBUG] [Thread-139205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:24:44.044 [DEBUG] [Thread-139205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:24:44.054 [DEBUG] [Thread-139205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:24:44.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:24:44.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:24:44.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:24:44.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:24:44.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:24:44.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:24:44.091 [DEBUG] [Thread-139205] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:24:55.646 [DEBUG] [Thread-139207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:24:59.720 [DEBUG] [Thread-139208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:25:10.694 [DEBUG] [Thread-139209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:25:14.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:25:14.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:25:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:25:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 24, 36), 1.03, 93.39, 0.0, 21.42, 13.06, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:25:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:24:36
2026-02-12T01:25:16.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:25:16.627 [DEBUG] [Thread-139210] [transport.py] [_log()] starting thread (client mode): 0xa57d66b0
2026-02-12T01:25:16.628 [DEBUG] [Thread-139210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:25:16.647 [DEBUG] [Thread-139210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:25:16.647 [INFO] [Thread-139210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:25:16.648 [DEBUG] [Thread-139210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:25:16.648 [DEBUG] [Thread-139210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:25:16.648 [DEBUG] [Thread-139210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:25:16.648 [DEBUG] [Thread-139210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:16.648 [DEBUG] [Thread-139210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:16.648 [DEBUG] [Thread-139210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] client lang: <none>
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] server lang: <none>
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] kex follows: False
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] Compression: none
2026-02-12T01:25:16.649 [DEBUG] [Thread-139210] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:25:16.661 [DEBUG] [Thread-139210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:25:16.661 [DEBUG] [Thread-139210] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:25:16.662 [DEBUG] [Thread-139210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:25:16.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:25:16.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:25:16.663 [DEBUG] [Thread-139210] [transport.py] [_log()] userauth is OK
2026-02-12T01:25:16.664 [DEBUG] [Thread-139210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:25:16.664 [DEBUG] [Thread-139210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:25:16.664 [DEBUG] [Thread-139210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:25:16.664 [DEBUG] [Thread-139210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:25:16.687 [INFO] [Thread-139210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:25:16.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:25:18.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:25:18.141 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:25:18.272 [DEBUG] [Thread-139210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:25:18.273 [DEBUG] [Thread-139210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:25:18.273 [DEBUG] [Thread-139210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:25:18.313 [DEBUG] [Thread-139210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:25:18.314 [DEBUG] [Thread-139210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:25:18.317 [DEBUG] [Thread-139210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:25:18.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:25:18.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:25:18.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:25:18.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:25:18.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:25:18.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:25:18.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:25:18.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:25:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:25:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.975481 -999.00  +12.80  10.58     92  +11.50 1 1 1 3 1     0    0 1.54 12.54 ZNESW 10.6 10.6 176.8 18.7 14.3 -17.4 14.1 -17.1 14.0 -16.1 14.3 -17.1
2026-02-12T01:25:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:25:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:25:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.975481
2026-02-12T01:25:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:25:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:25:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:25:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:25:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:25:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:24:36', tmtdew=1.03, humidity=93.39, cloud=0.0, wind=21.42, temperature=13.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:24:41.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:23:00')
2026-02-12T01:25:18.343 [DEBUG] [Thread-139210] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:25:18.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:25:18.437 [DEBUG] [Thread-139213] [transport.py] [_log()] starting thread (client mode): 0xa5770bb0
2026-02-12T01:25:18.438 [DEBUG] [Thread-139213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:25:18.452 [DEBUG] [Thread-139213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:25:18.452 [INFO] [Thread-139213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] client lang: <none>
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] server lang: <none>
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] kex follows: False
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:25:18.460 [DEBUG] [Thread-139213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:25:18.461 [DEBUG] [Thread-139213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:25:18.461 [DEBUG] [Thread-139213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:25:18.461 [DEBUG] [Thread-139213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:25:18.461 [DEBUG] [Thread-139213] [transport.py] [_log()] Compression: none
2026-02-12T01:25:18.461 [DEBUG] [Thread-139213] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:25:18.522 [DEBUG] [Thread-139213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:25:18.523 [DEBUG] [Thread-139213] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:25:18.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:25:18.524 [DEBUG] [Thread-139213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:25:18.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:25:18.583 [DEBUG] [Thread-139213] [transport.py] [_log()] userauth is OK
2026-02-12T01:25:18.583 [DEBUG] [Thread-139213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:25:18.584 [DEBUG] [Thread-139213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:25:18.584 [DEBUG] [Thread-139213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:25:18.584 [DEBUG] [Thread-139213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:25:18.608 [INFO] [Thread-139213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:25:18.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:25:18.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:25:19.408 [DEBUG] [Thread-139213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:25:19.409 [DEBUG] [Thread-139213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:25:19.456 [DEBUG] [Thread-139213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:25:19.457 [DEBUG] [Thread-139213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:25:19.466 [DEBUG] [Thread-139213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:25:19.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:25:19.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:25:19.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:25:19.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:25:19.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:25:19.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:25:19.504 [DEBUG] [Thread-139213] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:25:25.729 [DEBUG] [Thread-139215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:25:40.791 [DEBUG] [Thread-139216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:25:49.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:25:49.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:25:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:25:51.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 25, 11), 0.56, 96.2, 0.0, 17.7, 12.65, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:25:51.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:25:11
2026-02-12T01:25:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:25:52.360 [DEBUG] [Thread-139217] [transport.py] [_log()] starting thread (client mode): 0xa2d9d300
2026-02-12T01:25:52.360 [DEBUG] [Thread-139217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:25:52.380 [DEBUG] [Thread-139217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:25:52.381 [INFO] [Thread-139217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] client lang: <none>
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] server lang: <none>
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] kex follows: False
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] Compression: none
2026-02-12T01:25:52.384 [DEBUG] [Thread-139217] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:25:52.401 [DEBUG] [Thread-139217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:25:52.402 [DEBUG] [Thread-139217] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:25:52.402 [DEBUG] [Thread-139217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:25:52.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:25:52.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:25:52.404 [DEBUG] [Thread-139217] [transport.py] [_log()] userauth is OK
2026-02-12T01:25:52.405 [DEBUG] [Thread-139217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:25:52.405 [DEBUG] [Thread-139217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:25:52.405 [DEBUG] [Thread-139217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:25:52.405 [DEBUG] [Thread-139217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:25:52.441 [INFO] [Thread-139217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:25:52.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:25:53.076 [DEBUG] [Thread-139217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:25:53.076 [DEBUG] [Thread-139217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:25:53.077 [DEBUG] [Thread-139217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:25:53.117 [DEBUG] [Thread-139217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:25:53.117 [DEBUG] [Thread-139217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:25:53.120 [DEBUG] [Thread-139217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:25:53.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:25:53.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:25:53.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:25:53.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:25:53.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:25:53.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:25:53.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:25:53.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:25:53.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:25:53.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.975828 -999.00  +12.80  15.77     92  +11.50 1 1 1 3 1     0    0 1.56 11.99 ZNESW 15.8 15.8 180.2 19.6 14.3 -17.2 14.1 -16.9 14.0 -15.7 14.3 -17.0
2026-02-12T01:25:53.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:25:53.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:25:53.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.975828
2026-02-12T01:25:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:25:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:25:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:25:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:25:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:25:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:25:11', tmtdew=0.56, humidity=96.2, cloud=0.0, wind=17.7, temperature=12.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:25:11.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:23:00')
2026-02-12T01:25:53.143 [DEBUG] [Thread-139217] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:25:53.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:25:53.236 [DEBUG] [Thread-139220] [transport.py] [_log()] starting thread (client mode): 0xa2d9f880
2026-02-12T01:25:53.237 [DEBUG] [Thread-139220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:25:53.255 [DEBUG] [Thread-139220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:25:53.255 [INFO] [Thread-139220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:25:53.262 [DEBUG] [Thread-139220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:25:53.262 [DEBUG] [Thread-139220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] client lang: <none>
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] server lang: <none>
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] kex follows: False
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] Compression: none
2026-02-12T01:25:53.263 [DEBUG] [Thread-139220] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:25:53.322 [DEBUG] [Thread-139220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:25:53.323 [DEBUG] [Thread-139220] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:25:53.323 [DEBUG] [Thread-139220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:25:53.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:25:53.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:25:53.378 [DEBUG] [Thread-139220] [transport.py] [_log()] userauth is OK
2026-02-12T01:25:53.379 [DEBUG] [Thread-139220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:25:53.379 [DEBUG] [Thread-139220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:25:53.379 [DEBUG] [Thread-139220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:25:53.379 [DEBUG] [Thread-139220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:25:53.398 [INFO] [Thread-139220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:25:53.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:25:53.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:25:54.247 [DEBUG] [Thread-139220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:25:54.247 [DEBUG] [Thread-139220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:25:54.295 [DEBUG] [Thread-139220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:25:54.295 [DEBUG] [Thread-139220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:25:54.304 [DEBUG] [Thread-139220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:25:54.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:25:54.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:25:54.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:25:54.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:25:54.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:25:54.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:25:54.347 [DEBUG] [Thread-139220] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:25:55.827 [DEBUG] [Thread-139222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:25:59.795 [DEBUG] [Thread-139223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:26:10.882 [DEBUG] [Thread-139224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:26:18.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:26:18.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:26:24.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:26:24.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:26:24.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
2026-02-12T01:26:25.917 [DEBUG] [Thread-139225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:26:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 25, 47), 0.56, 96.2, 0.0, 17.33, 12.6, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:26:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:25:47
2026-02-12T01:26:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:26:26.775 [DEBUG] [Thread-139226] [transport.py] [_log()] starting thread (client mode): 0xa57d7310
2026-02-12T01:26:26.775 [DEBUG] [Thread-139226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:26:26.797 [DEBUG] [Thread-139226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:26:26.797 [INFO] [Thread-139226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:26:26.800 [DEBUG] [Thread-139226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] client lang: <none>
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] server lang: <none>
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] kex follows: False
2026-02-12T01:26:26.801 [DEBUG] [Thread-139226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:26:26.802 [DEBUG] [Thread-139226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:26:26.802 [DEBUG] [Thread-139226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:26:26.802 [DEBUG] [Thread-139226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:26:26.802 [DEBUG] [Thread-139226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:26:26.802 [DEBUG] [Thread-139226] [transport.py] [_log()] Compression: none
2026-02-12T01:26:26.802 [DEBUG] [Thread-139226] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:26:26.822 [DEBUG] [Thread-139226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:26:26.823 [DEBUG] [Thread-139226] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:26:26.823 [DEBUG] [Thread-139226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:26:26.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:26:26.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:26:26.825 [DEBUG] [Thread-139226] [transport.py] [_log()] userauth is OK
2026-02-12T01:26:26.826 [DEBUG] [Thread-139226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:26:26.826 [DEBUG] [Thread-139226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:26:26.826 [DEBUG] [Thread-139226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:26:26.826 [DEBUG] [Thread-139226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:26:26.862 [INFO] [Thread-139226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:26:26.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:26:27.515 [DEBUG] [Thread-139226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:26:27.516 [DEBUG] [Thread-139226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:26:27.516 [DEBUG] [Thread-139226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:26:27.556 [DEBUG] [Thread-139226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:26:27.557 [DEBUG] [Thread-139226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:26:27.560 [DEBUG] [Thread-139226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:26:27.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:26:27.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:26:27.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:26:27.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:26:27.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:26:27.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:26:27.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:26:27.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:26:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:26:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.976175 -999.00  +12.80  11.61     92  +11.50 1 1 1 3 1     0    0 1.59 11.94 ZNESW 11.6 11.6 182.8 16.9 14.3 -17.0 14.0 -16.9 14.0 -16.0 14.3 -17.0
2026-02-12T01:26:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:26:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:26:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.976175
2026-02-12T01:26:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:26:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:26:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:26:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:26:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:26:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:25:47', tmtdew=0.56, humidity=96.2, cloud=0.0, wind=17.33, temperature=12.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:25:41.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:23:00')
2026-02-12T01:26:27.587 [DEBUG] [Thread-139226] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:26:27.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:26:27.682 [DEBUG] [Thread-139229] [transport.py] [_log()] starting thread (client mode): 0xa2d97c70
2026-02-12T01:26:27.682 [DEBUG] [Thread-139229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:26:27.696 [DEBUG] [Thread-139229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:26:27.697 [INFO] [Thread-139229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:26:27.704 [DEBUG] [Thread-139229] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:26:27.704 [DEBUG] [Thread-139229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:26:27.704 [DEBUG] [Thread-139229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:26:27.704 [DEBUG] [Thread-139229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:26:27.704 [DEBUG] [Thread-139229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:26:27.704 [DEBUG] [Thread-139229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] client lang: <none>
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] server lang: <none>
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] kex follows: False
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] Compression: none
2026-02-12T01:26:27.705 [DEBUG] [Thread-139229] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:26:27.761 [DEBUG] [Thread-139229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:26:27.762 [DEBUG] [Thread-139229] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:26:27.763 [DEBUG] [Thread-139229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:26:27.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:26:27.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:26:27.820 [DEBUG] [Thread-139229] [transport.py] [_log()] userauth is OK
2026-02-12T01:26:27.820 [DEBUG] [Thread-139229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:26:27.820 [DEBUG] [Thread-139229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:26:27.820 [DEBUG] [Thread-139229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:26:27.820 [DEBUG] [Thread-139229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:26:27.840 [INFO] [Thread-139229] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:26:27.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:26:27.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:26:28.676 [DEBUG] [Thread-139229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:26:28.677 [DEBUG] [Thread-139229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:26:28.724 [DEBUG] [Thread-139229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:26:28.725 [DEBUG] [Thread-139229] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:26:28.734 [DEBUG] [Thread-139229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:26:28.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:26:28.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:26:28.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:26:28.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:26:28.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:26:28.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:26:28.771 [DEBUG] [Thread-139229] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:26:40.953 [DEBUG] [Thread-139231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:26:56.005 [DEBUG] [Thread-139232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:26:58.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:26:58.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:26:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:26:59.878 [DEBUG] [Thread-139233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:27:00.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 26, 22), 0.57, 96.18, 0.0, 16.82, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:27:00.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:26:22
2026-02-12T01:27:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:27:01.151 [DEBUG] [Thread-139234] [transport.py] [_log()] starting thread (client mode): 0xa57e2320
2026-02-12T01:27:01.151 [DEBUG] [Thread-139234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:27:01.172 [DEBUG] [Thread-139234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:27:01.172 [INFO] [Thread-139234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:27:01.173 [DEBUG] [Thread-139234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] client lang: <none>
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] server lang: <none>
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] kex follows: False
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] Compression: none
2026-02-12T01:27:01.174 [DEBUG] [Thread-139234] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:27:01.191 [DEBUG] [Thread-139234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:27:01.191 [DEBUG] [Thread-139234] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:27:01.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:27:01.193 [DEBUG] [Thread-139234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:27:01.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:27:01.195 [DEBUG] [Thread-139234] [transport.py] [_log()] userauth is OK
2026-02-12T01:27:01.195 [DEBUG] [Thread-139234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:27:01.195 [DEBUG] [Thread-139234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:27:01.195 [DEBUG] [Thread-139234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:27:01.195 [DEBUG] [Thread-139234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:27:01.220 [INFO] [Thread-139234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:27:01.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:27:01.839 [DEBUG] [Thread-139234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:27:01.839 [DEBUG] [Thread-139234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:27:01.840 [DEBUG] [Thread-139234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:27:01.881 [DEBUG] [Thread-139234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:27:01.881 [DEBUG] [Thread-139234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:27:01.883 [DEBUG] [Thread-139234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:27:01.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:27:01.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:27:01.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:27:01.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:27:01.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:27:01.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:27:01.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:27:01.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.976522 -999.00  +12.80  10.50     92  +11.50 1 1 1 3 1     0    0 1.58 11.56 ZNESW 10.5 10.5 182.4 18.1 14.2 -16.8 14.0 -16.4 13.9 -15.8 14.2 -16.7
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.976522
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:27:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:26:22', tmtdew=0.57, humidity=96.18, cloud=0.0, wind=16.82, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:26:11.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:23:00')
2026-02-12T01:27:01.899 [DEBUG] [Thread-139234] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:27:01.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:27:01.985 [DEBUG] [Thread-139237] [transport.py] [_log()] starting thread (client mode): 0xa57733a0
2026-02-12T01:27:01.985 [DEBUG] [Thread-139237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:27:02.000 [DEBUG] [Thread-139237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:27:02.000 [INFO] [Thread-139237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:27:02.007 [DEBUG] [Thread-139237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] client lang: <none>
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] server lang: <none>
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] kex follows: False
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] Compression: none
2026-02-12T01:27:02.008 [DEBUG] [Thread-139237] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:27:02.065 [DEBUG] [Thread-139237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:27:02.066 [DEBUG] [Thread-139237] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:27:02.066 [DEBUG] [Thread-139237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:27:02.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:27:02.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:27:02.121 [DEBUG] [Thread-139237] [transport.py] [_log()] userauth is OK
2026-02-12T01:27:02.121 [DEBUG] [Thread-139237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:27:02.121 [DEBUG] [Thread-139237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:27:02.121 [DEBUG] [Thread-139237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:27:02.121 [DEBUG] [Thread-139237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:27:02.145 [INFO] [Thread-139237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:27:02.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:27:02.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:27:02.999 [DEBUG] [Thread-139237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:27:02.999 [DEBUG] [Thread-139237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:27:03.047 [DEBUG] [Thread-139237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:27:03.047 [DEBUG] [Thread-139237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:27:03.056 [DEBUG] [Thread-139237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:27:03.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:27:03.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:27:03.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:27:03.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:27:03.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:27:03.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:27:03.087 [DEBUG] [Thread-139237] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:27:11.042 [DEBUG] [Thread-139239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:27:18.560 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:27:18.561 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:27:26.094 [DEBUG] [Thread-139240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:27:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:27:33.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:27:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:27:35.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 26, 58), 0.56, 96.23, 0.0, 16.73, 12.66, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:27:35.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:26:58
2026-02-12T01:27:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:27:35.572 [DEBUG] [Thread-139241] [transport.py] [_log()] starting thread (client mode): 0xa57d6ef0
2026-02-12T01:27:35.573 [DEBUG] [Thread-139241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:27:35.592 [DEBUG] [Thread-139241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:27:35.592 [INFO] [Thread-139241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] client lang: <none>
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] server lang: <none>
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] kex follows: False
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:27:35.595 [DEBUG] [Thread-139241] [transport.py] [_log()] Compression: none
2026-02-12T01:27:35.596 [DEBUG] [Thread-139241] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:27:35.612 [DEBUG] [Thread-139241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:27:35.613 [DEBUG] [Thread-139241] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:27:35.613 [DEBUG] [Thread-139241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:27:35.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:27:35.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:27:35.615 [DEBUG] [Thread-139241] [transport.py] [_log()] userauth is OK
2026-02-12T01:27:35.616 [DEBUG] [Thread-139241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:27:35.616 [DEBUG] [Thread-139241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:27:35.616 [DEBUG] [Thread-139241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:27:35.616 [DEBUG] [Thread-139241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:27:35.640 [INFO] [Thread-139241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:27:35.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:27:36.281 [DEBUG] [Thread-139241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:27:36.281 [DEBUG] [Thread-139241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:27:36.282 [DEBUG] [Thread-139241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:27:36.322 [DEBUG] [Thread-139241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:27:36.323 [DEBUG] [Thread-139241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:27:36.326 [DEBUG] [Thread-139241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:27:36.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:27:36.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:27:36.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:27:36.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:27:36.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:27:36.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:27:36.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:27:36.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:27:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:27:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.976869 -999.00  +12.70  17.14     92  +11.50 1 1 1 3 1     0    0 1.59 12.07 ZNESW 17.1 17.1 177.4 19.4 14.2 -17.0 14.0 -16.7 13.9 -15.4 14.3 -16.5
2026-02-12T01:27:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:27:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:27:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.976869
2026-02-12T01:27:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:27:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:27:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:27:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:27:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:27:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:26:58', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=16.73, temperature=12.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:26:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.24774999999999991, 0.3832500000000003, 0.22574999999999967, 0.23449999999999882, 0.24450000000000038, 0.29875000000000185, 0.27200000000000024, 0.3252500000000005, 0.39399999999999835, 0.4510000000000005, 0.2992499999999989, 0.30599999999999916, 0.3484999999999996, 0.2892499999999991, 0.2829999999999995, 0.3219999999999992, 0.39124999999999943, 0.3874999999999993, 0.3874999999999993, 0.3612499999999983, 0.4989999999999988, 0.369749999999998, 0.26924999999999955, 0.3232499999999998, 0.4349999999999987, 0.1980000000000004, 0.3142499999999995, 0.7400000000000002, 0.7805, 0.3180000000000014, 0.28000000000000114, 0.3280000000000012, 0.2727499999999985], zp_timestamp='2026-02-11T23:23:00')
2026-02-12T01:27:36.353 [DEBUG] [Thread-139241] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:27:36.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:27:36.448 [DEBUG] [Thread-139244] [transport.py] [_log()] starting thread (client mode): 0xa57d5780
2026-02-12T01:27:36.448 [DEBUG] [Thread-139244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:27:36.463 [DEBUG] [Thread-139244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:27:36.463 [INFO] [Thread-139244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:27:36.470 [DEBUG] [Thread-139244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:27:36.470 [DEBUG] [Thread-139244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] client lang: <none>
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] server lang: <none>
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] kex follows: False
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] Compression: none
2026-02-12T01:27:36.471 [DEBUG] [Thread-139244] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:27:36.529 [DEBUG] [Thread-139244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:27:36.529 [DEBUG] [Thread-139244] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:27:36.530 [DEBUG] [Thread-139244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:27:36.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:27:36.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:27:36.585 [DEBUG] [Thread-139244] [transport.py] [_log()] userauth is OK
2026-02-12T01:27:36.585 [DEBUG] [Thread-139244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:27:36.586 [DEBUG] [Thread-139244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:27:36.586 [DEBUG] [Thread-139244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:27:36.586 [DEBUG] [Thread-139244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:27:36.604 [INFO] [Thread-139244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:27:36.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:27:36.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:27:37.426 [DEBUG] [Thread-139244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:27:37.426 [DEBUG] [Thread-139244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:27:37.474 [DEBUG] [Thread-139244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:27:37.475 [DEBUG] [Thread-139244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:27:37.484 [DEBUG] [Thread-139244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:27:37.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:27:37.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:27:37.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:27:37.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:27:37.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:27:37.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:27:37.520 [DEBUG] [Thread-139244] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:27:41.131 [DEBUG] [Thread-139246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:27:56.184 [DEBUG] [Thread-139247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:27:59.947 [DEBUG] [Thread-139248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:28:07.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:28:07.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:28:07.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:28:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 27, 33), 1.03, 93.4, 0.0, 20.43, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:28:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:27:33
2026-02-12T01:28:09.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:28:10.097 [DEBUG] [Thread-139249] [transport.py] [_log()] starting thread (client mode): 0xa2d9f460
2026-02-12T01:28:10.097 [DEBUG] [Thread-139249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:28:10.115 [DEBUG] [Thread-139249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:28:10.115 [INFO] [Thread-139249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] client lang: <none>
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] server lang: <none>
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] kex follows: False
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:28:10.119 [DEBUG] [Thread-139249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:28:10.120 [DEBUG] [Thread-139249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:28:10.120 [DEBUG] [Thread-139249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:28:10.120 [DEBUG] [Thread-139249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:28:10.120 [DEBUG] [Thread-139249] [transport.py] [_log()] Compression: none
2026-02-12T01:28:10.120 [DEBUG] [Thread-139249] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:28:10.138 [DEBUG] [Thread-139249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:28:10.139 [DEBUG] [Thread-139249] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:28:10.139 [DEBUG] [Thread-139249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:28:10.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:28:10.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:28:10.141 [DEBUG] [Thread-139249] [transport.py] [_log()] userauth is OK
2026-02-12T01:28:10.141 [DEBUG] [Thread-139249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:28:10.141 [DEBUG] [Thread-139249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:28:10.141 [DEBUG] [Thread-139249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:28:10.141 [DEBUG] [Thread-139249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:28:10.165 [INFO] [Thread-139249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:28:10.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:28:10.949 [DEBUG] [Thread-139249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:28:10.949 [DEBUG] [Thread-139249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:28:10.949 [DEBUG] [Thread-139249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:28:10.990 [DEBUG] [Thread-139249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:28:10.991 [DEBUG] [Thread-139249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:28:10.994 [DEBUG] [Thread-139249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:28:11.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:28:11.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:28:11.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:28:11.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:28:11.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:28:11.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:28:11.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:28:11.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:28:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:28:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.977217 -999.00  +12.70  12.33     92  +11.50 1 1 1 3 1     0    0 1.64 13.89 ZNESW 12.3 12.3 181.8 17.5 14.2 -16.6 14.0 -16.2 13.9 -16.0 14.2 -16.8
2026-02-12T01:28:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:28:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:28:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.977217
2026-02-12T01:28:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:28:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:28:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:28:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:28:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:28:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:27:33', tmtdew=1.03, humidity=93.4, cloud=0.0, wind=20.43, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:27:11.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.044749999999998735, 0.08675000000000033, 0.019750000000000156, 0.027499999999999858, 0.03500000000000014, 0.0652500000000007, 0.09399999999999942, 0.10925000000000118, 0.10899999999999999, 0.12199999999999989, 0.04224999999999923, 0.03999999999999915, 0.11099999999999888, 0.09224999999999994, 0.07899999999999885, 0.07399999999999984, 0.07075000000000031, 0.08000000000000007, 0.09549999999999947, 0.08474999999999966, 0.13699999999999868, 0.11274999999999835, 0.08575000000000088, 0.09774999999999956, 0.18399999999999928, 0.09750000000000014, 0.14475000000000016, 0.11599999999999966, 0.15000000000000036, 0.09100000000000108, 0.1545000000000023, 0.18850000000000122, 0.21274999999999977], zp_timestamp='2026-02-11T23:26:00')
2026-02-12T01:28:11.021 [DEBUG] [Thread-139249] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:28:11.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:28:11.117 [DEBUG] [Thread-139252] [transport.py] [_log()] starting thread (client mode): 0xa2d97c40
2026-02-12T01:28:11.117 [DEBUG] [Thread-139252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:28:11.134 [DEBUG] [Thread-139252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:28:11.134 [INFO] [Thread-139252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:28:11.142 [DEBUG] [Thread-139252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:28:11.142 [DEBUG] [Thread-139252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:28:11.143 [DEBUG] [Thread-139252] [transport.py] [_log()] client lang: <none>
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] server lang: <none>
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] kex follows: False
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:28:11.144 [DEBUG] [Thread-139252] [transport.py] [_log()] Compression: none
2026-02-12T01:28:11.145 [DEBUG] [Thread-139252] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:28:11.204 [DEBUG] [Thread-139252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:28:11.205 [DEBUG] [Thread-139252] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:28:11.206 [DEBUG] [Thread-139252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:28:11.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:28:11.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:28:11.219 [DEBUG] [Thread-139254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:28:11.260 [DEBUG] [Thread-139252] [transport.py] [_log()] userauth is OK
2026-02-12T01:28:11.260 [DEBUG] [Thread-139252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:28:11.260 [DEBUG] [Thread-139252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:28:11.260 [DEBUG] [Thread-139252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:28:11.261 [DEBUG] [Thread-139252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:28:11.283 [INFO] [Thread-139252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:28:11.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:28:11.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:28:12.149 [DEBUG] [Thread-139252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:28:12.150 [DEBUG] [Thread-139252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:28:12.197 [DEBUG] [Thread-139252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:28:12.197 [DEBUG] [Thread-139252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:28:12.207 [DEBUG] [Thread-139252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:28:12.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:28:12.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:28:12.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:28:12.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:28:12.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:28:12.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:28:12.244 [DEBUG] [Thread-139252] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:28:18.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:28:18.762 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:28:26.270 [DEBUG] [Thread-139255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:28:41.308 [DEBUG] [Thread-139256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:28:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:28:42.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:28:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:28:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 28, 8), 0.56, 96.21, 0.0, 17.2, 12.56, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:28:44.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:28:08
2026-02-12T01:28:44.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:28:44.930 [DEBUG] [Thread-139257] [transport.py] [_log()] starting thread (client mode): 0xa57d7ee0
2026-02-12T01:28:44.931 [DEBUG] [Thread-139257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:28:44.951 [DEBUG] [Thread-139257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:28:44.952 [INFO] [Thread-139257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:28:44.954 [DEBUG] [Thread-139257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:28:44.954 [DEBUG] [Thread-139257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:28:44.954 [DEBUG] [Thread-139257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] client lang: <none>
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] server lang: <none>
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] kex follows: False
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] Compression: none
2026-02-12T01:28:44.955 [DEBUG] [Thread-139257] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:28:44.972 [DEBUG] [Thread-139257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:28:44.973 [DEBUG] [Thread-139257] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:28:44.973 [DEBUG] [Thread-139257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:28:44.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:28:44.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:28:44.975 [DEBUG] [Thread-139257] [transport.py] [_log()] userauth is OK
2026-02-12T01:28:44.975 [DEBUG] [Thread-139257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:28:44.976 [DEBUG] [Thread-139257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:28:44.976 [DEBUG] [Thread-139257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:28:44.976 [DEBUG] [Thread-139257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:28:44.994 [INFO] [Thread-139257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:28:44.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:28:45.626 [DEBUG] [Thread-139257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:28:45.626 [DEBUG] [Thread-139257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:28:45.626 [DEBUG] [Thread-139257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:28:45.667 [DEBUG] [Thread-139257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:28:45.668 [DEBUG] [Thread-139257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:28:45.671 [DEBUG] [Thread-139257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:28:45.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:28:45.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:28:45.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:28:45.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:28:45.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:28:45.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:28:45.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:28:45.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:28:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:28:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.977911 -999.00  +12.70   8.27     92  +11.40 1 1 1 3 1     0    0 1.60 12.33 ZNESW 8.3 8.3 183.4 18.9 14.1 -17.2 13.9 -16.8 13.9 -15.9 14.2 -16.9
2026-02-12T01:28:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:28:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:28:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.977911
2026-02-12T01:28:45.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:28:45.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:28:45.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:28:45.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:28:45.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:28:45.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:28:08', tmtdew=0.56, humidity=96.21, cloud=0.0, wind=17.2, temperature=12.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:28:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.044749999999998735, 0.08675000000000033, 0.019750000000000156, 0.027499999999999858, 0.03500000000000014, 0.0652500000000007, 0.09399999999999942, 0.10925000000000118, 0.10899999999999999, 0.12199999999999989, 0.04224999999999923, 0.03999999999999915, 0.11099999999999888, 0.09224999999999994, 0.07899999999999885, 0.07399999999999984, 0.07075000000000031, 0.08000000000000007, 0.09549999999999947, 0.08474999999999966, 0.13699999999999868, 0.11274999999999835, 0.08575000000000088, 0.09774999999999956, 0.18399999999999928, 0.09750000000000014, 0.14475000000000016, 0.11599999999999966, 0.15000000000000036, 0.09100000000000108, 0.1545000000000023, 0.18850000000000122, 0.21274999999999977], zp_timestamp='2026-02-11T23:26:00')
2026-02-12T01:28:45.696 [DEBUG] [Thread-139257] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:28:45.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:28:45.785 [DEBUG] [Thread-139260] [transport.py] [_log()] starting thread (client mode): 0xa57d5de0
2026-02-12T01:28:45.785 [DEBUG] [Thread-139260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:28:45.803 [DEBUG] [Thread-139260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:28:45.803 [INFO] [Thread-139260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] client lang: <none>
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] server lang: <none>
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] kex follows: False
2026-02-12T01:28:45.811 [DEBUG] [Thread-139260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:28:45.812 [DEBUG] [Thread-139260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:28:45.812 [DEBUG] [Thread-139260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:28:45.812 [DEBUG] [Thread-139260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:28:45.812 [DEBUG] [Thread-139260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:28:45.812 [DEBUG] [Thread-139260] [transport.py] [_log()] Compression: none
2026-02-12T01:28:45.812 [DEBUG] [Thread-139260] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:28:45.868 [DEBUG] [Thread-139260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:28:45.869 [DEBUG] [Thread-139260] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:28:45.869 [DEBUG] [Thread-139260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:28:45.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:28:45.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:28:45.924 [DEBUG] [Thread-139260] [transport.py] [_log()] userauth is OK
2026-02-12T01:28:45.925 [DEBUG] [Thread-139260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:28:45.925 [DEBUG] [Thread-139260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:28:45.925 [DEBUG] [Thread-139260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:28:45.925 [DEBUG] [Thread-139260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:28:45.946 [INFO] [Thread-139260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:28:45.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:28:45.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:28:46.801 [DEBUG] [Thread-139260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:28:46.801 [DEBUG] [Thread-139260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:28:46.850 [DEBUG] [Thread-139260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:28:46.850 [DEBUG] [Thread-139260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:28:46.859 [DEBUG] [Thread-139260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:28:46.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:28:46.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:28:46.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:28:46.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:28:46.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:28:46.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:28:46.896 [DEBUG] [Thread-139260] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:28:56.345 [DEBUG] [Thread-139262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:29:00.019 [DEBUG] [Thread-139263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:29:11.396 [DEBUG] [Thread-139264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:29:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:29:16.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:29:16.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
2026-02-12T01:29:18.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 28, 44), 0.55, 96.26, 0.0, 18.19, 12.58, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:29:18.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:28:44
2026-02-12T01:29:18.965 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:29:18.966 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:29:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:29:19.238 [DEBUG] [Thread-139265] [transport.py] [_log()] starting thread (client mode): 0xa57d4550
2026-02-12T01:29:19.238 [DEBUG] [Thread-139265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:29:19.258 [DEBUG] [Thread-139265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:29:19.259 [INFO] [Thread-139265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] client lang: <none>
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] server lang: <none>
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] kex follows: False
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] Compression: none
2026-02-12T01:29:19.262 [DEBUG] [Thread-139265] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:29:19.279 [DEBUG] [Thread-139265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:29:19.280 [DEBUG] [Thread-139265] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:29:19.280 [DEBUG] [Thread-139265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:29:19.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:29:19.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:29:19.283 [DEBUG] [Thread-139265] [transport.py] [_log()] userauth is OK
2026-02-12T01:29:19.283 [DEBUG] [Thread-139265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:29:19.283 [DEBUG] [Thread-139265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:29:19.283 [DEBUG] [Thread-139265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:29:19.283 [DEBUG] [Thread-139265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:29:19.320 [INFO] [Thread-139265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:29:19.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:29:19.971 [DEBUG] [Thread-139265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:29:19.971 [DEBUG] [Thread-139265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:29:19.972 [DEBUG] [Thread-139265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:29:20.012 [DEBUG] [Thread-139265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:29:20.012 [DEBUG] [Thread-139265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:29:20.015 [DEBUG] [Thread-139265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:29:20.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:29:20.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:29:20.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:29:20.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:29:20.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:29:20.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:29:20.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:29:20.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:29:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:29:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.978258 -999.00  +12.70   9.66     92  +11.40 1 1 1 3 1     0    0 1.63 12.10 ZNESW 9.7 9.7 190.3 18.2 14.2 -17.2 14.0 -16.5 13.9 -15.8 14.2 -16.7
2026-02-12T01:29:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:29:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:29:20.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.978258
2026-02-12T01:29:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:29:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:29:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:29:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:29:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:29:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:28:44', tmtdew=0.55, humidity=96.26, cloud=0.0, wind=18.19, temperature=12.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:28:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.044749999999998735, 0.08675000000000033, 0.019750000000000156, 0.027499999999999858, 0.03500000000000014, 0.0652500000000007, 0.09399999999999942, 0.10925000000000118, 0.10899999999999999, 0.12199999999999989, 0.04224999999999923, 0.03999999999999915, 0.11099999999999888, 0.09224999999999994, 0.07899999999999885, 0.07399999999999984, 0.07075000000000031, 0.08000000000000007, 0.09549999999999947, 0.08474999999999966, 0.13699999999999868, 0.11274999999999835, 0.08575000000000088, 0.09774999999999956, 0.18399999999999928, 0.09750000000000014, 0.14475000000000016, 0.11599999999999966, 0.15000000000000036, 0.09100000000000108, 0.1545000000000023, 0.18850000000000122, 0.21274999999999977], zp_timestamp='2026-02-11T23:26:00')
2026-02-12T01:29:20.038 [DEBUG] [Thread-139265] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:29:20.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:29:20.139 [DEBUG] [Thread-139268] [transport.py] [_log()] starting thread (client mode): 0xa2d9cfd0
2026-02-12T01:29:20.139 [DEBUG] [Thread-139268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:29:20.155 [DEBUG] [Thread-139268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:29:20.156 [INFO] [Thread-139268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] client lang: <none>
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] server lang: <none>
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] kex follows: False
2026-02-12T01:29:20.165 [DEBUG] [Thread-139268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:29:20.166 [DEBUG] [Thread-139268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:29:20.166 [DEBUG] [Thread-139268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:29:20.166 [DEBUG] [Thread-139268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:29:20.166 [DEBUG] [Thread-139268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:29:20.166 [DEBUG] [Thread-139268] [transport.py] [_log()] Compression: none
2026-02-12T01:29:20.166 [DEBUG] [Thread-139268] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:29:20.225 [DEBUG] [Thread-139268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:29:20.225 [DEBUG] [Thread-139268] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:29:20.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:29:20.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:29:20.227 [DEBUG] [Thread-139268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:29:20.283 [DEBUG] [Thread-139268] [transport.py] [_log()] userauth is OK
2026-02-12T01:29:20.283 [DEBUG] [Thread-139268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:29:20.283 [DEBUG] [Thread-139268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:29:20.284 [DEBUG] [Thread-139268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:29:20.284 [DEBUG] [Thread-139268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:29:20.303 [INFO] [Thread-139268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:29:20.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:29:20.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:29:21.117 [DEBUG] [Thread-139268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:29:21.117 [DEBUG] [Thread-139268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:29:21.165 [DEBUG] [Thread-139268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:29:21.165 [DEBUG] [Thread-139268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:29:21.174 [DEBUG] [Thread-139268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:29:21.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:29:21.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:29: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') -> 00000000
2026-02-12T01:29:21.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:29:21.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:29:21.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:29:21.207 [DEBUG] [Thread-139268] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:29:26.429 [DEBUG] [Thread-139270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:29:41.477 [DEBUG] [Thread-139271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:29:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:29:51.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:29:51.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:29:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 29, 20), 0.56, 96.23, 0.0, 15.97, 12.6, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:29:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:29:20
2026-02-12T01:29:53.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:29:53.572 [DEBUG] [Thread-139272] [transport.py] [_log()] starting thread (client mode): 0xa57d6350
2026-02-12T01:29:53.572 [DEBUG] [Thread-139272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:29:53.592 [DEBUG] [Thread-139272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:29:53.592 [INFO] [Thread-139272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:29:53.595 [DEBUG] [Thread-139272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:29:53.595 [DEBUG] [Thread-139272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:29:53.595 [DEBUG] [Thread-139272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] client lang: <none>
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] server lang: <none>
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] kex follows: False
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] Compression: none
2026-02-12T01:29:53.596 [DEBUG] [Thread-139272] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:29:53.613 [DEBUG] [Thread-139272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:29:53.614 [DEBUG] [Thread-139272] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:29:53.615 [DEBUG] [Thread-139272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:29:53.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:29:53.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:29:53.617 [DEBUG] [Thread-139272] [transport.py] [_log()] userauth is OK
2026-02-12T01:29:53.617 [DEBUG] [Thread-139272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:29:53.617 [DEBUG] [Thread-139272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:29:53.617 [DEBUG] [Thread-139272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:29:53.617 [DEBUG] [Thread-139272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:29:53.642 [INFO] [Thread-139272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:29:53.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:29:54.280 [DEBUG] [Thread-139272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:29:54.280 [DEBUG] [Thread-139272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:29:54.281 [DEBUG] [Thread-139272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:29:54.321 [DEBUG] [Thread-139272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:29:54.322 [DEBUG] [Thread-139272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:29:54.325 [DEBUG] [Thread-139272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:29:54.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:29:54.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:29:54.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:29:54.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:29:54.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:29:54.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:29:54.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:29:54.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:29:54.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:29:54.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.978606 -999.00  +12.70  12.98     92  +11.40 1 1 1 3 1     0    0 1.57 11.84 ZNESW 13.0 13.0 190.8 15.2 14.2 -15.2 14.0 -14.1 13.9 -15.6 14.2 -16.0
2026-02-12T01:29:54.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:29:54.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:29:54.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.978606
2026-02-12T01:29:54.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:29:54.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:29:54.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:29:54.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:29:54.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:29:54.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:29:20', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=15.97, temperature=12.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:29:11.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.044749999999998735, 0.08675000000000033, 0.019750000000000156, 0.027499999999999858, 0.03500000000000014, 0.0652500000000007, 0.09399999999999942, 0.10925000000000118, 0.10899999999999999, 0.12199999999999989, 0.04224999999999923, 0.03999999999999915, 0.11099999999999888, 0.09224999999999994, 0.07899999999999885, 0.07399999999999984, 0.07075000000000031, 0.08000000000000007, 0.09549999999999947, 0.08474999999999966, 0.13699999999999868, 0.11274999999999835, 0.08575000000000088, 0.09774999999999956, 0.18399999999999928, 0.09750000000000014, 0.14475000000000016, 0.11599999999999966, 0.15000000000000036, 0.09100000000000108, 0.1545000000000023, 0.18850000000000122, 0.21274999999999977], zp_timestamp='2026-02-11T23:26:00')
2026-02-12T01:29:54.352 [DEBUG] [Thread-139272] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:29:54.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:29:54.463 [DEBUG] [Thread-139275] [transport.py] [_log()] starting thread (client mode): 0xa5742b60
2026-02-12T01:29:54.463 [DEBUG] [Thread-139275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:29:54.477 [DEBUG] [Thread-139275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:29:54.477 [INFO] [Thread-139275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] client lang: <none>
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] server lang: <none>
2026-02-12T01:29:54.484 [DEBUG] [Thread-139275] [transport.py] [_log()] kex follows: False
2026-02-12T01:29:54.485 [DEBUG] [Thread-139275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:29:54.485 [DEBUG] [Thread-139275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:29:54.485 [DEBUG] [Thread-139275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:29:54.485 [DEBUG] [Thread-139275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:29:54.485 [DEBUG] [Thread-139275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:29:54.485 [DEBUG] [Thread-139275] [transport.py] [_log()] Compression: none
2026-02-12T01:29:54.485 [DEBUG] [Thread-139275] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:29:54.544 [DEBUG] [Thread-139275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:29:54.544 [DEBUG] [Thread-139275] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:29:54.545 [DEBUG] [Thread-139275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:29:54.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:29:54.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:29:54.598 [DEBUG] [Thread-139275] [transport.py] [_log()] userauth is OK
2026-02-12T01:29:54.599 [DEBUG] [Thread-139275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:29:54.599 [DEBUG] [Thread-139275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:29:54.599 [DEBUG] [Thread-139275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:29:54.599 [DEBUG] [Thread-139275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:29:54.618 [INFO] [Thread-139275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:29:54.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:29:54.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:29:55.416 [DEBUG] [Thread-139275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:29:55.416 [DEBUG] [Thread-139275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:29:55.463 [DEBUG] [Thread-139275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:29:55.464 [DEBUG] [Thread-139275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:29:55.474 [DEBUG] [Thread-139275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:29:55.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:29:55.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')
2026-02-12T01:29:55.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:29:55.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:29:55.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:29:55.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:29:55.512 [DEBUG] [Thread-139275] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:29:56.514 [DEBUG] [Thread-139277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:30:00.080 [DEBUG] [Thread-139278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:30:11.566 [DEBUG] [Thread-139279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:30:19.167 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:30:19.168 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:30:25.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:30:25.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:30:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:30:26.602 [DEBUG] [Thread-139280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:30:27.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 29, 56), 0.55, 96.26, 0.0, 18.62, 12.56, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:30:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:29:56
2026-02-12T01:30:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:30:27.840 [DEBUG] [Thread-139281] [transport.py] [_log()] starting thread (client mode): 0xa2d9fa60
2026-02-12T01:30:27.840 [DEBUG] [Thread-139281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:30:27.861 [DEBUG] [Thread-139281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:30:27.862 [INFO] [Thread-139281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] client lang: <none>
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] server lang: <none>
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] kex follows: False
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:30:27.863 [DEBUG] [Thread-139281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:30:27.864 [DEBUG] [Thread-139281] [transport.py] [_log()] Compression: none
2026-02-12T01:30:27.864 [DEBUG] [Thread-139281] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:30:27.876 [DEBUG] [Thread-139281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:30:27.876 [DEBUG] [Thread-139281] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:30:27.877 [DEBUG] [Thread-139281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:30:27.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:30:27.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:30:27.878 [DEBUG] [Thread-139281] [transport.py] [_log()] userauth is OK
2026-02-12T01:30:27.878 [DEBUG] [Thread-139281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:30:27.878 [DEBUG] [Thread-139281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:30:27.878 [DEBUG] [Thread-139281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:30:27.878 [DEBUG] [Thread-139281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:30:27.891 [INFO] [Thread-139281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:30:27.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:30:28.499 [DEBUG] [Thread-139281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:30:28.499 [DEBUG] [Thread-139281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:30:28.499 [DEBUG] [Thread-139281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:30:28.540 [DEBUG] [Thread-139281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:30:28.541 [DEBUG] [Thread-139281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:30:28.544 [DEBUG] [Thread-139281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:30:28.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:30:28.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:30:28.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:30:28.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:30:28.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:30:28.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:30:28.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:30:28.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:30:28.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:30:28.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.978953 -999.00  +12.70  14.08     92  +11.40 1 1 1 3 1     0    0 1.58 12.30 ZNESW 14.1 14.1 195.2 19.0 14.1 -13.7 13.9 -14.5 13.9 -13.6 14.2 -13.9
2026-02-12T01:30:28.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:30:28.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:30:28.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.978953
2026-02-12T01:30:28.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:30:28.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:30:28.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:30:28.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:30:28.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:30:28.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:29:56', tmtdew=0.55, humidity=96.26, cloud=0.0, wind=18.62, temperature=12.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:29:41.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.044749999999998735, 0.08675000000000033, 0.019750000000000156, 0.027499999999999858, 0.03500000000000014, 0.0652500000000007, 0.09399999999999942, 0.10925000000000118, 0.10899999999999999, 0.12199999999999989, 0.04224999999999923, 0.03999999999999915, 0.11099999999999888, 0.09224999999999994, 0.07899999999999885, 0.07399999999999984, 0.07075000000000031, 0.08000000000000007, 0.09549999999999947, 0.08474999999999966, 0.13699999999999868, 0.11274999999999835, 0.08575000000000088, 0.09774999999999956, 0.18399999999999928, 0.09750000000000014, 0.14475000000000016, 0.11599999999999966, 0.15000000000000036, 0.09100000000000108, 0.1545000000000023, 0.18850000000000122, 0.21274999999999977], zp_timestamp='2026-02-11T23:26:00')
2026-02-12T01:30:28.570 [DEBUG] [Thread-139281] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:30:28.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:30:41.640 [DEBUG] [Thread-139284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:30:56.692 [DEBUG] [Thread-139285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:31:00.146 [DEBUG] [Thread-139286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:31:11.728 [DEBUG] [Thread-139287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:31:19.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:31:19.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:31:26.768 [DEBUG] [Thread-139288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:31:41.805 [DEBUG] [Thread-139289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:31:56.848 [DEBUG] [Thread-139290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:32:00.218 [DEBUG] [Thread-139291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:32:11.886 [DEBUG] [Thread-139292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:32:19.573 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:32:19.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:32:26.921 [DEBUG] [Thread-139293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:32:41.957 [DEBUG] [Thread-139294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:32:43.704 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T01:32:56.991 [DEBUG] [Thread-139295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:33:00.272 [DEBUG] [Thread-139296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:33:12.029 [DEBUG] [Thread-139297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:33:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:33:13.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:33:13.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
2026-02-12T01:33:15.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 32, 52), 0.56, 96.21, 0.0, 18.83, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:33:15.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:32:52
2026-02-12T01:33:16.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:33:16.163 [DEBUG] [Thread-139298] [transport.py] [_log()] starting thread (client mode): 0xa5741b40
2026-02-12T01:33:16.163 [DEBUG] [Thread-139298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:33:16.184 [DEBUG] [Thread-139298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:33:16.184 [INFO] [Thread-139298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] client lang: <none>
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] server lang: <none>
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] kex follows: False
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:33:16.187 [DEBUG] [Thread-139298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:33:16.188 [DEBUG] [Thread-139298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:33:16.188 [DEBUG] [Thread-139298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:33:16.188 [DEBUG] [Thread-139298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:33:16.188 [DEBUG] [Thread-139298] [transport.py] [_log()] Compression: none
2026-02-12T01:33:16.188 [DEBUG] [Thread-139298] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:33:16.208 [DEBUG] [Thread-139298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:33:16.208 [DEBUG] [Thread-139298] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:33:16.209 [DEBUG] [Thread-139298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:33:16.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:33:16.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:33:16.211 [DEBUG] [Thread-139298] [transport.py] [_log()] userauth is OK
2026-02-12T01:33:16.212 [DEBUG] [Thread-139298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:33:16.212 [DEBUG] [Thread-139298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:33:16.212 [DEBUG] [Thread-139298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:33:16.212 [DEBUG] [Thread-139298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:33:16.234 [INFO] [Thread-139298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:33:16.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:33:16.879 [DEBUG] [Thread-139298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:33:16.879 [DEBUG] [Thread-139298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:33:16.879 [DEBUG] [Thread-139298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:33:16.920 [DEBUG] [Thread-139298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:33:16.921 [DEBUG] [Thread-139298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:33:16.924 [DEBUG] [Thread-139298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:33:16.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:33:16.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:33:16.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:33:16.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:33:16.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:33:16.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:33:16.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:33:16.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:33:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:33:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.981036 -999.00  +12.70  10.79     92  +11.40 1 2 1 3 1     0    0 1.49 9.15 ZN.SW 10.8 10.8 190.0 14.2 14.1 -14.8 13.9 -15.2 13.8 -15.2 14.1 -15.6
2026-02-12T01:33:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:33:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:33:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.981036
2026-02-12T01:33:16.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:33:16.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:33:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:33:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:33:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:33:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:32:52', tmtdew=0.56, humidity=96.21, cloud=0.0, wind=18.83, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:32:41.510', atlas_cloud=2, atlas_rain=1, zp_data=[0.16924999999999812, 0.12025000000000041, -0.01574999999999882, 0.05349999999999966, 0.08450000000000024, 0.11325000000000074, 0.13450000000000095, 0.20825000000000138, 0.21149999999999913, 0.10650000000000048, 0.05025000000000013, 0.041999999999999815, 0.11250000000000071, 0.10024999999999906, 0.05249999999999844, 0.1095000000000006, 0.21924999999999883, 0.08549999999999969, 0.05699999999999861, 0.061249999999997584, 0.10699999999999932, 0.07774999999999821, 0.09575000000000067, 0.20175000000000054, 0.3764999999999983, 0.26149999999999984, 0.08474999999999966, 0.11750000000000149, 0.13000000000000078, 0.0710000000000015, 0.20450000000000124, 0.5500000000000007, 0.8192499999999985], zp_timestamp='2026-02-11T23:29:00')
2026-02-12T01:33:16.946 [DEBUG] [Thread-139298] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:33:17.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:33:17.047 [DEBUG] [Thread-139301] [transport.py] [_log()] starting thread (client mode): 0xa5743130
2026-02-12T01:33:17.047 [DEBUG] [Thread-139301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:33:17.062 [DEBUG] [Thread-139301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:33:17.062 [INFO] [Thread-139301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] client lang: <none>
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] server lang: <none>
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] kex follows: False
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:33:17.070 [DEBUG] [Thread-139301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:33:17.071 [DEBUG] [Thread-139301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:33:17.071 [DEBUG] [Thread-139301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:33:17.071 [DEBUG] [Thread-139301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:33:17.071 [DEBUG] [Thread-139301] [transport.py] [_log()] Compression: none
2026-02-12T01:33:17.071 [DEBUG] [Thread-139301] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:33:17.129 [DEBUG] [Thread-139301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:33:17.130 [DEBUG] [Thread-139301] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:33:17.130 [DEBUG] [Thread-139301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:33:17.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:33:17.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:33:17.185 [DEBUG] [Thread-139301] [transport.py] [_log()] userauth is OK
2026-02-12T01:33:17.185 [DEBUG] [Thread-139301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:33:17.186 [DEBUG] [Thread-139301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:33:17.186 [DEBUG] [Thread-139301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:33:17.186 [DEBUG] [Thread-139301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:33:17.204 [INFO] [Thread-139301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:33:17.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:33:17.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:33:18.030 [DEBUG] [Thread-139301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:33:18.030 [DEBUG] [Thread-139301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:33:18.078 [DEBUG] [Thread-139301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:33:18.079 [DEBUG] [Thread-139301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:33:18.088 [DEBUG] [Thread-139301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:33:18.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:33:18.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:33:18.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
2026-02-12T01:33:18.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:33:18.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:33:18.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:33:18.346 [DEBUG] [Thread-139301] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:33:19.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:33:19.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:33:27.069 [DEBUG] [Thread-139303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:33:42.130 [DEBUG] [Thread-139304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:33:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:33:48.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:33:48.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:33:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 33, 27), 0.56, 96.21, 0.0, 18.95, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:33:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:33:27
2026-02-12T01:33:50.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:33:50.706 [DEBUG] [Thread-139305] [transport.py] [_log()] starting thread (client mode): 0xa57404f0
2026-02-12T01:33:50.706 [DEBUG] [Thread-139305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:33:50.726 [DEBUG] [Thread-139305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:33:50.727 [INFO] [Thread-139305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:33:50.730 [DEBUG] [Thread-139305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:33:50.730 [DEBUG] [Thread-139305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:33:50.730 [DEBUG] [Thread-139305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:33:50.730 [DEBUG] [Thread-139305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:50.730 [DEBUG] [Thread-139305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:50.730 [DEBUG] [Thread-139305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:50.730 [DEBUG] [Thread-139305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] client lang: <none>
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] server lang: <none>
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] kex follows: False
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] Compression: none
2026-02-12T01:33:50.731 [DEBUG] [Thread-139305] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:33:50.748 [DEBUG] [Thread-139305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:33:50.749 [DEBUG] [Thread-139305] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:33:50.749 [DEBUG] [Thread-139305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:33:50.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:33:50.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:33:50.751 [DEBUG] [Thread-139305] [transport.py] [_log()] userauth is OK
2026-02-12T01:33:50.751 [DEBUG] [Thread-139305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:33:50.751 [DEBUG] [Thread-139305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:33:50.752 [DEBUG] [Thread-139305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:33:50.752 [DEBUG] [Thread-139305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:33:50.773 [INFO] [Thread-139305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:33:50.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:33:51.390 [DEBUG] [Thread-139305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:33:51.391 [DEBUG] [Thread-139305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:33:51.391 [DEBUG] [Thread-139305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:33:51.431 [DEBUG] [Thread-139305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:33:51.432 [DEBUG] [Thread-139305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:33:51.435 [DEBUG] [Thread-139305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:33:51.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:33:51.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:33:51.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:33:51.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:33:51.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:33:51.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:33:51.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:33:51.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:33:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:33:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.981383 -999.00  +12.70   9.30     92  +11.40 1 1 1 3 1     0    0 1.51 9.52 ZNESW 9.3 9.3 190.6 19.7 14.1 -14.0 13.9 -14.3 13.8 -14.6 14.1 -14.9
2026-02-12T01:33:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:33:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:33:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.981383
2026-02-12T01:33:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:33:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:33:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:33:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:33:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-12T01:33:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:33:27', tmtdew=0.56, humidity=96.21, cloud=0.0, wind=18.95, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:33:11.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.16924999999999812, 0.12025000000000041, -0.01574999999999882, 0.05349999999999966, 0.08450000000000024, 0.11325000000000074, 0.13450000000000095, 0.20825000000000138, 0.21149999999999913, 0.10650000000000048, 0.05025000000000013, 0.041999999999999815, 0.11250000000000071, 0.10024999999999906, 0.05249999999999844, 0.1095000000000006, 0.21924999999999883, 0.08549999999999969, 0.05699999999999861, 0.061249999999997584, 0.10699999999999932, 0.07774999999999821, 0.09575000000000067, 0.20175000000000054, 0.3764999999999983, 0.26149999999999984, 0.08474999999999966, 0.11750000000000149, 0.13000000000000078, 0.0710000000000015, 0.20450000000000124, 0.5500000000000007, 0.8192499999999985], zp_timestamp='2026-02-11T23:32:00')
2026-02-12T01:33:51.462 [DEBUG] [Thread-139305] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:33:51.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:33:51.569 [DEBUG] [Thread-139308] [transport.py] [_log()] starting thread (client mode): 0xa57d70d0
2026-02-12T01:33:51.569 [DEBUG] [Thread-139308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:33:51.584 [DEBUG] [Thread-139308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:33:51.584 [INFO] [Thread-139308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:33:51.591 [DEBUG] [Thread-139308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:33:51.591 [DEBUG] [Thread-139308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:33:51.591 [DEBUG] [Thread-139308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:33:51.591 [DEBUG] [Thread-139308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] client lang: <none>
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] server lang: <none>
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] kex follows: False
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] Compression: none
2026-02-12T01:33:51.592 [DEBUG] [Thread-139308] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:33:51.649 [DEBUG] [Thread-139308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:33:51.649 [DEBUG] [Thread-139308] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:33:51.650 [DEBUG] [Thread-139308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:33:51.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:33:51.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:33:51.705 [DEBUG] [Thread-139308] [transport.py] [_log()] userauth is OK
2026-02-12T01:33:51.705 [DEBUG] [Thread-139308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:33:51.705 [DEBUG] [Thread-139308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:33:51.705 [DEBUG] [Thread-139308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:33:51.705 [DEBUG] [Thread-139308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:33:51.726 [INFO] [Thread-139308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:33:51.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:33:51.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:33:52.565 [DEBUG] [Thread-139308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:33:52.566 [DEBUG] [Thread-139308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:33:52.613 [DEBUG] [Thread-139308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:33:52.613 [DEBUG] [Thread-139308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:33:52.622 [DEBUG] [Thread-139308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:33:52.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:33:52.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')
2026-02-12T01:33:52.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:33:52.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:33:52.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:33:52.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:33:52.659 [DEBUG] [Thread-139308] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:33:57.164 [DEBUG] [Thread-139310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:00.350 [DEBUG] [Thread-139311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:12.217 [DEBUG] [Thread-139312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:19.979 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:19.980 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:34:22.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:34:22.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
2026-02-12T01:34:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 34, 3), 0.56, 96.23, 0.0, 19.57, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:34:24.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:34:03
2026-02-12T01:34:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:34:25.296 [DEBUG] [Thread-139313] [transport.py] [_log()] starting thread (client mode): 0x9eb06a40
2026-02-12T01:34:25.296 [DEBUG] [Thread-139313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:34:25.315 [DEBUG] [Thread-139313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:34:25.315 [INFO] [Thread-139313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:34:25.318 [DEBUG] [Thread-139313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] client lang: <none>
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] server lang: <none>
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] kex follows: False
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] Compression: none
2026-02-12T01:34:25.319 [DEBUG] [Thread-139313] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:34:25.334 [DEBUG] [Thread-139313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:34:25.335 [DEBUG] [Thread-139313] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:34:25.336 [DEBUG] [Thread-139313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:34:25.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:34:25.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:34:25.338 [DEBUG] [Thread-139313] [transport.py] [_log()] userauth is OK
2026-02-12T01:34:25.338 [DEBUG] [Thread-139313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:34:25.338 [DEBUG] [Thread-139313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:34:25.338 [DEBUG] [Thread-139313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:34:25.338 [DEBUG] [Thread-139313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:34:25.362 [INFO] [Thread-139313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:34:25.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:34:25.956 [DEBUG] [Thread-139313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:34:25.956 [DEBUG] [Thread-139313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:34:25.957 [DEBUG] [Thread-139313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:34:25.997 [DEBUG] [Thread-139313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:34:25.997 [DEBUG] [Thread-139313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:34:26.001 [DEBUG] [Thread-139313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:34:26.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:34:26.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:34:26.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:34:26.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:34:26.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:34:26.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:34:26.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:34:26.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:34:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:34:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.982078 -999.00  +12.70  16.99     92  +11.40 1 2 1 3 1     0    0 1.47 7.80 ZneSW 17.0 17.0 188.4 18.2 14.1 -13.2 14.0 -13.2 13.8 -13.0 14.1 -13.5
2026-02-12T01:34:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:34:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:34:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.982078
2026-02-12T01:34:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:34:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:34:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:34:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:34:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:34:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:34:03', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=19.57, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:34:11.539', atlas_cloud=2, atlas_rain=1, zp_data=[0.16924999999999812, 0.12025000000000041, -0.01574999999999882, 0.05349999999999966, 0.08450000000000024, 0.11325000000000074, 0.13450000000000095, 0.20825000000000138, 0.21149999999999913, 0.10650000000000048, 0.05025000000000013, 0.041999999999999815, 0.11250000000000071, 0.10024999999999906, 0.05249999999999844, 0.1095000000000006, 0.21924999999999883, 0.08549999999999969, 0.05699999999999861, 0.061249999999997584, 0.10699999999999932, 0.07774999999999821, 0.09575000000000067, 0.20175000000000054, 0.3764999999999983, 0.26149999999999984, 0.08474999999999966, 0.11750000000000149, 0.13000000000000078, 0.0710000000000015, 0.20450000000000124, 0.5500000000000007, 0.8192499999999985], zp_timestamp='2026-02-11T23:32:00')
2026-02-12T01:34:26.028 [DEBUG] [Thread-139313] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:34:26.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:34:26.123 [DEBUG] [Thread-139316] [transport.py] [_log()] starting thread (client mode): 0x9eb04370
2026-02-12T01:34:26.124 [DEBUG] [Thread-139316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:34:26.139 [DEBUG] [Thread-139316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:34:26.139 [INFO] [Thread-139316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:34:26.146 [DEBUG] [Thread-139316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:34:26.147 [DEBUG] [Thread-139316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:34:26.148 [DEBUG] [Thread-139316] [transport.py] [_log()] client lang: <none>
2026-02-12T01:34:26.148 [DEBUG] [Thread-139316] [transport.py] [_log()] server lang: <none>
2026-02-12T01:34:26.148 [DEBUG] [Thread-139316] [transport.py] [_log()] kex follows: False
2026-02-12T01:34:26.148 [DEBUG] [Thread-139316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:34:26.148 [DEBUG] [Thread-139316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:34:26.148 [DEBUG] [Thread-139316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:34:26.149 [DEBUG] [Thread-139316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:34:26.149 [DEBUG] [Thread-139316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:34:26.149 [DEBUG] [Thread-139316] [transport.py] [_log()] Compression: none
2026-02-12T01:34:26.149 [DEBUG] [Thread-139316] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:34:26.207 [DEBUG] [Thread-139316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:34:26.208 [DEBUG] [Thread-139316] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:34:26.208 [DEBUG] [Thread-139316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:34:26.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:34:26.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:34:26.264 [DEBUG] [Thread-139316] [transport.py] [_log()] userauth is OK
2026-02-12T01:34:26.264 [DEBUG] [Thread-139316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:34:26.264 [DEBUG] [Thread-139316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:34:26.264 [DEBUG] [Thread-139316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:34:26.265 [DEBUG] [Thread-139316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:34:26.284 [INFO] [Thread-139316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:34:26.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:34:26.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:34:27.110 [DEBUG] [Thread-139316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:34:27.110 [DEBUG] [Thread-139316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:34:27.254 [DEBUG] [Thread-139318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:27.549 [DEBUG] [Thread-139316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:34:27.549 [DEBUG] [Thread-139316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:34:27.559 [DEBUG] [Thread-139316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:34:27.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:34:27.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:34:27.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
2026-02-12T01:34:27.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:34:27.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:34:27.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:34:27.595 [DEBUG] [Thread-139316] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:34:42.306 [DEBUG] [Thread-139319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:57.341 [DEBUG] [Thread-139320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:34:57.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:34:57.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:34:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:34:59.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 34, 39), 1.03, 93.4, 0.0, 18.67, 12.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:34:59.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:34:39
2026-02-12T01:34:59.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:35:00.131 [DEBUG] [Thread-139321] [transport.py] [_log()] starting thread (client mode): 0x9eb047f0
2026-02-12T01:35:00.132 [DEBUG] [Thread-139321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:35:00.151 [DEBUG] [Thread-139321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:35:00.151 [INFO] [Thread-139321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:35:00.154 [DEBUG] [Thread-139321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] client lang: <none>
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] server lang: <none>
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] kex follows: False
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] Compression: none
2026-02-12T01:35:00.155 [DEBUG] [Thread-139321] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:35:00.170 [DEBUG] [Thread-139321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:35:00.171 [DEBUG] [Thread-139321] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:35:00.171 [DEBUG] [Thread-139321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:35:00.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:35:00.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:35:00.173 [DEBUG] [Thread-139321] [transport.py] [_log()] userauth is OK
2026-02-12T01:35:00.173 [DEBUG] [Thread-139321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:35:00.173 [DEBUG] [Thread-139321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:35:00.174 [DEBUG] [Thread-139321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:35:00.174 [DEBUG] [Thread-139321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:35:00.188 [INFO] [Thread-139321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:35:00.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:35:00.429 [DEBUG] [Thread-139323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:35:00.816 [DEBUG] [Thread-139321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:35:00.816 [DEBUG] [Thread-139321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:35:00.817 [DEBUG] [Thread-139321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:35:00.857 [DEBUG] [Thread-139321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:35:00.857 [DEBUG] [Thread-139321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:35:00.860 [DEBUG] [Thread-139321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:35:00.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:35:00.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:35:00.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:35:00.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:35:00.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:35:00.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:35:00.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:35:00.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:35:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:35:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.982425 -999.00  +12.70  10.32     92  +11.40 1 2 1 3 1     0    0 1.50 7.56 ZneSW 10.3 10.3 190.6 19.7 14.1 -12.9 13.9 -12.8 13.7 -13.3 14.1 -13.9
2026-02-12T01:35:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:35:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:35:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.982425
2026-02-12T01:35:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:35:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:35:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:35:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:35:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:35:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:34:39', tmtdew=1.03, humidity=93.4, cloud=0.0, wind=18.67, temperature=12.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:34:41.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.16924999999999812, 0.12025000000000041, -0.01574999999999882, 0.05349999999999966, 0.08450000000000024, 0.11325000000000074, 0.13450000000000095, 0.20825000000000138, 0.21149999999999913, 0.10650000000000048, 0.05025000000000013, 0.041999999999999815, 0.11250000000000071, 0.10024999999999906, 0.05249999999999844, 0.1095000000000006, 0.21924999999999883, 0.08549999999999969, 0.05699999999999861, 0.061249999999997584, 0.10699999999999932, 0.07774999999999821, 0.09575000000000067, 0.20175000000000054, 0.3764999999999983, 0.26149999999999984, 0.08474999999999966, 0.11750000000000149, 0.13000000000000078, 0.0710000000000015, 0.20450000000000124, 0.5500000000000007, 0.8192499999999985], zp_timestamp='2026-02-11T23:32:00')
2026-02-12T01:35:00.884 [DEBUG] [Thread-139321] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:35:00.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:35:00.977 [DEBUG] [Thread-139325] [transport.py] [_log()] starting thread (client mode): 0x9eb06650
2026-02-12T01:35:00.978 [DEBUG] [Thread-139325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:35:00.992 [DEBUG] [Thread-139325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:35:00.992 [INFO] [Thread-139325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:35:01.000 [DEBUG] [Thread-139325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] client lang: <none>
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] server lang: <none>
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] kex follows: False
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] Compression: none
2026-02-12T01:35:01.001 [DEBUG] [Thread-139325] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:35:01.060 [DEBUG] [Thread-139325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:35:01.060 [DEBUG] [Thread-139325] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:35:01.061 [DEBUG] [Thread-139325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:35:01.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:35:01.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:35:01.116 [DEBUG] [Thread-139325] [transport.py] [_log()] userauth is OK
2026-02-12T01:35:01.116 [DEBUG] [Thread-139325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:35:01.116 [DEBUG] [Thread-139325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:35:01.117 [DEBUG] [Thread-139325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:35:01.117 [DEBUG] [Thread-139325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:35:01.140 [INFO] [Thread-139325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:35:01.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:35:01.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:35:01.965 [DEBUG] [Thread-139325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:35:01.965 [DEBUG] [Thread-139325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:35:02.012 [DEBUG] [Thread-139325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:35:02.012 [DEBUG] [Thread-139325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:35:02.020 [DEBUG] [Thread-139325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:35:02.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:35:02.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:35:02.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:35:02.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:35:02.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:35:02.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:35:02.052 [DEBUG] [Thread-139325] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:35:12.380 [DEBUG] [Thread-139327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:35:20.181 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:35:20.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:35:27.434 [DEBUG] [Thread-139328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:35:32.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:35:32.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:35:32.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:35:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 35, 14), 0.56, 96.25, 0.0, 18.02, 12.56, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:35:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:35:14
2026-02-12T01:35:34.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:35:34.514 [DEBUG] [Thread-139329] [transport.py] [_log()] starting thread (client mode): 0xa57413c0
2026-02-12T01:35:34.514 [DEBUG] [Thread-139329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:35:34.533 [DEBUG] [Thread-139329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:35:34.534 [INFO] [Thread-139329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:35:34.537 [DEBUG] [Thread-139329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:35:34.537 [DEBUG] [Thread-139329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:35:34.537 [DEBUG] [Thread-139329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:35:34.537 [DEBUG] [Thread-139329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:34.537 [DEBUG] [Thread-139329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:34.537 [DEBUG] [Thread-139329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] client lang: <none>
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] server lang: <none>
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] kex follows: False
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] Compression: none
2026-02-12T01:35:34.538 [DEBUG] [Thread-139329] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:35:34.554 [DEBUG] [Thread-139329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:35:34.555 [DEBUG] [Thread-139329] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:35:34.555 [DEBUG] [Thread-139329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:35:34.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:35:34.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:35:34.558 [DEBUG] [Thread-139329] [transport.py] [_log()] userauth is OK
2026-02-12T01:35:34.558 [DEBUG] [Thread-139329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:35:34.558 [DEBUG] [Thread-139329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:35:34.558 [DEBUG] [Thread-139329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:35:34.558 [DEBUG] [Thread-139329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:35:34.596 [INFO] [Thread-139329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:35:34.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:35:35.223 [DEBUG] [Thread-139329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:35:35.224 [DEBUG] [Thread-139329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:35:35.224 [DEBUG] [Thread-139329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:35:35.266 [DEBUG] [Thread-139329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:35:35.266 [DEBUG] [Thread-139329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:35:35.269 [DEBUG] [Thread-139329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:35:35.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:35:35.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:35:35.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:35:35.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:35:35.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:35:35.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:35:35.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:35:35.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:35:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:35:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.982772 -999.00  +12.70  13.68     92  +11.40 1 2 1 3 1     0    0 1.47 7.42 zNeSW 13.7 13.7 189.6 18.5 14.1 -10.4 13.9 -10.1 13.8 -12.2 14.1 -12.2
2026-02-12T01:35:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:35:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:35:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.982772
2026-02-12T01:35:35.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:35:35.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:35:35.296 [DEBUG] [Thread-139329] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:35:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:35:35.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:35:35.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-12T01:35:35.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:35:14', tmtdew=0.56, humidity=96.25, cloud=0.0, wind=18.02, temperature=12.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:35:11.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.16924999999999812, 0.12025000000000041, -0.01574999999999882, 0.05349999999999966, 0.08450000000000024, 0.11325000000000074, 0.13450000000000095, 0.20825000000000138, 0.21149999999999913, 0.10650000000000048, 0.05025000000000013, 0.041999999999999815, 0.11250000000000071, 0.10024999999999906, 0.05249999999999844, 0.1095000000000006, 0.21924999999999883, 0.08549999999999969, 0.05699999999999861, 0.061249999999997584, 0.10699999999999932, 0.07774999999999821, 0.09575000000000067, 0.20175000000000054, 0.3764999999999983, 0.26149999999999984, 0.08474999999999966, 0.11750000000000149, 0.13000000000000078, 0.0710000000000015, 0.20450000000000124, 0.5500000000000007, 0.8192499999999985], zp_timestamp='2026-02-11T23:32:00')
2026-02-12T01:35:35.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:35:35.391 [DEBUG] [Thread-139332] [transport.py] [_log()] starting thread (client mode): 0xa5743eb0
2026-02-12T01:35:35.392 [DEBUG] [Thread-139332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:35:35.406 [DEBUG] [Thread-139332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:35:35.406 [INFO] [Thread-139332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] client lang: <none>
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] server lang: <none>
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] kex follows: False
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:35:35.414 [DEBUG] [Thread-139332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:35:35.415 [DEBUG] [Thread-139332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:35:35.415 [DEBUG] [Thread-139332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:35:35.415 [DEBUG] [Thread-139332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:35:35.415 [DEBUG] [Thread-139332] [transport.py] [_log()] Compression: none
2026-02-12T01:35:35.415 [DEBUG] [Thread-139332] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:35:35.471 [DEBUG] [Thread-139332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:35:35.472 [DEBUG] [Thread-139332] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:35:35.473 [DEBUG] [Thread-139332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:35:35.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:35:35.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:35:35.531 [DEBUG] [Thread-139332] [transport.py] [_log()] userauth is OK
2026-02-12T01:35:35.532 [DEBUG] [Thread-139332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:35:35.532 [DEBUG] [Thread-139332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:35:35.532 [DEBUG] [Thread-139332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:35:35.532 [DEBUG] [Thread-139332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:35:35.554 [INFO] [Thread-139332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:35:35.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:35:35.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:35:36.392 [DEBUG] [Thread-139332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:35:36.393 [DEBUG] [Thread-139332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:35:36.440 [DEBUG] [Thread-139332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:35:36.441 [DEBUG] [Thread-139332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:35:36.450 [DEBUG] [Thread-139332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:35:36.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:35:36.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:35:36.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:35:36.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:35:36.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:35:36.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:35:36.484 [DEBUG] [Thread-139332] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:35:42.476 [DEBUG] [Thread-139334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:35:57.523 [DEBUG] [Thread-139335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:36:00.502 [DEBUG] [Thread-139336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:36:06.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:36:06.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:36:06.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:36:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 35, 49), 0.56, 96.25, 0.0, 16.75, 12.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:36:08.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:35:49
2026-02-12T01:36:09.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:36:09.420 [DEBUG] [Thread-139337] [transport.py] [_log()] starting thread (client mode): 0xa2d9fa60
2026-02-12T01:36:09.420 [DEBUG] [Thread-139337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:36:09.440 [DEBUG] [Thread-139337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:36:09.440 [INFO] [Thread-139337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] client lang: <none>
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] server lang: <none>
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] kex follows: False
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] Compression: none
2026-02-12T01:36:09.444 [DEBUG] [Thread-139337] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:36:09.461 [DEBUG] [Thread-139337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:36:09.462 [DEBUG] [Thread-139337] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:36:09.463 [DEBUG] [Thread-139337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:36:09.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:36:09.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:36:09.464 [DEBUG] [Thread-139337] [transport.py] [_log()] userauth is OK
2026-02-12T01:36:09.465 [DEBUG] [Thread-139337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:36:09.465 [DEBUG] [Thread-139337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:36:09.465 [DEBUG] [Thread-139337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:36:09.465 [DEBUG] [Thread-139337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:36:09.489 [INFO] [Thread-139337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:36:09.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:36:10.096 [DEBUG] [Thread-139337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:36:10.096 [DEBUG] [Thread-139337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:36:10.096 [DEBUG] [Thread-139337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:36:10.137 [DEBUG] [Thread-139337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:36:10.138 [DEBUG] [Thread-139337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:36:10.141 [DEBUG] [Thread-139337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:36:10.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:36:10.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:36:10.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:36:10.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:36:10.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:36:10.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:36:10.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:36:10.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:36:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:36:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.983119 -999.00  +12.60  13.54     92  +11.40 1 3 1 3 1     0    0 1.45 6.69 ZN.SW 13.5 13.5 174.6 17.0 14.1 -8.2 13.9 -7.9 13.8 -10.3 14.1 -9.8
2026-02-12T01:36:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:36:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:36:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.983119
2026-02-12T01:36:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:36:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:36:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:36:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:36:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:36:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:35:49', tmtdew=0.56, humidity=96.25, cloud=0.0, wind=16.75, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:35:41.482', atlas_cloud=3, atlas_rain=1, zp_data=[0.16924999999999812, 0.12025000000000041, -0.01574999999999882, 0.05349999999999966, 0.08450000000000024, 0.11325000000000074, 0.13450000000000095, 0.20825000000000138, 0.21149999999999913, 0.10650000000000048, 0.05025000000000013, 0.041999999999999815, 0.11250000000000071, 0.10024999999999906, 0.05249999999999844, 0.1095000000000006, 0.21924999999999883, 0.08549999999999969, 0.05699999999999861, 0.061249999999997584, 0.10699999999999932, 0.07774999999999821, 0.09575000000000067, 0.20175000000000054, 0.3764999999999983, 0.26149999999999984, 0.08474999999999966, 0.11750000000000149, 0.13000000000000078, 0.0710000000000015, 0.20450000000000124, 0.5500000000000007, 0.8192499999999985], zp_timestamp='2026-02-11T23:32:00')
2026-02-12T01:36:10.168 [DEBUG] [Thread-139337] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:36:10.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:36:10.263 [DEBUG] [Thread-139340] [transport.py] [_log()] starting thread (client mode): 0x9eb04c40
2026-02-12T01:36:10.263 [DEBUG] [Thread-139340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:36:10.278 [DEBUG] [Thread-139340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:36:10.278 [INFO] [Thread-139340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:36:10.285 [DEBUG] [Thread-139340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] client lang: <none>
2026-02-12T01:36:10.286 [DEBUG] [Thread-139340] [transport.py] [_log()] server lang: <none>
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] kex follows: False
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] Compression: none
2026-02-12T01:36:10.287 [DEBUG] [Thread-139340] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:36:10.343 [DEBUG] [Thread-139340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:36:10.343 [DEBUG] [Thread-139340] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:36:10.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:36:10.344 [DEBUG] [Thread-139340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:36:10.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:36:10.400 [DEBUG] [Thread-139340] [transport.py] [_log()] userauth is OK
2026-02-12T01:36:10.400 [DEBUG] [Thread-139340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:36:10.400 [DEBUG] [Thread-139340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:36:10.400 [DEBUG] [Thread-139340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:36:10.400 [DEBUG] [Thread-139340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:36:10.424 [INFO] [Thread-139340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:36:10.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:36:10.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:36:11.239 [DEBUG] [Thread-139340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:36:11.240 [DEBUG] [Thread-139340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:36:11.288 [DEBUG] [Thread-139340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:36:11.289 [DEBUG] [Thread-139340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:36:11.298 [DEBUG] [Thread-139340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:36:11.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:36:11.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:36:11.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:36:11.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:36:11.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:36:11.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:36:11.334 [DEBUG] [Thread-139340] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:36:12.561 [DEBUG] [Thread-139342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:36:20.385 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:36:20.386 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:36:27.614 [DEBUG] [Thread-139343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:36:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:36:41.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:36:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:36:42.650 [DEBUG] [Thread-139344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:36:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 36, 26), 0.56, 96.25, 0.0, 16.9, 12.51, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:36:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:36:26
2026-02-12T01:36:43.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:36:43.981 [DEBUG] [Thread-139345] [transport.py] [_log()] starting thread (client mode): 0xa2d9e200
2026-02-12T01:36:43.981 [DEBUG] [Thread-139345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:36:44.000 [DEBUG] [Thread-139345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:36:44.000 [INFO] [Thread-139345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] client lang: <none>
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] server lang: <none>
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] kex follows: False
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:36:44.003 [DEBUG] [Thread-139345] [transport.py] [_log()] Compression: none
2026-02-12T01:36:44.004 [DEBUG] [Thread-139345] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:36:44.020 [DEBUG] [Thread-139345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:36:44.020 [DEBUG] [Thread-139345] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:36:44.020 [DEBUG] [Thread-139345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:36:44.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:36:44.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:36:44.022 [DEBUG] [Thread-139345] [transport.py] [_log()] userauth is OK
2026-02-12T01:36:44.022 [DEBUG] [Thread-139345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:36:44.023 [DEBUG] [Thread-139345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:36:44.023 [DEBUG] [Thread-139345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:36:44.023 [DEBUG] [Thread-139345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:36:44.038 [INFO] [Thread-139345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:36:44.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:36:44.678 [DEBUG] [Thread-139345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:36:44.679 [DEBUG] [Thread-139345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:36:44.679 [DEBUG] [Thread-139345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:36:44.719 [DEBUG] [Thread-139345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:36:44.720 [DEBUG] [Thread-139345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:36:44.723 [DEBUG] [Thread-139345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:36:44.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:36:44.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:36:44.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:36:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:36:44.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:36:44.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:36:44.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:36:44.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:36:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:36:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.983466 -999.00  +12.70   9.20     92  +11.40 1 3 1 3 1     0    0 1.42 6.18 ZN.SW 9.2 9.2 197.2 14.9 14.2 -5.9 13.9 -6.2 13.8 -7.9 14.1 -7.6
2026-02-12T01:36:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:36:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:36:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.983466
2026-02-12T01:36:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:36:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:36:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:36:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:36:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:36:44.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:36:26', tmtdew=0.56, humidity=96.25, cloud=0.0, wind=16.9, temperature=12.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-11T01:41:59', seeing=1.5, atlas_timestamp='2026-02-11T23:36:11.462', atlas_cloud=3, atlas_rain=1, zp_data=[1.42075, 1.4842500000000003, 0.7317500000000008, 0.9084999999999992, 0.8025000000000002, 0.9162500000000007, 1.4529999999999994, 2.0672500000000005, 1.892999999999999, 1.508, 1.13225, 0.6100000000000003, 0.47499999999999964, 0.4687499999999982, 0.9089999999999989, 2.2684999999999995, 2.1637499999999994, 1.2275, 0.7859999999999996, 0.40174999999999983, 0.28999999999999915, 0.2657499999999988, 0.5767500000000005, 2.7582500000000003, nan, 0.4195000000000002, 0.35774999999999935, 0.20599999999999952, 0.28300000000000036, 0.1800000000000015, 0.4800000000000004, 1.4280000000000008, nan], zp_timestamp='2026-02-11T23:35:00')
2026-02-12T01:36:44.750 [DEBUG] [Thread-139345] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:36:44.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:36:57.687 [DEBUG] [Thread-139348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:37:00.576 [DEBUG] [Thread-139349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:37:12.741 [DEBUG] [Thread-139350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:37:20.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:37:20.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:37:27.778 [DEBUG] [Thread-139351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:37:42.820 [DEBUG] [Thread-139352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:37:57.858 [DEBUG] [Thread-139353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:38:00.632 [DEBUG] [Thread-139354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:38:12.892 [DEBUG] [Thread-139355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:38:20.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:38:20.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:38:27.927 [DEBUG] [Thread-139356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:38:42.955 [DEBUG] [Thread-139357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:38:56.439 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T01:38:57.982 [DEBUG] [Thread-139358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:39:00.684 [DEBUG] [Thread-139359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:39:13.008 [DEBUG] [Thread-139360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:39:20.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:39:20.997 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:39:26.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:39:26.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:39:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:39:28.032 [DEBUG] [Thread-139361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:39:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 38, 48), 0.55, 96.28, 0.0, 17.42, 12.58, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:39:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:38:48
2026-02-12T01:39:29.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:39:29.326 [DEBUG] [Thread-139362] [transport.py] [_log()] starting thread (client mode): 0xa2d9c7f0
2026-02-12T01:39:29.326 [DEBUG] [Thread-139362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:39:29.346 [DEBUG] [Thread-139362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:39:29.346 [INFO] [Thread-139362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] client lang: <none>
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] server lang: <none>
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] kex follows: False
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:39:29.349 [DEBUG] [Thread-139362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:39:29.350 [DEBUG] [Thread-139362] [transport.py] [_log()] Compression: none
2026-02-12T01:39:29.350 [DEBUG] [Thread-139362] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:39:29.369 [DEBUG] [Thread-139362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:39:29.369 [DEBUG] [Thread-139362] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:39:29.369 [DEBUG] [Thread-139362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:39:29.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:39:29.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:39:29.370 [DEBUG] [Thread-139362] [transport.py] [_log()] userauth is OK
2026-02-12T01:39:29.370 [DEBUG] [Thread-139362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:39:29.370 [DEBUG] [Thread-139362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:39:29.370 [DEBUG] [Thread-139362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:39:29.370 [DEBUG] [Thread-139362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:39:29.386 [INFO] [Thread-139362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:39:29.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:39:29.950 [DEBUG] [Thread-139362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:39:29.950 [DEBUG] [Thread-139362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:39:29.950 [DEBUG] [Thread-139362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:39:29.990 [DEBUG] [Thread-139362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:39:29.990 [DEBUG] [Thread-139362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:39:29.992 [DEBUG] [Thread-139362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:39:30.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:39:30.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:39:30.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:39:30.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:39:30.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:39:30.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:39:30.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:39:30.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:39:30.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.985550 -999.00  +12.70  12.12     92  +11.40 1 3 1 3 1     0    0 1.40 4.66 ..... 12.1 12.1 178.4 16.5 14.3 -5.6 14.1 -5.6 13.9 -6.7 14.3 -6.4
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.985550
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:39:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:38:48', tmtdew=0.55, humidity=96.28, cloud=0.0, wind=17.42, temperature=12.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:39:24', seeing=1.5, atlas_timestamp='2026-02-11T23:39:11.520', atlas_cloud=3, atlas_rain=1, zp_data=[1.42075, 1.4842500000000003, 0.7317500000000008, 0.9084999999999992, 0.8025000000000002, 0.9162500000000007, 1.4529999999999994, 2.0672500000000005, 1.892999999999999, 1.508, 1.13225, 0.6100000000000003, 0.47499999999999964, 0.4687499999999982, 0.9089999999999989, 2.2684999999999995, 2.1637499999999994, 1.2275, 0.7859999999999996, 0.40174999999999983, 0.28999999999999915, 0.2657499999999988, 0.5767500000000005, 2.7582500000000003, nan, 0.4195000000000002, 0.35774999999999935, 0.20599999999999952, 0.28300000000000036, 0.1800000000000015, 0.4800000000000004, 1.4280000000000008, nan], zp_timestamp='2026-02-11T23:35:00')
2026-02-12T01:39:30.009 [DEBUG] [Thread-139362] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:39:30.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:39:30.093 [DEBUG] [Thread-139365] [transport.py] [_log()] starting thread (client mode): 0x9eb06800
2026-02-12T01:39:30.093 [DEBUG] [Thread-139365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:39:30.108 [DEBUG] [Thread-139365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:39:30.108 [INFO] [Thread-139365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] client lang: <none>
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] server lang: <none>
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] kex follows: False
2026-02-12T01:39:30.115 [DEBUG] [Thread-139365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:39:30.116 [DEBUG] [Thread-139365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:39:30.116 [DEBUG] [Thread-139365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:39:30.116 [DEBUG] [Thread-139365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:39:30.116 [DEBUG] [Thread-139365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:39:30.116 [DEBUG] [Thread-139365] [transport.py] [_log()] Compression: none
2026-02-12T01:39:30.116 [DEBUG] [Thread-139365] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:39:30.173 [DEBUG] [Thread-139365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:39:30.173 [DEBUG] [Thread-139365] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:39:30.173 [DEBUG] [Thread-139365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:39:30.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:39:30.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:39:30.229 [DEBUG] [Thread-139365] [transport.py] [_log()] userauth is OK
2026-02-12T01:39:30.229 [DEBUG] [Thread-139365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:39:30.229 [DEBUG] [Thread-139365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:39:30.229 [DEBUG] [Thread-139365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:39:30.229 [DEBUG] [Thread-139365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:39:30.243 [INFO] [Thread-139365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:39:30.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:39:30.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:39:31.038 [DEBUG] [Thread-139365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:39:31.038 [DEBUG] [Thread-139365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:39:31.087 [DEBUG] [Thread-139365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:39:31.087 [DEBUG] [Thread-139365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:39:31.096 [DEBUG] [Thread-139365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:39:31.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:39:31.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:39:31.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:39:31.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:39:31.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:39:31.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:39:31.128 [DEBUG] [Thread-139365] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:39:43.056 [DEBUG] [Thread-139367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:39:58.137 [DEBUG] [Thread-139368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:40:00.913 [DEBUG] [Thread-139369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:40:01.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:40:01.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:40:01.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:40:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 39, 24), 0.55, 96.3, 0.0, 16.78, 12.56, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:40:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:39:24
2026-02-12T01:40:03.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:40:04.139 [DEBUG] [Thread-139370] [transport.py] [_log()] starting thread (client mode): 0xa5740520
2026-02-12T01:40:04.139 [DEBUG] [Thread-139370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:40:04.151 [DEBUG] [Thread-139370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:40:04.152 [INFO] [Thread-139370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] client lang: <none>
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] server lang: <none>
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] kex follows: False
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:40:04.155 [DEBUG] [Thread-139370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:40:04.156 [DEBUG] [Thread-139370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:40:04.156 [DEBUG] [Thread-139370] [transport.py] [_log()] Compression: none
2026-02-12T01:40:04.156 [DEBUG] [Thread-139370] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:40:04.185 [DEBUG] [Thread-139370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:40:04.188 [DEBUG] [Thread-139370] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:40:04.189 [DEBUG] [Thread-139370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:40:04.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:40:04.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:40:04.228 [DEBUG] [Thread-139370] [transport.py] [_log()] userauth is OK
2026-02-12T01:40:04.229 [DEBUG] [Thread-139370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:40:04.229 [DEBUG] [Thread-139370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:40:04.229 [DEBUG] [Thread-139370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:40:04.229 [DEBUG] [Thread-139370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:40:04.258 [INFO] [Thread-139370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:40:04.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:40:08.095 [DEBUG] [Thread-139370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:40:08.095 [DEBUG] [Thread-139370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:40:08.096 [DEBUG] [Thread-139370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:40:08.136 [DEBUG] [Thread-139370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:40:08.136 [DEBUG] [Thread-139370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:40:08.139 [DEBUG] [Thread-139370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:40:08.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:40:08.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:40:08.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:40:08.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:40:08.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:40:08.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:40:08.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:40:08.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:40:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:40:08.181 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-02-12T01:40:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:39:24', tmtdew=0.55, humidity=96.3, cloud=0.0, wind=16.78, temperature=12.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:40:00', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[1.42075, 1.4842500000000003, 0.7317500000000008, 0.9084999999999992, 0.8025000000000002, 0.9162500000000007, 1.4529999999999994, 2.0672500000000005, 1.892999999999999, 1.508, 1.13225, 0.6100000000000003, 0.47499999999999964, 0.4687499999999982, 0.9089999999999989, 2.2684999999999995, 2.1637499999999994, 1.2275, 0.7859999999999996, 0.40174999999999983, 0.28999999999999915, 0.2657499999999988, 0.5767500000000005, 2.7582500000000003, nan, 0.4195000000000002, 0.35774999999999935, 0.20599999999999952, 0.28300000000000036, 0.1800000000000015, 0.4800000000000004, 1.4280000000000008, nan], zp_timestamp='2026-02-11T23:38:00')
2026-02-12T01:40:08.182 [DEBUG] [Thread-139370] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:40:08.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:40:08.266 [DEBUG] [Thread-139373] [transport.py] [_log()] starting thread (client mode): 0x9eb05510
2026-02-12T01:40:08.266 [DEBUG] [Thread-139373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:40:08.281 [DEBUG] [Thread-139373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:40:08.281 [INFO] [Thread-139373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] client lang: <none>
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] server lang: <none>
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] kex follows: False
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] Compression: none
2026-02-12T01:40:08.289 [DEBUG] [Thread-139373] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:40:08.347 [DEBUG] [Thread-139373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:40:08.347 [DEBUG] [Thread-139373] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:40:08.348 [DEBUG] [Thread-139373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:40:08.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:40:08.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:40:08.405 [DEBUG] [Thread-139373] [transport.py] [_log()] userauth is OK
2026-02-12T01:40:08.405 [DEBUG] [Thread-139373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:40:08.405 [DEBUG] [Thread-139373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:40:08.405 [DEBUG] [Thread-139373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:40:08.405 [DEBUG] [Thread-139373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:40:08.419 [INFO] [Thread-139373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:40:08.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:40:08.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:40:09.290 [DEBUG] [Thread-139373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:40:09.290 [DEBUG] [Thread-139373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:40:09.338 [DEBUG] [Thread-139373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:40:09.338 [DEBUG] [Thread-139373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:40:09.346 [DEBUG] [Thread-139373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:40:09.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:40:09.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:40:09.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:40:09.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:40:09.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:40:09.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:40:09.378 [DEBUG] [Thread-139373] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:40:13.165 [DEBUG] [Thread-139375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:40:21.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:40:21.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:40:28.228 [DEBUG] [Thread-139376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:40:39.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:40:39.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:40:39.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:40:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 39, 59), 0.55, 96.3, 0.0, 16.87, 12.58, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:40:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:39:59
2026-02-12T01:40:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:40:42.097 [DEBUG] [Thread-139377] [transport.py] [_log()] starting thread (client mode): 0xa57406a0
2026-02-12T01:40:42.097 [DEBUG] [Thread-139377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:40:42.117 [DEBUG] [Thread-139377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:40:42.117 [INFO] [Thread-139377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] client lang: <none>
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] server lang: <none>
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] kex follows: False
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:40:42.120 [DEBUG] [Thread-139377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:40:42.121 [DEBUG] [Thread-139377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:40:42.121 [DEBUG] [Thread-139377] [transport.py] [_log()] Compression: none
2026-02-12T01:40:42.121 [DEBUG] [Thread-139377] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:40:42.135 [DEBUG] [Thread-139377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:40:42.135 [DEBUG] [Thread-139377] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:40:42.136 [DEBUG] [Thread-139377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:40:42.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:40:42.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:40:42.136 [DEBUG] [Thread-139377] [transport.py] [_log()] userauth is OK
2026-02-12T01:40:42.136 [DEBUG] [Thread-139377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:40:42.136 [DEBUG] [Thread-139377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:40:42.137 [DEBUG] [Thread-139377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:40:42.137 [DEBUG] [Thread-139377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:40:42.151 [INFO] [Thread-139377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:40:42.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:40:42.762 [DEBUG] [Thread-139377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:40:42.762 [DEBUG] [Thread-139377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:40:42.762 [DEBUG] [Thread-139377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:40:42.803 [DEBUG] [Thread-139377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:40:42.803 [DEBUG] [Thread-139377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:40:42.805 [DEBUG] [Thread-139377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:40:42.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:40:42.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:40:42.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:40:42.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:40:42.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:40:42.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:40:42.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:40:42.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:40:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:40:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.985897 -999.00  +12.70  12.07     92  +11.40 1 3 1 3 1     0    0 1.40 4.62 ...sW 12.1 12.1 181.2 15.0 14.3 -4.8 14.1 -5.0 13.9 -5.5 14.2 -5.2
2026-02-12T01:40:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:40:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:40:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.985897
2026-02-12T01:40:42.831 [DEBUG] [Thread-139377] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:40:42.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:40:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:40:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:40:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:40:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:40:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:39:59', tmtdew=0.55, humidity=96.3, cloud=0.0, wind=16.87, temperature=12.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:40:36', seeing=1.5, atlas_timestamp='2026-02-11T23:39:41.501', atlas_cloud=3, atlas_rain=1, zp_data=[1.42075, 1.4842500000000003, 0.7317500000000008, 0.9084999999999992, 0.8025000000000002, 0.9162500000000007, 1.4529999999999994, 2.0672500000000005, 1.892999999999999, 1.508, 1.13225, 0.6100000000000003, 0.47499999999999964, 0.4687499999999982, 0.9089999999999989, 2.2684999999999995, 2.1637499999999994, 1.2275, 0.7859999999999996, 0.40174999999999983, 0.28999999999999915, 0.2657499999999988, 0.5767500000000005, 2.7582500000000003, nan, 0.4195000000000002, 0.35774999999999935, 0.20599999999999952, 0.28300000000000036, 0.1800000000000015, 0.4800000000000004, 1.4280000000000008, nan], zp_timestamp='2026-02-11T23:38:00')
2026-02-12T01:40:42.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:40:42.931 [DEBUG] [Thread-139380] [transport.py] [_log()] starting thread (client mode): 0xa57c24a0
2026-02-12T01:40:42.931 [DEBUG] [Thread-139380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:40:42.945 [DEBUG] [Thread-139380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:40:42.945 [INFO] [Thread-139380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:40:42.952 [DEBUG] [Thread-139380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:40:42.952 [DEBUG] [Thread-139380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:40:42.952 [DEBUG] [Thread-139380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:40:42.952 [DEBUG] [Thread-139380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:42.952 [DEBUG] [Thread-139380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] client lang: <none>
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] server lang: <none>
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] kex follows: False
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] Compression: none
2026-02-12T01:40:42.953 [DEBUG] [Thread-139380] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:40:43.011 [DEBUG] [Thread-139380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:40:43.011 [DEBUG] [Thread-139380] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:40:43.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:40:43.011 [DEBUG] [Thread-139380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:40:43.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:40:43.072 [DEBUG] [Thread-139380] [transport.py] [_log()] userauth is OK
2026-02-12T01:40:43.072 [DEBUG] [Thread-139380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:40:43.072 [DEBUG] [Thread-139380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:40:43.072 [DEBUG] [Thread-139380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:40:43.072 [DEBUG] [Thread-139380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:40:43.086 [INFO] [Thread-139380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:40:43.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:40:43.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:40:43.253 [DEBUG] [Thread-139382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:40:43.884 [DEBUG] [Thread-139380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:40:43.884 [DEBUG] [Thread-139380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:40:43.932 [DEBUG] [Thread-139380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:40:43.932 [DEBUG] [Thread-139380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:40:43.940 [DEBUG] [Thread-139380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:40:43.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:40:43.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:40:43.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:40:43.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:40:43.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:40:43.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:40:43.972 [DEBUG] [Thread-139380] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:40:58.299 [DEBUG] [Thread-139383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:41:01.163 [DEBUG] [Thread-139384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:41:13.324 [DEBUG] [Thread-139385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:41:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:41:13.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:41:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:41:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 40, 35), 1.01, 93.53, 0.0, 18.95, 12.9, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:41:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:40:35
2026-02-12T01:41:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:41:16.721 [DEBUG] [Thread-139386] [transport.py] [_log()] starting thread (client mode): 0xa57e1ff0
2026-02-12T01:41:16.721 [DEBUG] [Thread-139386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:41:16.738 [DEBUG] [Thread-139386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:41:16.738 [INFO] [Thread-139386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:41:16.739 [DEBUG] [Thread-139386] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] client lang: <none>
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] server lang: <none>
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] kex follows: False
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:41:16.740 [DEBUG] [Thread-139386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:41:16.741 [DEBUG] [Thread-139386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:41:16.741 [DEBUG] [Thread-139386] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:41:16.741 [DEBUG] [Thread-139386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:41:16.741 [DEBUG] [Thread-139386] [transport.py] [_log()] Compression: none
2026-02-12T01:41:16.741 [DEBUG] [Thread-139386] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:41:16.759 [DEBUG] [Thread-139386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:41:16.761 [DEBUG] [Thread-139386] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:41:16.761 [DEBUG] [Thread-139386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:41:16.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:41:16.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:41:16.762 [DEBUG] [Thread-139386] [transport.py] [_log()] userauth is OK
2026-02-12T01:41:16.762 [DEBUG] [Thread-139386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:41:16.763 [DEBUG] [Thread-139386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:41:16.763 [DEBUG] [Thread-139386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:41:16.763 [DEBUG] [Thread-139386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:41:16.780 [INFO] [Thread-139386] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:41:16.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:41:17.582 [DEBUG] [Thread-139386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:41:17.582 [DEBUG] [Thread-139386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:41:17.582 [DEBUG] [Thread-139386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:41:17.623 [DEBUG] [Thread-139386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:41:17.623 [DEBUG] [Thread-139386] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:41:17.626 [DEBUG] [Thread-139386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:41:17.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:41:17.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:41:17.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:41:17.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:41:17.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:41:17.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:41:17.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:41:17.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:41:17.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:41:17.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.986591 -999.00  +12.70  13.77     92  +11.40 1 3 1 3 1     0    0 1.38 4.16 ....W 13.8 13.8 191.8 15.6 14.4 -7.5 14.1 -7.3 14.0 -6.7 14.3 -7.1
2026-02-12T01:41:17.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:41:17.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:41:17.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.986591
2026-02-12T01:41:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:41:17.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:41:17.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:41:17.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:41:17.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:41:17.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:40:35', tmtdew=1.01, humidity=93.53, cloud=0.0, wind=18.95, temperature=12.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:11', seeing=1.5, atlas_timestamp='2026-02-11T23:40:41.462', atlas_cloud=3, atlas_rain=1, zp_data=[1.42075, 1.4842500000000003, 0.7317500000000008, 0.9084999999999992, 0.8025000000000002, 0.9162500000000007, 1.4529999999999994, 2.0672500000000005, 1.892999999999999, 1.508, 1.13225, 0.6100000000000003, 0.47499999999999964, 0.4687499999999982, 0.9089999999999989, 2.2684999999999995, 2.1637499999999994, 1.2275, 0.7859999999999996, 0.40174999999999983, 0.28999999999999915, 0.2657499999999988, 0.5767500000000005, 2.7582500000000003, nan, 0.4195000000000002, 0.35774999999999935, 0.20599999999999952, 0.28300000000000036, 0.1800000000000015, 0.4800000000000004, 1.4280000000000008, nan], zp_timestamp='2026-02-11T23:38:00')
2026-02-12T01:41:17.656 [DEBUG] [Thread-139386] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:41:17.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:41:17.754 [DEBUG] [Thread-139389] [transport.py] [_log()] starting thread (client mode): 0xa2d9f880
2026-02-12T01:41:17.754 [DEBUG] [Thread-139389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:41:17.773 [DEBUG] [Thread-139389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:41:17.773 [INFO] [Thread-139389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] client lang: <none>
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] server lang: <none>
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] kex follows: False
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] Compression: none
2026-02-12T01:41:17.785 [DEBUG] [Thread-139389] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:41:17.847 [DEBUG] [Thread-139389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:41:17.847 [DEBUG] [Thread-139389] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:41:17.847 [DEBUG] [Thread-139389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:41:17.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:41:17.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:41:17.913 [DEBUG] [Thread-139389] [transport.py] [_log()] userauth is OK
2026-02-12T01:41:17.914 [DEBUG] [Thread-139389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:41:17.914 [DEBUG] [Thread-139389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:41:17.914 [DEBUG] [Thread-139389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:41:17.914 [DEBUG] [Thread-139389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:41:17.938 [INFO] [Thread-139389] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:41:17.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:41:17.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:41:18.736 [DEBUG] [Thread-139389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:41:18.736 [DEBUG] [Thread-139389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:41:18.784 [DEBUG] [Thread-139389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:41:18.784 [DEBUG] [Thread-139389] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:41:18.793 [DEBUG] [Thread-139389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:41:18.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:41:18.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:41:18.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:41:18.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:41:18.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:41:18.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:41:18.827 [DEBUG] [Thread-139389] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:41:21.416 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:41:21.417 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:41:28.362 [DEBUG] [Thread-139391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:41:43.470 [DEBUG] [Thread-139392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:41:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:41:48.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:41:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:41:51.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 41, 11), 0.55, 96.31, 0.0, 16.85, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:41:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:41:11
2026-02-12T01:41:51.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:41:51.606 [DEBUG] [Thread-139393] [transport.py] [_log()] starting thread (client mode): 0xa5741a80
2026-02-12T01:41:51.606 [DEBUG] [Thread-139393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:41:51.623 [DEBUG] [Thread-139393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:41:51.623 [INFO] [Thread-139393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] client lang: <none>
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] server lang: <none>
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] kex follows: False
2026-02-12T01:41:51.626 [DEBUG] [Thread-139393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:41:51.627 [DEBUG] [Thread-139393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:41:51.627 [DEBUG] [Thread-139393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:41:51.627 [DEBUG] [Thread-139393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:41:51.627 [DEBUG] [Thread-139393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:41:51.627 [DEBUG] [Thread-139393] [transport.py] [_log()] Compression: none
2026-02-12T01:41:51.627 [DEBUG] [Thread-139393] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:41:51.653 [DEBUG] [Thread-139393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:41:51.655 [DEBUG] [Thread-139393] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:41:51.656 [DEBUG] [Thread-139393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:41:51.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:41:51.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:41:51.658 [DEBUG] [Thread-139393] [transport.py] [_log()] userauth is OK
2026-02-12T01:41:51.658 [DEBUG] [Thread-139393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:41:51.659 [DEBUG] [Thread-139393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:41:51.659 [DEBUG] [Thread-139393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:41:51.659 [DEBUG] [Thread-139393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:41:51.676 [INFO] [Thread-139393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:41:51.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:41:52.292 [DEBUG] [Thread-139393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:41:52.292 [DEBUG] [Thread-139393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:41:52.293 [DEBUG] [Thread-139393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:41:52.333 [DEBUG] [Thread-139393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:41:52.333 [DEBUG] [Thread-139393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:41:52.335 [DEBUG] [Thread-139393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:41:52.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:41:52.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:41:52.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:41:52.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:41:52.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:41:52.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:41:52.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:41:52.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:41:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:41:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.986939 -999.00  +12.70  11.54     92  +11.40 1 3 1 3 1     0    0 1.39 4.02 Z..sw 11.5 11.5 178.8 14.4 14.3 -7.4 14.1 -7.1 14.0 -7.6 14.3 -7.9
2026-02-12T01:41:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:41:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:41:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.986939
2026-02-12T01:41:52.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:41:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:41:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:41:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:41:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:41:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:41:11', tmtdew=0.55, humidity=96.31, cloud=0.0, wind=16.85, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:41:11.530', atlas_cloud=3, atlas_rain=1, zp_data=[1.42075, 1.4842500000000003, 0.7317500000000008, 0.9084999999999992, 0.8025000000000002, 0.9162500000000007, 1.4529999999999994, 2.0672500000000005, 1.892999999999999, 1.508, 1.13225, 0.6100000000000003, 0.47499999999999964, 0.4687499999999982, 0.9089999999999989, 2.2684999999999995, 2.1637499999999994, 1.2275, 0.7859999999999996, 0.40174999999999983, 0.28999999999999915, 0.2657499999999988, 0.5767500000000005, 2.7582500000000003, nan, 0.4195000000000002, 0.35774999999999935, 0.20599999999999952, 0.28300000000000036, 0.1800000000000015, 0.4800000000000004, 1.4280000000000008, nan], zp_timestamp='2026-02-11T23:38:00')
2026-02-12T01:41:52.367 [DEBUG] [Thread-139393] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:41:52.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:41:52.453 [DEBUG] [Thread-139396] [transport.py] [_log()] starting thread (client mode): 0x9eb06cb0
2026-02-12T01:41:52.453 [DEBUG] [Thread-139396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:41:52.470 [DEBUG] [Thread-139396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:41:52.470 [INFO] [Thread-139396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:41:52.477 [DEBUG] [Thread-139396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:41:52.477 [DEBUG] [Thread-139396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:41:52.477 [DEBUG] [Thread-139396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:41:52.477 [DEBUG] [Thread-139396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:52.477 [DEBUG] [Thread-139396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:41:52.477 [DEBUG] [Thread-139396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:52.477 [DEBUG] [Thread-139396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] client lang: <none>
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] server lang: <none>
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] kex follows: False
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] Compression: none
2026-02-12T01:41:52.478 [DEBUG] [Thread-139396] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:41:52.538 [DEBUG] [Thread-139396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:41:52.538 [DEBUG] [Thread-139396] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:41:52.538 [DEBUG] [Thread-139396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:41:52.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:41:52.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:41:52.595 [DEBUG] [Thread-139396] [transport.py] [_log()] userauth is OK
2026-02-12T01:41:52.595 [DEBUG] [Thread-139396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:41:52.595 [DEBUG] [Thread-139396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:41:52.595 [DEBUG] [Thread-139396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:41:52.595 [DEBUG] [Thread-139396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:41:52.609 [INFO] [Thread-139396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:41:52.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:41:52.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:41:53.398 [DEBUG] [Thread-139396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:41:53.398 [DEBUG] [Thread-139396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:41:53.446 [DEBUG] [Thread-139396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:41:53.446 [DEBUG] [Thread-139396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:41:53.454 [DEBUG] [Thread-139396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:41:53.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:41:53.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')
2026-02-12T01:41: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') -> 00000000
2026-02-12T01:41:53.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:41:53.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:41:53.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:41:53.487 [DEBUG] [Thread-139396] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:41:58.494 [DEBUG] [Thread-139398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:42:01.477 [DEBUG] [Thread-139399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:42:13.527 [DEBUG] [Thread-139400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:42:21.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:42:21.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:42:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:42:23.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:42:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:42:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 41, 46), 0.54, 96.33, 0.0, 16.41, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:42:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:41:46
2026-02-12T01:42:26.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:42:26.229 [DEBUG] [Thread-139401] [transport.py] [_log()] starting thread (client mode): 0xa2d9f160
2026-02-12T01:42:26.229 [DEBUG] [Thread-139401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:42:26.244 [DEBUG] [Thread-139401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:42:26.244 [INFO] [Thread-139401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] client lang: <none>
2026-02-12T01:42:26.247 [DEBUG] [Thread-139401] [transport.py] [_log()] server lang: <none>
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] kex follows: False
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] Compression: none
2026-02-12T01:42:26.248 [DEBUG] [Thread-139401] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:42:26.270 [DEBUG] [Thread-139401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:42:26.273 [DEBUG] [Thread-139401] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:42:26.273 [DEBUG] [Thread-139401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:42:26.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:42:26.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:42:26.276 [DEBUG] [Thread-139401] [transport.py] [_log()] userauth is OK
2026-02-12T01:42:26.276 [DEBUG] [Thread-139401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:42:26.276 [DEBUG] [Thread-139401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:42:26.276 [DEBUG] [Thread-139401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:42:26.276 [DEBUG] [Thread-139401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:42:26.295 [INFO] [Thread-139401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:42:26.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:42:26.931 [DEBUG] [Thread-139401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:42:26.931 [DEBUG] [Thread-139401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:42:26.932 [DEBUG] [Thread-139401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:42:26.973 [DEBUG] [Thread-139401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:42:26.974 [DEBUG] [Thread-139401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:42:26.977 [DEBUG] [Thread-139401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:42:26.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:42:26.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:42:26.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:42:26.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:42:26.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:42:27.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:42:27.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:42:27.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:42:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:42:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.987286 -999.00  +12.70   9.71     92  +11.40 1 3 1 3 1     0    0 1.44 4.10 Z..sw 9.7 9.7 181.4 15.5 14.3 -6.9 14.1 -6.4 14.0 -7.0 14.3 -7.4
2026-02-12T01:42:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:42:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:42:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.987286
2026-02-12T01:42:27.007 [DEBUG] [Thread-139401] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:42:27.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:42:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:42:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:42:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:42:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:42:27.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:41:46', tmtdew=0.54, humidity=96.33, cloud=0.0, wind=16.41, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:41:41.510', atlas_cloud=3, atlas_rain=1, zp_data=[1.42075, 1.4842500000000003, 0.7317500000000008, 0.9084999999999992, 0.8025000000000002, 0.9162500000000007, 1.4529999999999994, 2.0672500000000005, 1.892999999999999, 1.508, 1.13225, 0.6100000000000003, 0.47499999999999964, 0.4687499999999982, 0.9089999999999989, 2.2684999999999995, 2.1637499999999994, 1.2275, 0.7859999999999996, 0.40174999999999983, 0.28999999999999915, 0.2657499999999988, 0.5767500000000005, 2.7582500000000003, nan, 0.4195000000000002, 0.35774999999999935, 0.20599999999999952, 0.28300000000000036, 0.1800000000000015, 0.4800000000000004, 1.4280000000000008, nan], zp_timestamp='2026-02-11T23:38:00')
2026-02-12T01:42:27.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:42:27.104 [DEBUG] [Thread-139404] [transport.py] [_log()] starting thread (client mode): 0xa57402e0
2026-02-12T01:42:27.105 [DEBUG] [Thread-139404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:42:27.118 [DEBUG] [Thread-139404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:42:27.119 [INFO] [Thread-139404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] client lang: <none>
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] server lang: <none>
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] kex follows: False
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] Compression: none
2026-02-12T01:42:27.126 [DEBUG] [Thread-139404] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:42:27.182 [DEBUG] [Thread-139404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:42:27.182 [DEBUG] [Thread-139404] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:42:27.183 [DEBUG] [Thread-139404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:42:27.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:42:27.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:42:27.243 [DEBUG] [Thread-139404] [transport.py] [_log()] userauth is OK
2026-02-12T01:42:27.243 [DEBUG] [Thread-139404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:42:27.244 [DEBUG] [Thread-139404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:42:27.244 [DEBUG] [Thread-139404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:42:27.244 [DEBUG] [Thread-139404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:42:27.267 [INFO] [Thread-139404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:42:27.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:42:27.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:42:28.097 [DEBUG] [Thread-139404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:42:28.097 [DEBUG] [Thread-139404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:42:28.146 [DEBUG] [Thread-139404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:42:28.146 [DEBUG] [Thread-139404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:42:28.154 [DEBUG] [Thread-139404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:42:28.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:42: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')
2026-02-12T01:42:28.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:42:28.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:42:28.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:42:28.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:42:28.187 [DEBUG] [Thread-139404] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:42:28.552 [DEBUG] [Thread-139406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:42:43.610 [DEBUG] [Thread-139407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:42:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:42:58.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:42:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:42:58.634 [DEBUG] [Thread-139408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:43:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 42, 22), 0.55, 96.28, 0.0, 16.5, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:43:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:42:22
2026-02-12T01:43:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:43:01.158 [DEBUG] [Thread-139409] [transport.py] [_log()] starting thread (client mode): 0xa2dc01c0
2026-02-12T01:43:01.159 [DEBUG] [Thread-139409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:43:01.178 [DEBUG] [Thread-139409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:43:01.178 [INFO] [Thread-139409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:43:01.181 [DEBUG] [Thread-139409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] client lang: <none>
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] server lang: <none>
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] kex follows: False
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] Compression: none
2026-02-12T01:43:01.182 [DEBUG] [Thread-139409] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:43:01.196 [DEBUG] [Thread-139409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:43:01.196 [DEBUG] [Thread-139409] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:43:01.196 [DEBUG] [Thread-139409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:43:01.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:43:01.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:43:01.198 [DEBUG] [Thread-139409] [transport.py] [_log()] userauth is OK
2026-02-12T01:43:01.198 [DEBUG] [Thread-139409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:43:01.198 [DEBUG] [Thread-139409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:43:01.198 [DEBUG] [Thread-139409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:43:01.198 [DEBUG] [Thread-139409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:43:01.215 [INFO] [Thread-139409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:43:01.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:43:01.631 [DEBUG] [Thread-139411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:43:01.879 [DEBUG] [Thread-139409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:43:01.879 [DEBUG] [Thread-139409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:43:01.879 [DEBUG] [Thread-139409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:43:01.920 [DEBUG] [Thread-139409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:43:01.920 [DEBUG] [Thread-139409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:43:01.922 [DEBUG] [Thread-139409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:43:01.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:43:01.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:43:01.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:43:01.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:43:01.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:43:01.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:43:01.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:43:01.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:43:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:43:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.987633 -999.00  +12.70  11.74     92  +11.40 1 3 1 3 1     0    0 1.37 4.02 ZN.sW 11.7 11.7 185.8 16.1 14.4 -7.6 14.1 -7.9 14.1 -6.3 14.4 -7.2
2026-02-12T01:43:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:43:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:43:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.987633
2026-02-12T01:43:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:43:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:43:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:43:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:43:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:43:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:42:22', tmtdew=0.55, humidity=96.28, cloud=0.0, wind=16.5, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:42:11.491', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.5292499999999993, nan, 2.476, nan, nan, nan, nan, nan, 2.334999999999999, nan, nan, nan, nan, nan, nan, nan, 0.9517499999999997, 1.8064999999999998, nan, 1.8185000000000002, nan, nan, nan], zp_timestamp='2026-02-11T23:42:00')
2026-02-12T01:43:01.941 [DEBUG] [Thread-139409] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:43:02.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:43:02.025 [DEBUG] [Thread-139413] [transport.py] [_log()] starting thread (client mode): 0xa57730d0
2026-02-12T01:43:02.025 [DEBUG] [Thread-139413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:43:02.039 [DEBUG] [Thread-139413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:43:02.039 [INFO] [Thread-139413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] client lang: <none>
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] server lang: <none>
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] kex follows: False
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] Compression: none
2026-02-12T01:43:02.047 [DEBUG] [Thread-139413] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:43:02.102 [DEBUG] [Thread-139413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:43:02.102 [DEBUG] [Thread-139413] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:43:02.102 [DEBUG] [Thread-139413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:43:02.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:43:02.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:43:02.159 [DEBUG] [Thread-139413] [transport.py] [_log()] userauth is OK
2026-02-12T01:43:02.159 [DEBUG] [Thread-139413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:43:02.159 [DEBUG] [Thread-139413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:43:02.159 [DEBUG] [Thread-139413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:43:02.159 [DEBUG] [Thread-139413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:43:02.173 [INFO] [Thread-139413] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:43:02.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:43:02.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:43:03.000 [DEBUG] [Thread-139413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:43:03.001 [DEBUG] [Thread-139413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:43:03.048 [DEBUG] [Thread-139413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:43:03.048 [DEBUG] [Thread-139413] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:43:03.057 [DEBUG] [Thread-139413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:43:03.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:43:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:43:03.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:43:03.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:43:03.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:43:03.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:43:03.088 [DEBUG] [Thread-139413] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:43:13.656 [DEBUG] [Thread-139415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:43:21.844 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:43:21.845 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:43:28.706 [DEBUG] [Thread-139416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:43:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:43:33.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:43: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
2026-02-12T01:43:35.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 42, 57), 0.54, 96.36, 0.0, 14.49, 12.56, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:43:35.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:42:57
2026-02-12T01:43:35.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:43:35.690 [DEBUG] [Thread-139417] [transport.py] [_log()] starting thread (client mode): 0xa5743940
2026-02-12T01:43:35.690 [DEBUG] [Thread-139417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:43:35.710 [DEBUG] [Thread-139417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:43:35.710 [INFO] [Thread-139417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] client lang: <none>
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] server lang: <none>
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] kex follows: False
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] Compression: none
2026-02-12T01:43:35.714 [DEBUG] [Thread-139417] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:43:35.728 [DEBUG] [Thread-139417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:43:35.728 [DEBUG] [Thread-139417] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:43:35.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:43:35.728 [DEBUG] [Thread-139417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:43:35.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:43:35.729 [DEBUG] [Thread-139417] [transport.py] [_log()] userauth is OK
2026-02-12T01:43:35.729 [DEBUG] [Thread-139417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:43:35.729 [DEBUG] [Thread-139417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:43:35.729 [DEBUG] [Thread-139417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:43:35.729 [DEBUG] [Thread-139417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:43:35.744 [INFO] [Thread-139417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:43:35.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:43:36.390 [DEBUG] [Thread-139417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:43:36.390 [DEBUG] [Thread-139417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:43:36.390 [DEBUG] [Thread-139417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:43:36.431 [DEBUG] [Thread-139417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:43:36.431 [DEBUG] [Thread-139417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:43:36.433 [DEBUG] [Thread-139417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:43:36.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:43:36.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:43:36.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:43:36.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:43:36.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:43:36.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:43:36.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:43:36.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:43:36.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:43:36.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.987980 -999.00  +12.70  11.15     92  +11.50 1 3 1 3 1     0    0 1.39 3.09 .N... 11.2 11.2 176.0 13.4 14.3 -8.9 14.1 -9.5 14.0 -7.7 14.4 -8.5
2026-02-12T01:43:36.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:43:36.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:43:36.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.987980
2026-02-12T01:43:36.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:43:36.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:43:36.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:43:36.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:43:36.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:43:36.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:42:57', tmtdew=0.54, humidity=96.36, cloud=0.0, wind=14.49, temperature=12.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:42:41.472', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.5292499999999993, nan, 2.476, nan, nan, nan, nan, nan, 2.334999999999999, nan, nan, nan, nan, nan, nan, nan, 0.9517499999999997, 1.8064999999999998, nan, 1.8185000000000002, nan, nan, nan], zp_timestamp='2026-02-11T23:42:00')
2026-02-12T01:43:36.452 [DEBUG] [Thread-139417] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:43:36.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:43:36.538 [DEBUG] [Thread-139420] [transport.py] [_log()] starting thread (client mode): 0xa5741c60
2026-02-12T01:43:36.538 [DEBUG] [Thread-139420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:43:36.552 [DEBUG] [Thread-139420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:43:36.552 [INFO] [Thread-139420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:43:36.559 [DEBUG] [Thread-139420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] client lang: <none>
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] server lang: <none>
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] kex follows: False
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] Compression: none
2026-02-12T01:43:36.560 [DEBUG] [Thread-139420] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:43:36.616 [DEBUG] [Thread-139420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:43:36.616 [DEBUG] [Thread-139420] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:43:36.616 [DEBUG] [Thread-139420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:43:36.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:43:36.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:43:36.673 [DEBUG] [Thread-139420] [transport.py] [_log()] userauth is OK
2026-02-12T01:43:36.673 [DEBUG] [Thread-139420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:43:36.673 [DEBUG] [Thread-139420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:43:36.673 [DEBUG] [Thread-139420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:43:36.673 [DEBUG] [Thread-139420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:43:36.687 [INFO] [Thread-139420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:43:36.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:43:36.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:43:37.511 [DEBUG] [Thread-139420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:43:37.511 [DEBUG] [Thread-139420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:43:37.559 [DEBUG] [Thread-139420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:43:37.559 [DEBUG] [Thread-139420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:43:37.567 [DEBUG] [Thread-139420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:43:37.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:43:37.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:43:37.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:43:37.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:43:37.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:43:37.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:43:37.598 [DEBUG] [Thread-139420] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:43:43.729 [DEBUG] [Thread-139422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:43:58.762 [DEBUG] [Thread-139423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:44:01.723 [DEBUG] [Thread-139424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:44:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:44:07.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:44:07.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:44:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 43, 33), 0.98, 93.7, 0.0, 18.03, 12.99, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:44:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:43:33
2026-02-12T01:44:10.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:44:10.323 [DEBUG] [Thread-139425] [transport.py] [_log()] starting thread (client mode): 0xa2d9c3a0
2026-02-12T01:44:10.323 [DEBUG] [Thread-139425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:44:10.343 [DEBUG] [Thread-139425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:44:10.343 [INFO] [Thread-139425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] client lang: <none>
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] server lang: <none>
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] kex follows: False
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:44:10.346 [DEBUG] [Thread-139425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:44:10.347 [DEBUG] [Thread-139425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:44:10.347 [DEBUG] [Thread-139425] [transport.py] [_log()] Compression: none
2026-02-12T01:44:10.347 [DEBUG] [Thread-139425] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:44:10.364 [DEBUG] [Thread-139425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:44:10.364 [DEBUG] [Thread-139425] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:44:10.364 [DEBUG] [Thread-139425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:44:10.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:44:10.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:44:10.365 [DEBUG] [Thread-139425] [transport.py] [_log()] userauth is OK
2026-02-12T01:44:10.365 [DEBUG] [Thread-139425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:44:10.365 [DEBUG] [Thread-139425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:44:10.365 [DEBUG] [Thread-139425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:44:10.365 [DEBUG] [Thread-139425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:44:10.375 [INFO] [Thread-139425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:44:10.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:44:11.189 [DEBUG] [Thread-139425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:44:11.189 [DEBUG] [Thread-139425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:44:11.189 [DEBUG] [Thread-139425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:44:11.230 [DEBUG] [Thread-139425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:44:11.230 [DEBUG] [Thread-139425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:44:11.232 [DEBUG] [Thread-139425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:44:11.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:44:11.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:44:11.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:44:11.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:44:11.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:44:11.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:44:11.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.988327 -999.00  +12.70  12.55     92  +11.50 1 3 1 3 1     0    0 1.35 2.03 .N... 12.6 12.6 180.6 16.6 14.4 -9.4 14.1 -9.5 14.0 -9.1 14.3 -9.8
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.988327
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:44:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:43:33', tmtdew=0.98, humidity=93.7, cloud=0.0, wind=18.03, temperature=12.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:43:11.453', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.5292499999999993, nan, 2.476, nan, nan, nan, nan, nan, 2.334999999999999, nan, nan, nan, nan, nan, nan, nan, 0.9517499999999997, 1.8064999999999998, nan, 1.8185000000000002, nan, nan, nan], zp_timestamp='2026-02-11T23:42:00')
2026-02-12T01:44:11.250 [DEBUG] [Thread-139425] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:44:11.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:44:11.337 [DEBUG] [Thread-139428] [transport.py] [_log()] starting thread (client mode): 0xa5743a90
2026-02-12T01:44:11.337 [DEBUG] [Thread-139428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:44:11.351 [DEBUG] [Thread-139428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:44:11.352 [INFO] [Thread-139428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] client lang: <none>
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] server lang: <none>
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] kex follows: False
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:44:11.359 [DEBUG] [Thread-139428] [transport.py] [_log()] Compression: none
2026-02-12T01:44:11.360 [DEBUG] [Thread-139428] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:44:11.424 [DEBUG] [Thread-139428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:44:11.424 [DEBUG] [Thread-139428] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:44:11.424 [DEBUG] [Thread-139428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:44:11.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:44:11.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:44:11.480 [DEBUG] [Thread-139428] [transport.py] [_log()] userauth is OK
2026-02-12T01:44:11.480 [DEBUG] [Thread-139428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:44:11.480 [DEBUG] [Thread-139428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:44:11.480 [DEBUG] [Thread-139428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:44:11.480 [DEBUG] [Thread-139428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:44:11.500 [INFO] [Thread-139428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:44:11.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:44:11.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:44:12.338 [DEBUG] [Thread-139428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:44:12.338 [DEBUG] [Thread-139428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:44:12.387 [DEBUG] [Thread-139428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:44:12.387 [DEBUG] [Thread-139428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:44:12.396 [DEBUG] [Thread-139428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:44:12.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:44:12.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:44:12.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:44:12.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:44:12.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:44:12.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:44:12.428 [DEBUG] [Thread-139428] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:44:13.789 [DEBUG] [Thread-139430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:44:22.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:44:22.051 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:44:28.820 [DEBUG] [Thread-139431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:44:42.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:44:42.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:44:42.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:44:43.849 [DEBUG] [Thread-139432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:44:44.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 44, 8), 0.55, 96.31, 0.0, 17.08, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:44:44.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:44:08
2026-02-12T01:44:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:44:45.054 [DEBUG] [Thread-139433] [transport.py] [_log()] starting thread (client mode): 0x9eb06c80
2026-02-12T01:44:45.054 [DEBUG] [Thread-139433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:44:45.066 [DEBUG] [Thread-139433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:44:45.066 [INFO] [Thread-139433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] client lang: <none>
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] server lang: <none>
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] kex follows: False
2026-02-12T01:44:45.071 [DEBUG] [Thread-139433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:44:45.072 [DEBUG] [Thread-139433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:44:45.072 [DEBUG] [Thread-139433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:44:45.072 [DEBUG] [Thread-139433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:44:45.072 [DEBUG] [Thread-139433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:44:45.072 [DEBUG] [Thread-139433] [transport.py] [_log()] Compression: none
2026-02-12T01:44:45.072 [DEBUG] [Thread-139433] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:44:45.117 [DEBUG] [Thread-139433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:44:45.120 [DEBUG] [Thread-139433] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:44:45.121 [DEBUG] [Thread-139433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:44:45.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:44:45.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:44:45.124 [DEBUG] [Thread-139433] [transport.py] [_log()] userauth is OK
2026-02-12T01:44:45.124 [DEBUG] [Thread-139433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:44:45.124 [DEBUG] [Thread-139433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:44:45.124 [DEBUG] [Thread-139433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:44:45.124 [DEBUG] [Thread-139433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:44:45.141 [INFO] [Thread-139433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:44:45.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:44:45.720 [DEBUG] [Thread-139433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:44:45.720 [DEBUG] [Thread-139433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:44:45.721 [DEBUG] [Thread-139433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:44:45.761 [DEBUG] [Thread-139433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:44:45.761 [DEBUG] [Thread-139433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:44:45.764 [DEBUG] [Thread-139433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:44:45.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:44:45.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:44:45.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:44:45.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:44:45.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:44:45.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:44:45.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:44:45.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:44:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:44:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.989022 -999.00  +12.60  14.85     92  +11.40 1 3 1 3 1     0    0 1.31 0.95 ZN.SW 14.8 14.8 188.0 17.7 14.3 -7.9 -999.0 -999.0 14.1 -8.3 14.4 -8.5
2026-02-12T01:44:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:44:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:44:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.989022
2026-02-12T01:44:45.784 [DEBUG] [Thread-139433] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:44:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:44:45.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:44:45.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:44:45.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:44:45.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:44:45.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:44:08', tmtdew=0.55, humidity=96.31, cloud=0.0, wind=17.08, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:44:11.501', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.5292499999999993, nan, 2.476, nan, nan, nan, nan, nan, 2.334999999999999, nan, nan, nan, nan, nan, nan, nan, 0.9517499999999997, 1.8064999999999998, nan, 1.8185000000000002, nan, nan, nan], zp_timestamp='2026-02-11T23:42:00')
2026-02-12T01:44:45.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:44:45.892 [DEBUG] [Thread-139436] [transport.py] [_log()] starting thread (client mode): 0x9eb070a0
2026-02-12T01:44:45.892 [DEBUG] [Thread-139436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:44:45.907 [DEBUG] [Thread-139436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:44:45.907 [INFO] [Thread-139436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:44:45.914 [DEBUG] [Thread-139436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] client lang: <none>
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] server lang: <none>
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] kex follows: False
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] Compression: none
2026-02-12T01:44:45.915 [DEBUG] [Thread-139436] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:44:45.973 [DEBUG] [Thread-139436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:44:45.973 [DEBUG] [Thread-139436] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:44:45.973 [DEBUG] [Thread-139436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:44:45.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:44:45.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:44:46.030 [DEBUG] [Thread-139436] [transport.py] [_log()] userauth is OK
2026-02-12T01:44:46.030 [DEBUG] [Thread-139436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:44:46.030 [DEBUG] [Thread-139436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:44:46.030 [DEBUG] [Thread-139436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:44:46.030 [DEBUG] [Thread-139436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:44:46.046 [INFO] [Thread-139436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:44:46.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:44:46.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:44:46.858 [DEBUG] [Thread-139436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:44:46.858 [DEBUG] [Thread-139436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:44:46.906 [DEBUG] [Thread-139436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:44:46.906 [DEBUG] [Thread-139436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:44:46.915 [DEBUG] [Thread-139436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:44:46.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:44:46.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:44:46.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:44:46.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:44:46.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:44:46.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:44:46.950 [DEBUG] [Thread-139436] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:44:58.886 [DEBUG] [Thread-139438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:45:02.024 [DEBUG] [Thread-139439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:45:14.020 [DEBUG] [Thread-139440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:45:16.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:45:16.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:45:16.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:45:19.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 44, 44), 0.54, 96.31, 0.0, 18.86, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:45:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:44:44
2026-02-12T01:45:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:45:19.588 [DEBUG] [Thread-139441] [transport.py] [_log()] starting thread (client mode): 0xa57c0760
2026-02-12T01:45:19.588 [DEBUG] [Thread-139441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:45:19.603 [DEBUG] [Thread-139441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:45:19.603 [INFO] [Thread-139441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:45:19.606 [DEBUG] [Thread-139441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:45:19.606 [DEBUG] [Thread-139441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:45:19.606 [DEBUG] [Thread-139441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:45:19.606 [DEBUG] [Thread-139441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:19.606 [DEBUG] [Thread-139441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:19.606 [DEBUG] [Thread-139441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] client lang: <none>
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] server lang: <none>
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] kex follows: False
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] Compression: none
2026-02-12T01:45:19.607 [DEBUG] [Thread-139441] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:45:19.639 [DEBUG] [Thread-139441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:45:19.641 [DEBUG] [Thread-139441] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:45:19.641 [DEBUG] [Thread-139441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:45:19.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:45:19.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:45:19.644 [DEBUG] [Thread-139441] [transport.py] [_log()] userauth is OK
2026-02-12T01:45:19.644 [DEBUG] [Thread-139441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:45:19.644 [DEBUG] [Thread-139441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:45:19.644 [DEBUG] [Thread-139441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:45:19.644 [DEBUG] [Thread-139441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:45:19.676 [INFO] [Thread-139441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:45:19.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:45:20.745 [DEBUG] [Thread-139441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:45:20.747 [DEBUG] [Thread-139441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:45:20.748 [DEBUG] [Thread-139441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:45:20.786 [DEBUG] [Thread-139441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:45:20.786 [DEBUG] [Thread-139441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:45:20.788 [DEBUG] [Thread-139441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:45:20.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:45:20.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:45:20.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:45:20.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:45:20.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:45:20.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:45:20.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:45:20.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:45:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:45:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.989369 -999.00  +12.60  12.73     92  +11.40 1 3 1 3 1     0    0 1.30 0.32 ZN.SW 12.7 12.7 186.2 15.9 14.3 -8.7 14.1 -9.4 14.0 -7.6 14.3 -8.4
2026-02-12T01:45:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:45:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:45:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.989369
2026-02-12T01:45:20.816 [DEBUG] [Thread-139441] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:45:20.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:45:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:45:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:45:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:45:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:45:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:44:44', tmtdew=0.54, humidity=96.31, cloud=0.0, wind=18.86, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:44:41.482', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.5292499999999993, nan, 2.476, nan, nan, nan, nan, nan, 2.334999999999999, nan, nan, nan, nan, nan, nan, nan, 0.9517499999999997, 1.8064999999999998, nan, 1.8185000000000002, nan, nan, nan], zp_timestamp='2026-02-11T23:42:00')
2026-02-12T01:45:20.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:45:20.906 [DEBUG] [Thread-139444] [transport.py] [_log()] starting thread (client mode): 0xa57722c0
2026-02-12T01:45:20.906 [DEBUG] [Thread-139444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:45:20.920 [DEBUG] [Thread-139444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:45:20.920 [INFO] [Thread-139444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:45:20.927 [DEBUG] [Thread-139444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:45:20.927 [DEBUG] [Thread-139444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] client lang: <none>
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] server lang: <none>
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] kex follows: False
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] Compression: none
2026-02-12T01:45:20.928 [DEBUG] [Thread-139444] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:45:20.983 [DEBUG] [Thread-139444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:45:20.984 [DEBUG] [Thread-139444] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:45:20.984 [DEBUG] [Thread-139444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:45:20.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:45:20.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:45:21.041 [DEBUG] [Thread-139444] [transport.py] [_log()] userauth is OK
2026-02-12T01:45:21.041 [DEBUG] [Thread-139444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:45:21.041 [DEBUG] [Thread-139444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:45:21.041 [DEBUG] [Thread-139444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:45:21.041 [DEBUG] [Thread-139444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:45:21.054 [INFO] [Thread-139444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:45:21.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:45:21.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:45:21.855 [DEBUG] [Thread-139444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:45:21.855 [DEBUG] [Thread-139444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:45:21.903 [DEBUG] [Thread-139444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:45:21.903 [DEBUG] [Thread-139444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:45:21.911 [DEBUG] [Thread-139444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:45:21.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:45:21.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:45:21.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:45:21.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:45:21.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:45:21.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:45:21.945 [DEBUG] [Thread-139444] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:45:22.255 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:45:22.255 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:45:29.068 [DEBUG] [Thread-139446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:45:44.156 [DEBUG] [Thread-139447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:45:51.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:45:51.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:45:51.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
2026-02-12T01:45:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 45, 20), 0.55, 96.31, 0.0, 18.79, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:45:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:45:20
2026-02-12T01:45:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:45:54.525 [DEBUG] [Thread-139448] [transport.py] [_log()] starting thread (client mode): 0xa57c0310
2026-02-12T01:45:54.525 [DEBUG] [Thread-139448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:45:54.544 [DEBUG] [Thread-139448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:45:54.544 [INFO] [Thread-139448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] client lang: <none>
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] server lang: <none>
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] kex follows: False
2026-02-12T01:45:54.547 [DEBUG] [Thread-139448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:45:54.548 [DEBUG] [Thread-139448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:45:54.548 [DEBUG] [Thread-139448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:45:54.548 [DEBUG] [Thread-139448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:45:54.548 [DEBUG] [Thread-139448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:45:54.548 [DEBUG] [Thread-139448] [transport.py] [_log()] Compression: none
2026-02-12T01:45:54.548 [DEBUG] [Thread-139448] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:45:54.562 [DEBUG] [Thread-139448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:45:54.562 [DEBUG] [Thread-139448] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:45:54.562 [DEBUG] [Thread-139448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:45:54.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:45:54.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:45:54.563 [DEBUG] [Thread-139448] [transport.py] [_log()] userauth is OK
2026-02-12T01:45:54.563 [DEBUG] [Thread-139448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:45:54.563 [DEBUG] [Thread-139448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:45:54.563 [DEBUG] [Thread-139448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:45:54.563 [DEBUG] [Thread-139448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:45:54.578 [INFO] [Thread-139448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:45:54.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:45:55.231 [DEBUG] [Thread-139448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:45:55.231 [DEBUG] [Thread-139448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:45:55.232 [DEBUG] [Thread-139448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:45:55.273 [DEBUG] [Thread-139448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:45:55.273 [DEBUG] [Thread-139448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:45:55.275 [DEBUG] [Thread-139448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:45:55.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:45:55.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:45:55.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:45:55.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:45:55.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:45:55.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:45:55.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:45:55.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:45:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:45:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.989716 -999.00  +12.60  16.65     92  +11.40 1 3 1 3 1     0    0 1.23 -0.49 .N.sW 16.6 16.6 183.0 21.2 14.3 -9.6 14.1 -10.1 14.0 -9.0 14.4 -10.1
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.989716
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:45:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:45:20', tmtdew=0.55, humidity=96.31, cloud=0.0, wind=18.79, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:45:11.462', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:44:00')
2026-02-12T01:45:55.291 [DEBUG] [Thread-139448] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:45:55.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:45:55.377 [DEBUG] [Thread-139451] [transport.py] [_log()] starting thread (client mode): 0xa5772590
2026-02-12T01:45:55.377 [DEBUG] [Thread-139451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:45:55.391 [DEBUG] [Thread-139451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:45:55.391 [INFO] [Thread-139451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] client lang: <none>
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] server lang: <none>
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] kex follows: False
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] Compression: none
2026-02-12T01:45:55.399 [DEBUG] [Thread-139451] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:45:55.453 [DEBUG] [Thread-139451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:45:55.454 [DEBUG] [Thread-139451] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:45:55.454 [DEBUG] [Thread-139451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:45:55.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:45:55.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:45:55.511 [DEBUG] [Thread-139451] [transport.py] [_log()] userauth is OK
2026-02-12T01:45:55.511 [DEBUG] [Thread-139451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:45:55.511 [DEBUG] [Thread-139451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:45:55.511 [DEBUG] [Thread-139451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:45:55.511 [DEBUG] [Thread-139451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:45:55.525 [INFO] [Thread-139451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:45:55.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:45:55.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:45:56.319 [DEBUG] [Thread-139451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:45:56.319 [DEBUG] [Thread-139451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:45:56.368 [DEBUG] [Thread-139451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:45:56.368 [DEBUG] [Thread-139451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:45:56.376 [DEBUG] [Thread-139451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:45:56.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:45:56.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')
2026-02-12T01:45:56.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:45:56.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:45:56.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:45:56.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:45:56.409 [DEBUG] [Thread-139451] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:45:59.179 [DEBUG] [Thread-139453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:46:02.241 [DEBUG] [Thread-139454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:46:14.213 [DEBUG] [Thread-139455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:46:22.454 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:46:22.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:46:26.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:46:26.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:46:26.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:46:28.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 45, 55), 0.55, 96.3, 0.0, 17.72, 12.43, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:46:28.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:45:55
2026-02-12T01:46:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:46:28.858 [DEBUG] [Thread-139456] [transport.py] [_log()] starting thread (client mode): 0xa5742b90
2026-02-12T01:46:28.858 [DEBUG] [Thread-139456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:46:28.878 [DEBUG] [Thread-139456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:46:28.878 [INFO] [Thread-139456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:46:28.881 [DEBUG] [Thread-139456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:46:28.881 [DEBUG] [Thread-139456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:46:28.881 [DEBUG] [Thread-139456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:46:28.881 [DEBUG] [Thread-139456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:46:28.881 [DEBUG] [Thread-139456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] client lang: <none>
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] server lang: <none>
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] kex follows: False
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] Compression: none
2026-02-12T01:46:28.882 [DEBUG] [Thread-139456] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:46:28.896 [DEBUG] [Thread-139456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:46:28.896 [DEBUG] [Thread-139456] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:46:28.897 [DEBUG] [Thread-139456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:46:28.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:46:28.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:46:28.897 [DEBUG] [Thread-139456] [transport.py] [_log()] userauth is OK
2026-02-12T01:46:28.897 [DEBUG] [Thread-139456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:46:28.897 [DEBUG] [Thread-139456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:46:28.897 [DEBUG] [Thread-139456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:46:28.897 [DEBUG] [Thread-139456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:46:28.912 [INFO] [Thread-139456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:46:28.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:46:29.240 [DEBUG] [Thread-139458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:46:29.706 [DEBUG] [Thread-139456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:46:29.706 [DEBUG] [Thread-139456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:46:29.706 [DEBUG] [Thread-139456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:46:29.747 [DEBUG] [Thread-139456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:46:29.747 [DEBUG] [Thread-139456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:46:29.749 [DEBUG] [Thread-139456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:46:29.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:46:29.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:46:29.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:46:29.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:46:29.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:46:29.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:46:29.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:46:29.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:46:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:46:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.990063 -999.00  +12.60   9.48     92  +11.40 1 3 1 3 1     0    0 1.26 -1.50 Z.esW 9.5 9.5 176.7 15.8 14.3 -9.0 14.1 -8.9 14.0 -9.7 14.3 -10.1
2026-02-12T01:46:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:46:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:46:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.990063
2026-02-12T01:46:29.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:46:29.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:46:29.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:46:29.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:46:29.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:46:29.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:45:55', tmtdew=0.55, humidity=96.3, cloud=0.0, wind=17.72, temperature=12.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:45:41.443', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:44:00')
2026-02-12T01:46:29.769 [DEBUG] [Thread-139456] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:46:29.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:46:29.854 [DEBUG] [Thread-139460] [transport.py] [_log()] starting thread (client mode): 0xa2d96410
2026-02-12T01:46:29.855 [DEBUG] [Thread-139460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:46:29.870 [DEBUG] [Thread-139460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:46:29.870 [INFO] [Thread-139460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] client lang: <none>
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] server lang: <none>
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] kex follows: False
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] Compression: none
2026-02-12T01:46:29.877 [DEBUG] [Thread-139460] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:46:29.931 [DEBUG] [Thread-139460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:46:29.931 [DEBUG] [Thread-139460] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:46:29.932 [DEBUG] [Thread-139460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:46:29.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:46:29.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:46:29.989 [DEBUG] [Thread-139460] [transport.py] [_log()] userauth is OK
2026-02-12T01:46:29.989 [DEBUG] [Thread-139460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:46:29.989 [DEBUG] [Thread-139460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:46:29.989 [DEBUG] [Thread-139460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:46:29.989 [DEBUG] [Thread-139460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:46:30.003 [INFO] [Thread-139460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:46:30.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:46:30.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:46:30.807 [DEBUG] [Thread-139460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:46:30.807 [DEBUG] [Thread-139460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:46:30.856 [DEBUG] [Thread-139460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:46:30.856 [DEBUG] [Thread-139460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:46:30.864 [DEBUG] [Thread-139460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:46:30.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:46:30.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:46:30.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:46:30.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:46:30.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:46:30.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:46:30.896 [DEBUG] [Thread-139460] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:46:44.266 [DEBUG] [Thread-139462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:46:59.300 [DEBUG] [Thread-139463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:47:00.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:47:00.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:47:00.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
2026-02-12T01:47:02.405 [DEBUG] [Thread-139464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:47:02.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 46, 30), 0.53, 96.38, 0.0, 17.08, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:47:02.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:46:30
2026-02-12T01:47:03.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:47:03.308 [DEBUG] [Thread-139465] [transport.py] [_log()] starting thread (client mode): 0xa57c0580
2026-02-12T01:47:03.308 [DEBUG] [Thread-139465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:47:03.327 [DEBUG] [Thread-139465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:47:03.327 [INFO] [Thread-139465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] client lang: <none>
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] server lang: <none>
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] kex follows: False
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] Compression: none
2026-02-12T01:47:03.329 [DEBUG] [Thread-139465] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:47:03.345 [DEBUG] [Thread-139465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:47:03.345 [DEBUG] [Thread-139465] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:47:03.345 [DEBUG] [Thread-139465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:47:03.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:47:03.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:47:03.346 [DEBUG] [Thread-139465] [transport.py] [_log()] userauth is OK
2026-02-12T01:47:03.346 [DEBUG] [Thread-139465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:47:03.346 [DEBUG] [Thread-139465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:47:03.346 [DEBUG] [Thread-139465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:47:03.346 [DEBUG] [Thread-139465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:47:03.361 [INFO] [Thread-139465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:47:03.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:47:04.015 [DEBUG] [Thread-139465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:47:04.015 [DEBUG] [Thread-139465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:47:04.015 [DEBUG] [Thread-139465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:47:04.056 [DEBUG] [Thread-139465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:47:04.056 [DEBUG] [Thread-139465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:47:04.058 [DEBUG] [Thread-139465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:47:04.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:47:04.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:47:04.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:47:04.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:47:04.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:47:04.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:47:04.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.990411 -999.00  +12.60  13.23     92  +11.40 1 3 1 3 1     0    0 1.22 -2.12 Z.esW 13.2 13.2 180.6 14.7 14.3 -7.6 14.1 -7.3 14.1 -8.6 14.3 -8.9
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.990411
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:47:04.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:46:30', tmtdew=0.53, humidity=96.38, cloud=0.0, wind=17.08, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:46:11.510', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:44:00')
2026-02-12T01:47:04.081 [DEBUG] [Thread-139465] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:47:04.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:47:04.167 [DEBUG] [Thread-139468] [transport.py] [_log()] starting thread (client mode): 0xa5771c90
2026-02-12T01:47:04.167 [DEBUG] [Thread-139468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:47:04.182 [DEBUG] [Thread-139468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:47:04.182 [INFO] [Thread-139468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] client lang: <none>
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] server lang: <none>
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] kex follows: False
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] Compression: none
2026-02-12T01:47:04.190 [DEBUG] [Thread-139468] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:47:04.250 [DEBUG] [Thread-139468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:47:04.250 [DEBUG] [Thread-139468] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:47:04.250 [DEBUG] [Thread-139468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:47:04.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:47:04.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:47:04.307 [DEBUG] [Thread-139468] [transport.py] [_log()] userauth is OK
2026-02-12T01:47:04.307 [DEBUG] [Thread-139468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:47:04.307 [DEBUG] [Thread-139468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:47:04.307 [DEBUG] [Thread-139468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:47:04.307 [DEBUG] [Thread-139468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:47:04.324 [INFO] [Thread-139468] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:47:04.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:47:04.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:47:05.182 [DEBUG] [Thread-139468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:47:05.182 [DEBUG] [Thread-139468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:47:05.230 [DEBUG] [Thread-139468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:47:05.230 [DEBUG] [Thread-139468] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:47:05.238 [DEBUG] [Thread-139468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:47:05.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:47:05.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:47:05.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:47:05.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:47:05.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:47:05.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:47:05.269 [DEBUG] [Thread-139468] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:47:14.325 [DEBUG] [Thread-139470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:47:22.660 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:47:22.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:47:29.359 [DEBUG] [Thread-139471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:47:35.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:47:35.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:47:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:47:37.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 47, 5), 0.54, 96.35, 0.0, 17.38, 12.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:47:37.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:47:05
2026-02-12T01:47:37.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:47:37.588 [DEBUG] [Thread-139472] [transport.py] [_log()] starting thread (client mode): 0xa5771e40
2026-02-12T01:47:37.588 [DEBUG] [Thread-139472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:47:37.599 [DEBUG] [Thread-139472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:47:37.599 [INFO] [Thread-139472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] client lang: <none>
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] server lang: <none>
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] kex follows: False
2026-02-12T01:47:37.600 [DEBUG] [Thread-139472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:47:37.601 [DEBUG] [Thread-139472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:47:37.601 [DEBUG] [Thread-139472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:47:37.601 [DEBUG] [Thread-139472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:47:37.601 [DEBUG] [Thread-139472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:47:37.601 [DEBUG] [Thread-139472] [transport.py] [_log()] Compression: none
2026-02-12T01:47:37.601 [DEBUG] [Thread-139472] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:47:37.615 [DEBUG] [Thread-139472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:47:37.615 [DEBUG] [Thread-139472] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:47:37.615 [DEBUG] [Thread-139472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:47:37.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:47:37.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:47:37.616 [DEBUG] [Thread-139472] [transport.py] [_log()] userauth is OK
2026-02-12T01:47:37.616 [DEBUG] [Thread-139472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:47:37.616 [DEBUG] [Thread-139472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:47:37.616 [DEBUG] [Thread-139472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:47:37.617 [DEBUG] [Thread-139472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:47:37.629 [INFO] [Thread-139472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:47:37.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:47:38.203 [DEBUG] [Thread-139472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:47:38.203 [DEBUG] [Thread-139472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:47:38.203 [DEBUG] [Thread-139472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:47:38.244 [DEBUG] [Thread-139472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:47:38.244 [DEBUG] [Thread-139472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:47:38.246 [DEBUG] [Thread-139472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:47:38.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:47:38.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:47:38.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:47:38.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:47:38.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:47:38.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:47:38.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:47:38.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:47:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:47:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.990758 -999.00  +12.60   9.87     92  +11.40 1 3 1 3 1     0    0 1.19 -2.74 ZN.sW 9.9 9.9 194.2 19.6 -999.0 -999.0 14.1 -7.9 14.1 -7.7 14.3 -8.6
2026-02-12T01:47:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:47:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:47:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.990758
2026-02-12T01:47:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:47:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:47:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:47:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:47:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:47:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:47:05', tmtdew=0.54, humidity=96.35, cloud=0.0, wind=17.38, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:46:41.491', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:44:00')
2026-02-12T01:47:38.265 [DEBUG] [Thread-139472] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:47:38.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:47:38.350 [DEBUG] [Thread-139475] [transport.py] [_log()] starting thread (client mode): 0xa2d78a30
2026-02-12T01:47:38.350 [DEBUG] [Thread-139475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:47:38.365 [DEBUG] [Thread-139475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:47:38.365 [INFO] [Thread-139475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] client lang: <none>
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] server lang: <none>
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] kex follows: False
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] Compression: none
2026-02-12T01:47:38.372 [DEBUG] [Thread-139475] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:47:38.432 [DEBUG] [Thread-139475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:47:38.432 [DEBUG] [Thread-139475] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:47:38.432 [DEBUG] [Thread-139475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:47:38.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:47:38.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:47:38.489 [DEBUG] [Thread-139475] [transport.py] [_log()] userauth is OK
2026-02-12T01:47:38.489 [DEBUG] [Thread-139475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:47:38.489 [DEBUG] [Thread-139475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:47:38.489 [DEBUG] [Thread-139475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:47:38.489 [DEBUG] [Thread-139475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:47:38.504 [INFO] [Thread-139475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:47:38.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:47:38.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:47:39.327 [DEBUG] [Thread-139475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:47:39.327 [DEBUG] [Thread-139475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:47:39.375 [DEBUG] [Thread-139475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:47:39.375 [DEBUG] [Thread-139475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:47:39.383 [DEBUG] [Thread-139475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:47:39.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:47:39.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:47:39.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:47:39.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:47:39.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:47:39.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:47:39.416 [DEBUG] [Thread-139475] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:47:44.383 [DEBUG] [Thread-139477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:47:59.419 [DEBUG] [Thread-139478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:48:02.722 [DEBUG] [Thread-139479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:48:09.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:48:09.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:48:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:48:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 47, 40), 0.98, 93.7, 0.0, 22.12, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:48:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:47:40
2026-02-12T01:48:12.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:48:12.451 [DEBUG] [Thread-139480] [transport.py] [_log()] starting thread (client mode): 0xa2d7ada0
2026-02-12T01:48:12.451 [DEBUG] [Thread-139480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:48:12.473 [DEBUG] [Thread-139480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:48:12.473 [INFO] [Thread-139480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:48:12.476 [DEBUG] [Thread-139480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:48:12.476 [DEBUG] [Thread-139480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:48:12.476 [DEBUG] [Thread-139480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:48:12.476 [DEBUG] [Thread-139480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:12.476 [DEBUG] [Thread-139480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] client lang: <none>
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] server lang: <none>
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] kex follows: False
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:48:12.477 [DEBUG] [Thread-139480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:48:12.478 [DEBUG] [Thread-139480] [transport.py] [_log()] Compression: none
2026-02-12T01:48:12.478 [DEBUG] [Thread-139480] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:48:12.496 [DEBUG] [Thread-139480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:48:12.497 [DEBUG] [Thread-139480] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:48:12.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:48:12.498 [DEBUG] [Thread-139480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:48:12.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:48:12.500 [DEBUG] [Thread-139480] [transport.py] [_log()] userauth is OK
2026-02-12T01:48:12.500 [DEBUG] [Thread-139480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:48:12.501 [DEBUG] [Thread-139480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:48:12.501 [DEBUG] [Thread-139480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:48:12.501 [DEBUG] [Thread-139480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:48:12.526 [INFO] [Thread-139480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:48:12.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:48:13.173 [DEBUG] [Thread-139480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:48:13.173 [DEBUG] [Thread-139480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:48:13.174 [DEBUG] [Thread-139480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:48:13.214 [DEBUG] [Thread-139480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:48:13.214 [DEBUG] [Thread-139480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:48:13.217 [DEBUG] [Thread-139480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:48:13.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:48:13.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:48:13.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:48:13.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:48:13.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:48:13.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:48:13.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:48:13.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:48:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:48:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.991105 -999.00  +12.60   9.35     92  +11.40 1 3 1 3 1     0    0 1.18 -3.21 z...W 9.3 9.3 188.2 18.2 14.3 -7.8 14.1 -7.0 14.0 -8.1 14.3 -9.1
2026-02-12T01:48:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:48:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:48:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.991105
2026-02-12T01:48:13.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:48:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:48:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:48:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:48:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:48:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:47:40', tmtdew=0.98, humidity=93.7, cloud=0.0, wind=22.12, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:47:11.472', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:44:00')
2026-02-12T01:48:13.239 [DEBUG] [Thread-139480] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:48:13.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:48:13.338 [DEBUG] [Thread-139483] [transport.py] [_log()] starting thread (client mode): 0xa2d78b50
2026-02-12T01:48:13.338 [DEBUG] [Thread-139483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:48:13.352 [DEBUG] [Thread-139483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:48:13.353 [INFO] [Thread-139483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:48:13.360 [DEBUG] [Thread-139483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:48:13.360 [DEBUG] [Thread-139483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:48:13.360 [DEBUG] [Thread-139483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:48:13.360 [DEBUG] [Thread-139483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:13.360 [DEBUG] [Thread-139483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:13.360 [DEBUG] [Thread-139483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:13.360 [DEBUG] [Thread-139483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] client lang: <none>
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] server lang: <none>
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] kex follows: False
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:48:13.361 [DEBUG] [Thread-139483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:48:13.362 [DEBUG] [Thread-139483] [transport.py] [_log()] Compression: none
2026-02-12T01:48:13.362 [DEBUG] [Thread-139483] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:48:13.419 [DEBUG] [Thread-139483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:48:13.419 [DEBUG] [Thread-139483] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:48:13.420 [DEBUG] [Thread-139483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:48:13.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:48:13.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:48:13.476 [DEBUG] [Thread-139483] [transport.py] [_log()] userauth is OK
2026-02-12T01:48:13.476 [DEBUG] [Thread-139483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:48:13.476 [DEBUG] [Thread-139483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:48:13.476 [DEBUG] [Thread-139483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:48:13.476 [DEBUG] [Thread-139483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:48:13.495 [INFO] [Thread-139483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:48:13.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:48:13.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:48:14.322 [DEBUG] [Thread-139483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:48:14.322 [DEBUG] [Thread-139483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:48:14.371 [DEBUG] [Thread-139483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:48:14.371 [DEBUG] [Thread-139483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:48:14.380 [DEBUG] [Thread-139483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:48:14.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:48:14.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:48:14.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:48:14.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:48:14.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:48:14.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:48:14.424 [DEBUG] [Thread-139483] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:48:14.448 [DEBUG] [Thread-139485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:48:22.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:48:22.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:48:29.496 [DEBUG] [Thread-139486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:48:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:48:44.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:48:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:48:44.528 [DEBUG] [Thread-139487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:48:46.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 48, 15), 0.5, 96.56, 0.0, 17.82, 12.45, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:48:46.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:48:15
2026-02-12T01:48:46.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:48:47.067 [DEBUG] [Thread-139488] [transport.py] [_log()] starting thread (client mode): 0xa2d7b340
2026-02-12T01:48:47.067 [DEBUG] [Thread-139488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:48:47.088 [DEBUG] [Thread-139488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:48:47.088 [INFO] [Thread-139488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:48:47.091 [DEBUG] [Thread-139488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:48:47.091 [DEBUG] [Thread-139488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:48:47.091 [DEBUG] [Thread-139488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:48:47.091 [DEBUG] [Thread-139488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:47.091 [DEBUG] [Thread-139488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:47.091 [DEBUG] [Thread-139488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:47.091 [DEBUG] [Thread-139488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] client lang: <none>
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] server lang: <none>
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] kex follows: False
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] Compression: none
2026-02-12T01:48:47.092 [DEBUG] [Thread-139488] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:48:47.114 [DEBUG] [Thread-139488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:48:47.115 [DEBUG] [Thread-139488] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:48:47.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:48:47.116 [DEBUG] [Thread-139488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:48:47.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:48:47.157 [DEBUG] [Thread-139488] [transport.py] [_log()] userauth is OK
2026-02-12T01:48:47.157 [DEBUG] [Thread-139488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:48:47.157 [DEBUG] [Thread-139488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:48:47.157 [DEBUG] [Thread-139488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:48:47.158 [DEBUG] [Thread-139488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:48:47.194 [INFO] [Thread-139488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:48:47.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:48:47.864 [DEBUG] [Thread-139488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:48:47.864 [DEBUG] [Thread-139488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:48:47.865 [DEBUG] [Thread-139488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:48:47.905 [DEBUG] [Thread-139488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:48:47.905 [DEBUG] [Thread-139488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:48:47.908 [DEBUG] [Thread-139488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:48:47.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:48:47.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:48:47.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:48:47.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:48:47.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:48:47.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:48:47.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:48:47.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:48:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:48:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.991800 -999.00  +12.60   9.97     92  +11.40 1 3 1 3 1     0    0 1.17 -3.11 .N..w 10.0 10.0 180.8 13.6 14.4 -5.7 14.2 -6.5 14.1 -4.9 14.4 -5.6
2026-02-12T01:48:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:48:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:48:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.991800
2026-02-12T01:48:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:48:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:48:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:48:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:48:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:48:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:48:15', tmtdew=0.5, humidity=96.56, cloud=0.0, wind=17.82, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:48:11.520', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:47:00')
2026-02-12T01:48:47.936 [DEBUG] [Thread-139488] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:48:48.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:48:48.033 [DEBUG] [Thread-139491] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9e0
2026-02-12T01:48:48.034 [DEBUG] [Thread-139491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:48:48.048 [DEBUG] [Thread-139491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:48:48.048 [INFO] [Thread-139491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] client lang: <none>
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] server lang: <none>
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] kex follows: False
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] Compression: none
2026-02-12T01:48:48.055 [DEBUG] [Thread-139491] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:48:48.110 [DEBUG] [Thread-139491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:48:48.111 [DEBUG] [Thread-139491] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:48:48.111 [DEBUG] [Thread-139491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:48:48.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:48:48.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:48:48.168 [DEBUG] [Thread-139491] [transport.py] [_log()] userauth is OK
2026-02-12T01:48:48.168 [DEBUG] [Thread-139491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:48:48.168 [DEBUG] [Thread-139491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:48:48.168 [DEBUG] [Thread-139491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:48:48.169 [DEBUG] [Thread-139491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:48:48.186 [INFO] [Thread-139491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:48:48.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:48:48.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:48:49.025 [DEBUG] [Thread-139491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:48:49.026 [DEBUG] [Thread-139491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:48:49.073 [DEBUG] [Thread-139491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:48:49.074 [DEBUG] [Thread-139491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:48:49.083 [DEBUG] [Thread-139491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:48:49.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:48:49.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:48:49.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:48:49.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:48:49.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:48:49.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:48:49.119 [DEBUG] [Thread-139491] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:48:59.568 [DEBUG] [Thread-139493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:49:02.810 [DEBUG] [Thread-139494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:49:14.625 [DEBUG] [Thread-139495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:49:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:49:19.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:49:19.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:49:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 48, 50), 0.53, 96.43, 0.0, 17.79, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:49:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:48:50
2026-02-12T01:49:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:49:21.484 [DEBUG] [Thread-139496] [transport.py] [_log()] starting thread (client mode): 0xa5771210
2026-02-12T01:49:21.484 [DEBUG] [Thread-139496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:49:21.495 [DEBUG] [Thread-139496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:49:21.495 [INFO] [Thread-139496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] client lang: <none>
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] server lang: <none>
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] kex follows: False
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] Compression: none
2026-02-12T01:49:21.496 [DEBUG] [Thread-139496] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:49:21.506 [DEBUG] [Thread-139496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:49:21.507 [DEBUG] [Thread-139496] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:49:21.507 [DEBUG] [Thread-139496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:49:21.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:49:21.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:49:21.508 [DEBUG] [Thread-139496] [transport.py] [_log()] userauth is OK
2026-02-12T01:49:21.508 [DEBUG] [Thread-139496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:49:21.508 [DEBUG] [Thread-139496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:49:21.508 [DEBUG] [Thread-139496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:49:21.508 [DEBUG] [Thread-139496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:49:21.522 [INFO] [Thread-139496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:49:21.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:49:22.326 [DEBUG] [Thread-139496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:49:22.326 [DEBUG] [Thread-139496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:49:22.326 [DEBUG] [Thread-139496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:49:22.367 [DEBUG] [Thread-139496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:49:22.368 [DEBUG] [Thread-139496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:49:22.371 [DEBUG] [Thread-139496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:49:22.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:49:22.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:49:22.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:49:22.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:49:22.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:49:22.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:49:22.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:49:22.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:49:22.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:49:22.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.992147 -999.00  +12.60  12.56     92  +11.40 1 3 1 3 1     0    0 1.14 -3.31 ..... 12.6 12.6 182.6 18.8 14.4 -7.6 14.2 -7.1 14.1 -7.0 14.4 -8.0
2026-02-12T01:49:22.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:49:22.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:49:22.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.992147
2026-02-12T01:49:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:49:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:49:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:49:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:49:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:49:22.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:48:50', tmtdew=0.53, humidity=96.43, cloud=0.0, wind=17.79, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:48:41.501', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:47:00')
2026-02-12T01:49:22.399 [DEBUG] [Thread-139496] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:49:22.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:49:22.494 [DEBUG] [Thread-139499] [transport.py] [_log()] starting thread (client mode): 0xa57716f0
2026-02-12T01:49:22.494 [DEBUG] [Thread-139499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:49:22.508 [DEBUG] [Thread-139499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:49:22.509 [INFO] [Thread-139499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:49:22.517 [DEBUG] [Thread-139499] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:49:22.517 [DEBUG] [Thread-139499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:49:22.517 [DEBUG] [Thread-139499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:49:22.517 [DEBUG] [Thread-139499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:22.517 [DEBUG] [Thread-139499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:22.517 [DEBUG] [Thread-139499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] client lang: <none>
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] server lang: <none>
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] kex follows: False
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:49:22.518 [DEBUG] [Thread-139499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:49:22.519 [DEBUG] [Thread-139499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:49:22.519 [DEBUG] [Thread-139499] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:49:22.519 [DEBUG] [Thread-139499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:49:22.520 [DEBUG] [Thread-139499] [transport.py] [_log()] Compression: none
2026-02-12T01:49:22.520 [DEBUG] [Thread-139499] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:49:22.584 [DEBUG] [Thread-139499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:49:22.585 [DEBUG] [Thread-139499] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:49:22.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:49:22.587 [DEBUG] [Thread-139499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:49:22.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:49:22.642 [DEBUG] [Thread-139499] [transport.py] [_log()] userauth is OK
2026-02-12T01:49:22.642 [DEBUG] [Thread-139499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:49:22.642 [DEBUG] [Thread-139499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:49:22.643 [DEBUG] [Thread-139499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:49:22.643 [DEBUG] [Thread-139499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:49:22.662 [INFO] [Thread-139499] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:49:22.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:49:22.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:49:23.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:49:23.071 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:49:23.472 [DEBUG] [Thread-139499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:49:23.472 [DEBUG] [Thread-139499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:49:23.520 [DEBUG] [Thread-139499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:49:23.520 [DEBUG] [Thread-139499] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:49:23.530 [DEBUG] [Thread-139499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:49:23.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:49:23.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:49:23.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:49:23.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:49:23.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:49:23.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:49:23.566 [DEBUG] [Thread-139499] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:49:29.661 [DEBUG] [Thread-139501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:49:44.726 [DEBUG] [Thread-139502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:49:53.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:49:53.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:49:53.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:49:55.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 49, 26), 0.53, 96.4, 0.0, 15.32, 12.51, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:49:55.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:49:26
2026-02-12T01:49:55.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:49:56.004 [DEBUG] [Thread-139503] [transport.py] [_log()] starting thread (client mode): 0xa2d79b70
2026-02-12T01:49:56.004 [DEBUG] [Thread-139503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:49:56.024 [DEBUG] [Thread-139503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:49:56.024 [INFO] [Thread-139503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:56.028 [DEBUG] [Thread-139503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] client lang: <none>
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] server lang: <none>
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] kex follows: False
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] Compression: none
2026-02-12T01:49:56.029 [DEBUG] [Thread-139503] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:49:56.047 [DEBUG] [Thread-139503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:49:56.048 [DEBUG] [Thread-139503] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:49:56.048 [DEBUG] [Thread-139503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:49:56.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:49:56.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:49:56.050 [DEBUG] [Thread-139503] [transport.py] [_log()] userauth is OK
2026-02-12T01:49:56.051 [DEBUG] [Thread-139503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:49:56.051 [DEBUG] [Thread-139503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:49:56.051 [DEBUG] [Thread-139503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:49:56.051 [DEBUG] [Thread-139503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:49:56.071 [INFO] [Thread-139503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:49:56.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:49:56.717 [DEBUG] [Thread-139503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:49:56.718 [DEBUG] [Thread-139503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:49:56.718 [DEBUG] [Thread-139503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:49:56.758 [DEBUG] [Thread-139503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:49:56.758 [DEBUG] [Thread-139503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:49:56.761 [DEBUG] [Thread-139503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:49:56.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:49:56.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:49:56.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:49:56.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:49:56.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:49:56.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:49:56.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:49:56.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:49:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:49:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.992494 -999.00  +12.60  12.20     92  +11.40 1 3 1 3 1     0    0 1.16 -3.14 ..... 12.2 12.2 188.4 17.1 14.4 -5.4 14.2 -5.6 14.1 -6.5 14.4 -6.5
2026-02-12T01:49:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:49:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:49:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.992494
2026-02-12T01:49:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:49:56.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:49:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:49:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:49:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:49:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:49:26', tmtdew=0.53, humidity=96.4, cloud=0.0, wind=15.32, temperature=12.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:49:11.482', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:47:00')
2026-02-12T01:49:56.785 [DEBUG] [Thread-139503] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:49:56.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:49:56.878 [DEBUG] [Thread-139506] [transport.py] [_log()] starting thread (client mode): 0xa2d79660
2026-02-12T01:49:56.878 [DEBUG] [Thread-139506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:49:56.892 [DEBUG] [Thread-139506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:49:56.892 [INFO] [Thread-139506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:49:56.899 [DEBUG] [Thread-139506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:49:56.900 [DEBUG] [Thread-139506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] client lang: <none>
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] server lang: <none>
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] kex follows: False
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:49:56.901 [DEBUG] [Thread-139506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:49:56.902 [DEBUG] [Thread-139506] [transport.py] [_log()] Compression: none
2026-02-12T01:49:56.902 [DEBUG] [Thread-139506] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:49:56.960 [DEBUG] [Thread-139506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:49:56.961 [DEBUG] [Thread-139506] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:49:56.961 [DEBUG] [Thread-139506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:49:56.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:49:56.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:49:57.016 [DEBUG] [Thread-139506] [transport.py] [_log()] userauth is OK
2026-02-12T01:49:57.016 [DEBUG] [Thread-139506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:49:57.016 [DEBUG] [Thread-139506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:49:57.016 [DEBUG] [Thread-139506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:49:57.016 [DEBUG] [Thread-139506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:49:57.035 [INFO] [Thread-139506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:49:57.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:49:57.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:49:57.852 [DEBUG] [Thread-139506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:49:57.852 [DEBUG] [Thread-139506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:49:57.899 [DEBUG] [Thread-139506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:49:57.900 [DEBUG] [Thread-139506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:49:57.909 [DEBUG] [Thread-139506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:49:57.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:49:57.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:49:57.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:49:57.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:49:57.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:49:57.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:49:57.946 [DEBUG] [Thread-139506] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:49:59.765 [DEBUG] [Thread-139508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:50:02.913 [DEBUG] [Thread-139509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:50:14.826 [DEBUG] [Thread-139510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:50:23.274 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:50:23.276 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:50:27.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:50:27.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:50:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:50:29.863 [DEBUG] [Thread-139511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:50:30.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 50, 1), 0.53, 96.43, 0.0, 16.3, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:50:30.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:50:01
2026-02-12T01:50:30.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:50:30.833 [DEBUG] [Thread-139512] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-12T01:50:30.833 [DEBUG] [Thread-139512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:50:30.854 [DEBUG] [Thread-139512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:50:30.854 [INFO] [Thread-139512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] client lang: <none>
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] server lang: <none>
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] kex follows: False
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:50:30.857 [DEBUG] [Thread-139512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:50:30.858 [DEBUG] [Thread-139512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:50:30.858 [DEBUG] [Thread-139512] [transport.py] [_log()] Compression: none
2026-02-12T01:50:30.858 [DEBUG] [Thread-139512] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:50:30.874 [DEBUG] [Thread-139512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:50:30.874 [DEBUG] [Thread-139512] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:50:30.875 [DEBUG] [Thread-139512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:50:30.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:50:30.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:50:30.876 [DEBUG] [Thread-139512] [transport.py] [_log()] userauth is OK
2026-02-12T01:50:30.877 [DEBUG] [Thread-139512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:50:30.877 [DEBUG] [Thread-139512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:50:30.877 [DEBUG] [Thread-139512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:50:30.877 [DEBUG] [Thread-139512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:50:30.897 [INFO] [Thread-139512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:50:30.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:50:32.606 [DEBUG] [Thread-139512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:50:32.606 [DEBUG] [Thread-139512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:50:32.607 [DEBUG] [Thread-139512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:50:32.647 [DEBUG] [Thread-139512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:50:32.648 [DEBUG] [Thread-139512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:50:32.651 [DEBUG] [Thread-139512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:50:32.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:50:32.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:50:32.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:50:32.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:50:32.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:50:32.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:50:32.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:50:32.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:50:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:50:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.992841 -999.00  +12.60   8.98     92  +11.50 1 3 1 3 1     0    0 1.15 -3.62 Z..sw 9.0 9.0 189.1 14.3 14.4 -5.2 14.2 -5.1 14.1 -5.3 14.4 -5.4
2026-02-12T01:50:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:50:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:50:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.992841
2026-02-12T01:50:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:50:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:50:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:50:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:50:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:50:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:50:01', tmtdew=0.53, humidity=96.43, cloud=0.0, wind=16.3, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:49:41.462', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:47:00')
2026-02-12T01:50:32.677 [DEBUG] [Thread-139512] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:50:32.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:50:32.774 [DEBUG] [Thread-139515] [transport.py] [_log()] starting thread (client mode): 0xa57c35b0
2026-02-12T01:50:32.774 [DEBUG] [Thread-139515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:50:32.788 [DEBUG] [Thread-139515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:50:32.788 [INFO] [Thread-139515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] client lang: <none>
2026-02-12T01:50:32.796 [DEBUG] [Thread-139515] [transport.py] [_log()] server lang: <none>
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] kex follows: False
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] Compression: none
2026-02-12T01:50:32.797 [DEBUG] [Thread-139515] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:50:32.856 [DEBUG] [Thread-139515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:50:32.857 [DEBUG] [Thread-139515] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:50:32.857 [DEBUG] [Thread-139515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:50:32.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:50:32.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:50:32.914 [DEBUG] [Thread-139515] [transport.py] [_log()] userauth is OK
2026-02-12T01:50:32.914 [DEBUG] [Thread-139515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:50:32.914 [DEBUG] [Thread-139515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:50:32.914 [DEBUG] [Thread-139515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:50:32.914 [DEBUG] [Thread-139515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:50:32.931 [INFO] [Thread-139515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:50:32.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:50:32.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:50:33.729 [DEBUG] [Thread-139515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:50:33.729 [DEBUG] [Thread-139515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:50:33.778 [DEBUG] [Thread-139515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:50:33.779 [DEBUG] [Thread-139515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:50:33.791 [DEBUG] [Thread-139515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:50:33.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:50:33.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:50:33.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:50:33.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:50:33.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:50:33.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:50:33.837 [DEBUG] [Thread-139515] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:50:44.896 [DEBUG] [Thread-139517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:50:59.956 [DEBUG] [Thread-139518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:51:02.999 [DEBUG] [Thread-139519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:51:03.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:51:03.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:51:03.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
2026-02-12T01:51:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 50, 37), 0.95, 93.9, 0.0, 21.67, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:51:05.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:50:37
2026-02-12T01:51:06.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:51:06.419 [DEBUG] [Thread-139520] [transport.py] [_log()] starting thread (client mode): 0xa2d7a800
2026-02-12T01:51:06.419 [DEBUG] [Thread-139520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:51:06.439 [DEBUG] [Thread-139520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:51:06.439 [INFO] [Thread-139520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:51:06.442 [DEBUG] [Thread-139520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:51:06.442 [DEBUG] [Thread-139520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:51:06.442 [DEBUG] [Thread-139520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] client lang: <none>
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] server lang: <none>
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] kex follows: False
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:51:06.443 [DEBUG] [Thread-139520] [transport.py] [_log()] Compression: none
2026-02-12T01:51:06.444 [DEBUG] [Thread-139520] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:51:06.460 [DEBUG] [Thread-139520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:51:06.461 [DEBUG] [Thread-139520] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:51:06.461 [DEBUG] [Thread-139520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:51:06.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:51:06.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:51:06.462 [DEBUG] [Thread-139520] [transport.py] [_log()] userauth is OK
2026-02-12T01:51:06.462 [DEBUG] [Thread-139520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:51:06.462 [DEBUG] [Thread-139520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:51:06.462 [DEBUG] [Thread-139520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:51:06.462 [DEBUG] [Thread-139520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:51:06.480 [INFO] [Thread-139520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:51:06.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:51:07.117 [DEBUG] [Thread-139520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:51:07.118 [DEBUG] [Thread-139520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:51:07.118 [DEBUG] [Thread-139520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:51:07.158 [DEBUG] [Thread-139520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:51:07.159 [DEBUG] [Thread-139520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:51:07.162 [DEBUG] [Thread-139520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:51:07.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:51:07.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:51:07.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:51:07.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:51:07.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:51:07.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:51:07.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:51:07.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:51:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:51:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.993188 -999.00  +12.70  11.45     92  +11.50 1 3 1 3 1     0    0 1.14 -4.09 Z..sw 11.4 11.4 179.2 17.3 14.4 -5.4 14.2 -5.5 14.1 -5.7 14.4 -5.9
2026-02-12T01:51:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:51:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:51:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.993188
2026-02-12T01:51:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:51:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:51:07.193 [DEBUG] [Thread-139520] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:51:07.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:51:07.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:51:07.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:51:07.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:50:37', tmtdew=0.95, humidity=93.9, cloud=0.0, wind=21.67, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:50:11.443', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:47:00')
2026-02-12T01:51:07.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:51:07.291 [DEBUG] [Thread-139523] [transport.py] [_log()] starting thread (client mode): 0xa2d78850
2026-02-12T01:51:07.291 [DEBUG] [Thread-139523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:51:07.306 [DEBUG] [Thread-139523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:51:07.306 [INFO] [Thread-139523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:51:07.313 [DEBUG] [Thread-139523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:51:07.313 [DEBUG] [Thread-139523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:51:07.313 [DEBUG] [Thread-139523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:51:07.313 [DEBUG] [Thread-139523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:07.313 [DEBUG] [Thread-139523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:07.313 [DEBUG] [Thread-139523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:07.313 [DEBUG] [Thread-139523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] client lang: <none>
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] server lang: <none>
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] kex follows: False
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] Compression: none
2026-02-12T01:51:07.314 [DEBUG] [Thread-139523] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:51:07.369 [DEBUG] [Thread-139523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:51:07.369 [DEBUG] [Thread-139523] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:51:07.369 [DEBUG] [Thread-139523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:51:07.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:51:07.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:51:07.426 [DEBUG] [Thread-139523] [transport.py] [_log()] userauth is OK
2026-02-12T01:51:07.426 [DEBUG] [Thread-139523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:51:07.426 [DEBUG] [Thread-139523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:51:07.426 [DEBUG] [Thread-139523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:51:07.426 [DEBUG] [Thread-139523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:51:07.446 [INFO] [Thread-139523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:51:07.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:51:07.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:51:08.267 [DEBUG] [Thread-139523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:51:08.268 [DEBUG] [Thread-139523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:51:08.315 [DEBUG] [Thread-139523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:51:08.315 [DEBUG] [Thread-139523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:51:08.324 [DEBUG] [Thread-139523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:51:08.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:51:08.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')
2026-02-12T01:51:08.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:51:08.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:51:08.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:51:08.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:51:08.358 [DEBUG] [Thread-139523] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:51:15.000 [DEBUG] [Thread-139525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:51:23.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:51:23.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:51:30.064 [DEBUG] [Thread-139526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:51:38.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:51:38.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:51:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:51:40.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 51, 12), 0.52, 96.45, 0.0, 16.3, 12.58, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:51:40.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:51:12
2026-02-12T01:51:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:51:40.655 [DEBUG] [Thread-139527] [transport.py] [_log()] starting thread (client mode): 0xa57e33d0
2026-02-12T01:51:40.655 [DEBUG] [Thread-139527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:51:40.676 [DEBUG] [Thread-139527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:51:40.676 [INFO] [Thread-139527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:51:40.678 [DEBUG] [Thread-139527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] client lang: <none>
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] server lang: <none>
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] kex follows: False
2026-02-12T01:51:40.679 [DEBUG] [Thread-139527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:51:40.680 [DEBUG] [Thread-139527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:51:40.680 [DEBUG] [Thread-139527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:51:40.680 [DEBUG] [Thread-139527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:51:40.680 [DEBUG] [Thread-139527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:51:40.680 [DEBUG] [Thread-139527] [transport.py] [_log()] Compression: none
2026-02-12T01:51:40.680 [DEBUG] [Thread-139527] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:51:40.697 [DEBUG] [Thread-139527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:51:40.698 [DEBUG] [Thread-139527] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:51:40.698 [DEBUG] [Thread-139527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:51:40.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:51:40.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:51:40.701 [DEBUG] [Thread-139527] [transport.py] [_log()] userauth is OK
2026-02-12T01:51:40.701 [DEBUG] [Thread-139527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:51:40.701 [DEBUG] [Thread-139527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:51:40.701 [DEBUG] [Thread-139527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:51:40.702 [DEBUG] [Thread-139527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:51:40.726 [INFO] [Thread-139527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:51:40.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:51:41.338 [DEBUG] [Thread-139527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:51:41.338 [DEBUG] [Thread-139527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:51:41.338 [DEBUG] [Thread-139527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:51:41.380 [DEBUG] [Thread-139527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:51:41.380 [DEBUG] [Thread-139527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:51:41.383 [DEBUG] [Thread-139527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:51:41.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:51:41.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:51:41.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:51:41.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:51:41.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:51:41.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:51:41.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:51:41.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:51:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:51:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.993883 -999.00  +12.60  15.50     92  +11.50 1 3 1 3 1     0    0 1.12 -4.94 ..... 15.5 15.5 182.2 18.0 14.4 -5.2 14.2 -4.8 14.2 -5.8 14.4 -6.0
2026-02-12T01:51:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:51:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:51:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.993883
2026-02-12T01:51:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:51:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:51:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:51:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:51:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:51:41.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:51:12', tmtdew=0.52, humidity=96.45, cloud=0.0, wind=16.3, temperature=12.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:51:11.491', atlas_cloud=3, atlas_rain=1, zp_data=[2.630749999999999, nan, 2.73925, 2.466499999999999, 2.534, nan, nan, nan, nan, nan, 3.0642499999999995, 2.8484999999999996, 2.5090000000000003, 2.401249999999999, 2.575499999999999, nan, nan, nan, nan, nan, 2.464999999999999, 2.0847499999999988, 2.578750000000001, nan, nan, nan, nan, 2.0255, 1.8985000000000003, 1.0010000000000012, 1.4460000000000006, nan, nan], zp_timestamp='2026-02-11T23:47:00')
2026-02-12T01:51:41.410 [DEBUG] [Thread-139527] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:51:41.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:51:41.507 [DEBUG] [Thread-139530] [transport.py] [_log()] starting thread (client mode): 0xa57e36a0
2026-02-12T01:51:41.508 [DEBUG] [Thread-139530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:51:41.522 [DEBUG] [Thread-139530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:51:41.522 [INFO] [Thread-139530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:51:41.531 [DEBUG] [Thread-139530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:51:41.532 [DEBUG] [Thread-139530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:51:41.532 [DEBUG] [Thread-139530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:51:41.532 [DEBUG] [Thread-139530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:41.532 [DEBUG] [Thread-139530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:51:41.532 [DEBUG] [Thread-139530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:41.532 [DEBUG] [Thread-139530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] client lang: <none>
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] server lang: <none>
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] kex follows: False
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:51:41.533 [DEBUG] [Thread-139530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:51:41.534 [DEBUG] [Thread-139530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:51:41.534 [DEBUG] [Thread-139530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:51:41.534 [DEBUG] [Thread-139530] [transport.py] [_log()] Compression: none
2026-02-12T01:51:41.534 [DEBUG] [Thread-139530] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:51:41.588 [DEBUG] [Thread-139530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:51:41.589 [DEBUG] [Thread-139530] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:51:41.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:51:41.590 [DEBUG] [Thread-139530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:51:41.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:51:41.645 [DEBUG] [Thread-139530] [transport.py] [_log()] userauth is OK
2026-02-12T01:51:41.646 [DEBUG] [Thread-139530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:51:41.646 [DEBUG] [Thread-139530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:51:41.646 [DEBUG] [Thread-139530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:51:41.646 [DEBUG] [Thread-139530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:51:41.669 [INFO] [Thread-139530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:51:41.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:51:41.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:51:42.464 [DEBUG] [Thread-139530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:51:42.464 [DEBUG] [Thread-139530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:51:42.512 [DEBUG] [Thread-139530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:51:42.512 [DEBUG] [Thread-139530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:51:42.524 [DEBUG] [Thread-139530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:51:42.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:51:42.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:51:42.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:51:42.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:51:42.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:51:42.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:51:42.565 [DEBUG] [Thread-139530] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:51:45.110 [DEBUG] [Thread-139532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:00.174 [DEBUG] [Thread-139533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:03.101 [DEBUG] [Thread-139534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:12.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:52:12.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:52:12.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:52:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 51, 48), 0.52, 96.45, 0.0, 18.05, 12.56, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:52:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:51:48
2026-02-12T01:52:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:52:14.971 [DEBUG] [Thread-139535] [transport.py] [_log()] starting thread (client mode): 0xa2d79930
2026-02-12T01:52:14.971 [DEBUG] [Thread-139535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:52:14.991 [DEBUG] [Thread-139535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:52:14.991 [INFO] [Thread-139535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:52:14.994 [DEBUG] [Thread-139535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:52:14.994 [DEBUG] [Thread-139535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] client lang: <none>
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] server lang: <none>
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] kex follows: False
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:52:14.995 [DEBUG] [Thread-139535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:52:14.996 [DEBUG] [Thread-139535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:52:14.996 [DEBUG] [Thread-139535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:52:14.996 [DEBUG] [Thread-139535] [transport.py] [_log()] Compression: none
2026-02-12T01:52:14.996 [DEBUG] [Thread-139535] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:52:15.014 [DEBUG] [Thread-139535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:52:15.015 [DEBUG] [Thread-139535] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:52:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:52:15.016 [DEBUG] [Thread-139535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:52:15.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:52:15.018 [DEBUG] [Thread-139535] [transport.py] [_log()] userauth is OK
2026-02-12T01:52:15.018 [DEBUG] [Thread-139535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:52:15.018 [DEBUG] [Thread-139535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:52:15.018 [DEBUG] [Thread-139535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:52:15.018 [DEBUG] [Thread-139535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:52:15.045 [INFO] [Thread-139535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:52:15.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:52:15.219 [DEBUG] [Thread-139537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:15.644 [DEBUG] [Thread-139535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:52:15.645 [DEBUG] [Thread-139535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:52:15.645 [DEBUG] [Thread-139535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:52:15.685 [DEBUG] [Thread-139535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:52:15.686 [DEBUG] [Thread-139535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:52:15.689 [DEBUG] [Thread-139535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:52:15.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:52:15.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:52:15.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:52:15.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:52:15.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:52:15.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:52:15.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:52:15.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:52:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:52:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.994230 -999.00  +12.60  13.05     92  +11.40 1 3 1 3 1     0    0 1.11 -4.59 ..... 13.1 13.1 182.6 17.0 14.4 -4.7 14.2 -5.2 14.1 -4.8 14.4 -4.8
2026-02-12T01:52:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:52:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:52:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.994230
2026-02-12T01:52:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:52:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:52:15.714 [DEBUG] [Thread-139535] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:52:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:52:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:52:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:52:15.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:51:48', tmtdew=0.52, humidity=96.45, cloud=0.0, wind=18.05, temperature=12.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:51:41.472', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:52:15.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:52:15.818 [DEBUG] [Thread-139539] [transport.py] [_log()] starting thread (client mode): 0xa2d7baf0
2026-02-12T01:52:15.818 [DEBUG] [Thread-139539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:52:15.837 [DEBUG] [Thread-139539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:52:15.837 [INFO] [Thread-139539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] client lang: <none>
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] server lang: <none>
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] kex follows: False
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:52:15.847 [DEBUG] [Thread-139539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:52:15.848 [DEBUG] [Thread-139539] [transport.py] [_log()] Compression: none
2026-02-12T01:52:15.848 [DEBUG] [Thread-139539] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:52:15.904 [DEBUG] [Thread-139539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:52:15.905 [DEBUG] [Thread-139539] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:52:15.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:52:15.906 [DEBUG] [Thread-139539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:52:15.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:52:15.960 [DEBUG] [Thread-139539] [transport.py] [_log()] userauth is OK
2026-02-12T01:52:15.961 [DEBUG] [Thread-139539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:52:15.961 [DEBUG] [Thread-139539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:52:15.961 [DEBUG] [Thread-139539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:52:15.961 [DEBUG] [Thread-139539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:52:15.980 [INFO] [Thread-139539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:52:15.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:52:15.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:52:16.810 [DEBUG] [Thread-139539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:52:16.811 [DEBUG] [Thread-139539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:52:17.029 [DEBUG] [Thread-139539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:52:17.029 [DEBUG] [Thread-139539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:52:17.039 [DEBUG] [Thread-139539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:52:17.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:52:17.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:52:17.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:52:17.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:52:17.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:52:17.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:52:17.084 [DEBUG] [Thread-139539] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:52:23.685 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:23.686 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:30.254 [DEBUG] [Thread-139541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:45.314 [DEBUG] [Thread-139542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:52:47.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:52:47.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:52:47.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:52:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 52, 23), 0.52, 96.45, 0.0, 19.59, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:52:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:52:23
2026-02-12T01:52:49.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:52:49.508 [DEBUG] [Thread-139543] [transport.py] [_log()] starting thread (client mode): 0xa57c1750
2026-02-12T01:52:49.508 [DEBUG] [Thread-139543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:52:49.528 [DEBUG] [Thread-139543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:52:49.529 [INFO] [Thread-139543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:52:49.530 [DEBUG] [Thread-139543] [transport.py] [_log()] client lang: <none>
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] server lang: <none>
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] kex follows: False
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] Compression: none
2026-02-12T01:52:49.531 [DEBUG] [Thread-139543] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:52:49.549 [DEBUG] [Thread-139543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:52:49.549 [DEBUG] [Thread-139543] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:52:49.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:52:49.550 [DEBUG] [Thread-139543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:52:49.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:52:49.552 [DEBUG] [Thread-139543] [transport.py] [_log()] userauth is OK
2026-02-12T01:52:49.552 [DEBUG] [Thread-139543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:52:49.552 [DEBUG] [Thread-139543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:52:49.552 [DEBUG] [Thread-139543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:52:49.553 [DEBUG] [Thread-139543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:52:49.569 [INFO] [Thread-139543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:52:49.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:52:50.228 [DEBUG] [Thread-139543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:52:50.229 [DEBUG] [Thread-139543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:52:50.229 [DEBUG] [Thread-139543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:52:50.269 [DEBUG] [Thread-139543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:52:50.269 [DEBUG] [Thread-139543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:52:50.272 [DEBUG] [Thread-139543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:52:50.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:52:50.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:52:50.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:52:50.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:52:50.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:52:50.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:52:50.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:52:50.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:52:50.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:52:50.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.994577 -999.00  +12.60  15.01     92  +11.40 1 3 1 3 1     0    0 1.12 -4.75 ..... 15.0 15.0 187.0 18.1 14.5 -5.0 14.2 -4.9 14.1 -4.9 14.4 -5.1
2026-02-12T01:52:50.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:52:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:52:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.994577
2026-02-12T01:52:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:52:50.303 [DEBUG] [Thread-139543] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:52:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:52:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:52:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:52:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:52:50.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:52:23', tmtdew=0.52, humidity=96.45, cloud=0.0, wind=19.59, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:52:11.453', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:52:50.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:52:50.405 [DEBUG] [Thread-139546] [transport.py] [_log()] starting thread (client mode): 0xa5772590
2026-02-12T01:52:50.406 [DEBUG] [Thread-139546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:52:50.420 [DEBUG] [Thread-139546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:52:50.420 [INFO] [Thread-139546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:52:50.428 [DEBUG] [Thread-139546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:52:50.428 [DEBUG] [Thread-139546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:52:50.428 [DEBUG] [Thread-139546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:52:50.428 [DEBUG] [Thread-139546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] client lang: <none>
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] server lang: <none>
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] kex follows: False
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] Compression: none
2026-02-12T01:52:50.429 [DEBUG] [Thread-139546] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:52:50.494 [DEBUG] [Thread-139546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:52:50.495 [DEBUG] [Thread-139546] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:52:50.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:52:50.496 [DEBUG] [Thread-139546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:52:50.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:52:50.549 [DEBUG] [Thread-139546] [transport.py] [_log()] userauth is OK
2026-02-12T01:52:50.549 [DEBUG] [Thread-139546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:52:50.549 [DEBUG] [Thread-139546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:52:50.549 [DEBUG] [Thread-139546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:52:50.549 [DEBUG] [Thread-139546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:52:50.571 [INFO] [Thread-139546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:52:50.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:52:50.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:52:51.422 [DEBUG] [Thread-139546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:52:51.422 [DEBUG] [Thread-139546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:52:51.470 [DEBUG] [Thread-139546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:52:51.470 [DEBUG] [Thread-139546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:52:51.479 [DEBUG] [Thread-139546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:52:51.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:52:51.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:52:51.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:52:51.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:52:51.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:52:51.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:52:51.513 [DEBUG] [Thread-139546] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:53:00.350 [DEBUG] [Thread-139548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:53:03.181 [DEBUG] [Thread-139549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:53:15.412 [DEBUG] [Thread-139550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:53:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:53:21.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:53:21.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:53:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 52, 59), 0.53, 96.43, 0.0, 16.69, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:53:23.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:52:59
2026-02-12T01:53:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:53:23.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:53:23.891 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:53:23.894 [DEBUG] [Thread-139551] [transport.py] [_log()] starting thread (client mode): 0xa2d7b580
2026-02-12T01:53:23.894 [DEBUG] [Thread-139551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:53:23.913 [DEBUG] [Thread-139551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:53:23.914 [INFO] [Thread-139551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] client lang: <none>
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] server lang: <none>
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] kex follows: False
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:53:23.917 [DEBUG] [Thread-139551] [transport.py] [_log()] Compression: none
2026-02-12T01:53:23.918 [DEBUG] [Thread-139551] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:53:23.936 [DEBUG] [Thread-139551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:53:23.936 [DEBUG] [Thread-139551] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:53:23.937 [DEBUG] [Thread-139551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:53:23.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:53:23.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:53:23.938 [DEBUG] [Thread-139551] [transport.py] [_log()] userauth is OK
2026-02-12T01:53:23.938 [DEBUG] [Thread-139551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:53:23.939 [DEBUG] [Thread-139551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:53:23.939 [DEBUG] [Thread-139551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:53:23.939 [DEBUG] [Thread-139551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:53:23.953 [INFO] [Thread-139551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:53:23.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:53:24.773 [DEBUG] [Thread-139551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:53:24.773 [DEBUG] [Thread-139551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:53:24.774 [DEBUG] [Thread-139551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:53:24.815 [DEBUG] [Thread-139551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:53:24.815 [DEBUG] [Thread-139551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:53:24.820 [DEBUG] [Thread-139551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:53:24.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:53:24.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:53:24.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:53:24.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:53:24.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:53:24.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:53:24.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:53:24.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:53:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:53:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.994924 -999.00  +12.60  14.88     92  +11.40 1 3 1 3 1     0    0 1.12 -4.86 ..... 14.9 14.9 180.8 16.2 14.5 -4.8 14.2 -4.6 14.1 -4.9 14.5 -5.1
2026-02-12T01:53:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:53:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:53:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.994924
2026-02-12T01:53:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:53:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:53:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:53:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:53:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:53:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:52:59', tmtdew=0.53, humidity=96.43, cloud=0.0, wind=16.69, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:52:41.434', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:53:24.850 [DEBUG] [Thread-139551] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:53:24.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:53:24.951 [DEBUG] [Thread-139554] [transport.py] [_log()] starting thread (client mode): 0x9eb068c0
2026-02-12T01:53:24.952 [DEBUG] [Thread-139554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:53:24.966 [DEBUG] [Thread-139554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:53:24.966 [INFO] [Thread-139554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] client lang: <none>
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] server lang: <none>
2026-02-12T01:53:24.974 [DEBUG] [Thread-139554] [transport.py] [_log()] kex follows: False
2026-02-12T01:53:24.975 [DEBUG] [Thread-139554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:53:24.975 [DEBUG] [Thread-139554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:53:24.975 [DEBUG] [Thread-139554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:53:24.975 [DEBUG] [Thread-139554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:53:24.975 [DEBUG] [Thread-139554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:53:24.975 [DEBUG] [Thread-139554] [transport.py] [_log()] Compression: none
2026-02-12T01:53:24.975 [DEBUG] [Thread-139554] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:53:25.030 [DEBUG] [Thread-139554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:53:25.031 [DEBUG] [Thread-139554] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:53:25.031 [DEBUG] [Thread-139554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:53:25.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:53:25.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:53:25.091 [DEBUG] [Thread-139554] [transport.py] [_log()] userauth is OK
2026-02-12T01:53:25.091 [DEBUG] [Thread-139554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:53:25.091 [DEBUG] [Thread-139554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:53:25.091 [DEBUG] [Thread-139554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:53:25.091 [DEBUG] [Thread-139554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:53:25.110 [INFO] [Thread-139554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:53:25.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:53:25.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:53:25.944 [DEBUG] [Thread-139554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:53:25.944 [DEBUG] [Thread-139554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:53:25.992 [DEBUG] [Thread-139554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:53:25.992 [DEBUG] [Thread-139554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:53:26.001 [DEBUG] [Thread-139554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:53:26.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:53:26.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')
2026-02-12T01:53:26.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:53:26.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:53:26.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:53:26.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:53:26.038 [DEBUG] [Thread-139554] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:53:30.453 [DEBUG] [Thread-139556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:53:45.516 [DEBUG] [Thread-139557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:53:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:53:56.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:53:56.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
2026-02-12T01:53:57.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 53, 35), 0.95, 93.9, 0.0, 17.26, 12.9, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:53:57.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:53:35
2026-02-12T01:53:58.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:53:58.411 [DEBUG] [Thread-139558] [transport.py] [_log()] starting thread (client mode): 0xa2d7b310
2026-02-12T01:53:58.411 [DEBUG] [Thread-139558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:53:58.431 [DEBUG] [Thread-139558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:53:58.431 [INFO] [Thread-139558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:53:58.434 [DEBUG] [Thread-139558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:53:58.434 [DEBUG] [Thread-139558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:53:58.434 [DEBUG] [Thread-139558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] client lang: <none>
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] server lang: <none>
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] kex follows: False
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:53:58.435 [DEBUG] [Thread-139558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:53:58.436 [DEBUG] [Thread-139558] [transport.py] [_log()] Compression: none
2026-02-12T01:53:58.436 [DEBUG] [Thread-139558] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:53:58.454 [DEBUG] [Thread-139558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:53:58.455 [DEBUG] [Thread-139558] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:53:58.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:53:58.457 [DEBUG] [Thread-139558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:53:58.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:53:58.459 [DEBUG] [Thread-139558] [transport.py] [_log()] userauth is OK
2026-02-12T01:53:58.459 [DEBUG] [Thread-139558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:53:58.460 [DEBUG] [Thread-139558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:53:58.460 [DEBUG] [Thread-139558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:53:58.460 [DEBUG] [Thread-139558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:53:58.475 [INFO] [Thread-139558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:53:58.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:53:59.113 [DEBUG] [Thread-139558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:53:59.113 [DEBUG] [Thread-139558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:53:59.113 [DEBUG] [Thread-139558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:53:59.154 [DEBUG] [Thread-139558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:53:59.155 [DEBUG] [Thread-139558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:53:59.158 [DEBUG] [Thread-139558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:53:59.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:53:59.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:53:59.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:53:59.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:53:59.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:53:59.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:53:59.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:53:59.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:53:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:53:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.995272 -999.00  +12.60  12.58     92  +11.40 1 3 1 3 1     0    0 1.10 -5.01 ..... 12.6 12.6 192.4 16.3 14.5 -4.4 14.2 -5.0 14.2 -4.8 14.4 -4.7
2026-02-12T01:53:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:53:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:53:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.995272
2026-02-12T01:53:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:53:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:53:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:53:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:53:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:53:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:53:35', tmtdew=0.95, humidity=93.9, cloud=0.0, wind=17.26, temperature=12.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:53:11.501', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:53:59.186 [DEBUG] [Thread-139558] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:53:59.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:53:59.282 [DEBUG] [Thread-139561] [transport.py] [_log()] starting thread (client mode): 0xa2d78760
2026-02-12T01:53:59.282 [DEBUG] [Thread-139561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:53:59.299 [DEBUG] [Thread-139561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:53:59.299 [INFO] [Thread-139561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:53:59.306 [DEBUG] [Thread-139561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] client lang: <none>
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] server lang: <none>
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] kex follows: False
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:53:59.307 [DEBUG] [Thread-139561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:53:59.308 [DEBUG] [Thread-139561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:53:59.308 [DEBUG] [Thread-139561] [transport.py] [_log()] Compression: none
2026-02-12T01:53:59.308 [DEBUG] [Thread-139561] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:53:59.367 [DEBUG] [Thread-139561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:53:59.368 [DEBUG] [Thread-139561] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:53:59.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:53:59.369 [DEBUG] [Thread-139561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:53:59.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:53:59.424 [DEBUG] [Thread-139561] [transport.py] [_log()] userauth is OK
2026-02-12T01:53:59.424 [DEBUG] [Thread-139561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:53:59.424 [DEBUG] [Thread-139561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:53:59.425 [DEBUG] [Thread-139561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:53:59.425 [DEBUG] [Thread-139561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:53:59.443 [INFO] [Thread-139561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:53:59.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:53:59.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:54:00.258 [DEBUG] [Thread-139561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:54:00.258 [DEBUG] [Thread-139561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:54:00.306 [DEBUG] [Thread-139561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:54:00.306 [DEBUG] [Thread-139561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:54:00.316 [DEBUG] [Thread-139561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:54:00.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:54: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')
2026-02-12T01:54:00.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:54:00.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:54:00.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:54:00.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:54:00.352 [DEBUG] [Thread-139561] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:54:00.564 [DEBUG] [Thread-139563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:54:03.265 [DEBUG] [Thread-139564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:54:15.619 [DEBUG] [Thread-139565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:54:24.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:54:24.094 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:54:30.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:54:30.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:54:30.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:54:30.659 [DEBUG] [Thread-139566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:54:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 54, 11), 0.52, 96.45, 0.0, 16.41, 12.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:54:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:54:11
2026-02-12T01:54:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:54:32.698 [DEBUG] [Thread-139567] [transport.py] [_log()] starting thread (client mode): 0xa2dc3f40
2026-02-12T01:54:32.698 [DEBUG] [Thread-139567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:54:32.718 [DEBUG] [Thread-139567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:54:32.718 [INFO] [Thread-139567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] client lang: <none>
2026-02-12T01:54:32.721 [DEBUG] [Thread-139567] [transport.py] [_log()] server lang: <none>
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] kex follows: False
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] Compression: none
2026-02-12T01:54:32.722 [DEBUG] [Thread-139567] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:54:32.742 [DEBUG] [Thread-139567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:54:32.742 [DEBUG] [Thread-139567] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:54:32.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:54:32.743 [DEBUG] [Thread-139567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:54:32.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:54:32.745 [DEBUG] [Thread-139567] [transport.py] [_log()] userauth is OK
2026-02-12T01:54:32.746 [DEBUG] [Thread-139567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:54:32.746 [DEBUG] [Thread-139567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:54:32.746 [DEBUG] [Thread-139567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:54:32.746 [DEBUG] [Thread-139567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:54:32.770 [INFO] [Thread-139567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:54:32.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:54:33.360 [DEBUG] [Thread-139567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:54:33.360 [DEBUG] [Thread-139567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:54:33.361 [DEBUG] [Thread-139567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:54:33.401 [DEBUG] [Thread-139567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:54:33.401 [DEBUG] [Thread-139567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:54:33.404 [DEBUG] [Thread-139567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:54:33.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:54:33.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:54:33.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:54:33.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:54:33.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:54:33.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:54:33.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:54:33.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:54:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:54:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.995619 -999.00  +12.60  10.35     92  +11.50 1 3 1 3 1     0    0 1.09 -5.29 ..... 10.3 10.3 175.0 14.9 14.5 -4.9 14.2 -4.9 14.2 -4.9 14.5 -4.9
2026-02-12T01:54:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:54:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:54:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.995619
2026-02-12T01:54:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:54:33.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:54:33.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:54:33.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:54:33.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:54:33.437 [DEBUG] [Thread-139567] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:54:33.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:54:11', tmtdew=0.52, humidity=96.45, cloud=0.0, wind=16.41, temperature=12.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:53:41.482', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:54:33.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:54:33.536 [DEBUG] [Thread-139570] [transport.py] [_log()] starting thread (client mode): 0xa2d9d780
2026-02-12T01:54:33.536 [DEBUG] [Thread-139570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:54:33.551 [DEBUG] [Thread-139570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:54:33.552 [INFO] [Thread-139570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:54:33.560 [DEBUG] [Thread-139570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:54:33.560 [DEBUG] [Thread-139570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:54:33.560 [DEBUG] [Thread-139570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:54:33.560 [DEBUG] [Thread-139570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:54:33.560 [DEBUG] [Thread-139570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] client lang: <none>
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] server lang: <none>
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] kex follows: False
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:54:33.561 [DEBUG] [Thread-139570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:54:33.562 [DEBUG] [Thread-139570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:54:33.562 [DEBUG] [Thread-139570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:54:33.562 [DEBUG] [Thread-139570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:54:33.562 [DEBUG] [Thread-139570] [transport.py] [_log()] Compression: none
2026-02-12T01:54:33.562 [DEBUG] [Thread-139570] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:54:33.620 [DEBUG] [Thread-139570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:54:33.621 [DEBUG] [Thread-139570] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:54:33.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:54:33.622 [DEBUG] [Thread-139570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:54:33.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:54:33.676 [DEBUG] [Thread-139570] [transport.py] [_log()] userauth is OK
2026-02-12T01:54:33.677 [DEBUG] [Thread-139570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:54:33.677 [DEBUG] [Thread-139570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:54:33.677 [DEBUG] [Thread-139570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:54:33.677 [DEBUG] [Thread-139570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:54:33.698 [INFO] [Thread-139570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:54:33.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:54:33.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:54:34.488 [DEBUG] [Thread-139570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:54:34.489 [DEBUG] [Thread-139570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:54:34.537 [DEBUG] [Thread-139570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:54:34.537 [DEBUG] [Thread-139570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:54:34.548 [DEBUG] [Thread-139570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:54:34.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:54:34.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:54:34.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
2026-02-12T01:54:34.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:54:34.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:54:34.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:54:34.587 [DEBUG] [Thread-139570] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:54:45.696 [DEBUG] [Thread-139572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:00.754 [DEBUG] [Thread-139573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:03.353 [DEBUG] [Thread-139574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:55:04.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:55:04.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:55:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 54, 45), 0.52, 96.48, 0.0, 18.32, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:55:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:54:45
2026-02-12T01:55:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:55:07.039 [DEBUG] [Thread-139575] [transport.py] [_log()] starting thread (client mode): 0xa2d79c90
2026-02-12T01:55:07.039 [DEBUG] [Thread-139575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:55:07.060 [DEBUG] [Thread-139575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:55:07.060 [INFO] [Thread-139575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:55:07.063 [DEBUG] [Thread-139575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] client lang: <none>
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] server lang: <none>
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] kex follows: False
2026-02-12T01:55:07.064 [DEBUG] [Thread-139575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:55:07.065 [DEBUG] [Thread-139575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:55:07.065 [DEBUG] [Thread-139575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:55:07.065 [DEBUG] [Thread-139575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:55:07.065 [DEBUG] [Thread-139575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:55:07.065 [DEBUG] [Thread-139575] [transport.py] [_log()] Compression: none
2026-02-12T01:55:07.065 [DEBUG] [Thread-139575] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:55:07.082 [DEBUG] [Thread-139575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:55:07.083 [DEBUG] [Thread-139575] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:55:07.083 [DEBUG] [Thread-139575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:55:07.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:55:07.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:55:07.085 [DEBUG] [Thread-139575] [transport.py] [_log()] userauth is OK
2026-02-12T01:55:07.085 [DEBUG] [Thread-139575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:55:07.085 [DEBUG] [Thread-139575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:55:07.086 [DEBUG] [Thread-139575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:55:07.086 [DEBUG] [Thread-139575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:55:07.111 [INFO] [Thread-139575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:55:07.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:55:15.791 [DEBUG] [Thread-139577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:17.220 [DEBUG] [Thread-139575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:55:17.220 [DEBUG] [Thread-139575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:55:17.221 [DEBUG] [Thread-139575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:55:17.261 [DEBUG] [Thread-139575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:55:17.262 [DEBUG] [Thread-139575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:55:17.264 [DEBUG] [Thread-139575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:55:17.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:55:17.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:55:17.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:55:17.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:55:17.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:55:17.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:55:17.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:55:17.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:55:17.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:55:17.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.995966 -999.00  +12.70  13.41     92  +11.50 1 3 1 3 1     0    0 1.06 -6.15 ..... 13.4 13.4 175.2 14.8 14.5 -4.8 14.3 -4.5 14.2 -5.2 14.5 -5.6
2026-02-12T01:55:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:55:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:55:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.995966
2026-02-12T01:55:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:55:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:55:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:55:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:55:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:55:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:54:45', tmtdew=0.52, humidity=96.48, cloud=0.0, wind=18.32, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:54:11.462', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:55:17.393 [DEBUG] [Thread-139575] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:55:17.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:55:17.490 [DEBUG] [Thread-139579] [transport.py] [_log()] starting thread (client mode): 0x9eb062f0
2026-02-12T01:55:17.490 [DEBUG] [Thread-139579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:55:17.505 [DEBUG] [Thread-139579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:55:17.505 [INFO] [Thread-139579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:55:17.512 [DEBUG] [Thread-139579] [transport.py] [_log()] client lang: <none>
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] server lang: <none>
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] kex follows: False
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] Compression: none
2026-02-12T01:55:17.513 [DEBUG] [Thread-139579] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:55:17.569 [DEBUG] [Thread-139579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:55:17.570 [DEBUG] [Thread-139579] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:55:17.570 [DEBUG] [Thread-139579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:55:17.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:55:17.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:55:17.627 [DEBUG] [Thread-139579] [transport.py] [_log()] userauth is OK
2026-02-12T01:55:17.627 [DEBUG] [Thread-139579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:55:17.628 [DEBUG] [Thread-139579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:55:17.628 [DEBUG] [Thread-139579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:55:17.628 [DEBUG] [Thread-139579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:55:17.647 [INFO] [Thread-139579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:55:17.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:55:17.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:55:18.454 [DEBUG] [Thread-139579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:55:18.455 [DEBUG] [Thread-139579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:55:18.503 [DEBUG] [Thread-139579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:55:18.503 [DEBUG] [Thread-139579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:55:18.513 [DEBUG] [Thread-139579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:55:18.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:55:18.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:55:18.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:55:18.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:55:18.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:55:18.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:55:18.550 [DEBUG] [Thread-139579] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:55:24.299 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:24.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:30.829 [DEBUG] [Thread-139581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:45.878 [DEBUG] [Thread-139582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:55:48.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:55:48.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:55:48.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:55:50.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 55, 21), 0.52, 96.48, 0.0, 19.3, 12.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:55:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:55:21
2026-02-12T01:55:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:55:50.905 [DEBUG] [Thread-139583] [transport.py] [_log()] starting thread (client mode): 0xa5771570
2026-02-12T01:55:50.905 [DEBUG] [Thread-139583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:55:50.926 [DEBUG] [Thread-139583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:55:50.927 [INFO] [Thread-139583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] client lang: <none>
2026-02-12T01:55:50.930 [DEBUG] [Thread-139583] [transport.py] [_log()] server lang: <none>
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] kex follows: False
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] Compression: none
2026-02-12T01:55:50.931 [DEBUG] [Thread-139583] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:55:50.948 [DEBUG] [Thread-139583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:55:50.949 [DEBUG] [Thread-139583] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:55:50.949 [DEBUG] [Thread-139583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:55:50.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:55:50.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:55:50.951 [DEBUG] [Thread-139583] [transport.py] [_log()] userauth is OK
2026-02-12T01:55:50.952 [DEBUG] [Thread-139583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:55:50.952 [DEBUG] [Thread-139583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:55:50.952 [DEBUG] [Thread-139583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:55:50.952 [DEBUG] [Thread-139583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:55:50.988 [INFO] [Thread-139583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:55:50.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:55:51.580 [DEBUG] [Thread-139583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:55:51.581 [DEBUG] [Thread-139583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:55:51.581 [DEBUG] [Thread-139583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:55:51.622 [DEBUG] [Thread-139583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:55:51.622 [DEBUG] [Thread-139583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:55:51.625 [DEBUG] [Thread-139583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:55:51.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:55:51.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:55:51.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:55:51.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:55:51.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:55:51.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:55:51.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:55:51.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:55:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:55:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.996660 -999.00  +12.60  12.96     92  +11.50 1 3 1 3 1     0    0 1.04 -6.29 ----- 13.0 13.0 192.8 15.0 14.5 -5.0 14.3 -5.9 14.1 -4.9 14.6 -5.1
2026-02-12T01:55:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:55:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:55:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.996660
2026-02-12T01:55:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:55:51.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:55:51.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:55:51.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:55:51.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:55:51.650 [DEBUG] [Thread-139583] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:55:51.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:55:21', tmtdew=0.52, humidity=96.48, cloud=0.0, wind=19.3, temperature=12.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:55:11.424', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:55:51.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:55:51.746 [DEBUG] [Thread-139586] [transport.py] [_log()] starting thread (client mode): 0xa5770c70
2026-02-12T01:55:51.746 [DEBUG] [Thread-139586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:55:51.761 [DEBUG] [Thread-139586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:55:51.761 [INFO] [Thread-139586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:55:51.768 [DEBUG] [Thread-139586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] client lang: <none>
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] server lang: <none>
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] kex follows: False
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:55:51.769 [DEBUG] [Thread-139586] [transport.py] [_log()] Compression: none
2026-02-12T01:55:51.770 [DEBUG] [Thread-139586] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:55:51.826 [DEBUG] [Thread-139586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:55:51.826 [DEBUG] [Thread-139586] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:55:51.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:55:51.827 [DEBUG] [Thread-139586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:55:51.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:55:51.882 [DEBUG] [Thread-139586] [transport.py] [_log()] userauth is OK
2026-02-12T01:55:51.883 [DEBUG] [Thread-139586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:55:51.883 [DEBUG] [Thread-139586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:55:51.883 [DEBUG] [Thread-139586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:55:51.883 [DEBUG] [Thread-139586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:55:51.902 [INFO] [Thread-139586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:55:51.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:55:51.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:55:52.719 [DEBUG] [Thread-139586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:55:52.719 [DEBUG] [Thread-139586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:55:52.767 [DEBUG] [Thread-139586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:55:52.767 [DEBUG] [Thread-139586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:55:52.776 [DEBUG] [Thread-139586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:55:52.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:55:52.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:55:52.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:55:52.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:55:52.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:55:52.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:55:52.813 [DEBUG] [Thread-139586] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:56:00.915 [DEBUG] [Thread-139588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:56:03.431 [DEBUG] [Thread-139589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:56:15.970 [DEBUG] [Thread-139590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:56:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:56:22.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:56:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:56:24.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:56:24.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:56:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 55, 57), 0.52, 96.5, 0.0, 17.1, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:56:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:55:57
2026-02-12T01:56:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:56:25.083 [DEBUG] [Thread-139591] [transport.py] [_log()] starting thread (client mode): 0xa5771b10
2026-02-12T01:56:25.084 [DEBUG] [Thread-139591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:56:25.104 [DEBUG] [Thread-139591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:56:25.104 [INFO] [Thread-139591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:56:25.107 [DEBUG] [Thread-139591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:56:25.107 [DEBUG] [Thread-139591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:56:25.107 [DEBUG] [Thread-139591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:56:25.107 [DEBUG] [Thread-139591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] client lang: <none>
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] server lang: <none>
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] kex follows: False
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:56:25.108 [DEBUG] [Thread-139591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:56:25.117 [DEBUG] [Thread-139591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:56:25.117 [DEBUG] [Thread-139591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:56:25.117 [DEBUG] [Thread-139591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:56:25.117 [DEBUG] [Thread-139591] [transport.py] [_log()] Compression: none
2026-02-12T01:56:25.117 [DEBUG] [Thread-139591] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:56:25.128 [DEBUG] [Thread-139591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:56:25.128 [DEBUG] [Thread-139591] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:56:25.129 [DEBUG] [Thread-139591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:56:25.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:56:25.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:56:25.131 [DEBUG] [Thread-139591] [transport.py] [_log()] userauth is OK
2026-02-12T01:56:25.131 [DEBUG] [Thread-139591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:56:25.131 [DEBUG] [Thread-139591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:56:25.131 [DEBUG] [Thread-139591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:56:25.131 [DEBUG] [Thread-139591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:56:25.148 [INFO] [Thread-139591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:56:25.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:56:25.709 [DEBUG] [Thread-139591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:56:25.709 [DEBUG] [Thread-139591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:56:25.710 [DEBUG] [Thread-139591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:56:25.750 [DEBUG] [Thread-139591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:56:25.750 [DEBUG] [Thread-139591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:56:25.753 [DEBUG] [Thread-139591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:56:25.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:56:25.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:56:25.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:56:25.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:56:25.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:56:25.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:56:25.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:56:25.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:56:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:56:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.997355 -999.00  +12.60  11.15     92  +11.50 1 3 1 3 1     0    0 1.04 -6.62 ----- 11.2 11.2 186.8 14.5 14.5 -7.0 14.2 -7.4 14.2 -6.4 14.5 -7.2
2026-02-12T01:56:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:56:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:56:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.997355
2026-02-12T01:56:25.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:56:25.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:56:25.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:56:25.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:56:25.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:56:25.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:55:57', tmtdew=0.52, humidity=96.5, cloud=0.0, wind=17.1, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:56:11.472', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:56:25.787 [DEBUG] [Thread-139591] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:56:25.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:56:25.884 [DEBUG] [Thread-139594] [transport.py] [_log()] starting thread (client mode): 0xa5771210
2026-02-12T01:56:25.884 [DEBUG] [Thread-139594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:56:25.898 [DEBUG] [Thread-139594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:56:25.899 [INFO] [Thread-139594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:56:25.906 [DEBUG] [Thread-139594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] client lang: <none>
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] server lang: <none>
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] kex follows: False
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] Compression: none
2026-02-12T01:56:25.907 [DEBUG] [Thread-139594] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:56:25.971 [DEBUG] [Thread-139594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:56:25.971 [DEBUG] [Thread-139594] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:56:25.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:56:25.972 [DEBUG] [Thread-139594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:56:25.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:56:26.031 [DEBUG] [Thread-139594] [transport.py] [_log()] userauth is OK
2026-02-12T01:56:26.031 [DEBUG] [Thread-139594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:56:26.031 [DEBUG] [Thread-139594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:56:26.031 [DEBUG] [Thread-139594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:56:26.031 [DEBUG] [Thread-139594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:56:26.049 [INFO] [Thread-139594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:56:26.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:56:26.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:56:26.857 [DEBUG] [Thread-139594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:56:26.857 [DEBUG] [Thread-139594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:56:26.905 [DEBUG] [Thread-139594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:56:26.906 [DEBUG] [Thread-139594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:56:26.915 [DEBUG] [Thread-139594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:56:26.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:56:26.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:56:26.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:56:26.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:56:26.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:56:26.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:56:26.952 [DEBUG] [Thread-139594] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:56:31.007 [DEBUG] [Thread-139596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:56:46.061 [DEBUG] [Thread-139597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:56:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:56:56.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:56:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:56:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 56, 32), 0.52, 96.48, 0.0, 16.8, 12.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:56:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:56:32
2026-02-12T01:56:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:56:59.360 [DEBUG] [Thread-139598] [transport.py] [_log()] starting thread (client mode): 0xa2d78820
2026-02-12T01:56:59.360 [DEBUG] [Thread-139598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:56:59.381 [DEBUG] [Thread-139598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:56:59.381 [INFO] [Thread-139598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] client lang: <none>
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] server lang: <none>
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] kex follows: False
2026-02-12T01:56:59.383 [DEBUG] [Thread-139598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:56:59.384 [DEBUG] [Thread-139598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:56:59.384 [DEBUG] [Thread-139598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:56:59.384 [DEBUG] [Thread-139598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:56:59.384 [DEBUG] [Thread-139598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:56:59.385 [DEBUG] [Thread-139598] [transport.py] [_log()] Compression: none
2026-02-12T01:56:59.385 [DEBUG] [Thread-139598] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:56:59.400 [DEBUG] [Thread-139598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:56:59.401 [DEBUG] [Thread-139598] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:56:59.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:56:59.402 [DEBUG] [Thread-139598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:56:59.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:56:59.404 [DEBUG] [Thread-139598] [transport.py] [_log()] userauth is OK
2026-02-12T01:56:59.405 [DEBUG] [Thread-139598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:56:59.405 [DEBUG] [Thread-139598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:56:59.405 [DEBUG] [Thread-139598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:56:59.405 [DEBUG] [Thread-139598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:56:59.421 [INFO] [Thread-139598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:56:59.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:57:00.010 [DEBUG] [Thread-139598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:57:00.011 [DEBUG] [Thread-139598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:57:00.011 [DEBUG] [Thread-139598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:57:00.053 [DEBUG] [Thread-139598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:57:00.053 [DEBUG] [Thread-139598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:57:00.055 [DEBUG] [Thread-139598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:57:00.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:57:00.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:57:00.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:57:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:57:00.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:57:00.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:57:00.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:57:00.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:57:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:57:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.997702 -999.00  +12.60  16.06     92  +11.40 1 3 1 3 1     0    0 1.04 -7.10 ..... 16.1 16.1 190.8 18.9 14.5 -7.0 14.2 -7.4 14.2 -7.1 14.5 -7.4
2026-02-12T01:57:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:57:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:57:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.997702
2026-02-12T01:57:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:57:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:57:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:57:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:57:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:57:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:56:32', tmtdew=0.52, humidity=96.48, cloud=0.0, wind=16.8, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:56:41.453', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:57:00.073 [DEBUG] [Thread-139598] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:57:00.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:57:00.159 [DEBUG] [Thread-139601] [transport.py] [_log()] starting thread (client mode): 0xa57e2170
2026-02-12T01:57:00.159 [DEBUG] [Thread-139601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:57:00.174 [DEBUG] [Thread-139601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:57:00.174 [INFO] [Thread-139601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:57:00.181 [DEBUG] [Thread-139601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:57:00.181 [DEBUG] [Thread-139601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:57:00.181 [DEBUG] [Thread-139601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] client lang: <none>
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] server lang: <none>
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] kex follows: False
2026-02-12T01:57:00.182 [DEBUG] [Thread-139601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:57:00.183 [DEBUG] [Thread-139601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:57:00.183 [DEBUG] [Thread-139601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:57:00.183 [DEBUG] [Thread-139601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:57:00.183 [DEBUG] [Thread-139601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:57:00.183 [DEBUG] [Thread-139601] [transport.py] [_log()] Compression: none
2026-02-12T01:57:00.183 [DEBUG] [Thread-139601] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:57:00.239 [DEBUG] [Thread-139601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:57:00.239 [DEBUG] [Thread-139601] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:57:00.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:57:00.240 [DEBUG] [Thread-139601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:57:00.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:57:00.295 [DEBUG] [Thread-139601] [transport.py] [_log()] userauth is OK
2026-02-12T01:57:00.295 [DEBUG] [Thread-139601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:57:00.295 [DEBUG] [Thread-139601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:57:00.295 [DEBUG] [Thread-139601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:57:00.296 [DEBUG] [Thread-139601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:57:00.318 [INFO] [Thread-139601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:57:00.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:57:00.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:57:01.097 [DEBUG] [Thread-139603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:57:01.118 [DEBUG] [Thread-139601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:57:01.118 [DEBUG] [Thread-139601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:57:01.166 [DEBUG] [Thread-139601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:57:01.166 [DEBUG] [Thread-139601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:57:01.174 [DEBUG] [Thread-139601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:57:01.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:57:01.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')
2026-02-12T01:57:01.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
2026-02-12T01:57:01.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:57:01.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:57:01.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:57:01.207 [DEBUG] [Thread-139601] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:57:03.508 [DEBUG] [Thread-139604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:57:16.153 [DEBUG] [Thread-139605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:57:24.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:57:24.709 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:57:31.189 [DEBUG] [Thread-139606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:57:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:57:31.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:57:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:57:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 57, 7), 0.51, 96.52, 0.0, 14.68, 12.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:57:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:57:07
2026-02-12T01:57:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:57:33.887 [DEBUG] [Thread-139607] [transport.py] [_log()] starting thread (client mode): 0x9eb07850
2026-02-12T01:57:33.887 [DEBUG] [Thread-139607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:57:33.903 [DEBUG] [Thread-139607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:57:33.903 [INFO] [Thread-139607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:57:33.904 [DEBUG] [Thread-139607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] client lang: <none>
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] server lang: <none>
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] kex follows: False
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] Compression: none
2026-02-12T01:57:33.905 [DEBUG] [Thread-139607] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:57:33.915 [DEBUG] [Thread-139607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:57:33.916 [DEBUG] [Thread-139607] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:57:33.916 [DEBUG] [Thread-139607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:57:33.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:57:33.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:57:33.917 [DEBUG] [Thread-139607] [transport.py] [_log()] userauth is OK
2026-02-12T01:57:33.917 [DEBUG] [Thread-139607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:57:33.917 [DEBUG] [Thread-139607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:57:33.917 [DEBUG] [Thread-139607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:57:33.917 [DEBUG] [Thread-139607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:57:33.931 [INFO] [Thread-139607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:57:33.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:57:34.555 [DEBUG] [Thread-139607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:57:34.555 [DEBUG] [Thread-139607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:57:34.556 [DEBUG] [Thread-139607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:57:34.596 [DEBUG] [Thread-139607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:57:34.597 [DEBUG] [Thread-139607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:57:34.600 [DEBUG] [Thread-139607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:57:34.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:57:34.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:57:34.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:57:34.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:57:34.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:57:34.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:57:34.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:57:34.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:57:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:57:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.998049 -999.00  +12.60  14.79     92  +11.40 1 3 1 3 1     0    0 1.01 -7.61 ..... 14.8 14.8 179.2 18.0 14.5 -7.8 14.2 -7.7 14.2 -7.4 14.5 -8.1
2026-02-12T01:57:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:57:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:57:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.998049
2026-02-12T01:57:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:57:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:57:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:57:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:57:34.627 [DEBUG] [Thread-139607] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:57:34.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:57:34.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:57:07', tmtdew=0.51, humidity=96.52, cloud=0.0, wind=14.68, temperature=12.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:57:11.434', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:57:34.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:57:34.724 [DEBUG] [Thread-139610] [transport.py] [_log()] starting thread (client mode): 0xa5741c00
2026-02-12T01:57:34.724 [DEBUG] [Thread-139610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:57:34.738 [DEBUG] [Thread-139610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:57:34.739 [INFO] [Thread-139610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:57:34.746 [DEBUG] [Thread-139610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] client lang: <none>
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] server lang: <none>
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] kex follows: False
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] Compression: none
2026-02-12T01:57:34.747 [DEBUG] [Thread-139610] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:57:34.804 [DEBUG] [Thread-139610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:57:34.805 [DEBUG] [Thread-139610] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:57:34.806 [DEBUG] [Thread-139610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:57:34.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:57:34.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:57:34.860 [DEBUG] [Thread-139610] [transport.py] [_log()] userauth is OK
2026-02-12T01:57:34.861 [DEBUG] [Thread-139610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:57:34.861 [DEBUG] [Thread-139610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:57:34.861 [DEBUG] [Thread-139610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:57:34.861 [DEBUG] [Thread-139610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:57:34.881 [INFO] [Thread-139610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:57:34.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:57:34.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:57:35.710 [DEBUG] [Thread-139610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:57:35.710 [DEBUG] [Thread-139610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:57:35.758 [DEBUG] [Thread-139610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:57:35.759 [DEBUG] [Thread-139610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:57:35.768 [DEBUG] [Thread-139610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:57:35.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:57:35.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:57:35.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:57:35.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:57:35.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:57:35.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:57:35.803 [DEBUG] [Thread-139610] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:57:46.233 [DEBUG] [Thread-139612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:58:01.288 [DEBUG] [Thread-139613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:58:03.578 [DEBUG] [Thread-139614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:58:05.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:58:05.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:58:05.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:58:07.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 57, 42), 0.51, 96.52, 0.0, 15.88, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:58:07.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:57:42
2026-02-12T01:58:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:58:08.120 [DEBUG] [Thread-139615] [transport.py] [_log()] starting thread (client mode): 0xa5742c80
2026-02-12T01:58:08.120 [DEBUG] [Thread-139615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:58:08.134 [DEBUG] [Thread-139615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:58:08.134 [INFO] [Thread-139615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:58:08.143 [DEBUG] [Thread-139615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:58:08.143 [DEBUG] [Thread-139615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] client lang: <none>
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] server lang: <none>
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] kex follows: False
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] Compression: none
2026-02-12T01:58:08.144 [DEBUG] [Thread-139615] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:58:08.157 [DEBUG] [Thread-139615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:58:08.157 [DEBUG] [Thread-139615] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:58:08.157 [DEBUG] [Thread-139615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:58:08.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:58:08.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:58:08.160 [DEBUG] [Thread-139615] [transport.py] [_log()] userauth is OK
2026-02-12T01:58:08.160 [DEBUG] [Thread-139615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:58:08.160 [DEBUG] [Thread-139615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:58:08.161 [DEBUG] [Thread-139615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:58:08.161 [DEBUG] [Thread-139615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:58:08.179 [INFO] [Thread-139615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:58:08.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:58:08.795 [DEBUG] [Thread-139615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:58:08.805 [DEBUG] [Thread-139615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:58:08.805 [DEBUG] [Thread-139615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:58:08.836 [DEBUG] [Thread-139615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:58:08.836 [DEBUG] [Thread-139615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:58:08.839 [DEBUG] [Thread-139615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:58:08.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:58:08.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:58:08.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:58:08.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:58:08.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:58:08.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:58:08.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:58:08.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:58:08.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:58:08.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.998397 -999.00  +12.60  13.96     92  +11.40 1 3 1 3 1     0    0 0.98 -7.64 ..... 14.0 14.0 185.4 18.8 14.5 -7.1 14.2 -6.9 14.2 -7.9 14.5 -8.5
2026-02-12T01:58:08.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:58:08.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:58:08.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.998397
2026-02-12T01:58:08.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:58:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:58:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:58:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:58:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:58:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:57:42', tmtdew=0.51, humidity=96.52, cloud=0.0, wind=15.88, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:57:41.501', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:58:08.862 [DEBUG] [Thread-139615] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:58:08.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:58:08.958 [DEBUG] [Thread-139618] [transport.py] [_log()] starting thread (client mode): 0xa2d78310
2026-02-12T01:58:08.958 [DEBUG] [Thread-139618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:58:08.972 [DEBUG] [Thread-139618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:58:08.972 [INFO] [Thread-139618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:58:08.981 [DEBUG] [Thread-139618] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:58:08.981 [DEBUG] [Thread-139618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:58:08.981 [DEBUG] [Thread-139618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:58:08.981 [DEBUG] [Thread-139618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:08.981 [DEBUG] [Thread-139618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:08.981 [DEBUG] [Thread-139618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] client lang: <none>
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] server lang: <none>
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] kex follows: False
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:58:08.982 [DEBUG] [Thread-139618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:58:08.983 [DEBUG] [Thread-139618] [transport.py] [_log()] Compression: none
2026-02-12T01:58:08.983 [DEBUG] [Thread-139618] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:58:09.045 [DEBUG] [Thread-139618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:58:09.045 [DEBUG] [Thread-139618] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:58:09.046 [DEBUG] [Thread-139618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:58:09.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:58:09.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:58:09.101 [DEBUG] [Thread-139618] [transport.py] [_log()] userauth is OK
2026-02-12T01:58:09.101 [DEBUG] [Thread-139618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:58:09.102 [DEBUG] [Thread-139618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:58:09.102 [DEBUG] [Thread-139618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:58:09.102 [DEBUG] [Thread-139618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:58:09.120 [INFO] [Thread-139618] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:58:09.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:58:09.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:58:09.916 [DEBUG] [Thread-139618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:58:09.917 [DEBUG] [Thread-139618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:58:09.964 [DEBUG] [Thread-139618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:58:09.964 [DEBUG] [Thread-139618] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:58:09.974 [DEBUG] [Thread-139618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:58:09.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:58:09.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:58:09.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:58:10.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:58:10.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:58:10.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:58:10.010 [DEBUG] [Thread-139618] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:58:16.326 [DEBUG] [Thread-139620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:58:24.929 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:58:24.930 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:58:31.380 [DEBUG] [Thread-139621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:58:40.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:58:40.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:58:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:58:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 58, 18), 0.52, 96.5, 0.0, 16.48, 12.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:58:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:58:18
2026-02-12T01:58:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:58:42.569 [DEBUG] [Thread-139622] [transport.py] [_log()] starting thread (client mode): 0xa5770370
2026-02-12T01:58:42.570 [DEBUG] [Thread-139622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:58:42.589 [DEBUG] [Thread-139622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:58:42.589 [INFO] [Thread-139622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:58:42.592 [DEBUG] [Thread-139622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] client lang: <none>
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] server lang: <none>
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] kex follows: False
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:58:42.593 [DEBUG] [Thread-139622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:58:42.594 [DEBUG] [Thread-139622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:58:42.594 [DEBUG] [Thread-139622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:58:42.594 [DEBUG] [Thread-139622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:58:42.594 [DEBUG] [Thread-139622] [transport.py] [_log()] Compression: none
2026-02-12T01:58:42.594 [DEBUG] [Thread-139622] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:58:42.612 [DEBUG] [Thread-139622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:58:42.614 [DEBUG] [Thread-139622] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:58:42.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:58:42.615 [DEBUG] [Thread-139622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:58:42.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:58:42.617 [DEBUG] [Thread-139622] [transport.py] [_log()] userauth is OK
2026-02-12T01:58:42.617 [DEBUG] [Thread-139622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:58:42.618 [DEBUG] [Thread-139622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:58:42.618 [DEBUG] [Thread-139622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:58:42.618 [DEBUG] [Thread-139622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:58:42.636 [INFO] [Thread-139622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:58:42.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:58:43.196 [DEBUG] [Thread-139622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:58:43.196 [DEBUG] [Thread-139622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:58:43.196 [DEBUG] [Thread-139622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:58:43.237 [DEBUG] [Thread-139622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:58:43.237 [DEBUG] [Thread-139622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:58:43.240 [DEBUG] [Thread-139622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:58:43.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:58:43.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:58:43.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:58:43.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:58:43.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:58:43.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:58:43.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:58:43.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:58:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:58:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.998744 -999.00  +12.60  12.24     92  +11.40 1 3 1 3 1     0    0 0.99 -8.02 Z...W 12.2 12.2 173.6 15.7 14.5 -6.0 14.3 -5.6 14.2 -6.6 14.5 -6.9
2026-02-12T01:58:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:58:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:58:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.998744
2026-02-12T01:58:43.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:58:43.271 [DEBUG] [Thread-139622] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:58:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:58:43.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:58:43.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:58:43.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:58:43.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:58:18', tmtdew=0.52, humidity=96.5, cloud=0.0, wind=16.48, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:58:11.482', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:58:43.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:58:43.379 [DEBUG] [Thread-139625] [transport.py] [_log()] starting thread (client mode): 0xa2d7a410
2026-02-12T01:58:43.379 [DEBUG] [Thread-139625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:58:43.394 [DEBUG] [Thread-139625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:58:43.394 [INFO] [Thread-139625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:58:43.407 [DEBUG] [Thread-139625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:58:43.407 [DEBUG] [Thread-139625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] client lang: <none>
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] server lang: <none>
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] kex follows: False
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:58:43.408 [DEBUG] [Thread-139625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:58:43.418 [DEBUG] [Thread-139625] [transport.py] [_log()] Compression: none
2026-02-12T01:58:43.418 [DEBUG] [Thread-139625] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:58:43.461 [DEBUG] [Thread-139625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:58:43.462 [DEBUG] [Thread-139625] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:58:43.462 [DEBUG] [Thread-139625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:58:43.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:58:43.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:58:43.518 [DEBUG] [Thread-139625] [transport.py] [_log()] userauth is OK
2026-02-12T01:58:43.518 [DEBUG] [Thread-139625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:58:43.519 [DEBUG] [Thread-139625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:58:43.519 [DEBUG] [Thread-139625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:58:43.519 [DEBUG] [Thread-139625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:58:43.537 [INFO] [Thread-139625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:58:43.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:58:43.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:58:44.388 [DEBUG] [Thread-139625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:58:44.388 [DEBUG] [Thread-139625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:58:44.438 [DEBUG] [Thread-139625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:58:44.438 [DEBUG] [Thread-139625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:58:44.447 [DEBUG] [Thread-139625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:58:44.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:58:44.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:58:44.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
2026-02-12T01:58:44.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:58:44.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:58:44.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:58:44.484 [DEBUG] [Thread-139625] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:58:46.416 [DEBUG] [Thread-139627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:01.458 [DEBUG] [Thread-139628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:03.658 [DEBUG] [Thread-139629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:14.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:59:14.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:59:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:59:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 58, 54), 0.52, 96.48, 0.0, 17.06, 12.45, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:59:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:58:54
2026-02-12T01:59:16.494 [DEBUG] [Thread-139630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:59:16.879 [DEBUG] [Thread-139631] [transport.py] [_log()] starting thread (client mode): 0xa57e3ca0
2026-02-12T01:59:16.879 [DEBUG] [Thread-139631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:59:16.898 [DEBUG] [Thread-139631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:59:16.898 [INFO] [Thread-139631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] client lang: <none>
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] server lang: <none>
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] kex follows: False
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] Compression: none
2026-02-12T01:59:16.900 [DEBUG] [Thread-139631] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:59:16.916 [DEBUG] [Thread-139631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:59:16.917 [DEBUG] [Thread-139631] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:59:16.917 [DEBUG] [Thread-139631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:59:16.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:59:16.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:59:16.919 [DEBUG] [Thread-139631] [transport.py] [_log()] userauth is OK
2026-02-12T01:59:16.919 [DEBUG] [Thread-139631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:59:16.919 [DEBUG] [Thread-139631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:59:16.919 [DEBUG] [Thread-139631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:59:16.919 [DEBUG] [Thread-139631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:59:16.937 [INFO] [Thread-139631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:59:16.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:59:17.492 [DEBUG] [Thread-139631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:59:17.492 [DEBUG] [Thread-139631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:59:17.493 [DEBUG] [Thread-139631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:59:17.533 [DEBUG] [Thread-139631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:59:17.533 [DEBUG] [Thread-139631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:59:17.536 [DEBUG] [Thread-139631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:59:17.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:59:17.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:59:17.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:59:17.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:59:17.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:59:17.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:59:17.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:59:17.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:59:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:59:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.999438 -999.00  +12.60  16.08     92  +11.40 1 3 1 3 1     0    0 0.95 -9.06 ..... 16.1 16.1 179.2 19.8 14.5 -7.5 14.2 -7.6 14.2 -6.8 14.5 -7.4
2026-02-12T01:59:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:59:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:59:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.999438
2026-02-12T01:59:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:59:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:59:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:59:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:59:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:59:17.553 [DEBUG] [Thread-139631] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:59:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:58:54', tmtdew=0.52, humidity=96.48, cloud=0.0, wind=17.06, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:59:11.443', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:59:17.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:59:17.648 [DEBUG] [Thread-139634] [transport.py] [_log()] starting thread (client mode): 0xa57412d0
2026-02-12T01:59:17.648 [DEBUG] [Thread-139634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:59:17.663 [DEBUG] [Thread-139634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:59:17.663 [INFO] [Thread-139634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:59:17.671 [DEBUG] [Thread-139634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] client lang: <none>
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] server lang: <none>
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] kex follows: False
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:59:17.672 [DEBUG] [Thread-139634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:59:17.673 [DEBUG] [Thread-139634] [transport.py] [_log()] Compression: none
2026-02-12T01:59:17.673 [DEBUG] [Thread-139634] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:59:17.730 [DEBUG] [Thread-139634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:59:17.730 [DEBUG] [Thread-139634] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:59:17.731 [DEBUG] [Thread-139634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:59:17.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:59:17.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:59:17.786 [DEBUG] [Thread-139634] [transport.py] [_log()] userauth is OK
2026-02-12T01:59:17.786 [DEBUG] [Thread-139634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:59:17.786 [DEBUG] [Thread-139634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:59:17.786 [DEBUG] [Thread-139634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:59:17.786 [DEBUG] [Thread-139634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:59:17.810 [INFO] [Thread-139634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:59:17.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:59:17.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:59:18.640 [DEBUG] [Thread-139634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:59:18.640 [DEBUG] [Thread-139634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:59:18.690 [DEBUG] [Thread-139634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:59:18.690 [DEBUG] [Thread-139634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:59:18.701 [DEBUG] [Thread-139634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:59:18.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:59:18.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:59:18.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T01:59:18.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:59:18.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:59:18.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:59:18.738 [DEBUG] [Thread-139634] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:59:25.133 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:25.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:31.534 [DEBUG] [Thread-139636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:46.584 [DEBUG] [Thread-139637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T01:59:48.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T01:59:48.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T01:59:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T01:59:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 1, 59, 29), 0.5, 96.58, 0.0, 17.68, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T01:59:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 01:59:29
2026-02-12T01:59:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T01:59:51.076 [DEBUG] [Thread-139638] [transport.py] [_log()] starting thread (client mode): 0xa5743eb0
2026-02-12T01:59:51.076 [DEBUG] [Thread-139638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:59:51.095 [DEBUG] [Thread-139638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T01:59:51.095 [INFO] [Thread-139638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] client lang: <none>
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] server lang: <none>
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] kex follows: False
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] Compression: none
2026-02-12T01:59:51.098 [DEBUG] [Thread-139638] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:59:51.117 [DEBUG] [Thread-139638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:59:51.118 [DEBUG] [Thread-139638] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:59:51.118 [DEBUG] [Thread-139638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T01:59:51.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T01:59:51.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:59:51.120 [DEBUG] [Thread-139638] [transport.py] [_log()] userauth is OK
2026-02-12T01:59:51.120 [DEBUG] [Thread-139638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:59:51.121 [DEBUG] [Thread-139638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:59:51.121 [DEBUG] [Thread-139638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T01:59:51.121 [DEBUG] [Thread-139638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:59:51.146 [INFO] [Thread-139638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:59:51.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:59:51.722 [DEBUG] [Thread-139638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:59:51.722 [DEBUG] [Thread-139638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:59:51.723 [DEBUG] [Thread-139638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T01:59:51.763 [DEBUG] [Thread-139638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:59:51.764 [DEBUG] [Thread-139638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:59:51.770 [DEBUG] [Thread-139638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:59:51.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:59:51.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T01:59:51.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T01:59:51.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T01:59:51.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:59:51.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T01:59:51.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:59:51.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:59:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T01:59:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61082.999785 -999.00  +12.60  16.24     92  +11.40 1 3 1 3 1     0    0 0.96 -8.64 .n..w 16.2 16.2 178.6 20.6 14.5 -7.8 14.2 -8.0 14.1 -7.8 14.5 -8.8
2026-02-12T01:59:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T01:59:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T01:59:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61082.999785
2026-02-12T01:59:51.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T01:59:51.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T01:59:51.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T01:59:51.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T01:59:51.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T01:59:51.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T01:59:29', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=17.68, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-11T23:59:41.424', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T01:59:51.801 [DEBUG] [Thread-139638] [transport.py] [_log()] EOF in transport thread
2026-02-12T01:59:51.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T01:59:51.899 [DEBUG] [Thread-139641] [transport.py] [_log()] starting thread (client mode): 0xa2d9e470
2026-02-12T01:59:51.899 [DEBUG] [Thread-139641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T01:59:51.914 [DEBUG] [Thread-139641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T01:59:51.914 [INFO] [Thread-139641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T01:59:51.921 [DEBUG] [Thread-139641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] client lang: <none>
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] server lang: <none>
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] kex follows: False
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T01:59:51.922 [DEBUG] [Thread-139641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T01:59:51.923 [DEBUG] [Thread-139641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T01:59:51.923 [DEBUG] [Thread-139641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T01:59:51.923 [DEBUG] [Thread-139641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T01:59:51.923 [DEBUG] [Thread-139641] [transport.py] [_log()] Compression: none
2026-02-12T01:59:51.923 [DEBUG] [Thread-139641] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T01:59:51.982 [DEBUG] [Thread-139641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T01:59:51.982 [DEBUG] [Thread-139641] [transport.py] [_log()] Switch to new keys ...
2026-02-12T01:59:51.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T01:59:51.983 [DEBUG] [Thread-139641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T01:59:51.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T01:59:52.038 [DEBUG] [Thread-139641] [transport.py] [_log()] userauth is OK
2026-02-12T01:59:52.039 [DEBUG] [Thread-139641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T01:59:52.039 [DEBUG] [Thread-139641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T01:59:52.039 [DEBUG] [Thread-139641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T01:59:52.039 [DEBUG] [Thread-139641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T01:59:52.057 [INFO] [Thread-139641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T01:59:52.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T01:59:52.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T01:59:52.862 [DEBUG] [Thread-139641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T01:59:52.863 [DEBUG] [Thread-139641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T01:59:52.910 [DEBUG] [Thread-139641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T01:59:52.911 [DEBUG] [Thread-139641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T01:59:52.919 [DEBUG] [Thread-139641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T01:59:52.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T01:59:52.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T01:59:52.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
2026-02-12T01:59:52.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T01:59:52.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T01:59:52.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T01:59:52.952 [DEBUG] [Thread-139641] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:00:01.617 [DEBUG] [Thread-139643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:00:03.715 [DEBUG] [Thread-139644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:00:16.657 [DEBUG] [Thread-139645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:00:22.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:00:22.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:00:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:00:24.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 0, 6), 0.51, 96.52, 0.0, 16.36, 12.47, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:00:24.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:00:06
2026-02-12T02:00:25.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:00:25.276 [DEBUG] [Thread-139646] [transport.py] [_log()] starting thread (client mode): 0xa2d961d0
2026-02-12T02:00:25.276 [DEBUG] [Thread-139646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:00:25.296 [DEBUG] [Thread-139646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:00:25.296 [INFO] [Thread-139646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:00:25.299 [DEBUG] [Thread-139646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] client lang: <none>
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] server lang: <none>
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] kex follows: False
2026-02-12T02:00:25.300 [DEBUG] [Thread-139646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:00:25.301 [DEBUG] [Thread-139646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:00:25.301 [DEBUG] [Thread-139646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:00:25.301 [DEBUG] [Thread-139646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:00:25.301 [DEBUG] [Thread-139646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:00:25.301 [DEBUG] [Thread-139646] [transport.py] [_log()] Compression: none
2026-02-12T02:00:25.301 [DEBUG] [Thread-139646] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:00:25.318 [DEBUG] [Thread-139646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:00:25.319 [DEBUG] [Thread-139646] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:00:25.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:00:25.320 [DEBUG] [Thread-139646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:00:25.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:00:25.322 [DEBUG] [Thread-139646] [transport.py] [_log()] userauth is OK
2026-02-12T02:00:25.322 [DEBUG] [Thread-139646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:00:25.322 [DEBUG] [Thread-139646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:00:25.322 [DEBUG] [Thread-139646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:00:25.322 [DEBUG] [Thread-139646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:00:25.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:00:25.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:00:25.358 [INFO] [Thread-139646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:00:25.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:00:25.978 [DEBUG] [Thread-139646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:00:25.979 [DEBUG] [Thread-139646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:00:25.979 [DEBUG] [Thread-139646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:00:26.019 [DEBUG] [Thread-139646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:00:26.019 [DEBUG] [Thread-139646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:00:26.024 [DEBUG] [Thread-139646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:00:26.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:00:26.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:00:26.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:00:26.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:00:26.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:00:26.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:00:26.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:00:26.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:00:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:00:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.000132 -999.00  +12.60   9.94     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 .n..w 9.9 9.9 176.4 16.2 14.4 -7.9 14.2 -8.1 14.1 -7.8 14.4 -8.5
2026-02-12T02:00:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:00:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:00:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.000132
2026-02-12T02:00:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:00:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:00:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:00:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:00:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:00:26.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:00:06', tmtdew=0.51, humidity=96.52, cloud=0.0, wind=16.36, temperature=12.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:00:11.405', atlas_cloud=3, atlas_rain=1, zp_data=[2.5657499999999995, nan, 1.8782500000000004, 2.618499999999999, 2.4255000000000004, nan, nan, nan, nan, nan, 2.931749999999999, 2.9719999999999995, 2.508, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2026-02-11T23:49:00')
2026-02-12T02:00:26.051 [DEBUG] [Thread-139646] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:00:26.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:00:26.154 [DEBUG] [Thread-139649] [transport.py] [_log()] starting thread (client mode): 0x9eb07fd0
2026-02-12T02:00:26.155 [DEBUG] [Thread-139649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:00:26.169 [DEBUG] [Thread-139649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:00:26.169 [INFO] [Thread-139649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:00:26.176 [DEBUG] [Thread-139649] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] client lang: <none>
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] server lang: <none>
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] kex follows: False
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] Compression: none
2026-02-12T02:00:26.177 [DEBUG] [Thread-139649] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:00:26.234 [DEBUG] [Thread-139649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:00:26.235 [DEBUG] [Thread-139649] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:00:26.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:00:26.236 [DEBUG] [Thread-139649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:00:26.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:00:26.291 [DEBUG] [Thread-139649] [transport.py] [_log()] userauth is OK
2026-02-12T02:00:26.291 [DEBUG] [Thread-139649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:00:26.292 [DEBUG] [Thread-139649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:00:26.292 [DEBUG] [Thread-139649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:00:26.292 [DEBUG] [Thread-139649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:00:26.311 [INFO] [Thread-139649] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:00:26.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:00:26.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:00:27.115 [DEBUG] [Thread-139649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:00:27.115 [DEBUG] [Thread-139649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:00:27.163 [DEBUG] [Thread-139649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:00:27.163 [DEBUG] [Thread-139649] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:00:27.171 [DEBUG] [Thread-139649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:00:27.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:00:27.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:00:27.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:00:27.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:00:27.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:00:27.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:00:27.204 [DEBUG] [Thread-139649] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:00:31.694 [DEBUG] [Thread-139651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:00:46.746 [DEBUG] [Thread-139652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:00:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:00:57.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:00:57.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:00:59.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 0, 41), 0.92, 94.06, 0.0, 18.84, 12.96, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:00:59.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:00:41
2026-02-12T02:00:59.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:01:00.004 [DEBUG] [Thread-139653] [transport.py] [_log()] starting thread (client mode): 0xa2d973d0
2026-02-12T02:01:00.004 [DEBUG] [Thread-139653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:01:00.025 [DEBUG] [Thread-139653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:01:00.025 [INFO] [Thread-139653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] client lang: <none>
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] server lang: <none>
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] kex follows: False
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:01:00.028 [DEBUG] [Thread-139653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:01:00.029 [DEBUG] [Thread-139653] [transport.py] [_log()] Compression: none
2026-02-12T02:01:00.029 [DEBUG] [Thread-139653] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:01:00.042 [DEBUG] [Thread-139653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:01:00.042 [DEBUG] [Thread-139653] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:01:00.043 [DEBUG] [Thread-139653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:01:00.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:01:00.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:01:00.045 [DEBUG] [Thread-139653] [transport.py] [_log()] userauth is OK
2026-02-12T02:01:00.045 [DEBUG] [Thread-139653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:01:00.045 [DEBUG] [Thread-139653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:01:00.045 [DEBUG] [Thread-139653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:01:00.045 [DEBUG] [Thread-139653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:01:00.081 [INFO] [Thread-139653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:01:00.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:01:00.719 [DEBUG] [Thread-139653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:01:00.719 [DEBUG] [Thread-139653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:01:00.719 [DEBUG] [Thread-139653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:01:00.760 [DEBUG] [Thread-139653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:01:00.761 [DEBUG] [Thread-139653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:01:00.764 [DEBUG] [Thread-139653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:01:00.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:01:00.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:01:00.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:01:00.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:01:00.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:01:00.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:01:00.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:01:00.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:01:00.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:01:00.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.000480 -999.00  +12.60  12.00     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 .N.sW 12.0 12.0 182.8 17.7 14.4 -7.1 14.2 -7.1 14.1 -7.6 14.4 -8.2
2026-02-12T02:01:00.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:01:00.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:01:00.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.000480
2026-02-12T02:01:00.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:01:00.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:01:00.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:01:00.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:01:00.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:01:00.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:00:41', tmtdew=0.92, humidity=94.06, cloud=0.0, wind=18.84, temperature=12.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:00:41.472', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.1717500000000003, nan, nan, nan, nan, nan, nan, nan, 3.6912499999999993, nan, 2.8584999999999994, nan, nan, nan, nan, nan, nan, nan, 2.273999999999999, 3.052249999999999, nan, nan, nan, nan, nan, nan, nan, 1.7925000000000013, nan, nan, nan], zp_timestamp='2026-02-12T00:00:00')
2026-02-12T02:01:00.791 [DEBUG] [Thread-139653] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:01:00.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:01:00.887 [DEBUG] [Thread-139656] [transport.py] [_log()] starting thread (client mode): 0xa5741ed0
2026-02-12T02:01:00.887 [DEBUG] [Thread-139656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:01:00.901 [DEBUG] [Thread-139656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:01:00.902 [INFO] [Thread-139656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:01:00.909 [DEBUG] [Thread-139656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] client lang: <none>
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] server lang: <none>
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] kex follows: False
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:01:00.910 [DEBUG] [Thread-139656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:01:00.911 [DEBUG] [Thread-139656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:01:00.911 [DEBUG] [Thread-139656] [transport.py] [_log()] Compression: none
2026-02-12T02:01:00.911 [DEBUG] [Thread-139656] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:01:00.967 [DEBUG] [Thread-139656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:01:00.968 [DEBUG] [Thread-139656] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:01:00.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:01:00.969 [DEBUG] [Thread-139656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:01:00.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:01:01.023 [DEBUG] [Thread-139656] [transport.py] [_log()] userauth is OK
2026-02-12T02:01:01.023 [DEBUG] [Thread-139656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:01:01.023 [DEBUG] [Thread-139656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:01:01.023 [DEBUG] [Thread-139656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:01:01.023 [DEBUG] [Thread-139656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:01:01.047 [INFO] [Thread-139656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:01:01.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:01:01.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:01:01.783 [DEBUG] [Thread-139658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:01:01.856 [DEBUG] [Thread-139656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:01:01.856 [DEBUG] [Thread-139656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:01:01.903 [DEBUG] [Thread-139656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:01:01.903 [DEBUG] [Thread-139656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:01:01.912 [DEBUG] [Thread-139656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:01:01.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:01:01.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:01:01.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:01:01.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:01:01.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:01:01.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:01:01.949 [DEBUG] [Thread-139656] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:01:03.795 [DEBUG] [Thread-139659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:01:16.835 [DEBUG] [Thread-139660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:01:25.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:01:25.542 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:01:31.869 [DEBUG] [Thread-139661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:01:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:01:31.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:01:31.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:01:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 1, 17), 0.5, 96.57, 0.0, 15.53, 12.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:01:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:01:17
2026-02-12T02:01:34.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:01:34.902 [DEBUG] [Thread-139662] [transport.py] [_log()] starting thread (client mode): 0x9eb05870
2026-02-12T02:01:34.902 [DEBUG] [Thread-139662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:01:34.920 [DEBUG] [Thread-139662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:01:34.920 [INFO] [Thread-139662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] client lang: <none>
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] server lang: <none>
2026-02-12T02:01:34.923 [DEBUG] [Thread-139662] [transport.py] [_log()] kex follows: False
2026-02-12T02:01:34.924 [DEBUG] [Thread-139662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:01:34.924 [DEBUG] [Thread-139662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:01:34.924 [DEBUG] [Thread-139662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:01:34.924 [DEBUG] [Thread-139662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:01:34.924 [DEBUG] [Thread-139662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:01:34.924 [DEBUG] [Thread-139662] [transport.py] [_log()] Compression: none
2026-02-12T02:01:34.924 [DEBUG] [Thread-139662] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:01:34.941 [DEBUG] [Thread-139662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:01:34.942 [DEBUG] [Thread-139662] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:01:34.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:01:34.943 [DEBUG] [Thread-139662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:01:34.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:01:34.945 [DEBUG] [Thread-139662] [transport.py] [_log()] userauth is OK
2026-02-12T02:01:34.945 [DEBUG] [Thread-139662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:01:34.945 [DEBUG] [Thread-139662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:01:34.945 [DEBUG] [Thread-139662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:01:34.945 [DEBUG] [Thread-139662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:01:34.977 [INFO] [Thread-139662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:01:34.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:01:35.583 [DEBUG] [Thread-139662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:01:35.584 [DEBUG] [Thread-139662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:01:35.584 [DEBUG] [Thread-139662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:01:35.624 [DEBUG] [Thread-139662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:01:35.624 [DEBUG] [Thread-139662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:01:35.627 [DEBUG] [Thread-139662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:01:35.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:01:35.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:01:35.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:01:35.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:01:35.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:01:35.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:01:35.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:01:35.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:01:35.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:01:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.000826 -999.00  +12.60   9.30     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 .N.sW 9.3 9.3 180.8 16.1 14.4 -6.6 14.2 -6.3 14.1 -6.6 14.4 -7.4
2026-02-12T02:01:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:01:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:01:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.000826
2026-02-12T02:01:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:01:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:01:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:01:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:01:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:01:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:01:17', tmtdew=0.5, humidity=96.57, cloud=0.0, wind=15.53, temperature=12.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:01:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.1717500000000003, nan, nan, nan, nan, nan, nan, nan, 3.6912499999999993, nan, 2.8584999999999994, nan, nan, nan, nan, nan, nan, nan, 2.273999999999999, 3.052249999999999, nan, nan, nan, nan, nan, nan, nan, 1.7925000000000013, nan, nan, nan], zp_timestamp='2026-02-12T00:00:00')
2026-02-12T02:01:35.657 [DEBUG] [Thread-139662] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:01:35.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:01:46.905 [DEBUG] [Thread-139665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:02:01.957 [DEBUG] [Thread-139666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:02:03.870 [DEBUG] [Thread-139667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:02:16.992 [DEBUG] [Thread-139668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:02:25.743 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:02:25.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:02:32.028 [DEBUG] [Thread-139669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:02:47.066 [DEBUG] [Thread-139670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:02.100 [DEBUG] [Thread-139671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:03.970 [DEBUG] [Thread-139672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:17.135 [DEBUG] [Thread-139673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:25.947 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:25.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:32.169 [DEBUG] [Thread-139674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:47.207 [DEBUG] [Thread-139675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:03:47.393 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T02:04:02.244 [DEBUG] [Thread-139676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:04:04.052 [DEBUG] [Thread-139677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:04:17.280 [DEBUG] [Thread-139678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:04:17.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:04:17.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:04:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:04:19.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 3, 39), 0.9, 94.16, 0.0, 17.47, 12.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:04:19.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:03:39
2026-02-12T02:04:19.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:04:20.141 [DEBUG] [Thread-139679] [transport.py] [_log()] starting thread (client mode): 0xa57e3cd0
2026-02-12T02:04:20.142 [DEBUG] [Thread-139679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:04:20.162 [DEBUG] [Thread-139679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:04:20.162 [INFO] [Thread-139679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:04:20.165 [DEBUG] [Thread-139679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:04:20.165 [DEBUG] [Thread-139679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:04:20.165 [DEBUG] [Thread-139679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:04:20.165 [DEBUG] [Thread-139679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] client lang: <none>
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] server lang: <none>
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] kex follows: False
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:04:20.166 [DEBUG] [Thread-139679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:04:20.167 [DEBUG] [Thread-139679] [transport.py] [_log()] Compression: none
2026-02-12T02:04:20.167 [DEBUG] [Thread-139679] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:04:20.185 [DEBUG] [Thread-139679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:04:20.186 [DEBUG] [Thread-139679] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:04:20.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:04:20.187 [DEBUG] [Thread-139679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:04:20.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:04:20.189 [DEBUG] [Thread-139679] [transport.py] [_log()] userauth is OK
2026-02-12T02:04:20.189 [DEBUG] [Thread-139679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:04:20.190 [DEBUG] [Thread-139679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:04:20.190 [DEBUG] [Thread-139679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:04:20.190 [DEBUG] [Thread-139679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:04:20.224 [INFO] [Thread-139679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:04:20.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:04:20.874 [DEBUG] [Thread-139679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:04:20.875 [DEBUG] [Thread-139679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:04:20.875 [DEBUG] [Thread-139679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:04:20.916 [DEBUG] [Thread-139679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:04:20.916 [DEBUG] [Thread-139679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:04:20.919 [DEBUG] [Thread-139679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:04:20.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:04:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:04:20.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:04:20.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:04:20.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:04:20.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:04:20.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:04:20.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:04:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:04:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.002563 -999.00  +12.50  18.12     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 ...Sw 18.1 18.1 181.0 24.4 14.4 -7.6 14.1 -7.6 14.1 -7.3 14.4 -8.1
2026-02-12T02:04:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:04:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:04:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.002563
2026-02-12T02:04:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:04:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:04:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:04:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:04:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:04:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:03:39', tmtdew=0.9, humidity=94.16, cloud=0.0, wind=17.47, temperature=12.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:03:41.443', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.1717500000000003, nan, nan, nan, nan, nan, nan, nan, 3.6912499999999993, nan, 2.8584999999999994, nan, nan, nan, nan, nan, nan, nan, 2.273999999999999, 3.052249999999999, nan, nan, nan, nan, nan, nan, nan, 1.7925000000000013, nan, nan, nan], zp_timestamp='2026-02-12T00:02:00')
2026-02-12T02:04:20.946 [DEBUG] [Thread-139679] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:04:21.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:04:21.036 [DEBUG] [Thread-139682] [transport.py] [_log()] starting thread (client mode): 0xa2d9f250
2026-02-12T02:04:21.037 [DEBUG] [Thread-139682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:04:21.051 [DEBUG] [Thread-139682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:04:21.051 [INFO] [Thread-139682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] client lang: <none>
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] server lang: <none>
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] kex follows: False
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] Compression: none
2026-02-12T02:04:21.059 [DEBUG] [Thread-139682] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:04:21.116 [DEBUG] [Thread-139682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:04:21.117 [DEBUG] [Thread-139682] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:04:21.117 [DEBUG] [Thread-139682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:04:21.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:04:21.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:04:21.174 [DEBUG] [Thread-139682] [transport.py] [_log()] userauth is OK
2026-02-12T02:04:21.174 [DEBUG] [Thread-139682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:04:21.174 [DEBUG] [Thread-139682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:04:21.174 [DEBUG] [Thread-139682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:04:21.174 [DEBUG] [Thread-139682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:04:21.197 [INFO] [Thread-139682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:04:21.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:04:21.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:04:22.031 [DEBUG] [Thread-139682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:04:22.031 [DEBUG] [Thread-139682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:04:22.080 [DEBUG] [Thread-139682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:04:22.081 [DEBUG] [Thread-139682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:04:22.090 [DEBUG] [Thread-139682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:04:22.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:04:22.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:04:22.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:04:22.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:04:22.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:04:22.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:04:22.127 [DEBUG] [Thread-139682] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:04:26.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:04:26.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:04:32.319 [DEBUG] [Thread-139684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:04:47.371 [DEBUG] [Thread-139685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:04:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:04:52.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:04:52.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
2026-02-12T02:04:54.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 4, 14), 0.51, 96.55, 0.0, 19.34, 12.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:04:54.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:04:14
2026-02-12T02:04:55.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:04:55.408 [DEBUG] [Thread-139686] [transport.py] [_log()] starting thread (client mode): 0xa2d94550
2026-02-12T02:04:55.408 [DEBUG] [Thread-139686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:04:55.429 [DEBUG] [Thread-139686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:04:55.429 [INFO] [Thread-139686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] client lang: <none>
2026-02-12T02:04:55.433 [DEBUG] [Thread-139686] [transport.py] [_log()] server lang: <none>
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] kex follows: False
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] Compression: none
2026-02-12T02:04:55.434 [DEBUG] [Thread-139686] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:04:55.452 [DEBUG] [Thread-139686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:04:55.453 [DEBUG] [Thread-139686] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:04:55.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:04:55.464 [DEBUG] [Thread-139686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:04:55.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:04:55.466 [DEBUG] [Thread-139686] [transport.py] [_log()] userauth is OK
2026-02-12T02:04:55.466 [DEBUG] [Thread-139686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:04:55.466 [DEBUG] [Thread-139686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:04:55.466 [DEBUG] [Thread-139686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:04:55.466 [DEBUG] [Thread-139686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:04:55.493 [INFO] [Thread-139686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:04:55.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:04:56.146 [DEBUG] [Thread-139686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:04:56.146 [DEBUG] [Thread-139686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:04:56.146 [DEBUG] [Thread-139686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:04:56.187 [DEBUG] [Thread-139686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:04:56.188 [DEBUG] [Thread-139686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:04:56.190 [DEBUG] [Thread-139686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:04:56.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:04:56.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:04:56.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:04:56.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:04:56.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:04:56.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:04:56.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:04:56.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:04:56.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:04:56.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.002910 -999.00  +12.50  14.42     92  +11.30 1 3 1 3 1     0    0 -999.00 0.00 ..... 14.4 14.4 178.2 19.2 14.3 -6.2 14.1 -5.6 14.1 -7.5 14.4 -8.0
2026-02-12T02:04:56.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:04:56.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:04:56.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.002910
2026-02-12T02:04:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:04:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:04:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:04:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:04:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:04:56.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:04:14', tmtdew=0.51, humidity=96.55, cloud=0.0, wind=19.34, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:04:11.424', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.1717500000000003, nan, nan, nan, nan, nan, nan, nan, 3.6912499999999993, nan, 2.8584999999999994, nan, nan, nan, nan, nan, nan, nan, 2.273999999999999, 3.052249999999999, nan, nan, nan, nan, nan, nan, nan, 1.7925000000000013, nan, nan, nan], zp_timestamp='2026-02-12T00:02:00')
2026-02-12T02:04:56.216 [DEBUG] [Thread-139686] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:04:56.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:04:56.313 [DEBUG] [Thread-139689] [transport.py] [_log()] starting thread (client mode): 0x9eb05ab0
2026-02-12T02:04:56.313 [DEBUG] [Thread-139689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:04:56.327 [DEBUG] [Thread-139689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:04:56.327 [INFO] [Thread-139689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:04:56.335 [DEBUG] [Thread-139689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] client lang: <none>
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] server lang: <none>
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] kex follows: False
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] Compression: none
2026-02-12T02:04:56.336 [DEBUG] [Thread-139689] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:04:56.394 [DEBUG] [Thread-139689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:04:56.395 [DEBUG] [Thread-139689] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:04:56.395 [DEBUG] [Thread-139689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:04:56.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:04:56.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:04:56.449 [DEBUG] [Thread-139689] [transport.py] [_log()] userauth is OK
2026-02-12T02:04:56.450 [DEBUG] [Thread-139689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:04:56.450 [DEBUG] [Thread-139689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:04:56.450 [DEBUG] [Thread-139689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:04:56.450 [DEBUG] [Thread-139689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:04:56.469 [INFO] [Thread-139689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:04:56.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:04:56.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:04:57.290 [DEBUG] [Thread-139689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:04:57.290 [DEBUG] [Thread-139689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:04:57.340 [DEBUG] [Thread-139689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:04:57.340 [DEBUG] [Thread-139689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:04:57.349 [DEBUG] [Thread-139689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:04:57.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:04:57.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:04:57.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:04:57.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:04:57.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:04:57.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:04:57.385 [DEBUG] [Thread-139689] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:05:02.403 [DEBUG] [Thread-139691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:05:04.137 [DEBUG] [Thread-139692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:05:17.455 [DEBUG] [Thread-139693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:05:26.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:05:26.357 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:05:27.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:05:27.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:05:27.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:05:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 4, 50), 0.5, 96.57, 0.0, 17.77, 12.47, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:05:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:04:50
2026-02-12T02:05:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:05:30.211 [DEBUG] [Thread-139694] [transport.py] [_log()] starting thread (client mode): 0x9eb04640
2026-02-12T02:05:30.211 [DEBUG] [Thread-139694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:05:30.231 [DEBUG] [Thread-139694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:05:30.231 [INFO] [Thread-139694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] client lang: <none>
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] server lang: <none>
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] kex follows: False
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] Compression: none
2026-02-12T02:05:30.235 [DEBUG] [Thread-139694] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:05:30.253 [DEBUG] [Thread-139694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:05:30.254 [DEBUG] [Thread-139694] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:05:30.254 [DEBUG] [Thread-139694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:05:30.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:05:30.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:05:30.297 [DEBUG] [Thread-139694] [transport.py] [_log()] userauth is OK
2026-02-12T02:05:30.297 [DEBUG] [Thread-139694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:05:30.297 [DEBUG] [Thread-139694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:05:30.298 [DEBUG] [Thread-139694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:05:30.298 [DEBUG] [Thread-139694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:05:30.329 [INFO] [Thread-139694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:05:30.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:05:30.930 [DEBUG] [Thread-139694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:05:30.931 [DEBUG] [Thread-139694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:05:30.931 [DEBUG] [Thread-139694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:05:30.971 [DEBUG] [Thread-139694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:05:30.971 [DEBUG] [Thread-139694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:05:30.975 [DEBUG] [Thread-139694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:05:30.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:05:30.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:05:30.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:05:30.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:05:30.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:05:30.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:05:31.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:05:31.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:05:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:05:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.003257 -999.00  +12.50  12.39     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 .N..W 12.4 12.4 181.0 15.7 14.4 -4.4 14.2 -4.0 14.1 -5.1 14.4 -5.6
2026-02-12T02:05:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:05:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:05:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.003257
2026-02-12T02:05:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:05:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:05:31.002 [DEBUG] [Thread-139694] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:05:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:05:31.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:05:31.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:05:31.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:04:50', tmtdew=0.5, humidity=96.57, cloud=0.0, wind=17.77, temperature=12.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:04:41.405', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.1717500000000003, nan, nan, nan, nan, nan, nan, nan, 3.6912499999999993, nan, 2.8584999999999994, nan, nan, nan, nan, nan, nan, nan, 2.273999999999999, 3.052249999999999, nan, nan, nan, nan, nan, nan, nan, 1.7925000000000013, nan, nan, nan], zp_timestamp='2026-02-12T00:02:00')
2026-02-12T02:05:31.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:05:31.100 [DEBUG] [Thread-139697] [transport.py] [_log()] starting thread (client mode): 0xa2d9dd50
2026-02-12T02:05:31.100 [DEBUG] [Thread-139697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:05:31.114 [DEBUG] [Thread-139697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:05:31.114 [INFO] [Thread-139697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:05:31.122 [DEBUG] [Thread-139697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] client lang: <none>
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] server lang: <none>
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] kex follows: False
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:05:31.123 [DEBUG] [Thread-139697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:05:31.124 [DEBUG] [Thread-139697] [transport.py] [_log()] Compression: none
2026-02-12T02:05:31.124 [DEBUG] [Thread-139697] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:05:31.182 [DEBUG] [Thread-139697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:05:31.183 [DEBUG] [Thread-139697] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:05:31.183 [DEBUG] [Thread-139697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:05:31.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:05:31.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:05:31.238 [DEBUG] [Thread-139697] [transport.py] [_log()] userauth is OK
2026-02-12T02:05:31.238 [DEBUG] [Thread-139697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:05:31.239 [DEBUG] [Thread-139697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:05:31.239 [DEBUG] [Thread-139697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:05:31.239 [DEBUG] [Thread-139697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:05:31.257 [INFO] [Thread-139697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:05:31.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:05:31.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:05:32.078 [DEBUG] [Thread-139697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:05:32.078 [DEBUG] [Thread-139697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:05:32.125 [DEBUG] [Thread-139697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:05:32.125 [DEBUG] [Thread-139697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:05:32.134 [DEBUG] [Thread-139697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:05:32.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:05:32.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:05:32.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:05:32.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:05:32.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:05:32.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:05:32.170 [DEBUG] [Thread-139697] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:05:32.492 [DEBUG] [Thread-139699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:05:47.536 [DEBUG] [Thread-139700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:06:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:06:02.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:06:02.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:06:02.575 [DEBUG] [Thread-139701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:06:04.222 [DEBUG] [Thread-139702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:06:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 5, 26), 0.5, 96.62, 0.0, 16.96, 12.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:06:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:05:26
2026-02-12T02:06:04.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:06:04.857 [DEBUG] [Thread-139703] [transport.py] [_log()] starting thread (client mode): 0x9eb04550
2026-02-12T02:06:04.857 [DEBUG] [Thread-139703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:06:04.876 [DEBUG] [Thread-139703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:06:04.876 [INFO] [Thread-139703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] client lang: <none>
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] server lang: <none>
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] kex follows: False
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] Compression: none
2026-02-12T02:06:04.880 [DEBUG] [Thread-139703] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:06:04.897 [DEBUG] [Thread-139703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:06:04.897 [DEBUG] [Thread-139703] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:06:04.897 [DEBUG] [Thread-139703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:06:04.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:06:04.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:06:04.898 [DEBUG] [Thread-139703] [transport.py] [_log()] userauth is OK
2026-02-12T02:06:04.898 [DEBUG] [Thread-139703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:06:04.899 [DEBUG] [Thread-139703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:06:04.899 [DEBUG] [Thread-139703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:06:04.899 [DEBUG] [Thread-139703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:06:04.915 [INFO] [Thread-139703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:06:04.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:06:05.478 [DEBUG] [Thread-139703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:06:05.479 [DEBUG] [Thread-139703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:06:05.479 [DEBUG] [Thread-139703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:06:05.520 [DEBUG] [Thread-139703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:06:05.520 [DEBUG] [Thread-139703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:06:05.523 [DEBUG] [Thread-139703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:06:05.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:06:05.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:06:05.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:06:05.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:06:05.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:06:05.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:06:05.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:06:05.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:06:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:06:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.003952 -999.00  +12.50  17.11     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.1 17.1 180.6 18.9 14.4 -4.5 14.1 -4.7 14.1 -4.5 14.4 -4.9
2026-02-12T02:06:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:06:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:06:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.003952
2026-02-12T02:06:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:06:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:06:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:06:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:06:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:06:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:05:26', tmtdew=0.5, humidity=96.62, cloud=0.0, wind=16.96, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:05:41.453', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.1717500000000003, nan, nan, nan, nan, nan, nan, nan, 3.6912499999999993, nan, 2.8584999999999994, nan, nan, nan, nan, nan, nan, nan, 2.273999999999999, 3.052249999999999, nan, nan, nan, nan, nan, nan, nan, 1.7925000000000013, nan, nan, nan], zp_timestamp='2026-02-12T00:02:00')
2026-02-12T02:06:05.552 [DEBUG] [Thread-139703] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:06:05.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:06:05.647 [DEBUG] [Thread-139706] [transport.py] [_log()] starting thread (client mode): 0xa57e2770
2026-02-12T02:06:05.647 [DEBUG] [Thread-139706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:06:05.661 [DEBUG] [Thread-139706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:06:05.661 [INFO] [Thread-139706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] client lang: <none>
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] server lang: <none>
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] kex follows: False
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] Compression: none
2026-02-12T02:06:05.669 [DEBUG] [Thread-139706] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:06:05.724 [DEBUG] [Thread-139706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:06:05.725 [DEBUG] [Thread-139706] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:06:05.725 [DEBUG] [Thread-139706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:06:05.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:06:05.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:06:05.782 [DEBUG] [Thread-139706] [transport.py] [_log()] userauth is OK
2026-02-12T02:06:05.782 [DEBUG] [Thread-139706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:06:05.782 [DEBUG] [Thread-139706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:06:05.782 [DEBUG] [Thread-139706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:06:05.782 [DEBUG] [Thread-139706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:06:05.796 [INFO] [Thread-139706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:06:05.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:06:05.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:06:06.601 [DEBUG] [Thread-139706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:06:06.601 [DEBUG] [Thread-139706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:06:06.649 [DEBUG] [Thread-139706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:06:06.650 [DEBUG] [Thread-139706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:06:06.659 [DEBUG] [Thread-139706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:06:06.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:06:06.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:06:06.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:06:06.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:06:06.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:06:06.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:06:06.696 [DEBUG] [Thread-139706] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:06:17.613 [DEBUG] [Thread-139708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:06:26.561 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:06:26.562 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:06:32.664 [DEBUG] [Thread-139709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:06:36.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:06:36.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:06:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:06:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 6, 2), 0.5, 96.57, 0.0, 16.5, 12.43, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:06:38.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:06:02
2026-02-12T02:06:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:06:39.148 [DEBUG] [Thread-139710] [transport.py] [_log()] starting thread (client mode): 0xa2d7a500
2026-02-12T02:06:39.148 [DEBUG] [Thread-139710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:06:39.168 [DEBUG] [Thread-139710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:06:39.168 [INFO] [Thread-139710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] client lang: <none>
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] server lang: <none>
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] kex follows: False
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] Compression: none
2026-02-12T02:06:39.171 [DEBUG] [Thread-139710] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:06:39.187 [DEBUG] [Thread-139710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:06:39.187 [DEBUG] [Thread-139710] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:06:39.187 [DEBUG] [Thread-139710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:06:39.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:06:39.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:06:39.188 [DEBUG] [Thread-139710] [transport.py] [_log()] userauth is OK
2026-02-12T02:06:39.188 [DEBUG] [Thread-139710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:06:39.188 [DEBUG] [Thread-139710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:06:39.188 [DEBUG] [Thread-139710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:06:39.188 [DEBUG] [Thread-139710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:06:39.204 [INFO] [Thread-139710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:06:39.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:06:39.874 [DEBUG] [Thread-139710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:06:39.875 [DEBUG] [Thread-139710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:06:39.875 [DEBUG] [Thread-139710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:06:39.915 [DEBUG] [Thread-139710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:06:39.915 [DEBUG] [Thread-139710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:06:39.918 [DEBUG] [Thread-139710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:06:39.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:06:39.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:06:39.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:06:39.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:06:39.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:06:39.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:06:39.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:06:39.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:06:39.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:06:39.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.004299 -999.00  +12.50  13.41     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.4 13.4 186.2 16.4 14.4 -4.2 14.2 -4.3 14.1 -4.0 14.4 -4.2
2026-02-12T02:06:39.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:06:39.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:06:39.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.004299
2026-02-12T02:06:39.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:06:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:06:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:06:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:06:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:06:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:06:02', tmtdew=0.5, humidity=96.57, cloud=0.0, wind=16.5, temperature=12.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:06:11.434', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.1717500000000003, nan, nan, nan, nan, nan, nan, nan, 3.6912499999999993, nan, 2.8584999999999994, nan, nan, nan, nan, nan, nan, nan, 2.273999999999999, 3.052249999999999, nan, nan, nan, nan, nan, nan, nan, 1.7925000000000013, nan, nan, nan], zp_timestamp='2026-02-12T00:02:00')
2026-02-12T02:06:39.943 [DEBUG] [Thread-139710] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:06:40.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:06:40.041 [DEBUG] [Thread-139713] [transport.py] [_log()] starting thread (client mode): 0xa2d788e0
2026-02-12T02:06:40.041 [DEBUG] [Thread-139713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:06:40.059 [DEBUG] [Thread-139713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:06:40.059 [INFO] [Thread-139713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:06:40.070 [DEBUG] [Thread-139713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:06:40.070 [DEBUG] [Thread-139713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:06:40.070 [DEBUG] [Thread-139713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:06:40.070 [DEBUG] [Thread-139713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:40.070 [DEBUG] [Thread-139713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:06:40.070 [DEBUG] [Thread-139713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] client lang: <none>
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] server lang: <none>
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] kex follows: False
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] Compression: none
2026-02-12T02:06:40.071 [DEBUG] [Thread-139713] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:06:40.130 [DEBUG] [Thread-139713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:06:40.130 [DEBUG] [Thread-139713] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:06:40.131 [DEBUG] [Thread-139713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:06:40.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:06:40.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:06:40.187 [DEBUG] [Thread-139713] [transport.py] [_log()] userauth is OK
2026-02-12T02:06:40.187 [DEBUG] [Thread-139713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:06:40.187 [DEBUG] [Thread-139713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:06:40.187 [DEBUG] [Thread-139713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:06:40.187 [DEBUG] [Thread-139713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:06:40.206 [INFO] [Thread-139713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:06:40.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:06:40.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:06:41.042 [DEBUG] [Thread-139713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:06:41.042 [DEBUG] [Thread-139713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:06:41.090 [DEBUG] [Thread-139713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:06:41.090 [DEBUG] [Thread-139713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:06:41.099 [DEBUG] [Thread-139713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:06:41.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:06:41.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')
2026-02-12T02:06:41.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:06:41.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:06:41.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:06:41.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:06:41.133 [DEBUG] [Thread-139713] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:06:47.692 [DEBUG] [Thread-139715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:02.729 [DEBUG] [Thread-139716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:04.566 [DEBUG] [Thread-139717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:11.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:07:11.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:07:11.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:07:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 6, 37), 0.91, 94.13, 0.0, 21.0, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:07:13.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:06:37
2026-02-12T02:07:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:07:13.659 [DEBUG] [Thread-139718] [transport.py] [_log()] starting thread (client mode): 0xa57e3c70
2026-02-12T02:07:13.660 [DEBUG] [Thread-139718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:07:13.673 [DEBUG] [Thread-139718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:07:13.674 [INFO] [Thread-139718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:07:13.677 [DEBUG] [Thread-139718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:07:13.677 [DEBUG] [Thread-139718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:07:13.677 [DEBUG] [Thread-139718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:07:13.677 [DEBUG] [Thread-139718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:13.677 [DEBUG] [Thread-139718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] client lang: <none>
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] server lang: <none>
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] kex follows: False
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:07:13.678 [DEBUG] [Thread-139718] [transport.py] [_log()] Compression: none
2026-02-12T02:07:13.679 [DEBUG] [Thread-139718] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:07:13.710 [DEBUG] [Thread-139718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:07:13.715 [DEBUG] [Thread-139718] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:07:13.716 [DEBUG] [Thread-139718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:07:13.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:07:13.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:07:13.752 [DEBUG] [Thread-139718] [transport.py] [_log()] userauth is OK
2026-02-12T02:07:13.752 [DEBUG] [Thread-139718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:07:13.753 [DEBUG] [Thread-139718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:07:13.753 [DEBUG] [Thread-139718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:07:13.753 [DEBUG] [Thread-139718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:07:13.783 [INFO] [Thread-139718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:07:13.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:07:14.442 [DEBUG] [Thread-139718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:07:14.442 [DEBUG] [Thread-139718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:07:14.444 [DEBUG] [Thread-139718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:07:14.483 [DEBUG] [Thread-139718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:07:14.483 [DEBUG] [Thread-139718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:07:14.486 [DEBUG] [Thread-139718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:07:14.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:07:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:07:14.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:07:14.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:07:14.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:07:14.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:07:14.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:07:14.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:07:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:07:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.004646 -999.00  +12.60   7.37     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 ----- 7.4 7.4 174.2 19.6 14.4 -4.6 14.2 -4.8 14.1 -4.4 14.4 -4.8
2026-02-12T02:07:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:07:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:07:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.004646
2026-02-12T02:07:14.516 [DEBUG] [Thread-139718] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:07:14.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:07:14.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:07:14.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:07:14.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:07:14.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:07:14.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:06:37', tmtdew=0.91, humidity=94.13, cloud=0.0, wind=21.0, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:06:41.414', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:07:14.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:07:14.632 [DEBUG] [Thread-139721] [transport.py] [_log()] starting thread (client mode): 0xa5740160
2026-02-12T02:07:14.632 [DEBUG] [Thread-139721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:07:14.651 [DEBUG] [Thread-139721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:07:14.651 [INFO] [Thread-139721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:07:14.658 [DEBUG] [Thread-139721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:07:14.658 [DEBUG] [Thread-139721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] client lang: <none>
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] server lang: <none>
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] kex follows: False
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:07:14.659 [DEBUG] [Thread-139721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:07:14.660 [DEBUG] [Thread-139721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:07:14.660 [DEBUG] [Thread-139721] [transport.py] [_log()] Compression: none
2026-02-12T02:07:14.662 [DEBUG] [Thread-139721] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:07:14.718 [DEBUG] [Thread-139721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:07:14.718 [DEBUG] [Thread-139721] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:07:14.719 [DEBUG] [Thread-139721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:07:14.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:07:14.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:07:14.774 [DEBUG] [Thread-139721] [transport.py] [_log()] userauth is OK
2026-02-12T02:07:14.774 [DEBUG] [Thread-139721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:07:14.774 [DEBUG] [Thread-139721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:07:14.774 [DEBUG] [Thread-139721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:07:14.774 [DEBUG] [Thread-139721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:07:14.790 [INFO] [Thread-139721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:07:14.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:07:14.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:07:15.577 [DEBUG] [Thread-139721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:07:15.578 [DEBUG] [Thread-139721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:07:15.625 [DEBUG] [Thread-139721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:07:15.625 [DEBUG] [Thread-139721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:07:15.634 [DEBUG] [Thread-139721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:07:15.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:07:15.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02: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') -> 00000000
2026-02-12T02:07:15.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:07:15.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:07:15.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:07:15.670 [DEBUG] [Thread-139721] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:07:17.767 [DEBUG] [Thread-139723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:26.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:26.766 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:32.878 [DEBUG] [Thread-139724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:07:45.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:07:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:07:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 7, 13), 0.5, 96.58, 0.0, 17.73, 12.43, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:07:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:07:13
2026-02-12T02:07:47.927 [DEBUG] [Thread-139725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:07:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:07:48.152 [DEBUG] [Thread-139726] [transport.py] [_log()] starting thread (client mode): 0xa2d97820
2026-02-12T02:07:48.153 [DEBUG] [Thread-139726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:07:48.164 [DEBUG] [Thread-139726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:07:48.164 [INFO] [Thread-139726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] client lang: <none>
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] server lang: <none>
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] kex follows: False
2026-02-12T02:07:48.169 [DEBUG] [Thread-139726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:07:48.170 [DEBUG] [Thread-139726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:07:48.170 [DEBUG] [Thread-139726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:07:48.170 [DEBUG] [Thread-139726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:07:48.170 [DEBUG] [Thread-139726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:07:48.170 [DEBUG] [Thread-139726] [transport.py] [_log()] Compression: none
2026-02-12T02:07:48.170 [DEBUG] [Thread-139726] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:07:48.194 [DEBUG] [Thread-139726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:07:48.199 [DEBUG] [Thread-139726] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:07:48.201 [DEBUG] [Thread-139726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:07:48.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:07:48.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:07:48.206 [DEBUG] [Thread-139726] [transport.py] [_log()] userauth is OK
2026-02-12T02:07:48.206 [DEBUG] [Thread-139726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:07:48.208 [DEBUG] [Thread-139726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:07:48.208 [DEBUG] [Thread-139726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:07:48.208 [DEBUG] [Thread-139726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:07:48.227 [INFO] [Thread-139726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:07:48.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:07:48.839 [DEBUG] [Thread-139726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:07:48.839 [DEBUG] [Thread-139726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:07:48.841 [DEBUG] [Thread-139726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:07:48.880 [DEBUG] [Thread-139726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:07:48.881 [DEBUG] [Thread-139726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:07:48.884 [DEBUG] [Thread-139726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:07:48.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:07:48.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:07:48.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:07:48.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:07:48.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:07:48.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:07:48.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:07:48.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:07:48.911 [DEBUG] [Thread-139726] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:07:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:07:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.004993 -999.00  +12.60  14.26     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.3 14.3 172.8 17.0 14.4 -4.8 14.2 -5.2 14.1 -4.6 14.4 -5.0
2026-02-12T02:07:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:07:48.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:07:48.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.004993
2026-02-12T02:07:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:07:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:07:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:07:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:07:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:07:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:07:13', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=17.73, temperature=12.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:07:11.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:07:49.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:07:49.036 [DEBUG] [Thread-139729] [transport.py] [_log()] starting thread (client mode): 0xa2d7ac20
2026-02-12T02:07:49.036 [DEBUG] [Thread-139729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:07:49.050 [DEBUG] [Thread-139729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:07:49.051 [INFO] [Thread-139729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:07:49.058 [DEBUG] [Thread-139729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] client lang: <none>
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] server lang: <none>
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] kex follows: False
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] Compression: none
2026-02-12T02:07:49.059 [DEBUG] [Thread-139729] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:07:49.120 [DEBUG] [Thread-139729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:07:49.120 [DEBUG] [Thread-139729] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:07:49.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:07:49.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:07:49.122 [DEBUG] [Thread-139729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:07:49.175 [DEBUG] [Thread-139729] [transport.py] [_log()] userauth is OK
2026-02-12T02:07:49.175 [DEBUG] [Thread-139729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:07:49.175 [DEBUG] [Thread-139729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:07:49.175 [DEBUG] [Thread-139729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:07:49.175 [DEBUG] [Thread-139729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:07:49.198 [INFO] [Thread-139729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:07:49.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:07:49.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:07:50.001 [DEBUG] [Thread-139729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:07:50.001 [DEBUG] [Thread-139729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:07:50.049 [DEBUG] [Thread-139729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:07:50.050 [DEBUG] [Thread-139729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:07:50.059 [DEBUG] [Thread-139729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:07:50.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:07:50.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')
2026-02-12T02:07:50.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:07:50.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:07:50.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:07:50.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:07:50.098 [DEBUG] [Thread-139729] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:08:02.957 [DEBUG] [Thread-139731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:08:04.783 [DEBUG] [Thread-139732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:08:18.025 [DEBUG] [Thread-139733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:08:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:08:20.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:08:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:08:22.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 7, 48), 0.5, 96.62, 0.0, 17.34, 12.47, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:08:22.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:07:48
2026-02-12T02:08:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:08:22.545 [DEBUG] [Thread-139734] [transport.py] [_log()] starting thread (client mode): 0x9eb04070
2026-02-12T02:08:22.546 [DEBUG] [Thread-139734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:08:22.568 [DEBUG] [Thread-139734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:08:22.568 [INFO] [Thread-139734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:08:22.569 [DEBUG] [Thread-139734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] client lang: <none>
2026-02-12T02:08:22.570 [DEBUG] [Thread-139734] [transport.py] [_log()] server lang: <none>
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] kex follows: False
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] Compression: none
2026-02-12T02:08:22.571 [DEBUG] [Thread-139734] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:08:22.593 [DEBUG] [Thread-139734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:08:22.593 [DEBUG] [Thread-139734] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:08:22.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:08:22.594 [DEBUG] [Thread-139734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:08:22.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:08:22.597 [DEBUG] [Thread-139734] [transport.py] [_log()] userauth is OK
2026-02-12T02:08:22.597 [DEBUG] [Thread-139734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:08:22.597 [DEBUG] [Thread-139734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:08:22.597 [DEBUG] [Thread-139734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:08:22.597 [DEBUG] [Thread-139734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:08:22.619 [INFO] [Thread-139734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:08:22.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:08:23.263 [DEBUG] [Thread-139734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:08:23.263 [DEBUG] [Thread-139734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:08:23.263 [DEBUG] [Thread-139734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:08:23.304 [DEBUG] [Thread-139734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:08:23.304 [DEBUG] [Thread-139734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:08:23.307 [DEBUG] [Thread-139734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:08:23.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:08:23.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:08:23.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:08:23.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:08:23.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:08:23.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:08:23.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:08:23.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:08:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:08:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.005341 -999.00  +12.60   8.40     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 8.4 8.4 179.7 15.2 14.4 -4.6 14.2 -4.4 14.1 -5.4 14.4 -5.4
2026-02-12T02:08:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:08:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:08:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.005341
2026-02-12T02:08:23.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:08:23.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:08:23.331 [DEBUG] [Thread-139734] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:08:23.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:08:23.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:08:23.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:08:23.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:07:48', tmtdew=0.5, humidity=96.62, cloud=0.0, wind=17.34, temperature=12.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:07:41.462', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:08:23.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:08:23.422 [DEBUG] [Thread-139737] [transport.py] [_log()] starting thread (client mode): 0xa2d9e500
2026-02-12T02:08:23.422 [DEBUG] [Thread-139737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:08:23.437 [DEBUG] [Thread-139737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:08:23.437 [INFO] [Thread-139737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:08:23.444 [DEBUG] [Thread-139737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:08:23.444 [DEBUG] [Thread-139737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:08:23.444 [DEBUG] [Thread-139737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:08:23.444 [DEBUG] [Thread-139737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:23.444 [DEBUG] [Thread-139737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:23.444 [DEBUG] [Thread-139737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:23.444 [DEBUG] [Thread-139737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] client lang: <none>
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] server lang: <none>
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] kex follows: False
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] Compression: none
2026-02-12T02:08:23.445 [DEBUG] [Thread-139737] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:08:23.503 [DEBUG] [Thread-139737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:08:23.504 [DEBUG] [Thread-139737] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:08:23.505 [DEBUG] [Thread-139737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:08:23.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:08:23.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:08:23.559 [DEBUG] [Thread-139737] [transport.py] [_log()] userauth is OK
2026-02-12T02:08:23.560 [DEBUG] [Thread-139737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:08:23.560 [DEBUG] [Thread-139737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:08:23.560 [DEBUG] [Thread-139737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:08:23.560 [DEBUG] [Thread-139737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:08:23.579 [INFO] [Thread-139737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:08:23.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:08:23.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:08:24.407 [DEBUG] [Thread-139737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:08:24.407 [DEBUG] [Thread-139737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:08:24.455 [DEBUG] [Thread-139737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:08:24.455 [DEBUG] [Thread-139737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:08:24.464 [DEBUG] [Thread-139737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:08:24.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:08:24.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:08:24.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:08:24.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:08:24.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:08:24.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:08:24.498 [DEBUG] [Thread-139737] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:08:26.969 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:08:26.972 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:08:33.062 [DEBUG] [Thread-139739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:08:48.111 [DEBUG] [Thread-139740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:08:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:08:54.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:08:54.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:08:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 8, 24), 0.49, 96.67, 0.0, 16.55, 12.52, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:08:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:08:24
2026-02-12T02:08:57.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:08:57.215 [DEBUG] [Thread-139741] [transport.py] [_log()] starting thread (client mode): 0xa2d9c520
2026-02-12T02:08:57.215 [DEBUG] [Thread-139741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:08:57.234 [DEBUG] [Thread-139741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:08:57.234 [INFO] [Thread-139741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] client lang: <none>
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] server lang: <none>
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] kex follows: False
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:08:57.238 [DEBUG] [Thread-139741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:08:57.239 [DEBUG] [Thread-139741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:08:57.239 [DEBUG] [Thread-139741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:08:57.239 [DEBUG] [Thread-139741] [transport.py] [_log()] Compression: none
2026-02-12T02:08:57.239 [DEBUG] [Thread-139741] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:08:57.256 [DEBUG] [Thread-139741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:08:57.257 [DEBUG] [Thread-139741] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:08:57.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:08:57.258 [DEBUG] [Thread-139741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:08:57.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:08:57.269 [DEBUG] [Thread-139741] [transport.py] [_log()] userauth is OK
2026-02-12T02:08:57.270 [DEBUG] [Thread-139741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:08:57.270 [DEBUG] [Thread-139741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:08:57.270 [DEBUG] [Thread-139741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:08:57.270 [DEBUG] [Thread-139741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:08:57.306 [INFO] [Thread-139741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:08:57.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:08:57.952 [DEBUG] [Thread-139741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:08:57.953 [DEBUG] [Thread-139741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:08:57.953 [DEBUG] [Thread-139741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:08:57.993 [DEBUG] [Thread-139741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:08:57.994 [DEBUG] [Thread-139741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:08:57.997 [DEBUG] [Thread-139741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:08:58.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:08:58.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:08:58.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:08:58.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:08:58.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:08:58.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:08:58.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:08:58.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:08:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:08:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.005688 -999.00  +12.60  12.07     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.1 12.1 170.6 19.3 14.4 -3.6 14.2 -4.1 14.1 -4.6 14.5 -4.1
2026-02-12T02:08:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:08:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:08:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.005688
2026-02-12T02:08:58.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:08:58.032 [DEBUG] [Thread-139741] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:08:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:08:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:08:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:08:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:08:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:08:24', tmtdew=0.49, humidity=96.67, cloud=0.0, wind=16.55, temperature=12.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:08:11.443', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:08:58.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:08:58.130 [DEBUG] [Thread-139744] [transport.py] [_log()] starting thread (client mode): 0xa5741450
2026-02-12T02:08:58.130 [DEBUG] [Thread-139744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:08:58.144 [DEBUG] [Thread-139744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:08:58.144 [INFO] [Thread-139744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:08:58.152 [DEBUG] [Thread-139744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:08:58.152 [DEBUG] [Thread-139744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:08:58.152 [DEBUG] [Thread-139744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:08:58.152 [DEBUG] [Thread-139744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:58.152 [DEBUG] [Thread-139744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:08:58.152 [DEBUG] [Thread-139744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] client lang: <none>
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] server lang: <none>
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] kex follows: False
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] Compression: none
2026-02-12T02:08:58.153 [DEBUG] [Thread-139744] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:08:58.212 [DEBUG] [Thread-139744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:08:58.213 [DEBUG] [Thread-139744] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:08:58.213 [DEBUG] [Thread-139744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:08:58.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:08:58.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:08:58.273 [DEBUG] [Thread-139744] [transport.py] [_log()] userauth is OK
2026-02-12T02:08:58.273 [DEBUG] [Thread-139744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:08:58.273 [DEBUG] [Thread-139744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:08:58.273 [DEBUG] [Thread-139744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:08:58.273 [DEBUG] [Thread-139744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:08:58.298 [INFO] [Thread-139744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:08:58.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:08:58.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:08:59.422 [DEBUG] [Thread-139744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:08:59.422 [DEBUG] [Thread-139744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:08:59.471 [DEBUG] [Thread-139744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:08:59.471 [DEBUG] [Thread-139744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:08:59.480 [DEBUG] [Thread-139744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:08:59.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:08:59.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:08:59.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:08:59.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:08:59.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:08:59.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:08:59.517 [DEBUG] [Thread-139744] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:09:03.156 [DEBUG] [Thread-139746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:09:04.882 [DEBUG] [Thread-139747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:09:18.208 [DEBUG] [Thread-139748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:09:27.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:09:27.176 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:09:29.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:09:29.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:09:29.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:09:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 8, 59), 0.49, 96.65, 0.0, 15.65, 12.57, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:09:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:08:59
2026-02-12T02:09:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:09:32.269 [DEBUG] [Thread-139749] [transport.py] [_log()] starting thread (client mode): 0xa2d94d00
2026-02-12T02:09:32.269 [DEBUG] [Thread-139749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:09:32.285 [DEBUG] [Thread-139749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:09:32.285 [INFO] [Thread-139749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] client lang: <none>
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] server lang: <none>
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] kex follows: False
2026-02-12T02:09:32.289 [DEBUG] [Thread-139749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:09:32.290 [DEBUG] [Thread-139749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:09:32.290 [DEBUG] [Thread-139749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:09:32.290 [DEBUG] [Thread-139749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:09:32.290 [DEBUG] [Thread-139749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:09:32.290 [DEBUG] [Thread-139749] [transport.py] [_log()] Compression: none
2026-02-12T02:09:32.290 [DEBUG] [Thread-139749] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:09:32.308 [DEBUG] [Thread-139749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:09:32.309 [DEBUG] [Thread-139749] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:09:32.310 [DEBUG] [Thread-139749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:09:32.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:09:32.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:09:32.312 [DEBUG] [Thread-139749] [transport.py] [_log()] userauth is OK
2026-02-12T02:09:32.313 [DEBUG] [Thread-139749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:09:32.313 [DEBUG] [Thread-139749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:09:32.313 [DEBUG] [Thread-139749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:09:32.313 [DEBUG] [Thread-139749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:09:32.338 [INFO] [Thread-139749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:09:32.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:09:33.160 [DEBUG] [Thread-139749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:09:33.160 [DEBUG] [Thread-139749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:09:33.161 [DEBUG] [Thread-139749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:09:33.201 [DEBUG] [Thread-139749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:09:33.201 [DEBUG] [Thread-139749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:09:33.205 [DEBUG] [Thread-139749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:09:33.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:09:33.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:09:33.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:09:33.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:09:33.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:09:33.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:09:33.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:09:33.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:09:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:09:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.006035 -999.00  +12.60  12.77     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.8 12.8 177.6 18.7 14.4 -4.2 14.2 -4.7 14.1 -4.1 14.4 -4.3
2026-02-12T02:09:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:09:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:09:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.006035
2026-02-12T02:09:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:09:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:09:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:09:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:09:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:09:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:08:59', tmtdew=0.49, humidity=96.65, cloud=0.0, wind=15.65, temperature=12.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:08:41.424', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:09:33.230 [DEBUG] [Thread-139749] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:09:33.244 [DEBUG] [Thread-139752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:09:33.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:09:33.336 [DEBUG] [Thread-139753] [transport.py] [_log()] starting thread (client mode): 0xa5742230
2026-02-12T02:09:33.336 [DEBUG] [Thread-139753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:09:33.351 [DEBUG] [Thread-139753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:09:33.351 [INFO] [Thread-139753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] client lang: <none>
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] server lang: <none>
2026-02-12T02:09:33.359 [DEBUG] [Thread-139753] [transport.py] [_log()] kex follows: False
2026-02-12T02:09:33.360 [DEBUG] [Thread-139753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:09:33.360 [DEBUG] [Thread-139753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:09:33.360 [DEBUG] [Thread-139753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:09:33.360 [DEBUG] [Thread-139753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:09:33.360 [DEBUG] [Thread-139753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:09:33.360 [DEBUG] [Thread-139753] [transport.py] [_log()] Compression: none
2026-02-12T02:09:33.360 [DEBUG] [Thread-139753] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:09:33.416 [DEBUG] [Thread-139753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:09:33.416 [DEBUG] [Thread-139753] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:09:33.417 [DEBUG] [Thread-139753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:09:33.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:09:33.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:09:33.472 [DEBUG] [Thread-139753] [transport.py] [_log()] userauth is OK
2026-02-12T02:09:33.472 [DEBUG] [Thread-139753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:09:33.472 [DEBUG] [Thread-139753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:09:33.472 [DEBUG] [Thread-139753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:09:33.473 [DEBUG] [Thread-139753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:09:33.491 [INFO] [Thread-139753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:09:33.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:09:33.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:09:34.312 [DEBUG] [Thread-139753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:09:34.313 [DEBUG] [Thread-139753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:09:34.360 [DEBUG] [Thread-139753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:09:34.360 [DEBUG] [Thread-139753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:09:34.370 [DEBUG] [Thread-139753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:09:34.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:09:34.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:09:34.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:09:34.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:09:34.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:09:34.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:09:34.405 [DEBUG] [Thread-139753] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:09:48.290 [DEBUG] [Thread-139755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:03.323 [DEBUG] [Thread-139756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:04.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:10:04.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:10:04.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:10:04.961 [DEBUG] [Thread-139757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 9, 34), 0.89, 94.27, 0.0, 18.88, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:10:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:09:34
2026-02-12T02:10:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:10:06.885 [DEBUG] [Thread-139758] [transport.py] [_log()] starting thread (client mode): 0xa57c1420
2026-02-12T02:10:06.885 [DEBUG] [Thread-139758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:10:06.906 [DEBUG] [Thread-139758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:10:06.906 [INFO] [Thread-139758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] client lang: <none>
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] server lang: <none>
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] kex follows: False
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] Compression: none
2026-02-12T02:10:06.910 [DEBUG] [Thread-139758] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:10:06.928 [DEBUG] [Thread-139758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:10:06.929 [DEBUG] [Thread-139758] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:10:06.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:10:06.940 [DEBUG] [Thread-139758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:10:06.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:10:06.942 [DEBUG] [Thread-139758] [transport.py] [_log()] userauth is OK
2026-02-12T02:10:06.942 [DEBUG] [Thread-139758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:10:06.942 [DEBUG] [Thread-139758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:10:06.942 [DEBUG] [Thread-139758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:10:06.942 [DEBUG] [Thread-139758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:10:06.968 [INFO] [Thread-139758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:10:06.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:10:14.184 [DEBUG] [Thread-139758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:10:14.184 [DEBUG] [Thread-139758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:10:14.185 [DEBUG] [Thread-139758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:10:14.225 [DEBUG] [Thread-139758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:10:14.225 [DEBUG] [Thread-139758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:10:14.228 [DEBUG] [Thread-139758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:10:14.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:10:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:10:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:10:14.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:10:14.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:10:14.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:10:14.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:10:14.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:10:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:10:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.006730 -999.00  +12.60  11.53     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 ----- 11.5 11.5 175.6 17.5 14.4 -3.4 14.2 -3.3 14.1 -3.6 14.5 -4.1
2026-02-12T02:10:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:10:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:10:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.006730
2026-02-12T02:10:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:10:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:10:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:10:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:10:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:10:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:09:34', tmtdew=0.89, humidity=94.27, cloud=0.0, wind=18.88, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:09:41.472', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:10:14.258 [DEBUG] [Thread-139758] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:10:14.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:10:14.356 [DEBUG] [Thread-139761] [transport.py] [_log()] starting thread (client mode): 0xa2d79b70
2026-02-12T02:10:14.356 [DEBUG] [Thread-139761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:10:14.373 [DEBUG] [Thread-139761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:10:14.373 [INFO] [Thread-139761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:10:14.384 [DEBUG] [Thread-139761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:10:14.384 [DEBUG] [Thread-139761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:10:14.384 [DEBUG] [Thread-139761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:10:14.384 [DEBUG] [Thread-139761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:14.384 [DEBUG] [Thread-139761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:14.384 [DEBUG] [Thread-139761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] client lang: <none>
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] server lang: <none>
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] kex follows: False
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:10:14.385 [DEBUG] [Thread-139761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:10:14.386 [DEBUG] [Thread-139761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:10:14.386 [DEBUG] [Thread-139761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:10:14.386 [DEBUG] [Thread-139761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:10:14.387 [DEBUG] [Thread-139761] [transport.py] [_log()] Compression: none
2026-02-12T02:10:14.387 [DEBUG] [Thread-139761] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:10:14.448 [DEBUG] [Thread-139761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:10:14.449 [DEBUG] [Thread-139761] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:10:14.450 [DEBUG] [Thread-139761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:10:14.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:10:14.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:10:14.505 [DEBUG] [Thread-139761] [transport.py] [_log()] userauth is OK
2026-02-12T02:10:14.505 [DEBUG] [Thread-139761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:10:14.505 [DEBUG] [Thread-139761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:10:14.505 [DEBUG] [Thread-139761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:10:14.506 [DEBUG] [Thread-139761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:10:14.524 [INFO] [Thread-139761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:10:14.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:10:14.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:10:15.328 [DEBUG] [Thread-139761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:10:15.328 [DEBUG] [Thread-139761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:10:15.379 [DEBUG] [Thread-139761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:10:15.379 [DEBUG] [Thread-139761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:10:15.389 [DEBUG] [Thread-139761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:10:15.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:10:15.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:10:15.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:10:15.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:10:15.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:10:15.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:10:15.437 [DEBUG] [Thread-139761] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:10:18.361 [DEBUG] [Thread-139763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:27.385 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:27.386 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:33.415 [DEBUG] [Thread-139764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:45.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:10:45.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:10: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
2026-02-12T02:10:47.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 10, 10), 0.49, 96.65, 0.0, 17.01, 12.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:10:47.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:10:10
2026-02-12T02:10:47.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:10:47.870 [DEBUG] [Thread-139765] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-12T02:10:47.870 [DEBUG] [Thread-139765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:10:47.891 [DEBUG] [Thread-139765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:10:47.891 [INFO] [Thread-139765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] client lang: <none>
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] server lang: <none>
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] kex follows: False
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] Compression: none
2026-02-12T02:10:47.894 [DEBUG] [Thread-139765] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:10:47.911 [DEBUG] [Thread-139765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:10:47.911 [DEBUG] [Thread-139765] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:10:47.912 [DEBUG] [Thread-139765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:10:47.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:10:47.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:10:47.914 [DEBUG] [Thread-139765] [transport.py] [_log()] userauth is OK
2026-02-12T02:10:47.914 [DEBUG] [Thread-139765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:10:47.914 [DEBUG] [Thread-139765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:10:47.914 [DEBUG] [Thread-139765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:10:47.914 [DEBUG] [Thread-139765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:10:47.937 [INFO] [Thread-139765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:10:47.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:10:48.464 [DEBUG] [Thread-139767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:10:48.562 [DEBUG] [Thread-139765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:10:48.563 [DEBUG] [Thread-139765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:10:48.563 [DEBUG] [Thread-139765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:10:48.603 [DEBUG] [Thread-139765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:10:48.604 [DEBUG] [Thread-139765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:10:48.608 [DEBUG] [Thread-139765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:10:48.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:10:48.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:10:48.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:10:48.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:10:48.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:10:48.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:10:48.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:10:48.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:10:48.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:10:48.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.007077 -999.00  +12.60   7.95     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 8.0 8.0 167.7 15.5 14.5 -2.9 14.3 -2.7 14.2 -3.0 14.5 -3.3
2026-02-12T02:10:48.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:10:48.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:10:48.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.007077
2026-02-12T02:10:48.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:10:48.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:10:48.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:10:48.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:10:48.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:10:48.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:10:10', tmtdew=0.49, humidity=96.65, cloud=0.0, wind=17.01, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:10:11.453', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:10:48.636 [DEBUG] [Thread-139765] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:10:48.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:10:48.732 [DEBUG] [Thread-139769] [transport.py] [_log()] starting thread (client mode): 0xa57738b0
2026-02-12T02:10:48.733 [DEBUG] [Thread-139769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:10:48.747 [DEBUG] [Thread-139769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:10:48.747 [INFO] [Thread-139769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:10:48.754 [DEBUG] [Thread-139769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:10:48.754 [DEBUG] [Thread-139769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:10:48.754 [DEBUG] [Thread-139769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] client lang: <none>
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] server lang: <none>
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] kex follows: False
2026-02-12T02:10:48.755 [DEBUG] [Thread-139769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:10:48.756 [DEBUG] [Thread-139769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:10:48.756 [DEBUG] [Thread-139769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:10:48.756 [DEBUG] [Thread-139769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:10:48.756 [DEBUG] [Thread-139769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:10:48.756 [DEBUG] [Thread-139769] [transport.py] [_log()] Compression: none
2026-02-12T02:10:48.756 [DEBUG] [Thread-139769] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:10:48.818 [DEBUG] [Thread-139769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:10:48.818 [DEBUG] [Thread-139769] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:10:48.819 [DEBUG] [Thread-139769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:10:48.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:10:48.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:10:48.877 [DEBUG] [Thread-139769] [transport.py] [_log()] userauth is OK
2026-02-12T02:10:48.877 [DEBUG] [Thread-139769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:10:48.877 [DEBUG] [Thread-139769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:10:48.877 [DEBUG] [Thread-139769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:10:48.877 [DEBUG] [Thread-139769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:10:48.895 [INFO] [Thread-139769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:10:48.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:10:48.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:10:49.711 [DEBUG] [Thread-139769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:10:49.712 [DEBUG] [Thread-139769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:10:49.759 [DEBUG] [Thread-139769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:10:49.760 [DEBUG] [Thread-139769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:10:49.769 [DEBUG] [Thread-139769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:10:49.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:10:49.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:10:49.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:10:49.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:10:49.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:10:49.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:10:49.805 [DEBUG] [Thread-139769] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:11:03.500 [DEBUG] [Thread-139771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:11:05.043 [DEBUG] [Thread-139772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:11:18.552 [DEBUG] [Thread-139773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:11:19.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:11:19.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:11:19.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:11:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 10, 47), 0.54, 96.65, 0.0, 16.85, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:11:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:10:47
2026-02-12T02:11:22.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:11:22.208 [DEBUG] [Thread-139774] [transport.py] [_log()] starting thread (client mode): 0xa5759810
2026-02-12T02:11:22.208 [DEBUG] [Thread-139774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:11:22.219 [DEBUG] [Thread-139774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:11:22.219 [INFO] [Thread-139774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:11:22.222 [DEBUG] [Thread-139774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] client lang: <none>
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] server lang: <none>
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] kex follows: False
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:11:22.223 [DEBUG] [Thread-139774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:11:22.224 [DEBUG] [Thread-139774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:11:22.224 [DEBUG] [Thread-139774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:11:22.224 [DEBUG] [Thread-139774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:11:22.224 [DEBUG] [Thread-139774] [transport.py] [_log()] Compression: none
2026-02-12T02:11:22.224 [DEBUG] [Thread-139774] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:11:22.242 [DEBUG] [Thread-139774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:11:22.243 [DEBUG] [Thread-139774] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:11:22.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:11:22.244 [DEBUG] [Thread-139774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:11:22.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:11:22.285 [DEBUG] [Thread-139774] [transport.py] [_log()] userauth is OK
2026-02-12T02:11:22.285 [DEBUG] [Thread-139774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:11:22.285 [DEBUG] [Thread-139774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:11:22.285 [DEBUG] [Thread-139774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:11:22.285 [DEBUG] [Thread-139774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:11:22.317 [INFO] [Thread-139774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:11:22.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:11:22.970 [DEBUG] [Thread-139774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:11:22.970 [DEBUG] [Thread-139774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:11:22.970 [DEBUG] [Thread-139774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:11:23.011 [DEBUG] [Thread-139774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:11:23.011 [DEBUG] [Thread-139774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:11:23.014 [DEBUG] [Thread-139774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:11:23.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:11:23.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:11:23.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:11:23.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:11:23.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:11:23.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:11:23.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:11:23.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:11:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:11:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.007424 -999.00  +12.60  13.11     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.1 13.1 169.6 17.7 14.6 -3.0 14.3 -2.7 14.2 -3.0 14.6 -3.3
2026-02-12T02:11:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:11:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:11:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.007424
2026-02-12T02:11:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:11:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:11:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:11:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:11:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:11:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:10:47', tmtdew=0.54, humidity=96.65, cloud=0.0, wind=16.85, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:10:41.434', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:11:23.037 [DEBUG] [Thread-139774] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:11:23.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:11:23.133 [DEBUG] [Thread-139777] [transport.py] [_log()] starting thread (client mode): 0xa5740ac0
2026-02-12T02:11:23.133 [DEBUG] [Thread-139777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:11:23.147 [DEBUG] [Thread-139777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:11:23.147 [INFO] [Thread-139777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] client lang: <none>
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] server lang: <none>
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] kex follows: False
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] Compression: none
2026-02-12T02:11:23.155 [DEBUG] [Thread-139777] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:11:23.212 [DEBUG] [Thread-139777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:11:23.213 [DEBUG] [Thread-139777] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:11:23.213 [DEBUG] [Thread-139777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:11:23.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:11:23.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:11:23.269 [DEBUG] [Thread-139777] [transport.py] [_log()] userauth is OK
2026-02-12T02:11:23.269 [DEBUG] [Thread-139777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:11:23.269 [DEBUG] [Thread-139777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:11:23.269 [DEBUG] [Thread-139777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:11:23.269 [DEBUG] [Thread-139777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:11:23.283 [INFO] [Thread-139777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:11:23.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:11:23.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:11:24.107 [DEBUG] [Thread-139777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:11:24.108 [DEBUG] [Thread-139777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:11:24.155 [DEBUG] [Thread-139777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:11:24.155 [DEBUG] [Thread-139777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:11:24.164 [DEBUG] [Thread-139777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:11:24.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:11:24.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:11:24.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:11:24.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:11:24.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:11:24.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:11:24.199 [DEBUG] [Thread-139777] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:11:27.588 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:11:27.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:11:33.592 [DEBUG] [Thread-139779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:11:48.646 [DEBUG] [Thread-139780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:11:54.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:11:54.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:11:54.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:11:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 11, 22), 0.55, 96.62, 0.0, 16.06, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:11:56.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:11:22
2026-02-12T02:11:56.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:11:56.864 [DEBUG] [Thread-139781] [transport.py] [_log()] starting thread (client mode): 0xa5771810
2026-02-12T02:11:56.864 [DEBUG] [Thread-139781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:11:56.884 [DEBUG] [Thread-139781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:11:56.884 [INFO] [Thread-139781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:11:56.887 [DEBUG] [Thread-139781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:11:56.887 [DEBUG] [Thread-139781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:11:56.887 [DEBUG] [Thread-139781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:11:56.887 [DEBUG] [Thread-139781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:56.887 [DEBUG] [Thread-139781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:56.887 [DEBUG] [Thread-139781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:56.887 [DEBUG] [Thread-139781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] client lang: <none>
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] server lang: <none>
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] kex follows: False
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] Compression: none
2026-02-12T02:11:56.888 [DEBUG] [Thread-139781] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:11:56.904 [DEBUG] [Thread-139781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:11:56.905 [DEBUG] [Thread-139781] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:11:56.905 [DEBUG] [Thread-139781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:11:56.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:11:56.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:11:56.907 [DEBUG] [Thread-139781] [transport.py] [_log()] userauth is OK
2026-02-12T02:11:56.908 [DEBUG] [Thread-139781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:11:56.908 [DEBUG] [Thread-139781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:11:56.908 [DEBUG] [Thread-139781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:11:56.908 [DEBUG] [Thread-139781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:11:56.932 [INFO] [Thread-139781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:11:56.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:11:57.562 [DEBUG] [Thread-139781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:11:57.562 [DEBUG] [Thread-139781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:11:57.563 [DEBUG] [Thread-139781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:11:57.603 [DEBUG] [Thread-139781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:11:57.603 [DEBUG] [Thread-139781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:11:57.606 [DEBUG] [Thread-139781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:11:57.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:11:57.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:11:57.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:11:57.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:11:57.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:11:57.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:11:57.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:11:57.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:11:57.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:11:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.007771 -999.00  +12.60  11.97     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.0 12.0 184.0 19.0 14.6 -3.1 14.3 -3.6 14.2 -3.3 14.6 -3.6
2026-02-12T02:11:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:11:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:11:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.007771
2026-02-12T02:11:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:11:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:11:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:11:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:11:57.629 [DEBUG] [Thread-139781] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:11:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:11:57.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:11:22', tmtdew=0.55, humidity=96.62, cloud=0.0, wind=16.06, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:11:11.414', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:11:57.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:11:57.742 [DEBUG] [Thread-139784] [transport.py] [_log()] starting thread (client mode): 0xa5770310
2026-02-12T02:11:57.742 [DEBUG] [Thread-139784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:11:57.756 [DEBUG] [Thread-139784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:11:57.756 [INFO] [Thread-139784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:11:57.764 [DEBUG] [Thread-139784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:11:57.764 [DEBUG] [Thread-139784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:11:57.764 [DEBUG] [Thread-139784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:11:57.764 [DEBUG] [Thread-139784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:57.764 [DEBUG] [Thread-139784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:11:57.764 [DEBUG] [Thread-139784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:57.764 [DEBUG] [Thread-139784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] client lang: <none>
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] server lang: <none>
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] kex follows: False
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:11:57.765 [DEBUG] [Thread-139784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:11:57.766 [DEBUG] [Thread-139784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:11:57.766 [DEBUG] [Thread-139784] [transport.py] [_log()] Compression: none
2026-02-12T02:11:57.766 [DEBUG] [Thread-139784] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:11:57.824 [DEBUG] [Thread-139784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:11:57.825 [DEBUG] [Thread-139784] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:11:57.825 [DEBUG] [Thread-139784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:11:57.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:11:57.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:11:57.882 [DEBUG] [Thread-139784] [transport.py] [_log()] userauth is OK
2026-02-12T02:11:57.882 [DEBUG] [Thread-139784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:11:57.882 [DEBUG] [Thread-139784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:11:57.882 [DEBUG] [Thread-139784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:11:57.882 [DEBUG] [Thread-139784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:11:57.904 [INFO] [Thread-139784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:11:57.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:11:57.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:11:58.696 [DEBUG] [Thread-139784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:11:58.697 [DEBUG] [Thread-139784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:11:58.748 [DEBUG] [Thread-139784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:11:58.748 [DEBUG] [Thread-139784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:11:58.757 [DEBUG] [Thread-139784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:11:58.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:11:58.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:11:58.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:11:58.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:11:58.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:11:58.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:11:58.790 [DEBUG] [Thread-139784] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:12:03.680 [DEBUG] [Thread-139786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:12:05.128 [DEBUG] [Thread-139787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:12:18.743 [DEBUG] [Thread-139788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:12:27.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:12:27.794 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:12:28.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:12:28.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:12:28.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:12:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 11, 57), 0.5, 96.62, 0.0, 15.88, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:12:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:11:57
2026-02-12T02:12:30.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:12:31.130 [DEBUG] [Thread-139789] [transport.py] [_log()] starting thread (client mode): 0xa2d9cb80
2026-02-12T02:12:31.130 [DEBUG] [Thread-139789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:12:31.150 [DEBUG] [Thread-139789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:12:31.150 [INFO] [Thread-139789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:12:31.154 [DEBUG] [Thread-139789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] client lang: <none>
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] server lang: <none>
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] kex follows: False
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] Compression: none
2026-02-12T02:12:31.155 [DEBUG] [Thread-139789] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:12:31.175 [DEBUG] [Thread-139789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:12:31.176 [DEBUG] [Thread-139789] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:12:31.176 [DEBUG] [Thread-139789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:12:31.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:12:31.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:12:31.179 [DEBUG] [Thread-139789] [transport.py] [_log()] userauth is OK
2026-02-12T02:12:31.179 [DEBUG] [Thread-139789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:12:31.179 [DEBUG] [Thread-139789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:12:31.179 [DEBUG] [Thread-139789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:12:31.179 [DEBUG] [Thread-139789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:12:31.203 [INFO] [Thread-139789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:12:31.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:12:31.854 [DEBUG] [Thread-139789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:12:31.855 [DEBUG] [Thread-139789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:12:31.855 [DEBUG] [Thread-139789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:12:31.895 [DEBUG] [Thread-139789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:12:31.896 [DEBUG] [Thread-139789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:12:31.899 [DEBUG] [Thread-139789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:12:31.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:12:31.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:12:31.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:12:31.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:12:31.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:12:31.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:12:31.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:12:31.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:12:31.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:12:31.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.008118 -999.00  +12.60  14.70     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.7 14.7 167.0 18.3 14.6 -3.3 14.3 -2.6 14.2 -3.3 14.6 -3.6
2026-02-12T02:12:31.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:12:31.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:12:31.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.008118
2026-02-12T02:12:31.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:12:31.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:12:31.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:12:31.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:12:31.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:12:31.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:11:57', tmtdew=0.5, humidity=96.62, cloud=0.0, wind=15.88, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:11:41.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:12:31.926 [DEBUG] [Thread-139789] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:12:32.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:12:32.022 [DEBUG] [Thread-139792] [transport.py] [_log()] starting thread (client mode): 0xa575ba30
2026-02-12T02:12:32.022 [DEBUG] [Thread-139792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:12:32.037 [DEBUG] [Thread-139792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:12:32.037 [INFO] [Thread-139792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:12:32.044 [DEBUG] [Thread-139792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] client lang: <none>
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] server lang: <none>
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] kex follows: False
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] Compression: none
2026-02-12T02:12:32.045 [DEBUG] [Thread-139792] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:12:32.109 [DEBUG] [Thread-139792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:12:32.110 [DEBUG] [Thread-139792] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:12:32.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:12:32.111 [DEBUG] [Thread-139792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:12:32.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:12:32.166 [DEBUG] [Thread-139792] [transport.py] [_log()] userauth is OK
2026-02-12T02:12:32.166 [DEBUG] [Thread-139792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:12:32.166 [DEBUG] [Thread-139792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:12:32.166 [DEBUG] [Thread-139792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:12:32.166 [DEBUG] [Thread-139792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:12:32.184 [INFO] [Thread-139792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:12:32.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:12:32.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:12:32.973 [DEBUG] [Thread-139792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:12:32.973 [DEBUG] [Thread-139792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:12:33.021 [DEBUG] [Thread-139792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:12:33.021 [DEBUG] [Thread-139792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:12:33.030 [DEBUG] [Thread-139792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:12:33.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:12:33.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:12:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:12:33.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:12:33.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:12:33.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:12:33.064 [DEBUG] [Thread-139792] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:12:33.779 [DEBUG] [Thread-139794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:12:48.835 [DEBUG] [Thread-139795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:13:03.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:13:03.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:13:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:13:03.880 [DEBUG] [Thread-139796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:13:04.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 12, 33), 0.89, 94.27, 0.0, 17.82, 12.9, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:13:04.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:12:33
2026-02-12T02:13:05.225 [DEBUG] [Thread-139797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:13:05.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:13:05.445 [DEBUG] [Thread-139798] [transport.py] [_log()] starting thread (client mode): 0xa575b220
2026-02-12T02:13:05.445 [DEBUG] [Thread-139798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:13:05.465 [DEBUG] [Thread-139798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:13:05.465 [INFO] [Thread-139798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:13:05.468 [DEBUG] [Thread-139798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] client lang: <none>
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] server lang: <none>
2026-02-12T02:13:05.469 [DEBUG] [Thread-139798] [transport.py] [_log()] kex follows: False
2026-02-12T02:13:05.470 [DEBUG] [Thread-139798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:13:05.470 [DEBUG] [Thread-139798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:13:05.470 [DEBUG] [Thread-139798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:13:05.470 [DEBUG] [Thread-139798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:13:05.470 [DEBUG] [Thread-139798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:13:05.470 [DEBUG] [Thread-139798] [transport.py] [_log()] Compression: none
2026-02-12T02:13:05.470 [DEBUG] [Thread-139798] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:13:05.489 [DEBUG] [Thread-139798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:13:05.490 [DEBUG] [Thread-139798] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:13:05.490 [DEBUG] [Thread-139798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:13:05.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:13:05.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:13:05.492 [DEBUG] [Thread-139798] [transport.py] [_log()] userauth is OK
2026-02-12T02:13:05.493 [DEBUG] [Thread-139798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:13:05.493 [DEBUG] [Thread-139798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:13:05.493 [DEBUG] [Thread-139798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:13:05.493 [DEBUG] [Thread-139798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:13:05.512 [INFO] [Thread-139798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:13:05.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:13:06.306 [DEBUG] [Thread-139798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:13:06.307 [DEBUG] [Thread-139798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:13:06.307 [DEBUG] [Thread-139798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:13:06.348 [DEBUG] [Thread-139798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:13:06.348 [DEBUG] [Thread-139798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:13:06.352 [DEBUG] [Thread-139798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:13:06.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:13:06.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:13:06.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:13:06.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:13:06.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:13:06.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:13:06.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:13:06.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:13:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:13:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.008466 -999.00  +12.60  14.23     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.2 14.2 177.2 17.9 14.6 -3.3 14.3 -3.6 14.2 -3.2 14.6 -3.5
2026-02-12T02:13:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:13:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:13:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.008466
2026-02-12T02:13:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:13:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:13:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:13:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:13:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:13:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:12:33', tmtdew=0.89, humidity=94.27, cloud=0.0, wind=17.82, temperature=12.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:12:11.462', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:13:06.379 [DEBUG] [Thread-139798] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:13:06.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:13:06.474 [DEBUG] [Thread-139801] [transport.py] [_log()] starting thread (client mode): 0xa575a2c0
2026-02-12T02:13:06.474 [DEBUG] [Thread-139801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:13:06.489 [DEBUG] [Thread-139801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:13:06.489 [INFO] [Thread-139801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] client lang: <none>
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] server lang: <none>
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] kex follows: False
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:13:06.497 [DEBUG] [Thread-139801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:13:06.511 [DEBUG] [Thread-139801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:13:06.512 [DEBUG] [Thread-139801] [transport.py] [_log()] Compression: none
2026-02-12T02:13:06.512 [DEBUG] [Thread-139801] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:13:06.558 [DEBUG] [Thread-139801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:13:06.558 [DEBUG] [Thread-139801] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:13:06.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:13:06.559 [DEBUG] [Thread-139801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:13:06.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:13:06.613 [DEBUG] [Thread-139801] [transport.py] [_log()] userauth is OK
2026-02-12T02:13:06.614 [DEBUG] [Thread-139801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:13:06.614 [DEBUG] [Thread-139801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:13:06.614 [DEBUG] [Thread-139801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:13:06.614 [DEBUG] [Thread-139801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:13:06.632 [INFO] [Thread-139801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:13:06.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:13:06.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:13:07.472 [DEBUG] [Thread-139801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:13:07.472 [DEBUG] [Thread-139801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:13:07.523 [DEBUG] [Thread-139801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:13:07.523 [DEBUG] [Thread-139801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:13:07.536 [DEBUG] [Thread-139801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:13:07.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:13:07.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')
2026-02-12T02:13:07.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:13:07.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:13:07.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:13:07.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:13:07.574 [DEBUG] [Thread-139801] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:13:18.915 [DEBUG] [Thread-139803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:13:28.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:13:28.006 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:13:33.979 [DEBUG] [Thread-139804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:13:37.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:13:37.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:13:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:13:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 13, 8), 0.49, 96.63, 0.0, 15.56, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:13:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:13:08
2026-02-12T02:13:40.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:13:40.363 [DEBUG] [Thread-139805] [transport.py] [_log()] starting thread (client mode): 0xa57585b0
2026-02-12T02:13:40.363 [DEBUG] [Thread-139805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:13:40.382 [DEBUG] [Thread-139805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:13:40.383 [INFO] [Thread-139805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:13:40.386 [DEBUG] [Thread-139805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:13:40.386 [DEBUG] [Thread-139805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:13:40.386 [DEBUG] [Thread-139805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:13:40.386 [DEBUG] [Thread-139805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:40.386 [DEBUG] [Thread-139805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:40.386 [DEBUG] [Thread-139805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:40.386 [DEBUG] [Thread-139805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] client lang: <none>
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] server lang: <none>
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] kex follows: False
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] Compression: none
2026-02-12T02:13:40.387 [DEBUG] [Thread-139805] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:13:40.405 [DEBUG] [Thread-139805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:13:40.406 [DEBUG] [Thread-139805] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:13:40.407 [DEBUG] [Thread-139805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:13:40.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:13:40.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:13:40.409 [DEBUG] [Thread-139805] [transport.py] [_log()] userauth is OK
2026-02-12T02:13:40.409 [DEBUG] [Thread-139805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:13:40.409 [DEBUG] [Thread-139805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:13:40.409 [DEBUG] [Thread-139805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:13:40.410 [DEBUG] [Thread-139805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:13:40.433 [INFO] [Thread-139805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:13:40.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:13:41.063 [DEBUG] [Thread-139805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:13:41.063 [DEBUG] [Thread-139805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:13:41.064 [DEBUG] [Thread-139805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:13:41.104 [DEBUG] [Thread-139805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:13:41.104 [DEBUG] [Thread-139805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:13:41.107 [DEBUG] [Thread-139805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:13:41.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:13:41.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:13:41.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:13:41.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:13:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:13:41.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:13:41.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:13:41.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:13:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:13:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.008813 -999.00  +12.60   9.76     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 9.8 9.8 162.4 16.8 14.6 -3.7 14.3 -3.7 14.2 -3.7 14.5 -4.3
2026-02-12T02:13:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:13:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:13:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.008813
2026-02-12T02:13:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:13:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:13:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:13:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:13:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:13:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:13:08', tmtdew=0.49, humidity=96.63, cloud=0.0, wind=15.56, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:12:41.443', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:13:41.127 [DEBUG] [Thread-139805] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:13:41.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:13:41.224 [DEBUG] [Thread-139808] [transport.py] [_log()] starting thread (client mode): 0xa575ace0
2026-02-12T02:13:41.224 [DEBUG] [Thread-139808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:13:41.240 [DEBUG] [Thread-139808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:13:41.240 [INFO] [Thread-139808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:13:41.248 [DEBUG] [Thread-139808] [transport.py] [_log()] client lang: <none>
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] server lang: <none>
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] kex follows: False
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] Compression: none
2026-02-12T02:13:41.249 [DEBUG] [Thread-139808] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:13:41.305 [DEBUG] [Thread-139808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:13:41.306 [DEBUG] [Thread-139808] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:13:41.307 [DEBUG] [Thread-139808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:13:41.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:13:41.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:13:41.362 [DEBUG] [Thread-139808] [transport.py] [_log()] userauth is OK
2026-02-12T02:13:41.362 [DEBUG] [Thread-139808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:13:41.362 [DEBUG] [Thread-139808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:13:41.363 [DEBUG] [Thread-139808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:13:41.363 [DEBUG] [Thread-139808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:13:41.381 [INFO] [Thread-139808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:13:41.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:13:41.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:13:42.192 [DEBUG] [Thread-139808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:13:42.192 [DEBUG] [Thread-139808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:13:42.244 [DEBUG] [Thread-139808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:13:42.244 [DEBUG] [Thread-139808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:13:42.253 [DEBUG] [Thread-139808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:13:42.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:13:42.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:13:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:13:42.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:13:42.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:13:42.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:13:42.289 [DEBUG] [Thread-139808] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:13:49.015 [DEBUG] [Thread-139810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:04.067 [DEBUG] [Thread-139811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:05.314 [DEBUG] [Thread-139812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:12.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:14:12.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:14:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:14:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 13, 43), 0.5, 96.58, 0.0, 16.41, 12.48, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:14:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:13:43
2026-02-12T02:14:15.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:14:15.382 [DEBUG] [Thread-139813] [transport.py] [_log()] starting thread (client mode): 0xa5758c70
2026-02-12T02:14:15.382 [DEBUG] [Thread-139813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:14:15.402 [DEBUG] [Thread-139813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:14:15.402 [INFO] [Thread-139813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:14:15.404 [DEBUG] [Thread-139813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:14:15.404 [DEBUG] [Thread-139813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:14:15.404 [DEBUG] [Thread-139813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] client lang: <none>
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] server lang: <none>
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] kex follows: False
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] Compression: none
2026-02-12T02:14:15.405 [DEBUG] [Thread-139813] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:14:15.415 [DEBUG] [Thread-139813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:14:15.416 [DEBUG] [Thread-139813] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:14:15.417 [DEBUG] [Thread-139813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:14:15.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:14:15.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:14:15.419 [DEBUG] [Thread-139813] [transport.py] [_log()] userauth is OK
2026-02-12T02:14:15.420 [DEBUG] [Thread-139813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:14:15.420 [DEBUG] [Thread-139813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:14:15.420 [DEBUG] [Thread-139813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:14:15.420 [DEBUG] [Thread-139813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:14:15.446 [INFO] [Thread-139813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:14:15.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:14:16.012 [DEBUG] [Thread-139813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:14:16.013 [DEBUG] [Thread-139813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:14:16.013 [DEBUG] [Thread-139813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:14:16.053 [DEBUG] [Thread-139813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:14:16.053 [DEBUG] [Thread-139813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:14:16.057 [DEBUG] [Thread-139813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:14:16.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:14:16.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:14:16.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:14:16.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:14:16.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:14:16.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:14:16.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:14:16.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:14:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:14:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.009854 -999.00  +12.60  14.44     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.4 14.4 172.6 19.8 14.6 -3.7 14.4 -3.3 14.3 -3.7 14.6 -4.2
2026-02-12T02:14:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:14:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:14:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.009854
2026-02-12T02:14:16.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:14:16.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:14:16.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:14:16.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:14:16.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:14:16.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:13:43', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=16.41, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:14:11.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:14:16.088 [DEBUG] [Thread-139813] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:14:16.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:14:16.183 [DEBUG] [Thread-139816] [transport.py] [_log()] starting thread (client mode): 0xa57d65f0
2026-02-12T02:14:16.183 [DEBUG] [Thread-139816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:14:16.198 [DEBUG] [Thread-139816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:14:16.198 [INFO] [Thread-139816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:14:16.205 [DEBUG] [Thread-139816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:14:16.206 [DEBUG] [Thread-139816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:14:16.206 [DEBUG] [Thread-139816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:14:16.206 [DEBUG] [Thread-139816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:16.206 [DEBUG] [Thread-139816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] client lang: <none>
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] server lang: <none>
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] kex follows: False
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] Compression: none
2026-02-12T02:14:16.207 [DEBUG] [Thread-139816] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:14:16.265 [DEBUG] [Thread-139816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:14:16.265 [DEBUG] [Thread-139816] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:14:16.266 [DEBUG] [Thread-139816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:14:16.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:14:16.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:14:16.321 [DEBUG] [Thread-139816] [transport.py] [_log()] userauth is OK
2026-02-12T02:14:16.322 [DEBUG] [Thread-139816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:14:16.322 [DEBUG] [Thread-139816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:14:16.322 [DEBUG] [Thread-139816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:14:16.322 [DEBUG] [Thread-139816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:14:16.340 [INFO] [Thread-139816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:14:16.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:14:16.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:14:17.157 [DEBUG] [Thread-139816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:14:17.158 [DEBUG] [Thread-139816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:14:17.205 [DEBUG] [Thread-139816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:14:17.206 [DEBUG] [Thread-139816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:14:17.216 [DEBUG] [Thread-139816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:14:17.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:14:17.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:14:17.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:14:17.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:14:17.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:14:17.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:14:17.253 [DEBUG] [Thread-139816] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:14:19.107 [DEBUG] [Thread-139818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:28.207 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:28.208 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:34.149 [DEBUG] [Thread-139819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:47.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:14:47.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:14:47.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:14:49.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 14, 19), 0.5, 96.58, 0.0, 15.86, 12.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:14:49.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:14:19
2026-02-12T02:14:49.184 [DEBUG] [Thread-139820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:14:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:14:49.661 [DEBUG] [Thread-139821] [transport.py] [_log()] starting thread (client mode): 0x9eb068c0
2026-02-12T02:14:49.661 [DEBUG] [Thread-139821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:14:49.679 [DEBUG] [Thread-139821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:14:49.679 [INFO] [Thread-139821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:14:49.680 [DEBUG] [Thread-139821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:14:49.680 [DEBUG] [Thread-139821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:14:49.680 [DEBUG] [Thread-139821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:14:49.680 [DEBUG] [Thread-139821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:49.680 [DEBUG] [Thread-139821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:49.680 [DEBUG] [Thread-139821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:49.680 [DEBUG] [Thread-139821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] client lang: <none>
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] server lang: <none>
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] kex follows: False
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] Compression: none
2026-02-12T02:14:49.681 [DEBUG] [Thread-139821] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:14:49.690 [DEBUG] [Thread-139821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:14:49.691 [DEBUG] [Thread-139821] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:14:49.691 [DEBUG] [Thread-139821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:14:49.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:14:49.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:14:49.694 [DEBUG] [Thread-139821] [transport.py] [_log()] userauth is OK
2026-02-12T02:14:49.694 [DEBUG] [Thread-139821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:14:49.694 [DEBUG] [Thread-139821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:14:49.694 [DEBUG] [Thread-139821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:14:49.694 [DEBUG] [Thread-139821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:14:49.711 [INFO] [Thread-139821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:14:49.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:14:50.278 [DEBUG] [Thread-139821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:14:50.278 [DEBUG] [Thread-139821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:14:50.278 [DEBUG] [Thread-139821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:14:50.319 [DEBUG] [Thread-139821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:14:50.320 [DEBUG] [Thread-139821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:14:50.322 [DEBUG] [Thread-139821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:14:50.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:14:50.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:14:50.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:14:50.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:14:50.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:14:50.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:14:50.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:14:50.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:14:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:14:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.010202 -999.00  +12.60  13.77     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.8 13.8 167.0 18.2 14.7 -3.1 14.5 -2.5 14.3 -3.6 14.7 -3.9
2026-02-12T02:14:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:14:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:14:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.010202
2026-02-12T02:14:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:14:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:14:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:14:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:14:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:14:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:14:19', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=15.86, temperature=12.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:14:41.453', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:14:50.349 [DEBUG] [Thread-139821] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:14:50.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:14:50.446 [DEBUG] [Thread-139824] [transport.py] [_log()] starting thread (client mode): 0xa575b010
2026-02-12T02:14:50.446 [DEBUG] [Thread-139824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:14:50.461 [DEBUG] [Thread-139824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:14:50.461 [INFO] [Thread-139824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:14:50.468 [DEBUG] [Thread-139824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] client lang: <none>
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] server lang: <none>
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] kex follows: False
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:14:50.469 [DEBUG] [Thread-139824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:14:50.470 [DEBUG] [Thread-139824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:14:50.470 [DEBUG] [Thread-139824] [transport.py] [_log()] Compression: none
2026-02-12T02:14:50.470 [DEBUG] [Thread-139824] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:14:50.525 [DEBUG] [Thread-139824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:14:50.526 [DEBUG] [Thread-139824] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:14:50.527 [DEBUG] [Thread-139824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:14:50.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:14:50.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:14:50.582 [DEBUG] [Thread-139824] [transport.py] [_log()] userauth is OK
2026-02-12T02:14:50.582 [DEBUG] [Thread-139824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:14:50.582 [DEBUG] [Thread-139824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:14:50.582 [DEBUG] [Thread-139824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:14:50.582 [DEBUG] [Thread-139824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:14:50.601 [INFO] [Thread-139824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:14:50.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:14:50.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:14:51.401 [DEBUG] [Thread-139824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:14:51.402 [DEBUG] [Thread-139824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:14:51.449 [DEBUG] [Thread-139824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:14:51.450 [DEBUG] [Thread-139824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:14:51.459 [DEBUG] [Thread-139824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:14:51.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:14:51.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:14:51.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:14:51.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:14:51.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:14:51.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:14:51.495 [DEBUG] [Thread-139824] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:15:04.225 [DEBUG] [Thread-139826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:15:05.409 [DEBUG] [Thread-139827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:15:19.278 [DEBUG] [Thread-139828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:15:21.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:15:21.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:15:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:15:23.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 14, 55), 0.49, 96.65, 0.0, 15.46, 12.57, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:15:23.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:14:55
2026-02-12T02:15:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:15:23.923 [DEBUG] [Thread-139829] [transport.py] [_log()] starting thread (client mode): 0x9eb04370
2026-02-12T02:15:23.923 [DEBUG] [Thread-139829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:15:23.938 [DEBUG] [Thread-139829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:15:23.938 [INFO] [Thread-139829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:15:23.941 [DEBUG] [Thread-139829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:15:23.941 [DEBUG] [Thread-139829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:15:23.941 [DEBUG] [Thread-139829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] client lang: <none>
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] server lang: <none>
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] kex follows: False
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] Compression: none
2026-02-12T02:15:23.942 [DEBUG] [Thread-139829] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:15:23.961 [DEBUG] [Thread-139829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:15:23.962 [DEBUG] [Thread-139829] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:15:23.963 [DEBUG] [Thread-139829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:15:23.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:15:23.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:15:23.966 [DEBUG] [Thread-139829] [transport.py] [_log()] userauth is OK
2026-02-12T02:15:23.966 [DEBUG] [Thread-139829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:15:23.967 [DEBUG] [Thread-139829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:15:23.967 [DEBUG] [Thread-139829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:15:23.967 [DEBUG] [Thread-139829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:15:23.990 [INFO] [Thread-139829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:15:23.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:15:24.582 [DEBUG] [Thread-139829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:15:24.582 [DEBUG] [Thread-139829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:15:24.583 [DEBUG] [Thread-139829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:15:24.623 [DEBUG] [Thread-139829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:15:24.624 [DEBUG] [Thread-139829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:15:24.627 [DEBUG] [Thread-139829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:15:24.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:15:24.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:15:24.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:15:24.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:15:24.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:15:24.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:15:24.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:15:24.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:15:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:15:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.010549 -999.00  +12.60  11.01     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 11.0 11.0 163.2 20.7 14.7 -2.6 14.4 -2.5 14.3 -2.5 14.7 -3.0
2026-02-12T02:15:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:15:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:15:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.010549
2026-02-12T02:15:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:15:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:15:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:15:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:15:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:15:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:14:55', tmtdew=0.49, humidity=96.65, cloud=0.0, wind=15.46, temperature=12.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:15:11.434', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:15:24.656 [DEBUG] [Thread-139829] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:15:24.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:15:24.752 [DEBUG] [Thread-139832] [transport.py] [_log()] starting thread (client mode): 0xa2d9c520
2026-02-12T02:15:24.752 [DEBUG] [Thread-139832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:15:24.766 [DEBUG] [Thread-139832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:15:24.766 [INFO] [Thread-139832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:15:24.774 [DEBUG] [Thread-139832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:15:24.775 [DEBUG] [Thread-139832] [transport.py] [_log()] client lang: <none>
2026-02-12T02:15:24.776 [DEBUG] [Thread-139832] [transport.py] [_log()] server lang: <none>
2026-02-12T02:15:24.776 [DEBUG] [Thread-139832] [transport.py] [_log()] kex follows: False
2026-02-12T02:15:24.776 [DEBUG] [Thread-139832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:15:24.776 [DEBUG] [Thread-139832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:15:24.776 [DEBUG] [Thread-139832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:15:24.776 [DEBUG] [Thread-139832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:15:24.776 [DEBUG] [Thread-139832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:15:24.777 [DEBUG] [Thread-139832] [transport.py] [_log()] Compression: none
2026-02-12T02:15:24.777 [DEBUG] [Thread-139832] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:15:24.834 [DEBUG] [Thread-139832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:15:24.834 [DEBUG] [Thread-139832] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:15:24.835 [DEBUG] [Thread-139832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:15:24.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:15:24.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:15:24.890 [DEBUG] [Thread-139832] [transport.py] [_log()] userauth is OK
2026-02-12T02:15:24.890 [DEBUG] [Thread-139832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:15:24.890 [DEBUG] [Thread-139832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:15:24.891 [DEBUG] [Thread-139832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:15:24.891 [DEBUG] [Thread-139832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:15:24.909 [INFO] [Thread-139832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:15:24.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:15:24.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:15:25.724 [DEBUG] [Thread-139832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:15:25.724 [DEBUG] [Thread-139832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:15:25.772 [DEBUG] [Thread-139832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:15:25.772 [DEBUG] [Thread-139832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:15:25.782 [DEBUG] [Thread-139832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:15:25.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:15:25.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:15:25.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:15:25.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:15:25.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:15:25.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:15:25.818 [DEBUG] [Thread-139832] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:15:28.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:15:28.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:15:34.318 [DEBUG] [Thread-139834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:15:49.377 [DEBUG] [Thread-139835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:15:55.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:15:55.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:15:55.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:15:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 15, 30), 0.49, 96.67, 0.0, 16.0, 12.57, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:15:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:15:30
2026-02-12T02:15:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:15:58.494 [DEBUG] [Thread-139836] [transport.py] [_log()] starting thread (client mode): 0xa2d9dd50
2026-02-12T02:15:58.495 [DEBUG] [Thread-139836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:15:58.516 [DEBUG] [Thread-139836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:15:58.516 [INFO] [Thread-139836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:15:58.519 [DEBUG] [Thread-139836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:15:58.519 [DEBUG] [Thread-139836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:15:58.519 [DEBUG] [Thread-139836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:15:58.519 [DEBUG] [Thread-139836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] client lang: <none>
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] server lang: <none>
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] kex follows: False
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] Compression: none
2026-02-12T02:15:58.520 [DEBUG] [Thread-139836] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:15:58.537 [DEBUG] [Thread-139836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:15:58.538 [DEBUG] [Thread-139836] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:15:58.538 [DEBUG] [Thread-139836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:15:58.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:15:58.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:15:58.540 [DEBUG] [Thread-139836] [transport.py] [_log()] userauth is OK
2026-02-12T02:15:58.540 [DEBUG] [Thread-139836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:15:58.540 [DEBUG] [Thread-139836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:15:58.541 [DEBUG] [Thread-139836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:15:58.541 [DEBUG] [Thread-139836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:15:58.556 [INFO] [Thread-139836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:15:58.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:15:59.147 [DEBUG] [Thread-139836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:15:59.148 [DEBUG] [Thread-139836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:15:59.148 [DEBUG] [Thread-139836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:15:59.188 [DEBUG] [Thread-139836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:15:59.189 [DEBUG] [Thread-139836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:15:59.192 [DEBUG] [Thread-139836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:15:59.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:15:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:15:59.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:15:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:15:59.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:15:59.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:15:59.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:15:59.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:15:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:15:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.010896 -999.00  +12.70  12.49     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.5 12.5 165.2 14.7 14.7 -3.0 14.4 -2.6 14.3 -2.8 14.7 -3.1
2026-02-12T02:15:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:15:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:15:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.010896
2026-02-12T02:15:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:15:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:15:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:15:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:15:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:15:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:15:30', tmtdew=0.49, humidity=96.67, cloud=0.0, wind=16.0, temperature=12.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:15:41.414', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:15:59.218 [DEBUG] [Thread-139836] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:15:59.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:15:59.315 [DEBUG] [Thread-139839] [transport.py] [_log()] starting thread (client mode): 0xa57e2770
2026-02-12T02:15:59.315 [DEBUG] [Thread-139839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:15:59.330 [DEBUG] [Thread-139839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:15:59.330 [INFO] [Thread-139839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:15:59.338 [DEBUG] [Thread-139839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] client lang: <none>
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] server lang: <none>
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] kex follows: False
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:15:59.339 [DEBUG] [Thread-139839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:15:59.340 [DEBUG] [Thread-139839] [transport.py] [_log()] Compression: none
2026-02-12T02:15:59.340 [DEBUG] [Thread-139839] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:15:59.398 [DEBUG] [Thread-139839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:15:59.398 [DEBUG] [Thread-139839] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:15:59.399 [DEBUG] [Thread-139839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:15:59.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:15:59.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:15:59.454 [DEBUG] [Thread-139839] [transport.py] [_log()] userauth is OK
2026-02-12T02:15:59.454 [DEBUG] [Thread-139839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:15:59.454 [DEBUG] [Thread-139839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:15:59.455 [DEBUG] [Thread-139839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:15:59.455 [DEBUG] [Thread-139839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:15:59.479 [INFO] [Thread-139839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:15:59.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:15:59.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:16:00.279 [DEBUG] [Thread-139839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:16:00.279 [DEBUG] [Thread-139839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:16:00.327 [DEBUG] [Thread-139839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:16:00.327 [DEBUG] [Thread-139839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:16:00.337 [DEBUG] [Thread-139839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:16:00.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:16:00.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:16:00.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:16:00.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:16:00.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:16:00.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:16:00.373 [DEBUG] [Thread-139839] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:16:04.415 [DEBUG] [Thread-139841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:16:05.487 [DEBUG] [Thread-139842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:16:19.461 [DEBUG] [Thread-139843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:16:28.648 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:16:28.648 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:16:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:16:30.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:16:30.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:16:32.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 16, 5), 0.49, 96.65, 0.0, 16.78, 12.57, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:16:32.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:16:05
2026-02-12T02:16:32.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:16:32.804 [DEBUG] [Thread-139844] [transport.py] [_log()] starting thread (client mode): 0xa2d9fc40
2026-02-12T02:16:32.804 [DEBUG] [Thread-139844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:16:32.816 [DEBUG] [Thread-139844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:16:32.817 [INFO] [Thread-139844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:16:32.817 [DEBUG] [Thread-139844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:16:32.817 [DEBUG] [Thread-139844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] client lang: <none>
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] server lang: <none>
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] kex follows: False
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] Compression: none
2026-02-12T02:16:32.818 [DEBUG] [Thread-139844] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:16:32.826 [DEBUG] [Thread-139844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:16:32.827 [DEBUG] [Thread-139844] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:16:32.827 [DEBUG] [Thread-139844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:16:32.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:16:32.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:16:32.829 [DEBUG] [Thread-139844] [transport.py] [_log()] userauth is OK
2026-02-12T02:16:32.829 [DEBUG] [Thread-139844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:16:32.829 [DEBUG] [Thread-139844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:16:32.829 [DEBUG] [Thread-139844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:16:32.829 [DEBUG] [Thread-139844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:16:32.843 [INFO] [Thread-139844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:16:32.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:16:33.403 [DEBUG] [Thread-139844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:16:33.404 [DEBUG] [Thread-139844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:16:33.404 [DEBUG] [Thread-139844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:16:33.444 [DEBUG] [Thread-139844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:16:33.445 [DEBUG] [Thread-139844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:16:33.449 [DEBUG] [Thread-139844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:16:33.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:16:33.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:16:33.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:16:33.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:16:33.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:16:33.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:16:33.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:16:33.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:16:33.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:16:33.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.011243 -999.00  +12.70  15.95     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.9 15.9 166.8 20.1 14.7 -3.5 14.4 -2.9 14.3 -3.1 14.7 -3.7
2026-02-12T02:16:33.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:16:33.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:16:33.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.011243
2026-02-12T02:16:33.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:16:33.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:16:33.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:16:33.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:16:33.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:16:33.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:16:05', tmtdew=0.49, humidity=96.65, cloud=0.0, wind=16.78, temperature=12.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:16:11.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:16:33.478 [DEBUG] [Thread-139844] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:16:33.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:16:33.577 [DEBUG] [Thread-139847] [transport.py] [_log()] starting thread (client mode): 0xa2d9e1d0
2026-02-12T02:16:33.577 [DEBUG] [Thread-139847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:16:33.591 [DEBUG] [Thread-139847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:16:33.592 [INFO] [Thread-139847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:16:33.599 [DEBUG] [Thread-139847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:16:33.599 [DEBUG] [Thread-139847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:16:33.599 [DEBUG] [Thread-139847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:16:33.599 [DEBUG] [Thread-139847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:16:33.599 [DEBUG] [Thread-139847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:16:33.599 [DEBUG] [Thread-139847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] client lang: <none>
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] server lang: <none>
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] kex follows: False
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] Compression: none
2026-02-12T02:16:33.600 [DEBUG] [Thread-139847] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:16:33.658 [DEBUG] [Thread-139847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:16:33.659 [DEBUG] [Thread-139847] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:16:33.660 [DEBUG] [Thread-139847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:16:33.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:16:33.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:16:33.714 [DEBUG] [Thread-139847] [transport.py] [_log()] userauth is OK
2026-02-12T02:16:33.715 [DEBUG] [Thread-139847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:16:33.715 [DEBUG] [Thread-139847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:16:33.715 [DEBUG] [Thread-139847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:16:33.715 [DEBUG] [Thread-139847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:16:33.733 [INFO] [Thread-139847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:16:33.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:16:33.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:16:34.494 [DEBUG] [Thread-139849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:16:34.519 [DEBUG] [Thread-139847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:16:34.519 [DEBUG] [Thread-139847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:16:34.567 [DEBUG] [Thread-139847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:16:34.567 [DEBUG] [Thread-139847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:16:34.575 [DEBUG] [Thread-139847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:16:34.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:16:34.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:16:34.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:16:34.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:16:34.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:16:34.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:16:34.610 [DEBUG] [Thread-139847] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:16:49.544 [DEBUG] [Thread-139850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:17:04.581 [DEBUG] [Thread-139851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:17:04.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:17:04.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:17:04.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:17:05.578 [DEBUG] [Thread-139852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:17:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 16, 42), 0.88, 94.3, 0.0, 19.73, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:17:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:16:42
2026-02-12T02:17:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:17:07.028 [DEBUG] [Thread-139853] [transport.py] [_log()] starting thread (client mode): 0xa2d9de40
2026-02-12T02:17:07.029 [DEBUG] [Thread-139853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:17:07.049 [DEBUG] [Thread-139853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:17:07.049 [INFO] [Thread-139853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:07.052 [DEBUG] [Thread-139853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] client lang: <none>
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] server lang: <none>
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] kex follows: False
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] Compression: none
2026-02-12T02:17:07.053 [DEBUG] [Thread-139853] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:17:07.071 [DEBUG] [Thread-139853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:17:07.071 [DEBUG] [Thread-139853] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:17:07.072 [DEBUG] [Thread-139853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:17:07.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:17:07.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:17:07.073 [DEBUG] [Thread-139853] [transport.py] [_log()] userauth is OK
2026-02-12T02:17:07.074 [DEBUG] [Thread-139853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:17:07.074 [DEBUG] [Thread-139853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:17:07.074 [DEBUG] [Thread-139853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:17:07.074 [DEBUG] [Thread-139853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:17:07.088 [INFO] [Thread-139853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:17:07.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:17:07.672 [DEBUG] [Thread-139853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:17:07.672 [DEBUG] [Thread-139853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:17:07.673 [DEBUG] [Thread-139853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:17:07.713 [DEBUG] [Thread-139853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:17:07.713 [DEBUG] [Thread-139853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:17:07.716 [DEBUG] [Thread-139853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:17:07.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:17:07.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:17:07.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:17:07.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:17:07.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:17:07.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:17:07.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:17:07.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:17:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:17:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.011591 -999.00  +12.70  14.67     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.7 14.7 170.0 16.4 14.7 -3.7 14.5 -3.2 14.3 -3.5 14.7 -3.8
2026-02-12T02:17:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:17:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:17:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.011591
2026-02-12T02:17:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:17:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:17:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:17:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:17:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:17:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:16:42', tmtdew=0.88, humidity=94.3, cloud=0.0, wind=19.73, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:16:41.462', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:17:07.737 [DEBUG] [Thread-139853] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:17:07.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:17:07.834 [DEBUG] [Thread-139856] [transport.py] [_log()] starting thread (client mode): 0x9eb04ee0
2026-02-12T02:17:07.834 [DEBUG] [Thread-139856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:17:07.853 [DEBUG] [Thread-139856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:17:07.853 [INFO] [Thread-139856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:17:07.861 [DEBUG] [Thread-139856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:17:07.861 [DEBUG] [Thread-139856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] client lang: <none>
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] server lang: <none>
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] kex follows: False
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:17:07.862 [DEBUG] [Thread-139856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:17:07.863 [DEBUG] [Thread-139856] [transport.py] [_log()] Compression: none
2026-02-12T02:17:07.863 [DEBUG] [Thread-139856] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:17:07.918 [DEBUG] [Thread-139856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:17:07.919 [DEBUG] [Thread-139856] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:17:07.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:17:07.920 [DEBUG] [Thread-139856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:17:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:17:07.975 [DEBUG] [Thread-139856] [transport.py] [_log()] userauth is OK
2026-02-12T02:17:07.975 [DEBUG] [Thread-139856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:17:07.975 [DEBUG] [Thread-139856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:17:07.976 [DEBUG] [Thread-139856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:17:07.976 [DEBUG] [Thread-139856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:17:07.995 [INFO] [Thread-139856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:17:07.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:17:07.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:17:08.796 [DEBUG] [Thread-139856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:17:08.796 [DEBUG] [Thread-139856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:17:08.844 [DEBUG] [Thread-139856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:17:08.845 [DEBUG] [Thread-139856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:17:08.854 [DEBUG] [Thread-139856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:17:08.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:17:08.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')
2026-02-12T02:17:08.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:17:08.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:17:08.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:17:08.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:17:08.891 [DEBUG] [Thread-139856] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:17:19.618 [DEBUG] [Thread-139858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:17:28.859 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:17:28.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:17:34.670 [DEBUG] [Thread-139859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:17:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:17:38.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:17:38.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:17:41.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 17, 17), 0.49, 96.67, 0.0, 18.7, 12.55, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:17:41.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:17:17
2026-02-12T02:17:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:17:41.777 [DEBUG] [Thread-139860] [transport.py] [_log()] starting thread (client mode): 0xa575b8e0
2026-02-12T02:17:41.777 [DEBUG] [Thread-139860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:17:41.796 [DEBUG] [Thread-139860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:17:41.796 [INFO] [Thread-139860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:17:41.799 [DEBUG] [Thread-139860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] client lang: <none>
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] server lang: <none>
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] kex follows: False
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:17:41.800 [DEBUG] [Thread-139860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:17:41.801 [DEBUG] [Thread-139860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:17:41.801 [DEBUG] [Thread-139860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:17:41.801 [DEBUG] [Thread-139860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:17:41.801 [DEBUG] [Thread-139860] [transport.py] [_log()] Compression: none
2026-02-12T02:17:41.801 [DEBUG] [Thread-139860] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:17:41.815 [DEBUG] [Thread-139860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:17:41.815 [DEBUG] [Thread-139860] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:17:41.816 [DEBUG] [Thread-139860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:17:41.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:17:41.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:17:41.818 [DEBUG] [Thread-139860] [transport.py] [_log()] userauth is OK
2026-02-12T02:17:41.818 [DEBUG] [Thread-139860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:17:41.818 [DEBUG] [Thread-139860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:17:41.818 [DEBUG] [Thread-139860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:17:41.818 [DEBUG] [Thread-139860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:17:41.837 [INFO] [Thread-139860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:17:41.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:17:42.433 [DEBUG] [Thread-139860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:17:42.433 [DEBUG] [Thread-139860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:17:42.433 [DEBUG] [Thread-139860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:17:42.474 [DEBUG] [Thread-139860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:17:42.475 [DEBUG] [Thread-139860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:17:42.477 [DEBUG] [Thread-139860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:17:42.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:17:42.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:17:42.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:17:42.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:17:42.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:17:42.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:17:42.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:17:42.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:17:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:17:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.011938 -999.00  +12.70  12.79     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.8 12.8 163.8 16.1 14.7 -3.1 14.5 -2.5 14.3 -3.8 14.7 -4.0
2026-02-12T02:17:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:17:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:17:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.011938
2026-02-12T02:17:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:17:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:17:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:17:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:17:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:17:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:17:17', tmtdew=0.49, humidity=96.67, cloud=0.0, wind=18.7, temperature=12.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:17:11.443', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:17:42.495 [DEBUG] [Thread-139860] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:17:42.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:17:42.592 [DEBUG] [Thread-139863] [transport.py] [_log()] starting thread (client mode): 0xa2d79c00
2026-02-12T02:17:42.592 [DEBUG] [Thread-139863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:17:42.607 [DEBUG] [Thread-139863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:17:42.608 [INFO] [Thread-139863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:17:42.616 [DEBUG] [Thread-139863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] client lang: <none>
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] server lang: <none>
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] kex follows: False
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:17:42.617 [DEBUG] [Thread-139863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:17:42.618 [DEBUG] [Thread-139863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:17:42.618 [DEBUG] [Thread-139863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:17:42.618 [DEBUG] [Thread-139863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:17:42.618 [DEBUG] [Thread-139863] [transport.py] [_log()] Compression: none
2026-02-12T02:17:42.618 [DEBUG] [Thread-139863] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:17:42.674 [DEBUG] [Thread-139863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:17:42.675 [DEBUG] [Thread-139863] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:17:42.675 [DEBUG] [Thread-139863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:17:42.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:17:42.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:17:42.730 [DEBUG] [Thread-139863] [transport.py] [_log()] userauth is OK
2026-02-12T02:17:42.731 [DEBUG] [Thread-139863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:17:42.731 [DEBUG] [Thread-139863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:17:42.731 [DEBUG] [Thread-139863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:17:42.731 [DEBUG] [Thread-139863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:17:42.749 [INFO] [Thread-139863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:17:42.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:17:42.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:17:43.545 [DEBUG] [Thread-139863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:17:43.545 [DEBUG] [Thread-139863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:17:43.593 [DEBUG] [Thread-139863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:17:43.594 [DEBUG] [Thread-139863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:17:43.603 [DEBUG] [Thread-139863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:17:43.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:17:43.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:17:43.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:17:43.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:17:43.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:17:43.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:17:43.640 [DEBUG] [Thread-139863] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:17:49.707 [DEBUG] [Thread-139865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:04.760 [DEBUG] [Thread-139866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:05.657 [DEBUG] [Thread-139867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:18:13.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:18:13.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:18:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 17, 53), 0.49, 96.65, 0.0, 13.25, 12.6, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:18:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:17:53
2026-02-12T02:18:16.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:18:16.650 [DEBUG] [Thread-139868] [transport.py] [_log()] starting thread (client mode): 0x9eb04f70
2026-02-12T02:18:16.650 [DEBUG] [Thread-139868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:18:16.671 [DEBUG] [Thread-139868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:18:16.672 [INFO] [Thread-139868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:18:16.674 [DEBUG] [Thread-139868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] client lang: <none>
2026-02-12T02:18:16.675 [DEBUG] [Thread-139868] [transport.py] [_log()] server lang: <none>
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] kex follows: False
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] Compression: none
2026-02-12T02:18:16.676 [DEBUG] [Thread-139868] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:18:16.695 [DEBUG] [Thread-139868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:18:16.696 [DEBUG] [Thread-139868] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:18:16.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:18:16.697 [DEBUG] [Thread-139868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:18:16.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:18:16.699 [DEBUG] [Thread-139868] [transport.py] [_log()] userauth is OK
2026-02-12T02:18:16.699 [DEBUG] [Thread-139868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:18:16.699 [DEBUG] [Thread-139868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:18:16.699 [DEBUG] [Thread-139868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:18:16.699 [DEBUG] [Thread-139868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:18:16.717 [INFO] [Thread-139868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:18:16.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:18:17.348 [DEBUG] [Thread-139868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:18:17.348 [DEBUG] [Thread-139868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:18:17.349 [DEBUG] [Thread-139868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:18:17.389 [DEBUG] [Thread-139868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:18:17.390 [DEBUG] [Thread-139868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:18:17.393 [DEBUG] [Thread-139868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:18:17.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:18:17.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:18:17.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:18:17.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:18:17.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:18:17.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:18:17.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:18:17.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:18:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:18:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.012632 -999.00  +12.70  12.94     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.9 12.9 160.2 16.3 14.7 -3.5 14.5 -2.9 14.4 -3.3 14.7 -3.5
2026-02-12T02:18:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:18:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:18:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.012632
2026-02-12T02:18:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:18:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:18:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:18:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:18:17.421 [DEBUG] [Thread-139868] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:18:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:18:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:17:53', tmtdew=0.49, humidity=96.65, cloud=0.0, wind=13.25, temperature=12.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:18:11.405', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:18:17.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:18:17.513 [DEBUG] [Thread-139871] [transport.py] [_log()] starting thread (client mode): 0xa5741960
2026-02-12T02:18:17.513 [DEBUG] [Thread-139871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:18:17.527 [DEBUG] [Thread-139871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:18:17.527 [INFO] [Thread-139871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] client lang: <none>
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] server lang: <none>
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] kex follows: False
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:18:17.535 [DEBUG] [Thread-139871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:18:17.536 [DEBUG] [Thread-139871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:18:17.536 [DEBUG] [Thread-139871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:18:17.536 [DEBUG] [Thread-139871] [transport.py] [_log()] Compression: none
2026-02-12T02:18:17.536 [DEBUG] [Thread-139871] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:18:17.594 [DEBUG] [Thread-139871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:18:17.594 [DEBUG] [Thread-139871] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:18:17.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:18:17.595 [DEBUG] [Thread-139871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:18:17.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:18:17.650 [DEBUG] [Thread-139871] [transport.py] [_log()] userauth is OK
2026-02-12T02:18:17.650 [DEBUG] [Thread-139871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:18:17.651 [DEBUG] [Thread-139871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:18:17.651 [DEBUG] [Thread-139871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:18:17.651 [DEBUG] [Thread-139871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:18:17.669 [INFO] [Thread-139871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:18:17.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:18:17.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:18:18.478 [DEBUG] [Thread-139871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:18:18.478 [DEBUG] [Thread-139871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:18:18.528 [DEBUG] [Thread-139871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:18:18.528 [DEBUG] [Thread-139871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:18:18.538 [DEBUG] [Thread-139871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:18:18.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:18:18.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:18: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') -> 00000000
2026-02-12T02:18:18.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:18:18.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:18:18.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:18:18.578 [DEBUG] [Thread-139871] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:18:19.796 [DEBUG] [Thread-139873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:29.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:29.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:34.844 [DEBUG] [Thread-139874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:18:48.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:18:48.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
2026-02-12T02:18:49.880 [DEBUG] [Thread-139875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:18:50.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 18, 28), 0.5, 96.58, 0.0, 14.24, 12.57, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:18:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:18:28
2026-02-12T02:18:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:18:50.929 [DEBUG] [Thread-139876] [transport.py] [_log()] starting thread (client mode): 0xa2d79300
2026-02-12T02:18:50.929 [DEBUG] [Thread-139876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:18:50.948 [DEBUG] [Thread-139876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:18:50.949 [INFO] [Thread-139876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] client lang: <none>
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] server lang: <none>
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] kex follows: False
2026-02-12T02:18:50.951 [DEBUG] [Thread-139876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:18:50.952 [DEBUG] [Thread-139876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:18:50.952 [DEBUG] [Thread-139876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:18:50.952 [DEBUG] [Thread-139876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:18:50.952 [DEBUG] [Thread-139876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:18:50.952 [DEBUG] [Thread-139876] [transport.py] [_log()] Compression: none
2026-02-12T02:18:50.952 [DEBUG] [Thread-139876] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:18:50.960 [DEBUG] [Thread-139876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:18:50.960 [DEBUG] [Thread-139876] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:18:50.961 [DEBUG] [Thread-139876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:18:50.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:18:50.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:18:50.962 [DEBUG] [Thread-139876] [transport.py] [_log()] userauth is OK
2026-02-12T02:18:50.962 [DEBUG] [Thread-139876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:18:50.962 [DEBUG] [Thread-139876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:18:50.962 [DEBUG] [Thread-139876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:18:50.962 [DEBUG] [Thread-139876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:18:50.985 [INFO] [Thread-139876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:18:50.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:18:51.588 [DEBUG] [Thread-139876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:18:51.589 [DEBUG] [Thread-139876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:18:51.589 [DEBUG] [Thread-139876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:18:51.629 [DEBUG] [Thread-139876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:18:51.629 [DEBUG] [Thread-139876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:18:51.633 [DEBUG] [Thread-139876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:18:51.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:18:51.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:18:51.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:18:51.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:18:51.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:18:51.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:18:51.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:18:51.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:18:51.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:18:51.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.012979 -999.00  +12.70  13.91     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.9 13.9 164.0 17.3 14.7 -3.0 14.6 -2.4 14.4 -3.6 14.7 -3.8
2026-02-12T02:18:51.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:18:51.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:18:51.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.012979
2026-02-12T02:18:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:18:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:18:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:18:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:18:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:18:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:18:28', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=14.24, temperature=12.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:18:41.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:18:51.659 [DEBUG] [Thread-139876] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:18:51.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:18:51.766 [DEBUG] [Thread-139879] [transport.py] [_log()] starting thread (client mode): 0xa575b1c0
2026-02-12T02:18:51.767 [DEBUG] [Thread-139879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:18:51.781 [DEBUG] [Thread-139879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:18:51.781 [INFO] [Thread-139879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:18:51.789 [DEBUG] [Thread-139879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:18:51.789 [DEBUG] [Thread-139879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:18:51.789 [DEBUG] [Thread-139879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] client lang: <none>
2026-02-12T02:18:51.790 [DEBUG] [Thread-139879] [transport.py] [_log()] server lang: <none>
2026-02-12T02:18:51.791 [DEBUG] [Thread-139879] [transport.py] [_log()] kex follows: False
2026-02-12T02:18:51.791 [DEBUG] [Thread-139879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:18:51.791 [DEBUG] [Thread-139879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:18:51.791 [DEBUG] [Thread-139879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:18:51.791 [DEBUG] [Thread-139879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:18:51.791 [DEBUG] [Thread-139879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:18:51.791 [DEBUG] [Thread-139879] [transport.py] [_log()] Compression: none
2026-02-12T02:18:51.792 [DEBUG] [Thread-139879] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:18:51.850 [DEBUG] [Thread-139879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:18:51.851 [DEBUG] [Thread-139879] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:18:51.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:18:51.852 [DEBUG] [Thread-139879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:18:51.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:18:51.906 [DEBUG] [Thread-139879] [transport.py] [_log()] userauth is OK
2026-02-12T02:18:51.906 [DEBUG] [Thread-139879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:18:51.906 [DEBUG] [Thread-139879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:18:51.906 [DEBUG] [Thread-139879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:18:51.906 [DEBUG] [Thread-139879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:18:51.925 [INFO] [Thread-139879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:18:51.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:18:51.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:18:52.720 [DEBUG] [Thread-139879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:18:52.721 [DEBUG] [Thread-139879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:18:52.768 [DEBUG] [Thread-139879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:18:52.769 [DEBUG] [Thread-139879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:18:52.778 [DEBUG] [Thread-139879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:18:52.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:18:52.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:18: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') -> 00000000
2026-02-12T02:18:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:18:52.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:18:52.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:18:52.815 [DEBUG] [Thread-139879] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:19:04.918 [DEBUG] [Thread-139881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:19:05.722 [DEBUG] [Thread-139882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:19:19.970 [DEBUG] [Thread-139883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:19:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:19:22.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:19:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:19:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 19, 4), 0.5, 96.58, 0.0, 15.3, 12.6, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:19:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:19:04
2026-02-12T02:19:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:19:25.731 [DEBUG] [Thread-139884] [transport.py] [_log()] starting thread (client mode): 0xa5758af0
2026-02-12T02:19:25.731 [DEBUG] [Thread-139884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:19:25.750 [DEBUG] [Thread-139884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:19:25.750 [INFO] [Thread-139884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:19:25.753 [DEBUG] [Thread-139884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] client lang: <none>
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] server lang: <none>
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] kex follows: False
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] Compression: none
2026-02-12T02:19:25.754 [DEBUG] [Thread-139884] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:19:25.772 [DEBUG] [Thread-139884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:19:25.772 [DEBUG] [Thread-139884] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:19:25.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:19:25.773 [DEBUG] [Thread-139884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:19:25.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:19:25.775 [DEBUG] [Thread-139884] [transport.py] [_log()] userauth is OK
2026-02-12T02:19:25.776 [DEBUG] [Thread-139884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:19:25.776 [DEBUG] [Thread-139884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:19:25.776 [DEBUG] [Thread-139884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:19:25.776 [DEBUG] [Thread-139884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:19:25.790 [INFO] [Thread-139884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:19:25.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:19:26.418 [DEBUG] [Thread-139884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:19:26.418 [DEBUG] [Thread-139884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:19:26.419 [DEBUG] [Thread-139884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:19:26.459 [DEBUG] [Thread-139884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:19:26.460 [DEBUG] [Thread-139884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:19:26.463 [DEBUG] [Thread-139884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:19:26.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:19:26.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:19:26.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:19:26.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:19:26.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:19:26.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:19:26.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:19:26.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:19:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:19:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.013327 -999.00  +12.70  12.73     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.7 12.7 168.6 15.3 14.7 -2.4 14.5 -2.1 14.3 -2.4 14.7 -2.5
2026-02-12T02:19:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:19:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:19:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.013327
2026-02-12T02:19:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:19:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:19:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:19:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:19:26.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:19:26.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:19:04', tmtdew=0.5, humidity=96.58, cloud=0.0, wind=15.3, temperature=12.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:19:11.453', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:19:26.492 [DEBUG] [Thread-139884] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:19:26.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:19:26.588 [DEBUG] [Thread-139887] [transport.py] [_log()] starting thread (client mode): 0xa2d94880
2026-02-12T02:19:26.588 [DEBUG] [Thread-139887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:19:26.604 [DEBUG] [Thread-139887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:19:26.605 [INFO] [Thread-139887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:19:26.613 [DEBUG] [Thread-139887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:19:26.613 [DEBUG] [Thread-139887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:19:26.613 [DEBUG] [Thread-139887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] client lang: <none>
2026-02-12T02:19:26.614 [DEBUG] [Thread-139887] [transport.py] [_log()] server lang: <none>
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] kex follows: False
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] Compression: none
2026-02-12T02:19:26.615 [DEBUG] [Thread-139887] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:19:26.673 [DEBUG] [Thread-139887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:19:26.673 [DEBUG] [Thread-139887] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:19:26.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:19:26.674 [DEBUG] [Thread-139887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:19:26.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:19:26.729 [DEBUG] [Thread-139887] [transport.py] [_log()] userauth is OK
2026-02-12T02:19:26.729 [DEBUG] [Thread-139887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:19:26.730 [DEBUG] [Thread-139887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:19:26.730 [DEBUG] [Thread-139887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:19:26.730 [DEBUG] [Thread-139887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:19:26.748 [INFO] [Thread-139887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:19:26.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:19:26.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:19:27.589 [DEBUG] [Thread-139887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:19:27.589 [DEBUG] [Thread-139887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:19:27.637 [DEBUG] [Thread-139887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:19:27.638 [DEBUG] [Thread-139887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:19:27.647 [DEBUG] [Thread-139887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:19:27.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:19:27.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:19:27.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:19:27.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:19:27.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:19:27.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:19:27.683 [DEBUG] [Thread-139887] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:19:29.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:19:29.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:19:35.005 [DEBUG] [Thread-139889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:19:50.061 [DEBUG] [Thread-139890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:19:57.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:19:57.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:19:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:19:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 19, 39), 0.91, 94.13, 0.0, 17.5, 12.97, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:19:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:19:39
2026-02-12T02:19:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:20:00.138 [DEBUG] [Thread-139891] [transport.py] [_log()] starting thread (client mode): 0x9eb04ee0
2026-02-12T02:20:00.138 [DEBUG] [Thread-139891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:20:00.158 [DEBUG] [Thread-139891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:20:00.158 [INFO] [Thread-139891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] client lang: <none>
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] server lang: <none>
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] kex follows: False
2026-02-12T02:20:00.162 [DEBUG] [Thread-139891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:20:00.163 [DEBUG] [Thread-139891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:20:00.163 [DEBUG] [Thread-139891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:20:00.163 [DEBUG] [Thread-139891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:20:00.163 [DEBUG] [Thread-139891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:20:00.163 [DEBUG] [Thread-139891] [transport.py] [_log()] Compression: none
2026-02-12T02:20:00.163 [DEBUG] [Thread-139891] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:20:00.181 [DEBUG] [Thread-139891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:20:00.181 [DEBUG] [Thread-139891] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:20:00.182 [DEBUG] [Thread-139891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:20:00.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:20:00.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:20:00.184 [DEBUG] [Thread-139891] [transport.py] [_log()] userauth is OK
2026-02-12T02:20:00.184 [DEBUG] [Thread-139891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:20:00.184 [DEBUG] [Thread-139891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:20:00.184 [DEBUG] [Thread-139891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:20:00.184 [DEBUG] [Thread-139891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:20:00.208 [INFO] [Thread-139891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:20:00.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:20:00.874 [DEBUG] [Thread-139891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:20:00.874 [DEBUG] [Thread-139891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:20:00.874 [DEBUG] [Thread-139891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:20:00.914 [DEBUG] [Thread-139891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:20:00.915 [DEBUG] [Thread-139891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:20:00.918 [DEBUG] [Thread-139891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:20:00.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:20:00.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:20:00.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:20:00.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:20:00.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:20:00.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:20:00.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:20:00.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:20:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:20:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.013674 -999.00  +12.70  13.69     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.7 13.7 157.2 15.5 14.8 -2.5 14.6 -2.2 14.4 -2.6 14.8 -2.5
2026-02-12T02:20:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:20:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:20:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.013674
2026-02-12T02:20:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:20:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:20:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:20:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:20:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:20:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:19:39', tmtdew=0.91, humidity=94.13, cloud=0.0, wind=17.5, temperature=12.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:19:41.434', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:20:00.947 [DEBUG] [Thread-139891] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:20:01.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:20:01.040 [DEBUG] [Thread-139894] [transport.py] [_log()] starting thread (client mode): 0xa57c0d00
2026-02-12T02:20:01.041 [DEBUG] [Thread-139894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:20:01.056 [DEBUG] [Thread-139894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:20:01.056 [INFO] [Thread-139894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:20:01.065 [DEBUG] [Thread-139894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:20:01.065 [DEBUG] [Thread-139894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] client lang: <none>
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] server lang: <none>
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] kex follows: False
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] Compression: none
2026-02-12T02:20:01.066 [DEBUG] [Thread-139894] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:20:01.121 [DEBUG] [Thread-139894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:20:01.122 [DEBUG] [Thread-139894] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:20:01.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:20:01.123 [DEBUG] [Thread-139894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:20:01.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:20:01.176 [DEBUG] [Thread-139894] [transport.py] [_log()] userauth is OK
2026-02-12T02:20:01.177 [DEBUG] [Thread-139894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:20:01.177 [DEBUG] [Thread-139894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:20:01.177 [DEBUG] [Thread-139894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:20:01.177 [DEBUG] [Thread-139894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:20:01.196 [INFO] [Thread-139894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:20:01.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:20:01.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:20:02.047 [DEBUG] [Thread-139894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:20:02.047 [DEBUG] [Thread-139894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:20:02.095 [DEBUG] [Thread-139894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:20:02.096 [DEBUG] [Thread-139894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:20:02.105 [DEBUG] [Thread-139894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:20:02.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:20:02.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:20:02.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:20:02.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:20:02.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:20:02.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:20:02.142 [DEBUG] [Thread-139894] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:20:05.098 [DEBUG] [Thread-139896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:20:05.807 [DEBUG] [Thread-139897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:20:20.150 [DEBUG] [Thread-139898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:20:29.466 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:20:29.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:20:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:20:32.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:20:32.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
2026-02-12T02:20:33.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 20, 15), 0.51, 96.55, 0.0, 14.13, 12.63, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:20:33.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:20:15
2026-02-12T02:20:34.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:20:34.510 [DEBUG] [Thread-139899] [transport.py] [_log()] starting thread (client mode): 0xa2d94f40
2026-02-12T02:20:34.510 [DEBUG] [Thread-139899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:20:34.529 [DEBUG] [Thread-139899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:20:34.530 [INFO] [Thread-139899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] client lang: <none>
2026-02-12T02:20:34.534 [DEBUG] [Thread-139899] [transport.py] [_log()] server lang: <none>
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] kex follows: False
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] Compression: none
2026-02-12T02:20:34.535 [DEBUG] [Thread-139899] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:20:34.550 [DEBUG] [Thread-139899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:20:34.550 [DEBUG] [Thread-139899] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:20:34.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:20:34.551 [DEBUG] [Thread-139899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:20:34.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:20:34.553 [DEBUG] [Thread-139899] [transport.py] [_log()] userauth is OK
2026-02-12T02:20:34.553 [DEBUG] [Thread-139899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:20:34.553 [DEBUG] [Thread-139899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:20:34.553 [DEBUG] [Thread-139899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:20:34.553 [DEBUG] [Thread-139899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:20:34.589 [INFO] [Thread-139899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:20:34.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:20:35.180 [DEBUG] [Thread-139901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:20:35.204 [DEBUG] [Thread-139899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:20:35.205 [DEBUG] [Thread-139899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:20:35.205 [DEBUG] [Thread-139899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:20:35.245 [DEBUG] [Thread-139899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:20:35.245 [DEBUG] [Thread-139899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:20:35.248 [DEBUG] [Thread-139899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:20:35.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:20:35.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:20:35.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:20:35.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:20:35.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:20:35.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:20:35.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:20:35.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:20:35.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:20:35.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.014021 -999.00  +12.70  17.60     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.6 17.6 162.0 20.5 14.7 -2.4 14.6 -2.0 14.3 -2.5 14.8 -2.5
2026-02-12T02:20:35.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:20:35.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:20:35.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.014021
2026-02-12T02:20:35.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:20:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:20:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:20:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:20:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:20:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:20:15', tmtdew=0.51, humidity=96.55, cloud=0.0, wind=14.13, temperature=12.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:20:11.414', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:20:35.273 [DEBUG] [Thread-139899] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:20:35.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:20:35.382 [DEBUG] [Thread-139903] [transport.py] [_log()] starting thread (client mode): 0xa5741600
2026-02-12T02:20:35.382 [DEBUG] [Thread-139903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:20:35.397 [DEBUG] [Thread-139903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:20:35.397 [INFO] [Thread-139903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:20:35.405 [DEBUG] [Thread-139903] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:20:35.405 [DEBUG] [Thread-139903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:20:35.405 [DEBUG] [Thread-139903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:20:35.405 [DEBUG] [Thread-139903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:35.405 [DEBUG] [Thread-139903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:20:35.405 [DEBUG] [Thread-139903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] client lang: <none>
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] server lang: <none>
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] kex follows: False
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] Compression: none
2026-02-12T02:20:35.406 [DEBUG] [Thread-139903] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:20:35.464 [DEBUG] [Thread-139903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:20:35.465 [DEBUG] [Thread-139903] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:20:35.465 [DEBUG] [Thread-139903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:20:35.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:20:35.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:20:35.520 [DEBUG] [Thread-139903] [transport.py] [_log()] userauth is OK
2026-02-12T02:20:35.520 [DEBUG] [Thread-139903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:20:35.520 [DEBUG] [Thread-139903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:20:35.520 [DEBUG] [Thread-139903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:20:35.520 [DEBUG] [Thread-139903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:20:35.535 [INFO] [Thread-139903] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:20:35.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:20:35.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:20:36.331 [DEBUG] [Thread-139903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:20:36.331 [DEBUG] [Thread-139903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:20:36.380 [DEBUG] [Thread-139903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:20:36.380 [DEBUG] [Thread-139903] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:20:36.390 [DEBUG] [Thread-139903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:20:36.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:20:36.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:20:36.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:20:36.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:20:36.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:20:36.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:20:36.428 [DEBUG] [Thread-139903] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:20:50.218 [DEBUG] [Thread-139905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:21:05.269 [DEBUG] [Thread-139906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:21:05.863 [DEBUG] [Thread-139907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:21:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:21:06.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:21:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:21:08.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 20, 50), 0.51, 96.53, 0.0, 17.86, 12.6, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:21:08.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:20:50
2026-02-12T02:21:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:21:08.798 [DEBUG] [Thread-139908] [transport.py] [_log()] starting thread (client mode): 0xa2d02350
2026-02-12T02:21:08.798 [DEBUG] [Thread-139908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:21:08.817 [DEBUG] [Thread-139908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:21:08.817 [INFO] [Thread-139908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:21:08.820 [DEBUG] [Thread-139908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] client lang: <none>
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] server lang: <none>
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] kex follows: False
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] Compression: none
2026-02-12T02:21:08.821 [DEBUG] [Thread-139908] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:21:08.838 [DEBUG] [Thread-139908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:21:08.839 [DEBUG] [Thread-139908] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:21:08.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:21:08.840 [DEBUG] [Thread-139908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:21:08.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:21:08.842 [DEBUG] [Thread-139908] [transport.py] [_log()] userauth is OK
2026-02-12T02:21:08.842 [DEBUG] [Thread-139908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:21:08.842 [DEBUG] [Thread-139908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:21:08.842 [DEBUG] [Thread-139908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:21:08.842 [DEBUG] [Thread-139908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:21:08.862 [INFO] [Thread-139908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:21:08.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:21:09.435 [DEBUG] [Thread-139908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:21:09.435 [DEBUG] [Thread-139908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:21:09.435 [DEBUG] [Thread-139908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:21:09.475 [DEBUG] [Thread-139908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:21:09.475 [DEBUG] [Thread-139908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:21:09.479 [DEBUG] [Thread-139908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:21:09.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:21:09.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:21:09.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:21:09.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:21:09.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:21:09.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:21:09.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:21:09.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:21:09.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:21:09.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.014368 -999.00  +12.70  13.79     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.8 13.8 169.8 18.5 14.7 -2.3 14.6 -2.0 14.4 -2.3 14.8 -2.5
2026-02-12T02:21:09.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:21:09.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:21:09.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.014368
2026-02-12T02:21:09.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:21:09.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:21:09.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:21:09.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:21:09.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:21:09.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:20:50', tmtdew=0.51, humidity=96.53, cloud=0.0, wind=17.86, temperature=12.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:20:41.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:21:09.507 [DEBUG] [Thread-139908] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:21:09.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:21:09.603 [DEBUG] [Thread-139911] [transport.py] [_log()] starting thread (client mode): 0xa5741720
2026-02-12T02:21:09.603 [DEBUG] [Thread-139911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:21:09.617 [DEBUG] [Thread-139911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:21:09.617 [INFO] [Thread-139911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:21:09.625 [DEBUG] [Thread-139911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:21:09.625 [DEBUG] [Thread-139911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:21:09.625 [DEBUG] [Thread-139911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] client lang: <none>
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] server lang: <none>
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] kex follows: False
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] Compression: none
2026-02-12T02:21:09.626 [DEBUG] [Thread-139911] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:21:09.684 [DEBUG] [Thread-139911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:21:09.695 [DEBUG] [Thread-139911] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:21:09.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:21:09.696 [DEBUG] [Thread-139911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:21:09.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:21:09.740 [DEBUG] [Thread-139911] [transport.py] [_log()] userauth is OK
2026-02-12T02:21:09.740 [DEBUG] [Thread-139911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:21:09.740 [DEBUG] [Thread-139911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:21:09.741 [DEBUG] [Thread-139911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:21:09.741 [DEBUG] [Thread-139911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:21:09.759 [INFO] [Thread-139911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:21:09.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:21:09.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:21:10.546 [DEBUG] [Thread-139911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:21:10.546 [DEBUG] [Thread-139911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:21:10.594 [DEBUG] [Thread-139911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:21:10.595 [DEBUG] [Thread-139911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:21:10.604 [DEBUG] [Thread-139911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:21:10.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:21:10.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:21:10.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:21:10.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:21:10.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:21:10.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:21:10.641 [DEBUG] [Thread-139911] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:21:20.306 [DEBUG] [Thread-139913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:21:29.669 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:21:29.671 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:21:35.364 [DEBUG] [Thread-139914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:21:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:21:40.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:21:40.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:21:42.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 21, 27), 0.5, 96.57, 0.0, 16.89, 12.67, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:21:42.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:21:27
2026-02-12T02:21:43.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:21:43.470 [DEBUG] [Thread-139915] [transport.py] [_log()] starting thread (client mode): 0xa2d7bf70
2026-02-12T02:21:43.470 [DEBUG] [Thread-139915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:21:43.486 [DEBUG] [Thread-139915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:21:43.486 [INFO] [Thread-139915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:21:43.489 [DEBUG] [Thread-139915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:21:43.489 [DEBUG] [Thread-139915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:21:43.489 [DEBUG] [Thread-139915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] client lang: <none>
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] server lang: <none>
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] kex follows: False
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] Compression: none
2026-02-12T02:21:43.490 [DEBUG] [Thread-139915] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:21:43.508 [DEBUG] [Thread-139915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:21:43.509 [DEBUG] [Thread-139915] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:21:43.509 [DEBUG] [Thread-139915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:21:43.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:21:43.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:21:43.511 [DEBUG] [Thread-139915] [transport.py] [_log()] userauth is OK
2026-02-12T02:21:43.512 [DEBUG] [Thread-139915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:21:43.512 [DEBUG] [Thread-139915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:21:43.512 [DEBUG] [Thread-139915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:21:43.512 [DEBUG] [Thread-139915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:21:43.536 [INFO] [Thread-139915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:21:43.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:21:44.166 [DEBUG] [Thread-139915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:21:44.166 [DEBUG] [Thread-139915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:21:44.167 [DEBUG] [Thread-139915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:21:44.207 [DEBUG] [Thread-139915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:21:44.207 [DEBUG] [Thread-139915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:21:44.211 [DEBUG] [Thread-139915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:21:44.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:21:44.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:21:44.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:21:44.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:21:44.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:21:44.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:21:44.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:21:44.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:21:44.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:21:44.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.014715 -999.00  +12.60  13.03     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.0 13.0 161.6 20.5 14.7 -2.1 14.5 -1.8 14.4 -2.1 14.8 -2.2
2026-02-12T02:21:44.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:21:44.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:21:44.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.014715
2026-02-12T02:21:44.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:21:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:21:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:21:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:21:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:21:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:21:27', tmtdew=0.5, humidity=96.57, cloud=0.0, wind=16.89, temperature=12.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:21:11.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:21:44.237 [DEBUG] [Thread-139915] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:21:44.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:21:44.334 [DEBUG] [Thread-139918] [transport.py] [_log()] starting thread (client mode): 0xa5771e10
2026-02-12T02:21:44.335 [DEBUG] [Thread-139918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:21:44.348 [DEBUG] [Thread-139918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:21:44.349 [INFO] [Thread-139918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:21:44.356 [DEBUG] [Thread-139918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:21:44.357 [DEBUG] [Thread-139918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:21:44.357 [DEBUG] [Thread-139918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:21:44.357 [DEBUG] [Thread-139918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:44.357 [DEBUG] [Thread-139918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:21:44.357 [DEBUG] [Thread-139918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] client lang: <none>
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] server lang: <none>
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] kex follows: False
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] Compression: none
2026-02-12T02:21:44.358 [DEBUG] [Thread-139918] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:21:44.416 [DEBUG] [Thread-139918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:21:44.417 [DEBUG] [Thread-139918] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:21:44.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:21:44.418 [DEBUG] [Thread-139918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:21:44.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:21:44.472 [DEBUG] [Thread-139918] [transport.py] [_log()] userauth is OK
2026-02-12T02:21:44.473 [DEBUG] [Thread-139918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:21:44.473 [DEBUG] [Thread-139918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:21:44.473 [DEBUG] [Thread-139918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:21:44.473 [DEBUG] [Thread-139918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:21:44.491 [INFO] [Thread-139918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:21:44.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:21:44.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:21:45.310 [DEBUG] [Thread-139918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:21:45.310 [DEBUG] [Thread-139918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:21:45.358 [DEBUG] [Thread-139918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:21:45.359 [DEBUG] [Thread-139918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:21:45.368 [DEBUG] [Thread-139918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:21:45.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:21:45.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:21:45.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:21:45.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:21:45.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:21:45.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:21:45.405 [DEBUG] [Thread-139918] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:21:50.400 [DEBUG] [Thread-139920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:05.453 [DEBUG] [Thread-139921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:05.927 [DEBUG] [Thread-139922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:15.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:22:15.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:22:15.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:22:17.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 22, 2), 0.51, 96.55, 0.0, 18.3, 12.63, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:22:17.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:22:02
2026-02-12T02:22:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:22:18.270 [DEBUG] [Thread-139923] [transport.py] [_log()] starting thread (client mode): 0xa57700d0
2026-02-12T02:22:18.270 [DEBUG] [Thread-139923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:22:18.290 [DEBUG] [Thread-139923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:22:18.290 [INFO] [Thread-139923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:22:18.293 [DEBUG] [Thread-139923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:22:18.293 [DEBUG] [Thread-139923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:22:18.293 [DEBUG] [Thread-139923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:22:18.293 [DEBUG] [Thread-139923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:18.293 [DEBUG] [Thread-139923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:18.293 [DEBUG] [Thread-139923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] client lang: <none>
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] server lang: <none>
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] kex follows: False
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] Compression: none
2026-02-12T02:22:18.294 [DEBUG] [Thread-139923] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:22:18.313 [DEBUG] [Thread-139923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:22:18.313 [DEBUG] [Thread-139923] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:22:18.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:22:18.314 [DEBUG] [Thread-139923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:22:18.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:22:18.316 [DEBUG] [Thread-139923] [transport.py] [_log()] userauth is OK
2026-02-12T02:22:18.317 [DEBUG] [Thread-139923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:22:18.317 [DEBUG] [Thread-139923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:22:18.317 [DEBUG] [Thread-139923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:22:18.317 [DEBUG] [Thread-139923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:22:18.334 [INFO] [Thread-139923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:22:18.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:22:18.974 [DEBUG] [Thread-139923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:22:18.974 [DEBUG] [Thread-139923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:22:18.975 [DEBUG] [Thread-139923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:22:19.015 [DEBUG] [Thread-139923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:22:19.015 [DEBUG] [Thread-139923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:22:19.019 [DEBUG] [Thread-139923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:22:19.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:22:19.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:22:19.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:22:19.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:22:19.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:22:19.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:22:19.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:22:19.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:22:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:22:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.015410 -999.00  +12.70  11.72     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 11.7 11.7 163.8 13.8 14.8 -2.2 14.6 -2.0 14.4 -2.1 14.8 -2.3
2026-02-12T02:22:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:22:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:22:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.015410
2026-02-12T02:22:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:22:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:22:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:22:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:22:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:22:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:22:02', tmtdew=0.51, humidity=96.55, cloud=0.0, wind=18.3, temperature=12.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:22:11.424', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:22:19.046 [DEBUG] [Thread-139923] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:22:19.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:22:19.141 [DEBUG] [Thread-139926] [transport.py] [_log()] starting thread (client mode): 0xa2d78c40
2026-02-12T02:22:19.141 [DEBUG] [Thread-139926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:22:19.155 [DEBUG] [Thread-139926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:22:19.156 [INFO] [Thread-139926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:22:19.163 [DEBUG] [Thread-139926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] client lang: <none>
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] server lang: <none>
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] kex follows: False
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:22:19.164 [DEBUG] [Thread-139926] [transport.py] [_log()] Compression: none
2026-02-12T02:22:19.165 [DEBUG] [Thread-139926] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:22:19.219 [DEBUG] [Thread-139926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:22:19.220 [DEBUG] [Thread-139926] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:22:19.220 [DEBUG] [Thread-139926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:22:19.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:22:19.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:22:19.275 [DEBUG] [Thread-139926] [transport.py] [_log()] userauth is OK
2026-02-12T02:22:19.276 [DEBUG] [Thread-139926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:22:19.276 [DEBUG] [Thread-139926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:22:19.276 [DEBUG] [Thread-139926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:22:19.276 [DEBUG] [Thread-139926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:22:19.294 [INFO] [Thread-139926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:22:19.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:22:19.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:22:20.090 [DEBUG] [Thread-139926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:22:20.090 [DEBUG] [Thread-139926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:22:20.138 [DEBUG] [Thread-139926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:22:20.138 [DEBUG] [Thread-139926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:22:20.147 [DEBUG] [Thread-139926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:22:20.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:22:20.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:22:20.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
2026-02-12T02:22:20.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:22:20.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:22:20.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:22:20.181 [DEBUG] [Thread-139926] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:22:20.488 [DEBUG] [Thread-139928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:29.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:29.873 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:35.542 [DEBUG] [Thread-139929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:22:50.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:22:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:22:50.574 [DEBUG] [Thread-139930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:22:52.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 22, 37), 0.9, 94.17, 0.0, 18.07, 13.03, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:22:52.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:22:37
2026-02-12T02:22:52.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:22:52.566 [DEBUG] [Thread-139931] [transport.py] [_log()] starting thread (client mode): 0xa2d9e3b0
2026-02-12T02:22:52.566 [DEBUG] [Thread-139931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:22:52.586 [DEBUG] [Thread-139931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:22:52.586 [INFO] [Thread-139931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:22:52.599 [DEBUG] [Thread-139931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:22:52.599 [DEBUG] [Thread-139931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] client lang: <none>
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] server lang: <none>
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] kex follows: False
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:22:52.600 [DEBUG] [Thread-139931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:22:52.601 [DEBUG] [Thread-139931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:22:52.601 [DEBUG] [Thread-139931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:22:52.601 [DEBUG] [Thread-139931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:22:52.601 [DEBUG] [Thread-139931] [transport.py] [_log()] Compression: none
2026-02-12T02:22:52.601 [DEBUG] [Thread-139931] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:22:52.621 [DEBUG] [Thread-139931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:22:52.622 [DEBUG] [Thread-139931] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:22:52.622 [DEBUG] [Thread-139931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:22:52.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:22:52.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:22:52.624 [DEBUG] [Thread-139931] [transport.py] [_log()] userauth is OK
2026-02-12T02:22:52.624 [DEBUG] [Thread-139931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:22:52.625 [DEBUG] [Thread-139931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:22:52.625 [DEBUG] [Thread-139931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:22:52.625 [DEBUG] [Thread-139931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:22:52.650 [INFO] [Thread-139931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:22:52.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:22:53.319 [DEBUG] [Thread-139931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:22:53.319 [DEBUG] [Thread-139931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:22:53.319 [DEBUG] [Thread-139931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:22:53.360 [DEBUG] [Thread-139931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:22:53.360 [DEBUG] [Thread-139931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:22:53.363 [DEBUG] [Thread-139931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:22:53.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:22:53.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:22:53.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:22:53.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:22:53.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:22:53.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:22:53.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:22:53.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:22:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:22:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.015757 -999.00  +12.70  14.47     92  +11.60 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.5 14.5 161.5 17.6 14.8 -2.3 14.6 -1.9 14.5 -2.1 14.8 -2.1
2026-02-12T02:22:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:22:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:22:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.015757
2026-02-12T02:22:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:22:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:22:53.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:22:53.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:22:53.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:22:53.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:22:37', tmtdew=0.9, humidity=94.17, cloud=0.0, wind=18.07, temperature=13.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:22:41.405', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:22:53.385 [DEBUG] [Thread-139931] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:22:53.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:22:53.488 [DEBUG] [Thread-139934] [transport.py] [_log()] starting thread (client mode): 0xa2d95870
2026-02-12T02:22:53.488 [DEBUG] [Thread-139934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:22:53.503 [DEBUG] [Thread-139934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:22:53.503 [INFO] [Thread-139934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] client lang: <none>
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] server lang: <none>
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] kex follows: False
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:22:53.511 [DEBUG] [Thread-139934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:22:53.512 [DEBUG] [Thread-139934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:22:53.512 [DEBUG] [Thread-139934] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:22:53.512 [DEBUG] [Thread-139934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:22:53.512 [DEBUG] [Thread-139934] [transport.py] [_log()] Compression: none
2026-02-12T02:22:53.512 [DEBUG] [Thread-139934] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:22:53.567 [DEBUG] [Thread-139934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:22:53.568 [DEBUG] [Thread-139934] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:22:53.569 [DEBUG] [Thread-139934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:22:53.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:22:53.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:22:53.624 [DEBUG] [Thread-139934] [transport.py] [_log()] userauth is OK
2026-02-12T02:22:53.624 [DEBUG] [Thread-139934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:22:53.624 [DEBUG] [Thread-139934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:22:53.625 [DEBUG] [Thread-139934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:22:53.625 [DEBUG] [Thread-139934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:22:53.643 [INFO] [Thread-139934] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:22:53.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:22:53.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:22:54.468 [DEBUG] [Thread-139934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:22:54.468 [DEBUG] [Thread-139934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:22:54.516 [DEBUG] [Thread-139934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:22:54.517 [DEBUG] [Thread-139934] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:22:54.526 [DEBUG] [Thread-139934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:22:54.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:22:54.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:22:54.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:22:54.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:22:54.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:22:54.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:22:54.562 [DEBUG] [Thread-139934] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:23:05.612 [DEBUG] [Thread-139936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:23:06.000 [DEBUG] [Thread-139937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:23:20.667 [DEBUG] [Thread-139938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:23:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:23:24.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:23:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:23:26.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 23, 14), 0.52, 96.5, 0.0, 17.91, 12.68, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:23:26.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:23:14
2026-02-12T02:23:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:23:27.262 [DEBUG] [Thread-139939] [transport.py] [_log()] starting thread (client mode): 0xa2d01b40
2026-02-12T02:23:27.262 [DEBUG] [Thread-139939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:23:27.281 [DEBUG] [Thread-139939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:23:27.281 [INFO] [Thread-139939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:23:27.284 [DEBUG] [Thread-139939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] client lang: <none>
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] server lang: <none>
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] kex follows: False
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:23:27.285 [DEBUG] [Thread-139939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:23:27.286 [DEBUG] [Thread-139939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:23:27.286 [DEBUG] [Thread-139939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:23:27.286 [DEBUG] [Thread-139939] [transport.py] [_log()] Compression: none
2026-02-12T02:23:27.286 [DEBUG] [Thread-139939] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:23:27.305 [DEBUG] [Thread-139939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:23:27.305 [DEBUG] [Thread-139939] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:23:27.306 [DEBUG] [Thread-139939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:23:27.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:23:27.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:23:27.309 [DEBUG] [Thread-139939] [transport.py] [_log()] userauth is OK
2026-02-12T02:23:27.309 [DEBUG] [Thread-139939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:23:27.309 [DEBUG] [Thread-139939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:23:27.309 [DEBUG] [Thread-139939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:23:27.309 [DEBUG] [Thread-139939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:23:27.338 [INFO] [Thread-139939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:23:27.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:23:27.927 [DEBUG] [Thread-139939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:23:27.937 [DEBUG] [Thread-139939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:23:27.937 [DEBUG] [Thread-139939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:23:27.968 [DEBUG] [Thread-139939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:23:27.968 [DEBUG] [Thread-139939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:23:27.972 [DEBUG] [Thread-139939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:23:27.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:23:27.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:23:27.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:23:27.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:23:27.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:23:27.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:23:27.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:23:27.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:23:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:23:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.016104 -999.00  +12.70  10.63     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 10.6 10.6 165.4 17.2 14.8 -2.3 14.6 -1.9 14.4 -2.0 14.8 -2.1
2026-02-12T02:23:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:23:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:23:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.016104
2026-02-12T02:23:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:23:27.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:23:27.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:23:27.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:23:27.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:23:27.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:23:14', tmtdew=0.52, humidity=96.5, cloud=0.0, wind=17.91, temperature=12.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:23:11.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:23:27.999 [DEBUG] [Thread-139939] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:23:28.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:23:28.096 [DEBUG] [Thread-139942] [transport.py] [_log()] starting thread (client mode): 0xa5740d90
2026-02-12T02:23:28.096 [DEBUG] [Thread-139942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:23:28.110 [DEBUG] [Thread-139942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:23:28.110 [INFO] [Thread-139942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:23:28.118 [DEBUG] [Thread-139942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:23:28.118 [DEBUG] [Thread-139942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:23:28.118 [DEBUG] [Thread-139942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:23:28.118 [DEBUG] [Thread-139942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:23:28.118 [DEBUG] [Thread-139942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] client lang: <none>
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] server lang: <none>
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] kex follows: False
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] Compression: none
2026-02-12T02:23:28.119 [DEBUG] [Thread-139942] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:23:28.175 [DEBUG] [Thread-139942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:23:28.176 [DEBUG] [Thread-139942] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:23:28.176 [DEBUG] [Thread-139942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:23:28.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:23:28.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:23:28.231 [DEBUG] [Thread-139942] [transport.py] [_log()] userauth is OK
2026-02-12T02:23:28.231 [DEBUG] [Thread-139942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:23:28.232 [DEBUG] [Thread-139942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:23:28.232 [DEBUG] [Thread-139942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:23:28.232 [DEBUG] [Thread-139942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:23:28.251 [INFO] [Thread-139942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:23:28.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:23:28.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:23:29.099 [DEBUG] [Thread-139942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:23:29.100 [DEBUG] [Thread-139942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:23:29.147 [DEBUG] [Thread-139942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:23:29.147 [DEBUG] [Thread-139942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:23:29.157 [DEBUG] [Thread-139942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:23:29.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:23:29.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:23:29.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:23:29.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:23:29.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:23:29.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:23:29.192 [DEBUG] [Thread-139942] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:23:30.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:23:30.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:23:35.704 [DEBUG] [Thread-139944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:23:50.758 [DEBUG] [Thread-139945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:23:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:23:59.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:23:59.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
2026-02-12T02:24:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 23, 50), 0.52, 96.47, 0.0, 16.67, 12.65, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:24:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:23:50
2026-02-12T02:24:01.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:24:01.715 [DEBUG] [Thread-139946] [transport.py] [_log()] starting thread (client mode): 0xa2d00ac0
2026-02-12T02:24:01.716 [DEBUG] [Thread-139946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:24:01.736 [DEBUG] [Thread-139946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:24:01.736 [INFO] [Thread-139946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:24:01.739 [DEBUG] [Thread-139946] [transport.py] [_log()] client lang: <none>
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] server lang: <none>
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] kex follows: False
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] Compression: none
2026-02-12T02:24:01.740 [DEBUG] [Thread-139946] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:24:01.757 [DEBUG] [Thread-139946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:24:01.757 [DEBUG] [Thread-139946] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:24:01.758 [DEBUG] [Thread-139946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:24:01.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:24:01.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:24:01.760 [DEBUG] [Thread-139946] [transport.py] [_log()] userauth is OK
2026-02-12T02:24:01.760 [DEBUG] [Thread-139946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:24:01.760 [DEBUG] [Thread-139946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:24:01.760 [DEBUG] [Thread-139946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:24:01.760 [DEBUG] [Thread-139946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:24:01.779 [INFO] [Thread-139946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:24:01.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:24:02.327 [DEBUG] [Thread-139946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:24:02.327 [DEBUG] [Thread-139946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:24:02.327 [DEBUG] [Thread-139946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:24:02.368 [DEBUG] [Thread-139946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:24:02.368 [DEBUG] [Thread-139946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:24:02.371 [DEBUG] [Thread-139946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:24:02.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:24:02.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:24:02.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:24:02.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:24:02.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:24:02.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:24:02.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:24:02.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:24:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:24:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.016452 -999.00  +12.80  12.29     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.3 12.3 165.1 16.3 14.8 -2.2 14.6 -1.8 14.5 -2.0 14.8 -2.0
2026-02-12T02:24:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:24:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:24:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.016452
2026-02-12T02:24:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:24:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:24:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:24:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:24:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:24:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:23:50', tmtdew=0.52, humidity=96.47, cloud=0.0, wind=16.67, temperature=12.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:23:41.453', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:24:02.391 [DEBUG] [Thread-139946] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:24:02.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:24:02.487 [DEBUG] [Thread-139949] [transport.py] [_log()] starting thread (client mode): 0xa2d00c40
2026-02-12T02:24:02.488 [DEBUG] [Thread-139949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:24:02.502 [DEBUG] [Thread-139949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:24:02.502 [INFO] [Thread-139949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:24:02.510 [DEBUG] [Thread-139949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:24:02.510 [DEBUG] [Thread-139949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:24:02.510 [DEBUG] [Thread-139949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:24:02.510 [DEBUG] [Thread-139949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] client lang: <none>
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] server lang: <none>
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] kex follows: False
2026-02-12T02:24:02.511 [DEBUG] [Thread-139949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:24:02.512 [DEBUG] [Thread-139949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:24:02.512 [DEBUG] [Thread-139949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:24:02.512 [DEBUG] [Thread-139949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:24:02.512 [DEBUG] [Thread-139949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:24:02.512 [DEBUG] [Thread-139949] [transport.py] [_log()] Compression: none
2026-02-12T02:24:02.512 [DEBUG] [Thread-139949] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:24:02.568 [DEBUG] [Thread-139949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:24:02.569 [DEBUG] [Thread-139949] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:24:02.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:24:02.570 [DEBUG] [Thread-139949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:24:02.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:24:02.628 [DEBUG] [Thread-139949] [transport.py] [_log()] userauth is OK
2026-02-12T02:24:02.628 [DEBUG] [Thread-139949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:24:02.628 [DEBUG] [Thread-139949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:24:02.628 [DEBUG] [Thread-139949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:24:02.628 [DEBUG] [Thread-139949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:24:02.646 [INFO] [Thread-139949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:24:02.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:24:02.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:24:03.445 [DEBUG] [Thread-139949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:24:03.446 [DEBUG] [Thread-139949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:24:03.494 [DEBUG] [Thread-139949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:24:03.494 [DEBUG] [Thread-139949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:24:03.503 [DEBUG] [Thread-139949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:24:03.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:24:03.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:24:03.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:24:03.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:24:03.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:24:03.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:24:03.540 [DEBUG] [Thread-139949] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:24:05.796 [DEBUG] [Thread-139951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:24:06.096 [DEBUG] [Thread-139952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:24:20.848 [DEBUG] [Thread-139953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:24:30.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:24:30.286 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:24:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:24:33.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:24:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:24:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 24, 25), 0.53, 96.44, 0.0, 16.75, 12.63, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:24:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:24:25
2026-02-12T02:24:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:24:35.882 [DEBUG] [Thread-139954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:24:35.885 [DEBUG] [Thread-139955] [transport.py] [_log()] starting thread (client mode): 0xa2d9fe50
2026-02-12T02:24:35.886 [DEBUG] [Thread-139955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:24:35.903 [DEBUG] [Thread-139955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:24:35.903 [INFO] [Thread-139955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:24:35.905 [DEBUG] [Thread-139955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] client lang: <none>
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] server lang: <none>
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] kex follows: False
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] Compression: none
2026-02-12T02:24:35.906 [DEBUG] [Thread-139955] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:24:35.924 [DEBUG] [Thread-139955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:24:35.924 [DEBUG] [Thread-139955] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:24:35.925 [DEBUG] [Thread-139955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:24:35.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:24:35.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:24:35.927 [DEBUG] [Thread-139955] [transport.py] [_log()] userauth is OK
2026-02-12T02:24:35.928 [DEBUG] [Thread-139955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:24:35.928 [DEBUG] [Thread-139955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:24:35.928 [DEBUG] [Thread-139955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:24:35.928 [DEBUG] [Thread-139955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:24:35.950 [INFO] [Thread-139955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:24:35.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:24:36.584 [DEBUG] [Thread-139955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:24:36.593 [DEBUG] [Thread-139955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:24:36.594 [DEBUG] [Thread-139955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:24:36.625 [DEBUG] [Thread-139955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:24:36.626 [DEBUG] [Thread-139955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:24:36.629 [DEBUG] [Thread-139955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:24:36.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:24:36.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:24:36.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:24:36.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:24:36.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:24:36.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:24:36.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:24:36.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:24:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:24:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.016799 -999.00  +12.80  12.62     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.6 12.6 160.4 16.4 14.8 -2.2 14.6 -1.6 14.4 -1.8 14.9 -2.0
2026-02-12T02:24:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:24:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:24:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.016799
2026-02-12T02:24:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:24:36.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:24:36.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:24:36.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:24:36.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:24:36.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:24:25', tmtdew=0.53, humidity=96.44, cloud=0.0, wind=16.75, temperature=12.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:24:11.434', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:24:36.655 [DEBUG] [Thread-139955] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:24:36.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:24:36.752 [DEBUG] [Thread-139958] [transport.py] [_log()] starting thread (client mode): 0xa2d79bd0
2026-02-12T02:24:36.752 [DEBUG] [Thread-139958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:24:36.771 [DEBUG] [Thread-139958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:24:36.771 [INFO] [Thread-139958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:24:36.778 [DEBUG] [Thread-139958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] client lang: <none>
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] server lang: <none>
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] kex follows: False
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:24:36.779 [DEBUG] [Thread-139958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:24:36.780 [DEBUG] [Thread-139958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:24:36.780 [DEBUG] [Thread-139958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:24:36.780 [DEBUG] [Thread-139958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:24:36.780 [DEBUG] [Thread-139958] [transport.py] [_log()] Compression: none
2026-02-12T02:24:36.780 [DEBUG] [Thread-139958] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:24:36.842 [DEBUG] [Thread-139958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:24:36.842 [DEBUG] [Thread-139958] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:24:36.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:24:36.844 [DEBUG] [Thread-139958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:24:36.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:24:36.904 [DEBUG] [Thread-139958] [transport.py] [_log()] userauth is OK
2026-02-12T02:24:36.904 [DEBUG] [Thread-139958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:24:36.904 [DEBUG] [Thread-139958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:24:36.904 [DEBUG] [Thread-139958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:24:36.904 [DEBUG] [Thread-139958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:24:36.926 [INFO] [Thread-139958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:24:36.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:24:36.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:24:37.736 [DEBUG] [Thread-139958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:24:37.736 [DEBUG] [Thread-139958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:24:37.784 [DEBUG] [Thread-139958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:24:37.784 [DEBUG] [Thread-139958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:24:37.793 [DEBUG] [Thread-139958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:24:37.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:24:37.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:24:37.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:24:37.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:24:37.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:24:37.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:24:37.830 [DEBUG] [Thread-139958] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:24:50.912 [DEBUG] [Thread-139960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:25:05.962 [DEBUG] [Thread-139961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:25:06.184 [DEBUG] [Thread-139962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:25:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:25:07.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:25:07.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:25:10.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 25, 1), 0.52, 96.47, 0.0, 16.62, 12.68, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:25:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:25:01
2026-02-12T02:25:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:25:10.602 [DEBUG] [Thread-139963] [transport.py] [_log()] starting thread (client mode): 0xa57e30a0
2026-02-12T02:25:10.602 [DEBUG] [Thread-139963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:25:10.624 [DEBUG] [Thread-139963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:25:10.624 [INFO] [Thread-139963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] client lang: <none>
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] server lang: <none>
2026-02-12T02:25:10.627 [DEBUG] [Thread-139963] [transport.py] [_log()] kex follows: False
2026-02-12T02:25:10.628 [DEBUG] [Thread-139963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:25:10.628 [DEBUG] [Thread-139963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:25:10.628 [DEBUG] [Thread-139963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:25:10.628 [DEBUG] [Thread-139963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:25:10.628 [DEBUG] [Thread-139963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:25:10.628 [DEBUG] [Thread-139963] [transport.py] [_log()] Compression: none
2026-02-12T02:25:10.628 [DEBUG] [Thread-139963] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:25:10.646 [DEBUG] [Thread-139963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:25:10.646 [DEBUG] [Thread-139963] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:25:10.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:25:10.647 [DEBUG] [Thread-139963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:25:10.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:25:10.648 [DEBUG] [Thread-139963] [transport.py] [_log()] userauth is OK
2026-02-12T02:25:10.648 [DEBUG] [Thread-139963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:25:10.649 [DEBUG] [Thread-139963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:25:10.649 [DEBUG] [Thread-139963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:25:10.649 [DEBUG] [Thread-139963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:25:10.681 [INFO] [Thread-139963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:25:10.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:25:11.288 [DEBUG] [Thread-139963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:25:11.289 [DEBUG] [Thread-139963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:25:11.289 [DEBUG] [Thread-139963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:25:11.329 [DEBUG] [Thread-139963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:25:11.329 [DEBUG] [Thread-139963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:25:11.332 [DEBUG] [Thread-139963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:25:11.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:25:11.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:25:11.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:25:11.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:25:11.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:25:11.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:25:11.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:25:11.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:25:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:25:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.017146 -999.00  +12.80  11.79     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 11.8 11.8 164.3 15.6 14.8 -2.0 14.6 -1.6 14.5 -1.8 14.9 -2.0
2026-02-12T02:25:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:25:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:25:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.017146
2026-02-12T02:25:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:25:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:25:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:25:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:25:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:25:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:25:01', tmtdew=0.52, humidity=96.47, cloud=0.0, wind=16.62, temperature=12.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:24:41.414', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:25:11.359 [DEBUG] [Thread-139963] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:25:11.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:25:11.452 [DEBUG] [Thread-139966] [transport.py] [_log()] starting thread (client mode): 0xa5770a90
2026-02-12T02:25:11.452 [DEBUG] [Thread-139966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:25:11.467 [DEBUG] [Thread-139966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:25:11.467 [INFO] [Thread-139966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] client lang: <none>
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] server lang: <none>
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] kex follows: False
2026-02-12T02:25:11.475 [DEBUG] [Thread-139966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:25:11.476 [DEBUG] [Thread-139966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:25:11.476 [DEBUG] [Thread-139966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:25:11.476 [DEBUG] [Thread-139966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:25:11.476 [DEBUG] [Thread-139966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:25:11.476 [DEBUG] [Thread-139966] [transport.py] [_log()] Compression: none
2026-02-12T02:25:11.476 [DEBUG] [Thread-139966] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:25:11.535 [DEBUG] [Thread-139966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:25:11.536 [DEBUG] [Thread-139966] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:25:11.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:25:11.537 [DEBUG] [Thread-139966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:25:11.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:25:11.591 [DEBUG] [Thread-139966] [transport.py] [_log()] userauth is OK
2026-02-12T02:25:11.591 [DEBUG] [Thread-139966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:25:11.591 [DEBUG] [Thread-139966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:25:11.591 [DEBUG] [Thread-139966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:25:11.591 [DEBUG] [Thread-139966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:25:11.611 [INFO] [Thread-139966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:25:11.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:25:11.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:25:12.635 [DEBUG] [Thread-139966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:25:12.635 [DEBUG] [Thread-139966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:25:12.635 [DEBUG] [Thread-139966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:25:12.636 [DEBUG] [Thread-139966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:25:12.645 [DEBUG] [Thread-139966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:25:12.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:25:12.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:25:12.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:25:12.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:25:12.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:25:12.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:25:12.682 [DEBUG] [Thread-139966] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:25:20.997 [DEBUG] [Thread-139968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:25:30.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:25:30.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:25:36.039 [DEBUG] [Thread-139969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:25:42.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:25:42.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:25:42.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:25:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 25, 1), 0.52, 96.47, 0.0, 16.62, 12.68, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:25:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:25:01
2026-02-12T02:25:45.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:25:45.536 [DEBUG] [Thread-139970] [transport.py] [_log()] starting thread (client mode): 0xa57e3d00
2026-02-12T02:25:45.536 [DEBUG] [Thread-139970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:25:45.559 [DEBUG] [Thread-139970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:25:45.559 [INFO] [Thread-139970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] client lang: <none>
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] server lang: <none>
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] kex follows: False
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] Compression: none
2026-02-12T02:25:45.561 [DEBUG] [Thread-139970] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:25:45.575 [DEBUG] [Thread-139970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:25:45.576 [DEBUG] [Thread-139970] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:25:45.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:25:45.577 [DEBUG] [Thread-139970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:25:45.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:25:45.579 [DEBUG] [Thread-139970] [transport.py] [_log()] userauth is OK
2026-02-12T02:25:45.579 [DEBUG] [Thread-139970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:25:45.579 [DEBUG] [Thread-139970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:25:45.579 [DEBUG] [Thread-139970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:25:45.579 [DEBUG] [Thread-139970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:25:45.594 [INFO] [Thread-139970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:25:45.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:25:46.152 [DEBUG] [Thread-139970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:25:46.152 [DEBUG] [Thread-139970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:25:46.152 [DEBUG] [Thread-139970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:25:46.192 [DEBUG] [Thread-139970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:25:46.192 [DEBUG] [Thread-139970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:25:46.195 [DEBUG] [Thread-139970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:25:46.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:25:46.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:25:46.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:25:46.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:25:46.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:25:46.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:25:46.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:25:46.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:25:46.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:25:46.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.017840 -999.00  +12.70  13.87     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.9 13.9 167.8 20.6 14.8 -2.2 14.7 -1.9 14.5 -2.1 14.8 -2.2
2026-02-12T02:25:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:25:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:25:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.017840
2026-02-12T02:25:46.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:25:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:25:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:25:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:25:46.214 [DEBUG] [Thread-139970] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:25:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:25:46.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:25:01', tmtdew=0.52, humidity=96.47, cloud=0.0, wind=16.62, temperature=12.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:25:41.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:25:46.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:25:46.307 [DEBUG] [Thread-139973] [transport.py] [_log()] starting thread (client mode): 0xa5772ad0
2026-02-12T02:25:46.307 [DEBUG] [Thread-139973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:25:46.322 [DEBUG] [Thread-139973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:25:46.322 [INFO] [Thread-139973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] client lang: <none>
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] server lang: <none>
2026-02-12T02:25:46.330 [DEBUG] [Thread-139973] [transport.py] [_log()] kex follows: False
2026-02-12T02:25:46.331 [DEBUG] [Thread-139973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:25:46.331 [DEBUG] [Thread-139973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:25:46.331 [DEBUG] [Thread-139973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:25:46.331 [DEBUG] [Thread-139973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:25:46.331 [DEBUG] [Thread-139973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:25:46.331 [DEBUG] [Thread-139973] [transport.py] [_log()] Compression: none
2026-02-12T02:25:46.331 [DEBUG] [Thread-139973] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:25:46.391 [DEBUG] [Thread-139973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:25:46.391 [DEBUG] [Thread-139973] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:25:46.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:25:46.393 [DEBUG] [Thread-139973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:25:46.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:25:46.447 [DEBUG] [Thread-139973] [transport.py] [_log()] userauth is OK
2026-02-12T02:25:46.447 [DEBUG] [Thread-139973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:25:46.447 [DEBUG] [Thread-139973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:25:46.448 [DEBUG] [Thread-139973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:25:46.448 [DEBUG] [Thread-139973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:25:46.466 [INFO] [Thread-139973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:25:46.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:25:46.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:25:47.297 [DEBUG] [Thread-139973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:25:47.297 [DEBUG] [Thread-139973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:25:47.346 [DEBUG] [Thread-139973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:25:47.346 [DEBUG] [Thread-139973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:25:47.354 [DEBUG] [Thread-139973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:25:47.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:25:47.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:25:47.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:25:47.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:25:47.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:25:47.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:25:47.385 [DEBUG] [Thread-139973] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:25:51.075 [DEBUG] [Thread-139975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:06.128 [DEBUG] [Thread-139976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:06.270 [DEBUG] [Thread-139977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:26:17.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:26:17.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:26:19.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 25, 37), 0.96, 93.8, 0.0, 17.29, 13.07, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:26:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:25:37
2026-02-12T02:26:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:26:19.710 [DEBUG] [Thread-139978] [transport.py] [_log()] starting thread (client mode): 0xa57e08b0
2026-02-12T02:26:19.710 [DEBUG] [Thread-139978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:26:19.731 [DEBUG] [Thread-139978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:26:19.731 [INFO] [Thread-139978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] client lang: <none>
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] server lang: <none>
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] kex follows: False
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] Compression: none
2026-02-12T02:26:19.734 [DEBUG] [Thread-139978] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:26:19.742 [DEBUG] [Thread-139978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:26:19.743 [DEBUG] [Thread-139978] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:26:19.743 [DEBUG] [Thread-139978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:26:19.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:26:19.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:26:19.745 [DEBUG] [Thread-139978] [transport.py] [_log()] userauth is OK
2026-02-12T02:26:19.745 [DEBUG] [Thread-139978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:26:19.745 [DEBUG] [Thread-139978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:26:19.745 [DEBUG] [Thread-139978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:26:19.745 [DEBUG] [Thread-139978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:26:19.769 [INFO] [Thread-139978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:26:19.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:26:20.388 [DEBUG] [Thread-139978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:26:20.388 [DEBUG] [Thread-139978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:26:20.388 [DEBUG] [Thread-139978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:26:20.429 [DEBUG] [Thread-139978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:26:20.430 [DEBUG] [Thread-139978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:26:20.432 [DEBUG] [Thread-139978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:26:20.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:26:20.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:26:20.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:26:20.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:26:20.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:26:20.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:26:20.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:26:20.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:26:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:26:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.018188 -999.00  +12.70  11.83     92  +11.40 1 3 1 3 1     0    0 -999.00 0.00 ----- 11.8 11.8 163.4 18.5 14.8 -2.2 14.6 -1.8 14.5 -2.3 14.8 -2.2
2026-02-12T02:26:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:26:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:26:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.018188
2026-02-12T02:26:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:26:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:26:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:26:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:26:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:26:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:25:37', tmtdew=0.96, humidity=93.8, cloud=0.0, wind=17.29, temperature=13.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:26:11.443', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:26:20.456 [DEBUG] [Thread-139978] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:26:20.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:26:20.554 [DEBUG] [Thread-139981] [transport.py] [_log()] starting thread (client mode): 0xa57e0520
2026-02-12T02:26:20.554 [DEBUG] [Thread-139981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:26:20.568 [DEBUG] [Thread-139981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:26:20.568 [INFO] [Thread-139981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:26:20.575 [DEBUG] [Thread-139981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] client lang: <none>
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] server lang: <none>
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] kex follows: False
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:26:20.576 [DEBUG] [Thread-139981] [transport.py] [_log()] Compression: none
2026-02-12T02:26:20.577 [DEBUG] [Thread-139981] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:26:20.634 [DEBUG] [Thread-139981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:26:20.634 [DEBUG] [Thread-139981] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:26:20.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:26:20.635 [DEBUG] [Thread-139981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:26:20.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:26:20.690 [DEBUG] [Thread-139981] [transport.py] [_log()] userauth is OK
2026-02-12T02:26:20.691 [DEBUG] [Thread-139981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:26:20.691 [DEBUG] [Thread-139981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:26:20.691 [DEBUG] [Thread-139981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:26:20.691 [DEBUG] [Thread-139981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:26:20.714 [INFO] [Thread-139981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:26:20.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:26:20.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:26:21.163 [DEBUG] [Thread-139983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:21.503 [DEBUG] [Thread-139981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:26:21.504 [DEBUG] [Thread-139981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:26:21.551 [DEBUG] [Thread-139981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:26:21.552 [DEBUG] [Thread-139981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:26:21.561 [DEBUG] [Thread-139981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:26:21.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:26:21.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:26:21.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
2026-02-12T02:26:21.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:26:21.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:26:21.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:26:21.597 [DEBUG] [Thread-139981] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:26:30.694 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:30.695 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:36.217 [DEBUG] [Thread-139984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:51.256 [DEBUG] [Thread-139985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:26:51.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:26:51.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:26:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:26:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 26, 14), 0.49, 96.35, 0.0, 17.29, 12.63, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:26:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:26:14
2026-02-12T02:26:54.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:26:54.185 [DEBUG] [Thread-139986] [transport.py] [_log()] starting thread (client mode): 0xa2d008e0
2026-02-12T02:26:54.185 [DEBUG] [Thread-139986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:26:54.206 [DEBUG] [Thread-139986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:26:54.206 [INFO] [Thread-139986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:26:54.209 [DEBUG] [Thread-139986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:26:54.209 [DEBUG] [Thread-139986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:26:54.209 [DEBUG] [Thread-139986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:26:54.209 [DEBUG] [Thread-139986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:54.209 [DEBUG] [Thread-139986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:54.209 [DEBUG] [Thread-139986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] client lang: <none>
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] server lang: <none>
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] kex follows: False
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] Compression: none
2026-02-12T02:26:54.210 [DEBUG] [Thread-139986] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:26:54.226 [DEBUG] [Thread-139986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:26:54.227 [DEBUG] [Thread-139986] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:26:54.227 [DEBUG] [Thread-139986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:26:54.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:26:54.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:26:54.229 [DEBUG] [Thread-139986] [transport.py] [_log()] userauth is OK
2026-02-12T02:26:54.229 [DEBUG] [Thread-139986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:26:54.229 [DEBUG] [Thread-139986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:26:54.229 [DEBUG] [Thread-139986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:26:54.229 [DEBUG] [Thread-139986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:26:54.251 [INFO] [Thread-139986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:26:54.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:26:54.833 [DEBUG] [Thread-139986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:26:54.834 [DEBUG] [Thread-139986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:26:54.834 [DEBUG] [Thread-139986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:26:54.875 [DEBUG] [Thread-139986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:26:54.875 [DEBUG] [Thread-139986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:26:54.878 [DEBUG] [Thread-139986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:26:54.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:26:54.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:26:54.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:26:54.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:26:54.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:26:54.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:26:54.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:26:54.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:26:54.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:26:54.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.018535 -999.00  +12.70  10.86     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 10.9 10.9 163.0 15.5 14.8 -2.1 14.7 -1.7 14.5 -2.0 14.9 -2.0
2026-02-12T02:26:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:26:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:26:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.018535
2026-02-12T02:26:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:26:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:26:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:26:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:26:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:26:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:26:14', tmtdew=0.49, humidity=96.35, cloud=0.0, wind=17.29, temperature=12.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:26:41.424', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:26:54.895 [DEBUG] [Thread-139986] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:26:54.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:26:54.992 [DEBUG] [Thread-139989] [transport.py] [_log()] starting thread (client mode): 0xa57c0310
2026-02-12T02:26:54.993 [DEBUG] [Thread-139989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:26:55.007 [DEBUG] [Thread-139989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:26:55.007 [INFO] [Thread-139989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] client lang: <none>
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] server lang: <none>
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] kex follows: False
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:26:55.015 [DEBUG] [Thread-139989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:26:55.016 [DEBUG] [Thread-139989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:26:55.016 [DEBUG] [Thread-139989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:26:55.016 [DEBUG] [Thread-139989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:26:55.016 [DEBUG] [Thread-139989] [transport.py] [_log()] Compression: none
2026-02-12T02:26:55.016 [DEBUG] [Thread-139989] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:26:55.076 [DEBUG] [Thread-139989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:26:55.076 [DEBUG] [Thread-139989] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:26:55.076 [DEBUG] [Thread-139989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:26:55.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:26:55.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:26:55.134 [DEBUG] [Thread-139989] [transport.py] [_log()] userauth is OK
2026-02-12T02:26:55.134 [DEBUG] [Thread-139989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:26:55.134 [DEBUG] [Thread-139989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:26:55.135 [DEBUG] [Thread-139989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:26:55.135 [DEBUG] [Thread-139989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:26:55.154 [INFO] [Thread-139989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:26:55.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:26:55.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:26:55.945 [DEBUG] [Thread-139989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:26:55.945 [DEBUG] [Thread-139989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:26:55.993 [DEBUG] [Thread-139989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:26:55.993 [DEBUG] [Thread-139989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:26:56.002 [DEBUG] [Thread-139989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:26:56.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:26:56.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:26:56.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:26:56.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:26:56.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:26:56.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:26:56.035 [DEBUG] [Thread-139989] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:27:06.287 [DEBUG] [Thread-139991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:27:06.355 [DEBUG] [Thread-139992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:27:21.334 [DEBUG] [Thread-139993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:27:26.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:27:26.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:27:26.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:27:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 26, 49), 0.54, 96.35, 0.0, 16.29, 12.67, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:27:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:26:49
2026-02-12T02:27:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:27:28.633 [DEBUG] [Thread-139994] [transport.py] [_log()] starting thread (client mode): 0xa2d01300
2026-02-12T02:27:28.633 [DEBUG] [Thread-139994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:27:28.653 [DEBUG] [Thread-139994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:27:28.653 [INFO] [Thread-139994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] client lang: <none>
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] server lang: <none>
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] kex follows: False
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] Compression: none
2026-02-12T02:27:28.655 [DEBUG] [Thread-139994] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:27:28.665 [DEBUG] [Thread-139994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:27:28.665 [DEBUG] [Thread-139994] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:27:28.665 [DEBUG] [Thread-139994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:27:28.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:27:28.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:27:28.667 [DEBUG] [Thread-139994] [transport.py] [_log()] userauth is OK
2026-02-12T02:27:28.667 [DEBUG] [Thread-139994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:27:28.667 [DEBUG] [Thread-139994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:27:28.667 [DEBUG] [Thread-139994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:27:28.667 [DEBUG] [Thread-139994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:27:28.680 [INFO] [Thread-139994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:27:28.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:27:29.263 [DEBUG] [Thread-139994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:27:29.263 [DEBUG] [Thread-139994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:27:29.264 [DEBUG] [Thread-139994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:27:29.304 [DEBUG] [Thread-139994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:27:29.304 [DEBUG] [Thread-139994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:27:29.306 [DEBUG] [Thread-139994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:27:29.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:27:29.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:27:29.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:27:29.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:27:29.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:27:29.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:27:29.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:27:29.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:27:29.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:27:29.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.018882 -999.00  +12.70   9.47     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 9.5 9.5 152.8 15.7 14.8 -2.1 14.6 -1.9 14.5 -2.0 14.9 -1.9
2026-02-12T02:27:29.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:27:29.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:27:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.018882
2026-02-12T02:27:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:27:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:27:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:27:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:27:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:27:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:26:49', tmtdew=0.54, humidity=96.35, cloud=0.0, wind=16.29, temperature=12.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:27:11.405', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:27:29.321 [DEBUG] [Thread-139994] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:27:29.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:27:29.426 [DEBUG] [Thread-139997] [transport.py] [_log()] starting thread (client mode): 0xa2d010f0
2026-02-12T02:27:29.426 [DEBUG] [Thread-139997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:27:29.443 [DEBUG] [Thread-139997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:27:29.443 [INFO] [Thread-139997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:27:29.453 [DEBUG] [Thread-139997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:27:29.453 [DEBUG] [Thread-139997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:27:29.453 [DEBUG] [Thread-139997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:27:29.453 [DEBUG] [Thread-139997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:27:29.453 [DEBUG] [Thread-139997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] client lang: <none>
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] server lang: <none>
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] kex follows: False
2026-02-12T02:27:29.454 [DEBUG] [Thread-139997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:27:29.455 [DEBUG] [Thread-139997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:27:29.455 [DEBUG] [Thread-139997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:27:29.455 [DEBUG] [Thread-139997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:27:29.455 [DEBUG] [Thread-139997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:27:29.455 [DEBUG] [Thread-139997] [transport.py] [_log()] Compression: none
2026-02-12T02:27:29.455 [DEBUG] [Thread-139997] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:27:29.518 [DEBUG] [Thread-139997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:27:29.518 [DEBUG] [Thread-139997] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:27:29.519 [DEBUG] [Thread-139997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:27:29.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:27:29.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:27:29.577 [DEBUG] [Thread-139997] [transport.py] [_log()] userauth is OK
2026-02-12T02:27:29.577 [DEBUG] [Thread-139997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:27:29.577 [DEBUG] [Thread-139997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:27:29.577 [DEBUG] [Thread-139997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:27:29.577 [DEBUG] [Thread-139997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:27:29.601 [INFO] [Thread-139997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:27:29.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:27:29.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:27:30.402 [DEBUG] [Thread-139997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:27:30.402 [DEBUG] [Thread-139997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:27:30.450 [DEBUG] [Thread-139997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:27:30.451 [DEBUG] [Thread-139997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:27:30.464 [DEBUG] [Thread-139997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:27:30.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:27:30.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:27:30.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
2026-02-12T02:27:30.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:27:30.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:27:30.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:27:30.502 [DEBUG] [Thread-139997] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:27:30.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:27:30.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:27:36.370 [DEBUG] [Thread-139999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:27:51.420 [DEBUG] [Thread-140000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:28:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:28:00.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:28:00.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:28:02.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 27, 24), 0.54, 96.35, 0.0, 16.23, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:28:02.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:27:24
2026-02-12T02:28:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:28:03.268 [DEBUG] [Thread-140001] [transport.py] [_log()] starting thread (client mode): 0xa5773250
2026-02-12T02:28:03.269 [DEBUG] [Thread-140001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:28:03.289 [DEBUG] [Thread-140001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:28:03.289 [INFO] [Thread-140001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:28:03.290 [DEBUG] [Thread-140001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:28:03.290 [DEBUG] [Thread-140001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:28:03.290 [DEBUG] [Thread-140001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:28:03.290 [DEBUG] [Thread-140001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] client lang: <none>
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] server lang: <none>
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] kex follows: False
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] Compression: none
2026-02-12T02:28:03.291 [DEBUG] [Thread-140001] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:28:03.302 [DEBUG] [Thread-140001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:28:03.302 [DEBUG] [Thread-140001] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:28:03.303 [DEBUG] [Thread-140001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:28:03.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:28:03.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:28:03.305 [DEBUG] [Thread-140001] [transport.py] [_log()] userauth is OK
2026-02-12T02:28:03.305 [DEBUG] [Thread-140001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:28:03.305 [DEBUG] [Thread-140001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:28:03.305 [DEBUG] [Thread-140001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:28:03.305 [DEBUG] [Thread-140001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:28:03.323 [INFO] [Thread-140001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:28:03.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:28:03.954 [DEBUG] [Thread-140001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:28:03.954 [DEBUG] [Thread-140001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:28:03.955 [DEBUG] [Thread-140001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:28:03.995 [DEBUG] [Thread-140001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:28:03.995 [DEBUG] [Thread-140001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:28:03.999 [DEBUG] [Thread-140001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:28:04.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:28:04.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:28:04.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:28:04.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:28:04.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:28:04.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:28:04.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:28:04.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:28:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:28:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.019229 -999.00  +12.80  12.16     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.2 12.2 164.4 17.1 14.8 -2.0 14.7 -1.8 14.5 -2.0 14.9 -2.1
2026-02-12T02:28:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:28:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:28:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.019229
2026-02-12T02:28:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:28:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:28:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:28:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:28:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:28:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:27:24', tmtdew=0.54, humidity=96.35, cloud=0.0, wind=16.23, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:27:41.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:28:04.017 [DEBUG] [Thread-140001] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:28:04.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:28:04.112 [DEBUG] [Thread-140004] [transport.py] [_log()] starting thread (client mode): 0xa5771f30
2026-02-12T02:28:04.112 [DEBUG] [Thread-140004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:28:04.129 [DEBUG] [Thread-140004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:28:04.129 [INFO] [Thread-140004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:28:04.136 [DEBUG] [Thread-140004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] client lang: <none>
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] server lang: <none>
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] kex follows: False
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:28:04.137 [DEBUG] [Thread-140004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:28:04.138 [DEBUG] [Thread-140004] [transport.py] [_log()] Compression: none
2026-02-12T02:28:04.138 [DEBUG] [Thread-140004] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:28:04.195 [DEBUG] [Thread-140004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:28:04.195 [DEBUG] [Thread-140004] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:28:04.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:28:04.196 [DEBUG] [Thread-140004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:28:04.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:28:04.251 [DEBUG] [Thread-140004] [transport.py] [_log()] userauth is OK
2026-02-12T02:28:04.251 [DEBUG] [Thread-140004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:28:04.251 [DEBUG] [Thread-140004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:28:04.251 [DEBUG] [Thread-140004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:28:04.252 [DEBUG] [Thread-140004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:28:04.272 [INFO] [Thread-140004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:28:04.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:28:04.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:28:05.067 [DEBUG] [Thread-140004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:28:05.067 [DEBUG] [Thread-140004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:28:05.115 [DEBUG] [Thread-140004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:28:05.115 [DEBUG] [Thread-140004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:28:05.124 [DEBUG] [Thread-140004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:28:05.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:28:05.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:28:05.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:28:05.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:28:05.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:28:05.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:28:05.162 [DEBUG] [Thread-140004] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:28:06.445 [DEBUG] [Thread-140006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:28:06.451 [DEBUG] [Thread-140007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:28:21.494 [DEBUG] [Thread-140008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:28:31.101 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:28:31.102 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:28:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:28:35.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:28:35.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
2026-02-12T02:28:36.532 [DEBUG] [Thread-140009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:28:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 28), 0.55, 96.3, 0.0, 16.43, 12.65, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:28:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:28:00
2026-02-12T02:28:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:28:37.785 [DEBUG] [Thread-140010] [transport.py] [_log()] starting thread (client mode): 0xa2d97c40
2026-02-12T02:28:37.785 [DEBUG] [Thread-140010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:28:37.803 [DEBUG] [Thread-140010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:28:37.804 [INFO] [Thread-140010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] client lang: <none>
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] server lang: <none>
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] kex follows: False
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:28:37.807 [DEBUG] [Thread-140010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:28:37.808 [DEBUG] [Thread-140010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:28:37.808 [DEBUG] [Thread-140010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:28:37.808 [DEBUG] [Thread-140010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:28:37.808 [DEBUG] [Thread-140010] [transport.py] [_log()] Compression: none
2026-02-12T02:28:37.808 [DEBUG] [Thread-140010] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:28:37.815 [DEBUG] [Thread-140010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:28:37.816 [DEBUG] [Thread-140010] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:28:37.816 [DEBUG] [Thread-140010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:28:37.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:28:37.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:28:37.817 [DEBUG] [Thread-140010] [transport.py] [_log()] userauth is OK
2026-02-12T02:28:37.817 [DEBUG] [Thread-140010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:28:37.817 [DEBUG] [Thread-140010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:28:37.817 [DEBUG] [Thread-140010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:28:37.817 [DEBUG] [Thread-140010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:28:37.827 [INFO] [Thread-140010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:28:37.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:28:38.442 [DEBUG] [Thread-140010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:28:38.442 [DEBUG] [Thread-140010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:28:38.443 [DEBUG] [Thread-140010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:28:38.483 [DEBUG] [Thread-140010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:28:38.484 [DEBUG] [Thread-140010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:28:38.487 [DEBUG] [Thread-140010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:28:38.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:28:38.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:28:38.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:28:38.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:28:38.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:28:38.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:28:38.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:28:38.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:28:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:28:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.019576 -999.00  +12.80  10.32     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 10.3 10.3 159.6 16.4 14.9 -2.1 14.7 -2.0 14.5 -2.3 14.9 -2.2
2026-02-12T02:28:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:28:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:28:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.019576
2026-02-12T02:28:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:28:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:28:38.516 [DEBUG] [Thread-140010] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:28:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:28:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:28:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:28:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:28:00', tmtdew=0.55, humidity=96.3, cloud=0.0, wind=16.43, temperature=12.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:28:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:28:38.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:28:38.623 [DEBUG] [Thread-140013] [transport.py] [_log()] starting thread (client mode): 0xa2d9e1d0
2026-02-12T02:28:38.623 [DEBUG] [Thread-140013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:28:38.640 [DEBUG] [Thread-140013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:28:38.640 [INFO] [Thread-140013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:28:38.650 [DEBUG] [Thread-140013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] client lang: <none>
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] server lang: <none>
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] kex follows: False
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] Compression: none
2026-02-12T02:28:38.651 [DEBUG] [Thread-140013] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:28:38.715 [DEBUG] [Thread-140013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:28:38.715 [DEBUG] [Thread-140013] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:28:38.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:28:38.716 [DEBUG] [Thread-140013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:28:38.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:28:38.781 [DEBUG] [Thread-140013] [transport.py] [_log()] userauth is OK
2026-02-12T02:28:38.781 [DEBUG] [Thread-140013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:28:38.781 [DEBUG] [Thread-140013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:28:38.781 [DEBUG] [Thread-140013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:28:38.781 [DEBUG] [Thread-140013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:28:38.802 [INFO] [Thread-140013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:28:38.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:28:38.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:28:39.631 [DEBUG] [Thread-140013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:28:39.631 [DEBUG] [Thread-140013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:28:39.683 [DEBUG] [Thread-140013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:28:39.683 [DEBUG] [Thread-140013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:28:39.694 [DEBUG] [Thread-140013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:28:39.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:28:39.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:28:39.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:28:39.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:28:39.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:28:39.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:28:39.738 [DEBUG] [Thread-140013] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:28:51.570 [DEBUG] [Thread-140015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:29:06.521 [DEBUG] [Thread-140016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:29:06.627 [DEBUG] [Thread-140017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:29:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:29:09.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:29:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:29:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 28, 36), 1.01, 93.54, 0.0, 18.74, 13.07, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:29:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:28:36
2026-02-12T02:29:12.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:29:12.243 [DEBUG] [Thread-140018] [transport.py] [_log()] starting thread (client mode): 0xa57c0370
2026-02-12T02:29:12.243 [DEBUG] [Thread-140018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:29:12.261 [DEBUG] [Thread-140018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:29:12.261 [INFO] [Thread-140018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] client lang: <none>
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] server lang: <none>
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] kex follows: False
2026-02-12T02:29:12.265 [DEBUG] [Thread-140018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:29:12.266 [DEBUG] [Thread-140018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:29:12.266 [DEBUG] [Thread-140018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:29:12.266 [DEBUG] [Thread-140018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:29:12.266 [DEBUG] [Thread-140018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:29:12.266 [DEBUG] [Thread-140018] [transport.py] [_log()] Compression: none
2026-02-12T02:29:12.266 [DEBUG] [Thread-140018] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:29:12.280 [DEBUG] [Thread-140018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:29:12.280 [DEBUG] [Thread-140018] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:29:12.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:29:12.281 [DEBUG] [Thread-140018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:29:12.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:29:12.283 [DEBUG] [Thread-140018] [transport.py] [_log()] userauth is OK
2026-02-12T02:29:12.284 [DEBUG] [Thread-140018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:29:12.284 [DEBUG] [Thread-140018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:29:12.284 [DEBUG] [Thread-140018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:29:12.284 [DEBUG] [Thread-140018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:29:12.302 [INFO] [Thread-140018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:29:12.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:29:12.913 [DEBUG] [Thread-140018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:29:12.913 [DEBUG] [Thread-140018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:29:12.913 [DEBUG] [Thread-140018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:29:12.954 [DEBUG] [Thread-140018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:29:12.954 [DEBUG] [Thread-140018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:29:12.956 [DEBUG] [Thread-140018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:29:12.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:29:12.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:29:12.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:29:12.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:29:12.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:29:12.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:29:12.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:29:12.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:29:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:29:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.019924 -999.00  +12.80  13.03     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.0 13.0 158.6 17.9 14.9 -2.2 14.6 -1.7 14.5 -2.3 14.9 -2.2
2026-02-12T02:29:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:29:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:29:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.019924
2026-02-12T02:29:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:29:12.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:29:12.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:29:12.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:29:12.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:29:12.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:28:36', tmtdew=1.01, humidity=93.54, cloud=0.0, wind=18.74, temperature=13.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:28:41.434', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:29:12.977 [DEBUG] [Thread-140018] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:29:13.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:29:13.076 [DEBUG] [Thread-140021] [transport.py] [_log()] starting thread (client mode): 0xa57717e0
2026-02-12T02:29:13.076 [DEBUG] [Thread-140021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:29:13.092 [DEBUG] [Thread-140021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:29:13.092 [INFO] [Thread-140021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:29:13.099 [DEBUG] [Thread-140021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:29:13.099 [DEBUG] [Thread-140021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] client lang: <none>
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] server lang: <none>
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] kex follows: False
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] Compression: none
2026-02-12T02:29:13.100 [DEBUG] [Thread-140021] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:29:13.161 [DEBUG] [Thread-140021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:29:13.162 [DEBUG] [Thread-140021] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:29:13.163 [DEBUG] [Thread-140021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:29:13.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:29:13.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:29:13.218 [DEBUG] [Thread-140021] [transport.py] [_log()] userauth is OK
2026-02-12T02:29:13.219 [DEBUG] [Thread-140021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:29:13.219 [DEBUG] [Thread-140021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:29:13.219 [DEBUG] [Thread-140021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:29:13.219 [DEBUG] [Thread-140021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:29:13.243 [INFO] [Thread-140021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:29:13.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:29:13.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:29:14.077 [DEBUG] [Thread-140021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:29:14.077 [DEBUG] [Thread-140021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:29:14.125 [DEBUG] [Thread-140021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:29:14.125 [DEBUG] [Thread-140021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:29:14.133 [DEBUG] [Thread-140021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:29:14.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:29: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')
2026-02-12T02:29: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
2026-02-12T02:29:14.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:29:14.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:29:14.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:29:14.166 [DEBUG] [Thread-140021] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:29:21.663 [DEBUG] [Thread-140023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:29:31.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:29:31.305 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:29:36.717 [DEBUG] [Thread-140024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:29:44.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:29:44.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:29:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:29:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 29, 11), 0.5, 96.29, 0.0, 15.63, 12.72, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:29:46.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:29:11
2026-02-12T02:29:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:29:46.633 [DEBUG] [Thread-140025] [transport.py] [_log()] starting thread (client mode): 0xa57728f0
2026-02-12T02:29:46.633 [DEBUG] [Thread-140025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:29:46.657 [DEBUG] [Thread-140025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:29:46.658 [INFO] [Thread-140025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] client lang: <none>
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] server lang: <none>
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] kex follows: False
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] Compression: none
2026-02-12T02:29:46.661 [DEBUG] [Thread-140025] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:29:46.676 [DEBUG] [Thread-140025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:29:46.676 [DEBUG] [Thread-140025] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:29:46.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:29:46.677 [DEBUG] [Thread-140025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:29:46.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:29:46.679 [DEBUG] [Thread-140025] [transport.py] [_log()] userauth is OK
2026-02-12T02:29:46.679 [DEBUG] [Thread-140025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:29:46.679 [DEBUG] [Thread-140025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:29:46.679 [DEBUG] [Thread-140025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:29:46.679 [DEBUG] [Thread-140025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:29:46.695 [INFO] [Thread-140025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:29:46.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:29:47.313 [DEBUG] [Thread-140025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:29:47.313 [DEBUG] [Thread-140025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:29:47.313 [DEBUG] [Thread-140025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:29:47.354 [DEBUG] [Thread-140025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:29:47.354 [DEBUG] [Thread-140025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:29:47.356 [DEBUG] [Thread-140025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:29:47.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:29:47.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:29:47.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:29:47.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:29:47.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:29:47.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:29:47.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:29:47.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.020271 -999.00  +12.80  12.77     92  +11.50 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.8 12.8 161.2 15.6 14.8 -2.1 14.7 -1.8 14.5 -1.9 14.9 -1.8
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.020271
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:29:47.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:29:11', tmtdew=0.5, humidity=96.29, cloud=0.0, wind=15.63, temperature=12.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:29:11.414', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:29:47.375 [DEBUG] [Thread-140025] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:29:47.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:29:47.458 [DEBUG] [Thread-140028] [transport.py] [_log()] starting thread (client mode): 0xa5770d00
2026-02-12T02:29:47.458 [DEBUG] [Thread-140028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:29:47.472 [DEBUG] [Thread-140028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:29:47.473 [INFO] [Thread-140028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:29:47.480 [DEBUG] [Thread-140028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:29:47.480 [DEBUG] [Thread-140028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:29:47.480 [DEBUG] [Thread-140028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:29:47.480 [DEBUG] [Thread-140028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:47.480 [DEBUG] [Thread-140028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:29:47.480 [DEBUG] [Thread-140028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:47.480 [DEBUG] [Thread-140028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] client lang: <none>
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] server lang: <none>
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] kex follows: False
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] Compression: none
2026-02-12T02:29:47.481 [DEBUG] [Thread-140028] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:29:47.541 [DEBUG] [Thread-140028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:29:47.542 [DEBUG] [Thread-140028] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:29:47.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:29:47.544 [DEBUG] [Thread-140028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:29:47.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:29:47.598 [DEBUG] [Thread-140028] [transport.py] [_log()] userauth is OK
2026-02-12T02:29:47.598 [DEBUG] [Thread-140028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:29:47.599 [DEBUG] [Thread-140028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:29:47.599 [DEBUG] [Thread-140028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:29:47.599 [DEBUG] [Thread-140028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:29:47.620 [INFO] [Thread-140028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:29:47.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:29:47.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:29:48.411 [DEBUG] [Thread-140028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:29:48.411 [DEBUG] [Thread-140028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:29:48.462 [DEBUG] [Thread-140028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:29:48.463 [DEBUG] [Thread-140028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:29:48.472 [DEBUG] [Thread-140028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:29:48.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:29:48.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')
2026-02-12T02:29:48.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:29:48.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:29:48.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:29:48.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:29:48.509 [DEBUG] [Thread-140028] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:29:51.756 [DEBUG] [Thread-140030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:06.578 [DEBUG] [Thread-140031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:06.810 [DEBUG] [Thread-140032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:18.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:30:18.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:30:18.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:30:20.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 29, 46), 0.56, 96.2, 0.0, 17.77, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:30:20.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:29:46
2026-02-12T02:30:20.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:30:21.095 [DEBUG] [Thread-140033] [transport.py] [_log()] starting thread (client mode): 0xa2d02500
2026-02-12T02:30:21.095 [DEBUG] [Thread-140033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:30:21.115 [DEBUG] [Thread-140033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:30:21.115 [INFO] [Thread-140033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] client lang: <none>
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] server lang: <none>
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] kex follows: False
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] Compression: none
2026-02-12T02:30:21.118 [DEBUG] [Thread-140033] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:30:21.135 [DEBUG] [Thread-140033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:30:21.135 [DEBUG] [Thread-140033] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:30:21.135 [DEBUG] [Thread-140033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:30:21.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:30:21.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:30:21.136 [DEBUG] [Thread-140033] [transport.py] [_log()] userauth is OK
2026-02-12T02:30:21.136 [DEBUG] [Thread-140033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:30:21.136 [DEBUG] [Thread-140033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:30:21.136 [DEBUG] [Thread-140033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:30:21.136 [DEBUG] [Thread-140033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:30:21.146 [INFO] [Thread-140033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:30:21.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:30:21.779 [DEBUG] [Thread-140033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:30:21.780 [DEBUG] [Thread-140033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:30:21.780 [DEBUG] [Thread-140033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:30:21.820 [DEBUG] [Thread-140033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:30:21.820 [DEBUG] [Thread-140033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:30:21.824 [DEBUG] [Thread-140033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:30:21.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:30:21.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:30:21.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:30:21.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:30:21.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:30:21.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:30:21.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:30:21.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:30:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:30:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.020965 -999.00  +12.80  12.68     92  +11.60 1 3 1 3 1     0    0 1.40 7.18 ----- 12.7 12.7 154.8 17.8 14.8 -2.0 14.7 -1.6 14.5 -2.0 14.9 -2.0
2026-02-12T02:30:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:30:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:30:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.020965
2026-02-12T02:30:21.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:30:21.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:30:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:30:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:30:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:30:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:29:46', tmtdew=0.56, humidity=96.2, cloud=0.0, wind=17.77, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:30:11.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:30:21.849 [DEBUG] [Thread-140033] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:30:21.850 [DEBUG] [Thread-140036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:21.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:30:21.945 [DEBUG] [Thread-140037] [transport.py] [_log()] starting thread (client mode): 0xa57c38b0
2026-02-12T02:30:21.945 [DEBUG] [Thread-140037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:30:21.959 [DEBUG] [Thread-140037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:30:21.960 [INFO] [Thread-140037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:21.970 [DEBUG] [Thread-140037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] client lang: <none>
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] server lang: <none>
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] kex follows: False
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:30:21.971 [DEBUG] [Thread-140037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:30:21.972 [DEBUG] [Thread-140037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:30:21.972 [DEBUG] [Thread-140037] [transport.py] [_log()] Compression: none
2026-02-12T02:30:21.972 [DEBUG] [Thread-140037] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:30:22.035 [DEBUG] [Thread-140037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:30:22.036 [DEBUG] [Thread-140037] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:30:22.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:30:22.037 [DEBUG] [Thread-140037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:30:22.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:30:22.094 [DEBUG] [Thread-140037] [transport.py] [_log()] userauth is OK
2026-02-12T02:30:22.094 [DEBUG] [Thread-140037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:30:22.094 [DEBUG] [Thread-140037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:30:22.095 [DEBUG] [Thread-140037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:30:22.095 [DEBUG] [Thread-140037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:30:22.119 [INFO] [Thread-140037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:30:22.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:30:22.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:30:22.920 [DEBUG] [Thread-140037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:30:22.920 [DEBUG] [Thread-140037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:30:22.968 [DEBUG] [Thread-140037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:30:22.968 [DEBUG] [Thread-140037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:30:22.977 [DEBUG] [Thread-140037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:30:22.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:30:22.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:30:22.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:30:23.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:30:23.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:30:23.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:30:23.012 [DEBUG] [Thread-140037] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:30:31.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:31.508 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:36.900 [DEBUG] [Thread-140039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:51.938 [DEBUG] [Thread-140040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:30:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:30:53.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:30:53.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:30:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 30, 22), 0.57, 96.19, 0.0, 16.13, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:30:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:30:22
2026-02-12T02:30:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:30:55.350 [DEBUG] [Thread-140041] [transport.py] [_log()] starting thread (client mode): 0xa2d9d900
2026-02-12T02:30:55.350 [DEBUG] [Thread-140041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:30:55.370 [DEBUG] [Thread-140041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:30:55.370 [INFO] [Thread-140041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:30:55.373 [DEBUG] [Thread-140041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:30:55.374 [DEBUG] [Thread-140041] [transport.py] [_log()] client lang: <none>
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] server lang: <none>
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] kex follows: False
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:30:55.375 [DEBUG] [Thread-140041] [transport.py] [_log()] Compression: none
2026-02-12T02:30:55.376 [DEBUG] [Thread-140041] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:30:55.395 [DEBUG] [Thread-140041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:30:55.396 [DEBUG] [Thread-140041] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:30:55.396 [DEBUG] [Thread-140041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:30:55.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:30:55.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:30:55.399 [DEBUG] [Thread-140041] [transport.py] [_log()] userauth is OK
2026-02-12T02:30:55.400 [DEBUG] [Thread-140041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:30:55.400 [DEBUG] [Thread-140041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:30:55.400 [DEBUG] [Thread-140041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:30:55.400 [DEBUG] [Thread-140041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:30:55.414 [INFO] [Thread-140041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:30:55.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:30:56.009 [DEBUG] [Thread-140041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:30:56.010 [DEBUG] [Thread-140041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:30:56.010 [DEBUG] [Thread-140041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:30:56.050 [DEBUG] [Thread-140041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:30:56.050 [DEBUG] [Thread-140041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:30:56.054 [DEBUG] [Thread-140041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:30:56.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:30:56.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:30:56.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:30:56.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:30:56.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:30:56.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:30:56.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:30:56.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:30:56.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:30:56.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.021312 -999.00  +12.80  12.50     92  +11.50 1 3 1 3 1     0    0 1.39 6.75 ----- 12.5 12.5 167.6 19.9 14.8 -1.8 14.7 -1.6 14.5 -1.9 14.9 -1.8
2026-02-12T02:30:56.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:30:56.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:30:56.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.021312
2026-02-12T02:30:56.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:30:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:30:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:30:56.082 [DEBUG] [Thread-140041] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:30:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:30:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:30:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:30:22', tmtdew=0.57, humidity=96.19, cloud=0.0, wind=16.13, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:30:41.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:30:56.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:30:56.179 [DEBUG] [Thread-140044] [transport.py] [_log()] starting thread (client mode): 0xa2d021d0
2026-02-12T02:30:56.179 [DEBUG] [Thread-140044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:30:56.198 [DEBUG] [Thread-140044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:30:56.198 [INFO] [Thread-140044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:30:56.205 [DEBUG] [Thread-140044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] client lang: <none>
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] server lang: <none>
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] kex follows: False
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:30:56.206 [DEBUG] [Thread-140044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:30:56.207 [DEBUG] [Thread-140044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:30:56.207 [DEBUG] [Thread-140044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:30:56.207 [DEBUG] [Thread-140044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:30:56.207 [DEBUG] [Thread-140044] [transport.py] [_log()] Compression: none
2026-02-12T02:30:56.207 [DEBUG] [Thread-140044] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:30:56.266 [DEBUG] [Thread-140044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:30:56.267 [DEBUG] [Thread-140044] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:30:56.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:30:56.268 [DEBUG] [Thread-140044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:30:56.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:30:56.322 [DEBUG] [Thread-140044] [transport.py] [_log()] userauth is OK
2026-02-12T02:30:56.322 [DEBUG] [Thread-140044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:30:56.322 [DEBUG] [Thread-140044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:30:56.322 [DEBUG] [Thread-140044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:30:56.323 [DEBUG] [Thread-140044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:30:56.345 [INFO] [Thread-140044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:30:56.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:30:56.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:30:57.133 [DEBUG] [Thread-140044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:30:57.133 [DEBUG] [Thread-140044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:30:57.182 [DEBUG] [Thread-140044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:30:57.182 [DEBUG] [Thread-140044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:30:57.191 [DEBUG] [Thread-140044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:30:57.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:30:57.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')
2026-02-12T02:30:57.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:30:57.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:30:57.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:30:57.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:30:57.228 [DEBUG] [Thread-140044] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:31:06.660 [DEBUG] [Thread-140046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:31:06.970 [DEBUG] [Thread-140047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:31:22.010 [DEBUG] [Thread-140048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:31:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:31:27.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:31:27.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:31:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 30, 57), 0.57, 96.17, 0.0, 13.43, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:31:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:30:57
2026-02-12T02:31:29.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:31:29.839 [DEBUG] [Thread-140049] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-12T02:31:29.839 [DEBUG] [Thread-140049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:31:29.859 [DEBUG] [Thread-140049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:31:29.859 [INFO] [Thread-140049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] client lang: <none>
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] server lang: <none>
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] kex follows: False
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:31:29.863 [DEBUG] [Thread-140049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:31:29.864 [DEBUG] [Thread-140049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:31:29.864 [DEBUG] [Thread-140049] [transport.py] [_log()] Compression: none
2026-02-12T02:31:29.864 [DEBUG] [Thread-140049] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:31:29.872 [DEBUG] [Thread-140049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:31:29.873 [DEBUG] [Thread-140049] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:31:29.873 [DEBUG] [Thread-140049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:31:29.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:31:29.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:31:29.876 [DEBUG] [Thread-140049] [transport.py] [_log()] userauth is OK
2026-02-12T02:31:29.876 [DEBUG] [Thread-140049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:31:29.876 [DEBUG] [Thread-140049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:31:29.876 [DEBUG] [Thread-140049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:31:29.876 [DEBUG] [Thread-140049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:31:29.896 [INFO] [Thread-140049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:31:29.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:31:30.548 [DEBUG] [Thread-140049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:31:30.549 [DEBUG] [Thread-140049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:31:30.549 [DEBUG] [Thread-140049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:31:30.589 [DEBUG] [Thread-140049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:31:30.590 [DEBUG] [Thread-140049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:31:30.593 [DEBUG] [Thread-140049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:31:30.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:31:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:31:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:31:30.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:31:30.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:31:30.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:31:30.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:31:30.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:31:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:31:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.021660 -999.00  +12.80  12.16     92  +11.60 1 3 1 3 1     0    0 1.43 7.40 ----- 12.2 12.2 160.2 16.9 14.8 -2.0 14.7 -1.6 14.6 -1.9 14.9 -1.8
2026-02-12T02:31:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:31:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:31:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.021660
2026-02-12T02:31:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:31:30.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:31:30.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:31:30.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:31:30.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:31:30.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:30:57', tmtdew=0.57, humidity=96.17, cloud=0.0, wind=13.43, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:31:11.424', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:31:30.619 [DEBUG] [Thread-140049] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:31:30.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:31:30.714 [DEBUG] [Thread-140052] [transport.py] [_log()] starting thread (client mode): 0x9eb04c40
2026-02-12T02:31:30.714 [DEBUG] [Thread-140052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:31:30.728 [DEBUG] [Thread-140052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:31:30.728 [INFO] [Thread-140052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:31:30.736 [DEBUG] [Thread-140052] [transport.py] [_log()] client lang: <none>
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] server lang: <none>
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] kex follows: False
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] Compression: none
2026-02-12T02:31:30.737 [DEBUG] [Thread-140052] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:31:30.794 [DEBUG] [Thread-140052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:31:30.795 [DEBUG] [Thread-140052] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:31:30.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:31:30.796 [DEBUG] [Thread-140052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:31:30.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:31:30.850 [DEBUG] [Thread-140052] [transport.py] [_log()] userauth is OK
2026-02-12T02:31:30.851 [DEBUG] [Thread-140052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:31:30.851 [DEBUG] [Thread-140052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:31:30.851 [DEBUG] [Thread-140052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:31:30.851 [DEBUG] [Thread-140052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:31:30.870 [INFO] [Thread-140052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:31:30.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:31:30.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:31:31.659 [DEBUG] [Thread-140052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:31:31.659 [DEBUG] [Thread-140052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:31:31.707 [DEBUG] [Thread-140052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:31:31.708 [DEBUG] [Thread-140052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:31:31.717 [DEBUG] [Thread-140052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:31:31.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:31:31.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:31:31.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:31:31.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:31:31.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:31:31.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:31:31.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:31:31.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:31:31.753 [DEBUG] [Thread-140052] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:31:37.047 [DEBUG] [Thread-140054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:31:52.100 [DEBUG] [Thread-140055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:32:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:32:01.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:32:01.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:32:03.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 31, 32), 0.56, 96.2, 0.0, 15.81, 12.8, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:32:03.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:31:32
2026-02-12T02:32:04.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:32:04.198 [DEBUG] [Thread-140056] [transport.py] [_log()] starting thread (client mode): 0xa5759ae0
2026-02-12T02:32:04.198 [DEBUG] [Thread-140056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:32:04.219 [DEBUG] [Thread-140056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:32:04.219 [INFO] [Thread-140056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] client lang: <none>
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] server lang: <none>
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] kex follows: False
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] Compression: none
2026-02-12T02:32:04.222 [DEBUG] [Thread-140056] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:32:04.241 [DEBUG] [Thread-140056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:32:04.241 [DEBUG] [Thread-140056] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:32:04.242 [DEBUG] [Thread-140056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:32:04.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:32:04.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:32:04.244 [DEBUG] [Thread-140056] [transport.py] [_log()] userauth is OK
2026-02-12T02:32:04.244 [DEBUG] [Thread-140056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:32:04.244 [DEBUG] [Thread-140056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:32:04.245 [DEBUG] [Thread-140056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:32:04.245 [DEBUG] [Thread-140056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:32:04.268 [INFO] [Thread-140056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:32:04.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:32:04.909 [DEBUG] [Thread-140056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:32:04.910 [DEBUG] [Thread-140056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:32:04.910 [DEBUG] [Thread-140056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:32:04.950 [DEBUG] [Thread-140056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:32:04.951 [DEBUG] [Thread-140056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:32:04.954 [DEBUG] [Thread-140056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:32:04.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:32:04.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:32:04.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:32:04.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:32:04.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:32:04.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:32:04.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:32:04.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:32:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:32:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.022007 -999.00  +12.80  11.35     92  +11.60 1 3 1 3 1     0    0 1.45 7.92 ----- 11.3 11.3 159.6 13.9 14.9 -1.9 14.7 -1.7 14.5 -1.8 14.9 -2.0
2026-02-12T02:32:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:32:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:32:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.022007
2026-02-12T02:32:04.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:32:04.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:32:04.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:32:04.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:32:04.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:32:04.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:31:32', tmtdew=0.56, humidity=96.2, cloud=0.0, wind=15.81, temperature=12.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:31:41.405', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:32:04.979 [DEBUG] [Thread-140056] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:32:05.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:32:05.074 [DEBUG] [Thread-140059] [transport.py] [_log()] starting thread (client mode): 0xa57721d0
2026-02-12T02:32:05.074 [DEBUG] [Thread-140059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:32:05.088 [DEBUG] [Thread-140059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:32:05.088 [INFO] [Thread-140059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:32:05.096 [DEBUG] [Thread-140059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:32:05.096 [DEBUG] [Thread-140059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:32:05.096 [DEBUG] [Thread-140059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:32:05.096 [DEBUG] [Thread-140059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:05.096 [DEBUG] [Thread-140059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] client lang: <none>
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] server lang: <none>
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] kex follows: False
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] Compression: none
2026-02-12T02:32:05.097 [DEBUG] [Thread-140059] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:32:05.153 [DEBUG] [Thread-140059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:32:05.163 [DEBUG] [Thread-140059] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:32:05.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:32:05.165 [DEBUG] [Thread-140059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:32:05.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:32:05.214 [DEBUG] [Thread-140059] [transport.py] [_log()] userauth is OK
2026-02-12T02:32:05.215 [DEBUG] [Thread-140059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:32:05.215 [DEBUG] [Thread-140059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:32:05.215 [DEBUG] [Thread-140059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:32:05.215 [DEBUG] [Thread-140059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:32:05.234 [INFO] [Thread-140059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:32:05.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:32:05.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:32:06.056 [DEBUG] [Thread-140059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:32:06.056 [DEBUG] [Thread-140059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:32:06.103 [DEBUG] [Thread-140059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:32:06.103 [DEBUG] [Thread-140059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:32:06.112 [DEBUG] [Thread-140059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:32:06.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:32:06.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:32:06.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:32:06.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:32:06.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:32:06.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:32:06.148 [DEBUG] [Thread-140059] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:32:06.742 [DEBUG] [Thread-140061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:32:07.137 [DEBUG] [Thread-140062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:32:22.192 [DEBUG] [Thread-140063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:32:31.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:32:31.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:32:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:32:36.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:32:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:32:37.230 [DEBUG] [Thread-140064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:32:38.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 32, 8), 0.58, 96.14, 0.0, 16.2, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:32:38.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:32:08
2026-02-12T02:32:38.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:32:38.500 [DEBUG] [Thread-140065] [transport.py] [_log()] starting thread (client mode): 0xa57418a0
2026-02-12T02:32:38.500 [DEBUG] [Thread-140065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:32:38.520 [DEBUG] [Thread-140065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:32:38.520 [INFO] [Thread-140065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:32:38.523 [DEBUG] [Thread-140065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:32:38.523 [DEBUG] [Thread-140065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] client lang: <none>
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] server lang: <none>
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] kex follows: False
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] Compression: none
2026-02-12T02:32:38.524 [DEBUG] [Thread-140065] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:32:38.537 [DEBUG] [Thread-140065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:32:38.538 [DEBUG] [Thread-140065] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:32:38.538 [DEBUG] [Thread-140065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:32:38.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:32:38.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:32:38.540 [DEBUG] [Thread-140065] [transport.py] [_log()] userauth is OK
2026-02-12T02:32:38.540 [DEBUG] [Thread-140065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:32:38.540 [DEBUG] [Thread-140065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:32:38.540 [DEBUG] [Thread-140065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:32:38.540 [DEBUG] [Thread-140065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:32:38.559 [INFO] [Thread-140065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:32:38.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:32:39.207 [DEBUG] [Thread-140065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:32:39.207 [DEBUG] [Thread-140065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:32:39.208 [DEBUG] [Thread-140065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:32:39.248 [DEBUG] [Thread-140065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:32:39.248 [DEBUG] [Thread-140065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:32:39.252 [DEBUG] [Thread-140065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:32:39.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:32:39.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:32:39.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:32:39.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:32:39.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:32:39.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:32:39.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:32:39.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:32:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:32:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.022354 -999.00  +12.80  13.74     92  +11.60 1 3 1 3 1     0    0 1.43 8.18 ----- 13.7 13.7 162.5 16.2 14.9 -2.0 14.7 -1.6 14.5 -1.7 14.9 -2.0
2026-02-12T02:32:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:32:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:32:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.022354
2026-02-12T02:32:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:32:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:32:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:32:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:32:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:32:39.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:32:08', tmtdew=0.58, humidity=96.14, cloud=0.0, wind=16.2, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:32:11.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:32:39.278 [DEBUG] [Thread-140065] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:32:39.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:32:39.374 [DEBUG] [Thread-140068] [transport.py] [_log()] starting thread (client mode): 0xa57429e0
2026-02-12T02:32:39.374 [DEBUG] [Thread-140068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:32:39.388 [DEBUG] [Thread-140068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:32:39.388 [INFO] [Thread-140068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:32:39.395 [DEBUG] [Thread-140068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:32:39.395 [DEBUG] [Thread-140068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:32:39.395 [DEBUG] [Thread-140068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] client lang: <none>
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] server lang: <none>
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] kex follows: False
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] Compression: none
2026-02-12T02:32:39.396 [DEBUG] [Thread-140068] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:32:39.454 [DEBUG] [Thread-140068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:32:39.455 [DEBUG] [Thread-140068] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:32:39.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:32:39.456 [DEBUG] [Thread-140068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:32:39.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:32:39.512 [DEBUG] [Thread-140068] [transport.py] [_log()] userauth is OK
2026-02-12T02:32:39.512 [DEBUG] [Thread-140068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:32:39.512 [DEBUG] [Thread-140068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:32:39.512 [DEBUG] [Thread-140068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:32:39.513 [DEBUG] [Thread-140068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:32:39.536 [INFO] [Thread-140068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:32:39.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:32:39.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:32:40.332 [DEBUG] [Thread-140068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:32:40.332 [DEBUG] [Thread-140068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:32:40.380 [DEBUG] [Thread-140068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:32:40.380 [DEBUG] [Thread-140068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:32:40.391 [DEBUG] [Thread-140068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:32:40.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:32:40.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:32:40.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:32:40.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:32:40.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:32:40.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:32:40.427 [DEBUG] [Thread-140068] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:32:52.269 [DEBUG] [Thread-140070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:33:06.818 [DEBUG] [Thread-140071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:33:07.320 [DEBUG] [Thread-140072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:33:10.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:33:10.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:33:10.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:33:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 32, 44), 0.58, 96.14, 0.0, 17.73, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:33:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:32:44
2026-02-12T02:33:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:33:12.956 [DEBUG] [Thread-140073] [transport.py] [_log()] starting thread (client mode): 0xa5758c40
2026-02-12T02:33:12.956 [DEBUG] [Thread-140073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:33:12.976 [DEBUG] [Thread-140073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:33:12.976 [INFO] [Thread-140073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] client lang: <none>
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] server lang: <none>
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] kex follows: False
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:33:12.979 [DEBUG] [Thread-140073] [transport.py] [_log()] Compression: none
2026-02-12T02:33:12.980 [DEBUG] [Thread-140073] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:33:13.001 [DEBUG] [Thread-140073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:33:13.002 [DEBUG] [Thread-140073] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:33:13.002 [DEBUG] [Thread-140073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:33:13.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:33:13.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:33:13.004 [DEBUG] [Thread-140073] [transport.py] [_log()] userauth is OK
2026-02-12T02:33:13.004 [DEBUG] [Thread-140073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:33:13.004 [DEBUG] [Thread-140073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:33:13.004 [DEBUG] [Thread-140073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:33:13.005 [DEBUG] [Thread-140073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:33:13.027 [INFO] [Thread-140073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:33:13.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:33:13.664 [DEBUG] [Thread-140073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:33:13.665 [DEBUG] [Thread-140073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:33:13.665 [DEBUG] [Thread-140073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:33:13.705 [DEBUG] [Thread-140073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:33:13.706 [DEBUG] [Thread-140073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:33:13.709 [DEBUG] [Thread-140073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:33:13.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:33:13.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:33:13.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:33:13.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:33:13.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:33:13.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:33:13.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:33:13.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:33:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:33:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.022701 -999.00  +12.80  11.41     92  +11.60 1 3 1 3 1     0    0 1.42 7.87 ----- 11.4 11.4 160.6 18.1 14.8 -1.9 14.7 -1.6 14.6 -1.8 14.9 -2.0
2026-02-12T02:33:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:33:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:33:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.022701
2026-02-12T02:33:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:33:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:33:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:33:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:33:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:33:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:32:44', tmtdew=0.58, humidity=96.14, cloud=0.0, wind=17.73, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:32:41.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:33:13.736 [DEBUG] [Thread-140073] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:33:13.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:33:13.832 [DEBUG] [Thread-140076] [transport.py] [_log()] starting thread (client mode): 0xa575a080
2026-02-12T02:33:13.832 [DEBUG] [Thread-140076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:33:13.846 [DEBUG] [Thread-140076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:33:13.847 [INFO] [Thread-140076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:33:13.854 [DEBUG] [Thread-140076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] client lang: <none>
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] server lang: <none>
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] kex follows: False
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] Compression: none
2026-02-12T02:33:13.855 [DEBUG] [Thread-140076] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:33:13.914 [DEBUG] [Thread-140076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:33:13.914 [DEBUG] [Thread-140076] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:33:13.915 [DEBUG] [Thread-140076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:33:13.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:33:13.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:33:13.972 [DEBUG] [Thread-140076] [transport.py] [_log()] userauth is OK
2026-02-12T02:33:13.972 [DEBUG] [Thread-140076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:33:13.972 [DEBUG] [Thread-140076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:33:13.972 [DEBUG] [Thread-140076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:33:13.972 [DEBUG] [Thread-140076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:33:13.992 [INFO] [Thread-140076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:33:14.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:33:14.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:33:14.785 [DEBUG] [Thread-140076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:33:14.785 [DEBUG] [Thread-140076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:33:14.833 [DEBUG] [Thread-140076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:33:14.833 [DEBUG] [Thread-140076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:33:14.842 [DEBUG] [Thread-140076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:33:14.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:33:14.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:33:14.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:33:14.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:33:14.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:33:14.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:33:14.887 [DEBUG] [Thread-140076] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:33:22.353 [DEBUG] [Thread-140078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:33:32.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:33:32.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:33:37.403 [DEBUG] [Thread-140079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:33:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:33:44.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:33:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:33:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 33, 19), 0.58, 96.09, 0.0, 16.92, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:33:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:33:19
2026-02-12T02:33:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:33:47.328 [DEBUG] [Thread-140080] [transport.py] [_log()] starting thread (client mode): 0x9eb051e0
2026-02-12T02:33:47.328 [DEBUG] [Thread-140080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:33:47.348 [DEBUG] [Thread-140080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:33:47.348 [INFO] [Thread-140080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] client lang: <none>
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] server lang: <none>
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] kex follows: False
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] Compression: none
2026-02-12T02:33:47.351 [DEBUG] [Thread-140080] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:33:47.366 [DEBUG] [Thread-140080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:33:47.367 [DEBUG] [Thread-140080] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:33:47.367 [DEBUG] [Thread-140080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:33:47.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:33:47.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:33:47.367 [DEBUG] [Thread-140080] [transport.py] [_log()] userauth is OK
2026-02-12T02:33:47.367 [DEBUG] [Thread-140080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:33:47.367 [DEBUG] [Thread-140080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:33:47.367 [DEBUG] [Thread-140080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:33:47.367 [DEBUG] [Thread-140080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:33:47.376 [INFO] [Thread-140080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:33:47.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:33:48.012 [DEBUG] [Thread-140080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:33:48.012 [DEBUG] [Thread-140080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:33:48.013 [DEBUG] [Thread-140080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:33:48.053 [DEBUG] [Thread-140080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:33:48.053 [DEBUG] [Thread-140080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:33:48.055 [DEBUG] [Thread-140080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:33:48.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:33:48.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:33:48.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:33:48.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:33:48.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:33:48.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:33:48.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:33:48.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:33:48.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:33:48.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.023048 -999.00  +12.80  11.26     92  +11.50 1 3 1 3 1     0    0 1.42 7.27 ----- 11.3 11.3 158.4 18.9 14.8 -2.0 14.7 -1.8 14.5 -1.9 14.9 -1.8
2026-02-12T02:33:48.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:33:48.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:33:48.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.023048
2026-02-12T02:33:48.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:33:48.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:33:48.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:33:48.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:33:48.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:33:48.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:33:19', tmtdew=0.58, humidity=96.09, cloud=0.0, wind=16.92, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:33:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:33:48.073 [DEBUG] [Thread-140080] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:33:48.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:33:48.171 [DEBUG] [Thread-140083] [transport.py] [_log()] starting thread (client mode): 0xa5772d10
2026-02-12T02:33:48.172 [DEBUG] [Thread-140083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:33:48.186 [DEBUG] [Thread-140083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:33:48.186 [INFO] [Thread-140083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:33:48.193 [DEBUG] [Thread-140083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:33:48.193 [DEBUG] [Thread-140083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:33:48.193 [DEBUG] [Thread-140083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:33:48.193 [DEBUG] [Thread-140083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] client lang: <none>
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] server lang: <none>
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] kex follows: False
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] Compression: none
2026-02-12T02:33:48.194 [DEBUG] [Thread-140083] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:33:48.248 [DEBUG] [Thread-140083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:33:48.248 [DEBUG] [Thread-140083] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:33:48.249 [DEBUG] [Thread-140083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:33:48.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:33:48.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:33:48.305 [DEBUG] [Thread-140083] [transport.py] [_log()] userauth is OK
2026-02-12T02:33:48.305 [DEBUG] [Thread-140083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:33:48.305 [DEBUG] [Thread-140083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:33:48.305 [DEBUG] [Thread-140083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:33:48.305 [DEBUG] [Thread-140083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:33:48.319 [INFO] [Thread-140083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:33:48.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:33:48.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:33:49.152 [DEBUG] [Thread-140083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:33:49.152 [DEBUG] [Thread-140083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:33:49.200 [DEBUG] [Thread-140083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:33:49.201 [DEBUG] [Thread-140083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:33:49.210 [DEBUG] [Thread-140083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:33:49.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:33:49.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:33:49.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:33:49.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:33:49.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:33:49.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:33:49.247 [DEBUG] [Thread-140083] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:33:52.444 [DEBUG] [Thread-140085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:06.895 [DEBUG] [Thread-140086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:07.497 [DEBUG] [Thread-140087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:19.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:34:19.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:34:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:34:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 33, 54), 0.59, 96.05, 0.0, 17.68, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:34:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:33:54
2026-02-12T02:34:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:34:21.782 [DEBUG] [Thread-140088] [transport.py] [_log()] starting thread (client mode): 0x9eb075b0
2026-02-12T02:34:21.782 [DEBUG] [Thread-140088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:34:21.801 [DEBUG] [Thread-140088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:34:21.801 [INFO] [Thread-140088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] client lang: <none>
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] server lang: <none>
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] kex follows: False
2026-02-12T02:34:21.803 [DEBUG] [Thread-140088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:34:21.804 [DEBUG] [Thread-140088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:34:21.804 [DEBUG] [Thread-140088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:34:21.804 [DEBUG] [Thread-140088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:34:21.804 [DEBUG] [Thread-140088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:34:21.804 [DEBUG] [Thread-140088] [transport.py] [_log()] Compression: none
2026-02-12T02:34:21.804 [DEBUG] [Thread-140088] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:34:21.812 [DEBUG] [Thread-140088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:34:21.813 [DEBUG] [Thread-140088] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:34:21.813 [DEBUG] [Thread-140088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:34:21.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:34:21.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:34:21.815 [DEBUG] [Thread-140088] [transport.py] [_log()] userauth is OK
2026-02-12T02:34:21.815 [DEBUG] [Thread-140088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:34:21.815 [DEBUG] [Thread-140088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:34:21.815 [DEBUG] [Thread-140088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:34:21.815 [DEBUG] [Thread-140088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:34:21.833 [INFO] [Thread-140088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:34:21.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:34:22.469 [DEBUG] [Thread-140088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:34:22.470 [DEBUG] [Thread-140088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:34:22.470 [DEBUG] [Thread-140088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:34:22.510 [DEBUG] [Thread-140088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:34:22.511 [DEBUG] [Thread-140088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:34:22.514 [DEBUG] [Thread-140088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:34:22.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:34:22.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:34:22.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:34:22.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:34:22.534 [DEBUG] [Thread-140091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:22.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:34:22.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:34:22.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:34:22.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:34:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:34:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.023743 -999.00  +12.80  12.63     92  +11.50 1 3 1 3 1     0    0 1.48 8.38 ----- 12.6 12.6 155.8 18.2 14.8 -1.9 14.7 -1.5 14.5 -1.8 14.9 -1.9
2026-02-12T02:34:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:34:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:34:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.023743
2026-02-12T02:34:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:34:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:34:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:34:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:34:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:34:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:33:54', tmtdew=0.59, humidity=96.05, cloud=0.0, wind=17.68, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:34:11.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:34:22.541 [DEBUG] [Thread-140088] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:34:22.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:34:22.641 [DEBUG] [Thread-140092] [transport.py] [_log()] starting thread (client mode): 0xa2d7ac20
2026-02-12T02:34:22.641 [DEBUG] [Thread-140092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:34:22.655 [DEBUG] [Thread-140092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:34:22.655 [INFO] [Thread-140092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] client lang: <none>
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] server lang: <none>
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] kex follows: False
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:34:22.663 [DEBUG] [Thread-140092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:34:22.664 [DEBUG] [Thread-140092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:34:22.664 [DEBUG] [Thread-140092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:34:22.664 [DEBUG] [Thread-140092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:34:22.664 [DEBUG] [Thread-140092] [transport.py] [_log()] Compression: none
2026-02-12T02:34:22.664 [DEBUG] [Thread-140092] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:34:22.722 [DEBUG] [Thread-140092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:34:22.722 [DEBUG] [Thread-140092] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:34:22.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:34:22.724 [DEBUG] [Thread-140092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:34:22.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:34:22.778 [DEBUG] [Thread-140092] [transport.py] [_log()] userauth is OK
2026-02-12T02:34:22.778 [DEBUG] [Thread-140092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:34:22.778 [DEBUG] [Thread-140092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:34:22.778 [DEBUG] [Thread-140092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:34:22.779 [DEBUG] [Thread-140092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:34:22.797 [INFO] [Thread-140092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:34:22.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:34:22.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:34:23.606 [DEBUG] [Thread-140092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:34:23.607 [DEBUG] [Thread-140092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:34:23.654 [DEBUG] [Thread-140092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:34:23.655 [DEBUG] [Thread-140092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:34:23.664 [DEBUG] [Thread-140092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:34:23.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:34:23.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:34:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:34:23.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:34:23.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:34:23.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:34:23.700 [DEBUG] [Thread-140092] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:34:32.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:32.361 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:37.571 [DEBUG] [Thread-140094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:52.621 [DEBUG] [Thread-140095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:34:53.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:34:53.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:34:53.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:34:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 34, 30), 0.6, 95.99, 0.0, 16.45, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:34:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:34:30
2026-02-12T02:34:55.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:34:56.034 [DEBUG] [Thread-140096] [transport.py] [_log()] starting thread (client mode): 0xa5770d00
2026-02-12T02:34:56.034 [DEBUG] [Thread-140096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:34:56.055 [DEBUG] [Thread-140096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:34:56.055 [INFO] [Thread-140096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] client lang: <none>
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] server lang: <none>
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] kex follows: False
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:34:56.058 [DEBUG] [Thread-140096] [transport.py] [_log()] Compression: none
2026-02-12T02:34:56.059 [DEBUG] [Thread-140096] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:34:56.075 [DEBUG] [Thread-140096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:34:56.076 [DEBUG] [Thread-140096] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:34:56.076 [DEBUG] [Thread-140096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:34:56.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:34:56.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:34:56.078 [DEBUG] [Thread-140096] [transport.py] [_log()] userauth is OK
2026-02-12T02:34:56.079 [DEBUG] [Thread-140096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:34:56.079 [DEBUG] [Thread-140096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:34:56.079 [DEBUG] [Thread-140096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:34:56.079 [DEBUG] [Thread-140096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:34:56.104 [INFO] [Thread-140096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:34:56.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:34:56.717 [DEBUG] [Thread-140096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:34:56.717 [DEBUG] [Thread-140096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:34:56.718 [DEBUG] [Thread-140096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:34:56.758 [DEBUG] [Thread-140096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:34:56.759 [DEBUG] [Thread-140096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:34:56.762 [DEBUG] [Thread-140096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:34:56.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:34:56.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:34:56.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:34:56.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:34:56.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:34:56.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:34:56.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:34:56.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:34:56.796 [DEBUG] [Thread-140096] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:34:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:34:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.024090 -999.00  +12.80   9.95     92  +11.50 1 3 1 3 1     0    0 1.46 8.47 ----- 9.9 9.9 163.9 16.2 14.9 -1.8 14.7 -1.6 14.5 -1.7 14.9 -1.7
2026-02-12T02:34:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:34:56.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:34:56.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.024090
2026-02-12T02:34:56.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:34:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:34:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:34:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:34:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:34:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:34:30', tmtdew=0.6, humidity=95.99, cloud=0.0, wind=16.45, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:34:41.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:34:56.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:34:56.895 [DEBUG] [Thread-140099] [transport.py] [_log()] starting thread (client mode): 0xa57c3400
2026-02-12T02:34:56.895 [DEBUG] [Thread-140099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:34:56.910 [DEBUG] [Thread-140099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:34:56.910 [INFO] [Thread-140099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:34:56.918 [DEBUG] [Thread-140099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:34:56.918 [DEBUG] [Thread-140099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:34:56.918 [DEBUG] [Thread-140099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:34:56.918 [DEBUG] [Thread-140099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:56.918 [DEBUG] [Thread-140099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:34:56.918 [DEBUG] [Thread-140099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] client lang: <none>
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] server lang: <none>
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] kex follows: False
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:34:56.919 [DEBUG] [Thread-140099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:34:56.920 [DEBUG] [Thread-140099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:34:56.920 [DEBUG] [Thread-140099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:34:56.920 [DEBUG] [Thread-140099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:34:56.920 [DEBUG] [Thread-140099] [transport.py] [_log()] Compression: none
2026-02-12T02:34:56.920 [DEBUG] [Thread-140099] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:34:56.978 [DEBUG] [Thread-140099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:34:56.979 [DEBUG] [Thread-140099] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:34:56.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:34:56.981 [DEBUG] [Thread-140099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:34:56.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:34:57.034 [DEBUG] [Thread-140099] [transport.py] [_log()] userauth is OK
2026-02-12T02:34:57.035 [DEBUG] [Thread-140099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:34:57.035 [DEBUG] [Thread-140099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:34:57.035 [DEBUG] [Thread-140099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:34:57.035 [DEBUG] [Thread-140099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:34:57.054 [INFO] [Thread-140099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:34:57.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:34:57.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:34:57.855 [DEBUG] [Thread-140099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:34:57.856 [DEBUG] [Thread-140099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:34:57.903 [DEBUG] [Thread-140099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:34:57.904 [DEBUG] [Thread-140099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:34:57.913 [DEBUG] [Thread-140099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:34:57.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:34:57.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:34:57.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:34:57.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:34:57.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:34:57.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:34:57.949 [DEBUG] [Thread-140099] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:35:06.965 [DEBUG] [Thread-140101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:35:07.656 [DEBUG] [Thread-140102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:35:22.707 [DEBUG] [Thread-140103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:35:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:35:27.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:35:27.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:35:29.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 35, 6), 0.59, 96.04, 0.0, 17.17, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:35:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:35:06
2026-02-12T02:35:30.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:35:30.528 [DEBUG] [Thread-140104] [transport.py] [_log()] starting thread (client mode): 0xa5770fa0
2026-02-12T02:35:30.528 [DEBUG] [Thread-140104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:35:30.549 [DEBUG] [Thread-140104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:35:30.549 [INFO] [Thread-140104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:35:30.552 [DEBUG] [Thread-140104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:35:30.552 [DEBUG] [Thread-140104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] client lang: <none>
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] server lang: <none>
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] kex follows: False
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:35:30.553 [DEBUG] [Thread-140104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:35:30.554 [DEBUG] [Thread-140104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:35:30.554 [DEBUG] [Thread-140104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:35:30.554 [DEBUG] [Thread-140104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:35:30.554 [DEBUG] [Thread-140104] [transport.py] [_log()] Compression: none
2026-02-12T02:35:30.554 [DEBUG] [Thread-140104] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:35:30.570 [DEBUG] [Thread-140104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:35:30.571 [DEBUG] [Thread-140104] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:35:30.572 [DEBUG] [Thread-140104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:35:30.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:35:30.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:35:30.573 [DEBUG] [Thread-140104] [transport.py] [_log()] userauth is OK
2026-02-12T02:35:30.574 [DEBUG] [Thread-140104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:35:30.574 [DEBUG] [Thread-140104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:35:30.574 [DEBUG] [Thread-140104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:35:30.574 [DEBUG] [Thread-140104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:35:30.590 [INFO] [Thread-140104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:35:30.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:35:31.212 [DEBUG] [Thread-140104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:35:31.212 [DEBUG] [Thread-140104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:35:31.212 [DEBUG] [Thread-140104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:35:31.253 [DEBUG] [Thread-140104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:35:31.253 [DEBUG] [Thread-140104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:35:31.256 [DEBUG] [Thread-140104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:35:31.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:35:31.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:35:31.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:35:31.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:35:31.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:35:31.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:35:31.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:35:31.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:35:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:35:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.024437 -999.00  +12.80  14.30     92  +11.60 1 3 1 3 1     0    0 1.43 8.37 ----- 14.3 14.3 156.2 18.5 14.8 -1.9 14.7 -1.7 14.6 -1.8 14.9 -1.9
2026-02-12T02:35:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:35:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:35:31.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.024437
2026-02-12T02:35:31.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:35:31.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:35:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:35:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:35:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:35:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:35:06', tmtdew=0.59, humidity=96.04, cloud=0.0, wind=17.17, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:35:11.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:35:31.281 [DEBUG] [Thread-140104] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:35:31.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:35:31.380 [DEBUG] [Thread-140107] [transport.py] [_log()] starting thread (client mode): 0xa5758730
2026-02-12T02:35:31.380 [DEBUG] [Thread-140107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:35:31.395 [DEBUG] [Thread-140107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:35:31.395 [INFO] [Thread-140107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:35:31.403 [DEBUG] [Thread-140107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] client lang: <none>
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] server lang: <none>
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] kex follows: False
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] Compression: none
2026-02-12T02:35:31.404 [DEBUG] [Thread-140107] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:35:31.461 [DEBUG] [Thread-140107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:35:31.461 [DEBUG] [Thread-140107] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:35:31.462 [DEBUG] [Thread-140107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:35:31.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:35:31.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:35:31.517 [DEBUG] [Thread-140107] [transport.py] [_log()] userauth is OK
2026-02-12T02:35:31.517 [DEBUG] [Thread-140107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:35:31.517 [DEBUG] [Thread-140107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:35:31.517 [DEBUG] [Thread-140107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:35:31.517 [DEBUG] [Thread-140107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:35:31.540 [INFO] [Thread-140107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:35:31.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:35:31.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:35:32.343 [DEBUG] [Thread-140107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:35:32.343 [DEBUG] [Thread-140107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:35:32.392 [DEBUG] [Thread-140107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:35:32.393 [DEBUG] [Thread-140107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:35:32.401 [DEBUG] [Thread-140107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:35:32.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:35:32.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:35:32.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:35:32.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:35:32.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:35:32.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:35:32.433 [DEBUG] [Thread-140107] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:35:32.563 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:35:32.564 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:35:37.745 [DEBUG] [Thread-140109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:35:52.799 [DEBUG] [Thread-140110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:36:02.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:36:02.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:36:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:36:04.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 35, 41), 1.06, 93.21, 0.0, 17.78, 13.27, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:36:04.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:35:41
2026-02-12T02:36:04.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:36:04.779 [DEBUG] [Thread-140111] [transport.py] [_log()] starting thread (client mode): 0xa81d7a60
2026-02-12T02:36:04.780 [DEBUG] [Thread-140111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:36:04.801 [DEBUG] [Thread-140111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:36:04.801 [INFO] [Thread-140111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:36:04.804 [DEBUG] [Thread-140111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:36:04.804 [DEBUG] [Thread-140111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] client lang: <none>
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] server lang: <none>
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] kex follows: False
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:36:04.805 [DEBUG] [Thread-140111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:36:04.806 [DEBUG] [Thread-140111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:36:04.806 [DEBUG] [Thread-140111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:36:04.806 [DEBUG] [Thread-140111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:36:04.806 [DEBUG] [Thread-140111] [transport.py] [_log()] Compression: none
2026-02-12T02:36:04.806 [DEBUG] [Thread-140111] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:36:04.823 [DEBUG] [Thread-140111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:36:04.824 [DEBUG] [Thread-140111] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:36:04.824 [DEBUG] [Thread-140111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:36:04.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:36:04.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:36:04.826 [DEBUG] [Thread-140111] [transport.py] [_log()] userauth is OK
2026-02-12T02:36:04.826 [DEBUG] [Thread-140111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:36:04.826 [DEBUG] [Thread-140111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:36:04.826 [DEBUG] [Thread-140111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:36:04.826 [DEBUG] [Thread-140111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:36:04.850 [INFO] [Thread-140111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:36:04.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:36:05.499 [DEBUG] [Thread-140111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:36:05.499 [DEBUG] [Thread-140111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:36:05.499 [DEBUG] [Thread-140111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:36:05.541 [DEBUG] [Thread-140111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:36:05.541 [DEBUG] [Thread-140111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:36:05.544 [DEBUG] [Thread-140111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:36:05.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:36:05.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:36:05.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:36:05.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:36:05.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:36:05.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:36:05.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:36:05.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:36:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:36:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.024785 -999.00  +12.90   9.71     92  +11.60 1 3 1 3 1     0    0 1.47 8.12 ----- 9.7 9.7 163.5 16.1 14.9 -1.8 14.7 -1.6 14.6 -1.7 15.0 -1.9
2026-02-12T02:36:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:36:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:36:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.024785
2026-02-12T02:36:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:36:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:36:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:36:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:36:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:36:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:35:41', tmtdew=1.06, humidity=93.21, cloud=0.0, wind=17.78, temperature=13.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:35:41.424', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:36:05.572 [DEBUG] [Thread-140111] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:36:05.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:36:05.668 [DEBUG] [Thread-140114] [transport.py] [_log()] starting thread (client mode): 0xa5770670
2026-02-12T02:36:05.669 [DEBUG] [Thread-140114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:36:05.684 [DEBUG] [Thread-140114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:36:05.684 [INFO] [Thread-140114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:36:05.692 [DEBUG] [Thread-140114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:36:05.692 [DEBUG] [Thread-140114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:36:05.692 [DEBUG] [Thread-140114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:36:05.692 [DEBUG] [Thread-140114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:05.692 [DEBUG] [Thread-140114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:05.692 [DEBUG] [Thread-140114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:05.692 [DEBUG] [Thread-140114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] client lang: <none>
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] server lang: <none>
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] kex follows: False
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] Compression: none
2026-02-12T02:36:05.693 [DEBUG] [Thread-140114] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:36:05.750 [DEBUG] [Thread-140114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:36:05.750 [DEBUG] [Thread-140114] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:36:05.751 [DEBUG] [Thread-140114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:36:05.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:36:05.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:36:05.814 [DEBUG] [Thread-140114] [transport.py] [_log()] userauth is OK
2026-02-12T02:36:05.814 [DEBUG] [Thread-140114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:36:05.814 [DEBUG] [Thread-140114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:36:05.814 [DEBUG] [Thread-140114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:36:05.814 [DEBUG] [Thread-140114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:36:05.833 [INFO] [Thread-140114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:36:05.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:36:05.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:36:06.623 [DEBUG] [Thread-140114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:36:06.623 [DEBUG] [Thread-140114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:36:06.671 [DEBUG] [Thread-140114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:36:06.671 [DEBUG] [Thread-140114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:36:06.680 [DEBUG] [Thread-140114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:36:06.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:36:06.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:36:06.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:36:06.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:36:06.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:36:06.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:36:06.717 [DEBUG] [Thread-140114] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:36:07.067 [DEBUG] [Thread-140116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:36:07.834 [DEBUG] [Thread-140117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:36:22.884 [DEBUG] [Thread-140118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:36:32.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:36:32.766 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:36:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:36:36.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:36:36.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
2026-02-12T02:36:37.921 [DEBUG] [Thread-140119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:36:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 36, 16), 0.59, 96.07, 0.0, 17.24, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:36:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:36:16
2026-02-12T02:36:38.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:36:39.028 [DEBUG] [Thread-140120] [transport.py] [_log()] starting thread (client mode): 0xa57c1ed0
2026-02-12T02:36:39.028 [DEBUG] [Thread-140120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:36:39.049 [DEBUG] [Thread-140120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:36:39.049 [INFO] [Thread-140120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] client lang: <none>
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] server lang: <none>
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] kex follows: False
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] Compression: none
2026-02-12T02:36:39.053 [DEBUG] [Thread-140120] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:36:39.070 [DEBUG] [Thread-140120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:36:39.070 [DEBUG] [Thread-140120] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:36:39.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:36:39.071 [DEBUG] [Thread-140120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:36:39.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:36:39.073 [DEBUG] [Thread-140120] [transport.py] [_log()] userauth is OK
2026-02-12T02:36:39.074 [DEBUG] [Thread-140120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:36:39.074 [DEBUG] [Thread-140120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:36:39.074 [DEBUG] [Thread-140120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:36:39.074 [DEBUG] [Thread-140120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:36:39.098 [INFO] [Thread-140120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:36:39.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:36:39.728 [DEBUG] [Thread-140120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:36:39.728 [DEBUG] [Thread-140120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:36:39.729 [DEBUG] [Thread-140120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:36:39.769 [DEBUG] [Thread-140120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:36:39.770 [DEBUG] [Thread-140120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:36:39.773 [DEBUG] [Thread-140120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:36:39.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:36:39.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:36:39.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:36:39.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:36:39.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:36:39.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:36:39.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:36:39.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:36:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:36:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.025132 -999.00  +12.90  14.85     92  +11.60 1 3 1 3 1     0    0 1.42 8.02 ----- 14.8 14.8 164.8 19.0 14.9 -2.1 14.8 -1.8 14.6 -1.9 14.9 -1.9
2026-02-12T02:36:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:36:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:36:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.025132
2026-02-12T02:36:39.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:36:39.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:36:39.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:36:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:36:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:36:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:36:16', tmtdew=0.59, humidity=96.07, cloud=0.0, wind=17.24, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:36:11.405', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:36:39.805 [DEBUG] [Thread-140120] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:36:39.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:36:39.902 [DEBUG] [Thread-140123] [transport.py] [_log()] starting thread (client mode): 0xa57e1ff0
2026-02-12T02:36:39.902 [DEBUG] [Thread-140123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:36:39.921 [DEBUG] [Thread-140123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:36:39.921 [INFO] [Thread-140123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:36:39.928 [DEBUG] [Thread-140123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] client lang: <none>
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] server lang: <none>
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] kex follows: False
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:36:39.929 [DEBUG] [Thread-140123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:36:39.930 [DEBUG] [Thread-140123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:36:39.930 [DEBUG] [Thread-140123] [transport.py] [_log()] Compression: none
2026-02-12T02:36:39.930 [DEBUG] [Thread-140123] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:36:39.985 [DEBUG] [Thread-140123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:36:39.986 [DEBUG] [Thread-140123] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:36:39.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:36:39.987 [DEBUG] [Thread-140123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:36:39.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:36:40.041 [DEBUG] [Thread-140123] [transport.py] [_log()] userauth is OK
2026-02-12T02:36:40.042 [DEBUG] [Thread-140123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:36:40.042 [DEBUG] [Thread-140123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:36:40.042 [DEBUG] [Thread-140123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:36:40.042 [DEBUG] [Thread-140123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:36:40.061 [INFO] [Thread-140123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:36:40.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:36:40.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:36:40.855 [DEBUG] [Thread-140123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:36:40.855 [DEBUG] [Thread-140123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:36:40.904 [DEBUG] [Thread-140123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:36:40.904 [DEBUG] [Thread-140123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:36:40.913 [DEBUG] [Thread-140123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:36:40.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:36:40.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:36:40.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:36:40.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:36:40.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:36:40.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:36:40.950 [DEBUG] [Thread-140123] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:36:52.956 [DEBUG] [Thread-140125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:37:07.143 [DEBUG] [Thread-140126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:37:08.004 [DEBUG] [Thread-140127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:37:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:37:10.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:37:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:37:12.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 36, 52), 0.58, 96.09, 0.0, 16.67, 12.88, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:37:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:36:52
2026-02-12T02:37:13.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:37:13.438 [DEBUG] [Thread-140128] [transport.py] [_log()] starting thread (client mode): 0xa81d6500
2026-02-12T02:37:13.438 [DEBUG] [Thread-140128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:37:13.459 [DEBUG] [Thread-140128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:37:13.459 [INFO] [Thread-140128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:37:13.462 [DEBUG] [Thread-140128] [transport.py] [_log()] client lang: <none>
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] server lang: <none>
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] kex follows: False
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] Compression: none
2026-02-12T02:37:13.463 [DEBUG] [Thread-140128] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:37:13.482 [DEBUG] [Thread-140128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:37:13.483 [DEBUG] [Thread-140128] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:37:13.483 [DEBUG] [Thread-140128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:37:13.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:37:13.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:37:13.486 [DEBUG] [Thread-140128] [transport.py] [_log()] userauth is OK
2026-02-12T02:37:13.486 [DEBUG] [Thread-140128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:37:13.486 [DEBUG] [Thread-140128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:37:13.486 [DEBUG] [Thread-140128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:37:13.486 [DEBUG] [Thread-140128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:37:13.509 [INFO] [Thread-140128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:37:13.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:37:14.127 [DEBUG] [Thread-140128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:37:14.127 [DEBUG] [Thread-140128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:37:14.128 [DEBUG] [Thread-140128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:37:14.168 [DEBUG] [Thread-140128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:37:14.169 [DEBUG] [Thread-140128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:37:14.172 [DEBUG] [Thread-140128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:37:14.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:37:14.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:37:14.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:37:14.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:37:14.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:37:14.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:37:14.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:37:14.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:37:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:37:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.025479 -999.00  +12.80  13.00     92  +11.60 1 3 1 3 1     0    0 1.42 7.74 ----- 13.0 13.0 161.6 18.1 14.9 -2.1 14.7 -1.6 14.6 -1.9 14.9 -1.9
2026-02-12T02:37:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:37:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:37:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.025479
2026-02-12T02:37:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:37:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:37:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:37:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:37:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:37:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:36:52', tmtdew=0.58, humidity=96.09, cloud=0.0, wind=16.67, temperature=12.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:36:41.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:37:14.199 [DEBUG] [Thread-140128] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:37:14.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:37:14.293 [DEBUG] [Thread-140131] [transport.py] [_log()] starting thread (client mode): 0xa2d7bee0
2026-02-12T02:37:14.293 [DEBUG] [Thread-140131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:37:14.308 [DEBUG] [Thread-140131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:37:14.308 [INFO] [Thread-140131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:37:14.315 [DEBUG] [Thread-140131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:37:14.316 [DEBUG] [Thread-140131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:37:14.316 [DEBUG] [Thread-140131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:37:14.316 [DEBUG] [Thread-140131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:14.316 [DEBUG] [Thread-140131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:14.316 [DEBUG] [Thread-140131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:14.316 [DEBUG] [Thread-140131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:14.316 [DEBUG] [Thread-140131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] client lang: <none>
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] server lang: <none>
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] kex follows: False
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] Compression: none
2026-02-12T02:37:14.317 [DEBUG] [Thread-140131] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:37:14.374 [DEBUG] [Thread-140131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:37:14.374 [DEBUG] [Thread-140131] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:37:14.375 [DEBUG] [Thread-140131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:37:14.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:37:14.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:37:14.429 [DEBUG] [Thread-140131] [transport.py] [_log()] userauth is OK
2026-02-12T02:37:14.430 [DEBUG] [Thread-140131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:37:14.430 [DEBUG] [Thread-140131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:37:14.430 [DEBUG] [Thread-140131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:37:14.430 [DEBUG] [Thread-140131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:37:14.453 [INFO] [Thread-140131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:37:14.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:37:14.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:37:15.310 [DEBUG] [Thread-140131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:37:15.310 [DEBUG] [Thread-140131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:37:15.358 [DEBUG] [Thread-140131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:37:15.358 [DEBUG] [Thread-140131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:37:15.368 [DEBUG] [Thread-140131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:37:15.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:37:15.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:37:15.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:37:15.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:37:15.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:37:15.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:37:15.403 [DEBUG] [Thread-140131] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:37:23.039 [DEBUG] [Thread-140133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:37:32.970 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:37:32.971 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:37:38.085 [DEBUG] [Thread-140134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:37:45.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:37:45.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:37:45.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:37:47.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 37, 28), 0.58, 96.09, 0.0, 15.99, 12.92, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:37:47.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:37:28
2026-02-12T02:37:47.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:37:47.750 [DEBUG] [Thread-140135] [transport.py] [_log()] starting thread (client mode): 0xa57c03a0
2026-02-12T02:37:47.750 [DEBUG] [Thread-140135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:37:47.769 [DEBUG] [Thread-140135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:37:47.769 [INFO] [Thread-140135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] client lang: <none>
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] server lang: <none>
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] kex follows: False
2026-02-12T02:37:47.773 [DEBUG] [Thread-140135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:37:47.774 [DEBUG] [Thread-140135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:37:47.774 [DEBUG] [Thread-140135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:37:47.774 [DEBUG] [Thread-140135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:37:47.774 [DEBUG] [Thread-140135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:37:47.774 [DEBUG] [Thread-140135] [transport.py] [_log()] Compression: none
2026-02-12T02:37:47.774 [DEBUG] [Thread-140135] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:37:47.792 [DEBUG] [Thread-140135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:37:47.792 [DEBUG] [Thread-140135] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:37:47.793 [DEBUG] [Thread-140135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:37:47.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:37:47.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:37:47.794 [DEBUG] [Thread-140135] [transport.py] [_log()] userauth is OK
2026-02-12T02:37:47.795 [DEBUG] [Thread-140135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:37:47.795 [DEBUG] [Thread-140135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:37:47.795 [DEBUG] [Thread-140135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:37:47.795 [DEBUG] [Thread-140135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:37:47.812 [INFO] [Thread-140135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:37:47.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:37:48.437 [DEBUG] [Thread-140135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:37:48.437 [DEBUG] [Thread-140135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:37:48.438 [DEBUG] [Thread-140135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:37:48.478 [DEBUG] [Thread-140135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:37:48.479 [DEBUG] [Thread-140135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:37:48.482 [DEBUG] [Thread-140135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:37:48.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:37:48.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:37:48.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:37:48.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:37:48.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:37:48.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:37:48.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:37:48.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:37:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:37:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.025826 -999.00  +12.90  13.66     92  +11.60 1 3 1 3 1     0    0 1.43 7.62 ----- 13.7 13.7 152.8 17.6 14.9 -2.0 14.7 -1.6 14.6 -1.8 14.9 -1.9
2026-02-12T02:37:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:37:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:37:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.025826
2026-02-12T02:37:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:37:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:37:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:37:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:37:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:37:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:37:28', tmtdew=0.58, humidity=96.09, cloud=0.0, wind=15.99, temperature=12.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:37:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:37:48.508 [DEBUG] [Thread-140135] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:37:48.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:37:48.617 [DEBUG] [Thread-140138] [transport.py] [_log()] starting thread (client mode): 0xa57c2020
2026-02-12T02:37:48.617 [DEBUG] [Thread-140138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:37:48.631 [DEBUG] [Thread-140138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:37:48.631 [INFO] [Thread-140138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] client lang: <none>
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] server lang: <none>
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] kex follows: False
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:37:48.639 [DEBUG] [Thread-140138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:37:48.640 [DEBUG] [Thread-140138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:37:48.640 [DEBUG] [Thread-140138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:37:48.640 [DEBUG] [Thread-140138] [transport.py] [_log()] Compression: none
2026-02-12T02:37:48.640 [DEBUG] [Thread-140138] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:37:48.697 [DEBUG] [Thread-140138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:37:48.698 [DEBUG] [Thread-140138] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:37:48.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:37:48.699 [DEBUG] [Thread-140138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:37:48.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:37:48.753 [DEBUG] [Thread-140138] [transport.py] [_log()] userauth is OK
2026-02-12T02:37:48.754 [DEBUG] [Thread-140138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:37:48.754 [DEBUG] [Thread-140138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:37:48.754 [DEBUG] [Thread-140138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:37:48.754 [DEBUG] [Thread-140138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:37:48.772 [INFO] [Thread-140138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:37:48.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:37:48.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:37:49.568 [DEBUG] [Thread-140138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:37:49.569 [DEBUG] [Thread-140138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:37:49.616 [DEBUG] [Thread-140138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:37:49.616 [DEBUG] [Thread-140138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:37:49.626 [DEBUG] [Thread-140138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:37:49.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:37:49.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:37:49.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:37:49.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:37:49.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:37:49.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:37:49.660 [DEBUG] [Thread-140138] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:37:53.117 [DEBUG] [Thread-140140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:07.195 [DEBUG] [Thread-140141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:08.165 [DEBUG] [Thread-140142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:38:19.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:38:19.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:38:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 38, 3), 0.59, 96.02, 0.0, 16.0, 12.88, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:38:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:38:03
2026-02-12T02:38:22.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:38:22.236 [DEBUG] [Thread-140143] [transport.py] [_log()] starting thread (client mode): 0xa5771210
2026-02-12T02:38:22.237 [DEBUG] [Thread-140143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:38:22.257 [DEBUG] [Thread-140143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:38:22.257 [INFO] [Thread-140143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:38:22.260 [DEBUG] [Thread-140143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:38:22.260 [DEBUG] [Thread-140143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:38:22.260 [DEBUG] [Thread-140143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:38:22.260 [DEBUG] [Thread-140143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:22.260 [DEBUG] [Thread-140143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] client lang: <none>
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] server lang: <none>
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] kex follows: False
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:38:22.261 [DEBUG] [Thread-140143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:38:22.262 [DEBUG] [Thread-140143] [transport.py] [_log()] Compression: none
2026-02-12T02:38:22.262 [DEBUG] [Thread-140143] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:38:22.281 [DEBUG] [Thread-140143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:38:22.282 [DEBUG] [Thread-140143] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:38:22.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:38:22.283 [DEBUG] [Thread-140143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:38:22.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:38:22.285 [DEBUG] [Thread-140143] [transport.py] [_log()] userauth is OK
2026-02-12T02:38:22.285 [DEBUG] [Thread-140143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:38:22.285 [DEBUG] [Thread-140143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:38:22.286 [DEBUG] [Thread-140143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:38:22.286 [DEBUG] [Thread-140143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:38:22.310 [INFO] [Thread-140143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:38:22.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:38:22.928 [DEBUG] [Thread-140143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:38:22.928 [DEBUG] [Thread-140143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:38:22.929 [DEBUG] [Thread-140143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:38:22.970 [DEBUG] [Thread-140143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:38:22.970 [DEBUG] [Thread-140143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:38:22.973 [DEBUG] [Thread-140143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:38:22.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:38:22.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:38:22.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:38:22.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:38:22.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:38:22.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:38:22.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:38:22.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:38:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:38:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.026173 -999.00  +12.80  11.61     92  +11.60 1 3 1 3 1     0    0 1.44 7.42 ----- 11.6 11.6 166.1 21.4 14.9 -1.9 14.7 -1.6 14.6 -1.9 14.9 -2.0
2026-02-12T02:38:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:38:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:38:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.026173
2026-02-12T02:38:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:38:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:38:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:38:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:38:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:38:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:38:03', tmtdew=0.59, humidity=96.02, cloud=0.0, wind=16.0, temperature=12.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:37:41.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:38:22.996 [DEBUG] [Thread-140143] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:38:23.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:38:23.091 [DEBUG] [Thread-140146] [transport.py] [_log()] starting thread (client mode): 0xa5771600
2026-02-12T02:38:23.091 [DEBUG] [Thread-140146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:38:23.105 [DEBUG] [Thread-140146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:38:23.105 [INFO] [Thread-140146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] client lang: <none>
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] server lang: <none>
2026-02-12T02:38:23.113 [DEBUG] [Thread-140146] [transport.py] [_log()] kex follows: False
2026-02-12T02:38:23.114 [DEBUG] [Thread-140146] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:38:23.114 [DEBUG] [Thread-140146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:38:23.114 [DEBUG] [Thread-140146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:38:23.114 [DEBUG] [Thread-140146] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:38:23.114 [DEBUG] [Thread-140146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:38:23.114 [DEBUG] [Thread-140146] [transport.py] [_log()] Compression: none
2026-02-12T02:38:23.114 [DEBUG] [Thread-140146] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:38:23.168 [DEBUG] [Thread-140146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:38:23.169 [DEBUG] [Thread-140146] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:38:23.169 [DEBUG] [Thread-140146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:38:23.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:38:23.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:38:23.205 [DEBUG] [Thread-140148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:23.227 [DEBUG] [Thread-140146] [transport.py] [_log()] userauth is OK
2026-02-12T02:38:23.227 [DEBUG] [Thread-140146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:38:23.227 [DEBUG] [Thread-140146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:38:23.227 [DEBUG] [Thread-140146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:38:23.227 [DEBUG] [Thread-140146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:38:23.251 [INFO] [Thread-140146] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:38:23.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:38:23.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:38:24.052 [DEBUG] [Thread-140146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:38:24.052 [DEBUG] [Thread-140146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:38:24.099 [DEBUG] [Thread-140146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:38:24.099 [DEBUG] [Thread-140146] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:38:24.108 [DEBUG] [Thread-140146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:38:24.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:38:24.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:38:24.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:38:24.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:38:24.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:38:24.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:38:24.147 [DEBUG] [Thread-140146] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:38:33.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:33.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:38.259 [DEBUG] [Thread-140149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:53.296 [DEBUG] [Thread-140150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:38:54.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:38:54.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:38:54.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
2026-02-12T02:38:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 38, 38), 1.1, 92.97, 0.0, 20.01, 13.27, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:38:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:38:38
2026-02-12T02:38:56.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:38:56.451 [DEBUG] [Thread-140151] [transport.py] [_log()] starting thread (client mode): 0xa57c1870
2026-02-12T02:38:56.451 [DEBUG] [Thread-140151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:38:56.471 [DEBUG] [Thread-140151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:38:56.471 [INFO] [Thread-140151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] client lang: <none>
2026-02-12T02:38:56.475 [DEBUG] [Thread-140151] [transport.py] [_log()] server lang: <none>
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] kex follows: False
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] Compression: none
2026-02-12T02:38:56.476 [DEBUG] [Thread-140151] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:38:56.495 [DEBUG] [Thread-140151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:38:56.496 [DEBUG] [Thread-140151] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:38:56.497 [DEBUG] [Thread-140151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:38:56.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:38:56.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:38:56.540 [DEBUG] [Thread-140151] [transport.py] [_log()] userauth is OK
2026-02-12T02:38:56.540 [DEBUG] [Thread-140151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:38:56.540 [DEBUG] [Thread-140151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:38:56.541 [DEBUG] [Thread-140151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:38:56.541 [DEBUG] [Thread-140151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:38:56.561 [INFO] [Thread-140151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:38:56.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:38:57.208 [DEBUG] [Thread-140151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:38:57.208 [DEBUG] [Thread-140151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:38:57.209 [DEBUG] [Thread-140151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:38:57.249 [DEBUG] [Thread-140151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:38:57.250 [DEBUG] [Thread-140151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:38:57.253 [DEBUG] [Thread-140151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:38:57.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:38:57.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:38:57.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:38:57.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:38:57.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:38:57.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:38:57.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:38:57.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:38:57.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:38:57.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.026868 -999.00  +12.80   8.99     92  +11.60 1 3 1 3 1     0    0 1.43 6.97 ----- 9.0 9.0 155.7 16.3 14.9 -1.9 14.7 -1.6 14.6 -1.6 14.9 -1.8
2026-02-12T02:38:57.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:38:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:38:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.026868
2026-02-12T02:38:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:38:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:38:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:38:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:38:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:38:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:38:38', tmtdew=1.1, humidity=92.97, cloud=0.0, wind=20.01, temperature=13.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:38:41.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:38:57.280 [DEBUG] [Thread-140151] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:38:57.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:38:57.388 [DEBUG] [Thread-140154] [transport.py] [_log()] starting thread (client mode): 0xa57c2890
2026-02-12T02:38:57.388 [DEBUG] [Thread-140154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:38:57.402 [DEBUG] [Thread-140154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:38:57.402 [INFO] [Thread-140154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] client lang: <none>
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] server lang: <none>
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] kex follows: False
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:38:57.410 [DEBUG] [Thread-140154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:38:57.411 [DEBUG] [Thread-140154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:38:57.411 [DEBUG] [Thread-140154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:38:57.411 [DEBUG] [Thread-140154] [transport.py] [_log()] Compression: none
2026-02-12T02:38:57.411 [DEBUG] [Thread-140154] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:38:57.470 [DEBUG] [Thread-140154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:38:57.470 [DEBUG] [Thread-140154] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:38:57.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:38:57.471 [DEBUG] [Thread-140154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:38:57.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:38:57.526 [DEBUG] [Thread-140154] [transport.py] [_log()] userauth is OK
2026-02-12T02:38:57.526 [DEBUG] [Thread-140154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:38:57.526 [DEBUG] [Thread-140154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:38:57.526 [DEBUG] [Thread-140154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:38:57.526 [DEBUG] [Thread-140154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:38:57.545 [INFO] [Thread-140154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:38:57.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:38:57.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:38:58.338 [DEBUG] [Thread-140154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:38:58.339 [DEBUG] [Thread-140154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:38:58.386 [DEBUG] [Thread-140154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:38:58.387 [DEBUG] [Thread-140154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:38:58.396 [DEBUG] [Thread-140154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:38:58.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:38: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')
2026-02-12T02:38:58.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:38:58.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:38:58.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:38:58.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:38:58.432 [DEBUG] [Thread-140154] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:39:07.257 [DEBUG] [Thread-140156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:39:08.332 [DEBUG] [Thread-140157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:39:23.388 [DEBUG] [Thread-140158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:39:28.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:39:28.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:39:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:39:30.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 39, 14), 0.65, 96.0, 0.0, 15.83, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:39:30.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:39:14
2026-02-12T02:39:30.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:39:30.897 [DEBUG] [Thread-140159] [transport.py] [_log()] starting thread (client mode): 0x9eb05ab0
2026-02-12T02:39:30.897 [DEBUG] [Thread-140159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:39:30.917 [DEBUG] [Thread-140159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:39:30.917 [INFO] [Thread-140159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:39:30.920 [DEBUG] [Thread-140159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:39:30.920 [DEBUG] [Thread-140159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:39:30.920 [DEBUG] [Thread-140159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:39:30.920 [DEBUG] [Thread-140159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] client lang: <none>
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] server lang: <none>
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] kex follows: False
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] Compression: none
2026-02-12T02:39:30.921 [DEBUG] [Thread-140159] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:39:30.937 [DEBUG] [Thread-140159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:39:30.938 [DEBUG] [Thread-140159] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:39:30.938 [DEBUG] [Thread-140159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:39:30.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:39:30.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:39:30.941 [DEBUG] [Thread-140159] [transport.py] [_log()] userauth is OK
2026-02-12T02:39:30.941 [DEBUG] [Thread-140159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:39:30.941 [DEBUG] [Thread-140159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:39:30.941 [DEBUG] [Thread-140159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:39:30.941 [DEBUG] [Thread-140159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:39:30.966 [INFO] [Thread-140159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:39:30.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:39:31.608 [DEBUG] [Thread-140159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:39:31.608 [DEBUG] [Thread-140159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:39:31.609 [DEBUG] [Thread-140159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:39:31.649 [DEBUG] [Thread-140159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:39:31.650 [DEBUG] [Thread-140159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:39:31.652 [DEBUG] [Thread-140159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:39:31.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:39:31.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:39:31.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:39:31.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:39:31.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:39:31.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:39:31.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:39:31.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:39:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:39:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.027215 -999.00  +12.80  16.40     92  +11.60 1 3 1 3 1     0    0 1.39 6.61 ----- 16.4 16.4 168.6 19.9 14.9 -2.0 14.7 -1.6 14.6 -1.8 14.9 -2.0
2026-02-12T02:39:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:39:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:39:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.027215
2026-02-12T02:39:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:39:31.685 [DEBUG] [Thread-140159] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:39:31.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:39:31.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:39:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:39:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:39:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:39:14', tmtdew=0.65, humidity=96.0, cloud=0.0, wind=15.83, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:39:11.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:39:31.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:39:31.783 [DEBUG] [Thread-140162] [transport.py] [_log()] starting thread (client mode): 0xa57e1840
2026-02-12T02:39:31.783 [DEBUG] [Thread-140162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:39:31.798 [DEBUG] [Thread-140162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:39:31.798 [INFO] [Thread-140162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:39:31.805 [DEBUG] [Thread-140162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:39:31.806 [DEBUG] [Thread-140162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:39:31.806 [DEBUG] [Thread-140162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:39:31.806 [DEBUG] [Thread-140162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:39:31.806 [DEBUG] [Thread-140162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] client lang: <none>
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] server lang: <none>
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] kex follows: False
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] Compression: none
2026-02-12T02:39:31.807 [DEBUG] [Thread-140162] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:39:31.866 [DEBUG] [Thread-140162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:39:31.867 [DEBUG] [Thread-140162] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:39:31.868 [DEBUG] [Thread-140162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:39:31.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:39:31.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:39:31.925 [DEBUG] [Thread-140162] [transport.py] [_log()] userauth is OK
2026-02-12T02:39:31.926 [DEBUG] [Thread-140162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:39:31.926 [DEBUG] [Thread-140162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:39:31.926 [DEBUG] [Thread-140162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:39:31.926 [DEBUG] [Thread-140162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:39:31.945 [INFO] [Thread-140162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:39:31.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:39:31.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:39:32.757 [DEBUG] [Thread-140162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:39:32.757 [DEBUG] [Thread-140162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:39:32.805 [DEBUG] [Thread-140162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:39:32.805 [DEBUG] [Thread-140162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:39:32.814 [DEBUG] [Thread-140162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:39:32.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:39:32.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:39:32.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:39:32.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:39:32.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:39:32.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:39:32.851 [DEBUG] [Thread-140162] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:39:33.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:39:33.378 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:39:38.427 [DEBUG] [Thread-140164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:39:53.476 [DEBUG] [Thread-140165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:40:02.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:40:02.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:40:02.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:40:04.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 39, 49), 0.6, 96.0, 0.0, 18.32, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:40:04.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:39:49
2026-02-12T02:40:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:40:05.217 [DEBUG] [Thread-140166] [transport.py] [_log()] starting thread (client mode): 0xa81d5c90
2026-02-12T02:40:05.217 [DEBUG] [Thread-140166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:40:05.231 [DEBUG] [Thread-140166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:40:05.231 [INFO] [Thread-140166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:40:05.235 [DEBUG] [Thread-140166] [transport.py] [_log()] client lang: <none>
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] server lang: <none>
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] kex follows: False
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] Compression: none
2026-02-12T02:40:05.236 [DEBUG] [Thread-140166] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:40:05.253 [DEBUG] [Thread-140166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:40:05.254 [DEBUG] [Thread-140166] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:40:05.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:40:05.255 [DEBUG] [Thread-140166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:40:05.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:40:05.257 [DEBUG] [Thread-140166] [transport.py] [_log()] userauth is OK
2026-02-12T02:40:05.257 [DEBUG] [Thread-140166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:40:05.257 [DEBUG] [Thread-140166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:40:05.257 [DEBUG] [Thread-140166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:40:05.257 [DEBUG] [Thread-140166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:40:05.282 [INFO] [Thread-140166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:40:05.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:40:07.336 [DEBUG] [Thread-140168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:40:08.513 [DEBUG] [Thread-140169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:40:12.321 [DEBUG] [Thread-140166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:40:12.321 [DEBUG] [Thread-140166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:40:12.321 [DEBUG] [Thread-140166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:40:12.361 [DEBUG] [Thread-140166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:40:12.361 [DEBUG] [Thread-140166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:40:12.365 [DEBUG] [Thread-140166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:40:12.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:40:12.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:40:12.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:40:12.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:40:12.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:40:12.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:40:12.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:40:12.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:40:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:40:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.027562 -999.00  +12.90  11.30     92  +11.60 1 3 1 3 1     0    0 1.41 6.42 ----- 11.3 11.3 163.2 15.9 14.9 -2.1 14.7 -1.8 14.6 -1.8 15.0 -1.9
2026-02-12T02:40:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:40:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:40:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.027562
2026-02-12T02:40:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:40:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:40:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:40:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:40:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:40:12.449 [DEBUG] [Thread-140166] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:40:12.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:39:49', tmtdew=0.6, humidity=96.0, cloud=0.0, wind=18.32, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:39:41.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:40:12.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:40:12.541 [DEBUG] [Thread-140171] [transport.py] [_log()] starting thread (client mode): 0xa2d79030
2026-02-12T02:40:12.541 [DEBUG] [Thread-140171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:40:12.557 [DEBUG] [Thread-140171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:40:12.557 [INFO] [Thread-140171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:40:12.564 [DEBUG] [Thread-140171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] client lang: <none>
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] server lang: <none>
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] kex follows: False
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] Compression: none
2026-02-12T02:40:12.565 [DEBUG] [Thread-140171] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:40:12.625 [DEBUG] [Thread-140171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:40:12.626 [DEBUG] [Thread-140171] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:40:12.627 [DEBUG] [Thread-140171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:40:12.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:40:12.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:40:12.681 [DEBUG] [Thread-140171] [transport.py] [_log()] userauth is OK
2026-02-12T02:40:12.682 [DEBUG] [Thread-140171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:40:12.682 [DEBUG] [Thread-140171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:40:12.682 [DEBUG] [Thread-140171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:40:12.682 [DEBUG] [Thread-140171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:40:12.701 [INFO] [Thread-140171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:40:12.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:40:12.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:40:13.512 [DEBUG] [Thread-140171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:40:13.512 [DEBUG] [Thread-140171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:40:13.560 [DEBUG] [Thread-140171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:40:13.561 [DEBUG] [Thread-140171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:40:13.570 [DEBUG] [Thread-140171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:40:13.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:40:13.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:40:13.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:40:13.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:40:13.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:40:13.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:40:13.606 [DEBUG] [Thread-140171] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:40:23.554 [DEBUG] [Thread-140173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:40:33.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:40:33.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:40:38.605 [DEBUG] [Thread-140174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:40:43.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:40:43.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:40:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:40:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 40, 24), 0.6, 96.0, 0.0, 18.09, 12.85, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:40:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:40:24
2026-02-12T02:40:45.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:40:45.945 [DEBUG] [Thread-140175] [transport.py] [_log()] starting thread (client mode): 0xa5773940
2026-02-12T02:40:45.945 [DEBUG] [Thread-140175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:40:45.966 [DEBUG] [Thread-140175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:40:45.966 [INFO] [Thread-140175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:45.969 [DEBUG] [Thread-140175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] client lang: <none>
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] server lang: <none>
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] kex follows: False
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] Compression: none
2026-02-12T02:40:45.970 [DEBUG] [Thread-140175] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:40:45.989 [DEBUG] [Thread-140175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:40:45.990 [DEBUG] [Thread-140175] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:40:45.990 [DEBUG] [Thread-140175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:40:45.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:40:45.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:40:45.992 [DEBUG] [Thread-140175] [transport.py] [_log()] userauth is OK
2026-02-12T02:40:45.992 [DEBUG] [Thread-140175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:40:45.992 [DEBUG] [Thread-140175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:40:45.993 [DEBUG] [Thread-140175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:40:45.993 [DEBUG] [Thread-140175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:40:46.012 [INFO] [Thread-140175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:40:46.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:40:46.663 [DEBUG] [Thread-140175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:40:46.663 [DEBUG] [Thread-140175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:40:46.664 [DEBUG] [Thread-140175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:40:46.704 [DEBUG] [Thread-140175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:40:46.705 [DEBUG] [Thread-140175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:40:46.708 [DEBUG] [Thread-140175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:40:46.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:40:46.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:40:46.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:40:46.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:40:46.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:40:46.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:40:46.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:40:46.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:40:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:40:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.027909 -999.00  +12.90  12.83     92  +11.60 1 3 1 3 1     0    0 1.43 7.09 ----- 12.8 12.8 167.8 17.8 14.9 -2.1 14.8 -1.8 14.6 -1.8 15.0 -2.0
2026-02-12T02:40:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:40:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:40:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.027909
2026-02-12T02:40:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:40:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:40:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:40:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:40:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:40:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:40:24', tmtdew=0.6, humidity=96.0, cloud=0.0, wind=18.09, temperature=12.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:40:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:40:46.737 [DEBUG] [Thread-140175] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:40:46.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:40:46.834 [DEBUG] [Thread-140178] [transport.py] [_log()] starting thread (client mode): 0xa57e3610
2026-02-12T02:40:46.835 [DEBUG] [Thread-140178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:40:46.849 [DEBUG] [Thread-140178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:40:46.850 [INFO] [Thread-140178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:40:46.857 [DEBUG] [Thread-140178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:40:46.858 [DEBUG] [Thread-140178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:40:46.858 [DEBUG] [Thread-140178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:40:46.858 [DEBUG] [Thread-140178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:46.858 [DEBUG] [Thread-140178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:40:46.858 [DEBUG] [Thread-140178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:46.858 [DEBUG] [Thread-140178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:40:46.858 [DEBUG] [Thread-140178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] client lang: <none>
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] server lang: <none>
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] kex follows: False
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:40:46.859 [DEBUG] [Thread-140178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:40:46.860 [DEBUG] [Thread-140178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:40:46.860 [DEBUG] [Thread-140178] [transport.py] [_log()] Compression: none
2026-02-12T02:40:46.860 [DEBUG] [Thread-140178] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:40:46.918 [DEBUG] [Thread-140178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:40:46.919 [DEBUG] [Thread-140178] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:40:46.919 [DEBUG] [Thread-140178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:40:46.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:40:46.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:40:46.973 [DEBUG] [Thread-140178] [transport.py] [_log()] userauth is OK
2026-02-12T02:40:46.974 [DEBUG] [Thread-140178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:40:46.974 [DEBUG] [Thread-140178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:40:46.974 [DEBUG] [Thread-140178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:40:46.974 [DEBUG] [Thread-140178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:40:46.991 [INFO] [Thread-140178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:40:46.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:40:46.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:40:47.829 [DEBUG] [Thread-140178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:40:47.830 [DEBUG] [Thread-140178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:40:47.877 [DEBUG] [Thread-140178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:40:47.877 [DEBUG] [Thread-140178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:40:47.887 [DEBUG] [Thread-140178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:40:47.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:40:47.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')
2026-02-12T02:40:47.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
2026-02-12T02:40:47.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:40:47.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:40:47.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:40:47.922 [DEBUG] [Thread-140178] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:40:53.642 [DEBUG] [Thread-140180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:07.403 [DEBUG] [Thread-140181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:08.692 [DEBUG] [Thread-140182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:41:17.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:41:17.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:41:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 40, 59), 0.66, 95.94, 0.0, 18.47, 12.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:41:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:40:59
2026-02-12T02:41:20.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:41:20.228 [DEBUG] [Thread-140183] [transport.py] [_log()] starting thread (client mode): 0xa2d9c3d0
2026-02-12T02:41:20.228 [DEBUG] [Thread-140183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:41:20.248 [DEBUG] [Thread-140183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:41:20.248 [INFO] [Thread-140183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] client lang: <none>
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] server lang: <none>
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] kex follows: False
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] Compression: none
2026-02-12T02:41:20.251 [DEBUG] [Thread-140183] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:41:20.267 [DEBUG] [Thread-140183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:41:20.267 [DEBUG] [Thread-140183] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:41:20.268 [DEBUG] [Thread-140183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:41:20.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:41:20.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:41:20.269 [DEBUG] [Thread-140183] [transport.py] [_log()] userauth is OK
2026-02-12T02:41:20.270 [DEBUG] [Thread-140183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:41:20.270 [DEBUG] [Thread-140183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:41:20.270 [DEBUG] [Thread-140183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:41:20.270 [DEBUG] [Thread-140183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:41:20.288 [INFO] [Thread-140183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:41:20.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:41:21.083 [DEBUG] [Thread-140183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:41:21.083 [DEBUG] [Thread-140183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:41:21.083 [DEBUG] [Thread-140183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:41:21.124 [DEBUG] [Thread-140183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:41:21.124 [DEBUG] [Thread-140183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:41:21.127 [DEBUG] [Thread-140183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:41:21.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:41:21.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:41:21.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:41:21.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:41:21.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:41:21.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:41:21.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:41:21.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:41:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:41:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.028257 -999.00  +12.90  15.31     92  +11.60 1 3 1 3 1     0    0 1.45 6.91 ----- 15.3 15.3 164.6 17.6 15.0 -2.0 14.7 -2.0 14.6 -1.8 15.0 -1.9
2026-02-12T02:41:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:41:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:41:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.028257
2026-02-12T02:41:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:41:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:41:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:41:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:41:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:41:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:40:59', tmtdew=0.66, humidity=95.94, cloud=0.0, wind=18.47, temperature=12.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:40:41.405', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:41:21.150 [DEBUG] [Thread-140183] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:41:21.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:41:21.243 [DEBUG] [Thread-140186] [transport.py] [_log()] starting thread (client mode): 0xa2d9e200
2026-02-12T02:41:21.243 [DEBUG] [Thread-140186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:41:21.259 [DEBUG] [Thread-140186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:41:21.259 [INFO] [Thread-140186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] client lang: <none>
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] server lang: <none>
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] kex follows: False
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:41:21.267 [DEBUG] [Thread-140186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:41:21.268 [DEBUG] [Thread-140186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:41:21.268 [DEBUG] [Thread-140186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:41:21.268 [DEBUG] [Thread-140186] [transport.py] [_log()] Compression: none
2026-02-12T02:41:21.268 [DEBUG] [Thread-140186] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:41:21.328 [DEBUG] [Thread-140186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:41:21.329 [DEBUG] [Thread-140186] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:41:21.329 [DEBUG] [Thread-140186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:41:21.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:41:21.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:41:21.385 [DEBUG] [Thread-140186] [transport.py] [_log()] userauth is OK
2026-02-12T02:41:21.385 [DEBUG] [Thread-140186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:41:21.385 [DEBUG] [Thread-140186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:41:21.385 [DEBUG] [Thread-140186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:41:21.385 [DEBUG] [Thread-140186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:41:21.405 [INFO] [Thread-140186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:41:21.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:41:21.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:41:22.248 [DEBUG] [Thread-140186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:41:22.248 [DEBUG] [Thread-140186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:41:22.295 [DEBUG] [Thread-140186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:41:22.296 [DEBUG] [Thread-140186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:41:22.305 [DEBUG] [Thread-140186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:41:22.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:41:22.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:41:22.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:41:22.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:41:22.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:41:22.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:41:22.340 [DEBUG] [Thread-140186] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:41:23.732 [DEBUG] [Thread-140188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:33.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:33.782 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:38.786 [DEBUG] [Thread-140189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:52.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:41:52.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:41:52.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
2026-02-12T02:41:53.824 [DEBUG] [Thread-140190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:41:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 41, 35), 1.1, 92.97, 0.0, 17.15, 13.36, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:41:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:41:35
2026-02-12T02:41:54.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:41:54.740 [DEBUG] [Thread-140191] [transport.py] [_log()] starting thread (client mode): 0xa57e11b0
2026-02-12T02:41:54.741 [DEBUG] [Thread-140191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:41:54.760 [DEBUG] [Thread-140191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:41:54.760 [INFO] [Thread-140191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] client lang: <none>
2026-02-12T02:41:54.764 [DEBUG] [Thread-140191] [transport.py] [_log()] server lang: <none>
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] kex follows: False
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] Compression: none
2026-02-12T02:41:54.765 [DEBUG] [Thread-140191] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:41:54.785 [DEBUG] [Thread-140191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:41:54.786 [DEBUG] [Thread-140191] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:41:54.787 [DEBUG] [Thread-140191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:41:54.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:41:54.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:41:54.788 [DEBUG] [Thread-140191] [transport.py] [_log()] userauth is OK
2026-02-12T02:41:54.789 [DEBUG] [Thread-140191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:41:54.789 [DEBUG] [Thread-140191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:41:54.789 [DEBUG] [Thread-140191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:41:54.789 [DEBUG] [Thread-140191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:41:54.823 [INFO] [Thread-140191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:41:54.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:41:55.447 [DEBUG] [Thread-140191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:41:55.447 [DEBUG] [Thread-140191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:41:55.447 [DEBUG] [Thread-140191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:41:55.488 [DEBUG] [Thread-140191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:41:55.488 [DEBUG] [Thread-140191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:41:55.490 [DEBUG] [Thread-140191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:41:55.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:41:55.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:41:55.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:41:55.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:41:55.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:41:55.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:41:55.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.028604 -999.00  +12.90  14.75     92  +11.60 1 3 1 3 1     0    0 1.43 7.09 ----- 14.8 14.8 163.8 17.6 15.0 -2.0 14.8 -1.7 14.6 -2.0 15.0 -1.9
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.028604
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:41:35', tmtdew=1.1, humidity=92.97, cloud=0.0, wind=17.15, temperature=13.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:41:11.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:41:55.511 [DEBUG] [Thread-140191] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:41:55.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:41:55.599 [DEBUG] [Thread-140194] [transport.py] [_log()] starting thread (client mode): 0xa81d5000
2026-02-12T02:41:55.599 [DEBUG] [Thread-140194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:41:55.613 [DEBUG] [Thread-140194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:41:55.614 [INFO] [Thread-140194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:41:55.624 [DEBUG] [Thread-140194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] client lang: <none>
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] server lang: <none>
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] kex follows: False
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:41:55.625 [DEBUG] [Thread-140194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:41:55.626 [DEBUG] [Thread-140194] [transport.py] [_log()] Compression: none
2026-02-12T02:41:55.626 [DEBUG] [Thread-140194] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:41:55.682 [DEBUG] [Thread-140194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:41:55.683 [DEBUG] [Thread-140194] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:41:55.684 [DEBUG] [Thread-140194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:41:55.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:41:55.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:41:55.741 [DEBUG] [Thread-140194] [transport.py] [_log()] userauth is OK
2026-02-12T02:41:55.742 [DEBUG] [Thread-140194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:41:55.742 [DEBUG] [Thread-140194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:41:55.742 [DEBUG] [Thread-140194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:41:55.742 [DEBUG] [Thread-140194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:41:55.761 [INFO] [Thread-140194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:41:55.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:41:55.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:41:56.586 [DEBUG] [Thread-140194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:41:56.586 [DEBUG] [Thread-140194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:41:56.635 [DEBUG] [Thread-140194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:41:56.635 [DEBUG] [Thread-140194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:41:56.644 [DEBUG] [Thread-140194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:41:56.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:41:56.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:41:56.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:41:56.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:41:56.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:41:56.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:41:56.680 [DEBUG] [Thread-140194] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:42:07.476 [DEBUG] [Thread-140196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:42:08.860 [DEBUG] [Thread-140197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:42:23.918 [DEBUG] [Thread-140198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:42:26.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:42:26.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:42:26.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:42:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 42, 10), 0.65, 95.99, 0.0, 17.82, 12.9, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:42:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:42:10
2026-02-12T02:42:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:42:28.956 [DEBUG] [Thread-140199] [transport.py] [_log()] starting thread (client mode): 0xa2d781c0
2026-02-12T02:42:28.956 [DEBUG] [Thread-140199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:42:28.977 [DEBUG] [Thread-140199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:42:28.977 [INFO] [Thread-140199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] client lang: <none>
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] server lang: <none>
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] kex follows: False
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] Compression: none
2026-02-12T02:42:28.980 [DEBUG] [Thread-140199] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:42:28.996 [DEBUG] [Thread-140199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:42:28.997 [DEBUG] [Thread-140199] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:42:28.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:42:28.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:42:28.998 [DEBUG] [Thread-140199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:42:28.999 [DEBUG] [Thread-140199] [transport.py] [_log()] userauth is OK
2026-02-12T02:42:28.999 [DEBUG] [Thread-140199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:42:28.999 [DEBUG] [Thread-140199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:42:28.999 [DEBUG] [Thread-140199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:42:28.999 [DEBUG] [Thread-140199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:42:29.020 [INFO] [Thread-140199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:42:29.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:42:29.654 [DEBUG] [Thread-140199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:42:29.655 [DEBUG] [Thread-140199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:42:29.655 [DEBUG] [Thread-140199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:42:29.695 [DEBUG] [Thread-140199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:42:29.695 [DEBUG] [Thread-140199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:42:29.699 [DEBUG] [Thread-140199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:42:29.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:42:29.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:42:29.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:42:29.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:42:29.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:42:29.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:42:29.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:42:29.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:42:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:42:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.028951 -999.00  +12.90  11.91     92  +11.60 1 3 1 3 1     0    0 1.44 6.61 ----- 11.9 11.9 161.8 17.6 14.9 -2.1 14.8 -1.8 14.6 -1.8 15.0 -1.9
2026-02-12T02:42:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:42:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:42:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.028951
2026-02-12T02:42:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:42:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:42:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:42:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:42:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:42:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:42:10', tmtdew=0.65, humidity=95.99, cloud=0.0, wind=17.82, temperature=12.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:41:41.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:42:29.725 [DEBUG] [Thread-140199] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:42:29.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:42:29.823 [DEBUG] [Thread-140202] [transport.py] [_log()] starting thread (client mode): 0xa5743df0
2026-02-12T02:42:29.824 [DEBUG] [Thread-140202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:42:29.838 [DEBUG] [Thread-140202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:42:29.838 [INFO] [Thread-140202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:42:29.845 [DEBUG] [Thread-140202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:42:29.846 [DEBUG] [Thread-140202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:42:29.846 [DEBUG] [Thread-140202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:42:29.846 [DEBUG] [Thread-140202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:42:29.846 [DEBUG] [Thread-140202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:42:29.846 [DEBUG] [Thread-140202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:42:29.846 [DEBUG] [Thread-140202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] client lang: <none>
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] server lang: <none>
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] kex follows: False
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:42:29.847 [DEBUG] [Thread-140202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:42:29.848 [DEBUG] [Thread-140202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:42:29.848 [DEBUG] [Thread-140202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:42:29.848 [DEBUG] [Thread-140202] [transport.py] [_log()] Compression: none
2026-02-12T02:42:29.848 [DEBUG] [Thread-140202] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:42:29.907 [DEBUG] [Thread-140202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:42:29.908 [DEBUG] [Thread-140202] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:42:29.908 [DEBUG] [Thread-140202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:42:29.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:42:29.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:42:29.974 [DEBUG] [Thread-140202] [transport.py] [_log()] userauth is OK
2026-02-12T02:42:29.974 [DEBUG] [Thread-140202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:42:29.974 [DEBUG] [Thread-140202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:42:29.974 [DEBUG] [Thread-140202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:42:29.975 [DEBUG] [Thread-140202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:42:29.995 [INFO] [Thread-140202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:42:29.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:42:29.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:42:30.822 [DEBUG] [Thread-140202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:42:30.822 [DEBUG] [Thread-140202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:42:30.870 [DEBUG] [Thread-140202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:42:30.871 [DEBUG] [Thread-140202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:42:30.880 [DEBUG] [Thread-140202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:42:30.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:42:30.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:42:30.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:42:30.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:42:30.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:42:30.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:42:30.917 [DEBUG] [Thread-140202] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:42:33.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:42:33.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:42:38.954 [DEBUG] [Thread-140204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:42:54.005 [DEBUG] [Thread-140205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:43:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:43:00.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:43:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:43:02.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 42, 45), 0.66, 95.94, 0.0, 18.84, 12.88, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:43:02.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:42:45
2026-02-12T02:43:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:43:03.252 [DEBUG] [Thread-140206] [transport.py] [_log()] starting thread (client mode): 0xa2d9d900
2026-02-12T02:43:03.252 [DEBUG] [Thread-140206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:43:03.272 [DEBUG] [Thread-140206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:43:03.272 [INFO] [Thread-140206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] client lang: <none>
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] server lang: <none>
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] kex follows: False
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:43:03.273 [DEBUG] [Thread-140206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:43:03.274 [DEBUG] [Thread-140206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:43:03.274 [DEBUG] [Thread-140206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:43:03.274 [DEBUG] [Thread-140206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:43:03.274 [DEBUG] [Thread-140206] [transport.py] [_log()] Compression: none
2026-02-12T02:43:03.274 [DEBUG] [Thread-140206] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:43:03.282 [DEBUG] [Thread-140206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:43:03.282 [DEBUG] [Thread-140206] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:43:03.282 [DEBUG] [Thread-140206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:43:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:43:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:43:03.284 [DEBUG] [Thread-140206] [transport.py] [_log()] userauth is OK
2026-02-12T02:43:03.284 [DEBUG] [Thread-140206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:43:03.284 [DEBUG] [Thread-140206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:43:03.284 [DEBUG] [Thread-140206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:43:03.284 [DEBUG] [Thread-140206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:43:03.307 [INFO] [Thread-140206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:43:03.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:43:03.918 [DEBUG] [Thread-140206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:43:03.919 [DEBUG] [Thread-140206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:43:03.919 [DEBUG] [Thread-140206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:43:03.959 [DEBUG] [Thread-140206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:43:03.960 [DEBUG] [Thread-140206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:43:03.963 [DEBUG] [Thread-140206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:43:03.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:43:03.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:43:03.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:43:03.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:43:03.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:43:03.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:43:03.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:43:03.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:43:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:43:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.029646 -999.00  +12.90  13.97     92  +11.60 1 3 1 3 1     0    0 1.42 6.44 ----- 14.0 14.0 168.8 19.8 14.9 -2.0 14.8 -1.8 14.6 -1.8 15.0 -1.9
2026-02-12T02:43:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:43:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:43:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.029646
2026-02-12T02:43:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:43:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:43:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:43:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:43:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:43:03.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:42:45', tmtdew=0.66, humidity=95.94, cloud=0.0, wind=18.84, temperature=12.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:42:41.414', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:43:03.991 [DEBUG] [Thread-140206] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:43:04.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:43:04.086 [DEBUG] [Thread-140209] [transport.py] [_log()] starting thread (client mode): 0xa2d94820
2026-02-12T02:43:04.086 [DEBUG] [Thread-140209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:43:04.101 [DEBUG] [Thread-140209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:43:04.101 [INFO] [Thread-140209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] client lang: <none>
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] server lang: <none>
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] kex follows: False
2026-02-12T02:43:04.109 [DEBUG] [Thread-140209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:43:04.110 [DEBUG] [Thread-140209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:43:04.110 [DEBUG] [Thread-140209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:43:04.110 [DEBUG] [Thread-140209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:43:04.110 [DEBUG] [Thread-140209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:43:04.110 [DEBUG] [Thread-140209] [transport.py] [_log()] Compression: none
2026-02-12T02:43:04.110 [DEBUG] [Thread-140209] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:43:04.169 [DEBUG] [Thread-140209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:43:04.170 [DEBUG] [Thread-140209] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:43:04.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:43:04.171 [DEBUG] [Thread-140209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:43:04.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:43:04.226 [DEBUG] [Thread-140209] [transport.py] [_log()] userauth is OK
2026-02-12T02:43:04.226 [DEBUG] [Thread-140209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:43:04.226 [DEBUG] [Thread-140209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:43:04.226 [DEBUG] [Thread-140209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:43:04.227 [DEBUG] [Thread-140209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:43:04.246 [INFO] [Thread-140209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:43:04.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:43:04.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:43:05.056 [DEBUG] [Thread-140209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:43:05.057 [DEBUG] [Thread-140209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:43:05.104 [DEBUG] [Thread-140209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:43:05.105 [DEBUG] [Thread-140209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:43:05.114 [DEBUG] [Thread-140209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:43:05.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:43:05.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:43:05.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:43:05.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:43:05.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:43:05.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:43:05.151 [DEBUG] [Thread-140209] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:43:07.552 [DEBUG] [Thread-140211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:43:09.040 [DEBUG] [Thread-140212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:43:24.094 [DEBUG] [Thread-140213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:43:34.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:43:34.187 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:43:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:43:35.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:43:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:43:37.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 43, 20), 0.66, 95.95, 0.0, 20.08, 12.92, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:43:37.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:43:20
2026-02-12T02:43:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:43:37.535 [DEBUG] [Thread-140214] [transport.py] [_log()] starting thread (client mode): 0xa57412a0
2026-02-12T02:43:37.535 [DEBUG] [Thread-140214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:43:37.555 [DEBUG] [Thread-140214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:43:37.555 [INFO] [Thread-140214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] client lang: <none>
2026-02-12T02:43:37.558 [DEBUG] [Thread-140214] [transport.py] [_log()] server lang: <none>
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] kex follows: False
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] Compression: none
2026-02-12T02:43:37.559 [DEBUG] [Thread-140214] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:43:37.575 [DEBUG] [Thread-140214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:43:37.576 [DEBUG] [Thread-140214] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:43:37.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:43:37.576 [DEBUG] [Thread-140214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:43:37.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:43:37.621 [DEBUG] [Thread-140214] [transport.py] [_log()] userauth is OK
2026-02-12T02:43:37.621 [DEBUG] [Thread-140214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:43:37.621 [DEBUG] [Thread-140214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:43:37.621 [DEBUG] [Thread-140214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:43:37.621 [DEBUG] [Thread-140214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:43:37.647 [INFO] [Thread-140214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:43:37.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:43:38.275 [DEBUG] [Thread-140214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:43:38.275 [DEBUG] [Thread-140214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:43:38.275 [DEBUG] [Thread-140214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:43:38.316 [DEBUG] [Thread-140214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:43:38.317 [DEBUG] [Thread-140214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:43:38.320 [DEBUG] [Thread-140214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:43:38.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:43:38.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:43:38.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:43:38.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:43:38.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:43:38.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:43:38.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:43:38.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:43:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:43:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.029993 -999.00  +12.90  13.16     92  +11.60 1 3 1 3 1     0    0 1.42 5.73 ----- 13.2 13.2 164.0 19.3 15.0 -2.0 14.8 -1.7 14.6 -1.8 15.0 -2.0
2026-02-12T02:43:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:43:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:43:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.029993
2026-02-12T02:43:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:43:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:43:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:43:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:43:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:43:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:43:20', tmtdew=0.66, humidity=95.95, cloud=0.0, wind=20.08, temperature=12.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:43:11.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:43:38.346 [DEBUG] [Thread-140214] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:43:38.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:43:38.441 [DEBUG] [Thread-140217] [transport.py] [_log()] starting thread (client mode): 0xa81d6a40
2026-02-12T02:43:38.441 [DEBUG] [Thread-140217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:43:38.455 [DEBUG] [Thread-140217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:43:38.455 [INFO] [Thread-140217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:43:38.462 [DEBUG] [Thread-140217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:43:38.463 [DEBUG] [Thread-140217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:43:38.463 [DEBUG] [Thread-140217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:43:38.463 [DEBUG] [Thread-140217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:38.463 [DEBUG] [Thread-140217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] client lang: <none>
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] server lang: <none>
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] kex follows: False
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] Compression: none
2026-02-12T02:43:38.464 [DEBUG] [Thread-140217] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:43:38.522 [DEBUG] [Thread-140217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:43:38.522 [DEBUG] [Thread-140217] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:43:38.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:43:38.523 [DEBUG] [Thread-140217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:43:38.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:43:38.581 [DEBUG] [Thread-140217] [transport.py] [_log()] userauth is OK
2026-02-12T02:43:38.581 [DEBUG] [Thread-140217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:43:38.581 [DEBUG] [Thread-140217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:43:38.581 [DEBUG] [Thread-140217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:43:38.582 [DEBUG] [Thread-140217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:43:38.600 [INFO] [Thread-140217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:43:38.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:43:38.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:43:39.131 [DEBUG] [Thread-140219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:43:39.394 [DEBUG] [Thread-140217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:43:39.403 [DEBUG] [Thread-140217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:43:39.441 [DEBUG] [Thread-140217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:43:39.442 [DEBUG] [Thread-140217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:43:39.451 [DEBUG] [Thread-140217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:43:39.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:43:39.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:43:39.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:43:39.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:43:39.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:43:39.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:43:39.488 [DEBUG] [Thread-140217] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:43:54.181 [DEBUG] [Thread-140220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:44:07.627 [DEBUG] [Thread-140221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:44:09.221 [DEBUG] [Thread-140222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:44:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:44:09.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:44:09.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:44:11.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 43, 55), 0.66, 95.92, 0.0, 16.76, 12.88, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:44:11.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:43:55
2026-02-12T02:44:11.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:44:11.902 [DEBUG] [Thread-140223] [transport.py] [_log()] starting thread (client mode): 0xa57e3670
2026-02-12T02:44:11.902 [DEBUG] [Thread-140223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:44:11.923 [DEBUG] [Thread-140223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:44:11.924 [INFO] [Thread-140223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] client lang: <none>
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] server lang: <none>
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] kex follows: False
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] Compression: none
2026-02-12T02:44:11.925 [DEBUG] [Thread-140223] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:44:11.934 [DEBUG] [Thread-140223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:44:11.934 [DEBUG] [Thread-140223] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:44:11.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:44:11.935 [DEBUG] [Thread-140223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:44:11.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:44:11.936 [DEBUG] [Thread-140223] [transport.py] [_log()] userauth is OK
2026-02-12T02:44:11.936 [DEBUG] [Thread-140223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:44:11.937 [DEBUG] [Thread-140223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:44:11.937 [DEBUG] [Thread-140223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:44:11.937 [DEBUG] [Thread-140223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:44:11.950 [INFO] [Thread-140223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:44:11.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:44:12.567 [DEBUG] [Thread-140223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:44:12.567 [DEBUG] [Thread-140223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:44:12.568 [DEBUG] [Thread-140223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:44:12.608 [DEBUG] [Thread-140223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:44:12.609 [DEBUG] [Thread-140223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:44:12.612 [DEBUG] [Thread-140223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:44:12.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:44:12.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:44:12.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:44:12.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:44:12.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:44:12.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:44:12.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:44:12.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:44:12.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:44:12.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.030341 -999.00  +12.90  15.54     92  +11.60 1 3 1 3 1     0    0 1.39 5.35 ----- 15.5 15.5 169.6 19.6 15.0 -2.1 14.8 -1.7 14.6 -1.9 15.0 -1.9
2026-02-12T02:44:12.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:44:12.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:44:12.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.030341
2026-02-12T02:44:12.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:44:12.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:44:12.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:44:12.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:44:12.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:44:12.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:43:55', tmtdew=0.66, humidity=95.92, cloud=0.0, wind=16.76, temperature=12.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:43:41.462', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:44:12.639 [DEBUG] [Thread-140223] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:44:12.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:44:12.736 [DEBUG] [Thread-140226] [transport.py] [_log()] starting thread (client mode): 0xa81d7250
2026-02-12T02:44:12.737 [DEBUG] [Thread-140226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:44:12.755 [DEBUG] [Thread-140226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:44:12.756 [INFO] [Thread-140226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:44:12.763 [DEBUG] [Thread-140226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:44:12.764 [DEBUG] [Thread-140226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:44:12.764 [DEBUG] [Thread-140226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:44:12.764 [DEBUG] [Thread-140226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:12.764 [DEBUG] [Thread-140226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:12.764 [DEBUG] [Thread-140226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:12.764 [DEBUG] [Thread-140226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] client lang: <none>
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] server lang: <none>
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] kex follows: False
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:44:12.765 [DEBUG] [Thread-140226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:44:12.766 [DEBUG] [Thread-140226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:44:12.766 [DEBUG] [Thread-140226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:44:12.766 [DEBUG] [Thread-140226] [transport.py] [_log()] Compression: none
2026-02-12T02:44:12.766 [DEBUG] [Thread-140226] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:44:12.822 [DEBUG] [Thread-140226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:44:12.823 [DEBUG] [Thread-140226] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:44:12.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:44:12.825 [DEBUG] [Thread-140226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:44:12.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:44:12.877 [DEBUG] [Thread-140226] [transport.py] [_log()] userauth is OK
2026-02-12T02:44:12.878 [DEBUG] [Thread-140226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:44:12.878 [DEBUG] [Thread-140226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:44:12.878 [DEBUG] [Thread-140226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:44:12.878 [DEBUG] [Thread-140226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:44:12.897 [INFO] [Thread-140226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:44:12.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:44:12.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:44:13.720 [DEBUG] [Thread-140226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:44:13.721 [DEBUG] [Thread-140226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:44:13.768 [DEBUG] [Thread-140226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:44:13.769 [DEBUG] [Thread-140226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:44:13.778 [DEBUG] [Thread-140226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:44:13.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:44:13.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:44:13.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:44:13.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:44:13.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:44:13.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:44:13.814 [DEBUG] [Thread-140226] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:44:24.257 [DEBUG] [Thread-140228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:44:34.387 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:44:34.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:44:39.309 [DEBUG] [Thread-140229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:44:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:44:43.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:44:43.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
2026-02-12T02:44:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 44, 30), 0.66, 95.9, 0.0, 16.41, 12.92, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:44:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:44:30
2026-02-12T02:44:45.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:44:46.146 [DEBUG] [Thread-140230] [transport.py] [_log()] starting thread (client mode): 0xa2d94640
2026-02-12T02:44:46.146 [DEBUG] [Thread-140230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:44:46.167 [DEBUG] [Thread-140230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:44:46.167 [INFO] [Thread-140230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:44:46.170 [DEBUG] [Thread-140230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] client lang: <none>
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] server lang: <none>
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] kex follows: False
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:44:46.171 [DEBUG] [Thread-140230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:44:46.172 [DEBUG] [Thread-140230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:44:46.172 [DEBUG] [Thread-140230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:44:46.172 [DEBUG] [Thread-140230] [transport.py] [_log()] Compression: none
2026-02-12T02:44:46.172 [DEBUG] [Thread-140230] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:44:46.189 [DEBUG] [Thread-140230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:44:46.190 [DEBUG] [Thread-140230] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:44:46.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:44:46.191 [DEBUG] [Thread-140230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:44:46.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:44:46.193 [DEBUG] [Thread-140230] [transport.py] [_log()] userauth is OK
2026-02-12T02:44:46.193 [DEBUG] [Thread-140230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:44:46.194 [DEBUG] [Thread-140230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:44:46.194 [DEBUG] [Thread-140230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:44:46.194 [DEBUG] [Thread-140230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:44:46.217 [INFO] [Thread-140230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:44:46.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:44:46.861 [DEBUG] [Thread-140230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:44:46.862 [DEBUG] [Thread-140230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:44:46.862 [DEBUG] [Thread-140230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:44:46.902 [DEBUG] [Thread-140230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:44:46.903 [DEBUG] [Thread-140230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:44:46.906 [DEBUG] [Thread-140230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:44:46.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:44:46.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:44:46.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:44:46.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:44:46.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:44:46.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:44:46.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:44:46.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.030687 -999.00  +12.90  13.11     92  +11.60 1 3 1 3 1     0    0 1.42 5.80 ----- 13.1 13.1 171.8 18.2 14.9 -2.0 14.8 -1.7 14.6 -2.1 15.0 -1.8
2026-02-12T02:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.030687
2026-02-12T02:44:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:44:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:44:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:44:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:44:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:44:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:44:30', tmtdew=0.66, humidity=95.9, cloud=0.0, wind=16.41, temperature=12.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:44:11.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:44:46.938 [DEBUG] [Thread-140230] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:44:47.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:44:47.034 [DEBUG] [Thread-140233] [transport.py] [_log()] starting thread (client mode): 0xa2d9e200
2026-02-12T02:44:47.034 [DEBUG] [Thread-140233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:44:47.049 [DEBUG] [Thread-140233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:44:47.049 [INFO] [Thread-140233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] client lang: <none>
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] server lang: <none>
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] kex follows: False
2026-02-12T02:44:47.057 [DEBUG] [Thread-140233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:44:47.058 [DEBUG] [Thread-140233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:44:47.058 [DEBUG] [Thread-140233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:44:47.058 [DEBUG] [Thread-140233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:44:47.058 [DEBUG] [Thread-140233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:44:47.058 [DEBUG] [Thread-140233] [transport.py] [_log()] Compression: none
2026-02-12T02:44:47.058 [DEBUG] [Thread-140233] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:44:47.114 [DEBUG] [Thread-140233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:44:47.114 [DEBUG] [Thread-140233] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:44:47.115 [DEBUG] [Thread-140233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:44:47.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:44:47.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:44:47.170 [DEBUG] [Thread-140233] [transport.py] [_log()] userauth is OK
2026-02-12T02:44:47.170 [DEBUG] [Thread-140233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:44:47.170 [DEBUG] [Thread-140233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:44:47.170 [DEBUG] [Thread-140233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:44:47.171 [DEBUG] [Thread-140233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:44:47.190 [INFO] [Thread-140233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:44:47.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:44:47.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:44:48.025 [DEBUG] [Thread-140233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:44:48.026 [DEBUG] [Thread-140233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:44:48.073 [DEBUG] [Thread-140233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:44:48.073 [DEBUG] [Thread-140233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:44:48.081 [DEBUG] [Thread-140233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:44:48.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:44:48.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:44:48.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:44:48.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:44:48.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:44:48.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:44:48.114 [DEBUG] [Thread-140233] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:44:54.348 [DEBUG] [Thread-140235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:07.699 [DEBUG] [Thread-140236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:09.407 [DEBUG] [Thread-140237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:45:18.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:45:18.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:45:19.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 45, 5), 0.65, 96.0, 0.0, 16.85, 12.98, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:45:19.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:45:05
2026-02-12T02:45:20.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:45:20.451 [DEBUG] [Thread-140238] [transport.py] [_log()] starting thread (client mode): 0xa2d9dcc0
2026-02-12T02:45:20.451 [DEBUG] [Thread-140238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:45:20.470 [DEBUG] [Thread-140238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:45:20.470 [INFO] [Thread-140238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:45:20.474 [DEBUG] [Thread-140238] [transport.py] [_log()] client lang: <none>
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] server lang: <none>
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] kex follows: False
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] Compression: none
2026-02-12T02:45:20.475 [DEBUG] [Thread-140238] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:45:20.492 [DEBUG] [Thread-140238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:45:20.493 [DEBUG] [Thread-140238] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:45:20.493 [DEBUG] [Thread-140238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:45:20.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:45:20.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:45:20.495 [DEBUG] [Thread-140238] [transport.py] [_log()] userauth is OK
2026-02-12T02:45:20.496 [DEBUG] [Thread-140238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:45:20.496 [DEBUG] [Thread-140238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:45:20.496 [DEBUG] [Thread-140238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:45:20.496 [DEBUG] [Thread-140238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:45:20.520 [INFO] [Thread-140238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:45:20.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:45:21.141 [DEBUG] [Thread-140238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:45:21.141 [DEBUG] [Thread-140238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:45:21.142 [DEBUG] [Thread-140238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:45:21.182 [DEBUG] [Thread-140238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:45:21.182 [DEBUG] [Thread-140238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:45:21.185 [DEBUG] [Thread-140238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:45:21.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:45:21.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:45:21.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:45:21.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:45:21.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:45:21.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:45:21.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:45:21.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:45:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:45:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.031034 -999.00  +12.80   9.86     92  +11.60 1 3 1 3 1     0    0 1.40 4.72 ----- 9.9 9.9 163.2 15.7 14.9 -2.1 14.7 -1.7 14.7 -2.0 15.0 -1.9
2026-02-12T02:45:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:45:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:45:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.031034
2026-02-12T02:45:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:45:05', tmtdew=0.65, humidity=96.0, cloud=0.0, wind=16.85, temperature=12.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:44:41.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:45:21.211 [DEBUG] [Thread-140238] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:45:21.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:45:21.307 [DEBUG] [Thread-140241] [transport.py] [_log()] starting thread (client mode): 0xa5743610
2026-02-12T02:45:21.307 [DEBUG] [Thread-140241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:45:21.322 [DEBUG] [Thread-140241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:45:21.322 [INFO] [Thread-140241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:45:21.331 [DEBUG] [Thread-140241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] client lang: <none>
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] server lang: <none>
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] kex follows: False
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:45:21.332 [DEBUG] [Thread-140241] [transport.py] [_log()] Compression: none
2026-02-12T02:45:21.333 [DEBUG] [Thread-140241] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:45:21.397 [DEBUG] [Thread-140241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:45:21.397 [DEBUG] [Thread-140241] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:45:21.398 [DEBUG] [Thread-140241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:45:21.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:45:21.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:45:21.455 [DEBUG] [Thread-140241] [transport.py] [_log()] userauth is OK
2026-02-12T02:45:21.455 [DEBUG] [Thread-140241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:45:21.455 [DEBUG] [Thread-140241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:45:21.455 [DEBUG] [Thread-140241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:45:21.455 [DEBUG] [Thread-140241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:45:21.473 [INFO] [Thread-140241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:45:21.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:45:21.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:45:22.282 [DEBUG] [Thread-140241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:45:22.283 [DEBUG] [Thread-140241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:45:22.331 [DEBUG] [Thread-140241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:45:22.331 [DEBUG] [Thread-140241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:45:22.341 [DEBUG] [Thread-140241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:45:22.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:45:22.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')
2026-02-12T02:45:22.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:45:22.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:45:22.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:45:22.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:45:22.378 [DEBUG] [Thread-140241] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:45:24.443 [DEBUG] [Thread-140243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:34.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:34.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:39.494 [DEBUG] [Thread-140244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:52.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:45:52.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:45:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:45:54.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 45, 40), 1.1, 92.98, 0.0, 18.81, 13.47, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:45:54.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:45:40
2026-02-12T02:45:54.535 [DEBUG] [Thread-140245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:45:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:45:54.718 [DEBUG] [Thread-140246] [transport.py] [_log()] starting thread (client mode): 0xa5740d60
2026-02-12T02:45:54.718 [DEBUG] [Thread-140246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:45:54.738 [DEBUG] [Thread-140246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:45:54.738 [INFO] [Thread-140246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:45:54.741 [DEBUG] [Thread-140246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:45:54.741 [DEBUG] [Thread-140246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:45:54.741 [DEBUG] [Thread-140246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:45:54.741 [DEBUG] [Thread-140246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:54.741 [DEBUG] [Thread-140246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] client lang: <none>
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] server lang: <none>
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] kex follows: False
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] Compression: none
2026-02-12T02:45:54.742 [DEBUG] [Thread-140246] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:45:54.750 [DEBUG] [Thread-140246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:45:54.751 [DEBUG] [Thread-140246] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:45:54.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:45:54.751 [DEBUG] [Thread-140246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:45:54.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:45:54.752 [DEBUG] [Thread-140246] [transport.py] [_log()] userauth is OK
2026-02-12T02:45:54.752 [DEBUG] [Thread-140246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:45:54.753 [DEBUG] [Thread-140246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:45:54.753 [DEBUG] [Thread-140246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:45:54.753 [DEBUG] [Thread-140246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:45:54.765 [INFO] [Thread-140246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:45:54.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:45:55.391 [DEBUG] [Thread-140246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:45:55.392 [DEBUG] [Thread-140246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:45:55.392 [DEBUG] [Thread-140246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:45:55.433 [DEBUG] [Thread-140246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:45:55.433 [DEBUG] [Thread-140246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:45:55.436 [DEBUG] [Thread-140246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:45:55.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:45:55.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:45:55.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:45:55.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:45:55.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:45:55.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:45:55.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:45:55.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:45:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:45:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.031729 -999.00  +12.90  15.00     92  +11.60 1 3 1 3 1     0    0 1.39 4.00 ----- 15.0 15.0 174.4 18.8 15.0 -2.1 14.8 -1.9 14.7 -2.1 15.0 -2.0
2026-02-12T02:45:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:45:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:45:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.031729
2026-02-12T02:45:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:45:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:45:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:45:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:45:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:45:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:45:40', tmtdew=1.1, humidity=92.98, cloud=0.0, wind=18.81, temperature=13.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:45:41.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:45:55.463 [DEBUG] [Thread-140246] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:45:55.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:45:55.556 [DEBUG] [Thread-140249] [transport.py] [_log()] starting thread (client mode): 0xa2d9ce80
2026-02-12T02:45:55.556 [DEBUG] [Thread-140249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:45:55.571 [DEBUG] [Thread-140249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:45:55.572 [INFO] [Thread-140249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:45:55.579 [DEBUG] [Thread-140249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] client lang: <none>
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] server lang: <none>
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] kex follows: False
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] Compression: none
2026-02-12T02:45:55.580 [DEBUG] [Thread-140249] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:45:55.639 [DEBUG] [Thread-140249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:45:55.640 [DEBUG] [Thread-140249] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:45:55.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:45:55.641 [DEBUG] [Thread-140249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:45:55.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:45:55.697 [DEBUG] [Thread-140249] [transport.py] [_log()] userauth is OK
2026-02-12T02:45:55.698 [DEBUG] [Thread-140249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:45:55.698 [DEBUG] [Thread-140249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:45:55.698 [DEBUG] [Thread-140249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:45:55.698 [DEBUG] [Thread-140249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:45:55.717 [INFO] [Thread-140249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:45:55.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:45:55.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:45:56.518 [DEBUG] [Thread-140249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:45:56.518 [DEBUG] [Thread-140249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:45:56.566 [DEBUG] [Thread-140249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:45:56.567 [DEBUG] [Thread-140249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:45:56.576 [DEBUG] [Thread-140249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:45:56.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:45:56.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')
2026-02-12T02:45:56.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:45:56.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:45:56.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:45:56.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:45:56.613 [DEBUG] [Thread-140249] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:46:07.800 [DEBUG] [Thread-140251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:46:09.569 [DEBUG] [Thread-140252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:46:24.622 [DEBUG] [Thread-140253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:46:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:46:26.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:46:26.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:46:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 46, 16), 0.65, 95.99, 0.0, 16.64, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:46:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:46:16
2026-02-12T02:46:28.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:46:28.891 [DEBUG] [Thread-140254] [transport.py] [_log()] starting thread (client mode): 0xa2d01a20
2026-02-12T02:46:28.891 [DEBUG] [Thread-140254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:46:28.911 [DEBUG] [Thread-140254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:46:28.911 [INFO] [Thread-140254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] client lang: <none>
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] server lang: <none>
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] kex follows: False
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:46:28.914 [DEBUG] [Thread-140254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:46:28.915 [DEBUG] [Thread-140254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:46:28.915 [DEBUG] [Thread-140254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:46:28.915 [DEBUG] [Thread-140254] [transport.py] [_log()] Compression: none
2026-02-12T02:46:28.915 [DEBUG] [Thread-140254] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:46:28.931 [DEBUG] [Thread-140254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:46:28.931 [DEBUG] [Thread-140254] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:46:28.931 [DEBUG] [Thread-140254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:46:28.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:46:28.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:46:28.932 [DEBUG] [Thread-140254] [transport.py] [_log()] userauth is OK
2026-02-12T02:46:28.932 [DEBUG] [Thread-140254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:46:28.932 [DEBUG] [Thread-140254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:46:28.932 [DEBUG] [Thread-140254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:46:28.932 [DEBUG] [Thread-140254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:46:28.941 [INFO] [Thread-140254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:46:28.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:46:29.542 [DEBUG] [Thread-140254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:46:29.542 [DEBUG] [Thread-140254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:46:29.542 [DEBUG] [Thread-140254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:46:29.583 [DEBUG] [Thread-140254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:46:29.584 [DEBUG] [Thread-140254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:46:29.587 [DEBUG] [Thread-140254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:46:29.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:46:29.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:46:29.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:46:29.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:46:29.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:46:29.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:46:29.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:46:29.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:46:29.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:46:29.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.032076 -999.00  +12.80  15.51     92  +11.60 1 3 1 3 1     0    0 1.39 3.69 ----- 15.5 15.5 171.8 18.6 15.0 -2.2 14.8 -2.5 14.7 -2.1 15.0 -2.1
2026-02-12T02:46:29.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:46:29.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:46:29.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.032076
2026-02-12T02:46:29.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:46:29.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:46:29.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:46:29.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:46:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:46:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:46:16', tmtdew=0.65, humidity=95.99, cloud=0.0, wind=16.64, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:46:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:46:29.615 [DEBUG] [Thread-140254] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:46:29.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:46:29.710 [DEBUG] [Thread-140257] [transport.py] [_log()] starting thread (client mode): 0xa2d011b0
2026-02-12T02:46:29.710 [DEBUG] [Thread-140257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:46:29.724 [DEBUG] [Thread-140257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:46:29.724 [INFO] [Thread-140257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] client lang: <none>
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] server lang: <none>
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] kex follows: False
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:46:29.732 [DEBUG] [Thread-140257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:46:29.733 [DEBUG] [Thread-140257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:46:29.733 [DEBUG] [Thread-140257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:46:29.733 [DEBUG] [Thread-140257] [transport.py] [_log()] Compression: none
2026-02-12T02:46:29.733 [DEBUG] [Thread-140257] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:46:29.792 [DEBUG] [Thread-140257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:46:29.793 [DEBUG] [Thread-140257] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:46:29.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:46:29.794 [DEBUG] [Thread-140257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:46:29.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:46:29.850 [DEBUG] [Thread-140257] [transport.py] [_log()] userauth is OK
2026-02-12T02:46:29.850 [DEBUG] [Thread-140257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:46:29.850 [DEBUG] [Thread-140257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:46:29.850 [DEBUG] [Thread-140257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:46:29.851 [DEBUG] [Thread-140257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:46:29.875 [INFO] [Thread-140257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:46:29.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:46:29.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:46:30.683 [DEBUG] [Thread-140257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:46:30.684 [DEBUG] [Thread-140257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:46:30.731 [DEBUG] [Thread-140257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:46:30.732 [DEBUG] [Thread-140257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:46:30.741 [DEBUG] [Thread-140257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:46:30.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:46:30.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:46:30.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:46:30.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:46:30.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:46:30.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:46:30.778 [DEBUG] [Thread-140257] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:46:34.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:46:34.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:46:39.661 [DEBUG] [Thread-140259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:46:54.715 [DEBUG] [Thread-140260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:47:00.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:47:00.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:47:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:47:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 46, 51), 0.61, 95.95, 0.0, 16.96, 12.9, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:47:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:46:51
2026-02-12T02:47:02.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:47:03.118 [DEBUG] [Thread-140261] [transport.py] [_log()] starting thread (client mode): 0xa2d001f0
2026-02-12T02:47:03.118 [DEBUG] [Thread-140261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:47:03.140 [DEBUG] [Thread-140261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:47:03.140 [INFO] [Thread-140261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:47:03.143 [DEBUG] [Thread-140261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:47:03.143 [DEBUG] [Thread-140261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:47:03.143 [DEBUG] [Thread-140261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:47:03.143 [DEBUG] [Thread-140261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:03.143 [DEBUG] [Thread-140261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] client lang: <none>
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] server lang: <none>
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] kex follows: False
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:47:03.144 [DEBUG] [Thread-140261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:47:03.145 [DEBUG] [Thread-140261] [transport.py] [_log()] Compression: none
2026-02-12T02:47:03.145 [DEBUG] [Thread-140261] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:47:03.162 [DEBUG] [Thread-140261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:47:03.162 [DEBUG] [Thread-140261] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:47:03.163 [DEBUG] [Thread-140261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:47:03.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:47:03.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:47:03.165 [DEBUG] [Thread-140261] [transport.py] [_log()] userauth is OK
2026-02-12T02:47:03.165 [DEBUG] [Thread-140261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:47:03.165 [DEBUG] [Thread-140261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:47:03.165 [DEBUG] [Thread-140261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:47:03.166 [DEBUG] [Thread-140261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:47:03.189 [INFO] [Thread-140261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:47:03.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:47:03.816 [DEBUG] [Thread-140261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:47:03.816 [DEBUG] [Thread-140261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:47:03.817 [DEBUG] [Thread-140261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:47:03.857 [DEBUG] [Thread-140261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:47:03.857 [DEBUG] [Thread-140261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:47:03.860 [DEBUG] [Thread-140261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:47:03.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:47:03.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:47:03.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:47:03.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:47:03.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:47:03.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:47:03.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:47:03.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:47:03.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:47:03.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.032423 -999.00  +12.80  13.69     92  +11.60 1 3 1 3 1     0    0 1.38 3.20 ----- 13.7 13.7 175.8 18.4 15.0 -2.2 14.7 -1.9 14.7 -2.1 15.0 -2.2
2026-02-12T02:47:03.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:47:03.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:47:03.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.032423
2026-02-12T02:47:03.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:47:03.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:47:03.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:47:03.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:47:03.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:47:03.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:46:51', tmtdew=0.61, humidity=95.95, cloud=0.0, wind=16.96, temperature=12.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:46:41.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:47:03.887 [DEBUG] [Thread-140261] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:47:03.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:47:03.985 [DEBUG] [Thread-140264] [transport.py] [_log()] starting thread (client mode): 0xa575b580
2026-02-12T02:47:03.985 [DEBUG] [Thread-140264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:47:03.999 [DEBUG] [Thread-140264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:47:04.000 [INFO] [Thread-140264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:47:04.007 [DEBUG] [Thread-140264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:47:04.007 [DEBUG] [Thread-140264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:47:04.007 [DEBUG] [Thread-140264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] client lang: <none>
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] server lang: <none>
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] kex follows: False
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] Compression: none
2026-02-12T02:47:04.008 [DEBUG] [Thread-140264] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:47:04.069 [DEBUG] [Thread-140264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:47:04.070 [DEBUG] [Thread-140264] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:47:04.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:47:04.071 [DEBUG] [Thread-140264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:47:04.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:47:04.125 [DEBUG] [Thread-140264] [transport.py] [_log()] userauth is OK
2026-02-12T02:47:04.126 [DEBUG] [Thread-140264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:47:04.126 [DEBUG] [Thread-140264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:47:04.126 [DEBUG] [Thread-140264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:47:04.126 [DEBUG] [Thread-140264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:47:04.149 [INFO] [Thread-140264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:47:04.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:47:04.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:47:04.955 [DEBUG] [Thread-140264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:47:04.955 [DEBUG] [Thread-140264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:47:05.003 [DEBUG] [Thread-140264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:47:05.003 [DEBUG] [Thread-140264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:47:05.012 [DEBUG] [Thread-140264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:47:05.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:47:05.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')
2026-02-12T02:47:05.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:47:05.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:47:05.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:47:05.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:47:05.046 [DEBUG] [Thread-140264] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:47:07.879 [DEBUG] [Thread-140266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:47:09.751 [DEBUG] [Thread-140267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:47:24.812 [DEBUG] [Thread-140268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:47:34.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:47:34.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:47:35.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:47:35.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:47:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:47:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 47, 26), 0.61, 95.92, 0.0, 17.87, 12.85, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:47:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:47:26
2026-02-12T02:47:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:47:38.165 [DEBUG] [Thread-140269] [transport.py] [_log()] starting thread (client mode): 0xa2d03f10
2026-02-12T02:47:38.165 [DEBUG] [Thread-140269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:47:38.185 [DEBUG] [Thread-140269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:47:38.185 [INFO] [Thread-140269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] client lang: <none>
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] server lang: <none>
2026-02-12T02:47:38.187 [DEBUG] [Thread-140269] [transport.py] [_log()] kex follows: False
2026-02-12T02:47:38.188 [DEBUG] [Thread-140269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:47:38.188 [DEBUG] [Thread-140269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:47:38.188 [DEBUG] [Thread-140269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:47:38.188 [DEBUG] [Thread-140269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:47:38.188 [DEBUG] [Thread-140269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:47:38.188 [DEBUG] [Thread-140269] [transport.py] [_log()] Compression: none
2026-02-12T02:47:38.188 [DEBUG] [Thread-140269] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:47:38.199 [DEBUG] [Thread-140269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:47:38.200 [DEBUG] [Thread-140269] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:47:38.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:47:38.200 [DEBUG] [Thread-140269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:47:38.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:47:38.201 [DEBUG] [Thread-140269] [transport.py] [_log()] userauth is OK
2026-02-12T02:47:38.201 [DEBUG] [Thread-140269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:47:38.201 [DEBUG] [Thread-140269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:47:38.201 [DEBUG] [Thread-140269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:47:38.201 [DEBUG] [Thread-140269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:47:38.213 [INFO] [Thread-140269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:47:38.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:47:38.804 [DEBUG] [Thread-140269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:47:38.805 [DEBUG] [Thread-140269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:47:38.805 [DEBUG] [Thread-140269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:47:38.845 [DEBUG] [Thread-140269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:47:38.845 [DEBUG] [Thread-140269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:47:38.848 [DEBUG] [Thread-140269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:47:38.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:47:38.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:47:38.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:47:38.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:47:38.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:47:38.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:47:38.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:47:38.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:47:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:47:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.032770 -999.00  +12.90  14.20     92  +11.60 1 3 1 3 1     0    0 1.32 2.76 ----- 14.2 14.2 176.0 17.6 15.0 -2.3 14.7 -2.7 14.6 -2.2 15.0 -2.1
2026-02-12T02:47:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:47:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:47:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.032770
2026-02-12T02:47:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:47:38.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:47:38.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:47:38.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:47:38.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:47:38.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:47:26', tmtdew=0.61, humidity=95.92, cloud=0.0, wind=17.87, temperature=12.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:47:11.328', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:47:38.873 [DEBUG] [Thread-140269] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:47:38.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:47:38.975 [DEBUG] [Thread-140272] [transport.py] [_log()] starting thread (client mode): 0xa2d030a0
2026-02-12T02:47:38.975 [DEBUG] [Thread-140272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:47:38.990 [DEBUG] [Thread-140272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:47:38.991 [INFO] [Thread-140272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:47:38.998 [DEBUG] [Thread-140272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:47:38.999 [DEBUG] [Thread-140272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:47:38.999 [DEBUG] [Thread-140272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:47:38.999 [DEBUG] [Thread-140272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:38.999 [DEBUG] [Thread-140272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:47:38.999 [DEBUG] [Thread-140272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:38.999 [DEBUG] [Thread-140272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:47:38.999 [DEBUG] [Thread-140272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] client lang: <none>
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] server lang: <none>
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] kex follows: False
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:47:39.000 [DEBUG] [Thread-140272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:47:39.001 [DEBUG] [Thread-140272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:47:39.001 [DEBUG] [Thread-140272] [transport.py] [_log()] Compression: none
2026-02-12T02:47:39.001 [DEBUG] [Thread-140272] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:47:39.058 [DEBUG] [Thread-140272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:47:39.059 [DEBUG] [Thread-140272] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:47:39.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:47:39.060 [DEBUG] [Thread-140272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:47:39.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:47:39.117 [DEBUG] [Thread-140272] [transport.py] [_log()] userauth is OK
2026-02-12T02:47:39.118 [DEBUG] [Thread-140272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:47:39.118 [DEBUG] [Thread-140272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:47:39.118 [DEBUG] [Thread-140272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:47:39.118 [DEBUG] [Thread-140272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:47:39.136 [INFO] [Thread-140272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:47:39.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:47:39.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:47:39.852 [DEBUG] [Thread-140274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:47:39.945 [DEBUG] [Thread-140272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:47:39.946 [DEBUG] [Thread-140272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:47:39.993 [DEBUG] [Thread-140272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:47:39.994 [DEBUG] [Thread-140272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:47:40.003 [DEBUG] [Thread-140272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:47:40.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:47: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')
2026-02-12T02:47: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
2026-02-12T02:47:40.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:47:40.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:47:40.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:47:40.041 [DEBUG] [Thread-140272] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:47:54.903 [DEBUG] [Thread-140275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:48:07.953 [DEBUG] [Thread-140276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:48:09.939 [DEBUG] [Thread-140277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:48:10.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:48:10.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:48:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:48:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 48, 3), 0.61, 95.94, 0.0, 17.5, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:48:11.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:48:03
2026-02-12T02:48:12.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:48:12.423 [DEBUG] [Thread-140278] [transport.py] [_log()] starting thread (client mode): 0xa2d9f0a0
2026-02-12T02:48:12.424 [DEBUG] [Thread-140278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:48:12.444 [DEBUG] [Thread-140278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:48:12.444 [INFO] [Thread-140278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:48:12.445 [DEBUG] [Thread-140278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:48:12.445 [DEBUG] [Thread-140278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:48:12.445 [DEBUG] [Thread-140278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] client lang: <none>
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] server lang: <none>
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] kex follows: False
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] Compression: none
2026-02-12T02:48:12.446 [DEBUG] [Thread-140278] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:48:12.456 [DEBUG] [Thread-140278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:48:12.457 [DEBUG] [Thread-140278] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:48:12.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:48:12.458 [DEBUG] [Thread-140278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:48:12.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:48:12.460 [DEBUG] [Thread-140278] [transport.py] [_log()] userauth is OK
2026-02-12T02:48:12.461 [DEBUG] [Thread-140278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:48:12.461 [DEBUG] [Thread-140278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:48:12.461 [DEBUG] [Thread-140278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:48:12.461 [DEBUG] [Thread-140278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:48:12.487 [INFO] [Thread-140278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:48:12.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:48:13.118 [DEBUG] [Thread-140278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:48:13.118 [DEBUG] [Thread-140278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:48:13.118 [DEBUG] [Thread-140278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:48:13.159 [DEBUG] [Thread-140278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:48:13.159 [DEBUG] [Thread-140278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:48:13.162 [DEBUG] [Thread-140278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:48:13.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:48:13.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:48:13.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:48:13.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:48:13.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:48:13.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:48:13.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:48:13.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:48:13.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:48:13.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.033118 -999.00  +12.90   9.36     92  +11.60 1 3 1 3 1     0    0 1.33 2.78 ----- 9.4 9.4 169.4 18.2 15.0 -2.2 14.7 -2.8 14.6 -2.0 15.0 -2.2
2026-02-12T02:48:13.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:48:13.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:48:13.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.033118
2026-02-12T02:48:13.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:48:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:48:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:48:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:48:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:48:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:48:03', tmtdew=0.61, humidity=95.94, cloud=0.0, wind=17.5, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:47:41.395', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:48:13.183 [DEBUG] [Thread-140278] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:48:13.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:48:13.279 [DEBUG] [Thread-140281] [transport.py] [_log()] starting thread (client mode): 0xa2d9fe50
2026-02-12T02:48:13.279 [DEBUG] [Thread-140281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:48:13.293 [DEBUG] [Thread-140281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:48:13.293 [INFO] [Thread-140281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:48:13.300 [DEBUG] [Thread-140281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] client lang: <none>
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] server lang: <none>
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] kex follows: False
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] Compression: none
2026-02-12T02:48:13.301 [DEBUG] [Thread-140281] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:48:13.361 [DEBUG] [Thread-140281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:48:13.361 [DEBUG] [Thread-140281] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:48:13.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:48:13.362 [DEBUG] [Thread-140281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:48:13.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:48:13.417 [DEBUG] [Thread-140281] [transport.py] [_log()] userauth is OK
2026-02-12T02:48:13.417 [DEBUG] [Thread-140281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:48:13.417 [DEBUG] [Thread-140281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:48:13.417 [DEBUG] [Thread-140281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:48:13.417 [DEBUG] [Thread-140281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:48:13.439 [INFO] [Thread-140281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:48:13.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:48:13.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:48:14.297 [DEBUG] [Thread-140281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:48:14.298 [DEBUG] [Thread-140281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:48:14.345 [DEBUG] [Thread-140281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:48:14.345 [DEBUG] [Thread-140281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:48:14.353 [DEBUG] [Thread-140281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:48:14.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:48:14.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:48:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:48:14.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:48:14.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:48:14.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:48:14.386 [DEBUG] [Thread-140281] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:48:24.973 [DEBUG] [Thread-140283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:48:35.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:48:35.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:48:40.028 [DEBUG] [Thread-140284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:48:44.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:48:44.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:48:44.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:48:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 48, 3), 0.61, 95.94, 0.0, 17.5, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:48:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:48:03
2026-02-12T02:48:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:48:46.777 [DEBUG] [Thread-140285] [transport.py] [_log()] starting thread (client mode): 0xa2d015a0
2026-02-12T02:48:46.777 [DEBUG] [Thread-140285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:48:46.798 [DEBUG] [Thread-140285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:48:46.798 [INFO] [Thread-140285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:48:46.801 [DEBUG] [Thread-140285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:48:46.801 [DEBUG] [Thread-140285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:48:46.801 [DEBUG] [Thread-140285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:48:46.801 [DEBUG] [Thread-140285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] client lang: <none>
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] server lang: <none>
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] kex follows: False
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:48:46.802 [DEBUG] [Thread-140285] [transport.py] [_log()] Compression: none
2026-02-12T02:48:46.803 [DEBUG] [Thread-140285] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:48:46.822 [DEBUG] [Thread-140285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:48:46.823 [DEBUG] [Thread-140285] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:48:46.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:48:46.824 [DEBUG] [Thread-140285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:48:46.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:48:46.826 [DEBUG] [Thread-140285] [transport.py] [_log()] userauth is OK
2026-02-12T02:48:46.827 [DEBUG] [Thread-140285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:48:46.827 [DEBUG] [Thread-140285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:48:46.827 [DEBUG] [Thread-140285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:48:46.827 [DEBUG] [Thread-140285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:48:46.852 [INFO] [Thread-140285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:48:46.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:48:47.463 [DEBUG] [Thread-140285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:48:47.463 [DEBUG] [Thread-140285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:48:47.463 [DEBUG] [Thread-140285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:48:47.504 [DEBUG] [Thread-140285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:48:47.504 [DEBUG] [Thread-140285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:48:47.506 [DEBUG] [Thread-140285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:48:47.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:48:47.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:48:47.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:48:47.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:48:47.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:48:47.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:48:47.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:48:47.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:48:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:48:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.033465 -999.00  +12.90  12.33     92  +11.60 1 3 1 3 1     0    0 1.35 2.75 ----- 12.3 12.3 175.6 16.0 15.0 -2.2 14.7 -2.4 14.6 -2.1 14.9 -2.0
2026-02-12T02:48:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:48:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:48:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.033465
2026-02-12T02:48:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:48:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:48:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:48:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:48:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:48:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:48:03', tmtdew=0.61, humidity=95.94, cloud=0.0, wind=17.5, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:48:11.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:48:47.519 [DEBUG] [Thread-140285] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:48:47.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:48:47.603 [DEBUG] [Thread-140288] [transport.py] [_log()] starting thread (client mode): 0xa2d9e470
2026-02-12T02:48:47.603 [DEBUG] [Thread-140288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:48:47.618 [DEBUG] [Thread-140288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:48:47.618 [INFO] [Thread-140288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] client lang: <none>
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] server lang: <none>
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] kex follows: False
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] Compression: none
2026-02-12T02:48:47.625 [DEBUG] [Thread-140288] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:48:47.689 [DEBUG] [Thread-140288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:48:47.690 [DEBUG] [Thread-140288] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:48:47.690 [DEBUG] [Thread-140288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:48:47.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:48:47.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:48:47.746 [DEBUG] [Thread-140288] [transport.py] [_log()] userauth is OK
2026-02-12T02:48:47.746 [DEBUG] [Thread-140288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:48:47.746 [DEBUG] [Thread-140288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:48:47.746 [DEBUG] [Thread-140288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:48:47.746 [DEBUG] [Thread-140288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:48:47.765 [INFO] [Thread-140288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:48:47.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:48:47.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:48:48.573 [DEBUG] [Thread-140288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:48:48.573 [DEBUG] [Thread-140288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:48:48.621 [DEBUG] [Thread-140288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:48:48.622 [DEBUG] [Thread-140288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:48:48.631 [DEBUG] [Thread-140288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:48:48.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:48:48.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:48:48.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:48:48.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:48:48.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:48:48.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:48:48.668 [DEBUG] [Thread-140288] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:48:55.067 [DEBUG] [Thread-140290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:08.007 [DEBUG] [Thread-140291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:10.120 [DEBUG] [Thread-140292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:49:18.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:49:18.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:49:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 48, 38), 1.12, 92.88, 0.0, 16.69, 13.2, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:49:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:48:38
2026-02-12T02:49:21.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:49:21.437 [DEBUG] [Thread-140293] [transport.py] [_log()] starting thread (client mode): 0xa2d9d450
2026-02-12T02:49:21.438 [DEBUG] [Thread-140293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:49:21.457 [DEBUG] [Thread-140293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:49:21.457 [INFO] [Thread-140293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:21.461 [DEBUG] [Thread-140293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] client lang: <none>
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] server lang: <none>
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] kex follows: False
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] Compression: none
2026-02-12T02:49:21.462 [DEBUG] [Thread-140293] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:49:21.481 [DEBUG] [Thread-140293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:49:21.481 [DEBUG] [Thread-140293] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:49:21.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:49:21.482 [DEBUG] [Thread-140293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:49:21.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:49:21.485 [DEBUG] [Thread-140293] [transport.py] [_log()] userauth is OK
2026-02-12T02:49:21.485 [DEBUG] [Thread-140293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:49:21.485 [DEBUG] [Thread-140293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:49:21.485 [DEBUG] [Thread-140293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:49:21.485 [DEBUG] [Thread-140293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:49:21.521 [INFO] [Thread-140293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:49:21.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:49:22.129 [DEBUG] [Thread-140293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:49:22.130 [DEBUG] [Thread-140293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:49:22.130 [DEBUG] [Thread-140293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:49:22.170 [DEBUG] [Thread-140293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:49:22.171 [DEBUG] [Thread-140293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:49:22.173 [DEBUG] [Thread-140293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:49:22.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:49:22.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:49:22.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:49:22.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:49:22.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:49:22.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:49:22.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:49:22.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:49:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:49:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.033812 -999.00  +12.90   9.55     92  +11.60 1 3 1 3 1     0    0 1.33 2.83 ----- 9.6 9.6 171.2 14.1 15.0 -2.2 14.7 -2.0 14.7 -2.0 15.0 -1.9
2026-02-12T02:49:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:49:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:49:22.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.033812
2026-02-12T02:49:22.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:49:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:49:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:49:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:49:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:49:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:48:38', tmtdew=1.12, humidity=92.88, cloud=0.0, wind=16.69, temperature=13.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:48:41.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:49:22.198 [DEBUG] [Thread-140293] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:49:22.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:49:22.291 [DEBUG] [Thread-140296] [transport.py] [_log()] starting thread (client mode): 0xa2d01cc0
2026-02-12T02:49:22.292 [DEBUG] [Thread-140296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:49:22.306 [DEBUG] [Thread-140296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:49:22.306 [INFO] [Thread-140296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:49:22.313 [DEBUG] [Thread-140296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:49:22.314 [DEBUG] [Thread-140296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] client lang: <none>
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] server lang: <none>
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] kex follows: False
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:49:22.315 [DEBUG] [Thread-140296] [transport.py] [_log()] Compression: none
2026-02-12T02:49:22.316 [DEBUG] [Thread-140296] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:49:22.374 [DEBUG] [Thread-140296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:49:22.375 [DEBUG] [Thread-140296] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:49:22.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:49:22.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:49:22.378 [DEBUG] [Thread-140296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:49:22.434 [DEBUG] [Thread-140296] [transport.py] [_log()] userauth is OK
2026-02-12T02:49:22.434 [DEBUG] [Thread-140296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:49:22.435 [DEBUG] [Thread-140296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:49:22.435 [DEBUG] [Thread-140296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:49:22.435 [DEBUG] [Thread-140296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:49:22.456 [INFO] [Thread-140296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:49:22.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:49:22.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:49:23.275 [DEBUG] [Thread-140296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:49:23.275 [DEBUG] [Thread-140296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:49:23.326 [DEBUG] [Thread-140296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:49:23.326 [DEBUG] [Thread-140296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:49:23.336 [DEBUG] [Thread-140296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:49:23.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:49:23.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:49:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:49:23.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:49:23.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:49:23.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:49:23.372 [DEBUG] [Thread-140296] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:49:25.156 [DEBUG] [Thread-140298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:35.422 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:35.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:40.212 [DEBUG] [Thread-140299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:49:53.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:49:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:49:55.248 [DEBUG] [Thread-140300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:49:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 49, 14), 0.65, 95.97, 0.0, 18.4, 12.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:49:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:49:14
2026-02-12T02:49:56.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:49:56.333 [DEBUG] [Thread-140301] [transport.py] [_log()] starting thread (client mode): 0xa2d9d780
2026-02-12T02:49:56.333 [DEBUG] [Thread-140301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:49:56.353 [DEBUG] [Thread-140301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:49:56.353 [INFO] [Thread-140301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:49:56.356 [DEBUG] [Thread-140301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] client lang: <none>
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] server lang: <none>
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] kex follows: False
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:49:56.357 [DEBUG] [Thread-140301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:49:56.358 [DEBUG] [Thread-140301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:49:56.358 [DEBUG] [Thread-140301] [transport.py] [_log()] Compression: none
2026-02-12T02:49:56.358 [DEBUG] [Thread-140301] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:49:56.375 [DEBUG] [Thread-140301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:49:56.376 [DEBUG] [Thread-140301] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:49:56.376 [DEBUG] [Thread-140301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:49:56.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:49:56.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:49:56.379 [DEBUG] [Thread-140301] [transport.py] [_log()] userauth is OK
2026-02-12T02:49:56.379 [DEBUG] [Thread-140301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:49:56.379 [DEBUG] [Thread-140301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:49:56.379 [DEBUG] [Thread-140301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:49:56.379 [DEBUG] [Thread-140301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:49:56.414 [INFO] [Thread-140301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:49:56.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:49:57.047 [DEBUG] [Thread-140301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:49:57.048 [DEBUG] [Thread-140301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:49:57.048 [DEBUG] [Thread-140301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:49:57.088 [DEBUG] [Thread-140301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:49:57.089 [DEBUG] [Thread-140301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:49:57.092 [DEBUG] [Thread-140301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:49:57.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:49:57.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:49:57.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:49:57.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:49:57.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:49:57.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:49:57.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:49:57.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:49:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:49:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.034159 -999.00  +12.90  11.39     92  +11.60 1 3 1 3 1     0    0 1.37 2.73 ----- 11.4 11.4 182.8 19.0 15.0 -2.0 14.7 -2.0 14.6 -2.1 15.0 -2.0
2026-02-12T02:49:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:49:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:49:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.034159
2026-02-12T02:49:57.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:49:57.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:49:57.121 [DEBUG] [Thread-140301] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:49:57.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:49:57.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:49:57.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:49:57.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:49:14', tmtdew=0.65, humidity=95.97, cloud=0.0, wind=18.4, temperature=12.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:49:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:49:57.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:49:57.217 [DEBUG] [Thread-140304] [transport.py] [_log()] starting thread (client mode): 0xa2d01390
2026-02-12T02:49:57.217 [DEBUG] [Thread-140304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:49:57.231 [DEBUG] [Thread-140304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:49:57.232 [INFO] [Thread-140304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:49:57.239 [DEBUG] [Thread-140304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:49:57.240 [DEBUG] [Thread-140304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:49:57.240 [DEBUG] [Thread-140304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:49:57.240 [DEBUG] [Thread-140304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:57.240 [DEBUG] [Thread-140304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:49:57.240 [DEBUG] [Thread-140304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] client lang: <none>
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] server lang: <none>
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] kex follows: False
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] Compression: none
2026-02-12T02:49:57.241 [DEBUG] [Thread-140304] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:49:57.297 [DEBUG] [Thread-140304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:49:57.298 [DEBUG] [Thread-140304] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:49:57.298 [DEBUG] [Thread-140304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:49:57.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:49:57.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:49:57.353 [DEBUG] [Thread-140304] [transport.py] [_log()] userauth is OK
2026-02-12T02:49:57.354 [DEBUG] [Thread-140304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:49:57.354 [DEBUG] [Thread-140304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:49:57.354 [DEBUG] [Thread-140304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:49:57.354 [DEBUG] [Thread-140304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:49:57.373 [INFO] [Thread-140304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:49:57.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:49:57.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:49:58.175 [DEBUG] [Thread-140304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:49:58.175 [DEBUG] [Thread-140304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:49:58.223 [DEBUG] [Thread-140304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:49:58.223 [DEBUG] [Thread-140304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:49:58.232 [DEBUG] [Thread-140304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:49:58.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:49:58.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:49:58.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:49:58.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:49:58.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:49:58.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:49:58.269 [DEBUG] [Thread-140304] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:50:08.066 [DEBUG] [Thread-140306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:50:10.283 [DEBUG] [Thread-140307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:50:25.346 [DEBUG] [Thread-140308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:50:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:50:28.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:50:28.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:50:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 49, 50), 0.61, 95.94, 0.0, 18.58, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:50:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:49:50
2026-02-12T02:50:30.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:50:31.131 [DEBUG] [Thread-140309] [transport.py] [_log()] starting thread (client mode): 0xa2d01000
2026-02-12T02:50:31.131 [DEBUG] [Thread-140309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:50:31.151 [DEBUG] [Thread-140309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:50:31.151 [INFO] [Thread-140309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] client lang: <none>
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] server lang: <none>
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] kex follows: False
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:50:31.154 [DEBUG] [Thread-140309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:50:31.155 [DEBUG] [Thread-140309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:50:31.155 [DEBUG] [Thread-140309] [transport.py] [_log()] Compression: none
2026-02-12T02:50:31.155 [DEBUG] [Thread-140309] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:50:31.170 [DEBUG] [Thread-140309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:50:31.171 [DEBUG] [Thread-140309] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:50:31.171 [DEBUG] [Thread-140309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:50:31.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:50:31.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:50:31.212 [DEBUG] [Thread-140309] [transport.py] [_log()] userauth is OK
2026-02-12T02:50:31.213 [DEBUG] [Thread-140309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:50:31.213 [DEBUG] [Thread-140309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:50:31.213 [DEBUG] [Thread-140309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:50:31.213 [DEBUG] [Thread-140309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:50:31.238 [INFO] [Thread-140309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:50:31.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:50:31.849 [DEBUG] [Thread-140309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:50:31.849 [DEBUG] [Thread-140309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:50:31.849 [DEBUG] [Thread-140309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:50:31.890 [DEBUG] [Thread-140309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:50:31.891 [DEBUG] [Thread-140309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:50:31.893 [DEBUG] [Thread-140309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:50:31.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:50:31.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:50:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:50:31.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:50:31.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:50:31.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:50:31.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:50:31.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:50:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:50:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.034854 -999.00  +12.90  13.20     92  +11.60 1 3 1 3 1     0    0 1.33 2.32 ----- 13.2 13.2 167.0 19.3 14.9 -2.1 14.8 -1.8 14.6 -2.1 15.0 -2.1
2026-02-12T02:50:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:50:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:50:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.034854
2026-02-12T02:50:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:50:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:50:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:50:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:50:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:50:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:49:50', tmtdew=0.61, humidity=95.94, cloud=0.0, wind=18.58, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:50:11.386', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:50:31.918 [DEBUG] [Thread-140309] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:50:32.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:50:32.014 [DEBUG] [Thread-140312] [transport.py] [_log()] starting thread (client mode): 0xa2d03190
2026-02-12T02:50:32.014 [DEBUG] [Thread-140312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:50:32.028 [DEBUG] [Thread-140312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:50:32.028 [INFO] [Thread-140312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:50:32.036 [DEBUG] [Thread-140312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:50:32.036 [DEBUG] [Thread-140312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] client lang: <none>
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] server lang: <none>
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] kex follows: False
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] Compression: none
2026-02-12T02:50:32.037 [DEBUG] [Thread-140312] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:50:32.095 [DEBUG] [Thread-140312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:50:32.095 [DEBUG] [Thread-140312] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:50:32.096 [DEBUG] [Thread-140312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:50:32.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:50:32.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:50:32.153 [DEBUG] [Thread-140312] [transport.py] [_log()] userauth is OK
2026-02-12T02:50:32.154 [DEBUG] [Thread-140312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:50:32.154 [DEBUG] [Thread-140312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:50:32.154 [DEBUG] [Thread-140312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:50:32.154 [DEBUG] [Thread-140312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:50:32.173 [INFO] [Thread-140312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:50:32.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:50:32.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:50:32.973 [DEBUG] [Thread-140312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:50:32.973 [DEBUG] [Thread-140312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:50:33.021 [DEBUG] [Thread-140312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:50:33.021 [DEBUG] [Thread-140312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:50:33.030 [DEBUG] [Thread-140312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:50:33.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:50:33.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:50:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:50:33.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:50:33.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:50:33.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:50:33.063 [DEBUG] [Thread-140312] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:50:35.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:50:35.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:50:40.385 [DEBUG] [Thread-140314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:50:55.442 [DEBUG] [Thread-140315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:51:03.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:51:03.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:51:03.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
2026-02-12T02:51:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 50, 26), 0.61, 95.91, 0.0, 16.82, 12.72, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:51:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:50:26
2026-02-12T02:51:05.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:51:05.847 [DEBUG] [Thread-140316] [transport.py] [_log()] starting thread (client mode): 0xa2d9dbd0
2026-02-12T02:51:05.847 [DEBUG] [Thread-140316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:51:05.866 [DEBUG] [Thread-140316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:51:05.866 [INFO] [Thread-140316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] client lang: <none>
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] server lang: <none>
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] kex follows: False
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] Compression: none
2026-02-12T02:51:05.868 [DEBUG] [Thread-140316] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:51:05.877 [DEBUG] [Thread-140316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:51:05.878 [DEBUG] [Thread-140316] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:51:05.878 [DEBUG] [Thread-140316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:51:05.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:51:05.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:51:05.880 [DEBUG] [Thread-140316] [transport.py] [_log()] userauth is OK
2026-02-12T02:51:05.880 [DEBUG] [Thread-140316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:51:05.880 [DEBUG] [Thread-140316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:51:05.880 [DEBUG] [Thread-140316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:51:05.880 [DEBUG] [Thread-140316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:51:05.898 [INFO] [Thread-140316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:51:05.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:51:06.553 [DEBUG] [Thread-140316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:51:06.553 [DEBUG] [Thread-140316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:51:06.553 [DEBUG] [Thread-140316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:51:06.594 [DEBUG] [Thread-140316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:51:06.595 [DEBUG] [Thread-140316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:51:06.598 [DEBUG] [Thread-140316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:51:06.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:51:06.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:51:06.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:51:06.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:51:06.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:51:06.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:51:06.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:51:06.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:51:06.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:51:06.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.035201 -999.00  +12.90  14.50     92  +11.60 1 3 1 3 1     0    0 1.31 2.33 ----- 14.5 14.5 175.8 18.2 15.0 -2.3 14.8 -2.0 14.7 -2.1 15.0 -2.1
2026-02-12T02:51:06.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:51:06.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:51:06.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.035201
2026-02-12T02:51:06.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:51:06.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:51:06.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:51:06.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:51:06.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:51:06.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:50:26', tmtdew=0.61, humidity=95.91, cloud=0.0, wind=16.82, temperature=12.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:50:41.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:51:06.626 [DEBUG] [Thread-140316] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:51:06.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:51:06.721 [DEBUG] [Thread-140319] [transport.py] [_log()] starting thread (client mode): 0xa2d9d9f0
2026-02-12T02:51:06.721 [DEBUG] [Thread-140319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:51:06.735 [DEBUG] [Thread-140319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:51:06.735 [INFO] [Thread-140319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:51:06.743 [DEBUG] [Thread-140319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:51:06.743 [DEBUG] [Thread-140319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:51:06.743 [DEBUG] [Thread-140319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] client lang: <none>
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] server lang: <none>
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] kex follows: False
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] Compression: none
2026-02-12T02:51:06.744 [DEBUG] [Thread-140319] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:51:06.802 [DEBUG] [Thread-140319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:51:06.803 [DEBUG] [Thread-140319] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:51:06.803 [DEBUG] [Thread-140319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:51:06.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:51:06.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:51:06.858 [DEBUG] [Thread-140319] [transport.py] [_log()] userauth is OK
2026-02-12T02:51:06.858 [DEBUG] [Thread-140319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:51:06.858 [DEBUG] [Thread-140319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:51:06.858 [DEBUG] [Thread-140319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:51:06.859 [DEBUG] [Thread-140319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:51:06.883 [INFO] [Thread-140319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:51:06.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:51:06.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:51:07.707 [DEBUG] [Thread-140319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:51:07.708 [DEBUG] [Thread-140319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:51:07.755 [DEBUG] [Thread-140319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:51:07.755 [DEBUG] [Thread-140319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:51:07.764 [DEBUG] [Thread-140319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:51:07.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:51:07.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:51:07.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:51:07.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:51:07.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:51:07.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:51:07.800 [DEBUG] [Thread-140319] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:51:08.124 [DEBUG] [Thread-140321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:51:10.477 [DEBUG] [Thread-140322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:51:25.532 [DEBUG] [Thread-140323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:51:35.828 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:51:35.829 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:51:37.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:51:37.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:51:37.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:51:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 51, 2), 0.61, 95.94, 0.0, 19.09, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:51:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:51:02
2026-02-12T02:51:40.569 [DEBUG] [Thread-140324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:51:40.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:51:40.778 [DEBUG] [Thread-140325] [transport.py] [_log()] starting thread (client mode): 0xa2d9dd50
2026-02-12T02:51:40.778 [DEBUG] [Thread-140325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:51:40.798 [DEBUG] [Thread-140325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:51:40.798 [INFO] [Thread-140325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] client lang: <none>
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] server lang: <none>
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] kex follows: False
2026-02-12T02:51:40.801 [DEBUG] [Thread-140325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:51:40.802 [DEBUG] [Thread-140325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:51:40.802 [DEBUG] [Thread-140325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:51:40.802 [DEBUG] [Thread-140325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:51:40.802 [DEBUG] [Thread-140325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:51:40.802 [DEBUG] [Thread-140325] [transport.py] [_log()] Compression: none
2026-02-12T02:51:40.802 [DEBUG] [Thread-140325] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:51:40.820 [DEBUG] [Thread-140325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:51:40.820 [DEBUG] [Thread-140325] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:51:40.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:51:40.822 [DEBUG] [Thread-140325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:51:40.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:51:40.824 [DEBUG] [Thread-140325] [transport.py] [_log()] userauth is OK
2026-02-12T02:51:40.824 [DEBUG] [Thread-140325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:51:40.824 [DEBUG] [Thread-140325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:51:40.824 [DEBUG] [Thread-140325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:51:40.824 [DEBUG] [Thread-140325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:51:40.848 [INFO] [Thread-140325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:51:40.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:51:41.469 [DEBUG] [Thread-140325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:51:41.470 [DEBUG] [Thread-140325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:51:41.470 [DEBUG] [Thread-140325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:51:41.510 [DEBUG] [Thread-140325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:51:41.511 [DEBUG] [Thread-140325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:51:41.514 [DEBUG] [Thread-140325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:51:41.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:51:41.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:51:41.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:51:41.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:51:41.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:51:41.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:51:41.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:51:41.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:51:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:51:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.035548 -999.00  +12.90  14.88     92  +11.60 1 3 1 3 1     0    0 1.33 2.07 ----- 14.9 14.9 179.4 18.4 15.0 -2.1 14.8 -2.1 14.7 -2.0 15.0 -2.0
2026-02-12T02:51:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:51:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:51:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.035548
2026-02-12T02:51:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:51:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:51:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:51:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:51:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:51:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:51:02', tmtdew=0.61, humidity=95.94, cloud=0.0, wind=19.09, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:51:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:51:41.542 [DEBUG] [Thread-140325] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:51:41.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:51:41.640 [DEBUG] [Thread-140328] [transport.py] [_log()] starting thread (client mode): 0xa57c0d00
2026-02-12T02:51:41.640 [DEBUG] [Thread-140328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:51:41.654 [DEBUG] [Thread-140328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:51:41.655 [INFO] [Thread-140328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:51:41.662 [DEBUG] [Thread-140328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] client lang: <none>
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] server lang: <none>
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] kex follows: False
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] Compression: none
2026-02-12T02:51:41.663 [DEBUG] [Thread-140328] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:51:41.720 [DEBUG] [Thread-140328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:51:41.721 [DEBUG] [Thread-140328] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:51:41.721 [DEBUG] [Thread-140328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:51:41.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:51:41.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:51:41.776 [DEBUG] [Thread-140328] [transport.py] [_log()] userauth is OK
2026-02-12T02:51:41.777 [DEBUG] [Thread-140328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:51:41.777 [DEBUG] [Thread-140328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:51:41.777 [DEBUG] [Thread-140328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:51:41.777 [DEBUG] [Thread-140328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:51:41.796 [INFO] [Thread-140328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:51:41.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:51:41.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:51:42.601 [DEBUG] [Thread-140328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:51:42.602 [DEBUG] [Thread-140328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:51:42.649 [DEBUG] [Thread-140328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:51:42.650 [DEBUG] [Thread-140328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:51:42.659 [DEBUG] [Thread-140328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:51:42.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:51:42.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:51:42.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:51:42.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:51:42.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:51:42.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:51:42.696 [DEBUG] [Thread-140328] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:51:55.613 [DEBUG] [Thread-140330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:52:08.217 [DEBUG] [Thread-140331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:52:10.664 [DEBUG] [Thread-140332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:52:12.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:52:12.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:52:12.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:52:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 51, 37), 1.13, 92.81, 0.0, 20.4, 13.13, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:52:14.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:51:37
2026-02-12T02:52:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:52:15.349 [DEBUG] [Thread-140333] [transport.py] [_log()] starting thread (client mode): 0xa5741360
2026-02-12T02:52:15.349 [DEBUG] [Thread-140333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:52:15.368 [DEBUG] [Thread-140333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:52:15.369 [INFO] [Thread-140333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] client lang: <none>
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] server lang: <none>
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] kex follows: False
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:52:15.372 [DEBUG] [Thread-140333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:52:15.373 [DEBUG] [Thread-140333] [transport.py] [_log()] Compression: none
2026-02-12T02:52:15.373 [DEBUG] [Thread-140333] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:52:15.389 [DEBUG] [Thread-140333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:52:15.389 [DEBUG] [Thread-140333] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:52:15.390 [DEBUG] [Thread-140333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:52:15.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:52:15.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:52:15.392 [DEBUG] [Thread-140333] [transport.py] [_log()] userauth is OK
2026-02-12T02:52:15.392 [DEBUG] [Thread-140333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:52:15.392 [DEBUG] [Thread-140333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:52:15.392 [DEBUG] [Thread-140333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:52:15.392 [DEBUG] [Thread-140333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:52:15.416 [INFO] [Thread-140333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:52:15.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:52:16.080 [DEBUG] [Thread-140333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:52:16.080 [DEBUG] [Thread-140333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:52:16.081 [DEBUG] [Thread-140333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:52:16.121 [DEBUG] [Thread-140333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:52:16.122 [DEBUG] [Thread-140333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:52:16.125 [DEBUG] [Thread-140333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:52:16.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:52:16.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:52:16.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:52:16.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:52:16.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:52:16.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:52:16.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:52:16.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:52:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:52:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.035895 -999.00  +12.80  12.55     92  +11.60 1 3 1 3 1     0    0 1.32 1.52 ----- 12.6 12.6 174.4 20.3 15.0 -2.1 14.7 -2.9 14.6 -2.1 14.9 -2.2
2026-02-12T02:52:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:52:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:52:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.035895
2026-02-12T02:52:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:52:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:52:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:52:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:52:16.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:52:16.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:51:37', tmtdew=1.13, humidity=92.81, cloud=0.0, wind=20.4, temperature=13.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:51:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:52:16.151 [DEBUG] [Thread-140333] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:52:16.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:52:16.241 [DEBUG] [Thread-140336] [transport.py] [_log()] starting thread (client mode): 0xa5743d60
2026-02-12T02:52:16.241 [DEBUG] [Thread-140336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:52:16.255 [DEBUG] [Thread-140336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:52:16.255 [INFO] [Thread-140336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:52:16.264 [DEBUG] [Thread-140336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] client lang: <none>
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] server lang: <none>
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] kex follows: False
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] Compression: none
2026-02-12T02:52:16.265 [DEBUG] [Thread-140336] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:52:16.323 [DEBUG] [Thread-140336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:52:16.324 [DEBUG] [Thread-140336] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:52:16.324 [DEBUG] [Thread-140336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:52:16.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:52:16.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:52:16.379 [DEBUG] [Thread-140336] [transport.py] [_log()] userauth is OK
2026-02-12T02:52:16.379 [DEBUG] [Thread-140336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:52:16.379 [DEBUG] [Thread-140336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:52:16.379 [DEBUG] [Thread-140336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:52:16.380 [DEBUG] [Thread-140336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:52:16.403 [INFO] [Thread-140336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:52:16.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:52:16.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:52:17.227 [DEBUG] [Thread-140336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:52:17.228 [DEBUG] [Thread-140336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:52:17.276 [DEBUG] [Thread-140336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:52:17.277 [DEBUG] [Thread-140336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:52:17.286 [DEBUG] [Thread-140336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:52:17.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:52:17.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:52:17.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:52:17.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:52:17.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:52:17.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:52:17.322 [DEBUG] [Thread-140336] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:52:25.696 [DEBUG] [Thread-140338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:52:36.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:52:36.032 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:52:40.746 [DEBUG] [Thread-140339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:52:47.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:52:47.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:52:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:52:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 52, 14), 0.61, 95.9, 0.0, 17.33, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:52:49.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:52:14
2026-02-12T02:52:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:52:49.549 [DEBUG] [Thread-140340] [transport.py] [_log()] starting thread (client mode): 0xa2d01bd0
2026-02-12T02:52:49.549 [DEBUG] [Thread-140340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:52:49.569 [DEBUG] [Thread-140340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:52:49.570 [INFO] [Thread-140340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:52:49.572 [DEBUG] [Thread-140340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:52:49.572 [DEBUG] [Thread-140340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:52:49.572 [DEBUG] [Thread-140340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:52:49.572 [DEBUG] [Thread-140340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:49.572 [DEBUG] [Thread-140340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] client lang: <none>
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] server lang: <none>
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] kex follows: False
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] Compression: none
2026-02-12T02:52:49.573 [DEBUG] [Thread-140340] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:52:49.590 [DEBUG] [Thread-140340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:52:49.591 [DEBUG] [Thread-140340] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:52:49.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:52:49.592 [DEBUG] [Thread-140340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:52:49.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:52:49.594 [DEBUG] [Thread-140340] [transport.py] [_log()] userauth is OK
2026-02-12T02:52:49.594 [DEBUG] [Thread-140340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:52:49.594 [DEBUG] [Thread-140340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:52:49.594 [DEBUG] [Thread-140340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:52:49.594 [DEBUG] [Thread-140340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:52:49.609 [INFO] [Thread-140340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:52:49.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:52:50.217 [DEBUG] [Thread-140340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:52:50.217 [DEBUG] [Thread-140340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:52:50.217 [DEBUG] [Thread-140340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:52:50.258 [DEBUG] [Thread-140340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:52:50.259 [DEBUG] [Thread-140340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:52:50.262 [DEBUG] [Thread-140340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:52:50.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:52:50.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:52:50.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:52:50.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:52:50.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:52:50.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:52:50.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:52:50.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:52:50.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:52:50.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.036242 -999.00  +12.80  10.78     92  +11.60 1 3 1 3 1     0    0 1.30 0.98 ----- 10.8 10.8 178.8 19.2 15.0 -2.3 14.7 -2.7 14.7 -2.1 15.0 -2.1
2026-02-12T02:52:50.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:52:50.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:52:50.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.036242
2026-02-12T02:52:50.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:52:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:52:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:52:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:52:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:52:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:52:14', tmtdew=0.61, humidity=95.9, cloud=0.0, wind=17.33, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:52:11.309', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:52:50.285 [DEBUG] [Thread-140340] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:52:50.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:52:50.384 [DEBUG] [Thread-140343] [transport.py] [_log()] starting thread (client mode): 0xa81d6aa0
2026-02-12T02:52:50.384 [DEBUG] [Thread-140343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:52:50.398 [DEBUG] [Thread-140343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:52:50.399 [INFO] [Thread-140343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:52:50.406 [DEBUG] [Thread-140343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:52:50.406 [DEBUG] [Thread-140343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:52:50.406 [DEBUG] [Thread-140343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:52:50.406 [DEBUG] [Thread-140343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] client lang: <none>
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] server lang: <none>
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] kex follows: False
2026-02-12T02:52:50.407 [DEBUG] [Thread-140343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:52:50.408 [DEBUG] [Thread-140343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:52:50.408 [DEBUG] [Thread-140343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:52:50.408 [DEBUG] [Thread-140343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:52:50.408 [DEBUG] [Thread-140343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:52:50.408 [DEBUG] [Thread-140343] [transport.py] [_log()] Compression: none
2026-02-12T02:52:50.408 [DEBUG] [Thread-140343] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:52:50.465 [DEBUG] [Thread-140343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:52:50.466 [DEBUG] [Thread-140343] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:52:50.466 [DEBUG] [Thread-140343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:52:50.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:52:50.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:52:50.521 [DEBUG] [Thread-140343] [transport.py] [_log()] userauth is OK
2026-02-12T02:52:50.521 [DEBUG] [Thread-140343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:52:50.521 [DEBUG] [Thread-140343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:52:50.521 [DEBUG] [Thread-140343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:52:50.521 [DEBUG] [Thread-140343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:52:50.540 [INFO] [Thread-140343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:52:50.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:52:50.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:52:51.342 [DEBUG] [Thread-140343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:52:51.342 [DEBUG] [Thread-140343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:52:51.389 [DEBUG] [Thread-140343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:52:51.389 [DEBUG] [Thread-140343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:52:51.398 [DEBUG] [Thread-140343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:52:51.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:52:51.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:52:51.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:52:51.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:52:51.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:52:51.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:52:51.437 [DEBUG] [Thread-140343] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:52:55.782 [DEBUG] [Thread-140345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:08.291 [DEBUG] [Thread-140346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:10.836 [DEBUG] [Thread-140347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:21.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:53:21.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:53:21.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
2026-02-12T02:53:23.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 52, 51), 0.61, 95.92, 0.0, 18.93, 12.72, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:53:23.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:52:51
2026-02-12T02:53:24.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:53:24.168 [DEBUG] [Thread-140348] [transport.py] [_log()] starting thread (client mode): 0xa2d97c70
2026-02-12T02:53:24.168 [DEBUG] [Thread-140348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:53:24.189 [DEBUG] [Thread-140348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:53:24.189 [INFO] [Thread-140348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] client lang: <none>
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] server lang: <none>
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] kex follows: False
2026-02-12T02:53:24.192 [DEBUG] [Thread-140348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:53:24.193 [DEBUG] [Thread-140348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:53:24.193 [DEBUG] [Thread-140348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:53:24.193 [DEBUG] [Thread-140348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:53:24.193 [DEBUG] [Thread-140348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:53:24.193 [DEBUG] [Thread-140348] [transport.py] [_log()] Compression: none
2026-02-12T02:53:24.193 [DEBUG] [Thread-140348] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:53:24.210 [DEBUG] [Thread-140348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:53:24.210 [DEBUG] [Thread-140348] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:53:24.210 [DEBUG] [Thread-140348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:53:24.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:53:24.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:53:24.211 [DEBUG] [Thread-140348] [transport.py] [_log()] userauth is OK
2026-02-12T02:53:24.211 [DEBUG] [Thread-140348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:53:24.211 [DEBUG] [Thread-140348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:53:24.211 [DEBUG] [Thread-140348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:53:24.211 [DEBUG] [Thread-140348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:53:24.220 [INFO] [Thread-140348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:53:24.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:53:25.013 [DEBUG] [Thread-140348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:53:25.013 [DEBUG] [Thread-140348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:53:25.014 [DEBUG] [Thread-140348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:53:25.054 [DEBUG] [Thread-140348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:53:25.055 [DEBUG] [Thread-140348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:53:25.058 [DEBUG] [Thread-140348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:53:25.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:53:25.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:53:25.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:53:25.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:53:25.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:53:25.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:53:25.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:53:25.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:53:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:53:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.036590 -999.00  +12.80  14.16     92  +11.60 1 3 1 3 1     0    0 1.30 0.36 ----- 14.2 14.2 167.0 17.6 15.0 -2.0 14.7 -2.8 14.6 -1.8 15.0 -2.0
2026-02-12T02:53:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:53:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:53:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.036590
2026-02-12T02:53:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:53:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:53:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:53:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:53:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:53:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:52:51', tmtdew=0.61, humidity=95.92, cloud=0.0, wind=18.93, temperature=12.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:52:41.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:53:25.087 [DEBUG] [Thread-140348] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:53:25.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:53:25.192 [DEBUG] [Thread-140351] [transport.py] [_log()] starting thread (client mode): 0xa2d03940
2026-02-12T02:53:25.192 [DEBUG] [Thread-140351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:53:25.206 [DEBUG] [Thread-140351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:53:25.207 [INFO] [Thread-140351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:53:25.214 [DEBUG] [Thread-140351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:53:25.214 [DEBUG] [Thread-140351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] client lang: <none>
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] server lang: <none>
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] kex follows: False
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] Compression: none
2026-02-12T02:53:25.215 [DEBUG] [Thread-140351] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:53:25.275 [DEBUG] [Thread-140351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:53:25.276 [DEBUG] [Thread-140351] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:53:25.276 [DEBUG] [Thread-140351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:53:25.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:53:25.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:53:25.331 [DEBUG] [Thread-140351] [transport.py] [_log()] userauth is OK
2026-02-12T02:53:25.331 [DEBUG] [Thread-140351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:53:25.332 [DEBUG] [Thread-140351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:53:25.332 [DEBUG] [Thread-140351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:53:25.332 [DEBUG] [Thread-140351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:53:25.350 [INFO] [Thread-140351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:53:25.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:53:25.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:53:25.874 [DEBUG] [Thread-140353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:26.223 [DEBUG] [Thread-140351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:53:26.223 [DEBUG] [Thread-140351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:53:26.274 [DEBUG] [Thread-140351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:53:26.275 [DEBUG] [Thread-140351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:53:26.289 [DEBUG] [Thread-140351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:53:26.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:53:26.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:53:26.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:53:26.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:53:26.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:53:26.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:53:26.332 [DEBUG] [Thread-140351] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:53:36.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:36.233 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:40.926 [DEBUG] [Thread-140354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:55.965 [DEBUG] [Thread-140355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:53:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:53:56.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:53:56.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:53:58.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 53, 26), 0.61, 95.9, 0.0, 18.7, 12.67, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:53:58.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:53:26
2026-02-12T02:53:58.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:53:58.980 [DEBUG] [Thread-140356] [transport.py] [_log()] starting thread (client mode): 0xa57c24a0
2026-02-12T02:53:58.980 [DEBUG] [Thread-140356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:53:59.001 [DEBUG] [Thread-140356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:53:59.001 [INFO] [Thread-140356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] client lang: <none>
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] server lang: <none>
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] kex follows: False
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:53:59.004 [DEBUG] [Thread-140356] [transport.py] [_log()] Compression: none
2026-02-12T02:53:59.005 [DEBUG] [Thread-140356] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:53:59.018 [DEBUG] [Thread-140356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:53:59.019 [DEBUG] [Thread-140356] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:53:59.019 [DEBUG] [Thread-140356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:53:59.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:53:59.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:53:59.020 [DEBUG] [Thread-140356] [transport.py] [_log()] userauth is OK
2026-02-12T02:53:59.020 [DEBUG] [Thread-140356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:53:59.020 [DEBUG] [Thread-140356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:53:59.021 [DEBUG] [Thread-140356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:53:59.021 [DEBUG] [Thread-140356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:53:59.052 [INFO] [Thread-140356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:53:59.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:53:59.717 [DEBUG] [Thread-140356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:53:59.717 [DEBUG] [Thread-140356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:53:59.717 [DEBUG] [Thread-140356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:53:59.758 [DEBUG] [Thread-140356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:53:59.759 [DEBUG] [Thread-140356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:53:59.762 [DEBUG] [Thread-140356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:53:59.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:53:59.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:53:59.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:53:59.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:53:59.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:53:59.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:53:59.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:53:59.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:53:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:53:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.036937 -999.00  +12.80  11.13     92  +11.60 1 3 1 3 1     0    0 1.27 -0.36 ----- 11.1 11.1 153.6 18.2 15.0 -2.1 14.8 -1.7 14.7 -1.9 15.0 -2.1
2026-02-12T02:53:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:53:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:53:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.036937
2026-02-12T02:53:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:53:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:53:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:53:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:53:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:53:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:53:26', tmtdew=0.61, humidity=95.9, cloud=0.0, wind=18.7, temperature=12.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:53:11.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:53:59.781 [DEBUG] [Thread-140356] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:53:59.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:53:59.875 [DEBUG] [Thread-140359] [transport.py] [_log()] starting thread (client mode): 0xa5741ed0
2026-02-12T02:53:59.875 [DEBUG] [Thread-140359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:53:59.890 [DEBUG] [Thread-140359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:53:59.890 [INFO] [Thread-140359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:53:59.898 [DEBUG] [Thread-140359] [transport.py] [_log()] client lang: <none>
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] server lang: <none>
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] kex follows: False
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] Compression: none
2026-02-12T02:53:59.899 [DEBUG] [Thread-140359] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:53:59.957 [DEBUG] [Thread-140359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:53:59.958 [DEBUG] [Thread-140359] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:53:59.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:53:59.959 [DEBUG] [Thread-140359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:53:59.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:54:00.013 [DEBUG] [Thread-140359] [transport.py] [_log()] userauth is OK
2026-02-12T02:54:00.013 [DEBUG] [Thread-140359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:54:00.013 [DEBUG] [Thread-140359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:54:00.013 [DEBUG] [Thread-140359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:54:00.014 [DEBUG] [Thread-140359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:54:00.033 [INFO] [Thread-140359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:54:00.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:54:00.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:54:00.902 [DEBUG] [Thread-140359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:54:00.903 [DEBUG] [Thread-140359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:54:00.950 [DEBUG] [Thread-140359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:54:00.950 [DEBUG] [Thread-140359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:54:00.960 [DEBUG] [Thread-140359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:54:00.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:54:00.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:54:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:54:00.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:54:00.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:54:00.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:54:00.996 [DEBUG] [Thread-140359] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:54:08.377 [DEBUG] [Thread-140361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:54:11.003 [DEBUG] [Thread-140362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:54:26.057 [DEBUG] [Thread-140363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:54:30.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:54:30.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:54:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:54:32.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 54, 2), 0.61, 95.94, 0.0, 18.44, 12.7, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:54:32.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:54:02
2026-02-12T02:54:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:54:33.354 [DEBUG] [Thread-140364] [transport.py] [_log()] starting thread (client mode): 0xa81d4e80
2026-02-12T02:54:33.354 [DEBUG] [Thread-140364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:54:33.373 [DEBUG] [Thread-140364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:54:33.373 [INFO] [Thread-140364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:54:33.376 [DEBUG] [Thread-140364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] client lang: <none>
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] server lang: <none>
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] kex follows: False
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] Compression: none
2026-02-12T02:54:33.377 [DEBUG] [Thread-140364] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:54:33.394 [DEBUG] [Thread-140364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:54:33.394 [DEBUG] [Thread-140364] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:54:33.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:54:33.395 [DEBUG] [Thread-140364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:54:33.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:54:33.398 [DEBUG] [Thread-140364] [transport.py] [_log()] userauth is OK
2026-02-12T02:54:33.398 [DEBUG] [Thread-140364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:54:33.398 [DEBUG] [Thread-140364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:54:33.398 [DEBUG] [Thread-140364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:54:33.398 [DEBUG] [Thread-140364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:54:33.435 [INFO] [Thread-140364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:54:33.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:54:34.066 [DEBUG] [Thread-140364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:54:34.067 [DEBUG] [Thread-140364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:54:34.067 [DEBUG] [Thread-140364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:54:34.107 [DEBUG] [Thread-140364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:54:34.108 [DEBUG] [Thread-140364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:54:34.111 [DEBUG] [Thread-140364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:54:34.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:54:34.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:54:34.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:54:34.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:54:34.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:54:34.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:54:34.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:54:34.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:54:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:54:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.037631 -999.00  +12.80  14.10     92  +11.60 1 3 1 3 1     0    0 1.22 -0.35 ----- 14.1 14.1 164.8 17.5 15.0 -2.1 14.8 -2.2 14.7 -1.9 15.0 -1.9
2026-02-12T02:54:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:54:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:54:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.037631
2026-02-12T02:54:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:54:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:54:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:54:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:54:34.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:54:34.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:54:02', tmtdew=0.61, humidity=95.94, cloud=0.0, wind=18.44, temperature=12.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:54:11.318', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:54:34.139 [DEBUG] [Thread-140364] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:54:34.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:54:34.234 [DEBUG] [Thread-140367] [transport.py] [_log()] starting thread (client mode): 0xa575a9b0
2026-02-12T02:54:34.235 [DEBUG] [Thread-140367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:54:34.253 [DEBUG] [Thread-140367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:54:34.254 [INFO] [Thread-140367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:54:34.261 [DEBUG] [Thread-140367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] client lang: <none>
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] server lang: <none>
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] kex follows: False
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:54:34.262 [DEBUG] [Thread-140367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:54:34.263 [DEBUG] [Thread-140367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:54:34.263 [DEBUG] [Thread-140367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:54:34.263 [DEBUG] [Thread-140367] [transport.py] [_log()] Compression: none
2026-02-12T02:54:34.263 [DEBUG] [Thread-140367] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:54:34.319 [DEBUG] [Thread-140367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:54:34.320 [DEBUG] [Thread-140367] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:54:34.321 [DEBUG] [Thread-140367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:54:34.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:54:34.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:54:34.376 [DEBUG] [Thread-140367] [transport.py] [_log()] userauth is OK
2026-02-12T02:54:34.376 [DEBUG] [Thread-140367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:54:34.376 [DEBUG] [Thread-140367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:54:34.376 [DEBUG] [Thread-140367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:54:34.376 [DEBUG] [Thread-140367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:54:34.400 [INFO] [Thread-140367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:54:34.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:54:34.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:54:35.214 [DEBUG] [Thread-140367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:54:35.215 [DEBUG] [Thread-140367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:54:35.262 [DEBUG] [Thread-140367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:54:35.262 [DEBUG] [Thread-140367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:54:35.271 [DEBUG] [Thread-140367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:54:35.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:54:35.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:54:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:54:35.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:54:35.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:54:35.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:54:35.308 [DEBUG] [Thread-140367] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:54:36.434 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:54:36.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:54:41.090 [DEBUG] [Thread-140369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:54:56.148 [DEBUG] [Thread-140370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:55:05.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:55:05.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:55:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:55:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 54, 38), 1.1, 92.94, 0.0, 19.69, 13.2, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:55:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:54:38
2026-02-12T02:55:07.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:55:07.674 [DEBUG] [Thread-140371] [transport.py] [_log()] starting thread (client mode): 0xa5742d40
2026-02-12T02:55:07.674 [DEBUG] [Thread-140371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:55:07.692 [DEBUG] [Thread-140371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:55:07.692 [INFO] [Thread-140371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:55:07.695 [DEBUG] [Thread-140371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:55:07.695 [DEBUG] [Thread-140371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:55:07.695 [DEBUG] [Thread-140371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:55:07.695 [DEBUG] [Thread-140371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:07.695 [DEBUG] [Thread-140371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:07.695 [DEBUG] [Thread-140371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] client lang: <none>
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] server lang: <none>
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] kex follows: False
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] Compression: none
2026-02-12T02:55:07.696 [DEBUG] [Thread-140371] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:55:07.703 [DEBUG] [Thread-140371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:55:07.704 [DEBUG] [Thread-140371] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:55:07.704 [DEBUG] [Thread-140371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:55:07.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:55:07.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:55:07.705 [DEBUG] [Thread-140371] [transport.py] [_log()] userauth is OK
2026-02-12T02:55:07.706 [DEBUG] [Thread-140371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:55:07.706 [DEBUG] [Thread-140371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:55:07.706 [DEBUG] [Thread-140371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:55:07.706 [DEBUG] [Thread-140371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:55:07.723 [INFO] [Thread-140371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:55:07.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:55:08.454 [DEBUG] [Thread-140373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:55:11.185 [DEBUG] [Thread-140374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:55:16.852 [DEBUG] [Thread-140371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:55:16.852 [DEBUG] [Thread-140371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:55:16.853 [DEBUG] [Thread-140371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:55:16.893 [DEBUG] [Thread-140371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:55:16.894 [DEBUG] [Thread-140371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:55:16.898 [DEBUG] [Thread-140371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:55:16.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:55:16.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:55:16.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:55:16.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:55:17.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:55:17.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:55:17.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:55:17.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:55:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:55:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.037978 -999.00  +12.80  10.97     92  +11.60 1 3 1 3 1     0    0 1.28 -0.48 ----- 11.0 11.0 160.4 16.2 15.0 -2.1 14.8 -1.8 14.6 -1.8 15.0 -1.9
2026-02-12T02:55:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:55:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:55:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.037978
2026-02-12T02:55:17.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:55:17.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:55:17.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:55:17.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:55:17.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:55:17.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:54:38', tmtdew=1.1, humidity=92.94, cloud=0.0, wind=19.69, temperature=13.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:54:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:55:17.012 [DEBUG] [Thread-140371] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:55:17.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:55:17.114 [DEBUG] [Thread-140376] [transport.py] [_log()] starting thread (client mode): 0xa57422f0
2026-02-12T02:55:17.114 [DEBUG] [Thread-140376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:55:17.131 [DEBUG] [Thread-140376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:55:17.131 [INFO] [Thread-140376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:55:17.146 [DEBUG] [Thread-140376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:55:17.147 [DEBUG] [Thread-140376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:55:17.147 [DEBUG] [Thread-140376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:55:17.147 [DEBUG] [Thread-140376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:17.147 [DEBUG] [Thread-140376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:17.147 [DEBUG] [Thread-140376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] client lang: <none>
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] server lang: <none>
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] kex follows: False
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:55:17.148 [DEBUG] [Thread-140376] [transport.py] [_log()] Compression: none
2026-02-12T02:55:17.149 [DEBUG] [Thread-140376] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:55:17.197 [DEBUG] [Thread-140376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:55:17.198 [DEBUG] [Thread-140376] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:55:17.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:55:17.199 [DEBUG] [Thread-140376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:55:17.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:55:17.254 [DEBUG] [Thread-140376] [transport.py] [_log()] userauth is OK
2026-02-12T02:55:17.254 [DEBUG] [Thread-140376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:55:17.254 [DEBUG] [Thread-140376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:55:17.255 [DEBUG] [Thread-140376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:55:17.255 [DEBUG] [Thread-140376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:55:17.273 [INFO] [Thread-140376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:55:17.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:55:17.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:55:18.118 [DEBUG] [Thread-140376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:55:18.119 [DEBUG] [Thread-140376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:55:18.166 [DEBUG] [Thread-140376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:55:18.166 [DEBUG] [Thread-140376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:55:18.175 [DEBUG] [Thread-140376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:55:18.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:55:18.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:55:18.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
2026-02-12T02:55:18.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:55:18.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:55:18.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:55:18.211 [DEBUG] [Thread-140376] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:55:26.221 [DEBUG] [Thread-140378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:55:36.636 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:55:36.637 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:55:41.273 [DEBUG] [Thread-140379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:55:48.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:55:48.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:55:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:55:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 55, 14), 0.6, 95.97, 0.0, 17.1, 12.7, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:55:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:55:14
2026-02-12T02:55:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:55:50.885 [DEBUG] [Thread-140380] [transport.py] [_log()] starting thread (client mode): 0x9eb06d10
2026-02-12T02:55:50.885 [DEBUG] [Thread-140380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:55:50.905 [DEBUG] [Thread-140380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:55:50.906 [INFO] [Thread-140380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] client lang: <none>
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] server lang: <none>
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] kex follows: False
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] Compression: none
2026-02-12T02:55:50.909 [DEBUG] [Thread-140380] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:55:50.926 [DEBUG] [Thread-140380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:55:50.927 [DEBUG] [Thread-140380] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:55:50.928 [DEBUG] [Thread-140380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:55:50.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:55:50.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:55:50.930 [DEBUG] [Thread-140380] [transport.py] [_log()] userauth is OK
2026-02-12T02:55:50.930 [DEBUG] [Thread-140380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:55:50.930 [DEBUG] [Thread-140380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:55:50.930 [DEBUG] [Thread-140380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:55:50.931 [DEBUG] [Thread-140380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:55:50.953 [INFO] [Thread-140380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:55:50.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:55:51.576 [DEBUG] [Thread-140380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:55:51.576 [DEBUG] [Thread-140380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:55:51.576 [DEBUG] [Thread-140380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:55:51.617 [DEBUG] [Thread-140380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:55:51.618 [DEBUG] [Thread-140380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:55:51.621 [DEBUG] [Thread-140380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:55:51.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:55:51.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:55:51.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:55:51.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:55:51.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:55:51.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:55:51.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:55:51.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:55:51.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:55:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.038326 -999.00  +12.80  17.32     92  +11.60 1 3 1 3 1     0    0 1.20 -0.62 ----- 17.3 17.3 163.6 18.3 15.0 -1.9 14.8 -1.8 14.7 -2.1 15.1 -2.0
2026-02-12T02:55:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:55:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:55:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.038326
2026-02-12T02:55:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:55:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:55:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:55:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:55:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:55:51.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:55:14', tmtdew=0.6, humidity=95.97, cloud=0.0, wind=17.1, temperature=12.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:55:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:55:51.648 [DEBUG] [Thread-140380] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:55:51.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:55:51.747 [DEBUG] [Thread-140383] [transport.py] [_log()] starting thread (client mode): 0xa2d9f0a0
2026-02-12T02:55:51.747 [DEBUG] [Thread-140383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:55:51.761 [DEBUG] [Thread-140383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:55:51.761 [INFO] [Thread-140383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:55:51.769 [DEBUG] [Thread-140383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:55:51.769 [DEBUG] [Thread-140383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:55:51.769 [DEBUG] [Thread-140383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:55:51.769 [DEBUG] [Thread-140383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] client lang: <none>
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] server lang: <none>
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] kex follows: False
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] Compression: none
2026-02-12T02:55:51.770 [DEBUG] [Thread-140383] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:55:51.833 [DEBUG] [Thread-140383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:55:51.834 [DEBUG] [Thread-140383] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:55:51.834 [DEBUG] [Thread-140383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:55:51.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:55:51.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:55:51.888 [DEBUG] [Thread-140383] [transport.py] [_log()] userauth is OK
2026-02-12T02:55:51.888 [DEBUG] [Thread-140383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:55:51.889 [DEBUG] [Thread-140383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:55:51.889 [DEBUG] [Thread-140383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:55:51.889 [DEBUG] [Thread-140383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:55:51.908 [INFO] [Thread-140383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:55:51.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:55:51.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:55:52.735 [DEBUG] [Thread-140383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:55:52.735 [DEBUG] [Thread-140383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:55:52.783 [DEBUG] [Thread-140383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:55:52.784 [DEBUG] [Thread-140383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:55:52.793 [DEBUG] [Thread-140383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:55:52.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:55:52.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:55:52.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:55:52.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:55:52.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:55:52.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:55:52.828 [DEBUG] [Thread-140383] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:55:56.312 [DEBUG] [Thread-140385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:08.527 [DEBUG] [Thread-140386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:11.369 [DEBUG] [Thread-140387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:56:22.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:56:22.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:56:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 55, 49), 0.6, 95.95, 0.0, 16.97, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:56:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:55:49
2026-02-12T02:56:25.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:56:25.308 [DEBUG] [Thread-140388] [transport.py] [_log()] starting thread (client mode): 0xa2d00e80
2026-02-12T02:56:25.308 [DEBUG] [Thread-140388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:56:25.328 [DEBUG] [Thread-140388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:56:25.328 [INFO] [Thread-140388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:56:25.331 [DEBUG] [Thread-140388] [transport.py] [_log()] client lang: <none>
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] server lang: <none>
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] kex follows: False
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] Compression: none
2026-02-12T02:56:25.332 [DEBUG] [Thread-140388] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:56:25.347 [DEBUG] [Thread-140388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:56:25.348 [DEBUG] [Thread-140388] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:56:25.348 [DEBUG] [Thread-140388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:56:25.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:56:25.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:56:25.350 [DEBUG] [Thread-140388] [transport.py] [_log()] userauth is OK
2026-02-12T02:56:25.351 [DEBUG] [Thread-140388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:56:25.351 [DEBUG] [Thread-140388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:56:25.351 [DEBUG] [Thread-140388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:56:25.351 [DEBUG] [Thread-140388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:56:25.375 [INFO] [Thread-140388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:56:25.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:56:26.016 [DEBUG] [Thread-140388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:56:26.016 [DEBUG] [Thread-140388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:56:26.017 [DEBUG] [Thread-140388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:56:26.057 [DEBUG] [Thread-140388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:56:26.058 [DEBUG] [Thread-140388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:56:26.061 [DEBUG] [Thread-140388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:56:26.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:56:26.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:56:26.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:56:26.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:56:26.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:56:26.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:56:26.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:56:26.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:56:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:56:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.038673 -999.00  +12.80  15.65     92  +11.60 1 3 1 3 1     0    0 1.20 -0.95 ----- 15.7 15.7 163.2 19.7 15.0 -2.2 14.8 -1.8 14.7 -2.0 15.0 -2.0
2026-02-12T02:56:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:56:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:56:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.038673
2026-02-12T02:56:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:56:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:56:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:56:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:56:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:56:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:55:49', tmtdew=0.6, humidity=95.95, cloud=0.0, wind=16.97, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:55:41.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:56:26.089 [DEBUG] [Thread-140388] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:56:26.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:56:26.185 [DEBUG] [Thread-140391] [transport.py] [_log()] starting thread (client mode): 0xa5741c60
2026-02-12T02:56:26.186 [DEBUG] [Thread-140391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:56:26.201 [DEBUG] [Thread-140391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:56:26.201 [INFO] [Thread-140391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:56:26.208 [DEBUG] [Thread-140391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] client lang: <none>
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] server lang: <none>
2026-02-12T02:56:26.209 [DEBUG] [Thread-140391] [transport.py] [_log()] kex follows: False
2026-02-12T02:56:26.210 [DEBUG] [Thread-140391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:56:26.210 [DEBUG] [Thread-140391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:56:26.210 [DEBUG] [Thread-140391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:56:26.210 [DEBUG] [Thread-140391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:56:26.210 [DEBUG] [Thread-140391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:56:26.210 [DEBUG] [Thread-140391] [transport.py] [_log()] Compression: none
2026-02-12T02:56:26.210 [DEBUG] [Thread-140391] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:56:26.271 [DEBUG] [Thread-140391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:56:26.271 [DEBUG] [Thread-140391] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:56:26.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:56:26.273 [DEBUG] [Thread-140391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:56:26.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:56:26.327 [DEBUG] [Thread-140391] [transport.py] [_log()] userauth is OK
2026-02-12T02:56:26.327 [DEBUG] [Thread-140391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:56:26.327 [DEBUG] [Thread-140391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:56:26.327 [DEBUG] [Thread-140391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:56:26.327 [DEBUG] [Thread-140391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:56:26.351 [INFO] [Thread-140391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:56:26.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:56:26.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:56:26.405 [DEBUG] [Thread-140393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:27.209 [DEBUG] [Thread-140391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:56:27.210 [DEBUG] [Thread-140391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:56:27.257 [DEBUG] [Thread-140391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:56:27.257 [DEBUG] [Thread-140391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:56:27.267 [DEBUG] [Thread-140391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:56:27.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:56:27.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:56:27.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:56:27.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:56:27.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:56:27.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:56:27.303 [DEBUG] [Thread-140391] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:56:36.842 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:36.844 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:41.455 [DEBUG] [Thread-140394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:56.491 [DEBUG] [Thread-140395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:56:57.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:56:57.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:56:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:56:59.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 56, 25), 0.6, 95.95, 0.0, 16.89, 12.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:56:59.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:56:25
2026-02-12T02:56:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:57:00.005 [DEBUG] [Thread-140396] [transport.py] [_log()] starting thread (client mode): 0xa2d9e320
2026-02-12T02:57:00.005 [DEBUG] [Thread-140396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:57:00.026 [DEBUG] [Thread-140396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:57:00.026 [INFO] [Thread-140396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] client lang: <none>
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] server lang: <none>
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] kex follows: False
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] Compression: none
2026-02-12T02:57:00.028 [DEBUG] [Thread-140396] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:57:00.038 [DEBUG] [Thread-140396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:57:00.039 [DEBUG] [Thread-140396] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:57:00.039 [DEBUG] [Thread-140396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:57:00.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:57:00.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:57:00.041 [DEBUG] [Thread-140396] [transport.py] [_log()] userauth is OK
2026-02-12T02:57:00.041 [DEBUG] [Thread-140396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:57:00.041 [DEBUG] [Thread-140396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:57:00.041 [DEBUG] [Thread-140396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:57:00.042 [DEBUG] [Thread-140396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:57:00.060 [INFO] [Thread-140396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:57:00.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:57:00.690 [DEBUG] [Thread-140396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:57:00.690 [DEBUG] [Thread-140396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:57:00.691 [DEBUG] [Thread-140396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:57:00.731 [DEBUG] [Thread-140396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:57:00.732 [DEBUG] [Thread-140396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:57:00.735 [DEBUG] [Thread-140396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:57:00.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:57:00.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:57:00.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:57:00.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:57:00.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:57:00.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:57:00.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:57:00.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:57:00.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:57:00.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.039020 -999.00  +12.80  15.14     92  +11.50 1 3 1 3 1     0    0 1.26 -1.22 ----- 15.1 15.1 153.8 21.6 15.0 -2.2 14.8 -1.8 14.7 -2.1 15.0 -1.9
2026-02-12T02:57:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:57:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:57:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.039020
2026-02-12T02:57:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:57:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:57:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:57:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:57:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:57:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:56:25', tmtdew=0.6, humidity=95.95, cloud=0.0, wind=16.89, temperature=12.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:56:11.328', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:57:00.761 [DEBUG] [Thread-140396] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:57:00.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:57:00.856 [DEBUG] [Thread-140399] [transport.py] [_log()] starting thread (client mode): 0xa2d01b40
2026-02-12T02:57:00.856 [DEBUG] [Thread-140399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:57:00.870 [DEBUG] [Thread-140399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:57:00.871 [INFO] [Thread-140399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:57:00.878 [DEBUG] [Thread-140399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:57:00.879 [DEBUG] [Thread-140399] [transport.py] [_log()] client lang: <none>
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] server lang: <none>
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] kex follows: False
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:57:00.880 [DEBUG] [Thread-140399] [transport.py] [_log()] Compression: none
2026-02-12T02:57:00.881 [DEBUG] [Thread-140399] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:57:00.940 [DEBUG] [Thread-140399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:57:00.941 [DEBUG] [Thread-140399] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:57:00.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:57:00.942 [DEBUG] [Thread-140399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:57:00.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:57:00.998 [DEBUG] [Thread-140399] [transport.py] [_log()] userauth is OK
2026-02-12T02:57:00.998 [DEBUG] [Thread-140399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:57:00.999 [DEBUG] [Thread-140399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:57:00.999 [DEBUG] [Thread-140399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:57:00.999 [DEBUG] [Thread-140399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:57:01.017 [INFO] [Thread-140399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:57:01.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:57:01.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:57:01.842 [DEBUG] [Thread-140399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:57:01.842 [DEBUG] [Thread-140399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:57:01.890 [DEBUG] [Thread-140399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:57:01.891 [DEBUG] [Thread-140399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:57:01.900 [DEBUG] [Thread-140399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:57:01.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:57:01.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:57:01.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:57:01.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:57:01.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:57:01.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:57:01.937 [DEBUG] [Thread-140399] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:57:08.619 [DEBUG] [Thread-140401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:57:11.531 [DEBUG] [Thread-140402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:57:26.583 [DEBUG] [Thread-140403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:57:31.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:57:31.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:57:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:57:33.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 57), 0.65, 95.99, 0.0, 16.9, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:57:33.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:57:00
2026-02-12T02:57:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:57:34.335 [DEBUG] [Thread-140404] [transport.py] [_log()] starting thread (client mode): 0x9eb054e0
2026-02-12T02:57:34.335 [DEBUG] [Thread-140404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:57:34.355 [DEBUG] [Thread-140404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:57:34.355 [INFO] [Thread-140404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:57:34.358 [DEBUG] [Thread-140404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] client lang: <none>
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] server lang: <none>
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] kex follows: False
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:57:34.359 [DEBUG] [Thread-140404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:57:34.360 [DEBUG] [Thread-140404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:57:34.360 [DEBUG] [Thread-140404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:57:34.360 [DEBUG] [Thread-140404] [transport.py] [_log()] Compression: none
2026-02-12T02:57:34.360 [DEBUG] [Thread-140404] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:57:34.380 [DEBUG] [Thread-140404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:57:34.380 [DEBUG] [Thread-140404] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:57:34.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:57:34.381 [DEBUG] [Thread-140404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:57:34.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:57:34.425 [DEBUG] [Thread-140404] [transport.py] [_log()] userauth is OK
2026-02-12T02:57:34.425 [DEBUG] [Thread-140404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:57:34.425 [DEBUG] [Thread-140404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:57:34.425 [DEBUG] [Thread-140404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:57:34.426 [DEBUG] [Thread-140404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:57:34.458 [INFO] [Thread-140404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:57:34.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:57:35.116 [DEBUG] [Thread-140404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:57:35.116 [DEBUG] [Thread-140404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:57:35.117 [DEBUG] [Thread-140404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:57:35.157 [DEBUG] [Thread-140404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:57:35.158 [DEBUG] [Thread-140404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:57:35.161 [DEBUG] [Thread-140404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:57:35.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:57:35.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:57:35.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:57:35.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:57:35.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:57:35.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:57:35.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:57:35.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:57:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:57:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.039367 -999.00  +12.80  13.19     92  +11.50 1 3 1 3 1     0    0 1.30 -0.75 ----- 13.2 13.2 162.6 20.9 15.0 -2.1 14.8 -1.9 14.6 -2.0 15.1 -2.1
2026-02-12T02:57:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:57:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:57:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.039367
2026-02-12T02:57:35.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:57:35.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:57:35.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:57:35.187 [DEBUG] [Thread-140404] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:57:35.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:57:35.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:57:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:57:00', tmtdew=0.65, humidity=95.99, cloud=0.0, wind=16.9, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:56:41.309', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:57:35.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:57:35.282 [DEBUG] [Thread-140407] [transport.py] [_log()] starting thread (client mode): 0x9eb07250
2026-02-12T02:57:35.282 [DEBUG] [Thread-140407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:57:35.296 [DEBUG] [Thread-140407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:57:35.296 [INFO] [Thread-140407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] client lang: <none>
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] server lang: <none>
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] kex follows: False
2026-02-12T02:57:35.304 [DEBUG] [Thread-140407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:57:35.305 [DEBUG] [Thread-140407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:57:35.305 [DEBUG] [Thread-140407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:57:35.305 [DEBUG] [Thread-140407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:57:35.305 [DEBUG] [Thread-140407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:57:35.305 [DEBUG] [Thread-140407] [transport.py] [_log()] Compression: none
2026-02-12T02:57:35.305 [DEBUG] [Thread-140407] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:57:35.364 [DEBUG] [Thread-140407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:57:35.365 [DEBUG] [Thread-140407] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:57:35.365 [DEBUG] [Thread-140407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:57:35.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:57:35.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:57:35.420 [DEBUG] [Thread-140407] [transport.py] [_log()] userauth is OK
2026-02-12T02:57:35.421 [DEBUG] [Thread-140407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:57:35.421 [DEBUG] [Thread-140407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:57:35.421 [DEBUG] [Thread-140407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:57:35.421 [DEBUG] [Thread-140407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:57:35.439 [INFO] [Thread-140407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:57:35.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:57:35.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:57:36.263 [DEBUG] [Thread-140407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:57:36.263 [DEBUG] [Thread-140407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:57:36.311 [DEBUG] [Thread-140407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:57:36.311 [DEBUG] [Thread-140407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:57:36.324 [DEBUG] [Thread-140407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:57:36.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:57:36.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')
2026-02-12T02:57:36.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
2026-02-12T02:57:36.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:57:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:57:36.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:57:36.363 [DEBUG] [Thread-140407] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:57:37.047 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:57:37.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:57:41.621 [DEBUG] [Thread-140409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:57:56.673 [DEBUG] [Thread-140410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:58:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:58:06.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:58: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
2026-02-12T02:58:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 57, 36), 1.1, 92.94, 0.0, 20.75, 13.2, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:58:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:57:36
2026-02-12T02:58:08.696 [DEBUG] [Thread-140411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:58:08.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:58:09.135 [DEBUG] [Thread-140412] [transport.py] [_log()] starting thread (client mode): 0xa2d029e0
2026-02-12T02:58:09.135 [DEBUG] [Thread-140412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:58:09.156 [DEBUG] [Thread-140412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:58:09.156 [INFO] [Thread-140412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:58:09.159 [DEBUG] [Thread-140412] [transport.py] [_log()] client lang: <none>
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] server lang: <none>
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] kex follows: False
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] Compression: none
2026-02-12T02:58:09.160 [DEBUG] [Thread-140412] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:58:09.177 [DEBUG] [Thread-140412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:58:09.177 [DEBUG] [Thread-140412] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:58:09.178 [DEBUG] [Thread-140412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:58:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:58:09.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:58:09.180 [DEBUG] [Thread-140412] [transport.py] [_log()] userauth is OK
2026-02-12T02:58:09.180 [DEBUG] [Thread-140412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:58:09.180 [DEBUG] [Thread-140412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:58:09.180 [DEBUG] [Thread-140412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:58:09.180 [DEBUG] [Thread-140412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:58:09.195 [INFO] [Thread-140412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:58:09.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:58:10.039 [DEBUG] [Thread-140412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:58:10.039 [DEBUG] [Thread-140412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:58:10.039 [DEBUG] [Thread-140412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:58:10.080 [DEBUG] [Thread-140412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:58:10.080 [DEBUG] [Thread-140412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:58:10.084 [DEBUG] [Thread-140412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:58:10.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:58:10.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:58:10.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:58:10.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:58:10.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:58:10.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:58:10.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:58:10.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:58:10.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:58:10.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.039715 -999.00  +12.80  13.69     92  +11.50 1 3 1 3 1     0    0 1.23 -0.87 ----- 13.7 13.7 176.0 19.2 15.0 -2.1 14.8 -1.9 14.7 -2.0 15.0 -1.9
2026-02-12T02:58:10.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:58:10.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:58:10.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.039715
2026-02-12T02:58:10.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:58:10.111 [DEBUG] [Thread-140412] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:58:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:58:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:58:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:58:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:58:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:57:36', tmtdew=1.1, humidity=92.94, cloud=0.0, wind=20.75, temperature=13.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:57:11.376', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:58:10.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:58:10.206 [DEBUG] [Thread-140415] [transport.py] [_log()] starting thread (client mode): 0xa2d790c0
2026-02-12T02:58:10.206 [DEBUG] [Thread-140415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:58:10.221 [DEBUG] [Thread-140415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:58:10.221 [INFO] [Thread-140415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:58:10.228 [DEBUG] [Thread-140415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:58:10.228 [DEBUG] [Thread-140415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:58:10.228 [DEBUG] [Thread-140415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:58:10.228 [DEBUG] [Thread-140415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:10.228 [DEBUG] [Thread-140415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:10.228 [DEBUG] [Thread-140415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] client lang: <none>
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] server lang: <none>
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] kex follows: False
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] Compression: none
2026-02-12T02:58:10.229 [DEBUG] [Thread-140415] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:58:10.287 [DEBUG] [Thread-140415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:58:10.287 [DEBUG] [Thread-140415] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:58:10.288 [DEBUG] [Thread-140415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:58:10.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:58:10.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:58:10.343 [DEBUG] [Thread-140415] [transport.py] [_log()] userauth is OK
2026-02-12T02:58:10.344 [DEBUG] [Thread-140415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:58:10.344 [DEBUG] [Thread-140415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:58:10.344 [DEBUG] [Thread-140415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:58:10.344 [DEBUG] [Thread-140415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:58:10.362 [INFO] [Thread-140415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:58:10.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:58:10.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:58:11.180 [DEBUG] [Thread-140415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:58:11.180 [DEBUG] [Thread-140415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:58:11.228 [DEBUG] [Thread-140415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:58:11.229 [DEBUG] [Thread-140415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:58:11.238 [DEBUG] [Thread-140415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:58:11.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:58:11.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:58:11.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:58:11.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:58:11.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:58:11.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:58:11.276 [DEBUG] [Thread-140415] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:58:11.713 [DEBUG] [Thread-140417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:58:26.765 [DEBUG] [Thread-140418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:58:37.260 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:58:37.261 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:58:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:58:41.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:58:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:58:41.805 [DEBUG] [Thread-140419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:58:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 58, 13), 0.66, 95.92, 0.0, 18.4, 12.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:58:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:58:13
2026-02-12T02:58:43.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:58:43.650 [DEBUG] [Thread-140420] [transport.py] [_log()] starting thread (client mode): 0xa2d79ea0
2026-02-12T02:58:43.650 [DEBUG] [Thread-140420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:58:43.670 [DEBUG] [Thread-140420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:58:43.671 [INFO] [Thread-140420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] client lang: <none>
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] server lang: <none>
2026-02-12T02:58:43.674 [DEBUG] [Thread-140420] [transport.py] [_log()] kex follows: False
2026-02-12T02:58:43.675 [DEBUG] [Thread-140420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:58:43.675 [DEBUG] [Thread-140420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:58:43.675 [DEBUG] [Thread-140420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:58:43.675 [DEBUG] [Thread-140420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:58:43.675 [DEBUG] [Thread-140420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:58:43.675 [DEBUG] [Thread-140420] [transport.py] [_log()] Compression: none
2026-02-12T02:58:43.675 [DEBUG] [Thread-140420] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:58:43.692 [DEBUG] [Thread-140420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:58:43.693 [DEBUG] [Thread-140420] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:58:43.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:58:43.694 [DEBUG] [Thread-140420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:58:43.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:58:43.696 [DEBUG] [Thread-140420] [transport.py] [_log()] userauth is OK
2026-02-12T02:58:43.696 [DEBUG] [Thread-140420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:58:43.696 [DEBUG] [Thread-140420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:58:43.696 [DEBUG] [Thread-140420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:58:43.696 [DEBUG] [Thread-140420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:58:43.720 [INFO] [Thread-140420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:58:43.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:58:44.361 [DEBUG] [Thread-140420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:58:44.361 [DEBUG] [Thread-140420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:58:44.361 [DEBUG] [Thread-140420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:58:44.402 [DEBUG] [Thread-140420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:58:44.403 [DEBUG] [Thread-140420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:58:44.406 [DEBUG] [Thread-140420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:58:44.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:58:44.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:58:44.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:58:44.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:58:44.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:58:44.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:58:44.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:58:44.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:58:44.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:58:44.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.040409 -999.00  +12.80  13.28     92  +11.50 1 3 1 3 1     0    0 1.24 -0.42 ----- 13.3 13.3 164.6 18.6 15.0 -2.0 14.8 -2.2 14.7 -1.9 15.0 -2.1
2026-02-12T02:58:44.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:58:44.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:58:44.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.040409
2026-02-12T02:58:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:58:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:58:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:58:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:58:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:58:44.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:58:13', tmtdew=0.66, humidity=95.92, cloud=0.0, wind=18.4, temperature=12.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:58:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:58:44.433 [DEBUG] [Thread-140420] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:58:44.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:58:44.528 [DEBUG] [Thread-140423] [transport.py] [_log()] starting thread (client mode): 0xa2d7b760
2026-02-12T02:58:44.529 [DEBUG] [Thread-140423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:58:44.543 [DEBUG] [Thread-140423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:58:44.543 [INFO] [Thread-140423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:58:44.551 [DEBUG] [Thread-140423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:58:44.551 [DEBUG] [Thread-140423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:58:44.551 [DEBUG] [Thread-140423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:58:44.551 [DEBUG] [Thread-140423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:44.551 [DEBUG] [Thread-140423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] client lang: <none>
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] server lang: <none>
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] kex follows: False
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:58:44.552 [DEBUG] [Thread-140423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:58:44.553 [DEBUG] [Thread-140423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:58:44.553 [DEBUG] [Thread-140423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:58:44.553 [DEBUG] [Thread-140423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:58:44.553 [DEBUG] [Thread-140423] [transport.py] [_log()] Compression: none
2026-02-12T02:58:44.553 [DEBUG] [Thread-140423] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:58:44.611 [DEBUG] [Thread-140423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:58:44.612 [DEBUG] [Thread-140423] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:58:44.612 [DEBUG] [Thread-140423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:58:44.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:58:44.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:58:44.670 [DEBUG] [Thread-140423] [transport.py] [_log()] userauth is OK
2026-02-12T02:58:44.670 [DEBUG] [Thread-140423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:58:44.670 [DEBUG] [Thread-140423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:58:44.670 [DEBUG] [Thread-140423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:58:44.670 [DEBUG] [Thread-140423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:58:44.684 [INFO] [Thread-140423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:58:44.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:58:44.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:58:45.485 [DEBUG] [Thread-140423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:58:45.485 [DEBUG] [Thread-140423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:58:45.532 [DEBUG] [Thread-140423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:58:45.533 [DEBUG] [Thread-140423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:58:45.542 [DEBUG] [Thread-140423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:58:45.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:58: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')
2026-02-12T02:58:45.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:58:45.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:58:45.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:58:45.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:58:45.579 [DEBUG] [Thread-140423] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:58:56.842 [DEBUG] [Thread-140425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:59:08.753 [DEBUG] [Thread-140426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:59:11.890 [DEBUG] [Thread-140427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:59:15.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:59:15.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:59:15.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:59:17.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 58, 48), 0.66, 95.92, 0.0, 19.02, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:59:17.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:58:48
2026-02-12T02:59:17.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:59:17.860 [DEBUG] [Thread-140428] [transport.py] [_log()] starting thread (client mode): 0x9eb05870
2026-02-12T02:59:17.860 [DEBUG] [Thread-140428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:59:17.880 [DEBUG] [Thread-140428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:59:17.880 [INFO] [Thread-140428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:59:17.883 [DEBUG] [Thread-140428] [transport.py] [_log()] client lang: <none>
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] server lang: <none>
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] kex follows: False
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] Compression: none
2026-02-12T02:59:17.884 [DEBUG] [Thread-140428] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:59:17.901 [DEBUG] [Thread-140428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:59:17.902 [DEBUG] [Thread-140428] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:59:17.903 [DEBUG] [Thread-140428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:59:17.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:59:17.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:59:17.904 [DEBUG] [Thread-140428] [transport.py] [_log()] userauth is OK
2026-02-12T02:59:17.905 [DEBUG] [Thread-140428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:59:17.905 [DEBUG] [Thread-140428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:59:17.905 [DEBUG] [Thread-140428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:59:17.905 [DEBUG] [Thread-140428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:59:17.929 [INFO] [Thread-140428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:59:17.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:59:18.527 [DEBUG] [Thread-140428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:59:18.527 [DEBUG] [Thread-140428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:59:18.528 [DEBUG] [Thread-140428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:59:18.568 [DEBUG] [Thread-140428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:59:18.569 [DEBUG] [Thread-140428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:59:18.572 [DEBUG] [Thread-140428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:59:18.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:59:18.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:59:18.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:59:18.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:59:18.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:59:18.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:59:18.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:59:18.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:59:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:59:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.040756 -999.00  +12.80  14.52     92  +11.50 1 3 1 3 1     0    0 1.28 -0.05 ----- 14.5 14.5 168.2 17.3 15.0 -2.1 14.8 -1.9 14.7 -2.1 15.1 -2.1
2026-02-12T02:59:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:59:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:59:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.040756
2026-02-12T02:59:18.604 [DEBUG] [Thread-140428] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:59:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:59:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:59:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:59:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:59:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:59:18.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:58:48', tmtdew=0.66, humidity=95.92, cloud=0.0, wind=19.02, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:58:41.318', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:59:18.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:59:18.702 [DEBUG] [Thread-140431] [transport.py] [_log()] starting thread (client mode): 0xa57c1870
2026-02-12T02:59:18.703 [DEBUG] [Thread-140431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:59:18.717 [DEBUG] [Thread-140431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:59:18.717 [INFO] [Thread-140431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] client lang: <none>
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] server lang: <none>
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] kex follows: False
2026-02-12T02:59:18.725 [DEBUG] [Thread-140431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:59:18.726 [DEBUG] [Thread-140431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:59:18.726 [DEBUG] [Thread-140431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:59:18.726 [DEBUG] [Thread-140431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:59:18.726 [DEBUG] [Thread-140431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:59:18.726 [DEBUG] [Thread-140431] [transport.py] [_log()] Compression: none
2026-02-12T02:59:18.726 [DEBUG] [Thread-140431] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:59:18.785 [DEBUG] [Thread-140431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:59:18.786 [DEBUG] [Thread-140431] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:59:18.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:59:18.787 [DEBUG] [Thread-140431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:59:18.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:59:18.841 [DEBUG] [Thread-140431] [transport.py] [_log()] userauth is OK
2026-02-12T02:59:18.842 [DEBUG] [Thread-140431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:59:18.842 [DEBUG] [Thread-140431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:59:18.842 [DEBUG] [Thread-140431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:59:18.842 [DEBUG] [Thread-140431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:59:18.876 [INFO] [Thread-140431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:59:18.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:59:18.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:59:19.674 [DEBUG] [Thread-140431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:59:19.675 [DEBUG] [Thread-140431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:59:19.722 [DEBUG] [Thread-140431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:59:19.723 [DEBUG] [Thread-140431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:59:19.733 [DEBUG] [Thread-140431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:59:19.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:59:19.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:59:19.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:59:19.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:59:19.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:59:19.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:59:19.770 [DEBUG] [Thread-140431] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:59:26.926 [DEBUG] [Thread-140433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:59:37.469 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:59:37.470 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:59:41.977 [DEBUG] [Thread-140434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T02:59:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T02:59:49.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T02:59:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T02:59:51.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 59, 24), 0.66, 95.94, 0.0, 19.25, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T02:59:51.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:59:24
2026-02-12T02:59:52.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T02:59:52.328 [DEBUG] [Thread-140435] [transport.py] [_log()] starting thread (client mode): 0xa2d947c0
2026-02-12T02:59:52.328 [DEBUG] [Thread-140435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:59:52.347 [DEBUG] [Thread-140435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T02:59:52.348 [INFO] [Thread-140435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:59:52.351 [DEBUG] [Thread-140435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] client lang: <none>
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] server lang: <none>
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] kex follows: False
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] Compression: none
2026-02-12T02:59:52.352 [DEBUG] [Thread-140435] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:59:52.373 [DEBUG] [Thread-140435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:59:52.373 [DEBUG] [Thread-140435] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:59:52.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T02:59:52.374 [DEBUG] [Thread-140435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T02:59:52.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:59:52.376 [DEBUG] [Thread-140435] [transport.py] [_log()] userauth is OK
2026-02-12T02:59:52.376 [DEBUG] [Thread-140435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:59:52.377 [DEBUG] [Thread-140435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:59:52.377 [DEBUG] [Thread-140435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T02:59:52.377 [DEBUG] [Thread-140435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:59:52.400 [INFO] [Thread-140435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:59:52.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:59:53.039 [DEBUG] [Thread-140435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:59:53.039 [DEBUG] [Thread-140435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:59:53.039 [DEBUG] [Thread-140435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T02:59:53.080 [DEBUG] [Thread-140435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:59:53.080 [DEBUG] [Thread-140435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:59:53.083 [DEBUG] [Thread-140435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:59:53.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:59:53.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T02:59:53.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T02:59:53.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T02:59:53.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:59:53.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T02:59:53.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:59:53.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:59:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T02:59:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.041103 -999.00  +12.80  15.57     92  +11.50 1 3 1 3 1     0    0 1.28 0.20 ----- 15.6 15.6 162.8 19.1 15.0 -2.2 14.8 -1.9 14.7 -2.0 15.0 -2.1
2026-02-12T02:59:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T02:59:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T02:59:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.041103
2026-02-12T02:59:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T02:59:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T02:59:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T02:59:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T02:59:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T02:59:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:59:24', tmtdew=0.66, humidity=95.94, cloud=0.0, wind=19.25, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:59:11.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T02:59:53.105 [DEBUG] [Thread-140435] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:59:53.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T02:59:53.198 [DEBUG] [Thread-140438] [transport.py] [_log()] starting thread (client mode): 0x9eb06c20
2026-02-12T02:59:53.198 [DEBUG] [Thread-140438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T02:59:53.213 [DEBUG] [Thread-140438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T02:59:53.213 [INFO] [Thread-140438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T02:59:53.224 [DEBUG] [Thread-140438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T02:59:53.224 [DEBUG] [Thread-140438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T02:59:53.224 [DEBUG] [Thread-140438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T02:59:53.224 [DEBUG] [Thread-140438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] client lang: <none>
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] server lang: <none>
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] kex follows: False
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] Compression: none
2026-02-12T02:59:53.225 [DEBUG] [Thread-140438] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T02:59:53.279 [DEBUG] [Thread-140438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T02:59:53.280 [DEBUG] [Thread-140438] [transport.py] [_log()] Switch to new keys ...
2026-02-12T02:59:53.280 [DEBUG] [Thread-140438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T02:59:53.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T02:59:53.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T02:59:53.336 [DEBUG] [Thread-140438] [transport.py] [_log()] userauth is OK
2026-02-12T02:59:53.336 [DEBUG] [Thread-140438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T02:59:53.336 [DEBUG] [Thread-140438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T02:59:53.336 [DEBUG] [Thread-140438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T02:59:53.336 [DEBUG] [Thread-140438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T02:59:53.355 [INFO] [Thread-140438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T02:59:53.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T02:59:53.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T02:59:54.146 [DEBUG] [Thread-140438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T02:59:54.146 [DEBUG] [Thread-140438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T02:59:54.194 [DEBUG] [Thread-140438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T02:59:54.194 [DEBUG] [Thread-140438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T02:59:54.203 [DEBUG] [Thread-140438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T02:59:54.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T02:59:54.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T02:59:54.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T02:59:54.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T02:59:54.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T02:59:54.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T02:59:54.242 [DEBUG] [Thread-140438] [transport.py] [_log()] EOF in transport thread
2026-02-12T02:59:57.014 [DEBUG] [Thread-140440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:08.812 [DEBUG] [Thread-140441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:12.064 [DEBUG] [Thread-140442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:24.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:00:24.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:00:24.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:00:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 2, 59, 59), 0.66, 95.92, 0.0, 16.82, 12.77, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:00:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 02:59:59
2026-02-12T03:00:26.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:00:26.865 [DEBUG] [Thread-140443] [transport.py] [_log()] starting thread (client mode): 0xa2d96950
2026-02-12T03:00:26.865 [DEBUG] [Thread-140443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:00:26.885 [DEBUG] [Thread-140443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:00:26.886 [INFO] [Thread-140443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] client lang: <none>
2026-02-12T03:00:26.889 [DEBUG] [Thread-140443] [transport.py] [_log()] server lang: <none>
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] kex follows: False
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] Compression: none
2026-02-12T03:00:26.890 [DEBUG] [Thread-140443] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:00:26.910 [DEBUG] [Thread-140443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:00:26.910 [DEBUG] [Thread-140443] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:00:26.911 [DEBUG] [Thread-140443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:00:26.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:00:26.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:00:26.913 [DEBUG] [Thread-140443] [transport.py] [_log()] userauth is OK
2026-02-12T03:00:26.914 [DEBUG] [Thread-140443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:00:26.914 [DEBUG] [Thread-140443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:00:26.914 [DEBUG] [Thread-140443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:00:26.914 [DEBUG] [Thread-140443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:00:26.938 [INFO] [Thread-140443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:00:26.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:00:27.097 [DEBUG] [Thread-140445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:27.584 [DEBUG] [Thread-140443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:00:27.585 [DEBUG] [Thread-140443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:00:27.585 [DEBUG] [Thread-140443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:00:27.625 [DEBUG] [Thread-140443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:00:27.625 [DEBUG] [Thread-140443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:00:27.629 [DEBUG] [Thread-140443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:00:27.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:00:27.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:00:27.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:00:27.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:00:27.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:00:27.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:00:27.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:00:27.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:00:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:00:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.041451 -999.00  +12.80  13.50     92  +11.50 1 3 1 3 1     0    0 1.28 0.47 ----- 13.5 13.5 165.2 20.6 15.0 -2.3 14.8 -1.9 14.7 -2.1 15.0 -2.1
2026-02-12T03:00:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:00:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:00:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.041451
2026-02-12T03:00:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:00:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:00:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:00:27.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:00:27.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:00:27.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T02:59:59', tmtdew=0.66, humidity=95.92, cloud=0.0, wind=16.82, temperature=12.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T00:59:41.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:00:27.657 [DEBUG] [Thread-140443] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:00:27.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:00:27.754 [DEBUG] [Thread-140447] [transport.py] [_log()] starting thread (client mode): 0xa57c03a0
2026-02-12T03:00:27.755 [DEBUG] [Thread-140447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:00:27.770 [DEBUG] [Thread-140447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:00:27.770 [INFO] [Thread-140447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:00:27.777 [DEBUG] [Thread-140447] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:00:27.778 [DEBUG] [Thread-140447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:00:27.778 [DEBUG] [Thread-140447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:00:27.778 [DEBUG] [Thread-140447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:00:27.778 [DEBUG] [Thread-140447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:00:27.778 [DEBUG] [Thread-140447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:00:27.778 [DEBUG] [Thread-140447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] client lang: <none>
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] server lang: <none>
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] kex follows: False
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:00:27.779 [DEBUG] [Thread-140447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:00:27.780 [DEBUG] [Thread-140447] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:00:27.780 [DEBUG] [Thread-140447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:00:27.780 [DEBUG] [Thread-140447] [transport.py] [_log()] Compression: none
2026-02-12T03:00:27.780 [DEBUG] [Thread-140447] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:00:27.840 [DEBUG] [Thread-140447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:00:27.841 [DEBUG] [Thread-140447] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:00:27.841 [DEBUG] [Thread-140447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:00:27.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:00:27.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:00:27.899 [DEBUG] [Thread-140447] [transport.py] [_log()] userauth is OK
2026-02-12T03:00:27.900 [DEBUG] [Thread-140447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:00:27.900 [DEBUG] [Thread-140447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:00:27.900 [DEBUG] [Thread-140447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:00:27.900 [DEBUG] [Thread-140447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:00:27.920 [INFO] [Thread-140447] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:00:27.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:00:27.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:00:28.761 [DEBUG] [Thread-140447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:00:28.761 [DEBUG] [Thread-140447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:00:28.808 [DEBUG] [Thread-140447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:00:28.808 [DEBUG] [Thread-140447] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:00:28.818 [DEBUG] [Thread-140447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:00:28.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:00:28.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')
2026-02-12T03:00: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') -> 00000000
2026-02-12T03:00:28.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:00:28.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:00:28.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:00:28.854 [DEBUG] [Thread-140447] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:00:37.673 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:37.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:42.133 [DEBUG] [Thread-140449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:57.188 [DEBUG] [Thread-140450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:00:58.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:00:58.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:00:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:01:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 0, 34), 1.13, 92.78, 0.0, 18.38, 13.13, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:01:00.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:00:34
2026-02-12T03:01:01.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:01:01.234 [DEBUG] [Thread-140451] [transport.py] [_log()] starting thread (client mode): 0xa5759720
2026-02-12T03:01:01.234 [DEBUG] [Thread-140451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:01:01.254 [DEBUG] [Thread-140451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:01:01.254 [INFO] [Thread-140451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] client lang: <none>
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] server lang: <none>
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] kex follows: False
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] Compression: none
2026-02-12T03:01:01.258 [DEBUG] [Thread-140451] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:01:01.276 [DEBUG] [Thread-140451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:01:01.276 [DEBUG] [Thread-140451] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:01:01.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:01:01.276 [DEBUG] [Thread-140451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:01:01.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:01:01.277 [DEBUG] [Thread-140451] [transport.py] [_log()] userauth is OK
2026-02-12T03:01:01.277 [DEBUG] [Thread-140451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:01:01.277 [DEBUG] [Thread-140451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:01:01.277 [DEBUG] [Thread-140451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:01:01.277 [DEBUG] [Thread-140451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:01:01.304 [INFO] [Thread-140451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:01:01.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:01:01.916 [DEBUG] [Thread-140451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:01:01.917 [DEBUG] [Thread-140451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:01:01.917 [DEBUG] [Thread-140451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:01:01.958 [DEBUG] [Thread-140451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:01:01.958 [DEBUG] [Thread-140451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:01:01.960 [DEBUG] [Thread-140451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:01:01.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:01:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:01:01.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:01:01.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:01:01.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:01:01.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:01:01.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:01:01.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:01:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:01:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.041798 -999.00  +12.80  10.75     92  +11.50 1 3 1 3 1     0    0 1.27 0.53 ----- 10.8 10.8 160.8 17.3 15.0 -2.2 14.8 -2.3 14.7 -2.0 15.0 -2.2
2026-02-12T03:01:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:01:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:01:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.041798
2026-02-12T03:01:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:01:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:01:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:01:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:01:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:01:01.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:00:34', tmtdew=1.13, humidity=92.78, cloud=0.0, wind=18.38, temperature=13.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:00:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:01:01.983 [DEBUG] [Thread-140451] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:01:02.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:01:02.080 [DEBUG] [Thread-140454] [transport.py] [_log()] starting thread (client mode): 0xa2d96770
2026-02-12T03:01:02.080 [DEBUG] [Thread-140454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:01:02.094 [DEBUG] [Thread-140454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:01:02.095 [INFO] [Thread-140454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:01:02.102 [DEBUG] [Thread-140454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:01:02.102 [DEBUG] [Thread-140454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:01:02.102 [DEBUG] [Thread-140454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:01:02.102 [DEBUG] [Thread-140454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] client lang: <none>
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] server lang: <none>
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] kex follows: False
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] Compression: none
2026-02-12T03:01:02.103 [DEBUG] [Thread-140454] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:01:02.162 [DEBUG] [Thread-140454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:01:02.162 [DEBUG] [Thread-140454] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:01:02.163 [DEBUG] [Thread-140454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:01:02.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:01:02.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:01:02.218 [DEBUG] [Thread-140454] [transport.py] [_log()] userauth is OK
2026-02-12T03:01:02.218 [DEBUG] [Thread-140454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:01:02.218 [DEBUG] [Thread-140454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:01:02.218 [DEBUG] [Thread-140454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:01:02.218 [DEBUG] [Thread-140454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:01:02.236 [INFO] [Thread-140454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:01:02.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:01:02.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:01:03.059 [DEBUG] [Thread-140454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:01:03.059 [DEBUG] [Thread-140454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:01:03.107 [DEBUG] [Thread-140454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:01:03.107 [DEBUG] [Thread-140454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:01:03.116 [DEBUG] [Thread-140454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:01:03.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:01:03.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:01:03.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:01:03.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:01:03.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:01:03.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:01:03.149 [DEBUG] [Thread-140454] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:01:08.872 [DEBUG] [Thread-140456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:01:12.220 [DEBUG] [Thread-140457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:01:27.272 [DEBUG] [Thread-140458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:01:33.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:01:33.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:01:33.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:01:34.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 1, 10), 0.65, 95.99, 0.0, 15.85, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:01:34.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:01:10
2026-02-12T03:01:35.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:01:35.499 [DEBUG] [Thread-140459] [transport.py] [_log()] starting thread (client mode): 0xa2d7b820
2026-02-12T03:01:35.499 [DEBUG] [Thread-140459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:01:35.520 [DEBUG] [Thread-140459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:01:35.520 [INFO] [Thread-140459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] client lang: <none>
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] server lang: <none>
2026-02-12T03:01:35.524 [DEBUG] [Thread-140459] [transport.py] [_log()] kex follows: False
2026-02-12T03:01:35.525 [DEBUG] [Thread-140459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:01:35.525 [DEBUG] [Thread-140459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:01:35.525 [DEBUG] [Thread-140459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:01:35.525 [DEBUG] [Thread-140459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:01:35.525 [DEBUG] [Thread-140459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:01:35.525 [DEBUG] [Thread-140459] [transport.py] [_log()] Compression: none
2026-02-12T03:01:35.525 [DEBUG] [Thread-140459] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:01:35.546 [DEBUG] [Thread-140459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:01:35.547 [DEBUG] [Thread-140459] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:01:35.547 [DEBUG] [Thread-140459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:01:35.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:01:35.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:01:35.550 [DEBUG] [Thread-140459] [transport.py] [_log()] userauth is OK
2026-02-12T03:01:35.550 [DEBUG] [Thread-140459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:01:35.550 [DEBUG] [Thread-140459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:01:35.551 [DEBUG] [Thread-140459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:01:35.551 [DEBUG] [Thread-140459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:01:35.587 [INFO] [Thread-140459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:01:35.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:01:36.250 [DEBUG] [Thread-140459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:01:36.251 [DEBUG] [Thread-140459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:01:36.251 [DEBUG] [Thread-140459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:01:36.291 [DEBUG] [Thread-140459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:01:36.291 [DEBUG] [Thread-140459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:01:36.294 [DEBUG] [Thread-140459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:01:36.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:01:36.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:01:36.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:01:36.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:01:36.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:01:36.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:01:36.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:01:36.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:01:36.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:01:36.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.042145 -999.00  +12.80  15.54     92  +11.60 1 3 1 3 1     0    0 1.28 0.28 ----- 15.5 15.5 171.6 17.5 15.0 -2.2 14.8 -1.8 14.7 -2.0 15.0 -2.1
2026-02-12T03:01:36.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:01:36.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:01:36.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.042145
2026-02-12T03:01:36.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:01:36.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:01:36.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:01:36.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:01:36.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:01:36.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:01:10', tmtdew=0.65, humidity=95.99, cloud=0.0, wind=15.85, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:00:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:01:36.321 [DEBUG] [Thread-140459] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:01:36.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:01:36.418 [DEBUG] [Thread-140462] [transport.py] [_log()] starting thread (client mode): 0xa2d97a30
2026-02-12T03:01:36.418 [DEBUG] [Thread-140462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:01:36.432 [DEBUG] [Thread-140462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:01:36.432 [INFO] [Thread-140462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] client lang: <none>
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] server lang: <none>
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] kex follows: False
2026-02-12T03:01:36.440 [DEBUG] [Thread-140462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:01:36.441 [DEBUG] [Thread-140462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:01:36.441 [DEBUG] [Thread-140462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:01:36.441 [DEBUG] [Thread-140462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:01:36.441 [DEBUG] [Thread-140462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:01:36.441 [DEBUG] [Thread-140462] [transport.py] [_log()] Compression: none
2026-02-12T03:01:36.441 [DEBUG] [Thread-140462] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:01:36.498 [DEBUG] [Thread-140462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:01:36.498 [DEBUG] [Thread-140462] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:01:36.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:01:36.500 [DEBUG] [Thread-140462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:01:36.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:01:36.554 [DEBUG] [Thread-140462] [transport.py] [_log()] userauth is OK
2026-02-12T03:01:36.554 [DEBUG] [Thread-140462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:01:36.554 [DEBUG] [Thread-140462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:01:36.554 [DEBUG] [Thread-140462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:01:36.554 [DEBUG] [Thread-140462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:01:36.572 [INFO] [Thread-140462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:01:36.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:01:36.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:01:37.386 [DEBUG] [Thread-140462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:01:37.386 [DEBUG] [Thread-140462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:01:37.434 [DEBUG] [Thread-140462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:01:37.435 [DEBUG] [Thread-140462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:01:37.444 [DEBUG] [Thread-140462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:01:37.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:01:37.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:01:37.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:01:37.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:01:37.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:01:37.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:01:37.482 [DEBUG] [Thread-140462] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:01:37.876 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:01:37.877 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:01:42.307 [DEBUG] [Thread-140464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:01:57.367 [DEBUG] [Thread-140465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:02:07.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:02:07.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:02:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:02:08.940 [DEBUG] [Thread-140466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:02:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 1, 45), 0.67, 95.89, 0.0, 18.95, 12.75, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:02:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:01:45
2026-02-12T03:02:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:02:09.838 [DEBUG] [Thread-140467] [transport.py] [_log()] starting thread (client mode): 0xa2d9c1c0
2026-02-12T03:02:09.838 [DEBUG] [Thread-140467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:02:09.857 [DEBUG] [Thread-140467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:02:09.857 [INFO] [Thread-140467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] client lang: <none>
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] server lang: <none>
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] kex follows: False
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] Compression: none
2026-02-12T03:02:09.860 [DEBUG] [Thread-140467] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:02:09.875 [DEBUG] [Thread-140467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:02:09.875 [DEBUG] [Thread-140467] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:02:09.876 [DEBUG] [Thread-140467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:02:09.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:02:09.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:02:09.878 [DEBUG] [Thread-140467] [transport.py] [_log()] userauth is OK
2026-02-12T03:02:09.878 [DEBUG] [Thread-140467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:02:09.878 [DEBUG] [Thread-140467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:02:09.878 [DEBUG] [Thread-140467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:02:09.878 [DEBUG] [Thread-140467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:02:09.897 [INFO] [Thread-140467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:02:09.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:02:10.530 [DEBUG] [Thread-140467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:02:10.530 [DEBUG] [Thread-140467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:02:10.531 [DEBUG] [Thread-140467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:02:10.570 [DEBUG] [Thread-140467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:02:10.570 [DEBUG] [Thread-140467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:02:10.572 [DEBUG] [Thread-140467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:02:10.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:02:10.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:02:10.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:02:10.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:02:10.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:02:10.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:02:10.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:02:10.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:02:10.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:02:10.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.042492 -999.00  +12.80  13.75     91  +11.50 1 3 1 3 1     0    0 1.28 0.31 ----- 13.8 13.8 162.8 19.1 15.0 -2.2 14.8 -1.9 14.7 -2.1 15.0 -2.0
2026-02-12T03:02:10.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:02:10.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:02:10.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.042492
2026-02-12T03:02:10.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:02:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:02:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:02:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:02:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:02:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:01:45', tmtdew=0.67, humidity=95.89, cloud=0.0, wind=18.95, temperature=12.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:01:11.309', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:02:10.589 [DEBUG] [Thread-140467] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:02:10.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:02:10.673 [DEBUG] [Thread-140470] [transport.py] [_log()] starting thread (client mode): 0xa2d78520
2026-02-12T03:02:10.673 [DEBUG] [Thread-140470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:02:10.688 [DEBUG] [Thread-140470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:02:10.688 [INFO] [Thread-140470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:02:10.696 [DEBUG] [Thread-140470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:02:10.696 [DEBUG] [Thread-140470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:02:10.696 [DEBUG] [Thread-140470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:02:10.696 [DEBUG] [Thread-140470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] client lang: <none>
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] server lang: <none>
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] kex follows: False
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] Compression: none
2026-02-12T03:02:10.697 [DEBUG] [Thread-140470] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:02:10.753 [DEBUG] [Thread-140470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:02:10.753 [DEBUG] [Thread-140470] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:02:10.754 [DEBUG] [Thread-140470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:02:10.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:02:10.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:02:10.809 [DEBUG] [Thread-140470] [transport.py] [_log()] userauth is OK
2026-02-12T03:02:10.810 [DEBUG] [Thread-140470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:02:10.810 [DEBUG] [Thread-140470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:02:10.810 [DEBUG] [Thread-140470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:02:10.810 [DEBUG] [Thread-140470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:02:10.829 [INFO] [Thread-140470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:02:10.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:02:10.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:02:11.653 [DEBUG] [Thread-140470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:02:11.653 [DEBUG] [Thread-140470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:02:11.701 [DEBUG] [Thread-140470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:02:11.702 [DEBUG] [Thread-140470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:02:11.711 [DEBUG] [Thread-140470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:02:11.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:02:11.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:02:11.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:02:11.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:02:11.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:02:11.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:02:11.753 [DEBUG] [Thread-140470] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:02:12.402 [DEBUG] [Thread-140472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:02:27.463 [DEBUG] [Thread-140473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:02:38.079 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:02:38.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:02:41.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:02:41.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:02:41.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:02:42.499 [DEBUG] [Thread-140474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:02:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 2, 20), 0.66, 95.9, 0.0, 19.25, 12.8, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:02:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:02:20
2026-02-12T03:02:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:02:44.141 [DEBUG] [Thread-140475] [transport.py] [_log()] starting thread (client mode): 0xa57c03a0
2026-02-12T03:02:44.141 [DEBUG] [Thread-140475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:02:44.163 [DEBUG] [Thread-140475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:02:44.163 [INFO] [Thread-140475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] client lang: <none>
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] server lang: <none>
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] kex follows: False
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] Compression: none
2026-02-12T03:02:44.166 [DEBUG] [Thread-140475] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:02:44.186 [DEBUG] [Thread-140475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:02:44.186 [DEBUG] [Thread-140475] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:02:44.187 [DEBUG] [Thread-140475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:02:44.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:02:44.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:02:44.189 [DEBUG] [Thread-140475] [transport.py] [_log()] userauth is OK
2026-02-12T03:02:44.190 [DEBUG] [Thread-140475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:02:44.190 [DEBUG] [Thread-140475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:02:44.190 [DEBUG] [Thread-140475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:02:44.190 [DEBUG] [Thread-140475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:02:44.226 [INFO] [Thread-140475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:02:44.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:02:45.015 [DEBUG] [Thread-140475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:02:45.016 [DEBUG] [Thread-140475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:02:45.016 [DEBUG] [Thread-140475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:02:45.056 [DEBUG] [Thread-140475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:02:45.056 [DEBUG] [Thread-140475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:02:45.060 [DEBUG] [Thread-140475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:02:45.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:02:45.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:02:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:02:45.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:02:45.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:02:45.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:02:45.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:02:45.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:02:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:02:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.043187 -999.00  +12.80  13.53     91  +11.50 1 3 1 3 1     0    0 1.29 0.33 ----- 13.5 13.5 163.4 16.8 15.0 -2.0 14.8 -1.7 14.7 -2.2 15.1 -2.0
2026-02-12T03:02:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:02:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:02:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.043187
2026-02-12T03:02:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:02:45.085 [DEBUG] [Thread-140475] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:02:45.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:02:45.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:02:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:02:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:02:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:02:20', tmtdew=0.66, humidity=95.9, cloud=0.0, wind=19.25, temperature=12.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:02:11.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:02:45.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:02:45.184 [DEBUG] [Thread-140478] [transport.py] [_log()] starting thread (client mode): 0xa2d7b610
2026-02-12T03:02:45.184 [DEBUG] [Thread-140478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:02:45.198 [DEBUG] [Thread-140478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:02:45.198 [INFO] [Thread-140478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:02:45.206 [DEBUG] [Thread-140478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:02:45.206 [DEBUG] [Thread-140478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:02:45.206 [DEBUG] [Thread-140478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:02:45.206 [DEBUG] [Thread-140478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:45.206 [DEBUG] [Thread-140478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] client lang: <none>
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] server lang: <none>
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] kex follows: False
2026-02-12T03:02:45.207 [DEBUG] [Thread-140478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:02:45.208 [DEBUG] [Thread-140478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:02:45.208 [DEBUG] [Thread-140478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:02:45.208 [DEBUG] [Thread-140478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:02:45.208 [DEBUG] [Thread-140478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:02:45.208 [DEBUG] [Thread-140478] [transport.py] [_log()] Compression: none
2026-02-12T03:02:45.208 [DEBUG] [Thread-140478] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:02:45.269 [DEBUG] [Thread-140478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:02:45.270 [DEBUG] [Thread-140478] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:02:45.271 [DEBUG] [Thread-140478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:02:45.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:02:45.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:02:45.328 [DEBUG] [Thread-140478] [transport.py] [_log()] userauth is OK
2026-02-12T03:02:45.329 [DEBUG] [Thread-140478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:02:45.329 [DEBUG] [Thread-140478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:02:45.329 [DEBUG] [Thread-140478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:02:45.329 [DEBUG] [Thread-140478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:02:45.355 [INFO] [Thread-140478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:02:45.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:02:45.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:02:46.183 [DEBUG] [Thread-140478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:02:46.184 [DEBUG] [Thread-140478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:02:46.231 [DEBUG] [Thread-140478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:02:46.231 [DEBUG] [Thread-140478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:02:46.240 [DEBUG] [Thread-140478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:02:46.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:02:46.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:02:46.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:02:46.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:02:46.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:02:46.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:02:46.275 [DEBUG] [Thread-140478] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:02:57.539 [DEBUG] [Thread-140480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:03:09.029 [DEBUG] [Thread-140481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:03:12.588 [DEBUG] [Thread-140482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:03:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:03:16.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:03:16.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:03:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 2, 55), 0.66, 95.44, 0.0, 16.99, 12.7, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:03:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:02:55
2026-02-12T03:03:18.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:03:18.742 [DEBUG] [Thread-140483] [transport.py] [_log()] starting thread (client mode): 0xa2d790c0
2026-02-12T03:03:18.742 [DEBUG] [Thread-140483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:03:18.761 [DEBUG] [Thread-140483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:03:18.762 [INFO] [Thread-140483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:03:18.765 [DEBUG] [Thread-140483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:03:18.765 [DEBUG] [Thread-140483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:03:18.765 [DEBUG] [Thread-140483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:03:18.765 [DEBUG] [Thread-140483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:18.765 [DEBUG] [Thread-140483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:18.765 [DEBUG] [Thread-140483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:18.765 [DEBUG] [Thread-140483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] client lang: <none>
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] server lang: <none>
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] kex follows: False
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:03:18.766 [DEBUG] [Thread-140483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:03:18.767 [DEBUG] [Thread-140483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:03:18.767 [DEBUG] [Thread-140483] [transport.py] [_log()] Compression: none
2026-02-12T03:03:18.767 [DEBUG] [Thread-140483] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:03:18.784 [DEBUG] [Thread-140483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:03:18.785 [DEBUG] [Thread-140483] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:03:18.786 [DEBUG] [Thread-140483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:03:18.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:03:18.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:03:18.787 [DEBUG] [Thread-140483] [transport.py] [_log()] userauth is OK
2026-02-12T03:03:18.788 [DEBUG] [Thread-140483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:03:18.788 [DEBUG] [Thread-140483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:03:18.788 [DEBUG] [Thread-140483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:03:18.788 [DEBUG] [Thread-140483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:03:18.812 [INFO] [Thread-140483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:03:18.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:03:19.452 [DEBUG] [Thread-140483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:03:19.452 [DEBUG] [Thread-140483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:03:19.453 [DEBUG] [Thread-140483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:03:19.493 [DEBUG] [Thread-140483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:03:19.494 [DEBUG] [Thread-140483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:03:19.497 [DEBUG] [Thread-140483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:03:19.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:03:19.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:03:19.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:03:19.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:03:19.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:03:19.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:03:19.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:03:19.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:03:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:03:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.043534 -999.00  +12.80  16.63     91  +11.50 1 3 1 3 1     0    0 1.27 0.19 ----- 16.6 16.6 166.8 19.7 15.0 -2.2 14.8 -1.9 14.7 -2.1 15.0 -1.9
2026-02-12T03:03:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:03:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:03:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.043534
2026-02-12T03:03:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:03:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:03:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:03:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:03:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:03:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:02:55', tmtdew=0.66, humidity=95.44, cloud=0.0, wind=16.99, temperature=12.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:02:41.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:03:19.522 [DEBUG] [Thread-140483] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:03:19.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:03:19.617 [DEBUG] [Thread-140486] [transport.py] [_log()] starting thread (client mode): 0xa57431c0
2026-02-12T03:03:19.617 [DEBUG] [Thread-140486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:03:19.630 [DEBUG] [Thread-140486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:03:19.630 [INFO] [Thread-140486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:03:19.638 [DEBUG] [Thread-140486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:03:19.638 [DEBUG] [Thread-140486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] client lang: <none>
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] server lang: <none>
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] kex follows: False
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] Compression: none
2026-02-12T03:03:19.639 [DEBUG] [Thread-140486] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:03:19.695 [DEBUG] [Thread-140486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:03:19.696 [DEBUG] [Thread-140486] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:03:19.696 [DEBUG] [Thread-140486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:03:19.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:03:19.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:03:19.751 [DEBUG] [Thread-140486] [transport.py] [_log()] userauth is OK
2026-02-12T03:03:19.752 [DEBUG] [Thread-140486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:03:19.752 [DEBUG] [Thread-140486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:03:19.752 [DEBUG] [Thread-140486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:03:19.752 [DEBUG] [Thread-140486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:03:19.770 [INFO] [Thread-140486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:03:19.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:03:19.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:03:20.597 [DEBUG] [Thread-140486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:03:20.597 [DEBUG] [Thread-140486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:03:20.645 [DEBUG] [Thread-140486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:03:20.645 [DEBUG] [Thread-140486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:03:20.654 [DEBUG] [Thread-140486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:03:20.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:03:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:03:20.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:03:20.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:03:20.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:03:20.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:03:20.688 [DEBUG] [Thread-140486] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:03:27.625 [DEBUG] [Thread-140488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:03:38.280 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:03:38.282 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:03:42.679 [DEBUG] [Thread-140489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:03:50.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:03:50.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:03:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:03:52.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 3, 30), 0.67, 95.39, 0.0, 16.94, 12.67, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:03:52.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:03:30
2026-02-12T03:03:53.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:03:53.351 [DEBUG] [Thread-140490] [transport.py] [_log()] starting thread (client mode): 0xa2d782e0
2026-02-12T03:03:53.351 [DEBUG] [Thread-140490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:03:53.371 [DEBUG] [Thread-140490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:03:53.371 [INFO] [Thread-140490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:03:53.375 [DEBUG] [Thread-140490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:03:53.375 [DEBUG] [Thread-140490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:03:53.375 [DEBUG] [Thread-140490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:03:53.375 [DEBUG] [Thread-140490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] client lang: <none>
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] server lang: <none>
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] kex follows: False
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] Compression: none
2026-02-12T03:03:53.376 [DEBUG] [Thread-140490] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:03:53.393 [DEBUG] [Thread-140490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:03:53.393 [DEBUG] [Thread-140490] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:03:53.394 [DEBUG] [Thread-140490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:03:53.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:03:53.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:03:53.395 [DEBUG] [Thread-140490] [transport.py] [_log()] userauth is OK
2026-02-12T03:03:53.396 [DEBUG] [Thread-140490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:03:53.396 [DEBUG] [Thread-140490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:03:53.396 [DEBUG] [Thread-140490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:03:53.396 [DEBUG] [Thread-140490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:03:53.413 [INFO] [Thread-140490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:03:53.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:03:54.056 [DEBUG] [Thread-140490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:03:54.056 [DEBUG] [Thread-140490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:03:54.056 [DEBUG] [Thread-140490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:03:54.098 [DEBUG] [Thread-140490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:03:54.098 [DEBUG] [Thread-140490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:03:54.100 [DEBUG] [Thread-140490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:03:54.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:03:54.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:03:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:03:54.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:03:54.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:03:54.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:03:54.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:03:54.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:03:54.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:03:54.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.043881 -999.00  +12.80  16.42     91  +11.50 1 3 1 3 1     0    0 1.28 0.24 ----- 16.4 16.4 166.6 19.0 15.0 -2.1 14.8 -1.9 14.7 -2.0 15.0 -2.2
2026-02-12T03:03:54.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.043881
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:03:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:03:30', tmtdew=0.67, humidity=95.39, cloud=0.0, wind=16.94, temperature=12.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:03:11.318', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:03:54.120 [DEBUG] [Thread-140490] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:03:54.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:03:54.206 [DEBUG] [Thread-140493] [transport.py] [_log()] starting thread (client mode): 0xa2d799f0
2026-02-12T03:03:54.207 [DEBUG] [Thread-140493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:03:54.221 [DEBUG] [Thread-140493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:03:54.221 [INFO] [Thread-140493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:03:54.228 [DEBUG] [Thread-140493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:03:54.229 [DEBUG] [Thread-140493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:03:54.229 [DEBUG] [Thread-140493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:03:54.229 [DEBUG] [Thread-140493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:54.229 [DEBUG] [Thread-140493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] client lang: <none>
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] server lang: <none>
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] kex follows: False
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] Compression: none
2026-02-12T03:03:54.230 [DEBUG] [Thread-140493] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:03:54.286 [DEBUG] [Thread-140493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:03:54.287 [DEBUG] [Thread-140493] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:03:54.288 [DEBUG] [Thread-140493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:03:54.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:03:54.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:03:54.343 [DEBUG] [Thread-140493] [transport.py] [_log()] userauth is OK
2026-02-12T03:03:54.343 [DEBUG] [Thread-140493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:03:54.343 [DEBUG] [Thread-140493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:03:54.343 [DEBUG] [Thread-140493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:03:54.343 [DEBUG] [Thread-140493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:03:54.361 [INFO] [Thread-140493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:03:54.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:03:54.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:03:55.230 [DEBUG] [Thread-140493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:03:55.231 [DEBUG] [Thread-140493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:03:55.279 [DEBUG] [Thread-140493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:03:55.279 [DEBUG] [Thread-140493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:03:55.288 [DEBUG] [Thread-140493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:03:55.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:03:55.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:03:55.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:03:55.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:03:55.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:03:55.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:03:55.322 [DEBUG] [Thread-140493] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:03:57.715 [DEBUG] [Thread-140495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:09.122 [DEBUG] [Thread-140496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:12.771 [DEBUG] [Thread-140497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:04:25.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:04:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:04:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 4, 5), 0.67, 95.37, 0.0, 17.29, 12.65, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:04:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:04:05
2026-02-12T03:04:27.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:04:27.747 [DEBUG] [Thread-140498] [transport.py] [_log()] starting thread (client mode): 0xa57717e0
2026-02-12T03:04:27.747 [DEBUG] [Thread-140498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:04:27.769 [DEBUG] [Thread-140498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:04:27.769 [INFO] [Thread-140498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] client lang: <none>
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] server lang: <none>
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] kex follows: False
2026-02-12T03:04:27.772 [DEBUG] [Thread-140498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:04:27.773 [DEBUG] [Thread-140498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:04:27.773 [DEBUG] [Thread-140498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:04:27.773 [DEBUG] [Thread-140498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:04:27.773 [DEBUG] [Thread-140498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:04:27.773 [DEBUG] [Thread-140498] [transport.py] [_log()] Compression: none
2026-02-12T03:04:27.773 [DEBUG] [Thread-140498] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:04:27.782 [DEBUG] [Thread-140498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:04:27.782 [DEBUG] [Thread-140498] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:04:27.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:04:27.783 [DEBUG] [Thread-140498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:04:27.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:04:27.786 [DEBUG] [Thread-140498] [transport.py] [_log()] userauth is OK
2026-02-12T03:04:27.786 [DEBUG] [Thread-140498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:04:27.786 [DEBUG] [Thread-140498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:04:27.786 [DEBUG] [Thread-140498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:04:27.786 [DEBUG] [Thread-140498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:04:27.807 [DEBUG] [Thread-140500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:27.821 [INFO] [Thread-140498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:04:27.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:04:28.379 [DEBUG] [Thread-140498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:04:28.380 [DEBUG] [Thread-140498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:04:28.380 [DEBUG] [Thread-140498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:04:28.420 [DEBUG] [Thread-140498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:04:28.420 [DEBUG] [Thread-140498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:04:28.424 [DEBUG] [Thread-140498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:04:28.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:04:28.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:04:28.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:04:28.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:04:28.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:04:28.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:04:28.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:04:28.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:04:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:04:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.044228 -999.00  +12.80  19.35     92  +11.60 1 3 1 3 1     0    0 1.28 0.37 ----- 19.4 19.4 170.6 20.3 15.0 -2.2 14.8 -1.9 14.7 -2.2 15.1 -1.9
2026-02-12T03:04:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:04:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:04:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.044228
2026-02-12T03:04:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:04:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:04:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:04:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:04:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:04:28.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:04:05', tmtdew=0.67, humidity=95.37, cloud=0.0, wind=17.29, temperature=12.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:03:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:04:28.452 [DEBUG] [Thread-140498] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:04:28.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:04:28.550 [DEBUG] [Thread-140502] [transport.py] [_log()] starting thread (client mode): 0xa57e3c70
2026-02-12T03:04:28.551 [DEBUG] [Thread-140502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:04:28.567 [DEBUG] [Thread-140502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:04:28.568 [INFO] [Thread-140502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:04:28.578 [DEBUG] [Thread-140502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:04:28.578 [DEBUG] [Thread-140502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:04:28.579 [DEBUG] [Thread-140502] [transport.py] [_log()] client lang: <none>
2026-02-12T03:04:28.580 [DEBUG] [Thread-140502] [transport.py] [_log()] server lang: <none>
2026-02-12T03:04:28.580 [DEBUG] [Thread-140502] [transport.py] [_log()] kex follows: False
2026-02-12T03:04:28.580 [DEBUG] [Thread-140502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:04:28.580 [DEBUG] [Thread-140502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:04:28.580 [DEBUG] [Thread-140502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:04:28.580 [DEBUG] [Thread-140502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:04:28.580 [DEBUG] [Thread-140502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:04:28.581 [DEBUG] [Thread-140502] [transport.py] [_log()] Compression: none
2026-02-12T03:04:28.581 [DEBUG] [Thread-140502] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:04:28.636 [DEBUG] [Thread-140502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:04:28.637 [DEBUG] [Thread-140502] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:04:28.637 [DEBUG] [Thread-140502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:04:28.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:04:28.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:04:28.695 [DEBUG] [Thread-140502] [transport.py] [_log()] userauth is OK
2026-02-12T03:04:28.695 [DEBUG] [Thread-140502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:04:28.695 [DEBUG] [Thread-140502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:04:28.695 [DEBUG] [Thread-140502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:04:28.695 [DEBUG] [Thread-140502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:04:28.714 [INFO] [Thread-140502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:04:28.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:04:28.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:04:29.516 [DEBUG] [Thread-140502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:04:29.516 [DEBUG] [Thread-140502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:04:29.564 [DEBUG] [Thread-140502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:04:29.565 [DEBUG] [Thread-140502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:04:29.574 [DEBUG] [Thread-140502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:04:29.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:04:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:04:29.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:04:29.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:04:29.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:04:29.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:04:29.620 [DEBUG] [Thread-140502] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:04:38.487 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:38.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:42.844 [DEBUG] [Thread-140504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:57.885 [DEBUG] [Thread-140505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:04:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:04:59.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:04:59.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:05:01.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 4, 40), 1.12, 92.84, 0.0, 21.42, 13.13, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:05:01.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:04:40
2026-02-12T03:05:02.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:05:02.376 [DEBUG] [Thread-140506] [transport.py] [_log()] starting thread (client mode): 0xa57e0a60
2026-02-12T03:05:02.376 [DEBUG] [Thread-140506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:05:02.396 [DEBUG] [Thread-140506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:05:02.396 [INFO] [Thread-140506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:05:02.399 [DEBUG] [Thread-140506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] client lang: <none>
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] server lang: <none>
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] kex follows: False
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] Compression: none
2026-02-12T03:05:02.400 [DEBUG] [Thread-140506] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:05:02.417 [DEBUG] [Thread-140506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:05:02.417 [DEBUG] [Thread-140506] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:05:02.418 [DEBUG] [Thread-140506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:05:02.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:05:02.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:05:02.420 [DEBUG] [Thread-140506] [transport.py] [_log()] userauth is OK
2026-02-12T03:05:02.420 [DEBUG] [Thread-140506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:05:02.420 [DEBUG] [Thread-140506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:05:02.420 [DEBUG] [Thread-140506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:05:02.420 [DEBUG] [Thread-140506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:05:02.439 [INFO] [Thread-140506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:05:02.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:05:03.334 [DEBUG] [Thread-140506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:05:03.334 [DEBUG] [Thread-140506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:05:03.335 [DEBUG] [Thread-140506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:05:03.375 [DEBUG] [Thread-140506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:05:03.375 [DEBUG] [Thread-140506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:05:03.378 [DEBUG] [Thread-140506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:05:03.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:05:03.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:05:03.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:05:03.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:05:03.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:05:03.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:05:03.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:05:03.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:05:03.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:05:03.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.044576 -999.00  +12.80  10.95     92  +11.60 1 3 1 3 1     0    0 1.27 0.19 ----- 10.9 10.9 159.0 21.2 15.0 -2.4 14.8 -1.8 14.6 -2.0 15.0 -2.1
2026-02-12T03:05:03.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:05:03.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:05:03.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.044576
2026-02-12T03:05:03.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:05:03.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:05:03.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:05:03.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:05:03.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:05:03.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:04:40', tmtdew=1.12, humidity=92.84, cloud=0.0, wind=21.42, temperature=13.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:04:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:05:03.402 [DEBUG] [Thread-140506] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:05:03.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:05:03.502 [DEBUG] [Thread-140509] [transport.py] [_log()] starting thread (client mode): 0xa2d7a470
2026-02-12T03:05:03.502 [DEBUG] [Thread-140509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:05:03.517 [DEBUG] [Thread-140509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:05:03.517 [INFO] [Thread-140509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:05:03.524 [DEBUG] [Thread-140509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:05:03.525 [DEBUG] [Thread-140509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:05:03.525 [DEBUG] [Thread-140509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:05:03.525 [DEBUG] [Thread-140509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:03.525 [DEBUG] [Thread-140509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] client lang: <none>
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] server lang: <none>
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] kex follows: False
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] Compression: none
2026-02-12T03:05:03.526 [DEBUG] [Thread-140509] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:05:03.588 [DEBUG] [Thread-140509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:05:03.588 [DEBUG] [Thread-140509] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:05:03.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:05:03.590 [DEBUG] [Thread-140509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:05:03.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:05:03.645 [DEBUG] [Thread-140509] [transport.py] [_log()] userauth is OK
2026-02-12T03:05:03.646 [DEBUG] [Thread-140509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:05:03.646 [DEBUG] [Thread-140509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:05:03.646 [DEBUG] [Thread-140509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:05:03.646 [DEBUG] [Thread-140509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:05:03.666 [INFO] [Thread-140509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:05:03.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:05:03.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:05:04.482 [DEBUG] [Thread-140509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:05:04.482 [DEBUG] [Thread-140509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:05:04.530 [DEBUG] [Thread-140509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:05:04.530 [DEBUG] [Thread-140509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:05:04.539 [DEBUG] [Thread-140509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:05:04.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:05:04.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:05:04.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:05:04.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:05:04.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:05:04.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:05:04.576 [DEBUG] [Thread-140509] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:05:09.196 [DEBUG] [Thread-140511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:05:12.919 [DEBUG] [Thread-140512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:05:27.962 [DEBUG] [Thread-140513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:05:34.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:05:34.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:05:34.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:05:36.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 5, 15), 0.65, 95.47, 0.0, 18.56, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:05:36.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:05:15
2026-02-12T03:05:36.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:05:36.904 [DEBUG] [Thread-140514] [transport.py] [_log()] starting thread (client mode): 0xa57731f0
2026-02-12T03:05:36.904 [DEBUG] [Thread-140514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:05:36.920 [DEBUG] [Thread-140514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:05:36.920 [INFO] [Thread-140514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] client lang: <none>
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] server lang: <none>
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] kex follows: False
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] Compression: none
2026-02-12T03:05:36.922 [DEBUG] [Thread-140514] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:05:36.934 [DEBUG] [Thread-140514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:05:36.935 [DEBUG] [Thread-140514] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:05:36.935 [DEBUG] [Thread-140514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:05:36.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:05:36.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:05:36.936 [DEBUG] [Thread-140514] [transport.py] [_log()] userauth is OK
2026-02-12T03:05:36.936 [DEBUG] [Thread-140514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:05:36.936 [DEBUG] [Thread-140514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:05:36.936 [DEBUG] [Thread-140514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:05:36.936 [DEBUG] [Thread-140514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:05:36.949 [INFO] [Thread-140514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:05:36.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:05:37.701 [DEBUG] [Thread-140514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:05:37.701 [DEBUG] [Thread-140514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:05:37.701 [DEBUG] [Thread-140514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:05:37.742 [DEBUG] [Thread-140514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:05:37.743 [DEBUG] [Thread-140514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:05:37.746 [DEBUG] [Thread-140514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:05:37.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:05:37.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:05:37.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:05:37.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:05:37.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:05:37.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:05:37.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:05:37.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:05:37.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:05:37.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.044923 -999.00  +12.80  12.97     92  +11.60 1 3 1 3 1     0    0 1.26 0.04 ----- 13.0 13.0 159.0 16.0 15.0 -2.2 14.8 -1.8 14.6 -2.1 15.1 -2.0
2026-02-12T03:05:37.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:05:37.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:05:37.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.044923
2026-02-12T03:05:37.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:05:37.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:05:37.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:05:37.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:05:37.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:05:37.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:05:15', tmtdew=0.65, humidity=95.47, cloud=0.0, wind=18.56, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:04:41.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:05:37.772 [DEBUG] [Thread-140514] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:05:37.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:05:37.872 [DEBUG] [Thread-140517] [transport.py] [_log()] starting thread (client mode): 0xa5741b40
2026-02-12T03:05:37.873 [DEBUG] [Thread-140517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:05:37.887 [DEBUG] [Thread-140517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:05:37.887 [INFO] [Thread-140517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] client lang: <none>
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] server lang: <none>
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] kex follows: False
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] Compression: none
2026-02-12T03:05:37.895 [DEBUG] [Thread-140517] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:05:37.953 [DEBUG] [Thread-140517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:05:37.954 [DEBUG] [Thread-140517] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:05:37.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:05:37.955 [DEBUG] [Thread-140517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:05:37.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:05:38.009 [DEBUG] [Thread-140517] [transport.py] [_log()] userauth is OK
2026-02-12T03:05:38.009 [DEBUG] [Thread-140517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:05:38.009 [DEBUG] [Thread-140517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:05:38.010 [DEBUG] [Thread-140517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:05:38.010 [DEBUG] [Thread-140517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:05:38.028 [INFO] [Thread-140517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:05:38.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:05:38.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:05:38.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:05:38.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:05:38.849 [DEBUG] [Thread-140517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:05:38.849 [DEBUG] [Thread-140517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:05:38.896 [DEBUG] [Thread-140517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:05:38.896 [DEBUG] [Thread-140517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:05:38.905 [DEBUG] [Thread-140517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:05:38.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:05:38.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')
2026-02-12T03:05:38.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:05:38.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:05:38.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:05:38.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:05:38.941 [DEBUG] [Thread-140517] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:05:42.998 [DEBUG] [Thread-140519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:05:58.051 [DEBUG] [Thread-140520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:06:08.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:06:08.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:06:08.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
2026-02-12T03:06:09.274 [DEBUG] [Thread-140521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:06:10.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 5, 50), 0.66, 95.44, 0.0, 17.68, 12.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:06:10.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:05:50
2026-02-12T03:06:11.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:06:11.173 [DEBUG] [Thread-140522] [transport.py] [_log()] starting thread (client mode): 0xa2d9c1c0
2026-02-12T03:06:11.174 [DEBUG] [Thread-140522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:06:11.193 [DEBUG] [Thread-140522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:06:11.194 [INFO] [Thread-140522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] client lang: <none>
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] server lang: <none>
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] kex follows: False
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:06:11.197 [DEBUG] [Thread-140522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:06:11.198 [DEBUG] [Thread-140522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:06:11.198 [DEBUG] [Thread-140522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:06:11.198 [DEBUG] [Thread-140522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:06:11.198 [DEBUG] [Thread-140522] [transport.py] [_log()] Compression: none
2026-02-12T03:06:11.198 [DEBUG] [Thread-140522] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:06:11.215 [DEBUG] [Thread-140522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:06:11.216 [DEBUG] [Thread-140522] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:06:11.217 [DEBUG] [Thread-140522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:06:11.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:06:11.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:06:11.220 [DEBUG] [Thread-140522] [transport.py] [_log()] userauth is OK
2026-02-12T03:06:11.220 [DEBUG] [Thread-140522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:06:11.220 [DEBUG] [Thread-140522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:06:11.220 [DEBUG] [Thread-140522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:06:11.220 [DEBUG] [Thread-140522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:06:11.244 [INFO] [Thread-140522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:06:11.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:06:11.894 [DEBUG] [Thread-140522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:06:11.894 [DEBUG] [Thread-140522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:06:11.895 [DEBUG] [Thread-140522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:06:11.935 [DEBUG] [Thread-140522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:06:11.936 [DEBUG] [Thread-140522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:06:11.939 [DEBUG] [Thread-140522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:06:11.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:06:11.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:06:11.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:06:11.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:06:11.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:06:11.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:06:11.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:06:11.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:06:11.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:06:11.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.045270 -999.00  +12.90  13.51     92  +11.60 1 3 1 3 1     0    0 1.27 -0.03 ----- 13.5 13.5 163.6 18.3 15.0 -2.2 14.8 -2.0 14.6 -2.2 15.0 -2.0
2026-02-12T03:06:11.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:06:11.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:06:11.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.045270
2026-02-12T03:06:11.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:06:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:06:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:06:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:06:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:06:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:05:50', tmtdew=0.66, humidity=95.44, cloud=0.0, wind=17.68, temperature=12.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:05:11.328', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:06:11.967 [DEBUG] [Thread-140522] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:06:12.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:06:12.062 [DEBUG] [Thread-140525] [transport.py] [_log()] starting thread (client mode): 0xa2d9d9f0
2026-02-12T03:06:12.062 [DEBUG] [Thread-140525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:06:12.076 [DEBUG] [Thread-140525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:06:12.076 [INFO] [Thread-140525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] client lang: <none>
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] server lang: <none>
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] kex follows: False
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:06:12.084 [DEBUG] [Thread-140525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:06:12.085 [DEBUG] [Thread-140525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:06:12.085 [DEBUG] [Thread-140525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:06:12.085 [DEBUG] [Thread-140525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:06:12.085 [DEBUG] [Thread-140525] [transport.py] [_log()] Compression: none
2026-02-12T03:06:12.085 [DEBUG] [Thread-140525] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:06:12.144 [DEBUG] [Thread-140525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:06:12.145 [DEBUG] [Thread-140525] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:06:12.145 [DEBUG] [Thread-140525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:06:12.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:06:12.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:06:12.200 [DEBUG] [Thread-140525] [transport.py] [_log()] userauth is OK
2026-02-12T03:06:12.200 [DEBUG] [Thread-140525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:06:12.201 [DEBUG] [Thread-140525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:06:12.201 [DEBUG] [Thread-140525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:06:12.201 [DEBUG] [Thread-140525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:06:12.223 [INFO] [Thread-140525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:06:12.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:06:12.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:06:13.033 [DEBUG] [Thread-140525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:06:13.033 [DEBUG] [Thread-140525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:06:13.081 [DEBUG] [Thread-140525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:06:13.081 [DEBUG] [Thread-140525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:06:13.086 [DEBUG] [Thread-140527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:06:13.090 [DEBUG] [Thread-140525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:06:13.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:06:13.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:06:13.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:06:13.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:06:13.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:06:13.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:06:13.124 [DEBUG] [Thread-140525] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:06:28.139 [DEBUG] [Thread-140528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:06:38.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:06:38.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:06:43.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:06:43.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:06:43.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:06:43.176 [DEBUG] [Thread-140529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:06:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 6, 25), 0.67, 95.37, 0.0, 17.98, 12.8, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:06:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:06:25
2026-02-12T03:06:45.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:06:45.514 [DEBUG] [Thread-140530] [transport.py] [_log()] starting thread (client mode): 0xa5740e80
2026-02-12T03:06:45.514 [DEBUG] [Thread-140530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:06:45.534 [DEBUG] [Thread-140530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:06:45.534 [INFO] [Thread-140530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:06:45.537 [DEBUG] [Thread-140530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] client lang: <none>
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] server lang: <none>
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] kex follows: False
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:06:45.538 [DEBUG] [Thread-140530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:06:45.539 [DEBUG] [Thread-140530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:06:45.539 [DEBUG] [Thread-140530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:06:45.539 [DEBUG] [Thread-140530] [transport.py] [_log()] Compression: none
2026-02-12T03:06:45.539 [DEBUG] [Thread-140530] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:06:45.557 [DEBUG] [Thread-140530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:06:45.558 [DEBUG] [Thread-140530] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:06:45.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:06:45.560 [DEBUG] [Thread-140530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:06:45.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:06:45.563 [DEBUG] [Thread-140530] [transport.py] [_log()] userauth is OK
2026-02-12T03:06:45.563 [DEBUG] [Thread-140530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:06:45.563 [DEBUG] [Thread-140530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:06:45.563 [DEBUG] [Thread-140530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:06:45.563 [DEBUG] [Thread-140530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:06:45.583 [INFO] [Thread-140530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:06:45.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:06:46.326 [DEBUG] [Thread-140530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:06:46.327 [DEBUG] [Thread-140530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:06:46.327 [DEBUG] [Thread-140530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:06:46.367 [DEBUG] [Thread-140530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:06:46.367 [DEBUG] [Thread-140530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:06:46.369 [DEBUG] [Thread-140530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:06:46.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:06:46.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:06:46.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:06:46.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:06:46.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:06:46.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:06:46.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:06:46.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:06:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:06:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.045964 -999.00  +12.80  16.15     92  +11.60 1 3 1 3 1     0    0 1.26 -0.14 ----- 16.1 16.1 162.6 20.0 15.0 -2.1 14.8 -1.9 14.6 -2.1 15.0 -2.0
2026-02-12T03:06:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:06:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:06:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.045964
2026-02-12T03:06:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:06:46.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:06:46.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:06:46.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:06:46.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:06:46.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:06:25', tmtdew=0.67, humidity=95.37, cloud=0.0, wind=17.98, temperature=12.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:06:11.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:06:46.396 [DEBUG] [Thread-140530] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:06:46.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:06:46.484 [DEBUG] [Thread-140533] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-12T03:06:46.484 [DEBUG] [Thread-140533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:06:46.499 [DEBUG] [Thread-140533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:06:46.499 [INFO] [Thread-140533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:06:46.508 [DEBUG] [Thread-140533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:06:46.508 [DEBUG] [Thread-140533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:06:46.508 [DEBUG] [Thread-140533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:06:46.508 [DEBUG] [Thread-140533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:46.508 [DEBUG] [Thread-140533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] client lang: <none>
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] server lang: <none>
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] kex follows: False
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] Compression: none
2026-02-12T03:06:46.509 [DEBUG] [Thread-140533] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:06:46.567 [DEBUG] [Thread-140533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:06:46.568 [DEBUG] [Thread-140533] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:06:46.569 [DEBUG] [Thread-140533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:06:46.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:06:46.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:06:46.628 [DEBUG] [Thread-140533] [transport.py] [_log()] userauth is OK
2026-02-12T03:06:46.628 [DEBUG] [Thread-140533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:06:46.628 [DEBUG] [Thread-140533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:06:46.629 [DEBUG] [Thread-140533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:06:46.629 [DEBUG] [Thread-140533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:06:46.650 [INFO] [Thread-140533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:06:46.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:06:46.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:06:47.493 [DEBUG] [Thread-140533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:06:47.493 [DEBUG] [Thread-140533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:06:47.540 [DEBUG] [Thread-140533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:06:47.541 [DEBUG] [Thread-140533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:06:47.549 [DEBUG] [Thread-140533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:06:47.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:06:47.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:06:47.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:06:47.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:06:47.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:06:47.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:06:47.582 [DEBUG] [Thread-140533] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:06:58.215 [DEBUG] [Thread-140535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:07:09.352 [DEBUG] [Thread-140536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:07:13.273 [DEBUG] [Thread-140537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:07:17.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:07:17.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:07:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:07:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 7, 1), 0.67, 95.39, 0.0, 16.75, 12.82, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:07:19.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:07:01
2026-02-12T03:07:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:07:19.997 [DEBUG] [Thread-140538] [transport.py] [_log()] starting thread (client mode): 0xa57c0ca0
2026-02-12T03:07:19.997 [DEBUG] [Thread-140538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:07:20.017 [DEBUG] [Thread-140538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:07:20.017 [INFO] [Thread-140538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] client lang: <none>
2026-02-12T03:07:20.020 [DEBUG] [Thread-140538] [transport.py] [_log()] server lang: <none>
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] kex follows: False
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] Compression: none
2026-02-12T03:07:20.021 [DEBUG] [Thread-140538] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:07:20.037 [DEBUG] [Thread-140538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:07:20.037 [DEBUG] [Thread-140538] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:07:20.038 [DEBUG] [Thread-140538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:07:20.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:07:20.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:07:20.040 [DEBUG] [Thread-140538] [transport.py] [_log()] userauth is OK
2026-02-12T03:07:20.040 [DEBUG] [Thread-140538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:07:20.040 [DEBUG] [Thread-140538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:07:20.040 [DEBUG] [Thread-140538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:07:20.040 [DEBUG] [Thread-140538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:07:20.063 [INFO] [Thread-140538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:07:20.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:07:20.723 [DEBUG] [Thread-140538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:07:20.724 [DEBUG] [Thread-140538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:07:20.724 [DEBUG] [Thread-140538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:07:20.764 [DEBUG] [Thread-140538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:07:20.764 [DEBUG] [Thread-140538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:07:20.767 [DEBUG] [Thread-140538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:07:20.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:07:20.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:07:20.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:07:20.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:07:20.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:07:20.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:07:20.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:07:20.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:07:20.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:07:20.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.046312 -999.00  +12.80  14.06     92  +11.50 1 3 1 3 1     0    0 1.26 -0.15 ----- 14.1 14.1 164.8 19.3 15.0 -2.2 14.8 -1.8 14.7 -2.1 15.0 -2.1
2026-02-12T03:07:20.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:07:20.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:07:20.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.046312
2026-02-12T03:07:20.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:07:20.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:07:20.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:07:20.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:07:20.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:07:20.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:07:01', tmtdew=0.67, humidity=95.39, cloud=0.0, wind=16.75, temperature=12.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:06:41.357', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:07:20.792 [DEBUG] [Thread-140538] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:07:20.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:07:20.882 [DEBUG] [Thread-140541] [transport.py] [_log()] starting thread (client mode): 0xa2d7a890
2026-02-12T03:07:20.882 [DEBUG] [Thread-140541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:07:20.896 [DEBUG] [Thread-140541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:07:20.896 [INFO] [Thread-140541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:07:20.904 [DEBUG] [Thread-140541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:07:20.904 [DEBUG] [Thread-140541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] client lang: <none>
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] server lang: <none>
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] kex follows: False
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] Compression: none
2026-02-12T03:07:20.905 [DEBUG] [Thread-140541] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:07:20.967 [DEBUG] [Thread-140541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:07:20.968 [DEBUG] [Thread-140541] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:07:20.968 [DEBUG] [Thread-140541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:07:20.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:07:20.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:07:21.022 [DEBUG] [Thread-140541] [transport.py] [_log()] userauth is OK
2026-02-12T03:07:21.022 [DEBUG] [Thread-140541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:07:21.023 [DEBUG] [Thread-140541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:07:21.023 [DEBUG] [Thread-140541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:07:21.023 [DEBUG] [Thread-140541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:07:21.036 [INFO] [Thread-140541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:07:21.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:07:21.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:07:21.864 [DEBUG] [Thread-140541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:07:21.865 [DEBUG] [Thread-140541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:07:21.912 [DEBUG] [Thread-140541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:07:21.913 [DEBUG] [Thread-140541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:07:21.922 [DEBUG] [Thread-140541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:07:21.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:07:21.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:07:21.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:07:21.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:07:21.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:07:21.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:07:21.959 [DEBUG] [Thread-140541] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:07:28.304 [DEBUG] [Thread-140543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:07:39.125 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:07:39.127 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:07:43.362 [DEBUG] [Thread-140544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:07:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:07:51.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:07:51.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:07:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 7, 37), 1.13, 92.78, 0.0, 21.31, 13.27, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:07:53.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:07:37
2026-02-12T03:07:54.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:07:54.439 [DEBUG] [Thread-140545] [transport.py] [_log()] starting thread (client mode): 0xa57e3610
2026-02-12T03:07:54.439 [DEBUG] [Thread-140545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:07:54.460 [DEBUG] [Thread-140545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:07:54.460 [INFO] [Thread-140545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] client lang: <none>
2026-02-12T03:07:54.464 [DEBUG] [Thread-140545] [transport.py] [_log()] server lang: <none>
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] kex follows: False
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] Compression: none
2026-02-12T03:07:54.465 [DEBUG] [Thread-140545] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:07:54.483 [DEBUG] [Thread-140545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:07:54.484 [DEBUG] [Thread-140545] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:07:54.485 [DEBUG] [Thread-140545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:07:54.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:07:54.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:07:54.487 [DEBUG] [Thread-140545] [transport.py] [_log()] userauth is OK
2026-02-12T03:07:54.488 [DEBUG] [Thread-140545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:07:54.488 [DEBUG] [Thread-140545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:07:54.488 [DEBUG] [Thread-140545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:07:54.488 [DEBUG] [Thread-140545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:07:54.523 [INFO] [Thread-140545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:07:54.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:07:55.154 [DEBUG] [Thread-140545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:07:55.154 [DEBUG] [Thread-140545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:07:55.154 [DEBUG] [Thread-140545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:07:55.195 [DEBUG] [Thread-140545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:07:55.195 [DEBUG] [Thread-140545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:07:55.197 [DEBUG] [Thread-140545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:07:55.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:07:55.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:07:55.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:07:55.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:07:55.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:07:55.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:07:55.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.046659 -999.00  +12.80  13.29     92  +11.60 1 3 1 3 1     0    0 1.27 -0.32 ----- 13.3 13.3 164.2 17.0 15.0 -2.1 14.8 -1.9 14.7 -2.2 15.0 -2.2
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.046659
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:07:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:07:37', tmtdew=1.13, humidity=92.78, cloud=0.0, wind=21.31, temperature=13.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:07:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:07:55.218 [DEBUG] [Thread-140545] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:07:55.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:07:55.322 [DEBUG] [Thread-140548] [transport.py] [_log()] starting thread (client mode): 0xa2d03fd0
2026-02-12T03:07:55.322 [DEBUG] [Thread-140548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:07:55.336 [DEBUG] [Thread-140548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:07:55.336 [INFO] [Thread-140548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] client lang: <none>
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] server lang: <none>
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] kex follows: False
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] Compression: none
2026-02-12T03:07:55.344 [DEBUG] [Thread-140548] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:07:55.401 [DEBUG] [Thread-140548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:07:55.401 [DEBUG] [Thread-140548] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:07:55.401 [DEBUG] [Thread-140548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:07:55.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:07:55.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:07:55.458 [DEBUG] [Thread-140548] [transport.py] [_log()] userauth is OK
2026-02-12T03:07:55.459 [DEBUG] [Thread-140548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:07:55.459 [DEBUG] [Thread-140548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:07:55.459 [DEBUG] [Thread-140548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:07:55.459 [DEBUG] [Thread-140548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:07:55.478 [INFO] [Thread-140548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:07:55.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:07:55.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:07:56.299 [DEBUG] [Thread-140548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:07:56.300 [DEBUG] [Thread-140548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:07:56.347 [DEBUG] [Thread-140548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:07:56.348 [DEBUG] [Thread-140548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:07:56.357 [DEBUG] [Thread-140548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:07:56.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:07:56.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:07:56.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
2026-02-12T03:07:56.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:07:56.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:07:56.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:07:56.393 [DEBUG] [Thread-140548] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:07:58.397 [DEBUG] [Thread-140550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:08:09.408 [DEBUG] [Thread-140551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:08:13.449 [DEBUG] [Thread-140552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:08:26.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:08:26.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:08:26.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:08:28.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 8, 13), 0.72, 95.39, 0.0, 18.81, 12.8, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:08:28.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:08:13
2026-02-12T03:08:28.486 [DEBUG] [Thread-140553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:08:28.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:08:28.850 [DEBUG] [Thread-140554] [transport.py] [_log()] starting thread (client mode): 0xa2d9d9f0
2026-02-12T03:08:28.850 [DEBUG] [Thread-140554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:08:28.870 [DEBUG] [Thread-140554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:08:28.871 [INFO] [Thread-140554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:08:28.873 [DEBUG] [Thread-140554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] client lang: <none>
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] server lang: <none>
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] kex follows: False
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] Compression: none
2026-02-12T03:08:28.874 [DEBUG] [Thread-140554] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:08:28.896 [DEBUG] [Thread-140554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:08:28.897 [DEBUG] [Thread-140554] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:08:28.898 [DEBUG] [Thread-140554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:08:28.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:08:28.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:08:28.900 [DEBUG] [Thread-140554] [transport.py] [_log()] userauth is OK
2026-02-12T03:08:28.900 [DEBUG] [Thread-140554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:08:28.901 [DEBUG] [Thread-140554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:08:28.901 [DEBUG] [Thread-140554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:08:28.901 [DEBUG] [Thread-140554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:08:28.939 [INFO] [Thread-140554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:08:28.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:08:29.527 [DEBUG] [Thread-140554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:08:29.528 [DEBUG] [Thread-140554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:08:29.528 [DEBUG] [Thread-140554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:08:29.568 [DEBUG] [Thread-140554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:08:29.569 [DEBUG] [Thread-140554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:08:29.572 [DEBUG] [Thread-140554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:08:29.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:08:29.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:08:29.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:08:29.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:08:29.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:08:29.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:08:29.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:08:29.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:08:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:08:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.047006 -999.00  +12.90  15.85     92  +11.60 1 3 1 3 1     0    0 1.25 -0.47 ----- 15.8 15.8 164.8 21.6 15.0 -2.0 14.7 -1.8 14.6 -2.2 15.0 -2.1
2026-02-12T03:08:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:08:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:08:29.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.047006
2026-02-12T03:08:29.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:08:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:08:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:08:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:08:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:08:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:08:13', tmtdew=0.72, humidity=95.39, cloud=0.0, wind=18.81, temperature=12.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:07:41.318', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:08:29.597 [DEBUG] [Thread-140554] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:08:29.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:08:29.696 [DEBUG] [Thread-140557] [transport.py] [_log()] starting thread (client mode): 0xa57589a0
2026-02-12T03:08:29.696 [DEBUG] [Thread-140557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:08:29.711 [DEBUG] [Thread-140557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:08:29.711 [INFO] [Thread-140557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:08:29.718 [DEBUG] [Thread-140557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:08:29.718 [DEBUG] [Thread-140557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] client lang: <none>
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] server lang: <none>
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] kex follows: False
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] Compression: none
2026-02-12T03:08:29.719 [DEBUG] [Thread-140557] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:08:29.782 [DEBUG] [Thread-140557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:08:29.783 [DEBUG] [Thread-140557] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:08:29.783 [DEBUG] [Thread-140557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:08:29.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:08:29.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:08:29.839 [DEBUG] [Thread-140557] [transport.py] [_log()] userauth is OK
2026-02-12T03:08:29.839 [DEBUG] [Thread-140557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:08:29.839 [DEBUG] [Thread-140557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:08:29.839 [DEBUG] [Thread-140557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:08:29.839 [DEBUG] [Thread-140557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:08:29.858 [INFO] [Thread-140557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:08:29.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:08:29.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:08:30.665 [DEBUG] [Thread-140557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:08:30.665 [DEBUG] [Thread-140557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:08:30.713 [DEBUG] [Thread-140557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:08:30.714 [DEBUG] [Thread-140557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:08:30.723 [DEBUG] [Thread-140557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:08:30.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:08: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')
2026-02-12T03:08:30.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:08:30.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:08:30.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:08:30.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:08:30.761 [DEBUG] [Thread-140557] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:08:39.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:08:39.328 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:08:43.523 [DEBUG] [Thread-140559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:08:58.580 [DEBUG] [Thread-140560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:09:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:09:00.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:09:00.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:09:02.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 8, 48), 0.66, 95.45, 0.0, 18.92, 12.8, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:09:02.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:08:48
2026-02-12T03:09:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:09:03.351 [DEBUG] [Thread-140561] [transport.py] [_log()] starting thread (client mode): 0xa2d01b40
2026-02-12T03:09:03.351 [DEBUG] [Thread-140561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:09:03.371 [DEBUG] [Thread-140561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:09:03.371 [INFO] [Thread-140561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] client lang: <none>
2026-02-12T03:09:03.375 [DEBUG] [Thread-140561] [transport.py] [_log()] server lang: <none>
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] kex follows: False
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] Compression: none
2026-02-12T03:09:03.376 [DEBUG] [Thread-140561] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:09:03.396 [DEBUG] [Thread-140561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:09:03.396 [DEBUG] [Thread-140561] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:09:03.397 [DEBUG] [Thread-140561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:09:03.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:09:03.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:09:03.441 [DEBUG] [Thread-140561] [transport.py] [_log()] userauth is OK
2026-02-12T03:09:03.441 [DEBUG] [Thread-140561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:09:03.442 [DEBUG] [Thread-140561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:09:03.442 [DEBUG] [Thread-140561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:09:03.442 [DEBUG] [Thread-140561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:09:03.474 [INFO] [Thread-140561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:09:03.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:09:04.047 [DEBUG] [Thread-140561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:09:04.047 [DEBUG] [Thread-140561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:09:04.048 [DEBUG] [Thread-140561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:09:04.089 [DEBUG] [Thread-140561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:09:04.089 [DEBUG] [Thread-140561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:09:04.092 [DEBUG] [Thread-140561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:09:04.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:09:04.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:09:04.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:09:04.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:09:04.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:09:04.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:09:04.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:09:04.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:09:04.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:09:04.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.047353 -999.00  +12.80  13.54     92  +11.60 1 3 1 3 1     0    0 1.25 -0.71 ----- 13.5 13.5 150.0 21.6 15.0 -2.2 14.8 -1.7 14.6 -2.1 15.0 -2.1
2026-02-12T03:09:04.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:09:04.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:09:04.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.047353
2026-02-12T03:09:04.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:09:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:09:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:09:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:09:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:09:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:08:48', tmtdew=0.66, humidity=95.45, cloud=0.0, wind=18.92, temperature=12.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:08:11.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:09:04.116 [DEBUG] [Thread-140561] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:09:04.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:09:04.211 [DEBUG] [Thread-140564] [transport.py] [_log()] starting thread (client mode): 0xa2d7b610
2026-02-12T03:09:04.212 [DEBUG] [Thread-140564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:09:04.226 [DEBUG] [Thread-140564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:09:04.226 [INFO] [Thread-140564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:09:04.233 [DEBUG] [Thread-140564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:09:04.234 [DEBUG] [Thread-140564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:09:04.234 [DEBUG] [Thread-140564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:09:04.234 [DEBUG] [Thread-140564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:04.234 [DEBUG] [Thread-140564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:04.234 [DEBUG] [Thread-140564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:04.234 [DEBUG] [Thread-140564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:04.234 [DEBUG] [Thread-140564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:09:04.235 [DEBUG] [Thread-140564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:09:04.235 [DEBUG] [Thread-140564] [transport.py] [_log()] client lang: <none>
2026-02-12T03:09:04.235 [DEBUG] [Thread-140564] [transport.py] [_log()] server lang: <none>
2026-02-12T03:09:04.235 [DEBUG] [Thread-140564] [transport.py] [_log()] kex follows: False
2026-02-12T03:09:04.235 [DEBUG] [Thread-140564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:09:04.235 [DEBUG] [Thread-140564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:09:04.235 [DEBUG] [Thread-140564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:09:04.236 [DEBUG] [Thread-140564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:09:04.236 [DEBUG] [Thread-140564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:09:04.236 [DEBUG] [Thread-140564] [transport.py] [_log()] Compression: none
2026-02-12T03:09:04.236 [DEBUG] [Thread-140564] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:09:04.298 [DEBUG] [Thread-140564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:09:04.299 [DEBUG] [Thread-140564] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:09:04.299 [DEBUG] [Thread-140564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:09:04.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:09:04.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:09:04.358 [DEBUG] [Thread-140564] [transport.py] [_log()] userauth is OK
2026-02-12T03:09:04.358 [DEBUG] [Thread-140564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:09:04.358 [DEBUG] [Thread-140564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:09:04.358 [DEBUG] [Thread-140564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:09:04.358 [DEBUG] [Thread-140564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:09:04.376 [INFO] [Thread-140564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:09:04.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:09:04.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:09:05.177 [DEBUG] [Thread-140564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:09:05.177 [DEBUG] [Thread-140564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:09:05.225 [DEBUG] [Thread-140564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:09:05.226 [DEBUG] [Thread-140564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:09:05.235 [DEBUG] [Thread-140564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:09:05.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:09:05.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:09:05.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:09:05.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:09:05.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:09:05.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:09:05.271 [DEBUG] [Thread-140564] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:09:09.480 [DEBUG] [Thread-140566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:09:13.618 [DEBUG] [Thread-140567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:09:28.666 [DEBUG] [Thread-140568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:09:35.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:09:35.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:09:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:09:37.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 9, 23), 0.66, 95.42, 0.0, 20.56, 12.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:09:37.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:09:23
2026-02-12T03:09:37.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:09:37.798 [DEBUG] [Thread-140569] [transport.py] [_log()] starting thread (client mode): 0xa57e1ff0
2026-02-12T03:09:37.798 [DEBUG] [Thread-140569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:09:37.818 [DEBUG] [Thread-140569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:09:37.818 [INFO] [Thread-140569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:09:37.821 [DEBUG] [Thread-140569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] client lang: <none>
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] server lang: <none>
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] kex follows: False
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] Compression: none
2026-02-12T03:09:37.822 [DEBUG] [Thread-140569] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:09:37.829 [DEBUG] [Thread-140569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:09:37.830 [DEBUG] [Thread-140569] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:09:37.830 [DEBUG] [Thread-140569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:09:37.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:09:37.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:09:37.831 [DEBUG] [Thread-140569] [transport.py] [_log()] userauth is OK
2026-02-12T03:09:37.831 [DEBUG] [Thread-140569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:09:37.831 [DEBUG] [Thread-140569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:09:37.831 [DEBUG] [Thread-140569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:09:37.831 [DEBUG] [Thread-140569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:09:37.843 [INFO] [Thread-140569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:09:37.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:09:38.448 [DEBUG] [Thread-140569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:09:38.449 [DEBUG] [Thread-140569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:09:38.449 [DEBUG] [Thread-140569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:09:38.490 [DEBUG] [Thread-140569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:09:38.490 [DEBUG] [Thread-140569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:09:38.493 [DEBUG] [Thread-140569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:09:38.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:09:38.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:09:38.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:09:38.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:09:38.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:09:38.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:09:38.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:09:38.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.048048 -999.00  +12.80  18.96     92  +11.50 1 3 1 3 1     0    0 1.21 -1.00 ----- 19.0 19.0 155.8 23.5 14.9 -2.2 14.7 -1.8 14.6 -2.2 15.0 -2.2
2026-02-12T03:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.048048
2026-02-12T03:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:09:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:09:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:09:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:09:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:09:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:09:23', tmtdew=0.66, humidity=95.42, cloud=0.0, wind=20.56, temperature=12.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:09:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:09:38.527 [DEBUG] [Thread-140569] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:09:38.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:09:38.622 [DEBUG] [Thread-140572] [transport.py] [_log()] starting thread (client mode): 0xa2d01e40
2026-02-12T03:09:38.622 [DEBUG] [Thread-140572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:09:38.636 [DEBUG] [Thread-140572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:09:38.637 [INFO] [Thread-140572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:09:38.644 [DEBUG] [Thread-140572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] client lang: <none>
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] server lang: <none>
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] kex follows: False
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] Compression: none
2026-02-12T03:09:38.645 [DEBUG] [Thread-140572] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:09:38.704 [DEBUG] [Thread-140572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:09:38.705 [DEBUG] [Thread-140572] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:09:38.706 [DEBUG] [Thread-140572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:09:38.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:09:38.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:09:38.761 [DEBUG] [Thread-140572] [transport.py] [_log()] userauth is OK
2026-02-12T03:09:38.762 [DEBUG] [Thread-140572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:09:38.762 [DEBUG] [Thread-140572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:09:38.762 [DEBUG] [Thread-140572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:09:38.762 [DEBUG] [Thread-140572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:09:38.780 [INFO] [Thread-140572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:09:38.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:09:38.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:09:39.533 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:09:39.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:09:39.619 [DEBUG] [Thread-140572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:09:39.628 [DEBUG] [Thread-140572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:09:39.667 [DEBUG] [Thread-140572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:09:39.667 [DEBUG] [Thread-140572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:09:39.677 [DEBUG] [Thread-140572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:09:39.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:09: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')
2026-02-12T03:09: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
2026-02-12T03:09:39.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:09:39.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:09:39.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:09:39.714 [DEBUG] [Thread-140572] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:09:43.703 [DEBUG] [Thread-140574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:09:58.753 [DEBUG] [Thread-140575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:10:09.536 [DEBUG] [Thread-140576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:10:09.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:10:09.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:10:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:10:11.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 9, 59), 0.66, 95.4, 0.0, 18.65, 12.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:10:11.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:09:59
2026-02-12T03:10:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:10:11.978 [DEBUG] [Thread-140577] [transport.py] [_log()] starting thread (client mode): 0xa2db4460
2026-02-12T03:10:11.979 [DEBUG] [Thread-140577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:10:11.998 [DEBUG] [Thread-140577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:10:11.998 [INFO] [Thread-140577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] client lang: <none>
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] server lang: <none>
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] kex follows: False
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:10:12.001 [DEBUG] [Thread-140577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:10:12.002 [DEBUG] [Thread-140577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:10:12.002 [DEBUG] [Thread-140577] [transport.py] [_log()] Compression: none
2026-02-12T03:10:12.002 [DEBUG] [Thread-140577] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:10:12.020 [DEBUG] [Thread-140577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:10:12.021 [DEBUG] [Thread-140577] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:10:12.021 [DEBUG] [Thread-140577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:10:12.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:10:12.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:10:12.023 [DEBUG] [Thread-140577] [transport.py] [_log()] userauth is OK
2026-02-12T03:10:12.024 [DEBUG] [Thread-140577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:10:12.024 [DEBUG] [Thread-140577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:10:12.024 [DEBUG] [Thread-140577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:10:12.024 [DEBUG] [Thread-140577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:10:12.043 [INFO] [Thread-140577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:10:12.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:10:13.378 [DEBUG] [Thread-140577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:10:13.378 [DEBUG] [Thread-140577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:10:13.378 [DEBUG] [Thread-140577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:10:13.419 [DEBUG] [Thread-140577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:10:13.419 [DEBUG] [Thread-140577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:10:13.422 [DEBUG] [Thread-140577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:10:13.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:10:13.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:10:13.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:10:13.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:10:13.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:10:13.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:10:13.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:10:13.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:10:13.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:10:13.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.048048 -999.00  +12.80  18.96     92  +11.50 1 3 1 3 1     0    0 1.21 -1.00 ----- 19.0 19.0 155.8 23.5 14.9 -2.2 14.7 -1.8 14.6 -2.2 15.0 -2.2
2026-02-12T03:10:13.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:10:13.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:10:13.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.048048
2026-02-12T03:10:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:10:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:10:13.489 [DEBUG] [Thread-140577] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:10:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:10:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:10:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:10:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:09:59', tmtdew=0.66, humidity=95.4, cloud=0.0, wind=18.65, temperature=12.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:09:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:10:13.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:10:13.588 [DEBUG] [Thread-140580] [transport.py] [_log()] starting thread (client mode): 0xa2db65c0
2026-02-12T03:10:13.588 [DEBUG] [Thread-140580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:10:13.602 [DEBUG] [Thread-140580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:10:13.602 [INFO] [Thread-140580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:10:13.610 [DEBUG] [Thread-140580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] client lang: <none>
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] server lang: <none>
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] kex follows: False
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] Compression: none
2026-02-12T03:10:13.611 [DEBUG] [Thread-140580] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:10:13.669 [DEBUG] [Thread-140580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:10:13.669 [DEBUG] [Thread-140580] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:10:13.670 [DEBUG] [Thread-140580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:10:13.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:10:13.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:10:13.726 [DEBUG] [Thread-140580] [transport.py] [_log()] userauth is OK
2026-02-12T03:10:13.727 [DEBUG] [Thread-140580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:10:13.727 [DEBUG] [Thread-140580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:10:13.727 [DEBUG] [Thread-140580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:10:13.727 [DEBUG] [Thread-140580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:10:13.745 [INFO] [Thread-140580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:10:13.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:10:13.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:10:13.792 [DEBUG] [Thread-140582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:10:14.546 [DEBUG] [Thread-140580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:10:14.546 [DEBUG] [Thread-140580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:10:14.600 [DEBUG] [Thread-140580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:10:14.600 [DEBUG] [Thread-140580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:10:14.609 [DEBUG] [Thread-140580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:10:14.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:10:14.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:10: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
2026-02-12T03:10:14.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:10:14.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:10:14.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:10:14.651 [DEBUG] [Thread-140580] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:10:28.846 [DEBUG] [Thread-140583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:10:39.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:10:39.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:10:43.882 [DEBUG] [Thread-140584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:10:44.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:10:44.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:10:44.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
2026-02-12T03:10:46.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 10, 35), 1.11, 92.94, 0.0, 21.67, 13.27, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:10:46.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:10:35
2026-02-12T03:10:46.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:10:46.963 [DEBUG] [Thread-140585] [transport.py] [_log()] starting thread (client mode): 0xa2d001f0
2026-02-12T03:10:46.964 [DEBUG] [Thread-140585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:10:46.985 [DEBUG] [Thread-140585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:10:46.985 [INFO] [Thread-140585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] client lang: <none>
2026-02-12T03:10:46.988 [DEBUG] [Thread-140585] [transport.py] [_log()] server lang: <none>
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] kex follows: False
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] Compression: none
2026-02-12T03:10:46.989 [DEBUG] [Thread-140585] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:10:47.006 [DEBUG] [Thread-140585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:10:47.007 [DEBUG] [Thread-140585] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:10:47.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:10:47.008 [DEBUG] [Thread-140585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:10:47.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:10:47.009 [DEBUG] [Thread-140585] [transport.py] [_log()] userauth is OK
2026-02-12T03:10:47.009 [DEBUG] [Thread-140585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:10:47.010 [DEBUG] [Thread-140585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:10:47.010 [DEBUG] [Thread-140585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:10:47.010 [DEBUG] [Thread-140585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:10:47.024 [INFO] [Thread-140585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:10:47.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:10:47.603 [DEBUG] [Thread-140585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:10:47.603 [DEBUG] [Thread-140585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:10:47.604 [DEBUG] [Thread-140585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:10:47.644 [DEBUG] [Thread-140585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:10:47.644 [DEBUG] [Thread-140585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:10:47.649 [DEBUG] [Thread-140585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:10:47.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:10:47.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:10:47.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:10:47.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:10:47.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:10:47.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:10:47.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:10:47.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:10:47.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:10:47.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.049089 -999.00  +12.80  14.59     92  +11.60 1 3 1 3 1     0    0 1.21 -1.30 ----- 14.6 14.6 164.0 21.6 14.9 -2.1 14.7 -1.8 14.6 -1.9 14.9 -2.0
2026-02-12T03:10:47.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:10:47.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:10:47.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.049089
2026-02-12T03:10:47.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:10:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:10:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:10:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:10:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:10:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:10:35', tmtdew=1.11, humidity=92.94, cloud=0.0, wind=21.67, temperature=13.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:10:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:10:47.667 [DEBUG] [Thread-140585] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:10:47.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:10:47.763 [DEBUG] [Thread-140588] [transport.py] [_log()] starting thread (client mode): 0xa2d038b0
2026-02-12T03:10:47.763 [DEBUG] [Thread-140588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:10:47.778 [DEBUG] [Thread-140588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:10:47.778 [INFO] [Thread-140588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:10:47.785 [DEBUG] [Thread-140588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:10:47.785 [DEBUG] [Thread-140588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:10:47.785 [DEBUG] [Thread-140588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:10:47.785 [DEBUG] [Thread-140588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] client lang: <none>
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] server lang: <none>
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] kex follows: False
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] Compression: none
2026-02-12T03:10:47.786 [DEBUG] [Thread-140588] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:10:47.844 [DEBUG] [Thread-140588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:10:47.844 [DEBUG] [Thread-140588] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:10:47.845 [DEBUG] [Thread-140588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:10:47.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:10:47.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:10:47.902 [DEBUG] [Thread-140588] [transport.py] [_log()] userauth is OK
2026-02-12T03:10:47.902 [DEBUG] [Thread-140588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:10:47.911 [DEBUG] [Thread-140588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:10:47.911 [DEBUG] [Thread-140588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:10:47.911 [DEBUG] [Thread-140588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:10:47.932 [INFO] [Thread-140588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:10:47.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:10:47.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:10:48.774 [DEBUG] [Thread-140588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:10:48.774 [DEBUG] [Thread-140588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:10:48.822 [DEBUG] [Thread-140588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:10:48.823 [DEBUG] [Thread-140588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:10:48.832 [DEBUG] [Thread-140588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:10:48.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:10:48.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:10:48.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:10:48.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:10:48.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:10:48.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:10:48.868 [DEBUG] [Thread-140588] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:10:58.917 [DEBUG] [Thread-140590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:11:09.608 [DEBUG] [Thread-140591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:11:13.969 [DEBUG] [Thread-140592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:11:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:11:18.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:11:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:11:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 11, 10), 0.7, 95.47, 0.0, 18.07, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:11:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:11:10
2026-02-12T03:11:21.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:11:21.197 [DEBUG] [Thread-140593] [transport.py] [_log()] starting thread (client mode): 0xa57731f0
2026-02-12T03:11:21.198 [DEBUG] [Thread-140593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:11:21.217 [DEBUG] [Thread-140593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:11:21.218 [INFO] [Thread-140593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:11:21.220 [DEBUG] [Thread-140593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:11:21.220 [DEBUG] [Thread-140593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:11:21.220 [DEBUG] [Thread-140593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] client lang: <none>
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] server lang: <none>
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] kex follows: False
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] Compression: none
2026-02-12T03:11:21.221 [DEBUG] [Thread-140593] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:11:21.241 [DEBUG] [Thread-140593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:11:21.241 [DEBUG] [Thread-140593] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:11:21.242 [DEBUG] [Thread-140593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:11:21.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:11:21.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:11:21.244 [DEBUG] [Thread-140593] [transport.py] [_log()] userauth is OK
2026-02-12T03:11:21.244 [DEBUG] [Thread-140593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:11:21.244 [DEBUG] [Thread-140593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:11:21.244 [DEBUG] [Thread-140593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:11:21.244 [DEBUG] [Thread-140593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:11:21.260 [INFO] [Thread-140593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:11:21.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:11:21.819 [DEBUG] [Thread-140593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:11:21.820 [DEBUG] [Thread-140593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:11:21.820 [DEBUG] [Thread-140593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:11:21.860 [DEBUG] [Thread-140593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:11:21.861 [DEBUG] [Thread-140593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:11:21.864 [DEBUG] [Thread-140593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:11:21.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:11:21.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:11:21.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:11:21.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:11:21.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:11:21.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:11:21.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:11:21.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:11:21.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:11:21.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.049436 -999.00  +12.90  14.85     92  +11.60 1 3 1 3 1     0    0 1.23 -1.42 ----- 14.8 14.8 160.6 19.8 14.9 -2.0 14.7 -1.7 14.6 -2.0 15.0 -2.0
2026-02-12T03:11:21.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:11:21.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:11:21.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.049436
2026-02-12T03:11:21.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:11:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:11:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:11:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:11:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:11:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:11:10', tmtdew=0.7, humidity=95.47, cloud=0.0, wind=18.07, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:11:11.270', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:11:21.890 [DEBUG] [Thread-140593] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:11:21.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:11:21.985 [DEBUG] [Thread-140596] [transport.py] [_log()] starting thread (client mode): 0x9eb075b0
2026-02-12T03:11:21.985 [DEBUG] [Thread-140596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:11:22.000 [DEBUG] [Thread-140596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:11:22.000 [INFO] [Thread-140596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:11:22.008 [DEBUG] [Thread-140596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:11:22.008 [DEBUG] [Thread-140596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:11:22.008 [DEBUG] [Thread-140596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:11:22.008 [DEBUG] [Thread-140596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:22.009 [DEBUG] [Thread-140596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:22.009 [DEBUG] [Thread-140596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:22.009 [DEBUG] [Thread-140596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:22.009 [DEBUG] [Thread-140596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:11:22.009 [DEBUG] [Thread-140596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:11:22.009 [DEBUG] [Thread-140596] [transport.py] [_log()] client lang: <none>
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] server lang: <none>
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] kex follows: False
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] Compression: none
2026-02-12T03:11:22.010 [DEBUG] [Thread-140596] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:11:22.068 [DEBUG] [Thread-140596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:11:22.068 [DEBUG] [Thread-140596] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:11:22.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:11:22.069 [DEBUG] [Thread-140596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:11:22.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:11:22.124 [DEBUG] [Thread-140596] [transport.py] [_log()] userauth is OK
2026-02-12T03:11:22.124 [DEBUG] [Thread-140596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:11:22.124 [DEBUG] [Thread-140596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:11:22.124 [DEBUG] [Thread-140596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:11:22.125 [DEBUG] [Thread-140596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:11:22.144 [INFO] [Thread-140596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:11:22.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:11:22.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:11:22.929 [DEBUG] [Thread-140596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:11:22.929 [DEBUG] [Thread-140596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:11:22.978 [DEBUG] [Thread-140596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:11:22.978 [DEBUG] [Thread-140596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:11:22.987 [DEBUG] [Thread-140596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:11:22.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:11:22.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')
2026-02-12T03:11:23.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
2026-02-12T03:11:23.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:11:23.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:11:23.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:11:23.023 [DEBUG] [Thread-140596] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:11:29.007 [DEBUG] [Thread-140598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:11:39.936 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:11:39.937 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:11:44.053 [DEBUG] [Thread-140599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:11:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:11:53.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:11:53.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:11:55.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 11, 45), 0.66, 95.45, 0.0, 17.4, 12.92, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:11:55.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:11:45
2026-02-12T03:11:55.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:11:55.748 [DEBUG] [Thread-140600] [transport.py] [_log()] starting thread (client mode): 0xa5773e50
2026-02-12T03:11:55.748 [DEBUG] [Thread-140600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:11:55.762 [DEBUG] [Thread-140600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:11:55.762 [INFO] [Thread-140600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] client lang: <none>
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] server lang: <none>
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] kex follows: False
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] Compression: none
2026-02-12T03:11:55.763 [DEBUG] [Thread-140600] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:11:55.772 [DEBUG] [Thread-140600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:11:55.772 [DEBUG] [Thread-140600] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:11:55.773 [DEBUG] [Thread-140600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:11:55.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:11:55.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:11:55.774 [DEBUG] [Thread-140600] [transport.py] [_log()] userauth is OK
2026-02-12T03:11:55.774 [DEBUG] [Thread-140600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:11:55.774 [DEBUG] [Thread-140600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:11:55.774 [DEBUG] [Thread-140600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:11:55.774 [DEBUG] [Thread-140600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:11:55.789 [INFO] [Thread-140600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:11:55.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:11:56.331 [DEBUG] [Thread-140600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:11:56.332 [DEBUG] [Thread-140600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:11:56.332 [DEBUG] [Thread-140600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:11:56.372 [DEBUG] [Thread-140600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:11:56.373 [DEBUG] [Thread-140600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:11:56.376 [DEBUG] [Thread-140600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:11:56.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:11:56.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:11:56.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:11:56.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:11:56.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:11:56.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:11:56.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:11:56.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:11:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:11:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.049784 -999.00  +12.90  14.71     92  +11.60 1 3 1 3 1     0    0 1.23 -1.08 ----- 14.7 14.7 165.0 18.6 15.0 -2.1 14.7 -1.8 14.6 -1.9 14.9 -1.9
2026-02-12T03:11:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:11:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:11:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.049784
2026-02-12T03:11:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:11:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:11:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:11:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:11:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:11:56.405 [DEBUG] [Thread-140600] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:11:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:11:45', tmtdew=0.66, humidity=95.45, cloud=0.0, wind=17.4, temperature=12.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:11:41.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:11:56.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:11:56.501 [DEBUG] [Thread-140603] [transport.py] [_log()] starting thread (client mode): 0xa57c1720
2026-02-12T03:11:56.501 [DEBUG] [Thread-140603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:11:56.515 [DEBUG] [Thread-140603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:11:56.516 [INFO] [Thread-140603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:11:56.523 [DEBUG] [Thread-140603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:11:56.523 [DEBUG] [Thread-140603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] client lang: <none>
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] server lang: <none>
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] kex follows: False
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] Compression: none
2026-02-12T03:11:56.524 [DEBUG] [Thread-140603] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:11:56.584 [DEBUG] [Thread-140603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:11:56.584 [DEBUG] [Thread-140603] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:11:56.585 [DEBUG] [Thread-140603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:11:56.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:11:56.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:11:56.639 [DEBUG] [Thread-140603] [transport.py] [_log()] userauth is OK
2026-02-12T03:11:56.639 [DEBUG] [Thread-140603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:11:56.639 [DEBUG] [Thread-140603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:11:56.639 [DEBUG] [Thread-140603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:11:56.639 [DEBUG] [Thread-140603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:11:56.656 [INFO] [Thread-140603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:11:56.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:11:56.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:11:57.468 [DEBUG] [Thread-140603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:11:57.469 [DEBUG] [Thread-140603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:11:57.516 [DEBUG] [Thread-140603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:11:57.517 [DEBUG] [Thread-140603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:11:57.526 [DEBUG] [Thread-140603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:11:57.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:11:57.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:11:57.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:11:57.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:11:57.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:11:57.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:11:57.563 [DEBUG] [Thread-140603] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:11:59.088 [DEBUG] [Thread-140605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:12:09.662 [DEBUG] [Thread-140606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:12:14.148 [DEBUG] [Thread-140607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:12:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:12:27.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:12:27.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:12:29.183 [DEBUG] [Thread-140608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:12:29.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 11, 45), 0.66, 95.45, 0.0, 17.4, 12.92, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:12:29.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:11:45
2026-02-12T03:12:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:12:30.007 [DEBUG] [Thread-140609] [transport.py] [_log()] starting thread (client mode): 0xa57e1840
2026-02-12T03:12:30.007 [DEBUG] [Thread-140609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:12:30.026 [DEBUG] [Thread-140609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:12:30.026 [INFO] [Thread-140609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:12:30.029 [DEBUG] [Thread-140609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:12:30.029 [DEBUG] [Thread-140609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] client lang: <none>
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] server lang: <none>
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] kex follows: False
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:12:30.030 [DEBUG] [Thread-140609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:12:30.031 [DEBUG] [Thread-140609] [transport.py] [_log()] Compression: none
2026-02-12T03:12:30.031 [DEBUG] [Thread-140609] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:12:30.049 [DEBUG] [Thread-140609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:12:30.050 [DEBUG] [Thread-140609] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:12:30.051 [DEBUG] [Thread-140609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:12:30.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:12:30.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:12:30.054 [DEBUG] [Thread-140609] [transport.py] [_log()] userauth is OK
2026-02-12T03:12:30.054 [DEBUG] [Thread-140609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:12:30.054 [DEBUG] [Thread-140609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:12:30.054 [DEBUG] [Thread-140609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:12:30.054 [DEBUG] [Thread-140609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:12:30.080 [INFO] [Thread-140609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:12:30.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:12:30.651 [DEBUG] [Thread-140609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:12:30.651 [DEBUG] [Thread-140609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:12:30.652 [DEBUG] [Thread-140609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:12:30.692 [DEBUG] [Thread-140609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:12:30.693 [DEBUG] [Thread-140609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:12:30.695 [DEBUG] [Thread-140609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:12:30.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:12:30.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:12:30.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:12:30.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:12:30.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:12:30.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:12:30.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:12:30.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:12:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:12:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.050131 -999.00  +12.90  12.28     92  +11.60 1 3 1 3 1     0    0 1.26 -0.76 ----- 12.3 12.3 159.4 21.7 14.9 -2.1 14.7 -1.8 14.6 -1.8 14.9 -2.0
2026-02-12T03:12:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:12:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:12:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.050131
2026-02-12T03:12:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:12:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:12:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:12:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:12:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:12:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:11:45', tmtdew=0.66, humidity=95.45, cloud=0.0, wind=17.4, temperature=12.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:12:11.318', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:12:30.721 [DEBUG] [Thread-140609] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:12:30.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:12:30.817 [DEBUG] [Thread-140612] [transport.py] [_log()] starting thread (client mode): 0x9eb07af0
2026-02-12T03:12:30.817 [DEBUG] [Thread-140612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:12:30.832 [DEBUG] [Thread-140612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:12:30.832 [INFO] [Thread-140612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:12:30.840 [DEBUG] [Thread-140612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:12:30.840 [DEBUG] [Thread-140612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] client lang: <none>
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] server lang: <none>
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] kex follows: False
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:12:30.841 [DEBUG] [Thread-140612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:12:30.842 [DEBUG] [Thread-140612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:12:30.842 [DEBUG] [Thread-140612] [transport.py] [_log()] Compression: none
2026-02-12T03:12:30.842 [DEBUG] [Thread-140612] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:12:30.900 [DEBUG] [Thread-140612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:12:30.901 [DEBUG] [Thread-140612] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:12:30.901 [DEBUG] [Thread-140612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:12:30.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:12:30.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:12:30.963 [DEBUG] [Thread-140612] [transport.py] [_log()] userauth is OK
2026-02-12T03:12:30.963 [DEBUG] [Thread-140612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:12:30.964 [DEBUG] [Thread-140612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:12:30.964 [DEBUG] [Thread-140612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:12:30.964 [DEBUG] [Thread-140612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:12:30.982 [INFO] [Thread-140612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:12:30.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:12:30.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:12:31.791 [DEBUG] [Thread-140612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:12:31.792 [DEBUG] [Thread-140612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:12:31.840 [DEBUG] [Thread-140612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:12:31.840 [DEBUG] [Thread-140612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:12:31.850 [DEBUG] [Thread-140612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:12:31.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:12:31.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')
2026-02-12T03:12:31.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:12:31.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:12:31.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:12:31.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:12:31.886 [DEBUG] [Thread-140612] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:12:40.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:12:40.141 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:12:44.220 [DEBUG] [Thread-140614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:12:59.272 [DEBUG] [Thread-140615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:13:01.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:13:01.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:13:01.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:13:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 12, 22), 0.64, 95.52, 0.0, 16.76, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:13:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:12:22
2026-02-12T03:13:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:13:04.520 [DEBUG] [Thread-140616] [transport.py] [_log()] starting thread (client mode): 0xa2db75b0
2026-02-12T03:13:04.520 [DEBUG] [Thread-140616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:13:04.534 [DEBUG] [Thread-140616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:13:04.534 [INFO] [Thread-140616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] client lang: <none>
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] server lang: <none>
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] kex follows: False
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] Compression: none
2026-02-12T03:13:04.536 [DEBUG] [Thread-140616] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:13:04.549 [DEBUG] [Thread-140616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:13:04.549 [DEBUG] [Thread-140616] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:13:04.549 [DEBUG] [Thread-140616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:13:04.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:13:04.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:13:04.551 [DEBUG] [Thread-140616] [transport.py] [_log()] userauth is OK
2026-02-12T03:13:04.551 [DEBUG] [Thread-140616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:13:04.551 [DEBUG] [Thread-140616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:13:04.551 [DEBUG] [Thread-140616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:13:04.551 [DEBUG] [Thread-140616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:13:04.573 [INFO] [Thread-140616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:13:04.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:13:05.182 [DEBUG] [Thread-140616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:13:05.183 [DEBUG] [Thread-140616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:13:05.183 [DEBUG] [Thread-140616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:13:05.223 [DEBUG] [Thread-140616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:13:05.223 [DEBUG] [Thread-140616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:13:05.226 [DEBUG] [Thread-140616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:13:05.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:13:05.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:13:05.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:13:05.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:13:05.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:13:05.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:13:05.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:13:05.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:13:05.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:13:05.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.050478 -999.00  +12.90  15.59     92  +11.60 1 3 1 3 1     0    0 1.24 -0.60 ----- 15.6 15.6 168.0 19.7 14.9 -1.8 14.7 -1.6 14.6 -1.7 14.9 -1.9
2026-02-12T03:13:05.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:13:05.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:13:05.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.050478
2026-02-12T03:13:05.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:13:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:13:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:13:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:13:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:13:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:12:22', tmtdew=0.64, humidity=95.52, cloud=0.0, wind=16.76, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:12:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:13:05.252 [DEBUG] [Thread-140616] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:13:05.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:13:05.360 [DEBUG] [Thread-140619] [transport.py] [_log()] starting thread (client mode): 0xa2db6680
2026-02-12T03:13:05.360 [DEBUG] [Thread-140619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:13:05.374 [DEBUG] [Thread-140619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:13:05.374 [INFO] [Thread-140619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:13:05.382 [DEBUG] [Thread-140619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:13:05.382 [DEBUG] [Thread-140619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:13:05.382 [DEBUG] [Thread-140619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:13:05.382 [DEBUG] [Thread-140619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] client lang: <none>
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] server lang: <none>
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] kex follows: False
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] Compression: none
2026-02-12T03:13:05.383 [DEBUG] [Thread-140619] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:13:05.443 [DEBUG] [Thread-140619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:13:05.444 [DEBUG] [Thread-140619] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:13:05.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:13:05.445 [DEBUG] [Thread-140619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:13:05.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:13:05.499 [DEBUG] [Thread-140619] [transport.py] [_log()] userauth is OK
2026-02-12T03:13:05.499 [DEBUG] [Thread-140619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:13:05.499 [DEBUG] [Thread-140619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:13:05.499 [DEBUG] [Thread-140619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:13:05.499 [DEBUG] [Thread-140619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:13:05.519 [INFO] [Thread-140619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:13:05.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:13:05.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:13:06.358 [DEBUG] [Thread-140619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:13:06.358 [DEBUG] [Thread-140619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:13:06.406 [DEBUG] [Thread-140619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:13:06.406 [DEBUG] [Thread-140619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:13:06.415 [DEBUG] [Thread-140619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:13:06.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:13:06.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:13:06.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:13:06.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:13:06.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:13:06.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:13:06.451 [DEBUG] [Thread-140619] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:13:09.738 [DEBUG] [Thread-140621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:13:14.312 [DEBUG] [Thread-140622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:13:29.364 [DEBUG] [Thread-140623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:13:36.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:13:36.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:13:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:13:38.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 12, 57), 0.65, 95.49, 0.0, 21.35, 12.97, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:13:38.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:12:57
2026-02-12T03:13:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:13:39.018 [DEBUG] [Thread-140624] [transport.py] [_log()] starting thread (client mode): 0xa57e3c70
2026-02-12T03:13:39.018 [DEBUG] [Thread-140624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:13:39.038 [DEBUG] [Thread-140624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:13:39.038 [INFO] [Thread-140624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] client lang: <none>
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] server lang: <none>
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] kex follows: False
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] Compression: none
2026-02-12T03:13:39.041 [DEBUG] [Thread-140624] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:13:39.059 [DEBUG] [Thread-140624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:13:39.059 [DEBUG] [Thread-140624] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:13:39.060 [DEBUG] [Thread-140624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:13:39.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:13:39.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:13:39.062 [DEBUG] [Thread-140624] [transport.py] [_log()] userauth is OK
2026-02-12T03:13:39.062 [DEBUG] [Thread-140624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:13:39.062 [DEBUG] [Thread-140624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:13:39.062 [DEBUG] [Thread-140624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:13:39.062 [DEBUG] [Thread-140624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:13:39.086 [INFO] [Thread-140624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:13:39.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:13:39.712 [DEBUG] [Thread-140624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:13:39.712 [DEBUG] [Thread-140624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:13:39.712 [DEBUG] [Thread-140624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:13:39.753 [DEBUG] [Thread-140624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:13:39.753 [DEBUG] [Thread-140624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:13:39.756 [DEBUG] [Thread-140624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:13:39.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:13:39.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:13:39.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:13:39.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:13:39.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:13:39.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:13:39.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:13:39.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:13:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:13:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.050825 -999.00  +12.90  16.16     92  +11.70 1 3 1 3 1     0    0 1.23 -0.41 ----- 16.2 16.2 166.6 23.9 14.9 -2.1 14.7 -1.7 14.6 -2.0 14.9 -1.7
2026-02-12T03:13:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:13:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:13:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.050825
2026-02-12T03:13:39.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:13:39.782 [DEBUG] [Thread-140624] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:13:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:13:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:13:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:13:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:13:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:12:57', tmtdew=0.65, humidity=95.49, cloud=0.0, wind=21.35, temperature=12.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:13:11.280', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:13:39.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:13:39.879 [DEBUG] [Thread-140627] [transport.py] [_log()] starting thread (client mode): 0xa2d9dbd0
2026-02-12T03:13:39.880 [DEBUG] [Thread-140627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:13:39.894 [DEBUG] [Thread-140627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:13:39.894 [INFO] [Thread-140627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:13:39.903 [DEBUG] [Thread-140627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] client lang: <none>
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] server lang: <none>
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] kex follows: False
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:13:39.904 [DEBUG] [Thread-140627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:13:39.905 [DEBUG] [Thread-140627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:13:39.905 [DEBUG] [Thread-140627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:13:39.905 [DEBUG] [Thread-140627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:13:39.905 [DEBUG] [Thread-140627] [transport.py] [_log()] Compression: none
2026-02-12T03:13:39.905 [DEBUG] [Thread-140627] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:13:39.962 [DEBUG] [Thread-140627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:13:39.962 [DEBUG] [Thread-140627] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:13:39.963 [DEBUG] [Thread-140627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:13:39.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:13:39.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:13:40.018 [DEBUG] [Thread-140627] [transport.py] [_log()] userauth is OK
2026-02-12T03:13:40.019 [DEBUG] [Thread-140627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:13:40.019 [DEBUG] [Thread-140627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:13:40.019 [DEBUG] [Thread-140627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:13:40.019 [DEBUG] [Thread-140627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:13:40.037 [INFO] [Thread-140627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:13:40.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:13:40.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:13:40.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:13:40.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:13:40.850 [DEBUG] [Thread-140627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:13:40.850 [DEBUG] [Thread-140627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:13:40.898 [DEBUG] [Thread-140627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:13:40.899 [DEBUG] [Thread-140627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:13:40.908 [DEBUG] [Thread-140627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:13:40.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:13:40.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:13:40.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:13:40.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:13:40.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:13:40.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:13:40.944 [DEBUG] [Thread-140627] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:13:44.400 [DEBUG] [Thread-140629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:13:59.458 [DEBUG] [Thread-140630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:14:09.809 [DEBUG] [Thread-140631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:14:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:14:10.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:14:10.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:14:13.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 13, 33), 1.08, 93.07, 0.0, 21.03, 13.43, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:14:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:13:33
2026-02-12T03:14:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:14:13.951 [DEBUG] [Thread-140632] [transport.py] [_log()] starting thread (client mode): 0xa57c1ed0
2026-02-12T03:14:13.951 [DEBUG] [Thread-140632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:14:13.971 [DEBUG] [Thread-140632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:14:13.971 [INFO] [Thread-140632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] client lang: <none>
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] server lang: <none>
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] kex follows: False
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] Compression: none
2026-02-12T03:14:13.974 [DEBUG] [Thread-140632] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:14:13.991 [DEBUG] [Thread-140632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:14:13.991 [DEBUG] [Thread-140632] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:14:13.992 [DEBUG] [Thread-140632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:14:13.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:14:13.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:14:13.994 [DEBUG] [Thread-140632] [transport.py] [_log()] userauth is OK
2026-02-12T03:14:13.995 [DEBUG] [Thread-140632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:14:13.995 [DEBUG] [Thread-140632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:14:13.995 [DEBUG] [Thread-140632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:14:13.995 [DEBUG] [Thread-140632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:14:14.015 [INFO] [Thread-140632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:14:14.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:14:14.495 [DEBUG] [Thread-140634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:14:14.600 [DEBUG] [Thread-140632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:14:14.600 [DEBUG] [Thread-140632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:14:14.600 [DEBUG] [Thread-140632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:14:14.641 [DEBUG] [Thread-140632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:14:14.641 [DEBUG] [Thread-140632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:14:14.643 [DEBUG] [Thread-140632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:14:14.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:14:14.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:14:14.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:14:14.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:14:14.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:14:14.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:14:14.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:14:14.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:14:14.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:14:14.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.051173 -999.00  +12.80  13.36     92  +11.60 1 3 1 3 1     0    0 1.25 -0.53 ----- 13.4 13.4 159.4 20.0 14.9 -2.1 14.7 -1.8 14.6 -1.9 14.9 -2.0
2026-02-12T03:14:14.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:14:14.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:14:14.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.051173
2026-02-12T03:14:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:14:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:14:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:14:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:14:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:14:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:13:33', tmtdew=1.08, humidity=93.07, cloud=0.0, wind=21.03, temperature=13.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:13:41.347', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:14:14.665 [DEBUG] [Thread-140632] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:14:14.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:14:14.767 [DEBUG] [Thread-140636] [transport.py] [_log()] starting thread (client mode): 0xa5773370
2026-02-12T03:14:14.767 [DEBUG] [Thread-140636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:14:14.781 [DEBUG] [Thread-140636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:14:14.782 [INFO] [Thread-140636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:14:14.789 [DEBUG] [Thread-140636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:14:14.790 [DEBUG] [Thread-140636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:14:14.790 [DEBUG] [Thread-140636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:14:14.790 [DEBUG] [Thread-140636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:14.790 [DEBUG] [Thread-140636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:14.790 [DEBUG] [Thread-140636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:14.790 [DEBUG] [Thread-140636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:14.790 [DEBUG] [Thread-140636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:14:14.791 [DEBUG] [Thread-140636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:14:14.791 [DEBUG] [Thread-140636] [transport.py] [_log()] client lang: <none>
2026-02-12T03:14:14.791 [DEBUG] [Thread-140636] [transport.py] [_log()] server lang: <none>
2026-02-12T03:14:14.791 [DEBUG] [Thread-140636] [transport.py] [_log()] kex follows: False
2026-02-12T03:14:14.791 [DEBUG] [Thread-140636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:14:14.791 [DEBUG] [Thread-140636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:14:14.791 [DEBUG] [Thread-140636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:14:14.792 [DEBUG] [Thread-140636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:14:14.792 [DEBUG] [Thread-140636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:14:14.792 [DEBUG] [Thread-140636] [transport.py] [_log()] Compression: none
2026-02-12T03:14:14.792 [DEBUG] [Thread-140636] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:14:14.850 [DEBUG] [Thread-140636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:14:14.851 [DEBUG] [Thread-140636] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:14:14.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:14:14.852 [DEBUG] [Thread-140636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:14:14.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:14:14.906 [DEBUG] [Thread-140636] [transport.py] [_log()] userauth is OK
2026-02-12T03:14:14.906 [DEBUG] [Thread-140636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:14:14.907 [DEBUG] [Thread-140636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:14:14.907 [DEBUG] [Thread-140636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:14:14.907 [DEBUG] [Thread-140636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:14:14.926 [INFO] [Thread-140636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:14:14.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:14:14.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:14:15.745 [DEBUG] [Thread-140636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:14:15.746 [DEBUG] [Thread-140636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:14:15.794 [DEBUG] [Thread-140636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:14:15.794 [DEBUG] [Thread-140636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:14:15.803 [DEBUG] [Thread-140636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:14:15.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:14:15.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:14:15.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:14:15.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:14:15.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:14:15.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:14:15.839 [DEBUG] [Thread-140636] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:14:29.531 [DEBUG] [Thread-140638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:14:40.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:14:40.546 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:14:44.583 [DEBUG] [Thread-140639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:14:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:14:45.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:14:45.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:14:47.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 14, 9), 0.64, 95.54, 0.0, 17.29, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:14:47.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:14:09
2026-02-12T03:14:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:14:48.609 [DEBUG] [Thread-140640] [transport.py] [_log()] starting thread (client mode): 0xa57721d0
2026-02-12T03:14:48.609 [DEBUG] [Thread-140640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:14:48.629 [DEBUG] [Thread-140640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:14:48.629 [INFO] [Thread-140640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:14:48.630 [DEBUG] [Thread-140640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] client lang: <none>
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] server lang: <none>
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] kex follows: False
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] Compression: none
2026-02-12T03:14:48.631 [DEBUG] [Thread-140640] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:14:48.641 [DEBUG] [Thread-140640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:14:48.641 [DEBUG] [Thread-140640] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:14:48.642 [DEBUG] [Thread-140640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:14:48.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:14:48.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:14:48.644 [DEBUG] [Thread-140640] [transport.py] [_log()] userauth is OK
2026-02-12T03:14:48.644 [DEBUG] [Thread-140640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:14:48.644 [DEBUG] [Thread-140640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:14:48.644 [DEBUG] [Thread-140640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:14:48.644 [DEBUG] [Thread-140640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:14:48.663 [INFO] [Thread-140640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:14:48.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:14:49.288 [DEBUG] [Thread-140640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:14:49.288 [DEBUG] [Thread-140640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:14:49.288 [DEBUG] [Thread-140640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:14:49.330 [DEBUG] [Thread-140640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:14:49.331 [DEBUG] [Thread-140640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:14:49.333 [DEBUG] [Thread-140640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:14:49.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:14:49.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:14:49.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:14:49.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:14:49.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:14:49.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:14:49.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:14:49.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:14:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:14:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.051867 -999.00  +12.80  13.18     92  +11.60 1 3 1 3 1     0    0 1.23 -0.97 ----- 13.2 13.2 161.6 18.6 14.9 -2.1 14.7 -1.8 14.6 -2.0 14.9 -2.0
2026-02-12T03:14:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:14:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:14:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.051867
2026-02-12T03:14:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:14:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:14:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:14:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:14:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:14:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:14:09', tmtdew=0.64, humidity=95.54, cloud=0.0, wind=17.29, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:14:41.309', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:14:49.360 [DEBUG] [Thread-140640] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:14:49.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:14:49.457 [DEBUG] [Thread-140643] [transport.py] [_log()] starting thread (client mode): 0xa57c13c0
2026-02-12T03:14:49.457 [DEBUG] [Thread-140643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:14:49.471 [DEBUG] [Thread-140643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:14:49.471 [INFO] [Thread-140643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] client lang: <none>
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] server lang: <none>
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] kex follows: False
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:14:49.479 [DEBUG] [Thread-140643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:14:49.480 [DEBUG] [Thread-140643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:14:49.480 [DEBUG] [Thread-140643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:14:49.480 [DEBUG] [Thread-140643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:14:49.480 [DEBUG] [Thread-140643] [transport.py] [_log()] Compression: none
2026-02-12T03:14:49.480 [DEBUG] [Thread-140643] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:14:49.538 [DEBUG] [Thread-140643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:14:49.538 [DEBUG] [Thread-140643] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:14:49.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:14:49.540 [DEBUG] [Thread-140643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:14:49.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:14:49.594 [DEBUG] [Thread-140643] [transport.py] [_log()] userauth is OK
2026-02-12T03:14:49.594 [DEBUG] [Thread-140643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:14:49.594 [DEBUG] [Thread-140643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:14:49.594 [DEBUG] [Thread-140643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:14:49.594 [DEBUG] [Thread-140643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:14:49.612 [INFO] [Thread-140643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:14:49.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:14:49.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:14:50.442 [DEBUG] [Thread-140643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:14:50.442 [DEBUG] [Thread-140643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:14:50.490 [DEBUG] [Thread-140643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:14:50.491 [DEBUG] [Thread-140643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:14:50.500 [DEBUG] [Thread-140643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:14:50.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:14:50.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:14:50.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:14:50.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:14:50.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:14:50.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:14:50.536 [DEBUG] [Thread-140643] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:14:59.619 [DEBUG] [Thread-140645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:15:09.890 [DEBUG] [Thread-140646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:15:14.674 [DEBUG] [Thread-140647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:15:20.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:15:20.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:15:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:15:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 14, 45), 0.65, 95.5, 0.0, 18.4, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:15:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:14:45
2026-02-12T03:15:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:15:22.884 [DEBUG] [Thread-140648] [transport.py] [_log()] starting thread (client mode): 0xa2d006a0
2026-02-12T03:15:22.884 [DEBUG] [Thread-140648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:15:22.894 [DEBUG] [Thread-140648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:15:22.894 [INFO] [Thread-140648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] client lang: <none>
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] server lang: <none>
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] kex follows: False
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] Compression: none
2026-02-12T03:15:22.897 [DEBUG] [Thread-140648] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:15:22.911 [DEBUG] [Thread-140648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:15:22.911 [DEBUG] [Thread-140648] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:15:22.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:15:22.912 [DEBUG] [Thread-140648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:15:22.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:15:22.912 [DEBUG] [Thread-140648] [transport.py] [_log()] userauth is OK
2026-02-12T03:15:22.912 [DEBUG] [Thread-140648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:15:22.912 [DEBUG] [Thread-140648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:15:22.912 [DEBUG] [Thread-140648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:15:22.912 [DEBUG] [Thread-140648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:15:22.929 [INFO] [Thread-140648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:15:22.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:15:23.505 [DEBUG] [Thread-140648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:15:23.506 [DEBUG] [Thread-140648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:15:23.506 [DEBUG] [Thread-140648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:15:23.546 [DEBUG] [Thread-140648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:15:23.547 [DEBUG] [Thread-140648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:15:23.550 [DEBUG] [Thread-140648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:15:23.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:15:23.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:15:23.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:15:23.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:15:23.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:15:23.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:15:23.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:15:23.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:15:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:15:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.052214 -999.00  +12.80  13.57     92  +11.60 1 3 1 3 1     0    0 1.20 -1.33 ----- 13.6 13.6 165.0 16.1 14.9 -1.9 14.7 -1.9 14.6 -2.0 14.9 -1.9
2026-02-12T03:15:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:15:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:15:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.052214
2026-02-12T03:15:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:15:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:15:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:15:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:15:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:15:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:14:45', tmtdew=0.65, humidity=95.5, cloud=0.0, wind=18.4, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:15:11.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:15:23.581 [DEBUG] [Thread-140648] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:15:23.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:15:23.671 [DEBUG] [Thread-140651] [transport.py] [_log()] starting thread (client mode): 0xa2d02050
2026-02-12T03:15:23.671 [DEBUG] [Thread-140651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:15:23.685 [DEBUG] [Thread-140651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:15:23.686 [INFO] [Thread-140651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:15:23.693 [DEBUG] [Thread-140651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:15:23.693 [DEBUG] [Thread-140651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] client lang: <none>
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] server lang: <none>
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] kex follows: False
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] Compression: none
2026-02-12T03:15:23.694 [DEBUG] [Thread-140651] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:15:23.753 [DEBUG] [Thread-140651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:15:23.754 [DEBUG] [Thread-140651] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:15:23.755 [DEBUG] [Thread-140651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:15:23.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:15:23.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:15:23.809 [DEBUG] [Thread-140651] [transport.py] [_log()] userauth is OK
2026-02-12T03:15:23.809 [DEBUG] [Thread-140651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:15:23.809 [DEBUG] [Thread-140651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:15:23.810 [DEBUG] [Thread-140651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:15:23.810 [DEBUG] [Thread-140651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:15:23.828 [INFO] [Thread-140651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:15:23.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:15:23.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:15:24.656 [DEBUG] [Thread-140651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:15:24.656 [DEBUG] [Thread-140651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:15:24.704 [DEBUG] [Thread-140651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:15:24.704 [DEBUG] [Thread-140651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:15:24.713 [DEBUG] [Thread-140651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:15:24.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:15:24.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:15:24.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:15:24.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:15:24.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:15:24.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:15:24.750 [DEBUG] [Thread-140651] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:15:29.711 [DEBUG] [Thread-140653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:15:40.756 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:15:40.758 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:15:44.764 [DEBUG] [Thread-140654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:15:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:15:54.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:15:54.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:15:56.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 15, 21), 0.65, 95.5, 0.0, 18.16, 12.85, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:15:56.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:15:21
2026-02-12T03:15:56.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:15:57.085 [DEBUG] [Thread-140655] [transport.py] [_log()] starting thread (client mode): 0xa2d009a0
2026-02-12T03:15:57.085 [DEBUG] [Thread-140655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:15:57.104 [DEBUG] [Thread-140655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:15:57.104 [INFO] [Thread-140655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] client lang: <none>
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] server lang: <none>
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] kex follows: False
2026-02-12T03:15:57.107 [DEBUG] [Thread-140655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:15:57.108 [DEBUG] [Thread-140655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:15:57.108 [DEBUG] [Thread-140655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:15:57.108 [DEBUG] [Thread-140655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:15:57.108 [DEBUG] [Thread-140655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:15:57.108 [DEBUG] [Thread-140655] [transport.py] [_log()] Compression: none
2026-02-12T03:15:57.108 [DEBUG] [Thread-140655] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:15:57.117 [DEBUG] [Thread-140655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:15:57.118 [DEBUG] [Thread-140655] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:15:57.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:15:57.119 [DEBUG] [Thread-140655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:15:57.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:15:57.121 [DEBUG] [Thread-140655] [transport.py] [_log()] userauth is OK
2026-02-12T03:15:57.121 [DEBUG] [Thread-140655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:15:57.121 [DEBUG] [Thread-140655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:15:57.121 [DEBUG] [Thread-140655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:15:57.121 [DEBUG] [Thread-140655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:15:57.140 [INFO] [Thread-140655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:15:57.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:15:57.770 [DEBUG] [Thread-140655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:15:57.771 [DEBUG] [Thread-140655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:15:57.771 [DEBUG] [Thread-140655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:15:57.811 [DEBUG] [Thread-140655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:15:57.811 [DEBUG] [Thread-140655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:15:57.814 [DEBUG] [Thread-140655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:15:57.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:15:57.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:15:57.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:15:57.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:15:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:15:57.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:15:57.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:15:57.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:15:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:15:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.052561 -999.00  +12.90  12.36     92  +11.70 1 3 1 3 1     0    0 1.21 -1.01 ----- 12.4 12.4 156.3 20.6 14.9 -2.1 14.7 -1.8 14.6 -1.9 15.0 -1.9
2026-02-12T03:15:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:15:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:15:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.052561
2026-02-12T03:15:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:15:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:15:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:15:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:15:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:15:57.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:15:21', tmtdew=0.65, humidity=95.5, cloud=0.0, wind=18.16, temperature=12.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:15:41.270', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:15:57.839 [DEBUG] [Thread-140655] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:15:57.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:15:57.938 [DEBUG] [Thread-140658] [transport.py] [_log()] starting thread (client mode): 0xa5742bf0
2026-02-12T03:15:57.938 [DEBUG] [Thread-140658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:15:57.952 [DEBUG] [Thread-140658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:15:57.952 [INFO] [Thread-140658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:15:57.959 [DEBUG] [Thread-140658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:15:57.960 [DEBUG] [Thread-140658] [transport.py] [_log()] client lang: <none>
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] server lang: <none>
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] kex follows: False
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] Compression: none
2026-02-12T03:15:57.961 [DEBUG] [Thread-140658] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:15:58.016 [DEBUG] [Thread-140658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:15:58.016 [DEBUG] [Thread-140658] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:15:58.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:15:58.017 [DEBUG] [Thread-140658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:15:58.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:15:58.072 [DEBUG] [Thread-140658] [transport.py] [_log()] userauth is OK
2026-02-12T03:15:58.073 [DEBUG] [Thread-140658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:15:58.073 [DEBUG] [Thread-140658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:15:58.073 [DEBUG] [Thread-140658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:15:58.073 [DEBUG] [Thread-140658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:15:58.091 [INFO] [Thread-140658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:15:58.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:15:58.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:15:58.913 [DEBUG] [Thread-140658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:15:58.913 [DEBUG] [Thread-140658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:15:58.960 [DEBUG] [Thread-140658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:15:58.960 [DEBUG] [Thread-140658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:15:58.968 [DEBUG] [Thread-140658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:15:58.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:15:58.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:15:58.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:15:58.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:15:58.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:15:58.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:15:58.999 [DEBUG] [Thread-140658] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:15:59.798 [DEBUG] [Thread-140660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:16:09.965 [DEBUG] [Thread-140661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:16:14.846 [DEBUG] [Thread-140662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:16:29.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:16:29.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:16:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:16:29.882 [DEBUG] [Thread-140663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:16:30.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 15, 56), 0.64, 95.55, 0.0, 19.71, 12.87, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:16:30.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:15:56
2026-02-12T03:16:31.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:16:31.348 [DEBUG] [Thread-140664] [transport.py] [_log()] starting thread (client mode): 0xa5743190
2026-02-12T03:16:31.349 [DEBUG] [Thread-140664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:16:31.370 [DEBUG] [Thread-140664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:16:31.370 [INFO] [Thread-140664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:16:31.372 [DEBUG] [Thread-140664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:16:31.372 [DEBUG] [Thread-140664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] client lang: <none>
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] server lang: <none>
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] kex follows: False
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] Compression: none
2026-02-12T03:16:31.373 [DEBUG] [Thread-140664] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:16:31.387 [DEBUG] [Thread-140664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:16:31.388 [DEBUG] [Thread-140664] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:16:31.389 [DEBUG] [Thread-140664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:16:31.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:16:31.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:16:31.391 [DEBUG] [Thread-140664] [transport.py] [_log()] userauth is OK
2026-02-12T03:16:31.391 [DEBUG] [Thread-140664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:16:31.391 [DEBUG] [Thread-140664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:16:31.391 [DEBUG] [Thread-140664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:16:31.391 [DEBUG] [Thread-140664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:16:31.426 [INFO] [Thread-140664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:16:31.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:16:32.079 [DEBUG] [Thread-140664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:16:32.080 [DEBUG] [Thread-140664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:16:32.080 [DEBUG] [Thread-140664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:16:32.120 [DEBUG] [Thread-140664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:16:32.120 [DEBUG] [Thread-140664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:16:32.123 [DEBUG] [Thread-140664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:16:32.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:16:32.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:16:32.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:16:32.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:16:32.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:16:32.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:16:32.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:16:32.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:16:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:16:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.052909 -999.00  +12.90  14.85     92  +11.70 1 3 1 3 1     0    0 1.21 -1.57 ----- 14.8 14.8 162.9 23.9 14.9 -2.1 14.7 -1.9 14.6 -2.0 14.9 -2.0
2026-02-12T03:16:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:16:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:16:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.052909
2026-02-12T03:16:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:16:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:16:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:16:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:16:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:16:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:15:56', tmtdew=0.64, humidity=95.55, cloud=0.0, wind=19.71, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:16:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:16:32.147 [DEBUG] [Thread-140664] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:16:32.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:16:40.960 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:16:40.962 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:16:44.914 [DEBUG] [Thread-140667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:16:59.966 [DEBUG] [Thread-140668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:17:10.045 [DEBUG] [Thread-140669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:17:15.002 [DEBUG] [Thread-140670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:17:30.039 [DEBUG] [Thread-140671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:17:41.163 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:17:41.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:17:45.075 [DEBUG] [Thread-140672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:18:00.112 [DEBUG] [Thread-140673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:18:10.130 [DEBUG] [Thread-140674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:18:15.143 [DEBUG] [Thread-140675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:18:30.176 [DEBUG] [Thread-140676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:18:41.364 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:18:41.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:18:44.802 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T03:18:45.212 [DEBUG] [Thread-140677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:00.251 [DEBUG] [Thread-140678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:10.211 [DEBUG] [Thread-140679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:14.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:19:14.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:19:14.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:19:15.287 [DEBUG] [Thread-140680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:16.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 18, 54), 0.6, 96.29, 0.0, 22.81, 13.06, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:19:16.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:18:54
2026-02-12T03:19:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:19:17.207 [DEBUG] [Thread-140681] [transport.py] [_log()] starting thread (client mode): 0xa57423e0
2026-02-12T03:19:17.207 [DEBUG] [Thread-140681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:19:17.227 [DEBUG] [Thread-140681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:19:17.228 [INFO] [Thread-140681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] client lang: <none>
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] server lang: <none>
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] kex follows: False
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:19:17.231 [DEBUG] [Thread-140681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:19:17.232 [DEBUG] [Thread-140681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:19:17.232 [DEBUG] [Thread-140681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:19:17.232 [DEBUG] [Thread-140681] [transport.py] [_log()] Compression: none
2026-02-12T03:19:17.232 [DEBUG] [Thread-140681] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:19:17.249 [DEBUG] [Thread-140681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:19:17.250 [DEBUG] [Thread-140681] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:19:17.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:19:17.251 [DEBUG] [Thread-140681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:19:17.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:19:17.253 [DEBUG] [Thread-140681] [transport.py] [_log()] userauth is OK
2026-02-12T03:19:17.253 [DEBUG] [Thread-140681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:19:17.254 [DEBUG] [Thread-140681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:19:17.254 [DEBUG] [Thread-140681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:19:17.254 [DEBUG] [Thread-140681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:19:17.279 [INFO] [Thread-140681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:19:17.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:19:17.850 [DEBUG] [Thread-140681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:19:17.851 [DEBUG] [Thread-140681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:19:17.851 [DEBUG] [Thread-140681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:19:17.891 [DEBUG] [Thread-140681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:19:17.892 [DEBUG] [Thread-140681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:19:17.895 [DEBUG] [Thread-140681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:19:17.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:19:17.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:19:17.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:19:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:19:17.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:19:17.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:19:17.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:19:17.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:19:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:19:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.054645 -999.00  +12.90  13.40     92  +11.70 1 3 1 3 1     0    0 1.18 -2.42 ----- 13.4 13.4 149.4 19.8 14.9 -2.0 14.7 -1.6 14.6 -1.9 14.9 -1.8
2026-02-12T03:19:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:19:17.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:19:17.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.054645
2026-02-12T03:19:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:19:17.914 [DEBUG] [Thread-140681] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:19:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:19:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:19:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:19:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:19:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:18:54', tmtdew=0.6, humidity=96.29, cloud=0.0, wind=22.81, temperature=13.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:18:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:19:17.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:19:18.007 [DEBUG] [Thread-140684] [transport.py] [_log()] starting thread (client mode): 0xa2d9e470
2026-02-12T03:19:18.007 [DEBUG] [Thread-140684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:19:18.021 [DEBUG] [Thread-140684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:19:18.022 [INFO] [Thread-140684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:19:18.029 [DEBUG] [Thread-140684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:19:18.030 [DEBUG] [Thread-140684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:19:18.030 [DEBUG] [Thread-140684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:19:18.030 [DEBUG] [Thread-140684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] client lang: <none>
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] server lang: <none>
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] kex follows: False
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:19:18.031 [DEBUG] [Thread-140684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:19:18.032 [DEBUG] [Thread-140684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:19:18.032 [DEBUG] [Thread-140684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:19:18.032 [DEBUG] [Thread-140684] [transport.py] [_log()] Compression: none
2026-02-12T03:19:18.032 [DEBUG] [Thread-140684] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:19:18.090 [DEBUG] [Thread-140684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:19:18.091 [DEBUG] [Thread-140684] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:19:18.091 [DEBUG] [Thread-140684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:19:18.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:19:18.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:19:18.147 [DEBUG] [Thread-140684] [transport.py] [_log()] userauth is OK
2026-02-12T03:19:18.147 [DEBUG] [Thread-140684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:19:18.147 [DEBUG] [Thread-140684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:19:18.147 [DEBUG] [Thread-140684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:19:18.147 [DEBUG] [Thread-140684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:19:18.171 [INFO] [Thread-140684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:19:18.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:19:18.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:19:18.969 [DEBUG] [Thread-140684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:19:18.969 [DEBUG] [Thread-140684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:19:19.017 [DEBUG] [Thread-140684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:19:19.018 [DEBUG] [Thread-140684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:19:19.027 [DEBUG] [Thread-140684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:19:19.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:19:19.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:19:19.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:19:19.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:19:19.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:19:19.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:19:19.068 [DEBUG] [Thread-140684] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:19:30.322 [DEBUG] [Thread-140686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:41.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:41.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:45.387 [DEBUG] [Thread-140687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:19:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:19:49.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:19:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:19:51.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 19, 31), 0.63, 96.14, 0.0, 22.55, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:19:51.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:19:31
2026-02-12T03:19:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:19:51.909 [DEBUG] [Thread-140688] [transport.py] [_log()] starting thread (client mode): 0xa2db4370
2026-02-12T03:19:51.909 [DEBUG] [Thread-140688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:19:51.929 [DEBUG] [Thread-140688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:19:51.929 [INFO] [Thread-140688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] client lang: <none>
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] server lang: <none>
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] kex follows: False
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] Compression: none
2026-02-12T03:19:51.931 [DEBUG] [Thread-140688] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:19:51.950 [DEBUG] [Thread-140688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:19:51.951 [DEBUG] [Thread-140688] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:19:51.951 [DEBUG] [Thread-140688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:19:51.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:19:51.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:19:51.953 [DEBUG] [Thread-140688] [transport.py] [_log()] userauth is OK
2026-02-12T03:19:51.953 [DEBUG] [Thread-140688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:19:51.954 [DEBUG] [Thread-140688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:19:51.954 [DEBUG] [Thread-140688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:19:51.954 [DEBUG] [Thread-140688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:19:51.978 [INFO] [Thread-140688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:19:51.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:19:52.563 [DEBUG] [Thread-140688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:19:52.563 [DEBUG] [Thread-140688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:19:52.563 [DEBUG] [Thread-140688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:19:52.604 [DEBUG] [Thread-140688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:19:52.604 [DEBUG] [Thread-140688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:19:52.609 [DEBUG] [Thread-140688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:19:52.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:19:52.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:19:52.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:19:52.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:19:52.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:19:52.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:19:52.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:19:52.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:19:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:19:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.055339 -999.00  +13.00  14.56     92  +11.80 1 3 1 3 1     0    0 1.17 -2.64 ----- 14.6 14.6 157.8 21.6 14.9 -2.0 14.8 -1.7 14.6 -2.0 15.0 -1.8
2026-02-12T03:19:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:19:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:19:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.055339
2026-02-12T03:19:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:19:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:19:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:19:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:19:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:19:52.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:19:31', tmtdew=0.63, humidity=96.14, cloud=0.0, wind=22.55, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:19:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:19:52.635 [DEBUG] [Thread-140688] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:19:52.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:19:52.741 [DEBUG] [Thread-140691] [transport.py] [_log()] starting thread (client mode): 0xa2db5870
2026-02-12T03:19:52.742 [DEBUG] [Thread-140691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:19:52.757 [DEBUG] [Thread-140691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:19:52.758 [INFO] [Thread-140691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:19:52.765 [DEBUG] [Thread-140691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:19:52.766 [DEBUG] [Thread-140691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:19:52.766 [DEBUG] [Thread-140691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:19:52.766 [DEBUG] [Thread-140691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] client lang: <none>
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] server lang: <none>
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] kex follows: False
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:19:52.767 [DEBUG] [Thread-140691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:19:52.768 [DEBUG] [Thread-140691] [transport.py] [_log()] Compression: none
2026-02-12T03:19:52.768 [DEBUG] [Thread-140691] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:19:52.823 [DEBUG] [Thread-140691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:19:52.824 [DEBUG] [Thread-140691] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:19:52.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:19:52.825 [DEBUG] [Thread-140691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:19:52.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:19:52.882 [DEBUG] [Thread-140691] [transport.py] [_log()] userauth is OK
2026-02-12T03:19:52.883 [DEBUG] [Thread-140691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:19:52.883 [DEBUG] [Thread-140691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:19:52.883 [DEBUG] [Thread-140691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:19:52.883 [DEBUG] [Thread-140691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:19:52.907 [INFO] [Thread-140691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:19:52.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:19:52.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:19:53.724 [DEBUG] [Thread-140691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:19:53.725 [DEBUG] [Thread-140691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:19:53.776 [DEBUG] [Thread-140691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:19:53.776 [DEBUG] [Thread-140691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:19:53.787 [DEBUG] [Thread-140691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:19:53.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:19:53.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:19:53.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:19:53.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:19:53.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:19:53.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:19:53.825 [DEBUG] [Thread-140691] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:20:00.422 [DEBUG] [Thread-140693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:20:10.276 [DEBUG] [Thread-140694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:20:15.466 [DEBUG] [Thread-140695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:20:23.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:20:23.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:20:23.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:20:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 20, 7), 0.62, 96.15, 0.0, 23.31, 12.93, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:20:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:20:07
2026-02-12T03:20:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:20:26.230 [DEBUG] [Thread-140696] [transport.py] [_log()] starting thread (client mode): 0xa2d00df0
2026-02-12T03:20:26.230 [DEBUG] [Thread-140696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:20:26.253 [DEBUG] [Thread-140696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:20:26.253 [INFO] [Thread-140696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] client lang: <none>
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] server lang: <none>
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] kex follows: False
2026-02-12T03:20:26.256 [DEBUG] [Thread-140696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:20:26.257 [DEBUG] [Thread-140696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:20:26.257 [DEBUG] [Thread-140696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:20:26.257 [DEBUG] [Thread-140696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:20:26.257 [DEBUG] [Thread-140696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:20:26.257 [DEBUG] [Thread-140696] [transport.py] [_log()] Compression: none
2026-02-12T03:20:26.257 [DEBUG] [Thread-140696] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:20:26.273 [DEBUG] [Thread-140696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:20:26.274 [DEBUG] [Thread-140696] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:20:26.274 [DEBUG] [Thread-140696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:20:26.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:20:26.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:20:26.276 [DEBUG] [Thread-140696] [transport.py] [_log()] userauth is OK
2026-02-12T03:20:26.276 [DEBUG] [Thread-140696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:20:26.277 [DEBUG] [Thread-140696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:20:26.277 [DEBUG] [Thread-140696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:20:26.277 [DEBUG] [Thread-140696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:20:26.297 [INFO] [Thread-140696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:20:26.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:20:26.845 [DEBUG] [Thread-140696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:20:26.845 [DEBUG] [Thread-140696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:20:26.845 [DEBUG] [Thread-140696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:20:26.886 [DEBUG] [Thread-140696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:20:26.887 [DEBUG] [Thread-140696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:20:26.890 [DEBUG] [Thread-140696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:20:26.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:20:26.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:20:26.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:20:26.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:20:26.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:20:26.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:20:26.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:20:26.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:20:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:20:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.055686 -999.00  +13.00  15.78     92  +11.90 1 3 1 3 1     0    0 1.14 -2.81 ----- 15.8 15.8 150.6 18.1 14.9 -2.0 14.8 -2.0 14.6 -2.0 15.0 -2.0
2026-02-12T03:20:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:20:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:20:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.055686
2026-02-12T03:20:26.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:20:26.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:20:26.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:20:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:20:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:20:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:20:07', tmtdew=0.62, humidity=96.15, cloud=0.0, wind=23.31, temperature=12.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:20:11.270', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:20:26.913 [DEBUG] [Thread-140696] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:20:26.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:20:27.010 [DEBUG] [Thread-140699] [transport.py] [_log()] starting thread (client mode): 0xa2db6ef0
2026-02-12T03:20:27.010 [DEBUG] [Thread-140699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:20:27.028 [DEBUG] [Thread-140699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:20:27.028 [INFO] [Thread-140699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:20:27.039 [DEBUG] [Thread-140699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] client lang: <none>
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] server lang: <none>
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] kex follows: False
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] Compression: none
2026-02-12T03:20:27.040 [DEBUG] [Thread-140699] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:20:27.098 [DEBUG] [Thread-140699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:20:27.099 [DEBUG] [Thread-140699] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:20:27.099 [DEBUG] [Thread-140699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:20:27.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:20:27.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:20:27.155 [DEBUG] [Thread-140699] [transport.py] [_log()] userauth is OK
2026-02-12T03:20:27.155 [DEBUG] [Thread-140699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:20:27.155 [DEBUG] [Thread-140699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:20:27.155 [DEBUG] [Thread-140699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:20:27.155 [DEBUG] [Thread-140699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:20:27.175 [INFO] [Thread-140699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:20:27.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:20:27.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:20:28.014 [DEBUG] [Thread-140699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:20:28.015 [DEBUG] [Thread-140699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:20:28.062 [DEBUG] [Thread-140699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:20:28.063 [DEBUG] [Thread-140699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:20:28.071 [DEBUG] [Thread-140699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:20:28.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:20: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')
2026-02-12T03:20:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:20:28.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:20:28.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:20:28.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:20:28.106 [DEBUG] [Thread-140699] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:20:30.501 [DEBUG] [Thread-140701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:20:41.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:20:41.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:20:45.553 [DEBUG] [Thread-140702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:20:58.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:20:58.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:20:58.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:21:00.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 20, 42), 0.57, 96.19, 0.0, 21.74, 13.03, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:21:00.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:20:42
2026-02-12T03:21:00.590 [DEBUG] [Thread-140703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:21:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:21:00.895 [DEBUG] [Thread-140704] [transport.py] [_log()] starting thread (client mode): 0xa2d7b820
2026-02-12T03:21:00.895 [DEBUG] [Thread-140704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:21:00.916 [DEBUG] [Thread-140704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:21:00.916 [INFO] [Thread-140704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] client lang: <none>
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] server lang: <none>
2026-02-12T03:21:00.917 [DEBUG] [Thread-140704] [transport.py] [_log()] kex follows: False
2026-02-12T03:21:00.918 [DEBUG] [Thread-140704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:21:00.918 [DEBUG] [Thread-140704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:21:00.918 [DEBUG] [Thread-140704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:21:00.918 [DEBUG] [Thread-140704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:21:00.918 [DEBUG] [Thread-140704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:21:00.918 [DEBUG] [Thread-140704] [transport.py] [_log()] Compression: none
2026-02-12T03:21:00.918 [DEBUG] [Thread-140704] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:21:00.927 [DEBUG] [Thread-140704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:21:00.928 [DEBUG] [Thread-140704] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:21:00.928 [DEBUG] [Thread-140704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:21:00.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:21:00.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:21:00.930 [DEBUG] [Thread-140704] [transport.py] [_log()] userauth is OK
2026-02-12T03:21:00.930 [DEBUG] [Thread-140704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:21:00.930 [DEBUG] [Thread-140704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:21:00.930 [DEBUG] [Thread-140704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:21:00.930 [DEBUG] [Thread-140704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:21:00.949 [INFO] [Thread-140704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:21:00.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:21:01.525 [DEBUG] [Thread-140704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:21:01.525 [DEBUG] [Thread-140704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:21:01.526 [DEBUG] [Thread-140704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:21:01.566 [DEBUG] [Thread-140704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:21:01.566 [DEBUG] [Thread-140704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:21:01.569 [DEBUG] [Thread-140704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:21:01.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:21:01.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:21:01.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:21:01.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:21:01.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:21:01.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:21:01.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:21:01.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:21:01.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:21:01.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.056034 -999.00  +13.00  14.95     92  +11.80 1 3 1 3 1     0    0 1.12 -2.98 ----- 14.9 14.9 147.8 20.1 14.9 -2.0 14.7 -1.8 14.6 -2.0 14.9 -2.0
2026-02-12T03:21:01.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:21:01.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:21:01.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.056034
2026-02-12T03:21:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:21:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:21:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:21:01.593 [DEBUG] [Thread-140704] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:21:01.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:21:01.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:21:01.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:20:42', tmtdew=0.57, humidity=96.19, cloud=0.0, wind=21.74, temperature=13.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:20:41.338', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:21:01.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:21:01.702 [DEBUG] [Thread-140707] [transport.py] [_log()] starting thread (client mode): 0xa5742230
2026-02-12T03:21:01.702 [DEBUG] [Thread-140707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:21:01.715 [DEBUG] [Thread-140707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:21:01.715 [INFO] [Thread-140707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:21:01.723 [DEBUG] [Thread-140707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:21:01.723 [DEBUG] [Thread-140707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:21:01.723 [DEBUG] [Thread-140707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] client lang: <none>
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] server lang: <none>
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] kex follows: False
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] Compression: none
2026-02-12T03:21:01.724 [DEBUG] [Thread-140707] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:21:01.783 [DEBUG] [Thread-140707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:21:01.784 [DEBUG] [Thread-140707] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:21:01.784 [DEBUG] [Thread-140707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:21:01.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:21:01.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:21:01.842 [DEBUG] [Thread-140707] [transport.py] [_log()] userauth is OK
2026-02-12T03:21:01.843 [DEBUG] [Thread-140707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:21:01.843 [DEBUG] [Thread-140707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:21:01.843 [DEBUG] [Thread-140707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:21:01.843 [DEBUG] [Thread-140707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:21:01.862 [INFO] [Thread-140707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:21:01.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:21:01.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:21:02.739 [DEBUG] [Thread-140707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:21:02.739 [DEBUG] [Thread-140707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:21:02.787 [DEBUG] [Thread-140707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:21:02.788 [DEBUG] [Thread-140707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:21:02.797 [DEBUG] [Thread-140707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:21:02.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:21:02.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:21:02.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:21:02.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:21:02.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:21:02.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:21:02.834 [DEBUG] [Thread-140707] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:21:10.343 [DEBUG] [Thread-140709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:21:15.626 [DEBUG] [Thread-140710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:21:30.679 [DEBUG] [Thread-140711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:21:32.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:21:32.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:21:32.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
2026-02-12T03:21:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 21, 18), 0.57, 96.19, 0.0, 21.65, 13.0, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:21:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:21:18
2026-02-12T03:21:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:21:35.423 [DEBUG] [Thread-140712] [transport.py] [_log()] starting thread (client mode): 0xa2d00b20
2026-02-12T03:21:35.423 [DEBUG] [Thread-140712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:21:35.443 [DEBUG] [Thread-140712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:21:35.443 [INFO] [Thread-140712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:21:35.446 [DEBUG] [Thread-140712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:21:35.446 [DEBUG] [Thread-140712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:21:35.446 [DEBUG] [Thread-140712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:21:35.446 [DEBUG] [Thread-140712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:35.446 [DEBUG] [Thread-140712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:35.446 [DEBUG] [Thread-140712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:35.446 [DEBUG] [Thread-140712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] client lang: <none>
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] server lang: <none>
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] kex follows: False
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] Compression: none
2026-02-12T03:21:35.447 [DEBUG] [Thread-140712] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:21:35.466 [DEBUG] [Thread-140712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:21:35.467 [DEBUG] [Thread-140712] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:21:35.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:21:35.468 [DEBUG] [Thread-140712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:21:35.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:21:35.470 [DEBUG] [Thread-140712] [transport.py] [_log()] userauth is OK
2026-02-12T03:21:35.471 [DEBUG] [Thread-140712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:21:35.471 [DEBUG] [Thread-140712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:21:35.471 [DEBUG] [Thread-140712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:21:35.471 [DEBUG] [Thread-140712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:21:35.497 [INFO] [Thread-140712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:21:35.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:21:36.100 [DEBUG] [Thread-140712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:21:36.101 [DEBUG] [Thread-140712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:21:36.101 [DEBUG] [Thread-140712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:21:36.141 [DEBUG] [Thread-140712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:21:36.142 [DEBUG] [Thread-140712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:21:36.145 [DEBUG] [Thread-140712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:21:36.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:21:36.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:21:36.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:21:36.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:21:36.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:21:36.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:21:36.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:21:36.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:21:36.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:21:36.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.056380 -999.00  +12.90  17.13     92  +11.80 1 3 1 3 1     0    0 1.15 -3.33 ----- 17.1 17.1 154.8 21.6 14.9 -2.1 14.7 -1.9 14.6 -1.9 14.9 -1.8
2026-02-12T03:21:36.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:21:36.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:21:36.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.056380
2026-02-12T03:21:36.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:21:36.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:21:36.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:21:36.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:21:36.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:21:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:21:18', tmtdew=0.57, humidity=96.19, cloud=0.0, wind=21.65, temperature=13.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:21:11.232', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:21:36.170 [DEBUG] [Thread-140712] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:21:36.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:21:36.268 [DEBUG] [Thread-140715] [transport.py] [_log()] starting thread (client mode): 0xa57412a0
2026-02-12T03:21:36.268 [DEBUG] [Thread-140715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:21:36.282 [DEBUG] [Thread-140715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:21:36.282 [INFO] [Thread-140715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:21:36.290 [DEBUG] [Thread-140715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:21:36.290 [DEBUG] [Thread-140715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:21:36.290 [DEBUG] [Thread-140715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:21:36.290 [DEBUG] [Thread-140715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] client lang: <none>
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] server lang: <none>
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] kex follows: False
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] Compression: none
2026-02-12T03:21:36.291 [DEBUG] [Thread-140715] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:21:36.350 [DEBUG] [Thread-140715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:21:36.350 [DEBUG] [Thread-140715] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:21:36.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:21:36.351 [DEBUG] [Thread-140715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:21:36.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:21:36.406 [DEBUG] [Thread-140715] [transport.py] [_log()] userauth is OK
2026-02-12T03:21:36.406 [DEBUG] [Thread-140715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:21:36.406 [DEBUG] [Thread-140715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:21:36.407 [DEBUG] [Thread-140715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:21:36.407 [DEBUG] [Thread-140715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:21:36.425 [INFO] [Thread-140715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:21:36.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:21:36.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:21:37.214 [DEBUG] [Thread-140715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:21:37.214 [DEBUG] [Thread-140715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:21:37.262 [DEBUG] [Thread-140715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:21:37.263 [DEBUG] [Thread-140715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:21:37.272 [DEBUG] [Thread-140715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:21:37.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:21:37.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:21:37.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:21:37.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:21:37.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:21:37.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:21:37.310 [DEBUG] [Thread-140715] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:21:42.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:21:42.002 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:21:45.714 [DEBUG] [Thread-140717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:22:00.775 [DEBUG] [Thread-140718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:22:07.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:22:07.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:22:07.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:22:09.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 21, 53), 0.55, 96.29, 0.0, 21.32, 13.03, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:22:09.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:21:53
2026-02-12T03:22:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:22:09.735 [DEBUG] [Thread-140719] [transport.py] [_log()] starting thread (client mode): 0xa2d03e20
2026-02-12T03:22:09.735 [DEBUG] [Thread-140719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:22:09.755 [DEBUG] [Thread-140719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:22:09.755 [INFO] [Thread-140719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:22:09.758 [DEBUG] [Thread-140719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:22:09.758 [DEBUG] [Thread-140719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:22:09.758 [DEBUG] [Thread-140719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] client lang: <none>
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] server lang: <none>
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] kex follows: False
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] Compression: none
2026-02-12T03:22:09.759 [DEBUG] [Thread-140719] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:22:09.776 [DEBUG] [Thread-140719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:22:09.777 [DEBUG] [Thread-140719] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:22:09.777 [DEBUG] [Thread-140719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:22:09.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:22:09.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:22:09.821 [DEBUG] [Thread-140719] [transport.py] [_log()] userauth is OK
2026-02-12T03:22:09.821 [DEBUG] [Thread-140719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:22:09.821 [DEBUG] [Thread-140719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:22:09.821 [DEBUG] [Thread-140719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:22:09.821 [DEBUG] [Thread-140719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:22:09.841 [INFO] [Thread-140719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:22:09.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:22:10.399 [DEBUG] [Thread-140721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:22:10.419 [DEBUG] [Thread-140719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:22:10.419 [DEBUG] [Thread-140719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:22:10.419 [DEBUG] [Thread-140719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:22:10.460 [DEBUG] [Thread-140719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:22:10.460 [DEBUG] [Thread-140719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:22:10.464 [DEBUG] [Thread-140719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:22:10.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:22:10.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:22:10.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:22:10.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:22:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:22:10.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:22:10.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.056728 -999.00  +12.90  14.88     92  +11.80 1 3 1 3 1     0    0 1.13 -3.74 ----- 14.9 14.9 142.4 19.9 14.9 -1.9 14.8 -1.7 14.6 -1.9 15.0 -1.9
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.056728
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:22:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:21:53', tmtdew=0.55, humidity=96.29, cloud=0.0, wind=21.32, temperature=13.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:21:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:22:10.483 [DEBUG] [Thread-140719] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:22:10.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:22:10.567 [DEBUG] [Thread-140723] [transport.py] [_log()] starting thread (client mode): 0xa2d94820
2026-02-12T03:22:10.567 [DEBUG] [Thread-140723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:22:10.585 [DEBUG] [Thread-140723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:22:10.585 [INFO] [Thread-140723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:22:10.595 [DEBUG] [Thread-140723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] client lang: <none>
2026-02-12T03:22:10.596 [DEBUG] [Thread-140723] [transport.py] [_log()] server lang: <none>
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] kex follows: False
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] Compression: none
2026-02-12T03:22:10.597 [DEBUG] [Thread-140723] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:22:10.654 [DEBUG] [Thread-140723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:22:10.655 [DEBUG] [Thread-140723] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:22:10.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:22:10.656 [DEBUG] [Thread-140723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:22:10.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:22:10.714 [DEBUG] [Thread-140723] [transport.py] [_log()] userauth is OK
2026-02-12T03:22:10.714 [DEBUG] [Thread-140723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:22:10.714 [DEBUG] [Thread-140723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:22:10.715 [DEBUG] [Thread-140723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:22:10.715 [DEBUG] [Thread-140723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:22:10.736 [INFO] [Thread-140723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:22:10.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:22:10.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:22:11.531 [DEBUG] [Thread-140723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:22:11.532 [DEBUG] [Thread-140723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:22:11.579 [DEBUG] [Thread-140723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:22:11.580 [DEBUG] [Thread-140723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:22:11.591 [DEBUG] [Thread-140723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:22:11.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:22:11.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:22:11.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:22:11.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:22:11.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:22:11.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:22:11.628 [DEBUG] [Thread-140723] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:22:15.813 [DEBUG] [Thread-140725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:22:30.867 [DEBUG] [Thread-140726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:22:41.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:22:41.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:22:41.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:22:42.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:22:42.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:22:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 22, 28), 0.56, 96.22, 0.0, 21.19, 12.95, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:22:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:22:28
2026-02-12T03:22:43.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:22:44.019 [DEBUG] [Thread-140727] [transport.py] [_log()] starting thread (client mode): 0x9eb04700
2026-02-12T03:22:44.020 [DEBUG] [Thread-140727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:22:44.038 [DEBUG] [Thread-140727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:22:44.038 [INFO] [Thread-140727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] client lang: <none>
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] server lang: <none>
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] kex follows: False
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] Compression: none
2026-02-12T03:22:44.040 [DEBUG] [Thread-140727] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:22:44.053 [DEBUG] [Thread-140727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:22:44.053 [DEBUG] [Thread-140727] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:22:44.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:22:44.054 [DEBUG] [Thread-140727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:22:44.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:22:44.055 [DEBUG] [Thread-140727] [transport.py] [_log()] userauth is OK
2026-02-12T03:22:44.055 [DEBUG] [Thread-140727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:22:44.055 [DEBUG] [Thread-140727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:22:44.055 [DEBUG] [Thread-140727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:22:44.055 [DEBUG] [Thread-140727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:22:44.068 [INFO] [Thread-140727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:22:44.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:22:44.630 [DEBUG] [Thread-140727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:22:44.631 [DEBUG] [Thread-140727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:22:44.631 [DEBUG] [Thread-140727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:22:44.671 [DEBUG] [Thread-140727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:22:44.671 [DEBUG] [Thread-140727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:22:44.675 [DEBUG] [Thread-140727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:22:44.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:22:44.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:22:44.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:22:44.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:22:44.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:22:44.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:22:44.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:22:44.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:22:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:22:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.057075 -999.00  +13.00  18.42     92  +11.90 1 3 1 3 1     0    0 1.12 -4.64 ----- 18.4 18.4 147.4 25.3 14.9 -1.8 14.8 -1.7 14.6 -1.8 15.0 -1.6
2026-02-12T03:22:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:22:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:22:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.057075
2026-02-12T03:22:44.698 [DEBUG] [Thread-140727] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:22:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:22:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:22:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:22:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:22:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:22:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:22:28', tmtdew=0.56, humidity=96.22, cloud=0.0, wind=21.19, temperature=12.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:22:11.280', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:22:44.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:22:44.795 [DEBUG] [Thread-140730] [transport.py] [_log()] starting thread (client mode): 0xa81d69b0
2026-02-12T03:22:44.795 [DEBUG] [Thread-140730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:22:44.814 [DEBUG] [Thread-140730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:22:44.814 [INFO] [Thread-140730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:22:44.821 [DEBUG] [Thread-140730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] client lang: <none>
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] server lang: <none>
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] kex follows: False
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:22:44.822 [DEBUG] [Thread-140730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:22:44.823 [DEBUG] [Thread-140730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:22:44.823 [DEBUG] [Thread-140730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:22:44.823 [DEBUG] [Thread-140730] [transport.py] [_log()] Compression: none
2026-02-12T03:22:44.823 [DEBUG] [Thread-140730] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:22:44.881 [DEBUG] [Thread-140730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:22:44.882 [DEBUG] [Thread-140730] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:22:44.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:22:44.883 [DEBUG] [Thread-140730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:22:44.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:22:44.942 [DEBUG] [Thread-140730] [transport.py] [_log()] userauth is OK
2026-02-12T03:22:44.942 [DEBUG] [Thread-140730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:22:44.942 [DEBUG] [Thread-140730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:22:44.942 [DEBUG] [Thread-140730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:22:44.942 [DEBUG] [Thread-140730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:22:44.960 [INFO] [Thread-140730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:22:44.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:22:44.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:22:45.756 [DEBUG] [Thread-140730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:22:45.757 [DEBUG] [Thread-140730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:22:45.804 [DEBUG] [Thread-140730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:22:45.804 [DEBUG] [Thread-140730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:22:45.814 [DEBUG] [Thread-140730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:22:45.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:22:45.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')
2026-02-12T03:22:45.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:22:45.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:22:45.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:22:45.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:22:45.850 [DEBUG] [Thread-140730] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:22:45.907 [DEBUG] [Thread-140732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:00.962 [DEBUG] [Thread-140733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:10.456 [DEBUG] [Thread-140734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:23:15.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:23:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:23:15.998 [DEBUG] [Thread-140735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 23, 4), 0.55, 96.27, 0.0, 21.81, 12.95, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:23:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:23:04
2026-02-12T03:23:18.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:23:18.178 [DEBUG] [Thread-140736] [transport.py] [_log()] starting thread (client mode): 0xa2d966e0
2026-02-12T03:23:18.179 [DEBUG] [Thread-140736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:23:18.198 [DEBUG] [Thread-140736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:23:18.198 [INFO] [Thread-140736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:23:18.201 [DEBUG] [Thread-140736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] client lang: <none>
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] server lang: <none>
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] kex follows: False
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:23:18.202 [DEBUG] [Thread-140736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:23:18.203 [DEBUG] [Thread-140736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:23:18.203 [DEBUG] [Thread-140736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:23:18.203 [DEBUG] [Thread-140736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:23:18.203 [DEBUG] [Thread-140736] [transport.py] [_log()] Compression: none
2026-02-12T03:23:18.203 [DEBUG] [Thread-140736] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:23:18.221 [DEBUG] [Thread-140736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:23:18.222 [DEBUG] [Thread-140736] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:23:18.223 [DEBUG] [Thread-140736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:23:18.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:23:18.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:23:18.225 [DEBUG] [Thread-140736] [transport.py] [_log()] userauth is OK
2026-02-12T03:23:18.225 [DEBUG] [Thread-140736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:23:18.225 [DEBUG] [Thread-140736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:23:18.225 [DEBUG] [Thread-140736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:23:18.225 [DEBUG] [Thread-140736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:23:18.239 [INFO] [Thread-140736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:23:18.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:23:18.831 [DEBUG] [Thread-140736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:23:18.831 [DEBUG] [Thread-140736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:23:18.832 [DEBUG] [Thread-140736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:23:18.872 [DEBUG] [Thread-140736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:23:18.872 [DEBUG] [Thread-140736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:23:18.876 [DEBUG] [Thread-140736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:23:18.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:23:18.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:23:18.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:23:18.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:23:18.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:23:18.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:23:18.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:23:18.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:23:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:23:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.057770 -999.00  +13.00  18.18     93  +11.90 1 3 1 3 1     0    0 1.05 -6.57 ----- 18.2 18.2 149.8 22.6 -999.0 -999.0 14.8 -1.8 14.6 -2.1 15.0 -1.9
2026-02-12T03:23:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:23:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:23:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.057770
2026-02-12T03:23:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:23:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:23:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:23:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:23:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:23:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:23:04', tmtdew=0.55, humidity=96.27, cloud=0.0, wind=21.81, temperature=12.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:23:11.328', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:23:18.910 [DEBUG] [Thread-140736] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:23:18.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:23:19.002 [DEBUG] [Thread-140739] [transport.py] [_log()] starting thread (client mode): 0xa5759000
2026-02-12T03:23:19.002 [DEBUG] [Thread-140739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:23:19.016 [DEBUG] [Thread-140739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:23:19.016 [INFO] [Thread-140739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] client lang: <none>
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] server lang: <none>
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] kex follows: False
2026-02-12T03:23:19.024 [DEBUG] [Thread-140739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:23:19.025 [DEBUG] [Thread-140739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:23:19.025 [DEBUG] [Thread-140739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:23:19.025 [DEBUG] [Thread-140739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:23:19.025 [DEBUG] [Thread-140739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:23:19.025 [DEBUG] [Thread-140739] [transport.py] [_log()] Compression: none
2026-02-12T03:23:19.025 [DEBUG] [Thread-140739] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:23:19.081 [DEBUG] [Thread-140739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:23:19.081 [DEBUG] [Thread-140739] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:23:19.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:23:19.082 [DEBUG] [Thread-140739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:23:19.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:23:19.137 [DEBUG] [Thread-140739] [transport.py] [_log()] userauth is OK
2026-02-12T03:23:19.138 [DEBUG] [Thread-140739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:23:19.138 [DEBUG] [Thread-140739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:23:19.138 [DEBUG] [Thread-140739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:23:19.138 [DEBUG] [Thread-140739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:23:19.156 [INFO] [Thread-140739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:23:19.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:23:19.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:23:19.963 [DEBUG] [Thread-140739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:23:19.964 [DEBUG] [Thread-140739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:23:20.012 [DEBUG] [Thread-140739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:23:20.013 [DEBUG] [Thread-140739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:23:20.023 [DEBUG] [Thread-140739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:23:20.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:23:20.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:23:20.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:23:20.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:23:20.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:23:20.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:23:20.065 [DEBUG] [Thread-140739] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:23:31.036 [DEBUG] [Thread-140741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:42.407 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:42.408 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:46.090 [DEBUG] [Thread-140742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:23:50.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:23:50.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:23:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:23:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 23, 39), 0.98, 93.74, 0.0, 23.36, 13.4, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:23:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:23:39
2026-02-12T03:23:52.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:23:53.051 [DEBUG] [Thread-140743] [transport.py] [_log()] starting thread (client mode): 0xa57411e0
2026-02-12T03:23:53.051 [DEBUG] [Thread-140743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:23:53.068 [DEBUG] [Thread-140743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:23:53.068 [INFO] [Thread-140743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:23:53.070 [DEBUG] [Thread-140743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:23:53.070 [DEBUG] [Thread-140743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:23:53.070 [DEBUG] [Thread-140743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:23:53.070 [DEBUG] [Thread-140743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:53.070 [DEBUG] [Thread-140743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] client lang: <none>
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] server lang: <none>
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] kex follows: False
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] Compression: none
2026-02-12T03:23:53.071 [DEBUG] [Thread-140743] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:23:53.086 [DEBUG] [Thread-140743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:23:53.087 [DEBUG] [Thread-140743] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:23:53.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:23:53.088 [DEBUG] [Thread-140743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:23:53.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:23:53.090 [DEBUG] [Thread-140743] [transport.py] [_log()] userauth is OK
2026-02-12T03:23:53.090 [DEBUG] [Thread-140743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:23:53.090 [DEBUG] [Thread-140743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:23:53.090 [DEBUG] [Thread-140743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:23:53.090 [DEBUG] [Thread-140743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:23:53.107 [INFO] [Thread-140743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:23:53.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:23:53.670 [DEBUG] [Thread-140743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:23:53.670 [DEBUG] [Thread-140743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:23:53.671 [DEBUG] [Thread-140743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:23:53.711 [DEBUG] [Thread-140743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:23:53.711 [DEBUG] [Thread-140743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:23:53.714 [DEBUG] [Thread-140743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:23:53.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:23:53.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:23:53.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:23:53.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:23:53.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:23:53.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:23:53.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:23:53.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:23:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:23:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.058117 -999.00  +12.90  16.56     93  +11.80 1 3 1 3 1     0    0 0.97 -7.96 ----- 16.6 16.6 156.4 23.1 14.9 -2.0 14.8 -1.8 14.7 -1.9 -999.0 -999.0
2026-02-12T03:23:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:23:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:23:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.058117
2026-02-12T03:23:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:23:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:23:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:23:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:23:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:23:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:23:39', tmtdew=0.98, humidity=93.74, cloud=0.0, wind=23.36, temperature=13.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:23:41.309', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:23:53.742 [DEBUG] [Thread-140743] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:23:53.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:23:53.832 [DEBUG] [Thread-140746] [transport.py] [_log()] starting thread (client mode): 0xa2d94730
2026-02-12T03:23:53.832 [DEBUG] [Thread-140746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:23:53.846 [DEBUG] [Thread-140746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:23:53.846 [INFO] [Thread-140746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:23:53.854 [DEBUG] [Thread-140746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:23:53.854 [DEBUG] [Thread-140746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:23:53.854 [DEBUG] [Thread-140746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:23:53.854 [DEBUG] [Thread-140746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:53.854 [DEBUG] [Thread-140746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:23:53.854 [DEBUG] [Thread-140746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] client lang: <none>
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] server lang: <none>
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] kex follows: False
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] Compression: none
2026-02-12T03:23:53.855 [DEBUG] [Thread-140746] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:23:53.912 [DEBUG] [Thread-140746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:23:53.913 [DEBUG] [Thread-140746] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:23:53.913 [DEBUG] [Thread-140746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:23:53.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:23:53.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:23:53.968 [DEBUG] [Thread-140746] [transport.py] [_log()] userauth is OK
2026-02-12T03:23:53.968 [DEBUG] [Thread-140746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:23:53.968 [DEBUG] [Thread-140746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:23:53.969 [DEBUG] [Thread-140746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:23:53.969 [DEBUG] [Thread-140746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:23:53.984 [INFO] [Thread-140746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:23:53.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:23:53.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:23:54.806 [DEBUG] [Thread-140746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:23:54.806 [DEBUG] [Thread-140746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:23:54.854 [DEBUG] [Thread-140746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:23:54.855 [DEBUG] [Thread-140746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:23:54.864 [DEBUG] [Thread-140746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:23:54.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:23:54.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')
2026-02-12T03:23: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
2026-02-12T03:23:54.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:23:54.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:23:54.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:23:54.901 [DEBUG] [Thread-140746] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:24:01.126 [DEBUG] [Thread-140748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:24:10.522 [DEBUG] [Thread-140749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:24:16.180 [DEBUG] [Thread-140750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:24:24.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:24:24.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:24:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:24:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 24, 14), 0.54, 96.35, 0.0, 22.66, 12.97, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:24:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:24:14
2026-02-12T03:24:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:24:27.292 [DEBUG] [Thread-140751] [transport.py] [_log()] starting thread (client mode): 0xa81d50f0
2026-02-12T03:24:27.292 [DEBUG] [Thread-140751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:24:27.313 [DEBUG] [Thread-140751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:24:27.313 [INFO] [Thread-140751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:24:27.316 [DEBUG] [Thread-140751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:24:27.316 [DEBUG] [Thread-140751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:24:27.316 [DEBUG] [Thread-140751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:24:27.316 [DEBUG] [Thread-140751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:24:27.316 [DEBUG] [Thread-140751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] client lang: <none>
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] server lang: <none>
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] kex follows: False
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:24:27.317 [DEBUG] [Thread-140751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:24:27.318 [DEBUG] [Thread-140751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:24:27.318 [DEBUG] [Thread-140751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:24:27.318 [DEBUG] [Thread-140751] [transport.py] [_log()] Compression: none
2026-02-12T03:24:27.318 [DEBUG] [Thread-140751] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:24:27.337 [DEBUG] [Thread-140751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:24:27.338 [DEBUG] [Thread-140751] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:24:27.338 [DEBUG] [Thread-140751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:24:27.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:24:27.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:24:27.340 [DEBUG] [Thread-140751] [transport.py] [_log()] userauth is OK
2026-02-12T03:24:27.340 [DEBUG] [Thread-140751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:24:27.340 [DEBUG] [Thread-140751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:24:27.340 [DEBUG] [Thread-140751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:24:27.341 [DEBUG] [Thread-140751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:24:27.354 [INFO] [Thread-140751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:24:27.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:24:27.998 [DEBUG] [Thread-140751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:24:27.998 [DEBUG] [Thread-140751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:24:27.999 [DEBUG] [Thread-140751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:24:28.039 [DEBUG] [Thread-140751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:24:28.039 [DEBUG] [Thread-140751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:24:28.042 [DEBUG] [Thread-140751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:24:28.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:24:28.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:24:28.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:24:28.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:24:28.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:24:28.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:24:28.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:24:28.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:24:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:24:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.058464 -999.00  +12.90  21.20     93  +11.80 1 3 1 3 1     0    0 0.97 -8.38 ----- 21.2 21.2 142.6 24.2 14.9 -2.0 14.8 -1.9 14.6 -2.1 14.9 -2.0
2026-02-12T03:24:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:24:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:24:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.058464
2026-02-12T03:24:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:24:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:24:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:24:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:24:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:24:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:24:14', tmtdew=0.54, humidity=96.35, cloud=0.0, wind=22.66, temperature=12.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:24:11.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:24:28.067 [DEBUG] [Thread-140751] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:24:28.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:24:28.164 [DEBUG] [Thread-140754] [transport.py] [_log()] starting thread (client mode): 0xa81d5870
2026-02-12T03:24:28.165 [DEBUG] [Thread-140754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:24:28.179 [DEBUG] [Thread-140754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:24:28.179 [INFO] [Thread-140754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:24:28.187 [DEBUG] [Thread-140754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:24:28.187 [DEBUG] [Thread-140754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:24:28.187 [DEBUG] [Thread-140754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:24:28.187 [DEBUG] [Thread-140754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:24:28.187 [DEBUG] [Thread-140754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] client lang: <none>
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] server lang: <none>
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] kex follows: False
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:24:28.188 [DEBUG] [Thread-140754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:24:28.189 [DEBUG] [Thread-140754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:24:28.189 [DEBUG] [Thread-140754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:24:28.189 [DEBUG] [Thread-140754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:24:28.189 [DEBUG] [Thread-140754] [transport.py] [_log()] Compression: none
2026-02-12T03:24:28.189 [DEBUG] [Thread-140754] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:24:28.244 [DEBUG] [Thread-140754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:24:28.245 [DEBUG] [Thread-140754] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:24:28.245 [DEBUG] [Thread-140754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:24:28.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:24:28.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:24:28.300 [DEBUG] [Thread-140754] [transport.py] [_log()] userauth is OK
2026-02-12T03:24:28.300 [DEBUG] [Thread-140754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:24:28.300 [DEBUG] [Thread-140754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:24:28.300 [DEBUG] [Thread-140754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:24:28.300 [DEBUG] [Thread-140754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:24:28.320 [INFO] [Thread-140754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:24:28.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:24:28.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:24:29.128 [DEBUG] [Thread-140754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:24:29.129 [DEBUG] [Thread-140754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:24:29.177 [DEBUG] [Thread-140754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:24:29.177 [DEBUG] [Thread-140754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:24:29.186 [DEBUG] [Thread-140754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:24:29.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:24:29.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:24:29.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:24:29.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:24:29.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:24:29.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:24:29.220 [DEBUG] [Thread-140754] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:24:31.214 [DEBUG] [Thread-140756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:24:42.614 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:24:42.616 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:24:46.263 [DEBUG] [Thread-140757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:24:59.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:24:59.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:24:59.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:25:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 24, 51), 0.54, 96.37, 0.0, 19.8, 12.98, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:25:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:24:51
2026-02-12T03:25:01.299 [DEBUG] [Thread-140758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:25:01.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:25:01.659 [DEBUG] [Thread-140759] [transport.py] [_log()] starting thread (client mode): 0xa5772a70
2026-02-12T03:25:01.659 [DEBUG] [Thread-140759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:25:01.669 [DEBUG] [Thread-140759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:25:01.669 [INFO] [Thread-140759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] client lang: <none>
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] server lang: <none>
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] kex follows: False
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] Compression: none
2026-02-12T03:25:01.670 [DEBUG] [Thread-140759] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:25:01.678 [DEBUG] [Thread-140759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:25:01.678 [DEBUG] [Thread-140759] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:25:01.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:25:01.678 [DEBUG] [Thread-140759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:25:01.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:25:01.679 [DEBUG] [Thread-140759] [transport.py] [_log()] userauth is OK
2026-02-12T03:25:01.679 [DEBUG] [Thread-140759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:25:01.679 [DEBUG] [Thread-140759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:25:01.679 [DEBUG] [Thread-140759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:25:01.679 [DEBUG] [Thread-140759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:25:01.690 [INFO] [Thread-140759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:25:01.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:25:02.268 [DEBUG] [Thread-140759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:25:02.269 [DEBUG] [Thread-140759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:25:02.269 [DEBUG] [Thread-140759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:25:02.310 [DEBUG] [Thread-140759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:25:02.310 [DEBUG] [Thread-140759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:25:02.313 [DEBUG] [Thread-140759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:25:02.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:25:02.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:25:02.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:25:02.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:25:02.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:25:02.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:25:02.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:25:02.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:25:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:25:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.058811 -999.00  +12.90  14.49     93  +11.80 1 3 1 3 1     0    0 0.99 -9.23 ----- 14.5 14.5 153.6 22.6 14.9 -2.1 14.8 -1.9 14.6 -1.9 14.9 -1.9
2026-02-12T03:25:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:25:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:25:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.058811
2026-02-12T03:25:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:25:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:25:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:25:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:25:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:25:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:24:51', tmtdew=0.54, humidity=96.37, cloud=0.0, wind=19.8, temperature=12.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:24:41.270', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:25:02.342 [DEBUG] [Thread-140759] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:25:02.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:25:02.438 [DEBUG] [Thread-140762] [transport.py] [_log()] starting thread (client mode): 0xa2d97a30
2026-02-12T03:25:02.438 [DEBUG] [Thread-140762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:25:02.452 [DEBUG] [Thread-140762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:25:02.452 [INFO] [Thread-140762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:25:02.462 [DEBUG] [Thread-140762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:25:02.462 [DEBUG] [Thread-140762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:25:02.462 [DEBUG] [Thread-140762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] client lang: <none>
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] server lang: <none>
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] kex follows: False
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] Compression: none
2026-02-12T03:25:02.463 [DEBUG] [Thread-140762] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:25:02.521 [DEBUG] [Thread-140762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:25:02.521 [DEBUG] [Thread-140762] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:25:02.522 [DEBUG] [Thread-140762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:25:02.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:25:02.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:25:02.579 [DEBUG] [Thread-140762] [transport.py] [_log()] userauth is OK
2026-02-12T03:25:02.580 [DEBUG] [Thread-140762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:25:02.580 [DEBUG] [Thread-140762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:25:02.580 [DEBUG] [Thread-140762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:25:02.580 [DEBUG] [Thread-140762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:25:02.598 [INFO] [Thread-140762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:25:02.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:25:02.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:25:03.417 [DEBUG] [Thread-140762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:25:03.418 [DEBUG] [Thread-140762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:25:03.465 [DEBUG] [Thread-140762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:25:03.465 [DEBUG] [Thread-140762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:25:03.474 [DEBUG] [Thread-140762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:25:03.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:25:03.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:25:03.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:25:03.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:25:03.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:25:03.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:25:03.507 [DEBUG] [Thread-140762] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:25:10.596 [DEBUG] [Thread-140764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:25:16.338 [DEBUG] [Thread-140765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:25:31.390 [DEBUG] [Thread-140766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:25:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:25:33.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:25:33.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:25:35.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 25, 26), 0.54, 96.39, 0.0, 19.5, 13.0, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:25:35.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:25:26
2026-02-12T03:25:36.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:25:36.186 [DEBUG] [Thread-140767] [transport.py] [_log()] starting thread (client mode): 0xa575acb0
2026-02-12T03:25:36.187 [DEBUG] [Thread-140767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:25:36.207 [DEBUG] [Thread-140767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:25:36.207 [INFO] [Thread-140767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] client lang: <none>
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] server lang: <none>
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] kex follows: False
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] Compression: none
2026-02-12T03:25:36.210 [DEBUG] [Thread-140767] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:25:36.223 [DEBUG] [Thread-140767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:25:36.223 [DEBUG] [Thread-140767] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:25:36.223 [DEBUG] [Thread-140767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:25:36.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:25:36.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:25:36.225 [DEBUG] [Thread-140767] [transport.py] [_log()] userauth is OK
2026-02-12T03:25:36.225 [DEBUG] [Thread-140767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:25:36.225 [DEBUG] [Thread-140767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:25:36.225 [DEBUG] [Thread-140767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:25:36.225 [DEBUG] [Thread-140767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:25:36.257 [INFO] [Thread-140767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:25:36.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:25:36.912 [DEBUG] [Thread-140767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:25:36.912 [DEBUG] [Thread-140767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:25:36.913 [DEBUG] [Thread-140767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:25:36.953 [DEBUG] [Thread-140767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:25:36.954 [DEBUG] [Thread-140767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:25:36.957 [DEBUG] [Thread-140767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:25:36.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:25:36.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:25:36.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:25:36.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:25:36.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:25:36.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:25:36.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:25:36.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:25:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:25:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.059158 -999.00  +12.90  22.67     93  +11.80 1 3 1 3 1     0    0 0.89 -9.35 ----- 22.7 22.7 142.2 25.7 14.9 -1.9 14.8 -1.7 14.6 -1.8 14.9 -1.9
2026-02-12T03:25:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:25:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:25:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.059158
2026-02-12T03:25:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:25:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:25:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:25:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:25:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:25:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:25:26', tmtdew=0.54, humidity=96.39, cloud=0.0, wind=19.5, temperature=13.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:25:11.251', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:25:36.984 [DEBUG] [Thread-140767] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:25:37.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:25:37.083 [DEBUG] [Thread-140770] [transport.py] [_log()] starting thread (client mode): 0xa5758c10
2026-02-12T03:25:37.083 [DEBUG] [Thread-140770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:25:37.097 [DEBUG] [Thread-140770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:25:37.097 [INFO] [Thread-140770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:25:37.105 [DEBUG] [Thread-140770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:25:37.105 [DEBUG] [Thread-140770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:25:37.105 [DEBUG] [Thread-140770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:25:37.105 [DEBUG] [Thread-140770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] client lang: <none>
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] server lang: <none>
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] kex follows: False
2026-02-12T03:25:37.106 [DEBUG] [Thread-140770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:25:37.107 [DEBUG] [Thread-140770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:25:37.107 [DEBUG] [Thread-140770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:25:37.107 [DEBUG] [Thread-140770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:25:37.107 [DEBUG] [Thread-140770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:25:37.107 [DEBUG] [Thread-140770] [transport.py] [_log()] Compression: none
2026-02-12T03:25:37.107 [DEBUG] [Thread-140770] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:25:37.164 [DEBUG] [Thread-140770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:25:37.164 [DEBUG] [Thread-140770] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:25:37.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:25:37.166 [DEBUG] [Thread-140770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:25:37.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:25:37.221 [DEBUG] [Thread-140770] [transport.py] [_log()] userauth is OK
2026-02-12T03:25:37.221 [DEBUG] [Thread-140770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:25:37.221 [DEBUG] [Thread-140770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:25:37.221 [DEBUG] [Thread-140770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:25:37.222 [DEBUG] [Thread-140770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:25:37.241 [INFO] [Thread-140770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:25:37.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:25:37.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:25:38.070 [DEBUG] [Thread-140770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:25:38.070 [DEBUG] [Thread-140770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:25:38.118 [DEBUG] [Thread-140770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:25:38.118 [DEBUG] [Thread-140770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:25:38.127 [DEBUG] [Thread-140770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:25:38.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:25:38.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')
2026-02-12T03:25:38.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:25:38.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:25:38.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:25:38.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:25:38.161 [DEBUG] [Thread-140770] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:25:42.821 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:25:42.822 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:25:46.427 [DEBUG] [Thread-140772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:26:01.486 [DEBUG] [Thread-140773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:26:08.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:26:08.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:26:08.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:26:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 26, 1), 0.54, 96.37, 0.0, 20.68, 13.02, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:26:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:26:01
2026-02-12T03:26:10.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:26:10.672 [DEBUG] [Thread-140774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:26:10.709 [DEBUG] [Thread-140775] [transport.py] [_log()] starting thread (client mode): 0x9eb07fd0
2026-02-12T03:26:10.709 [DEBUG] [Thread-140775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:26:10.723 [DEBUG] [Thread-140775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:26:10.723 [INFO] [Thread-140775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] client lang: <none>
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] server lang: <none>
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] kex follows: False
2026-02-12T03:26:10.726 [DEBUG] [Thread-140775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:26:10.727 [DEBUG] [Thread-140775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:26:10.727 [DEBUG] [Thread-140775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:26:10.727 [DEBUG] [Thread-140775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:26:10.727 [DEBUG] [Thread-140775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:26:10.727 [DEBUG] [Thread-140775] [transport.py] [_log()] Compression: none
2026-02-12T03:26:10.727 [DEBUG] [Thread-140775] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:26:10.743 [DEBUG] [Thread-140775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:26:10.744 [DEBUG] [Thread-140775] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:26:10.744 [DEBUG] [Thread-140775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:26:10.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:26:10.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:26:10.746 [DEBUG] [Thread-140775] [transport.py] [_log()] userauth is OK
2026-02-12T03:26:10.746 [DEBUG] [Thread-140775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:26:10.746 [DEBUG] [Thread-140775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:26:10.746 [DEBUG] [Thread-140775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:26:10.746 [DEBUG] [Thread-140775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:26:10.765 [INFO] [Thread-140775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:26:10.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:26:11.419 [DEBUG] [Thread-140775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:26:11.419 [DEBUG] [Thread-140775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:26:11.420 [DEBUG] [Thread-140775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:26:11.460 [DEBUG] [Thread-140775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:26:11.461 [DEBUG] [Thread-140775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:26:11.464 [DEBUG] [Thread-140775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:26:11.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:26:11.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:26:11.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:26:11.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:26:11.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:26:11.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:26:11.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:26:11.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:26:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:26:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.059506 -999.00  +12.90  17.40     93  +11.90 1 3 1 3 1     0    0 0.89 -10.83 ----- 17.4 17.4 147.2 20.4 14.9 -1.9 14.8 -1.7 14.6 -1.9 14.9 -1.9
2026-02-12T03:26:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:26:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:26:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.059506
2026-02-12T03:26:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:26:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:26:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:26:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:26:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:26:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:26:01', tmtdew=0.54, humidity=96.37, cloud=0.0, wind=20.68, temperature=13.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:25:41.318', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:26:11.491 [DEBUG] [Thread-140775] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:26:11.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:26:16.522 [DEBUG] [Thread-140778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:26:31.572 [DEBUG] [Thread-140779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:26:43.026 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:26:43.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:26:46.605 [DEBUG] [Thread-140780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:27:01.640 [DEBUG] [Thread-140781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:27:10.746 [DEBUG] [Thread-140782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:27:16.679 [DEBUG] [Thread-140783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:27:31.717 [DEBUG] [Thread-140784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:27:43.231 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:27:43.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:27:46.755 [DEBUG] [Thread-140785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:01.792 [DEBUG] [Thread-140786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:10.835 [DEBUG] [Thread-140787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:16.832 [DEBUG] [Thread-140788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:26.424 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-12T03:28:31.869 [DEBUG] [Thread-140789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:43.434 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:43.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:46.902 [DEBUG] [Thread-140790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:28:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:28:56.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:28:56.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:28:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 28, 23), 0.51, 96.52, 0.0, 21.91, 13.03, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:28:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:28:23
2026-02-12T03:28:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:28:59.109 [DEBUG] [Thread-140791] [transport.py] [_log()] starting thread (client mode): 0xa81d7dc0
2026-02-12T03:28:59.110 [DEBUG] [Thread-140791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:28:59.126 [DEBUG] [Thread-140791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:28:59.126 [INFO] [Thread-140791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:28:59.128 [DEBUG] [Thread-140791] [transport.py] [_log()] client lang: <none>
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] server lang: <none>
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] kex follows: False
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] Compression: none
2026-02-12T03:28:59.129 [DEBUG] [Thread-140791] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:28:59.143 [DEBUG] [Thread-140791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:28:59.143 [DEBUG] [Thread-140791] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:28:59.144 [DEBUG] [Thread-140791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:28:59.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:28:59.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:28:59.146 [DEBUG] [Thread-140791] [transport.py] [_log()] userauth is OK
2026-02-12T03:28:59.147 [DEBUG] [Thread-140791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:28:59.147 [DEBUG] [Thread-140791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:28:59.147 [DEBUG] [Thread-140791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:28:59.147 [DEBUG] [Thread-140791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:28:59.173 [INFO] [Thread-140791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:28:59.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:28:59.796 [DEBUG] [Thread-140791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:28:59.797 [DEBUG] [Thread-140791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:28:59.797 [DEBUG] [Thread-140791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:28:59.838 [DEBUG] [Thread-140791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:28:59.838 [DEBUG] [Thread-140791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:28:59.841 [DEBUG] [Thread-140791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:28:59.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:28:59.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:28:59.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:28:59.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:28:59.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:28:59.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:28:59.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:28:59.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:28:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:28:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.061589 -999.00  +12.90  15.42     93  +11.80 1 3 1 3 1     0    0 0.77 -13.86 ----- 15.4 15.4 145.0 20.8 14.9 -2.0 14.8 -1.6 14.6 -1.7 14.9 -1.8
2026-02-12T03:28:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:28:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:28:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.061589
2026-02-12T03:28:59.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:28:59.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:28:59.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:28:59.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:28:59.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:28:59.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:28:23', tmtdew=0.51, humidity=96.52, cloud=0.0, wind=21.91, temperature=13.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:28:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:28:59.860 [DEBUG] [Thread-140791] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:28:59.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:28:59.958 [DEBUG] [Thread-140794] [transport.py] [_log()] starting thread (client mode): 0xa81d77f0
2026-02-12T03:28:59.958 [DEBUG] [Thread-140794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:28:59.973 [DEBUG] [Thread-140794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:28:59.973 [INFO] [Thread-140794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:28:59.980 [DEBUG] [Thread-140794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:28:59.980 [DEBUG] [Thread-140794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:28:59.981 [DEBUG] [Thread-140794] [transport.py] [_log()] client lang: <none>
2026-02-12T03:28:59.982 [DEBUG] [Thread-140794] [transport.py] [_log()] server lang: <none>
2026-02-12T03:28:59.982 [DEBUG] [Thread-140794] [transport.py] [_log()] kex follows: False
2026-02-12T03:28:59.982 [DEBUG] [Thread-140794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:28:59.982 [DEBUG] [Thread-140794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:28:59.982 [DEBUG] [Thread-140794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:28:59.982 [DEBUG] [Thread-140794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:28:59.982 [DEBUG] [Thread-140794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:28:59.983 [DEBUG] [Thread-140794] [transport.py] [_log()] Compression: none
2026-02-12T03:28:59.983 [DEBUG] [Thread-140794] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:29:00.039 [DEBUG] [Thread-140794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:29:00.040 [DEBUG] [Thread-140794] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:29:00.040 [DEBUG] [Thread-140794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:29:00.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:29:00.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:29:00.096 [DEBUG] [Thread-140794] [transport.py] [_log()] userauth is OK
2026-02-12T03:29:00.096 [DEBUG] [Thread-140794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:29:00.096 [DEBUG] [Thread-140794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:29:00.096 [DEBUG] [Thread-140794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:29:00.096 [DEBUG] [Thread-140794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:29:00.117 [INFO] [Thread-140794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:29:00.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:29:00.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:29:00.890 [DEBUG] [Thread-140794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:29:00.890 [DEBUG] [Thread-140794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:29:00.938 [DEBUG] [Thread-140794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:29:00.939 [DEBUG] [Thread-140794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:29:00.948 [DEBUG] [Thread-140794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:29:00.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:29:00.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:29:00.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:29:00.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:29:00.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:29:00.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:29:00.985 [DEBUG] [Thread-140794] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:29:01.936 [DEBUG] [Thread-140796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:29:10.890 [DEBUG] [Thread-140797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:29:16.993 [DEBUG] [Thread-140798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:29:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:29:30.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:29:30.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:29:32.030 [DEBUG] [Thread-140799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:29:33.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 28, 58), 0.52, 96.5, 0.0, 17.66, 12.98, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:29:33.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:28:58
2026-02-12T03:29:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:29:33.598 [DEBUG] [Thread-140800] [transport.py] [_log()] starting thread (client mode): 0x9eb075b0
2026-02-12T03:29:33.598 [DEBUG] [Thread-140800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:29:33.614 [DEBUG] [Thread-140800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:29:33.614 [INFO] [Thread-140800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:29:33.615 [DEBUG] [Thread-140800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] client lang: <none>
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] server lang: <none>
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] kex follows: False
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] Compression: none
2026-02-12T03:29:33.616 [DEBUG] [Thread-140800] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:29:33.623 [DEBUG] [Thread-140800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:29:33.624 [DEBUG] [Thread-140800] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:29:33.624 [DEBUG] [Thread-140800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:29:33.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:29:33.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:29:33.625 [DEBUG] [Thread-140800] [transport.py] [_log()] userauth is OK
2026-02-12T03:29:33.625 [DEBUG] [Thread-140800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:29:33.625 [DEBUG] [Thread-140800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:29:33.625 [DEBUG] [Thread-140800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:29:33.625 [DEBUG] [Thread-140800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:29:33.640 [INFO] [Thread-140800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:29:33.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:29:34.272 [DEBUG] [Thread-140800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:29:34.272 [DEBUG] [Thread-140800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:29:34.273 [DEBUG] [Thread-140800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:29:34.313 [DEBUG] [Thread-140800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:29:34.314 [DEBUG] [Thread-140800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:29:34.317 [DEBUG] [Thread-140800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:29:34.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:29:34.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:29:34.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:29:34.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:29:34.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:29:34.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:29:34.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:29:34.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:29:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:29:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.061936 -999.00  +12.90  14.61     93  +11.90 1 3 1 3 1     0    0 0.79 -13.31 ----- 14.6 14.6 153.4 21.2 14.9 -2.0 14.8 -1.8 14.7 -2.0 15.0 -1.6
2026-02-12T03:29:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:29:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:29:34.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.061936
2026-02-12T03:29:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:29:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:29:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:29:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:29:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:29:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:28:58', tmtdew=0.52, humidity=96.5, cloud=0.0, wind=17.66, temperature=12.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:29:11.270', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:29:34.342 [DEBUG] [Thread-140800] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:29:34.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:29:34.437 [DEBUG] [Thread-140803] [transport.py] [_log()] starting thread (client mode): 0xa2d95270
2026-02-12T03:29:34.437 [DEBUG] [Thread-140803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:29:34.451 [DEBUG] [Thread-140803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:29:34.451 [INFO] [Thread-140803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:29:34.459 [DEBUG] [Thread-140803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:29:34.459 [DEBUG] [Thread-140803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:29:34.459 [DEBUG] [Thread-140803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:29:34.459 [DEBUG] [Thread-140803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:29:34.459 [DEBUG] [Thread-140803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:29:34.459 [DEBUG] [Thread-140803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] client lang: <none>
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] server lang: <none>
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] kex follows: False
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:29:34.460 [DEBUG] [Thread-140803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:29:34.461 [DEBUG] [Thread-140803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:29:34.461 [DEBUG] [Thread-140803] [transport.py] [_log()] Compression: none
2026-02-12T03:29:34.461 [DEBUG] [Thread-140803] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:29:34.517 [DEBUG] [Thread-140803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:29:34.517 [DEBUG] [Thread-140803] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:29:34.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:29:34.519 [DEBUG] [Thread-140803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:29:34.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:29:34.572 [DEBUG] [Thread-140803] [transport.py] [_log()] userauth is OK
2026-02-12T03:29:34.573 [DEBUG] [Thread-140803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:29:34.573 [DEBUG] [Thread-140803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:29:34.573 [DEBUG] [Thread-140803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:29:34.573 [DEBUG] [Thread-140803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:29:34.595 [INFO] [Thread-140803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:29:34.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:29:34.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:29:35.416 [DEBUG] [Thread-140803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:29:35.416 [DEBUG] [Thread-140803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:29:35.463 [DEBUG] [Thread-140803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:29:35.463 [DEBUG] [Thread-140803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:29:35.472 [DEBUG] [Thread-140803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:29:35.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:29: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')
2026-02-12T03:29:35.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:29:35.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:29:35.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:29:35.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:29:35.509 [DEBUG] [Thread-140803] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:29:43.640 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:29:43.641 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:29:47.068 [DEBUG] [Thread-140805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:30:02.125 [DEBUG] [Thread-140806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:30:05.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:30:05.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:30:05.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:30:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 29, 33), 0.93, 94.04, 0.0, 18.03, 13.46, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:30:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:29:33
2026-02-12T03:30:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:30:07.901 [DEBUG] [Thread-140807] [transport.py] [_log()] starting thread (client mode): 0xa575a620
2026-02-12T03:30:07.902 [DEBUG] [Thread-140807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:30:07.917 [DEBUG] [Thread-140807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:30:07.917 [INFO] [Thread-140807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:30:07.920 [DEBUG] [Thread-140807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:30:07.920 [DEBUG] [Thread-140807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:30:07.920 [DEBUG] [Thread-140807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:30:07.920 [DEBUG] [Thread-140807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:07.920 [DEBUG] [Thread-140807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] client lang: <none>
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] server lang: <none>
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] kex follows: False
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] Compression: none
2026-02-12T03:30:07.921 [DEBUG] [Thread-140807] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:30:07.938 [DEBUG] [Thread-140807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:30:07.938 [DEBUG] [Thread-140807] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:30:07.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:30:07.939 [DEBUG] [Thread-140807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:30:07.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:30:07.940 [DEBUG] [Thread-140807] [transport.py] [_log()] userauth is OK
2026-02-12T03:30:07.940 [DEBUG] [Thread-140807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:30:07.940 [DEBUG] [Thread-140807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:30:07.940 [DEBUG] [Thread-140807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:30:07.940 [DEBUG] [Thread-140807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:30:07.970 [INFO] [Thread-140807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:30:07.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:30:09.607 [DEBUG] [Thread-140807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:30:09.608 [DEBUG] [Thread-140807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:30:09.608 [DEBUG] [Thread-140807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:30:09.649 [DEBUG] [Thread-140807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:30:09.649 [DEBUG] [Thread-140807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:30:09.651 [DEBUG] [Thread-140807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:30:09.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:30:09.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:30:09.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:30:09.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:30:09.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:30:09.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:30:09.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:30:09.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:30:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:30:09.750 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-02-12T03:30:09.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:29:33', tmtdew=0.93, humidity=94.04, cloud=0.0, wind=18.03, temperature=13.46, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:30:09.754 [DEBUG] [Thread-140807] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:30:09.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:30:09.836 [DEBUG] [Thread-140810] [transport.py] [_log()] starting thread (client mode): 0xa81d5ea0
2026-02-12T03:30:09.836 [DEBUG] [Thread-140810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:30:09.850 [DEBUG] [Thread-140810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:30:09.851 [INFO] [Thread-140810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:30:09.858 [DEBUG] [Thread-140810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:30:09.858 [DEBUG] [Thread-140810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] client lang: <none>
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] server lang: <none>
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] kex follows: False
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] Compression: none
2026-02-12T03:30:09.859 [DEBUG] [Thread-140810] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:30:09.916 [DEBUG] [Thread-140810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:30:09.916 [DEBUG] [Thread-140810] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:30:09.917 [DEBUG] [Thread-140810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:30:09.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:30:09.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:30:09.974 [DEBUG] [Thread-140810] [transport.py] [_log()] userauth is OK
2026-02-12T03:30:09.975 [DEBUG] [Thread-140810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:30:09.975 [DEBUG] [Thread-140810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:30:09.975 [DEBUG] [Thread-140810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:30:09.975 [DEBUG] [Thread-140810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:30:10.009 [INFO] [Thread-140810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:30:10.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:30:10.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:30:10.817 [DEBUG] [Thread-140810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:30:10.817 [DEBUG] [Thread-140810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:30:10.865 [DEBUG] [Thread-140810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:30:10.866 [DEBUG] [Thread-140810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:30:10.875 [DEBUG] [Thread-140810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:30:10.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:30:10.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:30:10.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:30:10.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:30:10.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:30:10.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:30:10.911 [DEBUG] [Thread-140810] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:30:10.956 [DEBUG] [Thread-140812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:30:17.159 [DEBUG] [Thread-140813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:30:32.219 [DEBUG] [Thread-140814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:30:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:30:40.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:30:40.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:30:42.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 30, 9), 0.51, 96.55, 0.0, 20.87, 13.03, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:30:42.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:30:09
2026-02-12T03:30:43.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:30:43.303 [DEBUG] [Thread-140815] [transport.py] [_log()] starting thread (client mode): 0xa81d7ac0
2026-02-12T03:30:43.303 [DEBUG] [Thread-140815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:30:43.323 [DEBUG] [Thread-140815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:30:43.324 [INFO] [Thread-140815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] client lang: <none>
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] server lang: <none>
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] kex follows: False
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] Compression: none
2026-02-12T03:30:43.327 [DEBUG] [Thread-140815] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:30:43.345 [DEBUG] [Thread-140815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:30:43.346 [DEBUG] [Thread-140815] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:30:43.346 [DEBUG] [Thread-140815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:30:43.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:30:43.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:30:43.389 [DEBUG] [Thread-140815] [transport.py] [_log()] userauth is OK
2026-02-12T03:30:43.389 [DEBUG] [Thread-140815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:30:43.389 [DEBUG] [Thread-140815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:30:43.389 [DEBUG] [Thread-140815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:30:43.389 [DEBUG] [Thread-140815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:30:43.420 [INFO] [Thread-140815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:30:43.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:30:43.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:30:43.842 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:30:44.055 [DEBUG] [Thread-140815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:30:44.055 [DEBUG] [Thread-140815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:30:44.056 [DEBUG] [Thread-140815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:30:44.096 [DEBUG] [Thread-140815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:30:44.096 [DEBUG] [Thread-140815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:30:44.100 [DEBUG] [Thread-140815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:30:44.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:30:44.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:30:44.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:30:44.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:30:44.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:30:44.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:30:44.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:30:44.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.062283 -999.00  +13.00  16.06     93  +11.90 1 3 1 3 1     0    0 0.77 -13.39 ----- 16.1 16.1 141.2 25.2 14.8 -2.0 14.8 -2.0 14.6 -1.9 14.9 -1.9
2026-02-12T03:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.062283
2026-02-12T03:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:30:44.129 [DEBUG] [Thread-140815] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:30:44.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:30:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:30:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:30:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:30:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:30:09', tmtdew=0.51, humidity=96.55, cloud=0.0, wind=20.87, temperature=13.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:29:41.251', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:30:44.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:30:44.223 [DEBUG] [Thread-140818] [transport.py] [_log()] starting thread (client mode): 0xa81d7e20
2026-02-12T03:30:44.223 [DEBUG] [Thread-140818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:30:44.237 [DEBUG] [Thread-140818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:30:44.238 [INFO] [Thread-140818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:30:44.245 [DEBUG] [Thread-140818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] client lang: <none>
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] server lang: <none>
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] kex follows: False
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] Compression: none
2026-02-12T03:30:44.246 [DEBUG] [Thread-140818] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:30:44.305 [DEBUG] [Thread-140818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:30:44.306 [DEBUG] [Thread-140818] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:30:44.306 [DEBUG] [Thread-140818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:30:44.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:30:44.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:30:44.361 [DEBUG] [Thread-140818] [transport.py] [_log()] userauth is OK
2026-02-12T03:30:44.361 [DEBUG] [Thread-140818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:30:44.361 [DEBUG] [Thread-140818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:30:44.361 [DEBUG] [Thread-140818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:30:44.361 [DEBUG] [Thread-140818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:30:44.380 [INFO] [Thread-140818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:30:44.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:30:44.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:30:45.200 [DEBUG] [Thread-140818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:30:45.200 [DEBUG] [Thread-140818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:30:45.248 [DEBUG] [Thread-140818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:30:45.249 [DEBUG] [Thread-140818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:30:45.258 [DEBUG] [Thread-140818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:30:45.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:30:45.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:30:45.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:30:45.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:30:45.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:30:45.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:30:45.295 [DEBUG] [Thread-140818] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:30:47.273 [DEBUG] [Thread-140820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:02.327 [DEBUG] [Thread-140821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:11.022 [DEBUG] [Thread-140822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:15.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:31:15.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:31:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:31:17.365 [DEBUG] [Thread-140823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:17.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 30, 44), 0.51, 96.57, 0.0, 21.67, 13.12, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:31:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:30:44
2026-02-12T03:31:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:31:17.964 [DEBUG] [Thread-140824] [transport.py] [_log()] starting thread (client mode): 0xa81d7790
2026-02-12T03:31:17.964 [DEBUG] [Thread-140824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:31:17.983 [DEBUG] [Thread-140824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:31:17.983 [INFO] [Thread-140824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] client lang: <none>
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] server lang: <none>
2026-02-12T03:31:17.985 [DEBUG] [Thread-140824] [transport.py] [_log()] kex follows: False
2026-02-12T03:31:17.986 [DEBUG] [Thread-140824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:31:17.986 [DEBUG] [Thread-140824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:31:17.986 [DEBUG] [Thread-140824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:31:17.986 [DEBUG] [Thread-140824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:31:17.986 [DEBUG] [Thread-140824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:31:17.986 [DEBUG] [Thread-140824] [transport.py] [_log()] Compression: none
2026-02-12T03:31:17.986 [DEBUG] [Thread-140824] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:31:17.994 [DEBUG] [Thread-140824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:31:17.994 [DEBUG] [Thread-140824] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:31:17.995 [DEBUG] [Thread-140824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:31:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:31:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:31:17.996 [DEBUG] [Thread-140824] [transport.py] [_log()] userauth is OK
2026-02-12T03:31:17.996 [DEBUG] [Thread-140824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:31:17.996 [DEBUG] [Thread-140824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:31:17.996 [DEBUG] [Thread-140824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:31:17.996 [DEBUG] [Thread-140824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:31:18.008 [INFO] [Thread-140824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:31:18.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:31:18.563 [DEBUG] [Thread-140824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:31:18.563 [DEBUG] [Thread-140824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:31:18.564 [DEBUG] [Thread-140824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:31:18.604 [DEBUG] [Thread-140824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:31:18.604 [DEBUG] [Thread-140824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:31:18.607 [DEBUG] [Thread-140824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:31:18.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:31:18.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:31:18.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:31:18.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:31:18.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:31:18.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:31:18.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:31:18.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:31:18.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:31:18.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.063325 -999.00  +12.90  17.27     93  +11.90 1 3 1 3 1     0    0 0.74 -14.48 ----- 17.3 17.3 146.0 20.2 14.9 -2.0 14.8 -1.5 14.7 -1.7 14.9 -1.8
2026-02-12T03:31:18.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:31:18.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:31:18.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.063325
2026-02-12T03:31:18.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:31:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:31:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:31:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:31:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:31:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:30:44', tmtdew=0.51, humidity=96.57, cloud=0.0, wind=21.67, temperature=13.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:31:11.280', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:31:18.621 [DEBUG] [Thread-140824] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:31:18.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:31:18.714 [DEBUG] [Thread-140827] [transport.py] [_log()] starting thread (client mode): 0xa2d7b0a0
2026-02-12T03:31:18.714 [DEBUG] [Thread-140827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:31:18.728 [DEBUG] [Thread-140827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:31:18.729 [INFO] [Thread-140827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:31:18.736 [DEBUG] [Thread-140827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:31:18.736 [DEBUG] [Thread-140827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:31:18.736 [DEBUG] [Thread-140827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] client lang: <none>
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] server lang: <none>
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] kex follows: False
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] Compression: none
2026-02-12T03:31:18.737 [DEBUG] [Thread-140827] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:31:18.794 [DEBUG] [Thread-140827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:31:18.794 [DEBUG] [Thread-140827] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:31:18.795 [DEBUG] [Thread-140827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:31:18.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:31:18.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:31:18.849 [DEBUG] [Thread-140827] [transport.py] [_log()] userauth is OK
2026-02-12T03:31:18.850 [DEBUG] [Thread-140827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:31:18.850 [DEBUG] [Thread-140827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:31:18.850 [DEBUG] [Thread-140827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:31:18.850 [DEBUG] [Thread-140827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:31:18.869 [INFO] [Thread-140827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:31:18.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:31:18.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:31:19.691 [DEBUG] [Thread-140827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:31:19.691 [DEBUG] [Thread-140827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:31:19.739 [DEBUG] [Thread-140827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:31:19.740 [DEBUG] [Thread-140827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:31:19.749 [DEBUG] [Thread-140827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:31:19.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:31:19.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:31:19.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
2026-02-12T03:31:19.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:31:19.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:31:19.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:31:19.786 [DEBUG] [Thread-140827] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:31:32.402 [DEBUG] [Thread-140829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:44.044 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:44.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:47.452 [DEBUG] [Thread-140830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:31:49.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:31:49.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:31:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:31:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 31, 19), 0.51, 96.57, 0.0, 22.3, 13.08, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:31:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:31:19
2026-02-12T03:31:51.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:31:52.150 [DEBUG] [Thread-140831] [transport.py] [_log()] starting thread (client mode): 0xa5759060
2026-02-12T03:31:52.150 [DEBUG] [Thread-140831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:31:52.169 [DEBUG] [Thread-140831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:31:52.169 [INFO] [Thread-140831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:31:52.172 [DEBUG] [Thread-140831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:31:52.172 [DEBUG] [Thread-140831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:31:52.172 [DEBUG] [Thread-140831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:31:52.172 [DEBUG] [Thread-140831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] client lang: <none>
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] server lang: <none>
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] kex follows: False
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] Compression: none
2026-02-12T03:31:52.173 [DEBUG] [Thread-140831] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:31:52.190 [DEBUG] [Thread-140831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:31:52.190 [DEBUG] [Thread-140831] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:31:52.191 [DEBUG] [Thread-140831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:31:52.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:31:52.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:31:52.193 [DEBUG] [Thread-140831] [transport.py] [_log()] userauth is OK
2026-02-12T03:31:52.193 [DEBUG] [Thread-140831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:31:52.193 [DEBUG] [Thread-140831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:31:52.193 [DEBUG] [Thread-140831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:31:52.193 [DEBUG] [Thread-140831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:31:52.212 [INFO] [Thread-140831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:31:52.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:31:52.828 [DEBUG] [Thread-140831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:31:52.828 [DEBUG] [Thread-140831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:31:52.828 [DEBUG] [Thread-140831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:31:52.868 [DEBUG] [Thread-140831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:31:52.868 [DEBUG] [Thread-140831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:31:52.871 [DEBUG] [Thread-140831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:31:52.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:31:52.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:31:52.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:31:52.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:31:52.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:31:52.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:31:52.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:31:52.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:31:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:31:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.063672 -999.00  +13.00  15.31     93  +11.90 1 3 1 3 1     0    0 0.75 -14.66 ----- 15.3 15.3 147.4 23.8 14.9 -1.8 14.8 -1.5 14.7 -1.8 14.9 -1.9
2026-02-12T03:31:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:31:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:31:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.063672
2026-02-12T03:31:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:31:52.895 [DEBUG] [Thread-140831] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:31:52.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:31:52.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:31:52.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:31:52.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:31:52.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:31:19', tmtdew=0.51, humidity=96.57, cloud=0.0, wind=22.3, temperature=13.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:31:41.261', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:31:52.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:31:52.995 [DEBUG] [Thread-140834] [transport.py] [_log()] starting thread (client mode): 0xa5758d00
2026-02-12T03:31:52.995 [DEBUG] [Thread-140834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:31:53.010 [DEBUG] [Thread-140834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:31:53.010 [INFO] [Thread-140834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:31:53.018 [DEBUG] [Thread-140834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] client lang: <none>
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] server lang: <none>
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] kex follows: False
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:31:53.019 [DEBUG] [Thread-140834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:31:53.020 [DEBUG] [Thread-140834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:31:53.020 [DEBUG] [Thread-140834] [transport.py] [_log()] Compression: none
2026-02-12T03:31:53.020 [DEBUG] [Thread-140834] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:31:53.077 [DEBUG] [Thread-140834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:31:53.078 [DEBUG] [Thread-140834] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:31:53.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:31:53.079 [DEBUG] [Thread-140834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:31:53.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:31:53.133 [DEBUG] [Thread-140834] [transport.py] [_log()] userauth is OK
2026-02-12T03:31:53.133 [DEBUG] [Thread-140834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:31:53.133 [DEBUG] [Thread-140834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:31:53.133 [DEBUG] [Thread-140834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:31:53.133 [DEBUG] [Thread-140834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:31:53.155 [INFO] [Thread-140834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:31:53.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:31:53.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:31:53.954 [DEBUG] [Thread-140834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:31:53.954 [DEBUG] [Thread-140834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:31:54.002 [DEBUG] [Thread-140834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:31:54.003 [DEBUG] [Thread-140834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:31:54.012 [DEBUG] [Thread-140834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:31:54.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:31:54.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:31: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') -> 00000000
2026-02-12T03:31:54.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:31:54.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:31:54.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:31:54.048 [DEBUG] [Thread-140834] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:32:02.483 [DEBUG] [Thread-140836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:32:11.079 [DEBUG] [Thread-140837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:32:17.541 [DEBUG] [Thread-140838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:32:24.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:32:24.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:32:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:32:25.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 31, 55), 0.5, 96.62, 0.0, 20.29, 13.1, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:32:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:31:55
2026-02-12T03:32:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:32:26.373 [DEBUG] [Thread-140839] [transport.py] [_log()] starting thread (client mode): 0xa575a4a0
2026-02-12T03:32:26.373 [DEBUG] [Thread-140839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:32:26.389 [DEBUG] [Thread-140839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:32:26.389 [INFO] [Thread-140839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] client lang: <none>
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] server lang: <none>
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] kex follows: False
2026-02-12T03:32:26.392 [DEBUG] [Thread-140839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:32:26.393 [DEBUG] [Thread-140839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:32:26.393 [DEBUG] [Thread-140839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:32:26.393 [DEBUG] [Thread-140839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:32:26.393 [DEBUG] [Thread-140839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:32:26.393 [DEBUG] [Thread-140839] [transport.py] [_log()] Compression: none
2026-02-12T03:32:26.393 [DEBUG] [Thread-140839] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:32:26.411 [DEBUG] [Thread-140839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:32:26.412 [DEBUG] [Thread-140839] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:32:26.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:32:26.413 [DEBUG] [Thread-140839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:32:26.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:32:26.416 [DEBUG] [Thread-140839] [transport.py] [_log()] userauth is OK
2026-02-12T03:32:26.416 [DEBUG] [Thread-140839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:32:26.416 [DEBUG] [Thread-140839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:32:26.416 [DEBUG] [Thread-140839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:32:26.416 [DEBUG] [Thread-140839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:32:26.443 [INFO] [Thread-140839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:32:26.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:32:27.003 [DEBUG] [Thread-140839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:32:27.003 [DEBUG] [Thread-140839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:32:27.003 [DEBUG] [Thread-140839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:32:27.044 [DEBUG] [Thread-140839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:32:27.045 [DEBUG] [Thread-140839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:32:27.048 [DEBUG] [Thread-140839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:32:27.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:32:27.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:32:27.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:32:27.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:32:27.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:32:27.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:32:27.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:32:27.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:32:27.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:32:27.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.064019 -999.00  +13.00  16.37     93  +11.90 1 3 1 3 1     0    0 0.76 -12.73 ----- 16.4 16.4 150.5 20.7 14.9 -1.7 14.8 -1.8 14.7 -1.7 15.0 -1.7
2026-02-12T03:32:27.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:32:27.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:32:27.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.064019
2026-02-12T03:32:27.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:32:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:32:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:32:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:32:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:32:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:31:55', tmtdew=0.5, humidity=96.62, cloud=0.0, wind=20.29, temperature=13.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:32:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:32:27.073 [DEBUG] [Thread-140839] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:32:27.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:32:27.177 [DEBUG] [Thread-140842] [transport.py] [_log()] starting thread (client mode): 0xa57725c0
2026-02-12T03:32:27.178 [DEBUG] [Thread-140842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:32:27.192 [DEBUG] [Thread-140842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:32:27.192 [INFO] [Thread-140842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:32:27.199 [DEBUG] [Thread-140842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] client lang: <none>
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] server lang: <none>
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] kex follows: False
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:32:27.200 [DEBUG] [Thread-140842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:32:27.201 [DEBUG] [Thread-140842] [transport.py] [_log()] Compression: none
2026-02-12T03:32:27.201 [DEBUG] [Thread-140842] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:32:27.261 [DEBUG] [Thread-140842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:32:27.262 [DEBUG] [Thread-140842] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:32:27.262 [DEBUG] [Thread-140842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:32:27.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:32:27.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:32:27.318 [DEBUG] [Thread-140842] [transport.py] [_log()] userauth is OK
2026-02-12T03:32:27.318 [DEBUG] [Thread-140842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:32:27.318 [DEBUG] [Thread-140842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:32:27.318 [DEBUG] [Thread-140842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:32:27.318 [DEBUG] [Thread-140842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:32:27.336 [INFO] [Thread-140842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:32:27.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:32:27.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:32:28.195 [DEBUG] [Thread-140842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:32:28.195 [DEBUG] [Thread-140842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:32:28.243 [DEBUG] [Thread-140842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:32:28.243 [DEBUG] [Thread-140842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:32:28.253 [DEBUG] [Thread-140842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:32:28.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:32:28.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:32:28.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:32:28.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:32:28.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:32:28.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:32:28.289 [DEBUG] [Thread-140842] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:32:32.578 [DEBUG] [Thread-140844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:32:44.248 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:32:44.249 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:32:47.638 [DEBUG] [Thread-140845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:32:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:32:58.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:32:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:33:00.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 32, 31), 0.5, 96.63, 0.0, 20.43, 13.07, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:33:00.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:32:31
2026-02-12T03:33:00.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:33:00.830 [DEBUG] [Thread-140846] [transport.py] [_log()] starting thread (client mode): 0xa5773370
2026-02-12T03:33:00.831 [DEBUG] [Thread-140846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:33:00.850 [DEBUG] [Thread-140846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:33:00.850 [INFO] [Thread-140846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] client lang: <none>
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] server lang: <none>
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] kex follows: False
2026-02-12T03:33:00.853 [DEBUG] [Thread-140846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:33:00.854 [DEBUG] [Thread-140846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:33:00.854 [DEBUG] [Thread-140846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:33:00.854 [DEBUG] [Thread-140846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:33:00.854 [DEBUG] [Thread-140846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:33:00.854 [DEBUG] [Thread-140846] [transport.py] [_log()] Compression: none
2026-02-12T03:33:00.854 [DEBUG] [Thread-140846] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:33:00.869 [DEBUG] [Thread-140846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:33:00.869 [DEBUG] [Thread-140846] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:33:00.869 [DEBUG] [Thread-140846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:33:00.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:33:00.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:33:00.871 [DEBUG] [Thread-140846] [transport.py] [_log()] userauth is OK
2026-02-12T03:33:00.871 [DEBUG] [Thread-140846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:33:00.871 [DEBUG] [Thread-140846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:33:00.871 [DEBUG] [Thread-140846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:33:00.871 [DEBUG] [Thread-140846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:33:00.897 [INFO] [Thread-140846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:33:00.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:33:01.512 [DEBUG] [Thread-140846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:33:01.512 [DEBUG] [Thread-140846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:33:01.512 [DEBUG] [Thread-140846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:33:01.553 [DEBUG] [Thread-140846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:33:01.553 [DEBUG] [Thread-140846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:33:01.555 [DEBUG] [Thread-140846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:33:01.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:33:01.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:33:01.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:33:01.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:33:01.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:33:01.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:33:01.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.064367 -999.00  +13.10  18.14     93  +12.00 1 3 1 3 1     0    0 0.78 -12.68 ----- 18.1 18.1 154.6 24.2 15.0 -1.8 14.8 -1.6 14.7 -1.7 15.0 -1.7
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.064367
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:33:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:32:31', tmtdew=0.5, humidity=96.63, cloud=0.0, wind=20.43, temperature=13.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:32:41.309', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:33:01.569 [DEBUG] [Thread-140846] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:33:01.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:33:01.664 [DEBUG] [Thread-140849] [transport.py] [_log()] starting thread (client mode): 0xa81d6f20
2026-02-12T03:33:01.664 [DEBUG] [Thread-140849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:33:01.680 [DEBUG] [Thread-140849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:33:01.680 [INFO] [Thread-140849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:33:01.687 [DEBUG] [Thread-140849] [transport.py] [_log()] client lang: <none>
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] server lang: <none>
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] kex follows: False
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] Compression: none
2026-02-12T03:33:01.688 [DEBUG] [Thread-140849] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:33:01.744 [DEBUG] [Thread-140849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:33:01.744 [DEBUG] [Thread-140849] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:33:01.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:33:01.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:33:01.745 [DEBUG] [Thread-140849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:33:01.805 [DEBUG] [Thread-140849] [transport.py] [_log()] userauth is OK
2026-02-12T03:33:01.805 [DEBUG] [Thread-140849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:33:01.805 [DEBUG] [Thread-140849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:33:01.805 [DEBUG] [Thread-140849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:33:01.806 [DEBUG] [Thread-140849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:33:01.823 [INFO] [Thread-140849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:33:01.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:33:01.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:33:02.672 [DEBUG] [Thread-140851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:33:02.709 [DEBUG] [Thread-140849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:33:02.709 [DEBUG] [Thread-140849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:33:02.757 [DEBUG] [Thread-140849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:33:02.757 [DEBUG] [Thread-140849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:33:02.766 [DEBUG] [Thread-140849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:33:02.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:33:02.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:33:02.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:33:02.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:33:02.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:33:02.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:33:02.800 [DEBUG] [Thread-140849] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:33:11.135 [DEBUG] [Thread-140852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:33:17.734 [DEBUG] [Thread-140853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:33:32.775 [DEBUG] [Thread-140854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:33:32.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:33:32.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:33:32.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:33:34.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 33, 6), 0.5, 96.62, 0.0, 21.51, 13.05, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:33:34.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:33:06
2026-02-12T03:33:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:33:35.308 [DEBUG] [Thread-140855] [transport.py] [_log()] starting thread (client mode): 0xa2d7bd90
2026-02-12T03:33:35.308 [DEBUG] [Thread-140855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:33:35.326 [DEBUG] [Thread-140855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:33:35.326 [INFO] [Thread-140855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] client lang: <none>
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] server lang: <none>
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] kex follows: False
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] Compression: none
2026-02-12T03:33:35.329 [DEBUG] [Thread-140855] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:33:35.346 [DEBUG] [Thread-140855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:33:35.347 [DEBUG] [Thread-140855] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:33:35.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:33:35.348 [DEBUG] [Thread-140855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:33:35.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:33:35.350 [DEBUG] [Thread-140855] [transport.py] [_log()] userauth is OK
2026-02-12T03:33:35.350 [DEBUG] [Thread-140855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:33:35.350 [DEBUG] [Thread-140855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:33:35.350 [DEBUG] [Thread-140855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:33:35.350 [DEBUG] [Thread-140855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:33:35.375 [INFO] [Thread-140855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:33:35.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:33:35.964 [DEBUG] [Thread-140855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:33:35.964 [DEBUG] [Thread-140855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:33:35.965 [DEBUG] [Thread-140855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:33:36.005 [DEBUG] [Thread-140855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:33:36.006 [DEBUG] [Thread-140855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:33:36.009 [DEBUG] [Thread-140855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:33:36.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:33:36.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:33:36.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:33:36.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:33:36.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:33:36.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:33:36.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:33:36.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:33:36.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:33:36.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.064714 -999.00  +13.10  18.47     93  +12.10 1 3 1 3 1     0    0 0.74 -13.37 ----- 18.5 18.5 154.6 21.4 14.9 -2.0 14.8 -1.6 14.6 -1.4 15.0 -1.8
2026-02-12T03:33:36.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:33:36.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:33:36.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.064714
2026-02-12T03:33:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:33:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:33:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:33:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:33:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:33:36.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:33:06', tmtdew=0.5, humidity=96.62, cloud=0.0, wind=21.51, temperature=13.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:33:11.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:33:36.035 [DEBUG] [Thread-140855] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:33:36.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:33:36.135 [DEBUG] [Thread-140858] [transport.py] [_log()] starting thread (client mode): 0xa2d97a30
2026-02-12T03:33:36.135 [DEBUG] [Thread-140858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:33:36.149 [DEBUG] [Thread-140858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:33:36.150 [INFO] [Thread-140858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] client lang: <none>
2026-02-12T03:33:36.157 [DEBUG] [Thread-140858] [transport.py] [_log()] server lang: <none>
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] kex follows: False
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] Compression: none
2026-02-12T03:33:36.158 [DEBUG] [Thread-140858] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:33:36.218 [DEBUG] [Thread-140858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:33:36.219 [DEBUG] [Thread-140858] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:33:36.219 [DEBUG] [Thread-140858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:33:36.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:33:36.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:33:36.275 [DEBUG] [Thread-140858] [transport.py] [_log()] userauth is OK
2026-02-12T03:33:36.275 [DEBUG] [Thread-140858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:33:36.275 [DEBUG] [Thread-140858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:33:36.275 [DEBUG] [Thread-140858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:33:36.275 [DEBUG] [Thread-140858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:33:36.294 [INFO] [Thread-140858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:33:36.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:33:36.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:33:37.103 [DEBUG] [Thread-140858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:33:37.103 [DEBUG] [Thread-140858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:33:37.150 [DEBUG] [Thread-140858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:33:37.151 [DEBUG] [Thread-140858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:33:37.160 [DEBUG] [Thread-140858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:33:37.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:33:37.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:33: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
2026-02-12T03:33:37.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:33:37.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:33:37.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:33:37.196 [DEBUG] [Thread-140858] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:33:44.450 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:33:44.451 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:33:47.810 [DEBUG] [Thread-140860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:34:02.851 [DEBUG] [Thread-140861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:34:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:34:07.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:34:07.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:34:09.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 33, 41), 0.9, 94.23, 0.0, 21.59, 13.5, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:34:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:33:41
2026-02-12T03:34:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:34:09.661 [DEBUG] [Thread-140862] [transport.py] [_log()] starting thread (client mode): 0xa5770400
2026-02-12T03:34:09.661 [DEBUG] [Thread-140862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:34:09.680 [DEBUG] [Thread-140862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:34:09.680 [INFO] [Thread-140862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:34:09.681 [DEBUG] [Thread-140862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:34:09.681 [DEBUG] [Thread-140862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:34:09.681 [DEBUG] [Thread-140862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:34:09.681 [DEBUG] [Thread-140862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:09.681 [DEBUG] [Thread-140862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:09.681 [DEBUG] [Thread-140862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:09.681 [DEBUG] [Thread-140862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] client lang: <none>
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] server lang: <none>
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] kex follows: False
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] Compression: none
2026-02-12T03:34:09.682 [DEBUG] [Thread-140862] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:34:09.694 [DEBUG] [Thread-140862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:34:09.695 [DEBUG] [Thread-140862] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:34:09.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:34:09.696 [DEBUG] [Thread-140862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:34:09.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:34:09.697 [DEBUG] [Thread-140862] [transport.py] [_log()] userauth is OK
2026-02-12T03:34:09.698 [DEBUG] [Thread-140862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:34:09.698 [DEBUG] [Thread-140862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:34:09.698 [DEBUG] [Thread-140862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:34:09.698 [DEBUG] [Thread-140862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:34:09.708 [INFO] [Thread-140862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:34:09.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:34:10.303 [DEBUG] [Thread-140862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:34:10.303 [DEBUG] [Thread-140862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:34:10.304 [DEBUG] [Thread-140862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:34:10.344 [DEBUG] [Thread-140862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:34:10.344 [DEBUG] [Thread-140862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:34:10.347 [DEBUG] [Thread-140862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:34:10.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:34:10.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:34:10.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:34:10.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:34:10.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:34:10.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:34:10.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:34:10.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:34:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:34:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.065061 -999.00  +13.10  17.16     93  +12.00 1 3 1 3 1     0    0 0.78 -12.15 ----- 17.2 17.2 158.4 20.8 14.9 -1.9 14.8 -1.8 14.6 -1.7 15.0 -1.8
2026-02-12T03:34:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:34:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:34:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.065061
2026-02-12T03:34:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:34:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:34:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:34:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:34:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:34:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:33:41', tmtdew=0.9, humidity=94.23, cloud=0.0, wind=21.59, temperature=13.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:33:41.270', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:34:10.371 [DEBUG] [Thread-140862] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:34:10.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:34:10.466 [DEBUG] [Thread-140865] [transport.py] [_log()] starting thread (client mode): 0xa2d97a30
2026-02-12T03:34:10.466 [DEBUG] [Thread-140865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:34:10.481 [DEBUG] [Thread-140865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:34:10.482 [INFO] [Thread-140865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:34:10.489 [DEBUG] [Thread-140865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:34:10.490 [DEBUG] [Thread-140865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:34:10.491 [DEBUG] [Thread-140865] [transport.py] [_log()] client lang: <none>
2026-02-12T03:34:10.491 [DEBUG] [Thread-140865] [transport.py] [_log()] server lang: <none>
2026-02-12T03:34:10.491 [DEBUG] [Thread-140865] [transport.py] [_log()] kex follows: False
2026-02-12T03:34:10.491 [DEBUG] [Thread-140865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:34:10.491 [DEBUG] [Thread-140865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:34:10.491 [DEBUG] [Thread-140865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:34:10.491 [DEBUG] [Thread-140865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:34:10.492 [DEBUG] [Thread-140865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:34:10.492 [DEBUG] [Thread-140865] [transport.py] [_log()] Compression: none
2026-02-12T03:34:10.492 [DEBUG] [Thread-140865] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:34:10.547 [DEBUG] [Thread-140865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:34:10.548 [DEBUG] [Thread-140865] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:34:10.548 [DEBUG] [Thread-140865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:34:10.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:34:10.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:34:10.603 [DEBUG] [Thread-140865] [transport.py] [_log()] userauth is OK
2026-02-12T03:34:10.603 [DEBUG] [Thread-140865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:34:10.604 [DEBUG] [Thread-140865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:34:10.604 [DEBUG] [Thread-140865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:34:10.604 [DEBUG] [Thread-140865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:34:10.622 [INFO] [Thread-140865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:34:10.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:34:10.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:34:11.212 [DEBUG] [Thread-140867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:34:11.437 [DEBUG] [Thread-140865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:34:11.437 [DEBUG] [Thread-140865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:34:11.485 [DEBUG] [Thread-140865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:34:11.486 [DEBUG] [Thread-140865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:34:11.495 [DEBUG] [Thread-140865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:34:11.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:34:11.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:34:11.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:34:11.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:34:11.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:34:11.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:34:11.532 [DEBUG] [Thread-140865] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:34:17.888 [DEBUG] [Thread-140868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:34:32.949 [DEBUG] [Thread-140869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:34:41.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:34:41.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:34:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:34:43.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 34, 17), 0.49, 96.65, 0.0, 23.15, 13.12, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:34:43.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:34:17
2026-02-12T03:34:43.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:34:43.944 [DEBUG] [Thread-140870] [transport.py] [_log()] starting thread (client mode): 0xa81d4df0
2026-02-12T03:34:43.944 [DEBUG] [Thread-140870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:34:43.964 [DEBUG] [Thread-140870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:34:43.964 [INFO] [Thread-140870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:34:43.965 [DEBUG] [Thread-140870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:34:43.965 [DEBUG] [Thread-140870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:34:43.965 [DEBUG] [Thread-140870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] client lang: <none>
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] server lang: <none>
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] kex follows: False
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] Compression: none
2026-02-12T03:34:43.966 [DEBUG] [Thread-140870] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:34:43.975 [DEBUG] [Thread-140870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:34:43.975 [DEBUG] [Thread-140870] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:34:43.976 [DEBUG] [Thread-140870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:34:43.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:34:43.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:34:43.977 [DEBUG] [Thread-140870] [transport.py] [_log()] userauth is OK
2026-02-12T03:34:43.977 [DEBUG] [Thread-140870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:34:43.977 [DEBUG] [Thread-140870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:34:43.977 [DEBUG] [Thread-140870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:34:43.978 [DEBUG] [Thread-140870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:34:43.995 [INFO] [Thread-140870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:34:43.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:34:44.573 [DEBUG] [Thread-140870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:34:44.573 [DEBUG] [Thread-140870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:34:44.574 [DEBUG] [Thread-140870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:34:44.614 [DEBUG] [Thread-140870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:34:44.615 [DEBUG] [Thread-140870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:34:44.618 [DEBUG] [Thread-140870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:34:44.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:34:44.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:34:44.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:34:44.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:34:44.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:34:44.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:34:44.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:34:44.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:34:44.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:34:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.065408 -999.00  +13.00  15.28     93  +12.00 1 3 1 3 1     0    0 0.76 -12.78 ----- 15.3 15.3 141.0 21.0 14.9 -2.0 14.8 -1.6 14.6 -2.0 15.0 -1.9
2026-02-12T03:34:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:34:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:34:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.065408
2026-02-12T03:34:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:34:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:34:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:34:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:34:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:34:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:34:17', tmtdew=0.49, humidity=96.65, cloud=0.0, wind=23.15, temperature=13.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:34:11.251', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:34:44.643 [DEBUG] [Thread-140870] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:34:44.654 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:34:44.655 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:34:44.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:34:44.738 [DEBUG] [Thread-140873] [transport.py] [_log()] starting thread (client mode): 0xa81d78b0
2026-02-12T03:34:44.738 [DEBUG] [Thread-140873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:34:44.752 [DEBUG] [Thread-140873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:34:44.752 [INFO] [Thread-140873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:34:44.760 [DEBUG] [Thread-140873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:34:44.760 [DEBUG] [Thread-140873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:34:44.760 [DEBUG] [Thread-140873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:34:44.760 [DEBUG] [Thread-140873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:44.760 [DEBUG] [Thread-140873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] client lang: <none>
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] server lang: <none>
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] kex follows: False
2026-02-12T03:34:44.761 [DEBUG] [Thread-140873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:34:44.762 [DEBUG] [Thread-140873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:34:44.762 [DEBUG] [Thread-140873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:34:44.762 [DEBUG] [Thread-140873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:34:44.762 [DEBUG] [Thread-140873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:34:44.762 [DEBUG] [Thread-140873] [transport.py] [_log()] Compression: none
2026-02-12T03:34:44.762 [DEBUG] [Thread-140873] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:34:44.819 [DEBUG] [Thread-140873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:34:44.820 [DEBUG] [Thread-140873] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:34:44.820 [DEBUG] [Thread-140873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:34:44.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:34:44.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:34:44.875 [DEBUG] [Thread-140873] [transport.py] [_log()] userauth is OK
2026-02-12T03:34:44.875 [DEBUG] [Thread-140873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:34:44.875 [DEBUG] [Thread-140873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:34:44.875 [DEBUG] [Thread-140873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:34:44.876 [DEBUG] [Thread-140873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:34:44.894 [INFO] [Thread-140873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:34:44.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:34:44.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:34:45.695 [DEBUG] [Thread-140873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:34:45.695 [DEBUG] [Thread-140873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:34:45.743 [DEBUG] [Thread-140873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:34:45.743 [DEBUG] [Thread-140873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:34:45.752 [DEBUG] [Thread-140873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:34:45.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:34:45.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')
2026-02-12T03:34:45.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:34:45.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:34:45.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:34:45.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:34:45.789 [DEBUG] [Thread-140873] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:34:47.984 [DEBUG] [Thread-140875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:03.043 [DEBUG] [Thread-140876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:11.291 [DEBUG] [Thread-140877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:15.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:35:15.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:35:15.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:35:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 34, 54), 0.49, 96.67, 0.0, 20.63, 13.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:35:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:34:54
2026-02-12T03:35:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:35:18.074 [DEBUG] [Thread-140878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:18.223 [DEBUG] [Thread-140879] [transport.py] [_log()] starting thread (client mode): 0xa2d9de40
2026-02-12T03:35:18.223 [DEBUG] [Thread-140879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:35:18.239 [DEBUG] [Thread-140879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:35:18.239 [INFO] [Thread-140879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] client lang: <none>
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] server lang: <none>
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] kex follows: False
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:35:18.242 [DEBUG] [Thread-140879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:35:18.243 [DEBUG] [Thread-140879] [transport.py] [_log()] Compression: none
2026-02-12T03:35:18.243 [DEBUG] [Thread-140879] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:35:18.260 [DEBUG] [Thread-140879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:35:18.261 [DEBUG] [Thread-140879] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:35:18.262 [DEBUG] [Thread-140879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:35:18.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:35:18.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:35:18.264 [DEBUG] [Thread-140879] [transport.py] [_log()] userauth is OK
2026-02-12T03:35:18.264 [DEBUG] [Thread-140879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:35:18.265 [DEBUG] [Thread-140879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:35:18.265 [DEBUG] [Thread-140879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:35:18.265 [DEBUG] [Thread-140879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:35:18.285 [INFO] [Thread-140879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:35:18.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:35:18.881 [DEBUG] [Thread-140879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:35:18.882 [DEBUG] [Thread-140879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:35:18.882 [DEBUG] [Thread-140879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:35:18.922 [DEBUG] [Thread-140879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:35:18.923 [DEBUG] [Thread-140879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:35:18.925 [DEBUG] [Thread-140879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:35:18.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:35:18.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:35:18.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:35:18.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:35:18.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:35:18.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:35:18.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:35:18.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:35:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:35:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.066103 -999.00  +13.00  18.95     93  +12.00 1 3 1 3 1     0    0 0.70 -14.13 ----- 18.9 18.9 143.4 23.1 14.9 -1.8 14.8 -1.7 14.6 -1.8 15.0 -1.7
2026-02-12T03:35:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:35:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:35:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.066103
2026-02-12T03:35:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:35:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:35:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:35:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:35:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:35:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:34:54', tmtdew=0.49, humidity=96.67, cloud=0.0, wind=20.63, temperature=13.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:35:11.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:35:18.950 [DEBUG] [Thread-140879] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:35:19.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:35:19.043 [DEBUG] [Thread-140882] [transport.py] [_log()] starting thread (client mode): 0xa5743d90
2026-02-12T03:35:19.044 [DEBUG] [Thread-140882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:35:19.058 [DEBUG] [Thread-140882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:35:19.058 [INFO] [Thread-140882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:35:19.066 [DEBUG] [Thread-140882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:35:19.066 [DEBUG] [Thread-140882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:35:19.066 [DEBUG] [Thread-140882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] client lang: <none>
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] server lang: <none>
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] kex follows: False
2026-02-12T03:35:19.067 [DEBUG] [Thread-140882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:35:19.068 [DEBUG] [Thread-140882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:35:19.068 [DEBUG] [Thread-140882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:35:19.068 [DEBUG] [Thread-140882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:35:19.068 [DEBUG] [Thread-140882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:35:19.068 [DEBUG] [Thread-140882] [transport.py] [_log()] Compression: none
2026-02-12T03:35:19.068 [DEBUG] [Thread-140882] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:35:19.123 [DEBUG] [Thread-140882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:35:19.124 [DEBUG] [Thread-140882] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:35:19.124 [DEBUG] [Thread-140882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:35:19.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:35:19.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:35:19.179 [DEBUG] [Thread-140882] [transport.py] [_log()] userauth is OK
2026-02-12T03:35:19.179 [DEBUG] [Thread-140882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:35:19.179 [DEBUG] [Thread-140882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:35:19.179 [DEBUG] [Thread-140882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:35:19.179 [DEBUG] [Thread-140882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:35:19.195 [INFO] [Thread-140882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:35:19.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:35:19.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:35:20.000 [DEBUG] [Thread-140882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:35:20.001 [DEBUG] [Thread-140882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:35:20.048 [DEBUG] [Thread-140882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:35:20.048 [DEBUG] [Thread-140882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:35:20.057 [DEBUG] [Thread-140882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:35:20.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:35:20.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:35:20.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:35:20.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:35:20.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:35:20.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:35:20.093 [DEBUG] [Thread-140882] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:35:33.106 [DEBUG] [Thread-140884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:44.859 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:44.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:48.147 [DEBUG] [Thread-140885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:35:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:35:50.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:35:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:35:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 35, 30), 0.49, 96.65, 0.0, 22.57, 13.08, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:35:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:35:30
2026-02-12T03:35:52.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:35:52.373 [DEBUG] [Thread-140886] [transport.py] [_log()] starting thread (client mode): 0xa575bf70
2026-02-12T03:35:52.373 [DEBUG] [Thread-140886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:35:52.393 [DEBUG] [Thread-140886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:35:52.393 [INFO] [Thread-140886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:35:52.394 [DEBUG] [Thread-140886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:35:52.394 [DEBUG] [Thread-140886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] client lang: <none>
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] server lang: <none>
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] kex follows: False
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] Compression: none
2026-02-12T03:35:52.395 [DEBUG] [Thread-140886] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:35:52.403 [DEBUG] [Thread-140886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:35:52.404 [DEBUG] [Thread-140886] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:35:52.404 [DEBUG] [Thread-140886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:35:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:35:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:35:52.405 [DEBUG] [Thread-140886] [transport.py] [_log()] userauth is OK
2026-02-12T03:35:52.405 [DEBUG] [Thread-140886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:35:52.405 [DEBUG] [Thread-140886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:35:52.406 [DEBUG] [Thread-140886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:35:52.406 [DEBUG] [Thread-140886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:35:52.418 [INFO] [Thread-140886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:35:52.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:35:53.041 [DEBUG] [Thread-140886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:35:53.041 [DEBUG] [Thread-140886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:35:53.042 [DEBUG] [Thread-140886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:35:53.082 [DEBUG] [Thread-140886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:35:53.082 [DEBUG] [Thread-140886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:35:53.085 [DEBUG] [Thread-140886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:35:53.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:35:53.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:35:53.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:35:53.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:35:53.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:35:53.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:35:53.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:35:53.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:35:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:35:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.066450 -999.00  +13.00  19.35     93  +11.90 1 3 1 3 1     0    0 0.78 -12.04 ----- 19.4 19.4 139.6 23.3 14.9 -1.7 14.8 -1.7 14.7 -1.8 14.9 -1.5
2026-02-12T03:35:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:35:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:35:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.066450
2026-02-12T03:35:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:35:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:35:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:35:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:35:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:35:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:35:30', tmtdew=0.49, humidity=96.65, cloud=0.0, wind=22.57, temperature=13.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:35:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:35:53.106 [DEBUG] [Thread-140886] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:35:53.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:35:53.198 [DEBUG] [Thread-140889] [transport.py] [_log()] starting thread (client mode): 0xa575be80
2026-02-12T03:35:53.198 [DEBUG] [Thread-140889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:35:53.212 [DEBUG] [Thread-140889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:35:53.212 [INFO] [Thread-140889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:35:53.219 [DEBUG] [Thread-140889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:35:53.220 [DEBUG] [Thread-140889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:35:53.220 [DEBUG] [Thread-140889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:35:53.220 [DEBUG] [Thread-140889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:53.220 [DEBUG] [Thread-140889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:35:53.220 [DEBUG] [Thread-140889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:53.220 [DEBUG] [Thread-140889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:35:53.220 [DEBUG] [Thread-140889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] client lang: <none>
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] server lang: <none>
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] kex follows: False
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] Compression: none
2026-02-12T03:35:53.221 [DEBUG] [Thread-140889] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:35:53.279 [DEBUG] [Thread-140889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:35:53.279 [DEBUG] [Thread-140889] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:35:53.280 [DEBUG] [Thread-140889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:35:53.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:35:53.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:35:53.335 [DEBUG] [Thread-140889] [transport.py] [_log()] userauth is OK
2026-02-12T03:35:53.335 [DEBUG] [Thread-140889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:35:53.335 [DEBUG] [Thread-140889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:35:53.335 [DEBUG] [Thread-140889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:35:53.335 [DEBUG] [Thread-140889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:35:53.354 [INFO] [Thread-140889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:35:53.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:35:53.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:35:54.153 [DEBUG] [Thread-140889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:35:54.153 [DEBUG] [Thread-140889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:35:54.200 [DEBUG] [Thread-140889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:35:54.200 [DEBUG] [Thread-140889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:35:54.209 [DEBUG] [Thread-140889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:35:54.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:35:54.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:35:54.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:35:54.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:35:54.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:35:54.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:35:54.247 [DEBUG] [Thread-140889] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:36:03.179 [DEBUG] [Thread-140891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:36:11.380 [DEBUG] [Thread-140892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:36:18.230 [DEBUG] [Thread-140893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:36:24.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:36:24.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:36:24.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
2026-02-12T03:36:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 36, 5), 0.49, 96.68, 0.0, 21.99, 13.11, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:36:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:36:05
2026-02-12T03:36:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:36:26.510 [DEBUG] [Thread-140894] [transport.py] [_log()] starting thread (client mode): 0xa2d94880
2026-02-12T03:36:26.510 [DEBUG] [Thread-140894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:36:26.528 [DEBUG] [Thread-140894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:36:26.528 [INFO] [Thread-140894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] client lang: <none>
2026-02-12T03:36:26.529 [DEBUG] [Thread-140894] [transport.py] [_log()] server lang: <none>
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] kex follows: False
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] Compression: none
2026-02-12T03:36:26.530 [DEBUG] [Thread-140894] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:36:26.539 [DEBUG] [Thread-140894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:36:26.540 [DEBUG] [Thread-140894] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:36:26.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:36:26.542 [DEBUG] [Thread-140894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:36:26.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:36:26.544 [DEBUG] [Thread-140894] [transport.py] [_log()] userauth is OK
2026-02-12T03:36:26.544 [DEBUG] [Thread-140894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:36:26.544 [DEBUG] [Thread-140894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:36:26.544 [DEBUG] [Thread-140894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:36:26.544 [DEBUG] [Thread-140894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:36:26.564 [INFO] [Thread-140894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:36:26.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:36:27.102 [DEBUG] [Thread-140894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:36:27.103 [DEBUG] [Thread-140894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:36:27.103 [DEBUG] [Thread-140894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:36:27.143 [DEBUG] [Thread-140894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:36:27.143 [DEBUG] [Thread-140894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:36:27.150 [DEBUG] [Thread-140894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:36:27.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:36:27.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:36:27.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:36:27.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:36:27.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:36:27.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:36:27.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:36:27.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:36:27.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:36:27.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.066797 -999.00  +13.00  17.24     93  +12.00 1 3 1 3 1     0    0 0.76 -11.36 ----- 17.2 17.2 144.6 21.2 14.9 -1.8 14.8 -1.5 14.7 -1.8 15.0 -1.6
2026-02-12T03:36:27.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:36:27.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:36:27.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.066797
2026-02-12T03:36:27.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:36:27.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:36:27.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:36:27.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:36:27.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:36:27.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:36:05', tmtdew=0.49, humidity=96.68, cloud=0.0, wind=21.99, temperature=13.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:36:11.261', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:36:27.173 [DEBUG] [Thread-140894] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:36:27.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:36:27.282 [DEBUG] [Thread-140897] [transport.py] [_log()] starting thread (client mode): 0xa5771e10
2026-02-12T03:36:27.283 [DEBUG] [Thread-140897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:36:27.297 [DEBUG] [Thread-140897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:36:27.297 [INFO] [Thread-140897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] client lang: <none>
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] server lang: <none>
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] kex follows: False
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:36:27.305 [DEBUG] [Thread-140897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:36:27.306 [DEBUG] [Thread-140897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:36:27.306 [DEBUG] [Thread-140897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:36:27.306 [DEBUG] [Thread-140897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:36:27.306 [DEBUG] [Thread-140897] [transport.py] [_log()] Compression: none
2026-02-12T03:36:27.306 [DEBUG] [Thread-140897] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:36:27.363 [DEBUG] [Thread-140897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:36:27.364 [DEBUG] [Thread-140897] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:36:27.365 [DEBUG] [Thread-140897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:36:27.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:36:27.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:36:27.419 [DEBUG] [Thread-140897] [transport.py] [_log()] userauth is OK
2026-02-12T03:36:27.419 [DEBUG] [Thread-140897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:36:27.420 [DEBUG] [Thread-140897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:36:27.420 [DEBUG] [Thread-140897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:36:27.420 [DEBUG] [Thread-140897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:36:27.438 [INFO] [Thread-140897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:36:27.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:36:27.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:36:28.256 [DEBUG] [Thread-140897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:36:28.256 [DEBUG] [Thread-140897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:36:28.304 [DEBUG] [Thread-140897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:36:28.305 [DEBUG] [Thread-140897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:36:28.314 [DEBUG] [Thread-140897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:36:28.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:36:28.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:36:28.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:36:28.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:36:28.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:36:28.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:36:28.350 [DEBUG] [Thread-140897] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:36:33.265 [DEBUG] [Thread-140899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:36:45.062 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:36:45.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:36:48.324 [DEBUG] [Thread-140900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:36:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:36:58.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:36:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:37:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 36, 40), 0.85, 94.5, 0.0, 19.27, 13.63, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:37:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:36:40
2026-02-12T03:37:00.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:37:01.016 [DEBUG] [Thread-140901] [transport.py] [_log()] starting thread (client mode): 0xa5770040
2026-02-12T03:37:01.016 [DEBUG] [Thread-140901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:37:01.032 [DEBUG] [Thread-140901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:37:01.032 [INFO] [Thread-140901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] client lang: <none>
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] server lang: <none>
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] kex follows: False
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] Compression: none
2026-02-12T03:37:01.033 [DEBUG] [Thread-140901] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:37:01.042 [DEBUG] [Thread-140901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:37:01.042 [DEBUG] [Thread-140901] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:37:01.042 [DEBUG] [Thread-140901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:37:01.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:37:01.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:37:01.043 [DEBUG] [Thread-140901] [transport.py] [_log()] userauth is OK
2026-02-12T03:37:01.043 [DEBUG] [Thread-140901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:37:01.043 [DEBUG] [Thread-140901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:37:01.043 [DEBUG] [Thread-140901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:37:01.043 [DEBUG] [Thread-140901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:37:01.062 [INFO] [Thread-140901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:37:01.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:37:01.706 [DEBUG] [Thread-140901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:37:01.707 [DEBUG] [Thread-140901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:37:01.707 [DEBUG] [Thread-140901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:37:01.747 [DEBUG] [Thread-140901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:37:01.748 [DEBUG] [Thread-140901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:37:01.751 [DEBUG] [Thread-140901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:37:01.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:37:01.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:37:01.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:37:01.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:37:01.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:37:01.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:37:01.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:37:01.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:37:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:37:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.067144 -999.00  +13.00  17.47     93  +12.00 1 3 1 3 1     0    0 0.77 -11.90 ----- 17.5 17.5 141.4 23.1 14.9 -1.6 14.8 -1.7 14.6 -1.7 15.0 -1.8
2026-02-12T03:37:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:37:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:37:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.067144
2026-02-12T03:37:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:37:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:37:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:37:01.777 [DEBUG] [Thread-140901] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:37:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:37:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:37:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:36:40', tmtdew=0.85, humidity=94.5, cloud=0.0, wind=19.27, temperature=13.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:36:41.242', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:37:01.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:37:01.873 [DEBUG] [Thread-140904] [transport.py] [_log()] starting thread (client mode): 0x9eb05870
2026-02-12T03:37:01.873 [DEBUG] [Thread-140904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:37:01.889 [DEBUG] [Thread-140904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:37:01.889 [INFO] [Thread-140904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:37:01.897 [DEBUG] [Thread-140904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] client lang: <none>
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] server lang: <none>
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] kex follows: False
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:37:01.898 [DEBUG] [Thread-140904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:37:01.899 [DEBUG] [Thread-140904] [transport.py] [_log()] Compression: none
2026-02-12T03:37:01.899 [DEBUG] [Thread-140904] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:37:01.957 [DEBUG] [Thread-140904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:37:01.958 [DEBUG] [Thread-140904] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:37:01.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:37:01.958 [DEBUG] [Thread-140904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:37:01.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:37:02.015 [DEBUG] [Thread-140904] [transport.py] [_log()] userauth is OK
2026-02-12T03:37:02.015 [DEBUG] [Thread-140904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:37:02.015 [DEBUG] [Thread-140904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:37:02.015 [DEBUG] [Thread-140904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:37:02.015 [DEBUG] [Thread-140904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:37:02.029 [INFO] [Thread-140904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:37:02.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:37:02.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:37:02.845 [DEBUG] [Thread-140904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:37:02.845 [DEBUG] [Thread-140904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:37:02.893 [DEBUG] [Thread-140904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:37:02.893 [DEBUG] [Thread-140904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:37:02.901 [DEBUG] [Thread-140904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:37:02.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:37:02.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:37: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') -> 00000000
2026-02-12T03:37:02.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:37:02.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:37:02.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:37:02.935 [DEBUG] [Thread-140904] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:37:03.356 [DEBUG] [Thread-140906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:37:11.474 [DEBUG] [Thread-140907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:37:18.397 [DEBUG] [Thread-140908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:37:32.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:37:32.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:37:32.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
2026-02-12T03:37:33.435 [DEBUG] [Thread-140909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:37:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 37, 15), 0.48, 96.73, 0.0, 21.76, 13.18, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:37:34.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:37:15
2026-02-12T03:37:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:37:35.419 [DEBUG] [Thread-140910] [transport.py] [_log()] starting thread (client mode): 0xa5773100
2026-02-12T03:37:35.419 [DEBUG] [Thread-140910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:37:35.429 [DEBUG] [Thread-140910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:37:35.429 [INFO] [Thread-140910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:37:35.431 [DEBUG] [Thread-140910] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:37:35.431 [DEBUG] [Thread-140910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:37:35.431 [DEBUG] [Thread-140910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:37:35.431 [DEBUG] [Thread-140910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:35.431 [DEBUG] [Thread-140910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:35.431 [DEBUG] [Thread-140910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] client lang: <none>
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] server lang: <none>
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] kex follows: False
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] Compression: none
2026-02-12T03:37:35.432 [DEBUG] [Thread-140910] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:37:35.442 [DEBUG] [Thread-140910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:37:35.442 [DEBUG] [Thread-140910] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:37:35.442 [DEBUG] [Thread-140910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:37:35.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:37:35.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:37:35.443 [DEBUG] [Thread-140910] [transport.py] [_log()] userauth is OK
2026-02-12T03:37:35.443 [DEBUG] [Thread-140910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:37:35.443 [DEBUG] [Thread-140910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:37:35.443 [DEBUG] [Thread-140910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:37:35.443 [DEBUG] [Thread-140910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:37:35.452 [INFO] [Thread-140910] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:37:35.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:37:36.025 [DEBUG] [Thread-140910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:37:36.025 [DEBUG] [Thread-140910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:37:36.026 [DEBUG] [Thread-140910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:37:36.066 [DEBUG] [Thread-140910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:37:36.067 [DEBUG] [Thread-140910] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:37:36.076 [DEBUG] [Thread-140910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:37:36.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:37:36.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:37:36.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:37:36.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:37:36.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:37:36.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:37:36.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:37:36.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:37:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:37:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.067491 -999.00  +13.10  13.81     93  +12.10 1 3 1 3 1     0    0 0.74 -12.77 ----- 13.8 13.8 146.0 22.9 14.9 -1.6 14.8 -1.4 14.7 -1.6 15.0 -1.5
2026-02-12T03:37:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:37:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:37:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.067491
2026-02-12T03:37:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:37:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:37:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:37:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:37:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:37:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:37:15', tmtdew=0.48, humidity=96.73, cloud=0.0, wind=21.76, temperature=13.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:37:11.222', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:37:36.098 [DEBUG] [Thread-140910] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:37:36.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:37:36.197 [DEBUG] [Thread-140913] [transport.py] [_log()] starting thread (client mode): 0xa57736a0
2026-02-12T03:37:36.197 [DEBUG] [Thread-140913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:37:36.212 [DEBUG] [Thread-140913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:37:36.212 [INFO] [Thread-140913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:37:36.219 [DEBUG] [Thread-140913] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] client lang: <none>
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] server lang: <none>
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] kex follows: False
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:37:36.220 [DEBUG] [Thread-140913] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:37:36.221 [DEBUG] [Thread-140913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:37:36.221 [DEBUG] [Thread-140913] [transport.py] [_log()] Compression: none
2026-02-12T03:37:36.221 [DEBUG] [Thread-140913] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:37:36.277 [DEBUG] [Thread-140913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:37:36.278 [DEBUG] [Thread-140913] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:37:36.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:37:36.278 [DEBUG] [Thread-140913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:37:36.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:37:36.335 [DEBUG] [Thread-140913] [transport.py] [_log()] userauth is OK
2026-02-12T03:37:36.335 [DEBUG] [Thread-140913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:37:36.335 [DEBUG] [Thread-140913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:37:36.335 [DEBUG] [Thread-140913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:37:36.336 [DEBUG] [Thread-140913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:37:36.358 [INFO] [Thread-140913] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:37:36.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:37:36.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:37:37.196 [DEBUG] [Thread-140913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:37:37.197 [DEBUG] [Thread-140913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:37:37.244 [DEBUG] [Thread-140913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:37:37.244 [DEBUG] [Thread-140913] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:37:37.253 [DEBUG] [Thread-140913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:37:37.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:37: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')
2026-02-12T03:37:37.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:37:37.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:37:37.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:37:37.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:37:37.289 [DEBUG] [Thread-140913] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:37:45.282 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:37:45.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:37:48.471 [DEBUG] [Thread-140915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:38:03.519 [DEBUG] [Thread-140916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:38:07.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:38:07.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:38:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:38:09.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 37, 50), 0.47, 96.78, 0.0, 23.63, 13.25, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:38:09.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:37:50
2026-02-12T03:38:09.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:38:09.689 [DEBUG] [Thread-140917] [transport.py] [_log()] starting thread (client mode): 0xa2d02830
2026-02-12T03:38:09.689 [DEBUG] [Thread-140917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:38:09.709 [DEBUG] [Thread-140917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:38:09.709 [INFO] [Thread-140917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:38:09.712 [DEBUG] [Thread-140917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:38:09.712 [DEBUG] [Thread-140917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:38:09.712 [DEBUG] [Thread-140917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:38:09.712 [DEBUG] [Thread-140917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:09.712 [DEBUG] [Thread-140917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:09.712 [DEBUG] [Thread-140917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:09.712 [DEBUG] [Thread-140917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] client lang: <none>
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] server lang: <none>
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] kex follows: False
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] Compression: none
2026-02-12T03:38:09.713 [DEBUG] [Thread-140917] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:38:09.728 [DEBUG] [Thread-140917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:38:09.729 [DEBUG] [Thread-140917] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:38:09.729 [DEBUG] [Thread-140917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:38:09.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:38:09.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:38:09.731 [DEBUG] [Thread-140917] [transport.py] [_log()] userauth is OK
2026-02-12T03:38:09.731 [DEBUG] [Thread-140917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:38:09.731 [DEBUG] [Thread-140917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:38:09.731 [DEBUG] [Thread-140917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:38:09.731 [DEBUG] [Thread-140917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:38:09.746 [INFO] [Thread-140917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:38:09.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:38:10.371 [DEBUG] [Thread-140917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:38:10.372 [DEBUG] [Thread-140917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:38:10.372 [DEBUG] [Thread-140917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:38:10.412 [DEBUG] [Thread-140917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:38:10.413 [DEBUG] [Thread-140917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:38:10.416 [DEBUG] [Thread-140917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:38:10.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:38:10.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:38:10.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:38:10.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:38:10.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:38:10.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:38:10.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:38:10.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:38:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:38:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.067839 -999.00  +13.10  15.57     93  +12.10 1 3 1 3 1     0    0 0.68 -13.72 ----- 15.6 15.6 148.8 19.8 15.0 -1.9 14.8 -1.4 14.7 -1.5 15.0 -1.8
2026-02-12T03:38:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:38:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:38:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.067839
2026-02-12T03:38:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:38:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:38:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:38:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:38:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:38:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:37:50', tmtdew=0.47, humidity=96.78, cloud=0.0, wind=23.63, temperature=13.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:37:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:38:10.441 [DEBUG] [Thread-140917] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:38:10.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:38:10.552 [DEBUG] [Thread-140920] [transport.py] [_log()] starting thread (client mode): 0xa81d6140
2026-02-12T03:38:10.552 [DEBUG] [Thread-140920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:38:10.567 [DEBUG] [Thread-140920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:38:10.567 [INFO] [Thread-140920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:38:10.574 [DEBUG] [Thread-140920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] client lang: <none>
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] server lang: <none>
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] kex follows: False
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:38:10.575 [DEBUG] [Thread-140920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:38:10.576 [DEBUG] [Thread-140920] [transport.py] [_log()] Compression: none
2026-02-12T03:38:10.576 [DEBUG] [Thread-140920] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:38:10.634 [DEBUG] [Thread-140920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:38:10.635 [DEBUG] [Thread-140920] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:38:10.636 [DEBUG] [Thread-140920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:38:10.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:38:10.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:38:10.692 [DEBUG] [Thread-140920] [transport.py] [_log()] userauth is OK
2026-02-12T03:38:10.692 [DEBUG] [Thread-140920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:38:10.692 [DEBUG] [Thread-140920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:38:10.692 [DEBUG] [Thread-140920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:38:10.693 [DEBUG] [Thread-140920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:38:10.711 [INFO] [Thread-140920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:38:10.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:38:10.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:38:11.537 [DEBUG] [Thread-140920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:38:11.537 [DEBUG] [Thread-140920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:38:11.555 [DEBUG] [Thread-140922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:38:11.585 [DEBUG] [Thread-140920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:38:11.586 [DEBUG] [Thread-140920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:38:11.596 [DEBUG] [Thread-140920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:38:11.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:38:11.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:38:11.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
2026-02-12T03:38:11.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:38:11.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:38:11.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:38:11.635 [DEBUG] [Thread-140920] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:38:18.557 [DEBUG] [Thread-140923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:38:33.616 [DEBUG] [Thread-140924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:38:41.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:38:41.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:38:41.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
2026-02-12T03:38:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 38, 26), 0.48, 96.75, 0.0, 19.5, 13.3, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:38:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:38:26
2026-02-12T03:38:43.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:38:43.932 [DEBUG] [Thread-140925] [transport.py] [_log()] starting thread (client mode): 0xa2d00940
2026-02-12T03:38:43.932 [DEBUG] [Thread-140925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:38:43.952 [DEBUG] [Thread-140925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:38:43.952 [INFO] [Thread-140925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] client lang: <none>
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] server lang: <none>
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] kex follows: False
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:38:43.955 [DEBUG] [Thread-140925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:38:43.956 [DEBUG] [Thread-140925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:38:43.956 [DEBUG] [Thread-140925] [transport.py] [_log()] Compression: none
2026-02-12T03:38:43.956 [DEBUG] [Thread-140925] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:38:43.973 [DEBUG] [Thread-140925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:38:43.974 [DEBUG] [Thread-140925] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:38:43.974 [DEBUG] [Thread-140925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:38:43.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:38:43.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:38:43.976 [DEBUG] [Thread-140925] [transport.py] [_log()] userauth is OK
2026-02-12T03:38:43.976 [DEBUG] [Thread-140925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:38:43.976 [DEBUG] [Thread-140925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:38:43.977 [DEBUG] [Thread-140925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:38:43.977 [DEBUG] [Thread-140925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:38:43.991 [INFO] [Thread-140925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:38:43.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:38:44.620 [DEBUG] [Thread-140925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:38:44.620 [DEBUG] [Thread-140925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:38:44.621 [DEBUG] [Thread-140925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:38:44.661 [DEBUG] [Thread-140925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:38:44.662 [DEBUG] [Thread-140925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:38:44.665 [DEBUG] [Thread-140925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:38:44.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:38:44.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:38:44.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:38:44.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:38:44.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:38:44.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:38:44.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:38:44.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:38:44.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:38:44.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.068186 -999.00  +13.10  16.85     93  +12.10 1 3 1 3 1     0    0 0.71 -12.79 ----- 16.9 16.9 145.0 21.3 15.0 -1.9 14.9 -1.7 14.7 -1.6 15.1 -1.9
2026-02-12T03:38:44.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:38:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:38:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.068186
2026-02-12T03:38:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:38:44.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:38:44.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:38:44.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:38:44.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:38:44.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:38:26', tmtdew=0.48, humidity=96.75, cloud=0.0, wind=19.5, temperature=13.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:38:11.270', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:38:44.691 [DEBUG] [Thread-140925] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:38:44.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:38:44.789 [DEBUG] [Thread-140928] [transport.py] [_log()] starting thread (client mode): 0xa575a1a0
2026-02-12T03:38:44.790 [DEBUG] [Thread-140928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:38:44.804 [DEBUG] [Thread-140928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:38:44.804 [INFO] [Thread-140928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] client lang: <none>
2026-02-12T03:38:44.812 [DEBUG] [Thread-140928] [transport.py] [_log()] server lang: <none>
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] kex follows: False
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] Compression: none
2026-02-12T03:38:44.813 [DEBUG] [Thread-140928] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:38:44.876 [DEBUG] [Thread-140928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:38:44.876 [DEBUG] [Thread-140928] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:38:44.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:38:44.878 [DEBUG] [Thread-140928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:38:44.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:38:44.932 [DEBUG] [Thread-140928] [transport.py] [_log()] userauth is OK
2026-02-12T03:38:44.932 [DEBUG] [Thread-140928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:38:44.932 [DEBUG] [Thread-140928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:38:44.932 [DEBUG] [Thread-140928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:38:44.932 [DEBUG] [Thread-140928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:38:44.950 [INFO] [Thread-140928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:38:44.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:38:44.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:38:45.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:38:45.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:38:45.799 [DEBUG] [Thread-140928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:38:45.799 [DEBUG] [Thread-140928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:38:45.847 [DEBUG] [Thread-140928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:38:45.847 [DEBUG] [Thread-140928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:38:45.857 [DEBUG] [Thread-140928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:38:45.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:38:45.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')
2026-02-12T03:38:45.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:38:45.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:38:45.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:38:45.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:38:45.893 [DEBUG] [Thread-140928] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:38:48.651 [DEBUG] [Thread-140930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:03.701 [DEBUG] [Thread-140931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:11.639 [DEBUG] [Thread-140932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:15.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:39:15.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:39:15.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:39:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 39, 1), 0.48, 96.73, 0.0, 20.75, 13.26, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:39:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:39:01
2026-02-12T03:39:18.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:39:18.324 [DEBUG] [Thread-140933] [transport.py] [_log()] starting thread (client mode): 0xa5773670
2026-02-12T03:39:18.324 [DEBUG] [Thread-140933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:39:18.345 [DEBUG] [Thread-140933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:39:18.345 [INFO] [Thread-140933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:39:18.348 [DEBUG] [Thread-140933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:39:18.348 [DEBUG] [Thread-140933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:39:18.348 [DEBUG] [Thread-140933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:39:18.348 [DEBUG] [Thread-140933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:18.348 [DEBUG] [Thread-140933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:18.348 [DEBUG] [Thread-140933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] client lang: <none>
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] server lang: <none>
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] kex follows: False
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:39:18.349 [DEBUG] [Thread-140933] [transport.py] [_log()] Compression: none
2026-02-12T03:39:18.350 [DEBUG] [Thread-140933] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:39:18.368 [DEBUG] [Thread-140933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:39:18.369 [DEBUG] [Thread-140933] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:39:18.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:39:18.369 [DEBUG] [Thread-140933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:39:18.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:39:18.372 [DEBUG] [Thread-140933] [transport.py] [_log()] userauth is OK
2026-02-12T03:39:18.372 [DEBUG] [Thread-140933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:39:18.372 [DEBUG] [Thread-140933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:39:18.372 [DEBUG] [Thread-140933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:39:18.372 [DEBUG] [Thread-140933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:39:18.397 [INFO] [Thread-140933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:39:18.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:39:18.738 [DEBUG] [Thread-140935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:18.986 [DEBUG] [Thread-140933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:39:18.987 [DEBUG] [Thread-140933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:39:18.987 [DEBUG] [Thread-140933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:39:19.027 [DEBUG] [Thread-140933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:39:19.028 [DEBUG] [Thread-140933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:39:19.031 [DEBUG] [Thread-140933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:39:19.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:39:19.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:39:19.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:39:19.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:39:19.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:39:19.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:39:19.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:39:19.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:39:19.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:39:19.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.068880 -999.00  +13.10  12.57     93  +12.10 1 3 1 3 1     0    0 0.72 -12.75 ----- 12.6 12.6 150.6 19.8 15.0 -1.9 14.9 -1.8 14.7 -1.7 15.0 -1.9
2026-02-12T03:39:19.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:39:19.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:39:19.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.068880
2026-02-12T03:39:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:39:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:39:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:39:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:39:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:39:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:39:01', tmtdew=0.48, humidity=96.73, cloud=0.0, wind=20.75, temperature=13.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:39:11.232', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:39:19.058 [DEBUG] [Thread-140933] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:39:19.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:39:19.152 [DEBUG] [Thread-140937] [transport.py] [_log()] starting thread (client mode): 0xa5771600
2026-02-12T03:39:19.153 [DEBUG] [Thread-140937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:39:19.167 [DEBUG] [Thread-140937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:39:19.167 [INFO] [Thread-140937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:39:19.175 [DEBUG] [Thread-140937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:39:19.175 [DEBUG] [Thread-140937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:39:19.175 [DEBUG] [Thread-140937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:39:19.175 [DEBUG] [Thread-140937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:19.175 [DEBUG] [Thread-140937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:19.175 [DEBUG] [Thread-140937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] client lang: <none>
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] server lang: <none>
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] kex follows: False
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:39:19.176 [DEBUG] [Thread-140937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:39:19.177 [DEBUG] [Thread-140937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:39:19.177 [DEBUG] [Thread-140937] [transport.py] [_log()] Compression: none
2026-02-12T03:39:19.177 [DEBUG] [Thread-140937] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:39:19.232 [DEBUG] [Thread-140937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:39:19.233 [DEBUG] [Thread-140937] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:39:19.234 [DEBUG] [Thread-140937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:39:19.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:39:19.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:39:19.288 [DEBUG] [Thread-140937] [transport.py] [_log()] userauth is OK
2026-02-12T03:39:19.288 [DEBUG] [Thread-140937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:39:19.289 [DEBUG] [Thread-140937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:39:19.289 [DEBUG] [Thread-140937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:39:19.289 [DEBUG] [Thread-140937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:39:19.308 [INFO] [Thread-140937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:39:19.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:39:19.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:39:20.103 [DEBUG] [Thread-140937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:39:20.103 [DEBUG] [Thread-140937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:39:20.151 [DEBUG] [Thread-140937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:39:20.151 [DEBUG] [Thread-140937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:39:20.159 [DEBUG] [Thread-140937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:39:20.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:39:20.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:39:20.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:39:20.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:39:20.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:39:20.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:39:20.194 [DEBUG] [Thread-140937] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:39:33.774 [DEBUG] [Thread-140939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:45.689 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:45.690 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:48.827 [DEBUG] [Thread-140940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:39:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:39:50.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:39:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:39:52.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 39, 36), 0.85, 94.5, 0.0, 23.64, 13.53, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:39:52.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:39:36
2026-02-12T03:39:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:39:52.566 [DEBUG] [Thread-140941] [transport.py] [_log()] starting thread (client mode): 0xa5758b20
2026-02-12T03:39:52.566 [DEBUG] [Thread-140941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:39:52.586 [DEBUG] [Thread-140941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:39:52.586 [INFO] [Thread-140941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:39:52.589 [DEBUG] [Thread-140941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] client lang: <none>
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] server lang: <none>
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] kex follows: False
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] Compression: none
2026-02-12T03:39:52.590 [DEBUG] [Thread-140941] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:39:52.608 [DEBUG] [Thread-140941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:39:52.609 [DEBUG] [Thread-140941] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:39:52.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:39:52.610 [DEBUG] [Thread-140941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:39:52.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:39:52.612 [DEBUG] [Thread-140941] [transport.py] [_log()] userauth is OK
2026-02-12T03:39:52.612 [DEBUG] [Thread-140941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:39:52.612 [DEBUG] [Thread-140941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:39:52.612 [DEBUG] [Thread-140941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:39:52.612 [DEBUG] [Thread-140941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:39:52.648 [INFO] [Thread-140941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:39:52.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:39:53.298 [DEBUG] [Thread-140941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:39:53.298 [DEBUG] [Thread-140941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:39:53.298 [DEBUG] [Thread-140941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:39:53.339 [DEBUG] [Thread-140941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:39:53.339 [DEBUG] [Thread-140941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:39:53.341 [DEBUG] [Thread-140941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:39:53.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:39:53.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:39:53.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:39:53.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:39:53.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:39:53.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:39:53.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:39:53.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.069228 -999.00  +13.10  16.32     93  +12.10 1 3 1 3 1     0    0 0.73 -12.14 ----- 16.3 16.3 145.4 18.3 15.0 -1.7 14.9 -1.8 14.7 -1.7 15.1 -1.6
2026-02-12T03:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.069228
2026-02-12T03:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:39:53.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:39:53.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:39:53.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:39:53.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:39:36', tmtdew=0.85, humidity=94.5, cloud=0.0, wind=23.64, temperature=13.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:39:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:39:53.360 [DEBUG] [Thread-140941] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:39:53.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:39:53.457 [DEBUG] [Thread-140944] [transport.py] [_log()] starting thread (client mode): 0xa57e0520
2026-02-12T03:39:53.458 [DEBUG] [Thread-140944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:39:53.471 [DEBUG] [Thread-140944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:39:53.471 [INFO] [Thread-140944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] client lang: <none>
2026-02-12T03:39:53.479 [DEBUG] [Thread-140944] [transport.py] [_log()] server lang: <none>
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] kex follows: False
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] Compression: none
2026-02-12T03:39:53.480 [DEBUG] [Thread-140944] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:39:53.539 [DEBUG] [Thread-140944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:39:53.540 [DEBUG] [Thread-140944] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:39:53.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:39:53.541 [DEBUG] [Thread-140944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:39:53.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:39:53.595 [DEBUG] [Thread-140944] [transport.py] [_log()] userauth is OK
2026-02-12T03:39:53.595 [DEBUG] [Thread-140944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:39:53.595 [DEBUG] [Thread-140944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:39:53.595 [DEBUG] [Thread-140944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:39:53.595 [DEBUG] [Thread-140944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:39:53.613 [INFO] [Thread-140944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:39:53.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:39:53.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:39:54.403 [DEBUG] [Thread-140944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:39:54.403 [DEBUG] [Thread-140944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:39:54.453 [DEBUG] [Thread-140944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:39:54.453 [DEBUG] [Thread-140944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:39:54.462 [DEBUG] [Thread-140944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:39:54.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:39:54.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:39:54.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:39:54.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:39:54.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:39:54.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:39:54.498 [DEBUG] [Thread-140944] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:40:03.866 [DEBUG] [Thread-140946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:40:11.712 [DEBUG] [Thread-140947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:40:18.914 [DEBUG] [Thread-140948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:40:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:40:24.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:40:24.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
2026-02-12T03:40:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 40, 12), 0.47, 96.78, 0.0, 20.98, 13.2, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:40:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:40:12
2026-02-12T03:40:26.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:40:26.874 [DEBUG] [Thread-140949] [transport.py] [_log()] starting thread (client mode): 0xa5758cd0
2026-02-12T03:40:26.875 [DEBUG] [Thread-140949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:40:26.893 [DEBUG] [Thread-140949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:40:26.894 [INFO] [Thread-140949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] client lang: <none>
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] server lang: <none>
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] kex follows: False
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] Compression: none
2026-02-12T03:40:26.895 [DEBUG] [Thread-140949] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:40:26.903 [DEBUG] [Thread-140949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:40:26.904 [DEBUG] [Thread-140949] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:40:26.904 [DEBUG] [Thread-140949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:40:26.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:40:26.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:40:26.906 [DEBUG] [Thread-140949] [transport.py] [_log()] userauth is OK
2026-02-12T03:40:26.906 [DEBUG] [Thread-140949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:40:26.906 [DEBUG] [Thread-140949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:40:26.906 [DEBUG] [Thread-140949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:40:26.906 [DEBUG] [Thread-140949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:40:26.929 [INFO] [Thread-140949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:40:26.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:40:27.576 [DEBUG] [Thread-140949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:40:27.576 [DEBUG] [Thread-140949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:40:27.577 [DEBUG] [Thread-140949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:40:27.617 [DEBUG] [Thread-140949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:40:27.618 [DEBUG] [Thread-140949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:40:27.621 [DEBUG] [Thread-140949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:40:27.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:40:27.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:40:27.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:40:27.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:40:27.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:40:27.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:40:27.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:40:27.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:40:27.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:40:27.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.069575 -999.00  +13.10  14.62     93  +12.10 1 3 1 3 1     0    0 0.76 -11.74 ----- 14.6 14.6 153.4 19.5 15.0 -1.9 14.9 -1.6 14.7 -1.8 15.1 -1.7
2026-02-12T03:40:27.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:40:27.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:40:27.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.069575
2026-02-12T03:40:27.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:40:27.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:40:27.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:40:27.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:40:27.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:40:27.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:40:12', tmtdew=0.47, humidity=96.78, cloud=0.0, wind=20.98, temperature=13.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:40:11.280', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:40:27.646 [DEBUG] [Thread-140949] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:40:27.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:40:27.741 [DEBUG] [Thread-140952] [transport.py] [_log()] starting thread (client mode): 0xa5759420
2026-02-12T03:40:27.742 [DEBUG] [Thread-140952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:40:27.759 [DEBUG] [Thread-140952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:40:27.759 [INFO] [Thread-140952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:40:27.767 [DEBUG] [Thread-140952] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] client lang: <none>
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] server lang: <none>
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] kex follows: False
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:40:27.768 [DEBUG] [Thread-140952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:40:27.769 [DEBUG] [Thread-140952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:40:27.769 [DEBUG] [Thread-140952] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:40:27.769 [DEBUG] [Thread-140952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:40:27.769 [DEBUG] [Thread-140952] [transport.py] [_log()] Compression: none
2026-02-12T03:40:27.769 [DEBUG] [Thread-140952] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:40:27.824 [DEBUG] [Thread-140952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:40:27.824 [DEBUG] [Thread-140952] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:40:27.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:40:27.826 [DEBUG] [Thread-140952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:40:27.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:40:27.883 [DEBUG] [Thread-140952] [transport.py] [_log()] userauth is OK
2026-02-12T03:40:27.884 [DEBUG] [Thread-140952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:40:27.884 [DEBUG] [Thread-140952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:40:27.884 [DEBUG] [Thread-140952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:40:27.884 [DEBUG] [Thread-140952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:40:27.906 [INFO] [Thread-140952] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:40:27.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:40:27.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:40:28.702 [DEBUG] [Thread-140952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:40:28.702 [DEBUG] [Thread-140952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:40:28.750 [DEBUG] [Thread-140952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:40:28.751 [DEBUG] [Thread-140952] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:40:28.760 [DEBUG] [Thread-140952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:40:28.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:40:28.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:40:28.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:40:28.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:40:28.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:40:28.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:40:28.797 [DEBUG] [Thread-140952] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:40:33.950 [DEBUG] [Thread-140954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:40:45.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:40:45.894 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:40:48.999 [DEBUG] [Thread-140955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:40:58.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:40:58.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:40:58.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:41:01.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 40, 48), 0.47, 96.8, 0.0, 21.76, 13.15, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:41:01.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:40:48
2026-02-12T03:41:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:41:01.588 [DEBUG] [Thread-140956] [transport.py] [_log()] starting thread (client mode): 0xa5758880
2026-02-12T03:41:01.588 [DEBUG] [Thread-140956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:41:01.608 [DEBUG] [Thread-140956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:41:01.608 [INFO] [Thread-140956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] client lang: <none>
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] server lang: <none>
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] kex follows: False
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:41:01.611 [DEBUG] [Thread-140956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:41:01.612 [DEBUG] [Thread-140956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:41:01.612 [DEBUG] [Thread-140956] [transport.py] [_log()] Compression: none
2026-02-12T03:41:01.612 [DEBUG] [Thread-140956] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:41:01.629 [DEBUG] [Thread-140956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:41:01.630 [DEBUG] [Thread-140956] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:41:01.630 [DEBUG] [Thread-140956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:41:01.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:41:01.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:41:01.632 [DEBUG] [Thread-140956] [transport.py] [_log()] userauth is OK
2026-02-12T03:41:01.632 [DEBUG] [Thread-140956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:41:01.633 [DEBUG] [Thread-140956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:41:01.633 [DEBUG] [Thread-140956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:41:01.633 [DEBUG] [Thread-140956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:41:01.653 [INFO] [Thread-140956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:41:01.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:41:02.306 [DEBUG] [Thread-140956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:41:02.306 [DEBUG] [Thread-140956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:41:02.306 [DEBUG] [Thread-140956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:41:02.355 [DEBUG] [Thread-140956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:41:02.356 [DEBUG] [Thread-140956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:41:02.358 [DEBUG] [Thread-140956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:41:02.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:41:02.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:41:02.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:41:02.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:41:02.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:41:02.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:41:02.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:41:02.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:41:02.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:41:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.069922 -999.00  +13.20  25.25     93  +12.10 1 3 1 3 1     0    0 0.72 -12.81 ----- 25.2 25.2 143.4 26.9 15.1 -1.6 14.9 -1.6 14.8 -1.6 15.1 -1.5
2026-02-12T03:41:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:41:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:41:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.069922
2026-02-12T03:41:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:41:02.383 [DEBUG] [Thread-140956] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:41:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:41:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:41:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:41:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:41:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:40:48', tmtdew=0.47, humidity=96.8, cloud=0.0, wind=21.76, temperature=13.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:40:41.261', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:41:02.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:41:02.497 [DEBUG] [Thread-140959] [transport.py] [_log()] starting thread (client mode): 0xa2d9d450
2026-02-12T03:41:02.497 [DEBUG] [Thread-140959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:41:02.514 [DEBUG] [Thread-140959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:41:02.514 [INFO] [Thread-140959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:41:02.523 [DEBUG] [Thread-140959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] client lang: <none>
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] server lang: <none>
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] kex follows: False
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:41:02.524 [DEBUG] [Thread-140959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:41:02.525 [DEBUG] [Thread-140959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:41:02.525 [DEBUG] [Thread-140959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:41:02.525 [DEBUG] [Thread-140959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:41:02.525 [DEBUG] [Thread-140959] [transport.py] [_log()] Compression: none
2026-02-12T03:41:02.525 [DEBUG] [Thread-140959] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:41:02.583 [DEBUG] [Thread-140959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:41:02.583 [DEBUG] [Thread-140959] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:41:02.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:41:02.585 [DEBUG] [Thread-140959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:41:02.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:41:02.640 [DEBUG] [Thread-140959] [transport.py] [_log()] userauth is OK
2026-02-12T03:41:02.640 [DEBUG] [Thread-140959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:41:02.640 [DEBUG] [Thread-140959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:41:02.640 [DEBUG] [Thread-140959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:41:02.640 [DEBUG] [Thread-140959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:41:02.663 [INFO] [Thread-140959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:41:02.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:41:02.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:41:03.483 [DEBUG] [Thread-140959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:41:03.484 [DEBUG] [Thread-140959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:41:03.531 [DEBUG] [Thread-140959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:41:03.532 [DEBUG] [Thread-140959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:41:03.541 [DEBUG] [Thread-140959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:41:03.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:41:03.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:41:03.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
2026-02-12T03:41:03.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:41:03.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:41:03.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:41:03.579 [DEBUG] [Thread-140959] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:41:04.037 [DEBUG] [Thread-140961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:41:11.779 [DEBUG] [Thread-140962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:41:19.099 [DEBUG] [Thread-140963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:41:33.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:41:33.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:41: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
2026-02-12T03:41:34.132 [DEBUG] [Thread-140964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:41:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 41, 23), 0.45, 96.9, 0.0, 20.73, 13.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:41:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:41:23
2026-02-12T03:41:35.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:41:36.160 [DEBUG] [Thread-140965] [transport.py] [_log()] starting thread (client mode): 0xa2d9de40
2026-02-12T03:41:36.160 [DEBUG] [Thread-140965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:41:36.180 [DEBUG] [Thread-140965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:41:36.180 [INFO] [Thread-140965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:41:36.183 [DEBUG] [Thread-140965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:41:36.183 [DEBUG] [Thread-140965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:41:36.183 [DEBUG] [Thread-140965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:41:36.183 [DEBUG] [Thread-140965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] client lang: <none>
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] server lang: <none>
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] kex follows: False
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] Compression: none
2026-02-12T03:41:36.184 [DEBUG] [Thread-140965] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:41:36.202 [DEBUG] [Thread-140965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:41:36.203 [DEBUG] [Thread-140965] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:41:36.204 [DEBUG] [Thread-140965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:41:36.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:41:36.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:41:36.206 [DEBUG] [Thread-140965] [transport.py] [_log()] userauth is OK
2026-02-12T03:41:36.206 [DEBUG] [Thread-140965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:41:36.206 [DEBUG] [Thread-140965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:41:36.206 [DEBUG] [Thread-140965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:41:36.206 [DEBUG] [Thread-140965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:41:36.230 [INFO] [Thread-140965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:41:36.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:41:36.855 [DEBUG] [Thread-140965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:41:36.855 [DEBUG] [Thread-140965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:41:36.855 [DEBUG] [Thread-140965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:41:36.896 [DEBUG] [Thread-140965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:41:36.896 [DEBUG] [Thread-140965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:41:36.899 [DEBUG] [Thread-140965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:41:36.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:41:36.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:41:36.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:41:36.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:41:36.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:41:36.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:41:36.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:41:36.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:41:36.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:41:36.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.070269 -999.00  +13.30  14.52     94  +12.40 1 3 1 3 1     0    0 0.67 -13.09 ----- 14.5 14.5 158.6 20.5 15.0 -1.8 14.9 -1.5 14.7 -1.6 15.1 -1.5
2026-02-12T03:41:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:41:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:41:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.070269
2026-02-12T03:41:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:41:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:41:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:41:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:41:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:41:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:41:23', tmtdew=0.45, humidity=96.9, cloud=0.0, wind=20.73, temperature=13.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:41:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:41:36.926 [DEBUG] [Thread-140965] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:41:37.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:41:37.024 [DEBUG] [Thread-140968] [transport.py] [_log()] starting thread (client mode): 0xa575b340
2026-02-12T03:41:37.025 [DEBUG] [Thread-140968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:41:37.039 [DEBUG] [Thread-140968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:41:37.039 [INFO] [Thread-140968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:41:37.047 [DEBUG] [Thread-140968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] client lang: <none>
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] server lang: <none>
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] kex follows: False
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] Compression: none
2026-02-12T03:41:37.048 [DEBUG] [Thread-140968] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:41:37.109 [DEBUG] [Thread-140968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:41:37.110 [DEBUG] [Thread-140968] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:41:37.111 [DEBUG] [Thread-140968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:41:37.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:41:37.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:41:37.168 [DEBUG] [Thread-140968] [transport.py] [_log()] userauth is OK
2026-02-12T03:41:37.168 [DEBUG] [Thread-140968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:41:37.168 [DEBUG] [Thread-140968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:41:37.169 [DEBUG] [Thread-140968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:41:37.169 [DEBUG] [Thread-140968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:41:37.186 [INFO] [Thread-140968] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:41:37.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:41:37.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:41:37.988 [DEBUG] [Thread-140968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:41:37.988 [DEBUG] [Thread-140968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:41:38.037 [DEBUG] [Thread-140968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:41:38.037 [DEBUG] [Thread-140968] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:41:38.046 [DEBUG] [Thread-140968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:41:38.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:41:38.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:41:38.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:41:38.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:41:38.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:41:38.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:41:38.083 [DEBUG] [Thread-140968] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:41:46.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:41:46.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:41:49.167 [DEBUG] [Thread-140970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:42:04.219 [DEBUG] [Thread-140971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:42:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:42:08.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:42:08.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:42:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 41, 59), 0.46, 96.88, 0.0, 22.09, 13.2, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:42:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:41:59
2026-02-12T03:42:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:42:10.302 [DEBUG] [Thread-140972] [transport.py] [_log()] starting thread (client mode): 0xa57e01c0
2026-02-12T03:42:10.302 [DEBUG] [Thread-140972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:42:10.317 [DEBUG] [Thread-140972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:42:10.317 [INFO] [Thread-140972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] client lang: <none>
2026-02-12T03:42:10.320 [DEBUG] [Thread-140972] [transport.py] [_log()] server lang: <none>
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] kex follows: False
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] Compression: none
2026-02-12T03:42:10.321 [DEBUG] [Thread-140972] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:42:10.340 [DEBUG] [Thread-140972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:42:10.340 [DEBUG] [Thread-140972] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:42:10.341 [DEBUG] [Thread-140972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:42:10.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:42:10.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:42:10.343 [DEBUG] [Thread-140972] [transport.py] [_log()] userauth is OK
2026-02-12T03:42:10.343 [DEBUG] [Thread-140972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:42:10.344 [DEBUG] [Thread-140972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:42:10.344 [DEBUG] [Thread-140972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:42:10.344 [DEBUG] [Thread-140972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:42:10.380 [INFO] [Thread-140972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:42:10.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:42:11.030 [DEBUG] [Thread-140972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:42:11.030 [DEBUG] [Thread-140972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:42:11.030 [DEBUG] [Thread-140972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:42:11.071 [DEBUG] [Thread-140972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:42:11.072 [DEBUG] [Thread-140972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:42:11.075 [DEBUG] [Thread-140972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:42:11.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:42:11.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:42:11.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:42:11.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:42:11.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:42:11.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:42:11.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:42:11.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:42:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:42:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.070616 -999.00  +13.10  18.42     93  +12.20 1 3 1 3 1     0    0 0.72 -12.77 ----- 18.4 18.4 155.6 20.8 15.1 -1.9 14.9 -1.9 14.8 -1.8 15.1 -1.8
2026-02-12T03:42:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:42:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:42:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.070616
2026-02-12T03:42:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:42:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:42:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:42:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:42:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:42:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:41:59', tmtdew=0.46, humidity=96.88, cloud=0.0, wind=22.09, temperature=13.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:41:41.222', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:42:11.101 [DEBUG] [Thread-140972] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:42:11.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:42:11.209 [DEBUG] [Thread-140975] [transport.py] [_log()] starting thread (client mode): 0xa2d7bc40
2026-02-12T03:42:11.209 [DEBUG] [Thread-140975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:42:11.224 [DEBUG] [Thread-140975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:42:11.224 [INFO] [Thread-140975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:42:11.231 [DEBUG] [Thread-140975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:42:11.232 [DEBUG] [Thread-140975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:42:11.232 [DEBUG] [Thread-140975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:42:11.232 [DEBUG] [Thread-140975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:11.232 [DEBUG] [Thread-140975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:11.232 [DEBUG] [Thread-140975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:11.232 [DEBUG] [Thread-140975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:11.232 [DEBUG] [Thread-140975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] client lang: <none>
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] server lang: <none>
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] kex follows: False
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:42:11.233 [DEBUG] [Thread-140975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:42:11.234 [DEBUG] [Thread-140975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:42:11.234 [DEBUG] [Thread-140975] [transport.py] [_log()] Compression: none
2026-02-12T03:42:11.234 [DEBUG] [Thread-140975] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:42:11.296 [DEBUG] [Thread-140975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:42:11.297 [DEBUG] [Thread-140975] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:42:11.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:42:11.298 [DEBUG] [Thread-140975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:42:11.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:42:11.352 [DEBUG] [Thread-140975] [transport.py] [_log()] userauth is OK
2026-02-12T03:42:11.353 [DEBUG] [Thread-140975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:42:11.353 [DEBUG] [Thread-140975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:42:11.353 [DEBUG] [Thread-140975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:42:11.353 [DEBUG] [Thread-140975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:42:11.376 [INFO] [Thread-140975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:42:11.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:42:11.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:42:11.853 [DEBUG] [Thread-140977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:42:12.191 [DEBUG] [Thread-140975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:42:12.191 [DEBUG] [Thread-140975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:42:12.240 [DEBUG] [Thread-140975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:42:12.240 [DEBUG] [Thread-140975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:42:12.249 [DEBUG] [Thread-140975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:42:12.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:42:12.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:42:12.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:42:12.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:42:12.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:42:12.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:42:12.286 [DEBUG] [Thread-140975] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:42:19.256 [DEBUG] [Thread-140978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:42:34.305 [DEBUG] [Thread-140979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:42:42.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:42:42.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:42:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:42:44.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 42, 34), 0.82, 94.73, 0.0, 19.65, 13.7, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:42:44.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:42:34
2026-02-12T03:42:44.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:42:44.743 [DEBUG] [Thread-140980] [transport.py] [_log()] starting thread (client mode): 0xa2d03520
2026-02-12T03:42:44.743 [DEBUG] [Thread-140980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:42:44.764 [DEBUG] [Thread-140980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:42:44.765 [INFO] [Thread-140980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] client lang: <none>
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] server lang: <none>
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] kex follows: False
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] Compression: none
2026-02-12T03:42:44.768 [DEBUG] [Thread-140980] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:42:44.786 [DEBUG] [Thread-140980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:42:44.786 [DEBUG] [Thread-140980] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:42:44.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:42:44.787 [DEBUG] [Thread-140980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:42:44.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:42:44.790 [DEBUG] [Thread-140980] [transport.py] [_log()] userauth is OK
2026-02-12T03:42:44.790 [DEBUG] [Thread-140980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:42:44.790 [DEBUG] [Thread-140980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:42:44.790 [DEBUG] [Thread-140980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:42:44.790 [DEBUG] [Thread-140980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:42:44.815 [INFO] [Thread-140980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:42:44.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:42:45.431 [DEBUG] [Thread-140980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:42:45.431 [DEBUG] [Thread-140980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:42:45.431 [DEBUG] [Thread-140980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:42:45.473 [DEBUG] [Thread-140980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:42:45.473 [DEBUG] [Thread-140980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:42:45.476 [DEBUG] [Thread-140980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:42:45.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:42:45.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:42:45.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:42:45.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:42:45.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:42:45.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:42:45.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:42:45.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:42:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:42:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.070963 -999.00  +13.10  16.01     93  +12.10 1 3 1 3 1     0    0 0.72 -11.81 ----- 16.0 16.0 140.0 20.8 15.0 -1.8 14.9 -1.7 14.8 -1.8 15.1 -1.7
2026-02-12T03:42:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:42:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:42:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.070963
2026-02-12T03:42:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:42:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:42:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:42:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:42:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:42:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:42:34', tmtdew=0.82, humidity=94.73, cloud=0.0, wind=19.65, temperature=13.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:42:11.203', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:42:45.503 [DEBUG] [Thread-140980] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:42:45.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:42:45.606 [DEBUG] [Thread-140983] [transport.py] [_log()] starting thread (client mode): 0xa57426e0
2026-02-12T03:42:45.606 [DEBUG] [Thread-140983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:42:45.620 [DEBUG] [Thread-140983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:42:45.620 [INFO] [Thread-140983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] client lang: <none>
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] server lang: <none>
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] kex follows: False
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:42:45.628 [DEBUG] [Thread-140983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:42:45.629 [DEBUG] [Thread-140983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:42:45.629 [DEBUG] [Thread-140983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:42:45.629 [DEBUG] [Thread-140983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:42:45.629 [DEBUG] [Thread-140983] [transport.py] [_log()] Compression: none
2026-02-12T03:42:45.629 [DEBUG] [Thread-140983] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:42:45.688 [DEBUG] [Thread-140983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:42:45.688 [DEBUG] [Thread-140983] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:42:45.689 [DEBUG] [Thread-140983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:42:45.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:42:45.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:42:45.744 [DEBUG] [Thread-140983] [transport.py] [_log()] userauth is OK
2026-02-12T03:42:45.744 [DEBUG] [Thread-140983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:42:45.744 [DEBUG] [Thread-140983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:42:45.745 [DEBUG] [Thread-140983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:42:45.745 [DEBUG] [Thread-140983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:42:45.763 [INFO] [Thread-140983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:42:45.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:42:45.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:42:46.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:42:46.299 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:42:46.563 [DEBUG] [Thread-140983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:42:46.563 [DEBUG] [Thread-140983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:42:46.610 [DEBUG] [Thread-140983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:42:46.611 [DEBUG] [Thread-140983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:42:46.620 [DEBUG] [Thread-140983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:42:46.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:42:46.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')
2026-02-12T03:42:46.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:42:46.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:42:46.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:42:46.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:42:46.656 [DEBUG] [Thread-140983] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:42:49.340 [DEBUG] [Thread-140985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:04.390 [DEBUG] [Thread-140986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:11.913 [DEBUG] [Thread-140987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:16.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:43:16.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:43: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
2026-02-12T03:43:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 43, 10), 0.45, 96.92, 0.0, 21.91, 13.26, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:43:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:43:10
2026-02-12T03:43:19.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:43:19.425 [DEBUG] [Thread-140988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:19.464 [DEBUG] [Thread-140989] [transport.py] [_log()] starting thread (client mode): 0xa2d9cb80
2026-02-12T03:43:19.465 [DEBUG] [Thread-140989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:43:19.484 [DEBUG] [Thread-140989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:43:19.484 [INFO] [Thread-140989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] client lang: <none>
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] server lang: <none>
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] kex follows: False
2026-02-12T03:43:19.488 [DEBUG] [Thread-140989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:43:19.489 [DEBUG] [Thread-140989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:43:19.489 [DEBUG] [Thread-140989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:43:19.489 [DEBUG] [Thread-140989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:43:19.489 [DEBUG] [Thread-140989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:43:19.489 [DEBUG] [Thread-140989] [transport.py] [_log()] Compression: none
2026-02-12T03:43:19.489 [DEBUG] [Thread-140989] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:43:19.504 [DEBUG] [Thread-140989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:43:19.505 [DEBUG] [Thread-140989] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:43:19.505 [DEBUG] [Thread-140989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:43:19.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:43:19.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:43:19.507 [DEBUG] [Thread-140989] [transport.py] [_log()] userauth is OK
2026-02-12T03:43:19.507 [DEBUG] [Thread-140989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:43:19.507 [DEBUG] [Thread-140989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:43:19.508 [DEBUG] [Thread-140989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:43:19.508 [DEBUG] [Thread-140989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:43:19.525 [INFO] [Thread-140989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:43:19.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:43:20.156 [DEBUG] [Thread-140989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:43:20.156 [DEBUG] [Thread-140989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:43:20.156 [DEBUG] [Thread-140989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:43:20.197 [DEBUG] [Thread-140989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:43:20.197 [DEBUG] [Thread-140989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:43:20.200 [DEBUG] [Thread-140989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:43:20.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:43:20.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:43:20.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:43:20.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:43:20.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:43:20.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:43:20.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:43:20.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:43:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:43:20.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.071658 -999.00  +13.10  19.02     93  +12.10 1 3 1 3 1     0    0 0.73 -10.53 ----- 19.0 19.0 141.0 23.3 15.1 -1.8 15.0 -1.7 14.8 -1.7 15.1 -1.6
2026-02-12T03:43:20.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:43:20.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:43:20.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.071658
2026-02-12T03:43:20.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:43:20.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:43:20.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:43:20.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:43:20.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:43:20.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:43:10', tmtdew=0.45, humidity=96.92, cloud=0.0, wind=21.91, temperature=13.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:43:11.251', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:43:20.223 [DEBUG] [Thread-140989] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:43:20.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:43:20.320 [DEBUG] [Thread-140992] [transport.py] [_log()] starting thread (client mode): 0xa2d78b50
2026-02-12T03:43:20.320 [DEBUG] [Thread-140992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:43:20.334 [DEBUG] [Thread-140992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:43:20.334 [INFO] [Thread-140992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] client lang: <none>
2026-02-12T03:43:20.342 [DEBUG] [Thread-140992] [transport.py] [_log()] server lang: <none>
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] kex follows: False
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] Compression: none
2026-02-12T03:43:20.343 [DEBUG] [Thread-140992] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:43:20.399 [DEBUG] [Thread-140992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:43:20.399 [DEBUG] [Thread-140992] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:43:20.400 [DEBUG] [Thread-140992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:43:20.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:43:20.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:43:20.456 [DEBUG] [Thread-140992] [transport.py] [_log()] userauth is OK
2026-02-12T03:43:20.456 [DEBUG] [Thread-140992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:43:20.456 [DEBUG] [Thread-140992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:43:20.456 [DEBUG] [Thread-140992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:43:20.456 [DEBUG] [Thread-140992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:43:20.474 [INFO] [Thread-140992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:43:20.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:43:20.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:43:21.274 [DEBUG] [Thread-140992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:43:21.274 [DEBUG] [Thread-140992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:43:21.322 [DEBUG] [Thread-140992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:43:21.322 [DEBUG] [Thread-140992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:43:21.330 [DEBUG] [Thread-140992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:43:21.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:43:21.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:43:21.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:43:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:43:21.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:43:21.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:43:21.365 [DEBUG] [Thread-140992] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:43:34.461 [DEBUG] [Thread-140994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:46.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:46.505 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:49.524 [DEBUG] [Thread-140995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:43:51.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:43:51.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:43:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:43:53.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 43, 45), 0.46, 96.87, 0.0, 20.06, 13.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:43:53.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:43:45
2026-02-12T03:43:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:43:53.769 [DEBUG] [Thread-140996] [transport.py] [_log()] starting thread (client mode): 0xa5759cf0
2026-02-12T03:43:53.769 [DEBUG] [Thread-140996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:43:53.790 [DEBUG] [Thread-140996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:43:53.790 [INFO] [Thread-140996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] client lang: <none>
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] server lang: <none>
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] kex follows: False
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:43:53.793 [DEBUG] [Thread-140996] [transport.py] [_log()] Compression: none
2026-02-12T03:43:53.794 [DEBUG] [Thread-140996] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:43:53.811 [DEBUG] [Thread-140996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:43:53.812 [DEBUG] [Thread-140996] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:43:53.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:43:53.813 [DEBUG] [Thread-140996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:43:53.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:43:53.815 [DEBUG] [Thread-140996] [transport.py] [_log()] userauth is OK
2026-02-12T03:43:53.815 [DEBUG] [Thread-140996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:43:53.815 [DEBUG] [Thread-140996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:43:53.816 [DEBUG] [Thread-140996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:43:53.816 [DEBUG] [Thread-140996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:43:53.841 [INFO] [Thread-140996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:43:53.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:43:54.490 [DEBUG] [Thread-140996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:43:54.491 [DEBUG] [Thread-140996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:43:54.491 [DEBUG] [Thread-140996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:43:54.531 [DEBUG] [Thread-140996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:43:54.532 [DEBUG] [Thread-140996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:43:54.535 [DEBUG] [Thread-140996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:43:54.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:43:54.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:43:54.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:43:54.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:43:54.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:43:54.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:43:54.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:43:54.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:43:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:43:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.072005 -999.00  +13.20  15.51     93  +12.20 1 3 1 3 1     0    0 0.76 -11.03 ----- 15.5 15.5 152.0 25.9 15.1 -2.1 14.9 -1.9 14.8 -1.7 15.1 -2.0
2026-02-12T03:43:54.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:43:54.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:43:54.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.072005
2026-02-12T03:43:54.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:43:54.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:43:54.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:43:54.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:43:54.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:43:54.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:43:45', tmtdew=0.46, humidity=96.87, cloud=0.0, wind=20.06, temperature=13.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:43:41.232', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:43:54.573 [DEBUG] [Thread-140996] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:43:54.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:43:54.671 [DEBUG] [Thread-140999] [transport.py] [_log()] starting thread (client mode): 0xa2d7a6b0
2026-02-12T03:43:54.671 [DEBUG] [Thread-140999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:43:54.687 [DEBUG] [Thread-140999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:43:54.687 [INFO] [Thread-140999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:43:54.695 [DEBUG] [Thread-140999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:43:54.695 [DEBUG] [Thread-140999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:43:54.695 [DEBUG] [Thread-140999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:43:54.695 [DEBUG] [Thread-140999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] client lang: <none>
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] server lang: <none>
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] kex follows: False
2026-02-12T03:43:54.696 [DEBUG] [Thread-140999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:43:54.697 [DEBUG] [Thread-140999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:43:54.697 [DEBUG] [Thread-140999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:43:54.697 [DEBUG] [Thread-140999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:43:54.697 [DEBUG] [Thread-140999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:43:54.697 [DEBUG] [Thread-140999] [transport.py] [_log()] Compression: none
2026-02-12T03:43:54.697 [DEBUG] [Thread-140999] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:43:54.752 [DEBUG] [Thread-140999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:43:54.752 [DEBUG] [Thread-140999] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:43:54.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:43:54.754 [DEBUG] [Thread-140999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:43:54.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:43:54.808 [DEBUG] [Thread-140999] [transport.py] [_log()] userauth is OK
2026-02-12T03:43:54.808 [DEBUG] [Thread-140999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:43:54.808 [DEBUG] [Thread-140999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:43:54.809 [DEBUG] [Thread-140999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:43:54.809 [DEBUG] [Thread-140999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:43:54.828 [INFO] [Thread-140999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:43:54.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:43:54.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:43:55.657 [DEBUG] [Thread-140999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:43:55.657 [DEBUG] [Thread-140999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:43:55.705 [DEBUG] [Thread-140999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:43:55.705 [DEBUG] [Thread-140999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:43:55.715 [DEBUG] [Thread-140999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:43:55.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:43:55.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:43:55.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:43:55.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:43:55.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:43:55.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:43:55.751 [DEBUG] [Thread-140999] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:44:04.561 [DEBUG] [Thread-141001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:44:11.986 [DEBUG] [Thread-141002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:44:19.613 [DEBUG] [Thread-141003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:44:25.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:44:25.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:44:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:44:27.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 43, 45), 0.46, 96.87, 0.0, 20.06, 13.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:44:27.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:43:45
2026-02-12T03:44:28.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:44:28.438 [DEBUG] [Thread-141004] [transport.py] [_log()] starting thread (client mode): 0xa2d01000
2026-02-12T03:44:28.439 [DEBUG] [Thread-141004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:44:28.458 [DEBUG] [Thread-141004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:44:28.458 [INFO] [Thread-141004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:44:28.461 [DEBUG] [Thread-141004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:44:28.461 [DEBUG] [Thread-141004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:44:28.461 [DEBUG] [Thread-141004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] client lang: <none>
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] server lang: <none>
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] kex follows: False
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:44:28.462 [DEBUG] [Thread-141004] [transport.py] [_log()] Compression: none
2026-02-12T03:44:28.463 [DEBUG] [Thread-141004] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:44:28.480 [DEBUG] [Thread-141004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:44:28.480 [DEBUG] [Thread-141004] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:44:28.481 [DEBUG] [Thread-141004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:44:28.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:44:28.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:44:28.483 [DEBUG] [Thread-141004] [transport.py] [_log()] userauth is OK
2026-02-12T03:44:28.483 [DEBUG] [Thread-141004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:44:28.483 [DEBUG] [Thread-141004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:44:28.483 [DEBUG] [Thread-141004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:44:28.483 [DEBUG] [Thread-141004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:44:28.508 [INFO] [Thread-141004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:44:28.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:44:29.148 [DEBUG] [Thread-141004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:44:29.148 [DEBUG] [Thread-141004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:44:29.149 [DEBUG] [Thread-141004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:44:29.189 [DEBUG] [Thread-141004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:44:29.190 [DEBUG] [Thread-141004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:44:29.193 [DEBUG] [Thread-141004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:44:29.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:44:29.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:44:29.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:44:29.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:44:29.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:44:29.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:44:29.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:44:29.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:44:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:44:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.072352 -999.00  +13.20  15.90     93  +12.20 1 3 1 3 1     0    0 0.71 -12.23 ----- 15.9 15.9 148.1 20.6 15.1 -2.0 15.0 -1.8 14.8 -1.8 15.1 -1.7
2026-02-12T03:44:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:44:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:44:29.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.072352
2026-02-12T03:44:29.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:44:29.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:44:29.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:44:29.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:44:29.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:44:29.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:43:45', tmtdew=0.46, humidity=96.87, cloud=0.0, wind=20.06, temperature=13.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:44:11.213', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:44:29.221 [DEBUG] [Thread-141004] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:44:29.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:44:29.318 [DEBUG] [Thread-141007] [transport.py] [_log()] starting thread (client mode): 0xa5759060
2026-02-12T03:44:29.318 [DEBUG] [Thread-141007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:44:29.333 [DEBUG] [Thread-141007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:44:29.333 [INFO] [Thread-141007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] client lang: <none>
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] server lang: <none>
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] kex follows: False
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:44:29.341 [DEBUG] [Thread-141007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:44:29.342 [DEBUG] [Thread-141007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:44:29.342 [DEBUG] [Thread-141007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:44:29.342 [DEBUG] [Thread-141007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:44:29.342 [DEBUG] [Thread-141007] [transport.py] [_log()] Compression: none
2026-02-12T03:44:29.342 [DEBUG] [Thread-141007] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:44:29.404 [DEBUG] [Thread-141007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:44:29.404 [DEBUG] [Thread-141007] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:44:29.405 [DEBUG] [Thread-141007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:44:29.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:44:29.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:44:29.460 [DEBUG] [Thread-141007] [transport.py] [_log()] userauth is OK
2026-02-12T03:44:29.460 [DEBUG] [Thread-141007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:44:29.460 [DEBUG] [Thread-141007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:44:29.460 [DEBUG] [Thread-141007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:44:29.461 [DEBUG] [Thread-141007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:44:29.479 [INFO] [Thread-141007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:44:29.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:44:29.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:44:30.354 [DEBUG] [Thread-141007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:44:30.354 [DEBUG] [Thread-141007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:44:30.406 [DEBUG] [Thread-141007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:44:30.406 [DEBUG] [Thread-141007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:44:30.416 [DEBUG] [Thread-141007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:44:30.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:44:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:44:30.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:44:30.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:44:30.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:44:30.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:44:30.452 [DEBUG] [Thread-141007] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:44:34.649 [DEBUG] [Thread-141009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:44:46.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:44:46.709 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:44:49.700 [DEBUG] [Thread-141010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:45:00.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:45:00.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:45:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:45:02.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 44, 20), 0.45, 96.92, 0.0, 22.27, 13.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:45:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:44:20
2026-02-12T03:45:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:45:03.098 [DEBUG] [Thread-141011] [transport.py] [_log()] starting thread (client mode): 0xa5741840
2026-02-12T03:45:03.098 [DEBUG] [Thread-141011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:45:03.119 [DEBUG] [Thread-141011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:45:03.119 [INFO] [Thread-141011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:45:03.122 [DEBUG] [Thread-141011] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:45:03.122 [DEBUG] [Thread-141011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:45:03.122 [DEBUG] [Thread-141011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:45:03.122 [DEBUG] [Thread-141011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] client lang: <none>
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] server lang: <none>
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] kex follows: False
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:45:03.123 [DEBUG] [Thread-141011] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:45:03.124 [DEBUG] [Thread-141011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:45:03.124 [DEBUG] [Thread-141011] [transport.py] [_log()] Compression: none
2026-02-12T03:45:03.124 [DEBUG] [Thread-141011] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:45:03.142 [DEBUG] [Thread-141011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:45:03.142 [DEBUG] [Thread-141011] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:45:03.143 [DEBUG] [Thread-141011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:45:03.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:45:03.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:45:03.144 [DEBUG] [Thread-141011] [transport.py] [_log()] userauth is OK
2026-02-12T03:45:03.145 [DEBUG] [Thread-141011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:45:03.145 [DEBUG] [Thread-141011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:45:03.145 [DEBUG] [Thread-141011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:45:03.145 [DEBUG] [Thread-141011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:45:03.168 [INFO] [Thread-141011] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:45:03.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:45:04.635 [DEBUG] [Thread-141011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:45:04.636 [DEBUG] [Thread-141011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:45:04.636 [DEBUG] [Thread-141011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:45:04.676 [DEBUG] [Thread-141011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:45:04.676 [DEBUG] [Thread-141011] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:45:04.681 [DEBUG] [Thread-141011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:45:04.737 [DEBUG] [Thread-141013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:45:04.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:45:04.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:45:04.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:45:04.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:45:04.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:45:04.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:45:04.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:45:04.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:45:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:45:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.072700 -999.00  +13.20  15.37     93  +12.20 1 3 1 3 1     0    0 0.73 -11.32 ----- 15.4 15.4 150.8 21.7 15.1 -1.8 15.0 -1.8 14.8 -2.0 15.2 -1.8
2026-02-12T03:45:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:45:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:45:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.072700
2026-02-12T03:45:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:45:04.766 [DEBUG] [Thread-141011] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:45:04.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:45:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:45:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:45:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:45:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:44:20', tmtdew=0.45, humidity=96.92, cloud=0.0, wind=22.27, temperature=13.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:44:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:45:04.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:45:04.863 [DEBUG] [Thread-141015] [transport.py] [_log()] starting thread (client mode): 0xa5758bb0
2026-02-12T03:45:04.863 [DEBUG] [Thread-141015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:45:04.878 [DEBUG] [Thread-141015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:45:04.878 [INFO] [Thread-141015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:45:04.885 [DEBUG] [Thread-141015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] client lang: <none>
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] server lang: <none>
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] kex follows: False
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:45:04.886 [DEBUG] [Thread-141015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:45:04.887 [DEBUG] [Thread-141015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:45:04.887 [DEBUG] [Thread-141015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:45:04.887 [DEBUG] [Thread-141015] [transport.py] [_log()] Compression: none
2026-02-12T03:45:04.887 [DEBUG] [Thread-141015] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:45:04.944 [DEBUG] [Thread-141015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:45:04.945 [DEBUG] [Thread-141015] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:45:04.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:45:04.946 [DEBUG] [Thread-141015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:45:04.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:45:05.000 [DEBUG] [Thread-141015] [transport.py] [_log()] userauth is OK
2026-02-12T03:45:05.000 [DEBUG] [Thread-141015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:45:05.000 [DEBUG] [Thread-141015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:45:05.000 [DEBUG] [Thread-141015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:45:05.000 [DEBUG] [Thread-141015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:45:05.018 [INFO] [Thread-141015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:45:05.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:45:05.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:45:05.897 [DEBUG] [Thread-141015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:45:05.897 [DEBUG] [Thread-141015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:45:05.944 [DEBUG] [Thread-141015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:45:05.944 [DEBUG] [Thread-141015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:45:05.953 [DEBUG] [Thread-141015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:45:05.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:45:05.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')
2026-02-12T03:45:05.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:45:05.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:45:05.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:45:05.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:45:05.988 [DEBUG] [Thread-141015] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:45:12.058 [DEBUG] [Thread-141017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:45:19.774 [DEBUG] [Thread-141018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:45:34.827 [DEBUG] [Thread-141019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:45:36.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:45:36.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:45:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:45:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 44, 56), 0.45, 96.93, 0.0, 24.19, 13.21, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:45:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:44:56
2026-02-12T03:45:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:45:38.431 [DEBUG] [Thread-141020] [transport.py] [_log()] starting thread (client mode): 0xa81d71c0
2026-02-12T03:45:38.431 [DEBUG] [Thread-141020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:45:38.450 [DEBUG] [Thread-141020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:45:38.451 [INFO] [Thread-141020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] client lang: <none>
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] server lang: <none>
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] kex follows: False
2026-02-12T03:45:38.454 [DEBUG] [Thread-141020] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:45:38.455 [DEBUG] [Thread-141020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:45:38.455 [DEBUG] [Thread-141020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:45:38.455 [DEBUG] [Thread-141020] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:45:38.455 [DEBUG] [Thread-141020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:45:38.455 [DEBUG] [Thread-141020] [transport.py] [_log()] Compression: none
2026-02-12T03:45:38.455 [DEBUG] [Thread-141020] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:45:38.474 [DEBUG] [Thread-141020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:45:38.474 [DEBUG] [Thread-141020] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:45:38.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:45:38.475 [DEBUG] [Thread-141020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:45:38.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:45:38.477 [DEBUG] [Thread-141020] [transport.py] [_log()] userauth is OK
2026-02-12T03:45:38.477 [DEBUG] [Thread-141020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:45:38.478 [DEBUG] [Thread-141020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:45:38.478 [DEBUG] [Thread-141020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:45:38.478 [DEBUG] [Thread-141020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:45:38.512 [INFO] [Thread-141020] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:45:38.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:45:39.184 [DEBUG] [Thread-141020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:45:39.185 [DEBUG] [Thread-141020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:45:39.185 [DEBUG] [Thread-141020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:45:39.225 [DEBUG] [Thread-141020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:45:39.226 [DEBUG] [Thread-141020] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:45:39.229 [DEBUG] [Thread-141020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:45:39.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:45:39.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:45:39.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:45:39.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:45:39.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:45:39.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:45:39.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:45:39.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:45:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:45:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.073047 -999.00  +13.20  19.27     93  +12.20 1 3 1 3 1     0    0 0.69 -12.41 ----- 19.3 19.3 147.6 23.9 15.1 -1.8 15.0 -1.8 14.8 -1.9 15.1 -1.7
2026-02-12T03:45:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:45:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:45:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.073047
2026-02-12T03:45:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:45:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:45:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:45:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:45:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:45:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:44:56', tmtdew=0.45, humidity=96.93, cloud=0.0, wind=24.19, temperature=13.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:45:11.261', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:45:39.257 [DEBUG] [Thread-141020] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:45:39.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:45:39.362 [DEBUG] [Thread-141023] [transport.py] [_log()] starting thread (client mode): 0x9eb06fb0
2026-02-12T03:45:39.363 [DEBUG] [Thread-141023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:45:39.381 [DEBUG] [Thread-141023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:45:39.381 [INFO] [Thread-141023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:45:39.388 [DEBUG] [Thread-141023] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:45:39.388 [DEBUG] [Thread-141023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:45:39.388 [DEBUG] [Thread-141023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:45:39.388 [DEBUG] [Thread-141023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] client lang: <none>
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] server lang: <none>
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] kex follows: False
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] Compression: none
2026-02-12T03:45:39.389 [DEBUG] [Thread-141023] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:45:39.448 [DEBUG] [Thread-141023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:45:39.448 [DEBUG] [Thread-141023] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:45:39.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:45:39.449 [DEBUG] [Thread-141023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:45:39.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:45:39.503 [DEBUG] [Thread-141023] [transport.py] [_log()] userauth is OK
2026-02-12T03:45:39.504 [DEBUG] [Thread-141023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:45:39.504 [DEBUG] [Thread-141023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:45:39.504 [DEBUG] [Thread-141023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:45:39.504 [DEBUG] [Thread-141023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:45:39.523 [INFO] [Thread-141023] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:45:39.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:45:39.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:45:40.343 [DEBUG] [Thread-141023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:45:40.343 [DEBUG] [Thread-141023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:45:40.391 [DEBUG] [Thread-141023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:45:40.391 [DEBUG] [Thread-141023] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:45:40.399 [DEBUG] [Thread-141023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:45:40.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:45:40.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:45:40.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:45:40.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:45:40.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:45:40.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:45:40.432 [DEBUG] [Thread-141023] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:45:46.923 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:45:46.924 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:45:49.861 [DEBUG] [Thread-141025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:46:04.909 [DEBUG] [Thread-141026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:46:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:46:10.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:46:10.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:46:12.136 [DEBUG] [Thread-141027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:46:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 45, 32), 0.44, 96.97, 0.0, 27.14, 13.23, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:46:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:45:32
2026-02-12T03:46:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:46:13.338 [DEBUG] [Thread-141028] [transport.py] [_log()] starting thread (client mode): 0xa5771b10
2026-02-12T03:46:13.338 [DEBUG] [Thread-141028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:46:13.358 [DEBUG] [Thread-141028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:46:13.358 [INFO] [Thread-141028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] client lang: <none>
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] server lang: <none>
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] kex follows: False
2026-02-12T03:46:13.361 [DEBUG] [Thread-141028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:46:13.362 [DEBUG] [Thread-141028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:46:13.362 [DEBUG] [Thread-141028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:46:13.362 [DEBUG] [Thread-141028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:46:13.362 [DEBUG] [Thread-141028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:46:13.362 [DEBUG] [Thread-141028] [transport.py] [_log()] Compression: none
2026-02-12T03:46:13.362 [DEBUG] [Thread-141028] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:46:13.377 [DEBUG] [Thread-141028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:46:13.378 [DEBUG] [Thread-141028] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:46:13.378 [DEBUG] [Thread-141028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:46:13.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:46:13.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:46:13.380 [DEBUG] [Thread-141028] [transport.py] [_log()] userauth is OK
2026-02-12T03:46:13.381 [DEBUG] [Thread-141028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:46:13.381 [DEBUG] [Thread-141028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:46:13.381 [DEBUG] [Thread-141028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:46:13.381 [DEBUG] [Thread-141028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:46:13.417 [INFO] [Thread-141028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:46:13.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:46:14.062 [DEBUG] [Thread-141028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:46:14.062 [DEBUG] [Thread-141028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:46:14.062 [DEBUG] [Thread-141028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:46:14.103 [DEBUG] [Thread-141028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:46:14.103 [DEBUG] [Thread-141028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:46:14.105 [DEBUG] [Thread-141028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:46:14.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:46:14.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:46:14.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:46:14.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:46:14.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:46:14.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:46:14.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.073394 -999.00  +13.20  18.07     93  +12.20 1 3 1 3 1     0    0 0.69 -11.41 ----- 18.1 18.1 139.0 25.8 15.1 -1.8 14.9 -1.5 14.8 -1.8 15.1 -1.6
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.073394
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:46:14.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:45:32', tmtdew=0.44, humidity=96.97, cloud=0.0, wind=27.14, temperature=13.23, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:45:41.242', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:46:14.123 [DEBUG] [Thread-141028] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:46:14.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:46:14.210 [DEBUG] [Thread-141031] [transport.py] [_log()] starting thread (client mode): 0x9eb07f40
2026-02-12T03:46:14.210 [DEBUG] [Thread-141031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:46:14.224 [DEBUG] [Thread-141031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:46:14.224 [INFO] [Thread-141031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:46:14.231 [DEBUG] [Thread-141031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] client lang: <none>
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] server lang: <none>
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] kex follows: False
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:46:14.232 [DEBUG] [Thread-141031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:46:14.233 [DEBUG] [Thread-141031] [transport.py] [_log()] Compression: none
2026-02-12T03:46:14.233 [DEBUG] [Thread-141031] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:46:14.294 [DEBUG] [Thread-141031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:46:14.295 [DEBUG] [Thread-141031] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:46:14.296 [DEBUG] [Thread-141031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:46:14.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:46:14.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:46:14.352 [DEBUG] [Thread-141031] [transport.py] [_log()] userauth is OK
2026-02-12T03:46:14.352 [DEBUG] [Thread-141031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:46:14.353 [DEBUG] [Thread-141031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:46:14.353 [DEBUG] [Thread-141031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:46:14.353 [DEBUG] [Thread-141031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:46:14.375 [INFO] [Thread-141031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:46:14.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:46:14.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:46:15.177 [DEBUG] [Thread-141031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:46:15.177 [DEBUG] [Thread-141031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:46:15.229 [DEBUG] [Thread-141031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:46:15.229 [DEBUG] [Thread-141031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:46:15.241 [DEBUG] [Thread-141031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:46:15.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:46:15.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:46:15.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:46:15.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:46:15.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:46:15.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:46:15.279 [DEBUG] [Thread-141031] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:46:19.946 [DEBUG] [Thread-141033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:46:34.986 [DEBUG] [Thread-141034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:46:45.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:46:45.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:46:45.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:46:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 46, 8), 0.44, 97.01, 0.0, 23.36, 13.31, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:46:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:46:08
2026-02-12T03:46:47.128 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:46:47.130 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:46:47.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:46:47.597 [DEBUG] [Thread-141035] [transport.py] [_log()] starting thread (client mode): 0xa81d55d0
2026-02-12T03:46:47.597 [DEBUG] [Thread-141035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:46:47.617 [DEBUG] [Thread-141035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:46:47.617 [INFO] [Thread-141035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:46:47.620 [DEBUG] [Thread-141035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] client lang: <none>
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] server lang: <none>
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] kex follows: False
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] Compression: none
2026-02-12T03:46:47.621 [DEBUG] [Thread-141035] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:46:47.636 [DEBUG] [Thread-141035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:46:47.636 [DEBUG] [Thread-141035] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:46:47.637 [DEBUG] [Thread-141035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:46:47.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:46:47.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:46:47.638 [DEBUG] [Thread-141035] [transport.py] [_log()] userauth is OK
2026-02-12T03:46:47.639 [DEBUG] [Thread-141035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:46:47.639 [DEBUG] [Thread-141035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:46:47.639 [DEBUG] [Thread-141035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:46:47.639 [DEBUG] [Thread-141035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:46:47.653 [INFO] [Thread-141035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:46:47.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:46:48.281 [DEBUG] [Thread-141035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:46:48.281 [DEBUG] [Thread-141035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:46:48.281 [DEBUG] [Thread-141035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:46:48.323 [DEBUG] [Thread-141035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:46:48.323 [DEBUG] [Thread-141035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:46:48.326 [DEBUG] [Thread-141035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:46:48.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:46:48.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:46:48.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:46:48.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:46:48.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:46:48.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:46:48.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:46:48.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:46:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:46:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.073741 -999.00  +13.30  17.66     93  +12.30 1 3 1 3 1     0    0 0.71 -11.73 ----- 17.7 17.7 146.4 22.1 15.1 -1.5 15.0 -1.6 14.8 -1.9 15.1 -1.5
2026-02-12T03:46:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:46:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:46:48.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.073741
2026-02-12T03:46:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:46:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:46:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:46:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:46:48.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:46:48.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:46:08', tmtdew=0.44, humidity=97.01, cloud=0.0, wind=23.36, temperature=13.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:46:11.222', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:46:48.350 [DEBUG] [Thread-141035] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:46:48.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:46:48.444 [DEBUG] [Thread-141038] [transport.py] [_log()] starting thread (client mode): 0xa57735b0
2026-02-12T03:46:48.444 [DEBUG] [Thread-141038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:46:48.459 [DEBUG] [Thread-141038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:46:48.459 [INFO] [Thread-141038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] client lang: <none>
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] server lang: <none>
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] kex follows: False
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:46:48.467 [DEBUG] [Thread-141038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:46:48.468 [DEBUG] [Thread-141038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:46:48.468 [DEBUG] [Thread-141038] [transport.py] [_log()] Compression: none
2026-02-12T03:46:48.468 [DEBUG] [Thread-141038] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:46:48.527 [DEBUG] [Thread-141038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:46:48.527 [DEBUG] [Thread-141038] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:46:48.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:46:48.528 [DEBUG] [Thread-141038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:46:48.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:46:48.584 [DEBUG] [Thread-141038] [transport.py] [_log()] userauth is OK
2026-02-12T03:46:48.584 [DEBUG] [Thread-141038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:46:48.584 [DEBUG] [Thread-141038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:46:48.584 [DEBUG] [Thread-141038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:46:48.584 [DEBUG] [Thread-141038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:46:48.603 [INFO] [Thread-141038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:46:48.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:46:48.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:46:49.414 [DEBUG] [Thread-141038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:46:49.414 [DEBUG] [Thread-141038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:46:49.462 [DEBUG] [Thread-141038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:46:49.462 [DEBUG] [Thread-141038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:46:49.472 [DEBUG] [Thread-141038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:46:49.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:46:49.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:46:49.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:46:49.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:46:49.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:46:49.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:46:49.508 [DEBUG] [Thread-141038] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:46:50.023 [DEBUG] [Thread-141040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:05.073 [DEBUG] [Thread-141041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:12.213 [DEBUG] [Thread-141042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:19.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:47:19.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:47:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:47:20.111 [DEBUG] [Thread-141043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:21.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 46, 43), 0.44, 97.0, 0.0, 23.33, 13.41, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:47:21.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:46:43
2026-02-12T03:47:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:47:22.094 [DEBUG] [Thread-141044] [transport.py] [_log()] starting thread (client mode): 0xa57d70d0
2026-02-12T03:47:22.094 [DEBUG] [Thread-141044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:47:22.115 [DEBUG] [Thread-141044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:47:22.115 [INFO] [Thread-141044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] client lang: <none>
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] server lang: <none>
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] kex follows: False
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:47:22.118 [DEBUG] [Thread-141044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:47:22.119 [DEBUG] [Thread-141044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:47:22.119 [DEBUG] [Thread-141044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:47:22.119 [DEBUG] [Thread-141044] [transport.py] [_log()] Compression: none
2026-02-12T03:47:22.119 [DEBUG] [Thread-141044] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:47:22.135 [DEBUG] [Thread-141044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:47:22.135 [DEBUG] [Thread-141044] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:47:22.136 [DEBUG] [Thread-141044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:47:22.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:47:22.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:47:22.138 [DEBUG] [Thread-141044] [transport.py] [_log()] userauth is OK
2026-02-12T03:47:22.138 [DEBUG] [Thread-141044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:47:22.138 [DEBUG] [Thread-141044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:47:22.138 [DEBUG] [Thread-141044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:47:22.138 [DEBUG] [Thread-141044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:47:22.158 [INFO] [Thread-141044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:47:22.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:47:22.769 [DEBUG] [Thread-141044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:47:22.770 [DEBUG] [Thread-141044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:47:22.770 [DEBUG] [Thread-141044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:47:22.810 [DEBUG] [Thread-141044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:47:22.810 [DEBUG] [Thread-141044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:47:22.814 [DEBUG] [Thread-141044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:47:22.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:47:22.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:47:22.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:47:22.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:47:22.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:47:22.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:47:22.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:47:22.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:47:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:47:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.074088 -999.00  +13.30  16.24     93  +12.30 1 3 1 3 1     0    0 0.71 -10.92 ----- 16.2 16.2 142.8 20.6 15.1 -1.9 15.0 -1.6 14.9 -1.7 15.1 -1.8
2026-02-12T03:47:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:47:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:47:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.074088
2026-02-12T03:47:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:47:22.840 [DEBUG] [Thread-141044] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:47:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:47:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:47:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:47:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:47:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:46:43', tmtdew=0.44, humidity=97.0, cloud=0.0, wind=23.33, temperature=13.41, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:46:41.203', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:47:22.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:47:22.941 [DEBUG] [Thread-141047] [transport.py] [_log()] starting thread (client mode): 0xa81d7700
2026-02-12T03:47:22.941 [DEBUG] [Thread-141047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:47:22.956 [DEBUG] [Thread-141047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:47:22.956 [INFO] [Thread-141047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] client lang: <none>
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] server lang: <none>
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] kex follows: False
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:47:22.966 [DEBUG] [Thread-141047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:47:22.967 [DEBUG] [Thread-141047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:47:22.967 [DEBUG] [Thread-141047] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:47:22.967 [DEBUG] [Thread-141047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:47:22.967 [DEBUG] [Thread-141047] [transport.py] [_log()] Compression: none
2026-02-12T03:47:22.967 [DEBUG] [Thread-141047] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:47:23.029 [DEBUG] [Thread-141047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:47:23.030 [DEBUG] [Thread-141047] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:47:23.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:47:23.031 [DEBUG] [Thread-141047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:47:23.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:47:23.094 [DEBUG] [Thread-141047] [transport.py] [_log()] userauth is OK
2026-02-12T03:47:23.095 [DEBUG] [Thread-141047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:47:23.095 [DEBUG] [Thread-141047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:47:23.095 [DEBUG] [Thread-141047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:47:23.095 [DEBUG] [Thread-141047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:47:23.121 [INFO] [Thread-141047] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:47:23.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:47:23.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:47:23.962 [DEBUG] [Thread-141047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:47:23.963 [DEBUG] [Thread-141047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:47:24.013 [DEBUG] [Thread-141047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:47:24.013 [DEBUG] [Thread-141047] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:47:24.023 [DEBUG] [Thread-141047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:47:24.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:47:24.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:47:24.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:47:24.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:47:24.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:47:24.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:47:24.062 [DEBUG] [Thread-141047] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:47:35.146 [DEBUG] [Thread-141049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:47.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:47.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:50.208 [DEBUG] [Thread-141050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:47:54.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:47:54.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:47:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:47:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 47, 19), 0.45, 96.95, 0.0, 23.2, 13.35, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:47:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:47:19
2026-02-12T03:47:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:47:56.526 [DEBUG] [Thread-141051] [transport.py] [_log()] starting thread (client mode): 0x9eb059c0
2026-02-12T03:47:56.526 [DEBUG] [Thread-141051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:47:56.547 [DEBUG] [Thread-141051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:47:56.547 [INFO] [Thread-141051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] client lang: <none>
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] server lang: <none>
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] kex follows: False
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] Compression: none
2026-02-12T03:47:56.550 [DEBUG] [Thread-141051] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:47:56.559 [DEBUG] [Thread-141051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:47:56.559 [DEBUG] [Thread-141051] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:47:56.560 [DEBUG] [Thread-141051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:47:56.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:47:56.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:47:56.561 [DEBUG] [Thread-141051] [transport.py] [_log()] userauth is OK
2026-02-12T03:47:56.561 [DEBUG] [Thread-141051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:47:56.561 [DEBUG] [Thread-141051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:47:56.562 [DEBUG] [Thread-141051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:47:56.562 [DEBUG] [Thread-141051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:47:56.579 [INFO] [Thread-141051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:47:56.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:47:57.195 [DEBUG] [Thread-141051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:47:57.196 [DEBUG] [Thread-141051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:47:57.196 [DEBUG] [Thread-141051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:47:57.237 [DEBUG] [Thread-141051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:47:57.237 [DEBUG] [Thread-141051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:47:57.240 [DEBUG] [Thread-141051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:47:57.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:47:57.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:47:57.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:47:57.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:47:57.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:47:57.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:47:57.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:47:57.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:47:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:47:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.074783 -999.00  +13.20  19.20     93  +12.20 1 3 1 3 1     0    0 0.72 -10.22 ----- 19.2 19.2 139.2 28.8 15.1 -1.6 15.0 -1.8 14.8 -1.7 15.1 -1.7
2026-02-12T03:47:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:47:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:47:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.074783
2026-02-12T03:47:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:47:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:47:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:47:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:47:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:47:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:47:19', tmtdew=0.45, humidity=96.95, cloud=0.0, wind=23.2, temperature=13.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:47:41.251', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:47:57.262 [DEBUG] [Thread-141051] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:47:57.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:47:57.364 [DEBUG] [Thread-141054] [transport.py] [_log()] starting thread (client mode): 0xa81d75b0
2026-02-12T03:47:57.364 [DEBUG] [Thread-141054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:47:57.378 [DEBUG] [Thread-141054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:47:57.378 [INFO] [Thread-141054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] client lang: <none>
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] server lang: <none>
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] kex follows: False
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:47:57.386 [DEBUG] [Thread-141054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:47:57.387 [DEBUG] [Thread-141054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:47:57.387 [DEBUG] [Thread-141054] [transport.py] [_log()] Compression: none
2026-02-12T03:47:57.387 [DEBUG] [Thread-141054] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:47:57.442 [DEBUG] [Thread-141054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:47:57.443 [DEBUG] [Thread-141054] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:47:57.443 [DEBUG] [Thread-141054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:47:57.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:47:57.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:47:57.499 [DEBUG] [Thread-141054] [transport.py] [_log()] userauth is OK
2026-02-12T03:47:57.500 [DEBUG] [Thread-141054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:47:57.500 [DEBUG] [Thread-141054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:47:57.500 [DEBUG] [Thread-141054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:47:57.500 [DEBUG] [Thread-141054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:47:57.518 [INFO] [Thread-141054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:47:57.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:47:57.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:47:58.347 [DEBUG] [Thread-141054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:47:58.347 [DEBUG] [Thread-141054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:47:58.398 [DEBUG] [Thread-141054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:47:58.398 [DEBUG] [Thread-141054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:47:58.407 [DEBUG] [Thread-141054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:47:58.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:47:58.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:47:58.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:47:58.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:47:58.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:47:58.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:47:58.441 [DEBUG] [Thread-141054] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:48:05.243 [DEBUG] [Thread-141056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:48:12.273 [DEBUG] [Thread-141057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:48:20.297 [DEBUG] [Thread-141058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:48:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:48:28.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:48:28.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:48:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 47, 54), 0.45, 96.9, 0.0, 22.07, 13.26, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:48:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:47:54
2026-02-12T03:48:30.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:48:30.810 [DEBUG] [Thread-141059] [transport.py] [_log()] starting thread (client mode): 0x9eb068c0
2026-02-12T03:48:30.810 [DEBUG] [Thread-141059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:48:30.831 [DEBUG] [Thread-141059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:48:30.831 [INFO] [Thread-141059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] client lang: <none>
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] server lang: <none>
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] kex follows: False
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:48:30.834 [DEBUG] [Thread-141059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:48:30.835 [DEBUG] [Thread-141059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:48:30.835 [DEBUG] [Thread-141059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:48:30.835 [DEBUG] [Thread-141059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:48:30.835 [DEBUG] [Thread-141059] [transport.py] [_log()] Compression: none
2026-02-12T03:48:30.835 [DEBUG] [Thread-141059] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:48:30.851 [DEBUG] [Thread-141059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:48:30.851 [DEBUG] [Thread-141059] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:48:30.852 [DEBUG] [Thread-141059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:48:30.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:48:30.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:48:30.854 [DEBUG] [Thread-141059] [transport.py] [_log()] userauth is OK
2026-02-12T03:48:30.854 [DEBUG] [Thread-141059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:48:30.854 [DEBUG] [Thread-141059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:48:30.854 [DEBUG] [Thread-141059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:48:30.855 [DEBUG] [Thread-141059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:48:30.880 [INFO] [Thread-141059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:48:30.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:48:31.521 [DEBUG] [Thread-141059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:48:31.521 [DEBUG] [Thread-141059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:48:31.521 [DEBUG] [Thread-141059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:48:31.562 [DEBUG] [Thread-141059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:48:31.563 [DEBUG] [Thread-141059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:48:31.566 [DEBUG] [Thread-141059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:48:31.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:48:31.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:48:31.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:48:31.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:48:31.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:48:31.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:48:31.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:48:31.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:48:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:48:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.075130 -999.00  +13.20  22.28     93  +12.20 1 3 1 3 1     0    0 0.79 -8.38 ----- 22.3 22.3 138.0 25.7 15.1 -1.5 15.0 -1.6 14.8 -1.7 15.2 -1.6
2026-02-12T03:48:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:48:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:48:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.075130
2026-02-12T03:48:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:48:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:48:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:48:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:48:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:48:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:47:54', tmtdew=0.45, humidity=96.9, cloud=0.0, wind=22.07, temperature=13.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:48:11.232', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:48:31.595 [DEBUG] [Thread-141059] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:48:31.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:48:31.691 [DEBUG] [Thread-141062] [transport.py] [_log()] starting thread (client mode): 0xa5771b10
2026-02-12T03:48:31.692 [DEBUG] [Thread-141062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:48:31.706 [DEBUG] [Thread-141062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:48:31.706 [INFO] [Thread-141062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:48:31.713 [DEBUG] [Thread-141062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:48:31.714 [DEBUG] [Thread-141062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:48:31.714 [DEBUG] [Thread-141062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:48:31.714 [DEBUG] [Thread-141062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:48:31.714 [DEBUG] [Thread-141062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:48:31.714 [DEBUG] [Thread-141062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:48:31.714 [DEBUG] [Thread-141062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:48:31.714 [DEBUG] [Thread-141062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] client lang: <none>
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] server lang: <none>
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] kex follows: False
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:48:31.715 [DEBUG] [Thread-141062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:48:31.716 [DEBUG] [Thread-141062] [transport.py] [_log()] Compression: none
2026-02-12T03:48:31.716 [DEBUG] [Thread-141062] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:48:31.776 [DEBUG] [Thread-141062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:48:31.777 [DEBUG] [Thread-141062] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:48:31.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:48:31.778 [DEBUG] [Thread-141062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:48:31.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:48:31.831 [DEBUG] [Thread-141062] [transport.py] [_log()] userauth is OK
2026-02-12T03:48:31.832 [DEBUG] [Thread-141062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:48:31.832 [DEBUG] [Thread-141062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:48:31.832 [DEBUG] [Thread-141062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:48:31.832 [DEBUG] [Thread-141062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:48:31.851 [INFO] [Thread-141062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:48:31.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:48:31.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:48:32.667 [DEBUG] [Thread-141062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:48:32.667 [DEBUG] [Thread-141062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:48:32.715 [DEBUG] [Thread-141062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:48:32.716 [DEBUG] [Thread-141062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:48:32.725 [DEBUG] [Thread-141062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:48:32.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:48:32.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:48:32.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:48:32.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:48:32.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:48:32.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:48:32.762 [DEBUG] [Thread-141062] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:48:35.333 [DEBUG] [Thread-141064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:48:47.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:48:47.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:48:50.385 [DEBUG] [Thread-141065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:49:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:49:02.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:49:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:49:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 48, 29), 0.44, 96.97, 0.0, 21.07, 13.23, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:49:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:48:29
2026-02-12T03:49:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:49:05.250 [DEBUG] [Thread-141066] [transport.py] [_log()] starting thread (client mode): 0xa57e3610
2026-02-12T03:49:05.250 [DEBUG] [Thread-141066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:49:05.270 [DEBUG] [Thread-141066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:49:05.271 [INFO] [Thread-141066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:49:05.271 [DEBUG] [Thread-141066] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] client lang: <none>
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] server lang: <none>
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] kex follows: False
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] Compression: none
2026-02-12T03:49:05.272 [DEBUG] [Thread-141066] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:49:05.280 [DEBUG] [Thread-141066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:49:05.280 [DEBUG] [Thread-141066] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:49:05.281 [DEBUG] [Thread-141066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:49:05.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:49:05.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:49:05.282 [DEBUG] [Thread-141066] [transport.py] [_log()] userauth is OK
2026-02-12T03:49:05.282 [DEBUG] [Thread-141066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:49:05.283 [DEBUG] [Thread-141066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:49:05.283 [DEBUG] [Thread-141066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:49:05.283 [DEBUG] [Thread-141066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:49:05.305 [INFO] [Thread-141066] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:49:05.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:49:05.422 [DEBUG] [Thread-141068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:49:05.952 [DEBUG] [Thread-141066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:49:05.953 [DEBUG] [Thread-141066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:49:05.953 [DEBUG] [Thread-141066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:49:05.993 [DEBUG] [Thread-141066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:49:05.994 [DEBUG] [Thread-141066] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:49:05.997 [DEBUG] [Thread-141066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:49:06.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:49:06.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:49:06.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:49:06.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:49:06.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:49:06.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:49:06.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:49:06.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:49:06.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:49:06.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.075477 -999.00  +13.40  21.83     93  +12.40 1 3 1 3 1     0    0 0.81 -7.65 ----- 21.8 21.8 130.0 25.4 15.1 -1.3 15.0 -1.3 14.8 -1.4 15.2 -1.4
2026-02-12T03:49:06.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:49:06.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:49:06.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.075477
2026-02-12T03:49:06.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:49:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:49:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:49:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:49:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:49:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:48:29', tmtdew=0.44, humidity=96.97, cloud=0.0, wind=21.07, temperature=13.23, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:48:41.213', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:49:06.023 [DEBUG] [Thread-141066] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:49:06.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:49:06.121 [DEBUG] [Thread-141070] [transport.py] [_log()] starting thread (client mode): 0xa2db78b0
2026-02-12T03:49:06.122 [DEBUG] [Thread-141070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:49:06.136 [DEBUG] [Thread-141070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:49:06.136 [INFO] [Thread-141070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:49:06.153 [DEBUG] [Thread-141070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:49:06.153 [DEBUG] [Thread-141070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:49:06.153 [DEBUG] [Thread-141070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] client lang: <none>
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] server lang: <none>
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] kex follows: False
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:49:06.154 [DEBUG] [Thread-141070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:49:06.155 [DEBUG] [Thread-141070] [transport.py] [_log()] Compression: none
2026-02-12T03:49:06.155 [DEBUG] [Thread-141070] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:49:06.203 [DEBUG] [Thread-141070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:49:06.204 [DEBUG] [Thread-141070] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:49:06.204 [DEBUG] [Thread-141070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:49:06.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:49:06.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:49:06.260 [DEBUG] [Thread-141070] [transport.py] [_log()] userauth is OK
2026-02-12T03:49:06.260 [DEBUG] [Thread-141070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:49:06.260 [DEBUG] [Thread-141070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:49:06.260 [DEBUG] [Thread-141070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:49:06.260 [DEBUG] [Thread-141070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:49:06.285 [INFO] [Thread-141070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:49:06.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:49:06.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:49:07.137 [DEBUG] [Thread-141070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:49:07.137 [DEBUG] [Thread-141070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:49:07.185 [DEBUG] [Thread-141070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:49:07.186 [DEBUG] [Thread-141070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:49:07.195 [DEBUG] [Thread-141070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:49:07.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:49: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')
2026-02-12T03:49:07.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:49:07.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:49:07.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:49:07.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:49:07.231 [DEBUG] [Thread-141070] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:49:12.329 [DEBUG] [Thread-141072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:49:20.459 [DEBUG] [Thread-141073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:49:35.512 [DEBUG] [Thread-141074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:49:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:49:37.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:49:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:49:39.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 49, 5), 0.44, 97.0, 0.0, 23.66, 13.3, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:49:39.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:49:05
2026-02-12T03:49:39.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:49:39.561 [DEBUG] [Thread-141075] [transport.py] [_log()] starting thread (client mode): 0xa5741a50
2026-02-12T03:49:39.561 [DEBUG] [Thread-141075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:49:39.581 [DEBUG] [Thread-141075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:49:39.581 [INFO] [Thread-141075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] client lang: <none>
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] server lang: <none>
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] kex follows: False
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:49:39.584 [DEBUG] [Thread-141075] [transport.py] [_log()] Compression: none
2026-02-12T03:49:39.585 [DEBUG] [Thread-141075] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:49:39.601 [DEBUG] [Thread-141075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:49:39.602 [DEBUG] [Thread-141075] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:49:39.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:49:39.603 [DEBUG] [Thread-141075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:49:39.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:49:39.605 [DEBUG] [Thread-141075] [transport.py] [_log()] userauth is OK
2026-02-12T03:49:39.605 [DEBUG] [Thread-141075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:49:39.605 [DEBUG] [Thread-141075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:49:39.605 [DEBUG] [Thread-141075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:49:39.605 [DEBUG] [Thread-141075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:49:39.640 [INFO] [Thread-141075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:49:39.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:49:40.283 [DEBUG] [Thread-141075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:49:40.284 [DEBUG] [Thread-141075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:49:40.284 [DEBUG] [Thread-141075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:49:40.325 [DEBUG] [Thread-141075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:49:40.325 [DEBUG] [Thread-141075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:49:40.328 [DEBUG] [Thread-141075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:49:40.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:49:40.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:49:40.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:49:40.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:49:40.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:49:40.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:49:40.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:49:40.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:49:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:49:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.075824 -999.00  +13.50  18.96     94  +12.60 1 3 1 3 1     0    0 0.82 -6.95 ----- 19.0 19.0 143.4 31.6 15.1 -1.4 15.0 -1.4 14.8 -1.5 15.1 -1.4
2026-02-12T03:49:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:49:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:49:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.075824
2026-02-12T03:49:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:49:40.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:49:40.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:49:40.356 [DEBUG] [Thread-141075] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:49:40.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:49:40.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:49:40.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:49:05', tmtdew=0.44, humidity=97.0, cloud=0.0, wind=23.66, temperature=13.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:49:11.194', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:49:40.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:49:40.458 [DEBUG] [Thread-141078] [transport.py] [_log()] starting thread (client mode): 0xa81d4af0
2026-02-12T03:49:40.458 [DEBUG] [Thread-141078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:49:40.473 [DEBUG] [Thread-141078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:49:40.473 [INFO] [Thread-141078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] client lang: <none>
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] server lang: <none>
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] kex follows: False
2026-02-12T03:49:40.481 [DEBUG] [Thread-141078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:49:40.482 [DEBUG] [Thread-141078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:49:40.482 [DEBUG] [Thread-141078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:49:40.482 [DEBUG] [Thread-141078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:49:40.482 [DEBUG] [Thread-141078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:49:40.482 [DEBUG] [Thread-141078] [transport.py] [_log()] Compression: none
2026-02-12T03:49:40.482 [DEBUG] [Thread-141078] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:49:40.541 [DEBUG] [Thread-141078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:49:40.541 [DEBUG] [Thread-141078] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:49:40.551 [DEBUG] [Thread-141078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:49:40.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:49:40.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:49:40.599 [DEBUG] [Thread-141078] [transport.py] [_log()] userauth is OK
2026-02-12T03:49:40.599 [DEBUG] [Thread-141078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:49:40.600 [DEBUG] [Thread-141078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:49:40.600 [DEBUG] [Thread-141078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:49:40.600 [DEBUG] [Thread-141078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:49:40.624 [INFO] [Thread-141078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:49:40.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:49:40.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:49:41.466 [DEBUG] [Thread-141078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:49:41.466 [DEBUG] [Thread-141078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:49:41.514 [DEBUG] [Thread-141078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:49:41.514 [DEBUG] [Thread-141078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:49:41.524 [DEBUG] [Thread-141078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:49:41.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:49:41.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:49:41.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:49:41.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:49:41.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:49:41.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:49:41.562 [DEBUG] [Thread-141078] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:49:47.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:49:47.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:49:50.550 [DEBUG] [Thread-141080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:05.600 [DEBUG] [Thread-141081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:11.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:50:11.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:50:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:50:12.390 [DEBUG] [Thread-141082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:13.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 49, 40), 0.74, 95.23, 0.0, 29.96, 13.86, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:50:13.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:49:40
2026-02-12T03:50:14.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:50:14.512 [DEBUG] [Thread-141083] [transport.py] [_log()] starting thread (client mode): 0xa2d9d900
2026-02-12T03:50:14.512 [DEBUG] [Thread-141083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:50:14.533 [DEBUG] [Thread-141083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:50:14.533 [INFO] [Thread-141083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:50:14.536 [DEBUG] [Thread-141083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] client lang: <none>
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] server lang: <none>
2026-02-12T03:50:14.537 [DEBUG] [Thread-141083] [transport.py] [_log()] kex follows: False
2026-02-12T03:50:14.538 [DEBUG] [Thread-141083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:50:14.538 [DEBUG] [Thread-141083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:50:14.538 [DEBUG] [Thread-141083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:50:14.538 [DEBUG] [Thread-141083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:50:14.538 [DEBUG] [Thread-141083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:50:14.538 [DEBUG] [Thread-141083] [transport.py] [_log()] Compression: none
2026-02-12T03:50:14.538 [DEBUG] [Thread-141083] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:50:14.555 [DEBUG] [Thread-141083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:50:14.556 [DEBUG] [Thread-141083] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:50:14.556 [DEBUG] [Thread-141083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:50:14.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:50:14.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:50:14.558 [DEBUG] [Thread-141083] [transport.py] [_log()] userauth is OK
2026-02-12T03:50:14.559 [DEBUG] [Thread-141083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:50:14.559 [DEBUG] [Thread-141083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:50:14.559 [DEBUG] [Thread-141083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:50:14.559 [DEBUG] [Thread-141083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:50:14.580 [INFO] [Thread-141083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:50:14.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:50:15.179 [DEBUG] [Thread-141083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:50:15.189 [DEBUG] [Thread-141083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:50:15.189 [DEBUG] [Thread-141083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:50:15.220 [DEBUG] [Thread-141083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:50:15.221 [DEBUG] [Thread-141083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:50:15.224 [DEBUG] [Thread-141083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:50:15.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:50:15.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:50:15.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:50:15.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:50:15.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:50:15.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:50:15.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:50:15.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:50:15.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:50:15.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.076172 -999.00  +13.60  22.00     94  +12.70 1 3 1 3 1     0    0 0.83 -6.76 ----- 22.0 22.0 146.2 30.4 15.1 -1.4 15.0 -1.4 14.8 -1.7 15.1 -1.4
2026-02-12T03:50:15.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:50:15.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:50:15.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.076172
2026-02-12T03:50:15.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:50:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:50:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:50:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:50:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:50:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:49:40', tmtdew=0.74, humidity=95.23, cloud=0.0, wind=29.96, temperature=13.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:49:41.261', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:50:15.254 [DEBUG] [Thread-141083] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:50:15.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:50:15.352 [DEBUG] [Thread-141086] [transport.py] [_log()] starting thread (client mode): 0x9eb059c0
2026-02-12T03:50:15.352 [DEBUG] [Thread-141086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:50:15.366 [DEBUG] [Thread-141086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:50:15.367 [INFO] [Thread-141086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:50:15.374 [DEBUG] [Thread-141086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:50:15.374 [DEBUG] [Thread-141086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:50:15.375 [DEBUG] [Thread-141086] [transport.py] [_log()] client lang: <none>
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] server lang: <none>
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] kex follows: False
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:50:15.376 [DEBUG] [Thread-141086] [transport.py] [_log()] Compression: none
2026-02-12T03:50:15.377 [DEBUG] [Thread-141086] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:50:15.431 [DEBUG] [Thread-141086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:50:15.432 [DEBUG] [Thread-141086] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:50:15.432 [DEBUG] [Thread-141086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:50:15.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:50:15.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:50:15.487 [DEBUG] [Thread-141086] [transport.py] [_log()] userauth is OK
2026-02-12T03:50:15.487 [DEBUG] [Thread-141086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:50:15.487 [DEBUG] [Thread-141086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:50:15.487 [DEBUG] [Thread-141086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:50:15.487 [DEBUG] [Thread-141086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:50:15.507 [INFO] [Thread-141086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:50:15.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:50:15.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:50:16.350 [DEBUG] [Thread-141086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:50:16.351 [DEBUG] [Thread-141086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:50:16.399 [DEBUG] [Thread-141086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:50:16.400 [DEBUG] [Thread-141086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:50:16.409 [DEBUG] [Thread-141086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:50:16.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:50:16.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:50:16.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:50:16.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:50:16.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:50:16.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:50:16.441 [DEBUG] [Thread-141086] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:50:20.638 [DEBUG] [Thread-141088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:35.690 [DEBUG] [Thread-141089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:46.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:50:46.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:50:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:50:47.938 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:47.940 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:48.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 50, 16), 0.42, 97.1, 0.0, 29.61, 13.6, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:50:48.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:50:16
2026-02-12T03:50:48.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:50:48.872 [DEBUG] [Thread-141090] [transport.py] [_log()] starting thread (client mode): 0xa57e1840
2026-02-12T03:50:48.872 [DEBUG] [Thread-141090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:50:48.892 [DEBUG] [Thread-141090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:50:48.893 [INFO] [Thread-141090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:50:48.895 [DEBUG] [Thread-141090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] client lang: <none>
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] server lang: <none>
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] kex follows: False
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] Compression: none
2026-02-12T03:50:48.896 [DEBUG] [Thread-141090] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:50:48.913 [DEBUG] [Thread-141090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:50:48.913 [DEBUG] [Thread-141090] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:50:48.914 [DEBUG] [Thread-141090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:50:48.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:50:48.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:50:48.915 [DEBUG] [Thread-141090] [transport.py] [_log()] userauth is OK
2026-02-12T03:50:48.915 [DEBUG] [Thread-141090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:50:48.915 [DEBUG] [Thread-141090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:50:48.916 [DEBUG] [Thread-141090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:50:48.916 [DEBUG] [Thread-141090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:50:48.940 [INFO] [Thread-141090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:50:48.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:50:49.584 [DEBUG] [Thread-141090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:50:49.584 [DEBUG] [Thread-141090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:50:49.585 [DEBUG] [Thread-141090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:50:49.625 [DEBUG] [Thread-141090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:50:49.626 [DEBUG] [Thread-141090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:50:49.629 [DEBUG] [Thread-141090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:50:49.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:50:49.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:50:49.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:50:49.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:50:49.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:50:49.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:50:49.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:50:49.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:50:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:50:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.076866 -999.00  +13.60  18.75     94  +12.80 1 3 1 3 1     0    0 0.83 -6.71 ----- 18.8 18.8 138.6 26.8 15.1 -1.2 15.0 -1.3 14.8 -1.3 15.2 -1.4
2026-02-12T03:50:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:50:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:50:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.076866
2026-02-12T03:50:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:50:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:50:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:50:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:50:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:50:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:50:16', tmtdew=0.42, humidity=97.1, cloud=0.0, wind=29.61, temperature=13.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:50:41.222', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:50:49.654 [DEBUG] [Thread-141090] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:50:49.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:50:49.750 [DEBUG] [Thread-141093] [transport.py] [_log()] starting thread (client mode): 0x9eb040a0
2026-02-12T03:50:49.750 [DEBUG] [Thread-141093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:50:49.765 [DEBUG] [Thread-141093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:50:49.765 [INFO] [Thread-141093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:50:49.772 [DEBUG] [Thread-141093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] client lang: <none>
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] server lang: <none>
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] kex follows: False
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] Compression: none
2026-02-12T03:50:49.773 [DEBUG] [Thread-141093] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:50:49.832 [DEBUG] [Thread-141093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:50:49.832 [DEBUG] [Thread-141093] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:50:49.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:50:49.834 [DEBUG] [Thread-141093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:50:49.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:50:49.891 [DEBUG] [Thread-141093] [transport.py] [_log()] userauth is OK
2026-02-12T03:50:49.892 [DEBUG] [Thread-141093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:50:49.892 [DEBUG] [Thread-141093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:50:49.892 [DEBUG] [Thread-141093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:50:49.892 [DEBUG] [Thread-141093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:50:49.910 [INFO] [Thread-141093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:50:49.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:50:49.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:50:50.712 [DEBUG] [Thread-141093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:50:50.713 [DEBUG] [Thread-141093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:50:50.727 [DEBUG] [Thread-141095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:50:50.761 [DEBUG] [Thread-141093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:50:50.761 [DEBUG] [Thread-141093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:50:50.770 [DEBUG] [Thread-141093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:50:50.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:50:50.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:50:50.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:50:50.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:50:50.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:50:50.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:50:50.806 [DEBUG] [Thread-141093] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:51:05.782 [DEBUG] [Thread-141096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:51:12.447 [DEBUG] [Thread-141097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:51:20.819 [DEBUG] [Thread-141098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:51:20.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:51:20.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:51:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 50, 51), 0.42, 97.1, 0.0, 28.42, 13.76, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:50:51
2026-02-12T03:51:23.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:51:23.856 [DEBUG] [Thread-141099] [transport.py] [_log()] starting thread (client mode): 0xa2d9d840
2026-02-12T03:51:23.856 [DEBUG] [Thread-141099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:51:23.876 [DEBUG] [Thread-141099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:51:23.876 [INFO] [Thread-141099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:51:23.877 [DEBUG] [Thread-141099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] client lang: <none>
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] server lang: <none>
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] kex follows: False
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:51:23.878 [DEBUG] [Thread-141099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:51:23.879 [DEBUG] [Thread-141099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:51:23.879 [DEBUG] [Thread-141099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:51:23.879 [DEBUG] [Thread-141099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:51:23.879 [DEBUG] [Thread-141099] [transport.py] [_log()] Compression: none
2026-02-12T03:51:23.879 [DEBUG] [Thread-141099] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:51:23.895 [DEBUG] [Thread-141099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:51:23.895 [DEBUG] [Thread-141099] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:51:23.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:51:23.896 [DEBUG] [Thread-141099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:51:23.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:51:23.898 [DEBUG] [Thread-141099] [transport.py] [_log()] userauth is OK
2026-02-12T03:51:23.899 [DEBUG] [Thread-141099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:51:23.899 [DEBUG] [Thread-141099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:51:23.899 [DEBUG] [Thread-141099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:51:23.899 [DEBUG] [Thread-141099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:51:23.923 [INFO] [Thread-141099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:51:23.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:51:24.578 [DEBUG] [Thread-141099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:51:24.578 [DEBUG] [Thread-141099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:51:24.579 [DEBUG] [Thread-141099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:51:24.619 [DEBUG] [Thread-141099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:51:24.620 [DEBUG] [Thread-141099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:51:24.623 [DEBUG] [Thread-141099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:51:24.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:51:24.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:51:24.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:51:24.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:51:24.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:51:24.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:51:24.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:51:24.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:51:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:51:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.077213 -999.00  +13.70  20.61     94  +12.90 1 3 1 3 1     0    0 0.83 -6.69 ----- 20.6 20.6 127.0 25.2 15.1 -1.3 15.0 -1.3 14.8 -1.2 15.2 -1.3
2026-02-12T03:51:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:51:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:51:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.077213
2026-02-12T03:51:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:51:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:51:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:51:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:51:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:51:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:50:51', tmtdew=0.42, humidity=97.1, cloud=0.0, wind=28.42, temperature=13.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:51:11.203', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:51:24.652 [DEBUG] [Thread-141099] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:51:24.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:51:24.745 [DEBUG] [Thread-141102] [transport.py] [_log()] starting thread (client mode): 0xa2d9cb80
2026-02-12T03:51:24.746 [DEBUG] [Thread-141102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:51:24.760 [DEBUG] [Thread-141102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:51:24.760 [INFO] [Thread-141102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] client lang: <none>
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] server lang: <none>
2026-02-12T03:51:24.770 [DEBUG] [Thread-141102] [transport.py] [_log()] kex follows: False
2026-02-12T03:51:24.771 [DEBUG] [Thread-141102] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:51:24.771 [DEBUG] [Thread-141102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:51:24.771 [DEBUG] [Thread-141102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:51:24.771 [DEBUG] [Thread-141102] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:51:24.771 [DEBUG] [Thread-141102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:51:24.771 [DEBUG] [Thread-141102] [transport.py] [_log()] Compression: none
2026-02-12T03:51:24.771 [DEBUG] [Thread-141102] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:51:24.829 [DEBUG] [Thread-141102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:51:24.829 [DEBUG] [Thread-141102] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:51:24.830 [DEBUG] [Thread-141102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:51:24.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:51:24.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:51:24.887 [DEBUG] [Thread-141102] [transport.py] [_log()] userauth is OK
2026-02-12T03:51:24.887 [DEBUG] [Thread-141102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:51:24.888 [DEBUG] [Thread-141102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:51:24.888 [DEBUG] [Thread-141102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:51:24.888 [DEBUG] [Thread-141102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:51:24.911 [INFO] [Thread-141102] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:51:24.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:51:24.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:51:25.757 [DEBUG] [Thread-141102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:51:25.757 [DEBUG] [Thread-141102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:51:25.805 [DEBUG] [Thread-141102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:51:25.805 [DEBUG] [Thread-141102] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:51:25.814 [DEBUG] [Thread-141102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:51:25.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:51:25.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:51:25.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:51:25.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:51:25.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:51:25.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:51:25.848 [DEBUG] [Thread-141102] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:51:35.859 [DEBUG] [Thread-141104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:51:48.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:51:48.141 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:51:50.911 [DEBUG] [Thread-141105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:51:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:51:55.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:51:55.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:51:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 51, 28), 0.41, 97.15, 0.0, 27.95, 13.83, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:51:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:51:28
2026-02-12T03:51:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:51:58.194 [DEBUG] [Thread-141106] [transport.py] [_log()] starting thread (client mode): 0xa2db7910
2026-02-12T03:51:58.194 [DEBUG] [Thread-141106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:51:58.215 [DEBUG] [Thread-141106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:51:58.215 [INFO] [Thread-141106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:51:58.218 [DEBUG] [Thread-141106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:51:58.218 [DEBUG] [Thread-141106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] client lang: <none>
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] server lang: <none>
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] kex follows: False
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:51:58.219 [DEBUG] [Thread-141106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:51:58.220 [DEBUG] [Thread-141106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:51:58.220 [DEBUG] [Thread-141106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:51:58.220 [DEBUG] [Thread-141106] [transport.py] [_log()] Compression: none
2026-02-12T03:51:58.220 [DEBUG] [Thread-141106] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:51:58.238 [DEBUG] [Thread-141106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:51:58.239 [DEBUG] [Thread-141106] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:51:58.239 [DEBUG] [Thread-141106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:51:58.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:51:58.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:51:58.241 [DEBUG] [Thread-141106] [transport.py] [_log()] userauth is OK
2026-02-12T03:51:58.242 [DEBUG] [Thread-141106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:51:58.242 [DEBUG] [Thread-141106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:51:58.242 [DEBUG] [Thread-141106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:51:58.242 [DEBUG] [Thread-141106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:51:58.267 [INFO] [Thread-141106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:51:58.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:51:58.899 [DEBUG] [Thread-141106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:51:58.899 [DEBUG] [Thread-141106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:51:58.899 [DEBUG] [Thread-141106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:51:58.939 [DEBUG] [Thread-141106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:51:58.940 [DEBUG] [Thread-141106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:51:58.943 [DEBUG] [Thread-141106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:51:58.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:51:58.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:51:58.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:51:58.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:51:58.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:51:58.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:51:58.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:51:58.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:51:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:51:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.077560 -999.00  +13.70  20.83     94  +12.90 1 3 1 3 1     0    0 0.81 -6.34 ----- 20.8 20.8 149.6 30.2 15.1 -1.2 15.0 -1.3 14.9 -1.3 15.2 -1.4
2026-02-12T03:51:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:51:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:51:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.077560
2026-02-12T03:51:58.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:51:58.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:51:58.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:51:58.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:51:58.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:51:58.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:51:28', tmtdew=0.41, humidity=97.15, cloud=0.0, wind=27.95, temperature=13.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:51:41.184', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:51:58.971 [DEBUG] [Thread-141106] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:51:59.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:51:59.068 [DEBUG] [Thread-141109] [transport.py] [_log()] starting thread (client mode): 0xa2db7a90
2026-02-12T03:51:59.068 [DEBUG] [Thread-141109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:51:59.082 [DEBUG] [Thread-141109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:51:59.083 [INFO] [Thread-141109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:51:59.090 [DEBUG] [Thread-141109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:51:59.091 [DEBUG] [Thread-141109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:51:59.091 [DEBUG] [Thread-141109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:51:59.091 [DEBUG] [Thread-141109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:59.091 [DEBUG] [Thread-141109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] client lang: <none>
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] server lang: <none>
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] kex follows: False
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:51:59.092 [DEBUG] [Thread-141109] [transport.py] [_log()] Compression: none
2026-02-12T03:51:59.093 [DEBUG] [Thread-141109] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:51:59.151 [DEBUG] [Thread-141109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:51:59.152 [DEBUG] [Thread-141109] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:51:59.152 [DEBUG] [Thread-141109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:51:59.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:51:59.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:51:59.207 [DEBUG] [Thread-141109] [transport.py] [_log()] userauth is OK
2026-02-12T03:51:59.208 [DEBUG] [Thread-141109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:51:59.208 [DEBUG] [Thread-141109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:51:59.208 [DEBUG] [Thread-141109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:51:59.208 [DEBUG] [Thread-141109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:51:59.226 [INFO] [Thread-141109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:51:59.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:51:59.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:52:00.062 [DEBUG] [Thread-141109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:52:00.064 [DEBUG] [Thread-141109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:52:00.110 [DEBUG] [Thread-141109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:52:00.111 [DEBUG] [Thread-141109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:52:00.120 [DEBUG] [Thread-141109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:52:00.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:52: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')
2026-02-12T03:52:00.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:52:00.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:52:00.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:52:00.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:52:00.156 [DEBUG] [Thread-141109] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:52:05.947 [DEBUG] [Thread-141111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:52:12.516 [DEBUG] [Thread-141112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:52:21.000 [DEBUG] [Thread-141113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:52:30.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:52:30.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:52:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:52:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 52, 4), 0.41, 97.16, 0.0, 27.68, 13.81, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:52:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:52:04
2026-02-12T03:52:32.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:52:32.500 [DEBUG] [Thread-141114] [transport.py] [_log()] starting thread (client mode): 0xa2db4190
2026-02-12T03:52:32.501 [DEBUG] [Thread-141114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:52:32.521 [DEBUG] [Thread-141114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:52:32.521 [INFO] [Thread-141114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:52:32.524 [DEBUG] [Thread-141114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:52:32.524 [DEBUG] [Thread-141114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:52:32.524 [DEBUG] [Thread-141114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:52:32.524 [DEBUG] [Thread-141114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:52:32.524 [DEBUG] [Thread-141114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:52:32.524 [DEBUG] [Thread-141114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:52:32.524 [DEBUG] [Thread-141114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] client lang: <none>
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] server lang: <none>
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] kex follows: False
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] Compression: none
2026-02-12T03:52:32.525 [DEBUG] [Thread-141114] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:52:32.547 [DEBUG] [Thread-141114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:52:32.547 [DEBUG] [Thread-141114] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:52:32.548 [DEBUG] [Thread-141114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:52:32.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:52:32.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:52:32.550 [DEBUG] [Thread-141114] [transport.py] [_log()] userauth is OK
2026-02-12T03:52:32.550 [DEBUG] [Thread-141114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:52:32.551 [DEBUG] [Thread-141114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:52:32.551 [DEBUG] [Thread-141114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:52:32.551 [DEBUG] [Thread-141114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:52:32.573 [INFO] [Thread-141114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:52:32.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:52:33.222 [DEBUG] [Thread-141114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:52:33.222 [DEBUG] [Thread-141114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:52:33.222 [DEBUG] [Thread-141114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:52:33.263 [DEBUG] [Thread-141114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:52:33.263 [DEBUG] [Thread-141114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:52:33.266 [DEBUG] [Thread-141114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:52:33.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:52:33.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:52:33.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:52:33.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:52:33.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:52:33.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:52:33.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:52:33.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:52:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:52:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.077908 -999.00  +13.70  18.50     94  +12.90 1 3 1 3 1     0    0 0.81 -6.77 ----- 18.5 18.5 144.2 28.3 15.2 -1.5 15.1 -1.3 14.9 -1.5 15.2 -1.2
2026-02-12T03:52:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:52:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:52:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.077908
2026-02-12T03:52:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:52:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:52:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:52:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:52:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:52:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:52:04', tmtdew=0.41, humidity=97.16, cloud=0.0, wind=27.68, temperature=13.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:52:11.251', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:52:33.287 [DEBUG] [Thread-141114] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:52:33.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:52:33.395 [DEBUG] [Thread-141117] [transport.py] [_log()] starting thread (client mode): 0xa5771210
2026-02-12T03:52:33.395 [DEBUG] [Thread-141117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:52:33.409 [DEBUG] [Thread-141117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:52:33.409 [INFO] [Thread-141117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] client lang: <none>
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] server lang: <none>
2026-02-12T03:52:33.417 [DEBUG] [Thread-141117] [transport.py] [_log()] kex follows: False
2026-02-12T03:52:33.418 [DEBUG] [Thread-141117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:52:33.418 [DEBUG] [Thread-141117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:52:33.418 [DEBUG] [Thread-141117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:52:33.418 [DEBUG] [Thread-141117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:52:33.418 [DEBUG] [Thread-141117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:52:33.418 [DEBUG] [Thread-141117] [transport.py] [_log()] Compression: none
2026-02-12T03:52:33.418 [DEBUG] [Thread-141117] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:52:33.476 [DEBUG] [Thread-141117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:52:33.477 [DEBUG] [Thread-141117] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:52:33.478 [DEBUG] [Thread-141117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:52:33.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:52:33.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:52:33.535 [DEBUG] [Thread-141117] [transport.py] [_log()] userauth is OK
2026-02-12T03:52:33.535 [DEBUG] [Thread-141117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:52:33.536 [DEBUG] [Thread-141117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:52:33.536 [DEBUG] [Thread-141117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:52:33.536 [DEBUG] [Thread-141117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:52:33.555 [INFO] [Thread-141117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:52:33.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:52:33.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:52:34.366 [DEBUG] [Thread-141117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:52:34.366 [DEBUG] [Thread-141117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:52:34.414 [DEBUG] [Thread-141117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:52:34.414 [DEBUG] [Thread-141117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:52:34.423 [DEBUG] [Thread-141117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:52:34.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:52:34.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:52:34.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:52:34.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:52:34.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:52:34.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:52:34.460 [DEBUG] [Thread-141117] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:52:36.041 [DEBUG] [Thread-141119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:52:48.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:52:48.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:52:51.091 [DEBUG] [Thread-141120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:53:04.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:53:04.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:53:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:53:06.128 [DEBUG] [Thread-141121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:53:06.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 52, 40), 0.71, 95.39, 0.0, 33.94, 14.29, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:53:06.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:52:40
2026-02-12T03:53:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:53:07.308 [DEBUG] [Thread-141122] [transport.py] [_log()] starting thread (client mode): 0x9eb04550
2026-02-12T03:53:07.309 [DEBUG] [Thread-141122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:53:07.329 [DEBUG] [Thread-141122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:53:07.329 [INFO] [Thread-141122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] client lang: <none>
2026-02-12T03:53:07.333 [DEBUG] [Thread-141122] [transport.py] [_log()] server lang: <none>
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] kex follows: False
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] Compression: none
2026-02-12T03:53:07.334 [DEBUG] [Thread-141122] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:53:07.352 [DEBUG] [Thread-141122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:53:07.353 [DEBUG] [Thread-141122] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:53:07.353 [DEBUG] [Thread-141122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:53:07.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:53:07.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:53:07.355 [DEBUG] [Thread-141122] [transport.py] [_log()] userauth is OK
2026-02-12T03:53:07.355 [DEBUG] [Thread-141122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:53:07.356 [DEBUG] [Thread-141122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:53:07.356 [DEBUG] [Thread-141122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:53:07.356 [DEBUG] [Thread-141122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:53:07.381 [INFO] [Thread-141122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:53:07.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:53:08.025 [DEBUG] [Thread-141122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:53:08.026 [DEBUG] [Thread-141122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:53:08.026 [DEBUG] [Thread-141122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:53:08.066 [DEBUG] [Thread-141122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:53:08.066 [DEBUG] [Thread-141122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:53:08.069 [DEBUG] [Thread-141122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:53:08.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:53:08.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:53:08.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:53:08.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:53:08.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:53:08.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:53:08.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:53:08.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:53:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:53:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.078255 -999.00  +13.70  22.14     95  +12.90 1 3 1 3 1     0    0 0.80 -6.60 ----- 22.1 22.1 148.8 26.1 15.1 -1.3 15.1 -1.2 14.9 -1.4 15.2 -1.3
2026-02-12T03:53:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:53:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:53:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.078255
2026-02-12T03:53:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:53:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:53:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:53:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:53:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:53:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:52:40', tmtdew=0.71, humidity=95.39, cloud=0.0, wind=33.94, temperature=14.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:52:41.232', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:53:08.094 [DEBUG] [Thread-141122] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:53:08.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:53:08.188 [DEBUG] [Thread-141125] [transport.py] [_log()] starting thread (client mode): 0xa57e1840
2026-02-12T03:53:08.188 [DEBUG] [Thread-141125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:53:08.203 [DEBUG] [Thread-141125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:53:08.203 [INFO] [Thread-141125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:53:08.211 [DEBUG] [Thread-141125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:53:08.211 [DEBUG] [Thread-141125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:53:08.211 [DEBUG] [Thread-141125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:53:08.211 [DEBUG] [Thread-141125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:08.211 [DEBUG] [Thread-141125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] client lang: <none>
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] server lang: <none>
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] kex follows: False
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] Compression: none
2026-02-12T03:53:08.212 [DEBUG] [Thread-141125] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:53:08.271 [DEBUG] [Thread-141125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:53:08.272 [DEBUG] [Thread-141125] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:53:08.272 [DEBUG] [Thread-141125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:53:08.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:53:08.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:53:08.327 [DEBUG] [Thread-141125] [transport.py] [_log()] userauth is OK
2026-02-12T03:53:08.327 [DEBUG] [Thread-141125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:53:08.327 [DEBUG] [Thread-141125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:53:08.328 [DEBUG] [Thread-141125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:53:08.328 [DEBUG] [Thread-141125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:53:08.346 [INFO] [Thread-141125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:53:08.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:53:08.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:53:09.230 [DEBUG] [Thread-141125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:53:09.231 [DEBUG] [Thread-141125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:53:09.278 [DEBUG] [Thread-141125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:53:09.278 [DEBUG] [Thread-141125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:53:09.287 [DEBUG] [Thread-141125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:53:09.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:53:09.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:53:09.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:53:09.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:53:09.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:53:09.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:53:09.322 [DEBUG] [Thread-141125] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:53:12.579 [DEBUG] [Thread-141127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:53:21.162 [DEBUG] [Thread-141128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:53:36.208 [DEBUG] [Thread-141129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:53:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:53:39.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:53:39.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:53:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 53, 15), 0.41, 97.18, 0.0, 27.4, 13.86, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:53:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:53:15
2026-02-12T03:53:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:53:41.747 [DEBUG] [Thread-141130] [transport.py] [_log()] starting thread (client mode): 0x9eb07af0
2026-02-12T03:53:41.747 [DEBUG] [Thread-141130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:53:41.765 [DEBUG] [Thread-141130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:53:41.766 [INFO] [Thread-141130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] client lang: <none>
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] server lang: <none>
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] kex follows: False
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] Compression: none
2026-02-12T03:53:41.769 [DEBUG] [Thread-141130] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:53:41.788 [DEBUG] [Thread-141130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:53:41.789 [DEBUG] [Thread-141130] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:53:41.789 [DEBUG] [Thread-141130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:53:41.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:53:41.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:53:41.792 [DEBUG] [Thread-141130] [transport.py] [_log()] userauth is OK
2026-02-12T03:53:41.792 [DEBUG] [Thread-141130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:53:41.792 [DEBUG] [Thread-141130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:53:41.792 [DEBUG] [Thread-141130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:53:41.792 [DEBUG] [Thread-141130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:53:41.817 [INFO] [Thread-141130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:53:41.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:53:42.447 [DEBUG] [Thread-141130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:53:42.447 [DEBUG] [Thread-141130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:53:42.448 [DEBUG] [Thread-141130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:53:42.488 [DEBUG] [Thread-141130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:53:42.488 [DEBUG] [Thread-141130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:53:42.491 [DEBUG] [Thread-141130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:53:42.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:53:42.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:53:42.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:53:42.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:53:42.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:53:42.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:53:42.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:53:42.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:53:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:53:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.078602 -999.00  +13.70  23.93     95  +12.90 1 3 1 3 1     0    0 0.79 -6.85 ----- 23.9 23.9 141.2 30.8 15.1 -1.4 15.1 -1.5 14.9 -1.4 15.2 -1.5
2026-02-12T03:53:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:53:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:53:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.078602
2026-02-12T03:53:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:53:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:53:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:53:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:53:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:53:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:53:15', tmtdew=0.41, humidity=97.18, cloud=0.0, wind=27.4, temperature=13.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:53:11.213', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:53:42.516 [DEBUG] [Thread-141130] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:53:42.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:53:42.616 [DEBUG] [Thread-141133] [transport.py] [_log()] starting thread (client mode): 0xa81d5e10
2026-02-12T03:53:42.617 [DEBUG] [Thread-141133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:53:42.631 [DEBUG] [Thread-141133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:53:42.631 [INFO] [Thread-141133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] client lang: <none>
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] server lang: <none>
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] kex follows: False
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:53:42.639 [DEBUG] [Thread-141133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:53:42.640 [DEBUG] [Thread-141133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:53:42.640 [DEBUG] [Thread-141133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:53:42.640 [DEBUG] [Thread-141133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:53:42.640 [DEBUG] [Thread-141133] [transport.py] [_log()] Compression: none
2026-02-12T03:53:42.640 [DEBUG] [Thread-141133] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:53:42.699 [DEBUG] [Thread-141133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:53:42.700 [DEBUG] [Thread-141133] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:53:42.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:53:42.701 [DEBUG] [Thread-141133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:53:42.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:53:42.760 [DEBUG] [Thread-141133] [transport.py] [_log()] userauth is OK
2026-02-12T03:53:42.760 [DEBUG] [Thread-141133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:53:42.761 [DEBUG] [Thread-141133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:53:42.761 [DEBUG] [Thread-141133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:53:42.761 [DEBUG] [Thread-141133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:53:42.779 [INFO] [Thread-141133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:53:42.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:53:42.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:53:43.572 [DEBUG] [Thread-141133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:53:43.572 [DEBUG] [Thread-141133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:53:43.621 [DEBUG] [Thread-141133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:53:43.621 [DEBUG] [Thread-141133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:53:43.631 [DEBUG] [Thread-141133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:53:43.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:53:43.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:53:43.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:53:43.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:53:43.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:53:43.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:53:43.667 [DEBUG] [Thread-141133] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:53:48.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:53:48.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:53:51.244 [DEBUG] [Thread-141135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:06.296 [DEBUG] [Thread-141136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:12.655 [DEBUG] [Thread-141137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:54:13.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:54:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:54:15.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 53, 50), 0.4, 97.21, 0.0, 29.22, 13.81, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:54:15.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:53:50
2026-02-12T03:54:16.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:54:16.500 [DEBUG] [Thread-141138] [transport.py] [_log()] starting thread (client mode): 0xa2db7160
2026-02-12T03:54:16.500 [DEBUG] [Thread-141138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:54:16.521 [DEBUG] [Thread-141138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:54:16.521 [INFO] [Thread-141138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:54:16.524 [DEBUG] [Thread-141138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] client lang: <none>
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] server lang: <none>
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] kex follows: False
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:54:16.525 [DEBUG] [Thread-141138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:54:16.526 [DEBUG] [Thread-141138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:54:16.526 [DEBUG] [Thread-141138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:54:16.526 [DEBUG] [Thread-141138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:54:16.526 [DEBUG] [Thread-141138] [transport.py] [_log()] Compression: none
2026-02-12T03:54:16.526 [DEBUG] [Thread-141138] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:54:16.542 [DEBUG] [Thread-141138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:54:16.543 [DEBUG] [Thread-141138] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:54:16.543 [DEBUG] [Thread-141138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:54:16.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:54:16.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:54:16.545 [DEBUG] [Thread-141138] [transport.py] [_log()] userauth is OK
2026-02-12T03:54:16.545 [DEBUG] [Thread-141138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:54:16.546 [DEBUG] [Thread-141138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:54:16.546 [DEBUG] [Thread-141138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:54:16.546 [DEBUG] [Thread-141138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:54:16.569 [INFO] [Thread-141138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:54:16.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:54:17.215 [DEBUG] [Thread-141138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:54:17.216 [DEBUG] [Thread-141138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:54:17.216 [DEBUG] [Thread-141138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:54:17.256 [DEBUG] [Thread-141138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:54:17.256 [DEBUG] [Thread-141138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:54:17.259 [DEBUG] [Thread-141138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:54:17.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:54:17.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:54:17.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:54:17.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:54:17.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:54:17.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:54:17.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:54:17.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:54:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:54:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.078949 -999.00  +13.70  25.78     95  +12.90 1 3 1 3 1     0    0 0.77 -7.50 ----- 25.8 25.8 144.0 31.4 15.1 -1.4 15.1 -1.6 14.9 -1.6 15.1 -1.6
2026-02-12T03:54:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:54:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:54:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.078949
2026-02-12T03:54:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:54:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:54:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:54:17.284 [DEBUG] [Thread-141138] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:54:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:54:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:54:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:53:50', tmtdew=0.4, humidity=97.21, cloud=0.0, wind=29.22, temperature=13.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:53:41.194', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:54:17.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:54:17.387 [DEBUG] [Thread-141141] [transport.py] [_log()] starting thread (client mode): 0xa5770400
2026-02-12T03:54:17.387 [DEBUG] [Thread-141141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:54:17.402 [DEBUG] [Thread-141141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:54:17.402 [INFO] [Thread-141141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:54:17.409 [DEBUG] [Thread-141141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] client lang: <none>
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] server lang: <none>
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] kex follows: False
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:54:17.410 [DEBUG] [Thread-141141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:54:17.411 [DEBUG] [Thread-141141] [transport.py] [_log()] Compression: none
2026-02-12T03:54:17.411 [DEBUG] [Thread-141141] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:54:17.466 [DEBUG] [Thread-141141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:54:17.467 [DEBUG] [Thread-141141] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:54:17.467 [DEBUG] [Thread-141141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:54:17.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:54:17.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:54:17.522 [DEBUG] [Thread-141141] [transport.py] [_log()] userauth is OK
2026-02-12T03:54:17.523 [DEBUG] [Thread-141141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:54:17.523 [DEBUG] [Thread-141141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:54:17.523 [DEBUG] [Thread-141141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:54:17.523 [DEBUG] [Thread-141141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:54:17.541 [INFO] [Thread-141141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:54:17.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:54:17.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:54:18.408 [DEBUG] [Thread-141141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:54:18.408 [DEBUG] [Thread-141141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:54:18.457 [DEBUG] [Thread-141141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:54:18.457 [DEBUG] [Thread-141141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:54:18.465 [DEBUG] [Thread-141141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:54:18.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:54:18.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:54:18.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:54:18.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:54:18.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:54:18.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:54:18.498 [DEBUG] [Thread-141141] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:54:21.329 [DEBUG] [Thread-141143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:36.387 [DEBUG] [Thread-141144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:54:48.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:54:48.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
2026-02-12T03:54:48.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:48.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:50.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 54, 26), 0.4, 97.23, 0.0, 28.09, 13.8, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:54:50.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:54:26
2026-02-12T03:54:51.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:54:51.235 [DEBUG] [Thread-141145] [transport.py] [_log()] starting thread (client mode): 0xa5742140
2026-02-12T03:54:51.235 [DEBUG] [Thread-141145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:54:51.255 [DEBUG] [Thread-141145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:54:51.255 [INFO] [Thread-141145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:54:51.256 [DEBUG] [Thread-141145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:54:51.256 [DEBUG] [Thread-141145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] client lang: <none>
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] server lang: <none>
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] kex follows: False
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] Compression: none
2026-02-12T03:54:51.257 [DEBUG] [Thread-141145] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:54:51.271 [DEBUG] [Thread-141145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:54:51.271 [DEBUG] [Thread-141145] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:54:51.272 [DEBUG] [Thread-141145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:54:51.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:54:51.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:54:51.274 [DEBUG] [Thread-141145] [transport.py] [_log()] userauth is OK
2026-02-12T03:54:51.274 [DEBUG] [Thread-141145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:54:51.274 [DEBUG] [Thread-141145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:54:51.274 [DEBUG] [Thread-141145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:54:51.274 [DEBUG] [Thread-141145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:54:51.300 [INFO] [Thread-141145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:54:51.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:54:51.424 [DEBUG] [Thread-141147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:54:51.930 [DEBUG] [Thread-141145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:54:51.930 [DEBUG] [Thread-141145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:54:51.931 [DEBUG] [Thread-141145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:54:51.971 [DEBUG] [Thread-141145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:54:51.971 [DEBUG] [Thread-141145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:54:51.973 [DEBUG] [Thread-141145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:54:51.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:54:51.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:54:51.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:54:51.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:54:51.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:54:51.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:54:51.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:54:51.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:54:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:54:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.079297 -999.00  +13.70  18.46     95  +12.90 1 3 1 3 1     0    0 0.73 -8.20 ----- 18.5 18.5 143.4 24.9 15.1 -1.3 15.0 -1.3 14.8 -1.6 15.2 -1.2
2026-02-12T03:54:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:54:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:54:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.079297
2026-02-12T03:54:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:54:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:54:51.991 [DEBUG] [Thread-141145] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:54:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:54:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:54:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:54:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:54:26', tmtdew=0.4, humidity=97.23, cloud=0.0, wind=28.09, temperature=13.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:54:11.261', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:54:52.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:54:52.094 [DEBUG] [Thread-141149] [transport.py] [_log()] starting thread (client mode): 0xa81d76d0
2026-02-12T03:54:52.094 [DEBUG] [Thread-141149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:54:52.109 [DEBUG] [Thread-141149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:54:52.109 [INFO] [Thread-141149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] client lang: <none>
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] server lang: <none>
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] kex follows: False
2026-02-12T03:54:52.117 [DEBUG] [Thread-141149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:54:52.118 [DEBUG] [Thread-141149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:54:52.118 [DEBUG] [Thread-141149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:54:52.118 [DEBUG] [Thread-141149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:54:52.118 [DEBUG] [Thread-141149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:54:52.118 [DEBUG] [Thread-141149] [transport.py] [_log()] Compression: none
2026-02-12T03:54:52.118 [DEBUG] [Thread-141149] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:54:52.178 [DEBUG] [Thread-141149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:54:52.179 [DEBUG] [Thread-141149] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:54:52.180 [DEBUG] [Thread-141149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:54:52.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:54:52.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:54:52.235 [DEBUG] [Thread-141149] [transport.py] [_log()] userauth is OK
2026-02-12T03:54:52.235 [DEBUG] [Thread-141149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:54:52.235 [DEBUG] [Thread-141149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:54:52.235 [DEBUG] [Thread-141149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:54:52.235 [DEBUG] [Thread-141149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:54:52.254 [INFO] [Thread-141149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:54:52.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:54:52.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:54:53.081 [DEBUG] [Thread-141149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:54:53.081 [DEBUG] [Thread-141149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:54:53.129 [DEBUG] [Thread-141149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:54:53.129 [DEBUG] [Thread-141149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:54:53.138 [DEBUG] [Thread-141149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:54:53.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:54:53.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:54:53.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:54:53.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:54:53.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:54:53.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:54:53.172 [DEBUG] [Thread-141149] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:55:06.460 [DEBUG] [Thread-141151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:55:12.731 [DEBUG] [Thread-141152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:55:21.508 [DEBUG] [Thread-141153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:55:23.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:55:23.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:55:23.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:55:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 55, 2), 0.41, 97.2, 0.0, 27.23, 13.76, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:55:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:55:02
2026-02-12T03:55:25.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:55:25.962 [DEBUG] [Thread-141154] [transport.py] [_log()] starting thread (client mode): 0xa575a7d0
2026-02-12T03:55:25.962 [DEBUG] [Thread-141154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:55:25.982 [DEBUG] [Thread-141154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:55:25.982 [INFO] [Thread-141154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] client lang: <none>
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] server lang: <none>
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] kex follows: False
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:55:25.983 [DEBUG] [Thread-141154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:55:25.984 [DEBUG] [Thread-141154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:55:25.984 [DEBUG] [Thread-141154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:55:25.984 [DEBUG] [Thread-141154] [transport.py] [_log()] Compression: none
2026-02-12T03:55:25.984 [DEBUG] [Thread-141154] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:55:26.003 [DEBUG] [Thread-141154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:55:26.004 [DEBUG] [Thread-141154] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:55:26.004 [DEBUG] [Thread-141154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:55:26.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:55:26.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:55:26.006 [DEBUG] [Thread-141154] [transport.py] [_log()] userauth is OK
2026-02-12T03:55:26.006 [DEBUG] [Thread-141154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:55:26.007 [DEBUG] [Thread-141154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:55:26.007 [DEBUG] [Thread-141154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:55:26.007 [DEBUG] [Thread-141154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:55:26.029 [INFO] [Thread-141154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:55:26.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:55:26.656 [DEBUG] [Thread-141154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:55:26.657 [DEBUG] [Thread-141154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:55:26.657 [DEBUG] [Thread-141154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:55:26.697 [DEBUG] [Thread-141154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:55:26.697 [DEBUG] [Thread-141154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:55:26.700 [DEBUG] [Thread-141154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:55:26.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:55:26.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:55:26.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:55:26.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:55:26.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:55:26.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:55:26.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:55:26.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:55:26.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:55:26.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.079991 -999.00  +13.60  26.40     95  +12.80 1 3 1 3 1     0    0 0.68 -9.83 ----- 26.4 26.4 147.2 35.7 15.0 -1.4 15.0 -1.5 14.8 -1.4 15.1 -1.5
2026-02-12T03:55:26.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:55:26.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:55:26.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.079991
2026-02-12T03:55:26.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:55:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:55:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:55:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:55:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:55:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:55:02', tmtdew=0.41, humidity=97.2, cloud=0.0, wind=27.23, temperature=13.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:55:11.222', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:55:26.727 [DEBUG] [Thread-141154] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:55:26.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:55:26.827 [DEBUG] [Thread-141157] [transport.py] [_log()] starting thread (client mode): 0xa575a350
2026-02-12T03:55:26.827 [DEBUG] [Thread-141157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:55:26.841 [DEBUG] [Thread-141157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:55:26.841 [INFO] [Thread-141157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:55:26.848 [DEBUG] [Thread-141157] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:55:26.848 [DEBUG] [Thread-141157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] client lang: <none>
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] server lang: <none>
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] kex follows: False
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:55:26.849 [DEBUG] [Thread-141157] [transport.py] [_log()] Compression: none
2026-02-12T03:55:26.850 [DEBUG] [Thread-141157] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:55:26.907 [DEBUG] [Thread-141157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:55:26.907 [DEBUG] [Thread-141157] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:55:26.908 [DEBUG] [Thread-141157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:55:26.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:55:26.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:55:26.969 [DEBUG] [Thread-141157] [transport.py] [_log()] userauth is OK
2026-02-12T03:55:26.970 [DEBUG] [Thread-141157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:55:26.970 [DEBUG] [Thread-141157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:55:26.970 [DEBUG] [Thread-141157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:55:26.970 [DEBUG] [Thread-141157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:55:26.988 [INFO] [Thread-141157] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:55:26.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:55:26.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:55:27.775 [DEBUG] [Thread-141157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:55:27.775 [DEBUG] [Thread-141157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:55:27.823 [DEBUG] [Thread-141157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:55:27.824 [DEBUG] [Thread-141157] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:55:27.833 [DEBUG] [Thread-141157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:55:27.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:55:27.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:55:27.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:55:27.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:55:27.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:55:27.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:55:27.869 [DEBUG] [Thread-141157] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:55:36.544 [DEBUG] [Thread-141159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:55:48.969 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:55:48.971 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:55:51.598 [DEBUG] [Thread-141160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:55:57.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:55:57.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:55:57.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:55:59.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 55, 37), 0.69, 95.56, 0.0, 31.83, 14.23, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:55:59.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:55:37
2026-02-12T03:56:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:56:00.310 [DEBUG] [Thread-141161] [transport.py] [_log()] starting thread (client mode): 0xa2db4bb0
2026-02-12T03:56:00.310 [DEBUG] [Thread-141161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:56:00.331 [DEBUG] [Thread-141161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:56:00.331 [INFO] [Thread-141161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] client lang: <none>
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] server lang: <none>
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] kex follows: False
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] Compression: none
2026-02-12T03:56:00.335 [DEBUG] [Thread-141161] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:56:00.353 [DEBUG] [Thread-141161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:56:00.354 [DEBUG] [Thread-141161] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:56:00.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:56:00.355 [DEBUG] [Thread-141161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:56:00.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:56:00.357 [DEBUG] [Thread-141161] [transport.py] [_log()] userauth is OK
2026-02-12T03:56:00.357 [DEBUG] [Thread-141161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:56:00.358 [DEBUG] [Thread-141161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:56:00.358 [DEBUG] [Thread-141161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:56:00.358 [DEBUG] [Thread-141161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:56:00.381 [INFO] [Thread-141161] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:56:00.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:56:01.021 [DEBUG] [Thread-141161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:56:01.021 [DEBUG] [Thread-141161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:56:01.021 [DEBUG] [Thread-141161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:56:01.062 [DEBUG] [Thread-141161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:56:01.063 [DEBUG] [Thread-141161] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:56:01.066 [DEBUG] [Thread-141161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:56:01.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:56:01.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:56:01.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:56:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:56:01.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:56:01.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:56:01.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:56:01.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:56:01.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:56:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.080338 -999.00  +13.60  26.90     95  +12.80 1 3 1 3 1     0    0 0.64 -10.76 ----- 26.9 26.9 143.0 33.3 15.0 -1.4 14.9 -1.3 14.8 -1.7 15.1 -1.5
2026-02-12T03:56:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:56:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:56:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.080338
2026-02-12T03:56:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:56:01.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:56:01.094 [DEBUG] [Thread-141161] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:56:01.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:56:01.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:56:01.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:56:01.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:55:37', tmtdew=0.69, humidity=95.56, cloud=0.0, wind=31.83, temperature=14.23, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:55:41.203', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:56:01.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:56:01.190 [DEBUG] [Thread-141164] [transport.py] [_log()] starting thread (client mode): 0xa81d5690
2026-02-12T03:56:01.191 [DEBUG] [Thread-141164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:56:01.206 [DEBUG] [Thread-141164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:56:01.206 [INFO] [Thread-141164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:56:01.213 [DEBUG] [Thread-141164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] client lang: <none>
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] server lang: <none>
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] kex follows: False
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:56:01.214 [DEBUG] [Thread-141164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:56:01.215 [DEBUG] [Thread-141164] [transport.py] [_log()] Compression: none
2026-02-12T03:56:01.215 [DEBUG] [Thread-141164] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:56:01.271 [DEBUG] [Thread-141164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:56:01.271 [DEBUG] [Thread-141164] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:56:01.272 [DEBUG] [Thread-141164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:56:01.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:56:01.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:56:01.326 [DEBUG] [Thread-141164] [transport.py] [_log()] userauth is OK
2026-02-12T03:56:01.327 [DEBUG] [Thread-141164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:56:01.327 [DEBUG] [Thread-141164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:56:01.327 [DEBUG] [Thread-141164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:56:01.327 [DEBUG] [Thread-141164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:56:01.345 [INFO] [Thread-141164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:56:01.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:56:01.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:56:02.174 [DEBUG] [Thread-141164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:56:02.174 [DEBUG] [Thread-141164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:56:02.223 [DEBUG] [Thread-141164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:56:02.223 [DEBUG] [Thread-141164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:56:02.232 [DEBUG] [Thread-141164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:56:02.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:56:02.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:56:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:56:02.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:56:02.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:56:02.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:56:02.269 [DEBUG] [Thread-141164] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:56:06.636 [DEBUG] [Thread-141166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:56:12.806 [DEBUG] [Thread-141167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:56:21.695 [DEBUG] [Thread-141168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:56:32.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:56:32.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:56:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:56:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 56, 12), 0.39, 97.3, 0.0, 31.18, 13.76, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:56:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:56:12
2026-02-12T03:56:34.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:56:34.655 [DEBUG] [Thread-141169] [transport.py] [_log()] starting thread (client mode): 0xa2db7790
2026-02-12T03:56:34.655 [DEBUG] [Thread-141169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:56:34.675 [DEBUG] [Thread-141169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:56:34.675 [INFO] [Thread-141169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:56:34.679 [DEBUG] [Thread-141169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] client lang: <none>
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] server lang: <none>
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] kex follows: False
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] Compression: none
2026-02-12T03:56:34.680 [DEBUG] [Thread-141169] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:56:34.697 [DEBUG] [Thread-141169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:56:34.698 [DEBUG] [Thread-141169] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:56:34.698 [DEBUG] [Thread-141169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:56:34.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:56:34.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:56:34.741 [DEBUG] [Thread-141169] [transport.py] [_log()] userauth is OK
2026-02-12T03:56:34.741 [DEBUG] [Thread-141169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:56:34.741 [DEBUG] [Thread-141169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:56:34.741 [DEBUG] [Thread-141169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:56:34.741 [DEBUG] [Thread-141169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:56:34.773 [INFO] [Thread-141169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:56:34.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:56:35.419 [DEBUG] [Thread-141169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:56:35.419 [DEBUG] [Thread-141169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:56:35.420 [DEBUG] [Thread-141169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:56:35.460 [DEBUG] [Thread-141169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:56:35.461 [DEBUG] [Thread-141169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:56:35.464 [DEBUG] [Thread-141169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:56:35.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:56:35.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:56:35.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:56:35.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:56:35.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:56:35.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:56:35.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:56:35.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:56:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:56:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.080685 -999.00  +13.50  31.05     95  +12.80 1 3 2 3 1     0    0 0.61 -11.50 ----- 31.1 31.1 139.6 34.7 14.9 -1.3 14.9 -1.3 14.8 -1.6 15.1 -1.5
2026-02-12T03:56:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:56:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:56:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.080685
2026-02-12T03:56:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:56:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:56:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:56:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:56:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:56:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:56:12', tmtdew=0.39, humidity=97.3, cloud=0.0, wind=31.18, temperature=13.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:56:11.184', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:56:35.486 [DEBUG] [Thread-141169] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:56:35.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:56:35.573 [DEBUG] [Thread-141172] [transport.py] [_log()] starting thread (client mode): 0xa5740d60
2026-02-12T03:56:35.573 [DEBUG] [Thread-141172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:56:35.588 [DEBUG] [Thread-141172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:56:35.588 [INFO] [Thread-141172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:56:35.595 [DEBUG] [Thread-141172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:56:35.595 [DEBUG] [Thread-141172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] client lang: <none>
2026-02-12T03:56:35.596 [DEBUG] [Thread-141172] [transport.py] [_log()] server lang: <none>
2026-02-12T03:56:35.597 [DEBUG] [Thread-141172] [transport.py] [_log()] kex follows: False
2026-02-12T03:56:35.597 [DEBUG] [Thread-141172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:56:35.597 [DEBUG] [Thread-141172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:56:35.597 [DEBUG] [Thread-141172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:56:35.597 [DEBUG] [Thread-141172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:56:35.597 [DEBUG] [Thread-141172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:56:35.597 [DEBUG] [Thread-141172] [transport.py] [_log()] Compression: none
2026-02-12T03:56:35.598 [DEBUG] [Thread-141172] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:56:35.654 [DEBUG] [Thread-141172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:56:35.655 [DEBUG] [Thread-141172] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:56:35.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:56:35.656 [DEBUG] [Thread-141172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:56:35.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:56:35.711 [DEBUG] [Thread-141172] [transport.py] [_log()] userauth is OK
2026-02-12T03:56:35.711 [DEBUG] [Thread-141172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:56:35.711 [DEBUG] [Thread-141172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:56:35.711 [DEBUG] [Thread-141172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:56:35.711 [DEBUG] [Thread-141172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:56:35.730 [INFO] [Thread-141172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:56:35.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:56:35.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:56:36.537 [DEBUG] [Thread-141172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:56:36.537 [DEBUG] [Thread-141172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:56:36.585 [DEBUG] [Thread-141172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:56:36.585 [DEBUG] [Thread-141172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:56:36.594 [DEBUG] [Thread-141172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:56:36.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:56:36.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:56:36.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:56:36.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:56:36.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:56:36.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:56:36.632 [DEBUG] [Thread-141172] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:56:36.727 [DEBUG] [Thread-141174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:56:49.169 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:56:49.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:56:51.776 [DEBUG] [Thread-141175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:57:06.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:57:06.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:57:06.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
2026-02-12T03:57:06.814 [DEBUG] [Thread-141176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:57:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 56, 48), 0.39, 97.33, 0.0, 29.27, 13.8, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:57:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:56:48
2026-02-12T03:57:09.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:57:09.179 [DEBUG] [Thread-141177] [transport.py] [_log()] starting thread (client mode): 0xa5741600
2026-02-12T03:57:09.179 [DEBUG] [Thread-141177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:57:09.199 [DEBUG] [Thread-141177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:57:09.199 [INFO] [Thread-141177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:57:09.203 [DEBUG] [Thread-141177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:57:09.203 [DEBUG] [Thread-141177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] client lang: <none>
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] server lang: <none>
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] kex follows: False
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:57:09.204 [DEBUG] [Thread-141177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:57:09.205 [DEBUG] [Thread-141177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:57:09.205 [DEBUG] [Thread-141177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:57:09.205 [DEBUG] [Thread-141177] [transport.py] [_log()] Compression: none
2026-02-12T03:57:09.205 [DEBUG] [Thread-141177] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:57:09.221 [DEBUG] [Thread-141177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:57:09.222 [DEBUG] [Thread-141177] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:57:09.222 [DEBUG] [Thread-141177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:57:09.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:57:09.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:57:09.265 [DEBUG] [Thread-141177] [transport.py] [_log()] userauth is OK
2026-02-12T03:57:09.265 [DEBUG] [Thread-141177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:57:09.274 [DEBUG] [Thread-141177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:57:09.275 [DEBUG] [Thread-141177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:57:09.275 [DEBUG] [Thread-141177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:57:09.306 [INFO] [Thread-141177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:57:09.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:57:09.957 [DEBUG] [Thread-141177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:57:09.958 [DEBUG] [Thread-141177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:57:09.958 [DEBUG] [Thread-141177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:57:09.998 [DEBUG] [Thread-141177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:57:09.999 [DEBUG] [Thread-141177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:57:10.002 [DEBUG] [Thread-141177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:57:10.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:57:10.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:57:10.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:57:10.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:57:10.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:57:10.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:57:10.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:57:10.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:57:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:57:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.081033 -999.00  +13.50  23.95     95  +12.80 1 3 1 3 1     0    0 0.58 -12.90 ----- 23.9 23.9 143.5 34.2 14.9 -1.2 14.8 -1.3 14.7 -1.7 15.1 -1.5
2026-02-12T03:57:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:57:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:57:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.081033
2026-02-12T03:57:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:57:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:57:10.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:57:10.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:57:10.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:57:10.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:56:48', tmtdew=0.39, humidity=97.33, cloud=0.0, wind=29.27, temperature=13.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:56:41.251', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:57:10.028 [DEBUG] [Thread-141177] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:57:10.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:57:10.126 [DEBUG] [Thread-141180] [transport.py] [_log()] starting thread (client mode): 0x9eb06530
2026-02-12T03:57:10.127 [DEBUG] [Thread-141180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:57:10.141 [DEBUG] [Thread-141180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:57:10.142 [INFO] [Thread-141180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:57:10.149 [DEBUG] [Thread-141180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:57:10.150 [DEBUG] [Thread-141180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:57:10.151 [DEBUG] [Thread-141180] [transport.py] [_log()] client lang: <none>
2026-02-12T03:57:10.151 [DEBUG] [Thread-141180] [transport.py] [_log()] server lang: <none>
2026-02-12T03:57:10.151 [DEBUG] [Thread-141180] [transport.py] [_log()] kex follows: False
2026-02-12T03:57:10.151 [DEBUG] [Thread-141180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:57:10.151 [DEBUG] [Thread-141180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:57:10.151 [DEBUG] [Thread-141180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:57:10.151 [DEBUG] [Thread-141180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:57:10.152 [DEBUG] [Thread-141180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:57:10.152 [DEBUG] [Thread-141180] [transport.py] [_log()] Compression: none
2026-02-12T03:57:10.152 [DEBUG] [Thread-141180] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:57:10.211 [DEBUG] [Thread-141180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:57:10.212 [DEBUG] [Thread-141180] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:57:10.212 [DEBUG] [Thread-141180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:57:10.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:57:10.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:57:10.267 [DEBUG] [Thread-141180] [transport.py] [_log()] userauth is OK
2026-02-12T03:57:10.267 [DEBUG] [Thread-141180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:57:10.267 [DEBUG] [Thread-141180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:57:10.267 [DEBUG] [Thread-141180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:57:10.267 [DEBUG] [Thread-141180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:57:10.286 [INFO] [Thread-141180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:57:10.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:57:10.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:57:11.076 [DEBUG] [Thread-141180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:57:11.076 [DEBUG] [Thread-141180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:57:11.124 [DEBUG] [Thread-141180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:57:11.125 [DEBUG] [Thread-141180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:57:11.134 [DEBUG] [Thread-141180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:57:11.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:57:11.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:57:11.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:57:11.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:57:11.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:57:11.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:57:11.170 [DEBUG] [Thread-141180] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:57:12.894 [DEBUG] [Thread-141182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:57:21.853 [DEBUG] [Thread-141183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:57:36.914 [DEBUG] [Thread-141184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:57:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:57:41.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:57:41.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:57:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 57, 24), 0.39, 97.33, 0.0, 26.87, 13.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:57:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:57:24
2026-02-12T03:57:43.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:57:43.631 [DEBUG] [Thread-141185] [transport.py] [_log()] starting thread (client mode): 0xa5742d40
2026-02-12T03:57:43.632 [DEBUG] [Thread-141185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:57:43.653 [DEBUG] [Thread-141185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:57:43.653 [INFO] [Thread-141185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:57:43.656 [DEBUG] [Thread-141185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:57:43.656 [DEBUG] [Thread-141185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] client lang: <none>
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] server lang: <none>
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] kex follows: False
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] Compression: none
2026-02-12T03:57:43.657 [DEBUG] [Thread-141185] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:57:43.673 [DEBUG] [Thread-141185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:57:43.674 [DEBUG] [Thread-141185] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:57:43.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:57:43.675 [DEBUG] [Thread-141185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:57:43.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:57:43.677 [DEBUG] [Thread-141185] [transport.py] [_log()] userauth is OK
2026-02-12T03:57:43.677 [DEBUG] [Thread-141185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:57:43.678 [DEBUG] [Thread-141185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:57:43.678 [DEBUG] [Thread-141185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:57:43.678 [DEBUG] [Thread-141185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:57:43.702 [INFO] [Thread-141185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:57:43.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:57:44.310 [DEBUG] [Thread-141185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:57:44.310 [DEBUG] [Thread-141185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:57:44.311 [DEBUG] [Thread-141185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:57:44.351 [DEBUG] [Thread-141185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:57:44.351 [DEBUG] [Thread-141185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:57:44.354 [DEBUG] [Thread-141185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:57:44.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:57:44.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:57:44.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:57:44.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:57:44.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:57:44.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:57:44.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:57:44.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:57:44.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:57:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.081380 -999.00  +13.50  20.66     95  +12.80 1 3 1 3 1     0    0 0.51 -14.46 ----- 20.7 20.7 145.6 30.4 14.8 -1.3 14.8 -1.3 14.8 -1.4 15.0 -1.5
2026-02-12T03:57:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:57:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:57:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.081380
2026-02-12T03:57:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:57:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:57:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:57:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:57:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:57:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:57:24', tmtdew=0.39, humidity=97.33, cloud=0.0, wind=26.87, temperature=13.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:57:11.232', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:57:44.380 [DEBUG] [Thread-141185] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:57:44.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:57:45.535 [DEBUG] [Thread-141188] [transport.py] [_log()] starting thread (client mode): 0xa575ac50
2026-02-12T03:57:45.535 [DEBUG] [Thread-141188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:57:45.550 [DEBUG] [Thread-141188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:57:45.550 [INFO] [Thread-141188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:57:45.557 [DEBUG] [Thread-141188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:57:45.557 [DEBUG] [Thread-141188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] client lang: <none>
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] server lang: <none>
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] kex follows: False
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] Compression: none
2026-02-12T03:57:45.558 [DEBUG] [Thread-141188] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:57:45.614 [DEBUG] [Thread-141188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:57:45.615 [DEBUG] [Thread-141188] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:57:45.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:57:45.616 [DEBUG] [Thread-141188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:57:45.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:57:45.670 [DEBUG] [Thread-141188] [transport.py] [_log()] userauth is OK
2026-02-12T03:57:45.670 [DEBUG] [Thread-141188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:57:45.670 [DEBUG] [Thread-141188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:57:45.670 [DEBUG] [Thread-141188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:57:45.670 [DEBUG] [Thread-141188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:57:45.688 [INFO] [Thread-141188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:57:45.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:57:45.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:57:46.532 [DEBUG] [Thread-141188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:57:46.532 [DEBUG] [Thread-141188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:57:46.580 [DEBUG] [Thread-141188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:57:46.581 [DEBUG] [Thread-141188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:57:46.590 [DEBUG] [Thread-141188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:57:46.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:57:46.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:57:46.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:57:46.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:57:46.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:57:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:57:46.626 [DEBUG] [Thread-141188] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:57:49.372 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:57:49.374 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:57:51.952 [DEBUG] [Thread-141190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:07.007 [DEBUG] [Thread-141191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:12.969 [DEBUG] [Thread-141192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:58:16.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:58:16.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:58:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 57, 59), 0.38, 97.35, 0.0, 25.36, 13.78, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:58:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:57:59
2026-02-12T03:58:18.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:58:18.989 [DEBUG] [Thread-141193] [transport.py] [_log()] starting thread (client mode): 0xa5759180
2026-02-12T03:58:18.989 [DEBUG] [Thread-141193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:58:19.009 [DEBUG] [Thread-141193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:58:19.009 [INFO] [Thread-141193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:58:19.012 [DEBUG] [Thread-141193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] client lang: <none>
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] server lang: <none>
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] kex follows: False
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] Compression: none
2026-02-12T03:58:19.013 [DEBUG] [Thread-141193] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:58:19.030 [DEBUG] [Thread-141193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:58:19.030 [DEBUG] [Thread-141193] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:58:19.030 [DEBUG] [Thread-141193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:58:19.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:58:19.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:58:19.031 [DEBUG] [Thread-141193] [transport.py] [_log()] userauth is OK
2026-02-12T03:58:19.031 [DEBUG] [Thread-141193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:58:19.031 [DEBUG] [Thread-141193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:58:19.031 [DEBUG] [Thread-141193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:58:19.031 [DEBUG] [Thread-141193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:58:19.040 [INFO] [Thread-141193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:58:19.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:58:19.633 [DEBUG] [Thread-141193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:58:19.633 [DEBUG] [Thread-141193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:58:19.634 [DEBUG] [Thread-141193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:58:19.674 [DEBUG] [Thread-141193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:58:19.675 [DEBUG] [Thread-141193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:58:19.678 [DEBUG] [Thread-141193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:58:19.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:58:19.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:58:19.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:58:19.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:58:19.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:58:19.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:58:19.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:58:19.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:58:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:58:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.081727 -999.00  +13.50  20.69     95  +12.80 1 3 1 3 1     0    0 0.48 -15.27 ----- 20.7 20.7 151.0 29.5 14.8 -1.3 14.8 -1.3 14.7 -1.5 15.0 -1.5
2026-02-12T03:58:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:58:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:58:19.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.081727
2026-02-12T03:58:19.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:58:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:58:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:58:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:58:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:58:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:57:59', tmtdew=0.38, humidity=97.35, cloud=0.0, wind=25.36, temperature=13.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:57:41.213', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:58:19.707 [DEBUG] [Thread-141193] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:58:19.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:58:19.803 [DEBUG] [Thread-141196] [transport.py] [_log()] starting thread (client mode): 0xa2d02f20
2026-02-12T03:58:19.803 [DEBUG] [Thread-141196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:58:19.817 [DEBUG] [Thread-141196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:58:19.818 [INFO] [Thread-141196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:58:19.825 [DEBUG] [Thread-141196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:58:19.825 [DEBUG] [Thread-141196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] client lang: <none>
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] server lang: <none>
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] kex follows: False
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] Compression: none
2026-02-12T03:58:19.826 [DEBUG] [Thread-141196] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:58:19.882 [DEBUG] [Thread-141196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:58:19.882 [DEBUG] [Thread-141196] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:58:19.883 [DEBUG] [Thread-141196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:58:19.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:58:19.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:58:19.938 [DEBUG] [Thread-141196] [transport.py] [_log()] userauth is OK
2026-02-12T03:58:19.939 [DEBUG] [Thread-141196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:58:19.939 [DEBUG] [Thread-141196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:58:19.939 [DEBUG] [Thread-141196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:58:19.939 [DEBUG] [Thread-141196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:58:19.958 [INFO] [Thread-141196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:58:19.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:58:19.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:58:20.790 [DEBUG] [Thread-141196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:58:20.791 [DEBUG] [Thread-141196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:58:20.838 [DEBUG] [Thread-141196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:58:20.839 [DEBUG] [Thread-141196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:58:20.848 [DEBUG] [Thread-141196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:58:20.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:58:20.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:58:20.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:58:20.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:58:20.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:58:20.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:58:20.885 [DEBUG] [Thread-141196] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:58:22.041 [DEBUG] [Thread-141198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:37.081 [DEBUG] [Thread-141199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:49.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:49.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:58:50.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:58:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:58:52.117 [DEBUG] [Thread-141200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:58:52.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 58, 35), 0.66, 95.69, 0.0, 27.56, 14.13, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:58:52.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:58:35
2026-02-12T03:58:53.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:58:53.298 [DEBUG] [Thread-141201] [transport.py] [_log()] starting thread (client mode): 0xa5771210
2026-02-12T03:58:53.298 [DEBUG] [Thread-141201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:58:53.319 [DEBUG] [Thread-141201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:58:53.319 [INFO] [Thread-141201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:53.322 [DEBUG] [Thread-141201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] client lang: <none>
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] server lang: <none>
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] kex follows: False
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] Compression: none
2026-02-12T03:58:53.323 [DEBUG] [Thread-141201] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:58:53.340 [DEBUG] [Thread-141201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:58:53.340 [DEBUG] [Thread-141201] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:58:53.341 [DEBUG] [Thread-141201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:58:53.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:58:53.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:58:53.343 [DEBUG] [Thread-141201] [transport.py] [_log()] userauth is OK
2026-02-12T03:58:53.343 [DEBUG] [Thread-141201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:58:53.343 [DEBUG] [Thread-141201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:58:53.343 [DEBUG] [Thread-141201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:58:53.343 [DEBUG] [Thread-141201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:58:53.363 [INFO] [Thread-141201] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:58:53.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:58:54.008 [DEBUG] [Thread-141201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:58:54.008 [DEBUG] [Thread-141201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:58:54.009 [DEBUG] [Thread-141201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:58:54.049 [DEBUG] [Thread-141201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:58:54.049 [DEBUG] [Thread-141201] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:58:54.053 [DEBUG] [Thread-141201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:58:54.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:58:54.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:58:54.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:58:54.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:58:54.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:58:54.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:58:54.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:58:54.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:58:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:58:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.082074 -999.00  +13.50  18.70     95  +12.80 1 3 1 3 1     0    0 0.41 -17.13 ----- 18.7 18.7 155.6 26.9 14.8 -1.3 14.7 -1.1 14.7 -1.4 14.9 -1.4
2026-02-12T03:58:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:58:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:58:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.082074
2026-02-12T03:58:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:58:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:58:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:58:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:58:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:58:54.081 [DEBUG] [Thread-141201] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:58:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:58:35', tmtdew=0.66, humidity=95.69, cloud=0.0, wind=27.56, temperature=14.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:58:11.194', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:58:54.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:58:54.178 [DEBUG] [Thread-141204] [transport.py] [_log()] starting thread (client mode): 0xa5759210
2026-02-12T03:58:54.178 [DEBUG] [Thread-141204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:58:54.193 [DEBUG] [Thread-141204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:58:54.193 [INFO] [Thread-141204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:58:54.200 [DEBUG] [Thread-141204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] client lang: <none>
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] server lang: <none>
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] kex follows: False
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:58:54.201 [DEBUG] [Thread-141204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:58:54.202 [DEBUG] [Thread-141204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:58:54.202 [DEBUG] [Thread-141204] [transport.py] [_log()] Compression: none
2026-02-12T03:58:54.202 [DEBUG] [Thread-141204] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:58:54.258 [DEBUG] [Thread-141204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:58:54.258 [DEBUG] [Thread-141204] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:58:54.259 [DEBUG] [Thread-141204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:58:54.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:58:54.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:58:54.314 [DEBUG] [Thread-141204] [transport.py] [_log()] userauth is OK
2026-02-12T03:58:54.315 [DEBUG] [Thread-141204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:58:54.315 [DEBUG] [Thread-141204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:58:54.315 [DEBUG] [Thread-141204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:58:54.315 [DEBUG] [Thread-141204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:58:54.334 [INFO] [Thread-141204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:58:54.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:58:54.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:58:55.142 [DEBUG] [Thread-141204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:58:55.142 [DEBUG] [Thread-141204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:58:55.190 [DEBUG] [Thread-141204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:58:55.191 [DEBUG] [Thread-141204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:58:55.200 [DEBUG] [Thread-141204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:58:55.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:58:55.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:58:55.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:58:55.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:58:55.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:58:55.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:58:55.237 [DEBUG] [Thread-141204] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:59:07.154 [DEBUG] [Thread-141206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:59:13.026 [DEBUG] [Thread-141207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:59:22.206 [DEBUG] [Thread-141208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:59:25.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T03:59:25.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T03:59:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T03:59:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 59, 11), 0.37, 97.41, 0.0, 27.6, 13.71, 2, 2, 0, 2, 0, 0),)
2026-02-12T03:59:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:59:11
2026-02-12T03:59:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T03:59:28.032 [DEBUG] [Thread-141209] [transport.py] [_log()] starting thread (client mode): 0xa81d6710
2026-02-12T03:59:28.032 [DEBUG] [Thread-141209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:59:28.053 [DEBUG] [Thread-141209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T03:59:28.053 [INFO] [Thread-141209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] client lang: <none>
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] server lang: <none>
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] kex follows: False
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] Compression: none
2026-02-12T03:59:28.056 [DEBUG] [Thread-141209] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:59:28.074 [DEBUG] [Thread-141209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:59:28.074 [DEBUG] [Thread-141209] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:59:28.075 [DEBUG] [Thread-141209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T03:59:28.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T03:59:28.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:59:28.084 [DEBUG] [Thread-141209] [transport.py] [_log()] userauth is OK
2026-02-12T03:59:28.085 [DEBUG] [Thread-141209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:59:28.085 [DEBUG] [Thread-141209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:59:28.085 [DEBUG] [Thread-141209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T03:59:28.085 [DEBUG] [Thread-141209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:59:28.120 [INFO] [Thread-141209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:59:28.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:59:28.762 [DEBUG] [Thread-141209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:59:28.762 [DEBUG] [Thread-141209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:59:28.763 [DEBUG] [Thread-141209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T03:59:28.803 [DEBUG] [Thread-141209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:59:28.804 [DEBUG] [Thread-141209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:59:28.807 [DEBUG] [Thread-141209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:59:28.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:59:28.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T03:59:28.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T03:59:28.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T03:59:28.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:59:28.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T03:59:28.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:59:28.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:59:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T03:59:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.082769 -999.00  +13.60  26.04     95  +12.90 1 3 1 3 1     0    0 0.34 -19.14 ----- 26.0 26.0 144.0 34.3 14.8 -1.0 14.7 -1.0 14.7 -1.3 14.9 -1.3
2026-02-12T03:59:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T03:59:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T03:59:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.082769
2026-02-12T03:59:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T03:59:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T03:59:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T03:59:28.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T03:59:28.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T03:59:28.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:59:11', tmtdew=0.37, humidity=97.41, cloud=0.0, wind=27.6, temperature=13.71, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:59:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T03:59:28.837 [DEBUG] [Thread-141209] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:59:28.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T03:59:28.939 [DEBUG] [Thread-141212] [transport.py] [_log()] starting thread (client mode): 0xa2d7a500
2026-02-12T03:59:28.939 [DEBUG] [Thread-141212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T03:59:28.953 [DEBUG] [Thread-141212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T03:59:28.954 [INFO] [Thread-141212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T03:59:28.961 [DEBUG] [Thread-141212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] client lang: <none>
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] server lang: <none>
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] kex follows: False
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T03:59:28.962 [DEBUG] [Thread-141212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T03:59:28.963 [DEBUG] [Thread-141212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T03:59:28.963 [DEBUG] [Thread-141212] [transport.py] [_log()] Compression: none
2026-02-12T03:59:28.963 [DEBUG] [Thread-141212] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T03:59:29.022 [DEBUG] [Thread-141212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T03:59:29.022 [DEBUG] [Thread-141212] [transport.py] [_log()] Switch to new keys ...
2026-02-12T03:59:29.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T03:59:29.023 [DEBUG] [Thread-141212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T03:59:29.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T03:59:29.082 [DEBUG] [Thread-141212] [transport.py] [_log()] userauth is OK
2026-02-12T03:59:29.082 [DEBUG] [Thread-141212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T03:59:29.082 [DEBUG] [Thread-141212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T03:59:29.083 [DEBUG] [Thread-141212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T03:59:29.083 [DEBUG] [Thread-141212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T03:59:29.096 [INFO] [Thread-141212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T03:59:29.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T03:59:29.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T03:59:29.960 [DEBUG] [Thread-141212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T03:59:29.960 [DEBUG] [Thread-141212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T03:59:30.009 [DEBUG] [Thread-141212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T03:59:30.009 [DEBUG] [Thread-141212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T03:59:30.018 [DEBUG] [Thread-141212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T03:59:30.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T03:59:30.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T03:59:30.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T03:59:30.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T03:59:30.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T03:59:30.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T03:59:30.055 [DEBUG] [Thread-141212] [transport.py] [_log()] EOF in transport thread
2026-02-12T03:59:37.244 [DEBUG] [Thread-141214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:59:49.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:59:49.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T03:59:52.301 [DEBUG] [Thread-141215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:00:00.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T04:00:00.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T04:00:00.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
2026-02-12T04:00:01.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 3, 59, 47), 0.37, 97.43, 0.0, 27.75, 13.76, 2, 2, 0, 2, 0, 0),)
2026-02-12T04:00:01.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 03:59:47
2026-02-12T04:00:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T04:00:02.354 [DEBUG] [Thread-141216] [transport.py] [_log()] starting thread (client mode): 0xa2d79c30
2026-02-12T04:00:02.354 [DEBUG] [Thread-141216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T04:00:02.372 [DEBUG] [Thread-141216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T04:00:02.373 [INFO] [Thread-141216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] client lang: <none>
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] server lang: <none>
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] kex follows: False
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T04:00:02.376 [DEBUG] [Thread-141216] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T04:00:02.377 [DEBUG] [Thread-141216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T04:00:02.377 [DEBUG] [Thread-141216] [transport.py] [_log()] Compression: none
2026-02-12T04:00:02.377 [DEBUG] [Thread-141216] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T04:00:02.393 [DEBUG] [Thread-141216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T04:00:02.394 [DEBUG] [Thread-141216] [transport.py] [_log()] Switch to new keys ...
2026-02-12T04:00:02.394 [DEBUG] [Thread-141216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T04:00:02.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T04:00:02.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T04:00:02.396 [DEBUG] [Thread-141216] [transport.py] [_log()] userauth is OK
2026-02-12T04:00:02.396 [DEBUG] [Thread-141216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T04:00:02.397 [DEBUG] [Thread-141216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T04:00:02.397 [DEBUG] [Thread-141216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T04:00:02.397 [DEBUG] [Thread-141216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T04:00:02.421 [INFO] [Thread-141216] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T04:00:02.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T04:00:03.054 [DEBUG] [Thread-141216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T04:00:03.054 [DEBUG] [Thread-141216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T04:00:03.054 [DEBUG] [Thread-141216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T04:00:03.095 [DEBUG] [Thread-141216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T04:00:03.095 [DEBUG] [Thread-141216] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T04:00:03.097 [DEBUG] [Thread-141216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T04:00:03.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T04:00:03.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T04:00:03.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T04:00:03.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T04:00:03.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T04:00:03.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T04:00:03.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.083116 -999.00  +13.50  21.02     95  +12.80 1 3 1 3 1     0    0 0.33 -19.23 ----- 21.0 21.0 146.6 30.7 14.8 -1.3 14.7 -1.1 14.7 -1.4 14.9 -1.3
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.083116
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T04:00:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T03:59:47', tmtdew=0.37, humidity=97.43, cloud=0.0, wind=27.75, temperature=13.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T01:59:41.222', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T04:00:03.144 [DEBUG] [Thread-141216] [transport.py] [_log()] EOF in transport thread
2026-02-12T04:00:03.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T04:00:03.230 [DEBUG] [Thread-141219] [transport.py] [_log()] starting thread (client mode): 0xa575bf70
2026-02-12T04:00:03.230 [DEBUG] [Thread-141219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T04:00:03.244 [DEBUG] [Thread-141219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T04:00:03.244 [INFO] [Thread-141219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] client lang: <none>
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] server lang: <none>
2026-02-12T04:00:03.251 [DEBUG] [Thread-141219] [transport.py] [_log()] kex follows: False
2026-02-12T04:00:03.252 [DEBUG] [Thread-141219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T04:00:03.252 [DEBUG] [Thread-141219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T04:00:03.252 [DEBUG] [Thread-141219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T04:00:03.252 [DEBUG] [Thread-141219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T04:00:03.252 [DEBUG] [Thread-141219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T04:00:03.252 [DEBUG] [Thread-141219] [transport.py] [_log()] Compression: none
2026-02-12T04:00:03.252 [DEBUG] [Thread-141219] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T04:00:03.310 [DEBUG] [Thread-141219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T04:00:03.311 [DEBUG] [Thread-141219] [transport.py] [_log()] Switch to new keys ...
2026-02-12T04:00:03.311 [DEBUG] [Thread-141219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T04:00:03.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T04:00:03.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T04:00:03.366 [DEBUG] [Thread-141219] [transport.py] [_log()] userauth is OK
2026-02-12T04:00:03.367 [DEBUG] [Thread-141219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T04:00:03.367 [DEBUG] [Thread-141219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T04:00:03.367 [DEBUG] [Thread-141219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T04:00:03.367 [DEBUG] [Thread-141219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T04:00:03.390 [INFO] [Thread-141219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T04:00:03.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T04:00:03.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T04:00:04.202 [DEBUG] [Thread-141219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T04:00:04.202 [DEBUG] [Thread-141219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T04:00:04.250 [DEBUG] [Thread-141219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T04:00:04.250 [DEBUG] [Thread-141219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T04:00:04.259 [DEBUG] [Thread-141219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T04:00:04.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T04:00: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')
2026-02-12T04:00:04.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T04:00:04.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T04:00:04.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T04:00:04.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T04:00:04.296 [DEBUG] [Thread-141219] [transport.py] [_log()] EOF in transport thread
2026-02-12T04:00:07.337 [DEBUG] [Thread-141221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:00:13.088 [DEBUG] [Thread-141222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:00:22.389 [DEBUG] [Thread-141223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:00:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T04:00:34.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T04:00:34.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T04:00:36.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 4, 0, 22), 0.37, 97.41, 0.0, 28.28, 13.73, 2, 2, 0, 2, 0, 0),)
2026-02-12T04:00:36.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 04:00:22
2026-02-12T04:00:36.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T04:00:36.631 [DEBUG] [Thread-141224] [transport.py] [_log()] starting thread (client mode): 0x9eb04550
2026-02-12T04:00:36.631 [DEBUG] [Thread-141224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T04:00:36.652 [DEBUG] [Thread-141224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T04:00:36.652 [INFO] [Thread-141224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] client lang: <none>
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] server lang: <none>
2026-02-12T04:00:36.656 [DEBUG] [Thread-141224] [transport.py] [_log()] kex follows: False
2026-02-12T04:00:36.657 [DEBUG] [Thread-141224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T04:00:36.657 [DEBUG] [Thread-141224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T04:00:36.657 [DEBUG] [Thread-141224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T04:00:36.657 [DEBUG] [Thread-141224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T04:00:36.657 [DEBUG] [Thread-141224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T04:00:36.657 [DEBUG] [Thread-141224] [transport.py] [_log()] Compression: none
2026-02-12T04:00:36.657 [DEBUG] [Thread-141224] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T04:00:36.673 [DEBUG] [Thread-141224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T04:00:36.674 [DEBUG] [Thread-141224] [transport.py] [_log()] Switch to new keys ...
2026-02-12T04:00:36.674 [DEBUG] [Thread-141224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T04:00:36.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T04:00:36.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T04:00:36.675 [DEBUG] [Thread-141224] [transport.py] [_log()] userauth is OK
2026-02-12T04:00:36.676 [DEBUG] [Thread-141224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T04:00:36.676 [DEBUG] [Thread-141224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T04:00:36.676 [DEBUG] [Thread-141224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T04:00:36.676 [DEBUG] [Thread-141224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T04:00:36.711 [INFO] [Thread-141224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T04:00:36.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T04:00:37.373 [DEBUG] [Thread-141224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T04:00:37.374 [DEBUG] [Thread-141224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T04:00:37.374 [DEBUG] [Thread-141224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T04:00:37.415 [DEBUG] [Thread-141224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T04:00:37.415 [DEBUG] [Thread-141224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T04:00:37.419 [DEBUG] [Thread-141224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T04:00:37.424 [DEBUG] [Thread-141226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:00:37.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T04:00:37.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T04:00:37.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T04:00:37.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T04:00:37.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T04:00:37.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T04:00:37.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T04:00:37.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T04:00:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T04:00:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.083463 -999.00  +13.50  20.13     95  +12.80 1 3 1 3 1     0    0 0.28 -20.37 ----- 20.1 20.1 145.4 29.7 14.8 -1.2 14.7 -1.3 14.6 -1.4 14.9 -1.4
2026-02-12T04:00:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T04:00:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T04:00:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.083463
2026-02-12T04:00:37.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T04:00:37.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T04:00:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T04:00:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T04:00:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T04:00:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T04:00:22', tmtdew=0.37, humidity=97.41, cloud=0.0, wind=28.28, temperature=13.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T02:00:11.203', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T04:00:37.445 [DEBUG] [Thread-141224] [transport.py] [_log()] EOF in transport thread
2026-02-12T04:00:37.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T04:00:37.542 [DEBUG] [Thread-141228] [transport.py] [_log()] starting thread (client mode): 0xa2d00040
2026-02-12T04:00:37.542 [DEBUG] [Thread-141228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T04:00:37.560 [DEBUG] [Thread-141228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T04:00:37.560 [INFO] [Thread-141228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T04:00:37.568 [DEBUG] [Thread-141228] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T04:00:37.568 [DEBUG] [Thread-141228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T04:00:37.568 [DEBUG] [Thread-141228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T04:00:37.568 [DEBUG] [Thread-141228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] client lang: <none>
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] server lang: <none>
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] kex follows: False
2026-02-12T04:00:37.569 [DEBUG] [Thread-141228] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T04:00:37.570 [DEBUG] [Thread-141228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T04:00:37.570 [DEBUG] [Thread-141228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T04:00:37.570 [DEBUG] [Thread-141228] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T04:00:37.570 [DEBUG] [Thread-141228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T04:00:37.570 [DEBUG] [Thread-141228] [transport.py] [_log()] Compression: none
2026-02-12T04:00:37.570 [DEBUG] [Thread-141228] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T04:00:37.628 [DEBUG] [Thread-141228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T04:00:37.628 [DEBUG] [Thread-141228] [transport.py] [_log()] Switch to new keys ...
2026-02-12T04:00:37.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T04:00:37.630 [DEBUG] [Thread-141228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T04:00:37.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T04:00:37.687 [DEBUG] [Thread-141228] [transport.py] [_log()] userauth is OK
2026-02-12T04:00:37.687 [DEBUG] [Thread-141228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T04:00:37.688 [DEBUG] [Thread-141228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T04:00:37.688 [DEBUG] [Thread-141228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T04:00:37.688 [DEBUG] [Thread-141228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T04:00:37.707 [INFO] [Thread-141228] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T04:00:37.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T04:00:37.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T04:00:38.511 [DEBUG] [Thread-141228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T04:00:38.515 [DEBUG] [Thread-141228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T04:00:38.559 [DEBUG] [Thread-141228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T04:00:38.559 [DEBUG] [Thread-141228] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T04:00:38.569 [DEBUG] [Thread-141228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T04:00:38.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T04:00:38.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T04:00: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') -> 00000000
2026-02-12T04:00:38.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T04:00:38.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T04:00:38.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T04:00:38.604 [DEBUG] [Thread-141228] [transport.py] [_log()] EOF in transport thread
2026-02-12T04:00:49.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:00:49.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:00:52.462 [DEBUG] [Thread-141230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:01:07.531 [DEBUG] [Thread-141231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:01:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T04:01:08.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T04:01:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T04:01:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 4, 0, 58), 0.37, 97.43, 0.0, 30.0, 13.65, 2, 2, 0, 2, 0, 0),)
2026-02-12T04:01:10.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 04:00:58
2026-02-12T04:01:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T04:01:11.571 [DEBUG] [Thread-141232] [transport.py] [_log()] starting thread (client mode): 0xa2d00280
2026-02-12T04:01:11.572 [DEBUG] [Thread-141232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T04:01:11.591 [DEBUG] [Thread-141232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T04:01:11.591 [INFO] [Thread-141232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T04:01:11.593 [DEBUG] [Thread-141232] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T04:01:11.593 [DEBUG] [Thread-141232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] client lang: <none>
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] server lang: <none>
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] kex follows: False
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T04:01:11.594 [DEBUG] [Thread-141232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T04:01:11.595 [DEBUG] [Thread-141232] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T04:01:11.595 [DEBUG] [Thread-141232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T04:01:11.595 [DEBUG] [Thread-141232] [transport.py] [_log()] Compression: none
2026-02-12T04:01:11.595 [DEBUG] [Thread-141232] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T04:01:11.615 [DEBUG] [Thread-141232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T04:01:11.615 [DEBUG] [Thread-141232] [transport.py] [_log()] Switch to new keys ...
2026-02-12T04:01:11.616 [DEBUG] [Thread-141232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T04:01:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T04:01:11.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T04:01:11.657 [DEBUG] [Thread-141232] [transport.py] [_log()] userauth is OK
2026-02-12T04:01:11.657 [DEBUG] [Thread-141232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T04:01:11.657 [DEBUG] [Thread-141232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T04:01:11.657 [DEBUG] [Thread-141232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T04:01:11.657 [DEBUG] [Thread-141232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T04:01:11.677 [INFO] [Thread-141232] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T04:01:11.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T04:01:12.326 [DEBUG] [Thread-141232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T04:01:12.326 [DEBUG] [Thread-141232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T04:01:12.326 [DEBUG] [Thread-141232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T04:01:12.367 [DEBUG] [Thread-141232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T04:01:12.367 [DEBUG] [Thread-141232] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T04:01:12.371 [DEBUG] [Thread-141232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T04:01:12.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T04:01:12.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T04:01:12.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T04:01:12.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T04:01:12.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T04:01:12.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T04:01:12.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T04:01:12.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T04:01:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-12T04:01:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61083.083810 -999.00  +13.50  17.79     95  +12.80 1 3 1 3 1     0    0 0.26 -20.87 ----- 17.8 17.8 149.2 26.0 14.7 -1.0 14.7 -1.1 14.6 -1.5 14.9 -1.3
2026-02-12T04:01:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-12T04:01:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-12T04:01:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61083.083810
2026-02-12T04:01:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-12T04:01:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-12T04:01:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-12T04:01:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-12T04:01:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-12T04:01:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-12T04:00:58', tmtdew=0.37, humidity=97.43, cloud=0.0, wind=30.0, temperature=13.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-12T01:41:47', seeing=1.5, atlas_timestamp='2026-02-12T02:00:41.184', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, 2.6724999999999994, 2.6310000000000002, nan, nan, nan, nan, nan, 2.944749999999999, 3.0629999999999997, 2.5169999999999995, nan, 2.5279999999999996, nan, nan, nan, nan, nan, 2.201999999999998, 2.436749999999999, nan, nan, nan, nan, nan, nan, nan, 1.5700000000000012, 1.698500000000001, nan, nan], zp_timestamp='2026-02-12T00:04:00')
2026-02-12T04:01:12.396 [DEBUG] [Thread-141232] [transport.py] [_log()] EOF in transport thread
2026-02-12T04:01:12.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-12T04:01:12.491 [DEBUG] [Thread-141235] [transport.py] [_log()] starting thread (client mode): 0xa2d00040
2026-02-12T04:01:12.491 [DEBUG] [Thread-141235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T04:01:12.508 [DEBUG] [Thread-141235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-12T04:01:12.508 [INFO] [Thread-141235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-12T04:01:12.515 [DEBUG] [Thread-141235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T04:01:12.515 [DEBUG] [Thread-141235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] client lang: <none>
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] server lang: <none>
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] kex follows: False
2026-02-12T04:01:12.516 [DEBUG] [Thread-141235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T04:01:12.517 [DEBUG] [Thread-141235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T04:01:12.517 [DEBUG] [Thread-141235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T04:01:12.517 [DEBUG] [Thread-141235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T04:01:12.517 [DEBUG] [Thread-141235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T04:01:12.517 [DEBUG] [Thread-141235] [transport.py] [_log()] Compression: none
2026-02-12T04:01:12.517 [DEBUG] [Thread-141235] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T04:01:12.582 [DEBUG] [Thread-141235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T04:01:12.583 [DEBUG] [Thread-141235] [transport.py] [_log()] Switch to new keys ...
2026-02-12T04:01:12.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-12T04:01:12.585 [DEBUG] [Thread-141235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-12T04:01:12.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T04:01:12.642 [DEBUG] [Thread-141235] [transport.py] [_log()] userauth is OK
2026-02-12T04:01:12.642 [DEBUG] [Thread-141235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T04:01:12.643 [DEBUG] [Thread-141235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T04:01:12.643 [DEBUG] [Thread-141235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-12T04:01:12.643 [DEBUG] [Thread-141235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T04:01:12.672 [INFO] [Thread-141235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T04:01:12.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-12T04:01:12.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T04:01:13.168 [DEBUG] [Thread-141237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:01:13.484 [DEBUG] [Thread-141235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T04:01:13.485 [DEBUG] [Thread-141235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T04:01:13.533 [DEBUG] [Thread-141235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T04:01:13.533 [DEBUG] [Thread-141235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T04:01:13.542 [DEBUG] [Thread-141235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T04:01:13.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T04:01:13.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-12T04:01:13.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-12T04:01:13.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-12T04:01:13.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-12T04:01:13.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T04:01:13.578 [DEBUG] [Thread-141235] [transport.py] [_log()] EOF in transport thread
2026-02-12T04:01:22.566 [DEBUG] [Thread-141238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:01:37.623 [DEBUG] [Thread-141239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-12T04:01:43.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-12T04:01:43.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-12T04:01:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-12T04:01:45.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 12, 4, 1, 33), 0.64, 95.86, 0.0, 27.8, 13.99, 2, 2, 0, 2, 0, 0),)
2026-02-12T04:01:45.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-12 04:01:33
2026-02-12T04:01:45.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-12T04:01:46.014 [DEBUG] [Thread-141240] [transport.py] [_log()] starting thread (client mode): 0xa57429e0
2026-02-12T04:01:46.014 [DEBUG] [Thread-141240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-12T04:01:46.034 [DEBUG] [Thread-141240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-12T04:01:46.034 [INFO] [Thread-141240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] client lang: <none>
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] server lang: <none>
2026-02-12T04:01:46.038 [DEBUG] [Thread-141240] [transport.py] [_log()] kex follows: False
2026-02-12T04:01:46.039 [DEBUG] [Thread-141240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-12T04:01:46.039 [DEBUG] [Thread-141240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-12T04:01:46.039 [DEBUG] [Thread-141240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-12T04:01:46.039 [DEBUG] [Thread-141240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-12T04:01:46.039 [DEBUG] [Thread-141240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-12T04:01:46.039 [DEBUG] [Thread-141240] [transport.py] [_log()] Compression: none
2026-02-12T04:01:46.039 [DEBUG] [Thread-141240] [transport.py] [_log()] === End of kex handshake ===
2026-02-12T04:01:46.059 [DEBUG] [Thread-141240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-12T04:01:46.060 [DEBUG] [Thread-141240] [transport.py] [_log()] Switch to new keys ...
2026-02-12T04:01:46.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-12T04:01:46.061 [DEBUG] [Thread-141240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-12T04:01:46.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-12T04:01:46.063 [DEBUG] [Thread-141240] [transport.py] [_log()] userauth is OK
2026-02-12T04:01:46.063 [DEBUG] [Thread-141240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-12T04:01:46.064 [DEBUG] [Thread-141240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-12T04:01:46.064 [DEBUG] [Thread-141240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-12T04:01:46.064 [DEBUG] [Thread-141240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-12T04:01:46.087 [INFO] [Thread-141240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-12T04:01:46.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-12T04:01:46.712 [DEBUG] [Thread-141240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-12T04:01:46.712 [DEBUG] [Thread-141240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-12T04:01:46.712 [DEBUG] [Thread-141240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-12T04:01:46.753 [DEBUG] [Thread-141240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-12T04:01:46.754 [DEBUG] [Thread-141240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-12T04:01:46.757 [DEBUG] [Thread-141240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-12T04:01:46.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-12T04:01:46.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-12T04:01:46.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-12T04:01:46.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-12T04:01:46.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-12T04:01:46.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-12T04
[file cut: first 33554432 bytes kept]
[document cut: first 32643170 of 33554432 characters kept]
